32

» WarCraft 3 / Как обновить PJass

Там суть в том что локалка и глобалка имеет то же имя, но разные типы и обе ретурнятся, тут и нужен новый вжасс, старый выдаст ошибку.
Что бы писать что то в код надо возиться с массивом, щяс ретурн баг не столь изичный.
Привет работает, но почему то code идет в памяти не 1 к 1 а как в помойном ведре, 1000 ед. Разница в ид кода... раньше я помню проверял на 1.21 в строчку 1280001, 1280002 и так далее шли ссылки на акшены триггеров...
32

» WarCraft 3 / Как обновить PJass

Распаковать pjass.exe в папку с jngp, точнее Jass New Gen Pack 5d Exp2\jasshelper\pjass.exe
Никак захотелось ретурн багом побаловаться? Зачем тебе это если ты pjass "обновить" не сможешь?
32

» WarCraft 3 / Система отлова ударов

Clamp:
quq_CCCP, очень сложная реализация, можно было сделать намного проще и в на порядок меньше строк. Впрочем, работает и ладно.
С другой стороны, действительно есть момент, что могут быть использованы стандартные способности, тогда сложнее.
Пришлось, рад бы попроще но пришлось, условия такие.
32

» WarCraft 3 / Система отлова ударов

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 хп после урона, то значит он уже умер, и вручать ему абилку для ослеживания урона бессмыслено да и опасно что либо делать с суммонами,они быстро удаляются из памяти и попытка вручить им способность или что то изменить может закончится фаталом.
32

» WarCraft 3 / Система отлова ударов

Принятый ответ
сам мана бурн.
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

» WarCraft 3 / Интерфейс черный

Принятый ответ
Cimatic mode - убирает все элементы интерфейса, ну а там уже делай что хочешь когда зашипишишь фрапсом видео.
32

» WarCraft 3 / Система отлова ударов

Могу скинуть свой кастом манабурн - использует рунные браслеты, учитывает все маг резисты как положено.
32

» WarCraft 3 / Как заблокировать героя на время каста?

Блин что ты чепуха несешь, ты хоть читал про морфы? Когда герой начинает кассовая огненный столб вручай, руну с морфом.
32

» WarCraft 3 / Как заблокировать героя на время каста?

Принятый ответ
У морфов есть параметр - неприрываемый это особое состояние юнита, которое нужно чтобы юнит докастовал заклинание в любом случае (если что то метаморфоза это 2 каста скилла, в альтернативную форму и обратно и у обоих есть время каста)
Ну собственно нам нужен скилл на основе морфа демон хантера "Перевоплощение"", начальная и конечная форма - дамми герой, остальные параметры в 0, суем этот скилл в руну а руну вручаем нужному герою и тут же отдаем приказ качтовать что то....
Результат - герой будет кастовать скилл, игнорируя всех и вся, иконки скиллов будут активны, но хоть закликайся.
Выйти из этого состояния можно только одним способом - выполнить любой морф как следует до конка, подходит для этого 'Aave' - Avenger form (морф сфинкса)
32

» WarCraft 3 / перенос нестандартных единиц

Принятый ответ
Misha24:
нестандартных единиц с нестандартными моделями
я через редактор кампаний нажимал на одну миссию правой кнопкой редактировать
потом я сохранял карту отдельно
когда варике открываю карту то все юниты теряют свои модели на стандартные
как мне сделать чтобы модели и все прочее сохранялось
Карту нужно запаковать в архив компании.
32

» WarCraft 3 / Старые карты с ретурн багом (I2C)

Ктонить может мне скинуть микс, который по нажатию пробела вызывает одну тока строчку Preloader(""save//mydata.pld'')
?
Тоже загорелся экспериментами.
darkowlom:
Alexander12, интересно! Свяжись с автором темы на хайве, он выложил код на чтение памяти, но не на запись, как я понял, хотя в тексте упомянул о том что возможна и запись.
Хотя я думаю сам принцип можно почерпнуть из кода
Если я правильно понял эту строку, то при помощи ForForce можно выполнить байткод из массива
Of course, you can only use direct calls to execute valid functions, you can't call the middle of a function or execute bytecode from an array with this method, that is only possible with things like ForForce.
В общем решил попробовать, скачал экспериментальный пжасс, заменил, но это дело все арвно не компилируется, адикхелпер засыпаетмеян ошибками, хотя поидее не должен. Пробовал кто с этим разобраться?
Сжасс отруби, тока вжасс - сохраняется тогда норм.
32

» WarCraft 3 / Старые карты с ретурн багом (I2C)

Не через для, а через код карты...
Ссылка выше, там описан ретурн баг на код
32

» WarCraft 3 / Динамическое добавление классификации

ну вадом сделать низя, а вот добавить\удалить москитов можно чтобы юнит не попадал в выбор, но атаковать автоатакой его будут исправно.
32

» WarCraft 3 / Старые карты с ретурн багом (I2C)

Андреич:
баг возможен на 1.24+
стоп, а разве его как раз не удалили на 1.24+..?
Как выяснилось его криво пофиксили. Т.е убрали возможность написать 2 оператора ретурн, а лазить по памяти варкравта можно до сих пор, как собственно и обойти защиту и делать все что хочется...
32

» WarCraft 3 / Как заблокировать героя на время каста?

Ну либо брать для основы - канал ( параметры отключить прочие способности) , ибо баг с морфом ( тогда не нужно делать 100500 каналов) но реализация посложнее.
32

» WarCraft 3 / Старые карты с ретурн багом (I2C)

Принятый ответ
Вот линк, короче ретурн баг возможен на 1.24+
Где же наш Toadcop который это обнаружил?
32

» WarCraft 3 / Dmg

Принятый ответ
Ну создать триггер, которому добавить событие - Юнит получает урон (ссылка на конкретного юнита), если юнит заранее не известен то добавляем событие юнитам по мере их появления...
Условие - урон больше 0.00 Источник урона = Тот кто надо
Действие - плавающий текст над головой юнита Конвертируем вещественное в строку ( кол-во полученного урона)
Как то так, помнится была такая наработка на сайте но вот не помню название.
32

» WarCraft 3 / [JASS] Динамическое изменение параметров

Ну 100500 уровней скилла, 1 уровень -100 ренжа, 2 уровня - 200 ренжа и так далее.
Или скилл на основе 'Aneg' (герои онли) ну и 100500 версий одного и того же скилла, просто меняем уровень и все.
32

» WarCraft 3 / Динамическое добавление классификации

Есть другие способы убрать отображение способностей юнита.
Поделитесь мыслями что вы собрались сделать, зачем именно стражем сделать юнита?
32

» WarCraft 3 / Динамическое добавление классификации

Принятый ответ
Как это нету, в гуях есть эта функция: Раздел - Боевая единица, почти самый низ.
Удалить классификацию уже поставиленную в ро низя, как и поставить полноценную классификацию юниту у которого она не установлена в РО, к примеру работник сделанный триггерно будет проходить проверку - работник но не будет отображаться как незанятый работник, когда он стоит на месте.
Загруженные файлы
32

» WarCraft 3 / Боевой голем-статуя

Clamp:
если ты на этого юнита потерял ссылку что делать?
Хранить лучше.
quq_CCCP:
юнита и декорацию
Ещё раз, зачем декорацию? Если описанный выше вариант действительно убирает москитов (не проверял), то можно просто юнита. Будет даже круче, лага анимации не возникнет.
До до, москиты то удаляются, но юнита не выделить + ни 1 скиллом не наведешь, будут бить автоатакой - избавится от этого можно только морфом, т.е сначала хайднули юнита, удалили москитов, анхайднули и вручили любой морф в другого юнита, тогда да - москиты будут удалены без последствий.
Иначе юнита будут бить автоатакой, но сам он как инвизер не выдели его, не наведи на него скилл.
32

» WarCraft 3 / Боевой голем-статуя

Я бы сделал вовсе юнита и декорацию, похожую на голема, сделал бы арку (разрушаемую) влепил туда голема декорацию (разрушаемую) и все, как буд то статуя в стенке, нечем не выделяется - а затем бы удалил декор и создал в том месте обычного голема, все красиво и хрен догадаешься что эта статуя оживает.