Крип умирает первый раз - все впорядке, спавнится там, где надо. Умирает второй раз - тоже на верном месте. А третий раз уже на 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

Это я сделал в первую очередь, интереса ради. Разницы ноль, увы.
Разве, что запускает две функции одновременно, делая всего лишнюю операцию.
И так:
  1. Нужен массив для хранение TypeId
  2. Лучше глобальную группу использовать, а то локальная у тебя только на инициализации выполнилась.
  3. Используем loop endloop для большей эффективности
  4. Проверять лучше всё таки стеком,
Насчет дестроя группы. Она же создается один раз, если я ее уничтожу - триггер вообще выполнятся не станет, разве не так?
Это не так, она уже использовалась и стала локальной, и да. Лучше глобальную используй.
Лучше внутри таймера проверять ограниченным кол-во крипов через стек. т.е. о 0 до N ограничения, которые не повлияет на производительность. при этом проверяя на наличие их безжизненности, потом просто воссоздавая их по данным сохранённым внутри данных по юниту.
  1. Если мобы были ранее на карте, то и ранее должны были быть зарегестрированы в массив данных, где храниться их TypeId, PosX\Y и п.р.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
29
Попробуйте использовать:
call GroupClear( g ) // не обязятельно
call DestroyGroup( g )
//
set g = null
	//1
	call TriggerRegisterTimerEvent(gg_trg_rCrips, 0.20, false)
    call TriggerAddAction(gg_trg_rCrips, function Trig_rCrips_Actions)
	// 2
    call TriggerRegisterAnyUnitEventBJ(gg_trg_rCrips, EVENT_PLAYER_UNIT_DEATH)
    call TriggerAddAction(gg_trg_rCrips, function css_Respawn)
Лучше использовать разные триггеры для них..
А ещё поясните, что вы хотите именно с крипами делать, а то просто без отдельного стека вам не обойтись...
13
Не надо на Вы, пожалуйста.
Лучше использовать разные триггеры для них..
Это я сделал в первую очередь, интереса ради. Разницы ноль, увы.
А ещё поясните, что вы хотите именно с крипами делать, а то просто без отдельного стека вам не обойтись...
Просто респаун. Всякие системы юзать не хочу, это простейший способ, вроде как. Но и тут у меня возникли проблемы. :(
20
каким образом ты получаешь координаты места респа?
13
Насчет дестроя группы. Она же создается один раз, если я ее уничтожу - триггер вообще выполнятся не станет, разве не так?

ssbbssc, пикаются же все юниты 11 игрока изначально и в глобалки заносятся координаты каждого.
set udg_Creep_X[udg_count ] = GetUnitX(u)
set udg_Creep_Y[udg_count ] = GetUnitY(u) где u - пикнутый юнит.
29
Это я сделал в первую очередь, интереса ради. Разницы ноль, увы.
Разве, что запускает две функции одновременно, делая всего лишнюю операцию.
И так:
  1. Нужен массив для хранение TypeId
  2. Лучше глобальную группу использовать, а то локальная у тебя только на инициализации выполнилась.
  3. Используем loop endloop для большей эффективности
  4. Проверять лучше всё таки стеком,
Насчет дестроя группы. Она же создается один раз, если я ее уничтожу - триггер вообще выполнятся не станет, разве не так?
Это не так, она уже использовалась и стала локальной, и да. Лучше глобальную используй.
Лучше внутри таймера проверять ограниченным кол-во крипов через стек. т.е. о 0 до N ограничения, которые не повлияет на производительность. при этом проверяя на наличие их безжизненности, потом просто воссоздавая их по данным сохранённым внутри данных по юниту.
  1. Если мобы были ранее на карте, то и ранее должны были быть зарегестрированы в массив данных, где храниться их TypeId, PosX\Y и п.р.
Принятый ответ
13
Если мобы были ранее на карте, то и ранее должны были быть зарегестрированы в массив данных, где храниться их TypeId, PosX\Y и п.р.
Это в принципе ясно, только я не совсем понимаю, как использовать эти данные для воскрешения на той же точке.
>1, 2, 3, 4
Сейчас покумекаю, топик пока не закрываю. Спасибо тебе!
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.