Страница 4 из 5
Добавлено: Чт сен 18, 2008 6:06 pm
Rumata
а так как я сделал зато визуальнее, бе!
с консоли не всегда удобно смотреть но идея вообче интересная, ты сам сделаешь? я чесно гря даж не думал еще как энто реализовать...
Добавлено: Чт сен 18, 2008 6:12 pm
Click
потом как на выходных, лучше б конечно тот человек, который заварил эту кашу, глядишь ещё один девелопер вырастит

Добавлено: Чт сен 18, 2008 6:38 pm
Rumata
кстати потестил тока что на мвп, бил Допеля - ну просто одно удовольствие видеть по экспа-бару как он дохнет
Добавлено спустя 12 минут 51 секунду:
может все таки сделать как небольшую пристройку к WX'у, допустим отдельный дамаг-бар включающийся кнопкой?
всетаки увеличение функциональности WX - это тока гуд

Добавлено: Чт сен 18, 2008 6:43 pm
Click
после реализации в консоле можно будет задуматься и над этим, так как сразу много вопросов отпадёт
Добавлено: Пт сен 19, 2008 1:45 pm
Rumata
млин наверно не получитьс показывать в консоли для всех мобов, вернее получиься но с глюками:
sub attack_string {
my ($source, $target, $damage, $delay) = @_;
дело в том что $target могут быть одинакове мобы, допустим нас атакуют 3 райдрика и у всех одно и то же ID и соответственно $target у них равны, делаю поиск по приведенному ранее алгоритму - $DmgTo выхватиться для первого в списке райдра и далеко не факт что это будет тот самый которого мы бьем. как их различать ума не приложу

Добавлено: Пт сен 19, 2008 2:46 pm
Click
должны отличаться типа
райдрик(0)
райдрик(5)
Добавлено: Пт сен 19, 2008 4:07 pm
Rumata
такс:
Код: Выделить всё
sub attack_string {
my ($source, $target, $damage, $delay) = @_;
assert(UNIVERSAL::isa($source, 'Actor')) if DEBUG;
assert(UNIVERSAL::isa($target, 'Actor')) if DEBUG;
return TF("%s %s %s - Dmg: %s (delay %s)\n",
$source->nameString,
$source->verb('attack', 'attacks'),
$target->nameString($source),
$damage, $delay);
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# Name ID DmgTo DmgFrom Distance Coordinates
0 Anopheles[Анофелес] 1627 60 93 1 (102, 112)
1 Caramel[Unknown] 1103 0 0 17.2 (116, 121)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
$monster->{binID} $name $monster->{binType} $dmgTo $dmgFrom $dist $pos
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
в sub attack_string нада из
$target, выдрать имя и
binID, затем по binID находим нужного моба на экране (методом перебора), узнаем его имя
$name,
узнаем нанесенный ему дамаг
$dmgTo, затем из moncontrol.txt смотрим по данному мобу есть данный о его ХП
$MaxHP,
если да то выводим в консоль дополнительную переменную
$DamPercent, так?
Добавлено спустя 8 минут 31 секунду:
вопрос -
в
Код: Выделить всё
[ 92/ 80] You attack Monster Anopheles (0) - Dmg: 20 (delay 24.6)
[ 92/ 80] - что это?
и самое главное как разбить $target->nameString($source) на $target->name и $target->binID?
Добавлено: Пт сен 19, 2008 4:07 pm
Click
ну типа
Добавлено: Пт сен 19, 2008 5:47 pm
Rumata
так как разбить $target->nameString($source) на $target->name и $target->binID?

Добавлено: Сб сен 20, 2008 12:26 am
[GM]#05
Сгенерировал табличку "ID Name HP", навсяк, вдруг пригодится >.<
Правда имена мобов eAthena несовсем сходятся с именами OK, например:
1925 Morroc Shadow 120000000 - eAthena
1925 Morroc's Shadow Spirit - OK
Я так понимаю OK использует в качестве разделителей пробелы (все что до первого пробела это ID, все что дальше - это имя), так вот, не будет ли проблемой отделения HP от сложных имен, например:
1925 Morroc Shadow 120000000
Может сделать файл с запятыми?
Update: Сделал ID HP Name
Добавлено: Сб сен 20, 2008 2:10 am
4epT
при разделении мы можем пользоваться регэкспом, а там главное мозги

Добавлено: Вс сен 21, 2008 12:48 am
Rumata
мозги

лана подскажите как правильно написать регулярное выраженик в ПЕРЛе, по идеее надо просто сделать \d от $target->nameString($source), и как это синтаксически правильно написать?
зы вобчем туплю по ночам есть же там же переменные $target->name
и $target->{binID} фррр
Добавлено: Вс сен 21, 2008 3:49 am
Rumata
все просто
Код: Выделить всё
sub attack_string {
my ($source, $target, $damage, $delay) = @_;
assert(UNIVERSAL::isa($source, 'Actor')) if DEBUG;
assert(UNIVERSAL::isa($target, 'Actor')) if DEBUG;
#------------Блок получения $mobXPmax из monsters.txt зная $target->name
my $DamPercent = int($target->{dmgTo} / $mobXPmax * 100);
return TF("%s %s %s %s - Dmg: %s (delay %s)\n",
$source->nameString,
$source->verb('attack', 'attacks'),
$target->nameString($source),
$DamPercent,
$damage, $delay);
}
Добавлено спустя 1 минуту 7 секунд:
кто напишет блок?

Добавлено: Вс сен 21, 2008 10:12 pm
Rumata
я не очень пойму как его писать, нужно ли писать отдельно парсинг monsters.txt? или это можно сделать как то проще?
Добавлено: Пн сен 22, 2008 11:12 pm
Rumata
эх никто не помогает
сделал вобчем упрощенный вариант:
в Misc меняем:
1. полностью sub attack_string -
Код: Выделить всё
sub attack_string {
my ($source, $target, $damage, $delay) = @_;
assert(UNIVERSAL::isa($source, 'Actor')) if DEBUG;
assert(UNIVERSAL::isa($target, 'Actor')) if DEBUG;
my $mobMaxHP = mon_control($target->{name})->{mob_hp};
if ($mobMaxHP > 0) {
my $DamPercent = int($target->{dmgTo} /$mobMaxHP * 100);
return TF("%s %s %s - Dmg: %s [%s] (delay %s)\n",
$source->nameString,
$source->verb('attack', 'attacks'),
$target->nameString($source),
$damage, $DamPercent, $delay);
} else {
return TF("%s %s %s - Dmg: %s (delay %s)\n",
$source->nameString,
$source->verb('attack', 'attacks'),
$target->nameString($source),
$damage, $delay);
}
}
2. в sub skillUse_string меняем это -
Код: Выделить всё
return TF("You use %s on monster %s (%d) %s(delay %s)\n", $skillName,
$target->name, $target->{binID}, $damage, $delay);
на это -
Код: Выделить всё
my $mobMaxHP = mon_control($target->{name})->{mob_hp};
if ($mobMaxHP > 0) {
my $DamPercent = int($target->{dmgTo} /$mobMaxHP * 100);
return TF("You use %s on monster %s (%d) %s [%s] (delay %s)\n", $skillName,
$target->name, $target->{binID}, $damage, $DamPercent, $delay);
} else {
return TF("You use %s on monster %s (%d) %s(delay %s)\n", $skillName,
$target->name, $target->{binID}, $damage, $delay);
}
3. в FileParsers добавляем после строки
строчку:
Теперь чтобы видеть статистику ХП моба в % надо нужным нам мобам прописать максимальное ХП в mon_control таким образом (я ввел 10ый параметр для моба):
Caramel 1 0 0 0 0 0 0 0 0
1424
в итоге в консоли мы видим подобное (в квадратных скобках итоговый нанесенный дамаг в процентах:
Код: Выделить всё
You use Bash (lvl 10) on monster Caramel (0) - Dmg: 936 [65] (delay 26.6)
You attack Monster Caramel (0) - Dmg: 316 [87] (delay 26.6)
You attack Monster Caramel (0) - Dmg: 238 [104] (delay 26.6)
Exp gained: 264/162 (0.00%/0.00%)
Click, как тебе такой вариант? может все таки нада сделать отдельный файл с именем моба и его хп? или дописать 3ий параметр в monsters? в первом случае вроде много файлов коры перековырять, во втором случае вроде проще но не могу найти где парситься monsters, подскажи если не трудно? или так все оставить?