- Joined
- Sep 22, 2012
- Messages
- 90
i have been triggering a somewhat similar spell of war2 death coil,
a projectile that hits 3 targets and heals the caster upon the damage dealt:
i tried to imitate the spell and somehow it works fine. the problem is that
when cast rapidly by multiple units my task_manager shows me
that war3.exe has consumed 400,000+ kilobytes.
here are my triggers:
(P.S. my said spell/trigger is mui)
I can't tell if its something caused by runtime stuff/ too many for loops
inside or maybe i am leaking some of it.
the loop
a projectile that hits 3 targets and heals the caster upon the damage dealt:
i tried to imitate the spell and somehow it works fine. the problem is that
when cast rapidly by multiple units my task_manager shows me
that war3.exe has consumed 400,000+ kilobytes.
here are my triggers:
(P.S. my said spell/trigger is mui)
I can't tell if its something caused by runtime stuff/ too many for loops
inside or maybe i am leaking some of it.
the loop
-
missileLOOP
-

Events
-


Time - missile_rocket_TIMER expires
-
-

Conditions
-

Actions
-


-------- crosshair LOOP --------
-


For each (Integer missile_cross_ITER) from 1 to missile_cross_count, do (Actions)
-



Loop - Actions
-




-------- find casting unit --------
-




Set missile_cross_ITER_tempint = 0
-




For each (Integer missile_cross_ITER_findcaster) from 1 to A_ALLUNITS_count, do (Actions)
-





Loop - Actions
-






If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-







If - Conditions
-








missile_cross_caster[missile_cross_ITER] Equal to A_ALLUNITS_ID[missile_cross_ITER_findcaster]
-
-







Then - Actions
-








Set missile_cross_ITER_tempint = missile_cross_ITER_findcaster
-








Set missile_cross_ITER_findcaster = 999
-
-







Else - Actions
-
-
-
-




-------- instance terminate --------
-




If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-





If - Conditions
-






Or - Any (Conditions) are true
-







Conditions
-








missile_cross_maxtargets[missile_cross_ITER] Greater than or equal to 3
-








missile_cross_disp[missile_cross_ITER] Greater than or equal to 1200.00
-








missile_cross_ITER_tempint Equal to 0
-
-
-
-





Then - Actions
-






Unit - Kill missile_cross_crosshairs[missile_cross_ITER]
-






-------- CLEAR dt stack --------
-






For each (Integer missile_dt_verify) from 1 to missile_dt_count, do (Actions)
-







Loop - Actions
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










missile_cross_spellid[missile_cross_ITER] Equal to missile_dt_spellID[missile_dt_verify]
-
-









Then - Actions
-










-------- copy --------
-










Set missile_dt_spellID[missile_dt_verify] = 0
-










Set missile_dt_targets[missile_dt_verify] = 0
-










-------- nulify --------
-
-









Else - Actions
-
-
-
-






-------- copy --------
-






Set missile_cross_crosshairs[missile_cross_ITER] = missile_cross_crosshairs[missile_cross_count]
-






Set missile_cross_angle[missile_cross_ITER] = missile_cross_angle[missile_cross_count]
-






Set missile_cross_disp[missile_cross_ITER] = missile_cross_disp[missile_cross_count]
-






Set missile_cross_maxtargets[missile_cross_ITER] = missile_cross_maxtargets[missile_cross_count]
-






Set missile_cross_spellid[missile_cross_ITER] = missile_cross_spellid[missile_cross_count]
-






Set missile_cross_caster[missile_cross_ITER] = missile_cross_caster[missile_cross_count]
-






Set missile_cross_owner[missile_cross_ITER] = missile_cross_owner[missile_cross_count]
-






-------- nullify --------
-






Set missile_cross_crosshairs[missile_cross_count] = No unit
-






Set missile_cross_angle[missile_cross_count] = 0.00
-






Set missile_cross_disp[missile_cross_count] = 0.00
-






Set missile_cross_maxtargets[missile_cross_count] = 0
-






Set missile_cross_owner[missile_cross_count] = 0
-






Set missile_cross_caster[missile_cross_count] = 0
-






Set missile_cross_spellid[missile_cross_count] = 0
-






Set missile_cross_count = (missile_cross_count - 1)
-






-------- update dt table --------
-
-





Else - Actions
-
-




-------- do something with current instance --------
-




If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-





If - Conditions
-






Or - Any (Conditions) are true
-







Conditions
-








missile_cross_maxtargets[missile_cross_ITER] Greater than or equal to 3
-








missile_cross_disp[missile_cross_ITER] Greater than or equal to 1200.00
-








missile_cross_ITER_tempint Equal to 0
-
-
-
-





Then - Actions
-





Else - Actions
-






-------- move_missile_crosshair --------
-






Set missile_loc_a = (Position of missile_cross_crosshairs[missile_cross_ITER])
-






Set missile_loc_b = (missile_loc_a offset by missile_config_k_speed towards missile_cross_angle[missile_cross_ITER] degrees)
-






Unit - Move missile_cross_crosshairs[missile_cross_ITER] instantly to missile_loc_b
-






Set missile_cross_disp[missile_cross_ITER] = (missile_cross_disp[missile_cross_ITER] + missile_config_k_speed)
-






-------- pick_targets --------
-






For each (Integer missile_cross_ITER_findtargets) from 1 to A_ALLUNITS_count, do (Actions)
-







Loop - Actions
-








Set missile_cross_ITER_tempreal = 0.00
-








Set missile_loc_c = (Position of A_ALLUNITS_UNITS[missile_cross_ITER_findtargets])
-








Set missile_cross_ITER_tempreal = (Distance between missile_loc_b and missile_loc_c)
-








Custom script: call RemoveLocation(udg_missile_loc_c)
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










missile_cross_owner[missile_cross_ITER] Not equal to A_ALLUNITS_OWNER[missile_cross_ITER_findtargets]
-










missile_cross_ITER_tempreal Less than or equal to missile_config_k_col_radius
-
-









Then - Actions
-










Set missile_dt_count = (missile_dt_count + 1)
-










Set missile_cross_if_found = False
-










For each (Integer missile_dt_verify) from 1 to missile_dt_count, do (Actions)
-











Loop - Actions
-












If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-













If - Conditions
-














A_ALLUNITS_ID[missile_cross_ITER_findtargets] Equal to missile_dt_targets[missile_dt_verify]
-














missile_cross_spellid[missile_cross_ITER] Equal to missile_dt_spellID[missile_dt_verify]
-
-













Then - Actions
-














Set missile_cross_if_found = True
-














Set missile_dt_verify = A_A_BREAKER
-
-













Else - Actions
-
-
-
-










If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-











If - Conditions
-












missile_cross_if_found Equal to True
-
-











Then - Actions
-












-------- if target id already exists for current spell instance --------
-












-------- cancel the data insert on datatable --------
-












Set missile_dt_spellID[missile_dt_count] = 0
-












Set missile_dt_targets[missile_dt_count] = 0
-












Set missile_dt_count = (missile_dt_count - 1)
-
-











Else - Actions
-












-------- update DT first --------
-












Set missile_dt_targets[missile_dt_count] = A_ALLUNITS_ID[missile_cross_ITER_findtargets]
-












Set missile_dt_spellID[missile_dt_count] = missile_cross_spellid[missile_cross_ITER]
-












-------- CREATE HOMING MISSILES --------
-












Set missile_loc_d = (missile_loc_b offset by 600.00 towards (missile_cross_angle[missile_cross_ITER] + 180.00) degrees)
-












Set rockets_count = (rockets_count + 1)
-












Unit - Create 1 C_req_missiles for (Player(missile_cross_owner[missile_cross_ITER])) at missile_loc_d facing missile_cross_angle[missile_cross_ITER] degrees
-












Custom script: call RemoveLocation(udg_missile_loc_d)
-












Set rockets_rocket_rocket[rockets_count] = (Last created unit)
-












Unit - Add Crow Form to rockets_rocket_rocket[rockets_count]
-












Animation - Change rockets_rocket_rocket[rockets_count] flying height to 50.00 at 1000000000.00
-












Animation - Change rockets_rocket_rocket[rockets_count]'s animation speed to 150.00% of its original speed
-












Unit - Turn collision for rockets_rocket_rocket[rockets_count] Off
-












Unit - Move rockets_rocket_rocket[rockets_count] instantly to missile_loc_d
-












Set rockets_rocket_target[rockets_count] = A_ALLUNITS_ID[missile_cross_ITER_findtargets]
-












-------- update max targets --------
-












Set missile_cross_maxtargets[missile_cross_ITER] = (missile_cross_maxtargets[missile_cross_ITER] + 1)
-
-
-










If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-











If - Conditions
-












missile_cross_maxtargets[missile_cross_ITER] Greater than or equal to 3
-
-











Then - Actions
-












Set missile_cross_ITER_findtargets = A_A_BREAKER
-
-











Else - Actions
-
-
-









Else - Actions
-
-
-
-






Set missile_cross_ITER_tempint = 0
-






Custom script: call RemoveLocation(udg_missile_loc_b)
-






Custom script: call RemoveLocation(udg_missile_loc_a)
-
-
-
-
-


-------- ROCKETS lock loop --------
-


For each (Integer rockets_ITER) from 1 to rockets_count, do (Actions)
-



Loop - Actions
-




-------- find exact location of target on the map --------
-




Set rockets_bool_found_targetindex = 0
-




For each (Integer rockets_init_find) from 1 to A_ALLUNITS_count, do (Actions)
-





Loop - Actions
-






If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-







If - Conditions
-








rockets_rocket_target[rockets_ITER] Equal to A_ALLUNITS_ID[rockets_init_find]
-
-







Then - Actions
-








Set rockets_bool_found_targetindex = rockets_init_find
-








Set rockets_init_find = A_A_BREAKER
-
-







Else - Actions
-
-
-
-




-------- TERMINATING CONDITIONS FOR CURRENT INSTANCE --------
-




If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-





If - Conditions
-






rockets_bool_found_targetindex Equal to 0
-
-





Then - Actions
-






Set rockets_rocket_target[rockets_ITER] = 0
-
-





Else - Actions
-
-




-------- rocket iterator --------
-




If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-





If - Conditions
-






rockets_rocket_target[rockets_ITER] Equal to 0
-
-





Then - Actions
-






Unit - Kill rockets_rocket_rocket[rockets_ITER]
-






-------- copy --------
-






Set rockets_rocket_rocket[rockets_ITER] = rockets_rocket_rocket[rockets_count]
-






Set rockets_rocket_target[rockets_ITER] = rockets_rocket_target[rockets_count]
-






-------- nullify --------
-






Set rockets_rocket_target[rockets_count] = 0
-






-------- reduce --------
-






Set rockets_count = (rockets_count - 1)
-
-





Else - Actions
-
-




If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-





If - Conditions
-






rockets_rocket_target[rockets_ITER] Equal to 0
-
-





Then - Actions
-





Else - Actions
-






Set missile_loc_a = (Position of rockets_rocket_rocket[rockets_ITER])
-






Set missile_loc_b = (Position of A_ALLUNITS_UNITS[rockets_bool_found_targetindex])
-






Set rockets_ITER_tempreal = 0.00
-






Set rockets_ITER_tempreal = (Angle from missile_loc_a to missile_loc_b)
-






Set missile_loc_c = (missile_loc_a offset by rockets_config_k_speed towards rockets_ITER_tempreal degrees)
-






Unit - Move rockets_rocket_rocket[rockets_ITER] instantly to missile_loc_c, facing rockets_ITER_tempreal degrees
-






Set rockets_ITER_tempreal = 0.00
-






Set rockets_ITER_tempreal = (Distance between missile_loc_a and missile_loc_b)
-






If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-







If - Conditions
-








rockets_ITER_tempreal Less than rockets_config_k_colradius
-
-







Then - Actions
-








Set rockets_rocket_target[rockets_ITER] = 0
-
-







Else - Actions
-
-






Custom script: call RemoveLocation(udg_missile_loc_c)
-






Custom script: call RemoveLocation(udg_missile_loc_b)
-






Custom script: call RemoveLocation(udg_missile_loc_a)
-
-
-
-
-


-------- MISSILE/ROCKET loop terminator --------
-


If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-



If - Conditions
-




missile_cross_count Equal to 0
-




rockets_count Equal to 0
-
-



Then - Actions
-




Set missile_dt_count = 0
-




Set missile_INIT_spellid_create = 0
-




Game - Display to (All players) the text: missile off
-




Trigger - Turn off missileLOOP <gen>
-
-



Else - Actions
-
-
-
-
missileCAST
-

Events
-


Unit - A unit Finishes casting an ability
-
-

Conditions
-


(Ability being cast) Equal to C_/req_missiles
-
-

Actions
-


Set missile_init_caster = (Casting unit)
-


Set missile_init_loc = (Position of missile_init_caster)
-


For each (Integer missile_find_caster) from 1 to A_ALLUNITS_count, do (Actions)
-



Loop - Actions
-




If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-





If - Conditions
-






missile_init_caster Equal to A_ALLUNITS_UNITS[missile_find_caster]
-
-





Then - Actions
-






-------- create rare number fros crosshair --------
-






Set missile_INIT_spellid_create = (missile_INIT_spellid_create + 1)
-






-------- create crosshairs --------
-






Unit - Create 1 C_req_missiles (CROSSHAIR) for (Player(A_ALLUNITS_OWNER[missile_find_caster])) at missile_init_loc facing Default building facing degrees
-






Set missile_cross_count = (missile_cross_count + 1)
-






Set missile_cross_crosshairs[missile_cross_count] = (Last created unit)
-






Unit - Add Crow Form to missile_cross_crosshairs[missile_cross_count]
-






Animation - Change missile_cross_crosshairs[missile_cross_count] flying height to 50.00 at 1000000000.00
-






Animation - Change missile_cross_crosshairs[missile_cross_ITER_tempint]'s animation speed to 10.00% of its original speed
-






Unit - Turn collision for missile_cross_crosshairs[missile_cross_count] Off
-






Unit - Move missile_cross_crosshairs[missile_cross_count] instantly to missile_init_loc
-






Set missile_cross_angle[missile_cross_count] = A_ALLUNITS_ANGLE[missile_find_caster]
-






Set missile_cross_disp[missile_cross_count] = 0.00
-






Set missile_cross_maxtargets[missile_cross_count] = 0
-






Set missile_cross_spellid[missile_cross_count] = missile_INIT_spellid_create
-






Set missile_cross_caster[missile_cross_count] = A_ALLUNITS_ID[missile_find_caster]
-






Set missile_cross_owner[missile_cross_count] = A_ALLUNITS_OWNER[missile_find_caster]
-






Set missile_find_caster = A_A_BREAKER
-
-





Else - Actions
-
-
-
-


Custom script: call RemoveLocation(udg_missile_init_loc)
-


Set missile_init_caster = No unit
-


Trigger - Turn on missileLOOP <gen>
-
-
-
SYSTEMUPDATERslow
-

Events
-


Time - A_SYS_TIMER_slow expires
-
-

Conditions
-

Actions
-


-------- ------------------------------------------------------------- --------
-


-------- clear all skill data tables --------
-


-------- ------------------------------------------------------------- --------
-


-------- ROCKETS ---->--------
-


For each (Integer missile_dt_verify) from 1 to missile_dt_count, do (Actions)
-



Loop - Actions
-




If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-





If - Conditions
-






missile_dt_spellID[missile_dt_verify] Equal to 0
-
-





Then - Actions
-






-------- copy --------
-






Set missile_dt_spellID[missile_dt_verify] = missile_dt_spellID[missile_dt_count]
-






Set missile_dt_targets[missile_dt_verify] = missile_dt_targets[missile_dt_count]
-






-------- nulify --------
-






Set missile_dt_spellID[missile_dt_count] = 0
-






Set missile_dt_targets[missile_dt_count] = 0
-






-------- reduce index --------
-






Set missile_dt_count = (missile_dt_count - 1)
-
-





Else - Actions
-
-
-
-


-------- QUAKE ---->--------
-


For each (Integer quake_dt_init_verify) from 1 to quake_dt_count, do (Actions)
-



Loop - Actions
-




If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-





If - Conditions
-






quake_dt_targets_spellid[quake_dt_init_verify] Equal to 0
-
-





Then - Actions
-






Set quake_dt_targets_id[quake_dt_init_verify] = quake_dt_targets_id[quake_dt_count]
-






Set quake_dt_targets_spellid[quake_dt_init_verify] = quake_dt_targets_spellid[quake_dt_count]
-






Set quake_dt_targets_id[quake_dt_count] = 0
-






Set quake_dt_targets_spellid[quake_dt_count] = 0
-






Set quake_dt_count = (quake_dt_count - 1)
-
-





Else - Actions
-
-
-
-


-------- ------------------------------------------------------------- --------
-


-------- end clear --------
-


-------- ------------------------------------------------------------- --------
-
-


