chobibo
Level 1 Crypt Lord
- Reaction score
- 48
@ off topic:How do you know if your spell leaks? Is there a program you use?
OK now for my real question: Does my spell leak? here it is:
I lose 100 - 200 kb of memory every time I cast this spell. I'm monitoring it via task manager. No background programs running, just warcraft 3 tft. I'm thinking its normal but I just wanted to ask to confirm if it a memory leak or not. Thanks.
OK now for my real question: Does my spell leak? here it is:
JASS:
// Global Variables used || Remove This if you're not using NewGen WE =====
globals
unit DSunit = null
endglobals
//Configuration ===========================================================
constant function DivineShieldId takes nothing returns integer
return 039;A000039; // put raw code here
endfunction
constant function DivineShieldDuration takes integer level returns integer
return 10 * level
endfunction
constant function DivineShieldRange takes integer level returns integer
return 500 + level*50
endfunction
constant function DivineShieldEffectTarget takes nothing returns string
return "Abilities\\Spells\\Human\\DivineShield\\DivineShieldTarget.mdl"
endfunction
constant function DivineShieldEffectCaster takes nothing returns string
return "Abilities\\Spells\\Human\\Resurrect\\ResurrectCaster.mdl"
endfunction
//==================================================
function DivineShieldCondition takes nothing returns boolean
return GetSpellAbilityId() == DivineShieldId()
endfunction
function DSfilter takes nothing returns boolean
return GetWidgetLife(GetFilterUnit()) > 0.405 == true and IsUnitType(GetFilterUnit(), UNIT_TYPE_MECHANICAL) == false and IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) == false and IsUnitAlly(GetFilterUnit(), GetOwningPlayer(GetTriggerUnit())) == true and GetOwningPlayer(GetFilterUnit()) != Player(PLAYER_NEUTRAL_PASSIVE)
endfunction
function DivineShieldEx takes nothing returns nothing
call ExecuteFunc("DivineShield")
endfunction
function DivineShieldAction takes nothing returns nothing
local unit u = GetTriggerUnit()
local unit fu
local integer level = GetUnitAbilityLevel( u, DivineShieldId())
local group g = CreateGroup()
local boolexpr b = Condition(function DSfilter)
call GroupEnumUnitsInRange( g, GetUnitX(u), GetUnitY(u), I2R(DivineShieldRange(level)), b)
call DestroyEffect(AddSpecialEffectTarget( DivineShieldEffectCaster(), u, "origin"))
loop
set fu = FirstOfGroup(g)
set DSunit = fu // udg_DSunit
exitwhen fu == null
call DivineShieldEx()
call GroupRemoveUnit( g, fu)
endloop
call DestroyGroup(g)
set u = null
set fu = null
set g = null
set b = null
endfunction
function DivineShield takes nothing returns nothing
local unit caster = GetTriggerUnit()
local unit u = DSunit// udg_DSunit
local effect sfx // Optional Effect
local integer level = GetUnitAbilityLevel( caster, DivineShieldId())
if GetUnitUserData(u) != 1 then
call SetUnitUserData(u, 1)
set sfx = AddSpecialEffectTarget(DivineShieldEffectTarget(), u, "origin") // Optional Effect
call SetUnitInvulnerable( u, true)
call TriggerSleepAction(I2R(DivineShieldDuration(level)))
call DestroyEffect(sfx) //Optional Effect
call SetUnitInvulnerable( u, false)
call SetUnitUserData(u, 0)
endif
set u = null
set caster = null
set DSunit = null //udg_DSunit
set sfx = null
endfunction
//===========================================================================
function DivineShieldboolexpr takes nothing returns boolean
return true
endfunction
function InitTrig_Divine_Shield takes nothing returns nothing
local integer i = 0
local player p
local boolexpr b = Condition(function DivineShieldboolexpr)
local triggeraction DivineShield_ta
local triggercondition DivineShield_tc
set gg_trg_Divine_Shield = CreateTrigger( )
loop
set p = Player(i)
call TriggerRegisterPlayerUnitEvent( gg_trg_Divine_Shield, p, EVENT_PLAYER_UNIT_SPELL_CAST, b)
set i = i + 1
set p = null
exitwhen i == bj_MAX_PLAYERS
endloop
set DivineShield_tc = TriggerAddCondition( gg_trg_Divine_Shield, Condition( function DivineShieldCondition ) )
set DivineShield_ta = TriggerAddAction( gg_trg_Divine_Shield, function DivineShieldAction )
call Preload ("Abilities\\Spells\\Human\\DivineShield\\DivineShieldTarget.mdl") // Optional Effect
call Preload("Abilities\\Spells\\Human\\Resurrect\\ResurrectCaster.mdl")
set gg_trg_Divine_Shield = null
set DivineShield_tc = null
set DivineShield_ta = null
set b = null
set p = null
endfunction
I lose 100 - 200 kb of memory every time I cast this spell. I'm monitoring it via task manager. No background programs running, just warcraft 3 tft. I'm thinking its normal but I just wanted to ask to confirm if it a memory leak or not. Thanks.