Страница 4 из 5

Добавлено: Чт сен 18, 2008 6:06 pm
Rumata
а так как я сделал зато визуальнее, бе! :twisted:

с консоли не всегда удобно смотреть но идея вообче интересная, ты сам сделаешь? я чесно гря даж не думал еще как энто реализовать...

Добавлено: Чт сен 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 добавляем после строки

Код: Выделить всё

$r_hash->{$key}{weight} = $args[8];
строчку:

Код: Выделить всё

$r_hash->{$key}{mob_hp} = $args[9];
Теперь чтобы видеть статистику ХП моба в % надо нужным нам мобам прописать максимальное ХП в 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, подскажи если не трудно? или так все оставить?