- Joined
- Jul 22, 2015
- Messages
- 3,485
Well I've been stuck on this problem for over a week. I've bugged enough people through messages and just figured to let everyone know what's going on... for whatever reason in the SP Loop, CurrentIndex is being set to 0 even though MaxIndex is still at 1 (I know this through the messages I have it displaying). Anyone know whats going on? There are 2 other triggers that I felt were irrelevant to this (Config & Death), if you need them, please let me know and I'll update my post.
EDIT: It seems its not the index, its SP_Group[CurrentIndex] thats causing problems. If I run 2 instances of the spell these are the messages I get.
EDIT2: Problem was this.
-
SP Init
-
Events
- Unit - A unit Starts the effect of an ability
-
Conditions
- (Ability being cast) Equal to SP_Ability
-
Actions
- Set SP_Target = (Target unit of ability being cast)
- -------- ---------------------------------------------------- --------
- -------- checking if target is already infected --------
- -------- if so, do not continue spell --------
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- (SP_Target is in SP_InfectedGroup) Equal to False
-
Then - Actions
- -------- ---------------------------------------------------------------------- --------
- -------- setting the current instance of spell variables --------
- Set SP_MaxIndex = (SP_MaxIndex + 1)
- Set SP_Caster[SP_MaxIndex] = (Triggering unit)
- Set SP_TargetTest[SP_MaxIndex] = (Target unit of ability being cast)
- Set SP_Player[SP_MaxIndex] = (Owner of SP_Caster[SP_MaxIndex])
- Set SP_AbilityLevel[SP_MaxIndex] = (Level of SP_Ability for SP_Caster[SP_MaxIndex])
- Set SP_Counter[SP_MaxIndex] = 0.00
- -------- ---------------------------------------------------------------------------------------------------------------------------- --------
- -------- adding unit to global infection group --------
- -------- SP_Infected ensures that a unit cannot have more than 1 infection on at a time --------
- -------- ------------------------------------------------------------------------------------------------------------ --------
- -------- creating local group variables and adding targeted unit to SP_Group --------
- -------- SP_Group are units infected by the target of the current instance --------
- Custom script: if udg_SP_Group[udg_SP_MaxIndex] == null then
- Custom script: set udg_SP_Group[udg_SP_MaxIndex] = CreateGroup()
- Custom script: endif
- Unit Group - Add SP_TargetTest[SP_MaxIndex] to SP_Group[SP_MaxIndex]
- Unit Group - Add SP_TargetTest[SP_MaxIndex] to SP_InfectedGroup
- -------- ------------------------------------------------- --------
- -------- showing infect SFX --------
- -------- adding movement speed ability --------
- Special Effect - Create a special effect attached to the SP_InfectSFX_AP of SP_TargetTest[SP_MaxIndex] using SP_InfectSFX
- Special Effect - Destroy (Last created special effect)
- Unit - Add SP_AbilityMSFactor to SP_TargetTest[SP_MaxIndex]
- -------- ------------------------------------------------------------------------ --------
- -------- checking if user wants to change color of units --------
- -------- if not, skip this nest --------
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- SP_ChangeColor Equal to True
-
Then - Actions
- Animation - Change SP_TargetTest[SP_MaxIndex]'s vertex coloring to (SP_Red%, SP_Green%, SP_Blue%) with 0.00% transparency
-
Else - Actions
- -------- //////////////////// --------
-
If - Conditions
- -------- --------------------------------------------------------- --------
- -------- check if there is an instance running --------
- -------- if so, turning on loop --------
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- SP_MaxIndex Equal to 1
-
Then - Actions
- Trigger - Turn on SP Loop <gen>
-
Else - Actions
- -------- //////////////////// --------
-
If - Conditions
-
Else - Actions
- -------- ------------------------------------------------------------------------------------------------------------------------ --------
- -------- simulates an ingame error message if caster is trying to infect an infected unit --------
- Custom script: call SimError(GetTriggerPlayer(), "That unit is already infected.")
-
If - Conditions
-
Events
-
SP Loop
-
Events
- Time - Every 0.50 seconds of game time
- Conditions
-
Actions
-
For each (Integer SP_CurrentIndex) from 1 to SP_MaxIndex, do (Actions)
-
Loop - Actions
- -------- ------------------------------------------------------------------------- --------
- -------- counting number of units in the group instance --------
- Set SP_GroupCount[SP_CurrentIndex] = (Number of units in SP_Group[SP_CurrentIndex])
-
Unit Group - Pick every unit in SP_Group[SP_CurrentIndex] and do (Actions)
-
Loop - Actions
- Set SP_PickedUnitG = (Picked unit)
- Set SP_PickedUnitGLoc = (Position of SP_PickedUnitG)
- -------- ----------------------------------------------------- --------
- -------- looking for potential units to infect --------
- Set SP_CheckGroup = (Units within SP_InfectRange of SP_PickedUnitGLoc)
-
Unit Group - Pick every unit in SP_CheckGroup and do (Actions)
-
Loop - Actions
- Set SP_PickedUnitCG = (Picked unit)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- (SP_PickedUnitCG is alive) Equal to True
- (SP_PickedUnitCG is in SP_InfectedGroup) Equal to False
- (SP_PickedUnitCG belongs to an enemy of SP_Player[SP_CurrentIndex]) Equal to True
- (SP_PickedUnitCG is Magic Immune) Equal to False
- (SP_PickedUnitCG is A structure) Equal to False
- (SP_PickedUnitCG is Mechanical) Equal to False
-
Then - Actions
- -------- -------------------------------------------------------------------------------------------- --------
- -------- checking if user wants to set a max infected unit limit or not --------
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
Or - Any (Conditions) are true
-
Conditions
- SP_InfectionLimit Equal to False
-
And - All (Conditions) are true
-
Conditions
- SP_InfectionLimit Equal to True
- SP_GroupCount[SP_CurrentIndex] Less than SP_MaxInfect[SP_AbilityLevel[SP_CurrentIndex]]
-
Conditions
-
Conditions
-
Or - Any (Conditions) are true
-
Then - Actions
- Unit Group - Add SP_PickedUnitCG to SP_Group[SP_CurrentIndex]
- Unit Group - Add SP_PickedUnitCG to SP_InfectedGroup
- Unit - Add SP_AbilityMSFactor to SP_PickedUnitCG
- Special Effect - Create a special effect attached to the SP_InfectSFX_AP of SP_PickedUnitCG using SP_InfectSFX
- Special Effect - Destroy (Last created special effect)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- SP_ChangeColor Equal to True
-
Then - Actions
- Animation - Change SP_PickedUnitCG's vertex coloring to (SP_Red%, SP_Green%, SP_Blue%) with 0.00% transparency
-
Else - Actions
- -------- //////////////////// --------
-
If - Conditions
-
Else - Actions
- -------- //////////////////// --------
-
If - Conditions
-
Else - Actions
- -------- //////////////////// --------
-
If - Conditions
-
Loop - Actions
-
Loop - Actions
- -------- ----------------------- --------
- -------- removing leaks --------
- Custom script: call RemoveLocation (udg_SP_PickedUnitGLoc)
- Custom script: call DestroyGroup (udg_SP_CheckGroup)
- -------- ----------------------------------------------------------------------------------------------------------- --------
- -------- adding 0.50 seconds to the duration of the spell until it hits max duration --------
- Set SP_Counter[SP_CurrentIndex] = (SP_Counter[SP_CurrentIndex] + 0.50)
- -------- ------------------------------------------------------------------------------ --------
- -------- checking if duration of debuff has finished --------
- -------- if not, continue to search for more targets to infect --------
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- SP_Counter[SP_CurrentIndex] Equal to SP_Duration[SP_AbilityLevel[SP_CurrentIndex]]
-
Then - Actions
- -------- ------------------------------------------------------------------------------------------------------------------------------------------- --------
- -------- spell duration has ended, dealing damage and removing MS ability --------
-
Unit Group - Pick every unit in SP_Group[SP_CurrentIndex] and do (Actions)
-
Loop - Actions
- Set SP_PickedUnitG = (Picked unit)
- Unit - Remove SP_AbilityMSFactor from SP_PickedUnitG
- Set SP_DamageCalculate[SP_CurrentIndex] = ((Max life of SP_PickedUnitG) / (100.00 / SP_Damage[SP_AbilityLevel[SP_CurrentIndex]]))
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- SP_ChangeColor Equal to True
-
Then - Actions
- Animation - Change SP_PickedUnitG's vertex coloring to (100.00%, 100.00%, 100.00%) with 0.00% transparency
-
Else - Actions
- -------- //////////////////// --------
-
If - Conditions
- Special Effect - Create a special effect attached to the SP_DamageSFX_AP of SP_PickedUnitG using SP_DamageSFX
- Special Effect - Destroy (Last created special effect)
- Unit - Cause SP_Caster[SP_CurrentIndex] to damage SP_PickedUnitG, dealing SP_DamageCalculate[SP_CurrentIndex] damage of attack type SP_AttackType and damage type SP_DamageType
- Unit Group - Remove SP_PickedUnitG from SP_Group[SP_CurrentIndex]
- Unit Group - Remove SP_PickedUnitG from SP_InfectedGroup
-
Loop - Actions
- -------- -------------------------- --------
- -------- recycling variables --------
- Set SP_Caster[SP_CurrentIndex] = SP_Caster[SP_MaxIndex]
- Set SP_Player[SP_CurrentIndex] = SP_Player[SP_MaxIndex]
- Set SP_Group[SP_CurrentIndex] = SP_Group[SP_MaxIndex]
- Set SP_AbilityLevel[SP_CurrentIndex] = SP_AbilityLevel[SP_MaxIndex]
- Set SP_Counter[SP_CurrentIndex] = SP_Counter[SP_MaxIndex]
- Set SP_MaxIndex = (SP_MaxIndex - 1)
- Set SP_CurrentIndex = (SP_CurrentIndex - 1)
- Game - Display to (All players) the text: (Max Index Count: + (String(SP_MaxIndex)))
- Game - Display to (All players) the text: (Number of Units in Group: + (String((Number of units in SP_Group[SP_CurrentIndex]))))
- -------- ----------------------- --------
- -------- removing leaks --------
- Custom script: call DestroyGroup (udg_SP_Group[udg_SP_MaxIndex + 1])
- Custom script: set udg_SP_Group[udg_SP_MaxIndex + 1] = null
- -------- -------------------------------------------------------------------------------- --------
- -------- checking if there are any instances of spell running --------
- -------- if not, removing remaining leak and turning off loop --------
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- SP_MaxIndex Equal to 0
-
Then - Actions
- Trigger - Turn off (This trigger)
-
Else - Actions
- -------- //////////////////// --------
-
If - Conditions
-
Else - Actions
- -------- //////////////////// --------
-
If - Conditions
-
Loop - Actions
-
For each (Integer SP_CurrentIndex) from 1 to SP_MaxIndex, do (Actions)
-
Events
- Max Index: 1
- Max Index: 2
(Instance 1 finishes) - Max Index: 1
- Number of Units in Group: 0
(Instance 2 finishes) - Max Index: 0
- Number of Units in Group: 0
EDIT2: Problem was this.
- Set SP_Group[SP_CurrentIndex] = SP_Group[SP_MaxIndex]
- Unit Group - Add all units of SP_Group[SP_MaxIndex] to SP_Group[SP_CurrentIndex]
Last edited: