Create
Return to post

Comparing difference between and

View raw
  • variables
  • {
  • global:
  • 0: HeroTable
  • 1: Range_Hero
  • 2: Range_Value
  • 3: SniperHeroes
  • 4: Difficulty
  • 13: NumberOfZombies
  • 14: ZombieCount
  • 16: DebugFlag
  • player:
  • 0: GoalPosition
  • 1: Enemy
  • 2: IsLookEnemy
  • 3: WalkTargetPlayer
  • 4: FarPositions
  • 5: BattleRange
  • 6: IsBattleWalk
  • 7: AimShakeDelays
  • 19: temp
  • }
  • rule("INIT: GAME SETTINGS")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Disable Inspector Recording;
  • Global.DebugFlag = True;
  • "0 = Normal / 1 = Hard / 2 = Legendary"
  • Global.Difficulty = Workshop Setting Combo(Custom String("Game Settings"), Custom String("Difficulty"), 0, Array(Custom String(
  • "Normal (25% Damage Taken)"), Custom String("Hard (50% Damage Taken)"), Custom String("Legendary (100% Damage Taken)")), 0);
  • Global.NumberOfZombies = Workshop Setting Integer(Custom String("Game Settings"), Custom String(
  • "Number Of Additional Zombie Bots (More Than 6 Might Crash The Game)"), 6, 1, 14, 1);
  • "Number Of Additional Zombie Bots (More Than 6 Might Crash The Game)"), 5, 1, 14, 1);
  • }
  • }
  • rule("INIT: GLOBAL")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.X = 0;
  • Global.Y = False;
  • Global.HeroTable = 0;
  • Global.I = 0;
  • }
  • }
  • rule("INIT: GLOBAL GAME START")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Set Objective Description(All Players(Team 1), Custom String("Stop The Zombie Car"), Visible To and String);
  • }
  • }
  • rule("INIT: SPAWN BOTS")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Is In Setup == True;
  • }
  • actions
  • {
  • Destroy All Dummy Bots;
  • Global.ZombieCount = Global.NumberOfZombies;
  • While(Global.ZombieCount != 0);
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Position Of(Spawn Points(Team 2)), Vector(0, 0, 0));
  • Global.ZombieCount = Global.ZombieCount - 1;
  • Wait(0.250, Ignore Condition);
  • End;
  • }
  • }
  • rule("INIT: SPAWN BOTS (Waiting)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.ZombieCount = Global.NumberOfZombies;
  • While(Global.ZombieCount != 0);
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Global.ZombieCount = Global.ZombieCount - 1;
  • Wait(0.250, Ignore Condition);
  • End;
  • }
  • }
  • rule("Start Game If >= 4 Players")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Number Of Players(Team 1) >= 4;
  • Is Game In Progress == False;
  • }
  • actions
  • {
  • Start Game Mode;
  • }
  • }
  • rule("Assemble Time")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Assembling Heroes == True;
  • }
  • actions
  • {
  • Set Match Time(10);
  • }
  • }
  • rule("Setup Time")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is In Setup == True;
  • }
  • actions
  • {
  • Set Match Time(30);
  • Global.X = 0;
  • Destroy All Dummy Bots;
  • disabled Destroy All Dummy Bots;
  • }
  • }
  • rule("Team 1 Difficulty")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • If(Global.Difficulty == 0);
  • Set Healing Received(Event Player, 50);
  • Else If(Global.Difficulty == 1);
  • Set Healing Received(Event Player, 50);
  • Else;
  • Set Healing Received(Event Player, 100);
  • End;
  • If(Is Waiting For Players == True);
  • Set Status(Event Player, Null, Invincible, 9999);
  • Else;
  • Clear Status(Event Player, Invincible);
  • End;
  • }
  • }
  • rule("Team 2 Difficulty")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Start Forcing Dummy Bot Name(Event Player, Custom String("Zombie"));
  • If(Global.Difficulty == 0);
  • Set Damage Dealt(Event Player, 25);
  • Else If(Global.Difficulty == 1);
  • Set Damage Dealt(Event Player, 50);
  • Else;
  • Set Damage Dealt(Event Player, 100);
  • End;
  • }
  • }
  • disabled rule("BALANCE TEAMS")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • actions
  • {
  • Set Damage Dealt(Event Player, Number Of Players(Team 1) * 15);
  • Wait(5, Ignore Condition);
  • Loop;
  • }
  • }
  • rule("SPAWN ENEMIES ON PAYLOAD")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Is In Setup == False;
  • Match Time != 0;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • disabled Create Dummy Bot(Hero(Roadhog), Team 2, -1, Payload Position, Closest Player To(Event Player, Team 1));
  • Event Player.X = Empty Array;
  • Event Player.X = Append To Array(Event Player.X, Payload Position + Left * 3 + Up * 3);
  • Event Player.X = Append To Array(Event Player.X, Payload Position + Right * 3 + Up * 3);
  • Event Player.X = Append To Array(Event Player.X, Payload Position + Forward * 3 + Up * 3);
  • Event Player.X = Append To Array(Event Player.X, Payload Position + Backward * 3 + Up * 3);
  • Teleport(Event Player, Random Value In Array(Event Player.X));
  • Global.X += 1;
  • disabled Disable Nameplates(All Players(Team 2), All Players(Team 1));
  • Start Forcing Dummy Bot Name(Event Player, Custom String("Zombie"));
  • disabled Start Forcing Dummy Bot Name(Event Player, Custom String("Zombie"));
  • }
  • }
  • rule("SPAWN ENEMIES ON PAYLOAD (WAITING)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Is In Setup == False;
  • Is Game In Progress == False;
  • }
  • actions
  • {
  • disabled Create Dummy Bot(Hero(Roadhog), Team 2, -1, Payload Position, Closest Player To(Event Player, Team 1));
  • Event Player.X = Empty Array;
  • Event Player.X = Append To Array(Event Player.X, Payload Position + Left);
  • Event Player.X = Append To Array(Event Player.X, Payload Position + Forward);
  • Event Player.X = Append To Array(Event Player.X, Payload Position + Backward);
  • Event Player.X = Append To Array(Event Player.X, Payload Position + Right);
  • Event Player.X = Append To Array(Event Player.X, Payload Position + Forward + Right);
  • Event Player.X = Append To Array(Event Player.X, Payload Position + Backward + Right);
  • Event Player.X = Append To Array(Event Player.X, Payload Position + Forward + Left);
  • Event Player.X = Append To Array(Event Player.X, Payload Position + Backward + Left);
  • Teleport(Event Player, Random Value In Array(Event Player.X));
  • Global.X += 1;
  • disabled Disable Nameplates(All Players(Team 2), All Players(Team 1));
  • Start Forcing Dummy Bot Name(Event Player, Custom String("Zombie"));
  • }
  • }
  • rule("RoadHog SPAWN Counter")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • actions
  • {
  • Create HUD Text(Event Player, String("{0}: {1}", String("{0} {1} {2}", Hero Icon String(Hero(Roadhog)), Custom String("ZOMBIE"),
  • String("Total")), Global.X), Null, Null, Top, 0, Color(White), Color(White), Color(White), Visible To and String,
  • Default Visibility);
  • }
  • }
  • rule("Victory")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Match Time == 0;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Set Respawn Max Time(Event Player, 60);
  • }
  • }
  • rule("Auto Heal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Stop All Heal Over Time(Event Player);
  • Start Heal Over Time(Event Player, Event Player, 9999, 10);
  • }
  • }
  • disabled rule("Bot [Initialization]")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Start Facing(Event Player, Direction Towards(Event Player, Event Player.Enemy[1]), 1000, To World, Direction and Turn Rate);
  • Event Player.GoalPosition[0] = False;
  • Event Player.GoalPosition[1] = False;
  • Event Player.GoalPosition[2] = False;
  • Event Player.Enemy[0] = Null;
  • Event Player.Enemy[2] = Empty Array;
  • Modify Player Variable At Index(Event Player, Enemy, 2, Append To Array, Left);
  • Modify Player Variable At Index(Event Player, Enemy, 2, Append To Array, Right);
  • }
  • }
  • disabled rule("Bot [Type of heroes]")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • disabled Entity Exists(Event Player) == True;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.GoalPosition[3] = 0;
  • Skip If(Event Player != Players On Hero(Hero(Doomfist), Team 2) && Event Player != Players On Hero(Hero(Reaper), Team 2)
  • && Event Player != Players On Hero(Hero(Genji), Team 2) && Event Player != Players On Hero(Hero(Tracer), Team 2)
  • && Event Player != Players On Hero(Hero(Mei), Team 2) && Event Player != Players On Hero(Hero(Sombra), Team 2)
  • && Event Player != Players On Hero(Hero(Symmetra), Team 2), 1);
  • Event Player.GoalPosition[3] = 1;
  • Skip If(Event Player != Players On Hero(Hero(Hanzo), Team 2) && Event Player != Players On Hero(Hero(Pharah), Team 2)
  • && Event Player != Players On Hero(Hero(Widowmaker), Team 2), 1);
  • Event Player.GoalPosition[3] = 2;
  • Skip If(Event Player != Players On Hero(Hero(Lúcio), Team 2) && Event Player != Players On Hero(Hero(Mercy), Team 2)
  • && Event Player != Players On Hero(Hero(Ana), Team 2) && Event Player != Players On Hero(Hero(Baptiste), Team 2)
  • && Event Player != Players On Hero(Hero(Brigitte), Team 2) && Event Player != Players On Hero(Hero(Zenyatta), Team 2)
  • && Event Player != Players On Hero(Hero(Moira), Team 2), 1);
  • Event Player.GoalPosition[3] = 3;
  • Skip If(Event Player != Players On Hero(Hero(D.Va), Team 2) && Event Player != Players On Hero(Hero(Orisa), Team 2)
  • && Event Player != Players On Hero(Hero(Zarya), Team 2) && Event Player != Players On Hero(Hero(Winston), Team 2)
  • && Event Player != Players On Hero(Hero(Wrecking Ball), Team 2) && Event Player != Players On Hero(Hero(Reinhardt), Team 2)
  • && Event Player != Players On Hero(Hero(Sigma), Team 2) && Event Player != Players On Hero(Hero(Roadhog), Team 2), 1);
  • Event Player.GoalPosition[3] = 4;
  • }
  • }
  • disabled rule("Bot [Get the target or not]")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Event Player.GoalPosition[3] != 3;
  • Is In Line of Sight(Event Player, Sorted Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Hero Of(
  • Current Array Element) != Hero(Sombra) || Is Using Ability 1(Current Array Element) == False), Distance Between(Event Player,
  • Current Array Element)), Barriers Do Not Block LOS) == True;
  • Count Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Distance Between(Event Player,
  • Current Array Element)), Hero Of(Current Array Element) != Hero(Sombra) || Is Using Ability 1(Current Array Element) == False))
  • > 0;
  • Number Of Living Players(Opposite Team Of(Team Of(Event Player))) > 0;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Wait(0.250, Ignore Condition);
  • Event Player.GoalPosition[0] = True;
  • Event Player.Enemy[0] = Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Distance Between(
  • Event Player, Current Array Element)), Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)
  • == True && (Hero Of(Current Array Element) != Hero(Sombra) || Is Using Ability 1(Current Array Element) == False));
  • Loop If Condition Is True;
  • Event Player.GoalPosition[0] = False;
  • Event Player.Enemy[0] = Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Distance Between(
  • Event Player, Current Array Element)), Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)
  • == False || Is Using Ability 1(Players On Hero(Hero(Sombra), Opposite Team Of(Team Of(Event Player)))));
  • }
  • }
  • disabled rule("Bot [Face the target]")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dead(Event Player) == False;
  • Event Player.GoalPosition[0] == True;
  • disabled Global.HeroTable[0] == True;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Skip If(Event Player.GoalPosition[0] == False, 6);
  • Stop Chasing Player Variable(Event Player, IsLookEnemy);
  • Event Player.IsLookEnemy = 0;
  • Wait(0.250, Ignore Condition);
  • Event Player.Enemy[1] = Position Of(Event Player.Enemy[0]);
  • Loop If Condition Is True;
  • Chase Player Variable At Rate(Event Player, IsLookEnemy, 5, 1, Destination and Rate);
  • Wait(1, Ignore Condition);
  • Skip If(Event Player.IsLookEnemy == 5, 1);
  • Skip If(Distance Between(Event Player, Event Player.Enemy[1]) > 2, 1);
  • Event Player.Enemy[1] = World Vector Of(Vector(Random Integer(150, 250), Random Integer(25, 50), Random Integer(-100, 0)),
  • Event Player, Rotation);
  • Loop If(Is Dead(Event Player) == False);
  • }
  • }
  • disabled rule("Bot [Get hurts]")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Attacker == All Players(Team 1);
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.Z = Attacker;
  • Event Player.GoalPosition[0] = True;
  • Event Player.GoalPosition[1] = True;
  • Wait(5, Ignore Condition);
  • Event Player.GoalPosition[1] = False;
  • }
  • }
  • disabled rule("Bot [Move]")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dead(Event Player) == False;
  • Global.HeroTable[0] == True;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Wait(0.250, Ignore Condition);
  • Start Throttle In Direction(Event Player, Forward, 1, To Player, Replace existing throttle, Direction and Magnitude);
  • Skip If(Distance Between(Event Player, Event Player.Enemy[1]) < 2, 4);
  • disabled Skip If(Event Player.GoalPosition[3] == 1 || Event Player.GoalPosition[3] == 3 || Event Player.GoalPosition[3] == 4, 8);
  • Skip If(Event Player.GoalPosition[2] == True && Event Player.GoalPosition[3] != 4, 4);
  • Skip If(Event Player.GoalPosition[0] == True && (Event Player.GoalPosition[3] == 0 || Event Player.GoalPosition[3] == 2), 3);
  • Skip If(Distance Between(Eye Position(Event Player), Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player)
  • + Facing Direction Of(Event Player) * 2, All Players(All Teams), All Players(All Teams), False)) >= 2, 5);
  • Start Throttle In Direction(Event Player, Backward, 1, To Player, Add to existing throttle, Direction and Magnitude);
  • Wait(0.300, Ignore Condition);
  • Event Player.Enemy[3] = Random Value In Array(Event Player.Enemy[2]);
  • Start Throttle In Direction(Event Player, Event Player.Enemy[3], 1, To Player, Replace existing throttle, Direction and Magnitude);
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • Start Throttle In Direction(Event Player, Forward, 0, To Player, Replace existing throttle, Direction and Magnitude);
  • }
  • }
  • disabled rule("Bot [Jump & crouch 1]")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dead(Event Player) == False;
  • }
  • actions
  • {
  • Skip If(Event Player.GoalPosition[2] == False || Event Player.GoalPosition[3] == 4, 3);
  • Start Holding Button(Event Player, Button(Crouch));
  • Wait(Random Real(0.050, 0.200), Ignore Condition);
  • Stop Holding Button(Event Player, Button(Crouch));
  • Skip If(Event Player != Players On Hero(Hero(Mercy), Team 2), 4);
  • Skip If(Altitude Of(Event Player) >= 0.500, 1);
  • Stop Holding Button(Event Player, Button(Jump));
  • Skip If(Altitude Of(Event Player) < 0.500, 1);
  • Start Holding Button(Event Player, Button(Jump));
  • Skip If(Event Player != Players On Hero(Hero(Genji), Team 2), 5);
  • Skip If(Distance Between(Eye Position(Event Player), Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player)
  • + Facing Direction Of(Event Player) * 2, All Players(All Teams), All Players(All Teams), False)) >= 2, 1);
  • Start Holding Button(Event Player, Button(Jump));
  • Skip If(Distance Between(Eye Position(Event Player), Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player)
  • + Facing Direction Of(Event Player) * 2, All Players(All Teams), All Players(All Teams), False)) < 2, 2);
  • Stop Holding Button(Event Player, Button(Jump));
  • Press Button(Event Player, Button(Jump));
  • Skip If(Event Player != Players On Hero(Hero(Pharah), Team 2), 4);
  • Skip If(Is Using Ability 1(Event Player) == True || Is On Ground(Event Player) == True, 3);
  • Start Holding Button(Event Player, Button(Jump));
  • Wait(0.500, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Jump));
  • Skip If(Event Player != Players On Hero(Hero(Lúcio), Team 2), 5);
  • Skip If(Is On Ground(Event Player) == False, 2);
  • Stop Holding Button(Event Player, Button(Jump));
  • Press Button(Event Player, Button(Jump));
  • Skip If(Is On Wall(Event Player) == False, 1);
  • Start Holding Button(Event Player, Button(Jump));
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot [Jump & crouch 2]")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dead(Event Player) == False;
  • }
  • actions
  • {
  • Skip If(Is Button Held(Filtered Array(All Living Players(Team 2), Hero Of(Current Array Element) == Hero(Ana) || Hero Of(
  • Current Array Element) == Hero(Ashe) || Hero Of(Current Array Element) == Hero(Widowmaker)), Button(Secondary Fire)) == True,
  • 2);
  • Skip If(Horizontal Speed Of(Event Player) > 5, 1);
  • Press Button(Event Player, Button(Jump));
  • Skip If(Event Player != Players On Hero(Hero(Hanzo), Team 2), 6);
  • Skip If(Distance Between(Eye Position(Event Player), Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player)
  • + Facing Direction Of(Event Player) * 2, All Players(All Teams), All Players(All Teams), False)) >= 2, 1);
  • Start Holding Button(Event Player, Button(Jump));
  • Skip If(Distance Between(Eye Position(Event Player), Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player)
  • + Facing Direction Of(Event Player) * 2, All Players(All Teams), All Players(All Teams), False)) < 2, 1);
  • Stop Holding Button(Event Player, Button(Jump));
  • Skip If(Event Player.GoalPosition[2] == False, 1);
  • Press Button(Event Player, Button(Jump));
  • Skip If(Event Player != Players On Hero(Hero(Baptiste), Team 2), 4);
  • Skip If(Is On Ground(Event Player) == False, 1);
  • Start Holding Button(Event Player, Button(Crouch));
  • Skip If(Event Player.GoalPosition[2] == False, 1);
  • Press Button(Event Player, Button(Jump));
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot attack [Roadhog]")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Dead(Event Player) == False;
  • Event Player.GoalPosition[0] == True;
  • Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(Event Player) * 100, All Players(
  • Opposite Team Of(Team Of(Event Player))), Event Player, True) == True;
  • Has Status(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(Event Player) * 100,
  • All Players(Opposite Team Of(Team Of(Event Player))), Event Player, False), Asleep) == False;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Wait(0.250, Ignore Condition);
  • Skip If(Distance Between(Event Player, Event Player.Enemy[1]) > 6, 1);
  • Press Button(Event Player, Button(Primary Fire));
  • Skip If(Distance Between(Event Player, Event Player.Enemy[1]) <= 6 || Distance Between(Event Player, Event Player.Enemy[1]) > 20,
  • 1);
  • Press Button(Event Player, Button(Secondary Fire));
  • Skip If(Distance Between(Event Player, Event Player.Enemy[1]) > 18, 1);
  • Press Button(Event Player, Button(Ability 1));
  • Skip If(Normalized Health(Event Player) > 0.700, 1);
  • Press Button(Event Player, Button(Ability 2));
  • Skip If(Distance Between(Event Player, Event Player.Enemy[1]) > 15 || Ultimate Charge Percent(Event Player) < 100, 1);
  • Press Button(Event Player, Button(Ultimate));
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot [Attack Move]")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dead(Event Player) == False;
  • Slot Of(Event Player) != 1;
  • }
  • actions
  • {
  • Skip If(Event Player.GoalPosition[1] == True, 2);
  • Skip If(Distance Between(Event Player, Payload Position) < 3, 1);
  • Start Throttle In Direction(Event Player, Direction Towards(Event Player, Payload Position), 1, To World,
  • Replace existing throttle, Direction and Magnitude);
  • Skip If(Event Player.GoalPosition[1] == False, 1);
  • Start Throttle In Direction(Event Player, Direction Towards(Event Player, Position Of(Event Player.Z)), 2, To World,
  • Replace existing throttle, Direction and Magnitude);
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot [Payload Move]")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dead(Event Player) == False;
  • Slot Of(Event Player) == 1;
  • }
  • actions
  • {
  • Start Throttle In Direction(Event Player, Direction Towards(Event Player, Nearest Walkable Position(Payload Position)), 1,
  • To World, Replace existing throttle, Direction and Magnitude);
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Debug")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.DebugFlag == True;
  • }
  • actions
  • {
  • Create HUD Text(All Players(All Teams), Null, Null, String("{0}: {1}", Custom String("Server Load"), String("{0}%",
  • Server Load / 255 * 100)), Left, 1, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, Null, String("{0}: {1}", Custom String("Server Load (Avg)"), String("{0}%",
  • Server Load Average / 255 * 100)), Left, 2, Color(White), Color(White), Color(White), Visible To and String,
  • Default Visibility);
  • If(Global.Difficulty == 0);
  • Create HUD Text(All Players(All Teams), Null, Null, Custom String("Difficulty: Normal"), Left, 3, Color(White), Color(White),
  • Color(White), Visible To and String, Default Visibility);
  • Else If(Global.Difficulty == 1);
  • Create HUD Text(All Players(All Teams), Null, Null, Custom String("Difficulty: Hard"), Left, 3, Color(White), Color(White), Color(
  • White), Visible To and String, Default Visibility);
  • Else;
  • Create HUD Text(All Players(All Teams), Null, Null, Custom String("Difficulty: Legendary"), Left, 3, Color(White), Color(White),
  • Color(White), Visible To and String, Default Visibility);
  • End;
  • }
  • }
  • rule("SetHeroTable")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • disabled Global.HeroTable = Empty Array;
  • disabled Global.HeroTable = Append To Array(Global.HeroTable, Hero(Widowmaker));
  • Global.HeroTable = Randomized Array(All Heroes);
  • }
  • }
  • rule("SetCustomBattleRange(Default 15m)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.Range_Hero = Empty Array;
  • Global.Range_Value = Empty Array;
  • Global.Range_Hero = Append To Array(Global.Range_Hero, Hero(Brigitte));
  • Global.Range_Value = Append To Array(Global.Range_Value, 3);
  • Global.Range_Hero = Append To Array(Global.Range_Hero, Hero(D.Va));
  • Global.Range_Value = Append To Array(Global.Range_Value, 8);
  • Global.Range_Hero = Append To Array(Global.Range_Hero, Hero(Doomfist));
  • Global.Range_Value = Append To Array(Global.Range_Value, 5);
  • Global.Range_Hero = Append To Array(Global.Range_Hero, Hero(Genji));
  • Global.Range_Value = Append To Array(Global.Range_Value, 4);
  • Global.Range_Hero = Append To Array(Global.Range_Hero, Hero(Mei));
  • Global.Range_Value = Append To Array(Global.Range_Value, 6);
  • Global.Range_Hero = Append To Array(Global.Range_Hero, Hero(Moira));
  • Global.Range_Value = Append To Array(Global.Range_Value, 10);
  • Global.Range_Hero = Append To Array(Global.Range_Hero, Hero(Reaper));
  • Global.Range_Value = Append To Array(Global.Range_Value, 4);
  • Global.Range_Hero = Append To Array(Global.Range_Hero, Hero(Reinhardt));
  • Global.Range_Value = Append To Array(Global.Range_Value, 2);
  • Global.Range_Hero = Append To Array(Global.Range_Hero, Hero(Roadhog));
  • Global.Range_Value = Append To Array(Global.Range_Value, 6);
  • Global.Range_Hero = Append To Array(Global.Range_Hero, Hero(Sombra));
  • Global.Range_Value = Append To Array(Global.Range_Value, 10);
  • Global.Range_Hero = Append To Array(Global.Range_Hero, Hero(Symmetra));
  • Global.Range_Value = Append To Array(Global.Range_Value, 8);
  • Global.Range_Hero = Append To Array(Global.Range_Hero, Hero(Tracer));
  • Global.Range_Value = Append To Array(Global.Range_Value, 7);
  • Global.Range_Hero = Append To Array(Global.Range_Hero, Hero(Winston));
  • Global.Range_Value = Append To Array(Global.Range_Value, 5);
  • Global.Range_Hero = Append To Array(Global.Range_Hero, Hero(Zarya));
  • Global.Range_Value = Append To Array(Global.Range_Value, 6);
  • }
  • }
  • rule("Bot: InitializeCommon")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.GoalPosition = Null;
  • Event Player.FarPositions = Empty Array;
  • }
  • }
  • rule("Bot: SetBattleRange")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.BattleRange = 5;
  • Event Player.temp = Index Of Array Value(Global.Range_Hero, Hero Of(Event Player));
  • Abort If(Event Player.temp < 0);
  • Event Player.BattleRange = Global.Range_Value[Event Player.temp];
  • }
  • }
  • rule("Bot: SetAimShake: [0]=DelayX, [1]=DelayY, [2]=DelayTotal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.AimShakeDelays = Empty Array;
  • Event Player.AimShakeDelays[0] = Random Real(0, 1);
  • Event Player.AimShakeDelays[1] = Random Real(0, 1);
  • Event Player.AimShakeDelays[2] = Random Real(0, 1);
  • }
  • }
  • disabled rule("Bot: AddFarPosition")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Dead(Event Player) == False;
  • Event Player.GoalPosition == Null;
  • Event Player.Enemy == Null;
  • }
  • actions
  • {
  • Event Player.temp = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Direction From Angles(
  • Horizontal Angle From Direction(Direction Towards(Eye Position(Event Player), Eye Position(Event Player.WalkTargetPlayer)))
  • + Random Real(-120, 120), 0) * 12, Null, Event Player, False);
  • Event Player.temp = Eye Position(Event Player) + Vector Towards(Eye Position(Event Player), Event Player.temp) * 0.900;
  • Event Player.FarPositions = Append To Array(Event Player.FarPositions, Nearest Walkable Position(Event Player.temp));
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot: SetGoal(FreeWalk)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Dead(Event Player) == False;
  • Event Player.GoalPosition == Null;
  • disabled Count Of(Event Player.FarPositions) > 6;
  • Event Player.Enemy == Null;
  • }
  • actions
  • {
  • disabled Event Player.temp = Last Of(Sorted Array(Event Player.FarPositions, Distance Between(Eye Position(Event Player),
  • Current Array Element)));
  • disabled Event Player.GoalPosition = Event Player.temp;
  • Event Player.GoalPosition = Nearest Walkable Position(Payload Position);
  • Event Player.FarPositions = Empty Array;
  • Event Player.IsBattleWalk = False;
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot: SetGoal(KeepBattleRange)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Dead(Event Player) == False;
  • Event Player.GoalPosition == Null;
  • Event Player.Enemy != Null;
  • }
  • actions
  • {
  • Event Player.temp = Eye Position(Event Player.Enemy) + Normalize(Direction Towards(Eye Position(Event Player.Enemy), Eye Position(
  • Event Player)) * Event Player.BattleRange + Direction From Angles(Random Real(0, 360), 0) * 4) * Event Player.BattleRange;
  • Event Player.temp = Nearest Walkable Position(Ray Cast Hit Position(Eye Position(Event Player), Event Player.temp, Null,
  • Event Player, False));
  • disabled Skip If(Distance Between(Event Player, Payload Position) < 3, 1);
  • disabled Event Player.temp = Nearest Walkable Position(Payload Position);
  • Event Player.GoalPosition = Event Player.temp;
  • Event Player.FarPositions = Empty Array;
  • Event Player.IsBattleWalk = True;
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: SetFreewalkRandomPlayer")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.WalkTargetPlayer = First Of(Random Value In Array(Filtered Array(All Players(All Teams), !Is Dead(
  • Current Array Element) && Is Alive(Current Array Element))));
  • Wait(2, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot: OnHitWall: ClearWalkGoal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Dead(Event Player) == False;
  • Event Player.GoalPosition != Null;
  • disabled Is In Line of Sight(Eye Position(Event Player), Event Player.GoalPosition, Barriers Do Not Block LOS) == False;
  • Is True For Any(All Players(Team 1), Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)) == False;
  • Distance Between(Event Player, Payload Position) >= 15;
  • Is In Setup == False;
  • }
  • actions
  • {
  • Event Player.X = Empty Array;
  • Event Player.X = Append To Array(Event Player.X, Payload Position + Left * 3 + Up * 3);
  • Event Player.X = Append To Array(Event Player.X, Payload Position + Right * 3 + Up * 3);
  • Event Player.X = Append To Array(Event Player.X, Payload Position + Forward * 3 + Up * 3);
  • Event Player.X = Append To Array(Event Player.X, Payload Position + Backward * 3 + Up * 3);
  • Wait(3, Abort When False);
  • Teleport(Event Player, Random Value In Array(Event Player.X));
  • Event Player.GoalPosition = Null;
  • disabled Wait(1, Ignore Condition);
  • disabled Loop If Condition Is True;
  • }
  • }
  • rule("Bot: StopFreeWalk")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Dead(Event Player) == False;
  • Event Player.Enemy != Null;
  • Event Player.IsBattleWalk == False;
  • }
  • actions
  • {
  • Event Player.GoalPosition = Null;
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot: ResetGoal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.GoalPosition = Null;
  • Wait(8, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot: WalkToGoal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Dead(Event Player) == False;
  • Event Player.GoalPosition != Null;
  • }
  • actions
  • {
  • Start Throttle In Direction(Event Player, Direction Towards(Position Of(Event Player), Event Player.GoalPosition), Min(1,
  • Distance Between(Position Of(Event Player), Event Player.GoalPosition)), To World, Replace existing throttle,
  • Direction and Magnitude);
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot: OnReachWalkGoal: ClearWalkGoal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Dead(Event Player) == False;
  • Event Player.GoalPosition != Null;
  • Distance Between(Vector(X Component Of(Eye Position(Event Player)), 0, Z Component Of(Eye Position(Event Player))), Vector(
  • X Component Of(Event Player.GoalPosition), 0, Z Component Of(Event Player.GoalPosition))) < 2;
  • }
  • actions
  • {
  • Event Player.GoalPosition = Null;
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot: SetEnemy")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Dead(Event Player) == False;
  • Count Of(Filtered Array(All Players(Opposite Team Of(Team Of(Event Player))), !Is Dead(Current Array Element))) > 0;
  • }
  • actions
  • {
  • Event Player.temp = First Of(Sorted Array(Filtered Array(All 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)
  • && Current Array Element != Event Player && (Hero Of(Current Array Element) != Hero(Sombra) || !Is Using Ability 1(
  • Current Array Element)) && !Is Dead(Current Array Element)), Distance Between(Position Of(Event Player), Position Of(
  • Current Array Element)) && !Is Dead(Current Array Element) && Has Spawned(Current Array Element)), Distance Between(
  • Position Of(Event Player), Position Of(Current Array Element))));
  • disabled Event Player.temp = First Of(Sorted Array(Filtered Array(All 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)
  • && Current Array Element != Event Player && (Hero Of(Current Array Element) != Hero(Sombra) || !Is Using Ability 1(
  • Current Array Element)) && !Has Spawned(Current Array Element)), Distance Between(Position Of(Event Player), Position Of(
  • Current Array Element))));
  • Event Player.Enemy = Event Player.temp;
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot: LookToWaypoint")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Dead(Event Player) == False;
  • Event Player.Enemy == Null;
  • Event Player.GoalPosition != Null;
  • (Has Status(Event Player, Knocked Down) || Has Status(Event Player, Asleep) || Has Status(Event Player, Frozen) || Has Status(
  • Event Player, Stunned)) == False;
  • }
  • actions
  • {
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Vector(X Component Of(Event Player.GoalPosition),
  • Y Component Of(Eye Position(Event Player)), Z Component Of(Event Player.GoalPosition))), 220, To World,
  • Direction and Turn Rate);
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot: LookToEnemy")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Dead(Event Player) == False;
  • Event Player.Enemy != Null;
  • (Has Status(Event Player, Knocked Down) || Has Status(Event Player, Asleep) || Has Status(Event Player, Frozen) || Has Status(
  • Event Player, Stunned)) == False;
  • }
  • actions
  • {
  • Start Facing(Event Player, Direction From Angles(Horizontal Angle From Direction(Vector Towards(Eye Position(Event Player),
  • Position Of(Event Player.Enemy) + Vector Towards(Position Of(Event Player.Enemy), Eye Position(Event Player.Enemy)) * 0.750))
  • + Sine From Degrees(360 * (Total Time Elapsed + Event Player.AimShakeDelays[0]) * 1.250) * 4 * Sine From Degrees(360 * (
  • Total Time Elapsed + Event Player.AimShakeDelays[2]) * 0.500), Vertical Angle From Direction(Vector Towards(Eye Position(
  • Event Player), Position Of(Event Player.Enemy) + Vector Towards(Position Of(Event Player.Enemy), Eye Position(
  • Event Player.Enemy)) * 0.750)) + Sine From Degrees(360 * (Total Time Elapsed + Event Player.AimShakeDelays[1]) * 1.250)
  • * 4 * Sine From Degrees(360 * (Total Time Elapsed + Event Player.AimShakeDelays[2]) * 0.500)), 220, To World,
  • Direction and Turn Rate);
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot: StopLook")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Dead(Event Player) == False;
  • Event Player.Enemy == Null;
  • Event Player.GoalPosition == Null;
  • }
  • actions
  • {
  • Stop Facing(Event Player);
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot: OnStun: StopLook")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • (Has Status(Event Player, Knocked Down) || Has Status(Event Player, Asleep) || Has Status(Event Player, Frozen) || Has Status(
  • Event Player, Stunned)) == True;
  • }
  • actions
  • {
  • Stop Facing(Event Player);
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot: CheckLookEnemy")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player.Enemy) == True;
  • }
  • actions
  • {
  • Event Player.IsLookEnemy = Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player),
  • Eye Position(Event Player.Enemy))) < 30 && Is In Line of Sight(Eye Position(Event Player), Eye Position(Event Player.Enemy),
  • Barriers Do Not Block LOS);
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot: OnDeadEnemy: ClearEnemy")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.Enemy != Null;
  • Is Dead(Event Player.Enemy) == True;
  • }
  • actions
  • {
  • Event Player.GoalPosition = Null;
  • Event Player.Enemy = Null;
  • Event Player.IsLookEnemy = False;
  • Stop Facing(Event Player);
  • }
  • }
  • disabled rule("Bot: Jump")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Jump));
  • Wait(Random Real(4, 8), Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot: Fire")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • Is Button Held(Event Player, Button(Primary Fire)) == False;
  • Hero Of(Event Player) != Hero(Ana);
  • Hero Of(Event Player) != Hero(Ashe);
  • Hero Of(Event Player) != Hero(Brigitte);
  • Hero Of(Event Player) != Hero(Doomfist);
  • Hero Of(Event Player) != Hero(Hanzo);
  • Hero Of(Event Player) != Hero(Moira);
  • Hero Of(Event Player) != Hero(Reinhardt);
  • Hero Of(Event Player) != Hero(Widowmaker);
  • disabled Is Button Held(Event Player, Button(Primary Fire)) == False;
  • disabled Hero Of(Event Player) != Hero(Ana);
  • disabled Hero Of(Event Player) != Hero(Ashe);
  • disabled Hero Of(Event Player) != Hero(Brigitte);
  • disabled Hero Of(Event Player) != Hero(Doomfist);
  • disabled Hero Of(Event Player) != Hero(Hanzo);
  • disabled Hero Of(Event Player) != Hero(Moira);
  • disabled Hero Of(Event Player) != Hero(Reinhardt);
  • disabled Hero Of(Event Player) != Hero(Widowmaker);
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.500, Ignore Condition);
  • Skip If(Distance Between(Event Player, Event Player.Enemy) > 7, 1);
  • Press Button(Event Player, Button(Primary Fire));
  • Skip If(Distance Between(Event Player, Event Player.Enemy) <= 7 || Distance Between(Event Player, Event Player.Enemy) > 20, 1);
  • Press Button(Event Player, Button(Secondary Fire));
  • Wait(0.250, Ignore Condition);
  • disabled Start Holding Button(Event Player, Button(Primary Fire));
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot: StopFire")
  • disabled rule("Bot: StopFire")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == False;
  • Hero Of(Event Player) != Hero(Doomfist);
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Ability")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • Hero Of(Event Player) != Hero(Ashe);
  • Hero Of(Event Player) != Hero(Bastion);
  • Hero Of(Event Player) != Hero(Doomfist);
  • Hero Of(Event Player) != Hero(Torbjörn);
  • Hero Of(Event Player) != Hero(Symmetra);
  • Hero Of(Event Player) != Hero(Tracer);
  • Hero Of(Event Player) != Hero(Widowmaker);
  • Hero Of(Event Player) != Hero(Wrecking Ball);
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • Press Button(Event Player, Button(Ability 2));
  • Wait(Random Real(3, 5), Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot: Ult")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • Ultimate Charge Percent(Event Player) == 100;
  • Normalized Health(Event Player) > 0.500;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ultimate));
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Sniper: AimStart")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Button Held(Event Player, Button(Secondary Fire)) == False;
  • Array Contains(Global.SniperHeroes, Hero Of(Event Player)) == True;
  • Event Player.IsLookEnemy == True;
  • Distance Between(Position Of(Event Player), Position Of(Event Player.Enemy)) > 10;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.500, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Sniper: AimStop")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Array Contains(Global.SniperHeroes, Hero Of(Event Player)) == True;
  • (!Event Player.IsLookEnemy || Distance Between(Position Of(Event Player), Position Of(Event Player.Enemy)) <= 10) == True;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.500, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Ana: Fire")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Ana;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Ashe: Fire")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Ashe;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Ashe: Ability1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Ashe;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • Distance Between(Position Of(Event Player), Position Of(Event Player.Enemy)) < 10;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • Wait(4, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Ashe: Ability2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Ashe;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • Distance Between(Position Of(Event Player), Position Of(Event Player.Enemy)) > 10;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 2));
  • Wait(4, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Bastion: Ability1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == False;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • Wait(Random Real(4, 8), Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Brigitte: Barrier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Brigitte;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • Distance Between(Position Of(Event Player), Position Of(Event Player.Enemy)) > 6;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Skip If(Is Button Held(Event Player, Button(Secondary Fire)), 1);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Brigitte: Atttack")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Brigitte;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • Distance Between(Position Of(Event Player), Position Of(Event Player.Enemy)) < 6;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.100, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: DoomFist: Fire")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Doomfist;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • Is Firing Secondary(Event Player) == False;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Doomfist: Punch")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Doomfist;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • Is Firing Primary(Event Player) == False;
  • Is Using Ability 1(Event Player) == False;
  • Is Using Ability 2(Event Player) == False;
  • Is Using Ultimate(Event Player) == False;
  • Absolute Value(Y Component Of(Position Of(Event Player)) - Y Component Of(Position Of(Event Player.Enemy))) < 1;
  • Distance Between(Position Of(Event Player), Position Of(Event Player.Enemy)) < 15;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(Random Real(0.750, 1), Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(4.200, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: DoomFist: Ability1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Doomfist;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • Is Firing Secondary(Event Player) == False;
  • Distance Between(Vector(X Component Of(Position Of(Event Player)), 0, Z Component Of(Position Of(Event Player))), Vector(
  • X Component Of(Position Of(Event Player.Enemy)), 0, Z Component Of(Position Of(Event Player.Enemy)))) < 4;
  • Y Component Of(Position Of(Event Player.Enemy)) > Position Of(Event Player) + Down * 1;
  • }
  • actions
  • {
  • Wait(0.100, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: DoomFist: Ability2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Doomfist;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • Is Firing Secondary(Event Player) == False;
  • Distance Between(Position Of(Event Player), Position Of(Event Player.Enemy)) > 4;
  • }
  • actions
  • {
  • Wait(0.250, Ignore Condition);
  • Press Button(Event Player, Button(Ability 2));
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Hanzo: Fire")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Hanzo;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(Random Real(0.800, 1.500), Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Hanzo: Jump")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Hanzo;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • Distance Between(Position Of(Event Player), Position Of(Event Player.Enemy)) < 10;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Jump));
  • Wait(0.250, Ignore Condition);
  • Press Button(Event Player, Button(Jump));
  • Wait(6, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Junkrat: Fire2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Junkrat;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Secondary Fire));
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Lucio: Fire2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Lúcio;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • Distance Between(Position Of(Event Player), Position Of(Event Player.Enemy)) < 6;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Secondary Fire));
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Moira: Fire")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.500, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Pharah: Jump")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Pharah;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Eye Position(Event Player), Position Of(Event Player) + Down * 2, Barriers Do Not Block LOS) == True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Jump));
  • Wait(0.500, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Jump));
  • Wait(0.400, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Reinhardt: Barrier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Reinhardt;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • Distance Between(Position Of(Event Player), Position Of(Event Player.Enemy)) > 6;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Skip If(Is Button Held(Event Player, Button(Secondary Fire)), 1);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Reinhardt: Atttack")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Reinhardt;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • Distance Between(Position Of(Event Player), Position Of(Event Player.Enemy)) < 6;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Sigma: Barrier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Sigma;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.750, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(3, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Soldier76: Fire2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Soldier: 76;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Secondary Fire));
  • Wait(3, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Tracer: Ability1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Tracer;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • Wait(Random Real(0.300, 0.800), Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Tracer: Ability2")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • Tracer;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Normalized Health(Event Player) < 0.700;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 2));
  • }
  • }
  • disabled rule("Bot: Widowmaker: Fire")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Widowmaker;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.IsLookEnemy == True;
  • }
  • actions
  • {
  • Wait(0.100, Ignore Condition);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(Random Real(1, 1.500), Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Bot: Wreckingball: Ability2")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 2));
  • }
  • }
Join the Workshop.codes Discord