Добавлено: Пт фев 22, 2008 9:09 pm
Хм... можно предположить, что в клиенте на самом деле где-то храняцца имена мобов (прямо в exe-шнике?!), а кривые г-да еАзеновцы по умолчанию их не высылают.
Клуб любителей пляски с бубном вокруг OpenKore
https://ro-fan.ru/
Если её значение равно нулю, то приходят пакеты вида(на примере Дропса):// Display some mob info next to their name? (add as needed)
// (does not works on guardian or emperium)
// 1: Display mob HP (Hp/MaxHp format)
// 2: Display mob HP (Percent of full life format)
// 4: Display mob's level
show_mob_info: 0
которые прекрасно обрабатываются, и все нормально.0000 95 00 52 B4 8E 06 44 72 6F 70 73 00 00 00 00 00 ..R...Drops.....
0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..............
Где заголовок пакета, ID, имя моба.0000 95 01 52 B4 8E 06 44 72 6F 70 73 00 00 00 00 00 ..R...Drops.....
0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 48 50 ..............HP
0020 3A 20 35 35 2F 35 35 00 7C 20 00 C9 22 00 00 00 : 55/55.| .."...
0030 00 00 06 00 00 00 00 06 04 00 00 00 88 5C D3 7F .............\..
0040 00 00 00 00 00 00 00 00 FC CE 2F 73 00 00 48 50 ........../s..HP
0050 3A 20 35 35 2F 35 35 00 7C 20 00 C9 22 00 00 00 : 55/55.| .."...
0060 00 00 06 00 00 00 ......
Код: Выделить всё
sub actor_name_received {
my ($self, $args) = @_;
# FIXME: There is more to this packet than just party name and guild name.
# This packet is received when you leave a guild
# (with cryptic party and guild name fields, at least for now)
my $player = $playersList->getByID($args->{ID});
if (defined $player) {
# Receive names of players who are in a guild.
$player->setName(bytesToString($args->{name}));
$player->{party}{name} = bytesToString($args->{partyName});
$player->{guild}{name} = bytesToString($args->{guildName});
$player->{guild}{title} = bytesToString($args->{guildTitle});
updatePlayerNameCache($player);
debug "Player Info: $player->{name} ($player->{binID})\n", "parseMsg_presence", 2;
Plugins::callHook('charNameUpdate', $player);
} else {
debug "Player Info for " . unpack("V", $args->{ID}) .
" (not on screen): " . bytesToString($args->{name}) . "\n",
"parseMsg_presence/remote", 2;
}
+ my $monster = $monstersList->getByID($args->{ID});
+ if ($monster) {
+ my $name = bytesToString($args->{name});
+ debug "Monster Info: $name ($monster->{binID})\n", "parseMsg", 2;
+ $monster->{name_given} = $name;
+ if ($monsters_lut{$monster->{nameID}} eq "") {
+ $monster->setName($name);
+ $monsters_lut{$monster->{nameID}} = $name;
+ +updateMonsterLUT("$Settings::tables_folder/monsters.txt", $monster->{nameID}, $name);
+ }
+ }
}
то вот имена переменных теперь не совсем корректны...'0195' => ['actor_name_received', 'a4 Z24 Z24 Z24 Z24', [qw(ID name partyName guildName guildTitle)]],
я бы выкинул...else {
debug "Player Info for " . unpack("V", $args->{ID}) .
" (not on screen): " . bytesToString($args->{name}) . "\n",
"parseMsg_presence/remote", 2;
}
Добавлено спустя 1 минуту 6 секунд:'0195' => ['actor_name_received', 'a4 Z24 Z24 Z24 Z24', [qw(ID name partyName guildName guildTitle)]],
Нет, всё и так работает. Просто этим пакетом приходит не только инфа о плеерах, но и о мобах, поэтому названия переменных можно было бы поменять на более подходящие(у меня идей нет).piroJOKE писал(а):А разве это место не надо править? -'0195' => ['actor_name_received', 'a4 Z24 Z24 Z24 Z24', [qw(ID name partyName guildName guildTitle)]],
Ну, просто если сравнить описание пакетов:piroJOKE писал(а):А, я понял, это типо Дропс у нас в гильде, в пати? )))) ЛОЛ!
То для моба мы не используем переменные partyName, guildName, guildTitle, хотя в них хранится HP/lvl моба.'0095' => ['actor_info', 'a4 Z24', [qw(ID name)]],'0195' => ['actor_name_received', 'a4 Z24 Z24 Z24 Z24', [qw(ID name partyName guildName guildTitle)]],
Вит! Огромное спасибо!Код: Выделить всё
... updateMonsterLUT(Settings::getTableFilename("monsters.txt"), $monster->{nameID}, $name); } }
Да не должны. Вот первая строчка находит моба по ИД(или 0, если по этому ИД моба нет(т е Плеер или еще что)), а вторая собственно проверяет, нашли ли мы моба...piroJOKE писал(а):Чо-то у мну параноя: надеюсь мы этим работу на оф-серверах не заломаем? >__>
my $monster = $monstersList->getByID($args->{ID});
if ($monster) {
...
}