- Joined
- Jun 30, 2014
- Messages
- 72
Player-Number Based Hero Revive
Basic Description
It's JASS-free. It's scriptless. It's codeless. This is a hero revival system, that, believe it or not, only uses a single trigger. When a hero dies, the trigger uses the player number of the player who owns that hero to keep each hero separate. Of course, this means that the players must all have only one hero. Remember this, it's very important. Because of this, this system works best in RPG maps where players usually have one hero. In my example, I used a condition that makes the trigger affect only one Force (team). In theory, I could have as many of this trigger as I had teams. May require one copy of each variable per copy of the trigger.
The Trigger (Yes, only one)
Wait... First is:
A List Of Variables
All these Arrays! Looks complicated to someone who little triggering experience, but help keep everything separate, which is one of the benefits of this trigger.
Default Value is 0, empty, nothing unless otherwise noted.
-ReviveHero_Array
A Unit array to hold each of the heroes. The array Index maximum should be equal to the number of players who have a hero this trigger will revive.
-RevivePlayer_Array
An Integer array. Holds the player number of each player this trigger will revive a hero for. The array Index maximum should be equal to the number of players who have a hero this trigger will revive.
-RevTimer
A Timer array. Holds a separate timer for each player this trigger affects.
-TimerStart
A Real variable. Stores a Real value (I know it sounds/looks funny), in this case the starting time of the timer. Doesn't need to be an array, because all the timers are the same starting time (10 seconds for mine.)
-RevTimeWindow_Array
A Timer Window array. Holds a separate timer window for each player this trigger affects. The array Index maximum should be equal to the number of players who have a hero this trigger will revive.
The Trigger Itself
The trigger as it appears, with my comments.
-
HeroRevive
-

Events
-


Unit - A unit Dies
-

Conditions
-


((Dying unit) is A Hero) Equal to True
-


((Dying unit) belongs to an ally of Player 1 (Red)) Equal to True
-


((Dying unit) has an item of type Ankh of Reincarnation) Equal to False
-

Actions
-


-------- Keeps track of which players have died --------
-


Set DeadYet[(Player number of (Owner of (Dying unit)))] = True
-


-------- Keeps the player's Hero in a unit array, Indexed to their player number --------
-


Set ReviveHero_Array[(Player number of (Owner of (Dying unit)))] = (Dying unit)
-


-------- Keeps the player's player number in an integer array indexed to their player number --------
-


Set RevivePlayer_Array[(Player number of (Owner of (Dying unit)))] = (Player number of (Owner of (Dying unit)))
-


-------- ^Now each player has an index slot equal to their player number --------
-


-------- A countdown until your character revives, one for each player --------
-


Countdown Timer - Start RevTimer[RevivePlayer_Array[(Player number of (Owner of (Dying unit)))]] as a One-shot timer that will expire in 10.00 seconds
-


-------- Later in the trigger, it becomes important to know the initial time of the timer --------
-


Set TimerStart = (Initial time for RevTimer[RevivePlayer_Array[(Player number of (Owner of (Dying unit)))]])
-


-------- A timer window gives the player(s) a visual countdown --------
-


Countdown Timer - Create a timer window for RevTimer[(Player number of (Owner of (Dying unit)))] with title (Name of (Owner of (Dying unit)))
-


-------- These keep each timer and timer window player-specific --------
-


Set RevTimeWindow_Array[(Player number of (Owner of (Dying unit)))] = (Last created timer window)
-


Set RevTimer[(Player number of (Owner of (Dying unit)))] = (Last started timer)
-


-------- This allows a timer to start, and then check when it expires (initial time = time elapsed), in one trigger --------
-


Wait until ((Integer(TimerStart)) Equal to (Integer((Elapsed time for RevTimer[RevivePlayer_Array[(Player number of (Owner of (Dying unit)))]])))), checking every 0.50 seconds
-


-------- Now that the timer has expired, removes the timer window for that player --------
-


Countdown Timer - Destroy RevTimeWindow_Array[(Player number of (Owner of (Dying unit)))]
-


-------- Revive the player's hero at their spawn point (just put all the player start locations on top of each other in the dungeon's first room) --------
-


Hero - Instantly revive ReviveHero_Array[(Player number of (Owner of (Dying unit)))] at ((Owner of (Dying unit)) start location), Show revival graphics
-


-------- I'm currently working on a system to move the revive location to each "checkpoint" a player passes --------
Feedback is much appreciated.
Basic Description
It's JASS-free. It's scriptless. It's codeless. This is a hero revival system, that, believe it or not, only uses a single trigger. When a hero dies, the trigger uses the player number of the player who owns that hero to keep each hero separate. Of course, this means that the players must all have only one hero. Remember this, it's very important. Because of this, this system works best in RPG maps where players usually have one hero. In my example, I used a condition that makes the trigger affect only one Force (team). In theory, I could have as many of this trigger as I had teams. May require one copy of each variable per copy of the trigger.
The Trigger (Yes, only one)
Wait... First is:
A List Of Variables
All these Arrays! Looks complicated to someone who little triggering experience, but help keep everything separate, which is one of the benefits of this trigger.
Default Value is 0, empty, nothing unless otherwise noted.
-ReviveHero_Array
A Unit array to hold each of the heroes. The array Index maximum should be equal to the number of players who have a hero this trigger will revive.
-RevivePlayer_Array
An Integer array. Holds the player number of each player this trigger will revive a hero for. The array Index maximum should be equal to the number of players who have a hero this trigger will revive.
-RevTimer
A Timer array. Holds a separate timer for each player this trigger affects.
-TimerStart
A Real variable. Stores a Real value (I know it sounds/looks funny), in this case the starting time of the timer. Doesn't need to be an array, because all the timers are the same starting time (10 seconds for mine.)
-RevTimeWindow_Array
A Timer Window array. Holds a separate timer window for each player this trigger affects. The array Index maximum should be equal to the number of players who have a hero this trigger will revive.
The Trigger Itself
The trigger as it appears, with my comments.
-
HeroRevive
-

Events
-


Unit - A unit Dies
-

Conditions
-


((Dying unit) is A Hero) Equal to True
-


((Dying unit) belongs to an ally of Player 1 (Red)) Equal to True
-


((Dying unit) has an item of type Ankh of Reincarnation) Equal to False
-

Actions
-


-------- Keeps track of which players have died --------
-


Set DeadYet[(Player number of (Owner of (Dying unit)))] = True
-


-------- Keeps the player's Hero in a unit array, Indexed to their player number --------
-


Set ReviveHero_Array[(Player number of (Owner of (Dying unit)))] = (Dying unit)
-


-------- Keeps the player's player number in an integer array indexed to their player number --------
-


Set RevivePlayer_Array[(Player number of (Owner of (Dying unit)))] = (Player number of (Owner of (Dying unit)))
-


-------- ^Now each player has an index slot equal to their player number --------
-


-------- A countdown until your character revives, one for each player --------
-


Countdown Timer - Start RevTimer[RevivePlayer_Array[(Player number of (Owner of (Dying unit)))]] as a One-shot timer that will expire in 10.00 seconds
-


-------- Later in the trigger, it becomes important to know the initial time of the timer --------
-


Set TimerStart = (Initial time for RevTimer[RevivePlayer_Array[(Player number of (Owner of (Dying unit)))]])
-


-------- A timer window gives the player(s) a visual countdown --------
-


Countdown Timer - Create a timer window for RevTimer[(Player number of (Owner of (Dying unit)))] with title (Name of (Owner of (Dying unit)))
-


-------- These keep each timer and timer window player-specific --------
-


Set RevTimeWindow_Array[(Player number of (Owner of (Dying unit)))] = (Last created timer window)
-


Set RevTimer[(Player number of (Owner of (Dying unit)))] = (Last started timer)
-


-------- This allows a timer to start, and then check when it expires (initial time = time elapsed), in one trigger --------
-


Wait until ((Integer(TimerStart)) Equal to (Integer((Elapsed time for RevTimer[RevivePlayer_Array[(Player number of (Owner of (Dying unit)))]])))), checking every 0.50 seconds
-


-------- Now that the timer has expired, removes the timer window for that player --------
-


Countdown Timer - Destroy RevTimeWindow_Array[(Player number of (Owner of (Dying unit)))]
-


-------- Revive the player's hero at their spawn point (just put all the player start locations on top of each other in the dungeon's first room) --------
-


Hero - Instantly revive ReviveHero_Array[(Player number of (Owner of (Dying unit)))] at ((Owner of (Dying unit)) start location), Show revival graphics
-


-------- I'm currently working on a system to move the revive location to each "checkpoint" a player passes --------
Feedback is much appreciated.
It's JASS-free. It's scriptless. It's codeless. This is a hero revival system, that, believe it or not, only uses a single trigger. When a hero dies, the trigger uses the player number of the player who owns that hero to keep each hero separate. Of course, this means that the players must all have only one hero. Remember this, it's very important. Because of this, this system works best in RPG maps where players usually have one hero. In my example, I used a condition that makes the trigger affect only one Force (team). In theory, I could have as many of this trigger as I had teams. May require one copy of each variable per copy of the trigger.
The Trigger (Yes, only one)
Wait... First is:
A List Of Variables
All these Arrays! Looks complicated to someone who little triggering experience, but help keep everything separate, which is one of the benefits of this trigger.
Default Value is 0, empty, nothing unless otherwise noted.
-ReviveHero_Array
A Unit array to hold each of the heroes. The array Index maximum should be equal to the number of players who have a hero this trigger will revive.
-RevivePlayer_Array
An Integer array. Holds the player number of each player this trigger will revive a hero for. The array Index maximum should be equal to the number of players who have a hero this trigger will revive.
-RevTimer
A Timer array. Holds a separate timer for each player this trigger affects.
-TimerStart
A Real variable. Stores a Real value (I know it sounds/looks funny), in this case the starting time of the timer. Doesn't need to be an array, because all the timers are the same starting time (10 seconds for mine.)
-RevTimeWindow_Array
A Timer Window array. Holds a separate timer window for each player this trigger affects. The array Index maximum should be equal to the number of players who have a hero this trigger will revive.
The Trigger Itself
The trigger as it appears, with my comments.
-
HeroRevive
-

Events
-


Unit - A unit Dies
-

Conditions
-


((Dying unit) is A Hero) Equal to True
-


((Dying unit) belongs to an ally of Player 1 (Red)) Equal to True
-


((Dying unit) has an item of type Ankh of Reincarnation) Equal to False
-

Actions
-


-------- Keeps track of which players have died --------
-


Set DeadYet[(Player number of (Owner of (Dying unit)))] = True
-


-------- Keeps the player's Hero in a unit array, Indexed to their player number --------
-


Set ReviveHero_Array[(Player number of (Owner of (Dying unit)))] = (Dying unit)
-


-------- Keeps the player's player number in an integer array indexed to their player number --------
-


Set RevivePlayer_Array[(Player number of (Owner of (Dying unit)))] = (Player number of (Owner of (Dying unit)))
-


-------- ^Now each player has an index slot equal to their player number --------
-


-------- A countdown until your character revives, one for each player --------
-


Countdown Timer - Start RevTimer[RevivePlayer_Array[(Player number of (Owner of (Dying unit)))]] as a One-shot timer that will expire in 10.00 seconds
-


-------- Later in the trigger, it becomes important to know the initial time of the timer --------
-


Set TimerStart = (Initial time for RevTimer[RevivePlayer_Array[(Player number of (Owner of (Dying unit)))]])
-


-------- A timer window gives the player(s) a visual countdown --------
-


Countdown Timer - Create a timer window for RevTimer[(Player number of (Owner of (Dying unit)))] with title (Name of (Owner of (Dying unit)))
-


-------- These keep each timer and timer window player-specific --------
-


Set RevTimeWindow_Array[(Player number of (Owner of (Dying unit)))] = (Last created timer window)
-


Set RevTimer[(Player number of (Owner of (Dying unit)))] = (Last started timer)
-


-------- This allows a timer to start, and then check when it expires (initial time = time elapsed), in one trigger --------
-


Wait until ((Integer(TimerStart)) Equal to (Integer((Elapsed time for RevTimer[RevivePlayer_Array[(Player number of (Owner of (Dying unit)))]])))), checking every 0.50 seconds
-


-------- Now that the timer has expired, removes the timer window for that player --------
-


Countdown Timer - Destroy RevTimeWindow_Array[(Player number of (Owner of (Dying unit)))]
-


-------- Revive the player's hero at their spawn point (just put all the player start locations on top of each other in the dungeon's first room) --------
-


Hero - Instantly revive ReviveHero_Array[(Player number of (Owner of (Dying unit)))] at ((Owner of (Dying unit)) start location), Show revival graphics
-


-------- I'm currently working on a system to move the revive location to each "checkpoint" a player passes --------
Feedback is much appreciated.
Wait... First is:
A List Of Variables
All these Arrays! Looks complicated to someone who little triggering experience, but help keep everything separate, which is one of the benefits of this trigger.
Default Value is 0, empty, nothing unless otherwise noted.
-ReviveHero_Array
A Unit array to hold each of the heroes. The array Index maximum should be equal to the number of players who have a hero this trigger will revive.
-RevivePlayer_Array
An Integer array. Holds the player number of each player this trigger will revive a hero for. The array Index maximum should be equal to the number of players who have a hero this trigger will revive.
-RevTimer
A Timer array. Holds a separate timer for each player this trigger affects.
-TimerStart
A Real variable. Stores a Real value (I know it sounds/looks funny), in this case the starting time of the timer. Doesn't need to be an array, because all the timers are the same starting time (10 seconds for mine.)
-RevTimeWindow_Array
A Timer Window array. Holds a separate timer window for each player this trigger affects. The array Index maximum should be equal to the number of players who have a hero this trigger will revive.
The Trigger Itself
The trigger as it appears, with my comments.
-
HeroRevive
-

Events
-


Unit - A unit Dies
-

Conditions
-


((Dying unit) is A Hero) Equal to True
-


((Dying unit) belongs to an ally of Player 1 (Red)) Equal to True
-


((Dying unit) has an item of type Ankh of Reincarnation) Equal to False
-

Actions
-


-------- Keeps track of which players have died --------
-


Set DeadYet[(Player number of (Owner of (Dying unit)))] = True
-


-------- Keeps the player's Hero in a unit array, Indexed to their player number --------
-


Set ReviveHero_Array[(Player number of (Owner of (Dying unit)))] = (Dying unit)
-


-------- Keeps the player's player number in an integer array indexed to their player number --------
-


Set RevivePlayer_Array[(Player number of (Owner of (Dying unit)))] = (Player number of (Owner of (Dying unit)))
-


-------- ^Now each player has an index slot equal to their player number --------
-


-------- A countdown until your character revives, one for each player --------
-


Countdown Timer - Start RevTimer[RevivePlayer_Array[(Player number of (Owner of (Dying unit)))]] as a One-shot timer that will expire in 10.00 seconds
-


-------- Later in the trigger, it becomes important to know the initial time of the timer --------
-


Set TimerStart = (Initial time for RevTimer[RevivePlayer_Array[(Player number of (Owner of (Dying unit)))]])
-


-------- A timer window gives the player(s) a visual countdown --------
-


Countdown Timer - Create a timer window for RevTimer[(Player number of (Owner of (Dying unit)))] with title (Name of (Owner of (Dying unit)))
-


-------- These keep each timer and timer window player-specific --------
-


Set RevTimeWindow_Array[(Player number of (Owner of (Dying unit)))] = (Last created timer window)
-


Set RevTimer[(Player number of (Owner of (Dying unit)))] = (Last started timer)
-


-------- This allows a timer to start, and then check when it expires (initial time = time elapsed), in one trigger --------
-


Wait until ((Integer(TimerStart)) Equal to (Integer((Elapsed time for RevTimer[RevivePlayer_Array[(Player number of (Owner of (Dying unit)))]])))), checking every 0.50 seconds
-


-------- Now that the timer has expired, removes the timer window for that player --------
-


Countdown Timer - Destroy RevTimeWindow_Array[(Player number of (Owner of (Dying unit)))]
-


-------- Revive the player's hero at their spawn point (just put all the player start locations on top of each other in the dungeon's first room) --------
-


Hero - Instantly revive ReviveHero_Array[(Player number of (Owner of (Dying unit)))] at ((Owner of (Dying unit)) start location), Show revival graphics
-


-------- I'm currently working on a system to move the revive location to each "checkpoint" a player passes --------
Feedback is much appreciated.
All these Arrays! Looks complicated to someone who little triggering experience, but help keep everything separate, which is one of the benefits of this trigger.
Default Value is 0, empty, nothing unless otherwise noted.
-ReviveHero_Array
A Unit array to hold each of the heroes. The array Index maximum should be equal to the number of players who have a hero this trigger will revive.
-RevivePlayer_Array
An Integer array. Holds the player number of each player this trigger will revive a hero for. The array Index maximum should be equal to the number of players who have a hero this trigger will revive.
-RevTimer
A Timer array. Holds a separate timer for each player this trigger affects.
-TimerStart
A Real variable. Stores a Real value (I know it sounds/looks funny), in this case the starting time of the timer. Doesn't need to be an array, because all the timers are the same starting time (10 seconds for mine.)
-RevTimeWindow_Array
A Timer Window array. Holds a separate timer window for each player this trigger affects. The array Index maximum should be equal to the number of players who have a hero this trigger will revive.
The Trigger Itself
The trigger as it appears, with my comments.
-
HeroRevive
-

Events
-


Unit - A unit Dies
-

Conditions
-


((Dying unit) is A Hero) Equal to True
-


((Dying unit) belongs to an ally of Player 1 (Red)) Equal to True
-


((Dying unit) has an item of type Ankh of Reincarnation) Equal to False
-

Actions
-


-------- Keeps track of which players have died --------
-


Set DeadYet[(Player number of (Owner of (Dying unit)))] = True
-


-------- Keeps the player's Hero in a unit array, Indexed to their player number --------
-


Set ReviveHero_Array[(Player number of (Owner of (Dying unit)))] = (Dying unit)
-


-------- Keeps the player's player number in an integer array indexed to their player number --------
-


Set RevivePlayer_Array[(Player number of (Owner of (Dying unit)))] = (Player number of (Owner of (Dying unit)))
-


-------- ^Now each player has an index slot equal to their player number --------
-


-------- A countdown until your character revives, one for each player --------
-


Countdown Timer - Start RevTimer[RevivePlayer_Array[(Player number of (Owner of (Dying unit)))]] as a One-shot timer that will expire in 10.00 seconds
-


-------- Later in the trigger, it becomes important to know the initial time of the timer --------
-


Set TimerStart = (Initial time for RevTimer[RevivePlayer_Array[(Player number of (Owner of (Dying unit)))]])
-


-------- A timer window gives the player(s) a visual countdown --------
-


Countdown Timer - Create a timer window for RevTimer[(Player number of (Owner of (Dying unit)))] with title (Name of (Owner of (Dying unit)))
-


-------- These keep each timer and timer window player-specific --------
-


Set RevTimeWindow_Array[(Player number of (Owner of (Dying unit)))] = (Last created timer window)
-


Set RevTimer[(Player number of (Owner of (Dying unit)))] = (Last started timer)
-


-------- This allows a timer to start, and then check when it expires (initial time = time elapsed), in one trigger --------
-


Wait until ((Integer(TimerStart)) Equal to (Integer((Elapsed time for RevTimer[RevivePlayer_Array[(Player number of (Owner of (Dying unit)))]])))), checking every 0.50 seconds
-


-------- Now that the timer has expired, removes the timer window for that player --------
-


Countdown Timer - Destroy RevTimeWindow_Array[(Player number of (Owner of (Dying unit)))]
-


-------- Revive the player's hero at their spawn point (just put all the player start locations on top of each other in the dungeon's first room) --------
-


Hero - Instantly revive ReviveHero_Array[(Player number of (Owner of (Dying unit)))] at ((Owner of (Dying unit)) start location), Show revival graphics
-


-------- I'm currently working on a system to move the revive location to each "checkpoint" a player passes --------
Feedback is much appreciated.
The trigger as it appears, with my comments.
-
HeroRevive
-
Events
-
Unit - A unit Dies
-
-
Conditions
-
((Dying unit) is A Hero) Equal to True
-
((Dying unit) belongs to an ally of Player 1 (Red)) Equal to True
-
((Dying unit) has an item of type Ankh of Reincarnation) Equal to False
-
-
Actions
-
-------- Keeps track of which players have died --------
-
Set DeadYet[(Player number of (Owner of (Dying unit)))] = True
-
-------- Keeps the player's Hero in a unit array, Indexed to their player number --------
-
Set ReviveHero_Array[(Player number of (Owner of (Dying unit)))] = (Dying unit)
-
-------- Keeps the player's player number in an integer array indexed to their player number --------
-
Set RevivePlayer_Array[(Player number of (Owner of (Dying unit)))] = (Player number of (Owner of (Dying unit)))
-
-------- ^Now each player has an index slot equal to their player number --------
-
-------- A countdown until your character revives, one for each player --------
-
Countdown Timer - Start RevTimer[RevivePlayer_Array[(Player number of (Owner of (Dying unit)))]] as a One-shot timer that will expire in 10.00 seconds
-
-------- Later in the trigger, it becomes important to know the initial time of the timer --------
-
Set TimerStart = (Initial time for RevTimer[RevivePlayer_Array[(Player number of (Owner of (Dying unit)))]])
-
-------- A timer window gives the player(s) a visual countdown --------
-
Countdown Timer - Create a timer window for RevTimer[(Player number of (Owner of (Dying unit)))] with title (Name of (Owner of (Dying unit)))
-
-------- These keep each timer and timer window player-specific --------
-
Set RevTimeWindow_Array[(Player number of (Owner of (Dying unit)))] = (Last created timer window)
-
Set RevTimer[(Player number of (Owner of (Dying unit)))] = (Last started timer)
-
-------- This allows a timer to start, and then check when it expires (initial time = time elapsed), in one trigger --------
-
Wait until ((Integer(TimerStart)) Equal to (Integer((Elapsed time for RevTimer[RevivePlayer_Array[(Player number of (Owner of (Dying unit)))]])))), checking every 0.50 seconds
-
-------- Now that the timer has expired, removes the timer window for that player --------
-
Countdown Timer - Destroy RevTimeWindow_Array[(Player number of (Owner of (Dying unit)))]
-
-------- Revive the player's hero at their spawn point (just put all the player start locations on top of each other in the dungeon's first room) --------
-
Hero - Instantly revive ReviveHero_Array[(Player number of (Owner of (Dying unit)))] at ((Owner of (Dying unit)) start location), Show revival graphics
-
-------- I'm currently working on a system to move the revive location to each "checkpoint" a player passes --------
-
-
Last edited: