МБ у кого-то завалялась система отлова ударов ( герой каждыe n ударов крит/доп дмг и т.д.(БЕЗ ОРБЫ, на счет баффов не помню)). Валялась и пылилась такая система, случайно удалил( хух... попытался найти, лазил, лазил, чет не нашел. МБ у кого-то есть, желательно c/v Jass

сам мана бурн.
globals
    boolean DmgBool = true
endglobals

function Player_ManaBurn_Leave takes nothing returns boolean
    local TriggerData dd = GetDataBX( GetTriggeringTrigger( ) )
    call dd.RemoveTrigger()
    call dd.destroy()
    return false
endfunction

function Timer_ManaBreak_Actions takes nothing returns nothing
    local TriggerData dd = GetDataBX( GetExpiredTimer( ) )
   
    local real mana
    local real damage = dd.dmg * dd.c
    
    if IsUnitDead( dd.attacker ) or IsUnitType( dd.attacker, UNIT_TYPE_MAGIC_IMMUNE ) or IsUnitInvulnerable( dd.attacker ) or IsUnitAlly( dd.attacker, GetOwningPlayer( dd.attacked )) or dd.attacker == dd.attacked then
        return
    endif
    
    if IsUnitType( dd.attacked, UNIT_TYPE_HERO ) or GetUnitState( dd.attacked, UNIT_STATE_MAX_MANA ) > 2.00 then
        set mana = GetUnitState( dd.attacker, UNIT_STATE_MANA )
        set TempString = "Abilities\\Spells\\Human\\Feedback\\ArcaneTowerAttack.mdl"
        
        if damage > mana then
            set damage = mana
        endif
    
        if IsUnitIllusion( dd.attacked ) then
            call SetUnitState( dd.attacker, UNIT_STATE_MANA, mana - damage * 0.30 )
        else
            call SetUnitState( dd.attacker, UNIT_STATE_MANA, mana - damage )
        endif
    endif
    
    if GetUnitAbilityLevel( dd.attacker, 'ANsu' ) > 0 or IsUnitType( dd.attacker, UNIT_TYPE_SUMMONED ) then
        set TempString = "Abilities\\Spells\\Human\\Feedback\\SpellBreakerAttack.mdl"
        set damage = damage + dd.ExCount * 20.00
    endif
    
    if IsUnitIllusion( dd.attacked ) then
        set damage = damage * 0.30
    endif
    
    call DestroyEffect( AddSpecialEffectTarget( TempString, dd.attacker, "origin" ) )
    call UnitDamageTarget( dd.attacked, dd.attacker, damage, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_LIGHTNING, WEAPON_TYPE_WHOKNOWS )
    
    if damage > 2.00 then
        call FloatingTextFadeout( Player( 12 ), dd.attacker, "|cffFF69B4-" + I2S( R2I( damage ) ) + "!|r" )
    endif
    
endfunction

function Timer_Magical_Damage_Actions takes nothing returns nothing
    local TriggerData dd = GetDataBX( GetExpiredTimer( ) )
    
    set DmgBool = false
    if IsUnitIllusion( dd.attacked ) then
        call UnitRemoveAbility( dd.attacked, 'A081' )
        call UnitDamageTarget( dd.attacker, dd.attacked, dd.dmg * - 1.34, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_UNKNOWN, WEAPON_TYPE_WHOKNOWS )
        if GetUnitState( dd.attacked, UNIT_STATE_LIFE ) > 0.405 then
            call UnitAddAbility( dd.attacked, 'A081' )
        endif
    else
        call UnitRemoveAbility( dd.attacked, 'A06V' )
        call UnitDamageTarget( dd.attacker, dd.attacked, dd.dmg * - 1.34, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FIRE, WEAPON_TYPE_WHOKNOWS )
        call UnitAddAbility( dd.attacked, 'A06V' )
    endif
    set DmgBool = true
    
    //call FloatingTextFadeout( Player( 12 ), dd.attacked, "|cffFF69B4" + I2S( R2I( -1.34 * dd.dmg ) ) + "!|r" )
endfunction

function Trig_Mana_Burn_Conditions takes nothing returns boolean
    if GetTriggerEventId() == EVENT_PLAYER_LEAVE then
        return Player_ManaBurn_Leave( )
    endif
    return DmgBool and GetEventDamage( ) != 0.00 and GetEventDamageSource() != DummyAttacker
endfunction

function Trig_Mana_Burn_Actions takes nothing returns nothing
    local TriggerData dd = GetDataBX( GetTriggeringTrigger( ) )

    set dd.attacker = GetEventDamageSource( )
    set dd.attacked = GetTriggerUnit( )
    set dd.dmg = GetEventDamage( )
    
    if dd.dmg < 0.00 then
        set dd.hp = GetUnitState( dd.attacked, UNIT_STATE_LIFE )
    
        if dd.hp < GetUnitState( dd.attacked, UNIT_STATE_MAX_LIFE ) then
            set dd.hp = dd.hp + dd.dmg 
            if dd.hp < 0.00 then
                set dd.hp = 0.600
            endif
        endif
        
        call SetUnitState( dd.attacked, UNIT_STATE_LIFE, dd.hp )
        
        call TimerStart( dd.trix, 0.00, false, function Timer_Magical_Damage_Actions )
    else
        call TimerStart( dd.trix, 0.00, false, function Timer_ManaBreak_Actions )
    endif
endfunction

//===========================================================================
function startTrig_Mana_Burn takes nothing returns nothing
    local unit Runner = GetLearningUnit( )
    local TriggerData dd
    local integer level = GetUnitAbilityLevel( Runner, GetLearnedSkill( ) )
    local integer id = GetHandleId( Runner )
    
    if level == 1 then
        set dd = TriggerData.create( )
        set dd.attacked = Runner
        set dd.trg = CreateTrigger( )
        set dd.trc = TriggerAddCondition( dd.trg, Condition( function Trig_Mana_Burn_Conditions ) )
        set dd.tra = TriggerAddAction( dd.trg, function Trig_Mana_Burn_Actions )
        set dd.trix = CreateTimer( )
        set dd.c = 0.20
        call TriggerRegisterUnitEvent( dd.trg, Runner, EVENT_UNIT_DAMAGED )
        call TriggerRegisterPlayerEvent( dd.trg, GetOwningPlayer( Runner ), EVENT_PLAYER_LEAVE )
        call TriggerRegisterUnitEvent( gg_trg_Summon_Manaburn_Images, Runner, EVENT_UNIT_SUMMON )
        call UnitAddAbility( Runner, 'A06V' )
        call SetDataBX( dd.trix, dd )
        call SetDataBX( dd.trg, dd )
        call SaveInteger( gg_htb_HashData, ExManaBreak, id, dd )
    else
        set dd = LoadInteger( gg_htb_HashData, ExManaBreak, id )
        set dd.c = 0.20 * level
        set dd.ExCount = level
    endif
    
    set Runner = null
endfunction

вспомогательные системы и структуры
library XAT 

function XAT_echo takes string s returns nothing
        call DisplayTextToPlayer(GetLocalPlayer(),0,0,s)
endfunction

//Q: HOW TO USE THAT IN MY MAP ???
//A: Simply copy this code into your map. thats all.


// the XAT system... using textmacro ti make it more versatile


   globals
     integer DataBX_tmp=0
     integer array DataBX_max

     handle array DataBX_hdl0x0
     handle array DataBX_hdl0x1
     handle array DataBX_hdl0x2
     handle array DataBX_hdl0x3
     handle array DataBX_hdl0x4
     handle array DataBX_hdl0x5
     handle array DataBX_hdl0x6
     handle array DataBX_hdl0x7
     handle array DataBX_hdl0x8
     handle array DataBX_hdl0x9
     handle array DataBX_hdl0x10
     handle array DataBX_hdl0x11
     handle array DataBX_hdl0x12
     handle array DataBX_hdl0x13
     handle array DataBX_hdl0x14
     handle array DataBX_hdl0x15
 
     integer array DataBX_xat0x0
     integer array DataBX_xat0x1
     integer array DataBX_xat0x2
     integer array DataBX_xat0x3
     integer array DataBX_xat0x4
     integer array DataBX_xat0x5
     integer array DataBX_xat0x6
     integer array DataBX_xat0x7
     integer array DataBX_xat0x8
     integer array DataBX_xat0x9
     integer array DataBX_xat0x10
     integer array DataBX_xat0x11
     integer array DataBX_xat0x12
     integer array DataBX_xat0x13
     integer array DataBX_xat0x14
     integer array DataBX_xat0x15
   endglobals

// function for attaching data to a handle type object
function SetDataBX takes handle h,integer d returns nothing
     local integer i=GetHandleId(h)
     set i=i-(i/8191)*8191
  if DataBX_hdl0x0[i]==h or DataBX_hdl0x0[i]==null then
     set DataBX_xat0x0[i]=d
     set DataBX_hdl0x0[i]=h
   if 1>DataBX_max[i] then
     set DataBX_max[i]=1
   endif
  elseif DataBX_hdl0x1[i]==h or DataBX_hdl0x1[i]==null then
     set DataBX_xat0x1[i]=d
     set DataBX_hdl0x1[i]=h
   if 2>DataBX_max[i] then
     set DataBX_max[i]=2
   endif
  elseif DataBX_hdl0x2[i]==h or DataBX_hdl0x2[i]==null then
     set DataBX_xat0x2[i]=d
     set DataBX_hdl0x2[i]=h
   if 3>DataBX_max[i] then
     set DataBX_max[i]=3
   endif
  elseif DataBX_hdl0x3[i]==h or DataBX_hdl0x3[i]==null then
     set DataBX_xat0x3[i]=d
     set DataBX_hdl0x3[i]=h
   if 4>DataBX_max[i] then
     set DataBX_max[i]=4
   endif
  elseif DataBX_hdl0x4[i]==h or DataBX_hdl0x4[i]==null then
     set DataBX_xat0x4[i]=d
     set DataBX_hdl0x4[i]=h
   if 5>DataBX_max[i] then
     set DataBX_max[i]=5
   endif
  elseif DataBX_hdl0x5[i]==h or DataBX_hdl0x5[i]==null then
     set DataBX_xat0x5[i]=d
     set DataBX_hdl0x5[i]=h
   if 6>DataBX_max[i] then
     set DataBX_max[i]=6
   endif
  elseif DataBX_hdl0x6[i]==h or DataBX_hdl0x6[i]==null then
     set DataBX_xat0x6[i]=d
     set DataBX_hdl0x6[i]=h
   if 7>DataBX_max[i] then
     set DataBX_max[i]=7
   endif
  elseif DataBX_hdl0x7[i]==h or DataBX_hdl0x7[i]==null then
     set DataBX_xat0x7[i]=d
     set DataBX_hdl0x7[i]=h
   if 8>DataBX_max[i] then
     set DataBX_max[i]=8
   endif
  elseif DataBX_hdl0x8[i]==h or DataBX_hdl0x8[i]==null then
     set DataBX_xat0x8[i]=d
     set DataBX_hdl0x8[i]=h
   if 9>DataBX_max[i] then
     set DataBX_max[i]=9
   endif
  elseif DataBX_hdl0x9[i]==h or DataBX_hdl0x9[i]==null then
     set DataBX_xat0x9[i]=d
     set DataBX_hdl0x9[i]=h
   if 10>DataBX_max[i] then
     set DataBX_max[i]=10
   endif
  elseif DataBX_hdl0x10[i]==h or DataBX_hdl0x10[i]==null then
     set DataBX_xat0x10[i]=d
     set DataBX_hdl0x10[i]=h
   if 11>DataBX_max[i] then
     set DataBX_max[i]=11
   endif
  elseif DataBX_hdl0x11[i]==h or DataBX_hdl0x11[i]==null then
     set DataBX_xat0x11[i]=d
     set DataBX_hdl0x11[i]=h
   if 12>DataBX_max[i] then
     set DataBX_max[i]=12
   endif
  elseif DataBX_hdl0x12[i]==h or DataBX_hdl0x12[i]==null then
     set DataBX_xat0x12[i]=d
     set DataBX_hdl0x12[i]=h
   if 13>DataBX_max[i] then
     set DataBX_max[i]=13
   endif
  elseif DataBX_hdl0x13[i]==h or DataBX_hdl0x13[i]==null then
     set DataBX_xat0x13[i]=d
     set DataBX_hdl0x13[i]=h
   if 14>DataBX_max[i] then
     set DataBX_max[i]=14
   endif
  elseif DataBX_hdl0x14[i]==h or DataBX_hdl0x14[i]==null then
     set DataBX_xat0x14[i]=d
     set DataBX_hdl0x14[i]=h
   if 15>DataBX_max[i] then
     set DataBX_max[i]=15
   endif
  elseif DataBX_hdl0x15[i]==h or DataBX_hdl0x15[i]==null then
     set DataBX_xat0x15[i]=d
     set DataBX_hdl0x15[i]=h
   if 16>DataBX_max[i] then
     set DataBX_max[i]=16
   endif
  else
     call XAT_echo("|cffff0000I DON'T PLAY SO =/... FUCK OFF !|r")
  endif
endfunction

// function for getting attached data
function GetDataBX takes handle h returns integer
     local integer i=GetHandleId(h)
     set i=i-(i/8191)*8191
  if DataBX_hdl0x0[i]==h or DataBX_hdl0x0[i]==null then
     return DataBX_xat0x0[i]
  elseif DataBX_hdl0x1[i]==h or DataBX_hdl0x1[i]==null then
     return DataBX_xat0x1[i]
  elseif DataBX_hdl0x2[i]==h or DataBX_hdl0x2[i]==null then
     return DataBX_xat0x2[i]
  elseif DataBX_hdl0x3[i]==h or DataBX_hdl0x3[i]==null then
     return DataBX_xat0x3[i]
  elseif DataBX_hdl0x4[i]==h or DataBX_hdl0x4[i]==null then
     return DataBX_xat0x4[i]
  elseif DataBX_hdl0x5[i]==h or DataBX_hdl0x5[i]==null then
     return DataBX_xat0x5[i]
  elseif DataBX_hdl0x6[i]==h or DataBX_hdl0x6[i]==null then
     return DataBX_xat0x6[i]
  elseif DataBX_hdl0x7[i]==h or DataBX_hdl0x7[i]==null then
     return DataBX_xat0x7[i]
  elseif DataBX_hdl0x8[i]==h or DataBX_hdl0x8[i]==null then
     return DataBX_xat0x8[i]
  elseif DataBX_hdl0x9[i]==h or DataBX_hdl0x9[i]==null then
     return DataBX_xat0x9[i]
  elseif DataBX_hdl0x10[i]==h or DataBX_hdl0x10[i]==null then
     return DataBX_xat0x10[i]
  elseif DataBX_hdl0x11[i]==h or DataBX_hdl0x11[i]==null then
     return DataBX_xat0x11[i]
  elseif DataBX_hdl0x12[i]==h or DataBX_hdl0x12[i]==null then
     return DataBX_xat0x12[i]
  elseif DataBX_hdl0x13[i]==h or DataBX_hdl0x13[i]==null then
     return DataBX_xat0x13[i]
  elseif DataBX_hdl0x14[i]==h or DataBX_hdl0x14[i]==null then
     return DataBX_xat0x14[i]
  elseif DataBX_hdl0x15[i]==h or DataBX_hdl0x15[i]==null then
     return DataBX_xat0x15[i]
  endif
     return 0
endfunction

// Clever Clean function...
function RemoveDataBX takes handle h returns nothing
     local integer i=GetHandleId(h)
     set i=i-(i/8191)*8191
  if DataBX_max[i]==0 then
     return
  elseif DataBX_max[i]==1 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=null
     set DataBX_xat0x0[i]=0
     set DataBX_max[i]=0
    else
     return
    endif
  elseif DataBX_max[i]==2 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x1[i]
     set DataBX_xat0x0[i]=DataBX_xat0x1[i]
     set DataBX_hdl0x1[i]=null
     set DataBX_xat0x1[i]=0
     set DataBX_max[i]=1
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=null
     set DataBX_xat0x1[i]=0
     set DataBX_max[i]=1
    else
     return
    endif
  elseif DataBX_max[i]==3 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x2[i]
     set DataBX_xat0x0[i]=DataBX_xat0x2[i]
     set DataBX_hdl0x2[i]=null
     set DataBX_xat0x2[i]=0
     set DataBX_max[i]=2
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x2[i]
     set DataBX_xat0x1[i]=DataBX_xat0x2[i]
     set DataBX_hdl0x2[i]=null
     set DataBX_xat0x2[i]=0
     set DataBX_max[i]=2
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=null
     set DataBX_xat0x2[i]=0
     set DataBX_max[i]=2
    else
     return
    endif
  elseif DataBX_max[i]==4 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x3[i]
     set DataBX_xat0x0[i]=DataBX_xat0x3[i]
     set DataBX_hdl0x3[i]=null
     set DataBX_xat0x3[i]=0
     set DataBX_max[i]=3
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x3[i]
     set DataBX_xat0x1[i]=DataBX_xat0x3[i]
     set DataBX_hdl0x3[i]=null
     set DataBX_xat0x3[i]=0
     set DataBX_max[i]=3
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x3[i]
     set DataBX_xat0x2[i]=DataBX_xat0x3[i]
     set DataBX_hdl0x3[i]=null
     set DataBX_xat0x3[i]=0
     set DataBX_max[i]=3
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=null
     set DataBX_xat0x3[i]=0
     set DataBX_max[i]=3
    else
     return
    endif
  elseif DataBX_max[i]==5 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x4[i]
     set DataBX_xat0x0[i]=DataBX_xat0x4[i]
     set DataBX_hdl0x4[i]=null
     set DataBX_xat0x4[i]=0
     set DataBX_max[i]=4
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x4[i]
     set DataBX_xat0x1[i]=DataBX_xat0x4[i]
     set DataBX_hdl0x4[i]=null
     set DataBX_xat0x4[i]=0
     set DataBX_max[i]=4
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x4[i]
     set DataBX_xat0x2[i]=DataBX_xat0x4[i]
     set DataBX_hdl0x4[i]=null
     set DataBX_xat0x4[i]=0
     set DataBX_max[i]=4
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x4[i]
     set DataBX_xat0x3[i]=DataBX_xat0x4[i]
     set DataBX_hdl0x4[i]=null
     set DataBX_xat0x4[i]=0
     set DataBX_max[i]=4
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=null
     set DataBX_xat0x4[i]=0
     set DataBX_max[i]=4
    else
     return
    endif
  elseif DataBX_max[i]==6 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x5[i]
     set DataBX_xat0x0[i]=DataBX_xat0x5[i]
     set DataBX_hdl0x5[i]=null
     set DataBX_xat0x5[i]=0
     set DataBX_max[i]=5
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x5[i]
     set DataBX_xat0x1[i]=DataBX_xat0x5[i]
     set DataBX_hdl0x5[i]=null
     set DataBX_xat0x5[i]=0
     set DataBX_max[i]=5
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x5[i]
     set DataBX_xat0x2[i]=DataBX_xat0x5[i]
     set DataBX_hdl0x5[i]=null
     set DataBX_xat0x5[i]=0
     set DataBX_max[i]=5
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x5[i]
     set DataBX_xat0x3[i]=DataBX_xat0x5[i]
     set DataBX_hdl0x5[i]=null
     set DataBX_xat0x5[i]=0
     set DataBX_max[i]=5
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x5[i]
     set DataBX_xat0x4[i]=DataBX_xat0x5[i]
     set DataBX_hdl0x5[i]=null
     set DataBX_xat0x5[i]=0
     set DataBX_max[i]=5
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=null
     set DataBX_xat0x5[i]=0
     set DataBX_max[i]=5
    else
     return
    endif
  elseif DataBX_max[i]==7 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x6[i]
     set DataBX_xat0x0[i]=DataBX_xat0x6[i]
     set DataBX_hdl0x6[i]=null
     set DataBX_xat0x6[i]=0
     set DataBX_max[i]=6
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x6[i]
     set DataBX_xat0x1[i]=DataBX_xat0x6[i]
     set DataBX_hdl0x6[i]=null
     set DataBX_xat0x6[i]=0
     set DataBX_max[i]=6
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x6[i]
     set DataBX_xat0x2[i]=DataBX_xat0x6[i]
     set DataBX_hdl0x6[i]=null
     set DataBX_xat0x6[i]=0
     set DataBX_max[i]=6
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x6[i]
     set DataBX_xat0x3[i]=DataBX_xat0x6[i]
     set DataBX_hdl0x6[i]=null
     set DataBX_xat0x6[i]=0
     set DataBX_max[i]=6
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x6[i]
     set DataBX_xat0x4[i]=DataBX_xat0x6[i]
     set DataBX_hdl0x6[i]=null
     set DataBX_xat0x6[i]=0
     set DataBX_max[i]=6
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x6[i]
     set DataBX_xat0x5[i]=DataBX_xat0x6[i]
     set DataBX_hdl0x6[i]=null
     set DataBX_xat0x6[i]=0
     set DataBX_max[i]=6
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=null
     set DataBX_xat0x6[i]=0
     set DataBX_max[i]=6
    else
     return
    endif
  elseif DataBX_max[i]==8 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x7[i]
     set DataBX_xat0x0[i]=DataBX_xat0x7[i]
     set DataBX_hdl0x7[i]=null
     set DataBX_xat0x7[i]=0
     set DataBX_max[i]=7
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x7[i]
     set DataBX_xat0x1[i]=DataBX_xat0x7[i]
     set DataBX_hdl0x7[i]=null
     set DataBX_xat0x7[i]=0
     set DataBX_max[i]=7
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x7[i]
     set DataBX_xat0x2[i]=DataBX_xat0x7[i]
     set DataBX_hdl0x7[i]=null
     set DataBX_xat0x7[i]=0
     set DataBX_max[i]=7
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x7[i]
     set DataBX_xat0x3[i]=DataBX_xat0x7[i]
     set DataBX_hdl0x7[i]=null
     set DataBX_xat0x7[i]=0
     set DataBX_max[i]=7
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x7[i]
     set DataBX_xat0x4[i]=DataBX_xat0x7[i]
     set DataBX_hdl0x7[i]=null
     set DataBX_xat0x7[i]=0
     set DataBX_max[i]=7
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x7[i]
     set DataBX_xat0x5[i]=DataBX_xat0x7[i]
     set DataBX_hdl0x7[i]=null
     set DataBX_xat0x7[i]=0
     set DataBX_max[i]=7
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=DataBX_hdl0x7[i]
     set DataBX_xat0x6[i]=DataBX_xat0x7[i]
     set DataBX_hdl0x7[i]=null
     set DataBX_xat0x7[i]=0
     set DataBX_max[i]=7
    elseif DataBX_hdl0x7[i]==h then
     set DataBX_hdl0x7[i]=null
     set DataBX_xat0x7[i]=0
     set DataBX_max[i]=7
    else
     return
    endif
  elseif DataBX_max[i]==9 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x8[i]
     set DataBX_xat0x0[i]=DataBX_xat0x8[i]
     set DataBX_hdl0x8[i]=null
     set DataBX_xat0x8[i]=0
     set DataBX_max[i]=8
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x8[i]
     set DataBX_xat0x1[i]=DataBX_xat0x8[i]
     set DataBX_hdl0x8[i]=null
     set DataBX_xat0x8[i]=0
     set DataBX_max[i]=8
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x8[i]
     set DataBX_xat0x2[i]=DataBX_xat0x8[i]
     set DataBX_hdl0x8[i]=null
     set DataBX_xat0x8[i]=0
     set DataBX_max[i]=8
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x8[i]
     set DataBX_xat0x3[i]=DataBX_xat0x8[i]
     set DataBX_hdl0x8[i]=null
     set DataBX_xat0x8[i]=0
     set DataBX_max[i]=8
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x8[i]
     set DataBX_xat0x4[i]=DataBX_xat0x8[i]
     set DataBX_hdl0x8[i]=null
     set DataBX_xat0x8[i]=0
     set DataBX_max[i]=8
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x8[i]
     set DataBX_xat0x5[i]=DataBX_xat0x8[i]
     set DataBX_hdl0x8[i]=null
     set DataBX_xat0x8[i]=0
     set DataBX_max[i]=8
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=DataBX_hdl0x8[i]
     set DataBX_xat0x6[i]=DataBX_xat0x8[i]
     set DataBX_hdl0x8[i]=null
     set DataBX_xat0x8[i]=0
     set DataBX_max[i]=8
    elseif DataBX_hdl0x7[i]==h then
     set DataBX_hdl0x7[i]=DataBX_hdl0x8[i]
     set DataBX_xat0x7[i]=DataBX_xat0x8[i]
     set DataBX_hdl0x8[i]=null
     set DataBX_xat0x8[i]=0
     set DataBX_max[i]=8
    elseif DataBX_hdl0x8[i]==h then
     set DataBX_hdl0x8[i]=null
     set DataBX_xat0x8[i]=0
     set DataBX_max[i]=8
    else
     return
    endif
  elseif DataBX_max[i]==10 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x9[i]
     set DataBX_xat0x0[i]=DataBX_xat0x9[i]
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x9[i]
     set DataBX_xat0x1[i]=DataBX_xat0x9[i]
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x9[i]
     set DataBX_xat0x2[i]=DataBX_xat0x9[i]
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x9[i]
     set DataBX_xat0x3[i]=DataBX_xat0x9[i]
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x9[i]
     set DataBX_xat0x4[i]=DataBX_xat0x9[i]
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x9[i]
     set DataBX_xat0x5[i]=DataBX_xat0x9[i]
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=DataBX_hdl0x9[i]
     set DataBX_xat0x6[i]=DataBX_xat0x9[i]
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    elseif DataBX_hdl0x7[i]==h then
     set DataBX_hdl0x7[i]=DataBX_hdl0x9[i]
     set DataBX_xat0x7[i]=DataBX_xat0x9[i]
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    elseif DataBX_hdl0x8[i]==h then
     set DataBX_hdl0x8[i]=DataBX_hdl0x9[i]
     set DataBX_xat0x8[i]=DataBX_xat0x9[i]
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    elseif DataBX_hdl0x9[i]==h then
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    else
     return
    endif
  elseif DataBX_max[i]==11 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x0[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x1[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x2[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x3[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x4[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x5[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x6[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x7[i]==h then
     set DataBX_hdl0x7[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x7[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x8[i]==h then
     set DataBX_hdl0x8[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x8[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x9[i]==h then
     set DataBX_hdl0x9[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x9[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x10[i]==h then
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    else
     return
    endif
  elseif DataBX_max[i]==12 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x0[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x1[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x2[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x3[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x4[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x5[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x6[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x7[i]==h then
     set DataBX_hdl0x7[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x7[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x8[i]==h then
     set DataBX_hdl0x8[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x8[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x9[i]==h then
     set DataBX_hdl0x9[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x9[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x10[i]==h then
     set DataBX_hdl0x10[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x10[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x11[i]==h then
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    else
     return
    endif
  elseif DataBX_max[i]==13 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x0[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x1[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x2[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x3[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x4[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x5[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x6[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x7[i]==h then
     set DataBX_hdl0x7[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x7[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x8[i]==h then
     set DataBX_hdl0x8[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x8[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x9[i]==h then
     set DataBX_hdl0x9[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x9[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x10[i]==h then
     set DataBX_hdl0x10[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x10[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x11[i]==h then
     set DataBX_hdl0x11[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x11[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x12[i]==h then
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    else
     return
    endif
  elseif DataBX_max[i]==14 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x0[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x1[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x2[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x3[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x4[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x5[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x6[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x7[i]==h then
     set DataBX_hdl0x7[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x7[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x8[i]==h then
     set DataBX_hdl0x8[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x8[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x9[i]==h then
     set DataBX_hdl0x9[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x9[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x10[i]==h then
     set DataBX_hdl0x10[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x10[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x11[i]==h then
     set DataBX_hdl0x11[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x11[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x12[i]==h then
     set DataBX_hdl0x12[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x12[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x13[i]==h then
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    else
     return
    endif
  elseif DataBX_max[i]==15 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x0[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x1[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x2[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x3[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x4[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x5[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x6[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x7[i]==h then
     set DataBX_hdl0x7[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x7[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x8[i]==h then
     set DataBX_hdl0x8[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x8[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x9[i]==h then
     set DataBX_hdl0x9[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x9[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x10[i]==h then
     set DataBX_hdl0x10[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x10[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x11[i]==h then
     set DataBX_hdl0x11[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x11[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x12[i]==h then
     set DataBX_hdl0x12[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x12[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x13[i]==h then
     set DataBX_hdl0x13[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x13[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x14[i]==h then
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    else
     return
    endif
  elseif DataBX_max[i]==16 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x0[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x1[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x2[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x3[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x4[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x5[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x6[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x7[i]==h then
     set DataBX_hdl0x7[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x7[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x8[i]==h then
     set DataBX_hdl0x8[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x8[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x9[i]==h then
     set DataBX_hdl0x9[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x9[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x10[i]==h then
     set DataBX_hdl0x10[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x10[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x11[i]==h then
     set DataBX_hdl0x11[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x11[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x12[i]==h then
     set DataBX_hdl0x12[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x12[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x13[i]==h then
     set DataBX_hdl0x13[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x13[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x14[i]==h then
     set DataBX_hdl0x14[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x14[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x15[i]==h then
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    else
     return
    endif
  else
    return
  endif 
endfunction


//#####################################
//        CREATE FUNCTION SET 
//#####################################


//##########################################

//##########################################

// Intialize function set
// will generate...

// function SetDataBX takes handle h,integer d returns nothing
// h = your object, d = data what you need to attach currently an integer (but you can simple attach something else by intialazing a another textmacro...)

// function GetDataBX takes handle h returns integer
// h = your object will return currently attached data (integer)

// function RemoveDataBX takes handle h returns nothing
// h = your object will clear the data (free slot what can be used (maybe) by other objects) so don't forget to clear it. ;)

function Debug takes string value returns nothing
    call DisplayTextToPlayer( DebugPlayer, 0.00, 0.00, value )
endfunction

function I2Sx takes integer id, integer key returns string
    return GetAbilityEffectById(id,bj_lastUsedEffect,key)
endfunction

function I2T takes integer TimerId returns timer
    call SaveFogStateHandle( gg_htb_HashData,0,0,ConvertFogState( TimerId - offset ) )
    return LoadTimerHandle( gg_htb_HashData,0,0 )
endfunction

function DisposeTrigger takes trigger t returns nothing
    set nTriggerIndex = nTriggerIndex + 1
    set DispTriggers[nTriggerIndex] = t
    set Elapsed[nTriggerIndex] = TimerGetElapsed( DispTimer ) + 60
    if nTriggerIndex > 8000 then
        call BJDebugMsg(DEBUG + I2Sx( 'A05M', 1) )
        call BJDebugMsg(INFO)
    endif
endfunction

struct DamageData
unit attacker
unit attacked
unit dummy
real dmg
real hp
real c
effect fx
integer id
integer time
real rx
real ry
player pl
group grp
timer trix
boolean IsCheck

method clear takes nothing returns nothing
    set this.attacker = null
    set this.attacked = null
    set this.dummy = null
    set this.dmg = 0.00
    set this.hp = 0.00
    set this.id = 0
    set this.time = 0
    set this.fx = null
    set this.grp = null
    set this.trix = null
    set this.IsCheck = false
endmethod

endstruct

struct TextTag

    texttag tt
    player pl
    integer Alpha
    real tx
    real ty


    method clear takes nothing returns nothing
        set this.tt = null
        set this.pl = null
        set this.Alpha = 0
        set this.tx = 0.00
        set this.ty = 0.00
    endmethod


endstruct

function TextTagAlpha takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    local TextTag st = GetDataBX( t )
    
    if IsVisibleToPlayer( st.tx, st.ty, GetLocalPlayer( ) ) then
        call SetTextTagVisibility( st.tt, true )
    else
        call SetTextTagVisibility( st.tt, false )
    endif
    
    if ( st.Alpha >= 255 ) then
        call PauseTimer( t )
        call RemoveDataBX( t )
        call DestroyTextTag( st.tt )
        call DestroyTimer( t )
        call st.clear( )
        call st.destroy( )
    else
        set st.Alpha = st.Alpha + 3
        if st.Alpha > 255 then
            set st.Alpha = 255
        endif
        call SetTextTagColor( st.tt, 255, 255, 255, 255 - st.Alpha )
    endif
        
    set t = null
endfunction

function FloatingTextFadeout takes player pl, unit whichUnit, string str returns nothing
    local timer t = CreateTimer( )
    local TextTag st = TextTag.create( )
     
    set st.tt = CreateTextTag( )
    set st.tx = GetUnitX( whichUnit )
    set st.ty = GetUnitY( whichUnit )
    set st.Alpha = 7
    set st.pl = pl
    call SetDataBX( t, st )
    
    call SetTextTagText( st.tt, str, 0.023 )
    call SetTextTagPos( st.tt, st.tx, st.ty, 60.00 )
    call SetTextTagVelocity( st.tt, 0.00, 0.035 )
    call SetTextTagColor( st.tt, 0, 0, 0, 255 )
    call SetTextTagPermanent( st.tt, false )
    call SetTextTagVisibility( st.tt, false )
    
    if ( GetLocalPlayer( ) == pl and pl != Player( 12 ) ) then
        call SetTextTagVisibility( st.tt, true )
    elseif ( pl == Player( 12 ) ) then
        call SetTextTagVisibility( st.tt, true )
    endif
    
    call TimerStart( t, 0.05, true, function TextTagAlpha )
    
    set t = null
endfunction

struct TriggerData extends DamageData
trigger trg
triggeraction tra
triggercondition trc
integer ExCount
item vial

method RemoveTrigger takes nothing returns nothing
    call RemoveDataBX( this.trg )
    call RemoveDataBX( this.trix )

    if IsTriggerEnabled( this.trg ) then
        call DisableTrigger( this.trg )
    endif
    
    call TriggerRemoveCondition( this.trg, this.trc )
    call TriggerRemoveAction( this.trg, this.tra )
    call TriggerClearActions( this.trg )
    call TriggerClearConditions( this.trg )
   
    if this.trix != null then
        call DestroyTimer( this.trix )
    endif
    
    call DisposeTrigger( this.trg )
    
    set this.attacker = null
    set this.attacked = null
    set this.trg = null
    set this.trc = null
    set this.tra = null
    set this.trix = null
    set this.pl = null
    set this.dmg = 0.00
    set this.c = 0.00
    set this.time = 0
    
    return
endmethod

endstruct


endlibrary
'A06V' - способность на основе абилки рунных браслетов, фактор снижени урона от магии 2.
'A081' - способность на основе абилки "Благословение Эллуны", фактор снижения урона от магии тот же, применяется для иллюзий.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
32
сам мана бурн.
globals
    boolean DmgBool = true
endglobals

function Player_ManaBurn_Leave takes nothing returns boolean
    local TriggerData dd = GetDataBX( GetTriggeringTrigger( ) )
    call dd.RemoveTrigger()
    call dd.destroy()
    return false
endfunction

function Timer_ManaBreak_Actions takes nothing returns nothing
    local TriggerData dd = GetDataBX( GetExpiredTimer( ) )
   
    local real mana
    local real damage = dd.dmg * dd.c
    
    if IsUnitDead( dd.attacker ) or IsUnitType( dd.attacker, UNIT_TYPE_MAGIC_IMMUNE ) or IsUnitInvulnerable( dd.attacker ) or IsUnitAlly( dd.attacker, GetOwningPlayer( dd.attacked )) or dd.attacker == dd.attacked then
        return
    endif
    
    if IsUnitType( dd.attacked, UNIT_TYPE_HERO ) or GetUnitState( dd.attacked, UNIT_STATE_MAX_MANA ) > 2.00 then
        set mana = GetUnitState( dd.attacker, UNIT_STATE_MANA )
        set TempString = "Abilities\\Spells\\Human\\Feedback\\ArcaneTowerAttack.mdl"
        
        if damage > mana then
            set damage = mana
        endif
    
        if IsUnitIllusion( dd.attacked ) then
            call SetUnitState( dd.attacker, UNIT_STATE_MANA, mana - damage * 0.30 )
        else
            call SetUnitState( dd.attacker, UNIT_STATE_MANA, mana - damage )
        endif
    endif
    
    if GetUnitAbilityLevel( dd.attacker, 'ANsu' ) > 0 or IsUnitType( dd.attacker, UNIT_TYPE_SUMMONED ) then
        set TempString = "Abilities\\Spells\\Human\\Feedback\\SpellBreakerAttack.mdl"
        set damage = damage + dd.ExCount * 20.00
    endif
    
    if IsUnitIllusion( dd.attacked ) then
        set damage = damage * 0.30
    endif
    
    call DestroyEffect( AddSpecialEffectTarget( TempString, dd.attacker, "origin" ) )
    call UnitDamageTarget( dd.attacked, dd.attacker, damage, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_LIGHTNING, WEAPON_TYPE_WHOKNOWS )
    
    if damage > 2.00 then
        call FloatingTextFadeout( Player( 12 ), dd.attacker, "|cffFF69B4-" + I2S( R2I( damage ) ) + "!|r" )
    endif
    
endfunction

function Timer_Magical_Damage_Actions takes nothing returns nothing
    local TriggerData dd = GetDataBX( GetExpiredTimer( ) )
    
    set DmgBool = false
    if IsUnitIllusion( dd.attacked ) then
        call UnitRemoveAbility( dd.attacked, 'A081' )
        call UnitDamageTarget( dd.attacker, dd.attacked, dd.dmg * - 1.34, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_UNKNOWN, WEAPON_TYPE_WHOKNOWS )
        if GetUnitState( dd.attacked, UNIT_STATE_LIFE ) > 0.405 then
            call UnitAddAbility( dd.attacked, 'A081' )
        endif
    else
        call UnitRemoveAbility( dd.attacked, 'A06V' )
        call UnitDamageTarget( dd.attacker, dd.attacked, dd.dmg * - 1.34, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FIRE, WEAPON_TYPE_WHOKNOWS )
        call UnitAddAbility( dd.attacked, 'A06V' )
    endif
    set DmgBool = true
    
    //call FloatingTextFadeout( Player( 12 ), dd.attacked, "|cffFF69B4" + I2S( R2I( -1.34 * dd.dmg ) ) + "!|r" )
endfunction

function Trig_Mana_Burn_Conditions takes nothing returns boolean
    if GetTriggerEventId() == EVENT_PLAYER_LEAVE then
        return Player_ManaBurn_Leave( )
    endif
    return DmgBool and GetEventDamage( ) != 0.00 and GetEventDamageSource() != DummyAttacker
endfunction

function Trig_Mana_Burn_Actions takes nothing returns nothing
    local TriggerData dd = GetDataBX( GetTriggeringTrigger( ) )

    set dd.attacker = GetEventDamageSource( )
    set dd.attacked = GetTriggerUnit( )
    set dd.dmg = GetEventDamage( )
    
    if dd.dmg < 0.00 then
        set dd.hp = GetUnitState( dd.attacked, UNIT_STATE_LIFE )
    
        if dd.hp < GetUnitState( dd.attacked, UNIT_STATE_MAX_LIFE ) then
            set dd.hp = dd.hp + dd.dmg 
            if dd.hp < 0.00 then
                set dd.hp = 0.600
            endif
        endif
        
        call SetUnitState( dd.attacked, UNIT_STATE_LIFE, dd.hp )
        
        call TimerStart( dd.trix, 0.00, false, function Timer_Magical_Damage_Actions )
    else
        call TimerStart( dd.trix, 0.00, false, function Timer_ManaBreak_Actions )
    endif
endfunction

//===========================================================================
function startTrig_Mana_Burn takes nothing returns nothing
    local unit Runner = GetLearningUnit( )
    local TriggerData dd
    local integer level = GetUnitAbilityLevel( Runner, GetLearnedSkill( ) )
    local integer id = GetHandleId( Runner )
    
    if level == 1 then
        set dd = TriggerData.create( )
        set dd.attacked = Runner
        set dd.trg = CreateTrigger( )
        set dd.trc = TriggerAddCondition( dd.trg, Condition( function Trig_Mana_Burn_Conditions ) )
        set dd.tra = TriggerAddAction( dd.trg, function Trig_Mana_Burn_Actions )
        set dd.trix = CreateTimer( )
        set dd.c = 0.20
        call TriggerRegisterUnitEvent( dd.trg, Runner, EVENT_UNIT_DAMAGED )
        call TriggerRegisterPlayerEvent( dd.trg, GetOwningPlayer( Runner ), EVENT_PLAYER_LEAVE )
        call TriggerRegisterUnitEvent( gg_trg_Summon_Manaburn_Images, Runner, EVENT_UNIT_SUMMON )
        call UnitAddAbility( Runner, 'A06V' )
        call SetDataBX( dd.trix, dd )
        call SetDataBX( dd.trg, dd )
        call SaveInteger( gg_htb_HashData, ExManaBreak, id, dd )
    else
        set dd = LoadInteger( gg_htb_HashData, ExManaBreak, id )
        set dd.c = 0.20 * level
        set dd.ExCount = level
    endif
    
    set Runner = null
endfunction

вспомогательные системы и структуры
library XAT 

function XAT_echo takes string s returns nothing
        call DisplayTextToPlayer(GetLocalPlayer(),0,0,s)
endfunction

//Q: HOW TO USE THAT IN MY MAP ???
//A: Simply copy this code into your map. thats all.


// the XAT system... using textmacro ti make it more versatile


   globals
     integer DataBX_tmp=0
     integer array DataBX_max

     handle array DataBX_hdl0x0
     handle array DataBX_hdl0x1
     handle array DataBX_hdl0x2
     handle array DataBX_hdl0x3
     handle array DataBX_hdl0x4
     handle array DataBX_hdl0x5
     handle array DataBX_hdl0x6
     handle array DataBX_hdl0x7
     handle array DataBX_hdl0x8
     handle array DataBX_hdl0x9
     handle array DataBX_hdl0x10
     handle array DataBX_hdl0x11
     handle array DataBX_hdl0x12
     handle array DataBX_hdl0x13
     handle array DataBX_hdl0x14
     handle array DataBX_hdl0x15
 
     integer array DataBX_xat0x0
     integer array DataBX_xat0x1
     integer array DataBX_xat0x2
     integer array DataBX_xat0x3
     integer array DataBX_xat0x4
     integer array DataBX_xat0x5
     integer array DataBX_xat0x6
     integer array DataBX_xat0x7
     integer array DataBX_xat0x8
     integer array DataBX_xat0x9
     integer array DataBX_xat0x10
     integer array DataBX_xat0x11
     integer array DataBX_xat0x12
     integer array DataBX_xat0x13
     integer array DataBX_xat0x14
     integer array DataBX_xat0x15
   endglobals

// function for attaching data to a handle type object
function SetDataBX takes handle h,integer d returns nothing
     local integer i=GetHandleId(h)
     set i=i-(i/8191)*8191
  if DataBX_hdl0x0[i]==h or DataBX_hdl0x0[i]==null then
     set DataBX_xat0x0[i]=d
     set DataBX_hdl0x0[i]=h
   if 1>DataBX_max[i] then
     set DataBX_max[i]=1
   endif
  elseif DataBX_hdl0x1[i]==h or DataBX_hdl0x1[i]==null then
     set DataBX_xat0x1[i]=d
     set DataBX_hdl0x1[i]=h
   if 2>DataBX_max[i] then
     set DataBX_max[i]=2
   endif
  elseif DataBX_hdl0x2[i]==h or DataBX_hdl0x2[i]==null then
     set DataBX_xat0x2[i]=d
     set DataBX_hdl0x2[i]=h
   if 3>DataBX_max[i] then
     set DataBX_max[i]=3
   endif
  elseif DataBX_hdl0x3[i]==h or DataBX_hdl0x3[i]==null then
     set DataBX_xat0x3[i]=d
     set DataBX_hdl0x3[i]=h
   if 4>DataBX_max[i] then
     set DataBX_max[i]=4
   endif
  elseif DataBX_hdl0x4[i]==h or DataBX_hdl0x4[i]==null then
     set DataBX_xat0x4[i]=d
     set DataBX_hdl0x4[i]=h
   if 5>DataBX_max[i] then
     set DataBX_max[i]=5
   endif
  elseif DataBX_hdl0x5[i]==h or DataBX_hdl0x5[i]==null then
     set DataBX_xat0x5[i]=d
     set DataBX_hdl0x5[i]=h
   if 6>DataBX_max[i] then
     set DataBX_max[i]=6
   endif
  elseif DataBX_hdl0x6[i]==h or DataBX_hdl0x6[i]==null then
     set DataBX_xat0x6[i]=d
     set DataBX_hdl0x6[i]=h
   if 7>DataBX_max[i] then
     set DataBX_max[i]=7
   endif
  elseif DataBX_hdl0x7[i]==h or DataBX_hdl0x7[i]==null then
     set DataBX_xat0x7[i]=d
     set DataBX_hdl0x7[i]=h
   if 8>DataBX_max[i] then
     set DataBX_max[i]=8
   endif
  elseif DataBX_hdl0x8[i]==h or DataBX_hdl0x8[i]==null then
     set DataBX_xat0x8[i]=d
     set DataBX_hdl0x8[i]=h
   if 9>DataBX_max[i] then
     set DataBX_max[i]=9
   endif
  elseif DataBX_hdl0x9[i]==h or DataBX_hdl0x9[i]==null then
     set DataBX_xat0x9[i]=d
     set DataBX_hdl0x9[i]=h
   if 10>DataBX_max[i] then
     set DataBX_max[i]=10
   endif
  elseif DataBX_hdl0x10[i]==h or DataBX_hdl0x10[i]==null then
     set DataBX_xat0x10[i]=d
     set DataBX_hdl0x10[i]=h
   if 11>DataBX_max[i] then
     set DataBX_max[i]=11
   endif
  elseif DataBX_hdl0x11[i]==h or DataBX_hdl0x11[i]==null then
     set DataBX_xat0x11[i]=d
     set DataBX_hdl0x11[i]=h
   if 12>DataBX_max[i] then
     set DataBX_max[i]=12
   endif
  elseif DataBX_hdl0x12[i]==h or DataBX_hdl0x12[i]==null then
     set DataBX_xat0x12[i]=d
     set DataBX_hdl0x12[i]=h
   if 13>DataBX_max[i] then
     set DataBX_max[i]=13
   endif
  elseif DataBX_hdl0x13[i]==h or DataBX_hdl0x13[i]==null then
     set DataBX_xat0x13[i]=d
     set DataBX_hdl0x13[i]=h
   if 14>DataBX_max[i] then
     set DataBX_max[i]=14
   endif
  elseif DataBX_hdl0x14[i]==h or DataBX_hdl0x14[i]==null then
     set DataBX_xat0x14[i]=d
     set DataBX_hdl0x14[i]=h
   if 15>DataBX_max[i] then
     set DataBX_max[i]=15
   endif
  elseif DataBX_hdl0x15[i]==h or DataBX_hdl0x15[i]==null then
     set DataBX_xat0x15[i]=d
     set DataBX_hdl0x15[i]=h
   if 16>DataBX_max[i] then
     set DataBX_max[i]=16
   endif
  else
     call XAT_echo("|cffff0000I DON'T PLAY SO =/... FUCK OFF !|r")
  endif
endfunction

// function for getting attached data
function GetDataBX takes handle h returns integer
     local integer i=GetHandleId(h)
     set i=i-(i/8191)*8191
  if DataBX_hdl0x0[i]==h or DataBX_hdl0x0[i]==null then
     return DataBX_xat0x0[i]
  elseif DataBX_hdl0x1[i]==h or DataBX_hdl0x1[i]==null then
     return DataBX_xat0x1[i]
  elseif DataBX_hdl0x2[i]==h or DataBX_hdl0x2[i]==null then
     return DataBX_xat0x2[i]
  elseif DataBX_hdl0x3[i]==h or DataBX_hdl0x3[i]==null then
     return DataBX_xat0x3[i]
  elseif DataBX_hdl0x4[i]==h or DataBX_hdl0x4[i]==null then
     return DataBX_xat0x4[i]
  elseif DataBX_hdl0x5[i]==h or DataBX_hdl0x5[i]==null then
     return DataBX_xat0x5[i]
  elseif DataBX_hdl0x6[i]==h or DataBX_hdl0x6[i]==null then
     return DataBX_xat0x6[i]
  elseif DataBX_hdl0x7[i]==h or DataBX_hdl0x7[i]==null then
     return DataBX_xat0x7[i]
  elseif DataBX_hdl0x8[i]==h or DataBX_hdl0x8[i]==null then
     return DataBX_xat0x8[i]
  elseif DataBX_hdl0x9[i]==h or DataBX_hdl0x9[i]==null then
     return DataBX_xat0x9[i]
  elseif DataBX_hdl0x10[i]==h or DataBX_hdl0x10[i]==null then
     return DataBX_xat0x10[i]
  elseif DataBX_hdl0x11[i]==h or DataBX_hdl0x11[i]==null then
     return DataBX_xat0x11[i]
  elseif DataBX_hdl0x12[i]==h or DataBX_hdl0x12[i]==null then
     return DataBX_xat0x12[i]
  elseif DataBX_hdl0x13[i]==h or DataBX_hdl0x13[i]==null then
     return DataBX_xat0x13[i]
  elseif DataBX_hdl0x14[i]==h or DataBX_hdl0x14[i]==null then
     return DataBX_xat0x14[i]
  elseif DataBX_hdl0x15[i]==h or DataBX_hdl0x15[i]==null then
     return DataBX_xat0x15[i]
  endif
     return 0
endfunction

// Clever Clean function...
function RemoveDataBX takes handle h returns nothing
     local integer i=GetHandleId(h)
     set i=i-(i/8191)*8191
  if DataBX_max[i]==0 then
     return
  elseif DataBX_max[i]==1 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=null
     set DataBX_xat0x0[i]=0
     set DataBX_max[i]=0
    else
     return
    endif
  elseif DataBX_max[i]==2 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x1[i]
     set DataBX_xat0x0[i]=DataBX_xat0x1[i]
     set DataBX_hdl0x1[i]=null
     set DataBX_xat0x1[i]=0
     set DataBX_max[i]=1
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=null
     set DataBX_xat0x1[i]=0
     set DataBX_max[i]=1
    else
     return
    endif
  elseif DataBX_max[i]==3 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x2[i]
     set DataBX_xat0x0[i]=DataBX_xat0x2[i]
     set DataBX_hdl0x2[i]=null
     set DataBX_xat0x2[i]=0
     set DataBX_max[i]=2
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x2[i]
     set DataBX_xat0x1[i]=DataBX_xat0x2[i]
     set DataBX_hdl0x2[i]=null
     set DataBX_xat0x2[i]=0
     set DataBX_max[i]=2
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=null
     set DataBX_xat0x2[i]=0
     set DataBX_max[i]=2
    else
     return
    endif
  elseif DataBX_max[i]==4 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x3[i]
     set DataBX_xat0x0[i]=DataBX_xat0x3[i]
     set DataBX_hdl0x3[i]=null
     set DataBX_xat0x3[i]=0
     set DataBX_max[i]=3
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x3[i]
     set DataBX_xat0x1[i]=DataBX_xat0x3[i]
     set DataBX_hdl0x3[i]=null
     set DataBX_xat0x3[i]=0
     set DataBX_max[i]=3
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x3[i]
     set DataBX_xat0x2[i]=DataBX_xat0x3[i]
     set DataBX_hdl0x3[i]=null
     set DataBX_xat0x3[i]=0
     set DataBX_max[i]=3
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=null
     set DataBX_xat0x3[i]=0
     set DataBX_max[i]=3
    else
     return
    endif
  elseif DataBX_max[i]==5 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x4[i]
     set DataBX_xat0x0[i]=DataBX_xat0x4[i]
     set DataBX_hdl0x4[i]=null
     set DataBX_xat0x4[i]=0
     set DataBX_max[i]=4
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x4[i]
     set DataBX_xat0x1[i]=DataBX_xat0x4[i]
     set DataBX_hdl0x4[i]=null
     set DataBX_xat0x4[i]=0
     set DataBX_max[i]=4
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x4[i]
     set DataBX_xat0x2[i]=DataBX_xat0x4[i]
     set DataBX_hdl0x4[i]=null
     set DataBX_xat0x4[i]=0
     set DataBX_max[i]=4
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x4[i]
     set DataBX_xat0x3[i]=DataBX_xat0x4[i]
     set DataBX_hdl0x4[i]=null
     set DataBX_xat0x4[i]=0
     set DataBX_max[i]=4
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=null
     set DataBX_xat0x4[i]=0
     set DataBX_max[i]=4
    else
     return
    endif
  elseif DataBX_max[i]==6 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x5[i]
     set DataBX_xat0x0[i]=DataBX_xat0x5[i]
     set DataBX_hdl0x5[i]=null
     set DataBX_xat0x5[i]=0
     set DataBX_max[i]=5
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x5[i]
     set DataBX_xat0x1[i]=DataBX_xat0x5[i]
     set DataBX_hdl0x5[i]=null
     set DataBX_xat0x5[i]=0
     set DataBX_max[i]=5
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x5[i]
     set DataBX_xat0x2[i]=DataBX_xat0x5[i]
     set DataBX_hdl0x5[i]=null
     set DataBX_xat0x5[i]=0
     set DataBX_max[i]=5
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x5[i]
     set DataBX_xat0x3[i]=DataBX_xat0x5[i]
     set DataBX_hdl0x5[i]=null
     set DataBX_xat0x5[i]=0
     set DataBX_max[i]=5
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x5[i]
     set DataBX_xat0x4[i]=DataBX_xat0x5[i]
     set DataBX_hdl0x5[i]=null
     set DataBX_xat0x5[i]=0
     set DataBX_max[i]=5
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=null
     set DataBX_xat0x5[i]=0
     set DataBX_max[i]=5
    else
     return
    endif
  elseif DataBX_max[i]==7 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x6[i]
     set DataBX_xat0x0[i]=DataBX_xat0x6[i]
     set DataBX_hdl0x6[i]=null
     set DataBX_xat0x6[i]=0
     set DataBX_max[i]=6
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x6[i]
     set DataBX_xat0x1[i]=DataBX_xat0x6[i]
     set DataBX_hdl0x6[i]=null
     set DataBX_xat0x6[i]=0
     set DataBX_max[i]=6
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x6[i]
     set DataBX_xat0x2[i]=DataBX_xat0x6[i]
     set DataBX_hdl0x6[i]=null
     set DataBX_xat0x6[i]=0
     set DataBX_max[i]=6
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x6[i]
     set DataBX_xat0x3[i]=DataBX_xat0x6[i]
     set DataBX_hdl0x6[i]=null
     set DataBX_xat0x6[i]=0
     set DataBX_max[i]=6
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x6[i]
     set DataBX_xat0x4[i]=DataBX_xat0x6[i]
     set DataBX_hdl0x6[i]=null
     set DataBX_xat0x6[i]=0
     set DataBX_max[i]=6
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x6[i]
     set DataBX_xat0x5[i]=DataBX_xat0x6[i]
     set DataBX_hdl0x6[i]=null
     set DataBX_xat0x6[i]=0
     set DataBX_max[i]=6
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=null
     set DataBX_xat0x6[i]=0
     set DataBX_max[i]=6
    else
     return
    endif
  elseif DataBX_max[i]==8 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x7[i]
     set DataBX_xat0x0[i]=DataBX_xat0x7[i]
     set DataBX_hdl0x7[i]=null
     set DataBX_xat0x7[i]=0
     set DataBX_max[i]=7
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x7[i]
     set DataBX_xat0x1[i]=DataBX_xat0x7[i]
     set DataBX_hdl0x7[i]=null
     set DataBX_xat0x7[i]=0
     set DataBX_max[i]=7
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x7[i]
     set DataBX_xat0x2[i]=DataBX_xat0x7[i]
     set DataBX_hdl0x7[i]=null
     set DataBX_xat0x7[i]=0
     set DataBX_max[i]=7
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x7[i]
     set DataBX_xat0x3[i]=DataBX_xat0x7[i]
     set DataBX_hdl0x7[i]=null
     set DataBX_xat0x7[i]=0
     set DataBX_max[i]=7
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x7[i]
     set DataBX_xat0x4[i]=DataBX_xat0x7[i]
     set DataBX_hdl0x7[i]=null
     set DataBX_xat0x7[i]=0
     set DataBX_max[i]=7
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x7[i]
     set DataBX_xat0x5[i]=DataBX_xat0x7[i]
     set DataBX_hdl0x7[i]=null
     set DataBX_xat0x7[i]=0
     set DataBX_max[i]=7
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=DataBX_hdl0x7[i]
     set DataBX_xat0x6[i]=DataBX_xat0x7[i]
     set DataBX_hdl0x7[i]=null
     set DataBX_xat0x7[i]=0
     set DataBX_max[i]=7
    elseif DataBX_hdl0x7[i]==h then
     set DataBX_hdl0x7[i]=null
     set DataBX_xat0x7[i]=0
     set DataBX_max[i]=7
    else
     return
    endif
  elseif DataBX_max[i]==9 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x8[i]
     set DataBX_xat0x0[i]=DataBX_xat0x8[i]
     set DataBX_hdl0x8[i]=null
     set DataBX_xat0x8[i]=0
     set DataBX_max[i]=8
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x8[i]
     set DataBX_xat0x1[i]=DataBX_xat0x8[i]
     set DataBX_hdl0x8[i]=null
     set DataBX_xat0x8[i]=0
     set DataBX_max[i]=8
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x8[i]
     set DataBX_xat0x2[i]=DataBX_xat0x8[i]
     set DataBX_hdl0x8[i]=null
     set DataBX_xat0x8[i]=0
     set DataBX_max[i]=8
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x8[i]
     set DataBX_xat0x3[i]=DataBX_xat0x8[i]
     set DataBX_hdl0x8[i]=null
     set DataBX_xat0x8[i]=0
     set DataBX_max[i]=8
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x8[i]
     set DataBX_xat0x4[i]=DataBX_xat0x8[i]
     set DataBX_hdl0x8[i]=null
     set DataBX_xat0x8[i]=0
     set DataBX_max[i]=8
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x8[i]
     set DataBX_xat0x5[i]=DataBX_xat0x8[i]
     set DataBX_hdl0x8[i]=null
     set DataBX_xat0x8[i]=0
     set DataBX_max[i]=8
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=DataBX_hdl0x8[i]
     set DataBX_xat0x6[i]=DataBX_xat0x8[i]
     set DataBX_hdl0x8[i]=null
     set DataBX_xat0x8[i]=0
     set DataBX_max[i]=8
    elseif DataBX_hdl0x7[i]==h then
     set DataBX_hdl0x7[i]=DataBX_hdl0x8[i]
     set DataBX_xat0x7[i]=DataBX_xat0x8[i]
     set DataBX_hdl0x8[i]=null
     set DataBX_xat0x8[i]=0
     set DataBX_max[i]=8
    elseif DataBX_hdl0x8[i]==h then
     set DataBX_hdl0x8[i]=null
     set DataBX_xat0x8[i]=0
     set DataBX_max[i]=8
    else
     return
    endif
  elseif DataBX_max[i]==10 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x9[i]
     set DataBX_xat0x0[i]=DataBX_xat0x9[i]
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x9[i]
     set DataBX_xat0x1[i]=DataBX_xat0x9[i]
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x9[i]
     set DataBX_xat0x2[i]=DataBX_xat0x9[i]
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x9[i]
     set DataBX_xat0x3[i]=DataBX_xat0x9[i]
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x9[i]
     set DataBX_xat0x4[i]=DataBX_xat0x9[i]
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x9[i]
     set DataBX_xat0x5[i]=DataBX_xat0x9[i]
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=DataBX_hdl0x9[i]
     set DataBX_xat0x6[i]=DataBX_xat0x9[i]
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    elseif DataBX_hdl0x7[i]==h then
     set DataBX_hdl0x7[i]=DataBX_hdl0x9[i]
     set DataBX_xat0x7[i]=DataBX_xat0x9[i]
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    elseif DataBX_hdl0x8[i]==h then
     set DataBX_hdl0x8[i]=DataBX_hdl0x9[i]
     set DataBX_xat0x8[i]=DataBX_xat0x9[i]
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    elseif DataBX_hdl0x9[i]==h then
     set DataBX_hdl0x9[i]=null
     set DataBX_xat0x9[i]=0
     set DataBX_max[i]=9
    else
     return
    endif
  elseif DataBX_max[i]==11 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x0[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x1[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x2[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x3[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x4[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x5[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x6[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x7[i]==h then
     set DataBX_hdl0x7[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x7[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x8[i]==h then
     set DataBX_hdl0x8[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x8[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x9[i]==h then
     set DataBX_hdl0x9[i]=DataBX_hdl0x10[i]
     set DataBX_xat0x9[i]=DataBX_xat0x10[i]
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    elseif DataBX_hdl0x10[i]==h then
     set DataBX_hdl0x10[i]=null
     set DataBX_xat0x10[i]=0
     set DataBX_max[i]=10
    else
     return
    endif
  elseif DataBX_max[i]==12 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x0[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x1[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x2[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x3[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x4[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x5[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x6[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x7[i]==h then
     set DataBX_hdl0x7[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x7[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x8[i]==h then
     set DataBX_hdl0x8[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x8[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x9[i]==h then
     set DataBX_hdl0x9[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x9[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x10[i]==h then
     set DataBX_hdl0x10[i]=DataBX_hdl0x11[i]
     set DataBX_xat0x10[i]=DataBX_xat0x11[i]
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    elseif DataBX_hdl0x11[i]==h then
     set DataBX_hdl0x11[i]=null
     set DataBX_xat0x11[i]=0
     set DataBX_max[i]=11
    else
     return
    endif
  elseif DataBX_max[i]==13 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x0[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x1[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x2[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x3[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x4[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x5[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x6[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x7[i]==h then
     set DataBX_hdl0x7[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x7[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x8[i]==h then
     set DataBX_hdl0x8[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x8[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x9[i]==h then
     set DataBX_hdl0x9[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x9[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x10[i]==h then
     set DataBX_hdl0x10[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x10[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x11[i]==h then
     set DataBX_hdl0x11[i]=DataBX_hdl0x12[i]
     set DataBX_xat0x11[i]=DataBX_xat0x12[i]
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    elseif DataBX_hdl0x12[i]==h then
     set DataBX_hdl0x12[i]=null
     set DataBX_xat0x12[i]=0
     set DataBX_max[i]=12
    else
     return
    endif
  elseif DataBX_max[i]==14 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x0[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x1[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x2[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x3[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x4[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x5[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x6[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x7[i]==h then
     set DataBX_hdl0x7[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x7[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x8[i]==h then
     set DataBX_hdl0x8[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x8[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x9[i]==h then
     set DataBX_hdl0x9[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x9[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x10[i]==h then
     set DataBX_hdl0x10[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x10[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x11[i]==h then
     set DataBX_hdl0x11[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x11[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x12[i]==h then
     set DataBX_hdl0x12[i]=DataBX_hdl0x13[i]
     set DataBX_xat0x12[i]=DataBX_xat0x13[i]
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    elseif DataBX_hdl0x13[i]==h then
     set DataBX_hdl0x13[i]=null
     set DataBX_xat0x13[i]=0
     set DataBX_max[i]=13
    else
     return
    endif
  elseif DataBX_max[i]==15 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x0[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x1[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x2[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x3[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x4[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x5[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x6[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x7[i]==h then
     set DataBX_hdl0x7[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x7[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x8[i]==h then
     set DataBX_hdl0x8[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x8[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x9[i]==h then
     set DataBX_hdl0x9[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x9[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x10[i]==h then
     set DataBX_hdl0x10[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x10[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x11[i]==h then
     set DataBX_hdl0x11[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x11[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x12[i]==h then
     set DataBX_hdl0x12[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x12[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x13[i]==h then
     set DataBX_hdl0x13[i]=DataBX_hdl0x14[i]
     set DataBX_xat0x13[i]=DataBX_xat0x14[i]
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    elseif DataBX_hdl0x14[i]==h then
     set DataBX_hdl0x14[i]=null
     set DataBX_xat0x14[i]=0
     set DataBX_max[i]=14
    else
     return
    endif
  elseif DataBX_max[i]==16 then
    if DataBX_hdl0x0[i]==h then
     set DataBX_hdl0x0[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x0[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x1[i]==h then
     set DataBX_hdl0x1[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x1[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x2[i]==h then
     set DataBX_hdl0x2[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x2[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x3[i]==h then
     set DataBX_hdl0x3[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x3[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x4[i]==h then
     set DataBX_hdl0x4[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x4[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x5[i]==h then
     set DataBX_hdl0x5[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x5[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x6[i]==h then
     set DataBX_hdl0x6[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x6[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x7[i]==h then
     set DataBX_hdl0x7[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x7[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x8[i]==h then
     set DataBX_hdl0x8[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x8[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x9[i]==h then
     set DataBX_hdl0x9[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x9[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x10[i]==h then
     set DataBX_hdl0x10[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x10[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x11[i]==h then
     set DataBX_hdl0x11[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x11[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x12[i]==h then
     set DataBX_hdl0x12[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x12[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x13[i]==h then
     set DataBX_hdl0x13[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x13[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x14[i]==h then
     set DataBX_hdl0x14[i]=DataBX_hdl0x15[i]
     set DataBX_xat0x14[i]=DataBX_xat0x15[i]
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    elseif DataBX_hdl0x15[i]==h then
     set DataBX_hdl0x15[i]=null
     set DataBX_xat0x15[i]=0
     set DataBX_max[i]=15
    else
     return
    endif
  else
    return
  endif 
endfunction


//#####################################
//        CREATE FUNCTION SET 
//#####################################


//##########################################

//##########################################

// Intialize function set
// will generate...

// function SetDataBX takes handle h,integer d returns nothing
// h = your object, d = data what you need to attach currently an integer (but you can simple attach something else by intialazing a another textmacro...)

// function GetDataBX takes handle h returns integer
// h = your object will return currently attached data (integer)

// function RemoveDataBX takes handle h returns nothing
// h = your object will clear the data (free slot what can be used (maybe) by other objects) so don't forget to clear it. ;)

function Debug takes string value returns nothing
    call DisplayTextToPlayer( DebugPlayer, 0.00, 0.00, value )
endfunction

function I2Sx takes integer id, integer key returns string
    return GetAbilityEffectById(id,bj_lastUsedEffect,key)
endfunction

function I2T takes integer TimerId returns timer
    call SaveFogStateHandle( gg_htb_HashData,0,0,ConvertFogState( TimerId - offset ) )
    return LoadTimerHandle( gg_htb_HashData,0,0 )
endfunction

function DisposeTrigger takes trigger t returns nothing
    set nTriggerIndex = nTriggerIndex + 1
    set DispTriggers[nTriggerIndex] = t
    set Elapsed[nTriggerIndex] = TimerGetElapsed( DispTimer ) + 60
    if nTriggerIndex > 8000 then
        call BJDebugMsg(DEBUG + I2Sx( 'A05M', 1) )
        call BJDebugMsg(INFO)
    endif
endfunction

struct DamageData
unit attacker
unit attacked
unit dummy
real dmg
real hp
real c
effect fx
integer id
integer time
real rx
real ry
player pl
group grp
timer trix
boolean IsCheck

method clear takes nothing returns nothing
    set this.attacker = null
    set this.attacked = null
    set this.dummy = null
    set this.dmg = 0.00
    set this.hp = 0.00
    set this.id = 0
    set this.time = 0
    set this.fx = null
    set this.grp = null
    set this.trix = null
    set this.IsCheck = false
endmethod

endstruct

struct TextTag

    texttag tt
    player pl
    integer Alpha
    real tx
    real ty


    method clear takes nothing returns nothing
        set this.tt = null
        set this.pl = null
        set this.Alpha = 0
        set this.tx = 0.00
        set this.ty = 0.00
    endmethod


endstruct

function TextTagAlpha takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    local TextTag st = GetDataBX( t )
    
    if IsVisibleToPlayer( st.tx, st.ty, GetLocalPlayer( ) ) then
        call SetTextTagVisibility( st.tt, true )
    else
        call SetTextTagVisibility( st.tt, false )
    endif
    
    if ( st.Alpha >= 255 ) then
        call PauseTimer( t )
        call RemoveDataBX( t )
        call DestroyTextTag( st.tt )
        call DestroyTimer( t )
        call st.clear( )
        call st.destroy( )
    else
        set st.Alpha = st.Alpha + 3
        if st.Alpha > 255 then
            set st.Alpha = 255
        endif
        call SetTextTagColor( st.tt, 255, 255, 255, 255 - st.Alpha )
    endif
        
    set t = null
endfunction

function FloatingTextFadeout takes player pl, unit whichUnit, string str returns nothing
    local timer t = CreateTimer( )
    local TextTag st = TextTag.create( )
     
    set st.tt = CreateTextTag( )
    set st.tx = GetUnitX( whichUnit )
    set st.ty = GetUnitY( whichUnit )
    set st.Alpha = 7
    set st.pl = pl
    call SetDataBX( t, st )
    
    call SetTextTagText( st.tt, str, 0.023 )
    call SetTextTagPos( st.tt, st.tx, st.ty, 60.00 )
    call SetTextTagVelocity( st.tt, 0.00, 0.035 )
    call SetTextTagColor( st.tt, 0, 0, 0, 255 )
    call SetTextTagPermanent( st.tt, false )
    call SetTextTagVisibility( st.tt, false )
    
    if ( GetLocalPlayer( ) == pl and pl != Player( 12 ) ) then
        call SetTextTagVisibility( st.tt, true )
    elseif ( pl == Player( 12 ) ) then
        call SetTextTagVisibility( st.tt, true )
    endif
    
    call TimerStart( t, 0.05, true, function TextTagAlpha )
    
    set t = null
endfunction

struct TriggerData extends DamageData
trigger trg
triggeraction tra
triggercondition trc
integer ExCount
item vial

method RemoveTrigger takes nothing returns nothing
    call RemoveDataBX( this.trg )
    call RemoveDataBX( this.trix )

    if IsTriggerEnabled( this.trg ) then
        call DisableTrigger( this.trg )
    endif
    
    call TriggerRemoveCondition( this.trg, this.trc )
    call TriggerRemoveAction( this.trg, this.tra )
    call TriggerClearActions( this.trg )
    call TriggerClearConditions( this.trg )
   
    if this.trix != null then
        call DestroyTimer( this.trix )
    endif
    
    call DisposeTrigger( this.trg )
    
    set this.attacker = null
    set this.attacked = null
    set this.trg = null
    set this.trc = null
    set this.tra = null
    set this.trix = null
    set this.pl = null
    set this.dmg = 0.00
    set this.c = 0.00
    set this.time = 0
    
    return
endmethod

endstruct


endlibrary
'A06V' - способность на основе абилки рунных браслетов, фактор снижени урона от магии 2.
'A081' - способность на основе абилки "Благословение Эллуны", фактор снижения урона от магии тот же, применяется для иллюзий.
Принятый ответ
7
quq_CCCP, Таааааааааааак) сам принцип работы манабёрна и реализацию я понял, единственное, если есть возможность, можно поподробней про DataBX и что, к чему, когда суммонятся иллюзии
call TriggerRegisterUnitEvent( gg_trg_Summon_Manaburn_Images, Runner, EVENT_UNIT_SUMMON )
И откуда константы типо 1.34 и 0.405?
32
M1n3rva:
quq_CCCP, Таааааааааааак) сам принцип работы манабёрна и реализацию я понял, единственное, если есть возможность, можно поподробней про DataBX и что, к чему, когда суммонятся иллюзии
call TriggerRegisterUnitEvent( gg_trg_Summon_Manaburn_Images, Runner, EVENT_UNIT_SUMMON )
И откуда константы типо 1.34 и 0.405?
DataBX - аттач целочисленной к хендлу, можно использовать вместо SetDataBX SaveInteger( hashtable, GetHanldeId(h), 0, value )
call TriggerRegisterUnitEvent( gg_trg_Summon_Manaburn_Images, Runner, EVENT_UNIT_SUMMON ) - это для того чтобы в будушем повешать на иллюзиии событие - юнит получает урон, т.к манабурн работает у иллюзий.
1.34 это фактор урона, чтобы получить полный магический урон без учета стандартного маг резиста героя 25%, ибо для работы магического урона как следует, мы блокируем отрецательный урон снижением хп и наносим магический урон, предварительно удалив скилл маг резиста, так же вычитая маг резист, ибо рунные браслеты складываются с базовым маг резистом героя.
0.405 - порог здоровья живого юнита, если у юнита осталось менее чем 0.405 хп после урона, то значит он уже умер, и вручать ему абилку для ослеживания урона бессмыслено да и опасно что либо делать с суммонами,они быстро удаляются из памяти и попытка вручить им способность или что то изменить может закончится фаталом.
30
quq_CCCP, очень сложная реализация, можно было сделать намного проще и в на порядок меньше строк. Впрочем, работает и ладно.
С другой стороны, действительно есть момент, что могут быть использованы стандартные способности, тогда сложнее.
32
Clamp:
quq_CCCP, очень сложная реализация, можно было сделать намного проще и в на порядок меньше строк. Впрочем, работает и ладно.
С другой стороны, действительно есть момент, что могут быть использованы стандартные способности, тогда сложнее.
Пришлось, рад бы попроще но пришлось, условия такие.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.