Гайд по написанию скриптов для гомункулусов
-
Loneliness, а что там переписывать? простановка максимального приоритета и все, главное самому держаться подальше от саммона, чтоб он на химика не переагривался и хомяк не бежал спасать.
-
Loneliness, а что там переписывать? простановка максимального приоритета и все, главное самому держаться подальше от саммона, чтоб он на химика не переагривался и хомяк не бежал спасать.
-
Не совсем. Хомяк переагривается на атакера вне зависимости от приоритета на стадии ONCHASE_ST, то бишь, если хомяка по дороге кто-нибудь из саммона стукнет, он отвлекается.
Вот это место, если точнее:
[code:1ga8b701]local NextTarget = GetMyNextTarget(HomunHPPerc)
if not isBadTarget and NextTarget ~= 0 then
local EnemyDst = GetDistance2(MyEnemy, MyID)
if (EnemyDst <= 2) or (EnemyDst <= GetDistance2(NextTarget, MyID)) then
NextTarget = 0
end
end
if NextTarget ~= 0 then
MyEnemy = NextTarget
vOwnerX, vOwnerY = OwnerX, OwnerY
AtkStartTime = 0
AtkSkillDoneCount = 0
Log(string.format("Intercepting new target(%d)", MyEnemy))
else
if isBadTarget and MyState ~= EVADE_ST then
StopHere("[CHASE_ST -> IDLE_ST] no alternative target found")
return
end
end[/code:1ga8b701]Если сюда воткнуть ещё проверку приоритета, то всё будет правильно. Но, как я и сказала, не хочу ставить ещё одну заплатку, когда пора перешивать всё полностью ^^''
-
Не совсем. Хомяк переагривается на атакера вне зависимости от приоритета на стадии ONCHASE_ST, то бишь, если хомяка по дороге кто-нибудь из саммона стукнет, он отвлекается.
Вот это место, если точнее:
[code:1ga8b701]local NextTarget = GetMyNextTarget(HomunHPPerc)
if not isBadTarget and NextTarget ~= 0 then
local EnemyDst = GetDistance2(MyEnemy, MyID)
if (EnemyDst <= 2) or (EnemyDst <= GetDistance2(NextTarget, MyID)) then
NextTarget = 0
end
end
if NextTarget ~= 0 then
MyEnemy = NextTarget
vOwnerX, vOwnerY = OwnerX, OwnerY
AtkStartTime = 0
AtkSkillDoneCount = 0
Log(string.format("Intercepting new target(%d)", MyEnemy))
else
if isBadTarget and MyState ~= EVADE_ST then
StopHere("[CHASE_ST -> IDLE_ST] no alternative target found")
return
end
end[/code:1ga8b701]Если сюда воткнуть ещё проверку приоритета, то всё будет правильно. Но, как я и сказала, не хочу ставить ещё одну заплатку, когда пора перешивать всё полностью ^^''
-
Можно как-нибудь заставить react срабатывать на удачный стил? Видел в записи как оно работает, но не нашёл примеров... или это на каждом мобе alt+t жмут?
-
Можно как-нибудь заставить react срабатывать на удачный стил? Видел в записи как оно работает, но не нашёл примеров... или это на каждом мобе alt+t жмут?
-
Либо жмут, либо пользуются сторонними программами, что есть бан.
-
Либо жмут, либо пользуются сторонними программами, что есть бан.
-
скажите как сделать так, чтобы ванилька сначала болт кинула на моба, а потом уже бежала к немуу дальше бить. А то вечно она не успевает первая к мобу, другие гомы уже бьют, а она только подбегает.
т.е. что конкретно и где нуно вставить в АИ.
И еще если не сложно как сделать, чтобы она не крутилась возле моба которого хотела атаковать, но не успела и соответственно его уже бьет другой гом. Просто всегда играю с локмобом, чтобы не мешать другим.
заранее спасибо. Если такое уже где-то описывалась, заранее извиняюсь, но что-то я плохо дружу с поиском, никогда толком не получалось найти то что ищу через поиск. -
скажите как сделать так, чтобы ванилька сначала болт кинула на моба, а потом уже бежала к немуу дальше бить. А то вечно она не успевает первая к мобу, другие гомы уже бьют, а она только подбегает.
т.е. что конкретно и где нуно вставить в АИ.
И еще если не сложно как сделать, чтобы она не крутилась возле моба которого хотела атаковать, но не успела и соответственно его уже бьет другой гом. Просто всегда играю с локмобом, чтобы не мешать другим.
заранее спасибо. Если такое уже где-то описывалась, заранее извиняюсь, но что-то я плохо дружу с поиском, никогда толком не получалось найти то что ищу через поиск. -
Florencia, Для начала какой АИ используешь?
-
Florencia, Для начала какой АИ используешь?
-
ой, сорри забыла написать Mir Ai v1.2.2
-
ой, сорри забыла написать Mir Ai v1.2.2
-
Florencia, сменить аи, ну или для мобов поставить в тактиках WITH_FULL_POWER или как-то так.
-
Florencia, сменить аи, ну или для мобов поставить в тактиках WITH_FULL_POWER или как-то так.
-
Florencia, чтобы ванилька сначала бросала болт в нового врага нужно в файле AI.lua исправить вот этоти куски
[code:k2jhniqc]
function OnIDLE_ST()...
-- Is there a new target? -> chase_st
if CurrTime - StartupTime > 600 then
local NextTarget = GetMyNextTarget(HomunHPPerc)
if NextTarget ~=0 then
isCircling = false
MyEnemy = NextTarget
local Ex, Ey = GetV(V_POSITION, MyEnemy)
if (math.abs(Ex - MyX) <= 1) and (math.abs(Ey - MyY) <= 1) then
MyState = ATTACK_ST
Attack(MyID, MyEnemy)
AtkStartTime = 0
Log(string.format("[IDLE_ST -> ATTACK_ST] Target(%d) already near, switch directly to combat", MyEnemy))
else
MyState = CHASE_ST
Log(string.format("[IDLE_ST -> CHASE_ST] Intercepting new target(%d)", MyEnemy))
end
vOwnerX, vOwnerY = OwnerX, OwnerY
return
else
if MyState == EVADE_ST then
isCircling = false
return
end
end
end
...end
...
function OnATTACK_ST()
...
-- Change target when the enemy is dead or lost local Ex, Ey = GetV(V_POSITION, MyEnemy) if (Ex == -1) or (MOTION_DEAD == GetV(V_MOTION, MyEnemy)) then Log(string.format("MyEnemy(%d) lost or dead. Searching for next target", MyEnemy)) local NextTarget = GetMyNextTarget(HomunHPPerc) if NextTarget ~=0 then MyEnemy = NextTarget AtkSkillDoneCount = 0 AtkStartTime = GetTick() -- a new attack starts (usually this reset is in ON_IDLE_ST) else if MyState ~= EVADE_ST then StopHere("[ATTACK_ST -> IDLE_ST] No more immediate targets") end return end end
...
end
[/code:k2jhniqc]
на то что ограничено стрелочками
[code:k2jhniqc]
function OnIDLE_ST()...
-- Is there a new target? -> chase_st if CurrTime - StartupTime > 600 then local NextTarget = GetMyNextTarget(HomunHPPerc) if NextTarget ~=0 then isCircling = false MyEnemy = NextTarget local Ex, Ey = GetV(V_POSITION, MyEnemy)
--> if((HomunType == VANILMIRTH or HomunType == VANILMIRTH_H
or HomunType == VANILMIRTH2 or HomunType == VANILMIRTH_H2)
and (HomunSP >= AS_VAN_CAPR.MinSP)
and ( GetDistance(Ex, Ey, MyX, MyY) <= GetV( V_SKILLATTACKRANGE, AS_VAN_CAPR.SkillID))
and (DoSkill(AS_VAN_CAPR,MyEnemy) != false)) then
MyState = ATTACK_ST
AtkStartTime = 0
Log(string.format("[IDLE_ST -> ATTACK_ST] Target(%d) already near, switch directly to combat", MyEnemy))
else<--
if (math.abs(Ex - MyX) <= 1) and (math.abs(Ey - MyY) <= 1) then
MyState = ATTACK_ST
Attack(MyID, MyEnemy)
AtkStartTime = 0
Log(string.format("[IDLE_ST -> ATTACK_ST] Target(%d) already near, switch directly to combat", MyEnemy))
else
MyState = CHASE_ST
Log(string.format("[IDLE_ST -> CHASE_ST] Intercepting new target(%d)", MyEnemy))
end
--> end<--
vOwnerX, vOwnerY = OwnerX, OwnerY
return
else
if MyState == EVADE_ST then
isCircling = false
return
end
end
end...
end
function OnATTACK_ST()
...
-- Change target when the enemy is dead or lost local Ex, Ey = GetV(V_POSITION, MyEnemy) if (Ex == -1) or (MOTION_DEAD == GetV(V_MOTION, MyEnemy)) then Log(string.format("MyEnemy(%d) lost or dead. Searching for next target", MyEnemy)) local NextTarget = GetMyNextTarget(HomunHPPerc) if NextTarget ~=0 then MyEnemy = NextTarget
--> local Ex, Ey = GetV(V_POSITION, MyEnemy)
if((HomunType == VANILMIRTH or HomunType == VANILMIRTH_H
or HomunType == VANILMIRTH2 or HomunType == VANILMIRTH_H2)
and (HomunSP >= AS_VAN_CAPR.MinSP)
and ( GetDistance(Ex, Ey, MyX, MyY) <= GetV( V_SKILLATTACKRANGE, AS_VAN_CAPR.SkillID))
and (DoSkill(AS_VAN_CAPR,MyEnemy) != false)) then
AtkStartTime = GetTick() -- a new attack starts (usually this reset is in ON_IDLE_ST)
AtkSkillDoneCount = 1
else<--
AtkSkillDoneCount = 0
AtkStartTime = GetTick() -- a new attack starts (usually this reset is in ON_IDLE_ST)
--> end<--
else
if MyState ~= EVADE_ST then
StopHere("[ATTACK_ST -> IDLE_ST] No more immediate targets")
end
return
end
end...
end
[/code:k2jhniqc]
Данные куски кода не отлажены по этому советую сохранить резервную копию исходного файла, перед внесением изменений. -
Florencia, чтобы ванилька сначала бросала болт в нового врага нужно в файле AI.lua исправить вот этоти куски
[code:k2jhniqc]
function OnIDLE_ST()...
-- Is there a new target? -> chase_st
if CurrTime - StartupTime > 600 then
local NextTarget = GetMyNextTarget(HomunHPPerc)
if NextTarget ~=0 then
isCircling = false
MyEnemy = NextTarget
local Ex, Ey = GetV(V_POSITION, MyEnemy)
if (math.abs(Ex - MyX) <= 1) and (math.abs(Ey - MyY) <= 1) then
MyState = ATTACK_ST
Attack(MyID, MyEnemy)
AtkStartTime = 0
Log(string.format("[IDLE_ST -> ATTACK_ST] Target(%d) already near, switch directly to combat", MyEnemy))
else
MyState = CHASE_ST
Log(string.format("[IDLE_ST -> CHASE_ST] Intercepting new target(%d)", MyEnemy))
end
vOwnerX, vOwnerY = OwnerX, OwnerY
return
else
if MyState == EVADE_ST then
isCircling = false
return
end
end
end
...end
...
function OnATTACK_ST()
...
-- Change target when the enemy is dead or lost local Ex, Ey = GetV(V_POSITION, MyEnemy) if (Ex == -1) or (MOTION_DEAD == GetV(V_MOTION, MyEnemy)) then Log(string.format("MyEnemy(%d) lost or dead. Searching for next target", MyEnemy)) local NextTarget = GetMyNextTarget(HomunHPPerc) if NextTarget ~=0 then MyEnemy = NextTarget AtkSkillDoneCount = 0 AtkStartTime = GetTick() -- a new attack starts (usually this reset is in ON_IDLE_ST) else if MyState ~= EVADE_ST then StopHere("[ATTACK_ST -> IDLE_ST] No more immediate targets") end return end end
...
end
[/code:k2jhniqc]
на то что ограничено стрелочками
[code:k2jhniqc]
function OnIDLE_ST()...
-- Is there a new target? -> chase_st if CurrTime - StartupTime > 600 then local NextTarget = GetMyNextTarget(HomunHPPerc) if NextTarget ~=0 then isCircling = false MyEnemy = NextTarget local Ex, Ey = GetV(V_POSITION, MyEnemy)
--> if((HomunType == VANILMIRTH or HomunType == VANILMIRTH_H
or HomunType == VANILMIRTH2 or HomunType == VANILMIRTH_H2)
and (HomunSP >= AS_VAN_CAPR.MinSP)
and ( GetDistance(Ex, Ey, MyX, MyY) <= GetV( V_SKILLATTACKRANGE, AS_VAN_CAPR.SkillID))
and (DoSkill(AS_VAN_CAPR,MyEnemy) != false)) then
MyState = ATTACK_ST
AtkStartTime = 0
Log(string.format("[IDLE_ST -> ATTACK_ST] Target(%d) already near, switch directly to combat", MyEnemy))
else<--
if (math.abs(Ex - MyX) <= 1) and (math.abs(Ey - MyY) <= 1) then
MyState = ATTACK_ST
Attack(MyID, MyEnemy)
AtkStartTime = 0
Log(string.format("[IDLE_ST -> ATTACK_ST] Target(%d) already near, switch directly to combat", MyEnemy))
else
MyState = CHASE_ST
Log(string.format("[IDLE_ST -> CHASE_ST] Intercepting new target(%d)", MyEnemy))
end
--> end<--
vOwnerX, vOwnerY = OwnerX, OwnerY
return
else
if MyState == EVADE_ST then
isCircling = false
return
end
end
end...
end
function OnATTACK_ST()
...
-- Change target when the enemy is dead or lost local Ex, Ey = GetV(V_POSITION, MyEnemy) if (Ex == -1) or (MOTION_DEAD == GetV(V_MOTION, MyEnemy)) then Log(string.format("MyEnemy(%d) lost or dead. Searching for next target", MyEnemy)) local NextTarget = GetMyNextTarget(HomunHPPerc) if NextTarget ~=0 then MyEnemy = NextTarget
--> local Ex, Ey = GetV(V_POSITION, MyEnemy)
if((HomunType == VANILMIRTH or HomunType == VANILMIRTH_H
or HomunType == VANILMIRTH2 or HomunType == VANILMIRTH_H2)
and (HomunSP >= AS_VAN_CAPR.MinSP)
and ( GetDistance(Ex, Ey, MyX, MyY) <= GetV( V_SKILLATTACKRANGE, AS_VAN_CAPR.SkillID))
and (DoSkill(AS_VAN_CAPR,MyEnemy) != false)) then
AtkStartTime = GetTick() -- a new attack starts (usually this reset is in ON_IDLE_ST)
AtkSkillDoneCount = 1
else<--
AtkSkillDoneCount = 0
AtkStartTime = GetTick() -- a new attack starts (usually this reset is in ON_IDLE_ST)
--> end<--
else
if MyState ~= EVADE_ST then
StopHere("[ATTACK_ST -> IDLE_ST] No more immediate targets")
end
return
end
end...
end
[/code:k2jhniqc]
Данные куски кода не отлажены по этому советую сохранить резервную копию исходного файла, перед внесением изменений. -
спасибо попробую
-
спасибо попробую