Create
Return to post

Comparing difference between and

View raw
  • variables
  • {
  • global:
  • 0: Nodes
  • 1: OmnicHealth
  • 2: OmnicDamage
  • 3: Wave
  • 4: OmnicCount
  • 5: Difficulty
  • 6: OmnicsKilled
  • 7: DeveloperMode
  • 8: ANAPOSITION
  • 9: ANAHEALTH
  • 10: ANA
  • 11: DifficultyText
  • 12: LastBastion
  • 13: EndlessMode
  • 14: OnlyBastionBots
  • 15: OldGenji
  • 16: AllowHelperBots
  • 17: ControlAFK
  • 18: ServerLoadIsHigh
  • 19: BotHeroes
  • 20: Mission
  • 21: ChallengeText
  • player:
  • 0: IsEverythingOk
  • 1: HealthValue
  • 2: DamageValue
  • 3: PathGoalVector
  • 4: HealthRegenValue
  • 5: NodeBlacklist
  • 6: AFKBOT
  • 7: TempNode
  • 8: BattleRange
  • 9: TargetEnemy
  • 10: BotAimPosition
  • 11: BotMovePosition
  • 12: TurnSpeed
  • 13: Money
  • 14: OmincsText
  • 15: NextWaveText
  • 16: BotAlly
  • 17: StartHiding
  • 18: BestHidingNode
  • 19: Spawn
  • 20: LastEnemySeenArea
  • 21: LastAttacker
  • 22: IsSpawned
  • 23: UpgradeText1
  • 24: UpgradeText2
  • 25: UpgradeText3
  • 26: UpgradeText4
  • 27: BladeMode
  • 28: IsTank
  • 29: PlayerEffect
  • }
  • subroutines
  • {
  • 0: ResetAll
  • }
  • rule("Made by EfeDursun125#2815")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • "blocks spawning bots"
  • Global.DeveloperMode = False;
  • Global.Nodes = Empty Array;
  • Disable Built-In Game Mode Completion;
  • Disable Built-In Game Mode Scoring;
  • Call Subroutine(ResetAll);
  • Global.Difficulty = Workshop Setting Combo(Custom String("Game"), Custom String("Difficulty"), 1, Array(Custom String("NONE"),
  • Custom String("EASY"), Custom String("NORMAL"), Custom String("HARD"), Custom String("EXPERT"), Custom String("LEGENDARY")),
  • 0);
  • Wait(0.016, Ignore Condition);
  • If(Global.Difficulty == 0);
  • Global.DifficultyText = Custom String("NONE");
  • Else If(Global.Difficulty == 1);
  • Global.DifficultyText = Custom String("EASY");
  • Else If(Global.Difficulty == 2);
  • Global.DifficultyText = Custom String("NORMAL");
  • Else If(Global.Difficulty == 3);
  • Global.DifficultyText = Custom String("HARD");
  • Else If(Global.Difficulty == 4);
  • Global.DifficultyText = Custom String("EXPERT");
  • Else If(Global.Difficulty == 5);
  • Global.DifficultyText = Custom String("LEGENDARY");
  • End;
  • Global.EndlessMode = Workshop Setting Toggle(Custom String("Game"), Custom String("Endless Mode"), False, 1);
  • Global.OnlyBastionBots = Workshop Setting Toggle(Custom String("Bots"), Custom String("Only Bastion Bots"), False, 1);
  • Global.LastBastion = Null;
  • Global.OldGenji = Workshop Setting Toggle(Custom String("Game"), Custom String("Fast & Hard Genji"), False, 1);
  • Global.ANA = Null;
  • Global.AllowHelperBots = Workshop Setting Toggle(Custom String("Bots"), Custom String("Allow Defender Bots"), True, 1);
  • Global.ControlAFK = Workshop Setting Toggle(Custom String("Game"), Custom String("Control AFK Players"), True, 1);
  • Disable Inspector Recording;
  • Global.Mission = Workshop Setting Combo(Custom String("Game"), Custom String("Challenges"), 1, Array(Custom String("NOTHING"),
  • Custom String("NANO BOOST"), Custom String("RAGE"), Custom String("HEALING BOOST"), Custom String("OVERLOAD")), 1);
  • If(Global.Mission == 0);
  • Global.ChallengeText = Custom String(" ");
  • Else If(Global.Mission == 1);
  • Global.ChallengeText = Custom String("CHALLENGE: NANO BOOST");
  • Else If(Global.Mission == 2);
  • Global.ChallengeText = Custom String("CHALLENGE: RAGE");
  • Else If(Global.Mission == 3);
  • Global.ChallengeText = Custom String("CHALLENGE: HEALING BOOST");
  • Else If(Global.Mission == 4);
  • Global.ChallengeText = Custom String("CHALLENGE: OVERLOAD");
  • End;
  • Create In-World Text(Match Time > 0 ? All Players(All Teams) : Null, Custom String(
  • "Upgrades:\r\nHealth - Interact - Cost 75$\r\nDamage - Crouch + Interact - Cost 75$\r\n(Interact is \"F\" by default)"),
  • Global.ANA + Vector(0, 2, 0), 1, Do Not Clip, Visible To Position and String, Color(White), Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, Null, Custom String("SERVER CPU: {0}%", Round To Integer(Server Load / 255 * 100,
  • To Nearest)), Left, -1000, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • }
  • }
  • rule("High")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Server Load > 175;
  • }
  • actions
  • {
  • Global.ServerLoadIsHigh = True;
  • Set Slow Motion(85);
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Low")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Server Load < 175;
  • }
  • actions
  • {
  • Global.ServerLoadIsHigh = False;
  • Set Slow Motion(100);
  • }
  • }
  • rule("Set Assembling Time")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Assembling Heroes == True;
  • }
  • actions
  • {
  • Set Match Time(5);
  • }
  • }
  • rule("Teleport Ana")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.ANA == Null;
  • Global.DeveloperMode == False;
  • Is Assembling Heroes == False;
  • }
  • actions
  • {
  • Set Match Time(10);
  • Create Dummy Bot(Hero(Ana), Team 1, 11, Global.ANAPOSITION, Vector(0, 0, 0));
  • Wait(0.016, Ignore Condition);
  • Global.ANA = First Of(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Ana) && Is Dummy Bot(
  • Current Array Element)));
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Anti-ANA Bug")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Match Time <= 0;
  • Count Of(Filtered Array(All Players(All Teams), Global.ANA == Current Array Element)) <= 0;
  • }
  • actions
  • {
  • Wait(0.250, Abort When False);
  • Create Dummy Bot(Hero(Ana), Team 1, 11, Global.ANAPOSITION, Vector(0, 0, 0));
  • Wait(0.016, Ignore Condition);
  • Global.ANA = First Of(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Ana) && Is Dummy Bot(
  • Current Array Element)));
  • Loop If Condition Is True;
  • }
  • }
  • rule("Stop Match Time For Developer Mode")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.DeveloperMode == True;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Wait(2, Abort When False);
  • Pause Match Time;
  • Enable Inspector Recording;
  • }
  • }
  • rule("Teleport To Spawn")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Skip If(Global.DeveloperMode == True, 1);
  • "teleport to ana"
  • Teleport(Event Player, Nearest Walkable Position(Global.ANAPOSITION));
  • Disable Game Mode HUD(Event Player);
  • Set Status(Event Player, Null, Invincible, 5);
  • Skip If(Event Player != Global.ANA, 1);
  • Set Status(Event Player, Null, Unkillable, 99999);
  • Set Respawn Max Time(Event Player, 5);
  • Wait(0.016, Ignore Condition);
  • Event Player.Spawn = Nearest Walkable Position(Position Of(Event Player));
  • Wait(1, Ignore Condition);
  • }
  • }
  • rule("Player Settings")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.IsEverythingOk == False;
  • }
  • actions
  • {
  • Create HUD Text(Event Player, Null, Null, Custom String("Omnic Attack"), Top, 0, Color(White), Color(White), Color(White),
  • Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, Null, Custom String("Don't let them kill the ana! | Get latest code: workshop.codes/omnicattack"),
  • Null, Right, 0, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, Null, Null, Custom String("Money: {0}$", Event Player.Money), Left, 0, Color(White), Color(White),
  • Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, Null, Null, Custom String("Health: %{0}", Event Player.HealthValue), Left, 2, Color(White), Color(
  • White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, Null, Null, Custom String("Damage: %{0}", Event Player.DamageValue), Left, 3, Color(White), Color(
  • White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, Null, Null, Custom String("Difficulty: {0}\r\n{1}", Global.DifficultyText, Global.ChallengeText),
  • Left, 1, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, Null, Custom String(" "), Null, Left, 4, Color(White), Color(White), Color(White),
  • Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, Hero Icon String(Hero Of(Global.ANA)), Custom String("ANA"), Custom String("Health: {0}/{1}",
  • Round To Integer(Health(Global.ANA), To Nearest), Round To Integer(Max Health(Global.ANA), To Nearest)), Left, 5, Color(White),
  • Color(White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, Null, Custom String(" "), Null, Left, 6, Color(White), Color(White), Color(White),
  • Visible To and String, Default Visibility);
  • Wait(0.016, Ignore Condition);
  • Event Player.HealthRegenValue = 4;
  • Event Player.HealthValue = 100;
  • Event Player.DamageValue = 100;
  • Event Player.IsEverythingOk = True;
  • Wait(1, Ignore Condition);
  • }
  • }
  • rule("Dynamic Text")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Match Time <= 0;
  • Global.LastBastion == Null;
  • }
  • actions
  • {
  • Destroy HUD Text(Event Player.NextWaveText);
  • Destroy HUD Text(Event Player.OmincsText);
  • Destroy HUD Text(Event Player.UpgradeText1);
  • Destroy HUD Text(Event Player.UpgradeText2);
  • Destroy HUD Text(Event Player.UpgradeText3);
  • Destroy HUD Text(Event Player.UpgradeText4);
  • Create HUD Text(Event Player, Null, Custom String("Wave {0}/20 | Omnics Killed {1}/{2}", Global.Wave, Global.OmnicsKilled,
  • Global.OmnicCount), Null, Top, 1, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.OmincsText = Last Text ID;
  • }
  • }
  • rule("Dynamic Text 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Match Time > 0;
  • Global.LastBastion == Null;
  • }
  • actions
  • {
  • Destroy HUD Text(Event Player.NextWaveText);
  • Destroy HUD Text(Event Player.OmincsText);
  • Destroy HUD Text(Event Player.UpgradeText1);
  • Destroy HUD Text(Event Player.UpgradeText2);
  • Destroy HUD Text(Event Player.UpgradeText3);
  • Destroy HUD Text(Event Player.UpgradeText4);
  • Create HUD Text(Event Player, Null, Custom String("Next Wave Incoming In {0} Seconds!", Round To Integer(Match Time, Up)), Null,
  • Top, 1, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.NextWaveText = Last Text ID;
  • Create HUD Text(Event Player, Null, Null, Custom String("Upgrades"), Left, 7, Color(White), Color(White), Color(White),
  • Visible To and String, Default Visibility);
  • Event Player.UpgradeText1 = Last Text ID;
  • Create HUD Text(Event Player, Null, Custom String("(upgrades only allowed in between waves)"), Custom String(
  • "Health Upgrade - Cost 75$ - Press {0}", Button(Interact)), Left, 8, Color(White), Color(White), Color(White),
  • Visible To and String, Default Visibility);
  • Event Player.UpgradeText2 = Last Text ID;
  • Create HUD Text(Event Player, Null, Null, Custom String("Damage Upgrade - Cost 125$ - Press {0} & {1}", Button(Interact), Button(
  • Crouch)), Left, 9, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.UpgradeText3 = Last Text ID;
  • Create HUD Text(Event Player, Null, Custom String("{0} = F by Default", Button(Interact)), Null, Left, 10, Color(White), Color(
  • White), Color(White), Visible To and String, Default Visibility);
  • Event Player.UpgradeText4 = Last Text ID;
  • }
  • }
  • rule("Dynamic Text 3")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.LastBastion != Null;
  • }
  • actions
  • {
  • Destroy HUD Text(Event Player.NextWaveText);
  • Destroy HUD Text(Event Player.OmincsText);
  • Destroy HUD Text(Event Player.UpgradeText1);
  • Destroy HUD Text(Event Player.UpgradeText2);
  • Destroy HUD Text(Event Player.UpgradeText3);
  • Destroy HUD Text(Event Player.UpgradeText4);
  • Create HUD Text(Event Player, Null, Custom String("Kill the last bastion king!"), Null, Top, 1, Color(White), Color(White), Color(
  • White), Visible To and String, Default Visibility);
  • Event Player.OmincsText = Last Text ID;
  • }
  • }
  • rule("Health Regen")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player != Global.ANA;
  • Match Time > 0;
  • }
  • actions
  • {
  • Heal(Event Player, Null, Event Player.HealthRegenValue);
  • Set Max Health(Event Player, Event Player.HealthValue);
  • Set Damage Dealt(Event Player, Event Player.DamageValue);
  • "you need a healing"
  • Set Healing Received(Event Player, 100 + Global.Difficulty);
  • Wait(2, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Give Money")
  • {
  • event
  • {
  • Player Earned Elimination;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Victim != Null;
  • Victim != Event Player;
  • Event Player != Global.ANA;
  • }
  • actions
  • {
  • If(Hero Of(Victim) == Hero(Zenyatta));
  • Event Player.Money += 15;
  • Else If(Hero Of(Victim) == Hero(Orisa));
  • Event Player.Money += 25;
  • Else If(Hero Of(Victim) == Hero(Bastion));
  • Event Player.Money += 35;
  • Else If(Hero Of(Victim) == Hero(Genji));
  • Event Player.Money += 20;
  • Else If(Hero Of(Victim) == Hero(Echo));
  • Event Player.Money += 30;
  • End;
  • }
  • }
  • rule("Starter Money For New Players")
  • {
  • event
  • {
  • Player Joined Match;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player != Global.ANA;
  • }
  • actions
  • {
  • Skip If(Global.Wave <= 2, 3);
  • Wait(1, Ignore Condition);
  • Event Player.Money = Global.Wave * (7 + Global.Difficulty);
  • Event Player.Money = Event Player.Money * (Global.Difficulty + 1);
  • }
  • }
  • rule("Kill Cam")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Ana;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Health(Event Player) <= 1;
  • Has Status(Event Player, Knocked Down) == False;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Knocked Down, 6);
  • Skip If(Hero Of(Event Player) != Hero(Ana) || !Is Dummy Bot(Event Player), 2);
  • Set Slow Motion(50);
  • Start Camera(All Players(All Teams), Eye Position(Event Player) + Up * 2, Position Of(Event Player), 10);
  • Wait(2, Ignore Condition);
  • Clear Status(Event Player, Unkillable);
  • Wait(0.016, Ignore Condition);
  • If(Event Player.LastAttacker != Null && Is Alive(Event Player.LastAttacker));
  • Kill(Event Player, Event Player.LastAttacker);
  • Else;
  • Kill(Event Player, Null);
  • End;
  • Skip If(Hero Of(Event Player) != Hero(Ana) || !Is Dummy Bot(Event Player), 3);
  • Wait(1, Ignore Condition);
  • Stop Camera(All Players(All Teams));
  • Set Slow Motion(100);
  • Small Message(All Players(All Teams), Custom String("{0} IS DIED!", Event Player));
  • }
  • }
  • rule("Reset All")
  • {
  • event
  • {
  • Subroutine;
  • ResetAll;
  • }
  • actions
  • {
  • If(Global.Difficulty <= 3);
  • Global.OmnicHealth = 40;
  • Global.OmnicDamage = 15;
  • Else;
  • Global.OmnicHealth = 50;
  • Global.OmnicDamage = 20;
  • End;
  • Global.Wave = 1;
  • Global.OmnicsKilled = 0;
  • Global.OmnicCount = Random Integer(8, 12);
  • All Players(All Teams).HealthValue = 100;
  • Set Match Time(10);
  • Global.ANAHEALTH = 2500;
  • }
  • }
  • rule("Pathfinding")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.TargetEnemy == Null;
  • (Hero Of(Event Player) != Hero(Bastion) || Event Player.StartHiding == False) == True;
  • Event Player != Global.ANA;
  • }
  • actions
  • {
  • Skip If(Team Of(Event Player) != Team 1, 5);
  • If(Match Time <= 0);
  • Event Player.PathGoalVector = Nearest Walkable Position(First Of(Sorted Array(Filtered Array(All Living Players(Team Of(
  • Event Player)), Has Spawned(Current Array Element) && Event Player != Current Array Element && (Is Firing Primary(
  • Current Array Element) || Is Firing Secondary(Current Array Element))), Distance Between(Global.ANA, Current Array Element))));
  • Else;
  • Event Player.PathGoalVector = Nearest Walkable Position(Global.ANA);
  • End;
  • Event Player.TempNode = First Of(Sorted Array(Filtered Array(Global.Nodes, Is In Line of Sight(Eye Position(Event Player),
  • Position Of(Current Array Element), Barriers Do Not Block LOS) == True && Array Contains(Event Player.NodeBlacklist,
  • Current Array Element) == False), Distance Between(Current Array Element, Event Player.PathGoalVector)));
  • Event Player.BotMovePosition = Event Player.TempNode;
  • Wait(1, Abort When False);
  • Loop;
  • }
  • }
  • rule("Node Blacklist")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Distance Between(Position Of(Event Player), Event Player.TempNode) <= 2;
  • Event Player.TempNode != Null;
  • Event Player != Global.ANA;
  • }
  • actions
  • {
  • Modify Player Variable(Event Player, NodeBlacklist, Append To Array, Event Player.TempNode);
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Clear Node Blacklist")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Array Contains(Event Player.NodeBlacklist, Event Player.TempNode) == True;
  • Event Player.NodeBlacklist != Empty Array;
  • Event Player != Global.ANA;
  • }
  • actions
  • {
  • Event Player.TempNode = First Of(Sorted Array(Filtered Array(Global.Nodes, Is In Line of Sight(Eye Position(Event Player),
  • Position Of(Current Array Element), Barriers Do Not Block LOS) == True && Array Contains(Event Player.NodeBlacklist,
  • Current Array Element) == False), Distance Between(Current Array Element, Event Player.PathGoalVector)));
  • Wait(1, Abort When False);
  • Event Player.NodeBlacklist = Empty Array;
  • }
  • }
  • rule("Clear Node Blacklist 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.TempNode == Null;
  • Event Player != Global.ANA;
  • }
  • actions
  • {
  • Event Player.NodeBlacklist = Empty Array;
  • }
  • }
  • rule("Clear Node Blacklist 3")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Current Map == Map(Temple of Anubis);
  • Is In Line of Sight(Eye Position(Event Player), Eye Position(Global.ANA), Barriers Do Not Block LOS) == True;
  • Event Player != Global.ANA;
  • }
  • actions
  • {
  • Event Player.NodeBlacklist = Empty Array;
  • Wait(Random Real(2, 6), Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Remove Node From Node Blacklist")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.NodeBlacklist != Empty Array;
  • Event Player != Global.ANA;
  • }
  • actions
  • {
  • Wait(6, Ignore Condition);
  • Modify Player Variable(Event Player, NodeBlacklist, Remove From Array By Index, 0);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Set Bot Enemy")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.TargetEnemy = First Of(Sorted Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Is In Line of Sight(Eye Position(Event Player), Eye Position(Current Array Element), Barriers Do Not Block LOS)
  • == True && Has Spawned(Current Array Element) && !Has Status(Current Array Element, Asleep) && (Hero Of(Current Array Element)
  • != Hero(Sombra) || !Is Using Ability 1(Current Array Element)) && (Hero Of(Current Array Element) != Hero(Doomfist)
  • || !Is Using Ultimate(Current Array Element))), Distance Between(Event Player, Current Array Element)));
  • Wait(1, Abort When False);
  • Loop;
  • }
  • }
  • rule("Set Bot Enemy If Current Enemy Is Dead")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.TargetEnemy != Null;
  • Is Dead(Event Player.TargetEnemy) == True;
  • }
  • actions
  • {
  • Event Player.TargetEnemy = First Of(Sorted Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Is In Line of Sight(Eye Position(Event Player), Eye Position(Current Array Element), Barriers Do Not Block LOS)
  • == True && Has Spawned(Current Array Element) && !Has Status(Current Array Element, Asleep) && (Hero Of(Current Array Element)
  • != Hero(Sombra) || !Is Using Ability 1(Current Array Element)) && (Hero Of(Current Array Element) != Hero(Doomfist)
  • || !Is Using Ultimate(Current Array Element))), Distance Between(Event Player, Current Array Element)));
  • }
  • }
  • rule("Set Bot Enemy If Enemy Is Null")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.TargetEnemy == Null;
  • Attacker != Null;
  • Attacker != Event Player;
  • Is Alive(Attacker) == True;
  • Is In Line of Sight(Eye Position(Event Player), Eye Position(Attacker), Barriers Do Not Block LOS) == True;
  • }
  • actions
  • {
  • Event Player.TargetEnemy = Attacker;
  • }
  • }
  • rule("Set Bot Ally")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Ana;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.BotAlly = First Of(Sorted Array(Filtered Array(All Living Players(Team Of(Event Player)), Is In Line of Sight(
  • Eye Position(Event Player), Eye Position(Current Array Element), Barriers Do Not Block LOS) == True && Has Spawned(
  • Current Array Element) && Health(Current Array Element) < Max Health(Current Array Element)
  • && Current Array Element != Event Player), Health(Current Array Element) * Distance Between(Event Player,
  • Current Array Element)));
  • Wait(1, Abort When False);
  • Loop;
  • }
  • }
  • rule("Set Bot Ally 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Lúcio;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.BotAlly = First Of(Sorted Array(Filtered Array(All Living Players(Team Of(Event Player)), Is In Line of Sight(
  • Eye Position(Event Player), Eye Position(Current Array Element), Barriers Do Not Block LOS) == True && Has Spawned(
  • Current Array Element) && Hero Of(Current Array Element) != Hero(Ana) && Health(Current Array Element) < Max Health(
  • Current Array Element)), Distance Between(Event Player, Current Array Element)));
  • Wait(1, Abort When False);
  • Loop;
  • }
  • }
  • disabled rule("Bot Auto Respawn")
  • {
  • event
  • {
  • Player Died;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • Respawn(Event Player);
  • }
  • }
  • rule("Bot Start")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Has Status(Event Player, Knocked Down) == False;
  • Has Status(Event Player, Asleep) == False;
  • Has Status(Event Player, Frozen) == False;
  • Has Status(Event Player, Stunned) == False;
  • }
  • actions
  • {
  • Event Player.TurnSpeed = 200;
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Event Player.BotAimPosition), Event Player.TurnSpeed,
  • To World, Direction and Turn Rate);
  • Skip If(Hero Of(Event Player) == Hero(Ana), 1);
  • Start Throttle In Direction(Event Player, Direction Towards(Position Of(Event Player), Event Player.BotMovePosition), 1, To World,
  • Replace existing throttle, Direction and Magnitude);
  • Event Player.BattleRange = Random Real(7, 16);
  • }
  • }
  • rule("Bot Stop")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • (Has Status(Event Player, Knocked Down) || Has Status(Event Player, Asleep) || Has Status(Event Player, Stunned) || Has Status(
  • Event Player, Frozen)) == True;
  • }
  • actions
  • {
  • Stop Facing(Event Player);
  • Stop Throttle In Direction(Event Player);
  • }
  • }
  • rule("Bot Aim Position")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • If(Hero Of(Event Player) == Hero(Ana) && Event Player.BotAlly != Null);
  • If(!Has Status(Event Player.BotAlly, Knocked Down) && !Has Status(Event Player.BotAlly, Asleep));
  • Event Player.BotAimPosition = Eye Position(Event Player.BotAlly);
  • Else;
  • Event Player.BotAimPosition = Position Of(Event Player.BotAlly);
  • End;
  • Wait(0.032, Abort When False);
  • Loop;
  • Else If(Event Player.TargetEnemy != Null);
  • Event Player.LastEnemySeenArea = Eye Position(Event Player.TargetEnemy);
  • If(!Has Status(Event Player.TargetEnemy, Knocked Down) && !Has Status(Event Player.TargetEnemy, Asleep)
  • && Event Player.BladeMode == False);
  • Event Player.BotAimPosition = Eye Position(Event Player.TargetEnemy);
  • Else;
  • Event Player.BotAimPosition = Position Of(Event Player.TargetEnemy);
  • End;
  • Wait(0.016, Abort When False);
  • Loop;
  • Else;
  • Skip If(Event Player == Global.ANA, 2);
  • Skip If(Hero Of(Event Player) == Hero(Bastion) && Is In Alternate Form(Event Player), 1);
  • Event Player.BotAimPosition = Vector(X Component Of(Position Of(First Of(Sorted Array(Filtered Array(Global.Nodes,
  • Is In Line of Sight(Eye Position(Event Player), Current Array Element, Barriers Do Not Block LOS) == True), Distance Between(
  • Event Player.PathGoalVector, Current Array Element))))), Y Component Of(Eye Position(Event Player)), Z Component Of(
  • Position Of(First Of(Sorted Array(Filtered Array(Global.Nodes, Is In Line of Sight(Eye Position(Event Player),
  • Current Array Element, Barriers Do Not Block LOS) == True), Distance Between(Event Player.PathGoalVector,
  • Current Array Element))))));
  • End;
  • Wait(0.500, Abort When False);
  • Loop;
  • }
  • }
  • rule("Bot Battle Move")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • disabled Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Distance Between(Position Of(Event Player), Event Player.BotMovePosition) <= 2;
  • Event Player.TargetEnemy != Null;
  • Hero Of(Event Player) != Hero(Bastion);
  • (Hero Of(Event Player) != Hero(Bastion) || Event Player.StartHiding == False) == True;
  • Event Player != Global.ANA;
  • }
  • actions
  • {
  • Event Player.BotMovePosition = Nearest Walkable Position(Ray Cast Hit Position(Eye Position(Event Player), Position Of(
  • Event Player.TargetEnemy) + Vector(Random Real(Event Player.BattleRange - Event Player.BattleRange * 2,
  • Event Player.BattleRange), 0, Random Real(Event Player.BattleRange - Event Player.BattleRange * 2, Event Player.BattleRange)),
  • Null, Event Player, False));
  • Wait(Random Real(0.250, 0.750), Abort When False);
  • Loop;
  • }
  • }
  • rule("Bot Shot Checker (Fire)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Hero Of(Event Player) != Hero(Ana);
  • }
  • actions
  • {
  • If(Event Player.TargetEnemy != Null);
  • Skip If(Is Firing Primary(Event Player) == True, 3);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Event Player.BotMovePosition = Position Of(Event Player);
  • Clear Status(Event Player, Rooted);
  • Else;
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Event Player.PathGoalVector = Nearest Walkable Position(Position Of(First Of(Filtered Array(All Players(All Teams), Hero Of(
  • Current Array Element) == Hero(Ana) && Is Dummy Bot(Current Array Element)))));
  • End;
  • Wait(1, Abort When False);
  • Loop;
  • }
  • }
  • rule("Bot Smooth Aim")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.TurnSpeed = Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player),
  • Position Of(Event Player.BotAimPosition))) * 4 + 60;
  • Wait(0.150, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot Auto Jump")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Is Moving(Event Player) == True;
  • Speed Of(Event Player) <= 3;
  • Is On Ground(Event Player) == True;
  • Is On Wall(Event Player) == False;
  • Event Player != Global.ANA;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Jump));
  • }
  • }
  • rule("Create Omnic")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Count Of(All Players(Team 2)) < 10;
  • Match Time <= 0;
  • Global.DeveloperMode == False;
  • }
  • actions
  • {
  • Wait(0.250, Abort When False);
  • Skip If(Global.Wave < Random Integer(10, 16) || Random Integer(1, 8) != 1, 1);
  • Create Dummy Bot(Hero(Bastion), Team 2, -1, Nearest Walkable Position(Random Value In Array(Filtered Array(Spawn Points(All Teams),
  • Is In Line of Sight(Eye Position(Closest Player To(Position Of(Current Array Element), Team 1)), Position Of(
  • Current Array Element), Barriers Do Not Block LOS) == False && Is In Line of Sight(Eye Position(Global.ANA), Position Of(
  • Current Array Element), Barriers Do Not Block LOS) == False && Distance Between(Eye Position(Global.ANA), Position Of(
  • Current Array Element)) > 10))), Eye Position(Global.ANA));
  • Skip If(Global.Wave < Random Integer(9, 13) || Random Integer(1, 6) != 1, 1);
  • Create Dummy Bot(Hero(Echo), Team 2, -1, Nearest Walkable Position(Random Value In Array(Filtered Array(Spawn Points(All Teams),
  • Is In Line of Sight(Eye Position(Closest Player To(Position Of(Current Array Element), Team 1)), Position Of(
  • Current Array Element), Barriers Do Not Block LOS) == False && Is In Line of Sight(Eye Position(Global.ANA), Position Of(
  • Current Array Element), Barriers Do Not Block LOS) == False && Distance Between(Eye Position(Global.ANA), Position Of(
  • Current Array Element)) > 10))), Eye Position(Global.ANA));
  • Skip If(Global.Wave < Random Integer(6, 9) || Random Integer(1, 4) != 1, 1);
  • Create Dummy Bot(Hero(Genji), Team 2, -1, Nearest Walkable Position(Random Value In Array(Filtered Array(Spawn Points(All Teams),
  • Is In Line of Sight(Eye Position(Closest Player To(Position Of(Current Array Element), Team 1)), Position Of(
  • Current Array Element), Barriers Do Not Block LOS) == False && Is In Line of Sight(Eye Position(Global.ANA), Position Of(
  • Current Array Element), Barriers Do Not Block LOS) == False && Distance Between(Eye Position(Global.ANA), Position Of(
  • Current Array Element)) > 10))), Eye Position(Global.ANA));
  • Skip If(Global.Wave < Random Integer(3, 5) || Random Integer(1, 5) != 1, 1);
  • Create Dummy Bot(Hero(Orisa), Team 2, -1, Nearest Walkable Position(Random Value In Array(Filtered Array(Spawn Points(All Teams),
  • Is In Line of Sight(Eye Position(Closest Player To(Position Of(Current Array Element), Team 1)), Position Of(
  • Current Array Element), Barriers Do Not Block LOS) == False && Is In Line of Sight(Eye Position(Global.ANA), Position Of(
  • Current Array Element), Barriers Do Not Block LOS) == False && Distance Between(Eye Position(Global.ANA), Position Of(
  • Current Array Element)) > 10))), Eye Position(Global.ANA));
  • Skip If(Global.Wave < Random Integer(2, 6) || Random Integer(1, 6) != 1, 1);
  • Create Dummy Bot(Hero(Doomfist), Team 2, -1, Nearest Walkable Position(Vector(0, 0, 0)), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Zenyatta), Team 2, -1, Nearest Walkable Position(Random Value In Array(Filtered Array(Spawn Points(
  • All Teams), Is In Line of Sight(Eye Position(Closest Player To(Position Of(Current Array Element), Team 1)), Position Of(
  • Current Array Element), Barriers Do Not Block LOS) == False && Is In Line of Sight(Eye Position(Global.ANA), Position Of(
  • Current Array Element), Barriers Do Not Block LOS) == False && Distance Between(Eye Position(Global.ANA), Position Of(
  • Current Array Element)) > 20))), Eye Position(Global.ANA));
  • Loop;
  • }
  • }
  • rule("Set Airstrike (Tank) Status")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Doomfist;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Start Scaling Player(Event Player, 0.100, True);
  • Start Modifying Hero Voice Lines(Event Player, -99 * 99, True);
  • Start Forcing Dummy Bot Name(Event Player, Custom String("AIR STRIKE"));
  • Event Player.IsTank = True;
  • Set Max Health(Event Player, Global.OmnicHealth + Global.Wave + Global.Difficulty + Global.OmnicsKilled);
  • Set Knockback Dealt(Event Player, 300);
  • Start Damage Modification(Global.ANA, Event Player, 0, Receivers and Damagers);
  • Set Ultimate Charge(Event Player, 100);
  • disabled Set Invisible(Event Player, All);
  • Wait(1, Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • Set Damage Dealt(Event Player, Global.OmnicDamage);
  • Wait(0.128, Ignore Condition);
  • Teleport(Event Player, Nearest Walkable Position(Random Value In Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(
  • Event Player))), Has Spawned(Current Array Element) && Current Array Element != Global.ANA))));
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(2, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Hero(Bastion));
  • Wait(1, Ignore Condition);
  • Set Status(Event Player, Null, Knocked Down, 2);
  • Set Ultimate Charge(Event Player, 100);
  • Stop Scaling Player(Event Player);
  • Wait(0.250, Ignore Condition);
  • Set Ultimate Charge(Event Player, 100);
  • Event Player.IsTank = True;
  • }
  • }
  • rule("Set Omnic Status")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Zenyatta;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Start Forcing Dummy Bot Name(Event Player, Custom String("OMNIC"));
  • disabled Respawn(Event Player);
  • If(Random Integer(1, 3) == 1);
  • Set Max Health(Event Player, Global.OmnicHealth * 2);
  • Set Damage Dealt(Event Player, Global.OmnicDamage / 2);
  • Else;
  • Set Max Health(Event Player, Global.OmnicHealth);
  • Set Damage Dealt(Event Player, Global.OmnicDamage);
  • End;
  • Wait(1, Ignore Condition);
  • }
  • }
  • rule("Set Omnic Orisa Status")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Orisa;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Start Forcing Dummy Bot Name(Event Player, Custom String("OR14"));
  • disabled Respawn(Event Player);
  • Set Max Health(Event Player, (Global.OmnicHealth + Global.Difficulty * 2) * 2);
  • Set Damage Dealt(Event Player, Global.OmnicDamage + Global.Difficulty);
  • Wait(1, Ignore Condition);
  • }
  • }
  • rule("Set Omnic Genji Status")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Genji;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Start Forcing Dummy Bot Name(Event Player, Custom String("ASSASSIN"));
  • disabled Respawn(Event Player);
  • If(Random Integer(1, 2) == 1);
  • Event Player.BladeMode = False;
  • Set Max Health(Event Player, Global.Difficulty + Global.OmnicHealth / 2);
  • Set Damage Dealt(Event Player, Global.OmnicDamage * (Global.Difficulty / 2));
  • Wait(1, Ignore Condition);
  • Else;
  • Event Player.BladeMode = True;
  • Add Health Pool To Player(Event Player, Shields, Global.Difficulty * 2, True, True);
  • Set Max Health(Event Player, Global.Difficulty + Global.Wave + Global.OmnicHealth / 2);
  • Set Damage Dealt(Event Player, Global.OmnicDamage + Global.Difficulty + Global.Wave);
  • Wait(1, Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • End;
  • }
  • }
  • rule("Set Omnic Echo Status")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Echo;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.IsSpawned == False;
  • }
  • actions
  • {
  • Start Forcing Dummy Bot Name(Event Player, Custom String("CLONE"));
  • disabled Respawn(Event Player);
  • Set Damage Dealt(Event Player, Global.OmnicDamage + Global.Difficulty);
  • Set Max Health(Event Player, Global.OmnicHealth + Global.Difficulty + Global.Wave);
  • Event Player.IsSpawned = True;
  • Wait(1, Ignore Condition);
  • }
  • }
  • rule("Set Omnic Bastion Status")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Bastion;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.IsTank == False;
  • Match Time <= 0;
  • }
  • actions
  • {
  • Wait(1, Abort When False);
  • If(Global.Wave >= 20 && Global.LastBastion == Null && Global.EndlessMode == False);
  • Start Forcing Dummy Bot Name(Event Player, Custom String("MEGA B76-NS"));
  • Respawn(Event Player);
  • Set Jump Vertical Speed(Event Player, 200);
  • Disallow Button(Event Player, Button(Secondary Fire));
  • Set Knockback Received(Event Player, 50);
  • Set Max Health(Event Player, Global.OmnicHealth * (300 + Global.Difficulty));
  • Set Damage Dealt(Event Player, Global.OmnicDamage * Global.Difficulty);
  • Global.LastBastion = Event Player;
  • Start Scaling Player(Event Player, 1.500, True);
  • Wait(0.016, Ignore Condition);
  • Add Health Pool To Player(Event Player, Shields, 1000 * Global.Difficulty, True, True);
  • Add Health Pool To Player(Event Player, Armor, Max Health(Event Player) * Global.Difficulty, True, True);
  • Event Player.Spawn = Nearest Walkable Position(Position Of(Event Player));
  • Create Icon(All Players(All Teams), Event Player, Skull, Visible To and Position, Color(Red), True);
  • Wait(1, Ignore Condition);
  • Else;
  • Set Max Health(Event Player, Global.OmnicHealth * (3 + Global.Difficulty / 2));
  • Set Damage Dealt(Event Player, Global.OmnicDamage + Global.Difficulty);
  • Wait(0.016, Ignore Condition);
  • Event Player.Spawn = Nearest Walkable Position(Position Of(Event Player));
  • Start Forcing Dummy Bot Name(Event Player, Custom String("B76-NS"));
  • Wait(1, Ignore Condition);
  • End;
  • }
  • }
  • rule("Destroy Omnic If Dies")
  • {
  • event
  • {
  • Player Died;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player != Global.LastBastion;
  • Event Player != Global.ANA;
  • }
  • actions
  • {
  • Destroy Effect(Event Player.PlayerEffect);
  • Wait(1, Ignore Condition);
  • Skip If(Global.LastBastion == Event Player, 1);
  • Destroy Dummy Bot(Team 2, Slot Of(Event Player));
  • }
  • }
  • rule("Omnics Killed")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Victim != Null;
  • Victim != Event Player;
  • Team Of(Victim) == Team 2;
  • }
  • actions
  • {
  • Global.OmnicsKilled += 1;
  • }
  • }
  • rule("Next Wave")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.OmnicsKilled >= Global.OmnicCount;
  • Global.LastBastion == Null;
  • }
  • actions
  • {
  • Set Match Time(20);
  • Big Message(All Players(All Teams), Custom String("WAVE CLEARED!"));
  • Global.Wave += 1;
  • Global.OmnicsKilled = 0;
  • Global.OmnicCount += Random Integer(6, 9);
  • Global.OmnicHealth += 11 + Global.Difficulty;
  • Global.OmnicDamage += 4 + Global.Difficulty;
  • Respawn(All Dead Players(All Teams));
  • Heal(All Players(All Teams), Null, 99999);
  • Global.ANAHEALTH += 500;
  • }
  • }
  • rule("Set up Ana")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Ana;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Set Max Health(Event Player, Global.ANAHEALTH);
  • Skip If(Match Time <= 0, 2);
  • Set Healing Received(Event Player, 100);
  • Heal(Event Player, Null, 100000000);
  • Set Healing Received(Event Player, 0);
  • Set Healing Dealt(Event Player, 100 + Global.Wave * Global.Difficulty);
  • Set Knockback Received(Event Player, 0);
  • Set Max Ammo(Event Player, 0, 10000);
  • Wait(5, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Ana Teleport")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Ana;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Distance Between(Position Of(Event Player), Nearest Walkable Position(Global.ANAPOSITION)) >= 2;
  • Match Time <= 0;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Teleport(Event Player, Nearest Walkable Position(Global.ANAPOSITION));
  • Wait(1, Abort When False);
  • Loop;
  • }
  • }
  • rule("Omnics Wins")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Match Time <= 0;
  • Is Dead(Global.ANA) == True;
  • Global.ANA != Null;
  • }
  • actions
  • {
  • Declare Team Victory(Team 2);
  • }
  • }
  • rule("Defenders Wins")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Match Time <= 0;
  • Is Dead(Global.LastBastion) == True;
  • Global.LastBastion != Null;
  • Global.EndlessMode == False;
  • }
  • actions
  • {
  • Declare Team Victory(Team 1);
  • }
  • }
  • rule("King Bastion Anti-Hook")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 1;
  • Roadhog;
  • }
  • conditions
  • {
  • Victim == Global.LastBastion;
  • Is Alive(Event Player) == True;
  • Victim != Null;
  • Event Ability == Is Using Ability 1(Event Player);
  • }
  • actions
  • {
  • Cancel Primary Action(Event Player);
  • }
  • }
  • rule("King Bastion Anti-Gravity")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 1;
  • Sigma;
  • }
  • conditions
  • {
  • Victim == Global.LastBastion;
  • Is Alive(Event Player) == True;
  • Victim != Null;
  • Event Ability == Is Using Ultimate(Event Player);
  • }
  • actions
  • {
  • Set Status(Victim, Null, Phased Out, 0.032);
  • }
  • }
  • rule("King Bastion Remove Stuns")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • Event Player == Global.LastBastion;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Clear Status(Event Player, Hacked);
  • Clear Status(Event Player, Stunned);
  • Clear Status(Event Player, Asleep);
  • Clear Status(Event Player, Frozen);
  • Clear Status(Event Player, Knocked Down);
  • Clear Status(Event Player, Burning);
  • "every 4 tick"
  • Wait(0.064, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot Ana Heal Grenade")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Ana;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 2)) <= 0;
  • Event Player.BotAlly != Null;
  • Normalized Health(Event Player.BotAlly) <= 0.500;
  • Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Eye Position(
  • Event Player.BotAlly))) <= 2;
  • Distance Between(Eye Position(Event Player), Eye Position(Event Player.BotAlly)) <= 10;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 2));
  • }
  • }
  • rule("Bot Ana Shot Checker")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Ana;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • If(Event Player.TargetEnemy != Null || Event Player.BotAlly != Null);
  • Skip If(Is Firing Primary(Event Player) == True, 2);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Else;
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • End;
  • Wait(1, Abort When False);
  • Loop;
  • }
  • }
  • rule("Disable Music")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Match Time > 10;
  • }
  • actions
  • {
  • Disable Built-In Game Mode Music;
  • }
  • }
  • rule("Enable Music")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Match Time <= 10;
  • }
  • actions
  • {
  • Enable Built-In Game Mode Music;
  • }
  • }
  • rule("Bot Ana Sleep Dart")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Ana;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Health(Event Player) < Max Health(Event Player);
  • Ability Cooldown(Event Player, Button(Ability 1)) <= 0;
  • Event Player.TargetEnemy != Null;
  • Event Player.BotAlly == Null;
  • Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Eye Position(
  • Event Player.TargetEnemy))) <= 2;
  • Distance Between(Eye Position(Event Player), Eye Position(Event Player.TargetEnemy)) <= 10;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("Junkrat Trap")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 1;
  • Junkrat;
  • }
  • conditions
  • {
  • Event Ability == Button(Ability 2);
  • Victim != Null;
  • Is Alive(Victim) == True;
  • }
  • actions
  • {
  • Set Status(Victim, Event Player, Knocked Down, 10);
  • Heal(Victim, Null, Max Health(Victim));
  • Wait(10, Ignore Condition);
  • Damage(Victim, Event Player, Max Health(Victim) / 2);
  • }
  • }
  • rule("Destroy Bot (Team 1)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Count Of(All Players(Team 1)) > 7;
  • }
  • actions
  • {
  • Wait(Random Real(0.256, 0.512), Abort When False);
  • Destroy Dummy Bot(Team 1, Slot Of(Random Value In Array(Filtered Array(All Players(Team 1), Is Dummy Bot(Current Array Element)
  • && Global.ANA != Current Array Element))));
  • Loop If Condition Is True;
  • }
  • }
  • rule("Health Upgrade")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == False;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Is Button Held(Event Player, Button(Crouch)) == False;
  • Event Player.Money >= 75;
  • Match Time > 0;
  • }
  • actions
  • {
  • Event Player.HealthValue += 10;
  • Event Player.Money -= 75;
  • Small Message(Event Player, Custom String("%10 More Health"));
  • Wait(0.500, Ignore Condition);
  • }
  • }
  • rule("Health Upgrade For Bots")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.Money >= 75;
  • Event Player.HealthValue <= Event Player.DamageValue;
  • Event Player != Global.ANA;
  • }
  • actions
  • {
  • Event Player.HealthValue += 10;
  • Event Player.Money -= 75;
  • Small Message(Event Player, Custom String("%10 More Health"));
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Damage Upgrade")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == False;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Is Button Held(Event Player, Button(Crouch)) == True;
  • Event Player.Money >= 125;
  • Match Time > 0;
  • }
  • actions
  • {
  • Event Player.DamageValue += 10;
  • Event Player.Money -= 125;
  • Small Message(Event Player, Custom String("%10 More Damage"));
  • Wait(0.500, Ignore Condition);
  • }
  • }
  • rule("Damage Upgrade For Bots")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.Money >= 125;
  • Event Player.HealthValue > Event Player.DamageValue;
  • Event Player != Global.ANA;
  • }
  • actions
  • {
  • Event Player.DamageValue += 10;
  • Event Player.Money -= 125;
  • Small Message(Event Player, Custom String("%10 More Damage"));
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Force Hero For AFK Players")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Event Player.AFKBOT == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player != Global.ANA;
  • Hero Of(Event Player) != Hero(Bastion);
  • Is Dummy Bot(Event Player) == False;
  • }
  • actions
  • {
  • Start Forcing Player To Be Hero(Event Player, Hero(Bastion));
  • }
  • }
  • rule("Disable AFK Mode")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Event Player.AFKBOT == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Is Dummy Bot(Event Player) == False;
  • }
  • actions
  • {
  • Event Player.AFKBOT = False;
  • Stop Forcing Player To Be Hero(Event Player);
  • Stop Facing(Event Player);
  • Stop Throttle In Direction(Event Player);
  • Small Message(Event Player, Custom String("WELL COME TO BACK!"));
  • }
  • }
  • rule("Enable AFK Mode")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Event Player.AFKBOT == False;
  • Is Dummy Bot(Event Player) == False;
  • Is Button Held(Event Player, Button(Interact)) == False;
  • Is Button Held(Event Player, Button(Primary Fire)) == False;
  • Is Button Held(Event Player, Button(Secondary Fire)) == False;
  • Is Button Held(Event Player, Button(Ability 1)) == False;
  • Is Button Held(Event Player, Button(Ability 2)) == False;
  • Is Button Held(Event Player, Button(Ultimate)) == False;
  • Is Button Held(Event Player, Button(Jump)) == False;
  • Is Button Held(Event Player, Button(Crouch)) == False;
  • Is Button Held(Event Player, Button(Melee)) == False;
  • Is Button Held(Event Player, Button(Reload)) == False;
  • Is Communicating Any(Event Player) == False;
  • Global.ControlAFK == True;
  • }
  • actions
  • {
  • Wait(30, Abort When False);
  • Event Player.AFKBOT = True;
  • }
  • }
  • rule("Anti Bot Stuck")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.TargetEnemy == Null;
  • }
  • actions
  • {
  • Wait(30, Abort When False);
  • Respawn(Event Player);
  • }
  • }
  • rule("AFK Alert")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Event Player.AFKBOT == True;
  • Is Dummy Bot(Event Player) == False;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("YOU ARE AFK | PRESS {0} FOR DISABLE AFK MODE!", Button(Interact)));
  • Wait(2, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("LastAttacker")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • All;
  • }
  • conditions
  • {
  • Attacker != Null;
  • Attacker != Event Player;
  • }
  • actions
  • {
  • Event Player.LastAttacker = Attacker;
  • }
  • }
  • rule("Nodes - Paris")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Wait(0.016, Ignore Condition);
  • If(Current Map == Map(Paris));
  • Global.Nodes = Array(Vector(-70.838, 10.355, -32.663), Vector(-86.178, 10.163, -24.423), Vector(-90.843, 11.321, -32.015), Vector(
  • -104.660, 11.287, -39.436), Vector(-108.570, 12.500, -48.839), Vector(-106.227, 12.528, -43.465), Vector(-113.100, 11.515,
  • -32.379), Vector(-108.741, 11.297, -35.352), Vector(-113.795, 11.360, -43.354), Vector(-118.129, 11.276, -41.580), Vector(
  • -124.839, 10.500, -57.145), Vector(-114.533, 10.500, -62.341), Vector(-105.923, 10.500, -58.795), Vector(-103.496, 12.528,
  • -53.811), Vector(-97.669, 12.500, -52.194), Vector(-85.284, 12.500, -64.516), Vector(-99.749, 12.500, -57.468), Vector(-75.312,
  • 13.500, -69.314), Vector(-61.816, 13.500, -77.540), Vector(-58.885, 11.500, -69.636), Vector(-54.602, 11.472, -61.938), Vector(
  • -64.560, 11.342, -59.833), Vector(-64.390, 11.500, -66.315), Vector(-70.131, 11.408, -54.871), Vector(-78.537, 10.357,
  • -48.189), Vector(-82.155, 12.500, -56.323), Vector(-92.081, 12.500, -75.745), Vector(-83.880, 10.505, -36.821), Vector(-88.464,
  • 11.409, -46.823), Vector(-80.264, 10.501, -31.357), Vector(-73.481, 10.517, -38.424), Vector(-57.372, 10.410, -40.577), Vector(
  • -65.186, 10.503, -40.530), Vector(-66.457, 10.505, -46.962), Vector(-55.282, 9.498, -54.102), Vector(-44.904, 9.580, -52.980),
  • Vector(-50.326, 11.532, -68.107), Vector(-58.799, 13.500, -85.071), Vector(-61.451, 15.528, -89.705), Vector(-77.344, 15.500,
  • -94.779), Vector(-78.362, 15.500, -87.272), Vector(-82.719, 13.500, -102.995), Vector(-93.079, 12.500, -97.431), Vector(
  • -85.696, 13.500, -94.565), Vector(-89.703, 12.595, -91.396), Vector(-104.511, 12.600, -84.868), Vector(-110.730, 13.500,
  • -82.468), Vector(-121.340, 13.500, -82.082), Vector(-115.388, 10.500, -72.623), Vector(-119.729, 13.206, -79.847), Vector(
  • -107.512, 12.528, -76.919), Vector(-109.109, 10.500, -69.422), Vector(-105.140, 12.528, -71.517), Vector(-122.419, 10.500,
  • -68.629), Vector(-121.386, 10.501, -71.813), Vector(-116.100, 13.500, -94.862), Vector(-107.267, 15.528, -98.855), Vector(
  • -100.400, 15.528, -102.407), Vector(-102.328, 15.500, -96.912), Vector(-89.790, 13.500, -106.775), Vector(-80.873, 12.500,
  • -75.282), Vector(-86.227, 12.600, -80.154), Vector(-98.533, 12.500, -89.556), Vector(-99.077, 12.500, -70.121), Vector(-71.867,
  • 13.500, -79.503), Vector(-69.366, 13.500, -72.598), Vector(-112.169, 10.545, -51.575));
  • Global.ANAPOSITION = Nearest Walkable Position(Vector(-98.617, 13.608, -89.651));
  • End;
  • }
  • }
  • rule("Nodes - Hollywood")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Wait(0.016, Ignore Condition);
  • If((Current Map == Map(Hollywood) || Current Map == Map(Hollywood Halloween)) == True);
  • Global.Nodes = Array(Vector(49.138, 3.250, -49.812), Vector(45.311, 3.250, -64.615), Vector(36.125, 3.250, -62.423), Vector(31.678,
  • 3.250, -57.997), Vector(36.730, 3.250, -43.516), Vector(37.744, 3.250, -31.175), Vector(32.675, 2.249, -30.996), Vector(24.812,
  • 2.248, -36.266), Vector(15.948, 2.250, -38.762), Vector(14.123, 2.406, -31.663), Vector(32.339, 3.250, -54.931), Vector(27.316,
  • 3.281, -53.417), Vector(24.854, 2.104, -65.729), Vector(35.016, 2.248, -67.463), Vector(32.588, 2.106, -89.037), Vector(15.500,
  • 2.106, -82.709), Vector(23.091, 2.125, -90.027), Vector(-0.674, 2.104, -79.101), Vector(6.819, 2.500, -67.171), Vector(2.851,
  • 2.500, -66.171), Vector(12.689, 2.505, -56.814), Vector(5.065, 2.500, -59.922), Vector(-2.930, 2.500, -55.914), Vector(-1.313,
  • 2.104, -48.538), Vector(-8.944, 2.228, -53.218), Vector(-7.060, 2.473, -58.554), Vector(-11.573, 2.229, -66.326), Vector(
  • -19.410, 2.229, -75.563), Vector(-27.903, 6.250, -43.723), Vector(-21.424, 6.250, -38.379), Vector(-21.280, 6.251, -44.170),
  • Vector(-14.810, 4.181, -44.799), Vector(-20.331, 6.251, -62.112), Vector(-2.701, 2.104, -37.394), Vector(11.521, 2.104,
  • -48.413), Vector(19.706, 2.110, -45.153), Vector(11.043, 3, -42.254), Vector(-3.752, 2.104, -12.032), Vector(4.653, 2.104,
  • -19.226), Vector(14.295, 2.112, -21.917), Vector(14.591, 2.250, -10.411), Vector(3.514, 2.250, -4.146), Vector(7.331, 3.357,
  • -23.820), Vector(2.845, 4.231, -22.891), Vector(6.604, 6.325, -27.408), Vector(2.801, 6.231, -27.794), Vector(2.167, 6.254,
  • -32.926), Vector(18.451, 2.104, -73.127), Vector(25.236, 2.358, -77.062), Vector(26.443, 2.358, -81.021), Vector(33.910, 2.104,
  • -83.866), Vector(40.484, 2.104, -72.297), Vector(15.910, 2.104, -70.328), Vector(-4.912, 4.500, -65.449), Vector(2.207, 6.501,
  • -67.252), Vector(6.802, 6.501, -68.415), Vector(1.818, 2.104, -38.960), Vector(13.852, 11.313, -31.930), Vector(8.600, 11.250,
  • -33.495), Vector(4.590, 11.250, -33.273), Vector(8.446, 13.337, -37.878), Vector(7.056, 13.335, -58.681), Vector(-7.034,
  • 10.770, -58.680), Vector(5.208, 11.510, -63.343));
  • Global.ANAPOSITION = Nearest Walkable Position(Vector(-0.535, 2.805, -80.968));
  • End;
  • }
  • }
  • rule("Nodes - Kings Row")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Wait(0.016, Ignore Condition);
  • If((Current Map == Map(King's Row) || Current Map == Map(King's Row Winter)) == True);
  • Global.Nodes = Array(Vector(-39.516, 0.563, -34.793), Vector(-37.166, 2.486, -42.221), Vector(-39.441, 2.500, -52.189), Vector(
  • -48.921, 2.500, -49.146), Vector(-49.196, 0.591, -43.266), Vector(-55.571, 0.282, -42.629), Vector(-54.025, 0.229, -35.096),
  • Vector(-45.814, 0.441, -19.600), Vector(-44.519, 0.521, -24.054), Vector(-34.854, 0.357, -24.079), Vector(-64.999, 0.173,
  • -29.232), Vector(-71.929, 1, -32.409), Vector(-80.654, 3, -31.896), Vector(-75.607, 5, -27.718), Vector(-71.885, 5, -35.489),
  • Vector(-81.638, 5, -38.880), Vector(-85.843, 1.363, -27.889), Vector(-87.804, 1.078, -36.470), Vector(-82.028, 0.768, -45.710),
  • Vector(-71.411, 0.834, -41.563), Vector(-62.563, 0.683, -49.075), Vector(-69.242, 1.004, -51.512), Vector(-88.231, -0.996,
  • -59.255), Vector(-95.335, -1.996, -48.207), Vector(-99.831, -0.003, -37.539), Vector(-99.263, 0.004, -31.168), Vector(-95.146,
  • 2.003, -29.770), Vector(-70.856, 0.251, -21.635), Vector(-72.017, 0.308, -13.887), Vector(-64.175, 0.521, -12.353), Vector(
  • -65.302, 0.421, -8.951), Vector(-71.926, 0.301, -6.809), Vector(-61.429, 3.500, -4.358), Vector(-59.382, 5.520, -10.979),
  • Vector(-67.225, 5.520, -13.384), Vector(-76.729, 6.500, -15.037), Vector(-78.483, 6.500, -6.595), Vector(-84.220, 6.500,
  • -7.529), Vector(-82.936, 6.673, -16.252), Vector(-85.913, 7.438, -16.688), Vector(-87.987, 7.429, -6.147), Vector(-56.345,
  • 5.500, -11.576), Vector(-46.719, 1.498, -8.856), Vector(-48.057, 0.500, -2.584), Vector(-61.239, 0.500, 4.367), Vector(-72.360,
  • 0.287, -1.587), Vector(-77.073, 0.521, 1.222), Vector(-86.499, 1.552, 5.029), Vector(-92.020, 1.414, -6.158), Vector(-96.781,
  • 1.433, -14.785), Vector(-84.914, 1.104, -22.250), Vector(-63.845, 0.392, -17.914), Vector(-57.463, 5.456, -17.005), Vector(
  • -37.734, 9.500, -16.595), Vector(-34.786, 9.500, -34.217), Vector(-31.257, 6.500, -50.057), Vector(-33.181, 9.500, -39.777),
  • Vector(-41.722, 0.363, -27.262), Vector(-53.401, 0.441, -22.591), Vector(-55.588, 0.441, -29.329), Vector(-62.672, 0.164,
  • -25.967));
  • Global.ANAPOSITION = Nearest Walkable Position(Vector(-96.433, 2.325, -9.099));
  • End;
  • }
  • }
  • rule("Nodes - Temple of Anubis")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Wait(0.016, Ignore Condition);
  • If(Current Map == Map(Temple of Anubis));
  • Global.Nodes = Array(Vector(-7.497, 5.164, 108.875), Vector(-13.253, 4.478, 122.616), Vector(-0.246, 4.749, 122.060), Vector(
  • -9.521, 5.163, 82.447), Vector(-8.471, 5.241, 96.360), Vector(-24.001, 5.163, 96.278), Vector(-26.983, 5.160, 78.467), Vector(
  • -10.470, 4.491, 75.038), Vector(8.007, 4.912, 114.830), Vector(10.444, 4.951, 129.069), Vector(19.113, 4.939, 111.214), Vector(
  • 11.514, 4.862, 105.567), Vector(13.063, 1, 98.695), Vector(16.897, 2.897, 89.940), Vector(16.555, 2.899, 102.230), Vector(
  • -23.673, 5.165, 116.303), Vector(-27.378, 4.840, 126.180), Vector(-28.003, 5.068, 117.461), Vector(-34.191, 5.205, 123.369),
  • Vector(-20.268, 5.847, 126.830), Vector(-32.788, 5.195, 112.374), Vector(-21.302, 3.268, 103.151), Vector(-20.359, 5.178,
  • 112.227), Vector(-14.308, 2.218, 102.354), Vector(-1.144, 1.045, 100.686), Vector(-0.252, 1.165, 95.412), Vector(5.371, 1.148,
  • 94.602), Vector(5.796, 1.143, 99.349), Vector(4.957, 3.116, 87.825), Vector(-9.448, 5.155, 86.604), Vector(-16.243, 5.164,
  • 85.947), Vector(6.943, 4.107, 67.624), Vector(6.630, 4.073, 74.688), Vector(5.673, 4.752, 80.353), Vector(5.880, 5, 55.424),
  • Vector(-2.212, 6, 56.223), Vector(12.292, 4.041, 60.529), Vector(7.674, 4.031, 61.961), Vector(-10.691, 4.418, 71.433), Vector(
  • -11.144, 1.916, 61.383), Vector(-27.613, 1.862, 41.073), Vector(-20.512, 1.837, 52.553), Vector(-31.381, 1.971, 63.590),
  • Vector(-28.934, 1.997, 72.873), Vector(-21.695, 2.035, 72.919), Vector(-15.724, 4.491, 74.376), Vector(-23.505, 2.010, 63.427),
  • Vector(-16.036, 1.800, 56.672), Vector(-37.655, 2.023, 74.349), Vector(-39.093, 2.001, 62.889), Vector(-33.990, 2.001, 60.727),
  • Vector(-40.032, 5.966, 61.955), Vector(-46.841, 1.998, 54.171), Vector(-43.663, 2.039, 52.916), Vector(-39.200, 2, 55.542),
  • Vector(-33.526, 2.492, 49.183), Vector(-39.367, 2.034, 43.446), Vector(-36.002, 1.914, 36.088), Vector(-52.939, 2.002, 44.229),
  • Vector(-63.229, 2.020, 47.107), Vector(-56.292, 2.020, 53.797), Vector(-41.549, 2.012, 34.101), Vector(-37.368, 6.009, 26.873),
  • Vector(-32.662, 7.009, 28.105), Vector(-39.851, 6.009, 21.274), Vector(-42.161, 6.009, 14.672), Vector(-38.277, 5.511, 14.553),
  • Vector(-29.132, 1.969, 20.897), Vector(-24.662, 1.009, 14.234), Vector(-16.621, 1.348, 18.895), Vector(-10.194, 1.498, 22.098),
  • Vector(-7.599, 1.609, 17.526), Vector(0.707, 1.342, 28.772), Vector(-1.979, 3.009, 40.652), Vector(-10.529, 4.846, 42.815),
  • Vector(-9.873, 4.196, 44.531), Vector(-19.293, 5.009, 36.105), Vector(-30.911, 2.030, 43.410), Vector(-49.601, 8.010, 7.194),
  • Vector(-51.339, 8.010, 12.317), Vector(-46.300, 10.009, 14.835), Vector(-43.891, 10.009, 23.845), Vector(-53.775, 10.009,
  • 27.398), Vector(-49.350, 10.009, 35.337), Vector(-62.081, 7.009, 43.458), Vector(1.262, 5.266, 106.271), Vector(-2.984, 5.153,
  • 114.998), Vector(-10.140, 5.171, 113.780), Vector(-14.798, 5.009, 41.246), Vector(-21.658, 5.010, 38.844), Vector(-12.009,
  • 5.011, 41.839), Vector(-14.799, 5.021, 43.226), Vector(-35.304, 6.168, 65.771));
  • Global.ANAPOSITION = Nearest Walkable Position(Vector(-7.582, 5.838, 110.156));
  • End;
  • }
  • }
  • rule("Node Creator")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.DeveloperMode == True;
  • Event Player == Host Player;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • }
  • actions
  • {
  • Modify Global Variable(Nodes, Append To Array, Position Of(Event Player) + Vector(0, 0.500, 0));
  • Create Effect(All Players(All Teams), Sphere, Color(Blue), Position Of(Event Player) + Vector(0, 0.500, 0), 0.500, Visible To);
  • }
  • }
  • rule("Air Strike Effect")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 2;
  • Doomfist;
  • }
  • conditions
  • {
  • Event Ability != Button(Primary Fire);
  • Victim != Null;
  • Is Alive(Victim) == True;
  • Victim != Global.ANA;
  • }
  • actions
  • {
  • Set Status(Victim, Event Player, Knocked Down, 1);
  • Set Facing(Victim, Direction Towards(Eye Position(Victim), Eye Position(Event Player)), To World);
  • }
  • }
  • rule("Bot Teleport")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 1;
  • Ana;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • Event Player == Global.ANA;
  • Count Of(Filtered Array(All Living Players(Team Of(Event Player)), Is In Line of Sight(Eye Position(Event Player), Eye Position(
  • Current Array Element), Barriers Do Not Block LOS) == True && Event Player != Current Array Element && Has Spawned(
  • Current Array Element) && Is Dummy Bot(Current Array Element))) <= 0;
  • }
  • actions
  • {
  • Teleport(Filtered Array(All Living Players(Team Of(Event Player)), Event Player != Current Array Element && Is Dummy Bot(
  • Current Array Element)), Nearest Walkable Position(Global.ANA));
  • }
  • }
  • rule("Destroy Omnic")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Match Time > 0;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Knocked Down, 3);
  • Destroy Effect(Event Player.PlayerEffect);
  • Wait(1, Ignore Condition);
  • Skip If(Global.LastBastion == Event Player, 1);
  • Destroy Dummy Bot(Team 2, Slot Of(Event Player));
  • }
  • }
  • rule("Bot Bastion Ultimate")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Bastion;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Ultimate Charge Percent(Event Player) >= 100;
  • Event Player.IsTank == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ultimate));
  • }
  • }
  • rule("Set Omnic Bastion Status 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Bastion;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.IsTank == True;
  • Ultimate Charge Percent(Event Player) < 100;
  • Is Using Ultimate(Event Player) == False;
  • }
  • actions
  • {
  • Stop Scaling Player(Event Player);
  • Set Knockback Dealt(Event Player, 50);
  • Start Forcing Dummy Bot Name(Event Player, Custom String("TANK"));
  • Set Ultimate Charge(Event Player, 100);
  • Stop Modifying Hero Voice Lines(Event Player);
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Genji Stun")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 2;
  • Genji;
  • }
  • conditions
  • {
  • Event Ability == Button(Ability 1);
  • Victim != Null;
  • Is Alive(Victim) == True;
  • Victim != Global.ANA;
  • }
  • actions
  • {
  • Set Status(Victim, Event Player, Stunned, 1);
  • }
  • }
  • rule("Genji Stun 2")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 2;
  • Genji;
  • }
  • conditions
  • {
  • Event Ability == Button(Ultimate);
  • Victim != Null;
  • Is Alive(Victim) == True;
  • Victim != Global.ANA;
  • }
  • actions
  • {
  • Set Status(Victim, Event Player, Stunned, 0.500);
  • }
  • }
  • rule("Challenge: Nanoboost")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Global.Mission == 1;
  • Random Integer(1, 3) == 1;
  • }
  • actions
  • {
  • Set Damage Dealt(Event Player, Global.OmnicDamage * 1.500);
  • Set Damage Received(Event Player, 50);
  • Create Effect(All Players(All Teams), Ana Nano Boosted Effect, Color(White), Event Player, 1, Visible To Position and Radius);
  • Event Player.PlayerEffect = Last Created Entity;
  • Wait(3, Ignore Condition);
  • }
  • }
  • rule("Challenge: Rage")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Global.Mission == 2;
  • Random Integer(1, 3) == 1;
  • Event Player != Global.LastBastion;
  • }
  • actions
  • {
  • Set Max Health(Event Player, Global.OmnicHealth * 2);
  • Create Effect(All Players(All Teams), Winston Primal Rage Effect, Color(White), Event Player, 1, Visible To Position and Radius);
  • Event Player.PlayerEffect = Last Created Entity;
  • Wait(3, Ignore Condition);
  • }
  • }
  • rule("Challenge: Health Boost")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Global.Mission == 3;
  • Random Integer(1, 3) == 1;
  • }
  • actions
  • {
  • Set Healing Received(Event Player, 300);
  • Create Effect(All Players(All Teams), Ana Biotic Grenade Increased Healing Effect, Color(White), Event Player, 1,
  • Visible To Position and Radius);
  • Event Player.PlayerEffect = Last Created Entity;
  • Wait(3, Ignore Condition);
  • }
  • }
  • rule("Challenge: Overload")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Global.Mission == 4;
  • Random Integer(1, 3) == 1;
  • }
  • actions
  • {
  • Add Health Pool To Player(Event Player, Armor, Global.OmnicHealth, True, True);
  • Set Move Speed(Event Player, 150);
  • Create Effect(All Players(All Teams), Torbjörn Overloading Effect, Color(White), Event Player, 1, Visible To Position and Radius);
  • Event Player.PlayerEffect = Last Created Entity;
  • Wait(3, Ignore Condition);
  • }
  • }
  • rule("Set Bot Heroes")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.BotHeroes = Empty Array;
  • Wait(0.016, Ignore Condition);
  • Modify Global Variable(BotHeroes, Append To Array, Hero(Bastion));
  • Modify Global Variable(BotHeroes, Append To Array, Hero(McCree));
  • Modify Global Variable(BotHeroes, Append To Array, Hero(Roadhog));
  • Modify Global Variable(BotHeroes, Append To Array, Hero(Lúcio));
  • Modify Global Variable(BotHeroes, Append To Array, Hero(Junkrat));
  • Modify Global Variable(BotHeroes, Append To Array, Hero(Reinhardt));
  • Modify Global Variable(BotHeroes, Append To Array, Hero(Echo));
  • }
  • }
  • rule("Create Bots")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Count Of(All Players(Team 1)) < 7;
  • Global.DeveloperMode == False;
  • Global.AllowHelperBots == True;
  • }
  • actions
  • {
  • Wait(0.250, Abort When False);
  • If(Global.OnlyBastionBots);
  • Create Dummy Bot(Hero(Bastion), Team 1, -1, Nearest Walkable Position(Global.ANA), Vector(0, 0, 0));
  • Else;
  • Create Dummy Bot(Random Value In Array(Filtered Array(Global.BotHeroes, Is Hero Being Played(Current Array Element, Team 1)
  • == False)), Team 1, -1, Nearest Walkable Position(Global.ANA), Vector(0, 0, 0));
  • End;
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot McCree Ability1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • McCree;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 1)) <= 0;
  • Event Player.TargetEnemy != Null;
  • Is Reloading(Event Player) == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("Bot McCree Ability2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • McCree;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 2)) <= 0;
  • Event Player.TargetEnemy != Null;
  • Distance Between(Eye Position(Event Player), Eye Position(Event Player.TargetEnemy)) <= 4;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 2));
  • }
  • }
  • rule("Bot McCree Ultimate")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • McCree;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Ultimate Charge Percent(Event Player) >= 100;
  • Event Player.TargetEnemy != Null;
  • Distance Between(Eye Position(Event Player), Eye Position(Event Player.TargetEnemy)) > 10;
  • Normalized Health(Event Player) > 0.600;
  • Count Of(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Distance Between(Eye Position(Event Player),
  • Eye Position(Current Array Element)) <= 20)) >= 5;
  • }
  • actions
  • {
  • Skip If(Global.LastBastion != Null, 1);
  • Set Damage Dealt(Event Player, Event Player.DamageValue * 10);
  • Set Status(Event Player, Null, Phased Out, 3);
  • Press Button(Event Player, Button(Ultimate));
  • Wait(Random Real(2, 3), Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Press Button(Event Player, Button(Primary Fire));
  • Set Max Health(Event Player, Event Player.HealthValue);
  • Wait(3, Ignore Condition);
  • Set Damage Dealt(Event Player, Event Player.DamageValue);
  • }
  • }
  • rule("Bot Lucio Ability1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Lúcio;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • If(Is Using Ability 1(Event Player) && Event Player.BotAlly != Null);
  • Press Button(Event Player, Button(Ability 1));
  • Else If(Event Player.BotAlly == Null && !Is Using Ability 1(Event Player));
  • Press Button(Event Player, Button(Ability 1));
  • End;
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot Lucio Ability2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Lúcio;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.BotAlly != Null;
  • Ability Cooldown(Event Player, Button(Ability 2)) <= 0;
  • Normalized Health(Event Player.BotAlly) < 0.500;
  • Is Using Ability 1(Event Player) == False;
  • Distance Between(Eye Position(Event Player), Eye Position(Event Player.BotAlly)) <= 10;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 2));
  • }
  • }
  • rule("Bot Lucio Ultimate")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Lúcio;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Normalized Health(Event Player) < 0.500;
  • Event Player.TargetEnemy != Null;
  • Ultimate Charge Percent(Event Player) >= 100;
  • }
  • actions
  • {
  • Skip If(Global.LastBastion != Null, 1);
  • Set Damage Dealt(Event Player, Event Player.DamageValue * 10);
  • Set Status(Event Player, Null, Phased Out, 3);
  • Press Button(Event Player, Button(Ultimate));
  • Wait(3, Ignore Condition);
  • Set Damage Dealt(Event Player, Event Player.DamageValue);
  • }
  • }
  • rule("Bot Lucio Secondary Fire")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Lúcio;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Secondary Fire)) <= 0;
  • Event Player.TargetEnemy != Null;
  • Distance Between(Eye Position(Event Player), Eye Position(Event Player.TargetEnemy)) <= 4;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Bot Lucio Jump")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Lúcio;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Is On Ground(Event Player) == True;
  • Event Player.TargetEnemy != Null;
  • }
  • actions
  • {
  • Skip If(Is On Wall(Event Player), 1);
  • Start Holding Button(Event Player, Button(Jump));
  • Wait(0.250, Ignore Condition);
  • Skip If(Is On Wall(Event Player), 1);
  • Stop Holding Button(Event Player, Button(Jump));
  • }
  • }
  • rule("Bot Roadhog Ability1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Roadhog;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 1)) <= 0;
  • Event Player.TargetEnemy != Null;
  • Distance Between(Eye Position(Event Player), Eye Position(Event Player.TargetEnemy)) <= 10;
  • Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Eye Position(
  • Event Player.TargetEnemy))) <= 2;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("Bot Roadhog Ability2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Roadhog;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 2)) <= 0;
  • Normalized Health(Event Player) < 0.500;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 2));
  • }
  • }
  • rule("Bot Roadhog Ultimate")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Roadhog;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Ultimate Charge Percent(Event Player) >= 100;
  • Event Player.TargetEnemy != Null;
  • Distance Between(Eye Position(Event Player), Eye Position(Event Player.TargetEnemy)) <= 6;
  • Count Of(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Distance Between(Eye Position(Event Player),
  • Eye Position(Current Array Element)) <= 6)) >= 4;
  • Normalized Health(Event Player) > 0.500;
  • }
  • actions
  • {
  • Skip If(Global.LastBastion != Null, 1);
  • Set Damage Dealt(Event Player, Event Player.DamageValue * 10);
  • Set Status(Event Player, Null, Phased Out, 3);
  • Press Button(Event Player, Button(Ultimate));
  • Wait(3, Ignore Condition);
  • Set Damage Dealt(Event Player, Event Player.DamageValue);
  • }
  • }
  • rule("Bot Bastion Repair")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • If(Event Player.TargetEnemy != Null);
  • If(Normalized Health(Event Player) < 0.500);
  • Skip If(Is Button Held(Event Player, Button(Secondary Fire)) == True, 1);
  • Set Ability Resource(Event Player, Button(Secondary Fire), 100);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Else;
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • End;
  • Else;
  • If(Normalized Health(Event Player) < 1);
  • Skip If(Is Button Held(Event Player, Button(Secondary Fire)) == True, 1);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Else;
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • End;
  • End;
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot Bastion Enable Turret")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.TargetEnemy != Null;
  • Distance Between(Eye Position(Event Player), Eye Position(Event Player.TargetEnemy)) >= 10;
  • Is In Alternate Form(Event Player) == False;
  • Event Player.StartHiding == False;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("Bot Bastion Disable Turret")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.TargetEnemy == Null;
  • Is In Alternate Form(Event Player) == True;
  • }
  • actions
  • {
  • Wait(10, Abort When False);
  • Press Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("Bot Bastion Disable Turret")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.TargetEnemy != Null;
  • Is In Alternate Form(Event Player) == True;
  • Normalized Health(Event Player) < 0.500;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • Event Player.StartHiding = True;
  • }
  • }
  • rule("Bot Bastion Disable Turret")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.StartHiding == True;
  • Is In Alternate Form(Event Player) == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("Bot Bastion Disable Turret")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Bastion;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.TargetEnemy != Null;
  • Distance Between(Eye Position(Event Player), Eye Position(Event Player.TargetEnemy)) < 10;
  • Is In Alternate Form(Event Player) == True;
  • }
  • actions
  • {
  • Clear Status(Event Player, Rooted);
  • Press Button(Event Player, Button(Ability 1));
  • Event Player.StartHiding = True;
  • Wait(0.250, Abort When False);
  • Loop;
  • }
  • }
  • rule("Bot Bastion Start Hiding (Team 1)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Bastion;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.TargetEnemy != Null;
  • Normalized Health(Event Player) <= 0.500;
  • }
  • actions
  • {
  • Event Player.StartHiding = True;
  • Wait(0.250, Abort When False);
  • Loop;
  • }
  • }
  • rule("Bot Bastion Start Hiding (Team 2)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Bastion;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.TargetEnemy != Null;
  • Normalized Health(Event Player) <= 0.800;
  • Event Player != Global.LastBastion;
  • }
  • actions
  • {
  • Clear Status(Event Player, Rooted);
  • Event Player.StartHiding = True;
  • Wait(0.250, Abort When False);
  • Loop;
  • }
  • }
  • rule("Bot Bastion Pathfinding")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.StartHiding == True;
  • }
  • actions
  • {
  • If(Event Player.TargetEnemy != Null);
  • Event Player.BestHidingNode = First Of(Sorted Array(Filtered Array(Global.Nodes, Is In Line of Sight(Eye Position(Event Player),
  • Position Of(Current Array Element), Barriers Do Not Block LOS) == False && Is In Line of Sight(Eye Position(
  • Event Player.TargetEnemy), Position Of(Current Array Element), Barriers Do Not Block LOS) == False && Array Contains(
  • Event Player.NodeBlacklist, Current Array Element) == False), Distance Between(Current Array Element, Event Player)));
  • Else;
  • Event Player.BestHidingNode = First Of(Sorted Array(Filtered Array(Global.Nodes, Is In Line of Sight(Eye Position(Event Player),
  • Position Of(Current Array Element), Barriers Do Not Block LOS) == False && Is In Line of Sight(Position Of(
  • Event Player.LastEnemySeenArea), Position Of(Current Array Element), Barriers Do Not Block LOS) == False && Array Contains(
  • Event Player.NodeBlacklist, Current Array Element) == False), Distance Between(Event Player, Current Array Element)));
  • End;
  • Event Player.TempNode = First Of(Sorted Array(Filtered Array(Global.Nodes, Is In Line of Sight(Eye Position(Event Player),
  • Position Of(Current Array Element), Barriers Do Not Block LOS) == True && Array Contains(Event Player.NodeBlacklist,
  • Current Array Element) == False), Distance Between(Current Array Element, Event Player.BestHidingNode)));
  • Event Player.BotMovePosition = Nearest Walkable Position(Event Player.TempNode);
  • Wait(0.750, Abort When False);
  • Loop;
  • }
  • }
  • rule("Bot Bastion Stop Hiding")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • disabled Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.StartHiding == True;
  • Is In Alternate Form(Event Player) == False;
  • Event Player.TargetEnemy == Null;
  • }
  • actions
  • {
  • Wait(2, Abort When False);
  • Set Status(Event Player, Null, Rooted, 5);
  • Event Player.StartHiding = False;
  • }
  • }
  • rule("Bot Bastion Force Stop Hiding")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.StartHiding == True;
  • Normalized Health(Event Player) >= 1;
  • }
  • actions
  • {
  • Clear Status(Event Player, Rooted);
  • Event Player.StartHiding = False;
  • }
  • }
  • rule("Bot Bastion Ultimate")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Bastion;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Ultimate Charge Percent(Event Player) >= 100;
  • Event Player.TargetEnemy != Null;
  • Distance Between(Eye Position(Event Player), Eye Position(Event Player.TargetEnemy)) <= 10;
  • Count Of(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Distance Between(Eye Position(Event Player),
  • Eye Position(Current Array Element)) <= 20)) >= 5;
  • Event Player.StartHiding == False;
  • }
  • actions
  • {
  • Skip If(Global.LastBastion != Null, 1);
  • Set Damage Dealt(Event Player, Event Player.DamageValue * 10);
  • Set Status(Event Player, Null, Phased Out, 3);
  • Press Button(Event Player, Button(Ultimate));
  • Wait(3, Ignore Condition);
  • Set Damage Dealt(Event Player, Event Player.DamageValue);
  • }
  • }
  • rule("Bot Genji Quick Dash")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Genji;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Has Status(Event Player, Hacked) == False;
  • Has Spawned(Event Player) == True;
  • Event Player.TargetEnemy != Null;
  • Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Eye Position(
  • Event Player.TargetEnemy))) <= 2;
  • Is Using Ability 1(Event Player) == False;
  • }
  • actions
  • {
  • Skip If(Event Player.BladeMode == False, 2);
  • Press Button(Event Player, Button(Ultimate));
  • Event Player.BattleRange = 2;
  • Set Ability Cooldown(Event Player, Button(Ability 1), 0);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.250, Abort When False);
  • Loop;
  • }
  • }
  • rule("Bot Genji Quick Dash 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Genji;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Has Status(Event Player, Hacked) == False;
  • Has Spawned(Event Player) == True;
  • Event Player.TargetEnemy != Null;
  • Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Position Of(
  • Event Player.TargetEnemy))) <= 2;
  • Is Using Ability 1(Event Player) == False;
  • }
  • actions
  • {
  • Skip If(Event Player.BladeMode == False, 2);
  • Press Button(Event Player, Button(Ultimate));
  • Event Player.BattleRange = 2;
  • Set Ability Cooldown(Event Player, Button(Ability 1), 0);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.250, Abort When False);
  • Loop;
  • }
  • }
  • rule("Bot Genji Dash Delay")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 2;
  • Genji;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • disabled Event Player.BladeMode == True;
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Has Status(Event Player, Hacked) == False;
  • Has Spawned(Event Player) == True;
  • Victim != Null;
  • Victim != Event Player;
  • Event Ability == Is Using Ability 1(Event Player);
  • Global.OldGenji == False;
  • }
  • actions
  • {
  • Disallow Button(Event Player, Button(Ability 1));
  • Wait(2, Ignore Condition);
  • Allow Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("Bot Genji Deflect")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Genji;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Has Status(Event Player, Hacked) == False;
  • Has Spawned(Event Player) == True;
  • Event Player.BladeMode == False;
  • Ability Cooldown(Event Player, Button(Ability 2)) <= 0;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 2));
  • Wait(0.250, Abort When False);
  • Loop;
  • }
  • }
  • rule("Bot Genji Attack")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Genji;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Has Status(Event Player, Hacked) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Is Using Ability 2(Event Player) == False;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot Orisa Ability 1")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 2;
  • Orisa;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 1)) <= 0;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("Bot Orisa Halt")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Orisa;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.TargetEnemy != Null;
  • Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Eye Position(
  • Event Player.TargetEnemy))) <= 2;
  • Ability Cooldown(Event Player, Button(Secondary Fire)) <= 0;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Secondary Fire));
  • Wait(0.083 * Distance Between(Eye Position(Event Player), Eye Position(Event Player.TargetEnemy)), Ignore Condition);
  • Press Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Bot Echo Sticky Bombs")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Echo;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.TargetEnemy != Null;
  • Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Eye Position(
  • Event Player.TargetEnemy))) <= 2;
  • Ability Cooldown(Event Player, Button(Secondary Fire)) <= 0;
  • Is Using Ability 1(Event Player) == False;
  • Is Using Ability 2(Event Player) == False;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Secondary Fire));
  • Skip If(Is Duplicating(Event Player) == True, 1);
  • Set Damage Received(Event Player, 100);
  • }
  • }
  • rule("Bot Echo Ability 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Echo;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.TargetEnemy != Null;
  • Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Eye Position(
  • Event Player.TargetEnemy))) <= 2;
  • Ability Cooldown(Event Player, Button(Ability 1)) <= 0;
  • Is Using Ability 1(Event Player) == False;
  • Is Using Ability 2(Event Player) == False;
  • }
  • actions
  • {
  • Skip If(Hero Being Duplicated(Event Player) == Hero(Bastion) && Is In Alternate Form(Event Player), 1);
  • Press Button(Event Player, Button(Ability 1));
  • Skip If(Is Duplicating(Event Player) == True, 1);
  • Set Damage Received(Event Player, 100);
  • }
  • }
  • rule("Bot Echo Ability 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Echo;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.TargetEnemy != Null;
  • Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Eye Position(
  • Event Player.TargetEnemy))) <= 2;
  • Ability Cooldown(Event Player, Button(Ability 2)) <= 0;
  • Is Using Ability 1(Event Player) == False;
  • Is Using Ability 2(Event Player) == False;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 2));
  • Skip If(Is Duplicating(Event Player) == True, 1);
  • Set Damage Received(Event Player, 100);
  • }
  • }
  • rule("Bot Echo Ultimate")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Echo;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.TargetEnemy != Null;
  • Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Eye Position(
  • Event Player.TargetEnemy))) <= 1;
  • Ultimate Charge Percent(Event Player) >= 100;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ultimate));
  • Set Damage Received(Event Player, 100 - (Global.Wave + Global.Difficulty) * 2);
  • }
  • }
  • rule("Bot Echo Ultimate 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Echo;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.TargetEnemy != Null;
  • Is Duplicating(Event Player) == True;
  • Ultimate Charge Percent(Event Player) >= 100;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ultimate));
  • Set Damage Received(Event Player, 100 - (Global.Wave + Global.Difficulty) * 2);
  • }
  • }
  • rule("Bot Junkrat Ability1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Junkrat;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 1)) <= 0;
  • Event Player.TargetEnemy != Null;
  • Distance Between(Eye Position(Event Player), Eye Position(Event Player.TargetEnemy)) <= 6;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.083 * Distance Between(Eye Position(Event Player), Eye Position(Event Player.TargetEnemy)), Ignore Condition);
  • Press Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Bot Junkrat Ability2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Junkrat;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 2)) <= 0;
  • Event Player.TargetEnemy != Null;
  • Is Using Ability 2(Event Player) == False;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 2));
  • }
  • }
  • rule("Bot Junkrat Ultimate")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Junkrat;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Ultimate Charge Percent(Event Player) >= 100;
  • Event Player.TargetEnemy != Null;
  • Distance Between(Eye Position(Event Player), Eye Position(Event Player.TargetEnemy)) > 6;
  • Count Of(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Distance Between(Eye Position(Event Player),
  • Eye Position(Current Array Element)) <= 20)) >= 5;
  • }
  • actions
  • {
  • Skip If(Global.LastBastion != Null, 1);
  • Set Damage Dealt(Event Player, Event Player.DamageValue * 10);
  • Set Status(Event Player, Null, Phased Out, 3);
  • Press Button(Event Player, Button(Ultimate));
  • Wait(0.083 * Distance Between(Eye Position(Event Player), Eye Position(Event Player.TargetEnemy)), Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Press Button(Event Player, Button(Primary Fire));
  • Set Max Health(Event Player, Event Player.HealthValue);
  • Set Damage Dealt(Event Player, Event Player.DamageValue);
  • Press Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Bot Reinhardt Ability1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reinhardt;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 1)) <= 0;
  • Event Player.TargetEnemy != Null;
  • Distance Between(Eye Position(Event Player), Eye Position(Event Player.TargetEnemy)) <= 12;
  • Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Eye Position(
  • Event Player.TargetEnemy))) <= 2;
  • Normalized Health(Event Player) > 0.400;
  • Y Component Of(Position Of(Event Player)) == Y Component Of(Position Of(Event Player.TargetEnemy));
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("Bot Reinhardt Ability2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reinhardt;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 2)) <= 0;
  • Distance Between(Eye Position(Event Player), Eye Position(Event Player.TargetEnemy)) > 5;
  • Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Eye Position(
  • Event Player.TargetEnemy))) <= 2;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 2));
  • }
  • }
  • rule("Bot Reinhardt Ultimate")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reinhardt;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Ultimate Charge Percent(Event Player) >= 100;
  • Event Player.TargetEnemy != Null;
  • Distance Between(Eye Position(Event Player), Eye Position(Event Player.TargetEnemy)) <= 6;
  • Count Of(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Distance Between(Eye Position(Event Player),
  • Eye Position(Current Array Element)) <= 6)) >= 4;
  • }
  • actions
  • {
  • Skip If(Global.LastBastion != Null, 1);
  • Set Damage Dealt(Event Player, Event Player.DamageValue * 10);
  • Set Status(Event Player, Null, Phased Out, 3);
  • Press Button(Event Player, Button(Ultimate));
  • Wait(3, Ignore Condition);
  • Set Damage Dealt(Event Player, Event Player.DamageValue);
  • }
  • }
  • rule("Bot Reinhardt Shield")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reinhardt;
  • }
  • conditions
  • {
  • Global.ServerLoadIsHigh == False;
  • (Is Dummy Bot(Event Player) || Event Player.AFKBOT) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • If(Event Player.TargetEnemy != Null && (Distance Between(Eye Position(Event Player), Eye Position(Event Player.TargetEnemy))
  • > 5 || Normalized Health(Event Player) <= 0.300));
  • Skip If(Is Firing Secondary(Event Player) == True, 1);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Else;
  • Event Player.BattleRange = 3;
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • End;
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot Aim")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • actions
  • {
  • Event Player.TurnSpeed = Random Real(200, 400);
  • }
  • }
Join the Workshop.codes Discord