Страница 2 из 2
Добавлено: Сб янв 27, 2007 3:11 pm
DInvalid
if (vectorToDegree(\%vec)) {
my $direction = int sprintf("%.0f", (360 - vectorToDegree(\%vec)) / 45);
$char->{look}{body} = $direction &0x07;
$char->{look}{head} = 0;
}
Добавлено: Сб янв 27, 2007 3:41 pm
Click
$direction &0x07; а помоему зря пусть он 8 принимает
Добавлено: Сб янв 27, 2007 3:55 pm
Click
остался маленький баг: теперь редко $char->{look}{body} принимает север, пример:
посылаем на северо запад, он идёт сначала $char->{look}{body} = 1,
потом выравнивается и идёт вверх на север, но $char->{look}{body} так и остаётся 1. можно визуально в wx на карте увидеть.
PS "V" мона заменить на $t
Добавлено: Сб янв 27, 2007 3:58 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 не может быть.
Добавлено: Сб янв 27, 2007 4:15 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);
Добавлено: Сб янв 27, 2007 11:08 pm
Click
DInvalid писал(а):$direction & 0x07;
это всёравно считаю не правильно, так как 8 есть, а ты его просто игноришь
Лучше если восемь, то делать его нулём.
DInvalid писал(а):
нельзя присваивать переменной отвечающей за поворот туловища чара значение хз где, а именно в мапвьювере, иначе будут глюки при взаимодействии с другими командами изменяющими угол поворота.
это я знаю но пока не не подправят ресив думаю лучше, это уж в wx сделать ИМХО.
Добавлено: Сб янв 27, 2007 11:51 pm
DInvalid
Click писал(а):DInvalid писал(а):$direction & 0x07;
это всёравно считаю не правильно, так как 8 есть, а ты его просто игноришь
Лучше если восемь, то делать его нулём.
Мде... Это правильно! Это и делает его нулем!
0x08 and 0x07 = 0000 1000 and 0000 0111 = 0
Добавлено: Вс янв 28, 2007 2:08 am
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;
+ }
Пирожок, КМ я думаю, что это нужно добавить в кору
протестил всё четко работает.
Добавлено: Вс янв 28, 2007 12:00 pm
piroJOKE
Имхо вы проделали отличную работу. Почему бы вам просто не опубликовать это на форуме разработчегов OpenKore?
Добавлено: Вс янв 28, 2007 12:25 pm
Click
ну не знаю я английский, да и работа в основном DInvalid, я тока тестил
А можешь ссылочку дать где выкладывают подобное?
Добавлено: Вс янв 28, 2007 1:07 pm
piroJOKE
Добавлено: Вс янв 28, 2007 11:14 pm
piroJOKE
Ну я там тоже какой то фигни понаписывал, в том топике, что ты, Click, создал...
http://forums.openkore.com/viewtopic.php?t=28230
Добавлено: Вс янв 28, 2007 11:31 pm
Click
аха, а то я почти нифига не понимаю по английски кроме операторов)
Добавлено: Пн янв 29, 2007 1:26 am
piroJOKE
Оффтоп.
Click
Да я тоже английский не особо. Я короче щас тебе секретную методику расскажу.
Берешь пишешь текст, запихиваешь в автоматический переводчег.
Потом то что он напереводил, запихиваешь ему обратно, и читаешь по-русски чо получилось.
Если это нечто вообще понять можно - публикуемся. Вот такая метода!

Добавлено: Вт янв 30, 2007 5:43 pm
Click
пофиксили)