Гайд по написанию скриптов для гомункулусов
-
Возможно уже обсуждалось, но еще раз спрошу.
-
язык lua позволяет подключать функции на C++ этот прием возможно использовать при написании Ai?
-
я так понимаю сспомощью V_ констант и функции GetV можно получать данные не доступные через клиент(хп\сп игроков и мобов, определять местонахождение игрока\моба даже если он в хайде\клокинге)?
-
возможен ли вывод инфы в чат\приват?
-
конкретика по RampageAi(его взял за основу своего скрипта) где лучше осуществить проверку "можно ли атаковать моба при определенном хп\сп" ну например <!-- l --><a class="postlink-local" href="http://forum.motronline.com/viewtopic.php?p=1968165#p1968165">viewtopic.php?p=1968165#p1968165</a><!-- l --> тут Зено описал как это реализвать, но непонятно какая именно функция модифицировалась и какой именно рампейдж использован(у меня версия 1.0 rc7 by Nakayama), как я понял из контекста модифицировалась AI_MSkillsAllowed(actor) при внесении изменений гомункуль все арвно атакует даже если значение его хп ниже указанных.
или я туплю где-то?
[code:3l7wjo9p]
-- добавляем параметры которые берутся из "базы мобов" (~\Conf\Monsters.lua)
function VerifyMonSettings(t,defaultTable,id)
-- ....
local argNames = { nil, "prio", "atk", "skLvl", "skDly", "skMax", "aSkLv", "aSkDl","aSkMx", "defOnly", "kite", "ffa", "hlBm", "mammo", "aTer", "aBmb", "atkHP", "atkSP" }
-- .............................................
-- добавляем проверку текущего хп и сп перед атакой(Скиллом?)
function AI_MSkillsAllowed(actor)
-- Check if we're pausing skills for the moment if PauseAttackSkill then -- They're paused return false end -- Get the monster's table local t = MDBTable(actor) -- Check if it's not attaking us if (GetV(V_TARGET,actor) ~= OwnerID) and (GetV(V_TARGET,actor) ~= HomunID) then -- Check if HP or SP is higher than needed if (ActorHPPercent(HomunID) < t[17]) or (ActorSPAmount(HomunID) < t[18]) then return false end end -- Check if level is greater than 0 and we haven't casted too often -- against them if t[4] > 0 and MSkillMaxCasts(actor) > ActorData[actor].Count.HomuSkill then return true end -- If the value isn't greater than 0, disable skill usage return false
end
-- .............................................................
в файле Monsters.lua меняем
DefaultMonsterSettings = { nil, prio=1, atk=true, skLvl=5, skDly=500, skMax=-1, aSkLv=5,aSkDl=1000, aSkMx=-1, defOnly=false, kite=false, ffa=false, hlBm=false, mammo=0, aTer=0, aBmb=0, atkHP=30, atkSP=0 }
-- не атаковать при хп < 30%
[/code:3l7wjo9p]
В результате у меня получилось, что гом все равно бьет все живое и скиллами в том числе. Куда копать? -
-
Возможно уже обсуждалось, но еще раз спрошу.
-
язык lua позволяет подключать функции на C++ этот прием возможно использовать при написании Ai?
-
я так понимаю сспомощью V_ констант и функции GetV можно получать данные не доступные через клиент(хп\сп игроков и мобов, определять местонахождение игрока\моба даже если он в хайде\клокинге)?
-
возможен ли вывод инфы в чат\приват?
-
конкретика по RampageAi(его взял за основу своего скрипта) где лучше осуществить проверку "можно ли атаковать моба при определенном хп\сп" ну например <!-- l --><a class="postlink-local" href="http://forum.motronline.com/viewtopic.php?p=1968165#p1968165">viewtopic.php?p=1968165#p1968165</a><!-- l --> тут Зено описал как это реализвать, но непонятно какая именно функция модифицировалась и какой именно рампейдж использован(у меня версия 1.0 rc7 by Nakayama), как я понял из контекста модифицировалась AI_MSkillsAllowed(actor) при внесении изменений гомункуль все арвно атакует даже если значение его хп ниже указанных.
или я туплю где-то?
[code:3l7wjo9p]
-- добавляем параметры которые берутся из "базы мобов" (~\Conf\Monsters.lua)
function VerifyMonSettings(t,defaultTable,id)
-- ....
local argNames = { nil, "prio", "atk", "skLvl", "skDly", "skMax", "aSkLv", "aSkDl","aSkMx", "defOnly", "kite", "ffa", "hlBm", "mammo", "aTer", "aBmb", "atkHP", "atkSP" }
-- .............................................
-- добавляем проверку текущего хп и сп перед атакой(Скиллом?)
function AI_MSkillsAllowed(actor)
-- Check if we're pausing skills for the moment if PauseAttackSkill then -- They're paused return false end -- Get the monster's table local t = MDBTable(actor) -- Check if it's not attaking us if (GetV(V_TARGET,actor) ~= OwnerID) and (GetV(V_TARGET,actor) ~= HomunID) then -- Check if HP or SP is higher than needed if (ActorHPPercent(HomunID) < t[17]) or (ActorSPAmount(HomunID) < t[18]) then return false end end -- Check if level is greater than 0 and we haven't casted too often -- against them if t[4] > 0 and MSkillMaxCasts(actor) > ActorData[actor].Count.HomuSkill then return true end -- If the value isn't greater than 0, disable skill usage return false
end
-- .............................................................
в файле Monsters.lua меняем
DefaultMonsterSettings = { nil, prio=1, atk=true, skLvl=5, skDly=500, skMax=-1, aSkLv=5,aSkDl=1000, aSkMx=-1, defOnly=false, kite=false, ffa=false, hlBm=false, mammo=0, aTer=0, aBmb=0, atkHP=30, atkSP=0 }
-- не атаковать при хп < 30%
[/code:3l7wjo9p]
В результате у меня получилось, что гом все равно бьет все живое и скиллами в том числе. Куда копать? -
-
- нет, не работает
- хп-сп мобов нельзя получать, координаты в клоке-хайде через GetActors
- нет
- по указанной ссылке подробно написано, в каком файле с какой строчки (номер после имени файла) что менять (собственно, код). Замечу, что файл ..\AI\USER_AI\MonSupport.lua редактируется три раза. У меня после данной модификации никаких ошибок не возникало.
-
- нет, не работает
- хп-сп мобов нельзя получать, координаты в клоке-хайде через GetActors
- нет
- по указанной ссылке подробно написано, в каком файле с какой строчки (номер после имени файла) что менять (собственно, код). Замечу, что файл ..\AI\USER_AI\MonSupport.lua редактируется три раза. У меня после данной модификации никаких ошибок не возникало.
-
Номер строки не даст абсолютно ничего, ибо версия разная и соответственно строки могут отличаться(если дам свои адреса они попадут у вас на комментарии). Интересует именно функция, да и теперь не особо то интересует, ибо сделал по-другому
-
Номер строки не даст абсолютно ничего, ибо версия разная и соответственно строки могут отличаться(если дам свои адреса они попадут у вас на комментарии). Интересует именно функция, да и теперь не особо то интересует, ибо сделал по-другому
-
Повторюсь - у меня проблем с корректировкой не возникло. Версия RampageAI v1[1].0 rc6 fixed by Nakayama. Если не совпадают номера строк, можно тупо по названию функций смотреть, тоже помогает.
-
Повторюсь - у меня проблем с корректировкой не возникло. Версия RampageAI v1[1].0 rc6 fixed by Nakayama. Если не совпадают номера строк, можно тупо по названию функций смотреть, тоже помогает.
-
Ух.. я и просил функцию >__<. Третий фрагмент кода в посте зено не включает описания функции, тупо номер строки
..\AI\USER_AI\MonSupport.lua 377
, который в свою очередь попадает в rc7 рампаге от накаямы на функцию function AI_MSkillsAllowed(actor).итого:
3 изменения MonSupport.lua
function VerifyMonSettings(t,defaultTable,id)
function MAttackAllowed(actor)
function AI_MSkillsAllowed(actor) ?! вот это я хотел увидеть
и в Monsters.lua
добавляются описанные параметры к нужным мобам и дефолтному мобу.
Должно работать, проверять лень. -
Ух.. я и просил функцию >__<. Третий фрагмент кода в посте зено не включает описания функции, тупо номер строки
..\AI\USER_AI\MonSupport.lua 377
, который в свою очередь попадает в rc7 рампаге от накаямы на функцию function AI_MSkillsAllowed(actor).итого:
3 изменения MonSupport.lua
function VerifyMonSettings(t,defaultTable,id)
function MAttackAllowed(actor)
function AI_MSkillsAllowed(actor) ?! вот это я хотел увидеть
и в Monsters.lua
добавляются описанные параметры к нужным мобам и дефолтному мобу.
Должно работать, проверять лень. -
Ну хоть чуточку смекалки и сообразительности можно же проявить, зачем же строго по инструкции...
В функциях добавляются только проверки на текущие значения хп-сп хомяка, значит, бОльшая часть функций остается нетронутой. Тупо берем самый первый комментарий из этого таинственного куска кода, задаем поиск и... обнаруживаем, что функцию function MAttackAllowed(actor) только что меняли, а функцию function AI_MSkillsAllowed(actor) не трогали (а в ней упомянутый кусок есть как раз). И номер строки примерно в тот же район ссылается.
Вообще, чтобы разрешить ваши терзания, скажу, что эту часть кода действительно надо вставлять в function AI_MSkillsAllowed(actor) -
Ну хоть чуточку смекалки и сообразительности можно же проявить, зачем же строго по инструкции...
В функциях добавляются только проверки на текущие значения хп-сп хомяка, значит, бОльшая часть функций остается нетронутой. Тупо берем самый первый комментарий из этого таинственного куска кода, задаем поиск и... обнаруживаем, что функцию function MAttackAllowed(actor) только что меняли, а функцию function AI_MSkillsAllowed(actor) не трогали (а в ней упомянутый кусок есть как раз). И номер строки примерно в тот же район ссылается.
Вообще, чтобы разрешить ваши терзания, скажу, что эту часть кода действительно надо вставлять в function AI_MSkillsAllowed(actor) -
@sepulka:
Что я нашла :oops:<!-- m --><a class="postlink" href="http://code.google.com/p/ro-rail/">http://code.google.com/p/ro-rail/</a><!-- m --> никто не пробовал?
Я недавно попробовал, впечатления неоднозначные: очень шустрый скрипт (при телепорте, когда экран только проявляется, хом уже на полпути к дальным монстрам, а иногда уже и труп валяется, а хом ко второму мчиться), настройка, по задумке, должна быть очень легкой, но как сохранить сделанные мною изменения в конфигурационном файле я не понял. :oops:
-
@"sepulka":
Что я нашла<!-- m --><a class="postlink" href="http://code.google.com/p/ro-rail/">http://code.google.com/p/ro-rail/</a><!-- m --> никто не пробовал?
Я недавно попробовал, впечатления неоднозначные: очень шустрый скрипт (при телепорте, когда экран только проявляется, хом уже на полпути к дальным монстрам, а иногда уже и труп валяется, а хом ко второму мчиться), настройка, по задумке, должна быть очень легкой, но как сохранить сделанные мною изменения в конфигурационном файле я не понял. :oops:
-
@Kha-dar:
но как сохранить сделанные мною изменения в конфигурационном файле я не понял. :oops:Все очень просто. На <!-- m --><a class="postlink" href="http://forums.irowiki.org/showthread.php?t=48628">http://forums.irowiki.org/showthread.php?t=48628</a><!-- m --> автор отвечает и на этот вопрос тоже. Кроме того, по адресу <!-- m --><a class="postlink" href="http://code.google.com/p/ro-rail/wiki/StateFileIndex">http://code.google.com/p/ro-rail/wiki/StateFileIndex</a><!-- m --> есть полное описание формата.
Ну а если коротко, то в папке с игрой (не в "./AI/USER_AI/", а в той же директории, где "ragnarok.exe" и "motr.exe") после запуска скрипта должен появляться файл, который называется RAIL_State.xyz.lua, где xyz - "merc" или "homu".
В этом файле должно быть что-то типа:
rail_state["ActorOptions"]["ByType"][1078] = {}
rail_state["ActorOptions"]["ByType"][1078]["Priority"] = 0
rail_state["ActorOptions"]["ByType"][1078]["AttackAllowed"] = true
rail_state["ActorOptions"]["ByType"][1078]["SkillsAllowed"] = falseкак вариант, то же самое можно писать в таком формате:
rail_state.ActorOptions.ByType[1078] = {
Priority = 0,
AttacksAllowed = true,
SkillsAllowed = false,
}
оно потом само преобразуется к основному виду."ActorOptions" - тактика в отношении мобов, персонажей, нпц.
"ByType" - опции заданы для всех мобов типа 1078 "Red Plant". (RAIL позволяет также задавать поведение относительно id персонажа (моба). Для этого вместо "ByType" пишем "ByID". Чтобы задать поведение в отношении моба "по умолчанию", вместо "ByType" пишем "Default".)
1078 - Номер типа моба. Ну, вы знаете.Примерно вот так. Читайте документацию. А вообще, скрипт написан очень продуманно, на хорошем уровне знания lua. Много фишек, которые faithful использовал, меня, например, удивили.
p.s. Кстати, faithful вообще-то вроде бы заявлял, что завязал с РО. И вот...
-
@"Kha-dar":
но как сохранить сделанные мною изменения в конфигурационном файле я не понял. :oops:Все очень просто. На <!-- m --><a class="postlink" href="http://forums.irowiki.org/showthread.php?t=48628">http://forums.irowiki.org/showthread.php?t=48628</a><!-- m --> автор отвечает и на этот вопрос тоже. Кроме того, по адресу <!-- m --><a class="postlink" href="http://code.google.com/p/ro-rail/wiki/StateFileIndex">http://code.google.com/p/ro-rail/wiki/StateFileIndex</a><!-- m --> есть полное описание формата.
Ну а если коротко, то в папке с игрой (не в "./AI/USER_AI/", а в той же директории, где "ragnarok.exe" и "motr.exe") после запуска скрипта должен появляться файл, который называется RAIL_State.xyz.lua, где xyz - "merc" или "homu".
В этом файле должно быть что-то типа:
rail_state["ActorOptions"]["ByType"][1078] = {}
rail_state["ActorOptions"]["ByType"][1078]["Priority"] = 0
rail_state["ActorOptions"]["ByType"][1078]["AttackAllowed"] = true
rail_state["ActorOptions"]["ByType"][1078]["SkillsAllowed"] = falseкак вариант, то же самое можно писать в таком формате:
rail_state.ActorOptions.ByType[1078] = {
Priority = 0,
AttacksAllowed = true,
SkillsAllowed = false,
}
оно потом само преобразуется к основному виду."ActorOptions" - тактика в отношении мобов, персонажей, нпц.
"ByType" - опции заданы для всех мобов типа 1078 "Red Plant". (RAIL позволяет также задавать поведение относительно id персонажа (моба). Для этого вместо "ByType" пишем "ByID". Чтобы задать поведение в отношении моба "по умолчанию", вместо "ByType" пишем "Default".)
1078 - Номер типа моба. Ну, вы знаете.Примерно вот так. Читайте документацию. А вообще, скрипт написан очень продуманно, на хорошем уровне знания lua. Много фишек, которые faithful использовал, меня, например, удивили.
p.s. Кстати, faithful вообще-то вроде бы заявлял, что завязал с РО. И вот...
-
Я тоже завязала, причем давно. И вот
-
Я тоже завязала, причем давно. И вот
-
Euthanasia M_D_, спасибо за подсказку, при настройке этого АИ я не знал что нужна еще строчка
rail_state["ActorOptions"]["ByType"][1078] = {}
, хотя теперь понимаю, что её наличие логично, и мог бы сам бы догадаться -
Euthanasia M_D_, спасибо за подсказку, при настройке этого АИ я не знал что нужна еще строчка
rail_state["ActorOptions"]["ByType"][1078] = {}
, хотя теперь понимаю, что её наличие логично, и мог бы сам бы догадаться