Return to post
settings
{
main
{
Description: "Zombie Plague Infection: Survivors need to fight off or run from zombies (Reapers/Moiras) until the round ends, while zombies need to infect all survivors with melee attacks before the time runs out. Player with the highest score by the end of round 5 wins. - Code: XDGTC, Developed by ZombieHunt#1601"
}
lobby
{
Allow Players Who Are In Queue: Yes
Map Rotation: After A Game
Match Voice Chat: Enabled
Max FFA Players: 8
Max FFA Players: 10
Return To Lobby: Never
Swap Teams After Match: No
}
modes
{
Deathmatch
{
enabled maps
{
Blizzard World Winter
Château Guillard Halloween
Dorado
Eichenwalde Halloween
Havana
Hollywood Halloween
Kanezaka
King's Row
Lijiang Garden Lunar New Year
Temple of Anubis
}
}
General
{
Game Mode Start: Immediately
Hero Limit: Off
Kill Cam: Off
Respawn Time Scalar: 55%
Score To Win: 999
Self Initiated Respawn: Off
Spawn Health Packs: Disabled
}
}
heroes
{
General
{
Ana
{
Ammunition Clip Size Scalar: 83%
Biotic Grenade Cooldown Time: 80%
Damage Received: 10%
Movement Gravity: 98%
Movement Speed: 102%
Sleep Dart Cooldown Time: 67%
Ultimate Generation - Combat Nano Boost: 0%
Ultimate Generation - Passive Nano Boost: 0%
}
Ashe
{
Coach Gun Cooldown Time: 60%
Coach Gun Knockback Scalar Enemy: 33%
Coach Gun Knockback Scalar Self: 67%
Damage Received: 10%
Dynamite Fuse Time Scalar: 67%
Jump Vertical Speed: 99%
Movement Gravity: 94%
Movement Speed: 103%
Ultimate Generation - Combat B.O.B.: 0%
Ultimate Generation - Passive B.O.B.: 0%
}
Baptiste
{
Ammunition Clip Size Scalar: 66%
Damage Received: 10%
Immortality Field Cooldown Time: 80%
Jump Vertical Speed: 99%
Movement Gravity: 97%
Movement Speed: 102%
Regenerative Burst Cooldown Time: 77%
Secondary Fire: Off
Ultimate Generation - Combat Amplification Matrix: 0%
Ultimate Generation - Passive Amplification Matrix: 0%
}
Brigitte
{
Barrier Shield Cooldown Time: 20%
Barrier Shield Recharge Rate: 500%
Damage Received: 10%
Jump Vertical Speed: 99%
Movement Gravity: 97%
Repair Pack: Off
Shield Bash Cooldown Time: 86%
Shield Bash Knockback Scalar: 33%
Ultimate Generation - Combat Rally: 0%
Ultimate Generation - Passive Rally: 0%
Whip Shot Knockback Scalar: 25%
}
D.Va
{
Boosters Cooldown Time: 150%
Boosters Knockback Scalar: 1%
Call Mech Knockback Scalar: 1%
Damage Received: 10%
Defense Matrix: Off
Jump Vertical Speed: 99%
Movement Gravity: 96%
Self Destruct Knockback Scalar: 1%
Spawn Without Mech: On
Ultimate Generation - Combat Self-Destruct: 0%
Ultimate Generation - Passive Self-Destruct: 0%
}
Doomfist
{
Ammunition Regeneration Time Scalar: 77%
Damage Received: 10%
Jump Vertical Speed: 99%
Meteor Strike Knockback Scalar: 10%
Movement Gravity: 97%
Rising Uppercut Cooldown Time: 133%
Rising Uppercut Knockback Scalar: 10%
Rocket Punch Cooldown Time: 125%
Rocket Punch Knockback Scalar: 10%
Seismic Slam Cooldown Time: 133%
Ultimate Duration: 75%
Ultimate Generation - Combat Meteor Strike: 0%
Ultimate Generation - Passive Meteor Strike: 0%
}
Genji
{
Ammunition Clip Size Scalar: 50%
Damage Received: 10%
Deflect Cooldown Time: 6%
Jump Vertical Speed: 85%
Movement Gravity: 90%
Movement Speed: 95%
Swift Strike Cooldown Time: 125%
Ultimate Duration: 72%
Ultimate Generation - Combat Dragonblade: 0%
Ultimate Generation - Passive Dragonblade: 0%
}
Hanzo
{
Damage Received: 10%
Jump Vertical Speed: 99%
Lunge Cooldown Time: 120%
Lunge Cooldown Time: 60%
Movement Gravity: 95%
Sonic Arrow Cooldown Time: 83%
Storm Arrows Cooldown Time: 80%
Ultimate Generation - Combat Dragonstrike: 0%
Ultimate Generation - Passive Dragonstrike: 0%
}
McCree
{
Combat Roll Cooldown Time: 66%
Damage Received: 10%
Movement Gravity: 98%
Ultimate Generation - Combat Deadeye: 0%
Ultimate Generation - Passive Deadeye: 0%
}
Mercy
{
Damage Received: 10%
Guardian Angel Cooldown Time: 267%
Movement Gravity: 91%
Resurrect Cooldown Time: 27%
Ultimate Generation - Combat Valkyrie: 0%
Ultimate Generation - Passive Valkyrie: 0%
}
Moira
{
Biotic Orb Cooldown Time: 120%
Damage Dealt: 10%
Fade Cooldown Time: 133%
Health: 400%
Health: 500%
Jump Vertical Speed: 113%
Movement Gravity: 86%
Movement Speed: 115%
Primary Fire: Off
Projectile Speed: 115%
Secondary Fire: Off
Ultimate Duration: 63%
Ultimate Generation - Combat Coalescence: 0%
Ultimate Generation - Passive Coalescence: 0%
}
Pharah
{
Concussive Blast Cooldown Time: 89%
Concussive Blast Knockback Scalar: 83%
Damage Received: 10%
Hover Jets Maximum Time: 133%
Hover Jets Recharge Rate: 50%
Hover Jets Vertical Speed Scalar: 45%
Jump Jet Acceleration Scalar: 56%
Movement Gravity: 97%
Rocket Launcher Knockback Scalar: 17%
Ultimate Generation - Combat Barrage: 0%
Ultimate Generation - Passive Barrage: 0%
}
Reaper
{
Damage Dealt: 10%
Health: 320%
Health: 400%
Jump Vertical Speed: 113%
Movement Gravity: 86%
Movement Speed: 115%
No Ammunition Requirement: On
Primary Fire: Off
Shadow Step Cooldown Time: 120%
Ultimate Generation - Combat Death Blossom: 0%
Ultimate Generation - Passive Death Blossom: 0%
}
Sigma
{
Accretion Cooldown Time: 80%
Accretion Knockback Scalar: 10%
Damage Received: 10%
Experimental Barrier: Off
Jump Vertical Speed: 99%
Kinetic Grasp Cooldown Time: 83%
Movement Gravity: 92%
Ultimate Generation - Combat Gravitic Flux: 0%
Ultimate Generation - Passive Gravitic Flux: 0%
}
Soldier: 76
{
Biotic Field Cooldown Time: 80%
Damage Received: 10%
Helix Rockets Cooldown Time: 83%
Jump Vertical Speed: 99%
Movement Gravity: 97%
Ultimate Duration: 127%
Ultimate Generation - Combat Tactical Visor: 0%
Ultimate Generation - Passive Tactical Visor: 0%
}
Tracer
{
Blink Cooldown Time: 133%
Damage Received: 10%
Movement Gravity: 95%
Movement Speed: 95%
Ultimate Generation - Combat Pulse Bomb: 0%
Ultimate Generation - Passive Pulse Bomb: 0%
}
Widowmaker
{
Ammunition Clip Size Scalar: 85%
Damage Received: 10%
Grappling Hook Cooldown Time: 83%
Jump Vertical Speed: 99%
Movement Gravity: 97%
Ultimate Generation - Combat Infra-Sight: 0%
Ultimate Generation - Passive Infra-Sight: 0%
Venom Mine Cooldown Time: 67%
}
enabled heroes
{
Ana
Ashe
Baptiste
Brigitte
D.Va
Doomfist
Genji
Hanzo
McCree
Mercy
Pharah
Sigma
Soldier: 76
Tracer
Widowmaker
}
}
}
extensions
{
Beam Effects
Beam Sounds
Buff and Debuff Sounds
Explosion Sounds
Play More Effects
}
}
variables
{
global:
0: RoundNumber
1: MaleSurvivors
2: FemaleSurvivors
3: ZombieHeroes
4: PickupSpawns
5: PickupVisuals1
6: PickupVisuals2
7: PickupVisuals3
8: PickupLocation1
9: PickupLocation2
10: PickupLocation3
11: CustomSpawns
12: CSpawnsFromHunters
13: ZiplineStartPoints
14: ZiplineEndPoints
9: PickupLocation1
10: PickupLocation2
11: PickupLocation3
12: CustomSpawns
13: CSpawnsFromHunters
player:
0: A1Rss
1: A2Rss
2: A3Rss
3: DamageDealt
4: DamageTaken
5: PromptCount
6: SlowDuration
7: ProjectilePosition
8: ProjectileVelocity
9: ProjectileExists
10: RespawnTime
11: HudTexts
12: InWorldTexts
13: Icons
14: Effects
15: IncendiaryAmmo
16: ZappingArmor
17: DoTIDs
18: SupposedHealth
19: CustomSpawnOnHold
20: ScriptedAssists
21: AttatchStatus
22: ZombieLvl
23: Mutagen
24: MutagenCap
25: IsZombie
26: AttatchPointX
27: AttatchPointY
28: AttatchPointZ
29: AttatchedZiplineIndex
30: ClosestZiplineIndex
}
subroutines
{
0: DoomMeleeKnockdown
2: MercyTaserTether
}
rule("Dev: Show Event Damage When Holding Interact")
{
event
{
Player Dealt Damage;
All;
All;
}
conditions
{
Event Player == Host Player;
Is Button Held(Event Player, Button(Interact)) == True;
}
actions
{
Small Message(Event Player, Custom String("{0}, {1}, {2}", Event Ability, Event Damage, Event Direction));
Small Message(Event Player, String("{0}, {1}", Event Ability, Event Damage));
}
}
rule("Dev: Spawn Dummy Bot")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Button(Crouch)) == True;
Is Button Held(Event Player, Button(Jump)) == True;
Is Communicating Any Spray(Event Player) == True;
Event Player == Host Player;
Number Of Players(All Teams) < Number Of Slots(All Teams);
}
actions
{
Create Dummy Bot(Random Value In Array(Array(Global.MaleSurvivors, Global.FemaleSurvivors)), All Teams, -1, Ray Cast Hit Position(
Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(Event Player) * 500, Null, Event Player, False),
Direction Towards(Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(
Event Player) * 500, All Players(All Teams), Event Player, True) + Up, Eye Position(Event Player)));
}
}
rule("Dev: Ghostmode")
rule("Dev: Ghostwalk")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player == Host Player;
(Is Button Held(Event Player, Button(Crouch)) && Is Button Held(Event Player, Button(Jump)) && Is Button Held(Event Player, Button(
Reload))) == True;
}
actions
{
Set Slow Motion(100);
Enable Movement Collision With Environment(Event Player);
Wait(1, Abort When False);
Set Slow Motion(33.333);
Disable Movement Collision With Environment(Event Player, False);
}
}
rule("Dev: Give Ult")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player == Host Player;
(Is Button Held(Event Player, Button(Crouch)) && Is Button Held(Event Player, Button(Jump)) && Is Communicating(Event Player,
Ultimate Status)) == True;
}
actions
{
Set Ultimate Charge(Closest Player To(Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player)
+ Facing Direction Of(Event Player) * 500, All Players(All Teams), Event Player, True), All Teams), 100);
}
}
rule("Dummy Bots Returning to Zombie")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Event Player.IsZombie == True;
Array Contains(Global.ZombieHeroes, Hero Of(Event Player)) == False;
}
actions
{
Skip If(Array Contains(Global.MaleSurvivors, Hero Of(Event Player)) == False, 2);
Start Forcing Player To Be Hero(Event Player, Hero(Reaper));
Abort;
Start Forcing Player To Be Hero(Event Player, Hero(Moira));
}
}
rule("Dummy Bots Spawning after Rounds")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Has Spawned(Event Player) == False;
Is Alive(Event Player) == True;
Is Game In Progress == True;
}
actions
{
Wait(1, Ignore Condition);
Abort If Condition Is False;
Start Forcing Player To Be Hero(Event Player, Random Value In Array(Array(Global.MaleSurvivors, Global.FemaleSurvivors)));
Wait Until(Has Spawned(Event Player), 1);
If(Index Of Array Value(Global.CustomSpawns, Last Of(Global.CustomSpawns)) >= 1);
Teleport(Event Player, Global.CustomSpawns[Slot Of(Event Player)]);
Event Player.CustomSpawnOnHold = True;
}
}
rule("Game Ini")
{
event
{
Ongoing - Global;
}
actions
{
Disable Built-In Game Mode Scoring;
Disable Built-In Game Mode Completion;
Global.MaleSurvivors = Empty Array;
Global.FemaleSurvivors = Empty Array;
Global.ZombieHeroes = Empty Array;
Modify Global Variable(MaleSurvivors, Append To Array, Hero(Baptiste));
Modify Global Variable(MaleSurvivors, Append To Array, Hero(Doomfist));
Modify Global Variable(MaleSurvivors, Append To Array, Hero(Genji));
Modify Global Variable(MaleSurvivors, Append To Array, Hero(Hanzo));
Modify Global Variable(MaleSurvivors, Append To Array, Hero(McCree));
Modify Global Variable(MaleSurvivors, Append To Array, Hero(Sigma));
Modify Global Variable(MaleSurvivors, Append To Array, Hero(Soldier: 76));
Modify Global Variable(FemaleSurvivors, Append To Array, Hero(Ana));
Modify Global Variable(FemaleSurvivors, Append To Array, Hero(Ashe));
Modify Global Variable(FemaleSurvivors, Append To Array, Hero(Brigitte));
Modify Global Variable(FemaleSurvivors, Append To Array, Hero(D.Va));
Modify Global Variable(FemaleSurvivors, Append To Array, Hero(Mercy));
Modify Global Variable(FemaleSurvivors, Append To Array, Hero(Pharah));
Modify Global Variable(FemaleSurvivors, Append To Array, Hero(Tracer));
Modify Global Variable(FemaleSurvivors, Append To Array, Hero(Widowmaker));
Modify Global Variable(ZombieHeroes, Append To Array, Hero(Reaper));
Modify Global Variable(ZombieHeroes, Append To Array, Hero(Moira));
}
}
rule("Assembly Phase")
{
event
{
Ongoing - Global;
}
conditions
{
Is Assembling Heroes == True;
}
actions
{
Destroy All Effects;
Destroy All Icons;
Global.CustomSpawns = Randomized Array(Global.CustomSpawns);
Global.PickupVisuals1 = Empty Array;
Global.PickupVisuals2 = Empty Array;
Global.PickupVisuals3 = Empty Array;
Global.PickupLocation1 = 0;
Global.PickupLocation2 = 0;
Global.PickupLocation3 = 0;
Unpause Match Time;
Stop Forcing Player To Be Hero(All Players(All Teams));
Reset Player Hero Availability(All Players(All Teams));
Enable Built-In Game Mode Announcer;
Set Match Time(14);
Wait(13.750, Ignore Condition);
Disable Built-In Game Mode Announcer;
}
}
rule("Round Commence 1")
{
event
{
Ongoing - Global;
}
conditions
{
Is Game In Progress == True;
}
actions
{
Global.RoundNumber += 1;
Set Match Time(151);
Wait(5, Abort When False);
Big Message(All Players(All Teams), Custom String("Warning: T-minus 10 seconds until first contact."));
Wait(6.667, Abort When False);
Big Message(All Players(All Teams), Custom String("Brace yourselves, here they come..."));
Wait(2.833, Abort When False);
Respawn(All Dead Players(All Teams));
Wait(0.450, Abort When False);
Skip If(Array Slice(Filtered Array(All Living Players(All Teams), Has Spawned(Current Array Element) == True), 4, 1)
== Empty Array, 2);
Kill(Random Value In Array(Filtered Array(All Living Players(All Teams), Has Spawned(Current Array Element) && Slot Of(
Current Array Element) > Count Of(All Players(All Teams)) - 5)), Null);
Wait(0.050, Abort When False);
Kill(Random Value In Array(Filtered Array(All Living Players(All Teams), (Slot Of(Current Array Element) > 0 && Has Spawned(
Current Array Element)) == True)), Null);
}
}
rule("Round Commence 2")
{
event
{
Ongoing - Global;
}
conditions
{
Is Game In Progress == True;
Match Time <= 135.900;
}
actions
{
Skip If(Count Of(All Dead Players(All Teams)) == 1, 3);
First Of(Filtered Array(All Dead Players(All Teams), Current Array Element.ZombieLvl == 0)).ZombieLvl = 2;
Last Of(Filtered Array(All Dead Players(All Teams), Current Array Element.ZombieLvl == 0)).ZombieLvl = 2;
Skip(1);
Random Value In Array(Filtered Array(All Dead Players(All Teams), Current Array Element.ZombieLvl == 0)).ZombieLvl = 3;
Skip If(Array Slice(All Dead Players(All Teams), 1, 2) == Empty Array, 1);
Random Value In Array(Filtered Array(All Dead Players(All Teams), Current Array Element.ZombieLvl == 0)).ZombieLvl = 1 + (Count Of(
All Living Players(All Teams)) > 3) * 1;
Random Value In Array(Filtered Array(All Dead Players(All Teams), Current Array Element.ZombieLvl == 0)).ZombieLvl = 2;
Start Forcing Player To Be Hero(Filtered Array(All Dead Players(All Teams), Array Contains(Global.MaleSurvivors, Hero Of(
Current Array Element)) == True), Hero(Reaper));
Start Forcing Player To Be Hero(Filtered Array(All Dead Players(All Teams), Array Contains(Global.FemaleSurvivors, Hero Of(
Current Array Element)) == True), Hero(Moira));
}
}
rule("Survivor Victory - No Zombie")
{
event
{
Ongoing - Global;
}
conditions
{
Match Time <= 131.667;
Is Game In Progress == True;
Filtered Array(All Players(All Teams), Current Array Element.IsZombie == True) == Empty Array;
}
actions
{
Set Slow Motion(300 / 4);
Big Message(Filtered Array(All Living Players(All Teams), Current Array Element.IsZombie == 0), Custom String(
"No zombie left! +1"));
Modify Player Score(Filtered Array(All Living Players(All Teams), Current Array Element.IsZombie == 0), 1);
Wait(3, Ignore Condition);
Skip If(Global.RoundNumber >= 5, 3);
Set Slow Motion(100);
Go To Assemble Heroes;
Abort;
Declare Player Victory(Last Of(Sorted Array(All Players(All Teams), Score Of(Current Array Element))));
}
}
rule("Survivor Victory - Times Up")
{
event
{
Ongoing - Global;
}
conditions
{
Is Game In Progress == True;
Match Time == 0;
}
actions
{
Set Slow Motion(300 / 4);
Big Message(Filtered Array(All Living Players(All Teams), Has Spawned(Current Array Element) && !Current Array Element.IsZombie),
Custom String("Round survived! +{0}", Count Of(Filtered Array(All Players(All Teams), Current Array Element.IsZombie)) - (
Count Of(Filtered Array(All Players(All Teams), Current Array Element.IsZombie)) - 5) * (Count Of(Filtered Array(All Players(
All Teams), Current Array Element.IsZombie)) > 5)));
Modify Player Score(Filtered Array(All Living Players(All Teams), Has Spawned(Current Array Element)
&& !Current Array Element.IsZombie), Count Of(Filtered Array(All Players(All Teams), Current Array Element.IsZombie)) - (
Count Of(Filtered Array(All Players(All Teams), Current Array Element.IsZombie)) - 5) * (Count Of(Filtered Array(All Players(
All Teams), Current Array Element.IsZombie)) > 5));
Big Message(Filtered Array(All Players(All Teams), Current Array Element.IsZombie == True), Custom String(
"Times up - Zombies failed!"));
Wait(3, Ignore Condition);
Skip If(Global.RoundNumber >= 5, 3);
Set Slow Motion(100);
Go To Assemble Heroes;
Abort;
Declare Player Victory(Last Of(Sorted Array(All Players(All Teams), Score Of(Current Array Element))));
}
}
rule("Zombie Victory")
{
event
{
Ongoing - Global;
}
conditions
{
Is Game In Progress == True;
Match Time > 0;
Match Time <= 135;
Filtered Array(Filtered Array(All Players(All Teams), Has Spawned(Current Array Element) == True),
Current Array Element.IsZombie == 0) == Empty Array;
}
actions
{
Pause Match Time;
Set Slow Motion(300 / 4);
Modify Player Score(Filtered Array(All Players(All Teams), Current Array Element.ZombieLvl == 4), 2);
Big Message(All Players(All Teams), Custom String("Survivors have been overrun!"));
Small Message(Filtered Array(All Players(All Teams), Current Array Element.ZombieLvl == 4), Custom String("Alpha bonus! +2"));
Wait(3, Ignore Condition);
Skip If(Global.RoundNumber >= 5, 3);
Set Slow Motion(100);
Go To Assemble Heroes;
Abort;
Declare Player Victory(Last Of(Sorted Array(All Players(All Teams), Score Of(Current Array Element))));
}
}
rule("Ana Tips")
{
event
{
Ongoing - Global;
}
conditions
{
Total Time Elapsed > 0.500;
}
actions
{
Create HUD Text(Players On Hero(Hero(Ana), All Teams), Null, Null, Custom String("Sleep Dart:"), Left, 1, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Ana), All Teams), Null, Custom String(
"Phases through other survivors and tranquilizes zombies only."), Null, Left, 2, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Ana), All Teams), Null, Null, Custom String("Biotic Grenade:"), Left, 3, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Ana), All Teams), Null, Custom String(
"Denies zombies from infecting and using abilities, while making other survivors invulnerable."), Null, Left, 4, Color(White),
Color(White), Color(White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Ana), All Teams), Null, Null, Custom String("Biotic Rifle:"), Left, 5, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Ana), All Teams), Null, Custom String(
"Executes zombies with under 12.5% of their max health, rewarding you with 1 extra point."), Null, Left, 6, Color(White),
Color(White), Color(White), Visible To and String, Visible Never);
}
}
rule("Ashe Tips")
{
event
{
Ongoing - Global;
}
conditions
{
Total Time Elapsed > 1;
}
actions
{
Create HUD Text(Players On Hero(Hero(Ashe), All Teams), Null, Null, Custom String("Coach Gun:"), Left, 1, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Ashe), All Teams), Null, Custom String("Knocks zombies down at a close range."), Null, Left,
2, Color(White), Color(White), Color(White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Ashe), All Teams), Null, Null, Custom String("Dynamite:"), Left, 3, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Ashe), All Teams), Null, Custom String("Amplifies damage towards ignited zombies by 20%."),
Null, Left, 4, Color(White), Color(White), Color(White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Ashe), All Teams), Null, Null, Custom String("Viper's Scope:"), Left, 5, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Ashe), All Teams), Null, Custom String(
"Headshot stuns zombies while bodyshot slows them briefly."), Null, Left, 6, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
}
}
rule("Baptiste Tips")
{
event
{
Ongoing - Global;
}
conditions
{
Total Time Elapsed > 1.500;
}
actions
{
Create HUD Text(Players On Hero(Hero(Baptiste), All Teams), Null, Null, Custom String("Regenerative Burst:"), Left, 1, Color(
White), Color(White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Baptiste), All Teams), Null, Custom String("Pushes zombies back to the edge of its range."),
Null, Left, 2, Color(White), Color(White), Color(White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Baptiste), All Teams), Null, Null, Custom String("Immortality Field:"), Left, 3, Color(White),
Color(White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Baptiste), All Teams), Null, Custom String(
"Prevents yourself from getting infected. Does not work on other survivors."), Null, Left, 4, Color(White), Color(White),
Color(White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Baptiste), All Teams), Null, Null, Custom String("Secondary Fire:"), Left, 5, Color(White),
Color(White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Baptiste), All Teams), Null, Custom String(
"Slows yourself while boosting your primary fire and melee damage/knockback."), Null, Left, 6, Color(White), Color(White),
Color(White), Visible To and String, Visible Never);
}
}
rule("Brigitte Tips")
{
event
{
Ongoing - Global;
}
conditions
{
Total Time Elapsed > 2;
}
actions
{
Create HUD Text(Players On Hero(Hero(Brigitte), All Teams), Null, Null, Custom String("Whip Shot:"), Left, 1, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Brigitte), All Teams), Null, Custom String(
"Knocks zombies down and away. Cooldown is reduced for killing or hitting a zombie from afar."), Null, Left, 2, Color(White),
Color(White), Color(White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Brigitte), All Teams), Null, Null, Custom String("Shield Bash:"), Left, 3, Color(White),
Color(White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Brigitte), All Teams), Null, Custom String(
"Stuns a zombie or jump in front of a fellow survivor. Cooldown is halved for the latter case."), Null, Left, 4, Color(White),
Color(White), Color(White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Brigitte), All Teams), Null, Null, Custom String("Rocket Flail:"), Left, 5, Color(White),
Color(White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Brigitte), All Teams), Null, Custom String(
"Inflicts more damage and stuns zombies when hitting them at max range."), Null, Left, 6, Color(White), Color(White), Color(
White), Visible To and String, Visible Never);
}
}
rule("D.Va Tips")
{
event
{
Ongoing - Global;
}
conditions
{
Total Time Elapsed > 2.500;
}
actions
{
Create HUD Text(Players On Hero(Hero(D.Va), All Teams), Null, Null, Custom String("Boosters:"), Left, 1, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(D.Va), All Teams), Null, Custom String(
"Starts off slow before accelerating. Knock zombies over."), Null, Left, 2, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(D.Va), All Teams), Null, Null, Custom String("Micro Missiles:"), Left, 3, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(D.Va), All Teams), Null, Custom String(
"Standard MEKA stuff, good for putting down damage from mid-range."), Null, Left, 4, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(D.Va), All Teams), Null, Null, Custom String("Mech Suit:"), Left, 5, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(D.Va), All Teams), Null, Custom String(
"Can take 2 hits before expiring. Zapping Armor applies to pilot only."), Null, Left, 6, Color(White), Color(White), Color(
White), Visible To and String, Visible Never);
}
}
rule("Doomfist Tips")
{
event
{
Ongoing - Global;
}
conditions
{
Total Time Elapsed > 3;
}
actions
{
Create HUD Text(Players On Hero(Hero(Doomfist), All Teams), Null, Null, Custom String("Rising Uppercut:"), Left, 1, Color(White),
Color(White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Doomfist), All Teams), Null, Custom String("Knocks zombies further than it does survivors."),
Null, Left, 2, Color(White), Color(White), Color(White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Doomfist), All Teams), Null, Null, Custom String("Seismic Slam:"), Left, 3, Color(White),
Color(White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Doomfist), All Teams), Null, Custom String(
"Smashes zombies away from you instead of pulling them in."), Null, Left, 4, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Doomfist), All Teams), Null, Null, Custom String("Rocket Punch:"), Left, 5, Color(White),
Color(White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Doomfist), All Teams), Null, Custom String(
"Does what it does. Stun is prolonged upon wall collision."), Null, Left, 6, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
}
}
rule("Genji Tips")
{
event
{
Ongoing - Global;
}
conditions
{
Total Time Elapsed > 3.500;
}
actions
{
Create HUD Text(Players On Hero(Hero(Genji), All Teams), Null, Null, Custom String("Swift Strike:"), Left, 1, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Genji), All Teams), Null, Custom String(
"Genji can use his other moves mid-dash. Replenishes ammo and partially refunds its cooldown for each zombie struck."), Null,
Left, 2, Color(White), Color(White), Color(White), Visible To and String, Visible Never);
"Genji cuts foward twice, resetting double jump and can use his other moves mid-flight, doubling their damage."), Null, Left,
2, Color(White), Color(White), Color(White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Genji), All Teams), Null, Null, Custom String("Deflect:"), Left, 3, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Genji), All Teams), Null, Custom String(
"Parries for a short interval. Use it during Swift Strike to knock zombies down."), Null, Left, 4, Color(White), Color(White),
Color(White), Visible To and String, Visible Never);
"Parries a zombie melee when timed right. Use it during Swift Strike to knock zombies down."), Null, Left, 4, Color(White),
Color(White), Color(White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Genji), All Teams), Null, Null, Custom String("Quick Melee:"), Left, 5, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Genji), All Teams), Null, Custom String(
"Knocks zombies back. Use it during Swift Strike to stun them instead."), Null, Left, 6, Color(White), Color(White), Color(
White), Visible To and String, Visible Never);
}
}
rule("Hanzo Tips")
{
event
{
Ongoing - Global;
}
conditions
{
Total Time Elapsed > 4;
}
actions
{
Create HUD Text(Players On Hero(Hero(Hanzo), All Teams), Null, Null, Custom String("Sonic Arrow:"), Left, 1, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Hanzo), All Teams), Null, Custom String("Deals increased knockback to zombies."), Null, Left,
2, Color(White), Color(White), Color(White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Hanzo), All Teams), Null, Null, Custom String("Storm Arrows:"), Left, 3, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Hanzo), All Teams), Null, Custom String(
"Automatically lets loose of your charged primary fire."), Null, Left, 4, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Hanzo), All Teams), Null, Null, Custom String("Lunge:"), Left, 5, Color(White), Color(White),
Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Hanzo), All Teams), Null, Custom String(
"Enters a brief stealth after lunging. Dealing damage to zombies breaks stealth."), Null, Left, 6, Color(White), Color(White),
Color(White), Visible To and String, Visible Never);
"Meleeing during Lunge knocks zombies down and away."), Null, Left, 6, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
}
}
rule("McCree Tips")
{
event
{
Ongoing - Global;
}
conditions
{
Total Time Elapsed > 4.500;
}
actions
{
Create HUD Text(Players On Hero(Hero(McCree), All Teams), Null, Null, Custom String("Combat Roll:"), Left, 1, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(McCree), All Teams), Null, Custom String(
"Jumping during Combat Roll makes a big leap towards your movement direction."), Null, Left, 2, Color(White), Color(White),
Color(White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(McCree), All Teams), Null, Null, Custom String("Flashbang:"), Left, 3, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(McCree), All Teams), Null, Custom String(
"Phases through other survivors and stuns zombies only."), Null, Left, 4, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(McCree), All Teams), Null, Null, Custom String("Peacekeeper:"), Left, 5, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(McCree), All Teams), Null, Custom String(
"Headshot stuns zombies, while bodyshot slows them briefly."), Null, Left, 6, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
}
}
rule("Mercy Tips")
{
event
{
Ongoing - Global;
}
conditions
{
Total Time Elapsed > 5;
}
actions
{
Create HUD Text(Players On Hero(Hero(Mercy), All Teams), Null, Null, Custom String("Back Hop:"), Left, 1, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Mercy), All Teams), Null, Custom String("Use Ability 1 to hop a short distance backwards."),
Null, Left, 2, Color(White), Color(White), Color(White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Mercy), All Teams), Null, Null, Custom String("Lift Off:"), Left, 3, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Mercy), All Teams), Null, Custom String(
"When on ground, use ability 2 to boost yourself upwards."), Null, Left, 4, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Mercy), All Teams), Null, Null, Custom String("Caduceus Staff:"), Left, 5, Color(White),
Color(White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Mercy), All Teams), Null, Custom String(
"A stun baton that empowers your melee and shoots electric arcs."), Null, Left, 6, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
}
}
rule("Pharah Tips")
{
event
{
Ongoing - Global;
}
conditions
{
Total Time Elapsed > 5.500;
}
actions
{
Create HUD Text(Players On Hero(Hero(Pharah), All Teams), Null, Null, Custom String("Hover Jet:"), Left, 1, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Pharah), All Teams), Null, Custom String(
"Maintains your altitude. Does not provide extra vertical mobility."), Null, Left, 2, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Pharah), All Teams), Null, Null, Custom String("Concussive Blast:"), Left, 3, Color(White),
Color(White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Pharah), All Teams), Null, Custom String(
"Gives you a horizontal boost while knocking zombies down and away."), Null, Left, 4, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Pharah), All Teams), Null, Null, Custom String("Rocket Launcher:"), Left, 5, Color(White),
Color(White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Pharah), All Teams), Null, Custom String("Direct rocket hits knock zombies down."), Null,
Left, 6, Color(White), Color(White), Color(White), Visible To and String, Visible Never);
}
}
rule("Sigma Tips")
{
event
{
Ongoing - Global;
}
conditions
{
Total Time Elapsed > 6;
}
actions
{
Create HUD Text(Players On Hero(Hero(Sigma), All Teams), Null, Null, Custom String("Kinetic Grasp:"), Left, 1, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Sigma), All Teams), Null, Custom String(
"Pulls zombies in range to you, silencing them in the prosess and stunning them when the effect ends."), Null, Left, 2, Color(
White), Color(White), Color(White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Sigma), All Teams), Null, Null, Custom String("Accretion:"), Left, 3, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Sigma), All Teams), Null, Custom String(
"Knocks zombies down and away. Be careful not to hit your allies with it."), Null, Left, 4, Color(White), Color(White), Color(
White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Sigma), All Teams), Null, Null, Custom String("Gravitic Punch:"), Left, 5, Color(White),
Color(White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Sigma), All Teams), Null, Custom String(
"Secondary fire to throw a strong punch with knockdown and a slightly longer reach."), Null, Left, 6, Color(White), Color(
White), Color(White), Visible To and String, Visible Never);
}
}
rule("Soldier: 76 Tips")
{
event
{
Ongoing - Global;
}
conditions
{
Total Time Elapsed > 6.500;
}
actions
{
Create HUD Text(Players On Hero(Hero(Soldier: 76), All Teams), Null, Null, Custom String("Sprint:"), Left, 1, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Soldier: 76), All Teams), Null, Custom String(
"Sprinting costs stamina. The lower your stamina is the slower you become."), Null, Left, 2, Color(White), Color(White), Color(
White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Soldier: 76), All Teams), Null, Null, Custom String("Biotic Field:"), Left, 3, Color(White),
Color(White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Soldier: 76), All Teams), Null, Custom String(
"Replenishes full stamina instantly. You can also recover stamina by resting."), Null, Left, 4, Color(White), Color(White),
Color(White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Soldier: 76), All Teams), Null, Null, Custom String("Helix Rockets:"), Left, 5, Color(White),
Color(White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Soldier: 76), All Teams), Null, Custom String(
"Explosion knocks zombies down. Direct hits pushes them back significantly."), Null, Left, 6, Color(White), Color(White),
Color(White), Visible To and String, Visible Never);
}
}
rule("Tracer Tips")
{
event
{
Ongoing - Global;
}
conditions
{
Total Time Elapsed > 7;
}
actions
{
Create HUD Text(Players On Hero(Hero(Tracer), All Teams), Null, Null, Custom String("Blink:"), Left, 1, Color(White), Color(White),
Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Tracer), All Teams), Null, Custom String(
"Tracer slows down and does higher weapon damage as more charges of Blink are on cooldown."), Null, Left, 2, Color(White),
Color(White), Color(White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Tracer), All Teams), Null, Null, Custom String("Recall:"), Left, 3, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Tracer), All Teams), Null, Custom String(
"Pulls in nearby zombies as you disappear and pushes them away from where you'll reappear."), Null, Left, 4, Color(White),
Color(White), Color(White), Visible To and String, Visible Never);
"Pulls zombies as you disappear and pushes zombies as you reappear"), Null, Left, 4, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Tracer), All Teams), Null, Null, Custom String("Quick Melee:"), Left, 5, Color(White), Color(
White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Tracer), All Teams), Null, Custom String(
"Stuns zombies hit when any Blink charge is on cooldown. Refunds a Blink charge on hit."), Null, Left, 6, Color(White), Color(
White), Color(White), Visible To and String, Visible Never);
"Stuns zombies on hit when any of Blink charges is on cooldown."), Null, Left, 6, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
}
}
rule("Widowmaker Tips")
{
event
{
Ongoing - Global;
}
conditions
{
Total Time Elapsed > 7.500;
}
actions
{
Create HUD Text(Players On Hero(Hero(Widowmaker), All Teams), Null, Null, Custom String("Venom Mine:"), Left, 1, Color(White),
Color(White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Widowmaker), All Teams), Null, Custom String("Slows zombies that are poisoned."), Null, Left,
2, Color(White), Color(White), Color(White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Widowmaker), All Teams), Null, Null, Custom String("Widow's Kiss:"), Left, 3, Color(White),
Color(White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Widowmaker), All Teams), Null, Custom String(
"Scoped headshot knocks zombies down, duration depends on its charge."), Null, Left, 4, Color(White), Color(White), Color(
White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Widowmaker), All Teams), Null, Null, Custom String("Quick Melee:"), Left, 5, Color(White),
Color(White), Color(Aqua), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Widowmaker), All Teams), Null, Custom String(
"Stuns and knocks zombies back when you're moving faster than your running speed."), Null, Left, 6, Color(White), Color(White),
Color(White), Visible To and String, Visible Never);
}
}
rule("All Zombie Tips")
{
event
{
Ongoing - Global;
}
conditions
{
Total Time Elapsed > 8;
}
actions
{
Create HUD Text(Players On Hero(Hero(Moira), All Teams), Null, Null, Custom String("Fade:"), Left, 1, Color(White), Color(White),
Color(Orange), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Moira), All Teams), Null, Custom String(
"Moiras above level 2 are affected less by gravity during Fade."), Null, Left, 2, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Moira), All Teams), Null, Null, Custom String("Biotic Orb:"), Left, 3, Color(White), Color(
White), Color(Orange), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Moira), All Teams), Null, Custom String(
"Unlocks at Zombie Lvl 3. Damage orb disables survivor abilities."), Null, Left, 4, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Moira), All Teams), Null, Null, Custom String("Undead's Resilience:"), Left, 5, Color(White),
Color(White), Color(Orange), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Moira), All Teams), Null, Custom String(
"Your wounds rapidly recover when out of combat for 5 seconds."), Null, Left, 6, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Reaper), All Teams), Null, Null, Custom String("Wraith Form:"), Left, 1, Color(White), Color(
White), Color(Orange), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Reaper), All Teams), Null, Custom String(
"Provides increased vertical mobility starting from level 2."), Null, Left, 2, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Reaper), All Teams), Null, Null, Custom String("Shadow Step:"), Left, 3, Color(White), Color(
White), Color(Orange), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Reaper), All Teams), Null, Custom String("Unlocks at Zombie Lvl 3. No special behaviors."),
Null, Left, 4, Color(White), Color(White), Color(White), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Reaper), All Teams), Null, Null, Custom String("Undead's Resilience:"), Left, 5, Color(White),
Color(White), Color(Orange), Visible To and String, Visible Never);
Create HUD Text(Players On Hero(Hero(Reaper), All Teams), Null, Custom String(
"Your wounds rapidly recover when out of combat for 5 seconds."), Null, Left, 6, Color(White), Color(White), Color(White),
Visible To and String, Visible Never);
}
}
rule("Ana Sleep Dart Launch")
{
event
{
Ongoing - Each Player;
All;
Ana;
}
conditions
{
Is Using Ability 1(Event Player) == True;
}
actions
{
Wait(0.260, Abort When False);
Event Player.ProjectilePosition = Eye Position(Event Player);
Event Player.ProjectileVelocity = Facing Direction Of(Event Player) * 0.960;
Event Player.ProjectileExists = 1;
}
}
rule("Ana Sleep Dart Flight")
{
event
{
Ongoing - Each Player;
All;
Ana;
}
conditions
{
Event Player.ProjectileExists > 0;
}
actions
{
Event Player.ProjectilePosition = Event Player.ProjectilePosition + Event Player.ProjectileVelocity;
Set Status(Filtered Array(Players Within Radius(Event Player.ProjectilePosition, 3.840, All Teams, Off),
Current Array Element.IsZombie == 0), Null, Phased Out, 0.017);
Wait(0.016, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Ana Sleep Dart Impact")
{
event
{
Ongoing - Each Player;
All;
Ana;
}
conditions
{
Event Player.ProjectileExists > 0;
Distance Between(Event Player.ProjectilePosition, Ray Cast Hit Position(Event Player.ProjectilePosition,
Event Player.ProjectilePosition + Event Player.ProjectileVelocity, Filtered Array(All Players(All Teams),
Current Array Element.IsZombie == True), Event Player, True)) < 0.960;
}
actions
{
Wait(0.017, Ignore Condition);
Event Player.ProjectileExists = 0;
Wait(0.017, Ignore Condition);
Event Player.ProjectilePosition = 0;
Event Player.ProjectileVelocity = 0;
}
}
rule("Ana Nano Boost")
{
event
{
Ongoing - Each Player;
All;
Ana;
}
conditions
{
Is Using Ultimate(Event Player) == True;
}
actions
{
Set Damage Received(Event Player, 200);
Event Player.DamageDealt = 1.500;
Set Move Speed(Event Player, 130);
Wait(8, Restart When True);
Abort If(Hero Of(Event Player) != Hero(Ana));
Set Damage Received(Event Player, 100);
Event Player.DamageDealt = 1;
Set Move Speed(Event Player, 100);
}
}
rule("Ana Damage Effects")
{
event
{
Player Dealt Damage;
All;
Ana;
}
conditions
{
Is Dead(Victim) == False;
Event Ability != 0;
}
actions
{
Skip If(!Victim.IsZombie, 22);
If(Normalized Health(Victim) <= 0.125 && Array Contains(Array(0, Button(Primary Fire)), Event Ability));
If(Normalized Health(Victim) <= 0.125 && Event Ability == Button(Primary Fire));
Kill(Victim, Event Player);
Play Effect(All Players(All Teams), Bad Pickup Effect, Color(Red), Victim, 1);
Small Message(Event Player, Custom String("Execute! +1"));
Small Message(Victim, Custom String("Executed!"));
Else If(Event Damage / (Event Player.DamageDealt * Victim.DamageTaken) == 2.240);
Skip If(Event Player.IncendiaryAmmo <= 0, 1);
Set Status(Victim, Event Player, Burning, 2.500);
Apply Impulse(Victim, Event Direction + (Y Component Of(Event Direction) < 0) * Up * (Absolute Value(Y Component Of(
Event Direction)) / 1.333), 16 + Vertical Angle Towards(Event Player, Victim) / 6 + Event Damage / 0.896, To World,
Cancel Contrary Motion);
Damage(Victim, Event Player, 5);
Abort If(Victim.SlowDuration >= 0.600);
Start Forcing Throttle(Victim, 0, 0.666, 0, 0.666, 0, 0.666);
Victim.SlowDuration = 0.600;
Else If(Event Ability == Button(Ability 2));
Set Status(Victim, Attacker, Hacked, 4);
Abort If(Victim.SlowDuration >= 4);
Start Forcing Throttle(Victim, 0, 0.666, 0, 0.666, 0, 0.666);
Victim.SlowDuration = 4;
Victim.A3Rss = 9;
Else If(Event Ability == Button(Melee) && Event Damage / Victim.DamageTaken == 45);
Set Status(Victim, Attacker, Knocked Down, 2);
Apply Impulse(Victim, Facing Direction Of(Event Player), 27.500, To World, Cancel Contrary Motion);
Abort If(Event Ability != Button(Ability 2));
Set Status(Victim, Event Player, Invincible, 4);
Small Message(Victim, Custom String("Immunized by {0}!", Attacker));
Victim.SupposedHealth = Health(Victim) + Event Damage;
}
}
rule("Ana Immunity Applies")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Has Status(Event Player, Invincible) == True;
}
actions
{
Create In-World Text(All Players(All Teams), Custom String("Immunized!"), Event Player, 1, Clip Against Surfaces,
Visible To Position and String, Color(Purple), Visible Always);
Event Player.InWorldTexts[0] = Last Text ID;
}
}
rule("Ana Immunity Expires")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Has Status(Event Player, Invincible) == False;
}
actions
{
Destroy In-World Text(Event Player.InWorldTexts[0]);
Heal(Event Player, Null, Event Player.SupposedHealth - Health(Event Player));
}
}
rule("Ashe Coach Gun Projectile Speed Change")
{
event
{
Ongoing - Each Player;
All;
Ashe;
}
conditions
{
Is Using Ability 1(Event Player) == True;
}
actions
{
Set Projectile Speed(Event Player, Absolute Value(10000));
}
}
rule("Ashe Coach Gun Projectile Speed Reset")
{
event
{
Ongoing - Each Player;
All;
Ashe;
}
conditions
{
(!Is Using Ability 1(Event Player) || Is Dead(Event Player)) == True;
Is Using Ability 1(Event Player) == False;
}
actions
{
Set Projectile Speed(Event Player, 100);
}
}
rule("Ashe Damage Effects")
{
event
{
Player Dealt Damage;
All;
Ashe;
}
conditions
{
Event Damage / Victim.DamageTaken >= 6;
Is Dead(Victim) == False;
Victim.IsZombie == True;
}
actions
{
If(Event Ability == Button(Ability 1));
Skip If(Distance Between(Eye Position(Event Player), Eye Position(Victim)) > 12, 1);
Set Status(Victim, Event Player, Knocked Down, 0.500 + Event Damage / 60);
Apply Impulse(Victim, Facing Direction Of(Event Player), 7 + Vertical Facing Angle Of(Event Player) / 18 + Event Damage / 6,
To World, Cancel Contrary Motion);
Else If(Event Ability == Button(Ability 2));
Set Status(Victim, Event Player, Knocked Down, 0.167 + Event Damage / 30);
Apply Impulse(Victim, Event Direction + Up * (0.167 + Event Damage / Victim.DamageTaken / 376) * (Y Component Of(Event Direction)
< 0.167), (Event Damage / Victim.DamageTaken + 10) / 2.500, To World, Cancel Contrary Motion);
Else If(Event Ability == Button(Primary Fire));
Skip If(Event Player.IncendiaryAmmo <= 0, 1);
Set Status(Victim, Event Player, Burning, 2.500);
Apply Impulse(Victim, Direction Towards(Eye Position(Event Player), Eye Position(Victim) + Up * ((Y Component Of(Eye Position(
Event Player)) - Y Component Of(Eye Position(Victim))) / 1.500)), 12.500 + Vertical Angle Towards(Event Player, Eye Position(
Victim)) / 6.667 + (Event Damage - 13) * (1 - 0.400 * Event Was Critical Hit) / 3.500, To World, Cancel Contrary Motion);
If(Is Firing Secondary(Event Player));
Skip If(Event Was Critical Hit == False, 1);
Set Status(Victim, Event Player, Stunned, Event Damage / 340 - 0.100);
Abort If(Victim.SlowDuration >= 0.500);
Start Forcing Throttle(Victim, 0, 0.666, 0, 0.666, 0, 0.666);
Victim.SlowDuration = 0.500;
}
}
rule("Ashe's Bob Damage Effects")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Event Player.SupposedHealth - Health(Event Player) == 1.400 || Event Player.SupposedHealth - Health(Event Player) == 12) == True;
Event Player.IsZombie == 0;
}
actions
{
Wait(0.016, Restart When True);
Heal(Event Player, Null, Event Player.SupposedHealth - Health(Event Player));
}
}
rule("Ashe's Bob Damage Effects 2")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
((Event Player.SupposedHealth - Health(Event Player)) / Event Player.DamageTaken > 119.900 && (
Event Player.SupposedHealth - Health(Event Player)) / Event Player.DamageTaken < 120.900) == True;
Event Player.SupposedHealth > Health(Event Player);
Event Player.IsZombie == True;
}
actions
{
Wait(0.016, Abort When False);
Event Player.SupposedHealth = Health(Event Player);
Skip If((Event Player.A3Rss >= 5 && Event Player.A3Rss <= 9) == True, 1);
Event Player.A3Rss = 5;
}
}
rule("Ashe's Bob Damage Effects 3")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
((Event Player.SupposedHealth - Health(Event Player)) / Event Player.DamageTaken > 13.900 && (Event Player.SupposedHealth - Health(
Event Player)) / Event Player.DamageTaken < 14.900) == True;
Event Player.IsZombie == True;
}
actions
{
Wait(0.016, Ignore Condition);
Event Player.SupposedHealth = Health(Event Player);
Skip If((Event Player.A3Rss >= 5 && Event Player.A3Rss <= 9) == True, 1);
Event Player.A3Rss = 5;
Abort If(Event Player.SlowDuration >= 0.300);
Start Forcing Throttle(Event Player, 0, 0.666, 0, 0.666, 0, 0.666);
Event Player.SlowDuration = 0.300;
}
}
rule("Baptiste Exo Boosts Restriction Charging")
{
event
{
Ongoing - Each Player;
All;
Baptiste;
}
conditions
{
Is On Ground(Event Player) == True;
Is Crouching(Event Player) == True;
}
actions
{
Event Player.A3Rss = 0;
Chase Player Variable At Rate(Event Player, A3Rss, 750, 1071.429, Destination and Rate);
}
}
rule("Baptiste Exo Boosts Restriction Pending")
{
event
{
Ongoing - Each Player;
All;
Baptiste;
}
conditions
{
Is Crouching(Event Player) == False;
}
actions
{
Stop Chasing Player Variable(Event Player, A3Rss);
Wait(1, Abort When False);
Event Player.A3Rss = 0;
}
}
rule("Baptiste Exo Boosts Restriction Releasing")
{
event
{
Ongoing - Each Player;
All;
Baptiste;
}
conditions
{
Event Player.A3Rss > 0;
Speed Of In Direction(Event Player, Up) > 0;
Is Button Held(Event Player, Button(Jump)) == True;
}
actions
{
Set Gravity(Event Player, 100 + Event Player.A3Rss);
Event Player.A3Rss = 0;
Wait(0.017, Ignore Condition);
Set Gravity(Event Player, 100);
}
}
rule("Baptiste ImmoField Initial Cooldown")
{
event
{
Ongoing - Each Player;
All;
Baptiste;
}
conditions
{
Match Time > 135.950;
Is Alive(Event Player) == True;
Has Spawned(Event Player) == True;
}
actions
{
Wait(0.048, Abort When False);
Set Ability Cooldown(Event Player, Button(Ability 2), Match Time - 135.950);
}
}
rule("Baptiste Regeneration Burst Initialize")
{
event
{
Ongoing - Each Player;
All;
Baptiste;
}
conditions
{
Is Using Ability 1(Event Player) == True;
}
actions
{
Event Player.A1Rss = 5.500;
Event Player.A2Rss = Filtered Array(Players Within Radius(Eye Position(Event Player), Event Player.A1Rss, All Teams,
Surfaces And Enemy Barriers), Current Array Element.IsZombie == True);
Chase Player Variable At Rate(Event Player, A1Rss, 12.833, 11 / 0.300, Destination and Rate);
Wait(0.200, Ignore Condition);
Stop Chasing Player Variable(Event Player, A1Rss);
Event Player.A1Rss = 100;
}
}
rule("Baptiste Regeneration Burst Boop 1")
{
event
{
Ongoing - Each Player;
All;
Baptiste;
}
conditions
{
Event Player.A1Rss < 22 / 3;
}
actions
{
Abort If(Event Player.A2Rss == Empty Array);
Damage(Event Player.A2Rss, Event Player, 10 / Event Player.DamageDealt);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 30,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 30,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 30,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 30,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 30,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 30,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 30,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 30,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 30,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 30,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 30,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
}
}
rule("Baptiste Regeneration Burst Boop 2")
{
event
{
Ongoing - Each Player;
All;
Baptiste;
}
conditions
{
Event Player.A1Rss > 55 / 6;
Event Player.A1Rss < 11;
}
actions
{
Event Player.A2Rss = Filtered Array(Players Within Radius(Eye Position(Event Player), Event Player.A1Rss, All Teams,
Surfaces And Enemy Barriers), Current Array Element.IsZombie == True);
Abort If(Event Player.A2Rss == Empty Array);
Damage(Event Player.A2Rss, Event Player, 10 / Event Player.DamageDealt);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)),
22.500, To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)),
22.500, To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)),
22.500, To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)),
22.500, To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)),
22.500, To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)),
22.500, To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)),
22.500, To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)),
22.500, To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)),
22.500, To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)),
22.500, To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)),
22.500, To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
}
}
rule("Baptiste Regeneration Burst Boop 3")
{
event
{
Ongoing - Each Player;
All;
Baptiste;
}
conditions
{
Event Player.A1Rss > 11;
Event Player.A1Rss < 12.833;
}
actions
{
Event Player.A2Rss = Filtered Array(Players Within Radius(Eye Position(Event Player), Event Player.A1Rss, All Teams,
Surfaces And Enemy Barriers), Current Array Element.IsZombie == True);
Abort If(Event Player.A2Rss == Empty Array);
Damage(Event Player.A2Rss, Event Player, 10 / Event Player.DamageDealt);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 15,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 15,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 15,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 15,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 15,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 15,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 15,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 15,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 15,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 15,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
Abort If(Event Player.A2Rss == Empty Array);
Apply Impulse(Last Of(Event Player.A2Rss), Direction Towards(Eye Position(Event Player), Eye Position(Last Of(Event Player.A2Rss))
+ Up * ((Y Component Of(Eye Position(Event Player)) - Y Component Of(Eye Position(Last Of(Event Player.A2Rss)))) / 1.500)), 15,
To World, Cancel Contrary Motion);
Modify Player Variable(Event Player, A2Rss, Remove From Array By Value, Last Of(Event Player.A2Rss));
}
}
rule("Baptiste Right Click Hold")
{
event
{
Ongoing - Each Player;
All;
Baptiste;
}
conditions
{
Is Button Held(Event Player, Button(Secondary Fire)) == True;
}
actions
{
Set Damage Dealt(Event Player, 400 / 3);
Event Player.DamageDealt = 4 / 3;
Start Forcing Throttle(Event Player, 0, 0.666, 0, 0.666, 0, 0.666);
Set Aim Speed(Event Player, 83.333);
}
}
rule("Baptiste Right Click Release")
{
event
{
Ongoing - Each Player;
All;
Baptiste;
}
conditions
{
Is Button Held(Event Player, Button(Secondary Fire)) == False;
}
actions
{
Set Damage Dealt(Event Player, 100);
Event Player.DamageDealt = 1;
Stop Forcing Throttle(Event Player);
Set Aim Speed(Event Player, 100);
}
}
rule("Baptiste Damage Effects")
{
event
{
Player Dealt Damage;
All;
Baptiste;
}
conditions
{
Is Dead(Victim) == False;
Victim.IsZombie == True;
(Event Damage / Victim.DamageTaken == 30 && Event Player.DamageDealt == 1) == False;
Event Damage > 12;
}
actions
{
If(Event Ability != 0);
Skip If(Event Ability == Button(Melee), 2);
Skip If(Event Player.IncendiaryAmmo <= 0, 1);
Set Status(Victim, Event Player, Burning, 2.500);
Apply Impulse(Victim, Direction Towards(Eye Position(Event Player), Eye Position(Victim) + Up * ((Y Component Of(Eye Position(
Event Player)) - Y Component Of(Eye Position(Victim))) / 1.500)), 9 + Vertical Angle Towards(Event Player, Eye Position(
Victim)) / 9 + (Event Damage - 8.333) * (1 - 0.400 * Event Was Critical Hit) / 3.500, To World, Cancel Contrary Motion);
Else;
Stop Holding Button(Victim, Button(Jump));
Skip If(Event Player.IncendiaryAmmo <= 0, 1);
Set Status(Victim, Event Player, Burning, 2.500);
Apply Impulse(Victim, Direction Towards(Eye Position(Event Player), Eye Position(Victim) + Up * ((Y Component Of(Eye Position(
Event Player)) - Y Component Of(Eye Position(Victim))) / 1.500)), 9 + Vertical Angle Towards(Event Player, Eye Position(
Victim)) / 9 + (Event Damage - 8.333) * (1 - 0.400 * Event Was Critical Hit) / 3.500, To World, Cancel Contrary Motion);
}
}
rule("Brigitte Damage Effects")
{
event
{
Player Dealt Damage;
All;
Brigitte;
}
conditions
{
Event Damage / Victim.DamageTaken > 30;
Is Dead(Victim) == False;
Victim.IsZombie == True;
}
actions
{
If(Event Ability == Button(Ability 1));
Skip If(Event Player.IncendiaryAmmo <= 0, 1);
Set Status(Victim, Event Player, Burning, 2.500);
Set Status(Victim, Null, Knocked Down, 0.750);
Event Player.A3Rss = Distance Between(Event Player, Victim) / 6.667;
Apply Impulse(Victim, Event Direction, 6.667 + 33.333 / (1 + Distance Between(Event Player, Victim)), To World,
Cancel Contrary Motion);
Wait Until(Ability Cooldown(Event Player, Button(Ability 1)) > 1, 1.500);
Set Ability Cooldown(Event Player, Button(Ability 1), Ability Cooldown(Event Player, Button(Ability 1)) - Event Player.A3Rss);
Else If(Event Ability == Button(Primary Fire) && Is Firing Secondary(Event Player));
Set Status(Victim, Null, Stunned, 1);
Apply Impulse(Victim, Facing Direction Of(Event Player) + Up * 0.100, 8.333, To World, Cancel Contrary Motion);
Else If(Event Ability == Button(Primary Fire) && !Is Firing Secondary(Event Player));
Apply Impulse(Victim, Facing Direction Of(Event Player), Event Damage / 6.250, To World, Incorporate Contrary Motion);
Apply Impulse(Victim, Direction Towards(Event Player, World Vector Of(Event Player.A2Rss, Event Player, Rotation And Translation)),
Distance Between(Event Player, Victim) * (1 + Is On Ground(Victim) * 1.500) + Event Damage / 7, To World,
Cancel Contrary Motion);
Skip If(Victim.SlowDuration >= 0.400, 2);
Start Forcing Throttle(Victim, 0, 0.666, 0, 0.666, 0, 0.666);
Victim.SlowDuration = 0.400;
If(Distance Between(Eye Position(Event Player), Victim) >= 4.500);
Skip If(Event Player.IncendiaryAmmo <= 0, 1);
Set Status(Victim, Event Player, Burning, 2.500);
Damage(Victim, Event Player, 25);
Play Effect(All Players(All Teams), Debuff Impact Sound, Color(Red), Victim, 200);
Set Status(Victim, Event Player, Stunned, 0.333);
}
}
rule("Brigitte Knockback Effects")
{
event
{
Player Dealt Knockback;
All;
Brigitte;
}
conditions
{
Victim.IsZombie != True;
}
actions
{
Apply Impulse(Victim, Event Direction * -1, 0.100, To World, Cancel Contrary Motion);
If(Is Firing Secondary(Event Player));
Teleport(Event Player, Facing Direction Of(Event Player) * 0.100 + Victim);
Apply Impulse(Event Player, Event Direction * -1, 0.100, To World, Cancel Contrary Motion);
Clear Status(Victim, Stunned);
Set Status(First Of(Sorted Array(Filtered Array(Players in View Angle(Event Player, All Teams, 90),
Current Array Element.IsZombie && Distance Between(Current Array Element, Event Player) <= 3), Distance Between(
Current Array Element, Event Player))), Event Player, Stunned, 1);
Damage(First Of(Sorted Array(Filtered Array(Players in View Angle(Event Player, All Teams, 90),
Current Array Element.IsZombie && Distance Between(Current Array Element, Event Player) <= 3), Distance Between(
Current Array Element, Event Player))), Event Player, 5);
Apply Impulse(First Of(Sorted Array(Filtered Array(Players in View Angle(Event Player, All Teams, 90),
Current Array Element.IsZombie && Distance Between(Current Array Element, Event Player) <= 3), Distance Between(
Current Array Element, Event Player))), Facing Direction Of(Event Player) + Up * 0.100, 13.333, To World,
Cancel Contrary Motion);
Wait Until(Ability Cooldown(Event Player, Button(Primary Fire)) > 6, 1);
Set Ability Cooldown(Event Player, Button(Primary Fire), 3);
}
}
rule("Brigitte Swing Starts")
{
event
{
Ongoing - Each Player;
All;
Brigitte;
}
conditions
{
Is Firing Primary(Event Player) == True;
Is Firing Secondary(Event Player) == False;
}
actions
{
If(Event Player.A1Rss > 0.400 || Event Player.A2Rss == Right);
Event Player.A2Rss = Left;
Else;
Event Player.A2Rss = Right;
}
}
rule("Brigitte Swing Ends")
{
event
{
Ongoing - Each Player;
All;
Brigitte;
}
conditions
{
Is Firing Primary(Event Player) == False;
}
actions
{
Abort If(Is Firing Secondary(Event Player));
Event Player.A1Rss = 0;
Chase Player Variable At Rate(Event Player, A1Rss, 1, 1, Destination and Rate);
}
}
rule("Brigitte Whip Starts")
{
event
{
Ongoing - Each Player;
All;
Brigitte;
}
conditions
{
Is Using Ability 1(Event Player) == True;
}
actions
{
Set Damage Dealt(Event Player, 1200 / 7);
}
}
rule("Brigitte Shield Starts")
{
event
{
Ongoing - Each Player;
All;
Brigitte;
}
conditions
{
Is Firing Secondary(Event Player) == True;
}
actions
{
Set Damage Dealt(Event Player, 1000);
}
}
rule("Brigitte Whip/Shield Ends")
{
event
{
Ongoing - Each Player;
All;
Brigitte;
}
conditions
{
Is Firing Secondary(Event Player) == False;
Is Using Ability 1(Event Player) == False;
}
actions
{
Set Damage Dealt(Event Player, 100);
Event Player.A1Rss = 0.500;
}
}
rule("Brigitte Whip Shot Kill")
rule("Brigitte 300 HP Unkillable")
{
event
{
Player Dealt Final Blow;
Ongoing - Each Player;
All;
Brigitte;
}
conditions
{
Victim.IsZombie == True;
Event Ability == Button(Ability 1);
Health(Event Player) > 295;
Has Status(Event Player, Unkillable) == False;
}
actions
{
Wait Until(Ability Cooldown(Event Player, Event Ability) > 1, 1.500);
Set Ability Cooldown(Event Player, Event Ability, 1);
Set Status(Event Player, Null, Unkillable, 999);
}
}
rule("Brigitte 300 HP Unkillable")
rule("Brigitte Whip Shot Kill")
{
event
{
Ongoing - Each Player;
Player Dealt Final Blow;
All;
Brigitte;
}
conditions
{
Health(Event Player) > 295;
Has Status(Event Player, Unkillable) == False;
Victim.IsZombie == True;
Event Ability == Button(Ability 1);
}
actions
{
Set Status(Event Player, Null, Unkillable, 5);
Wait(5.120, Restart When True);
Wait Until(Ability Cooldown(Event Player, Event Ability) > 1, 1.500);
Set Ability Cooldown(Event Player, Event Ability, 1);
}
}
rule("Brigitte Unkillable Expires")
{
event
{
Ongoing - Each Player;
All;
Brigitte;
}
conditions
{
Health(Event Player) <= 295;
Has Status(Event Player, Unkillable) == True;
}
actions
{
Clear Status(Event Player, Unkillable);
}
}
rule("D.Va Call Mech Ult Charge")
{
event
{
Ongoing - Each Player;
All;
D.Va;
}
conditions
{
(Match Time <= 135.950 || Is Waiting For Players) == True;
}
actions
{
Set Ultimate Charge(Event Player, 100);
}
}
rule("D.Va Booster Speed Nerf")
{
event
{
Ongoing - Each Player;
All;
D.Va;
}
conditions
{
Is Using Ability 1(Event Player) == True;
}
actions
{
Set Move Speed(Event Player, 49);
Wait(0.400, Abort When False);
Set Move Speed(Event Player, 66);
Wait(0.325, Abort When False);
Set Move Speed(Event Player, 83);
Wait(0.250, Abort When False);
Set Move Speed(Event Player, 100);
}
}
rule("D.Va Speed Recover")
{
event
{
Ongoing - Each Player;
All;
D.Va;
}
conditions
{
Is Using Ability 1(Event Player) == False;
}
actions
{
Set Move Speed(Event Player, 100);
}
}
rule("D.Va Has Zapping Armor in Mech")
{
event
{
Ongoing - Each Player;
All;
D.Va;
}
conditions
{
Is In Alternate Form(Event Player) == False;
Event Player.ZappingArmor == 1;
}
actions
{
Event Player.ZappingArmor = 2;
}
}
rule("D.Va Has Zapping Armor out of Mech")
{
event
{
Ongoing - Each Player;
All;
D.Va;
}
conditions
{
Is In Alternate Form(Event Player) == True;
Event Player.ZappingArmor == 2;
}
actions
{
Event Player.ZappingArmor = 1;
}
}
rule("D.Va Unkillable with Armor in Mech")
{
event
{
Ongoing - Each Player;
All;
D.Va;
}
conditions
{
Health Of Type(Event Player, Armor) >= 1;
}
actions
{
Wait(0.320, Abort When False);
Set Status(Event Player, Null, Unkillable, 5);
Wait(4, Abort When False);
Loop If Condition Is True;
}
}
rule("D.Va Unkillable Removal")
{
event
{
Ongoing - Each Player;
All;
D.Va;
}
conditions
{
Health Of Type(Event Player, Armor) < 1;
Max Ammo(Event Player, 0) != 20;
}
actions
{
Clear Status(Event Player, Unkillable);
Wait Until(Health Of Type(Event Player, Armor) >= 1, 4.080);
Damage(Event Player, Null, (Health Of Type(Event Player, Armor) + (Health Of Type(Event Player, Armor) > 0) * 5) * 10);
}
}
rule("D.Va Eject Protection")
{
event
{
Ongoing - Each Player;
All;
D.Va;
}
conditions
{
Has Status(Event Player, Invincible) == True;
Is In Alternate Form(Event Player) == False;
Health(Event Player) <= 0.020;
}
actions
{
Set Status(Event Player, Null, Invincible, 1.600);
}
}
rule("D.Va Damage Effects")
{
event
{
Player Dealt Damage;
All;
D.Va;
}
conditions
{
Is Dead(Victim) == False;
Victim.IsZombie == True;
}
actions
{
If(Event Ability == Button(Ability 1));
Apply Impulse(Victim, Facing Direction Of(Event Player) + Event Direction, 12 + (Speed Of In Direction(Event Player,
Facing Direction Of(Event Player)) > 6) * ((Speed Of In Direction(Event Player, Facing Direction Of(Event Player)) - 6)
/ 1.333), To World, Cancel Contrary Motion);
Set Status(Victim, Event Player, Knocked Down, Speed Of(Event Player) * 0.150);
Else If(Event Ability == Button(Melee) && !Is In Alternate Form(Event Player));
Set Status(Victim, Event Player, Stunned, 0.800);
Apply Impulse(Victim, Facing Direction Of(Event Player) + World Vector Of(Vector(0, 0, 5), Event Player, Rotation), 7.500,
To World, Cancel Contrary Motion);
Else If(Event Ability == Button(Ultimate));
Set Status(Victim, Event Player, Knocked Down, 0.900 + Event Damage / 666.667);
Apply Impulse(Victim, Event Direction + Up * (0.167 + ((Event Damage <= 75) * Event Damage + (Event Damage > 75) * (
Event Damage / 20)) / Victim.DamageTaken / 376) * (Y Component Of(Event Direction) < 0.167), ((Event Damage <= 75)
* Event Damage + (Event Damage > 75) * (Event Damage / 13.333) / Victim.DamageTaken + 10) / 2.500, To World,
Cancel Contrary Motion);
Else If(Event Ability == Button(Ability 2));
Apply Impulse(Victim, Event Direction, Event Damage / 1.050, To World, Cancel Contrary Motion);
Else If(Event Ability == Button(Primary Fire));
Skip If(Event Player.IncendiaryAmmo <= 0, 1);
Set Status(Victim, Event Player, Burning, 2.500);
If(Is In Alternate Form(Event Player));
Apply Impulse(Victim, Direction Towards(Eye Position(Event Player), Eye Position(Victim) + Up * ((Y Component Of(Eye Position(
Event Player)) - Y Component Of(Eye Position(Victim))) / 1.500)), 7.500 + Vertical Angle Towards(Event Player, Eye Position(
Victim)) / 12.500 + (Event Damage / (1 + Event Was Critical Hit * 0.667) - 5.667) / 3.375, To World, Cancel Contrary Motion);
Else;
Apply Impulse(Victim, Direction Towards(Eye Position(Event Player), Eye Position(Victim) + Up * ((Y Component Of(Eye Position(
Event Player)) - Y Component Of(Eye Position(Victim))) / 1.500)), 7.333 + Vertical Angle Towards(Event Player, Eye Position(
Victim)) / 15 + Event Damage / 5.500, To World, Incorporate Contrary Motion);
}
}
rule("Doomfist Has Shield")
{
event
{
Ongoing - Each Player;
All;
Doomfist;
}
conditions
{
Health Of Type(Event Player, Shields) > 0;
}
actions
{
Damage(Event Player, Null, Health Of Type(Event Player, Shields) * 10);
Wait Until(!Has Status(Event Player, Phased Out), 1);
Loop If Condition Is True;
}
}
rule("Doomfist Punch Charging")
{
event
{
Ongoing - Each Player;
All;
Doomfist;
}
conditions
{
Is Firing Secondary(Event Player) == True;
}
actions
{
Event Player.A1Rss = 0;
Chase Player Variable At Rate(Event Player, A1Rss, 100, 71.428, Destination and Rate);
}
}
rule("Doomfist Punch Launching")
{
event
{
Ongoing - Each Player;
All;
Doomfist;
}
conditions
{
Is Firing Secondary(Event Player) == False;
}
actions
{
Stop Chasing Player Variable(Event Player, A1Rss);
}
}
rule("Doomfist Scored Last Hit")
{
event
{
Player Dealt Final Blow;
All;
Doomfist;
}
conditions
{
Victim.IsZombie == True;
}
actions
{
Set Ammo(Event Player, 0, 4);
Wait Until(Ability Cooldown(Event Player, Event Ability) > 1, 1.024);
Set Ability Cooldown(Event Player, Event Ability, 0);
}
}
rule("Doomfist Damage Effects")
{
event
{
Player Dealt Damage;
All;
Doomfist;
}
conditions
{
Is Dead(Victim) == False;
}
actions
{
If(Event Ability == Button(Primary Fire) && Victim.IsZombie);
Apply Impulse(Victim, Direction Towards(Eye Position(Event Player), Eye Position(Victim) + Up * ((Y Component Of(Eye Position(
Event Player)) - Y Component Of(Eye Position(Victim))) / 1.500)), 11.667 + Vertical Angle Towards(Event Player, Eye Position(
Victim)) / 15 + Event Damage / 4.400, To World, Cancel Contrary Motion);
Skip If(Event Player.IncendiaryAmmo <= 0, 1);
Set Status(Victim, Event Player, Burning, 2.500);
Set Ability Cooldown(Event Player, Button(Secondary Fire), Ability Cooldown(Event Player, Button(Secondary Fire)) - 0.333);
Set Ability Cooldown(Event Player, Button(Ability 1), Ability Cooldown(Event Player, Button(Ability 1)) - 0.666);
Set Ability Cooldown(Event Player, Button(Ability 2), Ability Cooldown(Event Player, Button(Ability 2)) - 0.666);
Skip If(!Event Was Critical Hit, 1);
Damage(Victim, Event Player, Event Damage / 3);
Else If(Event Ability == Button(Melee) && Victim.IsZombie);
Start Rule(DoomMeleeKnockdown, Do Nothing);
Apply Impulse(Victim, Facing Direction Of(Event Player), 10 + (Speed Of In Direction(Event Player, Facing Direction Of(
Event Player)) > 6) * ((Speed Of In Direction(Event Player, Facing Direction Of(Event Player)) - 6) / 2), To World,
Cancel Contrary Motion);
Set Ammo(Event Player, 0, 4);
Else If(Event Ability == Button(Secondary Fire));
Skip If(Victim.IsZombie != True, 6);
Stop Holding Button(Victim, Button(Jump));
Skip If(Victim.IsZombie != True, 5);
Apply Impulse(Victim, Facing Direction Of(Event Player), Event Player.A1Rss / 3.333, To World, Cancel Contrary Motion);
Skip If(Event Player.A1Rss > 0, 2);
Wait Until(!Has Status(Victim, Stunned), 1);
Set Status(Victim, Event Player, Stunned, Event Damage / 83.333);
Skip(2);
Wait Until(Has Status(Victim, Stunned), 1);
Clear Status(Victim, Stunned);
Event Player.A1Rss = 0;
Else If(Event Ability == Button(Ability 1));
Set Status(Victim, Event Player, Rooted, Victim.IsZombie * 0.833);
Apply Impulse(Victim, Up + Vector(X Component Of(Facing Direction Of(Event Player)), 0, Z Component Of(Facing Direction Of(
Event Player))) * (0.183 + Victim.IsZombie * 0.317), 15.500, To World, Cancel Contrary Motion);
Else If(Event Ability == Button(Ability 2) && Victim.IsZombie);
Apply Impulse(Victim, Up + Vector(X Component Of(Facing Direction Of(Event Player)), 0, Z Component Of(Facing Direction Of(
Event Player))) * 3, 12.500 + Event Damage / 10, To World, Cancel Contrary Motion);
Else If(Event Ability == Button(Ultimate));
Apply Impulse(Victim, Up + Direction Towards(Event Player, Victim) * Victim.IsZombie * 4,
8.333 + Event Damage / Victim.DamageTaken * (Event Damage / Victim.DamageTaken < 250) / (Victim.DamageTaken * 20), To World,
Cancel Contrary Motion);
Set Status(Victim, Event Player, Knocked Down, Victim.IsZombie * ((8.100 - Distance Between(Event Player, Victim)) / 3));
}
}
rule("Genji Wallclimb Nerf")
{
event
{
Ongoing - Each Player;
All;
Genji;
}
conditions
{
Is On Wall(Event Player) == True;
}
actions
{
Set Move Speed(Event Player, 68.333);
}
}
rule("Genji Wallclimb Recover")
{
event
{
Ongoing - Each Player;
All;
Genji;
}
conditions
{
Is On Wall(Event Player) == False;
}
actions
{
Set Move Speed(Event Player, 100);
}
}
rule("Genji Swift Strike")
{
event
{
Ongoing - Each Player;
All;
Genji;
}
conditions
{
Is Using Ability 1(Event Player) == True;
}
actions
{
Set Status(Event Player, Null, Frozen, 0.175);
Apply Impulse(Event Player, Facing Direction Of(Event Player), 12.500, To World, Cancel Contrary Motion);
Wait(0.175, Ignore Condition);
Event Player.DamageDealt = 2;
Set Damage Dealt(Event Player, 200);
Set Status(Event Player, Null, Phased Out, 0.225);
Apply Impulse(Event Player, Facing Direction Of(Event Player), 15, To World, Cancel Contrary Motion);
Play Effect(Event Player, Explosion Sound, Color(Green), Event Player, 200);
Wait(0.225, Ignore Condition);
Event Player.DamageDealt = 1;
Set Damage Dealt(Event Player, 100);
}
}
rule("Genji Swift Strike Ends")
{
event
{
Ongoing - Each Player;
All;
Genji;
}
conditions
{
Ability Cooldown(Event Player, Button(Ability 1)) > 8;
(Event Player.A1Rss < 100 || Is Using Ultimate(Event Player)) == True;
}
actions
{
Skip If(!Is Using Ultimate(Event Player), 1);
Event Player.A1Rss = 20;
Set Ability Cooldown(Event Player, Button(Ability 1), Event Player.A1Rss / 10);
}
}
rule("Genji Swift Strike Off Cooldown")
{
event
{
Ongoing - Each Player;
All;
Genji;
}
conditions
{
(Event Player.A1Rss < 100 && Ability Cooldown(Event Player, Button(Ability 1)) < 1) == True;
Is Using Ability 1(Event Player) == False;
}
actions
{
Event Player.A1Rss = 100;
Abort If(Is Using Ultimate(Event Player) != True);
Set Ability Cooldown(Event Player, Button(Ability 1), 2);
}
}
rule("Genji Ult Starts")
{
event
{
Ongoing - Each Player;
All;
Genji;
}
conditions
{
Is Using Ultimate(Event Player) == True;
Is Alive(Event Player) == True;
}
actions
{
Wait(1, Abort When False);
Set Status(Event Player, Null, Unkillable, 4.320);
Event Player.A3Rss = 0;
Wait(4.320, Abort When False);
Set Ability Cooldown(Event Player, Button(Ability 1), 0);
Event Player.A3Rss = 100;
}
}
rule("Genji Ult Ends")
{
event
{
Ongoing - Each Player;
All;
Genji;
}
conditions
{
Is Using Ultimate(Event Player) == False;
Normalized Health(Event Player) < 0.850;
Is Alive(Event Player) == True;
}
actions
{
Heal(Event Player, Null, Max Health(Event Player));
Wait(0.250, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Genji Hit During Ult")
{
event
{
Player Took Damage;
All;
Genji;
}
conditions
{
Has Status(Event Player, Unkillable) == True;
Is Dead(Event Player) == False;
Attacker.IsZombie == True;
Event Damage > 67;
}
actions
{
Event Player.A3Rss += 50;
Wait(0.016, Ignore Condition);
If(Event Player.A3Rss < 100);
Damage(Event Player, Null, 666.667);
Else;
Damage(Event Player, Null, 666.667);
Wait(0.016, Ignore Condition);
Clear Status(Event Player, Unkillable);
}
}
rule("Genji Deflect")
{
event
{
Ongoing - Each Player;
All;
Genji;
}
conditions
{
Is Using Ability 2(Event Player) == True;
}
actions
{
Wait(0.464, Abort When False);
Set Ability 2 Enabled(Event Player, False);
Wait(0.016, Ignore Condition);
Set Ability 2 Enabled(Event Player, True);
Set Ability Cooldown(Event Player, Button(Ability 2), 0.512);
}
}
rule("Genji Damage Effects")
{
event
{
Player Dealt Damage;
All;
Genji;
}
conditions
{
Victim.IsZombie == True;
Is Dead(Event Player) == False;
Event Ability != Button(Ability 2);
}
actions
{
Skip If(Event Ability != Button(Ability 1) || Event Player.A1Rss <= 20, 2);
Set Ammo(Event Player, 0, 15);
Event Player.A1Rss -= 20;
If(Is Using Ability 2(Event Player) && Event Ability == Button(Ability 1));
Apply Impulse(Victim, Facing Direction Of(Event Player) * 2.500 + Forward, Vertical Facing Angle Of(Event Player)
/ 13.450 + 33.333, To World, Cancel Contrary Motion);
Set Status(Victim, Attacker, Knocked Down, 2.167);
Else;
If(Event Ability == Button(Melee) && Event Player.DamageDealt == 2);
Set Status(Victim, Attacker, Stunned, 1.777);
Else If(!(Event Ability == Button(Ability 1) && Event Player.DamageDealt == 1));
Apply Impulse(Victim, Direction Towards(Eye Position(Event Player), Eye Position(Victim) + Up * ((Y Component Of(Eye Position(
Event Player)) - Y Component Of(Eye Position(Victim))) / 1.500)), 7.250 + (Event Ability == Button(Melee))
* 3.750 + Vertical Angle Towards(Event Player, Eye Position(Victim)) / 12 + (Event Damage + (
Event Damage / Victim.DamageTaken == 30) * 3 - Event Damage / 28 * 27.167) / 0.250, To World, Cancel Contrary Motion);
Event Player)) - Y Component Of(Eye Position(Victim))) / 1.500)), 7.250 + Vertical Angle Towards(Event Player, Eye Position(
Victim)) / 12 + (Event Damage + (Event Damage / Victim.DamageTaken == 30) * 3 - Event Damage / 28 * 27.167) / 0.250, To World,
Cancel Contrary Motion);
Skip If((Event Player.IncendiaryAmmo <= 0 || (
Event Damage / Victim.DamageTaken > 29.500 && Event Damage / Victim.DamageTaken < 30.500)) == True, 1);
Set Status(Victim, Event Player, Burning, 2.500);
Skip If(Array Contains(Array(Button(Primary Fire), Button(Secondary Fire)), Event Ability), 1);
Else;
Abort If(Victim.SlowDuration >= 0.300);
Start Forcing Throttle(Victim, 0, 0.666, 0, 0.666, 0, 0.666);
Victim.SlowDuration = 0.300;
}
}
rule("Hanzo Firing Primary")
{
event
{
Ongoing - Each Player;
All;
Hanzo;
}
conditions
{
Is Firing Primary(Event Player) == True;
}
actions
{
Disallow Button(Event Player, Button(Ability 2));
Disallow Button(Event Player, Button(Ultimate));
}
}
rule("Hanzo Not Firing Primary")
{
event
{
Ongoing - Each Player;
All;
Hanzo;
}
conditions
{
Is Firing Primary(Event Player) == False;
}
actions
{
Allow Button(Event Player, Button(Ability 2));
Allow Button(Event Player, Button(Ultimate));
}
}
rule("Hanzo Storm Arrow Auto-Chain")
{
event
{
Ongoing - Each Player;
All;
Hanzo;
}
conditions
{
Is Firing Primary(Event Player) == True;
Is Button Held(Event Player, Button(Ability 2)) == True;
Ability Cooldown(Event Player, Button(Ability 2)) == 0;
}
actions
{
Press Button(Event Player, Button(Primary Fire));
Wait(0.016, Ignore Condition);
Allow Button(Event Player, Button(Ability 2));
Press Button(Event Player, Button(Ability 2));
}
}
rule("Hanzo Ultimate Auto-Chain")
{
event
{
Ongoing - Each Player;
All;
Hanzo;
}
conditions
{
Is Firing Primary(Event Player) == True;
Is Button Held(Event Player, Button(Ultimate)) == True;
Ultimate Charge Percent(Event Player) == 100;
}
actions
{
Press Button(Event Player, Button(Primary Fire));
Wait(0.016, Ignore Condition);
Allow Button(Event Player, Button(Ultimate));
Press Button(Event Player, Button(Ultimate));
}
}
rule("Hanzo Lunge")
rule("Hanzo Lunge Status")
{
event
{
Ongoing - Each Player;
All;
Hanzo;
}
conditions
{
Ability Cooldown(Event Player, Button(Jump)) > 0;
}
actions
{
Set Status(Event Player, Null, Phased Out, 2.833);
Play Effect(All Players(All Teams), Good Explosion, Color(Aqua), (Eye Position(Event Player) + Position Of(Event Player)
+ Up * 0.500) / 2, 1);
Destroy Icon(Event Player.Icons[4]);
Set Invisible(Event Player, All);
Set Damage Dealt(Event Player, 120);
Event Player.A2Rss = 200;
Disallow Button(Event Player, Button(Melee));
Create Effect(Filtered Array(Remove From Array(All Players(All Teams), Event Player), Current Array Element.IsZombie == 0), Orb,
Color(Aqua), (Eye Position(Event Player) + Position Of(Event Player) + Up * 0.500) / 2, 0.250, Visible To Position and Radius);
Event Player.A1Rss = Last Created Entity;
Create Effect(Filtered Array(Event Player, !Is Communicating Any Emote(Current Array Element)), Good Aura, Color(Gray),
Update Every Frame(Eye Position(Event Player) + Facing Direction Of(Event Player) * 0.500), 0.667,
Visible To Position and Radius);
Event Player.Effects[1] = Last Created Entity;
Event Player.A2Rss = 120;
}
}
rule("Hanzo Visible")
rule("Hanzo Lunge Status Reset")
{
event
{
Ongoing - Each Player;
All;
Hanzo;
}
conditions
{
Has Status(Event Player, Phased Out) == False;
Event Player.A2Rss == 120;
Is On Ground(Event Player) == True;
Event Player.A2Rss == 200;
}
actions
{
Allow Button(Event Player, Button(Melee));
Set Invisible(Event Player, None);
Set Damage Dealt(Event Player, 100);
Play Effect(All Players(All Teams), Good Explosion, Color(Aqua), (Eye Position(Event Player) + Position Of(Event Player)
+ Up * 0.500) / 2, 0.667);
Destroy Effect(Event Player.A1Rss);
Destroy Effect(Event Player.Effects[1]);
Event Player.A2Rss = 100;
Allow Button(Event Player, Button(Melee));
}
}
rule("Hanzo Melee in Stealth")
rule("Hanzo Melee During Lunge")
{
event
{
Ongoing - Each Player;
All;
Hanzo;
}
conditions
{
Is Meleeing(Event Player) == False;
Has Status(Event Player, Phased Out) == True;
Event Player.A2Rss == 200;
Is Button Held(Event Player, Button(Melee)) == True;
Is Meleeing(Event Player) == False;
}
actions
{
Set Damage Dealt(Event Player, 200);
Allow Button(Event Player, Button(Melee));
Set Damage Dealt(Event Player, 166.667);
Press Button(Event Player, Button(Melee));
Wait Until(Is Dead(Event Player), 0.192);
Set Damage Dealt(Event Player, Event Player.A2Rss);
}
}
rule("Hanzo Stealth Movement")
{
event
{
Ongoing - Each Player;
All;
Hanzo;
}
conditions
{
Has Status(Event Player, Phased Out) == True;
(Is On Ground(Event Player) || Is On Wall(Event Player)) == True;
Is Moving(Event Player) == True;
}
actions
{
Skip If(Is On Wall(Event Player), 2);
Play Effect(All Players(All Teams), Ring Explosion, Color(Aqua), Position Of(Event Player) + Up * 0.050,
0.250 + Horizontal Speed Of(Event Player) / (16.500 / !Is Crouching(Event Player)));
Skip(1);
Play Effect(All Players(All Teams), Bad Explosion, Color(Aqua), (Eye Position(Event Player) + Position Of(Event Player)
+ Up * 0.500) / 2, 0.200);
Wait(1.375 / Speed Of(Event Player), Restart When True);
Loop If Condition Is True;
Event Player.A2Rss = 100;
Set Damage Dealt(Event Player, 100);
}
}
rule("Hanzo Damage Effects")
{
event
{
Player Dealt Damage;
All;
Hanzo;
}
conditions
{
Is Dead(Victim) == False;
Victim.IsZombie == True;
(Event Ability == Button(Ultimate) && Event Damage < 120) == False;
}
actions
{
Clear Status(Event Player, Phased Out);
If(Event Ability != Button(Melee));
Skip If(Event Player.IncendiaryAmmo <= 0, 1);
Set Status(Victim, Event Player, Burning, 2.500);
Apply Impulse(Victim, Event Direction + (Y Component Of(Event Direction) < 0) * Up * (Absolute Value(Y Component Of(
Event Direction)) / 1.333), (118.750 + Event Damage * (1.250 - Event Was Critical Hit * 0.500)) / (20 - Array Contains(Array(
Button(Ability 1), Button(Ultimate)), Event Ability) * 11.667), To World, Cancel Contrary Motion);
Set Status(Victim, Event Player, Stunned, Event Was Critical Hit * (Event Damage + 50) * 0.004);
Abort If(Victim.SlowDuration >= Event Damage / Victim.DamageTaken / (125 * (Event Was Critical Hit + 1)));
Start Forcing Throttle(Victim, 0, 0.666, 0, 0.666, 0, 0.666);
Victim.SlowDuration = Event Damage / Victim.DamageTaken / (125 * (Event Was Critical Hit + 1));
Else If(Event Ability == Button(Melee) && Event Damage >= 50);
Else If(Event Ability == Button(Melee) && Event Damage > 55);
Set Status(Victim, Event Player, Knocked Down, 1.667);
Apply Impulse(Victim, Vector(X Component Of(Facing Direction Of(Event Player)), Y Component Of(Facing Direction Of(Event Player))
/ 2, Z Component Of(Facing Direction Of(Event Player))), 20 + Absolute Value(Y Component Of(Facing Direction Of(Event Player))
- 1) * 5, To World, Cancel Contrary Motion);
}
}
rule("McCree Deadeye")
{
event
{
Ongoing - Each Player;
All;
McCree;
}
conditions
{
Is Using Ultimate(Event Player) == True;
Ammo(Event Player, 0) == 6;
}
actions
{
Wait(0.208, Abort When False);
Press Button(Event Player, Button(Primary Fire));
Loop If Condition Is True;
}
}
rule("McCree Roll Jump")
{
event
{
Ongoing - Each Player;
All;
McCree;
}
conditions
{
Is Using Ability 1(Event Player) == True;
}
actions
{
Event Player.A1Rss = Position Of(Event Player);
Wait(0.267, Ignore Condition);
Skip If((Is Button Held(Event Player, Button(Jump)) && Is On Ground(Event Player) && Is Using Ability 1(Event Player)) == False,
2);
Set Status(Event Player, Event Player, Knocked Down, 0.016);
Apply Impulse(Event Player, Direction Towards(Event Player.A1Rss, Eye Position(Event Player)) + Up * 0.275,
10.125 + 1.500 * Distance Between(Event Player.A1Rss, Position Of(Event Player)), To World, Cancel Contrary Motion);
Event Player.A1Rss = 100;
}
}
rule("McCree Flashbang Throw")
{
event
{
Ongoing - Each Player;
All;
McCree;
}
conditions
{
Is Using Ability 2(Event Player) == True;
}
actions
{
Event Player.ProjectilePosition = Eye Position(Event Player);
Event Player.ProjectileVelocity = Facing Direction Of(Event Player) * 0.480;
Event Player.ProjectileExists = 1;
}
}
rule("McCree Flashbang Flight")
{
event
{
Ongoing - Each Player;
All;
McCree;
}
conditions
{
Event Player.ProjectileExists > 0;
}
actions
{
Event Player.ProjectilePosition = Event Player.ProjectilePosition + Event Player.ProjectileVelocity;
Set Status(Filtered Array(Players Within Radius(Event Player.ProjectilePosition, 4.080, All Teams, Off),
Current Array Element.IsZombie == 0), Null, Phased Out, 0.017);
Event Player.ProjectileExists -= 1 / 15;
Wait(0.016, Ignore Condition);
Loop If Condition Is True;
}
}
rule("McCree Flashbang Explode")
{
event
{
Ongoing - Each Player;
All;
McCree;
}
conditions
{
Event Player.ProjectileExists <= 0;
}
actions
{
Event Player.ProjectileExists = 0;
Wait(0.017, Ignore Condition);
Event Player.ProjectilePosition = 0;
Event Player.ProjectileVelocity = 0;
}
}
rule("McCree Damage Effects")
{
event
{
Player Dealt Damage;
All;
McCree;
}
conditions
{
Is Dead(Victim) == False;
Victim.IsZombie == True;
Array Contains(Array(Button(Primary Fire), Button(Secondary Fire), Button(Ultimate)), Event Ability) == True;
}
actions
{
Skip If(Event Player.IncendiaryAmmo <= 0, 1);
Set Status(Victim, Event Player, Burning, 2.500);
Skip If(Event Player.SlowDuration >= 0.333, 2);
Start Forcing Throttle(Victim, 0, 0.666, 0, 0.666, 0, 0.666);
Victim.SlowDuration = 0.333;
If(Event Ability != Button(Ultimate));
Skip If(!Event Was Critical Hit, 1);
Set Status(Victim, Event Player, Stunned, 0.100 + Event Damage / Victim.DamageTaken / 700);
Apply Impulse(Victim, Direction Towards(Eye Position(Event Player), Eye Position(Victim) + Up * ((Y Component Of(Eye Position(
Event Player)) - Y Component Of(Eye Position(Victim))) / 1.500)), 6.500 + Vertical Angle Towards(Event Player, Eye Position(
Victim)) / 10 + (Event Damage - 10) * (1 - 0.400 * Event Was Critical Hit) / 5, To World, Cancel Contrary Motion);
Skip If(Event Ability != Button(Secondary Fire), 1);
Damage(Victim, Event Player, Event Damage / Event Player.DamageTaken / 5);
Skip If(Event Was Critical Hit == False, 1);
Set Status(Victim, Event Player, Stunned, 0.100 + Event Damage / Victim.DamageTaken / 700);
Else;
Damage(Victim, Event Player, Max Health(Victim) / 4 + (Max Health(Victim) - Health(Victim)) / 2);
Apply Impulse(Victim, Direction Towards(Eye Position(Event Player), Eye Position(Victim) + Up * ((Y Component Of(Eye Position(
Event Player)) - Y Component Of(Eye Position(Victim))) / 1.500)), 33.333, To World, Cancel Contrary Motion);
}
}
rule("Mercy Staff Taser")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Is Firing Secondary(Event Player) == True;
}
actions
{
Wait(0.128, Restart When True);
Damage(First Of(Sorted Array(Filtered Array(All Living Players(All Teams), Current Array Element.IsZombie && Is In View Angle(
Event Player, (Position Of(Current Array Element) + Eye Position(Current Array Element)) / 2, 45) && Is In Line of Sight((
Position Of(Current Array Element) + Eye Position(Current Array Element)) / 2, Eye Position(Event Player),
Barriers Do Not Block LOS) && Distance Between((Position Of(Current Array Element) + Eye Position(Current Array Element)) / 2,
Eye Position(Event Player)) <= 8.333 + Is Using Ultimate(Event Player) * 8.334), Distance Between(Current Array Element,
Eye Position(Event Player)))), Event Player, 3.200 * (1 + Is Using Ultimate(Event Player) * 0.200));
Loop If Condition Is True;
}
}
rule("Mercy Create Beam")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
actions
{
Wait(0.250, Ignore Condition);
Create Beam Effect(Event Player.A2Rss[0], Mercy Boost Beam, Eye Position(Event Player) + 1.200 * (Facing Direction Of(Event Player)
Create Beam Effect(Event Player.A2Rss, Mercy Boost Beam, Eye Position(Event Player) + 1.200 * (Facing Direction Of(Event Player)
+ World Vector Of(Vector(-0.140, -0.137 + (!Is Using Ultimate(Event Player) && Is In Air(Event Player)
&& Speed Of In Direction(Event Player, Up) > 0) * -0.045 + (Is Using Ultimate(Event Player) || (Is In Air(Event Player)
&& Speed Of In Direction(Event Player, Down) >= 0)) * 0.050, 0), Event Player, Rotation)), Event Player.A3Rss, Color(Blue),
Visible To Position and Radius);
Event Player.A1Rss = Last Created Entity;
}
}
rule("Mercy Damage Effects")
{
event
{
Player Dealt Damage;
All;
Mercy;
}
conditions
{
Is Dead(Victim) == False;
}
actions
{
Skip If(Is In Alternate Form(Event Player), 7);
Set Ultimate Charge(Event Player, (Ultimate Charge Percent(Event Player) == 100) * 100);
Abort If(!Victim.IsZombie);
If(Event Ability == 0);
Start Rule(MercyTaserTether, Do Nothing);
Else If(Event Ability == Button(Melee));
Set Status(Victim, Event Player, Stunned, 0.900);
Apply Impulse(Victim, Facing Direction Of(Event Player), 25 + Vertical Facing Angle Of(Event Player) / 9, To World,
Cancel Contrary Motion XYZ);
Abort If(Event Ability != Button(Primary Fire) || !Victim.IsZombie);
Skip If(Event Player.IncendiaryAmmo <= 0, 1);
Set Status(Victim, Event Player, Burning, 2.500);
Apply Impulse(Victim, Direction Towards(Eye Position(Event Player), Eye Position(Victim) + Up * ((Y Component Of(Eye Position(
Event Player)) - Y Component Of(Eye Position(Victim))) / 1.500)), 7.500 + Vertical Angle Towards(Event Player, Eye Position(
Victim)) / 12.500 + (Event Damage / (1 + Event Was Critical Hit * 0.667) - 7.500) / 3.375, To World, Cancel Contrary Motion);
}
}
rule("Mercy Primary on Staff")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Is In Alternate Form(Event Player) == False;
Is Firing Primary(Event Player) == True;
Is Meleeing(Event Player) == False;
}
actions
{
Start Holding Button(Event Player, Button(Melee));
Wait(1.008, Ignore Condition);
Stop Holding Button(Event Player, Button(Melee));
Loop If Condition Is True;
}
}
rule("Mercy on Staff")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Is In Alternate Form(Event Player) == False;
}
actions
{
Set Damage Dealt(Event Player, 200);
}
}
rule("Mercy on Pistol")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Is In Alternate Form(Event Player) == True;
}
actions
{
Set Damage Dealt(Event Player, 100);
}
}
rule("Mercy Back Hop")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Ability Cooldown(Event Player, Button(Ability 1)) == 0;
(Is Button Held(Event Player, Button(Ability 1)) && Is Alive(Event Player) && !Has Status(Event Player, Hacked) && !Has Status(
Event Player, Rooted) && !Has Status(Event Player, Stunned) && !Has Status(Event Player, Frozen) && !Has Status(Event Player,
Knocked Down)) == True;
}
actions
{
Set Ability Cooldown(Event Player, Button(Ability 1), Event Player.A2Rss[1]);
Apply Impulse(Event Player, Up, (1 + (Distance Between(Position Of(Event Player) + Up * 0.025, Ray Cast Hit Position(Position Of(
Event Player) + Up * 0.025, Position Of(Event Player) + World Vector Of(Vector(0, 0.025, -2), Event Player,
Rotation And Translation), All Players(All Teams), All Players(All Teams), False)) < 1.667) * 0.333) * 5, To Player,
Cancel Contrary Motion);
Apply Impulse(Event Player, Backward, 16, To Player, Cancel Contrary Motion);
Play Effect(All Players(All Teams), Sombra Translocating Sound, Color(White), Event Player, 100);
Event Player.A2Rss[1] += 1;
Set Ability Cooldown(Event Player, Button(Ability 1), 4);
}
}
rule("Mercy Boost Up")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Ability Cooldown(Event Player, Button(Ability 2)) == 0;
Is Button Held(Event Player, Button(Ability 2)) == True;
Has Status(Event Player, Hacked) == False;
Is On Ground(Event Player) == True;
}
actions
{
Set Ability Cooldown(Event Player, Button(Ability 2), 8);
Skip If(Ability Cooldown(Event Player, Button(Ability 1)) > 0.832, 1);
Set Ability Cooldown(Event Player, Button(Ability 1), 0.832);
Skip If(Ability Cooldown(Event Player, Button(Ability 1)) > 0.912, 1);
Set Ability Cooldown(Event Player, Button(Ability 1), 0.912);
Apply Impulse(Event Player, Up, 12.200, To Player, Cancel Contrary Motion);
Play Effect(All Players(All Teams), Baptiste Biotic Launcher Explosion Sound, Color(White), Event Player, 116.667);
}
}
rule("Mercy Boost Enable")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Is On Ground(Event Player) == True;
}
actions
{
Set Ability 2 Enabled(Event Player, True);
Event Player.A2Rss[1] = 4;
}
}
rule("Mercy Boost Disable")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Is On Ground(Event Player) == False;
}
actions
{
Set Ability 2 Enabled(Event Player, False);
}
}
rule("Mercy Valk Lift Limit")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Ability Cooldown(Event Player, Button(Ability 2)) <= 7.040;
Is Using Ultimate(Event Player) == True;
Speed Of In Direction(Event Player, Up) > 0;
Distance Between(Eye Position(Event Player), Ray Cast Hit Position(Eye Position(Event Player) + Down * 0.333, Eye Position(
Event Player) + Down * 2.666, All Players(All Teams), All Players(All Teams), False)) > 2;
}
actions
{
Apply Impulse(Event Player, Down, Speed Of In Direction(Event Player, Up) * 1.333, To Player, Incorporate Contrary Motion);
Wait(0.032, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Pharah Firing Primary")
{
event
{
Ongoing - Each Player;
All;
Pharah;
}
conditions
{
Is Firing Primary(Event Player) == True;
Y Component Of(Facing Direction Of(Event Player)) <= -0.300;
}
actions
{
Event Player.A1Rss = Y Component Of(Facing Direction Of(Event Player));
}
}
rule("Pharah Damage Effects")
{
event
{
Player Dealt Damage;
All;
Pharah;
}
conditions
{
Event Ability != Button(Melee);
Is Dead(Victim) == False;
Victim.IsZombie == True;
}
actions
{
Skip If(Event Player.IncendiaryAmmo <= 0, 1);
Set Status(Victim, Event Player, Burning, 2.500);
If(Event Damage / Victim.DamageTaken > 119.500);
Set Status(Victim, Event Player, Knocked Down, Event Damage / 166.667);
Apply Impulse(Victim, Direction Towards(Event Player, Victim), 15, To World, Incorporate Contrary Motion);
Else;
Abort If(Victim.SlowDuration >= 0.833);
Start Forcing Throttle(Victim, 0, 0.666, 0, 0.666, 0, 0.666);
Victim.SlowDuration = 0.833;
}
}
rule("Pharah Knockback Effects")
{
event
{
Player Dealt Knockback;
All;
Pharah;
}
actions
{
If(Victim == Event Player && Event Damage > 0);
Apply Impulse(Event Player, Vector(X Component Of(Event Direction), (Event Player.A1Rss < -0.300) * Absolute Value(
Event Player.A1Rss) + 0.300, Z Component Of(Event Direction)), Event Damage * 3.375, To World, Cancel Contrary Motion);
Else If(Victim.IsZombie == Event Player.IsZombie && Victim != Event Player && Event Damage == 0);
Wait(0.016, Ignore Condition);
Apply Impulse(Victim, Event Direction * -1, 0.100, To World, Cancel Contrary Motion);
Else If(Victim.IsZombie == True && Event Damage > 0);
Apply Impulse(Victim, Event Direction + Up * 0.300, (Event Damage - (Event Damage / Event Player.DamageTaken >= 119.500) * 100)
/ 8, To World, Incorporate Contrary Motion);
Else If(Victim.IsZombie == True && Event Damage == 0);
Set Status(Victim, Event Player, Knocked Down, 1.200);
Apply Impulse(Victim, Event Direction, 6, To World, Incorporate Contrary Motion);
}
}
rule("Sigma Kinetic Grasp")
{
event
{
Ongoing - Each Player;
All;
Sigma;
}
conditions
{
Is Using Ability 1(Event Player) == True;
}
actions
{
Damage(Filtered Array(All Living Players(All Teams), Current Array Element.IsZombie && Distance Between(Event Player,
Current Array Element) <= 8.333 && Is In View Angle(Event Player, Current Array Element, 90)), Event Player, 5);
Wait(0.096, Ignore Condition);
Loop If Condition Is True;
Damage(Filtered Array(All Living Players(All Teams), Current Array Element.IsZombie && Distance Between(Event Player,
Current Array Element) <= 8.333 && Is In View Angle(Event Player, Current Array Element, 90)), Event Player, 5);
Set Status(Filtered Array(All Living Players(All Teams), Current Array Element.IsZombie && Distance Between(Event Player,
Current Array Element) <= 8.333 && Is In View Angle(Event Player, Current Array Element, 90)), Event Player, Stunned, 1.200);
}
}
rule("Sigma Gravitic Punch")
{
event
{
Ongoing - Each Player;
All;
Sigma;
}
conditions
{
Ability Cooldown(Event Player, Button(Secondary Fire)) == 0;
Is Button Held(Event Player, Button(Secondary Fire)) == True;
(Is Using Ability 1(Event Player) || Is Using Ability 2(Event Player) || Is Meleeing(Event Player) || Is Using Ultimate(
Event Player)) == False;
Is Meleeing(Event Player) == False;
}
actions
{
Start Holding Button(Event Player, Button(Melee));
Wait Until(Is Meleeing(Event Player) && Is Button Held(Event Player, Button(Secondary Fire)), 1.008);
Skip If(!Is Meleeing(Event Player) || !Is Button Held(Event Player, Button(Secondary Fire)), 4);
Wait Until(Is Meleeing(Event Player), 2.080);
Skip If(!Is Meleeing(Event Player) || !Is Button Held(Event Player, Button(Secondary Fire)), 6);
Set Ability Cooldown(Event Player, Button(Secondary Fire), 2);
Damage(Filtered Array(All Players(All Teams), Current Array Element.IsZombie && Distance Between(Event Player,
Current Array Element) <= 5.500 && Is In View Angle(Event Player, Current Array Element, 90)), Event Player, 20);
Wait(0.100, Ignore Condition);
Play Effect(All Players(All Teams), Bad Explosion, Color(Blue), Eye Position(Event Player) + 1.333 * (Facing Direction Of(
Event Player) + World Vector Of(Vector(0.067, -0.033, 0), Event Player, Rotation)), 0.667);
Stop Holding Button(Event Player, Button(Melee));
}
}
rule("Sigma Accretion Jump")
{
event
{
Ongoing - Each Player;
All;
Sigma;
}
conditions
{
Is Using Ability 2(Event Player) == True;
Is Button Held(Event Player, Button(Jump)) == True;
}
actions
{
Stop Holding Button(Event Player, Button(Jump));
Wait Until(Is On Ground(Event Player) && Is Button Held(Event Player, Button(Jump)), 0.752);
Abort If(!Is Using Ability 2(Event Player));
Apply Impulse(Event Player, Up, 5.725, To World, Cancel Contrary Motion);
}
}
rule("Sigma Damage Effects")
{
event
{
Player Dealt Damage;
All;
Sigma;
}
conditions
{
Is Alive(Victim) == True;
}
actions
{
If(Event Ability == 0 && Event Damage < 20);
Set Status(Victim, Event Player, Knocked Down, 0.032);
Set Status(Victim, Event Player, Hacked, 0.128);
Set Status(Victim, Event Player, Hacked, 0.200);
Apply Impulse(Victim, Direction Towards(Eye Position(Victim) + Down * 0.333, Eye Position(Event Player) + Facing Direction Of(
Event Player) * 2.125), 0.333 + Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(
Event Player), Eye Position(Victim) + Down * 0.333)) / 30 + Distance Between(Eye Position(Victim) + Down * 0.333, Eye Position(
Event Player) + Facing Direction Of(Event Player) * 2.125) * 1.750, To World, Cancel Contrary Motion);
Else If(Event Ability == 0 && Event Damage >= 20);
Set Status(Victim, Event Player, Knocked Down, 1.500);
Apply Impulse(Victim, Vector(X Component Of(Facing Direction Of(Event Player)), Y Component Of(Facing Direction Of(Event Player))
/ 2, Z Component Of(Facing Direction Of(Event Player))), 20 + Absolute Value(Y Component Of(Facing Direction Of(Event Player))
- 1) * 5, To World, Cancel Contrary Motion);
Else If(Event Ability == Button(Ability 2) && Victim.IsZombie);
Skip If(Event Damage < 70, 1);
Set Status(Victim, Null, Knocked Down, 1.500 + 1 / (1 + Distance Between(Event Player, Victim) / 2));
Apply Impulse(Victim, Event Direction, Event Damage * 0.429, To World, Cancel Contrary Motion);
Abort If(Victim.SlowDuration >= 0.833 || Event Damage >= 70);
Start Forcing Throttle(Victim, 0, 0.666, 0, 0.666, 0, 0.666);
Victim.SlowDuration = 0.833;
Else If(Event Ability == Button(Primary Fire) && Victim.IsZombie);
Skip If(Event Player.IncendiaryAmmo <= 0, 1);
Set Status(Victim, Event Player, Burning, 2.500);
Skip If(Event Damage / Victim.DamageTaken < 50, 1);
Set Status(Victim, Event Player, Rooted, 0.400);
Abort If(Victim.SlowDuration >= 0.833);
Start Forcing Throttle(Victim, 0, 0.666, 0, 0.666, 0, 0.666);
Victim.SlowDuration = 0.833;
Else If(Event Ability == Button(Ultimate));
Set Status(Victim, Null, Phased Out, (Victim.IsZombie == 0) * 0.032);
Abort If(Event Damage < Max Health(Victim) / 2);
Set Status(Victim, Event Player, Knocked Down, 3);
Else If(Event Ability == Button(Ability 2));
If(Victim.IsZombie);
Skip If(Event Damage < 70, 1);
Set Status(Victim, Null, Knocked Down, 1.500 + 1 / (1 + Distance Between(Event Player, Victim) / 2));
Apply Impulse(Victim, Event Direction, Event Damage * 0.429, To World, Cancel Contrary Motion);
Abort If(Victim.SlowDuration >= 0.833 || Event Damage >= 70);
Start Forcing Throttle(Victim, 0, 0.666, 0, 0.666, 0, 0.666);
Victim.SlowDuration = 0.833;
Else If(Event Player == Victim);
Apply Impulse(Victim, Event Direction + (Y Component Of(Event Direction) > -0.200 && Y Component Of(Event Direction) < 0.800)
* Up * ((1 - Y Component Of(Event Direction)) / 2), Event Damage * 6.200, To World, Cancel Contrary Motion);
If(Event Direction == 0);
Apply Impulse(Victim, Up, Event Damage * 6.200, To World, Cancel Contrary Motion);
}
}
rule("Soldier: 76 Stamina Consumption")
{
event
{
Ongoing - Each Player;
All;
Soldier: 76;
}
conditions
{
Is Using Ability 1(Event Player) == True;
}
actions
{
Skip If(Event Player.A1Rss < 5, 1);
Event Player.A1Rss -= 5;
Set Move Speed(Event Player, 200 / 3 + Event Player.A1Rss * (1 / 3));
Wait(0.500, Abort When False);
Loop;
}
}
rule("Soldier: 76 Stamina Replenish")
{
event
{
Ongoing - Each Player;
All;
Soldier: 76;
}
conditions
{
Is Using Ability 2(Event Player) == True;
}
actions
{
Event Player.A1Rss = 100;
Small Message(Event Player, Custom String("Stamina Replenished"));
}
}
rule("Soldier: 76 Stamina Recovery")
{
event
{
Ongoing - Each Player;
All;
Soldier: 76;
}
conditions
{
Is Using Ability 1(Event Player) == False;
Event Player.A1Rss < 100;
}
actions
{
Set Move Speed(Event Player, 100);
Wait(0.500 - (Is Crouching(Event Player) * 0.200 - Is Moving(Event Player) * 0.100), Abort When False);
Event Player.A1Rss += 5;
Loop;
}
}
rule("Soldier: 76 Stamina Prompts")
{
event
{
Ongoing - Each Player;
All;
Soldier: 76;
}
conditions
{
Is Button Held(Event Player, Button(Ability 1)) == True;
Event Player.PromptCount <= 1;
}
actions
{
Event Player.PromptCount += 1;
Small Message(Event Player, String("{0}: {1}", Custom String("Stamina"), String("{0} / {1}", Event Player.A1Rss, 100)));
Wait(3, Ignore Condition);
Event Player.PromptCount -= 1;
Loop If Condition Is True;
}
}
rule("Soldier: 76 Damage Effects")
{
event
{
Player Dealt Damage;
All;
Soldier: 76;
}
conditions
{
Is Dead(Victim) == False;
Victim.IsZombie == True;
Event Ability != Button(Melee);
}
actions
{
If(Event Ability == Button(Secondary Fire));
Apply Impulse(Victim, Event Direction, 10 + (Event Damage - 40) * 0.125, To World, Cancel Contrary Motion);
Set Status(Victim, Event Player, Knocked Down, 1 + (Event Damage - 40) / 80);
Skip If(Event Damage / (Event Player.DamageDealt * Victim.DamageTaken) < 120, 1);
Apply Impulse(Victim, Direction Towards(Eye Position(Event Player), Eye Position(Victim)), 15, To World,
Cancel Contrary Motion XYZ);
Else;
Skip If(Event Player.IncendiaryAmmo <= 0, 1);
Set Status(Victim, Event Player, Burning, 2.500);
Apply Impulse(Victim, Direction Towards(Eye Position(Event Player), Eye Position(Victim) + Up * ((Y Component Of(Eye Position(
Event Player)) - Y Component Of(Eye Position(Victim))) / 1.500)), 5.333 + Vertical Angle Towards(Event Player, Eye Position(
Victim)) / 15 + Event Damage * (1 - 0.500 * Event Was Critical Hit) / 5, To World, Cancel Contrary Motion);
}
}
rule("Tracer Full Blink")
{
event
{
Ongoing - Each Player;
All;
Tracer;
}
conditions
{
Ability Charge(Event Player, Button(Ability 1)) == 3;
}
actions
{
Set Move Speed(Event Player, 100);
Event Player.A1Rss = 100;
}
}
rule("Tracer 1 Blink Down")
{
event
{
Ongoing - Each Player;
All;
Tracer;
}
conditions
{
Ability Charge(Event Player, Button(Ability 1)) == 2;
}
actions
{
Set Move Speed(Event Player, 83.333);
Event Player.A1Rss = 233.333;
}
}
rule("Tracer 2 Blink Down")
{
event
{
Ongoing - Each Player;
All;
Tracer;
}
conditions
{
Ability Charge(Event Player, Button(Ability 1)) == 1;
}
actions
{
Set Move Speed(Event Player, 75);
Event Player.A1Rss = 366.667;
}
}
rule("Tracer All Blink Down")
{
event
{
Ongoing - Each Player;
All;
Tracer;
}
conditions
{
Ability Charge(Event Player, Button(Ability 1)) < 1;
}
actions
{
Set Move Speed(Event Player, 66.667);
Event Player.A1Rss = 500;
}
}
rule("Tracer Recall")
{
event
{
Ongoing - Each Player;
All;
Tracer;
}
conditions
{
Is Using Ability 2(Event Player) == True;
}
actions
{
Damage(Filtered Array(Players Within Radius(Event Player, 8.333, All Teams, Off), Current Array Element.IsZombie), Event Player,
20);
Wait Until(!Is Using Ability 2(Event Player), 1.248);
Damage(Filtered Array(Players Within Radius(Event Player, 7.500, All Teams, Off), Current Array Element.IsZombie), Event Player,
30);
}
}
rule("Tracer Last Hit")
{
event
{
Player Dealt Final Blow;
All;
Tracer;
}
conditions
{
(Array Contains(Global.ZombieHeroes, Hero Of(Victim)) && Ability Charge(Event Player, Button(Ability 1))
< 3 && Event Ability == Button(Melee)) == True;
}
actions
{
Set Ability Charge(Event Player, Button(Ability 1), 3);
}
}
rule("Tracer Damage Effects")
{
event
{
Player Dealt Damage;
All;
Tracer;
}
conditions
{
Is Dead(Victim) == False;
Victim.IsZombie == True;
(Event Ability == 0 && Event Damage < 10) == False;
}
actions
{
If(Event Ability == Button(Primary Fire));
Skip If(Event Player.IncendiaryAmmo <= 0, 1);
Set Status(Victim, Event Player, Burning, 2.500);
Skip If(Event Player.A1Rss <= 100, 1);
Damage(Victim, Event Player, (Event Player.A1Rss - 100) / 100);
Apply Impulse(Victim, Direction Towards(Eye Position(Event Player), Eye Position(Victim) + Up * ((Y Component Of(Eye Position(
Event Player)) - Y Component Of(Eye Position(Victim))) / 1.500)), 3 + Vertical Angle Towards(Event Player, Eye Position(
Victim)) / 30 + Event Damage * (1 - 0.400 * Event Was Critical Hit) / 3, To World, Cancel Contrary Motion);
Else If(Event Ability == 0);
Skip If(Event Damage > 25, 3);
Apply Impulse(Victim, Event Direction * -1 + Up * 0.200, Distance Between(Event Player, Victim) * 2.500, To World,
Cancel Contrary Motion);
Set Status(Victim, Event Player, Rooted, 1);
Abort;
Apply Impulse(Victim, Event Direction + Up * 0.125, 5 + (10 - Distance Between(Event Player, Victim)) * 1.667, To World,
Cancel Contrary Motion);
Else If(Event Ability == Button(Melee) && Event Player.A1Rss > 100);
Set Status(Victim, Event Player, Stunned, 3 / (2 + Ability Charge(Event Player, Button(Ability 1))));
Skip If(Ability Charge(Event Player, Button(Ability 1)) >= 3, 1);
Set Ability Charge(Event Player, Button(Ability 1), Ability Charge(Event Player, Button(Ability 1)) + 1);
Else If(Event Ability == Button(Ultimate));
If(Event Damage > 10);
Set Status(Victim, Event Player, Knocked Down, 1 + Event Damage / 210);
Apply Impulse(Victim, Event Direction + Up * 0.125, (Event Damage - (Event Damage >= 350) * (Event Damage - 350)) / 21, To World,
Cancel Contrary Motion);
Else If(Ability Cooldown(Victim, Button(Ability 1)) < 1.024);
Set Ability Cooldown(Victim, Button(Ability 1), 1.024);
}
}
rule("Tracer Recall Initial Cooldown")
{
event
{
Ongoing - Each Player;
All;
Tracer;
}
conditions
{
Has Spawned(Event Player) == True;
}
actions
{
Set Ability Cooldown(Event Player, Button(Ability 2), 3.120);
}
}
rule("Widowmaker Ult Activates")
{
event
{
Ongoing - Each Player;
All;
Widowmaker;
}
conditions
{
Is Using Ultimate(Event Player) == True;
}
actions
{
Set Damage Dealt(Event Player, 400 / 3);
Event Player.DamageDealt = 4 / 3;
}
}
rule("Widowmaker Ult Deactivates")
{
event
{
Ongoing - Each Player;
All;
Widowmaker;
}
conditions
{
Is Using Ultimate(Event Player) == False;
}
actions
{
Set Damage Dealt(Event Player, 100);
Event Player.DamageDealt = 1;
}
}
rule("Widowmaker Damage Effects")
{
event
{
Player Dealt Damage;
All;
Widowmaker;
}
conditions
{
Is Dead(Victim) == False;
Victim.IsZombie == True;
}
actions
{
Skip If(Victim.SlowDuration >= 0.200, 2);
Start Forcing Throttle(Victim, 0, 0.666, 0, 0.666, 0, 0.666);
Victim.SlowDuration = 0.200;
If(Event Ability == Button(Primary Fire));
Skip If(Event Player.IncendiaryAmmo <= 0, 1);
Set Status(Victim, Event Player, Burning, 2.500);
Apply Impulse(Victim, Direction Towards(Eye Position(Event Player), Eye Position(Victim) + Up * ((Y Component Of(Eye Position(
Event Player)) - Y Component Of(Eye Position(Victim))) / 1.500)), 12 + Vertical Angle Towards(Event Player, Eye Position(
Victim)) / 7.500 + Event Damage * (1 - 0.500 * Event Was Critical Hit) / 15, To World, Cancel Contrary Motion);
Abort If(Is Firing Secondary(Event Player) == False);
Apply Impulse(Victim, Direction Towards(Eye Position(Event Player), Eye Position(Victim) + Up * ((Y Component Of(Eye Position(
Event Player)) - Y Component Of(Eye Position(Victim))) / 1.500)), 20 + Vertical Angle Towards(Event Player, Eye Position(
Victim)) / 9 + Event Damage * (1 - 0.500 * Event Was Critical Hit) / 20, To World, Cancel Contrary Motion);
Skip If(Event Was Critical Hit == False, 1);
Set Status(Victim, Event Player, Knocked Down, Event Damage / 250 - 0.200);
Else If(Event Ability == Button(Melee));
Apply Impulse(Victim, Direction Towards(Eye Position(Event Player), Eye Position(Victim) + Up * ((Y Component Of(Eye Position(
Event Player)) - Y Component Of(Eye Position(Victim))) / 1.500)), 2.250 + (Horizontal Speed Of(Event Player) > 5.500) * (
Horizontal Speed Of(Event Player) - 2.250), To World, Cancel Contrary Motion);
Set Status(Victim, Event Player, Stunned, (Speed Of(Event Player) - 5.500) / (14.500 / 1.600));
}
}
rule("Reaper Wraith Starts")
{
event
{
Ongoing - Each Player;
All;
Reaper;
}
conditions
{
Is Using Ability 1(Event Player) == True;
}
actions
{
Event Player.SlowDuration = 0;
Set Move Speed(Event Player, (101.667 + 10 / 3 * Event Player.ZombieLvl) / 1.150 * 0.666);
Abort If(Event Player.ZombieLvl > 3);
Wait(1.500 + (Event Player.ZombieLvl == 3) * 0.750, Abort When False);
Press Button(Event Player, Button(Ability 1));
}
}
rule("Reaper Wraith Ends")
{
event
{
Ongoing - Each Player;
All;
Reaper;
}
conditions
{
Is Using Ability 1(Event Player) == False;
}
actions
{
Set Move Speed(Event Player, (101.667 + 10 / 3 * Event Player.ZombieLvl) / 1.150);
}
}
rule("Reaper Ult Speed Up")
{
event
{
Ongoing - Each Player;
All;
Reaper;
}
conditions
{
Is Using Ultimate(Event Player) == True;
}
actions
{
Set Move Speed(Event Player, 200);
}
}
rule("Reaper Ult Speed Reset")
{
event
{
Ongoing - Each Player;
All;
Reaper;
}
conditions
{
Is Using Ultimate(Event Player) == False;
}
actions
{
Set Move Speed(Event Player, 100);
}
}
rule("Reaper Hover")
{
event
{
Ongoing - Each Player;
All;
Reaper;
}
conditions
{
Event Player.ZombieLvl >= 3;
Is Using Ability 1(Event Player) == True;
Is Button Held(Event Player, Button(Jump)) == True;
Is On Ground(Event Player) != True;
Speed Of In Direction(Event Player, Up) < 0;
}
actions
{
Apply Impulse(Event Player, Up, 0.250 + Speed Of In Direction(Event Player, Down) * 0.025, To Player, Incorporate Contrary Motion);
Wait(0.016, Ignore Condition);
Skip If(Speed Of In Direction(Event Player, Down) > 1 || Speed Of In Direction(Event Player, Up) > 0.300, 1);
Apply Impulse(Event Player, Up, 0.300 + (Speed Of In Direction(Event Player, Down) > 0) * Speed Of In Direction(Event Player,
Down), To Player, Incorporate Contrary Motion);
Loop If Condition Is True;
}
}
rule("Reaper Jump Boost")
{
event
{
Ongoing - Each Player;
All;
Reaper;
}
conditions
{
Event Player.ZombieLvl >= 2;
Is Jumping(Event Player) == True;
Is Using Ability 1(Event Player) == True;
}
actions
{
If(Speed Of In Direction(Event Player, Up) > 0.300 && Is Using Ability 1(Event Player) && !Is On Ground(Event Player));
Apply Impulse(Event Player, Up, 0.165, To Player, Incorporate Contrary Motion);
Wait(0.016, Ignore Condition);
Loop;
}
}
rule("Reaper Damage Effects")
{
event
{
Player Dealt Damage;
All;
Reaper;
}
conditions
{
Is Dead(Victim) == False;
Victim.IsZombie == 0;
}
actions
{
Skip If(Event Player.A3Rss >= 5, 1);
Event Player.A3Rss = 5;
If(Event Ability == Button(Melee) && Is In Line of Sight(Eye Position(Event Player), (Eye Position(Victim) + Position Of(Victim))
/ 2, All Barriers Block LOS) && !(Hero Of(Victim) == Hero(Baptiste) && Has Status(Victim, Unkillable)));
Skip If(Has Status(Event Player, Hacked), 8);
Skip If(Victim.ZappingArmor == 1, 2);
Kill(Victim, Event Player);
Abort;
Set Status(Event Player, Null, Stunned, 1.833);
Small Message(Event Player, Custom String("Zapped!"));
Victim.ZappingArmor = 0;
Small Message(Victim, Custom String("Zapping Armor Lost!"));
Abort;
Small Message(Event Player, Custom String("Infection denied by hack!"));
Else If(Event Ability == Button(Ultimate));
Apply Impulse(Victim, Direction Towards(Eye Position(Victim), Eye Position(Attacker) + Up * 0.300), Distance Between(Eye Position(
Victim), Eye Position(Attacker)) / 0.333, To World, Cancel Contrary Motion);
Set Status(Victim, Event Player, Rooted, 0.267);
}
}
rule("Moira Fade Starts")
{
event
{
Ongoing - Each Player;
All;
Moira;
}
conditions
{
Is Using Ability 1(Event Player) == True;
}
actions
{
Set Move Speed(Event Player, (101.667 + 10 / 3 * Event Player.ZombieLvl) / 1.150 * 0.432);
Skip If(Event Player.ZombieLvl < 2, 1);
Set Gravity(Event Player, 33.333);
Wait(0.168, Ignore Condition);
Play Effect(Filtered Array(All Players(All Teams), Current Array Element != Event Player), Bad Explosion, Color(Black), (
Eye Position(Event Player) + Position Of(Event Player)) / 2, 0.500);
Set Move Speed(Event Player, (101.667 + 10 / 3 * Event Player.ZombieLvl) / 1.150 * 0.416);
Wait(0.184, Ignore Condition);
Play Effect(Filtered Array(All Players(All Teams), Current Array Element != Event Player), Bad Explosion, Color(Black), (
Eye Position(Event Player) + Position Of(Event Player)) / 2, 0.500);
Set Move Speed(Event Player, (101.667 + 10 / 3 * Event Player.ZombieLvl) / 1.150 * 0.400);
Wait(0.184, Ignore Condition);
Play Effect(Filtered Array(All Players(All Teams), Current Array Element != Event Player), Bad Explosion, Color(Black), (
Eye Position(Event Player) + Position Of(Event Player)) / 2, 0.750);
Set Move Speed(Event Player, (101.667 + 10 / 3 * Event Player.ZombieLvl) / 1.150 * 0.384);
Wait(0.200, Ignore Condition);
Set Gravity(Event Player, 100);
Set Move Speed(Event Player, (101.667 + 10 / 3 * Event Player.ZombieLvl) / 1.150);
Event Player.SlowDuration = 0;
}
}
rule("Moira Damage Effects")
{
event
{
Player Dealt Damage;
All;
Moira;
}
conditions
{
Is Dead(Victim) == False;
Victim.IsZombie == 0;
}
actions
{
Skip If(Event Player.A3Rss >= 5, 1);
Event Player.A3Rss = 5;
Skip If(Event Ability != Button(Ability 2) || (Hero Of(Victim) == Hero(Sigma) && Is Using Ability 1(Victim)
&& Angle Between Vectors(Facing Direction Of(Victim), Event Direction) > 90), 2);
Set Status(Victim, Event Player, Rooted, 0.096);
&& Angle Between Vectors(Facing Direction Of(Victim), Event Direction) > 90), 1);
Set Status(Victim, Event Player, Hacked, 0.200);
If(Event Ability == Button(Melee) && Is In Line of Sight(Eye Position(Event Player), (Eye Position(Victim) + Position Of(Victim))
/ 2, All Barriers Block LOS) && !(Hero Of(Victim) == Hero(Baptiste) && Has Status(Victim, Unkillable)));
Skip If(Has Status(Event Player, Hacked) == True, 8);
Skip If(Victim.ZappingArmor == 1, 2);
Kill(Victim, Event Player);
Abort;
Set Status(Event Player, Null, Stunned, 1.833);
Small Message(Event Player, Custom String("Zapped!"));
Victim.ZappingArmor = 0;
Small Message(Victim, Custom String("Zapping Armor Lost!"));
Abort;
Small Message(Event Player, Custom String("Infection denied by hack!"));
Else If(Event Ability == Button(Ultimate));
Apply Impulse(Victim, Direction Towards(Eye Position(Victim), Eye Position(Attacker) + Facing Direction Of(Attacker)
* 2 + Up * 0.250), 3.333 + Distance Between(Eye Position(Victim), Eye Position(Attacker) + Facing Direction Of(Attacker)
* 2 + Up * 0.250) / 0.800, To World, Cancel Contrary Motion);
}
}
rule("Player In Assembly")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Assembling Heroes == True;
}
actions
{
Disable Built-In Game Mode Respawning(Event Player);
Event Player.SlowDuration = 1;
Event Player.PromptCount = 0;
Event Player.ZombieLvl = 0;
Event Player.Mutagen = 0;
Event Player.MutagenCap = 0;
Event Player.IsZombie = 0;
Set Ability 2 Enabled(Event Player, True);
Set Healing Dealt(Event Player, 100);
Set Move Speed(Event Player, 100);
Set Max Health(Event Player, 100);
Stop Forcing Player Outlines(Event Player, All Players(All Teams));
Stop Modifying Hero Voice Lines(Event Player);
Destroy Icon(Event Player.Icons[0]);
Destroy Icon(Event Player.Icons[1]);
Destroy Effect(Event Player.Effects);
Destroy Effect(Event Player.A1Rss);
}
}
rule("Player Spawning")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Game In Progress == True;
Has Spawned(Event Player) == True;
}
actions
{
Small Message(Event Player, String("Round {0}", Global.RoundNumber));
Skip If((Array Contains(Global.ZombieHeroes, Hero Of(Event Player)) && Is Using Ability 1(Event Player)) || (Hero Of(Event Player)
== Hero(Baptiste) && Is Button Held(Event Player, Button(Secondary Fire))), 1);
Set Move Speed(Event Player, 100);
Skip If(Hero Of(Event Player) != Hero(Brigitte), 1);
Set Ability 2 Enabled(Event Player, False);
Wait(3.125, Ignore Condition);
Abort If(Event Player.IsZombie == True);
Small Message(Event Player, Custom String("Survivor Tips: Avoid Reaper/Moira's melee attacks,"));
Preload Hero(Event Player, Global.ZombieHeroes);
Wait(3, Ignore Condition);
Abort If(Event Player.IsZombie == True);
Small Message(Event Player, Custom String("Use your weapons and abilities to keep them away!"));
}
}
rule("Player Coming Alive")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Alive(Event Player) == True;
Has Spawned(Event Player) == True;
}
actions
{
Destroy Effect(Event Player.Effects);
Destroy Effect(Event Player.A1Rss);
Destroy Icon(Event Player.Icons[2]);
Destroy Icon(Event Player.Icons[4]);
Event Player.ZappingArmor = 0;
Stop Chasing Player Variable(Event Player, IncendiaryAmmo);
Event Player.IncendiaryAmmo = 0;
Stop Chasing Player Variable(Event Player, RespawnTime);
Event Player.RespawnTime = 0;
Stop Chasing Player Variable(Event Player, A1Rss);
Event Player.A1Rss = 100;
Stop Chasing Player Variable(Event Player, A2Rss);
Event Player.A2Rss = 100;
Stop Chasing Player Variable(Event Player, A3Rss);
Event Player.A3Rss = 100;
Event Player.DamageDealt = 1;
Set Damage Dealt(Event Player, 100);
Event Player.DamageTaken = 1;
Set Damage Received(Event Player, 100);
Event Player.SlowDuration = 0;
Set Aim Speed(Event Player, 100);
Set Projectile Speed(Event Player, (Hero Of(Event Player) != Hero(Moira)) * 100 + (Hero Of(Event Player) == Hero(Moira))
* 0.241 * (101.667 + 10 / 3 * Event Player.ZombieLvl));
Start Scaling Player(Event Player, 1 + (Hero Of(Event Player) == Hero(Sigma)) * -0.167, False);
Wait(0.051 + Slot Of(Event Player) * 0.001, Ignore Condition);
Event Player.SupposedHealth = Health(Event Player);
If(!Array Contains(Global.ZombieHeroes, Hero Of(Event Player)));
If(Event Player.IsZombie != True);
Event Player.CustomSpawnOnHold = 0;
Start Forcing Player Outlines(Event Player, All Players(All Teams), True, Color(Aqua), Default);
Create Effect(Filtered Array(All Players(All Teams), Current Array Element.IsZombie == True), Bad Aura, Color(Blue), Event Player,
0.400, Visible To Position and Radius);
Event Player.Effects[0] = Last Created Entity;
Event Player.Effects = Last Created Entity;
Stop Holding Button(Event Player, Button(Melee));
Else;
Create Effect(Filtered Array(All Players(All Teams), Current Array Element.IsZombie == 0), Bad Aura, Color(Red), Event Player,
0.400, Visible To Position and Radius);
Event Player.Effects[0] = Last Created Entity;
Event Player.Effects = Last Created Entity;
Create Icon(Filtered Array(All Players(All Teams), (Current Array Element.IsZombie == 0 && Is In Line of Sight(Eye Position(
Event Player), Eye Position(Current Array Element), Barriers Do Not Block LOS) && Distance Between(Position Of(Event Player),
Position Of(Current Array Element)) <= 13 && Is In View Angle(Current Array Element, Event Player, 55) == False) == True),
Event Player, Skull, Visible To and Position, Color(Red), True);
Event Player.Icons[2] = Last Created Entity;
}
}
rule("Player to Custom Spawn")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Alive(Event Player) == True;
Has Spawned(Event Player) == True;
Index Of Array Value(Global.CustomSpawns, Last Of(Global.CustomSpawns)) >= 1;
Event Player.CustomSpawnOnHold == 0;
}
actions
{
If(Event Player.IsZombie == True);
Global.CSpawnsFromHunters[0] = Distance Between(Global.CustomSpawns[0], Position Of(First Of(Sorted Array(Filtered Array(
All Players(All Teams), Current Array Element.IsZombie == 0), Distance Between(Current Array Element,
Global.CustomSpawns[0])))));
Global.CSpawnsFromHunters[1] = Distance Between(Global.CustomSpawns[1], Position Of(First Of(Sorted Array(Filtered Array(
All Players(All Teams), Current Array Element.IsZombie == 0), Distance Between(Current Array Element,
Global.CustomSpawns[1])))));
Global.CSpawnsFromHunters[2] = Distance Between(Global.CustomSpawns[2], Position Of(First Of(Sorted Array(Filtered Array(
All Players(All Teams), Current Array Element.IsZombie == 0), Distance Between(Current Array Element,
Global.CustomSpawns[2])))));
Global.CSpawnsFromHunters[3] = Distance Between(Global.CustomSpawns[3], Position Of(First Of(Sorted Array(Filtered Array(
All Players(All Teams), Current Array Element.IsZombie == 0), Distance Between(Current Array Element,
Global.CustomSpawns[3])))));
Global.CSpawnsFromHunters[4] = Distance Between(Global.CustomSpawns[4], Position Of(First Of(Sorted Array(Filtered Array(
All Players(All Teams), Current Array Element.IsZombie == 0), Distance Between(Current Array Element,
Global.CustomSpawns[4])))));
Global.CSpawnsFromHunters[5] = Distance Between(Global.CustomSpawns[5], Position Of(First Of(Sorted Array(Filtered Array(
All Players(All Teams), Current Array Element.IsZombie == 0), Distance Between(Current Array Element,
Global.CustomSpawns[5])))));
Global.CSpawnsFromHunters[6] = Distance Between(Global.CustomSpawns[6], Position Of(First Of(Sorted Array(Filtered Array(
All Players(All Teams), Current Array Element.IsZombie == 0), Distance Between(Current Array Element,
Global.CustomSpawns[6])))));
Global.CSpawnsFromHunters[7] = Distance Between(Global.CustomSpawns[7], Position Of(First Of(Sorted Array(Filtered Array(
All Players(All Teams), Current Array Element.IsZombie == 0), Distance Between(Current Array Element,
Global.CustomSpawns[7])))));
Teleport(Event Player, Global.CustomSpawns[Index Of Array Value(Global.CSpawnsFromHunters, Sorted Array(Global.CSpawnsFromHunters,
Current Array Element)[Random Value In Array(Array(3, 4, 5))])]);
Current Array Element)[Random Value In Array(Array(4, 5, 6))])]);
Event Player.CustomSpawnOnHold = True;
Else If(!Is Dummy Bot(Event Player));
Teleport(Event Player, Global.CustomSpawns[Slot Of(Event Player)]);
Event Player.CustomSpawnOnHold = True;
}
}
rule("Player After First Contact")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Game In Progress == True;
Match Time <= 135.950;
Is Alive(Event Player) == True;
Array Contains(Global.ZombieHeroes, Hero Of(Event Player)) == False;
}
actions
{
Skip If(Has Spawned(Event Player) == False, 3);
Wait(0.050, Abort When False);
Big Message(Event Player, Custom String("Survive!"));
Abort;
Set Player Allowed Heroes(Event Player, Global.ZombieHeroes);
Event Player.CustomSpawnOnHold = 0;
}
}
rule("Player Dealt Damage")
{
event
{
Player Dealt Damage;
All;
All;
}
conditions
{
Is Dead(Victim) == False;
}
actions
{
Victim.SupposedHealth = Health(Victim) + Event Damage * (Victim.IsZombie == 0);
Skip If(Attacker.IsZombie == True, 5);
Skip If(Victim.IsZombie != True, 3);
Set Environment Credit Player(Victim, Event Player);
Skip If(Victim.A3Rss >= 5 && Victim.A3Rss <= 9, 1);
Victim.A3Rss = 5;
Skip If(Attacker == Victim || Attacker.IsZombie != Victim.IsZombie || (Hero Of(Attacker) == Hero(Ana) && Event Ability == Button(
Ability 2)), 2);
Heal(Victim, Null, Event Damage);
Victim.SupposedHealth = Health(Victim);
Abort If(Attacker != Victim);
Damage(Victim, Null, Event Damage * 90);
Victim.SupposedHealth = Health(Victim);
}
}
rule("Player Died")
{
event
{
Player Died;
All;
All;
}
conditions
{
Match Time <= 136.500;
Is Game In Progress == True;
}
actions
{
Destroy Effect(Event Player.Effects[0]);
Destroy Effect(Event Player.Effects[1]);
Destroy Icon(Event Player.Icons[2]);
Destroy Icon(Event Player.Icons[3]);
If(Event Player.IsZombie == True);
Event Player.CustomSpawnOnHold = 0;
Set Ultimate Charge(Event Player, 0);
Event Player.RespawnTime = 6 + (Event Was Critical Hit || (Hero Of(Attacker) == Hero(Ana) && Event Ability == 0)) * 2;
Chase Player Variable At Rate(Event Player, RespawnTime, 0, 1, Destination and Rate);
Skip If(Hero Of(Attacker) == Hero(Ana) && Event Ability == 0, 3);
Abort If(Event Was Critical Hit == False);
Small Message(Attacker, Custom String("Headshot! +1"));
Small Message(Event Player, Custom String("Headshotted!"));
Modify Player Score(Attacker, 1);
Abort If(Event Player.Mutagen < 1);
Event Player.Mutagen -= 1;
Wait(3, Abort When False);
Small Message(Event Player, Custom String("Mutagen lost!"));
Abort;
Else If(Attacker == Victim || Array Contains(All Players(All Teams), Attacker) == False);
Wait(0.125, Abort When False);
Abort If(Array Contains(Global.ZombieHeroes, Hero Of(Event Player)) == True);
Small Message(Event Player, Custom String("Respawning as a zombie..."));
Wait(3.208, Abort When False);
Modify Player Score(Event Player, -1);
Skip If(Array Contains(Global.MaleSurvivors, Hero Of(Event Player)) == False, 2);
Start Forcing Player To Be Hero(Event Player, Hero(Reaper));
Abort;
Start Forcing Player To Be Hero(Event Player, Hero(Moira));
Else If(Attacker.IsZombie && !Victim.IsZombie && Array Contains(All Players(All Teams), Attacker));
Wait(0.048, Abort When False);
Abort If(Match Time == 0);
Modify Player Score(Attacker, 1);
Skip If(Array Contains(Global.MaleSurvivors, Hero Of(Victim)) == False, 1);
Start Forcing Player To Be Hero(Victim, Hero(Reaper));
Skip If(Array Contains(Global.FemaleSurvivors, Hero Of(Victim)) == False, 1);
Start Forcing Player To Be Hero(Victim, Hero(Moira));
Skip If((Attacker.MutagenCap - Attacker.Mutagen < 1) == True, 6);
Skip If(Filtered Array(All Players(All Teams), Current Array Element.ZombieLvl == 4) != Empty Array && Attacker.Mutagen >= 2, 6);
Skip If(Attacker.MutagenCap - Attacker.Mutagen > 1, 2);
Small Message(Attacker, Custom String("Leveled up!"));
Skip(1);
Small Message(Attacker, Custom String("Mutagen gained!"));
Attacker.Mutagen += 1;
Abort;
Small Message(Attacker, Custom String("Mutation suppressed by current alpha!"));
}
}
rule("Player Elimination")
{
event
{
Player Earned Elimination;
All;
All;
}
conditions
{
Match Time > 0;
Attacker.IsZombie != Victim.IsZombie;
Victim.IsZombie == True;
}
actions
{
Modify Player Score(Event Player, 1);
}
}
rule("Player Team Kill")
{
event
{
Player Dealt Final Blow;
All;
All;
}
conditions
{
Match Time > 0;
(!Event Player.IsZombie && !Victim.IsZombie) == True;
}
actions
{
Modify Player Score(Event Player, -5);
Small Message(Event Player, Custom String("Ally slain! -5"));
Victim.CustomSpawnOnHold = 0;
Victim.RespawnTime = 6 + Event Was Critical Hit * 2;
Chase Player Variable At Rate(Victim, RespawnTime, 0, 1, Destination and Rate);
}
}
rule("Player Respawn")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dead(Event Player) == True;
Event Player.RespawnTime > 0;
Event Player.RespawnTime <= 0.500;
}
actions
{
Respawn(Event Player);
}
}
rule("Player Slow Duration Starts")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.SlowDuration > 0;
}
actions
{
Chase Player Variable At Rate(Event Player, SlowDuration, 0, 1, Destination and Rate);
}
}
rule("Player Slow Duration Ends")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.SlowDuration == 0;
}
actions
{
Stop Chasing Player Variable(Event Player, SlowDuration);
Stop Forcing Throttle(Event Player);
}
}
rule("Player Joined Match")
{
event
{
Player Joined Match;
All;
All;
}
actions
{
Event Player.ScriptedAssists = Empty Array;
}
}
rule("Player Left Match")
{
event
{
Player Left Match;
All;
All;
}
actions
{
Destroy Effect(Event Player.Effects[0]);
Destroy Effect(Event Player.Effects);
Destroy Icon(Event Player.Icons[0]);
Destroy Icon(Event Player.Icons[1]);
}
}
rule("Zombie First Spawn")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Hero Of(Event Player) == Hero(Reaper) || Hero Of(Event Player) == Hero(Moira)) == True;
}
actions
{
Allow Button(Event Player, Button(Melee));
Stop Forcing Player Outlines(Event Player, All Players(All Teams));
Destroy Icon(Event Player.Icons[0]);
Destroy Icon(Event Player.Icons[1]);
Event Player.ZombieLvl += 1;
Event Player.IsZombie = True;
Event Player.DamageDealt = 1;
Event Player.CustomSpawnOnHold = True;
Set Damage Dealt(Event Player, 100);
Set Healing Dealt(Event Player, 0.001);
Stop Forcing Throttle(Event Player);
Set Aim Speed(Event Player, 100);
Start Modifying Hero Voice Lines(Event Player, 0.700 - (Hero Of(Event Player) == Hero(Moira)) * 0.150, True);
Wait(3, Ignore Condition);
Small Message(Event Player, Custom String("Zombie Tips: Infect survivors with your melee attacks,"));
Wait(3, Ignore Condition);
Small Message(Event Player, Custom String("Earn mutagens to level up and become stronger!"));
}
}
rule("Zombie Mutation")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == True;
Event Player.Mutagen == Event Player.MutagenCap;
Event Player.MutagenCap != 0;
Event Player.MutagenCap != Null;
}
actions
{
Skip If(Event Player.ZombieLvl >= 3, 1);
Event Player.Mutagen = 0;
Event Player.ZombieLvl += !(Event Player.ZombieLvl == 4);
Event Player.ZombieLvl += 1;
}
}
rule("Zombie Level 1")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == True;
Event Player.ZombieLvl == 1;
}
actions
{
Set Max Health(Event Player, 50);
Set Max Health(Event Player, 40);
Set Move Speed(Event Player, 105 / 1.150);
Set Ability 2 Enabled(Event Player, False);
Event Player.MutagenCap = 1;
}
}
rule("Zombie Level 2")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == True;
Event Player.ZombieLvl == 2;
}
actions
{
Set Max Health(Event Player, 62.500);
Set Max Health(Event Player, 60);
Set Move Speed(Event Player, (101.667 + 10 / 3 * Event Player.ZombieLvl) / 1.150 * (1 - Is Using Ability 1(Event Player) * 0.334));
Set Ability 2 Enabled(Event Player, False);
Event Player.MutagenCap = 2;
Skip If(Health(Event Player) == 500, 2);
Skip If(Health(Event Player) == 600, 2);
Wait(0.016, Ignore Condition);
Heal(Event Player, Null, Health(Event Player) * 0.250);
Heal(Event Player, Null, Health(Event Player) * 0.500);
}
}
rule("Zombie Level 3")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == True;
Event Player.ZombieLvl == 3;
}
actions
{
Set Max Health(Event Player, 75);
Set Max Health(Event Player, 80);
Set Move Speed(Event Player, (101.667 + 10 / 3 * Event Player.ZombieLvl) / 1.150 * (1 - Is Using Ability 1(Event Player) * 0.334));
Set Projectile Speed(Event Player, (Hero Of(Event Player) == Hero(Moira)) * 0.241 * (101.667 + 10 / 3 * Event Player.ZombieLvl));
Set Ability 2 Enabled(Event Player, True);
Event Player.MutagenCap = 3;
Skip If(Health(Event Player) == 600, 2);
Skip If(Health(Event Player) == 800, 2);
Wait(0.016, Ignore Condition);
Heal(Event Player, Null, Health(Event Player) * 0.200);
Heal(Event Player, Null, Health(Event Player) * (1 / 3));
}
}
rule("Zombie Alpha")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == True;
Event Player.ZombieLvl == 4;
}
actions
{
Start Forcing Player Outlines(Event Player, All Players(All Teams), True, Color(Orange), Always);
Set Max Health(Event Player, 100);
Set Move Speed(Event Player, (101.667 + 10 / 3 * Event Player.ZombieLvl) / 1.150 * (1 - Is Using Ability 1(Event Player) * 0.334));
Set Projectile Speed(Event Player, (Hero Of(Event Player) == Hero(Moira)) * 0.241 * (101.667 + 10 / 3 * Event Player.ZombieLvl));
Set Ability 2 Enabled(Event Player, True);
Event Player.MutagenCap = Custom String("-");
Event Player.Mutagen = Custom String("-");
Skip If(Health(Event Player) == 800, 2);
Event Player.Mutagen = Null;
Event Player.MutagenCap = Null;
Skip If(Health(Event Player) == 1000, 2);
Wait(0.016, Ignore Condition);
Heal(Event Player, Null, Health(Event Player) * (1 / 3));
Skip If(Count Of(Filtered Array(All Players(All Teams), Array Contains(Global.ZombieHeroes, Hero Of(Current Array Element)))) == 1,
1);
Heal(Event Player, Null, Health(Event Player) * 0.250);
Set Ultimate Charge(Event Player, 50);
Big Message(All Players(All Teams), String("{0} {1}", Event Player, Custom String(
"has become the zombie alpha, position revealed!")));
Wait Until(Is Alive(Event Player), 1);
Wait(0.100 + Slot Of(Event Player) * 0.005, Abort When False);
Destroy HUD Text(Event Player.HudTexts[0]);
Destroy HUD Text(Event Player.HudTexts[1]);
Wait(0.080, Abort When False);
Create HUD Text(Event Player, String("{0}: {1}", Custom String("Zombie Lvl"), Custom String("Alpha")), Null, Null, Right, 0, Color(
Orange), Color(White), Color(White), Visible To and String, Default Visibility);
Event Player.HudTexts[0] = Last Text ID;
Wait(0.080, Abort When False);
Create HUD Text(Event Player, Null, Null, String("{0}: {1}", Custom String("Mutagen"), Custom String("Maxed")), Right, 0.500,
Color(White), Color(White), Color(Orange), Visible To and String, Default Visibility);
Event Player.HudTexts[1] = Last Text ID;
}
}
rule("Zombie Ignited")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == True;
Has Status(Event Player, Burning) == True;
}
actions
{
Event Player.DamageTaken = 1.200;
Set Damage Received(Event Player, 120);
Start Damage Over Time(Event Player, Null, 9999, Max Health(Event Player) / 24);
Event Player.DoTIDs[0] = Last Damage Over Time ID;
}
}
rule("Zombie Extinguished")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Has Status(Event Player, Burning) == False;
Event Player.IsZombie == True;
}
actions
{
Event Player.DamageTaken = 1;
Set Damage Received(Event Player, 100);
Stop Damage Over Time(Event Player.DoTIDs[0]);
}
}
rule("Zombie Primary Hold")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == True;
Is Button Held(Event Player, Button(Primary Fire)) == True;
}
actions
{
Start Holding Button(Event Player, Button(Melee));
}
}
rule("Zombie Primary Release")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == True;
Is Button Held(Event Player, Button(Primary Fire)) == False;
}
actions
{
Stop Holding Button(Event Player, Button(Melee));
}
}
rule("Zombie Recovery Countdown")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == True;
Event Player.A3Rss != 0;
Is Moving(Event Player) == False;
Is Alive(Event Player) == True;
}
actions
{
Chase Player Variable At Rate(Event Player, A3Rss, 0, 1, Destination and Rate);
}
}
rule("Zombie Recovery Heal")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == True;
Event Player.A3Rss == 0;
Health(Event Player) < Max Health(Event Player);
Is Alive(Event Player) == True;
}
actions
{
Heal(Event Player, Null, (Max Health(Event Player) - Health(Event Player)) / 12);
Event Player.SupposedHealth = Health(Event Player);
Wait(2.500 / (2 + Event Player.ZombieLvl * 0.250), Abort When False);
Loop;
}
}
rule("Zombie Healing Abilities")
{
event
{
Player Dealt Healing;
All;
All;
}
conditions
{
Event Player.IsZombie == True;
(Hero Of(Event Player) == Hero(Reaper) && Is Using Ultimate(Event Player)) == False;
}
actions
{
Heal(Event Player, Null, 7.500 + (Hero Of(Event Player) == Hero(Reaper)) * 2.500 - Event Healing);
Event Player.SupposedHealth = Health(Event Player);
}
}
rule("Zombie Alpha Ult Regen")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == True;
Event Player.ZombieLvl >= 4;
Is Alive(Event Player) == True;
Ultimate Charge Percent(Event Player) < 100;
Is Using Ultimate(Event Player) == False;
}
actions
{
Set Ultimate Charge(Event Player, Ultimate Charge Percent(Event Player) + 5);
Wait(1, Abort When False);
Loop If Condition Is True;
}
}
rule("Per Survivor Tips")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == 0;
Has Spawned(Event Player) == True;
}
actions
{
Destroy HUD Text(Event Player.HudTexts[0]);
Destroy HUD Text(Event Player.HudTexts[1]);
Destroy HUD Text(Event Player.HudTexts[2]);
Destroy HUD Text(Event Player.HudTexts[3]);
Event Player.HudTexts = Empty Array;
Wait(0.100 + Slot Of(Event Player) * 0.005, Abort When False);
Create HUD Text(Event Player, Custom String("Survivor"), Null, Null, Right, 0, Color(Aqua), Color(White), Color(White),
Visible To and String, Default Visibility);
Event Player.HudTexts[0] = Last Text ID;
Wait(0.080, Abort When False);
Create HUD Text(Event Player, Null, Null, String("{0}: {1}", Custom String("Allies Alive"), Index Of Array Value(Filtered Array(
All Living Players(All Teams), (Has Spawned(Current Array Element) && Current Array Element.IsZombie == 0) == True), Last Of(
Filtered Array(All Living Players(All Teams), (Has Spawned(Current Array Element) && Current Array Element.IsZombie == 0)
== True)))), Right, 0.500, Color(White), Color(White), Color(Aqua), Visible To and String, Default Visibility);
Event Player.HudTexts[1] = Last Text ID;
}
}
rule("Per Zombie Tips")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == True;
Has Spawned(Event Player) == True;
}
actions
{
Destroy HUD Text(Event Player.HudTexts[0]);
Destroy HUD Text(Event Player.HudTexts[1]);
Destroy HUD Text(Event Player.HudTexts[2]);
Destroy HUD Text(Event Player.HudTexts[3]);
Event Player.HudTexts = Empty Array;
Wait(0.100 + Slot Of(Event Player) * 0.005, Abort When False);
Create HUD Text(Event Player, String("{0}: {1}", Custom String("Zombie Lvl"), Event Player.ZombieLvl), Null, Null, Right, 0, Color(
Orange), Color(White), Color(White), Visible To and String, Default Visibility);
Event Player.HudTexts[0] = Last Text ID;
Wait(0.080, Abort When False);
Create HUD Text(Event Player, Null, Null, String("{0}: {1}", Custom String("Mutagen"), String("{0} / {1}", Event Player.Mutagen,
Event Player.MutagenCap)), Right, 0.500, Color(White), Color(White), Color(Orange), Visible To and String, Default Visibility);
Event Player.HudTexts[1] = Last Text ID;
}
}
rule("Human Tagging")
rule("Human Pointing")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == 0;
Is Communicating(Event Player, Spray Up) == True;
Is Button Held(Event Player, Button(Interact)) == True;
Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), First Of(Sorted Array(
Filtered Array(All Living Players(All Teams), (Is In Line of Sight(Eye Position(Event Player), Current Array Element,
Barriers Do Not Block LOS) && Event Player.IsZombie != Current Array Element.IsZombie) == True), Angle Between Vectors(
Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Current Array Element))))))
> 5.833 + 54.167 / (1 + Distance Between(Eye Position(Event Player), First Of(Sorted Array(Filtered Array(All Living Players(
All Teams), (Is In Line of Sight(Eye Position(Event Player), Current Array Element, Barriers Do Not Block LOS)
&& Event Player.IsZombie != Current Array Element.IsZombie) == True), Angle Between Vectors(Facing Direction Of(Event Player),
Direction Towards(Eye Position(Event Player), Current Array Element))))));
}
actions
{
Destroy Icon(Event Player.Icons[1]);
Skip If(Filtered Array(Filtered Array(All Living Players(All Teams), Event Player.IsZombie != Current Array Element.IsZombie),
Is In Line of Sight(Eye Position(Event Player), Eye Position(Current Array Element), Barriers Do Not Block LOS)
&& Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Eye Position(
Current Array Element))) <= Arctangent In Degrees(Y Component Of(Eye Position(Event Player)) - Y Component Of(Position Of(
Event Player)), Distance Between(Eye Position(Event Player), Eye Position(Current Array Element)))) != Empty Array, 2);
Destroy Icon(Event Player.Icons[4]);
Create Icon(Filtered Array(All Players(All Teams), Event Player.IsZombie == Current Array Element.IsZombie), Ray Cast Hit Position(
Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(Event Player) * 200, All Living Players(
All Teams), Filtered Array(All Players(All Teams), Event Player.IsZombie == Current Array Element.IsZombie), False),
Ring Thick, Visible To, Color(Aqua), True);
Skip(3);
Destroy Icon(First Of(Sorted Array(Filtered Array(Filtered Array(All Living Players(All Teams),
Event Player.IsZombie != Current Array Element.IsZombie), Is In Line of Sight(Eye Position(Event Player), Eye Position(
Current Array Element), Barriers Do Not Block LOS)), Angle Between Vectors(Facing Direction Of(Event Player),
Direction Towards(Eye Position(Event Player), Eye Position(Current Array Element))))).Icons[4]);
Create Icon(Filtered Array(All Players(All Teams), Event Player.IsZombie == Current Array Element.IsZombie), Evaluate Once(
First Of(Sorted Array(Filtered Array(Filtered Array(All Living Players(All Teams),
Event Player.IsZombie != Current Array Element.IsZombie), Is In Line of Sight(Eye Position(Event Player), Eye Position(
Current Array Element), Barriers Do Not Block LOS)), Angle Between Vectors(Facing Direction Of(Event Player),
Direction Towards(Eye Position(Event Player), Eye Position(Current Array Element)))))), Exclamation Mark, Visible To, Color(
Aqua), True);
First Of(Sorted Array(Filtered Array(Filtered Array(All Living Players(All Teams),
Event Player.IsZombie != Current Array Element.IsZombie), Is In Line of Sight(Eye Position(Event Player), Eye Position(
Current Array Element), Barriers Do Not Block LOS)), Angle Between Vectors(Facing Direction Of(Event Player),
Direction Towards(Eye Position(Event Player), Eye Position(Current Array Element))))).Icons[4] = Last Created Entity;
Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(Event Player) * 200, All Players(All Teams),
Filtered Array(All Players(All Teams), Event Player.IsZombie == Current Array Element.IsZombie), False), Ring Thick,
Visible To, Color(Aqua), True);
Event Player.Icons[1] = Last Created Entity;
Wait(3.333, Restart When True);
Abort If(Event Player.IsZombie == True);
Destroy Icon(Event Player.Icons[1]);
}
}
rule("Zombie Tagging")
rule("Zombie Pointing")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == True;
Is Communicating(Event Player, Spray Up) == True;
Is Button Held(Event Player, Button(Interact)) == True;
Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), First Of(Sorted Array(
Filtered Array(All Living Players(All Teams), (Is In Line of Sight(Eye Position(Event Player), Current Array Element,
Barriers Do Not Block LOS) && Event Player.IsZombie != Current Array Element.IsZombie) == True), Angle Between Vectors(
Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Current Array Element))))))
> 5.833 + 54.167 / (1 + Distance Between(Eye Position(Event Player), First Of(Sorted Array(Filtered Array(All Living Players(
All Teams), (Is In Line of Sight(Eye Position(Event Player), Current Array Element, Barriers Do Not Block LOS)
&& Event Player.IsZombie != Current Array Element.IsZombie) == True), Angle Between Vectors(Facing Direction Of(Event Player),
Direction Towards(Eye Position(Event Player), Current Array Element))))));
}
actions
{
Destroy Icon(Event Player.Icons[1]);
Skip If(Filtered Array(Filtered Array(All Living Players(All Teams), !(Hero Of(Current Array Element) == Hero(Hanzo) && Has Status(
Current Array Element, Phased Out)) && Event Player.IsZombie != Current Array Element.IsZombie), Is In Line of Sight(
Eye Position(Event Player), Eye Position(Current Array Element), Barriers Do Not Block LOS) && Angle Between Vectors(
Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Eye Position(Current Array Element)))
<= Arctangent In Degrees(Y Component Of(Eye Position(Event Player)) - Y Component Of(Position Of(Event Player)),
Distance Between(Eye Position(Event Player), Eye Position(Current Array Element)))) != Empty Array, 2);
Destroy Icon(Event Player.Icons[4]);
Create Icon(Filtered Array(All Players(All Teams), Event Player.IsZombie == Current Array Element.IsZombie), Ray Cast Hit Position(
Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(Event Player) * 200, All Living Players(
All Teams), Filtered Array(All Players(All Teams), Event Player.IsZombie == Current Array Element.IsZombie), False),
Ring Thick, Visible To, Color(Orange), True);
Skip(3);
Destroy Icon(First Of(Sorted Array(Filtered Array(Filtered Array(All Living Players(All Teams), !(Hero Of(Current Array Element)
== Hero(Hanzo) && Has Status(Current Array Element, Phased Out)) && Event Player.IsZombie != Current Array Element.IsZombie),
Is In Line of Sight(Eye Position(Event Player), Eye Position(Current Array Element), Barriers Do Not Block LOS)),
Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Eye Position(
Current Array Element))))).Icons[4]);
Create Icon(Filtered Array(All Players(All Teams), Event Player.IsZombie == Current Array Element.IsZombie), Evaluate Once(
First Of(Sorted Array(Filtered Array(Filtered Array(All Living Players(All Teams), !(Hero Of(Current Array Element) == Hero(
Hanzo) && Has Status(Current Array Element, Phased Out)) && Event Player.IsZombie != Current Array Element.IsZombie),
Is In Line of Sight(Eye Position(Event Player), Eye Position(Current Array Element), Barriers Do Not Block LOS)),
Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Eye Position(
Current Array Element)))))), Flag, Visible To, Color(Orange), True);
First Of(Sorted Array(Filtered Array(Filtered Array(All Living Players(All Teams), !(Hero Of(Current Array Element) == Hero(Hanzo)
&& Has Status(Current Array Element, Phased Out)) && Event Player.IsZombie != Current Array Element.IsZombie),
Is In Line of Sight(Eye Position(Event Player), Eye Position(Current Array Element), Barriers Do Not Block LOS)),
Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Eye Position(
Current Array Element))))).Icons[4] = Last Created Entity;
Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(Event Player) * 200, All Players(All Teams),
Filtered Array(All Players(All Teams), Event Player.IsZombie == Current Array Element.IsZombie), False), Ring Thick,
Visible To, Color(Orange), True);
Event Player.Icons[1] = Last Created Entity;
Wait(3.333, Restart When True);
Abort If(Event Player.IsZombie == 0);
Destroy Icon(Event Player.Icons[1]);
}
}
rule("Human Tagging")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == 0;
Is Button Held(Event Player, Button(Interact)) == True;
Array Contains(All Players(All Teams), First Of(Filtered Array(Players in View Angle(Event Player, All Teams, 60), (Is Alive(
Current Array Element) && Is In Line of Sight(Eye Position(Event Player), Current Array Element, Barriers Do Not Block LOS)
&& Current Array Element.IsZombie) == True))) == True;
Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), First Of(Sorted Array(
Filtered Array(All Living Players(All Teams), (Is In Line of Sight(Eye Position(Event Player), Current Array Element,
Barriers Do Not Block LOS) && Event Player.IsZombie != Current Array Element.IsZombie) == True), Angle Between Vectors(
Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Current Array Element))))))
<= 5.833 + 54.167 / (1 + Distance Between(Eye Position(Event Player), First Of(Sorted Array(Filtered Array(All Living Players(
All Teams), Is In Line of Sight(Eye Position(Event Player), Current Array Element, Barriers Do Not Block LOS)
&& Event Player.IsZombie != Current Array Element.IsZombie), Angle Between Vectors(Facing Direction Of(Event Player),
Direction Towards(Eye Position(Event Player), Current Array Element))))));
}
actions
{
Destroy Icon(Event Player.Icons[1]);
Destroy Icon(Event Player.Icons[4]);
Destroy Icon(First Of(Sorted Array(Filtered Array(Players in View Angle(Event Player, All Teams, 60), Is Alive(
Current Array Element) && Is In Line of Sight(Eye Position(Event Player), Current Array Element, Barriers Do Not Block LOS)
&& Current Array Element.IsZombie), Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(
Event Player), Current Array Element)))).Icons[3]);
Create Icon(Filtered Array(All Players(All Teams), Event Player.IsZombie == Current Array Element.IsZombie), First Of(Sorted Array(
Filtered Array(Players in View Angle(Event Player, All Teams, 60), Is Alive(Current Array Element) && Is In Line of Sight(
Eye Position(Event Player), Current Array Element, Barriers Do Not Block LOS) && Current Array Element.IsZombie),
Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player),
Current Array Element)))), Exclamation Mark, Visible To, Color(Aqua), False);
First Of(Sorted Array(Filtered Array(Players in View Angle(Event Player, All Teams, 60), Is Alive(Current Array Element)
&& Is In Line of Sight(Eye Position(Event Player), Current Array Element, Barriers Do Not Block LOS)
&& Current Array Element.IsZombie), Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(
Event Player), Current Array Element)))).Icons[3] = Last Created Entity;
Event Player.Icons[4] = Last Created Entity;
Wait(3.333, Restart When True);
Abort If(Event Player.IsZombie == True);
Destroy Icon(Event Player.Icons[4]);
}
}
rule("Zombie Tagging")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == True;
Is Button Held(Event Player, Button(Interact)) == True;
Array Contains(All Players(All Teams), First Of(Filtered Array(Players in View Angle(Event Player, All Teams, 60), (Is Alive(
Current Array Element) && Is In Line of Sight(Eye Position(Event Player), Current Array Element, Barriers Do Not Block LOS)
&& Current Array Element.IsZombie == 0) == True))) == True;
Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), First Of(Sorted Array(
Filtered Array(All Living Players(All Teams), (Is In Line of Sight(Eye Position(Event Player), Current Array Element,
Barriers Do Not Block LOS) && Event Player.IsZombie != Current Array Element.IsZombie) == True), Angle Between Vectors(
Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Current Array Element))))))
<= 5.833 + 54.167 / (1 + Distance Between(Eye Position(Event Player), First Of(Sorted Array(Filtered Array(All Living Players(
All Teams), Is In Line of Sight(Eye Position(Event Player), Current Array Element, Barriers Do Not Block LOS)
&& Event Player.IsZombie != Current Array Element.IsZombie), Angle Between Vectors(Facing Direction Of(Event Player),
Direction Towards(Eye Position(Event Player), Current Array Element))))));
}
actions
{
Destroy Icon(Event Player.Icons[1]);
Destroy Icon(Event Player.Icons[4]);
Destroy Icon(First Of(Sorted Array(Filtered Array(Players in View Angle(Event Player, All Teams, 60), Is Alive(
Current Array Element) && Is In Line of Sight(Eye Position(Event Player), Current Array Element, Barriers Do Not Block LOS)
&& Current Array Element.IsZombie == 0), Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(
Eye Position(Event Player), Current Array Element)))).Icons[3]);
Create Icon(Filtered Array(All Players(All Teams), Event Player.IsZombie == Current Array Element.IsZombie), First Of(Sorted Array(
Filtered Array(Players in View Angle(Event Player, All Teams, 60), Is Alive(Current Array Element) && Is In Line of Sight(
Eye Position(Event Player), Current Array Element, Barriers Do Not Block LOS) && Current Array Element.IsZombie == 0),
Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player),
Current Array Element)))), Flag, Visible To, Color(Orange), True);
First Of(Sorted Array(Filtered Array(Players in View Angle(Event Player, All Teams, 60), Is Alive(Current Array Element)
&& Is In Line of Sight(Eye Position(Event Player), Current Array Element, Barriers Do Not Block LOS)
&& Current Array Element.IsZombie == 0), Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(
Eye Position(Event Player), Current Array Element)))).Icons[3] = Last Created Entity;
Event Player.Icons[4] = Last Created Entity;
Wait(3.333, Restart When True);
Abort If(Event Player.IsZombie == 0);
Destroy Icon(Event Player.Icons[4]);
}
}
rule("Human Grouping")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == 0;
Is Communicating(Event Player, Group Up) == True;
}
actions
{
Start Forcing Player Outlines(Event Player, All Players(All Teams), True, Color(Aqua), Default);
Destroy Icon(Event Player.Icons[0]);
Start Forcing Player Outlines(Event Player, Filtered Array(All Players(All Teams),
Event Player.IsZombie == Current Array Element.IsZombie), True, Color(Aqua), Always);
Create Icon(Filtered Array(All Players(All Teams), Event Player.IsZombie == Current Array Element.IsZombie), Event Player,
Arrow: Down, Visible To, Color(Aqua), True);
Event Player.Icons[0] = Last Created Entity;
Wait(3.333, Restart When True);
Abort If(Event Player.IsZombie == True);
Start Forcing Player Outlines(Event Player, All Players(All Teams), True, Color(Aqua), Default);
Destroy Icon(Event Player.Icons[0]);
}
}
rule("Zombie Grouping")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.IsZombie == True;
Is Communicating(Event Player, Group Up) == True;
}
actions
{
Destroy Icon(Event Player.Icons[0]);
Create Icon(Filtered Array(All Players(All Teams), Event Player.IsZombie == Current Array Element.IsZombie), Event Player,
Arrow: Down, Visible To, Color(Orange), True);
Skip If(Event Player.ZombieLvl == 4, 2);
Stop Forcing Player Outlines(Event Player, Filtered Array(All Players(All Teams),
Event Player.IsZombie == Current Array Element.IsZombie));
Start Forcing Player Outlines(Event Player, Filtered Array(All Players(All Teams),
Event Player.IsZombie == Current Array Element.IsZombie), True, Color(Orange), Always);
Event Player.Icons[0] = Last Created Entity;
Wait(3.333, Restart When True);
Abort If(Event Player.IsZombie == 0);
Skip If(Event Player.ZombieLvl == 4, 1);
Stop Forcing Player Outlines(Event Player, Filtered Array(All Players(All Teams),
Event Player.IsZombie == Current Array Element.IsZombie));
Destroy Icon(Event Player.Icons[0]);
}
}
rule("B.World Winter")
{
event
{
Ongoing - Global;
}
conditions
{
Current Map == Map(Blizzard World Winter);
Is Game In Progress == False;
}
actions
{
Global.PickupSpawns = Empty Array;
Modify Global Variable(PickupSpawns, Append To Array, Vector(-38.319, 0.447, 75.012));
Modify Global Variable(PickupSpawns, Append To Array, Vector(-54.510, 0.447, 110.335));
Modify Global Variable(PickupSpawns, Append To Array, Vector(-77.307, 5.716, 66.179));
}
}
rule("Chateau Guillard Halloween")
{
event
{
Ongoing - Global;
}
conditions
{
Current Map == Map(Château Guillard Halloween);
Is Game In Progress == False;
}
actions
{
Global.PickupSpawns = Empty Array;
Modify Global Variable(PickupSpawns, Append To Array, Vector(193.177, 9.842, 111.972));
Modify Global Variable(PickupSpawns, Append To Array, Vector(206.258, 9.841, 81.804));
Modify Global Variable(PickupSpawns, Append To Array, Vector(233.067, 2.842, 93.023));
Global.ZiplineStartPoints = Empty Array;
Global.ZiplineStartPoints[0] = Vector(206.265, 19.882, 85.356);
Global.ZiplineStartPoints[1] = Vector(206.254, 16.987, 72.036);
Global.ZiplineStartPoints[2] = Vector(206.246, 16.772, 66.677);
Global.ZiplineStartPoints[3] = Vector(212.079, 26.004, 109.824);
Global.ZiplineStartPoints[4] = Vector(182.175, 23.820, 112.663);
Global.ZiplineStartPoints[5] = Vector(167.267, 21, 119.713);
Global.ZiplineStartPoints[6] = Vector(161.897, 21, 117.609);
Global.ZiplineStartPoints[7] = Vector(159.598, 21, 111.978);
Global.ZiplineStartPoints[8] = Vector(163.468, 19.700, 80.961);
Global.ZiplineEndPoints = Empty Array;
Global.ZiplineEndPoints[0] = Global.ZiplineStartPoints[1];
Global.ZiplineEndPoints[1] = Global.ZiplineStartPoints[2];
Global.ZiplineEndPoints[2] = Vector(209.740, 14.124, 48.094);
Global.ZiplineEndPoints[3] = Global.ZiplineStartPoints[4];
Global.ZiplineEndPoints[4] = Global.ZiplineStartPoints[5];
Global.ZiplineEndPoints[5] = Global.ZiplineStartPoints[6];
Global.ZiplineEndPoints[6] = Global.ZiplineStartPoints[7];
Global.ZiplineEndPoints[7] = Global.ZiplineStartPoints[8];
Global.ZiplineEndPoints[8] = Vector(168.158, 13.673, 66.010);
Wait(0.250, Ignore Condition);
Create Effect(All Players(All Teams), Ring, Color(Green), Vector(206.280, 9.480, 91.220), 1.300, Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[0], Global.ZiplineEndPoints[0], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[1], Global.ZiplineEndPoints[1], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[2], Global.ZiplineEndPoints[2], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[3], Global.ZiplineEndPoints[3], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[4], Global.ZiplineEndPoints[4], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[5], Vector(167.313, 21, 118.179), Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[5], Global.ZiplineEndPoints[5], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[6], Vector(162.912, 21, 116.391), Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[6], Global.ZiplineEndPoints[6], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[7], Vector(161.063, 21, 111.996), Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[7], Global.ZiplineEndPoints[7], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[8], Global.ZiplineEndPoints[8], Color(White),
Visible To Position and Radius);
}
}
rule("Chateau Guillard Halloween Jump Pad Activates")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Current Map == Map(Château Guillard Halloween);
Distance Between(Vector(206.280, 9.480, 91.220), Position Of(Event Player)) <= 1.333;
Speed Of In Direction(Event Player, Up) >= 0;
Altitude Of(Event Player) < 0.200;
Is Button Held(Event Player, Button(Jump)) == True;
}
actions
{
Apply Impulse(Event Player, Up, 14.500 - Event Player.IsZombie * 1.125, To World, Cancel Contrary Motion);
Play Effect(All Players(All Teams), Ring Explosion, Color(Lime Green), Vector(206.369, 9.500, 91.300), 2.600);
Play Effect(All Players(All Teams), Ring Explosion Sound, Color(Lime Green), Event Player, 100);
}
}
rule("Dorado")
{
event
{
Ongoing - Global;
}
conditions
{
Current Map == Map(Dorado);
Is Game In Progress == False;
}
actions
{
Global.PickupSpawns = Empty Array;
Modify Global Variable(PickupSpawns, Append To Array, Vector(131.173, 11.890, 26.108));
Modify Global Variable(PickupSpawns, Append To Array, Vector(89.070, 7.571, -0.965));
Modify Global Variable(PickupSpawns, Append To Array, Vector(121.593, 7.865, -15.150));
Global.ZiplineStartPoints = Empty Array;
Global.ZiplineStartPoints[0] = Vector(86.920, 23.653, 16.532);
Global.ZiplineStartPoints[1] = Vector(84.195, 20.067, -6.984);
Global.ZiplineStartPoints[2] = Vector(109.344, 21.163, 31.504);
Global.ZiplineStartPoints[3] = Vector(129.521, 22.395, 7.654);
Global.ZiplineEndPoints = Empty Array;
Global.ZiplineEndPoints[0] = Vector(80.465, 20.080, -2.078);
Global.ZiplineEndPoints[1] = Vector(118.417, 15.610, -10.998);
Global.ZiplineEndPoints[2] = Vector(126.487, 18.050, 14.093);
Global.ZiplineEndPoints[3] = Vector(121.853, 21.043, 40.709);
Wait(0.250, Ignore Condition);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[0], Global.ZiplineEndPoints[0], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[1], Global.ZiplineEndPoints[1], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[2], Global.ZiplineEndPoints[2], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[3], Global.ZiplineEndPoints[3], Color(White),
Visible To Position and Radius);
}
}
rule("Dorado Banned Spot")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Distance Between(Vector(107.673, 30.818, 2.862), Position Of(Event Player)) < 4;
Current Map == Map(Dorado);
Is Alive(Event Player) == True;
}
actions
{
Wait(1, Abort When False);
Small Message(Event Player, Custom String("{0} Please return to the battlefield {0}", Icon String(Warning)));
Wait(2.833, Abort When False);
Small Message(Event Player, Custom String("Forfeiting in 3...", Icon String(Warning)));
Wait(0.833, Abort When False);
Small Message(Event Player, Custom String("2...", Icon String(Warning)));
Wait(0.833, Abort When False);
Small Message(Event Player, Custom String("1...", Icon String(Warning)));
Wait(0.833, Abort When False);
Kill(Event Player, Event Player);
}
}
rule("Dorado Out of Map Push")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Current Map == Map(Dorado);
Distance Between(Event Player, Vector(124.860, 25.466, 73.930)) <= 6.667;
Y Component Of(Position Of(Event Player)) > 24.558;
}
actions
{
Apply Impulse(Event Player, Direction Towards(Vector(124.860, 25.466, 73.930), Vector(123.898, 24.558, 73.663)), 3.333, To World,
Cancel Contrary Motion);
Wait(0.016, Abort When False);
Loop;
}
}
rule("Eichenwalde Halloween")
{
event
{
Ongoing - Global;
}
conditions
{
Current Map == Map(Eichenwalde Halloween);
Is Game In Progress == False;
}
actions
{
Global.PickupSpawns = Empty Array;
Modify Global Variable(PickupSpawns, Append To Array, Vector(40.279, 5.768, -65.817));
Modify Global Variable(PickupSpawns, Append To Array, Vector(83.641, 13.524, -85.630));
Modify Global Variable(PickupSpawns, Append To Array, Vector(60.135, 19.564, -94.179));
Global.ZiplineStartPoints = Empty Array;
Global.ZiplineStartPoints[0] = Vector(53.648, 22.543, -102.246);
Global.ZiplineStartPoints[1] = Vector(61.348, 24.250, -64.710);
Global.ZiplineEndPoints = Empty Array;
Global.ZiplineEndPoints[0] = Vector(35.853, 15, -81.401);
Global.ZiplineEndPoints[1] = Vector(77.942, 23.850, -64.761);
Wait(0.250, Ignore Condition);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[0], Global.ZiplineEndPoints[0], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[1], Global.ZiplineEndPoints[1], Color(White),
Visible To Position and Radius);
}
}
rule("Eichenwalde Halloween Banned Spot")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Distance Between(Vector(96.341, 27.273, -91.555), Position Of(Event Player)) < 5;
Current Map == Map(Eichenwalde Halloween);
Is Alive(Event Player) == True;
}
actions
{
Wait(1, Abort When False);
Small Message(Event Player, Custom String("{0} Please return to the battlefield {0}", Icon String(Warning)));
Wait(2.833, Abort When False);
Small Message(Event Player, Custom String("Forfeiting in 3...", Icon String(Warning)));
Wait(0.833, Abort When False);
Small Message(Event Player, Custom String("2...", Icon String(Warning)));
Wait(0.833, Abort When False);
Small Message(Event Player, Custom String("1...", Icon String(Warning)));
Wait(0.833, Abort When False);
Kill(Event Player, Event Player);
}
}
rule("Havana")
{
event
{
Ongoing - Global;
}
conditions
{
Current Map == Map(Havana);
Is Game In Progress == False;
}
actions
{
Global.PickupSpawns = Empty Array;
Modify Global Variable(PickupSpawns, Append To Array, Vector(-11.458, 6.692, -79.371));
Modify Global Variable(PickupSpawns, Append To Array, Vector(-34.048, 6.683, -32.504));
Modify Global Variable(PickupSpawns, Append To Array, Vector(-74.958, 4.692, -51.414));
Global.CustomSpawns = Empty Array;
Modify Global Variable(CustomSpawns, Append To Array, Vector(-107.630, 4.305, -54.854));
Modify Global Variable(CustomSpawns, Append To Array, Vector(-98.015, 4.455, -89.926));
Modify Global Variable(CustomSpawns, Append To Array, Vector(-54.647, 6.455, -77.969));
Modify Global Variable(CustomSpawns, Append To Array, Vector(-10.540, 8.455, -32.093));
Modify Global Variable(CustomSpawns, Append To Array, Vector(-7.862, 6.480, -59.254));
Modify Global Variable(CustomSpawns, Append To Array, Vector(40.969, 12.455, -56.942));
Modify Global Variable(CustomSpawns, Append To Array, Vector(-24.352, 6.455, -90.020));
Modify Global Variable(CustomSpawns, Append To Array, Vector(-33.221, 10.455, -93.745));
Modify Global Variable(CustomSpawns, Append To Array, Vector(-71.687, 4.403, -39.238));
Modify Global Variable(CustomSpawns, Append To Array, Vector(-49.271, 4.455, -28.254));
Modify Global Variable(CustomSpawns, Append To Array, Vector(-61.083, 6.445, -55.979));
Modify Global Variable(CustomSpawns, Append To Array, Vector(-47.249, 10.455, -39.218));
Global.ZiplineStartPoints = Empty Array;
Global.ZiplineStartPoints[0] = Vector(-30.361, 7.777, -83.239);
Global.ZiplineStartPoints[1] = Vector(-21.659, 16.880, -83.446);
Global.ZiplineStartPoints[2] = Vector(-78.927, 9.445, -55.169);
Global.ZiplineStartPoints[3] = Vector(42.207, 15.785, -54.645);
Global.ZiplineStartPoints[4] = Vector(-26.860, 16.700, -51.200);
Global.ZiplineEndPoints = Empty Array;
Global.ZiplineEndPoints[0] = Vector(-30.361, 16.250, -83.239);
Global.ZiplineEndPoints[1] = Vector(-23.854, 16.640, -62.383);
Global.ZiplineEndPoints[2] = Vector(-43.266, 9.036, -43.425);
Global.ZiplineEndPoints[3] = Vector(-2.345, 11.406, -55.199);
Global.ZiplineEndPoints[4] = Vector(-62.953, 11.970, -55.533);
Wait(0.250, Ignore Condition);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[0], Vector(-30.361, 14.525, -83.239), Color(
White), Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(-30.361, 14.525, -83.239), Vector(-29.896, 14.525, -83.618), Color(
White), Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[1], Global.ZiplineEndPoints[1], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[2], Global.ZiplineEndPoints[2], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[3], Global.ZiplineEndPoints[3], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[4], Global.ZiplineEndPoints[4], Color(White),
Visible To Position and Radius);
}
}
rule("Hollywood Halloween")
{
event
{
Ongoing - Global;
}
conditions
{
Current Map == Map(Hollywood Halloween);
Is Game In Progress == False;
}
actions
{
Global.PickupSpawns = Empty Array;
Modify Global Variable(PickupSpawns, Append To Array, Vector(-26.849, 2.445, -2.917));
Modify Global Variable(PickupSpawns, Append To Array, Vector(13.042, 2.590, 21.856));
Modify Global Variable(PickupSpawns, Append To Array, Vector(-31.261, 0.695, 55.023));
Global.CustomSpawns = Empty Array;
Modify Global Variable(CustomSpawns, Append To Array, Vector(12.447, 0.456, 70.789));
Modify Global Variable(CustomSpawns, Append To Array, Vector(29.986, 3.455, 43.011));
Modify Global Variable(CustomSpawns, Append To Array, Vector(11.106, 2.205, 14.386));
Modify Global Variable(CustomSpawns, Append To Array, Vector(0.297, 2.205, 0.616));
Modify Global Variable(CustomSpawns, Append To Array, Vector(-15.097, 2.205, -15.341));
Modify Global Variable(CustomSpawns, Append To Array, Vector(-52.405, 0.205, -15.492));
Modify Global Variable(CustomSpawns, Append To Array, Vector(-47.521, 2.205, -3.381));
Modify Global Variable(CustomSpawns, Append To Array, Vector(-35.745, 0.205, 10.406));
Modify Global Variable(CustomSpawns, Append To Array, Vector(-19.992, 5.468, 36.172));
Modify Global Variable(CustomSpawns, Append To Array, Vector(-18.991, 0.467, 44.004));
Modify Global Variable(CustomSpawns, Append To Array, Vector(-34.346, 0.455, 72.364));
Modify Global Variable(CustomSpawns, Append To Array, Vector(-21.896, 1.455, 68.203));
Global.ZiplineStartPoints = Empty Array;
Global.ZiplineStartPoints[0] = Vector(-31.970, 14.250, -11.080);
Global.ZiplineStartPoints[1] = Vector(6.988, 8.840, 37.925);
Global.ZiplineStartPoints[2] = Vector(-12.324, 11.710, 24.553);
Global.ZiplineStartPoints[3] = Vector(-15.975, 11.710, 22.512);
Global.ZiplineEndPoints = Empty Array;
Global.ZiplineEndPoints[0] = Vector(-15.975, 11.710, 22.512);
Global.ZiplineEndPoints[1] = Vector(-10.693, 7.325, 50.371);
Global.ZiplineEndPoints[2] = Vector(7.011, 8.840, 34.016);
Global.ZiplineEndPoints[3] = Vector(-12.324, 11.710, 24.553);
Wait(0.250, Ignore Condition);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[0], Global.ZiplineEndPoints[0], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[1], Global.ZiplineEndPoints[1], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[2], Global.ZiplineEndPoints[2], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[3], Global.ZiplineEndPoints[3], Color(White),
Visible To Position and Radius);
}
}
rule("Hollywood Halloween Bridge Push")
rule("Lijiang Garden Lunar New Year")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
Current Map == Map(Hollywood Halloween);
Is On Ground(Event Player) == True;
Distance Between(Event Player, Vector(-51.822, 9.217, 55.682)) <= 12;
Y Component Of(Position Of(Event Player)) > 8.600;
Current Map == Map(Lijiang Garden Lunar New Year);
Is Game In Progress == False;
}
actions
{
Apply Impulse(Event Player, Direction Towards(Vector(-51.495, 12, 55.667), Vector(-31.306, 1, 55.018)), 3.333, To World,
Cancel Contrary Motion);
Wait(0.016, Abort When False);
Loop;
Global.PickupSpawns = Empty Array;
Modify Global Variable(PickupSpawns, Append To Array, Vector(0.009, 96.841, 107.965));
Modify Global Variable(PickupSpawns, Append To Array, Vector(-40.100, 95.842, 150));
Modify Global Variable(PickupSpawns, Append To Array, Vector(40.100, 95.842, 150));
}
}
rule("Kanezaka")
{
event
{
Ongoing - Global;
}
conditions
{
Current Map == Map(Kanezaka);
Is Game In Progress == False;
}
actions
{
Global.PickupSpawns = Empty Array;
Modify Global Variable(PickupSpawns, Append To Array, Vector(-9.386, 11.178, -37.969));
Modify Global Variable(PickupSpawns, Append To Array, Vector(6.712, 9.840, 1.621));
Modify Global Variable(PickupSpawns, Append To Array, Vector(-29.014, 4.840, 42.900));
Global.ZiplineStartPoints = Empty Array;
Global.ZiplineStartPoints[0] = Vector(-42.611, 16.100, -19.982);
Global.ZiplineStartPoints[1] = Vector(-37.134, 12.175, -29.950);
Global.ZiplineStartPoints[2] = Vector(-26.535, 14.321, -13.757);
Global.ZiplineEndPoints = Empty Array;
Global.ZiplineEndPoints[0] = Vector(-47.423, 15.475, -4.555);
Global.ZiplineEndPoints[1] = Vector(-37.134, 20.500, -29.950);
Global.ZiplineEndPoints[2] = Vector(6.041, 11.165, -14.712);
Wait(0.250, Ignore Condition);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[0], Global.ZiplineEndPoints[0], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[1], Vector(-37.134, 19.209, -29.950), Color(
White), Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[2], Global.ZiplineEndPoints[2], Color(White),
Visible To Position and Radius);
}
}
rule("Kanezaka Pole Push")
rule("Kanezaka Banned Spot")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Distance Between(Vector(-37.717, 20.305, -29.985), Position Of(Event Player)) < 4;
Current Map == Map(Kanezaka);
Distance Between(Event Player, Vector(5.489, 19.507, -46.883)) <= 1;
}
actions
{
Apply Impulse(Event Player, Direction Towards(Vector(5.489, 19.507, -46.883), Vector(2.112, 17.998, -43.569)), 3.333, To World,
Cancel Contrary Motion);
Wait(0.016, Abort When False);
Loop;
}
}
rule("Kanezaka Building Push")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Current Map == Map(Kanezaka);
Distance Between(Event Player, Vector(-41.836, 17.104, 14.930)) <= 1;
}
actions
{
Apply Impulse(Event Player, Direction Towards(Vector(-41.836, 17.104, 14.930), Vector(-41.715, 16.642, 8.858)), 3.333, To World,
Cancel Contrary Motion);
Wait(0.016, Abort When False);
Loop;
}
}
rule("King's Row")
{
event
{
Ongoing - Global;
}
conditions
{
Current Map == Map(King's Row);
Is Game In Progress == False;
}
actions
{
Global.PickupSpawns = Empty Array;
Modify Global Variable(PickupSpawns, Append To Array, Vector(-54.024, 0.574, -35.203));
Modify Global Variable(PickupSpawns, Append To Array, Vector(-86.371, 1.543, -23.818));
Modify Global Variable(PickupSpawns, Append To Array, Vector(-72.921, 0.675, 2.372));
Global.ZiplineStartPoints = Empty Array;
Global.ZiplineStartPoints[0] = Vector(-35.894, 12.183, -34.531);
Global.ZiplineStartPoints[1] = Vector(-50.247, 11.500, -38.596);
Global.ZiplineStartPoints[2] = Vector(-56.091, 9.494, -15.776);
Global.ZiplineStartPoints[3] = Vector(-95.620, 11.030, -31.516);
Global.ZiplineEndPoints = Empty Array;
Global.ZiplineEndPoints[0] = Vector(-47.723, 11.400, -38.486);
Global.ZiplineEndPoints[1] = Vector(-67.340, 6.900, -32.772);
Global.ZiplineEndPoints[2] = Vector(-91.040, 5.200, -28.228);
Global.ZiplineEndPoints[3] = Vector(-56.746, 8.279, -15.175);
Wait(0.250, Ignore Condition);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[0], Global.ZiplineEndPoints[0], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[1], Global.ZiplineEndPoints[1], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[2], Global.ZiplineEndPoints[2], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[3], Global.ZiplineEndPoints[3], Color(White),
Visible To Position and Radius);
}
}
rule("King's Row Banned Spot")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Filtered Array(Players On Hero(Hero(Reaper), All Teams), Current Array Element.ZombieLvl >= 3) == Empty Array && Filtered Array(
Players On Hero(Hero(Moira), All Teams), Current Array Element.ZombieLvl == 4) == Empty Array) == True;
Distance Between(Vector(-77.088, 11.450, -27.374), Position Of(Event Player)) < 4;
Current Map == Map(King's Row);
Is Alive(Event Player) == True;
}
actions
{
Wait(1, Abort When False);
Small Message(Event Player, Custom String("{0} Please return to the battlefield {0}", Icon String(Warning)));
Wait(2.833, Abort When False);
Small Message(Event Player, Custom String("Forfeiting in 3...", Icon String(Warning)));
Wait(0.833, Abort When False);
Small Message(Event Player, Custom String("2...", Icon String(Warning)));
Wait(0.833, Abort When False);
Small Message(Event Player, Custom String("1...", Icon String(Warning)));
Wait(0.833, Abort When False);
Kill(Event Player, Event Player);
}
}
rule("Lijiang Garden Lunar New Year")
{
event
{
Ongoing - Global;
}
conditions
{
Current Map == Map(Lijiang Garden Lunar New Year);
Is Game In Progress == False;
}
actions
{
Global.PickupSpawns = Empty Array;
Modify Global Variable(PickupSpawns, Append To Array, Vector(0.009, 96.841, 107.965));
Modify Global Variable(PickupSpawns, Append To Array, Vector(-40.100, 95.842, 150));
Modify Global Variable(PickupSpawns, Append To Array, Vector(40.100, 95.842, 150));
}
}
rule("Temple Of Anubis")
rule("King's Row")
{
event
{
Ongoing - Global;
}
conditions
{
Current Map == Map(Temple of Anubis);
Current Map == Map(King's Row);
Is Game In Progress == False;
}
actions
{
Global.PickupSpawns = Empty Array;
Modify Global Variable(PickupSpawns, Append To Array, Vector(-7.566, 5.504, 108.888));
Modify Global Variable(PickupSpawns, Append To Array, Vector(-45.450, 4.241, 43.361));
Modify Global Variable(PickupSpawns, Append To Array, Vector(-37.986, 2.340, 69.904));
Global.ZiplineStartPoints = Empty Array;
Global.ZiplineStartPoints[0] = Vector(-9.576, 14.333, 80.142);
Global.ZiplineStartPoints[1] = Vector(-37.550, 14.925, 52.055);
Global.ZiplineStartPoints[2] = Vector(-2.187, 9.750, 62.175);
Global.ZiplineStartPoints[3] = Vector(-12.469, 5.125, 17.396);
Global.ZiplineStartPoints[4] = Vector(-7.559, 12.570, 53.632);
Global.ZiplineStartPoints[5] = Vector(-3.252, 6.900, 85.402);
Global.ZiplineEndPoints = Empty Array;
Global.ZiplineEndPoints[0] = Vector(-10.352, 12.732, 56.710);
Global.ZiplineEndPoints[1] = Vector(-54.006, 13.150, 35.728);
Global.ZiplineEndPoints[2] = Vector(-2.187, 16.970, 62.175);
Global.ZiplineEndPoints[3] = Vector(-12.469, 12.833, 17.396);
Global.ZiplineEndPoints[4] = Vector(-7.559, 17.420, 53.632);
Global.ZiplineEndPoints[5] = Vector(-3.252, 14.500, 85.402);
Wait(0.250, Ignore Condition);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[0], Global.ZiplineEndPoints[0], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[1], Global.ZiplineEndPoints[1], Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[2], Vector(-2.187, 16.220, 62.175), Color(
White), Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[3], Vector(-12.469, 11.667, 17.396), Color(
White), Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(-12.059, 11.925, 16.676), Vector(-12.469, 11.667, 17.396), Color(
White), Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[4], Vector(-7.559, 15.916, 53.632), Color(
White), Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(-7.414, 16.637, 53.920), Vector(-7.559, 15.916, 53.632), Color(
White), Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.ZiplineStartPoints[5], Vector(-3.252, 12.865, 85.402), Color(
White), Visible To Position and Radius);
Modify Global Variable(PickupSpawns, Append To Array, Vector(-54.024, 0.574, -35.203));
Modify Global Variable(PickupSpawns, Append To Array, Vector(-86.371, 1.543, -23.818));
Modify Global Variable(PickupSpawns, Append To Array, Vector(-72.921, 0.675, 2.372));
}
}
rule("2:00 Pickup Spawn")
{
event
{
Ongoing - Global;
}
conditions
{
Is Game In Progress == True;
Match Time <= 121;
}
actions
{
Small Message(Filtered Array(All Players(All Teams), Current Array Element.IsZombie == 0), Custom String(
"A Mystery Powerup Has Appeared Somewhere on the Map!"));
Global.PickupLocation1 = Random Value In Array(Global.PickupSpawns);
Modify Global Variable(PickupSpawns, Remove From Array By Value, Global.PickupLocation1);
Create Effect(All Players(All Teams), Orb, Color(Orange), Global.PickupLocation1, 1, Visible To);
Modify Global Variable(PickupVisuals1, Append To Array, Last Created Entity);
Create Icon(Filtered Array(All Players(All Teams), Current Array Element.IsZombie == 0), Global.PickupLocation1, Diamond,
Visible To, Color(Orange), False);
Modify Global Variable(PickupVisuals1, Append To Array, Last Created Entity);
}
}
rule("1:20 Pickup Spawn")
{
event
{
Ongoing - Global;
}
conditions
{
Is Game In Progress == True;
Match Time <= 81;
}
actions
{
Small Message(Filtered Array(All Players(All Teams), Current Array Element.IsZombie == 0), Custom String(
"A Mystery Powerup Has Appeared Somewhere on the Map!"));
Global.PickupLocation2 = Random Value In Array(Global.PickupSpawns);
Modify Global Variable(PickupSpawns, Remove From Array By Value, Global.PickupLocation2);
Create Effect(All Players(All Teams), Orb, Color(Orange), Global.PickupLocation2, 1, Visible To);
Modify Global Variable(PickupVisuals2, Append To Array, Last Created Entity);
Create Icon(Filtered Array(All Players(All Teams), Current Array Element.IsZombie == 0), Global.PickupLocation2, Diamond,
Visible To, Color(Orange), False);
Modify Global Variable(PickupVisuals2, Append To Array, Last Created Entity);
}
}
rule("0:40 Pickup Spawn")
{
event
{
Ongoing - Global;
}
conditions
{
Is Game In Progress == True;
Match Time <= 41;
}
actions
{
Small Message(Filtered Array(All Players(All Teams), Current Array Element.IsZombie == 0), Custom String(
"A Mystery Powerup Has Appeared Somewhere on the Map!"));
Global.PickupLocation3 = Random Value In Array(Global.PickupSpawns);
Modify Global Variable(PickupSpawns, Remove From Array By Value, Global.PickupLocation3);
Create Effect(All Players(All Teams), Orb, Color(Orange), Global.PickupLocation3, 1, Visible To);
Modify Global Variable(PickupVisuals3, Append To Array, Last Created Entity);
Create Icon(Filtered Array(All Players(All Teams), Current Array Element.IsZombie == 0), Global.PickupLocation3, Diamond,
Visible To, Color(Orange), False);
Modify Global Variable(PickupVisuals3, Append To Array, Last Created Entity);
}
}
rule("Player Contact Pickup 1")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.PickupLocation1 != 0;
Distance Between(Event Player, Global.PickupLocation1) <= 1.833;
Event Player.IsZombie == 0;
Has Spawned(Event Player) == True;
Is Alive(Event Player) == True;
}
actions
{
Play Effect(Event Player, Buff Explosion Sound, Color(Orange), Event Player, 60);
Play Effect(All Players(All Teams), Good Pickup Effect, Color(Orange), Event Player, 1.333);
Destroy Effect(Global.PickupVisuals1[0]);
Destroy Icon(Global.PickupVisuals1[1]);
Global.PickupVisuals1 = 0;
Global.PickupLocation1 = 0;
Skip(Random Value In Array(Array(1, 5, 10)));
Wait(0.250, Ignore Condition);
Skip If(Ultimate Charge Percent(Event Player) == 100, 3);
Set Ultimate Charge(Event Player, 100);
Small Message(Event Player, Custom String("Ultimate up!"));
Abort;
Skip If(Event Player.ZappingArmor > 0, 4);
Event Player.ZappingArmor = 1;
Create HUD Text(Event Player, Custom String("{0} Zapping Armor", Icon String(Bolt)), Null, Null, Top, 2, Color(Yellow), Color(
White), Color(White), Visible To and String, Default Visibility);
Event Player.HudTexts[2] = Last Text ID;
Abort;
Destroy HUD Text(Event Player.HudTexts[3]);
Event Player.IncendiaryAmmo = 30.016;
Chase Player Variable At Rate(Event Player, IncendiaryAmmo, 0, 1, Destination and Rate);
Wait(0.016, Ignore Condition);
Create HUD Text(Event Player, Custom String("{0} Incendiary Ammo: {1} S", Icon String(Fire), Event Player.IncendiaryAmmo), Null,
Null, Top, 1, Color(Orange), Color(White), Color(White), Visible To and String, Default Visibility);
Event Player.HudTexts[3] = Last Text ID;
}
}
rule("Player Contact Pickup 2")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.PickupLocation2 != 0;
Distance Between(Event Player, Global.PickupLocation2) <= 1.833;
Event Player.IsZombie == 0;
Has Spawned(Event Player) == True;
Is Alive(Event Player) == True;
}
actions
{
Play Effect(Event Player, Buff Explosion Sound, Color(Orange), Event Player, 60);
Play Effect(All Players(All Teams), Good Pickup Effect, Color(Orange), Event Player, 1.333);
Destroy Effect(Global.PickupVisuals2[0]);
Destroy Icon(Global.PickupVisuals2[1]);
Global.PickupVisuals2 = 0;
Global.PickupLocation2 = 0;
Skip(Random Value In Array(Array(1, 5, 10)));
Wait(0.250, Ignore Condition);
Skip If(Ultimate Charge Percent(Event Player) == 100, 3);
Set Ultimate Charge(Event Player, 100);
Small Message(Event Player, Custom String("Ultimate up!"));
Abort;
Skip If(Event Player.ZappingArmor > 0, 4);
Event Player.ZappingArmor = 1;
Create HUD Text(Event Player, Custom String("{0} Zapping Armor", Icon String(Bolt)), Null, Null, Top, 2, Color(Yellow), Color(
White), Color(White), Visible To and String, Default Visibility);
Event Player.HudTexts[2] = Last Text ID;
Abort;
Destroy HUD Text(Event Player.HudTexts[3]);
Event Player.IncendiaryAmmo = 30.016;
Chase Player Variable At Rate(Event Player, IncendiaryAmmo, 0, 1, Destination and Rate);
Wait(0.016, Ignore Condition);
Create HUD Text(Event Player, Custom String("{0} Incendiary Ammo: {1} S", Icon String(Fire), Event Player.IncendiaryAmmo), Null,
Null, Top, 1, Color(Orange), Color(White), Color(White), Visible To and String, Default Visibility);
Event Player.HudTexts[3] = Last Text ID;
}
}
rule("Player Contact Pickup 3")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.PickupLocation3 != 0;
Distance Between(Event Player, Global.PickupLocation3) <= 1.833;
Event Player.IsZombie == 0;
Has Spawned(Event Player) == True;
Is Alive(Event Player) == True;
}
actions
{
Play Effect(Event Player, Buff Explosion Sound, Color(Orange), Event Player, 60);
Play Effect(All Players(All Teams), Good Pickup Effect, Color(Orange), Event Player, 1.333);
Destroy Effect(Global.PickupVisuals3[0]);
Destroy Icon(Global.PickupVisuals3[1]);
Global.PickupVisuals3 = 0;
Global.PickupLocation3 = 0;
Skip(Random Value In Array(Array(1, 5, 10)));
Wait(0.250, Ignore Condition);
Skip If(Ultimate Charge Percent(Event Player) == 100, 3);
Set Ultimate Charge(Event Player, 100);
Small Message(Event Player, Custom String("Ultimate up!"));
Abort;
Skip If(Event Player.ZappingArmor > 0, 4);
Event Player.ZappingArmor = 1;
Create HUD Text(Event Player, Custom String("{0} Zapping Armor", Icon String(Bolt)), Null, Null, Top, 2, Color(Yellow), Color(
White), Color(White), Visible To and String, Default Visibility);
Event Player.HudTexts[2] = Last Text ID;
Abort;
Destroy HUD Text(Event Player.HudTexts[3]);
Event Player.IncendiaryAmmo = 30.016;
Chase Player Variable At Rate(Event Player, IncendiaryAmmo, 0, 1, Destination and Rate);
Wait(0.016, Ignore Condition);
Create HUD Text(Event Player, Custom String("{0} Incendiary Ammo: {1} S", Icon String(Fire), Event Player.IncendiaryAmmo), Null,
Null, Top, 1, Color(Orange), Color(White), Color(White), Visible To and String, Default Visibility);
Event Player.HudTexts[3] = Last Text ID;
}
}
rule("Incendiary Ammo Expires")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Event Player.IncendiaryAmmo <= 0.016 && Event Player.IncendiaryAmmo > 0) == True;
}
actions
{
Destroy HUD Text(Event Player.HudTexts[3]);
Small Message(Event Player, Custom String("Incendiary Ammo Expired!"));
}
}
rule("Zapping Armor Expires")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.ZappingArmor <= 0;
}
actions
{
Destroy HUD Text(Event Player.HudTexts[2]);
}
}
rule("Zipline In Use")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.AttatchStatus == 1;
}
actions
{
Set Status(Event Player, Null, Rooted, 0.064);
Play Effect(All Players(All Teams), Bad Explosion, Color(Orange), Vector(Event Player.AttatchPointX, Event Player.AttatchPointY,
Event Player.AttatchPointZ), 0.050);
Play Effect(All Players(All Teams), Brigitte Repair Pack Armor Sound, Color(Orange), Vector(Event Player.AttatchPointX,
Event Player.AttatchPointY, Event Player.AttatchPointZ), 12.500);
Wait(0.048, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Zipline Message")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Distance Between(Eye Position(Event Player), First Of(Sorted Array(Global.ZiplineStartPoints, Distance Between(Eye Position(
Event Player), Current Array Element)))) <= 3;
Global.ZiplineStartPoints != Global.ZiplineEndPoints;
Event Player.AttatchStatus < 1;
}
actions
{
Small Message(Event Player, Custom String("Hold {0} to ride zipline", Input Binding String(Button(Jump))));
Wait(3.333, Ignore Condition);
}
}
rule("Zipline Engaging 1")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Button(Jump)) == True;
Y Component Of(Position Of(Event Player)) < Y Component Of(First Of(Sorted Array(Global.ZiplineStartPoints, Distance Between(
Eye Position(Event Player), Current Array Element))));
Distance Between(Eye Position(Event Player), First Of(Sorted Array(Global.ZiplineStartPoints, Distance Between(Eye Position(
Event Player), Current Array Element)))) <= 3;
Global.ZiplineStartPoints != Global.ZiplineEndPoints;
Event Player.AttatchStatus < 1;
}
actions
{
Event Player.AttatchPointX = X Component Of(First Of(Sorted Array(Global.ZiplineStartPoints, Distance Between(Eye Position(
Event Player), Current Array Element))));
Event Player.AttatchPointY = Y Component Of(First Of(Sorted Array(Global.ZiplineStartPoints, Distance Between(Eye Position(
Event Player), Current Array Element))));
Event Player.AttatchPointZ = Z Component Of(First Of(Sorted Array(Global.ZiplineStartPoints, Distance Between(Eye Position(
Event Player), Current Array Element))));
Event Player.AttatchedZiplineIndex = Index Of Array Value(Global.ZiplineStartPoints, First Of(Sorted Array(
Global.ZiplineStartPoints, Distance Between(Eye Position(Event Player), Current Array Element))));
Apply Impulse(Event Player, Direction Towards(Eye Position(Event Player), Vector(Event Player.AttatchPointX,
Event Player.AttatchPointY, Event Player.AttatchPointZ)), Distance Between(Eye Position(Event Player), Vector(
Event Player.AttatchPointX, Event Player.AttatchPointY, Event Player.AttatchPointZ)), To World, Incorporate Contrary Motion);
Wait(0.032 + (Global.ZiplineStartPoints[Event Player.AttatchedZiplineIndex] != First Of(Sorted Array(Global.ZiplineEndPoints,
Distance Between(Global.ZiplineStartPoints[Event Player.AttatchedZiplineIndex], Current Array Element)))) * 0.208,
Abort When False);
Abort If(Event Player.AttatchStatus == 1);
Start Forcing Player Position(Event Player, Vector(Event Player.AttatchPointX, Event Player.AttatchPointY - 0.400,
Event Player.AttatchPointZ) + Down * (Y Component Of(Eye Position(Event Player)) - Y Component Of(Position Of(Event Player))),
True);
Chase Player Variable Over Time(Event Player, AttatchPointX, X Component Of(
Global.ZiplineEndPoints[Event Player.AttatchedZiplineIndex]), Distance Between(First Of(Sorted Array(Global.ZiplineStartPoints,
Distance Between(Eye Position(Event Player), Current Array Element))),
Global.ZiplineEndPoints[Event Player.AttatchedZiplineIndex]) / 7.500, None);
Chase Player Variable Over Time(Event Player, AttatchPointY, Y Component Of(
Global.ZiplineEndPoints[Event Player.AttatchedZiplineIndex]), Distance Between(First Of(Sorted Array(Global.ZiplineStartPoints,
Distance Between(Eye Position(Event Player), Current Array Element))),
Global.ZiplineEndPoints[Event Player.AttatchedZiplineIndex]) / 7.500, None);
Chase Player Variable Over Time(Event Player, AttatchPointZ, Z Component Of(
Global.ZiplineEndPoints[Event Player.AttatchedZiplineIndex]), Distance Between(First Of(Sorted Array(Global.ZiplineStartPoints,
Distance Between(Eye Position(Event Player), Current Array Element))),
Global.ZiplineEndPoints[Event Player.AttatchedZiplineIndex]) / 7.500, None);
Event Player.AttatchStatus = 1;
}
}
rule("Zipline Engaging 2")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Button(Jump)) == True;
Distance Between(Eye Position(Event Player), First Of(Sorted Array(Global.ZiplineStartPoints, Distance Between(Eye Position(
Event Player), Current Array Element)))) > 3;
Distance Between(Eye Position(Event Player), Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex]) < Distance Between(
Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex], Global.ZiplineEndPoints[Event Player.ClosestZiplineIndex]) - 3;
Angle Between Vectors(Direction Towards(Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex], Eye Position(Event Player)),
Direction Towards(Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex],
Global.ZiplineEndPoints[Event Player.ClosestZiplineIndex])) < 90;
Y Component Of(Position Of(Event Player)) < Y Component Of(
Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex] + Direction Towards(
Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex], Global.ZiplineEndPoints[Event Player.ClosestZiplineIndex])
* Distance Between(Eye Position(Event Player), Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex])
* Cosine From Degrees(Angle Between Vectors(Direction Towards(Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex],
Eye Position(Event Player)), Direction Towards(Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex],
Global.ZiplineEndPoints[Event Player.ClosestZiplineIndex]))));
Distance Between(Eye Position(Event Player), Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex] + Direction Towards(
Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex], Global.ZiplineEndPoints[Event Player.ClosestZiplineIndex])
* Distance Between(Eye Position(Event Player), Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex])
* Cosine From Degrees(Angle Between Vectors(Direction Towards(Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex],
Eye Position(Event Player)), Direction Towards(Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex],
Global.ZiplineEndPoints[Event Player.ClosestZiplineIndex])))) <= 3;
Global.ZiplineStartPoints != Global.ZiplineEndPoints;
Event Player.AttatchStatus < 1;
}
actions
{
Event Player.AttatchPointX = X Component Of(Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex] + Direction Towards(
Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex], Global.ZiplineEndPoints[Event Player.ClosestZiplineIndex])
* Distance Between(Eye Position(Event Player), Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex])
* Cosine From Degrees(Angle Between Vectors(Direction Towards(Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex],
Eye Position(Event Player)), Direction Towards(Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex],
Global.ZiplineEndPoints[Event Player.ClosestZiplineIndex]))));
Event Player.AttatchPointY = Y Component Of(Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex] + Direction Towards(
Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex], Global.ZiplineEndPoints[Event Player.ClosestZiplineIndex])
* Distance Between(Eye Position(Event Player), Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex])
* Cosine From Degrees(Angle Between Vectors(Direction Towards(Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex],
Eye Position(Event Player)), Direction Towards(Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex],
Global.ZiplineEndPoints[Event Player.ClosestZiplineIndex]))));
Event Player.AttatchPointZ = Z Component Of(Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex] + Direction Towards(
Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex], Global.ZiplineEndPoints[Event Player.ClosestZiplineIndex])
* Distance Between(Eye Position(Event Player), Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex])
* Cosine From Degrees(Angle Between Vectors(Direction Towards(Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex],
Eye Position(Event Player)), Direction Towards(Global.ZiplineStartPoints[Event Player.ClosestZiplineIndex],
Global.ZiplineEndPoints[Event Player.ClosestZiplineIndex]))));
Event Player.AttatchedZiplineIndex = Event Player.ClosestZiplineIndex;
Apply Impulse(Event Player, Direction Towards(Eye Position(Event Player), Vector(Event Player.AttatchPointX,
Event Player.AttatchPointY, Event Player.AttatchPointZ)), Distance Between(Eye Position(Event Player), Vector(
Event Player.AttatchPointX, Event Player.AttatchPointY, Event Player.AttatchPointZ)), To World, Incorporate Contrary Motion);
Wait(0.240, Abort When False);
Abort If(Event Player.AttatchStatus == 1);
Start Forcing Player Position(Event Player, Vector(Event Player.AttatchPointX, Event Player.AttatchPointY - 0.400,
Event Player.AttatchPointZ) + Down * (Y Component Of(Eye Position(Event Player)) - Y Component Of(Position Of(Event Player))),
True);
Chase Player Variable Over Time(Event Player, AttatchPointX, X Component Of(
Global.ZiplineEndPoints[Event Player.AttatchedZiplineIndex]), Distance Between(Vector(Event Player.AttatchPointX,
Event Player.AttatchPointY, Event Player.AttatchPointZ), Global.ZiplineEndPoints[Event Player.AttatchedZiplineIndex]) / 7.500,
None);
Chase Player Variable Over Time(Event Player, AttatchPointY, Y Component Of(
Global.ZiplineEndPoints[Event Player.AttatchedZiplineIndex]), Distance Between(Vector(Event Player.AttatchPointX,
Event Player.AttatchPointY, Event Player.AttatchPointZ), Global.ZiplineEndPoints[Event Player.AttatchedZiplineIndex]) / 7.500,
None);
Chase Player Variable Over Time(Event Player, AttatchPointZ, Z Component Of(
Global.ZiplineEndPoints[Event Player.AttatchedZiplineIndex]), Distance Between(Vector(Event Player.AttatchPointX,
Event Player.AttatchPointY, Event Player.AttatchPointZ), Global.ZiplineEndPoints[Event Player.AttatchedZiplineIndex]) / 7.500,
None);
Event Player.AttatchStatus = 1;
}
}
rule("Zipline Disengaging")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Speed Of(Event Player) < 8;
Event Player.AttatchStatus > 0;
(Distance Between(Eye Position(Event Player), Vector(Event Player.AttatchPointX, Event Player.AttatchPointY,
Event Player.AttatchPointZ)) < 6 || Is Assembling Heroes) == True;
(Is Dead(Event Player) || Has Status(Event Player, Stunned) || Has Status(Event Player, Frozen) || Has Status(Event Player, Asleep)
|| Has Status(Event Player, Knocked Down) || !Is Button Held(Event Player, Button(Jump)) || Distance Between(Eye Position(
Event Player), Vector(Event Player.AttatchPointX, Event Player.AttatchPointY, Event Player.AttatchPointZ))
> 3 || Distance Between(Global.ZiplineEndPoints[Event Player.AttatchedZiplineIndex], Vector(Event Player.AttatchPointX,
Event Player.AttatchPointY, Event Player.AttatchPointZ)) <= 0.666) == True;
}
actions
{
Stop Chasing Player Variable(Event Player, AttatchPointX);
Stop Chasing Player Variable(Event Player, AttatchPointY);
Stop Chasing Player Variable(Event Player, AttatchPointZ);
Stop Forcing Player Position(Event Player);
Apply Impulse(Event Player, Velocity Of(Event Player) * -1, 0.001, To World, Cancel Contrary Motion);
Event Player.AttatchStatus = 0;
Apply Impulse(Event Player, Direction Towards(Global.ZiplineStartPoints[Event Player.AttatchedZiplineIndex],
Global.ZiplineEndPoints[Event Player.AttatchedZiplineIndex]), 7.500, To World, Cancel Contrary Motion);
}
}
rule("Zipline Approximation")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Index Of Array Value(Global.ZiplineStartPoints, First Of(Sorted Array(Global.ZiplineStartPoints, (Distance Between(Eye Position(
Event Player), Current Array Element) + Distance Between(Eye Position(Event Player),
Global.ZiplineEndPoints[Current Array Index])) / Distance Between(Current Array Element,
Global.ZiplineEndPoints[Current Array Index])))) != Event Player.ClosestZiplineIndex;
}
actions
{
Event Player.ClosestZiplineIndex = Index Of Array Value(Global.ZiplineStartPoints, First Of(Sorted Array(Global.ZiplineStartPoints,
(Distance Between(Eye Position(Event Player), Current Array Element) + Distance Between(Eye Position(Event Player),
Global.ZiplineEndPoints[Current Array Index])) / Distance Between(Current Array Element,
Global.ZiplineEndPoints[Current Array Index]))));
}
}
rule("Subroutine: DoomMeleeKnockdown")
{
event
{
Subroutine;
DoomMeleeKnockdown;
}
actions
{
Wait Until(!Has Status(Victim, Stunned), 0.625);
Set Status(Victim, Event Player, Knocked Down, 0.625);
}
}
rule("Subroutine: MercyTaserTether")
{
event
{
Subroutine;
MercyTaserTether;
}
actions
{
Event Player.A3Rss = (Eye Position(Victim) + Position Of(Victim) + Up / 4) / 2;
Event Player.A2Rss[0] = All Players(All Teams);
Event Player.A2Rss = All Players(All Teams);
Skip If(Has Status(Victim, Stunned), 1);
Set Status(Victim, Event Player, Stunned, 0.032);
Wait(0.080, Restart When True);
Event Player.A2Rss[0] = 0;
Event Player.A2Rss = 0;
}
}