Пауза перед teleport_Auto atkCount.

Разработка новых функций.

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

Бадум
Энтузиаст
Сообщения: 149
Зарегистрирован: Сб фев 10, 2007 12:51 am

Пауза перед teleport_Auto atkCount.

Сообщение Бадум »

Проблемка есть одна.
Качается бот телесёрчем, используя рейндж one-shot-kill атаку на мобов. Делается это для достижения максимально возможной скорости кача на этой локации. Ну там телепорты по 3 раза в секундуи тп, выжимается каждая секунда, которая стоит еще сотню-две тысяч опыта в час.
В моем случае атака срабатывает не всегда, но повторная попытка занимает большое время (4 секунды). Поэтому я ограничил кол-во попыток до того, как бот бросает цель и улетает искать другую.
Ограничил с помощью опции teleport_Auto atkCount.
Допустим поставил 3. И очень часто получается, что нанося третий удар по мобу (речь идет о пристовском скилле ТУ, у него шанс успеха 30% примерно), бот мнгновенно вингается. И в итоге не получает никакой экспы в случае успешного срабатывания ТУ. Так как он улетает раньше, чем моб умирает, хотя успевает заметить какой урон был нанесен. Я так прикинул - это довольно значительная доля экспы. ПРоцентов эдак 30.
напомню, речь идет о teleport_Auto atkCount 3. Когда ставил 10, скорость кача заметно снижалась. В случае череды неудач бот начинает подол
Единственным решением проблемы мне представляется добавление паузы после нанесения последнего удара из teleport_Auto atkCount, то есть в моем случае после третьего. Дабы засечь момент смерти моба, получить крупицу опыта и со спокойной душой удалиться 8)
Поможите чем можите, пожалуйста. Я даж выплачу 5кк, если ваш сервер совпадет с моим :crazy:

ПС
Поместил в раздел идеи намерянно, так как решение проблемы является довольно приятной фишкой для коры, и ее было бы неплохо добавить в сборку)
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

В src\Misc.pm находишь такой код:

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

			if ($config{teleportAuto_atkCount} && $monster->{numAtkFromYou} >= $config{teleportAuto_atkCount}) {
				message TF("Teleporting after attacking a monster %d times\n", $config{teleportAuto_atkCount}), "teleport";
				useTeleport(1);
			}
И меняешь на такой:

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

			if ($config{teleportAuto_atkCount} && $monster->{numAtkFromYou} >= $config{teleportAuto_atkCount}) {
				if (!$timeout{ai_teleport_atkc}{time}) {
					message TF("Teleporting after attacking a monster %d times delayed for %d sec\n", $config{teleportAuto_atkCount},$timeout{ai_teleport_atkc}{timeout}), "teleport";								
					$timeout{ai_teleport_atkc}{time} = time;}
				if (timeOut($timeout{ai_teleport_atkc})) {
					message TF("Teleporting after attacking a monster %d times\n", $config{teleportAuto_atkCount}), "teleport";
					useTeleport(1);
                                        $timeout{ai_teleport_atkc}{time} = 0;
				}
			}
В файле timeouts.txt в папке с конфигом бота вносишь
ai_teleport_atkc 1

где 1 - желаемая задержка в сек.

Пробуй, о результатах сообщай.
Бадум
Энтузиаст
Сообщения: 149
Зарегистрирован: Сб фев 10, 2007 12:51 am

Сообщение Бадум »

Отчет:

Поставил atckCount 2 , паузу на 1 сек.
Если ТУ срабатывает со второго раза, появляется надпись.

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

Teleporting after attacking a monster 2 times delayed for 1 sec
Проходит секунды 3, он улетает :)
Если ТУ не срабатывает на 2й раз, то опять появляется

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

Teleporting after attacking a monster 2 times delayed for 1 sec
Но вопреки словам своим, бот ретироваться не собирается. Он начинает 3е ТУ кастовать. И как только он его докастует, и вылетит урон (любой), бот моментом улетает.
При этом появляется надпись

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

Teleporting after attacking a monster [b]2 times[/b]
В итоге опять же не получает никакой экспы, в случае удачного срабатывания. [/code][/quote]
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

Бадум писал(а):Если ТУ не срабатывает на 2й раз, то опять появляется

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

Teleporting after attacking a monster 2 times delayed for 1 sec
Но вопреки словам своим, бот ретироваться не собирается. Он начинает 3е ТУ кастовать.
Как бы не так, он именно собирается улетать, но не моментально, а через 1 с. Но в это время он начинает кастовать 3е ТУ - и улететь не может в этот момент! Поэтому улетает сразу после него. Скажем так, его намеренье улететь не влияет на то что он продолжает атаковать!
Можно конечно принудительно остановить атаку при срабатывании этого блока, но ИМХО, это надо делать в условиях использования скилла.

Можно попробовать поиграть с задержкой - поставить не 1 с а 0.5 или 0.25, но лучше описать - что хочется получить в итоге:
сколько раз кастовать ТУ на моба надо 3 или 2?
что делать после последнего каста ТУ - прекращать атаковать и улетать?
Бадум
Энтузиаст
Сообщения: 149
Зарегистрирован: Сб фев 10, 2007 12:51 am

Сообщение Бадум »

Теперь понял почему он 3 попытки делал :oops:
Задержку я изначально поставил 0.5, только потом 1 сек. Разницы никакой. Если не ошибаюсь, то он "0,5" до единицы округлил. Во всяком случае, мне сейчас кажется что в консоль он выводил всеравно "делэй 1 сек". Щас проверю после написания поста
Что хочется? :)
Хочется найти оптимальное кол-во попыток ТУ для максимальной скорости кача, ну и оптимизировать кач следующим образом: (Учитывая шанс срабатывания - думаю это будет число 2)
После последнего каста ТУ наверно стоит выжидать полсекунды, не больше, останавливать атаку и улетать искать мобов. Думаю этого времени должно хватит на получение экспы в случае успешного убийства моба.
ПС
Щас попробую в блоке ТУ МахЮсес поставить тоже 2, и паузу на переход в idle увеличить. Он по идее атаку будет останавливать...
Вроде должно помочь
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

Бадум писал(а):После последнего каста ТУ наверно стоит выжидать полсекунды, не больше, останавливать атаку и улетать искать мобов. Думаю этого времени должно хватит на получение экспы в случае успешного убийства моба.
Хм, значит: ставить
atkCount 2
ai_teleport_atkc 0.5

в блоке attackSkillSlot ставить
maxAttempts 2
что бы он не пытался сделать ТУ 3ий раз.
Видимо так.
Бадум
Энтузиаст
Сообщения: 149
Зарегистрирован: Сб фев 10, 2007 12:51 am

Сообщение Бадум »

Выставил все как выше.
Паузу на 1 сек.
Ведет себя неоднозначно. То улетает моментально после 2го ТУ с надписью

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

Teleporting after attacking a monster 2 times
(без надписи "делей 1 сек")

То телепортится сразу после нанесения 2го удара (секунду он не выжидает точно)

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

Teleporting after attacking a monster 2 times delayed for 1 sec
А то и вовсе не телепортится, хотя надпись появляется :)
Потом выжидает некоторое время (у меня 5 секунд) и дропает таргет, и варпается уже от этого
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

После некоторых размышлений, стало ясно, что изменением только одной процедуры тут не обойтись, так как срабатывает она только при нанесении удара мобу. Т.е. телепорт будет только после следущей атаки.

Можно слегка усложнить схему телепорта, и сделать так:

Misc.pm - sub updateDamageTables

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

			if ($config{teleportAuto_atkCount} && $monster->{numAtkFromYou} >= $config{teleportAuto_atkCount}) {
                                message TF("Teleporting after attacking a monster %d times delayed for %.3f sec\n", $config{teleportAuto_atkCount},$timeout{ai_teleport_atkc}{timeout}), "teleport";								
					if (AI::action eq "attack") {
					  stopAttack();
					  AI::dequeue();
					}
				ai_clientSuspend(0,$timeout{ai_teleport_atkc}{timeout});
				$timeout{ai_teleport_atkc}{time} = time;
			}
AI\CoreLogic.pm
##### AUTO-TELEPORT #####
sub processAutoTeleport
после

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

	$timeout{ai_teleport_portal}{time} = time;
	 }
в конец добавить

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

	if ($config{teleportAuto_atkCount} && $timeout{ai_teleport_atkc}{time} && timeOut($timeout{ai_teleport_atkc})) {
		message TF("Teleporting after attacking a monster %d times\n", $config{teleportAuto_atkCount}), "teleport";
                $timeout{ai_teleport_atkc}{time} = 0;
		useTeleport(1);
	}
Бадум
Энтузиаст
Сообщения: 149
Зарегистрирован: Сб фев 10, 2007 12:51 am

Сообщение Бадум »

У меня в файле AI\CoreLogic.pm в разделе
##### AUTO-TELEPORT #####
sub processAutoTeleport
Нету строки

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

$timeout{ai_teleport_portal}{time} = time; 
    }
Версия коры 206SVN6317
ПС
Такой строки вообще нету в файле
ППС
НЕсмотря на то что строки такой нет, ят упо этот блок в CoreLogic.pm пихнул :D
Заработало как я хотел =)
Выжидает теперь паузу в 1 секунду и улетает :Yahoo!:
Спасибо огромное.
Правда пауза всеравно 1 секунда (хотя теперь пишет делей 1.000 сек). Хотя в таймаутс стоит 0.5. Типа округляет
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

Поздравляю!

Насчет пихнул - звучит страшно, куда хоть, напиши ) а то потом вдруг глюки вылезут )

Должна быть строка! где то № 2921
$timeout{ai_teleport_portal}{time} = time;
после нее - скобка }

и... у меня не округляет...
напиши в консоли :

timeout ai_teleport_atkc 0.5
Бадум
Энтузиаст
Сообщения: 149
Зарегистрирован: Сб фев 10, 2007 12:51 am

Сообщение Бадум »

Нашел строку =)
Она в разделе
##### TELEPORT IDLE / PORTAL #####
Но твой код я пихнул в конец раздела
##### AUTO-TELEPORT #####
Округляет всеравно, хотя это не так важно.
В итоге получился прирост в 100к экспы :D
Проблема в локации. Когда это будут анубисы, ну или если бы это было ГД гефа, то прирост был бы гораздо более существенный.
Например в ГД гефа можно было бы бить призраков практически не получая урона, при этом получая экспу изза твоего кода.
Если без этого кода поставить туды приста, то скорость кача не поднимется выше 1,5кк в час. Руками там делается 3кк в час++, так как человек кидает одно ТУ и сразу улетает, но тем не менее при успехе опыт получает. А вот бот в случае чего улетает до того, как получает экспу. Полагаю на анубисах будет тоже самое
Ответить