World Editor Helper – Mappedia

World Editor Helper

Aus Mappedia
Wechseln zu: Navigation, Suche
function AnyUnitTakesDamage takes nothing returns nothing    
    call ConditionalTriggerExecute( gg_trg_DamageTextSystem )
endfunction
// part 1
function AddDamageTriggers takes nothing returns nothing
    local trigger takedamage = CreateTrigger()
    call TriggerRegisterUnitEvent(takedamage,GetTriggerUnit(),EVENT_UNIT_DAMAGED)
    call AttachObject(takedamage,"action",TriggerAddAction(takedamage,function AnyUnitTakesDamage))
    call AttachObject(GetTriggerUnit(),"TakeDamageTrigger",takedamage)
endfunction
// part 2
function RemoveDamageTriggers takes nothing returns nothing
    local unit u = GetTriggerUnit()
    local trigger me = GetAttachedTrigger(GetTriggerUnit(),"TakeDamageTrigger")
    local string t = GetAttachmentTable(me)
    local boolean revived = false

	if not IsUnitType(u,UNIT_TYPE_HERO) then
    	loop
        	set revived = (GetWidgetLife(u)>0.405)
        	exitwhen revived or GetUnitTypeId(u)==0
        	call TriggerSleepAction(0)
 		endloop
	endif

    if not revived then
        // delete action and trigger
        call TriggerRemoveAction(me,GetTableTriggerAction(t,"action"))
        call DestroyTable(t)
        call DestroyTrigger(me)
    endif
    set me = null
    set u = null
endfunction
// part 3
function InitTrig_AddDmg takes nothing returns nothing
    local trigger entermap = CreateTrigger()
    local group startingunits = CreateGroup()
    local unit u
    local trigger takedamage
    local trigger upondeath = CreateTrigger()
    call GroupEnumUnitsInRect(startingunits,bj_mapInitialPlayableArea,null)
    loop
        set u = FirstOfGroup(startingunits)
        exitwhen u == null
        set takedamage = CreateTrigger()
        call TriggerRegisterUnitEvent(takedamage,u,EVENT_UNIT_DAMAGED)
        call AttachObject(takedamage,"action",TriggerAddAction(takedamage,function AnyUnitTakesDamage))
        call AttachObject(u,"TakeDamageTrigger",takedamage)
        call GroupRemoveUnit(startingunits,u)
    endloop
    set takedamage = null

    // unit enters the map/revives
    call TriggerRegisterAnyUnitEventBJ(entermap ,EVENT_PLAYER_HERO_REVIVE_FINISH)
    call TriggerRegisterEnterRectSimple(entermap, bj_mapInitialPlayableArea)
    call TriggerAddAction(entermap,function AddDamageTriggers)

    // unit dies
    call TriggerRegisterAnyUnitEventBJ(upondeath,EVENT_PLAYER_UNIT_DEATH)
    call TriggerAddAction(upondeath,function RemoveDamageTriggers)
endfunction
Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Warcraft-Mapping
Werkzeuge