Крип умирает первый раз - все впорядке, спавнится там, где надо. Умирает второй раз - тоже на верном месте. А третий раз уже на 0, 0. В чем проблема?
function Trig_rCrips_Actions takes nothing returns nothing
local unit u = GetEnumUnit()
set udg_count = udg_count + 1
call SetUnitUserData(u, udg_count )
set udg_Creep_X[udg_count ] = GetUnitX(u)
set udg_Creep_Y[udg_count ] = GetUnitY(u)
endfunction
function css_Respawn takes nothing returns nothing
local unit u = GetDyingUnit()
local integer cv = R2I(GetUnitUserData(u))
local real x = udg_Creep_X[cv]
local real y = udg_Creep_Y[cv]
call CreateUnit(Player(11), GetUnitTypeId(u), x, y, 270.)
call SetUnitUserData(u, cv)
set u = null
endfunction
//===========================================================================
function InitTrig_rCrips takes nothing returns nothing
local group g = CreateGroup()
call GroupEnumUnitsOfPlayer(g, Player(11), null)
call ForGroup(g, function Trig_rCrips_Actions)
set gg_trg_rCrips = CreateTrigger()
call TriggerRegisterTimerEvent(gg_trg_rCrips, 0.20, false)
call TriggerAddAction(gg_trg_rCrips, function Trig_rCrips_Actions)
call TriggerRegisterAnyUnitEventBJ(gg_trg_rCrips, EVENT_PLAYER_UNIT_DEATH)
call TriggerAddAction(gg_trg_rCrips, function css_Respawn)
endfunction
Принятый ответ
Это я сделал в первую очередь, интереса ради. Разницы ноль, увы.
Разве, что запускает две функции одновременно, делая всего лишнюю операцию.
И так:
- Нужен массив для хранение TypeId
- Лучше глобальную группу использовать, а то локальная у тебя только на инициализации выполнилась.
- Используем loop endloop для большей эффективности
- Проверять лучше всё таки стеком,
Насчет дестроя группы. Она же создается один раз, если я ее уничтожу - триггер вообще выполнятся не станет, разве не так?
Это не так, она уже использовалась и стала локальной, и да. Лучше глобальную используй.
Лучше внутри таймера проверять ограниченным кол-во крипов через стек. т.е. о 0 до N ограничения, которые не повлияет на производительность. при этом проверяя на наличие их безжизненности, потом просто воссоздавая их по данным сохранённым внутри данных по юниту.
- Если мобы были ранее на карте, то и ранее должны были быть зарегестрированы в массив данных, где храниться их TypeId, PosX\Y и п.р.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Волчачка
Отредактирован NekoriDes
set udg_Creep_Y[udg_count ] = GetUnitY(u) где u - пикнутый юнит.
Отредактирован NekoriDes
Хотя, может я и поторопился с ответом. В коде может быть решение. Спасибо, в любом случае.
Отредактирован Волчачка
Примерно так должно быть:
Отредактирован NekoriDes