• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Cant run an old map

Status
Not open for further replies.
Level 11
Joined
Jul 17, 2013
Messages
544
Hi guys im trying to fix old map, this is what appears once i click to test map anyone knows how to fix it ? i got completly no idea View attachment 338174

and heres the map code

JASS:
function s__HeroesData__allocate takes nothing returns integer
    local integer this=udg_integer23
    if(this!=0)then
        set udg_integer23=udg_integers18[this]
    else
        set udg_integer24=udg_integer24+1
        set this=udg_integer24
    endif
    if(this>1637)then
        return 0
    endif
    set udg_integers19[this]=(this-1)*5
    set udg_items02[this]=null
    set udg_units04[this]=null
    set udg_integers20[this]=0
    set udg_booleans02[this]=false
    set udg_booleans03[this]=false
    set udg_booleans04[this]=false
    set udg_reals01[this]=0
    set udg_reals02[this]=0
    set udg_integers21[this]=0
    set udg_booleans05[this]=false
    set udg_booleans06[this]=false
    set udg_units06[this]=null
    set udg_triggers06[this]=null
    set udg_triggers07[this]=null
    set udg_integers18[this]=-1
    return this
endfunction

function s__HeroesData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers18[this]!=-1)then
        return
    endif
    set udg_integers18[this]=udg_integer23
    set udg_integer23=this
endfunction

function sc__Kananmuna__Data_onDestroy takes integer this returns nothing
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger75)
endfunction

function s__Kananmuna__Data__allocate takes nothing returns integer
    local integer this=udg_integer57
    if(this!=0)then
        set udg_integer57=udg_integers49[this]
    else
        set udg_integer58=udg_integer58+1
        set this=udg_integer58
    endif
    if(this>8190)then
        return 0
    endif
    set udg_booleans19[this]=false
    set udg_integers49[this]=-1
    return this
endfunction

function sc__Kananmuna__Data_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers49[this]!=-1)then
        return
    endif
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger75)
    set udg_integers49[this]=udg_integer57
    set udg_integer57=this
endfunction

function sc__Stupefy__StupefySlideData_onDestroy takes integer this returns nothing
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger74)
endfunction

function s__Stupefy__StupefySlideData__allocate takes nothing returns integer
    local integer this=udg_integer55
    if(this!=0)then
        set udg_integer55=udg_integers48[this]
    else
        set udg_integer56=udg_integer56+1
        set this=udg_integer56
    endif
    if(this>8190)then
        return 0
    endif
    set udg_integers48[this]=-1
    return this
endfunction

function sc__Stupefy__StupefySlideData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers48[this]!=-1)then
        return
    endif
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger74)
    set udg_integers48[this]=udg_integer55
    set udg_integer55=this
endfunction

function sc__Stupefy__StupefyData_onDestroy takes integer this returns nothing
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger73)
endfunction

function s__Stupefy__StupefyData__allocate takes nothing returns integer
    local integer this=udg_integer53
    if(this!=0)then
        set udg_integer53=udg_integers47[this]
    else
        set udg_integer54=udg_integer54+1
        set this=udg_integer54
    endif
    if(this>8190)then
        return 0
    endif
    set udg_triggers15[this]=CreateTrigger()
    set udg_booleans18[this]=false
    set udg_integers47[this]=-1
    return this
endfunction

function sc__Stupefy__StupefyData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers47[this]!=-1)then
        return
    endif
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger73)
    set udg_integers47[this]=udg_integer53
    set udg_integer53=this
endfunction

function sc__Sektumsempra__SektumsempraBleedingData_onDestroy takes integer this returns nothing
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger72)
endfunction

function s__Sektumsempra__SektumsempraBleedingData__allocate takes nothing returns integer
    local integer this=udg_integer51
    if(this!=0)then
        set udg_integer51=udg_integers45[this]
    else
        set udg_integer52=udg_integer52+1
        set this=udg_integer52
    endif
    if(this>8190)then
        return 0
    endif
    set udg_integers45[this]=-1
    return this
endfunction

function sc__Sektumsempra__SektumsempraBleedingData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers45[this]!=-1)then
        return
    endif
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger72)
    set udg_integers45[this]=udg_integer51
    set udg_integer51=this
endfunction

function sc__Sektumsempra__SektumsempraData_onDestroy takes integer this returns nothing
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger71)
endfunction

function s__Sektumsempra__SektumsempraData__allocate takes nothing returns integer
    local integer this=udg_integer49
    if(this!=0)then
        set udg_integer49=udg_integers44[this]
    else
        set udg_integer50=udg_integer50+1
        set this=udg_integer50
    endif
    if(this>8190)then
        return 0
    endif
    set udg_triggers14[this]=CreateTrigger()
    set udg_booleans17[this]=false
    set udg_integers44[this]=-1
    return this
endfunction

function sc__Sektumsempra__SektumsempraData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers44[this]!=-1)then
        return
    endif
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger71)
    set udg_integers44[this]=udg_integer49
    set udg_integer49=this
endfunction

function s__Imperio__ImperioConfuseData__allocate takes nothing returns integer
    local integer this=udg_integer47
    if(this!=0)then
        set udg_integer47=udg_integers43[this]
    else
        set udg_integer48=udg_integer48+1
        set this=udg_integer48
    endif
    if(this>8190)then
        return 0
    endif
    set udg_integers43[this]=-1
    return this
endfunction

function s__Imperio__ImperioConfuseData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers43[this]!=-1)then
        return
    endif
    set udg_integers43[this]=udg_integer47
    set udg_integer47=this
endfunction

function sc__Imperio__ImperioData_onDestroy takes integer this returns nothing
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger70)
endfunction

function s__Imperio__ImperioData__allocate takes nothing returns integer
    local integer this=udg_integer45
    if(this!=0)then
        set udg_integer45=udg_integers42[this]
    else
        set udg_integer46=udg_integer46+1
        set this=udg_integer46
    endif
    if(this>8190)then
        return 0
    endif
    set udg_triggers12[this]=CreateTrigger()
    set udg_booleans16[this]=false
    set udg_integers42[this]=-1
    return this
endfunction

function sc__Imperio__ImperioData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers42[this]!=-1)then
        return
    endif
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger70)
    set udg_integers42[this]=udg_integer45
    set udg_integer45=this
endfunction

function sc__Impedimenta__ImpedimentaFlyData_onDestroy takes integer this returns nothing
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger69)
endfunction

function s__Impedimenta__ImpedimentaFlyData__allocate takes nothing returns integer
    local integer this=udg_integer43
    if(this!=0)then
        set udg_integer43=udg_integers39[this]
    else
        set udg_integer44=udg_integer44+1
        set this=udg_integer44
    endif
    if(this>8190)then
        return 0
    endif
    set udg_booleans15[this]=false
    set udg_integers39[this]=-1
    return this
endfunction

function sc__Impedimenta__ImpedimentaFlyData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers39[this]!=-1)then
        return
    endif
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger69)
    set udg_integers39[this]=udg_integer43
    set udg_integer43=this
endfunction

function sc__Impedimenta__ImpedimentaData_onDestroy takes integer this returns nothing
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger68)
endfunction

function s__Impedimenta__ImpedimentaData__allocate takes nothing returns integer
    local integer this=udg_integer41
    if(this!=0)then
        set udg_integer41=udg_integers38[this]
    else
        set udg_integer42=udg_integer42+1
        set this=udg_integer42
    endif
    if(this>8190)then
        return 0
    endif
    set udg_triggers11[this]=CreateTrigger()
    set udg_booleans14[this]=false
    set udg_integers38[this]=-1
    return this
endfunction

function sc__Impedimenta__ImpedimentaData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers38[this]!=-1)then
        return
    endif
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger68)
    set udg_integers38[this]=udg_integer41
    set udg_integer41=this
endfunction

function sc__Expelliarmus__FlyingWandData_onDestroy takes integer this returns nothing
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger67)
endfunction

function s__Expelliarmus__FlyingWandData__allocate takes nothing returns integer
    local integer this=udg_integer39
    if(this!=0)then
        set udg_integer39=udg_integers35[this]
    else
        set udg_integer40=udg_integer40+1
        set this=udg_integer40
    endif
    if(this>8190)then
        return 0
    endif
    set udg_booleans13[this]=false
    set udg_integers35[this]=-1
    return this
endfunction

function sc__Expelliarmus__FlyingWandData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers35[this]!=-1)then
        return
    endif
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger67)
    set udg_integers35[this]=udg_integer39
    set udg_integer39=this
endfunction

function sc__Expelliarmus__ExpelliarmusData_onDestroy takes integer this returns nothing
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger66)
endfunction

function s__Expelliarmus__ExpelliarmusData__allocate takes nothing returns integer
    local integer this=udg_integer37
    if(this!=0)then
        set udg_integer37=udg_integers34[this]
    else
        set udg_integer38=udg_integer38+1
        set this=udg_integer38
    endif
    if(this>8190)then
        return 0
    endif
    set udg_triggers10[this]=CreateTrigger()
    set udg_booleans12[this]=false
    set udg_integers34[this]=-1
    return this
endfunction

function sc__Expelliarmus__ExpelliarmusData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers34[this]!=-1)then
        return
    endif
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger66)
    set udg_integers34[this]=udg_integer37
    set udg_integer37=this
endfunction

function sc__Crucio__Crucio_TortureData_onDestroy takes integer this returns nothing
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger65)
endfunction

function s__Crucio__Crucio_TortureData__allocate takes nothing returns integer
    local integer this=udg_integer35
    if(this!=0)then
        set udg_integer35=udg_integers32[this]
    else
        set udg_integer36=udg_integer36+1
        set this=udg_integer36
    endif
    if(this>8190)then
        return 0
    endif
    set udg_integers32[this]=-1
    return this
endfunction

function sc__Crucio__Crucio_TortureData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers32[this]!=-1)then
        return
    endif
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger65)
    set udg_integers32[this]=udg_integer35
    set udg_integer35=this
endfunction

function sc__Crucio__CrucioData_onDestroy takes integer this returns nothing
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger64)
endfunction

function s__Crucio__CrucioData__allocate takes nothing returns integer
    local integer this=udg_integer33
    if(this!=0)then
        set udg_integer33=udg_integers31[this]
    else
        set udg_integer34=udg_integer34+1
        set this=udg_integer34
    endif
    if(this>8190)then
        return 0
    endif
    set udg_triggers09[this]=CreateTrigger()
    set udg_booleans10[this]=false
    set udg_integers31[this]=-1
    return this
endfunction

function sc__Crucio__CrucioData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers31[this]!=-1)then
        return
    endif
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger64)
    set udg_integers31[this]=udg_integer33
    set udg_integer33=this
endfunction

function sc__AvadaKedavra__AvadaKedavraData_onDestroy takes integer this returns nothing
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger63)
endfunction

function s__AvadaKedavra__AvadaKedavraData__allocate takes nothing returns integer
    local integer this=udg_integer31
    if(this!=0)then
        set udg_integer31=udg_integers30[this]
    else
        set udg_integer32=udg_integer32+1
        set this=udg_integer32
    endif
    if(this>8190)then
        return 0
    endif
    set udg_triggers08[this]=CreateTrigger()
    set udg_booleans09[this]=false
    set udg_integers30[this]=-1
    return this
endfunction

function sc__AvadaKedavra__AvadaKedavraData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers30[this]!=-1)then
        return
    endif
    set udg_integer59=this
    call TriggerEvaluate(udg_trigger63)
    set udg_integers30[this]=udg_integer31
    set udg_integer31=this
endfunction

function s__Casters__allocate takes nothing returns integer
    local integer this=udg_integer29
    if(this!=0)then
        set udg_integer29=udg_integers28[this]
    else
        set udg_integer30=udg_integer30+1
        set this=udg_integer30
    endif
    if(this>8190)then
        return 0
    endif
    set udg_integers28[this]=-1
    return this
endfunction

function s__Casters_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers28[this]!=-1)then
        return
    endif
    set udg_integers28[this]=udg_integer29
    set udg_integer29=this
endfunction

function s__vector__allocate takes nothing returns integer
    local integer this=udg_integer27
    if(this!=0)then
        set udg_integer27=udg_integers27[this]
    else
        set udg_integer28=udg_integer28+1
        set this=udg_integer28
    endif
    if(this>8190)then
        return 0
    endif
    set udg_integers27[this]=-1
    return this
endfunction

function s__vector_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers27[this]!=-1)then
        return
    endif
    set udg_integers27[this]=udg_integer27
    set udg_integer27=this
endfunction

function s__MissileData__allocate takes nothing returns integer
    local integer this=udg_integer25
    if(this!=0)then
        set udg_integer25=udg_integers26[this]
    else
        set udg_integer26=udg_integer26+1
        set this=udg_integer26
    endif
    if(this>8190)then
        return 0
    endif
    set udg_booleans07[this]=false
    set udg_booleans08[this]=false
    set udg_integers26[this]=-1
    return this
endfunction

function s__MissileData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers26[this]!=-1)then
        return
    endif
    set udg_integers26[this]=udg_integer25
    set udg_integer25=this
endfunction

function ABC_H2I takes handle h returns integer
    return GetHandleId(h)
endfunction

function GetTimerCollisionA takes nothing returns integer
    return udg_integer07
endfunction

function SetTimerStructA takes timer t,integer s returns nothing
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    if udg_timers04[i]==null then
        set udg_integers05[i]=s
        set udg_timers04[i]=t
        return
    endif
    loop
        set i=i+1
        exitwhen udg_timers04[i]==null
    endloop
    set udg_integers05[i]=s
    set udg_timers04[i]=t
    return
endfunction

function GetTimerStructA takes timer t returns integer
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    if udg_timers04[i]==t then
        return udg_integers05[i]
    endif
    loop
        set i=i+1
        exitwhen udg_timers04[i]==t
    endloop
    return udg_integers05[i]
endfunction

function ClearTimerStructA takes timer t returns integer
    local integer ik
    local integer ret
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    loop
        exitwhen udg_timers04[i]==t
        set i=i+1
    endloop
    set ik=i
    set ret=udg_integers05[ik]
    loop
        set i=i+1
        exitwhen udg_timers04[i]==null
    endloop
    set udg_timers04[ik]=udg_timers04[i-1]
    set udg_integers05[ik]=udg_integers05[i-1]
    set udg_timers04[i-1]=null
    return ret
endfunction

function GetTimerCollisionB takes nothing returns integer
    return udg_integer08
endfunction

function SetTimerStructB takes timer t,integer s returns nothing
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    if udg_timers05[i]==null then
        set udg_integers06[i]=s
        set udg_timers05[i]=t
        return
    endif
    loop
        set i=i+1
        exitwhen udg_timers05[i]==null
    endloop
    set udg_integers06[i]=s
    set udg_timers05[i]=t
    return
endfunction

function GetTimerStructB takes timer t returns integer
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    if udg_timers05[i]==t then
        return udg_integers06[i]
    endif
    loop
        set i=i+1
        exitwhen udg_timers05[i]==t
    endloop
    return udg_integers06[i]
endfunction

function ClearTimerStructB takes timer t returns integer
    local integer ik
    local integer ret
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    loop
        exitwhen udg_timers05[i]==t
        set i=i+1
    endloop
    set ik=i
    set ret=udg_integers06[ik]
    loop
        set i=i+1
        exitwhen udg_timers05[i]==null
    endloop
    set udg_timers05[ik]=udg_timers05[i-1]
    set udg_integers06[ik]=udg_integers06[i-1]
    set udg_timers05[i-1]=null
    return ret
endfunction

function GetTimerCollisionC takes nothing returns integer
    return udg_integer09
endfunction

function SetTimerStructC takes timer t,integer s returns nothing
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    if udg_timers06[i]==null then
        set udg_integers07[i]=s
        set udg_timers06[i]=t
        return
    endif
    loop
        set i=i+1
        exitwhen udg_timers06[i]==null
    endloop
    set udg_integers07[i]=s
    set udg_timers06[i]=t
    return
endfunction

function GetTimerStructC takes timer t returns integer
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    if udg_timers06[i]==t then
        return udg_integers07[i]
    endif
    loop
        set i=i+1
        exitwhen udg_timers06[i]==t
    endloop
    return udg_integers07[i]
endfunction

function ClearTimerStructC takes timer t returns integer
    local integer ik
    local integer ret
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    loop
        exitwhen udg_timers06[i]==t
        set i=i+1
    endloop
    set ik=i
    set ret=udg_integers07[ik]
    loop
        set i=i+1
        exitwhen udg_timers06[i]==null
    endloop
    set udg_timers06[ik]=udg_timers06[i-1]
    set udg_integers07[ik]=udg_integers07[i-1]
    set udg_timers06[i-1]=null
    return ret
endfunction

function GetTriggerCollisionA takes nothing returns integer
    return udg_integer10
endfunction

function SetTriggerStructA takes trigger t,integer s returns nothing
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    if udg_triggers02[i]==null then
        set udg_integers08[i]=s
        set udg_triggers02[i]=t
        return
    endif
    loop
        set i=i+1
        exitwhen udg_triggers02[i]==null
    endloop
    set udg_integers08[i]=s
    set udg_triggers02[i]=t
    return
endfunction

function GetTriggerStructA takes trigger t returns integer
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    if udg_triggers02[i]==t then
        return udg_integers08[i]
    endif
    loop
        set i=i+1
        exitwhen udg_triggers02[i]==t
    endloop
    return udg_integers08[i]
endfunction

function ClearTriggerStructA takes trigger t returns integer
    local integer ik
    local integer ret
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    loop
        exitwhen udg_triggers02[i]==t
        set i=i+1
    endloop
    set ik=i
    set ret=udg_integers08[ik]
    loop
        set i=i+1
        exitwhen udg_triggers02[i]==null
    endloop
    set udg_triggers02[ik]=udg_triggers02[i-1]
    set udg_integers08[ik]=udg_integers08[i-1]
    set udg_triggers02[i-1]=null
    return ret
endfunction

function GetTriggerCollisionB takes nothing returns integer
    return udg_integer11
endfunction

function SetTriggerStructB takes trigger t,integer s returns nothing
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    if udg_triggers03[i]==null then
        set udg_integers09[i]=s
        set udg_triggers03[i]=t
        return
    endif
    loop
        set i=i+1
        exitwhen udg_triggers03[i]==null
    endloop
    set udg_integers09[i]=s
    set udg_triggers03[i]=t
    return
endfunction

function GetTriggerStructB takes trigger t returns integer
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    if udg_triggers03[i]==t then
        return udg_integers09[i]
    endif
    loop
        set i=i+1
        exitwhen udg_triggers03[i]==t
    endloop
    return udg_integers09[i]
endfunction

function ClearTriggerStructB takes trigger t returns integer
    local integer ik
    local integer ret
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    loop
        exitwhen udg_triggers03[i]==t
        set i=i+1
    endloop
    set ik=i
    set ret=udg_integers09[ik]
    loop
        set i=i+1
        exitwhen udg_triggers03[i]==null
    endloop
    set udg_triggers03[ik]=udg_triggers03[i-1]
    set udg_integers09[ik]=udg_integers09[i-1]
    set udg_triggers03[i-1]=null
    return ret
endfunction

function GetTriggerCollisionC takes nothing returns integer
    return udg_integer12
endfunction

function SetTriggerStructC takes trigger t,integer s returns nothing
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    if udg_triggers04[i]==null then
        set udg_integers10[i]=s
        set udg_triggers04[i]=t
        return
    endif
    loop
        set i=i+1
        exitwhen udg_triggers04[i]==null
    endloop
    set udg_integers10[i]=s
    set udg_triggers04[i]=t
    return
endfunction

function GetTriggerStructC takes trigger t returns integer
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    if udg_triggers04[i]==t then
        return udg_integers10[i]
    endif
    loop
        set i=i+1
        exitwhen udg_triggers04[i]==t
    endloop
    return udg_integers10[i]
endfunction

function ClearTriggerStructC takes trigger t returns integer
    local integer ik
    local integer ret
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    loop
        exitwhen udg_triggers04[i]==t
        set i=i+1
    endloop
    set ik=i
    set ret=udg_integers10[ik]
    loop
        set i=i+1
        exitwhen udg_triggers04[i]==null
    endloop
    set udg_triggers04[ik]=udg_triggers04[i-1]
    set udg_integers10[ik]=udg_integers10[i-1]
    set udg_triggers04[i-1]=null
    return ret
endfunction

function GetDialogCollisionA takes nothing returns integer
    return udg_integer13
endfunction

function SetDialogStructA takes dialog t,integer s returns nothing
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    if udg_dialogs01[i]==null then
        set udg_integers11[i]=s
        set udg_dialogs01[i]=t
        return
    endif
    loop
        set i=i+1
        exitwhen udg_dialogs01[i]==null
    endloop
    set udg_integers11[i]=s
    set udg_dialogs01[i]=t
    return
endfunction

function GetDialogStructA takes dialog t returns integer
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    if udg_dialogs01[i]==t then
        return udg_integers11[i]
    endif
    loop
        set i=i+1
        exitwhen udg_dialogs01[i]==t
    endloop
    return udg_integers11[i]
endfunction

function ClearDialogStructA takes dialog t returns integer
    local integer ik
    local integer ret
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    loop
        exitwhen udg_dialogs01[i]==t
        set i=i+1
    endloop
    set ik=i
    set ret=udg_integers11[ik]
    loop
        set i=i+1
        exitwhen udg_dialogs01[i]==null
    endloop
    set udg_dialogs01[ik]=udg_dialogs01[i-1]
    set udg_integers11[ik]=udg_integers11[i-1]
    set udg_dialogs01[i-1]=null
    return ret
endfunction

function GetDialogCollisionB takes nothing returns integer
    return udg_integer14
endfunction

function SetDialogStructB takes dialog t,integer s returns nothing
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    if udg_dialogs02[i]==null then
        set udg_integers12[i]=s
        set udg_dialogs02[i]=t
        return
    endif
    loop
        set i=i+1
        exitwhen udg_dialogs02[i]==null
    endloop
    set udg_integers12[i]=s
    set udg_dialogs02[i]=t
    return
endfunction

function GetDialogStructB takes dialog t returns integer
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    if udg_dialogs02[i]==t then
        return udg_integers12[i]
    endif
    loop
        set i=i+1
        exitwhen udg_dialogs02[i]==t
    endloop
    return udg_integers12[i]
endfunction

function ClearDialogStructB takes dialog t returns integer
    local integer ik
    local integer ret
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    loop
        exitwhen udg_dialogs02[i]==t
        set i=i+1
    endloop
    set ik=i
    set ret=udg_integers12[ik]
    loop
        set i=i+1
        exitwhen udg_dialogs02[i]==null
    endloop
    set udg_dialogs02[ik]=udg_dialogs02[i-1]
    set udg_integers12[ik]=udg_integers12[i-1]
    set udg_dialogs02[i-1]=null
    return ret
endfunction

function GetDialogCollisionC takes nothing returns integer
    return udg_integer15
endfunction

function SetDialogStructC takes dialog t,integer s returns nothing
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    if udg_dialogs03[i]==null then
        set udg_integers13[i]=s
        set udg_dialogs03[i]=t
        return
    endif
    loop
        set i=i+1
        exitwhen udg_dialogs03[i]==null
    endloop
    set udg_integers13[i]=s
    set udg_dialogs03[i]=t
    return
endfunction

function GetDialogStructC takes dialog t returns integer
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    if udg_dialogs03[i]==t then
        return udg_integers13[i]
    endif
    loop
        set i=i+1
        exitwhen udg_dialogs03[i]==t
    endloop
    return udg_integers13[i]
endfunction

function ClearDialogStructC takes dialog t returns integer
    local integer ik
    local integer ret
    local integer i=(ABC_H2I(t)*ABC_HASH_UP)/ABC_HASH_DOWN+ABC_HASH_BIAS
    loop
        exitwhen udg_dialogs03[i]==t
        set i=i+1
    endloop
    set ik=i
    set ret=udg_integers13[ik]
    loop
        set i=i+1
        exitwhen udg_dialogs03[i]==null
    endloop
    set udg_dialogs03[ik]=udg_dialogs03[i-1]
    set udg_integers13[ik]=udg_integers13[i-1]
    set udg_dialogs03[i-1]=null
    return ret
endfunction

function ABC___Init takes nothing returns nothing
    set udg_timers04[ABC_HASH_INDEX_LIMIT]=null
    set udg_integers05[ABC_HASH_INDEX_LIMIT]=0
    set udg_timers05[ABC_HASH_INDEX_LIMIT]=null
    set udg_integers06[ABC_HASH_INDEX_LIMIT]=0
    set udg_timers06[ABC_HASH_INDEX_LIMIT]=null
    set udg_integers07[ABC_HASH_INDEX_LIMIT]=0
    set udg_triggers02[ABC_HASH_INDEX_LIMIT]=null
    set udg_integers08[ABC_HASH_INDEX_LIMIT]=0
    set udg_triggers03[ABC_HASH_INDEX_LIMIT]=null
    set udg_integers09[ABC_HASH_INDEX_LIMIT]=0
    set udg_triggers04[ABC_HASH_INDEX_LIMIT]=null
    set udg_integers10[ABC_HASH_INDEX_LIMIT]=0
    set udg_dialogs01[ABC_HASH_INDEX_LIMIT]=null
    set udg_integers11[ABC_HASH_INDEX_LIMIT]=0
    set udg_dialogs02[ABC_HASH_INDEX_LIMIT]=null
    set udg_integers12[ABC_HASH_INDEX_LIMIT]=0
    set udg_dialogs03[ABC_HASH_INDEX_LIMIT]=null
    set udg_integers13[ABC_HASH_INDEX_LIMIT]=0
endfunction

function ABCT___H2I takes handle h returns integer
    return GetHandleId(h)
endfunction

function ABCT___NewTimerIndex takes nothing returns integer
    local timer t
    local integer i
    if(udg_integer04==0)then
        loop
            set t=CreateTimer()
            set i=(ABCT___H2I(t)*ABCT_HASH_UP)/ABCT_HASH_DOWN+ABCT_HASH_BIAS
            if udg_timers03[i]==null then
                set udg_timers03[i]=t
                return i
            else
                set udg_timers02[udg_integer05]=t
                set udg_integer05=udg_integer05+1
            endif
        endloop
    endif
    set udg_integer04=udg_integer04-1
    return(ABCT___H2I(udg_timers01[udg_integer04])*ABCT_HASH_UP)/ABCT_HASH_DOWN+ABCT_HASH_BIAS
endfunction

function ABCT___Periodic takes nothing returns nothing
    local integer i=(ABCT___H2I(GetExpiredTimer())*ABCT_HASH_UP)/ABCT_HASH_DOWN+ABCT_HASH_BIAS
    set udg_integer06=udg_integers04[i]
    if TriggerEvaluate(udg_triggers01[i])then
        call TriggerClearConditions(udg_triggers01[i])
        call PauseTimer(udg_timers03[i])
        set udg_timers01[udg_integer04]=udg_timers03[i]
        set udg_integer04=udg_integer04+1
    endif
endfunction

function ABCT_Start takes code userFunc,integer data,real period returns nothing
    local integer i
    set i=ABCT___NewTimerIndex()
    if udg_triggers01[i]==null then
        set udg_triggers01[i]=CreateTrigger()
    endif
    call TriggerAddCondition(udg_triggers01[i],Condition(userFunc))
    set udg_integers04[i]=data
    call TimerStart(udg_timers03[i],period,true,function ABCT___Periodic)
endfunction

function ABCT_Zero takes code userFunc,integer data returns nothing
    local integer i
    set i=ABCT___NewTimerIndex()
    if udg_triggers01[i]==null then
        set udg_triggers01[i]=CreateTrigger()
    endif
    call TriggerAddCondition(udg_triggers01[i],Condition(userFunc))
    set udg_integers04[i]=data
    call TimerStart(udg_timers03[i],.0,false,function ABCT___Periodic)
endfunction

function ABCT_GetData takes nothing returns integer
    return udg_integer06
endfunction

function ABCT___Init takes nothing returns nothing
    set udg_timers01[ABCT_HASH_SIZE-1]=null
    set udg_timers02[ABCT_HASH_SIZE-1]=null
    set udg_timers03[ABCT_HASH_SIZE-1]=null
    set udg_triggers01[ABCT_HASH_SIZE-1]=null
    set udg_integers04[ABCT_HASH_SIZE-1]=0
endfunction

function ShowOrderTeam takes boolean b returns nothing
    local integer i=0
    local integer pl=6
    loop
        exitwhen i>5
        loop
            exitwhen pl>11
            call UnitShareVision(udg_units02[i],Player(pl),b)
            set pl=pl+1
        endloop
        set pl=6
        set i=i+1
    endloop
endfunction

function ShowEaterTeam takes boolean b returns nothing
    local integer i=6
    local integer pl=0
    loop
        exitwhen i>11
        loop
            exitwhen pl>5
            call UnitShareVision(udg_units02[i],Player(pl),b)
            set pl=pl+1
        endloop
        set pl=0
        set i=i+1
    endloop
endfunction

function DistanceBetweenXY takes real x1,real y1,real x2,real y2 returns real
    local real dx=x2-x1
    local real dy=y2-y1
    return SquareRoot(dx*dx+dy*dy)
endfunction

function UnitHasItemOfType takes unit whichUnit,integer itemId returns boolean
    local integer index
    local item indexItem
    set index=0
    loop
        set indexItem=UnitItemInSlot(whichUnit,index)
        if(indexItem!=null)and(GetItemTypeId(indexItem)==itemId)then
            set indexItem=null
            return true
        endif
        set index=index+1
        exitwhen index>=6
    endloop
    set indexItem=null
    return false
endfunction

function HeroConfused takes nothing returns nothing
    local unit u=GetTriggerUnit()
    local real x=GetUnitX(u)+GetRandomReal(-1000,1000)
    local real y=GetUnitY(u)+GetRandomReal(-1000,1000)
    local trigger t=GetTriggeringTrigger()
    if GetUnitAbilityLevel(u,'BPSE')<=0 and GetUnitFlyHeight(u)<=10 then
        call DisableTrigger(t)
        call IssuePointOrderById(u,851986,x,y)
        call EnableTrigger(t)
    endif
    set u=null
    set t=null
endfunction

function Hero_OrderIssued takes nothing returns nothing
    local integer H=GetTriggerStructA(GetTriggeringTrigger())
    if udg_booleans03[H]then
        set udg_booleans03[H]=false
    endif
endfunction

function SetHeroReady takes unit u returns nothing
    local integer i=GetPlayerId(GetOwningPlayer(u))
    local integer H=s__HeroesData__allocate()
    set udg_units02[i]=u
    set udg_triggers06[H]=CreateTrigger()
    call TriggerRegisterUnitEvent(udg_triggers06[H],udg_units02[i],EVENT_UNIT_ISSUED_ORDER)
    call TriggerRegisterUnitEvent(udg_triggers06[H],udg_units02[i],EVENT_UNIT_ISSUED_TARGET_ORDER)
    call TriggerRegisterUnitEvent(udg_triggers06[H],udg_units02[i],EVENT_UNIT_ISSUED_POINT_ORDER)
    call TriggerAddAction(udg_triggers06[H],function HeroConfused)
    set udg_triggers07[H]=CreateTrigger()
    call TriggerRegisterUnitEvent(udg_triggers07[H],udg_units02[i],EVENT_UNIT_ISSUED_ORDER)
    call TriggerRegisterUnitEvent(udg_triggers07[H],udg_units02[i],EVENT_UNIT_ISSUED_TARGET_ORDER)
    call TriggerRegisterUnitEvent(udg_triggers07[H],udg_units02[i],EVENT_UNIT_ISSUED_POINT_ORDER)
    call TriggerAddAction(udg_triggers07[H],function Hero_OrderIssued)
    call DisableTrigger(udg_triggers06[H])
    set udg_items02[H]=CreateItem(MAGIC_WAND_ITEM_ID,0,0)
    set udg_items01[i]=udg_items02[H]
    set udg_booleans05[H]=true
    set udg_integers15[i]=0
    call UnitAddItem(udg_units02[i],udg_items02[H])
    set udg_booleans02[H]=true
    set udg_reals01[H]=GetUnitX(udg_units02[i])
    set udg_reals02[H]=GetUnitY(udg_units02[i])
    set udg_integers21[H]=i
    set udg_integers16[i]=H
    call SetUnitUserData(udg_units02[i],H)
    set udg_units06[H]=CreateUnit(Player(15),'hgry',STORAGE_AREA_X,STORAGE_AREA_Y,0)
    call PauseUnit(udg_units06[H],true)
    set udg_units03[i]=udg_units06[H]
    call SetItemUserData(udg_items02[H],i)
    call SetTriggerStructA(udg_triggers07[H],H)
    set udg_integers25[H]=255
    set udg_integers23[H]=255
    set udg_integers24[H]=255
    set udg_integers22[H]=255
endfunction

function OnMoveSet takes nothing returns nothing
    local integer H
    local integer i=0
    local real x
    local real y
    loop
        exitwhen i>11
        set H=udg_integers16[i]
        set x=GetUnitX(udg_units02[i])
        set y=GetUnitY(udg_units02[i])
        if x==udg_reals01[H]and y==udg_reals02[H]then
            set udg_booleans04[H]=false
        else
            set udg_booleans04[H]=true
        endif
        set udg_reals01[H]=x
        set udg_reals02[H]=y
        set i=i+1
    endloop
endfunction

function IsUnitMoving takes unit u returns boolean
    local integer H=GetUnitUserData(u)
    return udg_booleans04[H]
endfunction

function IsUnitAlive takes unit u returns boolean
    local integer H=GetUnitUserData(u)
    return udg_booleans02[H]
endfunction

function IsUnitMindControlled takes unit u returns boolean
    local integer H=GetUnitUserData(u)
    if udg_units04[H]==null then
        return false
    endif
    return true
endfunction

function Heroes__FadeIn takes integer p returns nothing
    local player pl=Player(p)
    set udg_booleans01=false
    if GetLocalPlayer()==pl then
        call SetCineFilterTexture("ReplaceableTextures\\CameraMasks\\Black_mask.blp")
        call SetCineFilterBlendMode(BLEND_MODE_BLEND)
        call SetCineFilterTexMapFlags(TEXMAP_FLAG_NONE)
        call SetCineFilterStartUV(0,0,1,1)
        call SetCineFilterEndUV(0,0,1,1)
        call SetCineFilterStartColor(0,0,0,255)
        call SetCineFilterEndColor(0,0,0,0)
        call SetCineFilterDuration(1.)
        call DisplayCineFilter(true)
    endif
    set pl=null
endfunction

function Heroes__FadeOff takes integer p returns nothing
    local player pl=Player(p)
    set udg_booleans01=true
    if GetLocalPlayer()==pl then
        call SetCineFilterTexture("ReplaceableTextures\\CameraMasks\\Black_mask.blp")
        call SetCineFilterBlendMode(BLEND_MODE_BLEND)
        call SetCineFilterTexMapFlags(TEXMAP_FLAG_NONE)
        call SetCineFilterStartUV(0,0,1,1)
        call SetCineFilterEndUV(0,0,1,1)
        call SetCineFilterStartColor(0,0,0,0)
        call SetCineFilterEndColor(0,0,0,255)
        call SetCineFilterDuration(1.)
        call DisplayCineFilter(true)
    endif
    set pl=null
endfunction

function Filttemellarung takes nothing returns boolean
    return GetUnitTypeId(GetFilterUnit())=='N000'or GetUnitTypeId(GetFilterUnit())=='N001'
endfunction

function ClearGroup takes group udg_integer20 returns nothing
    local unit u
    loop
        set u=FirstOfGroup(udg_integer20)
        exitwhen u==null
        call GroupRemoveUnit(udg_integer20,u)
    endloop
endfunction

function ShowSet takes nothing returns nothing
    local integer i=0
    local integer i2=0
    local texttag t
    local real x
    local real y
    local real x2
    local real y2
    local real d
    local real endi
    local string msg="clap clap"
    local boolean b
    loop
        exitwhen i>11
        if UnitHasItemOfType(udg_units02[i],'I001')and IsUnitMoving(udg_units02[i])then
            set x=GetUnitX(udg_units02[i])
            set y=GetUnitY(udg_units02[i])
            set t=CreateTextTag()
            set i2=0
            loop
                exitwhen i2>11
                set x2=GetUnitX(udg_units02[i2])
                set y2=GetUnitY(udg_units02[i2])
                set d=DistanceBetweenXY(x,y,x2,y2)
                if d>900.then
                    if GetLocalPlayer()==Player(i2)and GetLocalPlayer()!=Player(i)then
                        set msg=""
                    endif
                endif
                set i2=i2+1
            endloop
            call SetTextTagText(t,msg,9.*.023/10)
            call SetTextTagPos(t,x,y,.5)
            call SetTextTagColor(t,'d','d','d',175)
            call SetTextTagPermanent(t,false)
            call SetTextTagVisibility(t,true)
            call SetTextTagVelocity(t,.0,.02)
            call SetTextTagLifespan(t,6.)
            call SetTextTagFadepoint(t,5.)
        endif
        set i=i+1
    endloop
    set t=null
    set i=0
    loop
        exitwhen i>11
        if UnitHasItemOfType(udg_units02[i],'I002')and IsUnitAlive(udg_units02[i])then
            if(GetUnitTypeId(udg_units02[i])=='N000')then
                set i2=0
                set endi=5
            else
                set i2=6
                set endi=11
            endif
            loop
                exitwhen i2>endi
                set x=GetUnitX(udg_units02[i2])
                set y=GetUnitY(udg_units02[i2])
                if IsUnitAlive(udg_units02[i2])then
                    if GetLocalPlayer()==Player(i)then
                        call PingMinimap(x,y,.89)
                    endif
                endif
                set i2=i2+1
            endloop
        endif
        set i=i+1
    endloop
    set i=0
    loop
        exitwhen i>11
        if udg_booleans01[i]and GetUnitAbilityLevel(udg_units02[i],Peruan_BUFF_ID)<=0 then
            call Heroes__FadeIn(i)
        elseif udg_booleans01[i]==false and GetUnitAbilityLevel(udg_units02[i],Peruan_BUFF_ID)>0 then
            call Heroes__FadeOff(i)
        endif
        set i=i+1
    endloop
    if udg_boolean01 then
        if udg_real01==0 then
            call ShowOrderTeam(false)
            set udg_boolean01=false
        endif
    else
        if udg_real01>0 then
            call ShowOrderTeam(true)
            set udg_boolean01=true
        endif
    endif
    if udg_boolean02 then
        if udg_real02==0 then
            call ShowEaterTeam(false)
            set udg_boolean02=false
        endif
    else
        if udg_real02>0 then
            call ShowEaterTeam(true)
            set udg_boolean02=true
        endif
    endif
    if udg_real02>0 then
        set udg_real02=udg_real02-1
    endif
    if udg_real01>0 then
        set udg_real01=udg_real01-1
    endif
endfunction

function TT__Handler takes nothing returns nothing
    local trigger swap
    local integer i=udg_integer17
    loop
        exitwhen i<=0
        set udg_integer16=udg_integers14[i]
        if TriggerEvaluate(udg_triggers05[i])then
            set swap=udg_triggers05[i]
            call TriggerClearConditions(swap)
            set udg_triggers05[i]=udg_triggers05[udg_integer17]
            set udg_triggers05[udg_integer17]=swap
            set udg_integers14[i]=udg_integers14[udg_integer17]
            set udg_integer17=udg_integer17-1
        endif
        set i=i-1
    endloop
endfunction

function TT_Start takes code userFunc,integer data returns nothing
    set udg_integer17=udg_integer17+1
    if udg_triggers05[udg_integer17]==null then
        set udg_triggers05[udg_integer17]=CreateTrigger()
    endif
    call TriggerAddCondition(udg_triggers05[udg_integer17],Condition(userFunc))
    set udg_integers14[udg_integer17]=data
endfunction

function TT_GetData takes nothing returns integer
    return udg_integer16
endfunction

function TT__Init takes nothing returns nothing
    call TimerStart(udg_timer01,TT_PERIOD,true,function TT__Handler)
endfunction

function s__vector_create takes real x,real y,real z returns integer
    local integer v=s__vector__allocate()
    set udg_reals05[v]=x
    set udg_reals06[v]=y
    set udg_reals07[v]=z
    return v
endfunction

function s__vector_getLength takes integer this returns real
    return SquareRoot(udg_reals05[this]*udg_reals05[this]+udg_reals06[this]*udg_reals06[this]+udg_reals07[this]*udg_reals07[this])
endfunction

function s__vector_sum takes integer augend,integer addend returns integer
    local integer v=s__vector__allocate()
    set udg_reals05[v]=udg_reals05[augend]+udg_reals05[addend]
    set udg_reals06[v]=udg_reals06[augend]+udg_reals06[addend]
    set udg_reals07[v]=udg_reals07[augend]+udg_reals07[addend]
    return v
endfunction

function s__vector_add takes integer this,integer addend returns nothing
    set udg_reals05[this]=udg_reals05[this]+udg_reals05[addend]
    set udg_reals06[this]=udg_reals06[this]+udg_reals06[addend]
    set udg_reals07[this]=udg_reals07[this]+udg_reals07[addend]
endfunction

function s__vector_difference takes integer minuend,integer subtrahend returns integer
    local integer v=s__vector__allocate()
    set udg_reals05[v]=udg_reals05[minuend]-udg_reals05[subtrahend]
    set udg_reals06[v]=udg_reals06[minuend]-udg_reals06[subtrahend]
    set udg_reals07[v]=udg_reals07[minuend]-udg_reals07[subtrahend]
    return v
endfunction

function s__vector_subtract takes integer this,integer subtrahend returns nothing
    set udg_reals05[this]=udg_reals05[this]-udg_reals05[subtrahend]
    set udg_reals06[this]=udg_reals06[this]-udg_reals06[subtrahend]
    set udg_reals07[this]=udg_reals07[this]-udg_reals07[subtrahend]
endfunction

function s__vector_scale takes integer this,real factor returns nothing
    set udg_reals05[this]=udg_reals05[this]*factor
    set udg_reals06[this]=udg_reals06[this]*factor
    set udg_reals07[this]=udg_reals07[this]*factor
endfunction

function s__vector_setLength takes integer this,real length returns nothing
    local real l=SquareRoot(udg_reals05[this]*udg_reals05[this]+udg_reals06[this]*udg_reals06[this]+udg_reals07[this]*udg_reals07[this])
    if l==.0 then
        return
    endif
    set l=length/l
    set udg_reals05[this]=udg_reals05[this]*l
    set udg_reals06[this]=udg_reals06[this]*l
    set udg_reals07[this]=udg_reals07[this]*l
endfunction

function s__vector_dotProduct takes integer a,integer b returns real
    return(udg_reals05[a]*udg_reals05[b]+udg_reals06[a]*udg_reals06[b]+udg_reals07[a]*udg_reals07[b])
endfunction

function s__vector_crossProduct takes integer a,integer b returns integer
    local integer v=s__vector__allocate()
    set udg_reals05[v]=udg_reals06[a]*udg_reals07[b]-udg_reals07[a]*udg_reals06[b]
    set udg_reals06[v]=udg_reals07[a]*udg_reals05[b]-udg_reals05[a]*udg_reals07[b]
    set udg_reals07[v]=udg_reals05[a]*udg_reals06[b]-udg_reals06[a]*udg_reals05[b]
    return v
endfunction

function s__vector_projectionVector takes integer projected,integer direction returns integer
    local integer v=s__vector__allocate()
    local real l=udg_reals05[direction]*udg_reals05[direction]+udg_reals06[direction]*udg_reals06[direction]+udg_reals07[direction]*udg_reals07[direction]
    if l==.0 then
        call s__vector_destroy(v)
        return null
    endif
    set l=(udg_reals05[projected]*udg_reals05[direction]+udg_reals06[projected]*udg_reals06[direction]+udg_reals07[projected]*udg_reals07[direction])/l
    set udg_reals05[v]=udg_reals05[direction]*l
    set udg_reals06[v]=udg_reals06[direction]*l
    set udg_reals07[v]=udg_reals07[direction]*l
    return v
endfunction

function s__vector_projectVector takes integer this,integer direction returns nothing
    local real l=udg_reals05[direction]*udg_reals05[direction]+udg_reals06[direction]*udg_reals06[direction]+udg_reals07[direction]*udg_reals07[direction]
    if l==.0 then
        return
    endif
    set l=(udg_reals05[this]*udg_reals05[direction]+udg_reals06[this]*udg_reals06[direction]+udg_reals07[this]*udg_reals07[direction])/l
    set udg_reals05[this]=udg_reals05[direction]*l
    set udg_reals06[this]=udg_reals06[direction]*l
    set udg_reals07[this]=udg_reals07[direction]*l
endfunction

function s__vector_projectionPlane takes integer projected,integer normal returns integer
    local integer v=s__vector__allocate()
    local real l=udg_reals05[normal]*udg_reals05[normal]+udg_reals06[normal]*udg_reals06[normal]+udg_reals07[normal]*udg_reals07[normal]
    if l==.0 then
        call s__vector_destroy(v)
        return null
    endif
    set l=(udg_reals05[projected]*udg_reals05[normal]+udg_reals06[projected]*udg_reals06[normal]+udg_reals07[projected]*udg_reals07[normal])/l
    set udg_reals05[v]=udg_reals05[projected]-udg_reals05[normal]*l
    set udg_reals06[v]=udg_reals06[projected]-udg_reals06[normal]*l
    set udg_reals07[v]=udg_reals07[projected]-udg_reals07[normal]*l
    return v
endfunction

function s__vector_projectPlane takes integer this,integer normal returns nothing
    local real l=udg_reals05[normal]*udg_reals05[normal]+udg_reals06[normal]*udg_reals06[normal]+udg_reals07[normal]*udg_reals07[normal]
    if l==.0 then
        return
    endif
    set l=(udg_reals05[this]*udg_reals05[normal]+udg_reals06[this]*udg_reals06[normal]+udg_reals07[this]*udg_reals07[normal])/l
    set udg_reals05[this]=udg_reals05[this]-udg_reals05[normal]*l
    set udg_reals06[this]=udg_reals06[this]-udg_reals06[normal]*l
    set udg_reals07[this]=udg_reals07[this]-udg_reals07[normal]*l
endfunction

function s__vector_getAngle takes integer a,integer b returns real
    local real l=SquareRoot(udg_reals05[a]*udg_reals05[a]+udg_reals06[a]*udg_reals06[a]+udg_reals07[a]*udg_reals07[a])*SquareRoot(udg_reals05[b]*udg_reals05[b]+udg_reals06[b]*udg_reals06[b]+udg_reals07[b]*udg_reals07[b])
    if l==0 then
        return.0
    endif
    return Acos((udg_reals05[a]*udg_reals05[b]+udg_reals06[a]*udg_reals06[b]+udg_reals07[a]*udg_reals07[b])/l)
endfunction

function s__vector_rotate takes integer this,integer axis,real angle returns nothing
    local real xx
    local real xy
    local real xz
    local real yx
    local real yy
    local real yz
    local real zx
    local real zy
    local real zz
    local real al=udg_reals05[axis]*udg_reals05[axis]+udg_reals06[axis]*udg_reals06[axis]+udg_reals07[axis]*udg_reals07[axis]
    local real f
    local real c=Cos(angle)
    local real s=Sin(angle)
    if al==.0 then
        return
    endif
    set f=(udg_reals05[this]*udg_reals05[axis]+udg_reals06[this]*udg_reals06[axis]+udg_reals07[this]*udg_reals07[axis])/al
    set zx=udg_reals05[axis]*f
    set zy=udg_reals06[axis]*f
    set zz=udg_reals07[axis]*f
    set xx=udg_reals05[this]-zx
    set xy=udg_reals06[this]-zy
    set xz=udg_reals07[this]-zz
    set al=SquareRoot(al)
    set yx=(udg_reals06[axis]*xz-udg_reals07[axis]*xy)/al
    set yy=(udg_reals07[axis]*xx-udg_reals05[axis]*xz)/al
    set yz=(udg_reals05[axis]*xy-udg_reals06[axis]*xx)/al
    set udg_reals05[this]=xx*c+yx*s+zx
    set udg_reals06[this]=xy*c+yy*s+zy
    set udg_reals07[this]=xz*c+yz*s+zz
endfunction

function s__vector_createTerrainPoint takes real x,real y returns integer
    local integer v=s__vector__allocate()
    call MoveLocation(udg_location01,x,y)
    set udg_reals05[v]=x
    set udg_reals06[v]=y
    set udg_reals07[v]=GetLocationZ(udg_location01)
    return v
endfunction

function s__vector_getTerrainPoint takes integer this,real x,real y returns nothing
    call MoveLocation(udg_location01,x,y)
    set udg_reals05[this]=x
    set udg_reals06[this]=y
    set udg_reals07[this]=GetLocationZ(udg_location01)
endfunction

function s__vector_createTerrainNormal takes real x,real y,real sampleRadius returns integer
    local integer v=s__vector__allocate()
    local real z1
    local real z2
    local real z3
    local real z4
    call MoveLocation(udg_location01,x-sampleRadius,y)
    set z1=GetLocationZ(udg_location01)
    call MoveLocation(udg_location01,x+sampleRadius,y)
    set z2=GetLocationZ(udg_location01)
    call MoveLocation(udg_location01,x,y-sampleRadius)
    set z3=GetLocationZ(udg_location01)
    call MoveLocation(udg_location01,x,y+sampleRadius)
    set z4=GetLocationZ(udg_location01)
    set sampleRadius=2*sampleRadius
    set udg_reals05[v]=(z1-z2)*sampleRadius
    set udg_reals06[v]=(z3-z4)*sampleRadius
    set udg_reals07[v]=sampleRadius*sampleRadius
    return v
endfunction

function s__vector_getTerrainNormal takes integer this,real x,real y,real sampleRadius returns nothing
    local real z1
    local real z2
    local real z3
    local real z4
    call MoveLocation(udg_location01,x-sampleRadius,y)
    set z1=GetLocationZ(udg_location01)
    call MoveLocation(udg_location01,x+sampleRadius,y)
    set z2=GetLocationZ(udg_location01)
    call MoveLocation(udg_location01,x,y-sampleRadius)
    set z3=GetLocationZ(udg_location01)
    call MoveLocation(udg_location01,x,y+sampleRadius)
    set z4=GetLocationZ(udg_location01)
    set sampleRadius=2*sampleRadius
    set udg_reals05[this]=(z1-z2)*sampleRadius
    set udg_reals06[this]=(z3-z4)*sampleRadius
    set udg_reals07[this]=sampleRadius*sampleRadius
endfunction

function s__vector_isInCylinder takes integer this,integer cylinderOrigin,integer cylinderHeight,real cylinderRadius returns boolean
    local real l
    local real x=udg_reals05[this]-udg_reals05[cylinderOrigin]
    local real y=udg_reals06[this]-udg_reals06[cylinderOrigin]
    local real z=udg_reals07[this]-udg_reals07[cylinderOrigin]
    if x*udg_reals05[cylinderHeight]+y*udg_reals06[cylinderHeight]+z*udg_reals07[cylinderHeight]<.0 then
        return false
    endif
    set x=x-udg_reals05[cylinderHeight]
    set y=y-udg_reals06[cylinderHeight]
    set z=z-udg_reals07[cylinderHeight]
    if x*udg_reals05[cylinderHeight]+y*udg_reals06[cylinderHeight]+z*udg_reals07[cylinderHeight]>.0 then
        return false
    endif
    set l=udg_reals05[cylinderHeight]*udg_reals05[cylinderHeight]+udg_reals06[cylinderHeight]*udg_reals06[cylinderHeight]+udg_reals07[cylinderHeight]*udg_reals07[cylinderHeight]
    if l==.0 then
        return false
    endif
    set l=(x*udg_reals05[cylinderHeight]+y*udg_reals06[cylinderHeight]+z*udg_reals07[cylinderHeight])/l
    set x=x-udg_reals05[cylinderHeight]*l
    set y=y-udg_reals06[cylinderHeight]*l
    set z=z-udg_reals07[cylinderHeight]*l
    if x*x+y*y+z*z>cylinderRadius*cylinderRadius then
        return false
    endif
    return true
endfunction

function s__vector_isInCone takes integer this,integer coneOrigin,integer coneHeight,real coneRadius returns boolean
    local real l
    local real x=udg_reals05[this]-udg_reals05[coneOrigin]
    local real y=udg_reals06[this]-udg_reals06[coneOrigin]
    local real z=udg_reals07[this]-udg_reals07[coneOrigin]
    if x*udg_reals05[coneHeight]+y*udg_reals06[coneHeight]+z*udg_reals07[coneHeight]<.0 then
        return false
    endif
    set l=udg_reals05[coneHeight]*udg_reals05[coneHeight]+udg_reals06[coneHeight]*udg_reals06[coneHeight]+udg_reals07[coneHeight]*udg_reals07[coneHeight]
    if l==.0 then
        return false
    endif
    set l=(x*udg_reals05[coneHeight]+y*udg_reals06[coneHeight]+z*udg_reals07[coneHeight])/l
    set x=x-udg_reals05[coneHeight]*l
    set y=y-udg_reals06[coneHeight]*l
    set z=z-udg_reals07[coneHeight]*l
    if SquareRoot(x*x+y*y+z*z)>coneRadius*(1.-l)then
        return false
    endif
    return true
endfunction

function s__vector_isInSphere takes integer this,integer sphereOrigin,real sphereRadius returns boolean
    return(not(sphereRadius*sphereRadius<((udg_reals05[this]-udg_reals05[sphereOrigin])*(udg_reals05[this]-udg_reals05[sphereOrigin])+(udg_reals06[this]-udg_reals06[sphereOrigin])*(udg_reals06[this]-udg_reals06[sphereOrigin])+(udg_reals07[this]-udg_reals07[sphereOrigin])*(udg_reals07[this]-udg_reals07[sphereOrigin]))))
endfunction

function True takes nothing returns boolean
    return true
endfunction

function Nothing takes nothing returns nothing
    return
endfunction

function AbsValue takes real A returns real
    if A<0 then
        return-A
    endif
    return A
endfunction

function ModuloInt takes integer dividend,integer divisor returns integer
    local integer modulus=dividend-(dividend/divisor)*divisor
    if(modulus<0)then
        set modulus=modulus+divisor
    endif
    return modulus
endfunction

function Modulo takes real dividend,real divisor returns real
    local real modulus=dividend-I2R(R2I(dividend/divisor))*divisor
    if(modulus<0)then
        set modulus=modulus+divisor
    endif
    return modulus
endfunction

function GetXYLocationZ takes real x,real y returns real
    call MoveLocation(udg_location02,x,y)
    return GetLocationZ(udg_location02)
endfunction

function CorrectAngle takes real deg returns real
    local integer A=R2I(deg/360)
    local real Angle=deg-I2R(360*A)
    return Angle
endfunction

function SimError takes player ForPlayer,string msg returns nothing
    local sound error=CreateSoundFromLabel("InterfaceError",false,false,false,10,10)
    if(GetLocalPlayer()==ForPlayer)then
        if(msg!="")and(msg!=null)then
            call ClearTextMessages()
            call DisplayTimedTextToPlayer(ForPlayer,.52,-1.,2.,"|cffffcc00"+msg+"|r")
        endif
        call StartSound(error)
    endif
    call KillSoundWhenDone(error)
    set error=null
endfunction

function LocalSound takes player ForPlayer,sound PlayedSound returns nothing
    local sound Lsound=PlayedSound
    if(GetLocalPlayer()==ForPlayer)then
        call StartSound(Lsound)
    endif
    call KillSoundWhenDone(Lsound)
    set Lsound=null
endfunction

function IsUnitSpellProjectile takes unit u returns boolean
    local integer id
    local integer i=1
    local boolean b=false
    local integer id2=GetUnitTypeId(u)
    loop
        exitwhen i>7
        set id=udg_integers17[i]
        if id==id2 then
            set b=true
        endif
        set i=i+1
    endloop
    return b
endfunction

function IsXinMap takes real x returns boolean
    return(x>udg_real03 and x<udg_real05)
endfunction

function IsYinMap takes real y returns boolean
    return(y>udg_real04 and y<udg_real06)
endfunction

function InitMap takes nothing returns nothing
    local rect Map=bj_mapInitialPlayableArea
    set udg_real03=GetRectMinX(Map)
    set udg_real04=GetRectMinY(Map)
    set udg_real05=GetRectMaxX(Map)
    set udg_real06=GetRectMaxY(Map)
endfunction

function CheckPathabilityTrickGet takes nothing returns nothing
    set bj_rescueChangeColorUnit=bj_rescueChangeColorUnit or GetEnumItem()!=udg_item01
endfunction

function CheckPathabilityTrick takes real x,real y returns boolean
    local integer i=30
    local real X
    local real Y
    local rect r
    call SetItemPosition(udg_item01,x,y)
    set X=GetItemX(udg_item01)-x
    set Y=GetItemY(udg_item01)-y
    if X*X+Y*Y<='d'then
        return true
    endif
    set r=Rect(x-i,y-i,x+i,y+i)
    set bj_rescueChangeColorUnit=false
    call EnumItemsInRect(r,null,function CheckPathabilityTrickGet)
    call RemoveRect(r)
    set r=null
    return bj_rescueChangeColorUnit
endfunction

function CheckPathability takes real x,real y returns boolean
    local boolean b=CheckPathabilityTrick(x,y)
    call SetItemVisible(udg_item01,false)
    return b
endfunction

function InitCasters takes nothing returns nothing
    local integer i=1
    local unit u
    set udg_group01=CreateGroup()
    loop
        exitwhen i>'d'
        set u=CreateUnit(Player(12),'n003',STORAGE_AREA_X,STORAGE_AREA_Y,0)
        call GroupAddUnit(udg_group01,u)
        call SetUnitPathing(u,false)
        set i=i+1
    endloop
    set u=null
endfunction

function UseCaster takes nothing returns unit
    local unit u=FirstOfGroup(udg_group01)
    if u!=null then
        call GroupRemoveUnit(udg_group01,u)
        set udg_unit16=u
        set u=null
        return udg_unit16
    endif
    return CreateUnit(Player(12),'n003',STORAGE_AREA_X,STORAGE_AREA_Y,0)
endfunction

function CasterBackHome takes nothing returns boolean
    local integer C=TT_GetData()
    if udg_integers29[C]>60 then
        call GroupAddUnit(udg_group01,udg_units07[C])
        call s__Casters_destroy(C)
        return true
    endif
    set udg_integers29[C]=udg_integers29[C]+1
    return false
endfunction

function UnitResetColor takes unit u returns nothing
    local integer H=GetUnitUserData(u)
    call SetUnitVertexColor(u,udg_integers22[H],udg_integers24[H],udg_integers23[H],udg_integers25[H])
endfunction

function StopUsingCaster takes unit u returns nothing
    local integer C=s__Casters__allocate()
    set udg_units07[C]=u
    set udg_integers29[C]=0
    call TT_Start(function CasterBackHome,C)
endfunction

function ProjectileImpactWithProjectile takes unit projectile1,unit projectile2 returns nothing
    local integer M1=GetUnitUserData(projectile1)
    local integer M2=GetUnitUserData(projectile2)
    local real dxR=GetUnitX(projectile1)-GetUnitX(projectile2)
    local real dyR=GetUnitY(projectile1)-GetUnitY(projectile2)
    local real dxR2=GetUnitX(projectile2)-GetUnitX(projectile1)
    local real dyR2=GetUnitY(projectile2)-GetUnitY(projectile1)
    local real angle=bj_RADTODEG*Atan2(dyR-udg_reals04[M1],dxR-udg_reals03[M1])
    local real angle2=bj_RADTODEG*Atan2(dyR2-udg_reals04[M2],dxR2-udg_reals03[M2])
    local real dxN
    local real dyN
    local real dxN2
    local real dyN2
    local real factor=(360-AbsValue(angle))*.01
    local real factor2=(360-AbsValue(angle2))*.01
    if udg_booleans08[M1]and udg_booleans08[M2]==false then
        set factor=0
    elseif udg_booleans08[M1]==false and udg_booleans08[M2]then
        set factor2=0
    endif
    set dxN=udg_reals03[M1]+(dxR*factor)
    set dyN=udg_reals04[M1]+(dyR*factor)
    set dxN2=udg_reals03[M2]+(dxR2*factor2)
    set dyN2=udg_reals04[M2]+(dyR2*factor2)
    set udg_reals03[M1]=dxN
    set udg_reals04[M1]=dyN
    set udg_reals03[M2]=dxN2
    set udg_reals04[M2]=dyN2
    set udg_booleans07[M1]=true
    set udg_booleans07[M2]=true
endfunction

function ProjectileImpactWithProtegoUnit takes unit projectile,unit u returns nothing
    local integer M=GetUnitUserData(projectile)
    local real dxR=GetUnitX(projectile)-GetUnitX(u)
    local real dyR=GetUnitY(projectile)-GetUnitY(u)
    local real angle=bj_RADTODEG*Atan2(dyR-udg_reals04[M],dxR-udg_reals03[M])
    local real dxN
    local real dyN
    local real factor=(360-AbsValue(angle))*.01
    set dxN=udg_reals03[M]+(dxR*factor)
    set dyN=udg_reals04[M]+(dyR*factor)
    set udg_reals03[M]=dxN
    set udg_reals04[M]=dyN
    set udg_booleans07[M]=true
endfunction

function GuessBounce takes real f,real x,real y returns real
    local integer i='d'
    local real h=1.4142136*i
    local real r
    local boolean b1
    local boolean b2
    local boolean b3
    local boolean b4
    local boolean b5
    local real cos1
    local real sin1
    local real cos2
    local real sin2
    local real cos3
    local real sin3
    local real cos4
    local real sin4
    local real cos5
    local real sin5
    set f=Modulo(f,6.283185)
    if(f>=4.712389)then
        set r=4.712389
    elseif(f>=bj_PI)then
        set r=bj_PI
    elseif(f>=1.570796)then
        set r=1.570796
    else
        set r=0
    endif
    set cos1=x+h*Cos(r-.785398)
    set sin1=y+h*Sin(r-.785398)
    set cos2=x+i*Cos(r)
    set sin2=y+i*Sin(r)
    set cos3=x+h*Cos(r+.785398)
    set sin3=y+h*Sin(r+.785398)
    set cos4=x+i*Cos(r+1.570796)
    set sin4=y+i*Sin(r+1.570796)
    set cos5=x+h*Cos(r+2.356194)
    set sin5=y+h*Sin(r+2.356194)
    if(CheckPathability(cos1,sin1)==false or GetXYLocationZ(cos1,sin1)>TERRAIN_COLLIDE_HEIGHT)then
        set b1=true
    else
        set b1=false
    endif
    if(CheckPathability(cos2,sin2)==false or GetXYLocationZ(cos2,sin2)>TERRAIN_COLLIDE_HEIGHT)then
        set b2=true
    else
        set b2=false
    endif
    if(CheckPathability(cos3,sin3)==false or GetXYLocationZ(cos3,sin3)>TERRAIN_COLLIDE_HEIGHT)then
        set b3=true
    else
        set b3=false
    endif
    if(CheckPathability(cos4,sin4)==false or GetXYLocationZ(cos4,sin4)>TERRAIN_COLLIDE_HEIGHT)then
        set b4=true
    else
        set b4=false
    endif
    if(CheckPathability(cos5,sin5)==false or GetXYLocationZ(cos5,sin5)>TERRAIN_COLLIDE_HEIGHT)then
        set b5=true
    else
        set b5=false
    endif
    if b2 and b3 and b4 then
        set r=f+bj_PI
    elseif(b3 and b4 and b5)or(b1 and b2 and b3)then
        set r=-f+bj_PI
    else
        set r=GetRandomReal(.00001,bj_PI*2)
    endif
    return r+GetRandomReal(-.01,.01)
endfunction

function ReleaseImperioUnits takes unit imperior returns nothing
    local integer H=GetUnitUserData(imperior)
    local integer H2
    local unit u
    loop
        exitwhen udg_integers20[H]==0
        set u=udg_units05[udg_integers19[H]+udg_integers20[H]]
        set H2=GetUnitUserData(u)
        call SetUnitOwner(u,Player(udg_integers21[H2]),false)
        set udg_units04[H2]=null
        if udg_integers20[H2]>0 then
            call ReleaseImperioUnits(u)
        endif
        set udg_units05[udg_integers19[H]+udg_integers20[H]]=null
        set udg_integers20[H]=udg_integers20[H]-1
    endloop
    set u=null
endfunction

function PolledWait2 takes real duration returns nothing
    local real timeRemaining
    local real st=TimerGetElapsed(bj_gameStartedTimer)
    if st<=0 then
        set bj_gameStartedTimer=CreateTimer()
        call TimerStart(bj_gameStartedTimer,0xF4240,false,null)
    endif
    if(duration>0)then
        loop
            set timeRemaining=duration-TimerGetElapsed(bj_gameStartedTimer)+st
            exitwhen timeRemaining<=0
            if(timeRemaining>bj_POLLED_WAIT_SKIP_THRESHOLD)then
                call TriggerSleepAction(.1*timeRemaining)
            else
                call TriggerSleepAction(bj_POLLED_WAIT_INTERVAL)
            endif
        endloop
    endif
endfunction

function Msg2All takes string msg,real time returns nothing
    local integer i=0
    loop
        call DisplayTimedTextToPlayer(Player(i),0,0,time,msg)
        set i=i+1
        exitwhen i>11
    endloop
endfunction

function HeroDieAction takes nothing returns nothing
    local unit u=GetTriggerUnit()
    local integer H=GetUnitUserData(u)
    set udg_booleans02[H]=false
    call ReleaseImperioUnits(u)
    call SetUnitTimeScale(u,1.)
    set u=null
endfunction

function InitHeroDeath takes nothing returns nothing
    local integer i=0
    set udg_trigger48=CreateTrigger()
    loop
        exitwhen i>11
        call TriggerRegisterUnitEvent(udg_trigger48,udg_units02[i],EVENT_UNIT_DEATH)
        set i=i+1
    endloop
    call TriggerAddAction(udg_trigger48,function HeroDieAction)
endfunction

function PauseAllHeroes takes boolean b returns nothing
    local integer i=0
    loop
        exitwhen i>11
        if IsUnitAlive(udg_units02[i])then
            call PauseUnit(udg_units02[i],b)
        endif
        set i=i+1
    endloop
endfunction

function UnitGetItemOfType takes unit whichUnit,integer itemId returns item
    local integer index
    local item indexItem
    set index=0
    loop
        set indexItem=UnitItemInSlot(whichUnit,index)
        if(indexItem!=null)and(GetItemTypeId(indexItem)==itemId)then
            set udg_item02=indexItem
            set indexItem=null
            return udg_item02
        endif
        set index=index+1
        exitwhen index>=6
    endloop
    set indexItem=null
    return null
endfunction

function AntiStupefyCondition takes nothing returns boolean
    return GetSpellAbilityId()=='A00B'
endfunction

function AntiStupefyAction takes nothing returns nothing
    local unit u=GetSpellTargetUnit()
    local integer i=GetUnitAbilityLevel(u,'BPSE')
    local real x=GetUnitX(u)
    local real y=GetUnitY(u)
    local player p=GetOwningPlayer(GetTriggerUnit())
    local integer i2=GetPlayerId(p)
    if i>0 then
        call UnitRemoveAbility(u,'BPSE')
        call SetUnitTimeScale(u,1)
        call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Items\\AItb\\AItbTarget.mdl",x+GetRandomReal(-200,200),y+GetRandomReal(-200,200)))
        call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Items\\AItb\\AItbTarget.mdl",x+GetRandomReal(-200,200),y+GetRandomReal(-200,200)))
        call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Items\\AItb\\AItbTarget.mdl",x+GetRandomReal(-200,200),y+GetRandomReal(-200,200)))
        if IsUnitAlly(u,p)==false then
            set udg_integers15[i2]=udg_integers15[i2]-10
        else
            set udg_integers15[i2]=udg_integers15[i2]+10
        endif
    endif
    set p=null
    set u=null
endfunction

function InitAntiStupefy takes nothing returns nothing
    local integer i=0
    set udg_trigger60=CreateTrigger()
    loop
        exitwhen i>11
        call TriggerRegisterUnitEvent(udg_trigger60,udg_units02[i],EVENT_UNIT_SPELL_EFFECT)
        set i=i+1
    endloop
    call TriggerAddCondition(udg_trigger60,Condition(function AntiStupefyCondition))
    call TriggerAddAction(udg_trigger60,function AntiStupefyAction)
endfunction

function s__AvadaKedavra__AvadaKedavraData_onDestroy takes integer this returns nothing
    call ClearTriggerStructA(udg_triggers08[this])
    call DestroyTrigger(udg_triggers08[this])
endfunction

function s__AvadaKedavra__AvadaKedavraData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers30[this]!=-1)then
        return
    endif
    call s__AvadaKedavra__AvadaKedavraData_onDestroy(this)
    set udg_integers30[this]=udg_integer31
    set udg_integer31=this
endfunction

function AvadaKedavra__AvadaKedavraTrigger_Condition takes nothing returns boolean
    return GetSpellAbilityId()==AvadaKedavra__AVADA_KEDAVRA_SPELL_ID or GetSpellAbilityId()=='A00I'
endfunction

function AvadaKedavra__AvadaKedavra_Effect takes nothing returns boolean
    local integer A=GetTriggerStructA(GetTriggeringTrigger())
    local integer M=GetUnitUserData(udg_units08[A])
    local unit u=GetTriggerUnit()
    local real ux=GetUnitX(u)
    local real uy=GetUnitY(u)
    local real mx=GetUnitX(udg_units08[A])
    local real my=GetUnitY(udg_units08[A])
    local player p=GetOwningPlayer(udg_units09[A])
    local integer i=GetPlayerId(p)
    if GetUnitState(udg_units08[A],UNIT_STATE_LIFE)>0 and GetUnitFlyHeight(u)<'d'then
        if udg_booleans09[A]==false and u==udg_units09[A]then
            set udg_booleans09[A]=true
        elseif IsUnitSpellProjectile(u)then
            if mx>ux then
                call ProjectileImpactWithProjectile(udg_units08[A],u)
            elseif mx<ux then
            else
                if my>uy then
                    call ProjectileImpactWithProjectile(udg_units08[A],u)
                elseif my<uy then
                endif
            endif
        else
            if GetUnitAbilityLevel(u,ELDER_PROTEGO_BUFF_ID)>0 and udg_booleans08[M]==false then
                call ProjectileImpactWithProtegoUnit(udg_units08[A],u)
            else
                call DestroyEffect(AddSpecialEffect(AvadaKedavra__AVADA_KEDAVRA_IMPACT_EFFECT,ux,uy))
                call UnitDamageTarget(udg_units09[A],u,10000,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_DIVINE,WEAPON_TYPE_WHOKNOWS)
                call KillUnit(udg_units08[A])
                if IsUnitAlly(u,p)then
                    set udg_integers15[i]=udg_integers15[i]-50
                else
                    set udg_integers15[i]=udg_integers15[i]+50
                endif
            endif
        endif
    endif
    set u=null
    set p=null
    return false
endfunction

function AvadaKedavra__AvadaKedavra_Move takes nothing returns boolean
    local integer A=TT_GetData()
    local integer M=GetUnitUserData(udg_units08[A])
    local real x1=GetUnitX(udg_units08[A])
    local real y1=GetUnitY(udg_units08[A])
    local real x2=x1+AvadaKedavra__AVADA_KEDAVRA_MOVE_SPEED*Cos(udg_reals08[A])
    local real y2=y1+AvadaKedavra__AVADA_KEDAVRA_MOVE_SPEED*Sin(udg_reals08[A])
    local real dx=x2-x1
    local real dy=y2-y1
    local real z2=GetXYLocationZ(x2,y2)
    local real angle
    local boolean b=false
    local integer i=0
    local boolean impact=false
    if GetUnitState(udg_units08[A],UNIT_STATE_LIFE)>0 then
        if udg_booleans07[M]==false then
            set udg_reals03[M]=dx
            set udg_reals04[M]=dy
        else
            set udg_reals08[A]=Atan2(udg_reals04[M],udg_reals03[M])
            set udg_booleans07[M]=false
            set x2=x1+AvadaKedavra__AVADA_KEDAVRA_MOVE_SPEED*Cos(udg_reals08[A])
            set y2=y1+AvadaKedavra__AVADA_KEDAVRA_MOVE_SPEED*Sin(udg_reals08[A])
            set dx=x2-x1
            set dy=y2-y1
            set z2=GetXYLocationZ(x2,y2)
        endif
        if z2>TERRAIN_COLLIDE_HEIGHT or CheckPathability(x2,y2)==false then
            set angle=GuessBounce(udg_reals08[A],x1,y1)
            set udg_booleans09[A]=true
            set udg_reals08[A]=angle
            set impact=true
        endif
        if(IsYinMap(y2)and IsYinMap(x2))or impact then
            call SetUnitX(udg_units08[A],x2)
            call SetUnitY(udg_units08[A],y2)
            call SetUnitFlyHeight(udg_units08[A],(z2-(z2*z2/10)),.0)
        endif
        if udg_reals09[A]>AvadaKedavra__AVADA_KEDAVRA_TOTAL_RANGE then
            call KillUnit(udg_units08[A])
        endif
        set udg_reals09[A]=udg_reals09[A]+AvadaKedavra__AVADA_KEDAVRA_MOVE_SPEED
    else
        call s__MissileData_destroy(M)
        call s__AvadaKedavra__AvadaKedavraData_destroy(A)
        return true
    endif
    return false
endfunction

function AvadaKedavra__AvadaKedavraTrigger_Action takes nothing returns nothing
    local location target=GetSpellTargetLoc()
    local unit u=GetTriggerUnit()
    local real x1=GetUnitX(u)
    local real y1=GetUnitY(u)
    local real x2=GetLocationX(target)
    local real y2=GetLocationY(target)
    local real dx=x2-x1
    local real dy=y2-y1
    local real angle=Atan2(dy,dx)
    local integer M
    local integer A
    set A=s__AvadaKedavra__AvadaKedavraData__allocate()
    set M=s__MissileData__allocate()
    set udg_units08[A]=CreateUnit(GetOwningPlayer(u),AvadaKedavra__AVADA_KEDAVRA_MISSILE_ID,x1,y1,0)
    set udg_units09[A]=u
    set udg_reals08[A]=angle
    set udg_reals09[A]=0
    set udg_reals03[M]=dx
    set udg_reals04[M]=dy
    if GetSpellAbilityId()=='A00I'then
        set udg_booleans08[M]=true
        call SetUnitScale(udg_units08[A],1.5,1.5,1.5)
    endif
    call SetUnitUserData(udg_units08[A],M)
    call PauseUnit(udg_units08[A],true)
    call SetUnitFlyHeight(udg_units08[A],75.,.0)
    call SetUnitInvulnerable(udg_units08[A],true)
    call TT_Start(function AvadaKedavra__AvadaKedavra_Move,A)
    call TriggerRegisterUnitInRange(udg_triggers08[A],udg_units08[A],AvadaKedavra__AVADA_KEDAVRA_IMPACT_RADIUS,Condition(function True))
    call TriggerAddCondition(udg_triggers08[A],Condition(function AvadaKedavra__AvadaKedavra_Effect))
    call SetTriggerStructA(udg_triggers08[A],A)
    call RemoveLocation(target)
    set u=null
    set target=null
endfunction

function InitAvadaKedavra takes nothing returns nothing
    local integer i=0
    set udg_trigger50=CreateTrigger()
    loop
        exitwhen i>11
        call TriggerRegisterUnitEvent(udg_trigger50,udg_units02[i],EVENT_UNIT_SPELL_EFFECT)
        set i=i+1
    endloop
    call TriggerAddCondition(udg_trigger50,Condition(function AvadaKedavra__AvadaKedavraTrigger_Condition))
    call TriggerAddAction(udg_trigger50,function AvadaKedavra__AvadaKedavraTrigger_Action)
endfunction

function s__Crucio__CrucioData_onDestroy takes integer this returns nothing
    call ClearTriggerStructB(udg_triggers09[this])
    call DestroyTrigger(udg_triggers09[this])
endfunction

function s__Crucio__CrucioData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers31[this]!=-1)then
        return
    endif
    call s__Crucio__CrucioData_onDestroy(this)
    set udg_integers31[this]=udg_integer33
    set udg_integer33=this
endfunction

function s__Crucio__Crucio_TortureData_onDestroy takes integer this returns nothing
    call SetTextTagLifespan(udg_texttags02[this],6.)
    call SetTextTagLifespan(udg_texttags03[this],8.)
    call SetTextTagFadepoint(udg_texttags02[this],5.)
    call SetTextTagFadepoint(udg_texttags03[this],6.)
    call SetUnitAnimation(udg_units13[this],"stand")
    call PauseUnit(udg_units12[this],false)
    call SetUnitFlyHeight(udg_units12[this],.0,.0)
endfunction

function s__Crucio__Crucio_TortureData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers32[this]!=-1)then
        return
    endif
    call s__Crucio__Crucio_TortureData_onDestroy(this)
    set udg_integers32[this]=udg_integer35
    set udg_integer35=this
endfunction

function Crucio__CrucioTrigger_Condition takes nothing returns boolean
    return GetSpellAbilityId()==Crucio__CRUCIO_SPELL_ID or GetSpellAbilityId()=='A00J'
endfunction

function Crucio_Torture takes nothing returns boolean
    local integer C=TT_GetData()
    local integer H=GetUnitUserData(udg_units13[C])
    local integer i
    local string p
    local integer i2
    if udg_integers33[C]==0 then
        call IssueImmediateOrderById(udg_units13[C],851972)
        set udg_booleans03[H]=true
        call UnitAddAbility(udg_units12[C],'Amrf')
        call UnitRemoveAbility(udg_units12[C],'Amrf')
        call SetUnitFlyHeight(udg_units12[C],200.,20.)
        call UnitRemoveAbility(udg_units12[C],'BPSE')
        call SetUnitTimeScale(udg_units12[C],1)
        call UnitDamageTarget(udg_units13[C],udg_units12[C],200,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_DIVINE,WEAPON_TYPE_WHOKNOWS)
        call SetUnitAnimation(udg_units12[C],"death")
    elseif ModuloInt(udg_integers33[C],50)==0 then
        call UnitDamageTarget(udg_units13[C],udg_units12[C],70,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_DIVINE,WEAPON_TYPE_WHOKNOWS)
        if GetRandomInt(0,1)==0 then
            call SetUnitAnimation(udg_units12[C],"death")
        endif
    endif
    if ModuloInt(udg_integers33[C],60)==0 then
        if(GetUnitTypeId(udg_units13[C])=='N000')then
            call SetUnitAnimationByIndex(udg_units13[C],1)
        else
            call SetUnitAnimationByIndex(udg_units13[C],2)
        endif
    endif
    if GetUnitState(udg_units12[C],UNIT_STATE_LIFE)<GetUnitState(udg_units12[C],UNIT_STATE_MAX_LIFE)*.22 and udg_booleans11[C]then
        set udg_texttags02[C]=CreateTextTag()
        set udg_texttags03[C]=CreateTextTag()
        call SetTextTagText(udg_texttags02[C],"Tell us the information !!",10.*.023/10)
        call SetTextTagText(udg_texttags03[C],"NOOooOo... !!",12.12*.023/10)
        call SetTextTagPosUnit(udg_texttags02[C],udg_units13[C],.0)
        call SetTextTagPosUnit(udg_texttags03[C],udg_units12[C],.3)
        call SetTextTagColor(udg_texttags02[C],200,140,140,200)
        call SetTextTagColor(udg_texttags03[C],255,200,'d',200)
        call SetTextTagPermanent(udg_texttags02[C],false)
        call SetTextTagPermanent(udg_texttags03[C],false)
        call SetTextTagVisibility(udg_texttags02[C],true)
        call SetTextTagVisibility(udg_texttags03[C],true)
        call SetTextTagVelocity(udg_texttags02[C],.04,.02)
        call SetTextTagVelocity(udg_texttags03[C],.03,.01)
        set udg_booleans11[C]=false
        set i=GetPlayerId(GetOwningPlayer(udg_units12[C]))
        set i2=GetPlayerId(GetOwningPlayer(udg_units13[C]))
        set udg_integers15[i2]=udg_integers15[i2]+150
        if i<=5 then
            set udg_real01=udg_real01+30
        else
            set udg_real02=udg_real02+30
        endif
        set p=GetPlayerName(GetOwningPlayer(udg_units12[C]))
        call Msg2All(p+" has revealed his allies to his enemies !",25.)
    endif
    if udg_booleans04[H]or udg_booleans03[H]==false or GetUnitAbilityLevel(udg_units13[C],'BPSE')!=0 or IsUnitAlive(udg_units13[C])==false or GetUnitFlyHeight(udg_units13[C])>5 then
        call s__Crucio__Crucio_TortureData_destroy(C)
        return true
    endif
    set udg_integers33[C]=udg_integers33[C]+1
    if IsUnitAlive(udg_units12[C])then
        return false
    endif
    call s__Crucio__Crucio_TortureData_destroy(C)
    return true
endfunction

function Crucio__Crucio_Effect takes nothing returns boolean
    local integer A=GetTriggerStructB(GetTriggeringTrigger())
    local integer M=GetUnitUserData(udg_units10[A])
    local integer C
    local unit u=GetTriggerUnit()
    local real ux=GetUnitX(u)
    local real uy=GetUnitY(u)
    local real mx=GetUnitX(udg_units10[A])
    local real my=GetUnitY(udg_units10[A])
    local real cx
    local real cy
    local player targetplayer=GetOwningPlayer(u)
    local integer i=GetPlayerId(GetOwningPlayer(udg_units11[A]))
    if GetUnitState(udg_units10[A],UNIT_STATE_LIFE)>0 and GetUnitFlyHeight(u)<'d'then
        if udg_booleans10[A]==false and u==udg_units11[A]then
            set udg_booleans10[A]=true
        elseif IsUnitSpellProjectile(u)then
            if mx>ux then
                call ProjectileImpactWithProjectile(udg_units10[A],u)
            elseif mx<ux then
            else
                if my>uy then
                    call ProjectileImpactWithProjectile(udg_units10[A],u)
                elseif my<uy then
                endif
            endif
        else
            if GetUnitAbilityLevel(u,ELDER_PROTEGO_BUFF_ID)>0 and udg_booleans08[M]==false then
                call ProjectileImpactWithProtegoUnit(udg_units10[A],u)
            else
                call DestroyEffect(AddSpecialEffect(Crucio__CRUCIO_IMPACT_EFFECT,ux,uy))
                call KillUnit(udg_units10[A])
                if IsUnitEnemy(udg_units11[A],targetplayer)==false then
                    call SetUnitAnimation(u,"death")
                    call UnitDamageTarget(udg_units11[A],u,500,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_DIVINE,WEAPON_TYPE_WHOKNOWS)
                    set udg_integers15[i]=udg_integers15[i]-30
                else
                    set cx=GetUnitX(udg_units11[A])
                    set cy=GetUnitY(udg_units11[A])
                    if DistanceBetweenXY(cx,cy,ux,uy)>1000 then
                        call SetUnitAnimation(u,"death")
                        call UnitDamageTarget(udg_units11[A],u,500,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_DIVINE,WEAPON_TYPE_WHOKNOWS)
                        set udg_integers15[i]=udg_integers15[i]+30
                    else
                        set C=s__Crucio__Crucio_TortureData__allocate()
                        set udg_units13[C]=udg_units11[A]
                        set udg_units12[C]=u
                        set udg_integers33[C]=0
                        set udg_booleans11[C]=true
                        call PauseUnit(u,true)
                        call TT_Start(function Crucio_Torture,C)
                    endif
                endif
            endif
        endif
    endif
    set u=null
    set targetplayer=null
    return false
endfunction

function Crucio__Crucio_Move takes nothing returns boolean
    local integer A=TT_GetData()
    local integer M=GetUnitUserData(udg_units10[A])
    local real x1=GetUnitX(udg_units10[A])
    local real y1=GetUnitY(udg_units10[A])
    local real x2=x1+Crucio__CRUCIO_MOVE_SPEED*Cos(udg_reals10[A])
    local real y2=y1+Crucio__CRUCIO_MOVE_SPEED*Sin(udg_reals10[A])
    local real dx=x2-x1
    local real dy=y2-y1
    local real z2=GetXYLocationZ(x2,y2)
    local real angle
    local boolean b=false
    local integer i=0
    local boolean impact=false
    if GetUnitState(udg_units10[A],UNIT_STATE_LIFE)>0 then
        if udg_booleans07[M]==false then
            set udg_reals03[M]=dx
            set udg_reals04[M]=dy
        else
            set udg_reals10[A]=Atan2(udg_reals04[M],udg_reals03[M])
            set udg_booleans07[M]=false
            set x2=x1+Crucio__CRUCIO_MOVE_SPEED*Cos(udg_reals10[A])
            set y2=y1+Crucio__CRUCIO_MOVE_SPEED*Sin(udg_reals10[A])
            set dx=x2-x1
            set dy=y2-y1
            set z2=GetXYLocationZ(x2,y2)
        endif
        if z2>TERRAIN_COLLIDE_HEIGHT or CheckPathability(x2,y2)==false then
            set angle=GuessBounce(udg_reals10[A],x1,y1)
            set udg_booleans10[A]=true
            set udg_reals10[A]=angle
            set impact=true
        endif
        if(IsYinMap(y2)and IsYinMap(x2))or impact then
            call SetUnitX(udg_units10[A],x2)
            call SetUnitY(udg_units10[A],y2)
            call SetUnitFlyHeight(udg_units10[A],(z2-(z2*z2/10)),.0)
        endif
        if udg_reals11[A]>Crucio__CRUCIO_TOTAL_RANGE then
            call KillUnit(udg_units10[A])
        endif
        set udg_reals11[A]=udg_reals11[A]+Crucio__CRUCIO_MOVE_SPEED
    else
        call s__MissileData_destroy(M)
        call s__Crucio__CrucioData_destroy(A)
        return true
    endif
    return false
endfunction

function Crucio__CrucioTrigger_Action takes nothing returns nothing
    local location target=GetSpellTargetLoc()
    local unit u=GetTriggerUnit()
    local real x1=GetUnitX(u)
    local real y1=GetUnitY(u)
    local real x2=GetLocationX(target)
    local real y2=GetLocationY(target)
    local real dx=x2-x1
    local real dy=y2-y1
    local real angle=Atan2(dy,dx)
    local integer M
    local integer A
    set A=s__Crucio__CrucioData__allocate()
    set M=s__MissileData__allocate()
    set udg_units10[A]=CreateUnit(GetOwningPlayer(u),Crucio__CRUCIO_MISSILE_ID,x1,y1,0)
    set udg_units11[A]=u
    set udg_reals10[A]=angle
    set udg_reals11[A]=0
    set udg_reals03[M]=dx
    set udg_reals04[M]=dy
    if GetSpellAbilityId()=='A00J'then
        set udg_booleans08[M]=true
        call SetUnitScale(udg_units10[A],1.3,1.3,1.3)
    endif
    call SetUnitUserData(udg_units10[A],M)
    call PauseUnit(udg_units10[A],true)
    call SetUnitFlyHeight(udg_units10[A],75.,.0)
    call SetUnitInvulnerable(udg_units10[A],true)
    call TT_Start(function Crucio__Crucio_Move,A)
    call TriggerRegisterUnitInRange(udg_triggers09[A],udg_units10[A],Crucio__CRUCIO_IMPACT_RADIUS,Condition(function True))
    call TriggerAddCondition(udg_triggers09[A],Condition(function Crucio__Crucio_Effect))
    call SetTriggerStructB(udg_triggers09[A],A)
    call RemoveLocation(target)
    set u=null
    set target=null
endfunction

function InitCrucio takes nothing returns nothing
    local integer i=0
    set udg_trigger51=CreateTrigger()
    loop
        exitwhen i>11
        call TriggerRegisterUnitEvent(udg_trigger51,udg_units02[i],EVENT_UNIT_SPELL_EFFECT)
        set i=i+1
    endloop
    call TriggerAddCondition(udg_trigger51,Condition(function Crucio__CrucioTrigger_Condition))
    call TriggerAddAction(udg_trigger51,function Crucio__CrucioTrigger_Action)
endfunction

function CrystalBallCondition takes nothing returns boolean
    return GetSpellAbilityId()=='A00E'
endfunction

function CrystalBallAction takes nothing returns nothing
    local unit u=GetTriggerUnit()
    local player p=GetOwningPlayer(u)
    local integer pn=GetPlayerId(p)
    local integer i=0
    local integer ep=0
    local lightning array l
    local string path="MFPB"
    local real x=GetUnitX(u)
    local real y=GetUnitY(u)
    local real x2=x
    local real y2=y
    if pn<6 then
        set ep=6
    else
        set ep=0
    endif
    loop
        exitwhen i>5
        if(GetLocalPlayer()!=p)then
            set path=""
        endif
        if IsUnitAlive(udg_units02[ep])and UnitHasItemOfType(udg_units02[ep],'I001')==false then
            set x2=GetUnitX(udg_units02[ep])
            set y2=GetUnitY(udg_units02[ep])
        endif
        set l[i]=AddLightning(path,true,x,y,x2,y2)
        set ep=ep+1
        set i=i+1
        set path="MFPB"
        set x2=x
        set y2=y
    endloop
    call PolledWait2(1.)
    set i=0
    loop
        exitwhen i>5
        call DestroyLightning(l[i])
        set l[i]=null
        set i=i+1
    endloop
    set p=null
    set u=null
endfunction

function InitCrystalBall takes nothing returns nothing
    local integer i=0
    set udg_trigger62=CreateTrigger()
    loop
        exitwhen i>11
        call TriggerRegisterUnitEvent(udg_trigger62,udg_units02[i],EVENT_UNIT_SPELL_EFFECT)
        set i=i+1
    endloop
    call TriggerAddCondition(udg_trigger62,Condition(function CrystalBallCondition))
    call TriggerAddAction(udg_trigger62,function CrystalBallAction)
endfunction

function s__Expelliarmus__ExpelliarmusData_onDestroy takes integer this returns nothing
    call ClearTriggerStructA(udg_triggers10[this])
    call DestroyTrigger(udg_triggers10[this])
endfunction

function s__Expelliarmus__ExpelliarmusData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers34[this]!=-1)then
        return
    endif
    call s__Expelliarmus__ExpelliarmusData_onDestroy(this)
    set udg_integers34[this]=udg_integer37
    set udg_integer37=this
endfunction

function s__Expelliarmus__FlyingWandData_move takes integer this returns nothing
    local integer v
    call s__vector_add(udg_integers37[this],udg_integer21)
    call s__vector_add(udg_integers36[this],udg_integers37[this])
    call s__vector_add(udg_integers37[this],udg_integer21)
    call s__vector_getTerrainPoint(udg_integer22,udg_reals05[udg_integers36[this]],udg_reals06[udg_integers36[this]])
    if IsXinMap(udg_reals05[udg_integers36[this]])and IsYinMap(udg_reals06[udg_integers36[this]])and GetXYLocationZ(udg_reals05[udg_integers36[this]],udg_reals06[udg_integers36[this]])<TERRAIN_COLLIDE_HEIGHT then
        call SetUnitX(udg_units16[this],udg_reals05[udg_integers36[this]])
        call SetUnitY(udg_units16[this],udg_reals06[udg_integers36[this]])
    endif
    call SetUnitFlyHeight(udg_units16[this],udg_reals07[udg_integers36[this]]-udg_reals07[udg_integer22],.0)
    if GetXYLocationZ(udg_reals05[udg_integers36[this]],udg_reals06[udg_integers36[this]])>TERRAIN_COLLIDE_HEIGHT then
        set udg_reals05[udg_integers37[this]]=udg_reals05[udg_integers37[this]]*-1
        set udg_reals06[udg_integers37[this]]=udg_reals06[udg_integers37[this]]*-1
        set udg_reals07[udg_integers37[this]]=udg_reals07[udg_integers37[this]]*-1
    endif
    if udg_reals07[udg_integer22]>=udg_reals07[udg_integers36[this]]then
        call DestroyEffect(AddSpecialEffect("Units\\Creeps\\HeroTinkerFactory\\HeroTinkerFactoryMissle.mdl",GetUnitX(udg_units16[this]),GetUnitY(udg_units16[this])))
        set udg_booleans13[this]=true
    endif
endfunction

function s__Expelliarmus__FlyingWandData_onDestroy takes integer this returns nothing
    call SetUnitX(udg_units16[this],STORAGE_AREA_X)
    call SetUnitY(udg_units16[this],STORAGE_AREA_Y)
    call SetItemPosition(udg_items03[this],udg_reals05[udg_integers36[this]],udg_reals06[udg_integers36[this]])
    call s__vector_destroy(udg_integers36[this])
    call s__vector_destroy(udg_integers37[this])
endfunction

function s__Expelliarmus__FlyingWandData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers35[this]!=-1)then
        return
    endif
    call s__Expelliarmus__FlyingWandData_onDestroy(this)
    set udg_integers35[this]=udg_integer39
    set udg_integer39=this
endfunction

function Expelliarmus__ExpelliarmusTrigger_Condition takes nothing returns boolean
    return GetSpellAbilityId()==Expelliarmus__EXPELLIARMUS_SPELL_ID or GetSpellAbilityId()=='A00K'
endfunction

function Expelliarmus_Fly takes nothing returns boolean
    local integer W=TT_GetData()
    if udg_booleans13[W]then
        call s__Expelliarmus__FlyingWandData_destroy(W)
        return true
    endif
    call s__Expelliarmus__FlyingWandData_move(W)
    return false
endfunction

function Expelliarmus__Expelliarmus_Effect takes nothing returns boolean
    local integer A=GetTriggerStructA(GetTriggeringTrigger())
    local integer M=GetUnitUserData(udg_units14[A])
    local integer W
    local unit u=GetTriggerUnit()
    local real ux=GetUnitX(u)
    local real uy=GetUnitY(u)
    local real mx=GetUnitX(udg_units14[A])
    local real my=GetUnitY(udg_units14[A])
    local item w
    local integer i=0
    local player p=GetOwningPlayer(udg_units15[A])
    local integer pl=GetPlayerId(p)
    if GetUnitState(udg_units14[A],UNIT_STATE_LIFE)>0 and GetUnitFlyHeight(u)<'d'then
        if udg_booleans12[A]==false and u==udg_units15[A]then
            set udg_booleans12[A]=true
        elseif IsUnitSpellProjectile(u)then
            if mx>ux then
                call ProjectileImpactWithProjectile(udg_units14[A],u)
            elseif mx<ux then
            else
                if my>uy then
                    call ProjectileImpactWithProjectile(udg_units14[A],u)
                elseif my<uy then
                endif
            endif
        else
            if GetUnitAbilityLevel(u,ELDER_PROTEGO_BUFF_ID)>0 then
                call ProjectileImpactWithProtegoUnit(udg_units14[A],u)
            elseif GetUnitAbilityLevel(u,PROTEGO_BUFF_ID)>0 and udg_booleans08[M]==false then
                call ProjectileImpactWithProtegoUnit(udg_units14[A],u)
            elseif UnitHasItemOfType(u,'I003')and udg_booleans08[M]==false then
                call ProjectileImpactWithProtegoUnit(udg_units14[A],u)
                call DestroyEffect(AddSpecialEffectTarget(PROTEGO_HAT_EFFECT,u,"head"))
                call RemoveItem(UnitGetItemOfType(u,'I003'))
            else
                loop
                    exitwhen i>5
                    set w=UnitItemInSlot(u,i)
                    if w!=null then
                        if GetItemTypeId(w)=='ssil'or GetItemTypeId(w)=='I004'then
                            set W=s__Expelliarmus__FlyingWandData__allocate()
                            set udg_items03[W]=w
                            set udg_units16[W]=udg_units03[GetItemUserData(udg_items03[W])]
                            set udg_integers36[W]=s__vector_create(GetUnitX(u),GetUnitY(u),TERRAIN_COLLIDE_HEIGHT+'d')
                            set udg_integers37[W]=s__vector_create(GetRandomReal(-15,15),GetRandomReal(-15,15),GetRandomReal(20,30))
                            call SetItemPosition(udg_items03[W],STORAGE_AREA_X,STORAGE_AREA_Y)
                            call TT_Start(function Expelliarmus_Fly,W)
                        endif
                    endif
                    set i=i+1
                endloop
                call DestroyEffect(AddSpecialEffectTarget(Expelliarmus__EXPELLIARMUS_IMPACT_EFFECT,u,"hand - right"))
                call KillUnit(udg_units14[A])
                if IsUnitAlly(u,p)then
                    set udg_integers15[pl]=udg_integers15[pl]-2
                else
                    set udg_integers15[pl]=udg_integers15[pl]+2
                endif
            endif
        endif
    endif
    set u=null
    set w=null
    set p=null
    return false
endfunction

function Expelliarmus__Expelliarmus_Move takes nothing returns boolean
    local integer A=TT_GetData()
    local integer M=GetUnitUserData(udg_units14[A])
    local real x1=GetUnitX(udg_units14[A])
    local real y1=GetUnitY(udg_units14[A])
    local real x2=x1+Expelliarmus__EXPELLIARMUS_MOVE_SPEED*Cos(udg_reals12[A])
    local real y2=y1+Expelliarmus__EXPELLIARMUS_MOVE_SPEED*Sin(udg_reals12[A])
    local real dx=x2-x1
    local real dy=y2-y1
    local real z2=GetXYLocationZ(x2,y2)
    local real angle
    local boolean b=false
    local integer i=0
    local boolean impact=true
    if GetUnitState(udg_units14[A],UNIT_STATE_LIFE)>0 then
        if udg_booleans07[M]==false then
            set udg_reals03[M]=dx
            set udg_reals04[M]=dy
        else
            set udg_reals12[A]=Atan2(udg_reals04[M],udg_reals03[M])
            set udg_booleans07[M]=false
            set x2=x1+Expelliarmus__EXPELLIARMUS_MOVE_SPEED*Cos(udg_reals12[A])
            set y2=y1+Expelliarmus__EXPELLIARMUS_MOVE_SPEED*Sin(udg_reals12[A])
            set dx=x2-x1
            set dy=y2-y1
            set z2=GetXYLocationZ(x2,y2)
        endif
        if z2>TERRAIN_COLLIDE_HEIGHT or CheckPathability(x2,y2)==false then
            set angle=GuessBounce(udg_reals12[A],x1,y1)
            set udg_booleans12[A]=true
            set udg_reals12[A]=angle
            set impact=true
        endif
        if(IsYinMap(y2)and IsYinMap(x2))or impact then
            call SetUnitX(udg_units14[A],x2)
            call SetUnitY(udg_units14[A],y2)
            call SetUnitFlyHeight(udg_units14[A],(z2-(z2*z2/10)),.0)
        endif
        if udg_reals13[A]>Expelliarmus__EXPELLIARMUS_TOTAL_RANGE then
            call KillUnit(udg_units14[A])
        endif
        set udg_reals13[A]=udg_reals13[A]+Expelliarmus__EXPELLIARMUS_MOVE_SPEED
    else
        call s__MissileData_destroy(M)
        call s__Expelliarmus__ExpelliarmusData_destroy(A)
        return true
    endif
    return false
endfunction

function Expelliarmus__ExpelliarmusTrigger_Action takes nothing returns nothing
    local location target=GetSpellTargetLoc()
    local unit u=GetTriggerUnit()
    local real x1=GetUnitX(u)
    local real y1=GetUnitY(u)
    local real x2=GetLocationX(target)
    local real y2=GetLocationY(target)
    local real dx=x2-x1
    local real dy=y2-y1
    local real angle=Atan2(dy,dx)
    local integer M
    local integer A
    set A=s__Expelliarmus__ExpelliarmusData__allocate()
    set M=s__MissileData__allocate()
    set udg_units14[A]=CreateUnit(GetOwningPlayer(u),Expelliarmus__EXPELLIARMUS_MISSILE_ID,x1,y1,0)
    set udg_units15[A]=u
    set udg_reals12[A]=angle
    set udg_reals13[A]=0
    set udg_reals03[M]=dx
    set udg_reals04[M]=dy
    if GetSpellAbilityId()=='A00K'then
        set udg_booleans08[M]=true
        call SetUnitScale(udg_units14[A],1.5,1.5,1.5)
    endif
    call SetUnitUserData(udg_units14[A],M)
    call PauseUnit(udg_units14[A],true)
    call SetUnitFlyHeight(udg_units14[A],75.,.0)
    call SetUnitInvulnerable(udg_units14[A],true)
    call TT_Start(function Expelliarmus__Expelliarmus_Move,A)
    call TriggerRegisterUnitInRange(udg_triggers10[A],udg_units14[A],Expelliarmus__EXPELLIARMUS_IMPACT_RADIUS,Condition(function True))
    call TriggerAddCondition(udg_triggers10[A],Condition(function Expelliarmus__Expelliarmus_Effect))
    call SetTriggerStructA(udg_triggers10[A],A)
    call RemoveLocation(target)
    set target=null
    set u=null
endfunction

function InitExpelliarmus takes nothing returns nothing
    local integer i=0
    set udg_trigger56=CreateTrigger()
    loop
        exitwhen i>11
        call TriggerRegisterUnitEvent(udg_trigger56,udg_units02[i],EVENT_UNIT_SPELL_EFFECT)
        set i=i+1
    endloop
    call TriggerAddCondition(udg_trigger56,Condition(function Expelliarmus__ExpelliarmusTrigger_Condition))
    call TriggerAddAction(udg_trigger56,function Expelliarmus__ExpelliarmusTrigger_Action)
endfunction

function HaavaParannusSpelli__AntiHaavaCondition takes nothing returns boolean
    return GetSpellAbilityId()=='A00C'
endfunction

function HaavaParannusSpelli__AntiHaavaAction takes nothing returns nothing
    local unit u=GetSpellTargetUnit()
    local integer i=GetUnitAbilityLevel(u,'B000')
    local player p=GetOwningPlayer(GetTriggerUnit())
    local integer i2=GetPlayerId(p)
    if i>0 then
        call UnitRemoveAbility(u,'B000')
        call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Orc\\HealingWave\\HealingWaveTarget.mdl",u,"chest"))
        if IsUnitAlly(u,p)==false then
            set udg_integers15[i2]=udg_integers15[i2]-10
        else
            set udg_integers15[i2]=udg_integers15[i2]+10
        endif
    endif
    set u=null
    set p=null
endfunction

function HaavaParannusSpelli__AntiHaavaChannel takes nothing returns nothing
    local unit t=GetSpellTargetUnit()
    local unit c=GetTriggerUnit()
    local boolean b=(GetUnitTypeId(c)=='N000')
    local effect e=AddSpecialEffectTarget("Abilities\\Spells\\Other\\HealTarget2\\HealTarget2.mdl",t,"chest")
    if b then
        call SetUnitAnimationByIndex(c,1)
    else
        call SetUnitAnimationByIndex(c,2)
    endif
    call PolledWait2(1.)
    if b then
        call SetUnitAnimationByIndex(c,1)
    else
        call SetUnitAnimationByIndex(c,2)
    endif
    call PolledWait2(1.)
    if b then
        call SetUnitAnimationByIndex(c,1)
    else
        call SetUnitAnimationByIndex(c,2)
    endif
    call PolledWait2(1.)
    if b then
        call SetUnitAnimationByIndex(c,1)
    else
        call SetUnitAnimationByIndex(c,2)
    endif
    call PolledWait2(1.)
    if b then
        call SetUnitAnimationByIndex(c,1)
    else
        call SetUnitAnimationByIndex(c,2)
    endif
    call PolledWait2(1.)
    if b then
        call SetUnitAnimationByIndex(c,1)
    else
        call SetUnitAnimationByIndex(c,2)
    endif
    call DestroyEffect(e)
    set e=null
    set c=null
    set t=null
endfunction

function InitAntiHaava takes nothing returns nothing
    local integer i=0
    set udg_trigger57=CreateTrigger()
    set udg_trigger58=CreateTrigger()
    loop
        exitwhen i>11
        call TriggerRegisterUnitEvent(udg_trigger57,udg_units02[i],EVENT_UNIT_SPELL_EFFECT)
        call TriggerRegisterUnitEvent(udg_trigger58,udg_units02[i],EVENT_UNIT_SPELL_CHANNEL)
        set i=i+1
    endloop
    call TriggerAddCondition(udg_trigger57,Condition(function HaavaParannusSpelli__AntiHaavaCondition))
    call TriggerAddCondition(udg_trigger58,Condition(function HaavaParannusSpelli__AntiHaavaCondition))
    call TriggerAddAction(udg_trigger57,function HaavaParannusSpelli__AntiHaavaAction)
    call TriggerAddAction(udg_trigger58,function HaavaParannusSpelli__AntiHaavaChannel)
endfunction

function s__Impedimenta__ImpedimentaData_onDestroy takes integer this returns nothing
    call ClearTriggerStructB(udg_triggers11[this])
    call DestroyTrigger(udg_triggers11[this])
endfunction

function s__Impedimenta__ImpedimentaData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers38[this]!=-1)then
        return
    endif
    call s__Impedimenta__ImpedimentaData_onDestroy(this)
    set udg_integers38[this]=udg_integer41
    set udg_integer41=this
endfunction

function s__Impedimenta__ImpedimentaFlyData_move takes integer this returns nothing
    local integer v
    call s__vector_add(udg_integers41[this],udg_integer21)
    call s__vector_add(udg_integers40[this],udg_integers41[this])
    call s__vector_add(udg_integers41[this],udg_integer21)
    call s__vector_getTerrainPoint(udg_integer22,udg_reals05[udg_integers40[this]],udg_reals06[udg_integers40[this]])
    if IsXinMap(udg_reals05[udg_integers40[this]])and IsYinMap(udg_reals06[udg_integers40[this]])and GetXYLocationZ(udg_reals05[udg_integers40[this]],udg_reals06[udg_integers40[this]])<TERRAIN_COLLIDE_HEIGHT then
        call SetUnitX(udg_units19[this],udg_reals05[udg_integers40[this]])
        call SetUnitY(udg_units19[this],udg_reals06[udg_integers40[this]])
    endif
    call SetUnitFlyHeight(udg_units19[this],udg_reals07[udg_integers40[this]]-udg_reals07[udg_integer22],.0)
    if GetXYLocationZ(udg_reals05[udg_integers40[this]],udg_reals06[udg_integers40[this]])>TERRAIN_COLLIDE_HEIGHT then
        set udg_reals05[udg_integers41[this]]=udg_reals05[udg_integers41[this]]*-.5
        set udg_reals06[udg_integers41[this]]=udg_reals06[udg_integers41[this]]*-.5
        set udg_reals07[udg_integers41[this]]=udg_reals07[udg_integers41[this]]*-.5
        call UnitDamageTarget(udg_units20[this],udg_units19[this],udg_reals16[this],true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_DIVINE,WEAPON_TYPE_WHOKNOWS)
    endif
    if IsUnitAlive(udg_units19[this])==false then
        set udg_booleans15[this]=true
    endif
    if udg_reals07[udg_integer22]>=udg_reals07[udg_integers40[this]]then
        call UnitDamageTarget(udg_units20[this],udg_units19[this],udg_reals16[this],true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_DIVINE,WEAPON_TYPE_WHOKNOWS)
        call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\GryphonRiderMissile\\GryphonRiderMissileTarget.mdl",GetUnitX(udg_units19[this]),GetUnitY(udg_units19[this])))
        set udg_booleans15[this]=true
    endif
endfunction

function s__Impedimenta__ImpedimentaFlyData_onDestroy takes integer this returns nothing
    call SetUnitFlyHeight(udg_units19[this],.0,.0)
    call SetUnitPosition(udg_units19[this],GetUnitX(udg_units19[this]),GetUnitY(udg_units19[this]))
    call s__vector_destroy(udg_integers40[this])
    call s__vector_destroy(udg_integers41[this])
endfunction

function s__Impedimenta__ImpedimentaFlyData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers39[this]!=-1)then
        return
    endif
    call s__Impedimenta__ImpedimentaFlyData_onDestroy(this)
    set udg_integers39[this]=udg_integer43
    set udg_integer43=this
endfunction

function Impedimenta__ImpedimentaTrigger_Condition takes nothing returns boolean
    return GetSpellAbilityId()==Impedimenta__IMPEDIMENTA_SPELL_ID or GetSpellAbilityId()=='A00L'
endfunction

function Impedimenta_Fly takes nothing returns boolean
    local integer F=TT_GetData()
    if udg_booleans15[F]then
        call s__Impedimenta__ImpedimentaFlyData_destroy(F)
        return true
    endif
    call s__Impedimenta__ImpedimentaFlyData_move(F)
    return false
endfunction

function Impedimenta__Impedimenta_Effect takes nothing returns boolean
    local integer A=GetTriggerStructB(GetTriggeringTrigger())
    local integer M=GetUnitUserData(udg_units17[A])
    local integer F
    local unit u=GetTriggerUnit()
    local real ux=GetUnitX(u)
    local real uy=GetUnitY(u)
    local real mx=GetUnitX(udg_units17[A])
    local real my=GetUnitY(udg_units17[A])
    local integer i=0
    local real hx
    local real hy
    local real dx
    local real dy
    local real d
    local real angle
    local player p=GetOwningPlayer(udg_units18[A])
    local integer pl=GetPlayerId(p)
    if GetUnitState(udg_units17[A],UNIT_STATE_LIFE)>0 and GetUnitFlyHeight(u)<'d'then
        if udg_booleans14[A]==false and u==udg_units18[A]then
            set udg_booleans14[A]=true
        elseif IsUnitSpellProjectile(u)then
            if mx>ux then
                call ProjectileImpactWithProjectile(udg_units17[A],u)
            elseif mx<ux then
            else
                if my>uy then
                    call ProjectileImpactWithProjectile(udg_units17[A],u)
                elseif my<uy then
                endif
            endif
        else
            if GetUnitAbilityLevel(u,ELDER_PROTEGO_BUFF_ID)>0 then
                call ProjectileImpactWithProtegoUnit(udg_units17[A],u)
            elseif GetUnitAbilityLevel(u,PROTEGO_BUFF_ID)>0 and udg_booleans08[M]==false then
                call ProjectileImpactWithProtegoUnit(udg_units17[A],u)
            elseif UnitHasItemOfType(u,'I003')and udg_booleans08[M]==false then
                call ProjectileImpactWithProtegoUnit(udg_units17[A],u)
                call DestroyEffect(AddSpecialEffectTarget(PROTEGO_HAT_EFFECT,u,"head"))
                call RemoveItem(UnitGetItemOfType(u,'I003'))
            else
                loop
                    exitwhen i>11
                    set hx=GetUnitX(udg_units02[i])
                    set hy=GetUnitY(udg_units02[i])
                    set dx=hx-mx
                    set dy=hy-my
                    set d=SquareRoot(dx*dx+dy*dy)
                    set angle=Atan2(dy,dx)
                    if d<250 and udg_units02[i]!=null and GetUnitFlyHeight(udg_units02[i])<'d'then
                        if GetUnitAbilityLevel(udg_units02[i],ELDER_PROTEGO_BUFF_ID)>0 then
                            call ProjectileImpactWithProtegoUnit(udg_units17[A],udg_units02[i])
                        elseif GetUnitAbilityLevel(udg_units02[i],PROTEGO_BUFF_ID)>0 and udg_booleans08[M]==false then
                            call ProjectileImpactWithProtegoUnit(udg_units17[A],udg_units02[i])
                        elseif UnitHasItemOfType(udg_units02[i],'I003')and udg_booleans08[M]==false then
                            call ProjectileImpactWithProtegoUnit(udg_units17[A],udg_units02[i])
                            call DestroyEffect(AddSpecialEffectTarget(PROTEGO_HAT_EFFECT,udg_units02[i],"head"))
                            call RemoveItem(UnitGetItemOfType(udg_units02[i],'I003'))
                        else
                            set F=s__Impedimenta__ImpedimentaFlyData__allocate()
                            set udg_units19[F]=udg_units02[i]
                            set udg_units20[F]=udg_units18[A]
                            set udg_integers40[F]=s__vector_create(GetUnitX(udg_units19[F]),GetUnitY(udg_units19[F]),TERRAIN_COLLIDE_HEIGHT+'d')
                            set udg_integers41[F]=s__vector_create(((251-d)*Cos(angle)*.1),((251-d)*Sin(angle))*.1,10-d*.07)
                            set udg_reals16[F]=300-d
                            call UnitAddAbility(udg_units19[F],'Amrf')
                            call UnitRemoveAbility(udg_units19[F],'Amrf')
                            call TT_Start(function Impedimenta_Fly,F)
                            if IsUnitAlly(udg_units02[i],p)then
                                set udg_integers15[pl]=udg_integers15[pl]-1
                            else
                                set udg_integers15[pl]=udg_integers15[pl]+1
                            endif
                        endif
                    endif
                    set i=i+1
                endloop
                call DestroyEffect(AddSpecialEffect(Impedimenta__IMPEDIMENTA_IMPACT_EFFECT,ux,uy))
                call KillUnit(udg_units17[A])
            endif
        endif
    endif
    set p=null
    set u=null
    return false
endfunction

function Impedimenta__Impedimenta_Move takes nothing returns boolean
    local integer A=TT_GetData()
    local integer M=GetUnitUserData(udg_units17[A])
    local real x1=GetUnitX(udg_units17[A])
    local real y1=GetUnitY(udg_units17[A])
    local real x2=x1+Impedimenta__IMPEDIMENTA_MOVE_SPEED*Cos(udg_reals14[A])
    local real y2=y1+Impedimenta__IMPEDIMENTA_MOVE_SPEED*Sin(udg_reals14[A])
    local real dx=x2-x1
    local real dy=y2-y1
    local real z2=GetXYLocationZ(x2,y2)
    local real angle
    local boolean b=false
    local integer i=0
    local boolean impact=false
    if GetUnitState(udg_units17[A],UNIT_STATE_LIFE)>0 then
        if udg_booleans07[M]==false then
            set udg_reals03[M]=dx
            set udg_reals04[M]=dy
        else
            set udg_reals14[A]=Atan2(udg_reals04[M],udg_reals03[M])
            set udg_booleans07[M]=false
            set x2=x1+Impedimenta__IMPEDIMENTA_MOVE_SPEED*Cos(udg_reals14[A])
            set y2=y1+Impedimenta__IMPEDIMENTA_MOVE_SPEED*Sin(udg_reals14[A])
            set dx=x2-x1
            set dy=y2-y1
            set z2=GetXYLocationZ(x2,y2)
        endif
        if CheckPathability(x2,y2)==false or z2>TERRAIN_COLLIDE_HEIGHT then
            set angle=GuessBounce(udg_reals14[A],x1,y1)
            set udg_booleans14[A]=true
            set udg_reals14[A]=angle
            set impact=true
        endif
        if(IsYinMap(y2)and IsYinMap(x2))or impact then
            call SetUnitX(udg_units17[A],x2)
            call SetUnitY(udg_units17[A],y2)
            call SetUnitFlyHeight(udg_units17[A],(z2-(z2*z2/10)),.0)
        endif
        if udg_reals15[A]>Impedimenta__IMPEDIMENTA_TOTAL_RANGE then
            call KillUnit(udg_units17[A])
        endif
        set udg_reals15[A]=udg_reals15[A]+Impedimenta__IMPEDIMENTA_MOVE_SPEED
    else
        call s__MissileData_destroy(M)
        call s__Impedimenta__ImpedimentaData_destroy(A)
        return true
    endif
    return false
endfunction

function Impedimenta__ImpedimentaTrigger_Action takes nothing returns nothing
    local location target=GetSpellTargetLoc()
    local unit u=GetTriggerUnit()
    local real x1=GetUnitX(u)
    local real y1=GetUnitY(u)
    local real x2=GetLocationX(target)
    local real y2=GetLocationY(target)
    local real dx=x2-x1
    local real dy=y2-y1
    local real angle=Atan2(dy,dx)
    local integer M
    local integer A
    set A=s__Impedimenta__ImpedimentaData__allocate()
    set M=s__MissileData__allocate()
    set udg_units17[A]=CreateUnit(GetOwningPlayer(u),Impedimenta__IMPEDIMENTA_MISSILE_ID,x1,y1,0)
    set udg_units18[A]=u
    set udg_reals14[A]=angle
    set udg_reals15[A]=0
    set udg_reals03[M]=dx
    set udg_reals04[M]=dy
    if GetSpellAbilityId()=='A00L'then
        set udg_booleans08[M]=true
        call SetUnitScale(udg_units17[A],1.5,1.5,1.5)
    endif
    call SetUnitUserData(udg_units17[A],M)
    call PauseUnit(udg_units17[A],true)
    call SetUnitFlyHeight(udg_units17[A],75.,.0)
    call SetUnitInvulnerable(udg_units17[A],true)
    call TT_Start(function Impedimenta__Impedimenta_Move,A)
    call TriggerRegisterUnitInRange(udg_triggers11[A],udg_units17[A],Impedimenta__IMPEDIMENTA_IMPACT_RADIUS,Condition(function True))
    call TriggerAddCondition(udg_triggers11[A],Condition(function Impedimenta__Impedimenta_Effect))
    call SetTriggerStructB(udg_triggers11[A],A)
    call RemoveLocation(target)
    set target=null
    set u=null
endfunction

function InitImpedimenta takes nothing returns nothing
    local integer i=0
    set udg_trigger54=CreateTrigger()
    loop
        exitwhen i>11
        call TriggerRegisterUnitEvent(udg_trigger54,udg_units02[i],EVENT_UNIT_SPELL_EFFECT)
        set i=i+1
    endloop
    call TriggerAddCondition(udg_trigger54,Condition(function Impedimenta__ImpedimentaTrigger_Condition))
    call TriggerAddAction(udg_trigger54,function Impedimenta__ImpedimentaTrigger_Action)
    set udg_integer20=s__vector_create(.0,.0,-1000.*.03125*.03125)
    set udg_integer21=s__vector_create(udg_reals05[udg_integer20]/2,udg_reals06[udg_integer20]/2,udg_reals07[udg_integer20]/2)
    set udg_integer22=s__vector_create(0,0,0)
endfunction

function s__Imperio__ImperioData_onDestroy takes integer this returns nothing
    call ClearTriggerStructC(udg_triggers12[this])
    call DestroyTrigger(udg_triggers12[this])
endfunction

function s__Imperio__ImperioData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers42[this]!=-1)then
        return
    endif
    call s__Imperio__ImperioData_onDestroy(this)
    set udg_integers42[this]=udg_integer45
    set udg_integer45=this
endfunction

function Imperio__ImperioTrigger_Condition takes nothing returns boolean
    return GetSpellAbilityId()==Imperio__IMPERIO_SPELL_ID or GetSpellAbilityId()=='A00M'
endfunction

function Imperio__EndHeroConfuce takes nothing returns boolean
    local integer C=ABCT_GetData()
    local integer H=GetUnitUserData(udg_units23[C])
    set udg_booleans06[H]=false
    call DestroyEffect(udg_effects01[C])
    call DisableTrigger(udg_triggers13[C])
    call s__Imperio__ImperioConfuseData_destroy(C)
    return true
endfunction

function Imperio__Imperio_Effect takes nothing returns boolean
    local integer A=GetTriggerStructC(GetTriggeringTrigger())
    local integer M=GetUnitUserData(udg_units21[A])
    local integer H
    local integer H2
    local integer C
    local unit u=GetTriggerUnit()
    local real ux=GetUnitX(u)
    local real uy=GetUnitY(u)
    local real mx=GetUnitX(udg_units21[A])
    local real my=GetUnitY(udg_units21[A])
    local player oldowner=GetOwningPlayer(u)
    local player imperior=GetOwningPlayer(udg_units21[A])
    local integer i2=GetPlayerId(imperior)
    local integer i=GetPlayerId(oldowner)
    if GetUnitState(udg_units21[A],UNIT_STATE_LIFE)>0 and GetUnitFlyHeight(u)<'d'then
        if udg_booleans16[A]==false and u==udg_units22[A]then
            set udg_booleans16[A]=true
        elseif IsUnitSpellProjectile(u)then
            if mx>ux then
                call ProjectileImpactWithProjectile(udg_units21[A],u)
            elseif mx<ux then
            else
                if my>uy then
                    call ProjectileImpactWithProjectile(udg_units21[A],u)
                elseif my<uy then
                endif
            endif
        else
            if GetUnitAbilityLevel(u,ELDER_PROTEGO_BUFF_ID)>0 and udg_booleans08[M]==false then
                call ProjectileImpactWithProtegoUnit(udg_units21[A],u)
            else
                set H=GetUnitUserData(u)
                set C=s__Imperio__ImperioConfuseData__allocate()
                call DestroyEffect(AddSpecialEffectTarget(Imperio__IMPERIO_IMPACT_EFFECT,u,"head"))
                call KillUnit(udg_units21[A])
                if IsUnitAlive(udg_units22[A])then
                    if IsUnitAlly(u,imperior)or oldowner==imperior then
                        if udg_booleans06[H]then
                            call UnitDamageTarget(udg_units22[A],u,200,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_DIVINE,WEAPON_TYPE_WHOKNOWS)
                        else
                            call EnableTrigger(udg_triggers06[H])
                            set udg_triggers13[C]=udg_triggers06[H]
                            set udg_units23[C]=u
                            set udg_booleans06[H]=true
                            set udg_effects01[C]=AddSpecialEffectTarget("Abilities\\Spells\\Human\\Thunderclap\\ThunderclapTarget.mdl",u,"overhead")
                            call ABCT_Start(function Imperio__EndHeroConfuce,C,30.)
                        endif
                    else
                        if udg_units04[H]==null and IsUnitAlive(udg_units22[A])then
                            call SetUnitOwner(u,imperior,false)
                            call UnitShareVision(u,oldowner,true)
                            set udg_units04[H]=udg_units22[A]
                            set H2=GetUnitUserData(udg_units22[A])
                            set udg_integers20[H2]=udg_integers20[H2]+1
                            set udg_units05[udg_integers19[H2]+udg_integers20[H2]]=u
                            set udg_integers15[i2]=udg_integers15[i2]+60
                        else
                            if udg_booleans06[H]then
                                call UnitDamageTarget(udg_units22[A],u,200,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_DIVINE,WEAPON_TYPE_WHOKNOWS)
                            else
                                call EnableTrigger(udg_triggers06[H])
                                set udg_triggers13[C]=udg_triggers06[H]
                                set udg_units23[C]=u
                                set udg_booleans06[H]=true
                                set udg_effects01[C]=AddSpecialEffectTarget("Abilities\\Spells\\Human\\Thunderclap\\ThunderclapTarget.mdl",u,"overhead")
                                call ABCT_Start(function Imperio__EndHeroConfuce,C,15.)
                            endif
                        endif
                    endif
                endif
            endif
        endif
    endif
    set u=null
    set oldowner=null
    set imperior=null
    return false
endfunction

function Imperio__Imperio_Move takes nothing returns boolean
    local integer A=TT_GetData()
    local integer M=GetUnitUserData(udg_units21[A])
    local real x1=GetUnitX(udg_units21[A])
    local real y1=GetUnitY(udg_units21[A])
    local real x2=x1+Imperio__IMPERIO_MOVE_SPEED*Cos(udg_reals17[A])
    local real y2=y1+Imperio__IMPERIO_MOVE_SPEED*Sin(udg_reals17[A])
    local real dx=x2-x1
    local real dy=y2-y1
    local real z2=GetXYLocationZ(x2,y2)
    local real angle
    local boolean b=false
    local integer i=0
    local boolean impact=false
    if GetUnitState(udg_units21[A],UNIT_STATE_LIFE)>0 then
        if udg_booleans07[M]==false then
            set udg_reals03[M]=dx
            set udg_reals04[M]=dy
        else
            set udg_reals17[A]=Atan2(udg_reals04[M],udg_reals03[M])
            set udg_booleans07[M]=false
            set x2=x1+Imperio__IMPERIO_MOVE_SPEED*Cos(udg_reals17[A])
            set y2=y1+Imperio__IMPERIO_MOVE_SPEED*Sin(udg_reals17[A])
            set dx=x2-x1
            set dy=y2-y1
            set z2=GetXYLocationZ(x2,y2)
        endif
        if z2>TERRAIN_COLLIDE_HEIGHT or CheckPathability(x2,y2)==false then
            set angle=GuessBounce(udg_reals17[A],x1,y1)
            set udg_booleans16[A]=true
            set udg_reals17[A]=angle
            set impact=true
        endif
        if(IsYinMap(y2)and IsYinMap(x2))or impact then
            call SetUnitX(udg_units21[A],x2)
            call SetUnitY(udg_units21[A],y2)
            call SetUnitFlyHeight(udg_units21[A],(z2-(z2*z2/10)),.0)
        endif
        if udg_reals18[A]>Imperio__IMPERIO_TOTAL_RANGE then
            call KillUnit(udg_units21[A])
        endif
        set udg_reals18[A]=udg_reals18[A]+Imperio__IMPERIO_MOVE_SPEED
    else
        call s__MissileData_destroy(M)
        call s__Imperio__ImperioData_destroy(A)
        return true
    endif
    return false
endfunction

function Imperio__ImperioTrigger_Action takes nothing returns nothing
    local location target=GetSpellTargetLoc()
    local unit u=GetTriggerUnit()
    local real x1=GetUnitX(u)
    local real y1=GetUnitY(u)
    local real x2=GetLocationX(target)
    local real y2=GetLocationY(target)
    local real dx=x2-x1
    local real dy=y2-y1
    local real angle=Atan2(dy,dx)
    local integer M
    local integer A
    set A=s__Imperio__ImperioData__allocate()
    set M=s__MissileData__allocate()
    set udg_units21[A]=CreateUnit(GetOwningPlayer(u),Imperio__IMPERIO_MISSILE_ID,x1,y1,0)
    set udg_units22[A]=u
    set udg_reals17[A]=angle
    set udg_reals18[A]=0
    set udg_reals03[M]=dx
    set udg_reals04[M]=dy
    if GetSpellAbilityId()=='A00M'then
        set udg_booleans08[M]=true
        call SetUnitScale(udg_units21[A],1.3,1.3,1.3)
    endif
    call SetUnitUserData(udg_units21[A],M)
    call PauseUnit(udg_units21[A],true)
    call SetUnitFlyHeight(udg_units21[A],75.,.0)
    call SetUnitInvulnerable(udg_units21[A],true)
    call TT_Start(function Imperio__Imperio_Move,A)
    call TriggerRegisterUnitInRange(udg_triggers12[A],udg_units21[A],Imperio__IMPERIO_IMPACT_RADIUS,Condition(function True))
    call TriggerAddCondition(udg_triggers12[A],Condition(function Imperio__Imperio_Effect))
    call SetTriggerStructC(udg_triggers12[A],A)
    call RemoveLocation(target)
    set u=null
    set target=null
endfunction

function InitImperio takes nothing returns nothing
    local integer i=0
    set udg_trigger52=CreateTrigger()
    loop
        exitwhen i>11
        call TriggerRegisterUnitEvent(udg_trigger52,udg_units02[i],EVENT_UNIT_SPELL_EFFECT)
        set i=i+1
    endloop
    call TriggerAddCondition(udg_trigger52,Condition(function Imperio__ImperioTrigger_Condition))
    call TriggerAddAction(udg_trigger52,function Imperio__ImperioTrigger_Action)
endfunction

function RunVictoryCheckForOrder takes nothing returns boolean
    local integer i=0
    local integer alive=0
    local integer H
    loop
        exitwhen i==6
        set H=udg_integers16[i]
        if IsUnitAlive(udg_units02[i])and udg_units04[H]==null and GetUnitAbilityLevel(udg_units02[i],'BPSE')==0 then
            set alive=alive+1
        endif
        set i=i+1
    endloop
    if alive==0 then
        return true
    endif
    return false
endfunction

function Rounds__DumbleddoreFade takes nothing returns nothing
    set udg_integer19=udg_integer19-1
    call SetUnitVertexColor(udg_unit15,255,2555,255,udg_integer19)
    if udg_integer19==0 then
        call PauseTimer(udg_timer03)
        call DestroyTimer(udg_timer03)
        call SetUnitX(udg_unit15,STORAGE_AREA_X)
        call SetUnitY(udg_unit15,STORAGE_AREA_Y)
        call PauseUnit(udg_unit15,true)
    endif
endfunction

function Rounds__DumbledoreE takes nothing returns nothing
    local texttag t=CreateTextTag()
    call DestroyTrigger(udg_trigger47)
    set udg_timer03=CreateTimer()
    call SetTextTagText(t,"Oh it´s you.. Please Take this wand..",9.*.023/10)
    call SetTextTagPosUnit(t,udg_unit15,.5)
    call SetTextTagColor(t,240,240,50,205)
    call SetTextTagPermanent(t,false)
    call SetTextTagVisibility(t,true)
    call SetTextTagVelocity(t,.0,.02)
    call SetTextTagLifespan(t,12.)
    call SetTextTagFadepoint(t,10.)
    set udg_items01[12]=CreateItem('I004',GetUnitX(udg_unit15),GetUnitY(udg_unit15))
    set udg_units03[12]=CreateUnit(Player(15),'h007',STORAGE_AREA_X,STORAGE_AREA_Y,0)
    call PauseUnit(udg_units03[12],true)
    call SetItemUserData(udg_items01[12],12)
    call TimerStart(udg_timer03,.04,true,function Rounds__DumbleddoreFade)
endfunction

function Rounds__Dumbledore takes nothing returns nothing
    local real x
    local real y
    local integer i=GetRandomInt(0,3)
    if i==0 then
        set x=5590.
        set y=-284.
    elseif i==1 then
        set x=717.
        set y=-1086.
    elseif i==2 then
        set x=-1471.
        set y=3884.
    else
        set x=3056.
        set y=4009.
    endif
    set udg_trigger47=CreateTrigger()
    set udg_unit15=CreateUnit(Player(15),'n00A',x,y,0)
    call TriggerRegisterUnitInRange(udg_trigger47,udg_unit15,200.,Filter(function Filttemellarung))
    call TriggerAddAction(udg_trigger47,function Rounds__DumbledoreE)
endfunction

function RunVictoryCheckForEaters takes nothing returns boolean
    local integer i=6
    local integer alive=0
    local integer H
    loop
        exitwhen i==12
        set H=udg_integers16[i]
        if IsUnitAlive(udg_units02[i])and udg_units04[H]==null and GetUnitAbilityLevel(udg_units02[i],'BPSE')==0 then
            set alive=alive+1
        endif
        set i=i+1
    endloop
    if alive==0 then
        return true
    endif
    return false
endfunction

function StartNewRound takes nothing returns nothing
    local integer i=0
    local real x
    local real y
    local integer H
    call PauseTimer(udg_timer02)
    loop
        exitwhen i>11
        if GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
            if IsUnitAlive(udg_units02[i])and GetUnitAbilityLevel(udg_units02[i],'BPSE')<=0 and IsUnitMindControlled(udg_units02[i])==false then
                set udg_integers15[i]=udg_integers15[i]+50
            endif
            set udg_integers15[i]=udg_integers15[i]+10
            if udg_integers15[i]>0 then
                call SetPlayerState(Player(i),PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(Player(i),PLAYER_STATE_RESOURCE_GOLD)+udg_integers15[i])
            endif
            set udg_integers15[i]=0
            if i<=5 then
                set x=GetRandomReal(-5064.9,-3704.5)
                set y=GetRandomReal(122.4,1821.5)
            else
                set x=GetRandomReal(2417.3,4297.6)
                set y=GetRandomReal(-8977.,-7064.7)
            endif
            call ReviveHero(udg_units02[i],x,y,false)
            set H=udg_integers16[i]
            set udg_booleans02[H]=true
            call PauseUnit(udg_units02[i],false)
            call SetUnitPosition(udg_units02[i],x,y)
            call SetItemPosition(udg_items01[i],x,y)
            call UnitAddItem(udg_units02[i],udg_items01[i])
            call UnitRemoveBuffs(udg_units02[i],true,true)
            call SetUnitState(udg_units02[i],UNIT_STATE_LIFE,GetUnitState(udg_units02[i],UNIT_STATE_MAX_LIFE))
            call SetUnitTimeScale(udg_units02[i],1)
            call ReleaseImperioUnits(udg_units02[i])
        elseif GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_LEFT and IsUnitAlive(udg_units02[i])then
            call KillUnit(udg_units02[i])
        endif
        set i=i+1
    endloop
    set udg_real01=0
    set udg_real02=0
    call EnableTrigger(udg_trigger46)
    set udg_integer18=udg_integer18+1
    if udg_integer18==R2I(udg_integer03/2)then
        call Rounds__Dumbledore()
    endif
    call Msg2All("Round "+I2S(udg_integer18),15.)
endfunction

function CheckSituation takes nothing returns nothing
    local boolean bOrder=RunVictoryCheckForOrder()
    local boolean bEaters=RunVictoryCheckForEaters()
    if bOrder==false and bEaters==false then
        return
    endif
    if bOrder and bEaters then
        call Msg2All("EVEN MATCH!!!",20)
        call PauseAllHeroes(true)
        call DisableTrigger(udg_trigger46)
        call TimerStart(udg_timer02,5.,false,function StartNewRound)
        return
    endif
    if bOrder and bEaters==false then
        set udg_integer01=udg_integer01+1
        call TriggerExecute(udg_trigger05)
        if udg_integer01==udg_integer03 then
            call PauseAllHeroes(true)
            call BJDebugMsg("EATERS WIN")
            call BJDebugMsg("Game ends in 20 seconds")
            call DestroyTimer(udg_timer02)
            call DestroyTrigger(udg_trigger46)
            call TriggerSleepAction(20.)
            call CustomVictoryBJ(Player(6),true,true)
            call CustomDefeatBJ(Player(0),"The End")
            call CustomVictoryBJ(Player(7),true,true)
            call CustomDefeatBJ(Player(1),"The End")
            call CustomVictoryBJ(Player(8),true,true)
            call CustomDefeatBJ(Player(2),"The End")
            call CustomVictoryBJ(Player(9),true,true)
            call CustomDefeatBJ(Player(3),"The End")
            call CustomVictoryBJ(Player(10),true,true)
            call CustomDefeatBJ(Player(4),"The End")
            call CustomVictoryBJ(Player(11),true,true)
            call CustomDefeatBJ(Player(5),"The End")
            return
        endif
        call Msg2All("|c00008000Death Eaters Wins the Round!|r",10)
        call PauseAllHeroes(true)
        call DisableTrigger(udg_trigger46)
        call TimerStart(udg_timer02,5.,false,function StartNewRound)
        return
    endif
    if bOrder==false and bEaters then
        set udg_integer02=udg_integer02+1
        call TriggerExecute(udg_trigger05)
        if udg_integer02==udg_integer03 then
            call PauseAllHeroes(true)
            call BJDebugMsg("ORDER WIN")
            call BJDebugMsg("Game ends in 20 seconds")
            call DestroyTimer(udg_timer02)
            call DestroyTrigger(udg_trigger46)
            call TriggerSleepAction(20.)
            call CustomVictoryBJ(Player(0),true,true)
            call CustomDefeatBJ(Player(6),"The End")
            call CustomVictoryBJ(Player(1),true,true)
            call CustomDefeatBJ(Player(7),"The End")
            call CustomVictoryBJ(Player(2),true,true)
            call CustomDefeatBJ(Player(8),"The End")
            call CustomVictoryBJ(Player(3),true,true)
            call CustomDefeatBJ(Player(9),"The End")
            call CustomVictoryBJ(Player(4),true,true)
            call CustomDefeatBJ(Player(10),"The End")
            call CustomVictoryBJ(Player(5),true,true)
            call CustomDefeatBJ(Player(11),"The End")
            return
        endif
        call Msg2All("|c00FF0000Order of the Phoenix Wins the Round!|r",10)
        call PauseAllHeroes(true)
        call DisableTrigger(udg_trigger46)
        call TimerStart(udg_timer02,5.,false,function StartNewRound)
    endif
endfunction

function s__Sektumsempra__SektumsempraData_onDestroy takes integer this returns nothing
    call ClearTriggerStructC(udg_triggers14[this])
    call DestroyTrigger(udg_triggers14[this])
endfunction

function s__Sektumsempra__SektumsempraData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers44[this]!=-1)then
        return
    endif
    call s__Sektumsempra__SektumsempraData_onDestroy(this)
    set udg_integers44[this]=udg_integer49
    set udg_integer49=this
endfunction

function s__Sektumsempra__SektumsempraBleedingData_onDestroy takes integer this returns nothing
    local integer H=GetUnitUserData(udg_units26[this])
    set udg_integers24[H]=255
    set udg_integers23[H]=255
    call UnitResetColor(udg_units26[this])
endfunction

function s__Sektumsempra__SektumsempraBleedingData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers45[this]!=-1)then
        return
    endif
    call s__Sektumsempra__SektumsempraBleedingData_onDestroy(this)
    set udg_integers45[this]=udg_integer51
    set udg_integer51=this
endfunction

function Sektumsempra__SektumsempraTrigger_Condition takes nothing returns boolean
    return GetSpellAbilityId()==Sektumsempra__SEKTUMSEMPRA_SPELL_ID or GetSpellAbilityId()=='A00N'
endfunction

function Sektumsempra__Sektumsempra_Bleed takes nothing returns boolean
    local integer B=ABCT_GetData()
    local integer H=GetUnitUserData(udg_units26[B])
    local boolean b=IsUnitAlive(udg_units26[B])and GetUnitAbilityLevel(udg_units26[B],'B000')>0
    local integer color=R2I(255*(GetUnitState(udg_units26[B],UNIT_STATE_LIFE)/GetUnitState(udg_units26[B],UNIT_STATE_MAX_LIFE)))
    if b==false then
        call s__Sektumsempra__SektumsempraBleedingData_destroy(B)
        return true
    endif
    call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",udg_units26[B],"head"))
    call UnitDamageTarget(udg_units27[B],udg_units26[B],40,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_DIVINE,WEAPON_TYPE_WHOKNOWS)
    set udg_integers24[H]=color
    set udg_integers23[H]=color
    call UnitResetColor(udg_units26[B])
    return false
endfunction

function Sektumsempra__Sektumsempra_Effect takes nothing returns boolean
    local integer A=GetTriggerStructC(GetTriggeringTrigger())
    local integer M=GetUnitUserData(udg_units24[A])
    local integer B
    local unit u=GetTriggerUnit()
    local unit c=null
    local real ux=GetUnitX(u)
    local real uy=GetUnitY(u)
    local real mx=GetUnitX(udg_units24[A])
    local real my=GetUnitY(udg_units24[A])
    local player p=GetOwningPlayer(udg_units25[A])
    local player p2=GetOwningPlayer(u)
    local integer pl=GetPlayerId(p)
    if GetUnitState(udg_units24[A],UNIT_STATE_LIFE)>0 and GetUnitFlyHeight(u)<'d'then
        if udg_booleans17[A]==false and u==udg_units25[A]then
            set udg_booleans17[A]=true
        elseif IsUnitSpellProjectile(u)then
            if mx>ux then
                call ProjectileImpactWithProjectile(udg_units24[A],u)
            elseif mx<ux then
            else
                if my>uy then
                    call ProjectileImpactWithProjectile(udg_units24[A],u)
                elseif my<uy then
                endif
            endif
        else
            if GetUnitAbilityLevel(u,ELDER_PROTEGO_BUFF_ID)>0 then
                call ProjectileImpactWithProtegoUnit(udg_units24[A],u)
            elseif GetUnitAbilityLevel(u,PROTEGO_BUFF_ID)>0 and udg_booleans08[M]==false then
                call ProjectileImpactWithProtegoUnit(udg_units24[A],u)
            elseif UnitHasItemOfType(u,'I003')and udg_booleans08[M]==false then
                call ProjectileImpactWithProtegoUnit(udg_units24[A],u)
                call DestroyEffect(AddSpecialEffectTarget(PROTEGO_HAT_EFFECT,u,"head"))
                call RemoveItem(UnitGetItemOfType(u,'I003'))
            else
                set c=UseCaster()
                call SetUnitX(c,ux)
                call SetUnitY(c,uy)
                call IssueTargetOrderById(c,852075,u)
                call StopUsingCaster(c)
                call DestroyEffect(AddSpecialEffectTarget(Sektumsempra__SEKTUMSEMPRA_IMPACT_EFFECT,u,"chest"))
                call UnitDamageTarget(udg_units25[A],u,200,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_DIVINE,WEAPON_TYPE_WHOKNOWS)
                call KillUnit(udg_units24[A])
                set B=s__Sektumsempra__SektumsempraBleedingData__allocate()
                set udg_units26[B]=u
                set udg_integers46[B]=GetPlayerId(p2)
                set udg_units27[B]=udg_units25[A]
                call ABCT_Start(function Sektumsempra__Sektumsempra_Bleed,B,2.)
                if IsUnitAlly(u,p)then
                    set udg_integers15[pl]=udg_integers15[pl]-10
                else
                    set udg_integers15[pl]=udg_integers15[pl]+10
                endif
            endif
        endif
    endif
    set u=null
    set c=null
    set p=null
    set p2=null
    return false
endfunction

function Sektumsempra__Sektumsempra_Move takes nothing returns boolean
    local integer A=TT_GetData()
    local integer M=GetUnitUserData(udg_units24[A])
    local real x1=GetUnitX(udg_units24[A])
    local real y1=GetUnitY(udg_units24[A])
    local real x2=x1+Sektumsempra__SEKTUMSEMPRA_MOVE_SPEED*Cos(udg_reals19[A])
    local real y2=y1+Sektumsempra__SEKTUMSEMPRA_MOVE_SPEED*Sin(udg_reals19[A])
    local real dx=x2-x1
    local real dy=y2-y1
    local real z2=GetXYLocationZ(x2,y2)
    local real angle
    local boolean b=false
    local integer i=0
    local boolean impact=false
    if GetUnitState(udg_units24[A],UNIT_STATE_LIFE)>0 then
        if udg_booleans07[M]==false then
            set udg_reals03[M]=dx
            set udg_reals04[M]=dy
        else
            set udg_reals19[A]=Atan2(udg_reals04[M],udg_reals03[M])
            set udg_booleans07[M]=false
            set x2=x1+Sektumsempra__SEKTUMSEMPRA_MOVE_SPEED*Cos(udg_reals19[A])
            set y2=y1+Sektumsempra__SEKTUMSEMPRA_MOVE_SPEED*Sin(udg_reals19[A])
            set dx=x2-x1
            set dy=y2-y1
            set z2=GetXYLocationZ(x2,y2)
        endif
        if z2>TERRAIN_COLLIDE_HEIGHT or CheckPathability(x2,y2)==false then
            set angle=GuessBounce(udg_reals19[A],x1,y1)
            set udg_booleans17[A]=true
            set udg_reals19[A]=angle
            set impact=true
        endif
        if(IsYinMap(y2)and IsYinMap(x2))or impact then
            call SetUnitX(udg_units24[A],x2)
            call SetUnitY(udg_units24[A],y2)
            call SetUnitFlyHeight(udg_units24[A],(z2-(z2*z2/10)),.0)
        endif
        if udg_reals20[A]>Sektumsempra__SEKTUMSEMPRA_TOTAL_RANGE then
            call KillUnit(udg_units24[A])
        endif
        set udg_reals20[A]=udg_reals20[A]+Sektumsempra__SEKTUMSEMPRA_MOVE_SPEED
    else
        call s__MissileData_destroy(M)
        call s__Sektumsempra__SektumsempraData_destroy(A)
        return true
    endif
    return false
endfunction

function Sektumsempra__SektumsempraTrigger_Action takes nothing returns nothing
    local location target=GetSpellTargetLoc()
    local unit u=GetTriggerUnit()
    local real x1=GetUnitX(u)
    local real y1=GetUnitY(u)
    local real x2=GetLocationX(target)
    local real y2=GetLocationY(target)
    local real dx=x2-x1
    local real dy=y2-y1
    local real angle=Atan2(dy,dx)
    local integer M
    local integer A
    set A=s__Sektumsempra__SektumsempraData__allocate()
    set M=s__MissileData__allocate()
    set udg_units24[A]=CreateUnit(GetOwningPlayer(u),Sektumsempra__SEKTUMSEMPRA_MISSILE_ID,x1,y1,0)
    set udg_units25[A]=u
    set udg_reals19[A]=angle
    set udg_reals20[A]=0
    set udg_reals03[M]=dx
    set udg_reals04[M]=dy
    if GetSpellAbilityId()=='A00N'then
        set udg_booleans08[M]=true
        call SetUnitScale(udg_units24[A],1.5,1.5,1.5)
    endif
    call SetUnitUserData(udg_units24[A],M)
    call PauseUnit(udg_units24[A],true)
    call SetUnitFlyHeight(udg_units24[A],75.,.0)
    call SetUnitInvulnerable(udg_units24[A],true)
    call TT_Start(function Sektumsempra__Sektumsempra_Move,A)
    call TriggerRegisterUnitInRange(udg_triggers14[A],udg_units24[A],Sektumsempra__SEKTUMSEMPRA_IMPACT_RADIUS,Condition(function True))
    call TriggerAddCondition(udg_triggers14[A],Condition(function Sektumsempra__Sektumsempra_Effect))
    call SetTriggerStructC(udg_triggers14[A],A)
    call RemoveLocation(target)
    set target=null
    set u=null
endfunction

function InitSektumsempra takes nothing returns nothing
    local integer i=0
    set udg_trigger55=CreateTrigger()
    loop
        exitwhen i>11
        call TriggerRegisterUnitEvent(udg_trigger55,udg_units02[i],EVENT_UNIT_SPELL_EFFECT)
        set i=i+1
    endloop
    call TriggerAddCondition(udg_trigger55,Condition(function Sektumsempra__SektumsempraTrigger_Condition))
    call TriggerAddAction(udg_trigger55,function Sektumsempra__SektumsempraTrigger_Action)
endfunction

function s__Stupefy__StupefyData_onDestroy takes integer this returns nothing
    call ClearTriggerStructA(udg_triggers15[this])
    call DestroyTrigger(udg_triggers15[this])
endfunction

function s__Stupefy__StupefyData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers47[this]!=-1)then
        return
    endif
    call s__Stupefy__StupefyData_onDestroy(this)
    set udg_integers47[this]=udg_integer53
    set udg_integer53=this
endfunction

function s__Stupefy__StupefySlideData_onDestroy takes integer this returns nothing
    call DestroyEffect(udg_effects02[this])
    call PauseUnit(udg_units30[this],false)
endfunction

function s__Stupefy__StupefySlideData_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers48[this]!=-1)then
        return
    endif
    call s__Stupefy__StupefySlideData_onDestroy(this)
    set udg_integers48[this]=udg_integer55
    set udg_integer55=this
endfunction

function Stupefy__StupefyTrigger_Condition takes nothing returns boolean
    return GetSpellAbilityId()==Stupefy__STUPEFY_SPELL_ID or GetSpellAbilityId()=='A00O'
endfunction

function Stupefy__Stupefy_Slide takes nothing returns boolean
    local integer S=TT_GetData()
    local real x1=GetUnitX(udg_units30[S])
    local real y1=GetUnitY(udg_units30[S])
    local real x2=x1+6*Cos(udg_reals23[S])
    local real y2=y1+6*Sin(udg_reals23[S])
    if IsYinMap(y2)and IsXinMap(x2)and CheckPathability(x2,y2)then
        call SetUnitX(udg_units30[S],x2)
        call SetUnitY(udg_units30[S],y2)
    else
        call UnitDamageTarget(udg_units31[S],udg_units30[S],2.5,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_DIVINE,WEAPON_TYPE_WHOKNOWS)
    endif
    set udg_reals24[S]=udg_reals24[S]+6
    if udg_reals24[S]<300 then
        return false
    endif
    call s__Stupefy__StupefySlideData_destroy(S)
    return true
endfunction

function Stupefy__Stupefy_Effect takes nothing returns boolean
    local integer A=GetTriggerStructA(GetTriggeringTrigger())
    local integer M=GetUnitUserData(udg_units28[A])
    local integer S
    local unit u=GetTriggerUnit()
    local unit c=null
    local real ux=GetUnitX(u)
    local real uy=GetUnitY(u)
    local real mx=GetUnitX(udg_units28[A])
    local real my=GetUnitY(udg_units28[A])
    local real damage=0
    local player p=GetOwningPlayer(udg_units29[A])
    local integer pl=GetPlayerId(p)
    if GetUnitState(udg_units28[A],UNIT_STATE_LIFE)>0 and GetUnitFlyHeight(u)<'d'then
        if udg_booleans18[A]==false and u==udg_units29[A]then
            set udg_booleans18[A]=true
        elseif IsUnitSpellProjectile(u)then
            if mx>ux then
                call ProjectileImpactWithProjectile(udg_units28[A],u)
            elseif mx<ux then
            else
                if my>uy then
                    call ProjectileImpactWithProjectile(udg_units28[A],u)
                elseif my<uy then
                endif
            endif
        else
            if GetUnitAbilityLevel(u,ELDER_PROTEGO_BUFF_ID)>0 then
                call ProjectileImpactWithProtegoUnit(udg_units28[A],u)
            elseif GetUnitAbilityLevel(u,PROTEGO_BUFF_ID)>0 and udg_booleans08[M]==false then
                call ProjectileImpactWithProtegoUnit(udg_units28[A],u)
            elseif UnitHasItemOfType(u,'I003')and udg_booleans08[M]==false then
                call ProjectileImpactWithProtegoUnit(udg_units28[A],u)
                call DestroyEffect(AddSpecialEffectTarget(PROTEGO_HAT_EFFECT,u,"head"))
                call RemoveItem(UnitGetItemOfType(u,'I003'))
            else
                if GetUnitState(u,UNIT_STATE_LIFE)<GetUnitState(u,UNIT_STATE_MAX_LIFE)*.3 then
                    set damage=damage+200
                endif
                if GetUnitAbilityLevel(u,'BPSE')>0 then
                    set damage=damage+200
                endif
                set c=UseCaster()
                call SetUnitX(c,ux)
                call SetUnitY(c,uy)
                call IssueTargetOrderById(c,852095,u)
                call StopUsingCaster(c)
                if damage>0 then
                    call UnitDamageTarget(udg_units29[A],u,damage,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_DIVINE,WEAPON_TYPE_WHOKNOWS)
                endif
                call DestroyEffect(AddSpecialEffect(Stupefy__STUPEFY_IMPACT_EFFECT,ux,uy))
                call KillUnit(udg_units28[A])
                set S=s__Stupefy__StupefySlideData__allocate()
                set udg_units30[S]=u
                set udg_reals23[S]=udg_reals21[A]
                set udg_units31[S]=udg_units29[A]
                set udg_reals24[S]=0
                set udg_effects02[S]=AddSpecialEffectTarget("Abilities\\Spells\\Undead\\Cripple\\CrippleTarget.mdl",u,"chest")
                call PauseUnit(udg_units30[S],true)
                call SetUnitTimeScale(udg_units30[S],0)
                call TT_Start(function Stupefy__Stupefy_Slide,S)
                if IsUnitAlly(u,p)then
                    set udg_integers15[pl]=udg_integers15[pl]-10
                else
                    set udg_integers15[pl]=udg_integers15[pl]+10
                endif
            endif
        endif
    endif
    set u=null
    set c=null
    set p=null
    return false
endfunction

function Stupefy__Stupefy_Move takes nothing returns boolean
    local integer A=TT_GetData()
    local integer M=GetUnitUserData(udg_units28[A])
    local real x1=GetUnitX(udg_units28[A])
    local real y1=GetUnitY(udg_units28[A])
    local real x2=x1+Stupefy__STUPEFY_MOVE_SPEED*Cos(udg_reals21[A])
    local real y2=y1+Stupefy__STUPEFY_MOVE_SPEED*Sin(udg_reals21[A])
    local real dx=x2-x1
    local real dy=y2-y1
    local real z2=GetXYLocationZ(x2,y2)
    local real angle
    local boolean b=false
    local integer i=0
    local boolean impact=false
    if GetUnitState(udg_units28[A],UNIT_STATE_LIFE)>0 then
        if udg_booleans07[M]==false then
            set udg_reals03[M]=dx
            set udg_reals04[M]=dy
        else
            set udg_reals21[A]=Atan2(udg_reals04[M],udg_reals03[M])
            set udg_booleans07[M]=false
            set x2=x1+Stupefy__STUPEFY_MOVE_SPEED*Cos(udg_reals21[A])
            set y2=y1+Stupefy__STUPEFY_MOVE_SPEED*Sin(udg_reals21[A])
            set dx=x2-x1
            set dy=y2-y1
            set z2=GetXYLocationZ(x2,y2)
        endif
        if z2>TERRAIN_COLLIDE_HEIGHT or CheckPathability(x2,y2)==false then
            set angle=GuessBounce(udg_reals21[A],x1,y1)
            set udg_booleans18[A]=true
            set udg_reals21[A]=angle
            set impact=true
        endif
        if(IsYinMap(y2)and IsYinMap(x2))or impact then
            call SetUnitX(udg_units28[A],x2)
            call SetUnitY(udg_units28[A],y2)
            call SetUnitFlyHeight(udg_units28[A],(z2-(z2*z2/10)),.0)
        endif
        if udg_reals22[A]>Stupefy__STUPEFY_TOTAL_RANGE then
            call KillUnit(udg_units28[A])
        endif
        set udg_reals22[A]=udg_reals22[A]+Stupefy__STUPEFY_MOVE_SPEED
    else
        call s__MissileData_destroy(M)
        call s__Stupefy__StupefyData_destroy(A)
        return true
    endif
    return false
endfunction

function Stupefy__StupefyTrigger_Action takes nothing returns nothing
    local location target=GetSpellTargetLoc()
    local unit u=GetTriggerUnit()
    local real x1=GetUnitX(u)
    local real y1=GetUnitY(u)
    local real x2=GetLocationX(target)
    local real y2=GetLocationY(target)
    local real dx=x2-x1
    local real dy=y2-y1
    local real angle=Atan2(dy,dx)
    local integer M
    local integer A
    set A=s__Stupefy__StupefyData__allocate()
    set M=s__MissileData__allocate()
    set udg_units28[A]=CreateUnit(GetOwningPlayer(u),Stupefy__STUPEFY_MISSILE_ID,x1,y1,0)
    set udg_units29[A]=u
    set udg_reals21[A]=angle
    set udg_reals22[A]=0
    set udg_reals03[M]=dx
    set udg_reals04[M]=dy
    if GetSpellAbilityId()=='A00O'then
        set udg_booleans08[M]=true
        call SetUnitScale(udg_units28[A],1.5,1.5,1.5)
    endif
    call SetUnitUserData(udg_units28[A],M)
    call PauseUnit(udg_units28[A],true)
    call SetUnitFlyHeight(udg_units28[A],75.,.0)
    call SetUnitInvulnerable(udg_units28[A],true)
    call TT_Start(function Stupefy__Stupefy_Move,A)
    call TriggerRegisterUnitInRange(udg_triggers15[A],udg_units28[A],Stupefy__STUPEFY_IMPACT_RADIUS,Condition(function True))
    call TriggerAddCondition(udg_triggers15[A],Condition(function Stupefy__Stupefy_Effect))
    call SetTriggerStructA(udg_triggers15[A],A)
    call RemoveLocation(target)
    set target=null
    set u=null
endfunction

function InitStupefy takes nothing returns nothing
    local integer i=0
    set udg_trigger53=CreateTrigger()
    loop
        exitwhen i>11
        call TriggerRegisterUnitEvent(udg_trigger53,udg_units02[i],EVENT_UNIT_SPELL_EFFECT)
        set i=i+1
    endloop
    call TriggerAddCondition(udg_trigger53,Condition(function Stupefy__StupefyTrigger_Condition))
    call TriggerAddAction(udg_trigger53,function Stupefy__StupefyTrigger_Action)
endfunction

function WandPick__WandPickTrigger_Action takes nothing returns nothing
    local unit u=GetTriggerUnit()
    local item w=GetManipulatedItem()
    local integer H=GetUnitUserData(u)
    call TriggerSleepAction(.0)
    if udg_booleans05[H]then
        if UnitHasItemOfType(u,'ssil')and GetItemTypeId(w)=='I004'then
            call UnitRemoveAbility(u,COMBAT_SPELL_BOOK_ID)
            call UnitAddAbility(u,COMBAT_SPELL_BOOK_ID_ELDER)
        endif
    else
        if GetItemTypeId(w)=='I004'then
            call UnitAddAbility(u,COMBAT_SPELL_BOOK_ID_ELDER)
            call UnitAddAbility(u,SPELL_BOOK_ID)
            set udg_booleans05[H]=true
        elseif GetItemTypeId(w)=='ssil'then
            call UnitAddAbility(u,COMBAT_SPELL_BOOK_ID)
            call UnitAddAbility(u,SPELL_BOOK_ID)
            set udg_booleans05[H]=true
        endif
    endif
    set u=null
    set w=null
endfunction

function WandPick__WandDropTrigger_Action takes nothing returns nothing
    local unit u=GetTriggerUnit()
    local integer H=GetUnitUserData(u)
    call TriggerSleepAction(.0)
    if UnitHasItemOfType(u,'I004')==false then
        if udg_booleans05[H]then
            call UnitRemoveAbility(u,COMBAT_SPELL_BOOK_ID_ELDER)
            call UnitAddAbility(u,COMBAT_SPELL_BOOK_ID)
        endif
    endif
    if UnitHasItemOfType(u,'ssil')==false and UnitHasItemOfType(u,'I004')==false then
        if udg_booleans05[H]then
            call UnitRemoveAbility(u,SPELL_BOOK_ID)
            call UnitRemoveAbility(u,COMBAT_SPELL_BOOK_ID)
            set udg_booleans05[H]=false
        endif
    endif
    set u=null
endfunction

function WandPick__WandPickInit takes nothing returns nothing
    local integer i=0
    set udg_trigger44=CreateTrigger()
    loop
        exitwhen i>11
        call TriggerRegisterUnitEvent(udg_trigger44,udg_units02[i],EVENT_UNIT_PICKUP_ITEM)
        set i=i+1
    endloop
    call TriggerAddAction(udg_trigger44,function WandPick__WandPickTrigger_Action)
endfunction

function WandPick__WandDropInit takes nothing returns nothing
    local integer i=0
    set udg_trigger45=CreateTrigger()
    loop
        exitwhen i>11
        call TriggerRegisterUnitEvent(udg_trigger45,udg_units02[i],EVENT_UNIT_DROP_ITEM)
        set i=i+1
    endloop
    call TriggerAddAction(udg_trigger45,function WandPick__WandDropTrigger_Action)
endfunction

function InitGlobals2 takes nothing returns nothing
    local integer i=0
    set udg_multiboard01=CreateMultiboard()
    set i=0
    loop
        exitwhen(i>12)
        set udg_integers01[i]=0
        set udg_integers02[i]=0
        set i=i+1
    endloop
    set i=0
    loop
        exitwhen(i>2)
        set udg_integers03[i]=0
        set i=i+1
    endloop
endfunction

function CreateUnitsForPlayer0 takes nothing returns nothing
    local player p=Player(0)
    local unit u
    local integer unitID
    local trigger t
    local real life
    set udg_unit03=CreateUnit(p,'N001',-4737.,524.1,49.517)
    call SetUnitColor(udg_unit03,ConvertPlayerColor(0))
endfunction

function CreateUnitsForPlayer1 takes nothing returns nothing
    local player p=Player(1)
    local unit u
    local integer unitID
    local trigger t
    local real life
    set udg_unit04=CreateUnit(p,'N001',-4379.9,1852.1,83.938)
    call SetUnitColor(udg_unit04,ConvertPlayerColor(0))
endfunction

function CreateUnitsForPlayer2 takes nothing returns nothing
    local player p=Player(2)
    local unit u
    local integer unitID
    local trigger t
    local real life
    set udg_unit05=CreateUnit(p,'N001',-4625.1,1593.4,295.486)
    call SetUnitColor(udg_unit05,ConvertPlayerColor(0))
endfunction

function CreateUnitsForPlayer3 takes nothing returns nothing
    local player p=Player(3)
    local unit u
    local integer unitID
    local trigger t
    local real life
    set udg_unit06=CreateUnit(p,'N001',-4578.9,1966.9,14.755)
    call SetUnitColor(udg_unit06,ConvertPlayerColor(0))
endfunction

function CreateUnitsForPlayer4 takes nothing returns nothing
    local player p=Player(4)
    local unit u
    local integer unitID
    local trigger t
    local real life
    set udg_unit07=CreateUnit(p,'N001',-4205.3,1435.8,5.68)
    call SetUnitColor(udg_unit07,ConvertPlayerColor(0))
endfunction

function CreateUnitsForPlayer5 takes nothing returns nothing
    local player p=Player(5)
    local unit u
    local integer unitID
    local trigger t
    local real life
    set udg_unit08=CreateUnit(p,'N001',-4779.7,1194.6,256.044)
    call SetUnitColor(udg_unit08,ConvertPlayerColor(0))
endfunction

function CreateUnitsForPlayer6 takes nothing returns nothing
    local player p=Player(6)
    local unit u
    local integer unitID
    local trigger t
    local real life
    set udg_unit09=CreateUnit(p,'N000',4044.2,-7732.9,337.137)
    call SetUnitColor(udg_unit09,ConvertPlayerColor(10))
endfunction

function CreateUnitsForPlayer7 takes nothing returns nothing
    local player p=Player(7)
    local unit u
    local integer unitID
    local trigger t
    local real life
    set udg_unit10=CreateUnit(p,'N000',3432.2,-7618.3,53.34)
    call SetUnitColor(udg_unit10,ConvertPlayerColor(10))
endfunction

function CreateUnitsForPlayer8 takes nothing returns nothing
    local player p=Player(8)
    local unit u
    local integer unitID
    local trigger t
    local real life
    set udg_unit11=CreateUnit(p,'N000',3742.9,-7611.2,253.4)
    call SetUnitColor(udg_unit11,ConvertPlayerColor(10))
endfunction

function CreateUnitsForPlayer9 takes nothing returns nothing
    local player p=Player(9)
    local unit u
    local integer unitID
    local trigger t
    local real life
    set udg_unit12=CreateUnit(p,'N000',3471.3,-7957.5,294.89)
    call SetUnitColor(udg_unit12,ConvertPlayerColor(10))
endfunction

function CreateUnitsForPlayer10 takes nothing returns nothing
    local player p=Player(10)
    local unit u
    local integer unitID
    local trigger t
    local real life
    set udg_unit01=CreateUnit(p,'N000',4026.,-7984.8,276.23)
    call SetUnitColor(udg_unit01,ConvertPlayerColor(10))
endfunction

function CreateUnitsForPlayer11 takes nothing returns nothing
    local player p=Player(11)
    local unit u
    local integer unitID
    local trigger t
    local real life
    set udg_unit02=CreateUnit(p,'N000',3768.6,-8246.1,35.87)
    call SetUnitColor(udg_unit02,ConvertPlayerColor(10))
endfunction

function CreateNeutralPassiveBuildings2 takes nothing returns nothing
    local player p=Player(15)
    local unit u
    local integer unitID
    local trigger t
    local real life
    set u=CreateUnit(p,'n006',-3456.,-1792.,270.)
    call SetUnitColor(u,ConvertPlayerColor(9))
    set u=CreateUnit(p,'n007',7104.,-1280.,270.)
    call SetUnitColor(u,ConvertPlayerColor(10))
    set u=CreateUnit(p,'n008',832.,4672.,270.)
    call SetUnitColor(u,ConvertPlayerColor(3))
endfunction

function CreateNeutralPassive2 takes nothing returns nothing
    local player p=Player(15)
    local unit u
    local integer unitID
    local trigger t
    local real life
    set udg_unit13=CreateUnit(p,'n004',-3303.3,-3854.8,245.633)
    set u=CreateUnit(p,'nrat',-2986.8,-2382.5,140.157)
    set u=CreateUnit(p,'nrat',-3358.8,-1909.1,344.014)
    set u=CreateUnit(p,'nrat',-2601.2,-2457.8,95.09)
    set u=CreateUnit(p,'nrat',-3306.,-2293.4,274.337)
    set u=CreateUnit(p,'nrat',-2936.3,-4269.8,28.159)
    set u=CreateUnit(p,'nrat',-2957.1,-1387.9,225.128)
    set u=CreateUnit(p,'nrat',-3225.7,-1342.1,228.248)
    set u=CreateUnit(p,'nrat',-2485.2,-1782.2,149.99)
    set u=CreateUnit(p,'nrat',-2598.1,-3881.4,157.648)
    set u=CreateUnit(p,'n002',-416.7,-2957.9,345.388)
    set u=CreateUnit(p,'n002',-489.5,-2255.2,341.905)
    set u=CreateUnit(p,'n002',-223.,-2014.6,12.756)
    set u=CreateUnit(p,'n002',-788.5,-2488.8,281.797)
    set u=CreateUnit(p,'n002',-224.,-2715.1,196.947)
    set u=CreateUnit(p,'n002',-160.,-3155.1,252.869)
    set u=CreateUnit(p,'n002',363.8,-2541.6,126.874)
    set u=CreateUnit(p,'n002',197.3,-3049.2,185.883)
    set u=CreateUnit(p,'n002',-37.5,-2127.7,100.034)
    set u=CreateUnit(p,'n002',-1318.9,-2656.2,.11)
    set u=CreateUnit(p,'n002',-964.3,-3968.7,46.298)
    set u=CreateUnit(p,'n002',323.6,-4046.3,15.755)
    set u=CreateUnit(p,'n002',3.2,-4668.7,227.995)
    set u=CreateUnit(p,'n002',316.6,-1361.1,187.652)
    set u=CreateUnit(p,'n002',-775.7,-1293.7,165.547)
    set u=CreateUnit(p,'n002',794.7,-1792.4,308.56)
    set u=CreateUnit(p,'ndwm',8491.6,-1607.3,320.36)
    set u=CreateUnit(p,'ndwm',8612.3,-1627.7,15.557)
    set u=CreateUnit(p,'ndwm',8680.6,-1682.7,328.172)
    set u=CreateUnit(p,'ndwm',8145.4,-2625.,91.98)
    set u=CreateUnit(p,'ndwm',8112.2,-2576.9,136.004)
    set u=CreateUnit(p,'ndwm',8335.,-3105.8,108.878)
    set u=CreateUnit(p,'ndwm',8425.2,-3114.4,213.789)
    set u=CreateUnit(p,'ndwm',7005.,-2304.9,44.804)
    set u=CreateUnit(p,'ndwm',6968.,-2376.4,254.781)
    set u=CreateUnit(p,'ndwm',7534.7,-930.5,171.59)
    set u=CreateUnit(p,'nrat',-4753.9,1230.3,67.568)
    set u=CreateUnit(p,'nrat',-8038.,-6710.,242.684)
    set u=CreateUnit(p,'nrat',-7887.8,-3911.1,129.126)
    set u=CreateUnit(p,'nrat',-8044.8,-4011.4,147.848)
    set u=CreateUnit(p,'nrat',-8099.6,-4578.4,327.194)
    set u=CreateUnit(p,'nrat',-7937.6,-5629.6,70.732)
    set u=CreateUnit(p,'nrat',-8049.2,-5438.4,158.702)
    set u=CreateUnit(p,'nrat',-8047.9,-5322.3,32.762)
    set u=CreateUnit(p,'nrat',-7901.2,-5047.5,124.347)
    set u=CreateUnit(p,'nrat',-7871.6,-4887.9,233.719)
    set u=CreateUnit(p,'nrat',-7914.7,-6106.7,137.476)
    set u=CreateUnit(p,'nrat',-8241.6,-6381.5,263.735)
    set u=CreateUnit(p,'nrat',-8020.9,-6666.1,34.949)
    set u=CreateUnit(p,'nrat',-8071.6,-7010.6,236.103)
    set u=CreateUnit(p,'nrat',-7987.7,-7251.1,302.43)
    set u=CreateUnit(p,'nrat',-7832.,-7638.2,205.242)
    set u=CreateUnit(p,'nrat',-7668.7,-7396.7,230.226)
    set u=CreateUnit(p,'nrat',-7966.7,-7162.7,336.192)
    set u=CreateUnit(p,'nrat',-7225.4,-7496.,8.581)
    set u=CreateUnit(p,'nrat',-6862.1,-7496.3,265.394)
    set u=CreateUnit(p,'nrat',-6729.4,-7503.5,276.842)
    set u=CreateUnit(p,'nrat',-6683.3,-7481.9,223.205)
    set u=CreateUnit(p,'nrat',-6243.3,-7550.2,144.859)
    set u=CreateUnit(p,'nrat',-6610.6,-7358.5,67.447)
    set u=CreateUnit(p,'nrat',-6599.8,-7459.7,115.909)
    set u=CreateUnit(p,'nrat',-6449.8,-7502.6,62.459)
    set u=CreateUnit(p,'nrat',-6251.3,-7527.4,262.944)
    set u=CreateUnit(p,'nrat',-5409.3,-7624.8,198.54)
    set u=CreateUnit(p,'nrat',-5470.1,-7614.,259.45)
    set u=CreateUnit(p,'nrat',-5487.6,-7624.,346.585)
    set u=CreateUnit(p,'nrat',-5173.5,-7830.4,323.041)
    set u=CreateUnit(p,'nrat',-3827.9,-7772.4,120.095)
    set u=CreateUnit(p,'nrat',-3956.6,-7811.,333.006)
    set u=CreateUnit(p,'nrat',-4293.8,-7878.8,108.087)
    set u=CreateUnit(p,'nrat',-4556.,-7888.4,277.161)
    set u=CreateUnit(p,'nrat',-4759.1,-7903.6,358.)
    set u=CreateUnit(p,'nrat',-3765.5,-7885.6,189.168)
    set u=CreateUnit(p,'nrat',-3802.1,-7814.5,208.164)
    set u=CreateUnit(p,'nrat',-3861.8,-7820.8,112.009)
    set u=CreateUnit(p,'nrat',-3919.3,-7784.9,275.524)
    set u=CreateUnit(p,'nrat',-3937.1,-7815.5,154.385)
    set u=CreateUnit(p,'nrat',-3833.,-7867.4,152.165)
    set u=CreateUnit(p,'nrat',-3821.5,-7877.9,104.593)
    set u=CreateUnit(p,'nrat',-4425.1,-7746.8,98.32)
    set u=CreateUnit(p,'nrat',-4298.7,-7750.4,182.214)
    set u=CreateUnit(p,'nrat',-4396.3,-8004.7,333.907)
    set u=CreateUnit(p,'nrat',-4323.8,-8015.5,169.964)
    set u=CreateUnit(p,'nrat',-3482.7,-8193.3,203.616)
    set u=CreateUnit(p,'nrat',-3574.5,-8308.2,155.406)
    set u=CreateUnit(p,'nrat',-3582.3,-8354.1,109.032)
    set u=CreateUnit(p,'nrat',-3707.1,-8212.6,313.57)
    set u=CreateUnit(p,'nrat',-5391.5,-8054.5,237.334)
    set u=CreateUnit(p,'nrat',-5941.8,-8072.2,333.951)
    set u=CreateUnit(p,'nrat',-5986.3,-8096.2,283.005)
    set u=CreateUnit(p,'nrat',-6693.4,-7006.6,81.664)
    set u=CreateUnit(p,'nrat',-6792.7,-7032.1,140.673)
    set u=CreateUnit(p,'nrat',-6996.3,-7557.2,334.841)
    set udg_unit14=CreateUnit(p,'n009',-2506.3,-5016.2,107.087)
endfunction

function CreatePlayerUnits2 takes nothing returns nothing
    local player p
    local unit u
    local integer unitID
    local trigger t
    local real life
    set p=Player(0)
    set udg_unit03=CreateUnit(p,'N001',-4737.,524.1,49.517)
    call SetUnitColor(udg_unit03,ConvertPlayerColor(0))
    set p=Player(1)
    set udg_unit04=CreateUnit(p,'N001',-4379.9,1852.1,83.938)
    call SetUnitColor(udg_unit04,ConvertPlayerColor(0))
    set p=Player(2)
    set udg_unit05=CreateUnit(p,'N001',-4625.1,1593.4,295.486)
    call SetUnitColor(udg_unit05,ConvertPlayerColor(0))
    set p=Player(3)
    set udg_unit06=CreateUnit(p,'N001',-4578.9,1966.9,14.755)
    call SetUnitColor(udg_unit06,ConvertPlayerColor(0))
    set p=Player(4)
    set udg_unit07=CreateUnit(p,'N001',-4205.3,1435.8,5.68)
    call SetUnitColor(udg_unit07,ConvertPlayerColor(0))
    set p=Player(5)
    set udg_unit08=CreateUnit(p,'N001',-4779.7,1194.6,256.044)
    call SetUnitColor(udg_unit08,ConvertPlayerColor(0))
    set p=Player(6)
    set udg_unit09=CreateUnit(p,'N000',4044.2,-7732.9,337.137)
    call SetUnitColor(udg_unit09,ConvertPlayerColor(10))
    set p=Player(7)
    set udg_unit10=CreateUnit(p,'N000',3432.2,-7618.3,53.34)
    call SetUnitColor(udg_unit10,ConvertPlayerColor(10))
    set p=Player(8)
    set udg_unit11=CreateUnit(p,'N000',3742.9,-7611.2,253.4)
    call SetUnitColor(udg_unit11,ConvertPlayerColor(10))
    set p=Player(9)
    set udg_unit12=CreateUnit(p,'N000',3471.3,-7957.5,294.89)
    call SetUnitColor(udg_unit12,ConvertPlayerColor(10))
    set p=Player(10)
    set udg_unit01=CreateUnit(p,'N000',4026.,-7984.8,276.23)
    call SetUnitColor(udg_unit01,ConvertPlayerColor(10))
    set p=Player(11)
    set udg_unit02=CreateUnit(p,'N000',3768.6,-8246.1,35.87)
    call SetUnitColor(udg_unit02,ConvertPlayerColor(10))
endfunction

function CreateAllUnits2 takes nothing returns nothing
    call CreateNeutralPassiveBuildings2()
    call CreateNeutralPassive2()
    call CreatePlayerUnits2()
endfunction

function CreateRegions2 takes nothing returns nothing
    local weathereffect we
    set udg_rect02=Rect(1408.,-9760.,5504.,-6912.)
    set we=AddWeatherEffect(udg_rect02,'FDbh')
    call EnableWeatherEffect(we,true)
    set udg_rect03=Rect(928.,2752.,3456.,4768.)
    set we=AddWeatherEffect(udg_rect03,'SNls')
    call EnableWeatherEffect(we,true)
    set udg_rect04=Rect(-3616.,-5152.,-2400.,-800.)
    set we=AddWeatherEffect(udg_rect04,'FDrh')
    call EnableWeatherEffect(we,true)
    set udg_rect05=Rect(-2048.,2656.,32.,4768.)
    set we=AddWeatherEffect(udg_rect05,'FDbh')
    call EnableWeatherEffect(we,true)
    set udg_rect06=Rect(-1376.,4928.,-1024.,5184.)
    set udg_rect07=Rect(-2656.,4768.,-1664.,6272.)
    set udg_rect08=Rect(-1664.,5376.,-512.,6240.)
    set udg_rect09=Rect(5024.,-5792.,6208.,-1792.)
    set we=AddWeatherEffect(udg_rect09,'FDbh')
    call EnableWeatherEffect(we,true)
    set udg_rect10=Rect(6336.,-5952.,8640.,-3904.)
    set we=AddWeatherEffect(udg_rect10,'FDbh')
    call EnableWeatherEffect(we,true)
    set udg_rect11=Rect(6912.,-3168.,8672.,-640.)
    set we=AddWeatherEffect(udg_rect11,'FDrl')
    call EnableWeatherEffect(we,true)
    set udg_rect12=Rect(-1632.,-4768.,928.,-768.)
    set we=AddWeatherEffect(udg_rect12,'LRma')
    call EnableWeatherEffect(we,true)
    set udg_rect13=Rect(-8288.,-7744.,-7616.,-2560.)
    set we=AddWeatherEffect(udg_rect13,'FDgh')
    call EnableWeatherEffect(we,true)
    set udg_rect14=Rect(-7648.,-8512.,-3072.,-7104.)
    set we=AddWeatherEffect(udg_rect14,'FDgh')
    call EnableWeatherEffect(we,true)
    set udg_rect15=Rect(2912.,4704.,3104.,4896.)
    set udg_rect16=Rect(2912.,4576.,3104.,4704.)
    set udg_rect17=Rect(-1888.,-4512.,-1696.,-4320.)
    set udg_rect18=Rect(-1696.,-4480.,-1568.,-4352.)
    set udg_rect19=Rect(-2624.,-1056.,-2464.,-960.)
    set udg_rect20=Rect(-2656.,-1184.,-2528.,-1088.)
    set udg_rect21=Rect(-8160.,-3168.,-7808.,-2976.)
    set udg_rect22=Rect(-8064.,-3296.,-7904.,-3168.)
    set udg_rect23=Rect(-3552.,-8416.,-3424.,-7712.)
    set udg_rect24=Rect(-3680.,-8000.,-3552.,-7872.)
    set udg_rect25=Rect(8320.,-864.,8672.,-704.)
    set udg_rect26=Rect(8320.,-1056.,8448.,-896.)
    set udg_rect27=Rect(2976.,3136.,3072.,3232.)
    set udg_rect28=Rect(-6688.,-6912.,-6400.,-6816.)
endfunction

function Trig_StartteriJaMultiboard_Actions takes nothing returns nothing
    call CreateQuestBJ(0,"TRIGSTR_303","TRIGSTR_304","ReplaceableTextures\\CommandButtons\\BTNAmbush.blp")
    call CreateQuestBJ(2,"Map fixer","I fixed the bugs post-patch to make this lovely map playable again, kiss players! <3 |n -Vortigon","ReplaceableTextures\\CommandButtons\\BTNTimberWolf.blp")
    call DisplayTextToForce(bj_FORCE_PLAYER[0],"TRIGSTR_302")
    call FogMaskEnableOff()
    call SetTimeOfDay(.0)
    call UseTimeOfDayBJ(false)
    call FogMaskEnableOn()
    call CreateMultiboardBJ(4,16,"TRIGSTR_262")
    set udg_multiboard01=bj_lastCreatedMultiboard
    call MultiboardSetItemStyleBJ(udg_multiboard01,1,0,true,false)
    call MultiboardSetItemStyleBJ(udg_multiboard01,2,0,true,false)
    call MultiboardSetItemStyleBJ(udg_multiboard01,3,0,true,false)
    call MultiboardSetItemStyleBJ(udg_multiboard01,4,0,true,false)
    call MultiboardSetItemWidthBJ(udg_multiboard01,1,0,10.5)
    call MultiboardSetItemWidthBJ(udg_multiboard01,2,0,6.)
    call MultiboardSetItemWidthBJ(udg_multiboard01,3,0,4.)
    call MultiboardSetItemWidthBJ(udg_multiboard01,4,0,4.)
    call MultiboardSetItemValueBJ(udg_multiboard01,3,1,"TRIGSTR_263")
    call MultiboardSetItemValueBJ(udg_multiboard01,4,1,"TRIGSTR_264")
    call MultiboardSetItemValueBJ(udg_multiboard01,1,2,"TRIGSTR_265")
    call MultiboardSetItemValueBJ(udg_multiboard01,2,0,"TRIGSTR_266")
    call MultiboardSetItemValueBJ(udg_multiboard01,1,3,GetPlayerName(Player(0)))
    call MultiboardSetItemValueBJ(udg_multiboard01,1,4,GetPlayerName(Player(1)))
    call MultiboardSetItemValueBJ(udg_multiboard01,1,5,GetPlayerName(Player(2)))
    call MultiboardSetItemValueBJ(udg_multiboard01,1,6,GetPlayerName(Player(3)))
    call MultiboardSetItemValueBJ(udg_multiboard01,1,7,GetPlayerName(Player(4)))
    call MultiboardSetItemValueBJ(udg_multiboard01,1,8,GetPlayerName(Player(5)))
    call MultiboardSetItemValueBJ(udg_multiboard01,1,10,"TRIGSTR_267")
    call MultiboardSetItemValueBJ(udg_multiboard01,1,11,GetPlayerName(Player(6)))
    call MultiboardSetItemValueBJ(udg_multiboard01,1,12,GetPlayerName(Player(7)))
    call MultiboardSetItemValueBJ(udg_multiboard01,1,13,GetPlayerName(Player(8)))
    call MultiboardSetItemValueBJ(udg_multiboard01,1,14,GetPlayerName(Player(9)))
    call MultiboardSetItemValueBJ(udg_multiboard01,1,15,GetPlayerName(Player(10)))
    call MultiboardSetItemValueBJ(udg_multiboard01,1,16,GetPlayerName(Player(11)))
    call MultiboardSetItemColorBJ(udg_multiboard01,0,1,'d',80,20,0)
    call MultiboardSetItemColorBJ(udg_multiboard01,0,2,80.,20.,20,0)
    call MultiboardSetItemColorBJ(udg_multiboard01,0,3,80.,20.,20,0)
    call MultiboardSetItemColorBJ(udg_multiboard01,0,4,80.,20.,20,0)
    call MultiboardSetItemColorBJ(udg_multiboard01,0,5,80.,20.,20,0)
    call MultiboardSetItemColorBJ(udg_multiboard01,0,6,80.,20.,20,0)
    call MultiboardSetItemColorBJ(udg_multiboard01,0,7,80.,20.,20,0)
    call MultiboardSetItemColorBJ(udg_multiboard01,0,8,80.,20.,20,0)
    call MultiboardSetItemColorBJ(udg_multiboard01,0,10,20.,80.,20,0)
    call MultiboardSetItemColorBJ(udg_multiboard01,0,11,20.,80.,20,0)
    call MultiboardSetItemColorBJ(udg_multiboard01,0,12,20.,80.,20,0)
    call MultiboardSetItemColorBJ(udg_multiboard01,0,13,20.,80.,20,0)
    call MultiboardSetItemColorBJ(udg_multiboard01,0,14,20.,80.,20,0)
    call MultiboardSetItemColorBJ(udg_multiboard01,0,15,20.,80.,20,0)
    call MultiboardSetItemColorBJ(udg_multiboard01,0,16,20.,80.,20,0)
    call MultiboardSetItemValueBJ(udg_multiboard01,3,3,I2S(udg_integers01[1]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,4,I2S(udg_integers01[2]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,5,I2S(udg_integers01[3]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,6,I2S(udg_integers01[4]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,7,I2S(udg_integers01[5]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,8,I2S(udg_integers01[6]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,11,I2S(udg_integers01[7]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,12,I2S(udg_integers01[8]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,13,I2S(udg_integers01[9]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,14,I2S(udg_integers01[10]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,15,I2S(udg_integers01[11]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,16,I2S(udg_integers01[12]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,3,I2S(udg_integers02[1]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,4,I2S(udg_integers02[2]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,5,I2S(udg_integers02[3]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,6,I2S(udg_integers02[4]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,7,I2S(udg_integers02[5]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,8,I2S(udg_integers02[6]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,11,I2S(udg_integers02[7]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,12,I2S(udg_integers02[8]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,13,I2S(udg_integers02[9]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,14,I2S(udg_integers02[10]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,15,I2S(udg_integers02[11]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,16,I2S(udg_integers02[12]))
    call MultiboardSetItemValueBJ(udg_multiboard01,2,1,"TRIGSTR_268")
    call MultiboardSetItemValueBJ(udg_multiboard01,2,9,"TRIGSTR_269")
    call MultiboardSetItemValueBJ(udg_multiboard01,2,2,I2S(udg_integer02))
    call MultiboardSetItemValueBJ(udg_multiboard01,2,10,I2S(udg_integer01))
    call TriggerSleepAction(.2)
    call ConditionalTriggerExecute(udg_trigger02)
endfunction

function Trig_AlotusMultiSetNRemover_Func001C takes nothing returns boolean
    return(GetPlayerSlotState(Player(0))==PLAYER_SLOT_STATE_EMPTY)
endfunction

function Trig_AlotusMultiSetNRemover_Func002C takes nothing returns boolean
    return(GetPlayerSlotState(Player(1))==PLAYER_SLOT_STATE_EMPTY)
endfunction

function Trig_AlotusMultiSetNRemover_Func003C takes nothing returns boolean
    return(GetPlayerSlotState(Player(2))==PLAYER_SLOT_STATE_EMPTY)
endfunction

function Trig_AlotusMultiSetNRemover_Func004C takes nothing returns boolean
    return(GetPlayerSlotState(Player(3))==PLAYER_SLOT_STATE_EMPTY)
endfunction

function Trig_AlotusMultiSetNRemover_Func005C takes nothing returns boolean
    return(GetPlayerSlotState(Player(4))==PLAYER_SLOT_STATE_EMPTY)
endfunction

function Trig_AlotusMultiSetNRemover_Func006C takes nothing returns boolean
    return(GetPlayerSlotState(Player(5))==PLAYER_SLOT_STATE_EMPTY)
endfunction

function Trig_AlotusMultiSetNRemover_Func007C takes nothing returns boolean
    return(GetPlayerSlotState(Player(6))==PLAYER_SLOT_STATE_EMPTY)
endfunction

function Trig_AlotusMultiSetNRemover_Func008C takes nothing returns boolean
    return(GetPlayerSlotState(Player(7))==PLAYER_SLOT_STATE_EMPTY)
endfunction

function Trig_AlotusMultiSetNRemover_Func009C takes nothing returns boolean
    return(GetPlayerSlotState(Player(8))==PLAYER_SLOT_STATE_EMPTY)
endfunction

function Trig_AlotusMultiSetNRemover_Func010C takes nothing returns boolean
    return(GetPlayerSlotState(Player(9))==PLAYER_SLOT_STATE_EMPTY)
endfunction

function Trig_AlotusMultiSetNRemover_Func011C takes nothing returns boolean
    return(GetPlayerSlotState(Player(10))==PLAYER_SLOT_STATE_EMPTY)
endfunction

function Trig_AlotusMultiSetNRemover_Func012C takes nothing returns boolean
    return(GetPlayerSlotState(Player(11))==PLAYER_SLOT_STATE_EMPTY)
endfunction

function Trig_AlotusMultiSetNRemover_Actions takes nothing returns nothing
    if(Trig_AlotusMultiSetNRemover_Func001C())then
        call RemoveUnit(udg_unit03)
        call MultiboardSetItemValueBJ(udg_multiboard01,0,3,"TRIGSTR_250")
    endif
    if(Trig_AlotusMultiSetNRemover_Func002C())then
        call RemoveUnit(udg_unit04)
        call MultiboardSetItemValueBJ(udg_multiboard01,0,4,"TRIGSTR_251")
    endif
    if(Trig_AlotusMultiSetNRemover_Func003C())then
        call RemoveUnit(udg_unit05)
        call MultiboardSetItemValueBJ(udg_multiboard01,0,5,"TRIGSTR_252")
    endif
    if(Trig_AlotusMultiSetNRemover_Func004C())then
        call RemoveUnit(udg_unit06)
        call MultiboardSetItemValueBJ(udg_multiboard01,0,6,"TRIGSTR_253")
    endif
    if(Trig_AlotusMultiSetNRemover_Func005C())then
        call RemoveUnit(udg_unit07)
        call MultiboardSetItemValueBJ(udg_multiboard01,0,7,"TRIGSTR_254")
    endif
    if(Trig_AlotusMultiSetNRemover_Func006C())then
        call RemoveUnit(udg_unit08)
        call MultiboardSetItemValueBJ(udg_multiboard01,0,8,"TRIGSTR_255")
    endif
    if(Trig_AlotusMultiSetNRemover_Func007C())then
        call RemoveUnit(udg_unit09)
        call MultiboardSetItemValueBJ(udg_multiboard01,0,11,"TRIGSTR_256")
    endif
    if(Trig_AlotusMultiSetNRemover_Func008C())then
        call RemoveUnit(udg_unit10)
        call MultiboardSetItemValueBJ(udg_multiboard01,0,12,"TRIGSTR_257")
    endif
    if(Trig_AlotusMultiSetNRemover_Func009C())then
        call RemoveUnit(udg_unit11)
        call MultiboardSetItemValueBJ(udg_multiboard01,0,13,"TRIGSTR_258")
    endif
    if(Trig_AlotusMultiSetNRemover_Func010C())then
        call RemoveUnit(udg_unit12)
        call MultiboardSetItemValueBJ(udg_multiboard01,0,14,"TRIGSTR_259")
    endif
    if(Trig_AlotusMultiSetNRemover_Func011C())then
        call RemoveUnit(udg_unit01)
        call MultiboardSetItemValueBJ(udg_multiboard01,0,15,"TRIGSTR_260")
    endif
    if(Trig_AlotusMultiSetNRemover_Func012C())then
        call RemoveUnit(udg_unit02)
        call MultiboardSetItemValueBJ(udg_multiboard01,0,16,"TRIGSTR_261")
    endif
endfunction

function GameLenghtSet takes nothing returns nothing
    local string s=GetEventPlayerChatString()
    local integer i=S2I(s)
    if i>0 then
        set udg_integer03=i
        call DestroyTrigger(udg_trigger49)
        call Msg2All("Number of Rounds needed for victory is now "+I2S(i),15)
        set udg_item01=CreateItem('ciri',0,0)
        call SetItemVisible(udg_item01,false)
        set udg_integers17[1]='h006'
        set udg_integers17[2]='h002'
        set udg_integers17[3]='h001'
        set udg_integers17[4]='h004'
        set udg_integers17[5]='h005'
        set udg_integers17[6]='h000'
        set udg_integers17[7]='h003'
        call InitMap()
        call InitCasters()
        call TimerStart(udg_timer04,.035,true,function OnMoveSet)
        call InitHeroDeath()
        call TriggerSleepAction(.1)
        call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\UCancelDeath\\UCancelDeath.mdl",STORAGE_AREA_X,STORAGE_AREA_Y))
        call DestroyEffect(AddSpecialEffect("\\NetherInferno.mdl",STORAGE_AREA_X,STORAGE_AREA_Y))
        call TriggerSleepAction(.1)
        call WandPick__WandPickInit()
        call WandPick__WandDropInit()
        call InitAntiStupefy()
        call InitAntiHaava()
        call TriggerSleepAction(.1)
        call InitAvadaKedavra()
        call InitStupefy()
        call InitSektumsempra()
        call InitImpedimenta()
        call InitExpelliarmus()
        call InitImperio()
        call InitCrucio()
        call TriggerSleepAction(.1)
        call TimerStart(udg_timer05,1.,true,function ShowSet)
        set udg_trigger46=CreateTrigger()
        call TriggerRegisterTimerEvent(udg_trigger46,3.,true)
        call TriggerAddAction(udg_trigger46,function CheckSituation)
        set udg_integer18=1
        call Msg2All("Round "+I2S(udg_integer18),15.)
        call PauseAllHeroes(false)
        call Msg2All("Let The Game Begin ! ",30)
    endif
endfunction

function Trig_Init_Actions takes nothing returns nothing
    call CinematicFadeBJ(1,.0,"ReplaceableTextures\\CameraMasks\\Black_mask.blp",100.,100.,100.,.0)
    call CinematicModeBJ(true,bj_FORCE_ALL_PLAYERS)
    call SetHeroReady(udg_unit03)
    call SetHeroReady(udg_unit04)
    call SetHeroReady(udg_unit05)
    call SetHeroReady(udg_unit06)
    call SetHeroReady(udg_unit07)
    call SetHeroReady(udg_unit08)
    call SetHeroReady(udg_unit09)
    call SetHeroReady(udg_unit10)
    call SetHeroReady(udg_unit11)
    call SetHeroReady(udg_unit12)
    call SetHeroReady(udg_unit01)
    call SetHeroReady(udg_unit02)
    call PauseAllHeroes(true)
    call TriggerSleepAction(.1)
    call ConditionalTriggerExecute(udg_trigger01)
    call SetUnitTimeScale(udg_unit13,-1.9)
    call SetUnitTimeScale(udg_unit14,3.)
    set udg_trigger49=CreateTrigger()
    call TriggerRegisterPlayerChatEvent(udg_trigger49,Player(0),"",false)
    call TriggerAddAction(udg_trigger49,function GameLenghtSet)
    call CinematicFadeBJ(0,5.,"ReplaceableTextures\\CameraMasks\\Black_mask.blp",100.,100.,100.,.0)
    call TriggerSleepAction(5.)
    call InitCrystalBall()
    call CinematicModeBJ(false,bj_FORCE_ALL_PLAYERS)
endfunction

function Trig_LeaveriILMOSTUS_Actions takes nothing returns nothing
    call DisplayTextToForce(bj_FORCE_ALL_PLAYERS,(GetPlayerName(GetTriggerPlayer())+" has left the game."))
endfunction

function Trig_RoundiMultiBoardPaivitys_Actions takes nothing returns nothing
    call MultiboardSetItemValueBJ(udg_multiboard01,2,0,"TRIGSTR_279")
    call MultiboardSetItemValueBJ(udg_multiboard01,2,1,"TRIGSTR_282")
    call MultiboardSetItemValueBJ(udg_multiboard01,2,9,"TRIGSTR_283")
    call MultiboardSetItemValueBJ(udg_multiboard01,2,2,I2S(udg_integer02))
    call MultiboardSetItemValueBJ(udg_multiboard01,2,10,I2S(udg_integer01))
endfunction

function Trig_MultiBoardPisteLaittaja_Conditions takes nothing returns boolean
    return(IsUnitType(GetDyingUnit(),UNIT_TYPE_HERO)!=null)
endfunction

function Trig_MultiBoardPisteLaittaja_Func001Func001Func001Func001C takes nothing returns boolean
    return((1+GetPlayerId(GetOwningPlayer(GetKillingUnit())))>=7)and((1+GetPlayerId(GetOwningPlayer(GetDyingUnit())))>=7)and(GetUnitTypeId(GetDyingUnit())!='N001')
endfunction

function Trig_MultiBoardPisteLaittaja_Func001Func001Func001C takes nothing returns boolean
    return((1+GetPlayerId(GetOwningPlayer(GetKillingUnit())))<=6)and((1+GetPlayerId(GetOwningPlayer(GetDyingUnit())))<=6)and(GetUnitTypeId(GetDyingUnit())!='N000')
endfunction

function Trig_MultiBoardPisteLaittaja_Func001Func001C takes nothing returns boolean
    return((1+GetPlayerId(GetOwningPlayer(GetKillingUnit())))>=7)and((1+GetPlayerId(GetOwningPlayer(GetDyingUnit())))<=6)
endfunction

function Trig_MultiBoardPisteLaittaja_Func001C takes nothing returns boolean
    return((1+GetPlayerId(GetOwningPlayer(GetKillingUnit())))<=6)and((1+GetPlayerId(GetOwningPlayer(GetDyingUnit())))>=7)
endfunction

function Trig_MultiBoardPisteLaittaja_Func026Func001Func001Func001Func001Func001Func001Func001Func001Func001Func001Func001C takes nothing returns boolean
    return(GetDyingUnit()==udg_unit02)
endfunction

function Trig_MultiBoardPisteLaittaja_Func026Func001Func001Func001Func001Func001Func001Func001Func001Func001Func001C takes nothing returns boolean
    return(GetDyingUnit()==udg_unit01)
endfunction

function Trig_MultiBoardPisteLaittaja_Func026Func001Func001Func001Func001Func001Func001Func001Func001Func001C takes nothing returns boolean
    return(GetDyingUnit()==udg_unit12)
endfunction

function Trig_MultiBoardPisteLaittaja_Func026Func001Func001Func001Func001Func001Func001Func001Func001C takes nothing returns boolean
    return(GetDyingUnit()==udg_unit11)
endfunction

function Trig_MultiBoardPisteLaittaja_Func026Func001Func001Func001Func001Func001Func001Func001C takes nothing returns boolean
    return(GetDyingUnit()==udg_unit10)
endfunction

function Trig_MultiBoardPisteLaittaja_Func026Func001Func001Func001Func001Func001Func001C takes nothing returns boolean
    return(GetDyingUnit()==udg_unit09)
endfunction

function Trig_MultiBoardPisteLaittaja_Func026Func001Func001Func001Func001Func001C takes nothing returns boolean
    return(GetDyingUnit()==udg_unit08)
endfunction

function Trig_MultiBoardPisteLaittaja_Func026Func001Func001Func001Func001C takes nothing returns boolean
    return(GetDyingUnit()==udg_unit07)
endfunction

function Trig_MultiBoardPisteLaittaja_Func026Func001Func001Func001C takes nothing returns boolean
    return(GetDyingUnit()==udg_unit06)
endfunction

function Trig_MultiBoardPisteLaittaja_Func026Func001Func001C takes nothing returns boolean
    return(GetDyingUnit()==udg_unit05)
endfunction

function Trig_MultiBoardPisteLaittaja_Func026Func001C takes nothing returns boolean
    return(GetDyingUnit()==udg_unit04)
endfunction

function Trig_MultiBoardPisteLaittaja_Func026C takes nothing returns boolean
    return(GetDyingUnit()==udg_unit03)
endfunction

function Trig_MultiBoardPisteLaittaja_Actions takes nothing returns nothing
    if(Trig_MultiBoardPisteLaittaja_Func001C())then
        set udg_integers01[(1+GetPlayerId(GetOwningPlayer(GetKillingUnit())))]=(udg_integers01[(1+GetPlayerId(GetOwningPlayer(GetKillingUnit())))]+1)
        set udg_integers02[(1+GetPlayerId(GetOwningPlayer(GetDyingUnit())))]=(udg_integers02[(1+GetPlayerId(GetOwningPlayer(GetDyingUnit())))]+1)
        call DisplayTimedTextToForce(bj_FORCE_ALL_PLAYERS,4.5,(("|c00FF0000"+GetPlayerName(GetOwningPlayer(GetKillingUnit())))+((" has killed "+GetPlayerName(GetOwningPlayer(GetDyingUnit())))+"|r")))
    else
        if(Trig_MultiBoardPisteLaittaja_Func001Func001C())then
            set udg_integers01[(1+GetPlayerId(GetOwningPlayer(GetKillingUnit())))]=(udg_integers01[(1+GetPlayerId(GetOwningPlayer(GetKillingUnit())))]+1)
            set udg_integers02[(1+GetPlayerId(GetOwningPlayer(GetDyingUnit())))]=(udg_integers02[(1+GetPlayerId(GetOwningPlayer(GetDyingUnit())))]+1)
            call DisplayTimedTextToForce(bj_FORCE_ALL_PLAYERS,4.5,(("|c0000FF00"+GetPlayerName(GetOwningPlayer(GetKillingUnit())))+((" has killed "+GetPlayerName(GetOwningPlayer(GetDyingUnit())))+"|r")))
        else
            if(Trig_MultiBoardPisteLaittaja_Func001Func001Func001C())then
                set udg_integers01[(1+GetPlayerId(GetOwningPlayer(GetKillingUnit())))]=(udg_integers01[(1+GetPlayerId(GetOwningPlayer(GetKillingUnit())))]-1)
                set udg_integers02[(1+GetPlayerId(GetOwningPlayer(GetDyingUnit())))]=(udg_integers02[(1+GetPlayerId(GetOwningPlayer(GetDyingUnit())))]+1)
                call DisplayTimedTextToForce(bj_FORCE_ALL_PLAYERS,5.5,(("|c00FF0000"+GetPlayerName(GetOwningPlayer(GetKillingUnit())))+((" has TEAMKILLED "+GetPlayerName(GetOwningPlayer(GetDyingUnit())))+"|r")))
            else
                if(Trig_MultiBoardPisteLaittaja_Func001Func001Func001Func001C())then
                    set udg_integers01[(1+GetPlayerId(GetOwningPlayer(GetKillingUnit())))]=(udg_integers01[(1+GetPlayerId(GetOwningPlayer(GetKillingUnit())))]-1)
                    set udg_integers02[(1+GetPlayerId(GetOwningPlayer(GetDyingUnit())))]=(udg_integers02[(1+GetPlayerId(GetOwningPlayer(GetDyingUnit())))]+1)
                    call DisplayTimedTextToForce(bj_FORCE_ALL_PLAYERS,5.5,(("|c0000FF00"+GetPlayerName(GetOwningPlayer(GetKillingUnit())))+((" has TEAMKILLED "+GetPlayerName(GetOwningPlayer(GetDyingUnit())))+"|r")))
                endif
            endif
        endif
    endif
    call MultiboardSetItemValueBJ(udg_multiboard01,3,3,I2S(udg_integers01[1]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,4,I2S(udg_integers01[2]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,5,I2S(udg_integers01[3]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,6,I2S(udg_integers01[4]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,7,I2S(udg_integers01[5]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,8,I2S(udg_integers01[6]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,11,I2S(udg_integers01[7]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,12,I2S(udg_integers01[8]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,13,I2S(udg_integers01[9]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,14,I2S(udg_integers01[10]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,15,I2S(udg_integers01[11]))
    call MultiboardSetItemValueBJ(udg_multiboard01,3,16,I2S(udg_integers01[12]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,3,I2S(udg_integers02[1]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,4,I2S(udg_integers02[2]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,5,I2S(udg_integers02[3]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,6,I2S(udg_integers02[4]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,7,I2S(udg_integers02[5]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,8,I2S(udg_integers02[6]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,11,I2S(udg_integers02[7]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,12,I2S(udg_integers02[8]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,13,I2S(udg_integers02[9]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,14,I2S(udg_integers02[10]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,15,I2S(udg_integers02[11]))
    call MultiboardSetItemValueBJ(udg_multiboard01,4,16,I2S(udg_integers02[12]))
    if(Trig_MultiBoardPisteLaittaja_Func026C())then
        call MultiboardSetItemValueBJ(udg_multiboard01,2,3,"TRIGSTR_071")
    else
        if(Trig_MultiBoardPisteLaittaja_Func026Func001C())then
            call MultiboardSetItemValueBJ(udg_multiboard01,2,4,"TRIGSTR_072")
        else
            if(Trig_MultiBoardPisteLaittaja_Func026Func001Func001C())then
                call MultiboardSetItemValueBJ(udg_multiboard01,2,5,"TRIGSTR_073")
            else
                if(Trig_MultiBoardPisteLaittaja_Func026Func001Func001Func001C())then
                    call MultiboardSetItemValueBJ(udg_multiboard01,2,6,"TRIGSTR_074")
                else
                    if(Trig_MultiBoardPisteLaittaja_Func026Func001Func001Func001Func001C())then
                        call MultiboardSetItemValueBJ(udg_multiboard01,2,7,"TRIGSTR_075")
                    else
                        if(Trig_MultiBoardPisteLaittaja_Func026Func001Func001Func001Func001Func001C())then
                            call MultiboardSetItemValueBJ(udg_multiboard01,2,8,"TRIGSTR_076")
                        else
                            if(Trig_MultiBoardPisteLaittaja_Func026Func001Func001Func001Func001Func001Func001C())then
                                call MultiboardSetItemValueBJ(udg_multiboard01,2,11,"TRIGSTR_082")
                            else
                                if(Trig_MultiBoardPisteLaittaja_Func026Func001Func001Func001Func001Func001Func001Func001C())then
                                    call MultiboardSetItemValueBJ(udg_multiboard01,2,12,"TRIGSTR_081")
                                else
                                    if(Trig_MultiBoardPisteLaittaja_Func026Func001Func001Func001Func001Func001Func001Func001Func001C())then
                                        call MultiboardSetItemValueBJ(udg_multiboard01,2,13,"TRIGSTR_080")
                                    else
                                        if(Trig_MultiBoardPisteLaittaja_Func026Func001Func001Func001Func001Func001Func001Func001Func001Func001C())then
                                            call MultiboardSetItemValueBJ(udg_multiboard01,2,14,"TRIGSTR_079")
                                        else
                                            if(Trig_MultiBoardPisteLaittaja_Func026Func001Func001Func001Func001Func001Func001Func001Func001Func001Func001C())then
                                                call MultiboardSetItemValueBJ(udg_multiboard01,2,15,"TRIGSTR_078")
                                            else
                                                if(Trig_MultiBoardPisteLaittaja_Func026Func001Func001Func001Func001Func001Func001Func001Func001Func001Func001Func001C())then
                                                    call MultiboardSetItemValueBJ(bj_lastCreatedMultiboard,2,16,"TRIGSTR_077")
                                                endif
                                            endif
                                        endif
                                    endif
                                endif
                            endif
                        endif
                    endif
                endif
            endif
        endif
    endif
endfunction

function Trig_Huudot_Conditions takes nothing returns boolean
    return(IsUnitType(GetSpellAbilityUnit(),UNIT_TYPE_HERO)!=null)
endfunction

function Trig_Huudot_Func001Func001Func001Func001Func001Func001Func002C takes nothing returns boolean
    return(GetSpellAbilityId()=='A009')
endfunction

function Trig_Huudot_Func001Func001Func001Func001Func001Func001C takes nothing returns boolean
    return(GetSpellAbilityId()=='A001')
endfunction

function Trig_Huudot_Func001Func001Func001Func001Func001C takes nothing returns boolean
    return(GetSpellAbilityId()=='A004')
endfunction

function Trig_Huudot_Func001Func001Func001Func001C takes nothing returns boolean
    return(GetSpellAbilityId()=='A00A')
endfunction

function Trig_Huudot_Func001Func001Func001C takes nothing returns boolean
    return(GetSpellAbilityId()=='A005')
endfunction

function Trig_Huudot_Func001Func001C takes nothing returns boolean
    return(GetSpellAbilityId()=='A008')
endfunction

function Trig_Huudot_Func001C takes nothing returns boolean
    return(GetSpellAbilityId()=='A000')
endfunction

function Trig_Huudot_Actions takes nothing returns nothing
    if(Trig_Huudot_Func001C())then
        call CreateTextTagUnitBJ("TRIGSTR_135",GetSpellAbilityUnit(),0,9.,30.,75.,20.,20.)
        set udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))]=bj_lastCreatedTextTag
        call SetTextTagPermanentBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],false)
        call SetTextTagFadepointBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],.8)
        call SetTextTagLifespanBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],1.2)
        call PolledWait(.85)
        call SetTextTagPosUnitBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],GetSpellAbilityUnit(),10.)
        call PolledWait(.3)
        call DestroyTextTag(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))])
    else
        if(Trig_Huudot_Func001Func001C())then
            call CreateTextTagUnitBJ("TRIGSTR_136",GetSpellAbilityUnit(),0,9.,90.,20.,20.,20.)
            set udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))]=bj_lastCreatedTextTag
            call SetTextTagPermanentBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],false)
            call SetTextTagFadepointBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],.8)
            call SetTextTagLifespanBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],1.2)
            call PolledWait(.85)
            call SetTextTagPosUnitBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],GetSpellAbilityUnit(),10.)
            call PolledWait(.3)
            call DestroyTextTag(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))])
        else
            if(Trig_Huudot_Func001Func001Func001C())then
                call CreateTextTagUnitBJ("TRIGSTR_137",GetSpellAbilityUnit(),0,9.,36.,36.,65.,20.)
                set udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))]=bj_lastCreatedTextTag
                call SetTextTagPermanentBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],false)
                call SetTextTagFadepointBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],.8)
                call SetTextTagLifespanBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],1.2)
                call PolledWait(.85)
                call SetTextTagPosUnitBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],GetSpellAbilityUnit(),10.)
                call PolledWait(.3)
                call DestroyTextTag(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))])
            else
                if(Trig_Huudot_Func001Func001Func001Func001C())then
                    call CreateTextTagUnitBJ("TRIGSTR_138",GetSpellAbilityUnit(),0,9.,100.,100.,100.,20.)
                    set udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))]=bj_lastCreatedTextTag
                    call SetTextTagPermanentBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],false)
                    call SetTextTagFadepointBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],.8)
                    call SetTextTagLifespanBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],1.2)
                    call PolledWait(.85)
                    call SetTextTagPosUnitBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],GetSpellAbilityUnit(),10.)
                    call PolledWait(.3)
                    call DestroyTextTag(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))])
                else
                    if(Trig_Huudot_Func001Func001Func001Func001Func001C())then
                        call CreateTextTagUnitBJ("TRIGSTR_139",GetSpellAbilityUnit(),0,9.,65.,20.,70.,20.)
                        set udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))]=bj_lastCreatedTextTag
                        call SetTextTagPermanentBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],false)
                        call SetTextTagFadepointBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],.8)
                        call SetTextTagLifespanBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],1.2)
                        call PolledWait(.85)
                        call SetTextTagPosUnitBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],GetSpellAbilityUnit(),10.)
                        call PolledWait(.3)
                        call DestroyTextTag(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))])
                    else
                        if(Trig_Huudot_Func001Func001Func001Func001Func001Func001C())then
                            call CreateTextTagUnitBJ("TRIGSTR_140",GetSpellAbilityUnit(),0,9.,80.,30.,30.,20.)
                            set udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))]=bj_lastCreatedTextTag
                            call SetTextTagPermanentBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],false)
                            call SetTextTagFadepointBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],.8)
                            call SetTextTagLifespanBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],1.2)
                            call PolledWait(.85)
                            call SetTextTagPosUnitBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],GetSpellAbilityUnit(),10.)
                            call PolledWait(.3)
                            call DestroyTextTag(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))])
                        else
                            if(Trig_Huudot_Func001Func001Func001Func001Func001Func001Func002C())then
                                call CreateTextTagUnitBJ("TRIGSTR_278",GetSpellAbilityUnit(),0,9.,63.,45.,25.,20.)
                                set udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))]=bj_lastCreatedTextTag
                                call SetTextTagPermanentBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],false)
                                call SetTextTagFadepointBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],.8)
                                call SetTextTagLifespanBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],1.2)
                                call PolledWait(.85)
                                call SetTextTagPosUnitBJ(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))],GetSpellAbilityUnit(),10.)
                                call PolledWait(.3)
                                call DestroyTextTag(udg_texttags01[((1+GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit())))+StringLength(GetObjectName(GetSpellAbilityId())))])
                            endif
                        endif
                    endif
                endif
            endif
        endif
    endif
endfunction

function Trig_Keeper_Func001Func001Func001Func001C takes nothing returns boolean
    return(GetRandomInt(0,1)==0)
endfunction

function Trig_Keeper_Func001Func001Func001C takes nothing returns boolean
    return(GetRandomInt(0,2)==0)
endfunction

function Trig_Keeper_Func001Func001Func002C takes nothing returns boolean
    return(GetUnitTypeId(GetLeavingUnit())=='ndwm')
endfunction

function Trig_Keeper_Func001Func001C takes nothing returns boolean
    return(GetUnitTypeId(GetLeavingUnit())=='nrat')
endfunction

function Trig_Keeper_Func001C takes nothing returns boolean
    return(GetUnitTypeId(GetLeavingUnit())=='n002')
endfunction

function Trig_Keeper_Actions takes nothing returns nothing
    if(Trig_Keeper_Func001C())then
        call SetUnitPositionLoc(GetLeavingUnit(),GetRandomLocInRect(udg_rect12))
    else
        if(Trig_Keeper_Func001Func001C())then
            if(Trig_Keeper_Func001Func001Func001C())then
                call SetUnitPositionLoc(GetLeavingUnit(),GetRandomLocInRect(udg_rect14))
            else
                if(Trig_Keeper_Func001Func001Func001Func001C())then
                    call SetUnitPositionLoc(GetLeavingUnit(),GetRandomLocInRect(udg_rect04))
                else
                    call SetUnitPositionLoc(GetLeavingUnit(),GetRandomLocInRect(udg_rect13))
                endif
            endif
        else
            if(Trig_Keeper_Func001Func001Func002C())then
                call SetUnitPositionLoc(GetLeavingUnit(),GetRandomLocInRect(udg_rect11))
            endif
        endif
    endif
endfunction

function Trig_Sight_Conditions takes nothing returns boolean
    return(IsUnitType(GetTriggerUnit(),UNIT_TYPE_HERO)!=null)
endfunction

function Trig_Sight_Actions takes nothing returns nothing
    local player p=GetOwningPlayer(GetTriggerUnit())
    local integer i=GetPlayerId(p)
    call KillUnit(udg_units01[i])
    set udg_units01[i]=CreateUnit(p,'n005',-2610.6,6624.3,0)
    set p=null
endfunction

function Trig_UnSight_Conditions takes nothing returns boolean
    return(IsUnitType(GetTriggerUnit(),UNIT_TYPE_HERO)!=null)
endfunction

function Trig_UnSight_Actions takes nothing returns nothing
    local player p=GetOwningPlayer(GetTriggerUnit())
    local integer i=GetPlayerId(p)
    call KillUnit(udg_units01[i])
    set p=null
endfunction

function Trig_TakkaLibaToSnow_Conditions takes nothing returns boolean
    return(IsUnitType(GetEnteringUnit(),UNIT_TYPE_HERO)!=null)
endfunction

function Trig_TakkaLibaToSnow_Actions takes nothing returns nothing
    call SetUnitFacingTimed(GetEnteringUnit(),180.,0)
    call PauseUnit(GetEnteringUnit(),true)
    call PolledWait(1.2)
    call AddSpecialEffectTargetUnitBJ("origin",GetEnteringUnit(),"Abilities\\Spells\\Undead\\AnimateDead\\AnimateDeadTarget.mdl")
    call DestroyEffect(bj_lastCreatedEffect)
    call PolledWait(.5)
    call SetUnitPositionLoc(GetEnteringUnit(),GetRectCenter(udg_rect16))
    call PanCameraToTimedLocForPlayer(GetOwningPlayer(GetEnteringUnit()),GetUnitLoc(GetEnteringUnit()),0)
    call SetUnitFacingTimed(GetEnteringUnit(),270.,0)
    call PauseUnit(GetEnteringUnit(),false)
endfunction

function Trig_Back1_Conditions takes nothing returns boolean
    return(IsUnitType(GetEnteringUnit(),UNIT_TYPE_HERO)!=null)
endfunction

function Trig_Back1_Actions takes nothing returns nothing
    call SetUnitPositionLoc(GetEnteringUnit(),GetRectCenter(udg_rect06))
endfunction

function Trig_Back2_Conditions takes nothing returns boolean
    return(IsUnitType(GetEnteringUnit(),UNIT_TYPE_HERO)!=null)
endfunction

function Trig_Back2_Actions takes nothing returns nothing
    call SetUnitPositionLoc(GetEnteringUnit(),GetRectCenter(udg_rect06))
endfunction

function Trig_PutkestaSnowman_Conditions takes nothing returns boolean
    return(IsUnitType(GetEnteringUnit(),UNIT_TYPE_HERO)!=null)
endfunction

function Trig_PutkestaSnowman_Actions takes nothing returns nothing
    call SetUnitFacingTimed(GetEnteringUnit(),180.,0)
    call PauseUnit(GetEnteringUnit(),true)
    call PolledWait(1.2)
    call SetUnitPositionLoc(GetEnteringUnit(),GetRectCenter(udg_rect27))
    call PanCameraToTimedLocForPlayer(GetOwningPlayer(GetEnteringUnit()),GetUnitLoc(GetEnteringUnit()),0)
    call AddSpecialEffectTargetUnitBJ("origin",GetEnteringUnit(),"Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl")
    call DestroyEffect(bj_lastCreatedEffect)
    call PauseUnit(GetEnteringUnit(),false)
endfunction

function Trig_TakkaSnowToLiba_Conditions takes nothing returns boolean
    return(IsUnitType(GetEnteringUnit(),UNIT_TYPE_HERO)!=null)
endfunction

function Trig_TakkaSnowToLiba_Actions takes nothing returns nothing
    call SetUnitFacingTimed(GetEnteringUnit(),180.,0)
    call PauseUnit(GetEnteringUnit(),true)
    call PolledWait(1.2)
    call AddSpecialEffectTargetUnitBJ("origin",GetEnteringUnit(),"Abilities\\Spells\\Undead\\AnimateDead\\AnimateDeadTarget.mdl")
    call DestroyEffect(bj_lastCreatedEffect)
    call PolledWait(.5)
    call SetUnitPositionLoc(GetEnteringUnit(),GetRectCenter(udg_rect18))
    call PanCameraToTimedLocForPlayer(GetOwningPlayer(GetEnteringUnit()),GetUnitLoc(GetEnteringUnit()),0)
    call SetUnitFacingTimed(GetEnteringUnit(),270.,0)
    call PauseUnit(GetEnteringUnit(),false)
endfunction

function Trig_ShitPipeInKasvi_Conditions takes nothing returns boolean
    return(IsUnitType(GetEnteringUnit(),UNIT_TYPE_HERO)!=null)
endfunction

function Trig_ShitPipeInKasvi_Actions takes nothing returns nothing
    call SetUnitFacingTimed(GetEnteringUnit(),180.,0)
    call PauseUnit(GetEnteringUnit(),true)
    call PolledWait(1.2)
    call SetUnitPositionLoc(GetEnteringUnit(),GetRectCenter(udg_rect24))
    call PanCameraToTimedLocForPlayer(GetOwningPlayer(GetEnteringUnit()),GetUnitLoc(GetEnteringUnit()),0)
    call PauseUnit(GetEnteringUnit(),false)
endfunction

function Trig_ShitPipeInDungeon_Conditions takes nothing returns boolean
    return(IsUnitType(GetEnteringUnit(),UNIT_TYPE_HERO)!=null)
endfunction

function Trig_ShitPipeInDungeon_Actions takes nothing returns nothing
    call SetUnitFacingTimed(GetEnteringUnit(),180.,0)
    call PauseUnit(GetEnteringUnit(),true)
    call PolledWait(1.2)
    call SetUnitPositionLoc(GetEnteringUnit(),GetRectCenter(udg_rect22))
    call PanCameraToTimedLocForPlayer(GetOwningPlayer(GetEnteringUnit()),GetUnitLoc(GetEnteringUnit()),0)
    call PauseUnit(GetEnteringUnit(),false)
endfunction

function Trig_ShitPipeOutKasvi_Conditions takes nothing returns boolean
    return(IsUnitType(GetEnteringUnit(),UNIT_TYPE_HERO)!=null)
endfunction

function Trig_ShitPipeOutKasvi_Actions takes nothing returns nothing
    call SetUnitFacingTimed(GetEnteringUnit(),180.,0)
    call PauseUnit(GetEnteringUnit(),true)
    call PolledWait(1.2)
    call SetUnitPositionLoc(GetEnteringUnit(),GetRectCenter(udg_rect26))
    call PanCameraToTimedLocForPlayer(GetOwningPlayer(GetEnteringUnit()),GetUnitLoc(GetEnteringUnit()),0)
    call PauseUnit(GetEnteringUnit(),false)
endfunction

function Trig_ShitPipeOutDungeon_Conditions takes nothing returns boolean
    return(IsUnitType(GetEnteringUnit(),UNIT_TYPE_HERO)!=null)
endfunction

function Trig_ShitPipeOutDungeon_Actions takes nothing returns nothing
    call SetUnitFacingTimed(GetEnteringUnit(),180.,0)
    call PauseUnit(GetEnteringUnit(),true)
    call PolledWait(1.2)
    call SetUnitPositionLoc(GetEnteringUnit(),GetRectCenter(udg_rect20))
    call PanCameraToTimedLocForPlayer(GetOwningPlayer(GetEnteringUnit()),GetUnitLoc(GetEnteringUnit()),0)
    call PauseUnit(GetEnteringUnit(),false)
endfunction

function s__Kananmuna__Data_onDestroy takes integer this returns nothing
    local integer H=GetUnitUserData(udg_units32[this])
    set udg_integers25[H]=255
    call UnitResetColor(udg_units32[this])
    call UnitRemoveAbility(udg_units32[this],Kananmuna__BUFF_ID)
endfunction

function s__Kananmuna__Data_destroy takes integer this returns nothing
    if this==null then
        return
    elseif(udg_integers49[this]!=-1)then
        return
    endif
    call s__Kananmuna__Data_onDestroy(this)
    set udg_integers49[this]=udg_integer57
    set udg_integer57=this
endfunction

function Kananmuna__Conditioni takes nothing returns boolean
    return GetSpellAbilityId()==Kananmuna__SPELL_ID and GetUnitAbilityLevel(GetTriggerUnit(),Kananmuna__BUFF_ID)<=0
endfunction

function Kananmuna__FadeIn takes nothing returns boolean
    local integer D=TT_GetData()
    local integer H=GetUnitUserData(udg_units32[D])
    set udg_integers50[D]=udg_integers50[D]+1
    set udg_integers25[H]=udg_integers50[D]
    call UnitResetColor(udg_units32[D])
    if udg_integers50[D]==255 or IsUnitAlive(udg_units32[D])==false then
        call s__Kananmuna__Data_destroy(D)
        return true
    endif
    return false
endfunction

function Kananmuna__endSpell takes nothing returns boolean
    local integer D=ABCT_GetData()
    set udg_integers52[D]=udg_integers52[D]+1
    if IsUnitAlive(udg_units32[D])==false then
        call s__Kananmuna__Data_destroy(D)
        return true
    endif
    if udg_integers52[D]>5 then
        call TT_Start(function Kananmuna__FadeIn,D)
        return true
    endif
    return false
endfunction

function Kananmuna__FadeOut takes nothing returns boolean
    local integer D=TT_GetData()
    local integer H=GetUnitUserData(udg_units32[D])
    set udg_integers50[D]=udg_integers50[D]-1
    set udg_integers25[H]=udg_integers50[D]
    call UnitResetColor(udg_units32[D])
    if IsUnitAlive(udg_units32[D])==false then
        call s__Kananmuna__Data_destroy(D)
        return true
    endif
    if udg_integers50[D]==0 then
        call UnitResetColor(udg_units32[D])
        set udg_booleans19[D]=true
        call ABCT_Start(function Kananmuna__endSpell,D,2.)
        return true
    endif
    return false
endfunction

function Kananmuna__Actioni takes nothing returns nothing
    local unit u=GetSpellTargetUnit()
    local integer D=s__Kananmuna__Data__allocate()
    local player p=GetOwningPlayer(u)
    local unit c=UseCaster()
    local real x=GetUnitX(u)
    local real y=GetUnitY(u)
    call SetUnitX(c,x)
    call SetUnitY(c,y)
    call IssueTargetOrderById(c,852066,u)
    call StopUsingCaster(c)
    set udg_units32[D]=u
    set udg_integers51[D]=GetPlayerId(p)
    set udg_integers52[D]=0
    set udg_integers50[D]=255
    call TT_Start(function Kananmuna__FadeOut,D)
    set p=null
endfunction

function Kananmuna__Init takes nothing returns nothing
    local integer i=0
    set udg_trigger59=CreateTrigger()
    loop
        exitwhen i>11
        call TriggerRegisterPlayerUnitEvent(udg_trigger59,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,Filter(function True))
        set i=i+1
    endloop
    call TriggerAddCondition(udg_trigger59,Condition(function Kananmuna__Conditioni))
    call TriggerAddAction(udg_trigger59,function Kananmuna__Actioni)
endfunction

function Peruan__Conditioni takes nothing returns boolean
    return GetSpellAbilityId()==Peruan_ABILITY_ID
endfunction

function Peruan__Actioni takes nothing returns nothing
    local integer looppaaja=0
    local unit u=GetTriggerUnit()
    local location t=GetSpellTargetLoc()
    local real x=GetLocationX(t)
    local real y=GetLocationY(t)
    local real x2=GetUnitX(u)
    local real y2=GetUnitY(u)
    local real d=DistanceBetweenXY(x,y,x2,y2)
    call PolledWait2(d/900)
    call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\Feedback\\ArcaneTowerAttack.mdl",x,y))
    loop
        exitwhen looppaaja>3
        set x2=x+GetRandomReal(-400,400)
        set y2=y+GetRandomReal(-400,400)
        set u=CreateUnit(Player(12),Peruan_UNIT_ID,x2,y2,0)
        call UnitApplyTimedLife(u,'BTLF',50.)
        set looppaaja=looppaaja+1
    endloop
    set u=null
endfunction

function Peruan__Init takes nothing returns nothing
    local integer i=0
    set udg_trigger61=CreateTrigger()
    loop
        exitwhen i>11
        call TriggerRegisterPlayerUnitEvent(udg_trigger61,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,Filter(function True))
        set udg_booleans01[i]=false
        set i=i+1
    endloop
    call TriggerAddCondition(udg_trigger61,Condition(function Peruan__Conditioni))
    call TriggerAddAction(udg_trigger61,function Peruan__Actioni)
endfunction

function InitCustomTriggers2 takes nothing returns nothing
    set udg_trigger01=CreateTrigger()
    call TriggerAddAction(udg_trigger01,function Trig_StartteriJaMultiboard_Actions)
    set udg_trigger02=CreateTrigger()
    call TriggerAddAction(udg_trigger02,function Trig_AlotusMultiSetNRemover_Actions)
    set udg_trigger03=CreateTrigger()
    call TriggerRegisterTimerEvent(udg_trigger03,.0,false)
    call TriggerAddAction(udg_trigger03,function Trig_Init_Actions)
    set udg_trigger04=CreateTrigger()
    call TriggerRegisterPlayerEventLeave(udg_trigger04,Player(0))
    call TriggerRegisterPlayerEventLeave(udg_trigger04,Player(1))
    call TriggerRegisterPlayerEventLeave(udg_trigger04,Player(2))
    call TriggerRegisterPlayerEventLeave(udg_trigger04,Player(3))
    call TriggerRegisterPlayerEventLeave(udg_trigger04,Player(4))
    call TriggerRegisterPlayerEventLeave(udg_trigger04,Player(5))
    call TriggerRegisterPlayerEventLeave(udg_trigger04,Player(6))
    call TriggerRegisterPlayerEventLeave(udg_trigger04,Player(7))
    call TriggerRegisterPlayerEventLeave(udg_trigger04,Player(8))
    call TriggerRegisterPlayerEventLeave(udg_trigger04,Player(9))
    call TriggerRegisterPlayerEventLeave(udg_trigger04,Player(10))
    call TriggerRegisterPlayerEventLeave(udg_trigger04,Player(11))
    call TriggerAddAction(udg_trigger04,function Trig_LeaveriILMOSTUS_Actions)
    set udg_trigger05=CreateTrigger()
    call TriggerAddAction(udg_trigger05,function Trig_RoundiMultiBoardPaivitys_Actions)
    set udg_trigger06=CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(udg_trigger06,EVENT_PLAYER_UNIT_DEATH)
    call TriggerAddCondition(udg_trigger06,Condition(function Trig_MultiBoardPisteLaittaja_Conditions))
    call TriggerAddAction(udg_trigger06,function Trig_MultiBoardPisteLaittaja_Actions)
    set udg_trigger08=CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(udg_trigger08,EVENT_PLAYER_UNIT_SPELL_CAST)
    call TriggerAddCondition(udg_trigger08,Condition(function Trig_Huudot_Conditions))
    call TriggerAddAction(udg_trigger08,function Trig_Huudot_Actions)
    set udg_trigger09=CreateTrigger()
    call TriggerRegisterLeaveRectSimple(udg_trigger09,udg_rect12)
    call TriggerRegisterLeaveRectSimple(udg_trigger09,udg_rect14)
    call TriggerRegisterLeaveRectSimple(udg_trigger09,udg_rect13)
    call TriggerRegisterLeaveRectSimple(udg_trigger09,udg_rect04)
    call TriggerRegisterLeaveRectSimple(udg_trigger09,udg_rect11)
    call TriggerAddAction(udg_trigger09,function Trig_Keeper_Actions)
    set udg_trigger10=CreateTrigger()
    call TriggerRegisterEnterRectSimple(udg_trigger10,udg_rect06)
    call TriggerAddCondition(udg_trigger10,Condition(function Trig_Sight_Conditions))
    call TriggerAddAction(udg_trigger10,function Trig_Sight_Actions)
    set udg_trigger11=CreateTrigger()
    call TriggerRegisterLeaveRectSimple(udg_trigger11,udg_rect06)
    call TriggerAddCondition(udg_trigger11,Condition(function Trig_UnSight_Conditions))
    call TriggerAddAction(udg_trigger11,function Trig_UnSight_Actions)
    set udg_trigger12=CreateTrigger()
    call TriggerRegisterEnterRectSimple(udg_trigger12,udg_rect17)
    call TriggerAddCondition(udg_trigger12,Condition(function Trig_TakkaLibaToSnow_Conditions))
    call TriggerAddAction(udg_trigger12,function Trig_TakkaLibaToSnow_Actions)
    set udg_trigger13=CreateTrigger()
    call TriggerRegisterEnterRectSimple(udg_trigger13,udg_rect07)
    call TriggerAddCondition(udg_trigger13,Condition(function Trig_Back1_Conditions))
    call TriggerAddAction(udg_trigger13,function Trig_Back1_Actions)
    set udg_trigger14=CreateTrigger()
    call TriggerRegisterEnterRectSimple(udg_trigger14,udg_rect08)
    call TriggerAddCondition(udg_trigger14,Condition(function Trig_Back2_Conditions))
    call TriggerAddAction(udg_trigger14,function Trig_Back2_Actions)
    set udg_trigger15=CreateTrigger()
    call TriggerRegisterEnterRectSimple(udg_trigger15,udg_rect28)
    call TriggerAddCondition(udg_trigger15,Condition(function Trig_PutkestaSnowman_Conditions))
    call TriggerAddAction(udg_trigger15,function Trig_PutkestaSnowman_Actions)
    set udg_trigger16=CreateTrigger()
    call TriggerRegisterEnterRectSimple(udg_trigger16,udg_rect15)
    call TriggerAddCondition(udg_trigger16,Condition(function Trig_TakkaSnowToLiba_Conditions))
    call TriggerAddAction(udg_trigger16,function Trig_TakkaSnowToLiba_Actions)
    set udg_trigger17=CreateTrigger()
    call TriggerRegisterEnterRectSimple(udg_trigger17,udg_rect25)
    call TriggerAddCondition(udg_trigger17,Condition(function Trig_ShitPipeInKasvi_Conditions))
    call TriggerAddAction(udg_trigger17,function Trig_ShitPipeInKasvi_Actions)
    set udg_trigger18=CreateTrigger()
    call TriggerRegisterEnterRectSimple(udg_trigger18,udg_rect19)
    call TriggerAddCondition(udg_trigger18,Condition(function Trig_ShitPipeInDungeon_Conditions))
    call TriggerAddAction(udg_trigger18,function Trig_ShitPipeInDungeon_Actions)
    set udg_trigger19=CreateTrigger()
    call TriggerRegisterEnterRectSimple(udg_trigger19,udg_rect23)
    call TriggerAddCondition(udg_trigger19,Condition(function Trig_ShitPipeOutKasvi_Conditions))
    call TriggerAddAction(udg_trigger19,function Trig_ShitPipeOutKasvi_Actions)
    set udg_trigger20=CreateTrigger()
    call TriggerRegisterEnterRectSimple(udg_trigger20,udg_rect21)
    call TriggerAddCondition(udg_trigger20,Condition(function Trig_ShitPipeOutDungeon_Conditions))
    call TriggerAddAction(udg_trigger20,function Trig_ShitPipeOutDungeon_Actions)
endfunction

function InitCustomPlayerSlots2 takes nothing returns nothing
    call SetPlayerStartLocation(Player(0),0)
    call ForcePlayerStartLocation(Player(0),0)
    call SetPlayerColor(Player(0),ConvertPlayerColor(0))
    call SetPlayerRacePreference(Player(0),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(0),false)
    call SetPlayerController(Player(0),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(1),1)
    call ForcePlayerStartLocation(Player(1),1)
    call SetPlayerColor(Player(1),ConvertPlayerColor(1))
    call SetPlayerRacePreference(Player(1),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(1),false)
    call SetPlayerController(Player(1),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(2),2)
    call ForcePlayerStartLocation(Player(2),2)
    call SetPlayerColor(Player(2),ConvertPlayerColor(2))
    call SetPlayerRacePreference(Player(2),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(2),false)
    call SetPlayerController(Player(2),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(3),3)
    call ForcePlayerStartLocation(Player(3),3)
    call SetPlayerColor(Player(3),ConvertPlayerColor(3))
    call SetPlayerRacePreference(Player(3),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(3),false)
    call SetPlayerController(Player(3),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(4),4)
    call ForcePlayerStartLocation(Player(4),4)
    call SetPlayerColor(Player(4),ConvertPlayerColor(4))
    call SetPlayerRacePreference(Player(4),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(4),false)
    call SetPlayerController(Player(4),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(5),5)
    call ForcePlayerStartLocation(Player(5),5)
    call SetPlayerColor(Player(5),ConvertPlayerColor(5))
    call SetPlayerRacePreference(Player(5),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(5),false)
    call SetPlayerController(Player(5),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(6),6)
    call ForcePlayerStartLocation(Player(6),6)
    call SetPlayerColor(Player(6),ConvertPlayerColor(6))
    call SetPlayerRacePreference(Player(6),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(6),false)
    call SetPlayerController(Player(6),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(7),7)
    call ForcePlayerStartLocation(Player(7),7)
    call SetPlayerColor(Player(7),ConvertPlayerColor(7))
    call SetPlayerRacePreference(Player(7),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(7),false)
    call SetPlayerController(Player(7),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(8),8)
    call ForcePlayerStartLocation(Player(8),8)
    call SetPlayerColor(Player(8),ConvertPlayerColor(8))
    call SetPlayerRacePreference(Player(8),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(8),false)
    call SetPlayerController(Player(8),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(9),9)
    call ForcePlayerStartLocation(Player(9),9)
    call SetPlayerColor(Player(9),ConvertPlayerColor(9))
    call SetPlayerRacePreference(Player(9),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(9),false)
    call SetPlayerController(Player(9),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(10),10)
    call ForcePlayerStartLocation(Player(10),10)
    call SetPlayerColor(Player(10),ConvertPlayerColor(10))
    call SetPlayerRacePreference(Player(10),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(10),false)
    call SetPlayerController(Player(10),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(11),11)
    call ForcePlayerStartLocation(Player(11),11)
    call SetPlayerColor(Player(11),ConvertPlayerColor(11))
    call SetPlayerRacePreference(Player(11),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(11),false)
    call SetPlayerController(Player(11),MAP_CONTROL_USER)
endfunction

function InitCustomTeams2 takes nothing returns nothing
    call SetPlayerTeam(Player(0),0)
    call SetPlayerTeam(Player(1),0)
    call SetPlayerTeam(Player(2),0)
    call SetPlayerTeam(Player(3),0)
    call SetPlayerTeam(Player(4),0)
    call SetPlayerTeam(Player(5),0)
    call SetPlayerAllianceStateAllyBJ(Player(0),Player(1),true)
    call SetPlayerAllianceStateAllyBJ(Player(0),Player(2),true)
    call SetPlayerAllianceStateAllyBJ(Player(0),Player(3),true)
    call SetPlayerAllianceStateAllyBJ(Player(0),Player(4),true)
    call SetPlayerAllianceStateAllyBJ(Player(0),Player(5),true)
    call SetPlayerAllianceStateAllyBJ(Player(1),Player(0),true)
    call SetPlayerAllianceStateAllyBJ(Player(1),Player(2),true)
    call SetPlayerAllianceStateAllyBJ(Player(1),Player(3),true)
    call SetPlayerAllianceStateAllyBJ(Player(1),Player(4),true)
    call SetPlayerAllianceStateAllyBJ(Player(1),Player(5),true)
    call SetPlayerAllianceStateAllyBJ(Player(2),Player(0),true)
    call SetPlayerAllianceStateAllyBJ(Player(2),Player(1),true)
    call SetPlayerAllianceStateAllyBJ(Player(2),Player(3),true)
    call SetPlayerAllianceStateAllyBJ(Player(2),Player(4),true)
    call SetPlayerAllianceStateAllyBJ(Player(2),Player(5),true)
    call SetPlayerAllianceStateAllyBJ(Player(3),Player(0),true)
    call SetPlayerAllianceStateAllyBJ(Player(3),Player(1),true)
    call SetPlayerAllianceStateAllyBJ(Player(3),Player(2),true)
    call SetPlayerAllianceStateAllyBJ(Player(3),Player(4),true)
    call SetPlayerAllianceStateAllyBJ(Player(3),Player(5),true)
    call SetPlayerAllianceStateAllyBJ(Player(4),Player(0),true)
    call SetPlayerAllianceStateAllyBJ(Player(4),Player(1),true)
    call SetPlayerAllianceStateAllyBJ(Player(4),Player(2),true)
    call SetPlayerAllianceStateAllyBJ(Player(4),Player(3),true)
    call SetPlayerAllianceStateAllyBJ(Player(4),Player(5),true)
    call SetPlayerAllianceStateAllyBJ(Player(5),Player(0),true)
    call SetPlayerAllianceStateAllyBJ(Player(5),Player(1),true)
    call SetPlayerAllianceStateAllyBJ(Player(5),Player(2),true)
    call SetPlayerAllianceStateAllyBJ(Player(5),Player(3),true)
    call SetPlayerAllianceStateAllyBJ(Player(5),Player(4),true)
    call SetPlayerAllianceStateVisionBJ(Player(0),Player(1),true)
    call SetPlayerAllianceStateVisionBJ(Player(0),Player(2),true)
    call SetPlayerAllianceStateVisionBJ(Player(0),Player(3),true)
    call SetPlayerAllianceStateVisionBJ(Player(0),Player(4),true)
    call SetPlayerAllianceStateVisionBJ(Player(0),Player(5),true)
    call SetPlayerAllianceStateVisionBJ(Player(1),Player(0),true)
    call SetPlayerAllianceStateVisionBJ(Player(1),Player(2),true)
    call SetPlayerAllianceStateVisionBJ(Player(1),Player(3),true)
    call SetPlayerAllianceStateVisionBJ(Player(1),Player(4),true)
    call SetPlayerAllianceStateVisionBJ(Player(1),Player(5),true)
    call SetPlayerAllianceStateVisionBJ(Player(2),Player(0),true)
    call SetPlayerAllianceStateVisionBJ(Player(2),Player(1),true)
    call SetPlayerAllianceStateVisionBJ(Player(2),Player(3),true)
    call SetPlayerAllianceStateVisionBJ(Player(2),Player(4),true)
    call SetPlayerAllianceStateVisionBJ(Player(2),Player(5),true)
    call SetPlayerAllianceStateVisionBJ(Player(3),Player(0),true)
    call SetPlayerAllianceStateVisionBJ(Player(3),Player(1),true)
    call SetPlayerAllianceStateVisionBJ(Player(3),Player(2),true)
    call SetPlayerAllianceStateVisionBJ(Player(3),Player(4),true)
    call SetPlayerAllianceStateVisionBJ(Player(3),Player(5),true)
    call SetPlayerAllianceStateVisionBJ(Player(4),Player(0),true)
    call SetPlayerAllianceStateVisionBJ(Player(4),Player(1),true)
    call SetPlayerAllianceStateVisionBJ(Player(4),Player(2),true)
    call SetPlayerAllianceStateVisionBJ(Player(4),Player(3),true)
    call SetPlayerAllianceStateVisionBJ(Player(4),Player(5),true)
    call SetPlayerAllianceStateVisionBJ(Player(5),Player(0),true)
    call SetPlayerAllianceStateVisionBJ(Player(5),Player(1),true)
    call SetPlayerAllianceStateVisionBJ(Player(5),Player(2),true)
    call SetPlayerAllianceStateVisionBJ(Player(5),Player(3),true)
    call SetPlayerAllianceStateVisionBJ(Player(5),Player(4),true)
    call SetPlayerTeam(Player(6),1)
    call SetPlayerTeam(Player(7),1)
    call SetPlayerTeam(Player(8),1)
    call SetPlayerTeam(Player(9),1)
    call SetPlayerTeam(Player(10),1)
    call SetPlayerTeam(Player(11),1)
    call SetPlayerAllianceStateAllyBJ(Player(6),Player(7),true)
    call SetPlayerAllianceStateAllyBJ(Player(6),Player(8),true)
    call SetPlayerAllianceStateAllyBJ(Player(6),Player(9),true)
    call SetPlayerAllianceStateAllyBJ(Player(6),Player(10),true)
    call SetPlayerAllianceStateAllyBJ(Player(6),Player(11),true)
    call SetPlayerAllianceStateAllyBJ(Player(7),Player(6),true)
    call SetPlayerAllianceStateAllyBJ(Player(7),Player(8),true)
    call SetPlayerAllianceStateAllyBJ(Player(7),Player(9),true)
    call SetPlayerAllianceStateAllyBJ(Player(7),Player(10),true)
    call SetPlayerAllianceStateAllyBJ(Player(7),Player(11),true)
    call SetPlayerAllianceStateAllyBJ(Player(8),Player(6),true)
    call SetPlayerAllianceStateAllyBJ(Player(8),Player(7),true)
    call SetPlayerAllianceStateAllyBJ(Player(8),Player(9),true)
    call SetPlayerAllianceStateAllyBJ(Player(8),Player(10),true)
    call SetPlayerAllianceStateAllyBJ(Player(8),Player(11),true)
    call SetPlayerAllianceStateAllyBJ(Player(9),Player(6),true)
    call SetPlayerAllianceStateAllyBJ(Player(9),Player(7),true)
    call SetPlayerAllianceStateAllyBJ(Player(9),Player(8),true)
    call SetPlayerAllianceStateAllyBJ(Player(9),Player(10),true)
    call SetPlayerAllianceStateAllyBJ(Player(9),Player(11),true)
    call SetPlayerAllianceStateAllyBJ(Player(10),Player(6),true)
    call SetPlayerAllianceStateAllyBJ(Player(10),Player(7),true)
    call SetPlayerAllianceStateAllyBJ(Player(10),Player(8),true)
    call SetPlayerAllianceStateAllyBJ(Player(10),Player(9),true)
    call SetPlayerAllianceStateAllyBJ(Player(10),Player(11),true)
    call SetPlayerAllianceStateAllyBJ(Player(11),Player(6),true)
    call SetPlayerAllianceStateAllyBJ(Player(11),Player(7),true)
    call SetPlayerAllianceStateAllyBJ(Player(11),Player(8),true)
    call SetPlayerAllianceStateAllyBJ(Player(11),Player(9),true)
    call SetPlayerAllianceStateAllyBJ(Player(11),Player(10),true)
    call SetPlayerAllianceStateVisionBJ(Player(6),Player(7),true)
    call SetPlayerAllianceStateVisionBJ(Player(6),Player(8),true)
    call SetPlayerAllianceStateVisionBJ(Player(6),Player(9),true)
    call SetPlayerAllianceStateVisionBJ(Player(6),Player(10),true)
    call SetPlayerAllianceStateVisionBJ(Player(6),Player(11),true)
    call SetPlayerAllianceStateVisionBJ(Player(7),Player(6),true)
    call SetPlayerAllianceStateVisionBJ(Player(7),Player(8),true)
    call SetPlayerAllianceStateVisionBJ(Player(7),Player(9),true)
    call SetPlayerAllianceStateVisionBJ(Player(7),Player(10),true)
    call SetPlayerAllianceStateVisionBJ(Player(7),Player(11),true)
    call SetPlayerAllianceStateVisionBJ(Player(8),Player(6),true)
    call SetPlayerAllianceStateVisionBJ(Player(8),Player(7),true)
    call SetPlayerAllianceStateVisionBJ(Player(8),Player(9),true)
    call SetPlayerAllianceStateVisionBJ(Player(8),Player(10),true)
    call SetPlayerAllianceStateVisionBJ(Player(8),Player(11),true)
    call SetPlayerAllianceStateVisionBJ(Player(9),Player(6),true)
    call SetPlayerAllianceStateVisionBJ(Player(9),Player(7),true)
    call SetPlayerAllianceStateVisionBJ(Player(9),Player(8),true)
    call SetPlayerAllianceStateVisionBJ(Player(9),Player(10),true)
    call SetPlayerAllianceStateVisionBJ(Player(9),Player(11),true)
    call SetPlayerAllianceStateVisionBJ(Player(10),Player(6),true)
    call SetPlayerAllianceStateVisionBJ(Player(10),Player(7),true)
    call SetPlayerAllianceStateVisionBJ(Player(10),Player(8),true)
    call SetPlayerAllianceStateVisionBJ(Player(10),Player(9),true)
    call SetPlayerAllianceStateVisionBJ(Player(10),Player(11),true)
    call SetPlayerAllianceStateVisionBJ(Player(11),Player(6),true)
    call SetPlayerAllianceStateVisionBJ(Player(11),Player(7),true)
    call SetPlayerAllianceStateVisionBJ(Player(11),Player(8),true)
    call SetPlayerAllianceStateVisionBJ(Player(11),Player(9),true)
    call SetPlayerAllianceStateVisionBJ(Player(11),Player(10),true)
endfunction

function InitAllyPriorities2 takes nothing returns nothing
    call SetStartLocPrioCount(0,1)
    call SetStartLocPrio(0,0,5,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrioCount(1,2)
    call SetStartLocPrio(1,0,2,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(1,1,3,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrioCount(2,3)
    call SetStartLocPrio(2,0,1,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(2,1,3,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(2,2,4,MAP_LOC_PRIO_LOW)
    call SetStartLocPrioCount(3,2)
    call SetStartLocPrio(3,0,1,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(3,1,2,MAP_LOC_PRIO_LOW)
    call SetStartLocPrioCount(4,2)
    call SetStartLocPrio(4,0,1,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(4,1,2,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrioCount(5,3)
    call SetStartLocPrio(5,0,0,MAP_LOC_PRIO_LOW)
    call SetStartLocPrio(5,1,2,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(5,2,4,MAP_LOC_PRIO_LOW)
    call SetStartLocPrioCount(6,2)
    call SetStartLocPrio(6,0,8,MAP_LOC_PRIO_LOW)
    call SetStartLocPrio(6,1,10,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrioCount(7,1)
    call SetStartLocPrio(7,0,8,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrioCount(8,2)
    call SetStartLocPrio(8,0,6,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(8,1,7,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrioCount(9,3)
    call SetStartLocPrio(9,0,7,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(9,1,8,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(9,2,11,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrioCount(10,2)
    call SetStartLocPrio(10,0,6,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(10,1,11,MAP_LOC_PRIO_LOW)
    call SetStartLocPrioCount(11,2)
    call SetStartLocPrio(11,0,9,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(11,1,10,MAP_LOC_PRIO_HIGH)
endfunction

function main2 takes nothing returns nothing
    local weathereffect we
    local integer i
    local player p
    local unit u
    local integer unitID
    local trigger t
    local real life
    call SetCameraBounds(-9472.+GetCameraMargin(CAMERA_MARGIN_LEFT),-9728.+GetCameraMargin(CAMERA_MARGIN_BOTTOM),9472.-GetCameraMargin(CAMERA_MARGIN_RIGHT),9216.-GetCameraMargin(CAMERA_MARGIN_TOP),-9472.+GetCameraMargin(CAMERA_MARGIN_LEFT),9216.-GetCameraMargin(CAMERA_MARGIN_TOP),9472.-GetCameraMargin(CAMERA_MARGIN_RIGHT),-9728.+GetCameraMargin(CAMERA_MARGIN_BOTTOM))
    call SetDayNightModels("Environment\\DNC\\DNCDalaran\\DNCDalaranTerrain\\DNCDalaranTerrain.mdl","Environment\\DNC\\DNCDalaran\\DNCDalaranUnit\\DNCDalaranUnit.mdl")
    call SetTerrainFogEx(0,200.,11200.,.0,.435,.145,.514)
    call NewSoundEnvironment("Default")
    call SetAmbientDaySound("DungeonDay")
    call SetAmbientNightSound("DungeonNight")
    call SetMapMusic("Music",true,0)
    set udg_rect02=Rect(1408.,-9760.,5504.,-6912.)
    set we=AddWeatherEffect(udg_rect02,'FDbh')
    call EnableWeatherEffect(we,true)
    set udg_rect03=Rect(928.,2752.,3456.,4768.)
    set we=AddWeatherEffect(udg_rect03,'SNls')
    call EnableWeatherEffect(we,true)
    set udg_rect04=Rect(-3616.,-5152.,-2400.,-800.)
    set we=AddWeatherEffect(udg_rect04,'FDrh')
    call EnableWeatherEffect(we,true)
    set udg_rect05=Rect(-2048.,2656.,32.,4768.)
    set we=AddWeatherEffect(udg_rect05,'FDbh')
    call EnableWeatherEffect(we,true)
    set udg_rect06=Rect(-1376.,4928.,-1024.,5184.)
    set udg_rect07=Rect(-2656.,4768.,-1664.,6272.)
    set udg_rect08=Rect(-1664.,5376.,-512.,6240.)
    set udg_rect09=Rect(5024.,-5792.,6208.,-1792.)
    set we=AddWeatherEffect(udg_rect09,'FDbh')
    call EnableWeatherEffect(we,true)
    set udg_rect10=Rect(6336.,-5952.,8640.,-3904.)
    set we=AddWeatherEffect(udg_rect10,'FDbh')
    call EnableWeatherEffect(we,true)
    set udg_rect11=Rect(6912.,-3168.,8672.,-640.)
    set we=AddWeatherEffect(udg_rect11,'FDrl')
    call EnableWeatherEffect(we,true)
    set udg_rect12=Rect(-1632.,-4768.,928.,-768.)
    set we=AddWeatherEffect(udg_rect12,'LRma')
    call EnableWeatherEffect(we,true)
    set udg_rect13=Rect(-8288.,-7744.,-7616.,-2560.)
    set we=AddWeatherEffect(udg_rect13,'FDgh')
    call EnableWeatherEffect(we,true)
    set udg_rect14=Rect(-7648.,-8512.,-3072.,-7104.)
    set we=AddWeatherEffect(udg_rect14,'FDgh')
    call EnableWeatherEffect(we,true)
    set udg_rect15=Rect(2912.,4704.,3104.,4896.)
    set udg_rect16=Rect(2912.,4576.,3104.,4704.)
    set udg_rect17=Rect(-1888.,-4512.,-1696.,-4320.)
    set udg_rect18=Rect(-1696.,-4480.,-1568.,-4352.)
    set udg_rect19=Rect(-2624.,-1056.,-2464.,-960.)
    set udg_rect20=Rect(-2656.,-1184.,-2528.,-1088.)
    set udg_rect21=Rect(-8160.,-3168.,-7808.,-2976.)
    set udg_rect22=Rect(-8064.,-3296.,-7904.,-3168.)
    set udg_rect23=Rect(-3552.,-8416.,-3424.,-7712.)
    set udg_rect24=Rect(-3680.,-8000.,-3552.,-7872.)
    set udg_rect25=Rect(8320.,-864.,8672.,-704.)
    set udg_rect26=Rect(8320.,-1056.,8448.,-896.)
    set udg_rect27=Rect(2976.,3136.,3072.,3232.)
    set udg_rect28=Rect(-6688.,-6912.,-6400.,-6816.)
    set p=Player(15)
    set u=CreateUnit(p,'n006',-3456.,-1792.,270.)
    call SetUnitColor(u,ConvertPlayerColor(9))
    set u=CreateUnit(p,'n007',7104.,-1280.,270.)
    call SetUnitColor(u,ConvertPlayerColor(10))
    set u=CreateUnit(p,'n008',832.,4672.,270.)
    call SetUnitColor(u,ConvertPlayerColor(3))
    set p=Player(15)
    set udg_unit13=CreateUnit(p,'n004',-3303.3,-3854.8,245.633)
    set u=CreateUnit(p,'nrat',-2986.8,-2382.5,140.157)
    set u=CreateUnit(p,'nrat',-3358.8,-1909.1,344.014)
    set u=CreateUnit(p,'nrat',-2601.2,-2457.8,95.09)
    set u=CreateUnit(p,'nrat',-3306.,-2293.4,274.337)
    set u=CreateUnit(p,'nrat',-2936.3,-4269.8,28.159)
    set u=CreateUnit(p,'nrat',-2957.1,-1387.9,225.128)
    set u=CreateUnit(p,'nrat',-3225.7,-1342.1,228.248)
    set u=CreateUnit(p,'nrat',-2485.2,-1782.2,149.99)
    set u=CreateUnit(p,'nrat',-2598.1,-3881.4,157.648)
    set u=CreateUnit(p,'n002',-416.7,-2957.9,345.388)
    set u=CreateUnit(p,'n002',-489.5,-2255.2,341.905)
    set u=CreateUnit(p,'n002',-223.,-2014.6,12.756)
    set u=CreateUnit(p,'n002',-788.5,-2488.8,281.797)
    set u=CreateUnit(p,'n002',-224.,-2715.1,196.947)
    set u=CreateUnit(p,'n002',-160.,-3155.1,252.869)
    set u=CreateUnit(p,'n002',363.8,-2541.6,126.874)
    set u=CreateUnit(p,'n002',197.3,-3049.2,185.883)
    set u=CreateUnit(p,'n002',-37.5,-2127.7,100.034)
    set u=CreateUnit(p,'n002',-1318.9,-2656.2,.11)
    set u=CreateUnit(p,'n002',-964.3,-3968.7,46.298)
    set u=CreateUnit(p,'n002',323.6,-4046.3,15.755)
    set u=CreateUnit(p,'n002',3.2,-4668.7,227.995)
    set u=CreateUnit(p,'n002',316.6,-1361.1,187.652)
    set u=CreateUnit(p,'n002',-775.7,-1293.7,165.547)
    set u=CreateUnit(p,'n002',794.7,-1792.4,308.56)
    set u=CreateUnit(p,'ndwm',8491.6,-1607.3,320.36)
    set u=CreateUnit(p,'ndwm',8612.3,-1627.7,15.557)
    set u=CreateUnit(p,'ndwm',8680.6,-1682.7,328.172)
    set u=CreateUnit(p,'ndwm',8145.4,-2625.,91.98)
    set u=CreateUnit(p,'ndwm',8112.2,-2576.9,136.004)
    set u=CreateUnit(p,'ndwm',8335.,-3105.8,108.878)
    set u=CreateUnit(p,'ndwm',8425.2,-3114.4,213.789)
    set u=CreateUnit(p,'ndwm',7005.,-2304.9,44.804)
    set u=CreateUnit(p,'ndwm',6968.,-2376.4,254.781)
    set u=CreateUnit(p,'ndwm',7534.7,-930.5,171.59)
    set u=CreateUnit(p,'nrat',-4753.9,1230.3,67.568)
    set u=CreateUnit(p,'nrat',-8038.,-6710.,242.684)
    set u=CreateUnit(p,'nrat',-7887.8,-3911.1,129.126)
    set u=CreateUnit(p,'nrat',-8044.8,-4011.4,147.848)
    set u=CreateUnit(p,'nrat',-8099.6,-4578.4,327.194)
    set u=CreateUnit(p,'nrat',-7937.6,-5629.6,70.732)
    set u=CreateUnit(p,'nrat',-8049.2,-5438.4,158.702)
    set u=CreateUnit(p,'nrat',-8047.9,-5322.3,32.762)
    set u=CreateUnit(p,'nrat',-7901.2,-5047.5,124.347)
    set u=CreateUnit(p,'nrat',-7871.6,-4887.9,233.719)
    set u=CreateUnit(p,'nrat',-7914.7,-6106.7,137.476)
    set u=CreateUnit(p,'nrat',-8241.6,-6381.5,263.735)
    set u=CreateUnit(p,'nrat',-8020.9,-6666.1,34.949)
    set u=CreateUnit(p,'nrat',-8071.6,-7010.6,236.103)
    set u=CreateUnit(p,'nrat',-7987.7,-7251.1,302.43)
    set u=CreateUnit(p,'nrat',-7832.,-7638.2,205.242)
    set u=CreateUnit(p,'nrat',-7668.7,-7396.7,230.226)
    set u=CreateUnit(p,'nrat',-7966.7,-7162.7,336.192)
    set u=CreateUnit(p,'nrat',-7225.4,-7496.,8.581)
    set u=CreateUnit(p,'nrat',-6862.1,-7496.3,265.394)
    set u=CreateUnit(p,'nrat',-6729.4,-7503.5,276.842)
    set u=CreateUnit(p,'nrat',-6683.3,-7481.9,223.205)
    set u=CreateUnit(p,'nrat',-6243.3,-7550.2,144.859)
    set u=CreateUnit(p,'nrat',-6610.6,-7358.5,67.447)
    set u=CreateUnit(p,'nrat',-6599.8,-7459.7,115.909)
    set u=CreateUnit(p,'nrat',-6449.8,-7502.6,62.459)
    set u=CreateUnit(p,'nrat',-6251.3,-7527.4,262.944)
    set u=CreateUnit(p,'nrat',-5409.3,-7624.8,198.54)
    set u=CreateUnit(p,'nrat',-5470.1,-7614.,259.45)
    set u=CreateUnit(p,'nrat',-5487.6,-7624.,346.585)
    set u=CreateUnit(p,'nrat',-5173.5,-7830.4,323.041)
    set u=CreateUnit(p,'nrat',-3827.9,-7772.4,120.095)
    set u=CreateUnit(p,'nrat',-3956.6,-7811.,333.006)
    set u=CreateUnit(p,'nrat',-4293.8,-7878.8,108.087)
    set u=CreateUnit(p,'nrat',-4556.,-7888.4,277.161)
    set u=CreateUnit(p,'nrat',-4759.1,-7903.6,358.)
    set u=CreateUnit(p,'nrat',-3765.5,-7885.6,189.168)
    set u=CreateUnit(p,'nrat',-3802.1,-7814.5,208.164)
    set u=CreateUnit(p,'nrat',-3861.8,-7820.8,112.009)
    set u=CreateUnit(p,'nrat',-3919.3,-7784.9,275.524)
    set u=CreateUnit(p,'nrat',-3937.1,-7815.5,154.385)
    set u=CreateUnit(p,'nrat',-3833.,-7867.4,152.165)
    set u=CreateUnit(p,'nrat',-3821.5,-7877.9,104.593)
    set u=CreateUnit(p,'nrat',-4425.1,-7746.8,98.32)
    set u=CreateUnit(p,'nrat',-4298.7,-7750.4,182.214)
    set u=CreateUnit(p,'nrat',-4396.3,-8004.7,333.907)
    set u=CreateUnit(p,'nrat',-4323.8,-8015.5,169.964)
    set u=CreateUnit(p,'nrat',-3482.7,-8193.3,203.616)
    set u=CreateUnit(p,'nrat',-3574.5,-8308.2,155.406)
    set u=CreateUnit(p,'nrat',-3582.3,-8354.1,109.032)
    set u=CreateUnit(p,'nrat',-3707.1,-8212.6,313.57)
    set u=CreateUnit(p,'nrat',-5391.5,-8054.5,237.334)
    set u=CreateUnit(p,'nrat',-5941.8,-8072.2,333.951)
    set u=CreateUnit(p,'nrat',-5986.3,-8096.2,283.005)
    set u=CreateUnit(p,'nrat',-6693.4,-7006.6,81.664)
    set u=CreateUnit(p,'nrat',-6792.7,-7032.1,140.673)
    set u=CreateUnit(p,'nrat',-6996.3,-7557.2,334.841)
    set udg_unit14=CreateUnit(p,'n009',-2506.3,-5016.2,107.087)
    set p=Player(0)
    set udg_unit03=CreateUnit(p,'N001',-4737.,524.1,49.517)
    call SetUnitColor(udg_unit03,ConvertPlayerColor(0))
    set p=Player(1)
    set udg_unit04=CreateUnit(p,'N001',-4379.9,1852.1,83.938)
    call SetUnitColor(udg_unit04,ConvertPlayerColor(0))
    set p=Player(2)
    set udg_unit05=CreateUnit(p,'N001',-4625.1,1593.4,295.486)
    call SetUnitColor(udg_unit05,ConvertPlayerColor(0))
    set p=Player(3)
    set udg_unit06=CreateUnit(p,'N001',-4578.9,1966.9,14.755)
    call SetUnitColor(udg_unit06,ConvertPlayerColor(0))
    set p=Player(4)
    set udg_unit07=CreateUnit(p,'N001',-4205.3,1435.8,5.68)
    call SetUnitColor(udg_unit07,ConvertPlayerColor(0))
    set p=Player(5)
    set udg_unit08=CreateUnit(p,'N001',-4779.7,1194.6,256.044)
    call SetUnitColor(udg_unit08,ConvertPlayerColor(0))
    set p=Player(6)
    set udg_unit09=CreateUnit(p,'N000',4044.2,-7732.9,337.137)
    call SetUnitColor(udg_unit09,ConvertPlayerColor(10))
    set p=Player(7)
    set udg_unit10=CreateUnit(p,'N000',3432.2,-7618.3,53.34)
    call SetUnitColor(udg_unit10,ConvertPlayerColor(10))
    set p=Player(8)
    set udg_unit11=CreateUnit(p,'N000',3742.9,-7611.2,253.4)
    call SetUnitColor(udg_unit11,ConvertPlayerColor(10))
    set p=Player(9)
    set udg_unit12=CreateUnit(p,'N000',3471.3,-7957.5,294.89)
    call SetUnitColor(udg_unit12,ConvertPlayerColor(10))
    set p=Player(10)
    set udg_unit01=CreateUnit(p,'N000',4026.,-7984.8,276.23)
    call SetUnitColor(udg_unit01,ConvertPlayerColor(10))
    set p=Player(11)
    set udg_unit02=CreateUnit(p,'N000',3768.6,-8246.1,35.87)
    call SetUnitColor(udg_unit02,ConvertPlayerColor(10))
    call ExecuteFunc("jasshelper__initstructs8942437")
    call ExecuteFunc("ABC___Init")
    call ExecuteFunc("ABCT___Init")
    call ExecuteFunc("TT__Init")
    set i=0
    set Kananmuna__T=CreateTrigger()
    loop
        exitwhen i>11
        call TriggerRegisterPlayerUnitEvent(Kananmuna__T,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,Filter(function True))
        set i=i+1
    endloop
    call TriggerAddCondition(Kananmuna__T,Condition(function Kananmuna__Conditioni))
    call TriggerAddAction(Kananmuna__T,function Kananmuna__Actioni)
    set i=0
    set Peruan__T=CreateTrigger()
    loop
        exitwhen i>11
        call TriggerRegisterPlayerUnitEvent(Peruan__T,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,Filter(function True))
        set Peruan_B[i]=false
        set i=i+1
    endloop
    call TriggerAddCondition(Peruan__T,Condition(function Peruan__Conditioni))
    call TriggerAddAction(Peruan__T,function Peruan__Actioni)
    set i=0
    set udg_KillsDeathsMulti=CreateMultiboard()
    set i=0
    loop
        exitwhen(i>12)
        set udg_PlayersKills[i]=0
        set udg_PlayersDeaths[i]=0
        set i=i+1
    endloop
    set i=0
    loop
        exitwhen(i>2)
        set udg_TeamRoundWins[i]=0
        set i=i+1
    endloop
    set gg_trg_StartteriJaMultiboard=CreateTrigger()
    call TriggerAddAction(gg_trg_StartteriJaMultiboard,function Trig_StartteriJaMultiboard_Actions)
    set gg_trg_AlotusMultiSetNRemover=CreateTrigger()
    call TriggerAddAction(gg_trg_AlotusMultiSetNRemover,function Trig_AlotusMultiSetNRemover_Actions)
    set gg_trg_Init=CreateTrigger()
    call TriggerRegisterTimerEvent(gg_trg_Init,.0,false)
    call TriggerAddAction(gg_trg_Init,function Trig_Init_Actions)
    set gg_trg_LeaveriILMOSTUS=CreateTrigger()
    call TriggerRegisterPlayerEventLeave(gg_trg_LeaveriILMOSTUS,Player(0))
    call TriggerRegisterPlayerEventLeave(gg_trg_LeaveriILMOSTUS,Player(1))
    call TriggerRegisterPlayerEventLeave(gg_trg_LeaveriILMOSTUS,Player(2))
    call TriggerRegisterPlayerEventLeave(gg_trg_LeaveriILMOSTUS,Player(3))
    call TriggerRegisterPlayerEventLeave(gg_trg_LeaveriILMOSTUS,Player(4))
    call TriggerRegisterPlayerEventLeave(gg_trg_LeaveriILMOSTUS,Player(5))
    call TriggerRegisterPlayerEventLeave(gg_trg_LeaveriILMOSTUS,Player(6))
    call TriggerRegisterPlayerEventLeave(gg_trg_LeaveriILMOSTUS,Player(7))
    call TriggerRegisterPlayerEventLeave(gg_trg_LeaveriILMOSTUS,Player(8))
    call TriggerRegisterPlayerEventLeave(gg_trg_LeaveriILMOSTUS,Player(9))
    call TriggerRegisterPlayerEventLeave(gg_trg_LeaveriILMOSTUS,Player(10))
    call TriggerRegisterPlayerEventLeave(gg_trg_LeaveriILMOSTUS,Player(11))
    call TriggerAddAction(gg_trg_LeaveriILMOSTUS,function Trig_LeaveriILMOSTUS_Actions)
    set gg_trg_RoundiMultiBoardPaivitys=CreateTrigger()
    call TriggerAddAction(gg_trg_RoundiMultiBoardPaivitys,function Trig_RoundiMultiBoardPaivitys_Actions)
    set gg_trg_MultiBoardPisteLaittaja=CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_MultiBoardPisteLaittaja,EVENT_PLAYER_UNIT_DEATH)
    call TriggerAddCondition(gg_trg_MultiBoardPisteLaittaja,Condition(function Trig_MultiBoardPisteLaittaja_Conditions))
    call TriggerAddAction(gg_trg_MultiBoardPisteLaittaja,function Trig_MultiBoardPisteLaittaja_Actions)
    set gg_trg_Huudot=CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_Huudot,EVENT_PLAYER_UNIT_SPELL_CAST)
    call TriggerAddCondition(gg_trg_Huudot,Condition(function Trig_Huudot_Conditions))
    call TriggerAddAction(gg_trg_Huudot,function Trig_Huudot_Actions)
    set gg_trg_Keeper=CreateTrigger()
    call TriggerRegisterLeaveRectSimple(gg_trg_Keeper,gg_rct_JokuHuoneRegion)
    call TriggerRegisterLeaveRectSimple(gg_trg_Keeper,gg_rct_PaskaPutki2)
    call TriggerRegisterLeaveRectSimple(gg_trg_Keeper,gg_rct_PaskaPutki1)
    call TriggerRegisterLeaveRectSimple(gg_trg_Keeper,gg_rct_Dungeon)
    call TriggerRegisterLeaveRectSimple(gg_trg_Keeper,gg_rct_Kasvihuone)
    call TriggerAddAction(gg_trg_Keeper,function Trig_Keeper_Actions)
    set gg_trg_Sight=CreateTrigger()
    call TriggerRegisterEnterRectSimple(gg_trg_Sight,gg_rct_LookOut)
    call TriggerAddCondition(gg_trg_Sight,Condition(function Trig_Sight_Conditions))
    call TriggerAddAction(gg_trg_Sight,function Trig_Sight_Actions)
    set gg_trg_UnSight=CreateTrigger()
    call TriggerRegisterLeaveRectSimple(gg_trg_UnSight,gg_rct_LookOut)
    call TriggerAddCondition(gg_trg_UnSight,Condition(function Trig_UnSight_Conditions))
    call TriggerAddAction(gg_trg_UnSight,function Trig_UnSight_Actions)
    set gg_trg_TakkaLibaToSnow=CreateTrigger()
    call TriggerRegisterEnterRectSimple(gg_trg_TakkaLibaToSnow,gg_rct_LibaTakkaIn)
    call TriggerAddCondition(gg_trg_TakkaLibaToSnow,Condition(function Trig_TakkaLibaToSnow_Conditions))
    call TriggerAddAction(gg_trg_TakkaLibaToSnow,function Trig_TakkaLibaToSnow_Actions)
    set gg_trg_Back1=CreateTrigger()
    call TriggerRegisterEnterRectSimple(gg_trg_Back1,gg_rct_Siirto1)
    call TriggerAddCondition(gg_trg_Back1,Condition(function Trig_Back1_Conditions))
    call TriggerAddAction(gg_trg_Back1,function Trig_Back1_Actions)
    set gg_trg_Back2=CreateTrigger()
    call TriggerRegisterEnterRectSimple(gg_trg_Back2,gg_rct_Siirto2)
    call TriggerAddCondition(gg_trg_Back2,Condition(function Trig_Back2_Conditions))
    call TriggerAddAction(gg_trg_Back2,function Trig_Back2_Actions)
    set gg_trg_PutkestaSnowman=CreateTrigger()
    call TriggerRegisterEnterRectSimple(gg_trg_PutkestaSnowman,gg_rct_PutkestaPihalle)
    call TriggerAddCondition(gg_trg_PutkestaSnowman,Condition(function Trig_PutkestaSnowman_Conditions))
    call TriggerAddAction(gg_trg_PutkestaSnowman,function Trig_PutkestaSnowman_Actions)
    set gg_trg_TakkaSnowToLiba=CreateTrigger()
    call TriggerRegisterEnterRectSimple(gg_trg_TakkaSnowToLiba,gg_rct_SnowTakkaIn)
    call TriggerAddCondition(gg_trg_TakkaSnowToLiba,Condition(function Trig_TakkaSnowToLiba_Conditions))
    call TriggerAddAction(gg_trg_TakkaSnowToLiba,function Trig_TakkaSnowToLiba_Actions)
    set gg_trg_ShitPipeInKasvi=CreateTrigger()
    call TriggerRegisterEnterRectSimple(gg_trg_ShitPipeInKasvi,gg_rct_KasviIn)
    call TriggerAddCondition(gg_trg_ShitPipeInKasvi,Condition(function Trig_ShitPipeInKasvi_Conditions))
    call TriggerAddAction(gg_trg_ShitPipeInKasvi,function Trig_ShitPipeInKasvi_Actions)
    set gg_trg_ShitPipeInDungeon=CreateTrigger()
    call TriggerRegisterEnterRectSimple(gg_trg_ShitPipeInDungeon,gg_rct_DungeonIn)
    call TriggerAddCondition(gg_trg_ShitPipeInDungeon,Condition(function Trig_ShitPipeInDungeon_Conditions))
    call TriggerAddAction(gg_trg_ShitPipeInDungeon,function Trig_ShitPipeInDungeon_Actions)
    set gg_trg_ShitPipeOutKasvi=CreateTrigger()
    call TriggerRegisterEnterRectSimple(gg_trg_ShitPipeOutKasvi,gg_rct_ShitKasviOut)
    call TriggerAddCondition(gg_trg_ShitPipeOutKasvi,Condition(function Trig_ShitPipeOutKasvi_Conditions))
    call TriggerAddAction(gg_trg_ShitPipeOutKasvi,function Trig_ShitPipeOutKasvi_Actions)
    set gg_trg_ShitPipeOutDungeon=CreateTrigger()
    call TriggerRegisterEnterRectSimple(gg_trg_ShitPipeOutDungeon,gg_rct_ShitDungeonIn)
    call TriggerAddCondition(gg_trg_ShitPipeOutDungeon,Condition(function Trig_ShitPipeOutDungeon_Conditions))
    call TriggerAddAction(gg_trg_ShitPipeOutDungeon,function Trig_ShitPipeOutDungeon_Actions)
endfunction
function config takes nothing returns nothing
    call SetMapName("TRIGSTR_001")
    call SetMapDescription("TRIGSTR_003")
    call SetPlayers(12)
    call SetTeams(12)
    call SetGamePlacement(MAP_PLACEMENT_TEAMS_TOGETHER)
    call DefineStartLocation(0,-4736.,512.)
    call DefineStartLocation(1,-4416.,1728.)
    call DefineStartLocation(2,-4608.,1536.)
    call DefineStartLocation(3,-4608.,1856.)
    call DefineStartLocation(4,-4224.,1408.)
    call DefineStartLocation(5,-4800.,1152.)
    call DefineStartLocation(6,4032.,-7744.)
    call DefineStartLocation(7,3456.,-7616.)
    call DefineStartLocation(8,3712.,-7680.)
    call DefineStartLocation(9,3456.,-8064.)
    call DefineStartLocation(10,4032.,-8000.)
    call DefineStartLocation(11,3776.,-8256.)
    call SetPlayerStartLocation(Player(0),0)
    call ForcePlayerStartLocation(Player(0),0)
    call SetPlayerColor(Player(0),ConvertPlayerColor(0))
    call SetPlayerRacePreference(Player(0),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(0),false)
    call SetPlayerController(Player(0),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(1),1)
    call ForcePlayerStartLocation(Player(1),1)
    call SetPlayerColor(Player(1),ConvertPlayerColor(1))
    call SetPlayerRacePreference(Player(1),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(1),false)
    call SetPlayerController(Player(1),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(2),2)
    call ForcePlayerStartLocation(Player(2),2)
    call SetPlayerColor(Player(2),ConvertPlayerColor(2))
    call SetPlayerRacePreference(Player(2),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(2),false)
    call SetPlayerController(Player(2),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(3),3)
    call ForcePlayerStartLocation(Player(3),3)
    call SetPlayerColor(Player(3),ConvertPlayerColor(3))
    call SetPlayerRacePreference(Player(3),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(3),false)
    call SetPlayerController(Player(3),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(4),4)
    call ForcePlayerStartLocation(Player(4),4)
    call SetPlayerColor(Player(4),ConvertPlayerColor(4))
    call SetPlayerRacePreference(Player(4),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(4),false)
    call SetPlayerController(Player(4),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(5),5)
    call ForcePlayerStartLocation(Player(5),5)
    call SetPlayerColor(Player(5),ConvertPlayerColor(5))
    call SetPlayerRacePreference(Player(5),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(5),false)
    call SetPlayerController(Player(5),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(6),6)
    call ForcePlayerStartLocation(Player(6),6)
    call SetPlayerColor(Player(6),ConvertPlayerColor(6))
    call SetPlayerRacePreference(Player(6),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(6),false)
    call SetPlayerController(Player(6),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(7),7)
    call ForcePlayerStartLocation(Player(7),7)
    call SetPlayerColor(Player(7),ConvertPlayerColor(7))
    call SetPlayerRacePreference(Player(7),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(7),false)
    call SetPlayerController(Player(7),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(8),8)
    call ForcePlayerStartLocation(Player(8),8)
    call SetPlayerColor(Player(8),ConvertPlayerColor(8))
    call SetPlayerRacePreference(Player(8),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(8),false)
    call SetPlayerController(Player(8),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(9),9)
    call ForcePlayerStartLocation(Player(9),9)
    call SetPlayerColor(Player(9),ConvertPlayerColor(9))
    call SetPlayerRacePreference(Player(9),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(9),false)
    call SetPlayerController(Player(9),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(10),10)
    call ForcePlayerStartLocation(Player(10),10)
    call SetPlayerColor(Player(10),ConvertPlayerColor(10))
    call SetPlayerRacePreference(Player(10),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(10),false)
    call SetPlayerController(Player(10),MAP_CONTROL_USER)
    call SetPlayerStartLocation(Player(11),11)
    call ForcePlayerStartLocation(Player(11),11)
    call SetPlayerColor(Player(11),ConvertPlayerColor(11))
    call SetPlayerRacePreference(Player(11),RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(11),false)
    call SetPlayerController(Player(11),MAP_CONTROL_USER)
    call InitCustomTeams()
    call SetStartLocPrioCount(0,1)
    call SetStartLocPrio(0,0,5,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrioCount(1,2)
    call SetStartLocPrio(1,0,2,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(1,1,3,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrioCount(2,3)
    call SetStartLocPrio(2,0,1,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(2,1,3,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(2,2,4,MAP_LOC_PRIO_LOW)
    call SetStartLocPrioCount(3,2)
    call SetStartLocPrio(3,0,1,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(3,1,2,MAP_LOC_PRIO_LOW)
    call SetStartLocPrioCount(4,2)
    call SetStartLocPrio(4,0,1,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(4,1,2,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrioCount(5,3)
    call SetStartLocPrio(5,0,0,MAP_LOC_PRIO_LOW)
    call SetStartLocPrio(5,1,2,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(5,2,4,MAP_LOC_PRIO_LOW)
    call SetStartLocPrioCount(6,2)
    call SetStartLocPrio(6,0,8,MAP_LOC_PRIO_LOW)
    call SetStartLocPrio(6,1,10,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrioCount(7,1)
    call SetStartLocPrio(7,0,8,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrioCount(8,2)
    call SetStartLocPrio(8,0,6,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(8,1,7,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrioCount(9,3)
    call SetStartLocPrio(9,0,7,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(9,1,8,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(9,2,11,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrioCount(10,2)
    call SetStartLocPrio(10,0,6,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(10,1,11,MAP_LOC_PRIO_LOW)
    call SetStartLocPrioCount(11,2)
    call SetStartLocPrio(11,0,9,MAP_LOC_PRIO_HIGH)
    call SetStartLocPrio(11,1,10,MAP_LOC_PRIO_HIGH)
endfunction
function sa__Kananmuna__Data_onDestroy takes nothing returns boolean
    local integer this=f__arg_this
    local integer H=GetUnitUserData(s__Kananmuna__Data_u[this])
    set s__HeroesData_alpha[H]=255
    call UnitResetColor(s__Kananmuna__Data_u[this])
    call UnitRemoveAbility(s__Kananmuna__Data_u[this],Kananmuna__BUFF_ID)
    return true
endfunction
function sa__Stupefy__StupefySlideData_onDestroy takes nothing returns boolean
    local integer this=f__arg_this
    call DestroyEffect(s__Stupefy__StupefySlideData_e[this])
    call PauseUnit(s__Stupefy__StupefySlideData_u[this],false)
    return true
endfunction
function sa__Stupefy__StupefyData_onDestroy takes nothing returns boolean
    local integer this=f__arg_this
    call ClearTriggerStructA(s__Stupefy__StupefyData_impact[this])
    call DestroyTrigger(s__Stupefy__StupefyData_impact[this])
    return true
endfunction
function sa__Sektumsempra__SektumsempraBleedingData_onDestroy takes nothing returns boolean
    local integer this=f__arg_this
    local integer H=GetUnitUserData(s__Sektumsempra__SektumsempraBleedingData_u[this])
    set s__HeroesData_green[H]=255
    set s__HeroesData_blue[H]=255
    call UnitResetColor(s__Sektumsempra__SektumsempraBleedingData_u[this])
    return true
endfunction
function sa__Sektumsempra__SektumsempraData_onDestroy takes nothing returns boolean
    local integer this=f__arg_this
    call ClearTriggerStructC(s__Sektumsempra__SektumsempraData_impact[this])
    call DestroyTrigger(s__Sektumsempra__SektumsempraData_impact[this])
    return true
endfunction
function sa__Imperio__ImperioData_onDestroy takes nothing returns boolean
    local integer this=f__arg_this
    call ClearTriggerStructC(s__Imperio__ImperioData_impact[this])
    call DestroyTrigger(s__Imperio__ImperioData_impact[this])
    return true
endfunction
function sa__Impedimenta__ImpedimentaFlyData_onDestroy takes nothing returns boolean
    local integer this=f__arg_this
    call SetUnitFlyHeight(s__Impedimenta__ImpedimentaFlyData_u[this],.0,.0)
    call SetUnitPosition(s__Impedimenta__ImpedimentaFlyData_u[this],GetUnitX(s__Impedimenta__ImpedimentaFlyData_u[this]),GetUnitY(s__Impedimenta__ImpedimentaFlyData_u[this]))
    call s__vector_destroy(s__Impedimenta__ImpedimentaFlyData_position[this])
    call s__vector_destroy(s__Impedimenta__ImpedimentaFlyData_velocity[this])
    return true
endfunction
function sa__Impedimenta__ImpedimentaData_onDestroy takes nothing returns boolean
    local integer this=f__arg_this
    call ClearTriggerStructB(s__Impedimenta__ImpedimentaData_impact[this])
    call DestroyTrigger(s__Impedimenta__ImpedimentaData_impact[this])
    return true
endfunction
function sa__Expelliarmus__FlyingWandData_onDestroy takes nothing returns boolean
    local integer this=f__arg_this
    call SetUnitX(s__Expelliarmus__FlyingWandData_u[this],STORAGE_AREA_X)
    call SetUnitY(s__Expelliarmus__FlyingWandData_u[this],STORAGE_AREA_Y)
    call SetItemPosition(s__Expelliarmus__FlyingWandData_w[this],s__vector_x[s__Expelliarmus__FlyingWandData_position[this]],s__vector_y[s__Expelliarmus__FlyingWandData_position[this]])
    call s__vector_destroy(s__Expelliarmus__FlyingWandData_position[this])
    call s__vector_destroy(s__Expelliarmus__FlyingWandData_velocity[this])
    return true
endfunction
function sa__Expelliarmus__ExpelliarmusData_onDestroy takes nothing returns boolean
    local integer this=f__arg_this
    call ClearTriggerStructA(s__Expelliarmus__ExpelliarmusData_impact[this])
    call DestroyTrigger(s__Expelliarmus__ExpelliarmusData_impact[this])
    return true
endfunction
function sa__Crucio__Crucio_TortureData_onDestroy takes nothing returns boolean
    local integer this=f__arg_this
    call SetTextTagLifespan(s__Crucio__Crucio_TortureData_t1[this],6.)
    call SetTextTagLifespan(s__Crucio__Crucio_TortureData_t2[this],8.)
    call SetTextTagFadepoint(s__Crucio__Crucio_TortureData_t1[this],5.)
    call SetTextTagFadepoint(s__Crucio__Crucio_TortureData_t2[this],6.)
    call SetUnitAnimation(s__Crucio__Crucio_TortureData_torturer[this],"stand")
    call PauseUnit(udg_units12[this],false)
    call SetUnitFlyHeight(udg_units12[this],.0,.0)
    return true
endfunction

function sa__Crucio__CrucioData_onDestroy takes nothing returns boolean
    local integer this=udg_integer59
    call ClearTriggerStructB(udg_triggers09[this])
    call DestroyTrigger(udg_triggers09[this])
    return true
endfunction

function sa__AvadaKedavra__AvadaKedavraData_onDestroy takes nothing returns boolean
    local integer this=udg_integer59
    call ClearTriggerStructA(udg_triggers08[this])
    call DestroyTrigger(udg_triggers08[this])
    return true
endfunction

function jasshelper__initstructs8942437 takes nothing returns nothing
    set udg_trigger75=CreateTrigger()
    call TriggerAddCondition(udg_trigger75,Condition(function sa__Kananmuna__Data_onDestroy))
    set udg_trigger74=CreateTrigger()
    call TriggerAddCondition(udg_trigger74,Condition(function sa__Stupefy__StupefySlideData_onDestroy))
    set udg_trigger73=CreateTrigger()
    call TriggerAddCondition(udg_trigger73,Condition(function sa__Stupefy__StupefyData_onDestroy))
    set udg_trigger72=CreateTrigger()
    call TriggerAddCondition(udg_trigger72,Condition(function sa__Sektumsempra__SektumsempraBleedingData_onDestroy))
    set udg_trigger71=CreateTrigger()
    call TriggerAddCondition(udg_trigger71,Condition(function sa__Sektumsempra__SektumsempraData_onDestroy))
    set udg_trigger70=CreateTrigger()
    call TriggerAddCondition(udg_trigger70,Condition(function sa__Imperio__ImperioData_onDestroy))
    set udg_trigger69=CreateTrigger()
    call TriggerAddCondition(udg_trigger69,Condition(function sa__Impedimenta__ImpedimentaFlyData_onDestroy))
    set udg_trigger68=CreateTrigger()
    call TriggerAddCondition(udg_trigger68,Condition(function sa__Impedimenta__ImpedimentaData_onDestroy))
    set udg_trigger67=CreateTrigger()
    call TriggerAddCondition(udg_trigger67,Condition(function sa__Expelliarmus__FlyingWandData_onDestroy))
    set udg_trigger66=CreateTrigger()
    call TriggerAddCondition(udg_trigger66,Condition(function sa__Expelliarmus__ExpelliarmusData_onDestroy))
    set udg_trigger65=CreateTrigger()
    call TriggerAddCondition(udg_trigger65,Condition(function sa__Crucio__Crucio_TortureData_onDestroy))
    set udg_trigger64=CreateTrigger()
    call TriggerAddCondition(udg_trigger64,Condition(function sa__Crucio__CrucioData_onDestroy))
    set udg_trigger63=CreateTrigger()
    call TriggerAddCondition(udg_trigger63,Condition(function sa__AvadaKedavra__AvadaKedavraData_onDestroy))
endfunction

function InitTrig_init takes nothing returns nothing
    set udg_location01 = Location(.0,.0)
    set udg_location02 = Location(.0,.0)
   
    call ExecuteFunc("main2")
endfunction
 
Last edited:
Level 8
Joined
May 21, 2019
Messages
435
Yer' a wizard, Harry!
Jokes aside, your screenshot of the problem seems to be scrolled all the way down to the bottom, and there's no error message displayed there. Is there an error message somewhere else in that window? Say, maybe at the top? Perhaps in a red font? I'm just guessing these details, as I've never actually had this error prompt myself, but that's usually where such error messages are located.
 
Status
Not open for further replies.
Top