- Joined
- Mar 1, 2020
- Messages
- 7
So basically I have a trigger that spawns a circle of power in a circle around the casting unit (in this case a town hall). Before it spawns the circle of power, I check the Z value of the terrain and check for structures that are too close. Its working real well, except after casting the ability between 5 - 15 times the game crashes. Can anyone point me in the right direction?
-
Village Initialization
-
Events
- Map initialization
- Conditions
-
Actions
- Set VariableSet Village_SpawnRangeMin = 2500.00
- Set VariableSet Village_SpawnRangeMax = 4500.00
- Set VariableSet Village_FSPV_Range = 1250.00
-
Events
-
Village FindSpawnPointValidator
- Events
- Conditions
-
Actions
- -------- CHECK Z --------
- Custom script: set udg_Village_ZReal = GetLocationZ(udg_Village_FSPV_SpawnPoint)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
Or - Any (Conditions) are true
-
Conditions
- Village_ZReal Greater than or equal to 550.00
- Village_ZReal Equal to 0.00
-
Conditions
-
Or - Any (Conditions) are true
-
Then - Actions
- Set VariableSet Village_FSPV_IsValidSpawnPoint = False
-
Else - Actions
- -------- Get all units within a range of the spawn point to check that this spawn point is valid --------
- Set VariableSet Village_temp_UnitGroup1 = (Units within Village_FSPV_Range of Village_FSPV_SpawnPoint.)
- -------- Assume the spawn point is valid by default --------
- Set VariableSet Village_FSPV_IsValidSpawnPoint = True
- -------- Enumerate the units with range of the spawn point and set FSPV_IsSpawnPointValid to false if any units would invalidate the spawn point --------
-
Unit Group - Pick every unit in Village_temp_UnitGroup1 and do (Actions)
-
Loop - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- ((Picked unit) is A town-hall-type unit) Equal to True
-
Then - Actions
- Set VariableSet Village_FSPV_IsValidSpawnPoint = False
- Else - Actions
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
Loop - Actions
-
If - Conditions
- -------- Clean up the temp unit group reference --------
- Custom script: call DestroyGroup(udg_Village_temp_UnitGroup1)
-
Village FindSpawnPoint
- Events
- Conditions
-
Actions
- Set VariableSet Village_FSP_FoundSpawnPoint = False
- -------- Try 10 times, if its consistently hard to find a point you may need to increase this number --------
-
For each (Integer A) from 1 to 10, do (Actions)
-
Loop - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- Village_FSP_FoundSpawnPoint Equal to False
-
Then - Actions
- -------- Find a random point within a min/max radius around the given target point --------
- Set VariableSet Village_temp_Point1 = (Village_FSP_TargetPoint offset by (Random real number between Village_FSP_RangeMin and Village_FSP_RangeMax) towards (Random angle) degrees.)
- -------- Run the validation trigger which will set FSP_IsValidSpawnPoint --------
- Set VariableSet Village_FSPV_SpawnPoint = Village_temp_Point1
- Trigger - Run Village FindSpawnPointValidator <gen> (ignoring conditions)
- -------- If FSPV_IsValidSpawnPoint is true we can stop looking --------
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- Village_FSPV_IsValidSpawnPoint Equal to True
-
Then - Actions
- Set VariableSet Village_FSP_FoundSpawnPoint = True
- Set VariableSet Village_FSP_SpawnPoint = Village_temp_Point1
-
Else - Actions
- -------- Clean up the temp location to avoid memory leaks --------
- Custom script: call RemoveLocation(udg_Village_temp_Point1)
-
If - Conditions
- Else - Actions
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
Loop - Actions
- -------- If we couldn't find a spawn point after N tries then we need to increase the range and try again --------
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- Village_FSPV_IsValidSpawnPoint Not equal to True
-
Then - Actions
- -------- Increase the range by some amount greater than 1.0 --------
- Set VariableSet Village_FSP_RangeMin = (Village_FSP_RangeMin x 1.50)
- Set VariableSet Village_FSP_RangeMax = (Village_FSP_RangeMax x 1.50)
- -------- And try again --------
- Trigger - Run (This trigger) (ignoring conditions)
- Else - Actions
-
If - Conditions
-
Village FindSpawnPointValidator
- Events
- Conditions
-
Actions
- -------- CHECK Z --------
- Custom script: set udg_Village_ZReal = GetLocationZ(udg_Village_FSPV_SpawnPoint)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
Or - Any (Conditions) are true
-
Conditions
- Village_ZReal Greater than or equal to 550.00
- Village_ZReal Equal to 0.00
-
Conditions
-
Or - Any (Conditions) are true
-
Then - Actions
- Set VariableSet Village_FSPV_IsValidSpawnPoint = False
-
Else - Actions
- -------- Get all units within a range of the spawn point to check that this spawn point is valid --------
- Set VariableSet Village_temp_UnitGroup1 = (Units within Village_FSPV_Range of Village_FSPV_SpawnPoint.)
- -------- Assume the spawn point is valid by default --------
- Set VariableSet Village_FSPV_IsValidSpawnPoint = True
- -------- Enumerate the units with range of the spawn point and set FSPV_IsSpawnPointValid to false if any units would invalidate the spawn point --------
-
Unit Group - Pick every unit in Village_temp_UnitGroup1 and do (Actions)
-
Loop - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- ((Picked unit) is A town-hall-type unit) Equal to True
-
Then - Actions
- Set VariableSet Village_FSPV_IsValidSpawnPoint = False
- Else - Actions
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
Loop - Actions
-
If - Conditions
- -------- Clean up the temp unit group reference --------
- Custom script: call DestroyGroup(udg_Village_temp_UnitGroup1)
Attachments
Last edited: