Create
Return to post

Comparing difference between and

View raw
  • 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
  • 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%
  • 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%
  • 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%
  • 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
  • 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));
  • }
  • }
  • 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")
  • {
  • 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 Progress Bar HUD Text;
  • 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;
  • 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);
  • 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);
  • 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);
  • }
  • }
  • 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);
  • 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);
  • }
  • }
  • 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;
  • }
  • actions
  • {
  • Skip If(!Victim.IsZombie, 22);
  • If(Normalized Health(Victim) <= 0.125 && Array Contains(Array(0, Button(Primary Fire)), Event Ability));
  • 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;
  • }
  • 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;
  • }
  • 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));
  • }
  • }
  • 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")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • All;
  • Brigitte;
  • }
  • conditions
  • {
  • Victim.IsZombie == True;
  • Event Ability == Button(Ability 1);
  • }
  • actions
  • {
  • Wait Until(Ability Cooldown(Event Player, Event Ability) > 1, 1.500);
  • Set Ability Cooldown(Event Player, Event Ability, 1);
  • }
  • }
  • rule("Brigitte 300 HP Unkillable")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Brigitte;
  • }
  • conditions
  • {
  • Health(Event Player) > 295;
  • Has Status(Event Player, Unkillable) == False;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Unkillable, 5);
  • Wait(5.120, Restart When True);
  • }
  • }
  • 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));
  • 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;
  • }
  • }
  • 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);
  • 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")
  • {
  • 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);
  • 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")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Hanzo;
  • }
  • conditions
  • {
  • Has Status(Event Player, Phased Out) == False;
  • Event Player.A2Rss == 120;
  • }
  • 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;
  • }
  • }
  • rule("Hanzo Melee in Stealth")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Hanzo;
  • }
  • conditions
  • {
  • Is Meleeing(Event Player) == False;
  • Has Status(Event Player, Phased Out) == True;
  • Is Button Held(Event Player, Button(Melee)) == True;
  • }
  • actions
  • {
  • 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;
  • }
  • }
  • 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);
  • 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);
  • 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)
  • + 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;
  • }
  • }
  • 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);
  • 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;
  • }
  • 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);
  • 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);
  • 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(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);
  • 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]);
  • }
  • }
  • 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.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)));
  • 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;
  • 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;
  • 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;
  • If(Event Player.ZombieLvl == 4);
  • Start Forcing Player Outlines(Event Player, All Players(All Teams), True, Color(Orange), Always);
  • }
  • }
  • 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))])]);
  • 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]);
  • Event Player.SupposedHealth = 0;
  • 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 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;
  • }
  • actions
  • {
  • Skip If(Event Player.ZombieLvl >= 3, 1);
  • Event Player.Mutagen = 0;
  • Event Player.ZombieLvl += !(Event Player.ZombieLvl == 4);
  • }
  • }
  • rule("Zombie Level 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.IsZombie == True;
  • Event Player.ZombieLvl == 1;
  • Is Assembling Heroes == False;
  • }
  • actions
  • {
  • Set Max Health(Event Player, 50);
  • 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;
  • Is Assembling Heroes == False;
  • }
  • actions
  • {
  • Set Max Health(Event Player, 62.500);
  • 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);
  • Wait(0.016, Ignore Condition);
  • Heal(Event Player, Null, Health(Event Player) * 0.250);
  • }
  • }
  • rule("Zombie Level 3")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.IsZombie == True;
  • Event Player.ZombieLvl == 3;
  • Is Assembling Heroes == False;
  • }
  • actions
  • {
  • Set Max Health(Event Player, 75);
  • 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);
  • Wait(0.016, Ignore Condition);
  • Heal(Event Player, Null, Health(Event Player) * 0.200);
  • }
  • }
  • rule("Zombie Alpha")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.IsZombie == True;
  • Event Player.ZombieLvl == 4;
  • Is Assembling Heroes == False;
  • }
  • 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);
  • 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);
  • 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]);
  • 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;
  • Start Forcing Player Outlines(Event Player, All Players(All Teams), True, Color(Orange), Always);
  • Create Progress Bar HUD Text(Remove From Array(All Players(All Teams), Event Player), Event Player.SupposedHealth / Max Health(
  • Event Player) * 99.999 + 0.001, Custom String("Zombie Alpha Health"), Top, 0.500, Color(Gray), Color(Gray), Values,
  • Default Visibility);
  • }
  • }
  • 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")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.IsZombie == 0;
  • Is Communicating(Event Player, Spray Up) == True;
  • }
  • 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);
  • 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;
  • 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")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.IsZombie == True;
  • Is Communicating(Event Player, Spray Up) == True;
  • }
  • 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);
  • 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;
  • 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 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")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • 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;
  • }
  • 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;
  • }
  • }
  • 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")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • 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")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Current Map == Map(Temple of Anubis);
  • 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);
  • }
  • }
  • 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);
  • 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;
  • }
  • }
Join the Workshop.codes Discord