Реакция бота на атаку моба - проблема!
Добавлено: Чт апр 10, 2008 1:24 am
если кто шарит в програмировании, гляньте возможно ли сделать такое:
А---------С----------В
Бот у нас передвигается отрезками АВ (обычно 10-15 шагов),
допустим бот идет из точки А в точку В, в точке С на него нападает агресив, бот дергается в судорагах но доходит таки до точки В и тока потом врубает интеллект на атаку, что не есть гуд, палевно, неэффетивно, а зачастую и гибельно.
у нас в AI есть блок реагирующий на атаку моба? как сделать данный блок доминантным? то есть если бота ударили во время процедуры route, то идет проверка - дожны ли мы атаковать моба ( сверяемся с монконтрол), если да - то отменяем действие route и начинаем атаковать агра.
При игре без ОК мы кликая допустим на край экрана чтобы туда дойти - туда и идем но если ударил моб то перс приняв удар замирает и ждет указаний- идти или атаковать. Почему же Кора с упорством Александра Матросова пытается пробиться к точке В ( пусть даже на ней 10 мобов повиснут, ей на это пофигу).
кора версии 206SVN6260. вроде такого не было раньше, у нас поменялся AI?
ЗЫ это не к теме "выбигание из толпы", это совсем другая проблема, хотя решив ее можно частично решить и "выбегание".
Добавлено спустя 20 минут 29 секунд:
вобчем частично решил по своему-
1-ое использовал идею с этого форума(не помню когда и в какой теме ее написал один товарищ, спасибки ему), цитирую:
"Что и где надо изменить
(речь идет об OpenKore what-will-become-2.0.4 (SVN version), про другие ничего сказать не могу к сожалению)
1) открываем src/AI/Attack.pm
Находим там функцию sub finishAttacking { и в самом конце ее дописываем строчку Код:
$timeout{'ai_attack_auto'}{'time'} -= $timeout{'ai_attack_auto'}{'timeout'} + 1;
Итого концовка будет выглядеть след. образом: Код:
} else {
message T("Target lost\n"), "ai_attack";
}
$timeout{'ai_attack_auto'}{'time'} -= $timeout{'ai_attack_auto'}{'timeout'} + 1;
}
Этим самым мы сбросим таймаут для функции processAutoAttack, чтобы он сработала пре следующем же ее вызове.
2) Теперь нужно добиться, чтобы processAutoAttack в общем цикле была вызвана как можно раньше, чтобы бот "не успел озадачиться" чем-то другим, типа передвижения ...
Для этого открываем src/AI/CoreLogic.pm и вносим следующие изменения:
а) находим строчку processLook(); и перед ней вставляем следующий код: Код:
if ($AI == 2) {
processAutoAttack();
}
б) теперь мотаем ниже и находим старый вызов этой же функции processAutoAttack(); и просто комментируем его или удаляем.
"
2-ое поставил в конфиге:
doCommand move stop {
onAction route
notOnAction attack
aggressives > 0
timeout 1
disabled 0
}
бот стал более адекватен, не идеален конечно но уже чтото. Потестите если кому не в лом.
А---------С----------В
Бот у нас передвигается отрезками АВ (обычно 10-15 шагов),
допустим бот идет из точки А в точку В, в точке С на него нападает агресив, бот дергается в судорагах но доходит таки до точки В и тока потом врубает интеллект на атаку, что не есть гуд, палевно, неэффетивно, а зачастую и гибельно.
у нас в AI есть блок реагирующий на атаку моба? как сделать данный блок доминантным? то есть если бота ударили во время процедуры route, то идет проверка - дожны ли мы атаковать моба ( сверяемся с монконтрол), если да - то отменяем действие route и начинаем атаковать агра.
При игре без ОК мы кликая допустим на край экрана чтобы туда дойти - туда и идем но если ударил моб то перс приняв удар замирает и ждет указаний- идти или атаковать. Почему же Кора с упорством Александра Матросова пытается пробиться к точке В ( пусть даже на ней 10 мобов повиснут, ей на это пофигу).
кора версии 206SVN6260. вроде такого не было раньше, у нас поменялся AI?
ЗЫ это не к теме "выбигание из толпы", это совсем другая проблема, хотя решив ее можно частично решить и "выбегание".
Добавлено спустя 20 минут 29 секунд:
вобчем частично решил по своему-
1-ое использовал идею с этого форума(не помню когда и в какой теме ее написал один товарищ, спасибки ему), цитирую:
"Что и где надо изменить
(речь идет об OpenKore what-will-become-2.0.4 (SVN version), про другие ничего сказать не могу к сожалению)
1) открываем src/AI/Attack.pm
Находим там функцию sub finishAttacking { и в самом конце ее дописываем строчку Код:
$timeout{'ai_attack_auto'}{'time'} -= $timeout{'ai_attack_auto'}{'timeout'} + 1;
Итого концовка будет выглядеть след. образом: Код:
} else {
message T("Target lost\n"), "ai_attack";
}
$timeout{'ai_attack_auto'}{'time'} -= $timeout{'ai_attack_auto'}{'timeout'} + 1;
}
Этим самым мы сбросим таймаут для функции processAutoAttack, чтобы он сработала пре следующем же ее вызове.
2) Теперь нужно добиться, чтобы processAutoAttack в общем цикле была вызвана как можно раньше, чтобы бот "не успел озадачиться" чем-то другим, типа передвижения ...
Для этого открываем src/AI/CoreLogic.pm и вносим следующие изменения:
а) находим строчку processLook(); и перед ней вставляем следующий код: Код:
if ($AI == 2) {
processAutoAttack();
}
б) теперь мотаем ниже и находим старый вызов этой же функции processAutoAttack(); и просто комментируем его или удаляем.
"
2-ое поставил в конфиге:
doCommand move stop {
onAction route
notOnAction attack
aggressives > 0
timeout 1
disabled 0
}
бот стал более адекватен, не идеален конечно но уже чтото. Потестите если кому не в лом.