После обновления сервера не определяется статус
Модератор: 4epT
Правила форума
Все вопросы по OK не касающиеся плагинов и макросов публикуются в этом разделе.
Перед тем как что то писать, пожалуйста, удостоверьтесь что данная тема не поднималась, вы полностью изучили мануалы по конфигурационным файлам бота и не нашли там решения.
Все вопросы по OK не касающиеся плагинов и макросов публикуются в этом разделе.
Перед тем как что то писать, пожалуйста, удостоверьтесь что данная тема не поднималась, вы полностью изучили мануалы по конфигурационным файлам бота и не нашли там решения.
- [BMP]
- Энтузиаст
- Сообщения: 90
- Зарегистрирован: Чт дек 25, 2008 5:26 pm
- Сервер RO:: zenyro.ru
- Откуда: Киев
- Контактная информация:
После обновления сервера не определяется статус
После очередного обновления сервера, бот перестал видеть статус игрока.
Единственное что он видит: Owg 50%, Night.
А все остальное - не видит. Подскажите в какую сторону копнуть (точнее в каком именно пакете пересылается статус).
Кора: 206SVN6317 и SVN -r6718
Сервер: WnRO
PS: защита не обновлялась
4epT: ответ тут
Единственное что он видит: Owg 50%, Night.
А все остальное - не видит. Подскажите в какую сторону копнуть (точнее в каком именно пакете пересылается статус).
Кора: 206SVN6317 и SVN -r6718
Сервер: WnRO
PS: защита не обновлялась
4epT: ответ тут
- piroJOKE
- Модератор
- Сообщения: 8205
- Зарегистрирован: Сб ноя 04, 2006 2:20 am
- Сервер RO:: localhost
- Откуда: Molvania
Re: После обновления сервера не определяется статус
Это не та хрень с таймерами, о которой где-то уже тут писали? Типо, в клиенте стало видно, сколько еще статус будет держаться?
- [BMP]
- Энтузиаст
- Сообщения: 90
- Зарегистрирован: Чт дек 25, 2008 5:26 pm
- Сервер RO:: zenyro.ru
- Откуда: Киев
- Контактная информация:
Re: После обновления сервера не определяется статус
Да, именно оно ))piroJOKE писал(а):Это не та хрень с таймерами, о которой где-то уже тут писали? Типо, в клиенте стало видно, сколько еще статус будет держаться?
- prifits
- Грамотный
- Сообщения: 150
- Зарегистрирован: Чт авг 28, 2008 4:03 am
- Сервер RO:: Rro
- Откуда: Москва
- Контактная информация:
Re: После обновления сервера не определяется статус
Таже трабла =)
Полный дифф 2009-10-28 rRO Ragexe v(yu) - By PrIfItS
52 40 00 2C 02 ED 2D 00 00 C3 00 00 00 00 00 00 00 00 00 7C 17 00 00 00 00 00 00 00 00 91 FD D1 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 8D
52 40 00 2C 02 ED 2D 00 00 C3 00 00 00 00 00 00 00 00 00 7C 17 00 00 00 00 00 00 00 00 91 FD D1 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 8D
- [BMP]
- Энтузиаст
- Сообщения: 90
- Зарегистрирован: Чт дек 25, 2008 5:26 pm
- Сервер RO:: zenyro.ru
- Откуда: Киев
- Контактная информация:
Re: После обновления сервера не определяется статус
Короче, вот что я нашел:
для статусов:
используется старый пакет (0196 длинной 9 байт)
Для всех остальных статусов используется повый пакет 0х043F длинной 25 байт
Структура его следующая:
type - 2 байта \
ID - 4байта > как в старом пакете
flag - 1 байт /
tick - 4 байта - время до окончания действия статуса
unknown - 4 байта
unknown - 4 байта
unknown - 4 байта
Пакету 0х0196 соответствует обработчик actor_status_active. Туда же следует поместить и обработку пакета 0х043F (в обработчике ничего менять не надо я так думаю).
Вроде бы все просто, НО... Когда я вставляю строчку:
(в ресивпакетс добавил этот пакет)
То ничего не происходит (( (хотя с помошью ВПЕ я перехватываю этот пакет)
Подскажите где грабля зарыта.
для статусов:
Код: Выделить всё
MAXIMIZEPOWER
RIDINGSI_FALCON
TRICKDEAD
BROKENARMOR
BROKENWEAPON
WEIGHT50
WEIGHT90
TENSIONRELAX
LANDENDOW
AUTOBERSERK
BUMP
READYSTORM
READYDOWN
READYTURN
READYCOUNTER
DODGE
DEVIL
NIGHT
INTRAVISION
Для всех остальных статусов используется повый пакет 0х043F длинной 25 байт
Структура его следующая:
type - 2 байта \
ID - 4байта > как в старом пакете
flag - 1 байт /
tick - 4 байта - время до окончания действия статуса
unknown - 4 байта
unknown - 4 байта
unknown - 4 байта
Пакету 0х0196 соответствует обработчик actor_status_active. Туда же следует поместить и обработку пакета 0х043F (в обработчике ничего менять не надо я так думаю).
Вроде бы все просто, НО... Когда я вставляю строчку:
Код: Выделить всё
$self->{packet_list}{'043F'} = ['actor_status_active', 'v1 a4 C1 a4 a4 a4', [qw(type ID flag tick unknown unknown1)]];
То ничего не происходит (( (хотя с помошью ВПЕ я перехватываю этот пакет)
Подскажите где грабля зарыта.
- prifits
- Грамотный
- Сообщения: 150
- Зарегистрирован: Чт авг 28, 2008 4:03 am
- Сервер RO:: Rro
- Откуда: Москва
- Контактная информация:
Re: После обновления сервера не определяется статус
[BMP] писал(а): пакет 0х043F длинной 25 байт
если судить по packet_db атёны
то 0x043f равен 8 а не 25
Полный дифф 2009-10-28 rRO Ragexe v(yu) - By PrIfItS
52 40 00 2C 02 ED 2D 00 00 C3 00 00 00 00 00 00 00 00 00 7C 17 00 00 00 00 00 00 00 00 91 FD D1 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 8D
52 40 00 2C 02 ED 2D 00 00 C3 00 00 00 00 00 00 00 00 00 7C 17 00 00 00 00 00 00 00 00 91 FD D1 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 8D
- [BMP]
- Энтузиаст
- Сообщения: 90
- Зарегистрирован: Чт дек 25, 2008 5:26 pm
- Сервер RO:: zenyro.ru
- Откуда: Киев
- Контактная информация:
Re: После обновления сервера не определяется статус
prifits писал(а):[BMP] писал(а): пакет 0х043F длинной 25 байт
если судить по packet_db атёны
то 0x043f равен 8 а не 25
//2009-01-14aSakexe
0x043f,19
//2008-09-10aSakexe
0x043f,25
//2008-11-13aSakexe
0x043f,8
+пакстрактор выдал: 043F 25
а вообще я смотрел по другому:
файл src/map/clif.c
Код: Выделить всё
int clif_status_change(struct block_list *bl,int type,int flag,unsigned int tick)
{
unsigned char buf[32];
if (type == SI_BLANK) //It shows nothing on the client...
return 0;
nullpo_retr(0, bl);
if (type == SI_BLANK || type == SI_MAXIMIZEPOWER || type == SI_RIDING ||
type == SI_FALCON || type == SI_TRICKDEAD || type == SI_BROKENARMOR ||
type == SI_BROKENWEAPON || type == SI_WEIGHT50 || type == SI_WEIGHT90 ||
type == SI_TENSIONRELAX || type == SI_LANDENDOW || type == SI_AUTOBERSERK ||
type == SI_BUMP || type == SI_READYSTORM || type == SI_READYDOWN ||
type == SI_READYTURN || type == SI_READYCOUNTER || type == SI_DODGE ||
type == SI_DEVIL || type == SI_NIGHT || type == SI_INTRAVISION)
tick=0;
if( battle_config.display_status_timers && tick>0 )
WBUFW(buf,0)=0x043f;
else
WBUFW(buf,0)=0x0196;
WBUFW(buf,2)=type;
WBUFL(buf,4)=bl->id;
WBUFB(buf,8)=flag; // здесь длинна уже не может быть 8, так как она только что стала равной 9
if( battle_config.display_status_timers && tick>0 )
{
WBUFL(buf,9)=tick; // уже длинна не может быть 8
WBUFL(buf,13)=0;
WBUFL(buf,17)=0;
WBUFL(buf,21)=0; // уже длинна не может быть 19
//Вывод - длинна пакета 25 (вывод сделан из этого и из перехваченого пакета)
}
clif_send(buf,packet_len(WBUFW(buf,0)),bl,AREA);
return 0;
}
Все, вопрос снят )
просто в /src/Network/Receive.pm нужно было заменить функцию:
Код: Выделить всё
sub actor_status_active {
my ($self, $args) = @_;
return unless changeToInGameState();
my ($type, $ID, $flag) = @{$args}{qw(type ID flag)};
my $skillName = (defined($skillsStatus{$type})) ? $skillsStatus{$type} : "Unknown $type";
$args->{skillName} = $skillName;
my $actor = Actor::get($ID);
$args->{actor} = $actor;
my ($name, $is) = getActorNames($ID, 0, 'are', 'is');
if ($flag) {
# Skill activated
my $again = 'now';
if ($actor) {
$again = 'again' if $actor->{statuses}{$skillName};
$actor->{statuses}{$skillName} = 1;
}
if ($char->{party}{users}{$ID}{name}) {
$again = 'again' if $char->{party}{users}{$ID}{statuses}{$skillName};
$char->{party}{users}{$ID}{statuses}{$skillName} = 1;
}
my $disp = status_string($actor, $skillName, $again);
message $disp, "parseMsg_statuslook", $ID eq $accountID ? 1 : 2;
} else {
# Skill de-activated (expired)
delete $actor->{statuses}{$skillName} if $actor;
delete $char->{party}{users}{$ID}{statuses}{$skillName} if ($char->{party}{users}{$ID}{name});
my $disp = status_string($actor, $skillName, 'no longer');
message $disp, "parseMsg_statuslook", $ID eq $accountID ? 1 : 2;
}
}
Код: Выделить всё
sub actor_status_active {
my ($self, $args) = @_;
return unless changeToInGameState();
my ($type, $ID, $flag, $tick, $unknown, $unknown2);
#$type = unpack("v1", $args->{type});
#$ID = unpack("a4", $args->{ID});
#$flag = unpack("C1", $args->{flag});
$type = $args->{type};
$ID = $args->{ID};
$flag = $args->{flag};
if ($type != 46){ #какая-то левая команда, не на что не влияющая (ИМХО: фича )))
my $skillName = (defined($skillsStatus{$type})) ? $skillsStatus{$type} : "Unknown $type";
$args->{skillName} = $skillName;
my $actor = Actor::get($ID);
$args->{actor} = $actor;
my ($name, $is) = getActorNames($ID, 0, 'are', 'is');
if ($flag) {
# Skill activated
my $again = 'now';
if ($actor) {
$again = 'again' if $actor->{statuses}{$skillName};
$actor->{statuses}{$skillName} = 1;
}
if ($char->{party}{users}{$ID}{name}) {
$again = 'again' if $char->{party}{users}{$ID}{statuses}{$skillName};
$char->{party}{users}{$ID}{statuses}{$skillName} = 1;
}
my $disp = status_string($actor, $skillName, $again);
message $disp, "parseMsg_statuslook", $ID eq $accountID ? 1 : 2;
} else {
# Skill de-activated (expired)
delete $actor->{statuses}{$skillName} if $actor;
delete $char->{party}{users}{$ID}{statuses}{$skillName} if ($char->{party}{users}{$ID}{name});
my $disp = status_string($actor, $skillName, 'no longer');
message $disp, "parseMsg_statuslook", $ID eq $accountID ? 1 : 2;
}
}
}
- 4epT
- macro-маньячина
- Сообщения: 2792
- Зарегистрирован: Чт дек 21, 2006 1:23 pm
- Сервер RO:: 4game
- Discord: ya4ept#8494
- Контактная информация:
Re: После обновления сервера не определяется статус
это только для новых "серваков"?? для старых не подойдёт?
а ведь это же можно запихать в новый сервер тип, если уже не запихано...
Добавлено спустя 22 минуты 24 секунды:
у кого есть свн-ка? проверьте:
а ведь это же можно запихать в новый сервер тип, если уже не запихано...
Добавлено спустя 22 минуты 24 секунды:
у кого есть свн-ка? проверьте:
kLabMouse писал(а):"Unknown packet - 043F" -- Значит нездампили.
"eAthena SVN version: 13866" -- 100% СерверТип 22
- 4epT
- macro-маньячина
- Сообщения: 2792
- Зарегистрирован: Чт дек 21, 2006 1:23 pm
- Сервер RO:: 4game
- Discord: ya4ept#8494
- Контактная информация:
Re: После обновления сервера не определяется статус
замени это в своём боте
- Вложения
-
- SVN6699.rar
- (1.94 КБ) 180 скачиваний
- [BMP]
- Энтузиаст
- Сообщения: 90
- Зарегистрирован: Чт дек 25, 2008 5:26 pm
- Сервер RO:: zenyro.ru
- Откуда: Киев
- Контактная информация:
Re: После обновления сервера не определяется статус
На 22-м сервертайпе - вообще не распознаются ни монстры, ни нпс, ни чары )
У меня, по крайней мере.
У меня, по крайней мере.
Re: После обновления сервера не определяется статус
делаю как написано ничо не помогает, не показывает статус.. в чём проблема?
- [BMP]
- Энтузиаст
- Сообщения: 90
- Зарегистрирован: Чт дек 25, 2008 5:26 pm
- Сервер RO:: zenyro.ru
- Откуда: Киев
- Контактная информация:
Re: После обновления сервера не определяется статус
Ставь ServerType 8_5 + В receivepackets.txt добавь строчку: 043F 25klon писал(а):делаю как написано ничо не помогает, не показывает статус.. в чём проблема?
Re: После обновления сервера не определяется статус
пробовал не помогает, точней Unknown packet - 043F больше не вылетает а статус всё равно не показывает
Re: После обновления сервера не определяется статус
22 не хочет даже конектиться
8_5 в последнем рофановском и окшном нету
и чет все выше перечисленное толку не дало статусы не видны
можно конечно все через таймы прописывать но хотелось бы со статусами
8_5 в последнем рофановском и окшном нету
и чет все выше перечисленное толку не дало статусы не видны
можно конечно все через таймы прописывать но хотелось бы со статусами