Гайд по написанию скриптов для гомункулусов
-
Интересует такой вопрос: у меня стоит Rampage AI rc6 - ничего в нем не правил - т.к. разбиратся долго и тяжело поэтому спрашиваю мэтров - что в нем поправить чтобы хом (ванилька) при начале атаки сразу же сплавлял все СП на болты и как только у него скопится сп во время боя с мобом он сразу же бил болтом на все что есть?) ато чот он у меня постоянно с полным СП ходит, и всегда умирает)
Примерно такая же проблема в Мираи 1.2.2, ванилька сначала подбегает к мобу, начинает бить и только после этого кидает болты, хотелось бы, чтоб вначале кинула хотя бы один болт а только после этого бежала к мобу.
-
sepulka... В файле HomunConfig.lua попробуй изменить "BOLTS_ON_CHASE_ST=false" на "BOLTS_ON_CHASE_ST=true"...)
-
@"Йокко":
sepulka... В файле HomunConfig.lua попробуй изменить "BOLTS_ON_CHASE_ST=false" на "BOLTS_ON_CHASE_ST=true"...)
что-то вы видно мне не для того аи совет даете мне для MirAI надо -
Это для MirAi, просто с добавкой для мерков...) Но всё равно - не то... Ога...))) Скорее всего у Тебя в Config.lua LONG_RANGE_SHOOTER=false... Соответственно надо true...)
у меня лифка и Azzi правленый, вот и ошибаюсь... ^___^ -
ага, ну примерно то, что надо ) конечно хотелось бы, чтоб кинул один болт а потом несся к цели, но и так пойдет) спасибо.
UPD. сменила на аззи аи и успокоилась, там как раз есть skill wile chasing, правда все никак не вспомню, чего я с него перешла на мираи...
UPD. 2 как в аззи настроить , чтоб он не пробовал кастовать, если у него на это сп не хватает? -
sepulka... Теперь сразу уточнюсь насчёт версии...) Я использую Аззи 1.30 без ГУИ отсюда
http://forums.irowiki.org/showpost.php?p=423503&postcount=1
С правкой, как советовал Зено.... (ну... не совсем то, что советовал Зено... ^-^)
В файле AzzyUtil.luafunction IsPlayer(id)
if (id>2000000) and (id<11000000) then
return 1
else
return 0
end
endТак вот, лифка скиллами, естественно не спамит, но мерк даблить без СП не пытается...)
-
хм, пока спрашивала, оно само перестало... магея.
на всякий случай обновлю) -
в общем в аззи аи у меня постоянно в чат лезут no enough sp, есть идеи как от этого избавиться?
-
sepulka... Я старательно проверил скрипт на проверки СП, ошибок не нашёл... ) Запустил тестовый сервер, поставил стандартный скрипт, создал ванильку и минут 15 побил им металингов... Надписи о нехватке СП не наблюдал...) Когда кончалось СП, он шёл в рукопашную...) Думаю, что Ты что-то наколдовала с конфигурацией или при копировании скрипта что-то не добила от предыдущего...) Или у каких-то мобов есть скил похищения СП...) (кого, кстати, Ты бьёшь???) Как говорится - "магея"...))) Попробуй UseAutoSkill_MinSP=1, потом 10, потом 30...)
-
очень бы хотелось узнать в чём разница между обычной атакой гома и "танцующей" у меня ванил.
-
megar, где-то тут это уже было, но не нашла.
Суть в том, что обычная атака имеет задержку между ударами на анимацию (аспд). Танцующая атака - это использование высокой скорости обработки AI хомяка с целью убрать данную задержку на анимацию другой командой. Клиент отправляет на сервер команды вида атаковать - перейти в другую клетку - перейти в изначальную клетку - атаковать. Т.к. скрипт выполняется быстро, команды на сервер отправляются быстро (быстрее, чем хомяк успевает физически сдвинуться на другую клетку). Сервер их обрабатывает, сбрасывая задержку на анимацию. В некотором роде можно провести аналогию с чейнингом скиллов (соники, вулканы и т.п.) - принцип примерно тот же.
Это была теория. Практика - выше скорость атаки хомяка, но выключается реген хп и сп. -
Реген не отключается. Впрочем повышение скорости атаки на нашем эмуле так же не потверждено (но и не опровергнуто).
-
Если я что-то смыслю в механике, то должен отключаться. Или замедляться.
Подтверждением займусь сама... когда отосплюсь х_х -
Aiko Star, должен отключаться полностью, но у нас это видимо не введено. Не заметил у моей ванили разницы в скорости регена.
-
как сделать так чтоб ванилка атаковал магией до упора а не только один раз?
Стоит рэмпедж. Агрит магией моментально но потом только кусает((( -
LisandreL
Скачал твои настройки для танцующей атаки , да скорость атаки повыше (думаю будет особенно заметно на больших лвл ,при большом атак спиде),но есть и минусы.
Например реньше он сходу кастовал как подходил теперь непонятно когда каст кинет,правда если начнёт то не остановиться пока СП не кончиться. И ещо он напрач отказыватся атаковать чужих мобов,даже принудительно ничего не выдаёт по мобам.
Ну а вообще конечно респект за скирипт :good: и за то что написал не поленился и выложил на растрзание таким дуракам как я,которые будут вечно чем то недовольны и винить автора. А ведь могбы просто забить и всё...
Разницы в регене СП не заметил.
В идеале хотелось бы достать где нибудь скрипты что бы сказу при виде моба кидал каст. -
@"megar":
Ну а вообще конечно респект за скирипт :good: и за то что написал не поленился и выложил на растрзание таким дуракам как я,которые будут вечно чем то недовольны и винить автора. А ведь могбы просто забить и всё...Спасибо, конечно, на добром слове, но это не я писал:-- Fast attack Mod by Des, aka Zenia-chanМой вариант вылядит так:[code:j72lblfg]function ModInit()
StdOnATTACK_ST = OnATTACK_ST
OnATTACK_ST = FastOnATTACK_ST
end
function FastOnATTACK_ST()
local ex, ey = GetV(V_POSITION, MyEnemy)
local mx, my = GetV(V_POSITION, MyID)
if ((ey + 1) == my) then
Move(MyID,ex,ey-1)
else
Move(MyID,ex,ey+1)
end
StdOnATTACK_ST ()
end[/code:j72lblfg]@"megar":
В идеале хотелось бы достать где нибудь скрипты что бы сказу при виде моба кидал каст.Rampage AI, нэ? -
Покурила наконец-то.
Класс.
Научила ванила автохиляться, когда хп неполные (мелочь, 2.5 строчки, а приятно), осталось научить, когда почти полные хп и сп и делать нечего, леших грызть по одному x) И можно будет уже афкать (пока что всё то же самое тупо вручную делаю, заглядывая время от времени).В рамках подгонки под суровые условия Московии, 55 уровень :pardon:
upd: Я это сделала XD
-
И если кому-нибудь вдруг пригодится.
Знаю, что корявенько, но надо-то оно, пока хом относительно маленький, так ведь? А делать влом. Я себя еле заставила.На базе МирАи, правда. Им, вроде бы, сейчас не очень пользуются? И ещё - не уверена, что после указанных изменений будет корректно работать config.exe. На всякий советую перед экспериментами заархивировать папочку, чтобы потом можно было спокойно всё спасти. Может быть, в каком-нибудь Rampage Ai такие настройки и так есть.
Другими словами, as is, пригодится - хорошо, нет - так нет ^^
Итак...
Вносим интересующих мобов обычным способом. Через конфиг или вручную.
Далее вручную вносим следующие изменения в файлы:Атака с полными хп и сп.
(добавляем строчку в const.lua, которая будет характеризовать новое поведение)
@"const.lua":
BEHA_avoid = 0 -- Escape everytime and don't even help the ownerBEHA_coward = 1 -- Escape when hit, but come to help the owner
BEHA_react_1st = 2 -- Defend only (highest priority) or cooperate
BEHA_react = 3 -- Defend only (medium priority) or cooperate
BEHA_react_last = 4 -- Defend only (low priority) or cooperate
BEHA_attack_1st = 5 -- Aggressive (when HPs are OK), highest priority
BEHA_attack = 6 -- Aggressive (when HPs are OK), medium priority
BEHA_attack_last = 7 -- Aggressive (when HPs are OK), low priority
BEHA_attack_weak = 8 -- Aggressive (weak monster: ignore his attacks), low priority
BEHA_attack_full = 9 -- Agressive, attacks with full hp and sp
Комментарий: наша цель, чтобы хом атаковал именно данный тип "особо сильных" мобов, только будучи как следует живым и здоровым, хотя мелочь мог бы грызть хоть в полудохлом состоянии.(добавляем в config.lua новые управляющие параметры)
@"config.lua":
--------------------------------------------------
-- My Modifiers
--------------------------------------------------
FULL_HP = 700 -- if HP>=MaxHP-FULL_HP then it counts as full
FULL_SP = 40 -- if SP>=MaxSP-FULL_SP then it counts as full
Комментарий:
FULL_HP - если хп хома меньше максимального не более, чем на указанное значение, он будет считать себя достаточно здоровым для атаки на "особо сильного" моба.
FULL_SP - аналогично, но для сп.
Эти параметры можно менять, конечно же.(изменяем поведение для "особо сильных" мобов на созданное нами)
@"config.lua":
Tact[1880] = {"Leshij", BEHA_attack_full, WITH_full_power, 5, 0}(осталось прописать собственно свойства этого поведения в ai.lua. Делаем это в функции "GetMyEnemy_AnyNoKS")
@"ai.lua":
local result = 0
local actors = GetActors ()
local players = {}
local player_idx = 1
local enemy_1st = {} -- primary targets
local index_1st = 1
local enemy_std = {} -- normal targets
local index_std = 1
local enemy_lss = {} -- last targets
local index_lss = 1
local mob_type, mob_target, mobBehav, ListedType
local EnemyMaxHP
local HomunMaxHP = GetV(V_MAXHP, MyID)
local HomunHP = GetV(V_HP, MyID)
local HomunMaxSP = GetV(V_MAXSP, MyID)
local HomunSP = GetV(V_SP, MyID)
Комментарий: задаём используемые переменные.@"ai.lua":
for i,v in ipairs(actors) do
if (v ~= OwnerID) and (v ~= MyID) then -- owner and homunculus aren't valid target, of course
if (IsMonster(v) == 1) and (BlockedPathToEnemyID ~= v) then -- if target is a (reachable) monsterlocal isOKToAttack = false mob_type = GetV(V_HOMUNTYPE, v) -- get tact data mobBehav = GetTact(V_TACTBEHAV, mob_type) %(#FF0000)[-- My!!! Special behavior]
if (mobBehav == BEHA_attack_full) then
if (HomunHP<HomunMaxHP-FULL_HP)
or (HomunSP<HomunMaxSP-FULL_SP) then
mobBehav = BEHA_react
else
mobBehav = BEHA_attack_last
end
endif( (mobBehav == BEHA_attack_1st) or (mobBehav == BEHA_attack) or (mobBehav == BEHA_attack_last) or (mobBehav == BEHA_attack_weak)
Комментарий: здесь мы проверяем: если хому установлено поведение для данного моба, как "атаковать только здоровым", то
- Если хом полон сил, то помечаем моба равносильным мобам "attack_last" (атаковать в последнюю очередь).
- Если хому нездоровится, то моб помечается равносильным мобам "react" (атаковать если атакован или помогая хозяину).
Всё.
С автохилом проще.
В config.lua дописывается строчка:@"config.lua":
-- My Modifiers
FULL_HP = 700 -- if HP>=MaxHP-FULL_HP then it counts as full
FULL_SP = 40 -- if SP>=MaxSP-FULL_SP then it counts as full
AUTOHEAL_HP = 700 -- if HP<MaxHP-FULL_HP then tries to autoheal
Комментарий: хом будет пытаться хиляться, если хп меньше максимума на указанную величину или более.И в функцию ai.lua OnIDLE_ST():
@"ai.lua":
local HomunHP = GetV(V_HP, MyID)
local HomunMaxHP = GetV(V_MAXHP, MyID)
local HomunHPPerc = (HomunHP / HomunMaxHP) * 100
local HomunSP = GetV(V_SP, MyID)
local HomunMaxSP = GetV(V_MAXSP, MyID)
OwnerMotion = GetV(V_MOTION, OwnerID)%(#FF0000)[-- My!!! AutoHeal]
if (HomunHP < HomunMaxHP - AUTOHEAL_HP) and (HomunSP > 41) then
SkillObject(MyID, 5, 8014, MyID)
endКомментарий: тут по-хорошему нужно бы ещё проверить, что мы ваниль ^^' Ну да ладно.
-
Имхо, несколько по-дурацки заданы константы. Во-первых, лучше делать их не абсолютными, а относительными (указывать в процентах, а не в числах). Во-вторых, не проще ли (учитывая "во-первых") не считать разницу, а просто сравнивать текущее хп с константой?
Проверку на ваниль в автохил надо добавить обязательно. Не уверена, но может выдавать ошибки, если другой хомяк.
PS Исправила бы с учетом своих замечаний лично, но очень хочу спать, поэтому креативьте сами х_х