Return to post
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);
}
}