Карта путей - квадрат кратный 8, вот и все. Особого проку рисовать их нету, близзы и так уже нарисовали все что можно - выбираем из стандартных. Так же можно использовать блокираторы путей.
Какой добрый форум, спасибо. Все такие умники. Если бы я знал как это делать, я бы не задавал сюда вопрос. Ибо не знаю наизусть все триггеры.
Открываем стандартные карты близзов с роликами и смотрим как оно там реализовано, а так же читаем комментарии.
Ролики включают тучу функуций и фишек, тут нужно иметь терпение - пока сам все не опробуешь и не поймешь, норм ролика не получится.
Просто нельзя установить высоту юниту меньше чем у него установлено в РО, там есть поля Минимальная и Максимальная высота, в минимум пишем -100500 и радуемся.
Баг морфов, баг паузы и состояния "Страж" ( увы второе рализуемо только ретурн багом )
Баг моров - это руна с метаморфозой демон хантера, сама метаморфоза обнулена - все параметры в 0, начальная и конечная форма дамми герой, флаг не прирываемый.
Если такую руну вручить герою то он будет выполнять первый отданный приказ не смотря не начно, карта команд будет активно но толку тыкать на кнопки небудет, герой будет игнорировать другие приказы.
Прервать это состояние может только другой морф, выполненный до конца.
Открываеш карту Extrime Candy Wars 2004 от Blizzard там в папке debug есть триггеры читов, которые то устанавливают юниту хп то скорость, переделай под ману и будет тебе счастье.
Большинство абилок с баффами не складываются, сделай похищение жизни - на основе ауры вампиризма (если юнит мили) ну или сделай бонус урона на основе Рева друидов-медведей у ночных эльфов.
Складываются только стрелы яда\холода, яды (еще от настроек зависит), всякие предметные хилки на хп и мп (и то если в в настройках указанные разные баффы )
Так же не перебивают друг-друга баффы аур (на оной основе можно сделать хоть 100500 аур с разными баффами и все они будут висеть на юните давая бонусы, не перебивая друг-друга).
<AEar,DataA2,%> - функция авто заполнения, вспомни формулы в Microsoft Excel, тут это тоже самое - сделано это для удобного авто заполнения многоуровневых способностей \ апгрейдов и так далее.
Увы эти формулы берут данные только из slk таблицы (где и хранятся все данные способностей) ну или из текстовых файлов нестандартных объектов.
Увы но пока динамической смены описания способностей я не видел, хотя сейчас вновь доступен ретурн баг.
Морфы - не не слышал?
Перед морфом героя нужно выбросит на землю все предметы, а после подобрать - чтобы не было бага с бонусами, при морфах бонусы от аур\баффов\предметов не пересчитываются и насрать что у одного героя 10 атаки а у второго 100, аура Боевой Дух как давала +1 дмг так и дает, имейте это ввиду при морфах героя)
Для мгновенного изменения героя сойдет - руна со способностью 'Aave' - обсидиановая статуя.
Такие спеллы делаются только триггерно, тоесть если даже вам нужен стандартный спелл, то делаем его триггерную копию и наносим урон какой нам хочется...
Типа как игрок играет сам с собой?
GetLocalPlayer() + PreloadGenEnd()
Мы можем локально загрузить данные из *.pld файла с диска игрока, узнав что у всех игроков данные одинаковы можно сделать вывод что мы играем сами с собой по сети...
Динамически изменять имя юнита в процессе игры на какое хочется нельзя, стандартными средствами.
Сейчас снова доступен ретурн баг и в теории, можно найти строку с именем по хешу и написать туда что вздумаетсяя, но вот реальных примеров этого я пока не видел, да и нет гарантий что не вылетит фатал после таких игрушек с строками.
Не знаю нафига вам плодить локал группы?
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
Там суть в том что локалка и глобалка имеет то же имя, но разные типы и обе ретурнятся, тут и нужен новый вжасс, старый выдаст ошибку.
Что бы писать что то в код надо возиться с массивом, щяс ретурн баг не столь изичный.
Привет работает, но почему то code идет в памяти не 1 к 1 а как в помойном ведре, 1000 ед. Разница в ид кода... раньше я помню проверял на 1.21 в строчку 1280001, 1280002 и так далее шли ссылки на акшены триггеров...
Распаковать pjass.exe в папку с jngp, точнее Jass New Gen Pack 5d Exp2\jasshelper\pjass.exe
Никак захотелось ретурн багом побаловаться? Зачем тебе это если ты pjass "обновить" не сможешь?
quq_CCCP, очень сложная реализация, можно было сделать намного проще и в на порядок меньше строк. Впрочем, работает и ладно.
С другой стороны, действительно есть момент, что могут быть использованы стандартные способности, тогда сложнее.
Пришлось, рад бы попроще но пришлось, условия такие.
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 хп после урона, то значит он уже умер, и вручать ему абилку для ослеживания урона бессмыслено да и опасно что либо делать с суммонами,они быстро удаляются из памяти и попытка вручить им способность или что то изменить может закончится фаталом.
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' - способность на основе абилки "Благословение Эллуны", фактор снижения урона от магии тот же, применяется для иллюзий.
» WarCraft 3 / Карты путей
» WarCraft 3 / Анимации и сценки.
» WarCraft 3 / Анимации и сценки.
Ролики включают тучу функуций и фишек, тут нужно иметь терпение - пока сам все не опробуешь и не поймешь, норм ролика не получится.
» WarCraft 3 / Дамми
» WarCraft 3 / Отрицательная высота
» WarCraft 3 / Не могу решить задачу при создании спелла
» WarCraft 3 / Не могу решить задачу при создании спелла
Баг моров - это руна с метаморфозой демон хантера, сама метаморфоза обнулена - все параметры в 0, начальная и конечная форма дамми герой, флаг не прирываемый.
Если такую руну вручить герою то он будет выполнять первый отданный приказ не смотря не начно, карта команд будет активно но толку тыкать на кнопки небудет, герой будет игнорировать другие приказы.
Прервать это состояние может только другой морф, выполненный до конца.
» WarCraft 3 / как добавить юниту маны
» WarCraft 3 / Не могу решить задачу при создании спелла
» WarCraft 3 / Предметы при использовании перекрывают эффекты друг друга
Складываются только стрелы яда\холода, яды (еще от настроек зависит), всякие предметные хилки на хп и мп (и то если в в настройках указанные разные баффы )
Так же не перебивают друг-друга баффы аур (на оной основе можно сделать хоть 100500 аур с разными баффами и все они будут висеть на юните давая бонусы, не перебивая друг-друга).
» WarCraft 3 / Описания способностей и Data
Увы эти формулы берут данные только из slk таблицы (где и хранятся все данные способностей) ну или из текстовых файлов нестандартных объектов.
Увы но пока динамической смены описания способностей я не видел, хотя сейчас вновь доступен ретурн баг.
» WarCraft 3 / Старые карты с ретурн багом (I2C)
» WarCraft 3 / Замена героя без увеличения лимита
Перед морфом героя нужно выбросит на землю все предметы, а после подобрать - чтобы не было бага с бонусами, при морфах бонусы от аур\баффов\предметов не пересчитываются и насрать что у одного героя 10 атаки а у второго 100, аура Боевой Дух как давала +1 дмг так и дает, имейте это ввиду при морфах героя)
Для мгновенного изменения героя сойдет - руна со способностью 'Aave' - обсидиановая статуя.
» WarCraft 3 / Как делать спеллы, урон которых будет зависеть от стат?
» WarCraft 3 / Иконка
» WarCraft 3 / Локальная игра
GetLocalPlayer() + PreloadGenEnd()
Мы можем локально загрузить данные из *.pld файла с диска игрока, узнав что у всех игроков данные одинаковы можно сделать вывод что мы играем сами с собой по сети...
» WarCraft 3 / Смена имени героя во время игры
Сейчас снова доступен ретурн баг и в теории, можно найти строку с именем по хешу и написать туда что вздумаетсяя, но вот реальных примеров этого я пока не видел, да и нет гарантий что не вылетит фатал после таких игрушек с строками.
» WarCraft 3 / Катаклизмы
» WarCraft 3 / нормально ли такое юзать?
1 Глобальную группу для мгновенных действий, примеру пикнут всех в аое и нанести дмг.
2 Для долго хранящихся групп, к примеру группы для триггерных скиллов по типу Волна Силы где группа хранит уже попавшихся на время полета волны юзайте GroupUtils или прочие ресайклы групп, быстро и удобно.
Ах да, фильтры быстрее вашего перебора с проверкой в цикле, создайте N фильтров на все сулучаи жизни и юзайте на здоровье.
вот пример:
» WarCraft 3 / Как обновить PJass
Что бы писать что то в код надо возиться с массивом, щяс ретурн баг не столь изичный.
Привет работает, но почему то code идет в памяти не 1 к 1 а как в помойном ведре, 1000 ед. Разница в ид кода... раньше я помню проверял на 1.21 в строчку 1280001, 1280002 и так далее шли ссылки на акшены триггеров...
» WarCraft 3 / Как обновить PJass
Никак захотелось ретурн багом побаловаться? Зачем тебе это если ты pjass "обновить" не сможешь?
» WarCraft 3 / Система отлова ударов
» WarCraft 3 / Система отлова ударов
call TriggerRegisterUnitEvent( gg_trg_Summon_Manaburn_Images, Runner, EVENT_UNIT_SUMMON ) - это для того чтобы в будушем повешать на иллюзиии событие - юнит получает урон, т.к манабурн работает у иллюзий.
1.34 это фактор урона, чтобы получить полный магический урон без учета стандартного маг резиста героя 25%, ибо для работы магического урона как следует, мы блокируем отрецательный урон снижением хп и наносим магический урон, предварительно удалив скилл маг резиста, так же вычитая маг резист, ибо рунные браслеты складываются с базовым маг резистом героя.
0.405 - порог здоровья живого юнита, если у юнита осталось менее чем 0.405 хп после урона, то значит он уже умер, и вручать ему абилку для ослеживания урона бессмыслено да и опасно что либо делать с суммонами,они быстро удаляются из памяти и попытка вручить им способность или что то изменить может закончится фаталом.
Ред. quq_CCCP
» WarCraft 3 / Система отлова ударов
'A081' - способность на основе абилки "Благословение Эллуны", фактор снижения урона от магии тот же, применяется для иллюзий.
» WarCraft 3 / Интерфейс черный