Код Карты
//!===================================================================================
// (Код Карты)
//!===================================================================================
function DT takes trigger t returns nothing
call FlushChildHashtable(udg_H,GetHandleId(t))
call DestroyTrigger(t)
set t = null
endfunction
function TriggerInitAll takes trigger trig, playerunitevent whichEvent returns nothing
local integer i
set i = 0
loop
call TriggerRegisterPlayerUnitEvent(trig, Player(i), whichEvent, null)
set i = i + 1
exitwhen i == bj_MAX_PLAYER_SLOTS
endloop
set trig = null
set whichEvent = null
endfunction
Сам триггер
//!===================================================================================
// (Сам триггер)
//!===================================================================================
function ShadowCondition takes nothing returns boolean
local trigger TZ = GetTriggeringTrigger()
local unit u = LoadUnitHandle(udg_H,GetHandleId(TZ),1)
if GetTriggerEventId()==EVENT_WIDGET_DEATH then
if GetTriggerUnit()== u then
call UnitRemoveBuffBJ( 'Binv', u )
call DT(TZ)
endif
endif
if GetTriggerEventId()==EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER then
if GetTriggerUnit()== u then
call UnitRemoveBuffBJ( 'Binv', u )
call DT(TZ)
endif
endif
if GetTriggerEventId()==EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER then
if GetTriggerUnit()== u then
call UnitRemoveBuffBJ( 'Binv', u )
call DT(TZ)
endif
endif
if GetTriggerEventId()==EVENT_PLAYER_UNIT_ATTACKED then
if GetTriggerUnit()== u then
call UnitRemoveBuffBJ( 'Binv', u )
call DT(TZ)
endif
endif
set u = null
return false
endfunction
function ShadowScroll takes unit u,real time returns nothing
local trigger TU = CreateTrigger()
call TriggerRegisterTimerEvent(TU,time,false)
call TriggerRegisterPlayerUnitEvent(TU,GetOwningPlayer(u),EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER, null)
call TriggerRegisterPlayerUnitEvent(TU,GetOwningPlayer(u),EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER, null)
call TriggerRegisterPlayerUnitEvent(TU,GetOwningPlayer(u),EVENT_PLAYER_UNIT_ATTACKED, null)
call TriggerRegisterUnitEvent(TU,u,EVENT_UNIT_DEATH )
call TriggerAddCondition(TU,Condition(function ShadowCondition))
local effect e = AddSpecialEffectTarget("Abilities\\Spells\\Undead\\DeathandDecay\\DeathandDecayTarget.mdl",u,"chest")
local effect e2 = AddSpecialEffectTarget("Abilities\\Spells\\Undead\\DeathandDecay\\DeathandDecayTarget.mdl",u,"hand left")
local effect e3 = AddSpecialEffectTarget("Abilities\\Spells\\Undead\\DeathandDecay\\DeathandDecayTarget.mdl",u,"hand left")
local unit d = CreateUnit(GetOwningPlayer(u),'udes',GetUnitX(u), GetUnitY(u), 0)
call IssueImmediateOrder( u, "holdposition" )
call UnitAddAbility(d,'Aivs')
call UnitApplyTimedLife(d, 'BTLF', 2.50)
call IssueTargetOrder(d,"invisibility",u)
call SaveUnitHandle(udg_H,GetHandleId(TU),1,u)
call DestroyEffect(e)
call DestroyEffect(e2)
call DestroyEffect(e3)
set e = null
set e2 = null
set e3 = null
set d = null
set TU = null
endfunction
//!===============================================================================================================================
//
//!===============================================================================================================================
function Trig_ShadowAmulet_Actions takes nothing returns nothing
local unit a = GetSpellAbilityUnit()
if GetSpellAbilityId() == 'ANcl' then
call ShadowScroll(a,1)
endif
set a = null
endfunction
//===========================================================================
function InitTrig_ShadowAmulet takes nothing returns nothing
local trigger ShadowAmmulet = CreateTrigger( )
call TriggerInitAll(ShadowAmmulet, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddAction(ShadowAmmulet, function Trig_ShadowAmulet_Actions )
set ShadowAmmulet = null
endfunction
Принятый ответ
хендл - это целое число в хэш таблице варика(ид объекта)
хэндл в данном случае это номер ячейки памяти
хэштейблы тут вообще не причём
в варике реализовано нечто наподобие сборки мусора для хэндллов
если хэндл используется(занесён в переменную) то память не помечается как свободная
по коду
используй таймеры вместо триггеров
лучше использовать стек вместо хэштейбла
хэштейблы тут вообще не причём
в варике реализовано нечто наподобие сборки мусора для хэндллов
если хэндл используется(занесён в переменную) то память не помечается как свободная
по коду
используй таймеры вместо триггеров
лучше использовать стек вместо хэштейбла
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Ред. nvc123
хэштейблы тут вообще не причём
в варике реализовано нечто наподобие сборки мусора для хэндллов
если хэндл используется(занесён в переменную) то память не помечается как свободная
по коду
используй таймеры вместо триггеров
лучше использовать стек вместо хэштейбла
не надо использовать локальные триггеры