target_deltaHp - ЗАДАЧКА :(

Дополнения к OpenKore, расширяющиее её функциональность, называются плагинами.

Модератор: 4epT

Rumata
Грамотный
Сообщения: 235
Зарегистрирован: Ср фев 14, 2007 10:52 am

Сообщение Rumata »

а так как я сделал зато визуальнее, бе! :twisted:

с консоли не всегда удобно смотреть но идея вообче интересная, ты сам сделаешь? я чесно гря даж не думал еще как энто реализовать...
Аватара пользователя
Click
Разработчик
Сообщения: 1563
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click »

потом как на выходных, лучше б конечно тот человек, который заварил эту кашу, глядишь ещё один девелопер вырастит :)
Rumata
Грамотный
Сообщения: 235
Зарегистрирован: Ср фев 14, 2007 10:52 am

Сообщение Rumata »

кстати потестил тока что на мвп, бил Допеля - ну просто одно удовольствие видеть по экспа-бару как он дохнет :)

Добавлено спустя 12 минут 51 секунду:

может все таки сделать как небольшую пристройку к WX'у, допустим отдельный дамаг-бар включающийся кнопкой?

всетаки увеличение функциональности WX - это тока гуд :)
Аватара пользователя
Click
Разработчик
Сообщения: 1563
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click »

после реализации в консоле можно будет задуматься и над этим, так как сразу много вопросов отпадёт
Rumata
Грамотный
Сообщения: 235
Зарегистрирован: Ср фев 14, 2007 10:52 am

Сообщение Rumata »

млин наверно не получитьс показывать в консоли для всех мобов, вернее получиься но с глюками:

sub attack_string {
my ($source, $target, $damage, $delay) = @_;

дело в том что $target могут быть одинакове мобы, допустим нас атакуют 3 райдрика и у всех одно и то же ID и соответственно $target у них равны, делаю поиск по приведенному ранее алгоритму - $DmgTo выхватиться для первого в списке райдра и далеко не факт что это будет тот самый которого мы бьем. как их различать ума не приложу :(
Аватара пользователя
Click
Разработчик
Сообщения: 1563
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click »

должны отличаться типа
райдрик(0)
райдрик(5)
Rumata
Грамотный
Сообщения: 235
Зарегистрирован: Ср фев 14, 2007 10:52 am

Сообщение 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?
Аватара пользователя
Click
Разработчик
Сообщения: 1563
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click »

ну типа
Rumata
Грамотный
Сообщения: 235
Зарегистрирован: Ср фев 14, 2007 10:52 am

Сообщение Rumata »

так как разбить $target->nameString($source) на $target->name и $target->binID? :(
Аватара пользователя
[GM]#05
Профессионал
Сообщения: 593
Зарегистрирован: Пт фев 09, 2007 8:44 pm
Сервер RO:: rRO

Сообщение [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
Вложения
monsters.txt
(18.73 КБ) 145 скачиваний
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2795
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Сообщение 4epT »

при разделении мы можем пользоваться регэкспом, а там главное мозги :)
Rumata
Грамотный
Сообщения: 235
Зарегистрирован: Ср фев 14, 2007 10:52 am

Сообщение Rumata »

мозги :)
лана подскажите как правильно написать регулярное выраженик в ПЕРЛе, по идеее надо просто сделать \d от $target->nameString($source), и как это синтаксически правильно написать?

зы вобчем туплю по ночам есть же там же переменные $target->name
и $target->{binID} фррр
Rumata
Грамотный
Сообщения: 235
Зарегистрирован: Ср фев 14, 2007 10:52 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 секунд:

кто напишет блок? :)
Rumata
Грамотный
Сообщения: 235
Зарегистрирован: Ср фев 14, 2007 10:52 am

Сообщение Rumata »

я не очень пойму как его писать, нужно ли писать отдельно парсинг monsters.txt? или это можно сделать как то проще?
Rumata
Грамотный
Сообщения: 235
Зарегистрирован: Ср фев 14, 2007 10:52 am

Сообщение 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, подскажи если не трудно? или так все оставить?
Ответить