- Joined
- Dec 9, 2007
- Messages
- 3,096
JASS:
scope FireBolts initializer Init
//~~~~~~ Start of creation
//===========================================================================
globals
private constant integer AbilityID = 'A001'
private constant integer DummyID = 'u000'
private constant real SpeedPerSecond = 700.00
private constant real AcquireTargetsRange = 50.00
private constant real DamageSplashRadius = 120.00
private real LifeSpam
group FBs
private group Targets
endglobals
private function Conditions takes nothing returns boolean
return (GetSpellAbilityId() == AbilityID)
endfunction
private function Actions1 takes nothing returns nothing
local real ox = GetUnitX(GetTriggerUnit())
local real oy = GetUnitY(GetTriggerUnit())
local location p = GetSpellTargetLoc()
local real px = GetLocationX(p)
local real py = GetLocationY(p)
local real angle = bj_RADTODEG * Atan2(py - oy, px - px)
local real x = ox + 15 * Cos(angle * bj_DEGTORAD)
local real y = oy + 15 * Sin(angle * bj_DEGTORAD)
local unit u = CreateUnit( GetOwningPlayer(GetTriggerUnit()), DummyID, x, y, angle)
set LifeSpam = 3.00 + GetUnitAbilityLevel(GetTriggerUnit(), AbilityID)
call GroupAddUnit( FBs, u )
call SetWidgetLife( u, LifeSpam )
call SetUnitUserData( u, ( GetHeroInt(GetSpellAbilityUnit(), true) * GetUnitAbilityLevel(GetSpellAbilityUnit(), AbilityID) ) )
call RemoveLocation(p)
endfunction
private constant function AntiLeak takes nothing returns boolean
return true
endfunction
//===========================================================================
//~~~~~~ End of creation
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~ Start of movement
//===========================================================================
private function Filtru takes nothing returns boolean
return (GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) > .405) and (IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetEnumUnit())) == true)
endfunction
private function ITE takes nothing returns boolean
call ForGroup(Targets, function CountUnitsInGroupEnum)
if ( ( bj_groupCountUnits >= 1 ) ) then
return true
endif
if ( ( GetUnitState(GetEnumUnit(), UNIT_STATE_LIFE) <= 0.00 ) ) then
return true
endif
return false
endfunction
private function Move takes nothing returns nothing
local location p = GetUnitLoc(GetEnumUnit())
local real angle = GetUnitFacing(GetEnumUnit())
local real dist = SpeedPerSecond / 100
local real x = GetLocationX(p) + dist * Cos(angle * bj_DEGTORAD)
local real y = GetLocationY(p) + dist * Sin(angle * bj_DEGTORAD)
local location pp = Location(x, y)
//^Locations
local real dmg = I2R(GetUnitUserData(GetEnumUnit()))
local real radiustargets = AcquireTargetsRange
local real radiusdmg = DamageSplashRadius
//^Damage
local effect boom
local string sfxpath = "Abilities\\Spells\\Other\\Incinerate\\FireLordDeathExplode.mdl"
//^Special Effect
//Done with setup.
call SetWidgetLife( GetEnumUnit(), ( GetUnitState( GetEnumUnit(), UNIT_STATE_LIFE ) - 0.01 ) )
call SetUnitPositionLoc( GetEnumUnit(), pp )
//^ Move and take hp
set Targets = CreateGroup()
call GroupEnumUnitsInRangeOfLoc(Targets, p, radiustargets, Condition(function Filtru))
call DestroyBoolExpr(Condition(function Filtru))
//^ Filter Enemies
if ( ITE() ) then
call UnitDamagePoint( GetEnumUnit(), 0.00, radiusdmg, GetLocationX(p), GetLocationY(p), dmg, true, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_FIRE, WEAPON_TYPE_WHOKNOWS )
//^ Splash Damage
set boom = AddSpecialEffectLoc( sfxpath, pp )
call DestroyEffect(boom)
//^ Boom effect
call RemoveUnit( GetEnumUnit() )
endif
set bj_groupCountUnits = 0
call DestroyGroup(Targets)
call RemoveLocation(p)
call RemoveLocation(pp)
//^ Cleaning.
endfunction
function Actions2 takes nothing returns nothing
call ForGroup( FBs, function Move )
endfunction
private function Init takes nothing returns nothing
local trigger t = CreateTrigger()
local filterfunc f = Filter(function AntiLeak)
local integer i = 0
local trigger trg = CreateTrigger( )
loop
call TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, f)
set i = i + 1
exitwhen i >= 16
endloop
call TriggerAddCondition(t, Condition( function Conditions ) )
call TriggerAddAction(t, function Actions1 )
call DestroyFilter(f)
set f = null
call TriggerRegisterTimerEvent( trg, 0.01, true )
call TriggerAddAction( trg, function Actions2 )
endfunction
//===========================================================================
//~~~~~~ End of movement
endscope
What the heck is wrong with this??!!
In game it says there's an uninitialized variable in the Actions2 function!
Freaking help me!
I am trying to fix this crap and I can't get it working without using a global variable of GUI!