Добавлен Стас Орлов
Я создал триггер, в котором умирает юнит и спустя N-е количество времени воскрешается.
function Trig_Kill_Unit_Actions takes nothing returns nothing
local unit dead = GetTriggerUnit() //Присваиваем убитого юнита
local integer idead = GetHandleId(dead) //Узнаём его ID
local timer t = CreateTimer() //Создаём таймер
local integer s = GetHandleId(t) //Узнаём его ID
call SaveUnitHandle(udg_hash, s,6, dead) //Сохраняем юнита
call SaveInteger(udg_hash, s,5, idead) //Сохраняем его ID
call TimerStart(t,10,false,function Reborn) //Активируем одноразовый таймер на 10 секунд
endfunction
Вторая функция
function Reborn takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer s = GetHandleId(t)
local unit dead = LoadUnitHandle (udg_hash, s,6)
local integer idead = LoadInteger (udg_hash, s,5)
set dead = CreateUnit(GetOwningPlayer(dead), GetUnitTypeId(dead), GetUnitX(dead), GetUnitY(dead), bj_UNIT_FACING)
call DestroyTimer(t)
endfunction
Но юнит не создаётся, таймер работает, я проверял, отправляя через него сообщения, данные тоже переносятся(проверял), но юнит всё равно не создаётся, где ошибка. Прошу написать мне ответ не джасс, не говоря про ГУИ и прочее.
Заранее спасибо
Принятый ответ
действительно, почему же не работает?
Это вообще никак не влияет. Ты ещё скажи, что set a = a + 1 не работает.
Дело может быть в том, что юнит за 10 секунд разлагается.
немного исправленный код
function Reborn takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer s = GetHandleId(t)
local unit dead = LoadUnitHandle (udg_hash, s, 6)
call FlushChildHashtable(udg_hash, s)
call CreateUnit(GetOwningPlayer(dead), GetUnitTypeId(dead), GetUnitX(dead), GetUnitY(dead), GetUnitFacing(dead))
call DestroyTimer(t)
set dead = null
set t = null
endfunction
function Trig_Kill_Unit_Actions takes nothing returns nothing
local unit dead = GetTriggerUnit() //Присваиваем убитого юнита
local timer t = CreateTimer() //Создаём таймер
local integer s = GetHandleId(t) //Узнаём его ID
call SaveUnitHandle(udg_hash, s, 6, dead) //Сохраняем юнита
call TimerStart(t, 10, false, function Reborn) //Активируем одноразовый таймер на 10 секунд
set dead = null
set t = null
endfunction
код с учётом разложения
function Reborn takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer s = GetHandleId(t)
local player p = LoadPlayerHandle(udg_hash, s, 0)
local integer id = LoadInteger(udg_hash, s, 0)
local real x = LoadReal(udg_hash, s, 0)
local real y = LoadReal(udg_hash, s, 1)
local real f = LoadReal(udg_hash, s, 2)
call CreateUnit(p, id, x, y, f)
call FlushChildHashtable(udg_hash, s)
call DestroyTimer(t)
set t = null
set p = null
endfunction
function Trig_Kill_Unit_Actions takes nothing returns nothing
local unit dead = GetTriggerUnit()
local timer t = CreateTimer()
local integer s = GetHandleId(t)
call SavePlayerHandle(udg_hash, s, 0, GetOwningPlayer(dead))
call SaveInteger(udg_hash, s, 0, GetUnitTypeId(dead))
call SaveReal(udg_hash, s, 0, GetUnitX(dead))
call SaveReal(udg_hash, s, 1, GetUnitY(dead))
call SaveReal(udg_hash, s, 2, GetUnitFacing(dead))
call TimerStart(t, 10, false, function Reborn)
set dead = null
set t = null
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован PT153
Дохлых лучше не тревожить без толку, вручение им абилок как правило заканчивается фаталом, так же в некоторых случаев фаталят владельцы аур, случается это так - аура при появлении не проверяет жив ли владелец, а просто пытается вручить ему свой бафф сразу, остальным же юнитам бафф вручится через некоторое время, пока сработает глобальный таймер для аур (2 сек, переодический, со старта игры). Но вот стоит вызвать перерасчет бонусов или способностей, как аура вручит свой бонус дохлому юниту - фатал. При смерти на юнита накладывается разновидность сайленса, которая блокирует большинство способностей, но ауры не подвержены никаким сайленсам, поэтому вокруг мертвых юнитов действует аура пока они не разложатся и их координаты не станут некорректными. Будьте бдительны и осторожны!