| 01-10-2005, 07:21 PM | #1 |
Ok, This trigger leaks, I don't know where, so if u have some time to go through this code I would realy appreciate it. Code:
// FADING TEXT FUNCTION IN WEU
function FadingText_child takes nothing returns nothing
local integer alpha=255
local integer red=S2I(SubString(bj_cineFadeContinueTex,1,4))
local integer green=S2I(SubString(bj_cineFadeContinueTex,4,7))
local integer blue=S2I(SubString(bj_cineFadeContinueTex,7,10))
local texttag t= bj_lastCreatedTextTag
call DestroyTrigger(GetTriggeringTrigger())
call TriggerSleepAction(1.00)
loop
set alpha=alpha - 32
exitwhen alpha <= 0
call SetTextTagColor(t,red,green,blue,alpha)
call TriggerSleepAction(0.01)
endloop
call DestroyTextTag(t)
set t = null
endfunction
function FadingText takes string msg, integer red, integer green, integer blue, real x, real y returns nothing
local texttag t = CreateTextTag()
local trigger child = CreateTrigger()
call SetTextTagText(t,msg,0.025)
call SetTextTagPos(t,x,y, 0.00)
call SetTextTagColor(t,red,green,blue,255)
call SetTextTagVelocity(t,0,0.02)
call TriggerAddAction(child, function FadingText_child)
set bj_lastCreatedTextTag=t
set bj_cineFadeContinueTex=I2S(1000000000 + red * 1000000 + green * 1000 + blue)
call TriggerExecute(child)
endfunction
// FADING TEXT FUNCTION IN WEU
// INFLICTDAMAGE FUNCTION
function inflictdamage takes unit u, unit target, real damage, integer typeofdamage, sound s returns nothing
local real truedamage
local integer i
local integer randnr
local integer evasion
local integer showdmg
local location l
local real randomdmg
set l = GetUnitLoc(target)
set i = GetConvertedPlayerId(GetOwningPlayer(target))
set evasion = R2I(udg_HeroEvasion[i])
if ( typeofdamage == 1 ) then
set randnr = GetRandomInt(1, 100)
if ( randnr > evasion ) then
set randomdmg = GetRandomReal(1.00, 10.00)
set damage = damage + randomdmg
set truedamage = damage - (udg_HeroDefense[i] * 3)
call UnitDamageTargetBJ( u, target, truedamage, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL )
set showdmg = R2I(truedamage)
call FadingText( I2S(showdmg), 255, 0, 0, GetUnitX(target), GetUnitY(target) )
call PlaySoundAtPointBJ( s, 100, l, 0 )
else
endif
else
endif
call RemoveLocation(l)
set l = null
endfunction
// INFLICTDAMAGE FUNCTION
//CONDITION
function Trig_AttackSword_Conditions takes nothing returns boolean
if (GetSpellAbilityId() == 'A000') then
return true
endif
return false
endfunction
//CONDITION
function GroupCheck takes nothing returns boolean
return ( IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(udg_Hero[udg_IntTempAttack])) and IsUnitAliveBJ(GetFilterUnit()) )
endfunction
//MAIN
function Trig_AttackSword_Actions takes nothing returns nothing
local group g = null
local unit u = null
local location l
local integer k
local integer k2
local integer i
local integer showdmg
local integer typeofdamage
local rect r
local real array re
local real damage
local real randomdmg
local sound s
set s = gg_snd_MetalHeavyBashFlesh3
set i = GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))
call TriggerSleepAction( 0.01 )
set udg_BoolHeroArrowUp[i] = false
set udg_BoolHeroArrowDown[i] = false
set udg_BoolHeroArrowLeft[i] = false
set udg_BoolHeroArrowRight[i] = false
set udg_RealTimerMovement[i] = 1
set l = GetUnitLoc(udg_Hero[i])
set r = RectFromCenterSizeBJ(PolarProjectionBJ( l, 90.00, GetUnitFacing(udg_Hero[i])), 240.00, 240.00)
call ResetUnitAnimation( udg_Hero[i] )
call SetUnitAnimation( udg_Hero[i], "attack" )
set udg_IntTempAttack = i
set g = GetUnitsInRectMatching(r, Condition(function GroupCheck))
set k = CountUnitsInGroup(g)
set k2 = 0
if ( k > 0 ) then
loop
exitwhen k2 >= k
set u = GroupPickRandomUnit(g)
if ( IsUnitType( u, UNIT_TYPE_HERO) == true ) then
set typeofdamage = 1
set damage = udg_HeroDamageMain[i]
if (udg_HeroCharge[i] < 100 ) then
set damage = damage * 0.05
endif
set udg_HeroCharge[i] = 0
set udg_StringTest[i] = ""
call inflictdamage( udg_Hero[i], u, damage,typeofdamage,s)
call GroupRemoveUnitSimple( u, g )
else
call PlaySoundAtPointBJ( gg_snd_MetalHeavyBashFlesh3, 100, l, 0 )
set damage = udg_HeroDamageMain[i]
if (udg_HeroCharge[i] < 100 ) then
set damage = damage * 0.05
endif
set udg_HeroCharge[i] = 0
set udg_StringTest[i] = ""
set randomdmg = GetRandomReal(1.00, 10.00)
set damage = damage + randomdmg
call UnitDamageTargetBJ( udg_Hero[i], u, damage, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL )
set showdmg = R2I(damage)
call FadingText( I2S(showdmg), 255, 0, 0, GetUnitX(u), GetUnitY(u) )
call GroupRemoveUnitSimple( u, g )
endif
set k2 = k2 + 1
endloop
else
set udg_HeroCharge[i] = 0
set udg_StringTest[i] = ""
endif
call GroupClear( g )
call DestroyGroup( g )
call RemoveLocation (l)
call RemoveRect(r)
set l = null
set u = null
set r = null
set g = null
endfunction
//MAIN
//===========================================================================
function InitTrig_Attack_Warrior takes nothing returns nothing
set gg_trg_Attack_Warrior = CreateTrigger( )
call TriggerRegisterPlayerUnitEventSimple( gg_trg_Attack_Warrior, Player(0), EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerRegisterPlayerUnitEventSimple( gg_trg_Attack_Warrior, Player(1), EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerRegisterPlayerUnitEventSimple( gg_trg_Attack_Warrior, Player(2), EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerRegisterPlayerUnitEventSimple( gg_trg_Attack_Warrior, Player(3), EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerRegisterPlayerUnitEventSimple( gg_trg_Attack_Warrior, Player(4), EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerRegisterPlayerUnitEventSimple( gg_trg_Attack_Warrior, Player(5), EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerRegisterPlayerUnitEventSimple( gg_trg_Attack_Warrior, Player(6), EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerRegisterPlayerUnitEventSimple( gg_trg_Attack_Warrior, Player(7), EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerRegisterPlayerUnitEventSimple( gg_trg_Attack_Warrior, Player(8), EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerRegisterPlayerUnitEventSimple( gg_trg_Attack_Warrior, Player(9), EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition( gg_trg_Attack_Warrior, Condition( function Trig_AttackSword_Conditions ) )
call TriggerAddAction( gg_trg_Attack_Warrior, function Trig_AttackSword_Actions )
endfunction
|
| 01-10-2005, 07:46 PM | #2 |
OPS, sorry, found out that this trigger is in fact not leaking at all. Maybe some minor leak, I had another trigger that was the source of the leak, but I've fixed that now. |
| 01-10-2005, 10:18 PM | #3 |
Nevertheless you should Destroy and null the local trigger at the end of your FadingText function. |
