Там суть в том что локалка и глобалка имеет то же имя, но разные типы и обе ретурнятся, тут и нужен новый вжасс, старый выдаст ошибку.
Что бы писать что то в код надо возиться с массивом, щяс ретурн баг не столь изичный.
Привет работает, но почему то 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' - способность на основе абилки "Благословение Эллуны", фактор снижения урона от магии тот же, применяется для иллюзий.
У морфов есть параметр - неприрываемый это особое состояние юнита, которое нужно чтобы юнит докастовал заклинание в любом случае (если что то метаморфоза это 2 каста скилла, в альтернативную форму и обратно и у обоих есть время каста)
Ну собственно нам нужен скилл на основе морфа демон хантера "Перевоплощение"", начальная и конечная форма - дамми герой, остальные параметры в 0, суем этот скилл в руну а руну вручаем нужному герою и тут же отдаем приказ качтовать что то....
Результат - герой будет кастовать скилл, игнорируя всех и вся, иконки скиллов будут активны, но хоть закликайся.
Выйти из этого состояния можно только одним способом - выполнить любой морф как следует до конка, подходит для этого 'Aave' - Avenger form (морф сфинкса)
нестандартных единиц с нестандартными моделями
я через редактор кампаний нажимал на одну миссию правой кнопкой редактировать
потом я сохранял карту отдельно
когда варике открываю карту то все юниты теряют свои модели на стандартные
как мне сделать чтобы модели и все прочее сохранялось
Ктонить может мне скинуть микс, который по нажатию пробела вызывает одну тока строчку Preloader(""save//mydata.pld'')
?
Тоже загорелся экспериментами. darkowlom:
Alexander12, интересно! Свяжись с автором темы на хайве, он выложил код на чтение памяти, но не на запись, как я понял, хотя в тексте упомянул о том что возможна и запись.
Хотя я думаю сам принцип можно почерпнуть из кода
Если я правильно понял эту строку, то при помощи ForForce можно выполнить байткод из массива
Of course, you can only use direct calls to execute valid functions, you can't call the middle of a function or execute bytecode from an array with this method, that is only possible with things like ForForce.
В общем решил попробовать, скачал экспериментальный пжасс, заменил, но это дело все арвно не компилируется, адикхелпер засыпаетмеян ошибками, хотя поидее не должен. Пробовал кто с этим разобраться?
Сжасс отруби, тока вжасс - сохраняется тогда норм.
Как выяснилось его криво пофиксили. Т.е убрали возможность написать 2 оператора ретурн, а лазить по памяти варкравта можно до сих пор, как собственно и обойти защиту и делать все что хочется...
Ну либо брать для основы - канал ( параметры отключить прочие способности) , ибо баг с морфом ( тогда не нужно делать 100500 каналов) но реализация посложнее.
Ну создать триггер, которому добавить событие - Юнит получает урон (ссылка на конкретного юнита), если юнит заранее не известен то добавляем событие юнитам по мере их появления...
Условие - урон больше 0.00 Источник урона = Тот кто надо
Действие - плавающий текст над головой юнита Конвертируем вещественное в строку ( кол-во полученного урона)
Как то так, помнится была такая наработка на сайте но вот не помню название.
Ну 100500 уровней скилла, 1 уровень -100 ренжа, 2 уровня - 200 ренжа и так далее.
Или скилл на основе 'Aneg' (герои онли) ну и 100500 версий одного и того же скилла, просто меняем уровень и все.
Как это нету, в гуях есть эта функция: Раздел - Боевая единица, почти самый низ.
Удалить классификацию уже поставиленную в ро низя, как и поставить полноценную классификацию юниту у которого она не установлена в РО, к примеру работник сделанный триггерно будет проходить проверку - работник но не будет отображаться как незанятый работник, когда он стоит на месте.
Ещё раз, зачем декорацию? Если описанный выше вариант действительно убирает москитов (не проверял), то можно просто юнита. Будет даже круче, лага анимации не возникнет.
До до, москиты то удаляются, но юнита не выделить + ни 1 скиллом не наведешь, будут бить автоатакой - избавится от этого можно только морфом, т.е сначала хайднули юнита, удалили москитов, анхайднули и вручили любой морф в другого юнита, тогда да - москиты будут удалены без последствий.
Иначе юнита будут бить автоатакой, но сам он как инвизер не выдели его, не наведи на него скилл.
Я бы сделал вовсе юнита и декорацию, похожую на голема, сделал бы арку (разрушаемую) влепил туда голема декорацию (разрушаемую) и все, как буд то статуя в стенке, нечем не выделяется - а затем бы удалил декор и создал в том месте обычного голема, все красиво и хрен догадаешься что эта статуя оживает.
» 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 / Интерфейс черный
» WarCraft 3 / Система отлова ударов
» WarCraft 3 / Как заблокировать героя на время каста?
» WarCraft 3 / Как заблокировать героя на время каста?
» WarCraft 3 / Как заблокировать героя на время каста?
Ну собственно нам нужен скилл на основе морфа демон хантера "Перевоплощение"", начальная и конечная форма - дамми герой, остальные параметры в 0, суем этот скилл в руну а руну вручаем нужному герою и тут же отдаем приказ качтовать что то....
Результат - герой будет кастовать скилл, игнорируя всех и вся, иконки скиллов будут активны, но хоть закликайся.
Выйти из этого состояния можно только одним способом - выполнить любой морф как следует до конка, подходит для этого 'Aave' - Avenger form (морф сфинкса)
» WarCraft 3 / перенос нестандартных единиц
» WarCraft 3 / Старые карты с ретурн багом (I2C)
?
Тоже загорелся экспериментами.
darkowlom: Сжасс отруби, тока вжасс - сохраняется тогда норм.
» WarCraft 3 / перенос нестандартных единиц
» WarCraft 3 / Старые карты с ретурн багом (I2C)
Ссылка выше, там описан ретурн баг на код
» WarCraft 3 / Старые карты с ретурн багом (I2C)
» WarCraft 3 / Динамическое добавление классификации
» WarCraft 3 / Старые карты с ретурн багом (I2C)
» WarCraft 3 / Как заблокировать героя на время каста?
» WarCraft 3 / Старые карты с ретурн багом (I2C)
Где же наш Toadcop который это обнаружил?
» WarCraft 3 / Dmg
Условие - урон больше 0.00 Источник урона = Тот кто надо
Действие - плавающий текст над головой юнита Конвертируем вещественное в строку ( кол-во полученного урона)
Как то так, помнится была такая наработка на сайте но вот не помню название.
» WarCraft 3 / [JASS] Динамическое изменение параметров
Или скилл на основе 'Aneg' (герои онли) ну и 100500 версий одного и того же скилла, просто меняем уровень и все.
» WarCraft 3 / Динамическое добавление классификации
Поделитесь мыслями что вы собрались сделать, зачем именно стражем сделать юнита?
Ред. quq_CCCP
» WarCraft 3 / Динамическое добавление классификации
Удалить классификацию уже поставиленную в ро низя, как и поставить полноценную классификацию юниту у которого она не установлена в РО, к примеру работник сделанный триггерно будет проходить проверку - работник но не будет отображаться как незанятый работник, когда он стоит на месте.
» WarCraft 3 / Боевой голем-статуя
Иначе юнита будут бить автоатакой, но сам он как инвизер не выдели его, не наведи на него скилл.
» WarCraft 3 / Боевой голем-статуя