Name | Type | is_array | initial_value |
//============================
//Freezing Field by Dark Dragon maded in Jass Craft editor
//===================
//Creates multi explosions around caster damaging enemys and slowing them
//===================
//Jass Ver of spell - 1.00
//===================
//ReadMe
//===================
//Based Dota spell - note I dont prefer to play dota as it is to much
//unbalanced and because I used Scepter and all that it looks like
//so but I only like some custom spells in dota nothing more.
//I find people talking why did I have to make a clone of dota spell?
//Answer here is simpel "in jass I mean" I added some special grafics
//and damages is not as same in dota + I cant knowe which polarprojection
//exactly IceFrog use, but however this is dota based spell.
//Feel free to use this code as your own you have rights to do anything
//whit it, if you want you can edit it and post on other sites
//but please dont replace me whit yourself you can add your nick
//as one who edited this spell.
//So have fun!!!
//===================
//Global Vars
//globals
// trigger gg_trg_Freezing_Field_Jass = null
// trigger udg_SetPoints = null
// unit udg_FF_Caster = null
// location udg_FF_Point = null
// boolean udg_FF_Exit = false
// integer udg_FF_Power = 0
// sound gg_snd_GlacierBlast
// location udg_Blast_Point
// boolean udg_IsGrfCreated = false
// integer udg_MaxGrfDis = 0
// unit array udg_u
//endglobals
//End Globals
//******* - Code - ********
//--- PolarProjections ---
// ( X )
function PolarProjectionX takes real x, real dis, real angle returns real
return x + dis * Cos( angle * bj_DEGTORAD )
endfunction
// ( Y )
function PolarProjectionY takes real y, real dis, real angle returns real
return y + dis * Sin( angle * bj_DEGTORAD )
endfunction
//--- Raw-Codes ---
//Freezing Field
constant function FF_RawCode takes nothing returns integer
return 'A000'
endfunction
//Freezing Field Upgraded
constant function FFU_RawCode takes nothing returns integer
return 'A004'
endfunction
//Freezing Field Damage
constant function FFD_RawCode takes nothing returns integer
return 'A001'
endfunction
//Dummy
constant function D_RawCode takes nothing returns integer
return 'e000'
endfunction
//Grafics Unit
constant function Grf_RawCode takes nothing returns integer
return 'e001'
endfunction
//Locust
constant function L_RawCode takes nothing returns integer
return 'Aloc'
endfunction
//Expire Timer
constant function Exp_RawCode takes nothing returns integer
return 'BTLF'
endfunction
//======= Main Condition ========
function Freezing_Field_Cond takes nothing returns boolean
return GetSpellAbilityId() == FF_RawCode() or GetSpellAbilityId() == FFU_RawCode()
endfunction
//End Trigger Actions
function Trg_Exit_FF_Act takes nothing returns nothing
set udg_FF_Exit = true
set udg_FF_Caster = null
call RemoveLocation( udg_FF_Point )
call DestroyTrigger( udg_SetPoints )
call DestroyTrigger( GetTriggeringTrigger() )
endfunction
//Custom trigger grafics
function CusGrf takes nothing returns nothing
//Define local vars
local integer i
local player p = GetOwningPlayer( udg_FF_Caster )
local location array l
local real maxdis = 600
//Increse maxgrfdis
set udg_MaxGrfDis = udg_MaxGrfDis + 1
//Load effects
if ( udg_IsGrfCreated == false ) then
set i = 1
set udg_IsGrfCreated = true
loop
exitwhen i > 36
set l[i] = Location( PolarProjectionX( GetLocationX( udg_FF_Point ), 75, 10 * I2R(i) ), PolarProjectionY( GetLocationY( udg_FF_Point ), 75, 10 * I2R(i) ) )
call CreateNUnitsAtLoc( 1, Grf_RawCode(), p, l[i], ((10 * I2R(i)) - 90) )
set udg_u[i] = GetLastCreatedUnit()
call UnitAddAbility( udg_u[i], L_RawCode() )
call RemoveLocation( l[i] )
set i = i + 1
endloop
endif
//Set grafics dis ( move )
set i = 1
loop
exitwhen i > 36
set l[i] = GetUnitLoc( udg_u[i] )
call SetUnitPosition( udg_u[i], PolarProjectionX( GetLocationX( l[i] ), 2.5, 10 * I2R(i) ), PolarProjectionY( GetLocationY( l[i] ), 2.5, 10 * I2R(i) ) )
call RemoveLocation( l[i] )
set i = i + 1
endloop
//End Grafics ( reched maxdis )
if ( udg_MaxGrfDis == maxdis / 2.5 ) then
set udg_MaxGrfDis = 0
set i = 1
loop
exitwhen i > 36
call KillUnit( udg_u[i] )
set udg_u[i] = null
set i = i + 1
endloop
call DestroyTrigger( GetTriggeringTrigger() )
endif
endfunction
//Main Trigger Explosions
function Expl takes nothing returns nothing
//Setups for explosion
local player p = GetOwningPlayer( udg_FF_Caster )
call CreateNUnitsAtLoc( 1, D_RawCode(), p, udg_Blast_Point, GetRandomReal( 0, 360 ) )
call UnitApplyTimedLife( GetLastCreatedUnit(), Exp_RawCode(), 1 )
call UnitAddAbility( GetLastCreatedUnit(), FFD_RawCode() )
call SetUnitAbilityLevel( GetLastCreatedUnit(), FFD_RawCode(), udg_FF_Power )
//Blast in nova
call IssueTargetOrder( GetLastCreatedUnit(), "frostnova", GetLastCreatedUnit() )
call RemoveLocation( udg_Blast_Point )
set p = null
endfunction
//Main Trigger Set Points
function Point_Act takes nothing returns nothing
//Loop integer i
local integer i
//X,Y locals
local real x = GetLocationX( udg_FF_Point )
local real y = GetLocationY( udg_FF_Point )
//Randomize vars
local real array r
//Exolosions trigger load
local trigger Explosions = CreateTrigger()
//AddActions To Trigger
call TriggerAddAction( Explosions, function Expl )
// Sets Points at wich the expl are created
//=========================
// Create Effects on caster
call AddSpecialEffectTarget( "Abilities\\Spells\\Items\\TomeOfRetraining\\TomeOfRetrainingCaster.mdl", udg_FF_Caster, "origin" )
call DestroyEffect( GetLastCreatedEffectBJ() )
//=========================
//End if spell is stoped casting
if ( udg_FF_Exit == true ) then
return
endif
//Custom Points Set
// 1. Explosion
set udg_Blast_Point = Location( PolarProjectionX( x, 256, 270.00), PolarProjectionY( y, 256, 270.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
// 2. Explosion
set udg_Blast_Point = Location( PolarProjectionX( x, 180, 180.00), PolarProjectionY( y, 180, 180.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
// 3. Explosion
set udg_Blast_Point = Location( PolarProjectionX( x, 189, 360.00), PolarProjectionY( y, 189, 360.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
// 4. Explosion
set udg_Blast_Point = Location( PolarProjectionX( x, 221, 90.00), PolarProjectionY( y, 221, 90.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
// 5. Explosion
set r[1] = GetRandomReal( 200, 300 )
set r[2] = GetRandomReal( 0, 360 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
// Now Multi Explosions
set i = 1
loop
exitwhen i > 5
// Skip actions if caster dies or stops channeling spell
if ( udg_FF_Exit == true ) then
return
endif
set udg_Blast_Point = Location( PolarProjectionX( x, 380, 152.00), PolarProjectionY( y, 380, 152.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 273, 0.00), PolarProjectionY( y, 273, 0.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 275, 162.00), PolarProjectionY( y, 275, 162.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 311, 74.00), PolarProjectionY( y, 311, 74.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 197, 96.00), PolarProjectionY( y, 197, 96.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 243, 124.00), PolarProjectionY( y, 243, 124.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 340, 325.00), PolarProjectionY( y, 340, 325.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 458, 192.00), PolarProjectionY( y, 458, 192.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 181, 11.00), PolarProjectionY( y, 181, 11.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 293, 142.00), PolarProjectionY( y, 293, 142.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 215, 187.00), PolarProjectionY( y, 215, 187.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 343, 11.00), PolarProjectionY( y, 343, 11.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 359, 357.00), PolarProjectionY( y, 359, 357.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 186, 164.00), PolarProjectionY( y, 186, 164.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 199, 182.00), PolarProjectionY( y, 199, 182.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 212, 263.00), PolarProjectionY( y, 212, 263.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 179, 283.00), PolarProjectionY( y, 179, 283.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 227, 78.00), PolarProjectionY( y, 227, 78.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 194, 87.00), PolarProjectionY( y, 194, 87.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 275, 162.00), PolarProjectionY( y, 275, 162.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 367, 314.00), PolarProjectionY( y, 367, 314.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 317, 47.00), PolarProjectionY( y, 317, 47.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 374, 138.00), PolarProjectionY( y, 374, 138.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 300, 220.00), PolarProjectionY( y, 300, 220.00) )
call TriggerExecute( Explosions )
set i = i + 1
endloop
// Random Creations
if ( udg_FF_Exit == true ) then
return
endif
call TriggerSleepAction( 0.05 )
set r[1] = GetRandomReal( 200, 370 )
set r[2] = GetRandomReal( 0, 90 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set r[1] = GetRandomReal( 175, 470 )
set r[2] = GetRandomReal( 40, 128 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set r[1] = GetRandomReal( 230, 348 )
set r[2] = GetRandomReal( 90, 190 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set r[1] = GetRandomReal( 200, 420 )
set r[2] = GetRandomReal( 140, 220 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
set r[1] = GetRandomReal( 200, 370 )
set r[2] = GetRandomReal( 0, 90 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set r[1] = GetRandomReal( 200, 440 )
set r[2] = GetRandomReal( 90, 180 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set r[1] = GetRandomReal( 200, 370 )
set r[2] = GetRandomReal( 180, 270 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set r[1] = GetRandomReal( 250, 470 )
set r[2] = GetRandomReal( 270, 360 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set r[1] = GetRandomReal( 250, 470 )
set r[2] = GetRandomReal( 270, 360 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set r[1] = GetRandomReal( 180, 480 )
set r[2] = GetRandomReal( 0, 360 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call DestroyTrigger( Explosions )
endfunction
//********************************************
function Freezing_Field_Act takes nothing returns nothing
//Main setup loads globals and runs func
local location l = GetUnitLoc( GetTriggerUnit() )
local real x = GetLocationX( l )
local real y = GetLocationY( l )
//Load end trigger
local trigger Exit_FF = CreateTrigger()
//Load Points Trigger
local trigger udg_SetPoints = CreateTrigger()
//Loads custom trigger for grafics
local trigger grf = CreateTrigger()
//Events natives for end trigger
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(0), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(1), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(2), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(3), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(4), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(5), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(6), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(7), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(8), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(9), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(10), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(11), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
//=========
call TriggerAddCondition( Exit_FF, Condition( function Freezing_Field_Cond ) )
call TriggerAddAction( Exit_FF, function Trg_Exit_FF_Act )
//End setup trigger
//Points Trigger
call TriggerRegisterTimerEvent( udg_SetPoints, 1.00, true )
call TriggerAddAction( udg_SetPoints, function Point_Act )
//End setup trigger
//AddActions and Events to grf and other setup
set udg_IsGrfCreated = false
call TriggerRegisterTimerEvent( grf, .01, true )
call TriggerAddAction( grf, function CusGrf )
//End setup trigger
//Declere Vars
set udg_FF_Caster = GetTriggerUnit()
set udg_FF_Point = Location( x, y )
set udg_FF_Exit = false
call RemoveLocation( l )
if ( GetSpellAbilityId() == FF_RawCode() ) then
set udg_FF_Power = GetUnitAbilityLevel( udg_FF_Caster, FF_RawCode() )
else
set udg_FF_Power = GetUnitAbilityLevel( udg_FF_Caster, FFU_RawCode() + 1 )
endif
//Execute trigger
call TriggerExecute( udg_SetPoints )
//Sleep 0.50
call TriggerSleepAction( .5 )
//Plays custom sound if caster is alive
if ( IsUnitAliveBJ( udg_FF_Caster ) == false ) then
return
endif
set l = Location( x, y )
call PlaySoundAtPointBJ( gg_snd_GlacierBlast, 100, l , 0 )
call RemoveLocation( l )
set udg_FF_Point = Location( x, y )
endfunction
function InitTrig_Freezing_Field_Jass takes nothing returns nothing
set gg_trg_Freezing_Field_Jass = CreateTrigger()
//natives are much faster
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass, Player(0), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass, Player(1), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass, Player(2), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass, Player(3), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass, Player(4), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass, Player(5), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass, Player(6), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass, Player(7), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass, Player(8), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass, Player(9), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass, Player(10), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass, Player(11), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
//======
call TriggerAddCondition( gg_trg_Freezing_Field_Jass, Condition( function Freezing_Field_Cond ) )
call TriggerAddAction( gg_trg_Freezing_Field_Jass, function Freezing_Field_Act )
endfunction
//============================
//Freezing Field by Dark Dragon maded in Jass Craft editor
//===================
//Creates multi explosions around caster damaging enemys and slowing them
//===================
//Jass Ver of spell - 1.00
//===================
//ReadMe
//===================
//Based Dota spell - note I dont prefer to play dota as it is to much
//unbalanced and because I used Scepter and all that it looks like
//so but I only like some custom spells in dota nothing more.
//I find people talking why did I have to make a clone of dota spell?
//Answer here is simpel "in jass I mean" I added some special grafics
//and damages is not as same in dota + I cant knowe which polarprojection
//exactly IceFrog use, but however this is dota based spell.
//Feel free to use this code as your own you have rights to do anything
//whit it, if you want you can edit it and post on other sites
//but please dont replace me whit yourself you can add your nick
//as one who edited this spell.
//So have fun!!!
//======================
//--- Advanced Mode ---=
//======================
//Note if you use Advanced Setup you need to copy this trigger not upper one
//Whit advanced you can customize this trigger very simply by seting vars in
//trigger "Advanced Setup" to your needs if you done this than its done,
//you dont have to do anything in this trigger
//===================
//Global Vars
//globals
// trigger gg_trg_Freezing_Field_Jass_Adv = null
// trigger udg_SetPoints = null
// unit udg_FF_Caster = null
// location udg_FF_Point = null
// boolean udg_FF_Exit = false
// integer udg_FF_Power = 0
// sound gg_snd_GlacierBlast
// location udg_Blast_Point
// boolean udg_IsGrfCreated = false
// integer udg_MaxGrfDis = 0
// integer udg_GrfDis = 0
// unit array udg_u
// integer udg_bj_UsingMaxSpell = 0
// integer array udg_AbilityId
// integer udg_DummyId
// integer udg_GrfId
// sound udg_SoundId
// integer udg_DamageId
//endglobals
//End Globals
//******* - Code - ********
//--- PolarProjections ---
// ( X )
function PolarProjectionX takes real x, real dis, real angle returns real
return x + dis * Cos( angle * bj_DEGTORAD )
endfunction
// ( Y )
function PolarProjectionY takes real y, real dis, real angle returns real
return y + dis * Sin( angle * bj_DEGTORAD )
endfunction
//--- Raw-Codes ---
//Freezing Field
function FF_RawCode takes nothing returns integer
return udg_AbilityId[0]
endfunction
//Freezing Field Upgraded
function FFU_RawCode takes nothing returns integer
return udg_AbilityId[1]
endfunction
//Freezing Field Damage
constant function FFD_RawCode takes nothing returns integer
return udg_DamageId
endfunction
//Dummy
constant function D_RawCode takes nothing returns integer
return udg_DummyId
endfunction
//Grafics Unit
constant function Grf_RawCode takes nothing returns integer
return udg_GrfId
endfunction
//Locust
constant function L_RawCode takes nothing returns integer
return 'Aloc'
endfunction
//Expire Timer
constant function Exp_RawCode takes nothing returns integer
return 'BTLF'
endfunction
//======= Main Condition ========
function Freezing_Field_Cond takes nothing returns boolean
if ( udg_bj_UsingMaxSpell == 0 ) then
return GetSpellAbilityId() == FF_RawCode()
endif
return GetSpellAbilityId() == FF_RawCode() or GetSpellAbilityId() == FFU_RawCode()
endfunction
//End Trigger Actions
function Trg_Exit_FF_Act takes nothing returns nothing
set udg_FF_Exit = true
set udg_FF_Caster = null
call RemoveLocation( udg_FF_Point )
call DestroyTrigger( udg_SetPoints )
call DestroyTrigger( GetTriggeringTrigger() )
endfunction
//Custom trigger grafics
function CusGrf takes nothing returns nothing
//Define local vars
local integer i
local player p = GetOwningPlayer( udg_FF_Caster )
local location array l
local real maxdis = udg_MaxGrfDis
//Increse maxgrfdis
set udg_GrfDis = udg_GrfDis + 1
//Load effects
if ( udg_IsGrfCreated == false ) then
set i = 1
set udg_IsGrfCreated = true
loop
exitwhen i > 36
set l[i] = Location( PolarProjectionX( GetLocationX( udg_FF_Point ), 75, 10 * I2R(i) ), PolarProjectionY( GetLocationY( udg_FF_Point ), 75, 10 * I2R(i) ) )
call CreateNUnitsAtLoc( 1, Grf_RawCode(), p, l[i], ((10 * I2R(i)) - 90) )
set udg_u[i] = GetLastCreatedUnit()
call UnitAddAbility( udg_u[i], L_RawCode() )
call RemoveLocation( l[i] )
set i = i + 1
endloop
endif
//Set grafics dis ( move )
set i = 1
loop
exitwhen i > 36
set l[i] = GetUnitLoc( udg_u[i] )
call SetUnitPosition( udg_u[i], PolarProjectionX( GetLocationX( l[i] ), 2.5, 10 * I2R(i) ), PolarProjectionY( GetLocationY( l[i] ), 2.5, 10 * I2R(i) ) )
call RemoveLocation( l[i] )
set i = i + 1
endloop
//End Grafics ( reched maxdis )
if ( udg_GrfDis == maxdis / 2.5 ) then
set udg_GrfDis = 0
set i = 1
loop
exitwhen i > 36
call KillUnit( udg_u[i] )
set udg_u[i] = null
set i = i + 1
endloop
call DestroyTrigger( GetTriggeringTrigger() )
endif
endfunction
//Main Trigger Explosions
function Expl takes nothing returns nothing
//Setups for explosion
local player p = GetOwningPlayer( udg_FF_Caster )
call CreateNUnitsAtLoc( 1, D_RawCode(), p, udg_Blast_Point, GetRandomReal( 0, 360 ) )
call UnitApplyTimedLife( GetLastCreatedUnit(), Exp_RawCode(), 1 )
call UnitAddAbility( GetLastCreatedUnit(), FFD_RawCode() )
call SetUnitAbilityLevel( GetLastCreatedUnit(), FFD_RawCode(), udg_FF_Power )
//Blast in nova
call IssueTargetOrder( GetLastCreatedUnit(), "frostnova", GetLastCreatedUnit() )
call RemoveLocation( udg_Blast_Point )
set p = null
endfunction
//Main Trigger Set Points
function Point_Act takes nothing returns nothing
//Loop integer i
local integer i
//X,Y locals
local real x = GetLocationX( udg_FF_Point )
local real y = GetLocationY( udg_FF_Point )
//Randomize vars
local real array r
//Exolosions trigger load
local trigger Explosions = CreateTrigger()
//AddActions To Trigger
call TriggerAddAction( Explosions, function Expl )
// Sets Points at wich the expl are created
//=========================
// Create Effects on caster
call AddSpecialEffectTarget( "Abilities\\Spells\\Items\\TomeOfRetraining\\TomeOfRetrainingCaster.mdl", udg_FF_Caster, "origin" )
call DestroyEffect( GetLastCreatedEffectBJ() )
//=========================
//End if spell is stoped casting
if ( udg_FF_Exit == true ) then
return
endif
//Custom Points Set
// 1. Explosion
set udg_Blast_Point = Location( PolarProjectionX( x, 256, 270.00), PolarProjectionY( y, 256, 270.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
// 2. Explosion
set udg_Blast_Point = Location( PolarProjectionX( x, 180, 180.00), PolarProjectionY( y, 180, 180.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
// 3. Explosion
set udg_Blast_Point = Location( PolarProjectionX( x, 189, 360.00), PolarProjectionY( y, 189, 360.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
// 4. Explosion
set udg_Blast_Point = Location( PolarProjectionX( x, 221, 90.00), PolarProjectionY( y, 221, 90.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
// 5. Explosion
set r[1] = GetRandomReal( 200, 300 )
set r[2] = GetRandomReal( 0, 360 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
// Now Multi Explosions
set i = 1
loop
exitwhen i > 5
// Skip actions if caster dies or stops channeling spell
if ( udg_FF_Exit == true ) then
return
endif
set udg_Blast_Point = Location( PolarProjectionX( x, 380, 152.00), PolarProjectionY( y, 380, 152.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 273, 0.00), PolarProjectionY( y, 273, 0.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 275, 162.00), PolarProjectionY( y, 275, 162.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 311, 74.00), PolarProjectionY( y, 311, 74.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 197, 96.00), PolarProjectionY( y, 197, 96.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 243, 124.00), PolarProjectionY( y, 243, 124.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 340, 325.00), PolarProjectionY( y, 340, 325.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 458, 192.00), PolarProjectionY( y, 458, 192.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 181, 11.00), PolarProjectionY( y, 181, 11.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 293, 142.00), PolarProjectionY( y, 293, 142.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 215, 187.00), PolarProjectionY( y, 215, 187.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 343, 11.00), PolarProjectionY( y, 343, 11.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 359, 357.00), PolarProjectionY( y, 359, 357.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 186, 164.00), PolarProjectionY( y, 186, 164.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 199, 182.00), PolarProjectionY( y, 199, 182.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 212, 263.00), PolarProjectionY( y, 212, 263.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 179, 283.00), PolarProjectionY( y, 179, 283.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 227, 78.00), PolarProjectionY( y, 227, 78.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 194, 87.00), PolarProjectionY( y, 194, 87.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 275, 162.00), PolarProjectionY( y, 275, 162.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 367, 314.00), PolarProjectionY( y, 367, 314.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 317, 47.00), PolarProjectionY( y, 317, 47.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 374, 138.00), PolarProjectionY( y, 374, 138.00) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set udg_Blast_Point = Location( PolarProjectionX( x, 300, 220.00), PolarProjectionY( y, 300, 220.00) )
call TriggerExecute( Explosions )
set i = i + 1
endloop
// Random Creations
if ( udg_FF_Exit == true ) then
return
endif
call TriggerSleepAction( 0.05 )
set r[1] = GetRandomReal( 200, 370 )
set r[2] = GetRandomReal( 0, 90 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set r[1] = GetRandomReal( 175, 470 )
set r[2] = GetRandomReal( 40, 128 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set r[1] = GetRandomReal( 230, 348 )
set r[2] = GetRandomReal( 90, 190 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set r[1] = GetRandomReal( 200, 420 )
set r[2] = GetRandomReal( 140, 220 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
set r[1] = GetRandomReal( 200, 370 )
set r[2] = GetRandomReal( 0, 90 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set r[1] = GetRandomReal( 200, 440 )
set r[2] = GetRandomReal( 90, 180 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set r[1] = GetRandomReal( 200, 370 )
set r[2] = GetRandomReal( 180, 270 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set r[1] = GetRandomReal( 250, 470 )
set r[2] = GetRandomReal( 270, 360 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set r[1] = GetRandomReal( 250, 470 )
set r[2] = GetRandomReal( 270, 360 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call TriggerSleepAction( 0.05 )
set r[1] = GetRandomReal( 180, 480 )
set r[2] = GetRandomReal( 0, 360 )
set udg_Blast_Point = Location( PolarProjectionX( x, r[1], r[2] ), PolarProjectionY( y, r[1], r[2] ) )
call TriggerExecute( Explosions )
call DestroyTrigger( Explosions )
endfunction
//********************************************
function Freezing_Field_Act takes nothing returns nothing
//Main setup loads globals and runs func
local location l = GetUnitLoc( GetTriggerUnit() )
local real x = GetLocationX( l )
local real y = GetLocationY( l )
//Load end trigger
local trigger Exit_FF = CreateTrigger()
//Load Points Trigger
local trigger udg_SetPoints = CreateTrigger()
//Loads custom trigger for grafics
local trigger grf = CreateTrigger()
//Events natives for end trigger
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(0), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(1), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(2), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(3), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(4), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(5), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(6), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(7), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(8), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(9), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(10), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
call TriggerRegisterPlayerUnitEvent( Exit_FF, Player(11), EVENT_PLAYER_UNIT_SPELL_ENDCAST, null )
//=========
call TriggerAddCondition( Exit_FF, Condition( function Freezing_Field_Cond ) )
call TriggerAddAction( Exit_FF, function Trg_Exit_FF_Act )
//End setup trigger
//Points Trigger
call TriggerRegisterTimerEvent( udg_SetPoints, 1.00, true )
call TriggerAddAction( udg_SetPoints, function Point_Act )
//End setup trigger
//AddActions and Events to grf and other setup
set udg_IsGrfCreated = false
call TriggerRegisterTimerEvent( grf, .01, true )
call TriggerAddAction( grf, function CusGrf )
//End setup trigger
//Declere Vars
set udg_FF_Caster = GetTriggerUnit()
set udg_FF_Point = Location( x, y )
set udg_FF_Exit = false
call RemoveLocation( l )
if ( udg_bj_UsingMaxSpell == 0 ) then
set udg_FF_Power = GetUnitAbilityLevel( udg_FF_Caster, FF_RawCode() )
elseif ( GetSpellAbilityId() == FF_RawCode() ) then
set udg_FF_Power = GetUnitAbilityLevel( udg_FF_Caster, FF_RawCode() )
else
set udg_FF_Power = GetUnitAbilityLevel( udg_FF_Caster, FFU_RawCode() + 1 )
endif
//Execute trigger
call TriggerExecute( udg_SetPoints )
//Sleep 0.50
call TriggerSleepAction( .5 )
//Plays custom sound if caster is alive
if ( IsUnitAliveBJ( udg_FF_Caster ) == false ) then
return
endif
set l = Location( x, y )
call PlaySoundAtPointBJ( udg_SoundId, 100, l , 0 )
call RemoveLocation( l )
set udg_FF_Point = Location( x, y )
endfunction
function InitTrig_Freezing_Field_Jass_Adv takes nothing returns nothing
set gg_trg_Freezing_Field_Jass_Adv = CreateTrigger()
//natives are much faster
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass_Adv, Player(0), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass_Adv, Player(1), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass_Adv, Player(2), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass_Adv, Player(3), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass_Adv, Player(4), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass_Adv, Player(5), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass_Adv, Player(6), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass_Adv, Player(7), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass_Adv, Player(8), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass_Adv, Player(9), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass_Adv, Player(10), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_Freezing_Field_Jass_Adv, Player(11), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
//======
call TriggerAddCondition( gg_trg_Freezing_Field_Jass_Adv, Condition( function Freezing_Field_Cond ) )
call TriggerAddAction( gg_trg_Freezing_Field_Jass_Adv, function Freezing_Field_Act )
endfunction