Узнать куда смотрит мой перс? / изменение вгляда при движени

Общие вопросы по OpenKore обсуждаются здесь. Можно сказать, что это - основной раздел форума.
Возник вопрос? Вам сюда.

Модератор: 4epT

Правила форума
Все вопросы по OK не касающиеся плагинов и макросов публикуются в этом разделе.
Перед тем как что то писать, пожалуйста, удостоверьтесь что данная тема не поднималась, вы полностью изучили мануалы по конфигурационным файлам бота и не нашли там решения.
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

if (vectorToDegree(\%vec)) {
my $direction = int sprintf("%.0f", (360 - vectorToDegree(\%vec)) / 45);
$char->{look}{body} = $direction &0x07;
$char->{look}{head} = 0;
}
Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click »

$direction &0x07; а помоему зря пусть он 8 принимает
Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click »

остался маленький баг: теперь редко $char->{look}{body} принимает север, пример:
посылаем на северо запад, он идёт сначала $char->{look}{body} = 1,
потом выравнивается и идёт вверх на север, но $char->{look}{body} так и остаётся 1. можно визуально в wx на карте увидеть.

PS "V" мона заменить на $t
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

Click писал(а):$direction &0x07; а помоему зря пусть он 8 принимает
Направление туловища в sendLook может быть только 0..7

Тем более что 0 и 8 означают одно и то же, "не надо множить сущьностей без необходимости"

См.
sub cmdBangBang {
my $bodydir = $char->{look}{body} - 1;
$bodydir = 7 if ($bodydir == -1);
sendLook($net, $bodydir, $char->{look}{head});
}

Если переходим через 0 то идем на 7...
8 не может быть.
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

Click писал(а):остался маленький баг:
Да, это баг... я не корректно проверил на 0 вектор.

Надо так:

if (defined vectorToDegree(\%vec)) {
my $direction = int sprintf("%.0f", (360 - vectorToDegree(\%vec)) / 45);
$char->{look}{body} = $direction & 0x07;
$char->{look}{head} = 0;
}

Это первый момент, во вторых, нельзя присваивать переменной отвечающей за поворот туловища чара значение хз где, а именно в мапвьювере, иначе будут глюки при взаимодействии с другими командами изменяющими угол поворота.

это надо вставить в обработку события чарактетер_мовед в ресиве, если хочется их иметь правильными.

А для целей просто отрисовки при движении:
не надо ничего никуда записывать, просто вычисли угол как

my %vec;
getVector(\%vec, $char->{pos_to},$char->{pos});
if (defined vectorToDegree(\%vec)) {
$t = vectorToDegree(\%vec); #угол в градусах, по часовой стрелке, 0 вверху.

}

$dc->DrawRotatedText("V", $x+4, $y, $t);
Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click »

DInvalid писал(а):$direction & 0x07;
это всёравно считаю не правильно, так как 8 есть, а ты его просто игноришь
Лучше если восемь, то делать его нулём.
DInvalid писал(а): нельзя присваивать переменной отвечающей за поворот туловища чара значение хз где, а именно в мапвьювере, иначе будут глюки при взаимодействии с другими командами изменяющими угол поворота.
это я знаю но пока не не подправят ресив думаю лучше, это уж в wx сделать ИМХО.
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

Click писал(а):
DInvalid писал(а):$direction & 0x07;
это всёравно считаю не правильно, так как 8 есть, а ты его просто игноришь
Лучше если восемь, то делать его нулём.
Мде... Это правильно! Это и делает его нулем!
0x08 and 0x07 = 0000 1000 and 0000 0111 = 0
Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click »

DInvalid писал(а):в sub character_moves # Recieve.pm
...
my $dist = sprintf("%.1f", distance($char->{pos}, $char->{pos_to}));
debug "You're moving from ($char->{pos}{x}, $char->{pos}{y}) to ($char->{pos_to}{x}, $char->{pos_to}{y}) - distance $dist, unknown $args->{unknown}\n", "parseMsg_move";
$char->{time_move} = time;

# Correct the direction in which we're looking
+ my %vec;
+ getVector(\%vec, $char->{pos_to},$char->{pos});

+ if (defined vectorToDegree(\%vec)) {
+ my $direction = int sprintf("%.0f", (360 - vectorToDegree(\%vec)) / 45);
+ $char->{look}{body} = $direction & 0x07;
+ $char->{look}{head} = 0;
+ }
Пирожок, КМ я думаю, что это нужно добавить в кору
протестил всё четко работает.
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Имхо вы проделали отличную работу. Почему бы вам просто не опубликовать это на форуме разработчегов OpenKore?
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click »

ну не знаю я английский, да и работа в основном DInvalid, я тока тестил
А можешь ссылочку дать где выкладывают подобное?
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

А вот тут: http://forums.openkore.com/viewforum.php?f=6 (Developers Corner)
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Ну я там тоже какой то фигни понаписывал, в том топике, что ты, Click, создал...
http://forums.openkore.com/viewtopic.php?t=28230
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click »

аха, а то я почти нифига не понимаю по английски кроме операторов)
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Оффтоп.

Click
Да я тоже английский не особо. Я короче щас тебе секретную методику расскажу.
Берешь пишешь текст, запихиваешь в автоматический переводчег.
Потом то что он напереводил, запихиваешь ему обратно, и читаешь по-русски чо получилось.
Если это нечто вообще понять можно - публикуемся. Вот такая метода! :Yahoo!:
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click »

пофиксили)
Ответить