Name | Type | is_array | initial_value |
BafflePoint | location | No | |
BarrageOfNetsPoint | location | No | |
BoneWallCaster | unit | No | |
BoneWallTarget | rect | No | |
ComputerNumberCount | integer | No | |
DialogBox | dialog | Yes | |
DialogButtons | button | Yes | |
ElectricFieldCastingUnit | unit | No | |
EngageCastUnit | unit | No | |
EngagePoint | location | No | |
EngageReal | real | No | |
EngageUnit | unit | No | |
EruptPoint | location | No | |
EruptUnit | unit | Yes | |
EruptUnittype | group | Yes | |
Everyone | force | No | |
HealingStreamPoint | location | No | |
IceShardsPoint1 | location | No | |
IceShardsPoint2 | location | No | |
IceShardsPoint3 | location | No | |
IceShardsReal | real | No | |
IceShardsSpec1 | effect | No | |
IceShardsSpec2 | effect | No | |
IceShardsUnitGroup | group | No | |
LeapAttackAngle | real | Yes | |
LeapAttackDistance | real | No | |
LeapAttackPoint | location | Yes | |
LeapAttackReal | real | No | |
LeapAttackSFX | effect | Yes | |
LeapAttackUnit | unit | Yes | |
MunityUnitGroup | group | No | |
PlayerA | group | No | |
PoisonNovaArray | unit | Yes | |
PoisonNovaUnit | unit | No | |
RandomRace | integer | Yes | |
TelekinesisPoint | location | No | |
Timer | timer | No | |
TownHalls | unitcode | Yes | |
TrembleCastingUnit | unit | No | |
TremblePoint | location | No | |
TyphoonArea | real | Yes | |
TyphoonCaster | unit | Yes | |
TyphoonDamage | real | Yes | |
TyphoonDistance | real | Yes | |
TyphoonDummy | unit | Yes | |
TyphoonFilterId | integer | No | |
TyphoonMUI | boolean | Yes | |
TyphoonStoredTimer | timer | Yes | |
TyphoonStoreIntTim | integer | Yes | |
TyphoonX | real | Yes | |
TyphoonY | real | Yes |
/////////////////////////////
// ***CREATOR*** -> KrAzY_LiGhT
/////////////////////////////
constant function SpikeImpact_abilityID takes nothing returns integer
return 'A05Q' //the rawcode of the ability
endfunction
constant function SpikeImpact_spikeIdOne takes nothing returns integer
return 'nsra' //the rawcode of the unit spike 1
endfunction
constant function SpikeImpact_spikeIdTwo takes nothing returns integer
return 'nsrh' //the rawcode of the unit spike 2
endfunction
constant function SpikeImpact_spikeIdThree takes nothing returns integer
return 'nsrn' //the rawcode of the unit spike 3
endfunction
constant function SpikeImpact_spikeIdFour takes nothing returns integer
return 'nsrw' //the rawcode of the unit spike 4
endfunction
constant function SpikeImpact_startAnimation takes nothing returns string
return "Morph" //the animation the caster will play when he casts the spell
endfunction
constant function SpikeImpact_endAnimation takes nothing returns string
return "Morph Defend" //the animation the caster will play when the spell ends
endfunction
constant function SpikeImpact_radius takes nothing returns real
return 1000. //the AOE of the spell
endfunction
constant function SpikeImpact_damage takes integer level returns real
return level * 250. //the amount of damage the enemy will take per level
endfunction
constant function SpikeImpact_red takes nothing returns real
return 100. //The red RGB color of the affected units from 0 to 100
endfunction
constant function SpikeImpact_green takes nothing returns real
return 15. //The green RGB color of the affected units from 0 to 100
endfunction
constant function SpikeImpact_blue takes nothing returns real
return 15. //The blue RGB color of the affected units from 0 to 100
endfunction
constant function SpikeImpact_enemyEffect takes nothing returns string
//the that will be created at the enemy when it is affected, in this case is blood.
return "Objects\\Spawnmodels\\Orc\\Orcblood\\BattrollBlood.mdl"
endfunction
constant function SpikeImpact_enemyEffectRegion takes nothing returns string
//the place on the enemy's body where the enemyEffect will be created
return "chest"
endfunction
constant function SpikeImpact_enemyDamage takes nothing returns string
//the that will be created at the enemy when damaged by the spell
return "Objects\\Spawnmodels\\Human\\HumanLargeDeathExplode\\HumanLargeDeathExplode.mdl"
endfunction
constant function SpikeImpact_enemyDamageRegion takes nothing returns string
//the place on the enemy's body where the enemyDamage will be created
return "chest"
endfunction
//====================================SETUP END===========================================
function SpikeImpact_Condition takes nothing returns boolean
return GetSpellAbilityId() == SpikeImpact_abilityID()
endfunction
//=======================================================================================
function SpikeImpact_RecolorEnemies takes nothing returns nothing
local unit Enemy = GetEnumUnit()
if (IsUnitEnemy(Enemy, GetOwningPlayer(GetSpellAbilityUnit()))) then
call PauseUnit(Enemy, true)
call SetUnitTimeScale(Enemy, 0.00)
call SetUnitVertexColor(Enemy, PercentToInt(SpikeImpact_red(), 255), PercentToInt(SpikeImpact_green(), 255), PercentToInt(SpikeImpact_blue(), 255), PercentToInt(100, 255))
call DestroyEffect(AddSpecialEffectTarget(SpikeImpact_enemyEffect(), Enemy, SpikeImpact_enemyEffectRegion()))
endif
set Enemy = null
endfunction
//========================================================================================
function SpikeImpact_KillEnemies takes nothing returns nothing
local unit Enemy = GetEnumUnit()
local unit Caster = GetSpellAbilityUnit()
local real DamageToDeal = SpikeImpact_damage(GetUnitAbilityLevel(Caster, SpikeImpact_abilityID()))
if (IsUnitEnemy(Enemy, GetOwningPlayer(Caster))) then
call SetUnitTimeScale(Enemy, 100. * 0.01)
if(GetWidgetLife(Enemy) <= DamageToDeal) then
call SetUnitExploded(Enemy, true)
call KillUnit(Enemy)
else
call UnitDamageTarget(Caster, Enemy, DamageToDeal, true, true, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNKNOWN, WEAPON_TYPE_WHOKNOWS)
call SetUnitVertexColor(Enemy, 255, 255, 255, 255)
call DestroyEffect(AddSpecialEffectTarget(SpikeImpact_enemyDamage(), Enemy, SpikeImpact_enemyDamageRegion()))
endif
endif
set Enemy = null
set Caster = null
endfunction
//========================================================================================
function SpikeImpact_Actions takes nothing returns nothing
//Creates the local variables and gives them a value
local unit Caster = GetSpellAbilityUnit()
local group EnemiesInRange = CreateGroup()
local player CastingPlayer = GetOwningPlayer(Caster)
local real CasterX = GetUnitX(Caster)
local real CasterY = GetUnitY(Caster)
local real Degrees = 0.00
local real x = GetUnitX(Caster) + 10.0 * Cos(Degrees * bj_DEGTORAD)
local real y = GetUnitY(Caster) + 10.0 * Sin(Degrees * bj_DEGTORAD)
local unit array Spikes
local integer i = 0
local integer Counter = 0
call PauseUnit(Caster, true)
call SetUnitAnimation(Caster, SpikeImpact_startAnimation())
//this will create the spikes
loop
exitwhen (i == 8)
set Degrees = (45.00 * I2R(i))
set x = GetUnitX(Caster) + 10.0 * Cos(Degrees * bj_DEGTORAD)
set y = GetUnitY(Caster) + 10.0 * Sin(Degrees * bj_DEGTORAD)
set Spikes[Counter] = CreateUnit(CastingPlayer, SpikeImpact_spikeIdOne(), x, y, Degrees)
set Spikes[Counter + 1] = CreateUnit(CastingPlayer, SpikeImpact_spikeIdTwo(), x, y, Degrees)
set Spikes[Counter + 2] = CreateUnit(CastingPlayer, SpikeImpact_spikeIdThree(), x, y, Degrees)
set Spikes[Counter + 3] = CreateUnit(CastingPlayer, SpikeImpact_spikeIdFour(), x, y, Degrees)
set Counter = Counter + 4
set i = i + 1
endloop
call TriggerSleepAction(0.20)
// -- Pause spikes to show them a few seconds --
set i = 0
loop
exitwhen (i == 36)
call PauseUnit(Spikes[i], true)
call SetUnitTimeScale(Spikes[i], 0.00 * 0.01)
set i = i + 1
endloop
call GroupEnumUnitsInRange(EnemiesInRange, CasterX, CasterY, SpikeImpact_radius(), null) //this adds all units to EnemiesInRange
// -- Recolor enemies and pause them --
call ForGroup(EnemiesInRange, function SpikeImpact_RecolorEnemies)
call TriggerSleepAction(1.50)
call PauseUnit(Caster, false)
call SetUnitAnimation(Caster, SpikeImpact_endAnimation())
// -- Remove Spikes --
set i = 0
loop
exitwhen (i == 36)
call PauseUnit(Spikes[i], false)
call UnitApplyTimedLife(Spikes[i], 'BTLF', 1.00)
call SetUnitTimeScale(Spikes[i], 100.00 * 0.01)
set Spikes[i] = null
set i = i + 1
endloop
// -- Damage/Kill enemies --
call ForGroup(EnemiesInRange, function SpikeImpact_KillEnemies)
call TriggerSleepAction(1.20)
call SetUnitAnimation(Caster, "stand")
call DestroyGroup(EnemiesInRange)
set Caster = null
set CastingPlayer = null
set EnemiesInRange = null
endfunction
//===========================Creating the trigger=====================================
function InitTrig_Bone_Impact takes nothing returns nothing
local trigger SpikeImpactTrigger = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(SpikeImpactTrigger, EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddAction(SpikeImpactTrigger, function SpikeImpact_Actions)
call TriggerAddCondition(SpikeImpactTrigger, Condition(function SpikeImpact_Condition))
endfunction
/////////////////////////////
// ***CREATOR*** -> KrAzY_LiGhT
/////////////////////////////
//
//globals
// unit array udg_TyphoonCaster
// real array udg_TyphoonX
// real array udg_TyphoonY
// real array udg_TyphoonDamage
// real array udg_TyphoonArea
// real array udg_TyphoonDistance
// integer udg_TyphoonFilterId
// timer array udg_TyphoonStoredTimer
// integer array udg_TyphoonStoreIntTim
// unit array udg_TyphoonDummy
// boolean array udg_TyphoonMUI
//endglobals
//This is the rawcode of water explosion spell (changes between maps)
constant function WEX_RawCode takes nothing returns integer
return 'A05P'
endfunction
//Dummy raw code (changes between maps)
constant function DUM_RawCode takes nothing returns integer
return 'npfl'
endfunction
//Water shooter rawcode (changes between maps)
constant function WSH_RawCode takes nothing returns integer
return 'nfel'
endfunction
//Loc raw code (is same in any map)
constant function Loc_RawCode takes nothing returns integer
return 'Aloc'
endfunction
//Other spell functions
//Sets a new value on timer
function SetUserTimerData takes timer t, integer value returns nothing
local integer i = 0
loop
exitwhen udg_TyphoonStoredTimer[i] == null
set i = i + 1
endloop
set udg_TyphoonStoredTimer[i] = t
set udg_TyphoonStoreIntTim[i] = value
endfunction
//Returns stored value on timer
function GetUserTimerData takes timer t returns integer
local integer i = 0
loop
exitwhen udg_TyphoonStoredTimer[i] == t
set i = i + 1
endloop
return udg_TyphoonStoreIntTim[i]
endfunction
//Clears stored data
function ClearTimerData takes timer t, boolean destroy returns nothing
local integer i = 0
loop
exitwhen udg_TyphoonStoredTimer[i] == t
set i = i + 1
endloop
set udg_TyphoonStoreIntTim[i] = 0
if destroy then
call PauseTimer(t)
call DestroyTimer(t)
endif
set udg_TyphoonStoredTimer[i] = null
endfunction
//===========================================================================
//Main Condition
function WaterExplCond takes nothing returns boolean
return GetSpellAbilityId() == WEX_RawCode()
endfunction
//This is a filter which allows only special units to be effected by spell
function DmgGroupFilter takes nothing returns boolean
return GetUnitState( GetFilterUnit(), UNIT_STATE_LIFE ) > 0. and IsUnitEnemy( GetFilterUnit(), Player(udg_TyphoonFilterId) ) and not IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE ) and not IsUnitType(GetFilterUnit(), UNIT_TYPE_MAGIC_IMMUNE )
endfunction
//Damage and extra effects
function WaterExplDamage takes nothing returns nothing
//Locals
local unit u = GetEnumUnit()
//Damage
call UnitDamageTarget( udg_TyphoonDummy[udg_TyphoonFilterId], u, udg_TyphoonDamage[udg_TyphoonFilterId], true, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_COLD, WEAPON_TYPE_WHOKNOWS )
//Effects
call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl", u, "origin" ) )
call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl", u, "head" ) )
set u = null
endfunction
//Explosions loop actions
function ExplosionActions takes nothing returns nothing
//Init local variables
local timer t = GetExpiredTimer()
local integer id = GetUserTimerData(t)
local integer i = 0
local player p = Player(id)
local real x = 0.
local real y = 0.
local real x2 = 0.
local real y2 = 0.
local real angle = 0.
local group g = CreateGroup()
local boolexpr bx = null
local integer aroundArea = 0
local unit array u
//Waves shoot
if ( udg_TyphoonDistance[id] == 50 ) then
loop
exitwhen i > 12
set angle = i*30
set x = udg_TyphoonX[id] + (udg_TyphoonArea[id] + 100) * Cos( angle * bj_DEGTORAD )
set y = udg_TyphoonY[id] + (udg_TyphoonArea[id] + 100) * Sin( angle * bj_DEGTORAD )
set u[0] = CreateUnit( p, DUM_RawCode(), x, y, bj_UNIT_FACING )
call UnitApplyTimedLife( u[0], 'BTLF', 1. )
set x2 = udg_TyphoonX[id] + 100 * Cos( angle * bj_DEGTORAD )
set y2 = udg_TyphoonY[id] + 100 * Sin( angle * bj_DEGTORAD )
set angle = bj_RADTODEG * Atan2( y-y2, x-x2)
set u[1] = CreateUnit( p, WSH_RawCode(), x2, y2, angle )
call UnitApplyTimedLife( u[1], 'BTLF', 1. )
call UnitAddAbility( u[1], Loc_RawCode() )
call IssueTargetOrder( u[1], "attack", u[0] )
set i = i + 1
endloop
set u[0] = null
set u[1] = null
set i = 0
endif
//Increase distance
set udg_TyphoonDistance[id] = udg_TyphoonDistance[id] + 100.
set x = (2 * udg_TyphoonDistance[id] * bj_PI) / 110
if ( x - R2I(x) >= .5 ) then
set aroundArea = R2I(x) + 1
else
set aroundArea = R2I(x)
endif
//Loop ( loads effects and deals damage )
loop
exitwhen i >= aroundArea
set angle = i * 360. / aroundArea
set x = udg_TyphoonX[id] + udg_TyphoonDistance[id] * Cos( angle * bj_DEGTORAD )
set y = udg_TyphoonY[id] + udg_TyphoonDistance[id] * Sin( angle * bj_DEGTORAD )
call DestroyEffect( AddSpecialEffect( "Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl", x, y ) )
set udg_TyphoonFilterId = id
set bx = Filter( function DmgGroupFilter )
call GroupEnumUnitsInRange( g, x, y, 150., bx )
call ForGroup( g, function WaterExplDamage )
call GroupClear(g)
call DestroyBoolExpr(bx)
set bx = null
set i = i + 1
endloop
call DestroyGroup(g)
set g = null
set p = null
//End when distance is out of area
if ( udg_TyphoonDistance[id] >= udg_TyphoonArea[id] ) then
set udg_TyphoonMUI[id] = false
set udg_TyphoonX[id] = 0.
set udg_TyphoonY[id] = 0.
set udg_TyphoonArea[id] = 0.
call RemoveUnit( udg_TyphoonDummy[id] )
set udg_TyphoonDummy[id] = null
call ClearTimerData(t, true)
set t = null
endif
endfunction
//Main Actions
function Trig_Water_Explosion_Actions takes nothing returns nothing
//Init locals
local unit caster = GetTriggerUnit()
local player p = GetOwningPlayer(caster)
local integer i = 0
local real lvl = I2R(GetUnitAbilityLevel( caster, WEX_RawCode() ))
local timer t = CreateTimer()
//MUI seek
loop
exitwhen not udg_TyphoonMUI[i]
set i = i + 1
endloop
set udg_TyphoonMUI[i] = true
//Setup globals
set udg_TyphoonX[i] = GetUnitX(caster)
set udg_TyphoonY[i] = GetUnitY(caster)
set udg_TyphoonArea[i] = 400. + 25. * lvl + 25. * (lvl - 1.) + 25. * (RMaxBJ(lvl - 2., 0. ))
set udg_TyphoonDamage[i] = 20 + 20 * lvl
set udg_TyphoonDistance[i] = 50.
//Load dummy
set udg_TyphoonDummy[i] = CreateUnit( p, DUM_RawCode(), GetRandomReal(0,12), GetRandomReal(0,12), bj_UNIT_FACING )
call UnitAddAbility( udg_TyphoonDummy[i], Loc_RawCode() )
//Start spell
//Instant run timer
call SetUserTimerData( t, i )
call TimerStart( t, 0.01, false, function ExplosionActions )
call TimerStart( t, 0.33, true, function ExplosionActions )
set caster = null
set p = null
set t = null
endfunction
//Trigger non-selection dummys
function DeselectionActions takes nothing returns nothing
local unit u = GetTriggerUnit()
if ( not (GetUnitTypeId(u) == WSH_RawCode()) ) then
return
endif
call SelectUnit( u, false )
set u = null
endfunction
//===========================================================================
//Init water expl
//===========================================================================
function InitTrig_Typhoon takes nothing returns nothing
local integer i = 0
local trigger t = CreateTrigger()
set gg_trg_Typhoon = CreateTrigger( )
//Any player from 1 to 12 casts spell
loop
exitwhen i >= bj_MAX_PLAYERS
call TriggerRegisterPlayerUnitEvent( gg_trg_Typhoon, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, Filter(null) )
call TriggerRegisterPlayerUnitEvent( t, Player(i), EVENT_PLAYER_UNIT_SELECTED, Filter(null) )
set i = i + 1
endloop
call TriggerAddCondition( gg_trg_Typhoon, Condition( function WaterExplCond ) )
call TriggerAddAction( gg_trg_Typhoon, function Trig_Water_Explosion_Actions )
//=== Non - selection trigger
call TriggerAddAction( t, function DeselectionActions )
//Preloader
call Preload("Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl")
call Preload("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl")
call Preload("Abilities\\Weapons\\WaterElementalMissile\\WaterElementalMissile.mdl")
call PreloadEnd(2.)
set t = null
endfunction
function Trig_Fire_Wall_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A00D' ) ) then
return false
endif
return true
endfunction
function Trig_Fire_Wall_Actions takes nothing returns nothing
// -------------------------------------------------------------------------------------------------
// Getting the Spell constants
// -------------------------------------------------------------------------------------------------
set udg_Fire_Wall_Caster = GetTriggerUnit()
set udg_Fire_Wall_Owner = GetOwningPlayer(udg_Fire_Wall_Caster)
set udg_Fire_Wall_Ability_Level = GetUnitAbilityLevelSwapped(GetSpellAbilityId(), udg_Fire_Wall_Caster)
set udg_Fire_Wall_Location = GetSpellTargetLoc()
// -------------------------------------------------------------------------------------------------
// Setting the Spell values
// -------------------------------------------------------------------------------------------------
set udg_Fire_Wall_Duration = 10.00
set udg_Fire_Wall_Distance = 70.00
set udg_Fire_Wall_Dummy_Ability = 'A00E'
// -------------------------------------------------------------------------------------------------
// Creating and setting the dummy unit
// -------------------------------------------------------------------------------------------------
call CreateNUnitsAtLoc( 1, 'h00A', udg_Fire_Wall_Owner, udg_Fire_Wall_Location, bj_UNIT_FACING )
call UnitApplyTimedLifeBJ( udg_Fire_Wall_Duration, 'BTLF', GetLastCreatedUnit() )
call UnitAddAbilityBJ( udg_Fire_Wall_Dummy_Ability, GetLastCreatedUnit() )
call SetUnitAbilityLevelSwapped( udg_Fire_Wall_Dummy_Ability, GetLastCreatedUnit(), udg_Fire_Wall_Ability_Level )
// -------------------------------------------------------------------------------------------------
// Creating special effect
// -------------------------------------------------------------------------------------------------
call AddSpecialEffectLocBJ( udg_Fire_Wall_Location, "Abilities\\Weapons\\RedDragonBreath\\RedDragonMissile.mdl" )
call DestroyEffectBJ( GetLastCreatedEffectBJ() )
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 5
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
// -------------------------------------------------------------------------------------------------
// Setting the location
// -------------------------------------------------------------------------------------------------
set udg_Fire_Wall_Loop_Location = PolarProjectionBJ(udg_Fire_Wall_Location, ( udg_Fire_Wall_Distance * I2R(GetForLoopIndexA()) ), ( GetUnitFacing(udg_Fire_Wall_Caster) - 90.00 ))
// -------------------------------------------------------------------------------------------------
// Creating and setting the dummy unit
// -------------------------------------------------------------------------------------------------
call CreateNUnitsAtLoc( 1, 'h00A', udg_Fire_Wall_Owner, udg_Fire_Wall_Loop_Location, bj_UNIT_FACING )
call UnitApplyTimedLifeBJ( udg_Fire_Wall_Duration, 'BTLF', GetLastCreatedUnit() )
call UnitAddAbilityBJ( udg_Fire_Wall_Dummy_Ability, GetLastCreatedUnit() )
call SetUnitAbilityLevelSwapped( udg_Fire_Wall_Dummy_Ability, GetLastCreatedUnit(), udg_Fire_Wall_Ability_Level )
// -------------------------------------------------------------------------------------------------
// Creating special effect
// -------------------------------------------------------------------------------------------------
call AddSpecialEffectLocBJ( udg_Fire_Wall_Loop_Location, "Abilities\\Weapons\\RedDragonBreath\\RedDragonMissile.mdl" )
call DestroyEffectBJ( GetLastCreatedEffectBJ() )
call AddSpecialEffectLocBJ( udg_Fire_Wall_Loop_Location, "Abilities\\Spells\\Human\\Feedback\\SpellBreakerAttack.mdl" )
call DestroyEffectBJ( GetLastCreatedEffectBJ() )
// -------------------------------------------------------------------------------------------------
// Setting the location
// -------------------------------------------------------------------------------------------------
set udg_Fire_Wall_Loop_Location_2 = PolarProjectionBJ(udg_Fire_Wall_Location, ( udg_Fire_Wall_Distance * I2R(GetForLoopIndexA()) ), ( GetUnitFacing(udg_Fire_Wall_Caster) + 90.00 ))
// -------------------------------------------------------------------------------------------------
// Creating and setting the dummy unit
// -------------------------------------------------------------------------------------------------
call CreateNUnitsAtLoc( 1, 'h00A', udg_Fire_Wall_Owner, udg_Fire_Wall_Loop_Location_2, bj_UNIT_FACING )
call UnitApplyTimedLifeBJ( udg_Fire_Wall_Duration, 'BTLF', GetLastCreatedUnit() )
call UnitAddAbilityBJ( udg_Fire_Wall_Dummy_Ability, GetLastCreatedUnit() )
call SetUnitAbilityLevelSwapped( udg_Fire_Wall_Dummy_Ability, GetLastCreatedUnit(), udg_Fire_Wall_Ability_Level )
// -------------------------------------------------------------------------------------------------
// Creating special effect
// -------------------------------------------------------------------------------------------------
call AddSpecialEffectLocBJ( udg_Fire_Wall_Loop_Location_2, "Abilities\\Weapons\\RedDragonBreath\\RedDragonMissile.mdl" )
call DestroyEffectBJ( GetLastCreatedEffectBJ() )
call AddSpecialEffectLocBJ( udg_Fire_Wall_Loop_Location_2, "Abilities\\Spells\\Human\\Feedback\\SpellBreakerAttack.mdl" )
call DestroyEffectBJ( GetLastCreatedEffectBJ() )
// -------------------------------------------------------------------------------------------------
// Clearing leaks
// -------------------------------------------------------------------------------------------------
call RemoveLocation(udg_Fire_Wall_Loop_Location)
call RemoveLocation(udg_Fire_Wall_Loop_Location_2)
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
// -------------------------------------------------------------------------------------------------
// Clearing leaks
// -------------------------------------------------------------------------------------------------
call RemoveLocation(udg_Fire_Wall_Location)
endfunction
//===========================================================================
function InitTrig_Fire_Wall takes nothing returns nothing
set gg_trg_Fire_Wall = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Fire_Wall, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Fire_Wall, Condition( function Trig_Fire_Wall_Conditions ) )
call TriggerAddAction( gg_trg_Fire_Wall, function Trig_Fire_Wall_Actions )
endfunction