- Joined
- Nov 24, 2010
- Messages
- 546
Hello everyone
I need unit respawn system friendly with Evade system (check triggers).
That one respawn system is bugged but Evade system works 100% fine.
Ofcourse, if I import this system to my map it breaks Evade system.
So this one is working but disables my evade system:
:
This respawn system is bugged but Evade works 100%
So basically what I request is Evade and Respawn systems working together.
+ rep and credits will be given to creator
I need unit respawn system friendly with Evade system (check triggers).
That one respawn system is bugged but Evade system works 100% fine.
Ofcourse, if I import this system to my map it breaks Evade system.
So this one is working but disables my evade system:
:
-
CreepInt
-

Events
-


Map initialization
-
-

Conditions
-

Actions
-


Set Res_Respawn_Time = 120.00
-


Unit Group - Pick every unit in (Units in (Playable map area) owned by Neutral Hostile) and do (Actions)
-



Loop - Actions
-




Set Res_Temp_Integer = (Res_Temp_Integer + 1)
-




Unit - Set the custom value of (Picked unit) to Res_Temp_Integer
-




Set Res_Creep_Point[Res_Temp_Integer] = (Position of (Picked unit))
-
-
-
-
-
CreepRespawn
-

Events
-


Unit - A unit Dies
-
-

Conditions
-


(Owner of (Triggering unit)) Equal to Neutral Hostile
-


(Custom value of (Triggering unit)) Greater than 0
-
-

Actions
-


Wait Res_Respawn_Time game-time seconds
-


Unit - Create 1 (Unit-type of (Triggering unit)) for Neutral Hostile at Res_Creep_Point[(Custom value of (Triggering unit))] facing 270.00 degrees
-


Unit - Set the custom value of (Last created unit) to (Custom value of (Triggering unit))
-


Special Effect - Create a special effect attached to the chest of (Last created unit) using Abilities\Spells\NightElf\Blink\BlinkTarget.mdl
-


Special Effect - Destroy (Last created special effect)
-
-
-
CreepRespawnAdd
-

Events
-


Unit - A unit enters (Playable map area)
-
-

Conditions
-


(Owner of (Triggering unit)) Equal to Neutral Hostile
-
-

Actions
-


Set Res_Temp_Integer = (Res_Temp_Integer + 1)
-


Unit - Set the custom value of (Triggering unit) to Res_Temp_Integer
-


Set Res_Creep_Point[Res_Temp_Integer] = (Position of (Triggering unit))
-
-
This respawn system is bugged but Evade works 100%
-
Is Unit Moving
-

Events
-


Time - Every 0.05 seconds of game time
-


Game - UnitIndexEvent becomes Equal to 1.00
-


Game - UnitIndexEvent becomes Equal to 2.00
-
-

Conditions
-

Actions
-


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



If - Conditions
-




UnitIndexEvent Equal to 1.00
-
-



Then - Actions
-




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




-------- The next conditions let you filter out unwanted units --------
-




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




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





If - Conditions
-






(Default movement speed of UDexUnits[UDex]) Not equal to 0.00
-
-





Then - Actions
-






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






-------- Register the indexed unit to the list --------
-






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






Set UMovPrev[UMovNext[0]] = UDex
-






Set UMovNext[UDex] = UMovNext[0]
-






Set UMovNext[0] = UDex
-






Custom script: set udg_UnitMovingX[udg_UDex] = GetUnitX(udg_UDexUnits[udg_UDex])
-






Custom script: set udg_UnitMovingY[udg_UDex] = GetUnitY(udg_UDexUnits[udg_UDex])
-
-





Else - Actions
-






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






-------- The unit will not be registered --------
-






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




Custom script: elseif udg_UnitIndexEvent == 2 then
-




Custom script: if udg_UMovPrev[udg_UDex] != 0 or udg_UMovNext[0] == udg_UDex then
-




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




-------- Unregister the deindexed unit from the list --------
-




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




Set UnitMoving[UDex] = False
-




Set UMovNext[UMovPrev[UDex]] = UMovNext[UDex]
-




Set UMovPrev[UMovNext[UDex]] = UMovPrev[UDex]
-




Set UMovPrev[UDex] = 0
-




Custom script: endif
-
-



Else - Actions
-




Set UDex = UMovNext[0]
-




Custom script: loop
-




Custom script: exitwhen udg_UDex == 0
-




Custom script: set udg_TempX = GetUnitX(udg_UDexUnits[udg_UDex])
-




Custom script: set udg_TempY = GetUnitY(udg_UDexUnits[udg_UDex])
-




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




-------- Check if unit's coordinates have changed --------
-




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




Custom script: if udg_TempX != udg_UnitMovingX[udg_UDex] or udg_TempY != udg_UnitMovingY[udg_UDex] then
-




Set UnitMovingX[UDex] = TempX
-




Set UnitMovingY[UDex] = TempY
-




Custom script: if not udg_UnitMoving[udg_UDex] then
-




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




-------- The unit has started moving, fire event for UDex --------
-




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




Set UnitMoving[UDex] = True
-




Set UnitMovingEvent = 1.00
-




Set UnitMovingEvent = 0.00
-




Custom script: endif
-




Custom script: elseif udg_UnitMoving[udg_UDex] then
-




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




-------- The unit has stopped moving, fire event for UDex --------
-




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




Set UnitMoving[UDex] = False
-




Custom script: if GetUnitTypeId(udg_UDexUnits[udg_UDex]) != 0 then //To prevent firing when the unit decays/gets removed
-




Set UnitMovingEvent = 2.00
-




Set UnitMovingEvent = 0.00
-




Custom script: endif
-




Custom script: endif
-




Set UDex = UMovNext[UDex]
-




Custom script: endloop
-
-
-
-
-
GetCreep
-

Events
-


Time - Every 0.05 seconds of game time
-
-

Conditions
-

Actions
-


Custom script: set bj_wantDestroyGroup = true
-


Unit Group - Pick every unit in (Units in (Playable map area) matching ((((Matching unit) is A structure) Not equal to True) and ((((Matching unit) is alive) Equal to True) and ((Owner of (Matching unit)) Equal to Neutral Hostile)))) and do (Actions)
-



Loop - Actions
-




Set key = (Custom value of (Picked unit))
-




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





If - Conditions
-






UnitMoving[key] Equal to True
-






((Picked unit) is in EvadeGroup) Not equal to True
-
-





Then - Actions
-






Unit Group - Add (Picked unit) to EvadeGroup
-






Trigger - Turn on EvadeSystem <gen>
-
-





Else - Actions
-
-
-
-
-
-
GetInitloc
-

Events
-


Time - Elapsed game time is 1.00 seconds
-
-

Conditions
-

Actions
-


Set RespawnTime = 185.00
-


Set EvadeDist = 550.00
-


Set EvadeDelay = 1.00
-


Custom script: set bj_wantDestroyGroup = true
-


Unit Group - Pick every unit in (Units in (Playable map area)) and do (Actions)
-



Loop - Actions
-




Set key = (Custom value of (Picked unit))
-




Custom script: set udg_x[udg_key] = GetUnitX(GetEnumUnit())
-




Custom script: set udg_y[udg_key] = GetUnitY(GetEnumUnit())
-




Set time[key] = RespawnTime
-
-
-


Custom script: call DestroyTrigger(GetTriggeringTrigger())
-
-
-
GetLoc
-

Events
-


Unit - A unit enters (Playable map area)
-
-

Conditions
-

Actions
-


Set key = (Custom value of (Triggering unit))
-


Custom script: set udg_x[udg_key] = GetUnitX(GetTriggerUnit())
-


Custom script: set udg_y[udg_key] = GetUnitY(GetTriggerUnit())
-


Set time[key] = RespawnTime
-
-
-
UnitRespawn
-

Events
-


Unit - A unit Dies
-
-

Conditions
-


((Triggering unit) is A Hero) Not equal to True
-


(Owner of (Triggering unit)) Equal to Neutral Hostile
-
-

Actions
-


Custom script: local integer i = GetUnitUserData(GetTriggerUnit())
-


Custom script: local integer id = GetUnitTypeId(GetTriggerUnit())
-


Custom script: local player p = GetOwningPlayer(GetTriggerUnit())
-


Set key = (Custom value of (Triggering unit))
-


Wait time[key] seconds
-


Custom script: set udg_key = i
-


Custom script: set bj_lastCreatedUnit = CreateUnit(p, id, udg_x[udg_key], udg_y[udg_key], bj_UNIT_FACING)
-


Custom script: set udg_key = GetUnitUserData(bj_lastCreatedUnit)
-


Custom script: set udg_x[udg_key] = GetUnitX(bj_lastCreatedUnit)
-


Custom script: set udg_y[udg_key] = GetUnitY(bj_lastCreatedUnit)
-


Custom script: set p = null
-


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



If - Conditions
-




(Owner of (Triggering unit)) Equal to Neutral Hostile
-
-



Then - Actions
-




Unit Group - Remove (Triggering unit) from EvadeGroup
-
-



Else - Actions
-
-
-
-
EvadeSystem
-

Events
-


Time - Every 0.15 seconds of game time
-
-

Conditions
-

Actions
-


Unit Group - Pick every unit in EvadeGroup and do (Actions)
-



Loop - Actions
-




Custom script: local unit u = GetEnumUnit()
-




Custom script: local integer key = GetUnitUserData(u)
-




Custom script: local real dx = GetUnitX(u) - udg_x[key]
-




Custom script: local real dy = GetUnitY(u) - udg_y[key]
-




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




-------- Check if calculations should be started --------
-




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




Custom script: if udg_UnitMoving[key] and not udg_OnEvade[key] then
-




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




-------- If unit pass the conditions, count distance --------
-




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




Custom script: if SquareRoot(dx * dx + dy * dy) >= udg_EvadeDist then
-




Custom script: call IssuePointOrderById(u, 851986, udg_x[key], udg_y[key])
-




Custom script: set udg_OnEvade[key] = true
-




Custom script: set udg_p = Location(GetUnitX(u), GetUnitY(u))
-




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




-------- If greater than constant global EvadeDist then start 'evade' event --------
-




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




Unit - Make (Picked unit) Invulnerable
-




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




-------- Creating floating text --------
-




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




Floating Text - Create floating text that reads Evade at p with Z offset 0.00, using font size 9.00, color (100.00%, 100.00%, 0.00%), and 0.00% transparency
-




Floating Text - Set the velocity of (Last created floating text) to 64.00 towards 90.00 degrees
-




Floating Text - Change (Last created floating text): Disable permanence
-




Floating Text - Change the lifespan of (Last created floating text) to 3.40 seconds
-




Floating Text - Change the fading age of (Last created floating text) to 2.70 seconds
-




Custom script: endif
-




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




-------- Check if unit in is 'evade' state --------
-




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




Custom script: elseif udg_OnEvade[key] then
-




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




-------- Additional action to prefent unit from avoiding 'evade state' --------
-




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




Custom script: if GetUnitCurrentOrder(u) != 851986 then
-




Custom script: call IssuePointOrderById(u, 851986, udg_x[key], udg_y[key])
-




Custom script: endif
-




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




-------- If delay if enought, unit is restored --------
-




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




Custom script: if udg_OnDelay[key] >= udg_EvadeDelay and not udg_UnitMoving[key] then
-




Unit - Make (Picked unit) Vulnerable
-




Unit - Reset ability cooldowns for (Picked unit)
-




Custom script: call SetUnitState(u, UNIT_STATE_LIFE, GetUnitState(u, UNIT_STATE_MAX_LIFE))
-




Custom script: call SetUnitState(u, UNIT_STATE_MANA, GetUnitState(u, UNIT_STATE_MAX_MANA))
-




Custom script: set udg_OnEvade[key] = false
-




Custom script: set udg_OnDelay[key] = 0
-




Custom script: call GroupRemoveUnit(udg_EvadeGroup, u)
-




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




-------- If not, delay will be increased --------
-




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




Custom script: elseif not udg_UnitMoving[key] then
-




Custom script: set udg_OnDelay[key] = udg_OnDelay[key] + 0.1
-




Custom script: endif
-




Custom script: endif
-




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




-------- Check if unit is dead to remove it from group --------
-




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




Custom script: if GetWidgetLife(u) < 0.405 then
-




Custom script: call GroupRemoveUnit(udg_EvadeGroup, u)
-




Custom script: endif
-




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




-------- Check if group is empty, if so stop the function --------
-




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




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





If - Conditions
-






(EvadeGroup is empty) Equal to True
-
-





Then - Actions
-






Trigger - Turn off (This trigger)
-
-





Else - Actions
-
-




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




-------- Clearing leaks --------
-




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




Custom script: call RemoveLocation(udg_p)
-




Custom script: set u = null
-
-
-
-
So basically what I request is Evade and Respawn systems working together.
+ rep and credits will be given to creator
