Гайд по написанию скриптов для гомункулусов
-
использую старый вариант (до 'фикса') от Loneliness - работает нормально
-
Данс атака в AzziAi работает без изменений
-
У меня AzziAi из ировики почему-то вообще не заработал (вернее работает, но на настройки по мобам никак не реагирует никак).
Мой мод по МирАИ (где-то тут был прикреплён) работает без осложнений. -
@"LisandreL":
У меня AzziAi из ировики почему-то вообще не заработал
насколько я помню, я качала вот этот
<!-- m --><a class="postlink" href="http://iro.ragnarokonline.com/forum/forums/thread-view.asp?tid=32534&start=1">http://iro.ragnarokonline.com/forum/for ... 34&start=1</a><!-- m --> -
Как в RampageAI дописать, что бы гомункул атаковал различных мобов в зависимости от его HP/SP, ну и так что бы это в дальнейшем просто настраивалось? Я так понял в Monster.lua можно дописать мобов нужных, и выставить на них то, как их атаковать. А вот где выставить хп/сп при котором бросаться на мобов стоит, я что-то не нашел.
И вторая проблемма с рампейджем, гомункул слив все сп начинает кидать автокаст не 5-ого лвла, а того на который хватает, после тика сп. Как бы это поправить, что бы он все-таки дожидался когда будет 31 сп и кидал уже болт 5-ого лвла. -
не подскажите, чтоб traceAI начала писать лог какие-либо действия, кроме вызова ее в коде AI, нужно совершить?
-
Давно не баловалась, но варианта два: или только вызов функции из кода или вызов + в клиенте вписать что-то типа /traceai. Точно не помню, поэтому не гарантирую. Но вроде бы так.
-
@"Vierge":
Как в RampageAI дописать, что бы гомункул атаковал различных мобов в зависимости от его HP/SP, ну и так что бы это в дальнейшем просто настраивалось? Я так понял в Monster.lua можно дописать мобов нужных, и выставить на них то, как их атаковать. А вот где выставить хп/сп при котором бросаться на мобов стоит, я что-то не нашел.И вторая проблемма с рампейджем, гомункул слив все сп начинает кидать автокаст не 5-ого лвла, а того на который хватает, после тика сп. Как бы это поправить, что бы он все-таки дожидался когда будет 31 сп и кидал уже болт 5-ого лвла.
*на всех монстров одни и теже значения хп\сп действуют- config.lua MinAttackSkillLevel = 1 -дефолт, требуеться изменить на 5 чтобы гом всегда использовал 5лвл скила
-
Что я нашла
<!-- m --><a class="postlink" href="http://code.google.com/p/ro-rail/">http://code.google.com/p/ro-rail/</a><!-- m --> никто не пробовал?Кстати, может кто подскажет как данс атаку к рампаге прикрутить?
и как заставить хомячка возвращаться к алхимику, после того как всех убил, а не зависать в точке где убил последнего моба? -
Оп, интересная штука, заценим... как не лень будет в ро зайти :oops:
Касательно возврата - где-то там был тайм-аут, сейчас сходу не нашла.
Касательно данс-атаки. Где-то здесь это уже было, но все же.
Файл /Conf/Custom.lua, раздел Customization Initialization внутри функции function InitCustom() пишем следующее:
[code:3sbq1gfv]SavedAttack = Attack
Attack = DancingAttack[/code:3sbq1gfv]
Тот же файл, раздел Custom Functions:
[code:3sbq1gfv]function DancingAttack(homunID, targetID)
-- stop dancing if hp or sp lower then 0%, or 25%, or the homunculus is too far from its owner
-- this schould fix the "dance out of range bug"
-- Dancing Attack is also disabled for Monsters, which are to be kited
local t = MDBTable(actor)
if ((AABlocks(HomunID,OwnerID) <= 12) and (not t[11])) then
-- determine the targets position
local x, y = GetV(V_POSITION, targetID)
SavedAttack(homunID, targetID)
Move(homunID, x+1, y)
Move(homunID, x-1, y)
SavedAttack(homunID, targetID)
Move(homunID, x, y+1)
Move(homunID, x, y-1)
else SavedAttack(homunID, targetID)
end
end
[/code:3sbq1gfv]
Что есть что - уже не помню, надо, опять же, рыться вспоминать, мне влом. Но вроде должно работать. Если будет ругаться - поиграться с условиями внутри if, я туда что-то дописывала. -
спасибо
-
Aiko Star, что-то все равно не нашла нужной настройки, для убирания зависания. Максимально похожее было связано с настройкой беганья хомяка вокруг хозяина, но это у меня выключено.
P.S. думаю стоит перенести эти посты в тему про рампагу.
-
ковырялась в мирке, пцыталась заставить хомяка-ванильку кидать болты издалека, а не когда уже прибежал вплотную. Локализовала проблему до использования CheckForAutoAtk() в OnCHASE_ST()
т.е.
меняю
[code:3cy6pig3]if CanDoAtkSkillsNow() then[/code:3cy6pig3]
на
[code:3cy6pig3]if true then[/code:3cy6pig3]
и все тормоза исчезают, хомяк радостно кидает болты издалека.
Полезла внурть CheckForAutoAtk()и обнаружила что тормоза прекрасно исчезают при удалении[code:3cy6pig3] elseif HTact.Skill == WITH_slow_power then
if (LONG_RANGE_SHOOTER ~= true) and (CurrTime - AtkStartTime < DELAY_SLOW_POWER) then
result = false
end[/code:3cy6pig3]вот подскажите что тут может вызывать такую задержку в использовании скилла?
-
sepulka, подозреваю что в Config.lua прописано
[code:2jou29hv]LONG_RANGE_SHOOTER=false[/code:2jou29hv] -
ну да.
но задержка должна появляться только если в тактиках для монстра указано, что атаковать со slow_power а оно на всех тормозит, специально снесла все тктики и поставила поведение по умолчанию атаковать с макимальной силой. -
смотрим тот же Config.lua
[code:8js1xy2n]DEFAULT_BEHA = BEHA_attack -- __ values assumed for any monster not listed below
DEFAULT_WITH = WITH_slow_power -- /[/code:8js1xy2n]
т.е. если у монстра нет тактик, идёт как раз задержка slow_powerP.S.
@"sepulka":
Полезла внурть [s:8js1xy2n]CheckForAutoAtk()[/s:8js1xy2n]CanDoAtkSkillsNow() и обнаружила что тормоза прекрасно исчезают при удалении -
Целиком приведите текст функции до и после.
-
JdM,
у меня
[code:1ilft3wp]DEFAULT_WITH=WITH_full_power[/code:1ilft3wp]
спецом проставленода-да, не то скопировала,простите
LisandreL,
[code:1ilft3wp]function CanDoAtkSkillsNow()
-- is it the right time for an aggressive skill?local result = true local CurrTime = GetTick() --local TimeOutElapsed = CurrTime - AtkStartTime > SKILL_TIME_OUT --Log(string.format("AtkSkillDoneCount = %d, CurrTime - AtkStartTime = %d", AtkSkillDoneCount, CurrTime - AtkStartTime)) if (HTact.Skill == WITH_no_skill) then result = false elseif HTact.Skill == WITH_one_skill then -- Log(string.format("AtkSkillDoneCount = %d, CurrTime - AtkStartTime = %d", AtkSkillDoneCount, CurrTime - AtkStartTime)) --if (AtkSkillDoneCount > 1) or TimeOutElapsed then if (AtkSkillDoneCount > 1) then result = false end elseif HTact.Skill == WITH_two_skills then if (AtkSkillDoneCount > 2) then result = false end --[[elseif HTact.Skill == WITH_max_skills then if TimeOutElapsed then result = false end--]] elseif HTact.Skill == WITH_slow_power then if (LONG_RANGE_SHOOTER ~= true) and (CurrTime - AtkStartTime < DELAY_SLOW_POWER) then result = false end end return result
end[/code:1ilft3wp]
вызов самой функции в function OnCHASE_ST()
[code:1ilft3wp]
-- Homunculus long range attack
local CurrTime = GetTick()
if LRASID ~=0 then
if (AtkStartTime == 0) then
AtkStartTime = CurrTime
end
if CanDoAtkSkillsNow() then
if DoSkill(LRASID, MyEnemy) then -- ##### AGGRESSIVE SKILL #####
AtkSkillDoneCount = AtkSkillDoneCount + 1
LastLRAtkTime = CurrTime
LastLRAtkID = MyEnemy
end
end
end
[/code:1ilft3wp]это все куски из стандартного мираи
-
По идее, с проставленным with_full_power должен кидать болты без задержек. Попробуй вписать в function CanDoAtkSkillsNow() отдельную проверку на тактику с full_power (там должен быть result = true). Обезьянья работа, но мало ли...
-
@"sepulka":
у меня[code:3refsas7]DEFAULT_WITH=WITH_full_power[/code:3refsas7]
спецом проставлено[code:3refsas7]function GetFullTact(ID)
-- get all tact. data for this monster
T = {}
if Tact[ID] == nil then -- Return default Tactic for unlisted monsters
Log(string.format("No tact data for monster type-ID %d", ID))
T.Behav = DEFAULT_BEHA
T.Skill = DEFAULT_WITH
T.Level = -1
T.Alche = 0
else
...[/code:3refsas7]T.Level = -1 - вот такой подкол и хоть обставтесь вы WITH_full_power уровень атакующего скилла у вас -1, а значит атаки не будет.