Добавлен Hodor,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Jass
Тип:
Способность
Версия Warcraft:
1.26
Ursa Warrior прямо из доты 6.83d
Если нету JNGP, то надо использовать триггеры из карты где все написано на Jass.
+ после переноса способностей/бафов надо заново прописать всё что перенесли. Прописывать нужно в Init триггерах
+ способность Overpower AddBuff использует заклинание Overpower (нужно будет после переноса заново указать, вместо "Неизвестно B0CH")
+ способность Overpower Container использует способность Overpower FX (нужно будет после переноса заново указать, вместо "Неизвестно A1N5")
+ способность Earthshock не имеет никаких триггеров
+ после переноса способностей/бафов надо заново прописать всё что перенесли. Прописывать нужно в Init триггерах
+ способность Overpower AddBuff использует заклинание Overpower (нужно будет после переноса заново указать, вместо "Неизвестно B0CH")
+ способность Overpower Container использует способность Overpower FX (нужно будет после переноса заново указать, вместо "Неизвестно A1N5")
+ способность Earthshock не имеет никаких триггеров
Если есть JNGP, то можно сразу скопировать библиотеку со скиллами урсы и грамотно перенести все абилки и бафы, в слове "грамотно" я имел в виду перенести всё так чтобы равкоды не поменялись
+ если ошибки с равкодами всё же появились, то можно их заново прописать в константах библиотеки
+ если ошибки с равкодами всё же появились, то можно их заново прописать в константах библиотеки
vJass
globals
hashtable udg_dotaHash = InitHashtable()
timer udg_dotaTimer = CreateTimer()
endglobals
library DotA initializer DotaInit
private function DotaInit takes nothing returns nothing
call TimerStart( udg_dotaTimer, 99999.00, false, null )
endfunction
endlibrary
library UrsaWarrior initializer InitUrsa
globals
private integer array EnrageAddDamage
private integer array FurySwipesAddDamage
//Overpower
private constant integer OverpowerAbility = 'A1P9' //Основная способность Overpower
private constant integer OverpowerSpeed = 'A1N3' //Способность на увеличение скорости
private constant integer OverpowerContainer = 'A1N6' //Контейнер
private constant integer OverpowerAddBuff = 'A1N7' //Способность добавляющая бафф
private constant integer OverpowerBuff = 'B0CH' //Бафф
//FurySwipes
private constant integer FurySwipesAbility = 'A2X2' //Основная способность FurySwipes
//Enrage
private constant integer EnrageAbility = 'A0LC' //Основная способность Enrage
private constant integer EnrageBuff = 'B02H' //Бафф
//Marker
private constant integer Marker = 'A04R' //Некоторые Jass способности в доте игнорируют юнитов с этой способностью, обычно ее дают вардам
endglobals
private function InitDamage takes nothing returns nothing
set EnrageAddDamage[0] = 'A17F' // DamageBonusSystem - 1
set EnrageAddDamage[1] = 'A17G' // DamageBonusSystem - 2
set EnrageAddDamage[2] = 'A17H' // DamageBonusSystem - 4
set EnrageAddDamage[3] = 'A17C' // DamageBonusSystem - 8
set EnrageAddDamage[4] = 'A17D' // DamageBonusSystem - 16
set EnrageAddDamage[5] = 'A17E' // DamageBonusSystem - 32
set EnrageAddDamage[6] = 'A17J' // DamageBonusSystem - 64
set EnrageAddDamage[7] = 'A17I' // DamageBonusSystem - 128
set EnrageAddDamage[8] = 'A17L' // DamageBonusSystem - 256
set FurySwipesAddDamage[0] = 'A2XY' // DamageBonusSystem 2 - 1
set FurySwipesAddDamage[1] = 'A2XX' // DamageBonusSystem 2 - 2
set FurySwipesAddDamage[2] = 'A2XW' // DamageBonusSystem 2 - 4
set FurySwipesAddDamage[3] = 'A2XV' // DamageBonusSystem 2 - 8
set FurySwipesAddDamage[4] = 'A2Y2' // DamageBonusSystem 2 - 16
set FurySwipesAddDamage[5] = 'A2Y0' // DamageBonusSystem 2 - 32
set FurySwipesAddDamage[6] = 'A2Y1' // DamageBonusSystem 2 - 64
set FurySwipesAddDamage[7] = 'A2XZ' // DamageBonusSystem 2 - 128
set FurySwipesAddDamage[8] = 'A2Y3' // DamageBonusSystem 2 - 256
endfunction
private function AnyUnitEvent takes trigger trg, playerunitevent whichEvent returns nothing
local integer i = 0
loop
call TriggerRegisterPlayerUnitEvent( trg, Player(i), whichEvent, null )
set i = i+1
exitwhen i == 16
endloop
endfunction
private function DestroyTriggerEx takes trigger trg returns nothing
call DisableTrigger( trg )
call TriggerClearActions( trg )
call TriggerClearConditions( trg )
call DestroyTrigger( trg )
endfunction
private function CheckAbility takes integer i returns boolean
//Здесь нужно указывать любые способности которые могут сбить Enrage или подобные способности
//Пример:
//return i = 'A000' or i = 'A001' or i = 'A002'
return false
endfunction
//Overpower
private function Overpower_AddAbility takes unit u, integer i returns nothing
call UnitAddAbility( u, i )
call UnitMakeAbilityPermanent( u, true, i )
endfunction
private function Overpower_Speed takes nothing returns boolean
local trigger trg = GetTriggeringTrigger()
local integer trgH = GetHandleId( trg )
local unit u = LoadUnitHandle( udg_dotaHash, trgH, 2 )
local integer i_abilityLvl = LoadInteger( udg_dotaHash, trgH, 5 )
local integer i = LoadInteger( udg_dotaHash, trgH, 34 )
local integer i_2 = 2+i_abilityLvl
if GetTriggerEventId() == EVENT_UNIT_DEATH then
call UnitRemoveAbility( u, OverpowerSpeed )
call UnitRemoveAbility( u, OverpowerContainer )
call UnitRemoveAbility( u, OverpowerAddBuff )
call UnitRemoveAbility( u, OverpowerBuff )
call FlushChildHashtable( udg_dotaHash, trgH )
call DestroyTriggerEx( trg )
elseif GetTriggerEventId() == EVENT_PLAYER_UNIT_ATTACKED then
if GetAttacker() == u then
set i = i+1
call SaveInteger( udg_dotaHash, trgH, 34, i )
if i >= i_2 then
call UnitRemoveAbility( u, OverpowerSpeed )
call UnitRemoveAbility( u, OverpowerContainer )
call UnitRemoveAbility( u, OverpowerAddBuff )
call UnitRemoveAbility( u, OverpowerBuff )
call FlushChildHashtable( udg_dotaHash, trgH )
call DestroyTriggerEx( trg )
endif
endif
elseif GetTriggerEventId() == EVENT_PLAYER_UNIT_SPELL_EFFECT then
if GetTriggerUnit() == u and GetSpellAbilityId() == OverpowerAbility and TimerGetElapsed(udg_dotaTimer) > LoadReal( udg_dotaHash, trgH, 442 ) then
call FlushChildHashtable( udg_dotaHash, trgH )
call DestroyTriggerEx( trg )
elseif CheckAbility( GetSpellAbilityId() )and u == GetSpellTargetUnit() then
call UnitRemoveAbility( u, OverpowerSpeed )
call UnitRemoveAbility( u, OverpowerContainer )
call UnitRemoveAbility( u, OverpowerAddBuff )
call UnitRemoveAbility( u, OverpowerBuff )
call FlushChildHashtable( udg_dotaHash, trgH )
call DestroyTriggerEx( trg )
endif
else
call UnitRemoveAbility( u, OverpowerSpeed )
call UnitRemoveAbility( u, OverpowerContainer )
call UnitRemoveAbility( u, OverpowerAddBuff )
call UnitRemoveAbility( u, OverpowerBuff )
call FlushChildHashtable( udg_dotaHash, trgH )
call DestroyTriggerEx( trg )
endif
set trg = null
set u = null
return false
endfunction
private function Overpower_Actions takes nothing returns nothing
local trigger trg = CreateTrigger()
local integer trgH = GetHandleId( trg )
local unit u = GetTriggerUnit()
local integer i_abilityLvl = GetUnitAbilityLevel( u, OverpowerAbility )
call Overpower_AddAbility( u, OverpowerSpeed )
call Overpower_AddAbility( u, OverpowerContainer )
call Overpower_AddAbility( u, OverpowerAddBuff )
call SetPlayerAbilityAvailable( GetOwningPlayer( u ), OverpowerContainer, false )
call TriggerRegisterTimerEvent( trg, 15, false )
call AnyUnitEvent( trg, EVENT_PLAYER_UNIT_ATTACKED )
call TriggerRegisterUnitEvent( trg, u, EVENT_UNIT_DEATH )
call AnyUnitEvent( trg, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( trg, Condition( function Overpower_Speed ) )
call SaveUnitHandle( udg_dotaHash, trgH, 2, u )
call SaveInteger( udg_dotaHash, trgH, 34, 0 )
call SaveInteger( udg_dotaHash, trgH, 5, i_abilityLvl )
call SaveReal( udg_dotaHash, trgH, 442, ( TimerGetElapsed(udg_dotaTimer)+1 )*1.0 )
set trg = null
set u = null
endfunction
private function Overpower_Conditions takes nothing returns boolean
if GetSpellAbilityId() == OverpowerAbility then
call Overpower_Actions()
endif
return false
endfunction
private function InitOverpower takes nothing returns nothing
local trigger Overpower = CreateTrigger()
call AnyUnitEvent( Overpower, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( Overpower, Condition( function Overpower_Conditions ) )
set Overpower = null
endfunction
//Overpower end
//FurySwipes
private function BonusDamage_FurySwipes takes unit u, integer i_damage returns nothing
local integer array arrayInt
local integer i_Convert1 = i_damage
local integer i_Convert2 = 1
local integer i = 0
local integer i_End
if i_damage < 1 then
call UnitRemoveAbility( u, FurySwipesAddDamage[0] )
call UnitRemoveAbility( u, FurySwipesAddDamage[1] )
call UnitRemoveAbility( u, FurySwipesAddDamage[2] )
call UnitRemoveAbility( u, FurySwipesAddDamage[3] )
call UnitRemoveAbility( u, FurySwipesAddDamage[4] )
call UnitRemoveAbility( u, FurySwipesAddDamage[5] )
call UnitRemoveAbility( u, FurySwipesAddDamage[6] )
call UnitRemoveAbility( u, FurySwipesAddDamage[7] )
call UnitRemoveAbility( u, FurySwipesAddDamage[8] )
return
endif
loop
exitwhen i_Convert2 == 0
set i_Convert2 = i_Convert1/2
set arrayInt[i] = i_Convert1-i_Convert2*2
set i_Convert1 = i_Convert2
set i = i+1
endloop
set i_End = 8
set i = 0
loop
exitwhen i > i_End
if arrayInt[i] == 1 then
call UnitAddAbility( u, FurySwipesAddDamage[i] )
else
call UnitRemoveAbility( u,FurySwipesAddDamage[i] )
endif
set i = i+1
endloop
endfunction
private function FurySwipes_Attack_Flag2 takes nothing returns boolean
local trigger trg = GetTriggeringTrigger()
local integer i = GetHandleId( trg )
call SaveInteger( udg_dotaHash, GetHandleId( LoadUnitHandle(udg_dotaHash, i, 14) ), LoadInteger( udg_dotaHash, i, 33 ), 2 )
call FlushChildHashtable( udg_dotaHash, i )
call DestroyTriggerEx( trg )
set trg = null
return false
endfunction
private function FurySwipes_Attack_Flag takes unit u, integer i, real r returns nothing
local trigger trg = CreateTrigger()
call TriggerAddCondition( trg, Condition( function FurySwipes_Attack_Flag2 ) )
call TriggerRegisterTimerEvent( trg, r, false )
call SaveInteger( udg_dotaHash, GetHandleId( u ), i, 1 )
call SaveUnitHandle( udg_dotaHash, GetHandleId( trg ), 14, u )
call SaveInteger( udg_dotaHash, GetHandleId( trg ), 33, i )
set trg = null
endfunction
private function FurySwipes_AddDamage_Actions takes nothing returns boolean
local trigger trg = GetTriggeringTrigger()
local integer i = GetHandleId( trg )
local unit u = LoadUnitHandle( udg_dotaHash, i, 2 )
call FlushChildHashtable( udg_dotaHash, i )
call DestroyTriggerEx( trg )
call BonusDamage_FurySwipes( u, 0 )
set u = null
return false
endfunction
private function FurySwipes_UnitAttacked_Actions takes nothing returns nothing
local trigger trg = GetTriggeringTrigger()
local integer trgH = GetHandleId( trg )
local unit trgAttacker = LoadUnitHandle( udg_dotaHash, trgH, 2 )
local unit trgTarget = LoadUnitHandle( udg_dotaHash, trgH, 17 )
local integer i_Target = LoadInteger( udg_dotaHash, GetHandleId( trgTarget ), 824 )
local real r_Target = LoadReal( udg_dotaHash, GetHandleId( trgTarget ), 825 )
local integer i_AbilityLvl = GetUnitAbilityLevel( trgAttacker, FurySwipesAbility )
if GetTriggerEventId() == EVENT_WIDGET_DEATH or r_Target < TimerGetElapsed(udg_dotaTimer) then
call SaveInteger( udg_dotaHash, GetHandleId( trgTarget ), 824, 0 )
call DestroyEffect( LoadEffectHandle( udg_dotaHash, trgH, 175 ) )
call FlushChildHashtable( udg_dotaHash, trgH )
call DestroyTriggerEx( trg )
elseif GetTriggerEventId() == EVENT_UNIT_ATTACKED then
set trg = CreateTrigger()
set trgH = GetHandleId( trg )
call TriggerRegisterTimerEvent( trg, 0.31, true )
call TriggerAddCondition( trg, Condition( function FurySwipes_AddDamage_Actions ) )
call SaveUnitHandle( udg_dotaHash, trgH, 2, trgAttacker )
call BonusDamage_FurySwipes( trgAttacker, IMinBJ( (10+5*i_AbilityLvl)*i_Target, 500 ) )
endif
set trg = null
set trgAttacker = null
set trgTarget = null
endfunction
private function FurySwipes_UnitAttacked_Conditions takes nothing returns boolean
if GetTriggerEventId()!= EVENT_UNIT_ATTACKED then
call FurySwipes_UnitAttacked_Actions()
endif
if GetAttacker() == LoadUnitHandle( udg_dotaHash, GetHandleId( GetTriggeringTrigger() ), 2 ) then
call FurySwipes_UnitAttacked_Actions()
endif
return false
endfunction
private function FurySwipes_UnitDamaged_Actions takes unit attacker, unit target returns nothing
local trigger trg
local integer trgH
local integer i_Target = LoadInteger( udg_dotaHash, GetHandleId( target ), 824 )
local integer i_Attacker = GetUnitAbilityLevel( attacker, FurySwipesAbility )
call SaveInteger( udg_dotaHash, GetHandleId( target ), 824, i_Target+1 )
call SaveReal( udg_dotaHash, GetHandleId( target ), 825, ( TimerGetElapsed(udg_dotaTimer)+15 )*1.0 )
if i_Target == 0 then
set trg = CreateTrigger()
set trgH = GetHandleId( trg )
call SaveEffectHandle( udg_dotaHash, trgH, 175, AddSpecialEffectTarget("Abilities\\Spells\\NightElf\\BattleRoar\\RoarTarget.mdl", target, "overhead") )
call SaveUnitHandle( udg_dotaHash, trgH, 2, attacker )
call SaveUnitHandle( udg_dotaHash, trgH, 17, target )
call TriggerRegisterUnitEvent( trg, target, EVENT_UNIT_ATTACKED )
call TriggerRegisterDeathEvent( trg, target )
call TriggerRegisterTimerEvent( trg, 1, true )
call TriggerAddCondition( trg, Condition( function FurySwipes_UnitAttacked_Conditions ) )
call SaveInteger( udg_dotaHash, GetHandleId( target ), 824, 2 )
set trg = CreateTrigger()
set trgH = GetHandleId( trg )
call TriggerRegisterTimerEvent( trg, 0.31, true )
call TriggerAddCondition( trg, Condition( function FurySwipes_AddDamage_Actions ) )
call SaveUnitHandle( udg_dotaHash, trgH, 2, attacker )
call BonusDamage_FurySwipes( attacker, IMinBJ( (10+5*i_Attacker), 500 ) )
endif
set trg=null
endfunction
private function FurySwipes_UnitDamaged_Conditions takes nothing returns boolean
local trigger trg = GetTriggeringTrigger()
local integer trgH = GetHandleId( trg )
local unit attacker = LoadUnitHandle( udg_dotaHash, trgH, 2 )
local unit target = LoadUnitHandle( udg_dotaHash, trgH, 17 )
if GetTriggerEventId() == EVENT_UNIT_DAMAGED then
if GetEventDamageSource() == attacker then
call DisableTrigger( trg )
call FurySwipes_UnitDamaged_Actions( attacker, target )
call FlushChildHashtable( udg_dotaHash, trgH )
call DestroyTriggerEx( trg )
endif
else
call FlushChildHashtable( udg_dotaHash, trgH )
call DestroyTriggerEx( trg )
endif
set trg = null
set attacker = null
set target = null
return false
endfunction
private function FurySwipes_UnitDamaged takes nothing returns nothing
local trigger trg = CreateTrigger()
local unit target = GetTriggerUnit()
local unit attacker = GetAttacker()
local integer trgH = GetHandleId( trg )
call TriggerRegisterUnitEvent( trg, target, EVENT_UNIT_DAMAGED )
call TriggerRegisterTimerEvent( trg, 1, false )
call TriggerAddCondition( trg, Condition( function FurySwipes_UnitDamaged_Conditions ) )
call SaveUnitHandle( udg_dotaHash, trgH, 2, attacker )
call SaveUnitHandle( udg_dotaHash, trgH, 17, target )
set target = null
set attacker = null
set trg = null
endfunction
private function FurySwipes_Attack_Start takes nothing returns nothing
local unit u = GetAttacker()
if LoadInteger( udg_dotaHash, GetHandleId( u ), 4274 ) != 1 then
call FurySwipes_Attack_Flag( u, 4274, 0.2 )
call FurySwipes_UnitDamaged()
endif
set u = null
endfunction
private function FurySwipes_Attack_Condition takes nothing returns boolean
if GetUnitAbilityLevel( GetAttacker(), FurySwipesAbility ) > 0 and IsUnitType( GetTriggerUnit(), UNIT_TYPE_STRUCTURE ) == false and GetAttacker() == LoadUnitHandle( udg_dotaHash, GetHandleId( GetTriggeringTrigger() ), 14 ) and IsUnitEnemy( GetTriggerUnit(), GetOwningPlayer( GetAttacker() ) ) then
call FurySwipes_Attack_Start()
endif
return false
endfunction
private function FurySwipes_Attack takes nothing returns nothing
local trigger trg = CreateTrigger()
call AnyUnitEvent( trg, EVENT_PLAYER_UNIT_ATTACKED )
call TriggerAddCondition( trg, Condition( function FurySwipes_Attack_Condition ) )
call SaveUnitHandle( udg_dotaHash, GetHandleId( trg ), 14, GetTriggerUnit() )
set trg = null
endfunction
private function FurySwipes_Conditions takes nothing returns boolean
if GetLearnedSkill() == FurySwipesAbility and IsUnitIllusion( GetTriggerUnit() ) == false and GetUnitAbilityLevel( GetTriggerUnit(), FurySwipesAbility ) == 1 then
call FurySwipes_Attack()
endif
return false
endfunction
//===========================================================================
private function InitFurySwipes takes nothing returns nothing
local trigger FurySwipes = CreateTrigger()
call AnyUnitEvent( FurySwipes, EVENT_PLAYER_HERO_SKILL )
call TriggerAddCondition( FurySwipes, Condition( function FurySwipes_Conditions ) )
set FurySwipes = null
endfunction
//FurySwipes end
//Enrage
private function BonusDamage_Enrage takes unit u, integer i_damage returns nothing
local integer array arrayInt
local integer i_Convert1 = i_damage
local integer i_Convert2 = 1
local integer i = 0
local integer i_End
if i_damage < 1 then
call UnitRemoveAbility( u, EnrageAddDamage[0] )
call UnitRemoveAbility( u, EnrageAddDamage[1] )
call UnitRemoveAbility( u, EnrageAddDamage[2] )
call UnitRemoveAbility( u, EnrageAddDamage[3] )
call UnitRemoveAbility( u, EnrageAddDamage[4] )
call UnitRemoveAbility( u, EnrageAddDamage[5] )
call UnitRemoveAbility( u, EnrageAddDamage[6] )
call UnitRemoveAbility( u, EnrageAddDamage[7] )
call UnitRemoveAbility( u, EnrageAddDamage[8] )
return
endif
loop
exitwhen i_Convert2 == 0
set i_Convert2 = i_Convert1/2
set arrayInt[i] = i_Convert1-i_Convert2*2
set i_Convert1 = i_Convert2
set i = i+1
endloop
set i_End = 8
set i = 0
loop
exitwhen i > i_End
if arrayInt[i] == 1 then
call UnitAddAbility( u, EnrageAddDamage[i] )
else
call UnitRemoveAbility( u, EnrageAddDamage[i] )
endif
set i = i+1
endloop
endfunction
private function Enrage_AddDamage takes nothing returns boolean
local trigger trg = GetTriggeringTrigger()
local integer trgH = GetHandleId( trg )
local unit u = LoadUnitHandle( udg_dotaHash, trgH, 2 )
local integer i_AbilityLvl = GetUnitAbilityLevel( u, EnrageAbility )
local integer damageBonus
local integer i_loadDamage
if GetTriggerEventId() == EVENT_UNIT_DEATH or GetUnitAbilityLevel( u, EnrageBuff ) == 0 or( GetTriggerEventId() == EVENT_PLAYER_UNIT_SPELL_EFFECT and u == GetSpellTargetUnit() and CheckAbility( GetSpellAbilityId() ) ) then
call FlushChildHashtable( udg_dotaHash, trgH )
call DestroyTriggerEx( trg )
call UnitRemoveAbility( u, EnrageBuff )
call BonusDamage_Enrage( u, 0 )
else
set damageBonus = R2I( GetUnitState( u, UNIT_STATE_LIFE )*(0.04+0.01*i_AbilityLvl) )
set i_loadDamage = LoadInteger( udg_dotaHash, trgH, 238 )
if damageBonus != i_loadDamage then
call SaveInteger( udg_dotaHash, trgH, 238, damageBonus )
call BonusDamage_Enrage( u, damageBonus )
endif
endif
set trg = null
set u = null
return false
endfunction
private function Enrage_Actions takes nothing returns nothing
local trigger trg = CreateTrigger()
local integer trgH = GetHandleId( trg )
call TriggerRegisterTimerEvent( trg, 0.25, true )
call TriggerRegisterUnitEvent( trg, GetTriggerUnit(), EVENT_UNIT_DEATH )
call AnyUnitEvent( trg, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( trg, Condition( function Enrage_AddDamage ) )
call SaveUnitHandle( udg_dotaHash, trgH, 2, GetTriggerUnit() )
call SaveInteger( udg_dotaHash, trgH, 238, 0 )
set trg = null
endfunction
private function Enrage_Conditions takes nothing returns boolean
if GetSpellAbilityId() == EnrageAbility then
call Enrage_Actions()
endif
return false
endfunction
private function Enrage2_Conditions takes nothing returns boolean
if GetUnitAbilityLevel( GetAttacker(), EnrageBuff ) > 0 and IsUnitType( GetTriggerUnit(), UNIT_TYPE_STRUCTURE ) == false and IsUnitAlly( GetTriggerUnit(), GetOwningPlayer( GetAttacker() ) ) == false and GetUnitAbilityLevel( GetTriggerUnit(), Marker ) == 0 then
endif
return false
endfunction
//===========================================================================
private function InitEnrage takes nothing returns nothing
local trigger trg = CreateTrigger()
call AnyUnitEvent( trg, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( trg, Condition( function Enrage_Conditions ) )
set trg = CreateTrigger()
call AnyUnitEvent( trg, EVENT_PLAYER_UNIT_ATTACKED )
call TriggerAddCondition( trg, Condition( function Enrage2_Conditions ) )
set trg = null
endfunction
//Enrage end
private function InitUrsa takes nothing returns nothing
call InitDamage()
call InitOverpower()
call InitFurySwipes()
call InitEnrage()
endfunction
endlibrary
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
сделал
Потом ClearAction и ClearConditions не удаляют сами хендлы условий и дейсвий, если с условием пофиг, т.к оно зависает в болекспре и не утекает, то TriggerAddAction( trg, function name) будет возвращать каждый раз новый хендл, что есть утечка, нужно сохранять экшены триггеров в переменную а затем удалять действием TriggerRemoveAction, иначе будут плодится утечки или как фрог все действия делать в кондишенах, там из отличий только лимит операций поменьше и вейты не работают с синками.
Отредактирован Hodor
Ладно, ща сделаю как у фрога. Я там код бары готовлю
Отредактирован Hodor