32

» WarCraft 3 / Карты путей

Карта путей - квадрат кратный 8, вот и все. Особого проку рисовать их нету, близзы и так уже нарисовали все что можно - выбираем из стандартных. Так же можно использовать блокираторы путей.
32

» WarCraft 3 / Анимации и сценки.

FREZIX:
Какой добрый форум, спасибо. Все такие умники. Если бы я знал как это делать, я бы не задавал сюда вопрос. Ибо не знаю наизусть все триггеры.
Открываем стандартные карты близзов с роликами и смотрим как оно там реализовано, а так же читаем комментарии.
Ролики включают тучу функуций и фишек, тут нужно иметь терпение - пока сам все не опробуешь и не поймешь, норм ролика не получится.
32

» WarCraft 3 / Дамми

Наверное не создается даммик, ну или пауза - (даммиков паузить низя, будут баги)
32

» WarCraft 3 / Отрицательная высота

Просто нельзя установить высоту юниту меньше чем у него установлено в РО, там есть поля Минимальная и Максимальная высота, в минимум пишем -100500 и радуемся.
32

» WarCraft 3 / Не могу решить задачу при создании спелла

nvc123:
quq_CCCP, каким?
Баг морфов, баг паузы и состояния "Страж" ( увы второе рализуемо только ретурн багом )
Баг моров - это руна с метаморфозой демон хантера, сама метаморфоза обнулена - все параметры в 0, начальная и конечная форма дамми герой, флаг не прирываемый.
Если такую руну вручить герою то он будет выполнять первый отданный приказ не смотря не начно, карта команд будет активно но толку тыкать на кнопки небудет, герой будет игнорировать другие приказы.
Прервать это состояние может только другой морф, выполненный до конца.
32

» WarCraft 3 / как добавить юниту маны

Открываеш карту Extrime Candy Wars 2004 от Blizzard там в папке debug есть триггеры читов, которые то устанавливают юниту хп то скорость, переделай под ману и будет тебе счастье.
32

» WarCraft 3 / Предметы при использовании перекрывают эффекты друг друга

Большинство абилок с баффами не складываются, сделай похищение жизни - на основе ауры вампиризма (если юнит мили) ну или сделай бонус урона на основе Рева друидов-медведей у ночных эльфов.
Складываются только стрелы яда\холода, яды (еще от настроек зависит), всякие предметные хилки на хп и мп (и то если в в настройках указанные разные баффы )
Так же не перебивают друг-друга баффы аур (на оной основе можно сделать хоть 100500 аур с разными баффами и все они будут висеть на юните давая бонусы, не перебивая друг-друга).
32

» WarCraft 3 / Описания способностей и Data

<AEar,DataA2,%> - функция авто заполнения, вспомни формулы в Microsoft Excel, тут это тоже самое - сделано это для удобного авто заполнения многоуровневых способностей \ апгрейдов и так далее.
Увы эти формулы берут данные только из slk таблицы (где и хранятся все данные способностей) ну или из текстовых файлов нестандартных объектов.
Увы но пока динамической смены описания способностей я не видел, хотя сейчас вновь доступен ретурн баг.
32

» WarCraft 3 / Замена героя без увеличения лимита

Морфы - не не слышал?
Перед морфом героя нужно выбросит на землю все предметы, а после подобрать - чтобы не было бага с бонусами, при морфах бонусы от аур\баффов\предметов не пересчитываются и насрать что у одного героя 10 атаки а у второго 100, аура Боевой Дух как давала +1 дмг так и дает, имейте это ввиду при морфах героя)
Для мгновенного изменения героя сойдет - руна со способностью 'Aave' - обсидиановая статуя.
32

» WarCraft 3 / Как делать спеллы, урон которых будет зависеть от стат?

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

» WarCraft 3 / Локальная игра

Типа как игрок играет сам с собой?
GetLocalPlayer() + PreloadGenEnd()
Мы можем локально загрузить данные из *.pld файла с диска игрока, узнав что у всех игроков данные одинаковы можно сделать вывод что мы играем сами с собой по сети...
32

» WarCraft 3 / Смена имени героя во время игры

Динамически изменять имя юнита в процессе игры на какое хочется нельзя, стандартными средствами.
Сейчас снова доступен ретурн баг и в теории, можно найти строку с именем по хешу и написать туда что вздумаетсяя, но вот реальных примеров этого я пока не видел, да и нет гарантий что не вылетит фатал после таких игрушек с строками.
32

» WarCraft 3 / нормально ли такое юзать?

Не знаю нафига вам плодить локал группы?
1 Глобальную группу для мгновенных действий, примеру пикнут всех в аое и нанести дмг.
2 Для долго хранящихся групп, к примеру группы для триггерных скиллов по типу Волна Силы где группа хранит уже попавшихся на время полета волны юзайте GroupUtils или прочие ресайклы групп, быстро и удобно.
Ах да, фильтры быстрее вашего перебора с проверкой в цикле, создайте N фильтров на все сулучаи жизни и юзайте на здоровье.
вот пример:

globals 
	boolexpr OnlyEnemy = null
	unit bj_lastFilterUnit = null
endglobals


function EnemyFilter takes nothing returns boolean
    set bj_lastFilterUnit = GetFilterUnit( )
    return GetUnitState( bj_lastFilterUnit, UNIT_STATE_LIFE ) > 0.405 and IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and not( IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MAGIC_IMMUNE ) or IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MECHANICAL ) or IsUnitInvulnerable( bj_lastFilterUnit ) )
endfunction

function init takes nothing returns nothing
	set OnlyEnemy = Condition( function EnemyFilter )
endfunction
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 - убирает все элементы интерфейса, ну а там уже делай что хочешь когда зашипишишь фрапсом видео.