Create
Return to post

Comparing difference between and

View raw
  • settings
  • {
  • main
  • {
  • Description: "Storm Rising PVE - made by Waitedboat4#2760 - Update v3.4: Revive Timer"
  • }
  • lobby
  • {
  • Max Team 1 Players: 0
  • Max Team 2 Players: 4
  • Return To Lobby: Never
  • Swap Teams After Match: No
  • }
  • modes
  • {
  • Escort
  • {
  • enabled maps
  • {
  • Havana
  • }
  • }
  • General
  • {
  • Allow Hero Switching: Off
  • Game Mode Start: Immediately
  • Skins: Off
  • Spawn Health Packs: Disabled
  • }
  • }
  • heroes
  • {
  • Team 1
  • {
  • Genji
  • {
  • Infinite Ultimate Duration: On
  • Spawn With Ultimate Ready: On
  • }
  • Reaper
  • {
  • Movement Speed: 60%
  • }
  • Widowmaker
  • {
  • Grappling Hook Cooldown Time: 0%
  • }
  • Wrecking Ball
  • {
  • Movement Speed: 50%
  • }
  • }
  • General
  • {
  • enabled heroes
  • {
  • Genji
  • Mercy
  • Tracer
  • Winston
  • }
  • }
  • }
  • }
  • variables
  • {
  • global:
  • 0: _extendedGlobalCollection
  • 2: Nodes
  • 3: Segments
  • 4: Attributes
  • 5: map
  • 6: _classIndexes
  • 7: _tempNodes
  • 8: _tempSegments
  • 9: _tempAttributes
  • 10: AssemblingHeroes
  • 11: Countdown
  • 12: ObjectiveIcon
  • 14: FirstWave
  • 15: Normal
  • 16: Hard
  • 17: Expert
  • 18: Legendary
  • 19: SecureDistillery
  • 20: Survive
  • 21: Round
  • 23: NextSpawns
  • 24: Mercy
  • 25: Genji
  • 26: Winston
  • 27: Tracer
  • 28: HeroesPicked
  • 29: NextSpawns2
  • 30: ClearSeaFort
  • 31: ArmTruck
  • 32: BloodMoonRising
  • 33: TruckArmed
  • 34: Allheroes
  • 35: TeamScore
  • 36: StormRaging
  • 37: CreateSelfPromotionText
  • 38: LineofSight
  • 39: CurrentSpawn
  • 40: Spawns
  • 41: SecondWave
  • 42: ThirdWave
  • 43: FourthWave
  • 44: PayloadReachedpos
  • 45: SniperPos
  • player:
  • 0: _extendedPlayerCollection
  • 1: AsssasinPositions
  • 3: Assasindopositions
  • 4: Washeavyassault
  • 5: ReviveEffect
  • 6: ReviveText
  • 7: IsInMenuMode
  • 8: pathfinderDoGetCurrent
  • 9: pathfinderCurrent
  • 10: pathmapReference
  • 11: parentArray
  • 12: destination
  • 13: lastAttribute
  • 14: Dijkstra_Final_Path
  • 15: Dijkstra_Final_Path_Attributes
  • 16: Dijkstra_Current
  • 17: Dijkstra_Distances
  • 18: Dijkstra_Unvisited
  • 19: Dijkstra_Connected_Segments
  • 20: Dijkstra_Neighbor_Index
  • 21: Dijkstra_Distance
  • 22: Dijkstra_Neighbor_Attributes
  • 23: Dijkstra_Parent_Array
  • 24: Invis
  • 25: LineofSight
  • 26: Charge
  • 27: PreviousHP
  • 28: Charging
  • 29: IsAttacking
  • 30: HasRage
  • 31: Joined
  • 32: Dijkstra_Current_0
  • 33: Dijkstra_Distances_0
  • 34: Dijkstra_Unvisited_0
  • 35: Dijkstra_Parent_Array_0
  • 36: Dijkstra_Neighbor_Index_0
  • 37: Dijkstra_Distance_0
  • 38: Dijkstra_Neighbor_Attributes_0
  • 39: Dijkstra_Connected_Segments_0
  • 40: CanBeRevived
  • 41: ReviveTimer
  • 42: ProgressBar
  • 112: MenuVFX
  • 113: MenuZAxis
  • 114: MenuYAxis
  • 115: MenuXAxis
  • 116: CursorPos
  • 117: CurrActionID
  • 118: ButtonExitMenu
  • 119: ButtonProperties
  • 120: CursorX
  • 121: CursorY
  • 122: MenuEyePos
  • 123: MenuOriginalFacing
  • 124: ActionIDQueue
  • 125: CurrActionID_Secondary
  • 126: ActionIDQueue_Secondary
  • 127: __iter__
  • }
  • subroutines
  • {
  • 125: CreateMenuFrame
  • 126: CreateMenuButtons
  • 127: CreateMenuCursor
  • }
  • rule("Me")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.CreateSelfPromotionText = True;
  • Create HUD Text(All Players(Team 2), Null, Custom String("https://workshop.codes/stormrising"), Null, Right, 0, Color(White),
  • Color(Green), Color(Green), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(Team 2), Null, Null, Custom String("Created by Waitedboat4#2760"), Right, 0, Color(White), Color(
  • White), Color(Green), Visible To and String, Default Visibility);
  • }
  • }
  • rule("Team Score")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Create HUD Text(All Players(Team 2), Null, Null, Custom String("Team Score: {0}", Global.TeamScore), Left, 0, Color(White), Color(
  • White), Color(White), Visible To and String, Default Visibility);
  • }
  • }
  • rule("Scoreboard")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == False;
  • }
  • actions
  • {
  • Create HUD Text(All Players(Team 2), Null, Null, Custom String("{0} | {1} HP | {2}%", Custom String("{0} {1}", Is Alive(
  • Event Player) == True ? Hero Icon String(Hero Of(Event Player)) : Icon String(X), Event Player), Round To Integer(Health(
  • Event Player), To Nearest), Ultimate Charge Percent(Event Player)), Left, 2, Color(White), Color(White), Color(White),
  • Visible To and String, Default Visibility);
  • }
  • }
  • disabled rule("▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒【Josbird's Cursor Menu】▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • disabled rule("Toggle menu mode")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • "Dummy bots were getting menu stuff and causing server crashes, so we exclude them from these rules."
  • Is Dummy Bot(Event Player) == False;
  • Global.AssemblingHeroes == True;
  • Has Spawned(Event Player) == True;
  • Global.Allheroes == False;
  • }
  • actions
  • {
  • "If the menu is not open, opens the menu. Otherwise, closes it."
  • Event Player.IsInMenuMode = !Event Player.IsInMenuMode;
  • }
  • }
  • disabled rule("Menu activated > Start setup")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • "Dummy bots were getting menu stuff and causing server crashes, so we exclude them from these rules."
  • Is Dummy Bot(Event Player) == False;
  • "Triggers once whenever the menu opens."
  • Event Player.IsInMenuMode == True;
  • }
  • actions
  • {
  • "Sets aim speed to minimum to reduce camera sway while in menu."
  • Set Aim Speed(Event Player, 10);
  • "These 2 rules disable primary and secondary fire for the purposes of click detection. Though personally I haven't actually thought of a use for secondary fire yet."
  • Set Primary Fire Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • "These 2 rules disable the non-menu HUD. This is optional, I just think it looks cleaner."
  • Disable Hero HUD(Event Player);
  • Disable Game Mode HUD(Event Player);
  • "This (and the following rule) set the menu eye position to follow the player's eye position. Overwrite if you plan to separate the menu from the player's current position."
  • Event Player.MenuEyePos = Vector(-105.631, 5.551, -77.225);
  • Chase Player Variable At Rate(Event Player, MenuEyePos, Vector(-105.631, 5.551, -77.225), 100000, Destination and Rate);
  • "Stores original facing direction of player for the purpose of recording mouse movement. Don't recommend changing this."
  • Event Player.MenuOriginalFacing = Facing Direction Of(Event Player);
  • "Sets the forward axis of the menu view (into and out of the screen). Change this to match the facing direction of whatever camera you use if you decouple it from the first person view. (Make sure to normalize if the direction is not a unit vector.)"
  • Event Player.MenuZAxis = Normalize(Vector(-108.383, 5.550, -79.942));
  • "Sets vertical axis of menu (up and down the screen)."
  • Event Player.MenuYAxis = Direction From Angles(Horizontal Angle From Direction(Event Player.MenuZAxis),
  • Vertical Angle From Direction(Event Player.MenuZAxis) + -90);
  • "Sets horizontal axis of the menu (left and right on the screen)."
  • Event Player.MenuXAxis = Cross Product(Event Player.MenuZAxis, Event Player.MenuYAxis);
  • "These three rules scale up all 3 axes to 100 meters in order to stabilize the menu in-world texts by placing them far away from the camera view. Keep this in mind if you plan to make your own texts on the screen."
  • Event Player.MenuXAxis *= 100;
  • Event Player.MenuYAxis *= 100;
  • Event Player.MenuZAxis *= 100;
  • "This is where the magic happens. The first rule initializes the cursor position and the second moves it around the screen as the player moves their aim by projecting the angle difference onto a flat plane."
  • Event Player.CursorPos = Event Player.MenuEyePos + Event Player.MenuZAxis * 3;
  • Chase Player Variable At Rate(Event Player, CursorPos,
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * -0.750 * Angle Difference(
  • Horizontal Angle From Direction(Event Player.MenuOriginalFacing), Horizontal Angle From Direction(Facing Direction Of(
  • Event Player))) + Event Player.MenuYAxis * -0.750 * Angle Difference(Vertical Angle From Direction(
  • Event Player.MenuOriginalFacing), Vertical Angle From Direction(Facing Direction Of(Event Player))), 100000,
  • Destination and Rate);
  • "The next four rules provide a simpler way to track the position of the cursor relative to the screen. Use these instead of CursorPos to compare the cursor position to coordinates of onscreen elements."
  • Event Player.CursorX = 0;
  • Event Player.CursorY = 0;
  • Chase Player Variable At Rate(Event Player, CursorX, -0.750 * Angle Difference(Horizontal Angle From Direction(
  • Event Player.MenuOriginalFacing), Horizontal Angle From Direction(Facing Direction Of(Event Player))), 100000,
  • Destination and Rate);
  • Chase Player Variable At Rate(Event Player, CursorY, -0.750 * Angle Difference(Vertical Angle From Direction(
  • Event Player.MenuOriginalFacing), Vertical Angle From Direction(Facing Direction Of(Event Player))), 100000,
  • Destination and Rate);
  • "This rule initializes the array that stores all components of the menu in order to destroy them when it closes. Don't recommend changing this."
  • Event Player.MenuVFX = Empty Array;
  • "These subroutines do the actual work of constructing the menu. See subroutines for more details."
  • Call Subroutine(CreateMenuFrame);
  • Call Subroutine(CreateMenuButtons);
  • Call Subroutine(CreateMenuCursor);
  • }
  • }
  • disabled rule("Menu activated > Create buttons")
  • {
  • event
  • {
  • Subroutine;
  • CreateMenuButtons;
  • }
  • actions
  • {
  • "This rule creates the actual button visuals when the menu is opened. Until we get color variables, this is where more experienced users can change button colors. In each set, 2nd action = inactive button color, 4th = hovered button color."
  • Wait(0.016, Ignore Condition);
  • " \r\nButtonProperties[0]"
  • Abort If(Count Of(Event Player.ButtonProperties) <= 0);
  • Create In-World Text(Filtered Array(Event Player, Event Player.ButtonProperties[0][7] && (
  • !Event Player.ButtonProperties[0][6] || Absolute Value(Event Player.CursorX - Event Player.ButtonProperties[0][2])
  • > Event Player.ButtonProperties[0][4] / 2 || Absolute Value(Event Player.CursorY - Event Player.ButtonProperties[0][3])
  • > Event Player.ButtonProperties[0][5] / 2)), Event Player.ButtonProperties[0][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[0][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[0][3] - 0.200), Event Player.ButtonProperties[0][8], Do Not Clip, Visible To Position and String,
  • Color(White), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • Create In-World Text(Filtered Array(Event Player,
  • Event Player.ButtonProperties[0][7] && Event Player.ButtonProperties[0][6] && Absolute Value(
  • Event Player.CursorX - Event Player.ButtonProperties[0][2]) <= Event Player.ButtonProperties[0][4] / 2 && Absolute Value(
  • Event Player.CursorY - Event Player.ButtonProperties[0][3]) <= Event Player.ButtonProperties[0][5] / 2),
  • Event Player.ButtonProperties[0][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[0][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[0][3] - 0.200), Event Player.ButtonProperties[0][8], Do Not Clip, Visible To Position and String,
  • Color(Yellow), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • " \r\nButtonProperties[1]"
  • Abort If(Count Of(Event Player.ButtonProperties) <= 1);
  • Create In-World Text(Filtered Array(Event Player, Event Player.ButtonProperties[1][7] && (
  • !Event Player.ButtonProperties[1][6] || Absolute Value(Event Player.CursorX - Event Player.ButtonProperties[1][2])
  • > Event Player.ButtonProperties[1][4] / 2 || Absolute Value(Event Player.CursorY - Event Player.ButtonProperties[1][3])
  • > Event Player.ButtonProperties[1][5] / 2)), Event Player.ButtonProperties[1][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[1][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[1][3] - 0.200), Event Player.ButtonProperties[1][8], Do Not Clip, Visible To Position and String,
  • Color(White), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • Create In-World Text(Filtered Array(Event Player,
  • Event Player.ButtonProperties[1][7] && Event Player.ButtonProperties[1][6] && Absolute Value(
  • Event Player.CursorX - Event Player.ButtonProperties[1][2]) <= Event Player.ButtonProperties[1][4] / 2 && Absolute Value(
  • Event Player.CursorY - Event Player.ButtonProperties[1][3]) <= Event Player.ButtonProperties[1][5] / 2),
  • Event Player.ButtonProperties[1][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[1][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[1][3] - 0.200), Event Player.ButtonProperties[1][8], Do Not Clip, Visible To Position and String,
  • Color(Yellow), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • " \r\nButtonProperties[2]"
  • Abort If(Count Of(Event Player.ButtonProperties) <= 2);
  • Create In-World Text(Filtered Array(Event Player, Event Player.ButtonProperties[2][7] && (
  • !Event Player.ButtonProperties[2][6] || Absolute Value(Event Player.CursorX - Event Player.ButtonProperties[2][2])
  • > Event Player.ButtonProperties[2][4] / 2 || Absolute Value(Event Player.CursorY - Event Player.ButtonProperties[2][3])
  • > Event Player.ButtonProperties[2][5] / 2)), Event Player.ButtonProperties[2][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[2][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[2][3] - 0.200), Event Player.ButtonProperties[2][8], Do Not Clip, Visible To Position and String,
  • Color(White), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • Create In-World Text(Filtered Array(Event Player,
  • Event Player.ButtonProperties[2][7] && Event Player.ButtonProperties[2][6] && Absolute Value(
  • Event Player.CursorX - Event Player.ButtonProperties[2][2]) <= Event Player.ButtonProperties[2][4] / 2 && Absolute Value(
  • Event Player.CursorY - Event Player.ButtonProperties[2][3]) <= Event Player.ButtonProperties[2][5] / 2),
  • Event Player.ButtonProperties[2][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[2][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[2][3] - 0.200), Event Player.ButtonProperties[2][8], Do Not Clip, Visible To Position and String,
  • Color(Yellow), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • " \r\nButtonProperties[3]"
  • Abort If(Count Of(Event Player.ButtonProperties) <= 3);
  • Create In-World Text(Filtered Array(Event Player, Event Player.ButtonProperties[3][7] && (
  • !Event Player.ButtonProperties[3][6] || Absolute Value(Event Player.CursorX - Event Player.ButtonProperties[3][2])
  • > Event Player.ButtonProperties[3][4] / 2 || Absolute Value(Event Player.CursorY - Event Player.ButtonProperties[3][3])
  • > Event Player.ButtonProperties[3][5] / 2)), Event Player.ButtonProperties[3][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[3][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[3][3] - 0.200), Event Player.ButtonProperties[3][8], Do Not Clip, Visible To Position and String,
  • Color(White), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • Create In-World Text(Filtered Array(Event Player,
  • Event Player.ButtonProperties[3][7] && Event Player.ButtonProperties[3][6] && Absolute Value(
  • Event Player.CursorX - Event Player.ButtonProperties[3][2]) <= Event Player.ButtonProperties[3][4] / 2 && Absolute Value(
  • Event Player.CursorY - Event Player.ButtonProperties[3][3]) <= Event Player.ButtonProperties[3][5] / 2),
  • Event Player.ButtonProperties[3][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[3][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[3][3] - 0.200), Event Player.ButtonProperties[3][8], Do Not Clip, Visible To Position and String,
  • Color(Yellow), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • " \r\nButtonProperties[4]"
  • Abort If(Count Of(Event Player.ButtonProperties) <= 4);
  • Create In-World Text(Filtered Array(Event Player, Event Player.ButtonProperties[4][7] && (
  • !Event Player.ButtonProperties[4][6] || Absolute Value(Event Player.CursorX - Event Player.ButtonProperties[4][2])
  • > Event Player.ButtonProperties[4][4] / 2 || Absolute Value(Event Player.CursorY - Event Player.ButtonProperties[4][3])
  • > Event Player.ButtonProperties[4][5] / 2)), Event Player.ButtonProperties[4][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[4][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[4][3] - 0.200), Event Player.ButtonProperties[4][8], Do Not Clip, Visible To Position and String,
  • Color(White), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • Create In-World Text(Filtered Array(Event Player,
  • Event Player.ButtonProperties[4][7] && Event Player.ButtonProperties[4][6] && Absolute Value(
  • Event Player.CursorX - Event Player.ButtonProperties[4][2]) <= Event Player.ButtonProperties[4][4] / 2 && Absolute Value(
  • Event Player.CursorY - Event Player.ButtonProperties[4][3]) <= Event Player.ButtonProperties[4][5] / 2),
  • Event Player.ButtonProperties[4][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[4][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[4][3] - 0.200), Event Player.ButtonProperties[4][8], Do Not Clip, Visible To Position and String,
  • Color(Yellow), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • " \r\nButtonProperties[5]"
  • Abort If(Count Of(Event Player.ButtonProperties) <= 5);
  • Create In-World Text(Filtered Array(Event Player, Event Player.ButtonProperties[5][7] && (
  • !Event Player.ButtonProperties[5][6] || Absolute Value(Event Player.CursorX - Event Player.ButtonProperties[5][2])
  • > Event Player.ButtonProperties[5][4] / 2 || Absolute Value(Event Player.CursorY - Event Player.ButtonProperties[5][3])
  • > Event Player.ButtonProperties[5][5] / 2)), Event Player.ButtonProperties[5][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[5][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[5][3] - 0.200), Event Player.ButtonProperties[5][8], Do Not Clip, Visible To Position and String,
  • Color(White), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • Create In-World Text(Filtered Array(Event Player,
  • Event Player.ButtonProperties[5][7] && Event Player.ButtonProperties[5][6] && Absolute Value(
  • Event Player.CursorX - Event Player.ButtonProperties[5][2]) <= Event Player.ButtonProperties[5][4] / 2 && Absolute Value(
  • Event Player.CursorY - Event Player.ButtonProperties[5][3]) <= Event Player.ButtonProperties[5][5] / 2),
  • Event Player.ButtonProperties[5][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[5][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[5][3] - 0.200), Event Player.ButtonProperties[5][8], Do Not Clip, Visible To Position and String,
  • Color(Yellow), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • " \r\nButtonProperties[6]"
  • Abort If(Count Of(Event Player.ButtonProperties) <= 6);
  • Create In-World Text(Filtered Array(Event Player, Event Player.ButtonProperties[6][7] && (
  • !Event Player.ButtonProperties[6][6] || Absolute Value(Event Player.CursorX - Event Player.ButtonProperties[6][2])
  • > Event Player.ButtonProperties[6][4] / 2 || Absolute Value(Event Player.CursorY - Event Player.ButtonProperties[6][3])
  • > Event Player.ButtonProperties[6][5] / 2)), Event Player.ButtonProperties[6][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[6][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[6][3] - 0.200), Event Player.ButtonProperties[6][8], Do Not Clip, Visible To Position and String,
  • Color(White), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • Create In-World Text(Filtered Array(Event Player,
  • Event Player.ButtonProperties[6][7] && Event Player.ButtonProperties[6][6] && Absolute Value(
  • Event Player.CursorX - Event Player.ButtonProperties[6][2]) <= Event Player.ButtonProperties[6][4] / 2 && Absolute Value(
  • Event Player.CursorY - Event Player.ButtonProperties[6][3]) <= Event Player.ButtonProperties[6][5] / 2),
  • Event Player.ButtonProperties[6][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[6][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[6][3] - 0.200), Event Player.ButtonProperties[6][8], Do Not Clip, Visible To Position and String,
  • Color(Yellow), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • " \r\nButtonProperties[7]"
  • Abort If(Count Of(Event Player.ButtonProperties) <= 7);
  • Create In-World Text(Filtered Array(Event Player, Event Player.ButtonProperties[7][7] && (
  • !Event Player.ButtonProperties[7][6] || Absolute Value(Event Player.CursorX - Event Player.ButtonProperties[7][2])
  • > Event Player.ButtonProperties[7][4] / 2 || Absolute Value(Event Player.CursorY - Event Player.ButtonProperties[7][3])
  • > Event Player.ButtonProperties[7][5] / 2)), Event Player.ButtonProperties[7][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[7][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[7][3] - 0.200), Event Player.ButtonProperties[7][8], Do Not Clip, Visible To Position and String,
  • Color(White), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • Create In-World Text(Filtered Array(Event Player,
  • Event Player.ButtonProperties[7][7] && Event Player.ButtonProperties[7][6] && Absolute Value(
  • Event Player.CursorX - Event Player.ButtonProperties[7][2]) <= Event Player.ButtonProperties[7][4] / 2 && Absolute Value(
  • Event Player.CursorY - Event Player.ButtonProperties[7][3]) <= Event Player.ButtonProperties[7][5] / 2),
  • Event Player.ButtonProperties[7][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[7][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[7][3] - 0.200), Event Player.ButtonProperties[7][8], Do Not Clip, Visible To Position and String,
  • Color(Yellow), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • " \r\nButtonProperties[8]"
  • Abort If(Count Of(Event Player.ButtonProperties) <= 8);
  • Create In-World Text(Filtered Array(Event Player, Event Player.ButtonProperties[8][7] && (
  • !Event Player.ButtonProperties[8][6] || Absolute Value(Event Player.CursorX - Event Player.ButtonProperties[8][2])
  • > Event Player.ButtonProperties[8][4] / 2 || Absolute Value(Event Player.CursorY - Event Player.ButtonProperties[8][3])
  • > Event Player.ButtonProperties[8][5] / 2)), Event Player.ButtonProperties[8][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[8][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[8][3] - 0.200), Event Player.ButtonProperties[8][8], Do Not Clip, Visible To Position and String,
  • Color(White), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • Create In-World Text(Filtered Array(Event Player,
  • Event Player.ButtonProperties[8][7] && Event Player.ButtonProperties[8][6] && Absolute Value(
  • Event Player.CursorX - Event Player.ButtonProperties[8][2]) <= Event Player.ButtonProperties[8][4] / 2 && Absolute Value(
  • Event Player.CursorY - Event Player.ButtonProperties[8][3]) <= Event Player.ButtonProperties[8][5] / 2),
  • Event Player.ButtonProperties[8][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[8][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[8][3] - 0.200), Event Player.ButtonProperties[8][8], Do Not Clip, Visible To Position and String,
  • Color(Yellow), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • " \r\nButtonProperties[9]"
  • Abort If(Count Of(Event Player.ButtonProperties) <= 9);
  • Create In-World Text(Filtered Array(Event Player, Event Player.ButtonProperties[9][7] && (
  • !Event Player.ButtonProperties[9][6] || Absolute Value(Event Player.CursorX - Event Player.ButtonProperties[9][2])
  • > Event Player.ButtonProperties[9][4] / 2 || Absolute Value(Event Player.CursorY - Event Player.ButtonProperties[9][3])
  • > Event Player.ButtonProperties[9][5] / 2)), Event Player.ButtonProperties[9][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[9][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[9][3] - 0.200), Event Player.ButtonProperties[9][8], Do Not Clip, Visible To Position and String,
  • Color(White), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • Create In-World Text(Filtered Array(Event Player,
  • Event Player.ButtonProperties[9][7] && Event Player.ButtonProperties[9][6] && Absolute Value(
  • Event Player.CursorX - Event Player.ButtonProperties[9][2]) <= Event Player.ButtonProperties[9][4] / 2 && Absolute Value(
  • Event Player.CursorY - Event Player.ButtonProperties[9][3]) <= Event Player.ButtonProperties[9][5] / 2),
  • Event Player.ButtonProperties[9][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[9][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[9][3] - 0.200), Event Player.ButtonProperties[9][8], Do Not Clip, Visible To Position and String,
  • Color(Yellow), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • " \r\nButtonProperties[10]"
  • Abort If(Count Of(Event Player.ButtonProperties) <= 10);
  • Create In-World Text(Filtered Array(Event Player, Event Player.ButtonProperties[10][7] && (
  • !Event Player.ButtonProperties[10][6] || Absolute Value(Event Player.CursorX - Event Player.ButtonProperties[10][2])
  • > Event Player.ButtonProperties[10][4] / 2 || Absolute Value(Event Player.CursorY - Event Player.ButtonProperties[10][3])
  • > Event Player.ButtonProperties[10][5] / 2)), Event Player.ButtonProperties[10][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[10][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[10][3] - 0.200), Event Player.ButtonProperties[10][8], Do Not Clip,
  • Visible To Position and String, Color(White), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • Create In-World Text(Filtered Array(Event Player,
  • Event Player.ButtonProperties[10][7] && Event Player.ButtonProperties[10][6] && Absolute Value(
  • Event Player.CursorX - Event Player.ButtonProperties[10][2]) <= Event Player.ButtonProperties[10][4] / 2 && Absolute Value(
  • Event Player.CursorY - Event Player.ButtonProperties[10][3]) <= Event Player.ButtonProperties[10][5] / 2),
  • Event Player.ButtonProperties[10][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[10][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[10][3] - 0.200), Event Player.ButtonProperties[10][8], Do Not Clip,
  • Visible To Position and String, Color(Yellow), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • " \r\nButtonProperties[11]"
  • Abort If(Count Of(Event Player.ButtonProperties) <= 11);
  • Create In-World Text(Filtered Array(Event Player, Event Player.ButtonProperties[11][7] && (
  • !Event Player.ButtonProperties[11][6] || Absolute Value(Event Player.CursorX - Event Player.ButtonProperties[11][2])
  • > Event Player.ButtonProperties[11][4] / 2 || Absolute Value(Event Player.CursorY - Event Player.ButtonProperties[11][3])
  • > Event Player.ButtonProperties[11][5] / 2)), Event Player.ButtonProperties[11][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[11][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[11][3] - 0.200), Event Player.ButtonProperties[11][8], Do Not Clip,
  • Visible To Position and String, Color(White), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • Create In-World Text(Filtered Array(Event Player,
  • Event Player.ButtonProperties[11][7] && Event Player.ButtonProperties[11][6] && Absolute Value(
  • Event Player.CursorX - Event Player.ButtonProperties[11][2]) <= Event Player.ButtonProperties[11][4] / 2 && Absolute Value(
  • Event Player.CursorY - Event Player.ButtonProperties[11][3]) <= Event Player.ButtonProperties[11][5] / 2),
  • Event Player.ButtonProperties[11][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[11][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[11][3] - 0.200), Event Player.ButtonProperties[11][8], Do Not Clip,
  • Visible To Position and String, Color(Yellow), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • " \r\nButtonProperties[12]"
  • Abort If(Count Of(Event Player.ButtonProperties) <= 12);
  • Create In-World Text(Filtered Array(Event Player, Event Player.ButtonProperties[12][7] && (
  • !Event Player.ButtonProperties[12][6] || Absolute Value(Event Player.CursorX - Event Player.ButtonProperties[12][2])
  • > Event Player.ButtonProperties[12][4] / 2 || Absolute Value(Event Player.CursorY - Event Player.ButtonProperties[12][3])
  • > Event Player.ButtonProperties[12][5] / 2)), Event Player.ButtonProperties[12][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[12][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[12][3] - 0.200), Event Player.ButtonProperties[12][8], Do Not Clip,
  • Visible To Position and String, Color(White), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • Create In-World Text(Filtered Array(Event Player,
  • Event Player.ButtonProperties[12][7] && Event Player.ButtonProperties[12][6] && Absolute Value(
  • Event Player.CursorX - Event Player.ButtonProperties[12][2]) <= Event Player.ButtonProperties[12][4] / 2 && Absolute Value(
  • Event Player.CursorY - Event Player.ButtonProperties[12][3]) <= Event Player.ButtonProperties[12][5] / 2),
  • Event Player.ButtonProperties[12][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[12][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[12][3] - 0.200), Event Player.ButtonProperties[12][8], Do Not Clip,
  • Visible To Position and String, Color(Yellow), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • " \r\nButtonProperties[13]"
  • Abort If(Count Of(Event Player.ButtonProperties) <= 13);
  • Create In-World Text(Filtered Array(Event Player, Event Player.ButtonProperties[13][7] && (
  • !Event Player.ButtonProperties[13][6] || Absolute Value(Event Player.CursorX - Event Player.ButtonProperties[13][2])
  • > Event Player.ButtonProperties[13][4] / 2 || Absolute Value(Event Player.CursorY - Event Player.ButtonProperties[13][3])
  • > Event Player.ButtonProperties[13][5] / 2)), Event Player.ButtonProperties[13][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[13][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[13][3] - 0.200), Event Player.ButtonProperties[13][8], Do Not Clip,
  • Visible To Position and String, Color(White), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • Create In-World Text(Filtered Array(Event Player,
  • Event Player.ButtonProperties[13][7] && Event Player.ButtonProperties[13][6] && Absolute Value(
  • Event Player.CursorX - Event Player.ButtonProperties[13][2]) <= Event Player.ButtonProperties[13][4] / 2 && Absolute Value(
  • Event Player.CursorY - Event Player.ButtonProperties[13][3]) <= Event Player.ButtonProperties[13][5] / 2),
  • Event Player.ButtonProperties[13][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[13][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[13][3] - 0.200), Event Player.ButtonProperties[13][8], Do Not Clip,
  • Visible To Position and String, Color(Yellow), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • " \r\nButtonProperties[14]"
  • Abort If(Count Of(Event Player.ButtonProperties) <= 14);
  • Create In-World Text(Filtered Array(Event Player, Event Player.ButtonProperties[14][7] && (
  • !Event Player.ButtonProperties[14][6] || Absolute Value(Event Player.CursorX - Event Player.ButtonProperties[14][2])
  • > Event Player.ButtonProperties[14][4] / 2 || Absolute Value(Event Player.CursorY - Event Player.ButtonProperties[14][3])
  • > Event Player.ButtonProperties[14][5] / 2)), Event Player.ButtonProperties[14][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[14][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[14][3] - 0.200), Event Player.ButtonProperties[14][8], Do Not Clip,
  • Visible To Position and String, Color(White), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • Create In-World Text(Filtered Array(Event Player,
  • Event Player.ButtonProperties[14][7] && Event Player.ButtonProperties[14][6] && Absolute Value(
  • Event Player.CursorX - Event Player.ButtonProperties[14][2]) <= Event Player.ButtonProperties[14][4] / 2 && Absolute Value(
  • Event Player.CursorY - Event Player.ButtonProperties[14][3]) <= Event Player.ButtonProperties[14][5] / 2),
  • Event Player.ButtonProperties[14][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[14][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[14][3] - 0.200), Event Player.ButtonProperties[14][8], Do Not Clip,
  • Visible To Position and String, Color(Yellow), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • " \r\nButtonProperties[15]"
  • Abort If(Count Of(Event Player.ButtonProperties) <= 15);
  • Create In-World Text(Filtered Array(Event Player, Event Player.ButtonProperties[15][7] && (
  • !Event Player.ButtonProperties[15][6] || Absolute Value(Event Player.CursorX - Event Player.ButtonProperties[15][2])
  • > Event Player.ButtonProperties[15][4] / 2 || Absolute Value(Event Player.CursorY - Event Player.ButtonProperties[15][3])
  • > Event Player.ButtonProperties[15][5] / 2)), Event Player.ButtonProperties[15][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[15][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[15][3] - 0.200), Event Player.ButtonProperties[15][8], Do Not Clip,
  • Visible To Position and String, Color(White), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • Create In-World Text(Filtered Array(Event Player,
  • Event Player.ButtonProperties[15][7] && Event Player.ButtonProperties[15][6] && Absolute Value(
  • Event Player.CursorX - Event Player.ButtonProperties[15][2]) <= Event Player.ButtonProperties[15][4] / 2 && Absolute Value(
  • Event Player.CursorY - Event Player.ButtonProperties[15][3]) <= Event Player.ButtonProperties[15][5] / 2),
  • Event Player.ButtonProperties[15][0],
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonProperties[15][2] + Event Player.MenuYAxis * (
  • Event Player.ButtonProperties[15][3] - 0.200), Event Player.ButtonProperties[15][8], Do Not Clip,
  • Visible To Position and String, Color(Yellow), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • }
  • }
  • disabled rule("Menu activated > Create cursor")
  • {
  • event
  • {
  • Subroutine;
  • CreateMenuCursor;
  • }
  • actions
  • {
  • "The next four rules create the actual cursor that the player can move around. For the cursor to render over all other text, it must be the last in-world text to become visible. Thus, we create two identical cursors that alternate visibility every frame."
  • Create In-World Text(Filtered Array(Event Player, Total Time Elapsed % 0.032 > 0.016), Custom String("▲"), World Vector Of(
  • Local Vector Of(Event Player.CursorPos + Event Player.MenuYAxis * -0.200, Event Player, Rotation And Translation),
  • Event Player, Rotation And Translation), 3, Do Not Clip, Visible To and Position, Color(White), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • Create In-World Text(Filtered Array(Event Player, Total Time Elapsed % 0.032 < 0.016), Custom String("▲"), World Vector Of(
  • Local Vector Of(Event Player.CursorPos + Event Player.MenuYAxis * -0.200, Event Player, Rotation And Translation),
  • Event Player, Rotation And Translation), 3, Do Not Clip, Visible To and Position, Color(White), Default Visibility);
  • Modify Player Variable(Event Player, MenuVFX, Append To Array, Last Text ID);
  • }
  • }
  • disabled rule("Menu deactivated > Clean up")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • "Dummy bots were getting menu stuff and causing server crashes, so we exclude them from these rules."
  • Is Dummy Bot(Event Player) == False;
  • "Triggers once whenever the menu is closed. Technically also triggers when the game starts but that, uh, probably won't cause any problems."
  • Event Player.IsInMenuMode == False;
  • }
  • actions
  • {
  • "Return aim speed to normal."
  • Set Aim Speed(Event Player, 100);
  • "Reenable buttons previously reserved for menu clicking."
  • Set Primary Fire Enabled(Event Player, True);
  • Set Secondary Fire Enabled(Event Player, True);
  • "Reenable the HUD."
  • Enable Game Mode HUD(Event Player);
  • Enable Hero HUD(Event Player);
  • "Stop all active chases"
  • Stop Chasing Player Variable(Event Player, MenuEyePos);
  • Stop Chasing Player Variable(Event Player, CursorPos);
  • Stop Chasing Player Variable(Event Player, CursorX);
  • Stop Chasing Player Variable(Event Player, CursorY);
  • "Loops through all the components of the menu, destroying each one. Note that there is currently no wait in here, so if the array has a lot of elements, the server may be under a lot of stress for a moment. This may be a good place to reduce load if needed."
  • For Player Variable(Event Player, __iter__, 0, Count Of(Event Player.MenuVFX), 1);
  • "Since trying to destroy the wrong type of entity doesn't cause any errors, we simply try each type on the current entity, allowing for any type of effect or icon to be placed in MenuVFX for cleanup when the menu is closed."
  • Destroy In-World Text(Event Player.MenuVFX[Event Player.__iter__]);
  • disabled Destroy Effect(Event Player.MenuVFX[Event Player.__iter__]);
  • disabled Destroy Icon(Event Player.MenuVFX[Event Player.__iter__]);
  • disabled Destroy HUD Text(Event Player.MenuVFX[Event Player.__iter__]);
  • End;
  • }
  • }
  • disabled rule("Detect primary fire button press")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • "Dummy bots were getting menu stuff and causing server crashes, so we exclude them from these rules."
  • Is Dummy Bot(Event Player) == False;
  • "Rather than checking for a button click in conditions, we only check for a mouse click so that the player can't press down primary fire then move the cursor onto the button."
  • Event Player.IsInMenuMode == True;
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • }
  • actions
  • {
  • "Clears the primary action ID queue."
  • Event Player.ActionIDQueue = Empty Array;
  • "Checks if the cursor is currently within radius of the exit button."
  • If(Distance Between(Event Player.CursorPos,
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonExitMenu[2] + Event Player.MenuYAxis * Event Player.ButtonExitMenu[3])
  • <= 100 * Event Player.ButtonExitMenu[4]);
  • "Add the exit button's action ID to the primary action ID queue."
  • Modify Player Variable(Event Player, ActionIDQueue, Append To Array, Event Player.ButtonExitMenu[1]);
  • End;
  • "For each button, checks if the cursor is within that button's click area."
  • For Player Variable(Event Player, __iter__, 0, Count Of(Event Player.ButtonProperties), 1);
  • If(Absolute Value(Event Player.CursorX - Event Player.ButtonProperties[Event Player.__iter__][2])
  • <= Event Player.ButtonProperties[Event Player.__iter__][4] / 2 && Absolute Value(
  • Event Player.CursorY - Event Player.ButtonProperties[Event Player.__iter__][3])
  • <= Event Player.ButtonProperties[Event Player.__iter__][5] / 2);
  • "If so, add that button's primary action ID to the queue."
  • Modify Player Variable(Event Player, ActionIDQueue, Append To Array, Event Player.ButtonProperties[Event Player.__iter__][1]);
  • End;
  • End;
  • "Set the current action ID variable to the first button clicked for one tick."
  • Event Player.CurrActionID = First Of(Event Player.ActionIDQueue);
  • Wait(0.016, Ignore Condition);
  • Event Player.CurrActionID = Null;
  • }
  • }
  • disabled rule("Detect secondary fire button press")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • "Dummy bots were getting menu stuff and causing server crashes, so we exclude them from these rules."
  • Is Dummy Bot(Event Player) == False;
  • "Rather than checking for a button click in conditions, we only check for a mouse click so that the player can't press down secondary fire then move the cursor onto the button."
  • Event Player.IsInMenuMode == True;
  • Is Button Held(Event Player, Button(Secondary Fire)) == True;
  • }
  • actions
  • {
  • "Clears the secondary action ID queue."
  • Event Player.ActionIDQueue_Secondary = Empty Array;
  • "Checks if the cursor is currently within radius of the exit button."
  • If(Distance Between(Event Player.CursorPos,
  • Event Player.MenuEyePos + Event Player.MenuZAxis * 3 + Event Player.MenuXAxis * Event Player.ButtonExitMenu[2] + Event Player.MenuYAxis * Event Player.ButtonExitMenu[3])
  • <= 100 * Event Player.ButtonExitMenu[4]);
  • "Add the exit button's action ID to the secondary action ID queue."
  • Modify Player Variable(Event Player, ActionIDQueue_Secondary, Append To Array, Event Player.ButtonExitMenu[1]);
  • End;
  • "For each button, checks if the cursor is within that button's click area."
  • For Player Variable(Event Player, __iter__, 0, Count Of(Event Player.ButtonProperties), 1);
  • If(Absolute Value(Event Player.CursorX - Event Player.ButtonProperties[Event Player.__iter__][2])
  • <= Event Player.ButtonProperties[Event Player.__iter__][4] / 2 && Absolute Value(
  • Event Player.CursorY - Event Player.ButtonProperties[Event Player.__iter__][3])
  • <= Event Player.ButtonProperties[Event Player.__iter__][5] / 2);
  • "If so, add that button's secondary action ID to the queue."
  • Modify Player Variable(Event Player, ActionIDQueue_Secondary, Append To Array,
  • Event Player.ButtonProperties[Event Player.__iter__][9]);
  • End;
  • End;
  • "Set the current action ID variable to the first button clicked for one tick."
  • Event Player.CurrActionID_Secondary = First Of(Event Player.ActionIDQueue_Secondary);
  • Wait(0.016, Ignore Condition);
  • Event Player.CurrActionID_Secondary = Null;
  • }
  • }
  • disabled rule("Pick Hero")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == False;
  • Global.AssemblingHeroes == True;
  • Event Player.CurrActionID == Custom String("Mercy");
  • Global.Mercy == False;
  • }
  • actions
  • {
  • Start Forcing Player To Be Hero(Event Player, Hero(Mercy));
  • Global.Mercy = True;
  • Event Player.IsInMenuMode = False;
  • Communicate(Filtered Array(Players On Hero(Hero(Mercy), Team 2), Is Dummy Bot(Current Array Element)), Hello);
  • Global.HeroesPicked += 1;
  • Create In-World Text(All Players(Team 2), Event Player, Filtered Array(Players On Hero(Hero(Mercy), Team 2), Is Dummy Bot(
  • Current Array Element)), 1, Clip Against Surfaces, Visible To Position and String, Color(Blue), Default Visibility);
  • }
  • }
  • disabled rule("Select Hero")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == False;
  • Global.AssemblingHeroes == True;
  • Event Player.CurrActionID == Custom String("Genji");
  • Global.Genji == False;
  • }
  • actions
  • {
  • Global.Genji = True;
  • Start Forcing Player To Be Hero(Event Player, Hero(Genji));
  • Event Player.IsInMenuMode = False;
  • Communicate(Filtered Array(Players On Hero(Hero(Genji), Team 2), Is Dummy Bot(Current Array Element)), Hello);
  • Global.HeroesPicked += 1;
  • Create In-World Text(All Players(Team 2), Event Player, Filtered Array(Players On Hero(Hero(Genji), Team 2), Is Dummy Bot(
  • Current Array Element)), 1, Clip Against Surfaces, Visible To Position and String, Color(Blue), Default Visibility);
  • }
  • }
  • disabled rule("Select Hero")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == False;
  • Global.AssemblingHeroes == True;
  • Event Player.CurrActionID == Custom String("Winston");
  • Global.Winston == False;
  • }
  • actions
  • {
  • Global.Winston = True;
  • Start Forcing Player To Be Hero(Event Player, Hero(Winston));
  • Event Player.IsInMenuMode = False;
  • Communicate(Filtered Array(Players On Hero(Hero(Winston), Team 2), Is Dummy Bot(Current Array Element)), Hello);
  • Global.HeroesPicked += 1;
  • Create In-World Text(All Players(Team 2), Event Player, Filtered Array(Players On Hero(Hero(Winston), Team 2), Is Dummy Bot(
  • Current Array Element)), 1, Clip Against Surfaces, Visible To Position and String, Color(Blue), Default Visibility);
  • }
  • }
  • disabled rule("Select Hero")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == False;
  • Global.AssemblingHeroes == True;
  • Event Player.CurrActionID == Custom String("Tracer");
  • Global.Tracer == False;
  • }
  • actions
  • {
  • Global.Tracer = True;
  • Start Forcing Player To Be Hero(Event Player, Hero(Tracer));
  • Event Player.IsInMenuMode = False;
  • Communicate(Filtered Array(Players On Hero(Hero(Tracer), Team 2), Is Dummy Bot(Current Array Element)), Hello);
  • Global.HeroesPicked += 1;
  • Create In-World Text(All Players(Team 2), Event Player, Filtered Array(Players On Hero(Hero(Tracer), Team 2), Is Dummy Bot(
  • Current Array Element)), 1, Clip Against Surfaces, Visible To Position and String, Color(Blue), Default Visibility);
  • }
  • }
  • disabled rule("Picked all heroes")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.HeroesPicked == Count Of(Filtered Array(All Players(Team 2), !Is Dummy Bot(Current Array Element)));
  • Global.Allheroes == False;
  • }
  • actions
  • {
  • Wait(0.250, Ignore Condition);
  • Global.Countdown = True;
  • }
  • }
  • disabled rule("Picked all heroes")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.HeroesPicked < Count Of(Filtered Array(All Players(Team 2), !Is Dummy Bot(Current Array Element)));
  • Global.Allheroes == False;
  • }
  • actions
  • {
  • Wait(0.250, Ignore Condition);
  • Global.Countdown = False;
  • }
  • }
  • disabled rule(">>>EDIT BUTTON & LABEL STARTING VALUES HERE<<<")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • "Dummy bots were getting menu stuff and causing server crashes, so we exclude them from these rules."
  • Is Dummy Bot(Event Player) == False;
  • "This rule currently resets all buttons to their initial states any time the menu is opened. If you want button states to persist between menu uses, disable this condition."
  • Event Player.IsInMenuMode == True;
  • }
  • actions
  • {
  • "Empty the button properties array."
  • Event Player.ButtonProperties = Empty Array;
  • "Sample button"
  • Modify Player Variable(Event Player, ButtonProperties, Append To Array, Array(Array(Custom String("Mercy"), Custom String("Mercy"),
  • -2, -1, 1, 0.150, True, Global.Mercy == True ? False : True, 3, Null, Null, Null)));
  • "Sample button"
  • Modify Player Variable(Event Player, ButtonProperties, Append To Array, Array(Array(Custom String("Genji"), Custom String("Genji"),
  • -0.500, -1, 1, 0.150, True, Global.Genji == True ? False : True, 3, Null, Null, Null)));
  • "Sample button"
  • Modify Player Variable(Event Player, ButtonProperties, Append To Array, Array(Array(Custom String("Winston"), Custom String(
  • "Winston"), 0.500, -1, 1, 0.150, True, Global.Winston == True ? False : True, 3, Null, Null, Null)));
  • "Sample button"
  • Modify Player Variable(Event Player, ButtonProperties, Append To Array, Array(Array(Custom String("Tracer"), Custom String(
  • "Tracer"), 2, -1.500, 1, 0.150, True, Global.Tracer == True ? False : True, 3, Null, Null, Null)));
  • }
  • }
  • disabled rule("▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒a")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Allheroes")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.Allheroes = Workshop Setting Toggle(Custom String("Settings"), Custom String("All Heroes"), False, 0);
  • }
  • }
  • rule("All heroes - Pause Time")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Assembling Heroes == False;
  • }
  • actions
  • {
  • If(Global.Allheroes == True);
  • Wait(0.250, Ignore Condition);
  • Pause Match Time;
  • Set Player Allowed Heroes(All Players(All Teams), All Heroes);
  • Else;
  • Wait(0.250, Ignore Condition);
  • Pause Match Time;
  • }
  • }
  • rule("Initial Global")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global._classIndexes[1000] = 0;
  • Global._classIndexes[0] = -1;
  • Global._extendedGlobalCollection[1] = Index Of Array Value(Global._classIndexes, 0);
  • Global._classIndexes[Global._extendedGlobalCollection[1]] = -1;
  • Global._tempNodes = Empty Array;
  • Global._tempSegments = Empty Array;
  • Global._tempAttributes = Empty Array;
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-89.100, 4, -84.170));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-72.660, 4, -64.510));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-70.990, 3.850, -50.540));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-34.410, 5.850, -51.760));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-32.540, 5.850, -78.810));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-10.040, 5.850, -79.490));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-8.100, 6, -94.240));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-0.850, 6, -92.990));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(19.590, 5.860, -78.340));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(20.330, 5.830, -67.360));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(39.930, 5.830, -67.960));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(40.850, 5.830, -83.350));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(56.980, 5.830, -82.830));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(53.850, 6, -93.420));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(33.730, 10, -92.440));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(32.660, 10, -87.410));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(27.620, 10, -86.720));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(23.350, 10, -87.050));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(23.750, 10, -96.500));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(10.250, 6, -96.970));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(11.500, 6, -91.510));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(18.390, 6, -91.740));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(27.780, 12, -61.310));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(46.760, 11, -61.910));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(46.990, 5.980, -81.430));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(71, 5.990, -92.900));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(69.310, 6.040, -83.380));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(89.350, 3.990, -78.490));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(96.040, 7, -46.730));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(133.120, 6.080, -46.720));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(133.550, 6, -57.050));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(145.560, 9.010, -57.500));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(145.160, 9.020, -62.880));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(126.070, 12.290, -62.610));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(124.080, 12.030, -55.580));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(149.240, 9, -30.770));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(149.520, 9, -27.490));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(124.570, 10.010, -33.570));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(103.010, 2.050, -78.690));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(101.150, 2.330, -67.550));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(103.460, 2.580, -33.070));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(97.890, 4.460, -36.780));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(85.650, 6.990, -53.230));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(78.200, 6.990, -62.120));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(77.430, 6.990, -76.490));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(70.910, 5.990, -77.030));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(0.360, 6, -96.610));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(106.520, -0.340, -47.930));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(81.190, 6.990, -52.780));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(82.580, 9, -33.140));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(86.160, 9, -33.440));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(85.780, 12.100, -48.910));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(47.710, 11, -67.480));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(53.530, 11, -71.670));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(59.750, 11, -68.450));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(64.350, 11, -68.850));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(64.360, 12, -83.070));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(64.630, 10, -100.550));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(52.610, 6, -100.820));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(51.920, 11, -67.950));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(57.510, 11, -73.020));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-101.850, 4, -71.930));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-108.690, 4, -69.760));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-96.120, 10, -58.960));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-91.870, 10, -62.290));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-90.790, 4, -62.130));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-82.010, 4, -65.050));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-77.550, 3.850, -60.620));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-99.060, 4, -51.540));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-100.230, 4.180, -40.500));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-91.720, 4, -36.690));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-65.880, 4, -61.330));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-65.240, 6, -77.560));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-54.690, 6, -75.420));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-53.580, 6, -70.370));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-46.350, 6, -68.190));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-45.770, 6, -61.100));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-59.500, 6, -60.550));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-59.810, 6, -69.760));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-46.230, 6, -56.320));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-69.450, 3.950, -39.350));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-54.460, 3.950, -37.940));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-53.680, 3.950, -28.330));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-49.280, 4, -28.540));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-48.030, 6, -37.600));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-41, 6, -38.150));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-17.190, 6.050, -68.990));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-16.500, 11.340, -51.720));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-28.460, 12, -51.010));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-9.290, 11, -50.610));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-10.410, 8, -31.340));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-16.290, 8, -32.330));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-16.280, 6, -43.120));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-25.930, 6.030, -43.290));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-37.370, 6, -86.730));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-37.280, 10, -98.320));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-23.890, 10, -98.240));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-19.500, 10, -96.670));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-24.830, 6, -85.050));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-24.280, 6, -89.790));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-12.390, 6, -90.900));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-0.200, 6, -79.770));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(0.750, 6, -55.800));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(16.220, 6, -57.570));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(12.630, 6, -62));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(5.370, 8, -61.690));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(5.030, 12, -76.100));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-0.930, 12, -79.180));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(12.430, 12, -79.420));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(34.390, 12, -57.790));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(19.160, 6, -50.010));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(33.600, 6.080, -52.390));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(34.440, 6, -61.400));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(34.970, 12, -62.080));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(64.850, 11, -73.890));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(74.630, 7.270, -73.690));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(149.080, 9, -31.590));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(148.340, 9, -26.790));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(124.030, 10, -29.960));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(124.460, 6.010, -40.740));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(126.600, 6.010, -35.320));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(127.360, 6, -31.290));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(138.540, 6, -33.250));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(123.430, 6.070, -49.340));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(133.330, 6, -62.540));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(123.560, 6, -61.580));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(124.850, 6, -53.170));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(39.250, 6.100, -88.930));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(38, 4, -96.080));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(30.440, 4, -96.160));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(28.940, 4, -101.170));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(10.700, 6, -100.730));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(105.470, 7.020, -46.530));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(82.010, 7, -45.690));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-47.270, 10, -38.610));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-45.270, 10, -42.670));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-49.440, 9.980, -43.060));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-49.510, 10, -35.330));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-49.120, 10, -32.270));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-36.520, 5.840, -31.710));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-37.230, 6, -35.710));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-47.420, 5.310, -50.320));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(43.510, 6, -63.360));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(47.410, 6.010, -62.640));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(47.400, 6.010, -66.890));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(57.110, 4, -67.420));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(57.030, 6.080, -77.360));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(92.450, 6.840, -51.020));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(101.980, 1.950, -72.720));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(-79.170, 4, -75.470));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(24.240, 8.550, -57.350));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(26.740, 6, -52.050));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(85.200, 4.650, -75.390));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(90.040, 6.990, -44.530));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(92.440, 7, -35.950));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(92.530, 9, -24.260));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(98.210, 8.960, -24.560));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(98.200, 9.070, -32.380));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(1, 2, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(3, 4, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(4, 5, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(5, 6, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(6, 7, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(7, 46, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(46, 19, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(19, 20, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(20, 21, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(21, 8, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(9, 10, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(10, 11, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(11, 24, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(24, 12, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(12, 13, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(13, 14, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(14, 15, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(15, 16, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(16, 17, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(17, 18, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(18, 19, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(16, 22, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(13, 25, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(26, 45, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(45, 44, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(44, 43, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(29, 30, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(30, 31, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(31, 32, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(32, 33, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(33, 34, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(41, 40, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(40, 47, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(38, 27, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(27, 26, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(27, 28, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(42, 48, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(48, 43, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(49, 50, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(50, 51, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(51, 42, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(24, 52, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(52, 23, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(52, 59, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(59, 53, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(53, 60, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(60, 54, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(54, 55, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(56, 57, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(57, 58, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(58, 13, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(60, 12, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(61, 62, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(62, 63, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(63, 64, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(61, Empty Array, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(61, 65, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(65, 66, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(1, 67, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(67, 66, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(65, 68, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(68, 69, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(69, 70, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(70, 2, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(2, 67, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(2, 71, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(71, 72, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(72, 73, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(73, 74, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(74, 75, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(75, 76, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(76, 77, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(77, 78, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(78, 74, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(76, 79, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(79, 3, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(2, 80, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(80, 81, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(81, 82, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(82, 83, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(83, 84, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(84, 85, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(85, 3, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(5, 86, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(86, 87, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(87, 88, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(88, 3, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(87, 89, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(89, 90, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(90, 91, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(91, 92, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(92, 93, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(93, 85, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(4, 94, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(94, 95, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(95, 96, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(96, 97, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(97, 6, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(4, 98, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(98, 99, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(99, 100, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(100, 6, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(7, 101, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(101, 8, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(101, 102, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(102, 103, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(103, 9, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(9, 104, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(104, 105, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(105, 106, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(106, 107, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(106, 108, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(107, 5, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(103, 110, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(111, 112, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(112, 10, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(109, 113, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(113, 22, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(113, 23, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(56, 12, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(55, 114, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(114, 56, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(114, 115, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(115, 44, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(25, 26, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(41, 28, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(116, 117, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(117, 118, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(118, 119, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(119, 29, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(119, 120, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(120, 121, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(116, 122, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(122, 29, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(122, 121, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(34, 123, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(123, 29, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(30, 124, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(124, 125, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(125, 126, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(126, 123, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(47, 39, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(11, 127, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(127, 128, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(128, 129, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(129, 130, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(130, 131, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(131, 19, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(29, 132, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(132, 28, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(48, 133, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(133, 49, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(85, 140, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(140, 139, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(139, 138, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(138, 137, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(137, 134, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(134, 135, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(134, 136, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(2, 141, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(141, 3, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(136, 141, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(135, 141, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(108, 8, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(8, 9, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(10, 142, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(142, 143, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(143, 144, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(144, 145, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(145, 146, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(146, 12, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(42, 147, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(147, 28, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(38, 148, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(148, 39, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(1, 149, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(149, Empty Array, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(103, 150, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(150, 109, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(111, 151, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(151, 110, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(28, 153, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(153, 133, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(153, 154, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(154, 155, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(155, 156, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(156, 157, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(157, 154, Empty Array));
  • Modify Global Variable(_tempAttributes, Append To Array, Vector(42, 51, 1));
  • Modify Global Variable(_tempAttributes, Append To Array, Vector(3, 88, 1));
  • Modify Global Variable(_tempAttributes, Append To Array, Vector(5, 107, 1));
  • Modify Global Variable(_tempAttributes, Append To Array, Vector(12, 56, 1));
  • Modify Global Variable(_tempAttributes, Append To Array, Vector(12, 60, 1));
  • Modify Global Variable(_tempAttributes, Append To Array, Vector(119, 118, 1));
  • Modify Global Variable(_tempAttributes, Append To Array, Vector(123, 34, 1));
  • Modify Global Variable(_tempAttributes, Append To Array, Vector(141, 135, 1));
  • Modify Global Variable(_tempAttributes, Append To Array, Vector(141, 136, 1));
  • Modify Global Variable(_tempAttributes, Append To Array, Vector(8, 108, 1));
  • Modify Global Variable(_tempAttributes, Append To Array, Vector(154, 157, 1));
  • Global.Nodes[Global._extendedGlobalCollection[1]] = Global._tempNodes;
  • Global.Segments[Global._extendedGlobalCollection[1]] = Global._tempSegments;
  • Global.Attributes[Global._extendedGlobalCollection[1]] = Global._tempAttributes;
  • Global.map = Global._extendedGlobalCollection[1];
  • }
  • }
  • rule("Disable - Global")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Disable Built-In Game Mode Completion;
  • }
  • }
  • rule("Disable - Player")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Global.AssemblingHeroes == True;
  • }
  • actions
  • {
  • Wait(0.250, Ignore Condition);
  • Disable Game Mode HUD(Event Player);
  • Disable Movement Collision With Players(Event Player);
  • Disable Hero HUD(Event Player);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Primary Fire Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • }
  • }
  • disabled rule("Assemble Screen")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Assembling Heroes == True;
  • Global.Allheroes == False;
  • }
  • actions
  • {
  • Wait(0.250, Abort When False);
  • Global.AssemblingHeroes = True;
  • Set Match Time(0);
  • Disable Game Mode In-World UI(All Players(Team 2));
  • Wait(0.250, Ignore Condition);
  • Pause Match Time;
  • }
  • }
  • disabled rule("Assemble Screen - BOTS")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.AssemblingHeroes == True;
  • Global.Allheroes == False;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Mercy), Team 2, 5, Vector(-108.578, 5.550, -77.872), Vector(-105.631, 5.551, -77.225));
  • Create Dummy Bot(Hero(Genji), Team 2, 6, Vector(-108.068, 5.550, -78.356), Vector(-105.631, 5.551, -77.225));
  • Create Dummy Bot(Hero(Winston), Team 2, 7, Vector(-107.364, 5.551, -79.024), Vector(-105.631, 5.551, -77.225));
  • Create Dummy Bot(Hero(Tracer), Team 2, 8, Vector(-106.471, 5.549, -79.874), Vector(-105.631, 5.551, -77.225));
  • }
  • }
  • disabled rule("Assemble Screen - BOTS")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.AssemblingHeroes == True;
  • Is Dummy Bot(Event Player) == True;
  • Global.Allheroes == False;
  • }
  • actions
  • {
  • Start Facing(Event Player, Direction Towards(Event Player, Vector(-105.284, 5.250, -76.645)), 100000000, To World,
  • Direction and Turn Rate);
  • }
  • }
  • disabled rule("Assemble Screen")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.AssemblingHeroes == True;
  • Is Dummy Bot(Event Player) == False;
  • Global.Allheroes == False;
  • }
  • actions
  • {
  • Wait(0.160, Ignore Condition);
  • Start Camera(All Players(Team 2), Vector(-105.631, 5.551, -77.225), Vector(-108.383, 5.550, -79.942), 0);
  • Start Forcing Player To Be Hero(Event Player, Hero(Soldier: 76));
  • Set Invisible(Event Player, All);
  • Set Status(Event Player, Null, Rooted, 9999);
  • Disable Hero HUD(Event Player);
  • Disable Nameplates(All Players(Team 2), Event Player);
  • }
  • }
  • disabled rule("Countdown")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.Countdown == True;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("3"));
  • Wait(1, Abort When False);
  • Small Message(Event Player, Custom String("2"));
  • Wait(1, Abort When False);
  • Small Message(Event Player, Custom String("1"));
  • Wait(1, Abort When False);
  • Event Player.IsInMenuMode = False;
  • Clear Status(Event Player, Rooted);
  • Stop Camera(Event Player);
  • Destroy All In-World Text;
  • Destroy All Dummy Bots;
  • Global.AssemblingHeroes = False;
  • Enable Game Mode In-World UI(Event Player);
  • Enable Hero HUD(Event Player);
  • Set Invisible(Event Player, None);
  • Enable Nameplates(All Players(Team 2), Event Player);
  • }
  • }
  • rule("Icons - Open")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.AssemblingHeroes == False;
  • }
  • actions
  • {
  • Wait(0.250, Ignore Condition);
  • Create In-World Text(All Players(Team 2), Custom String(" {0}\r\nOPEN", Ability Icon String(Hero(Pharah), Button(Ability 2))),
  • Vector(-95.524, 5.450, -77.836), 1.500, Do Not Clip, Visible To Position and String, Color(Blue), Default Visibility);
  • Global.ObjectiveIcon = Last Text ID;
  • Set Objective Description(All Players(Team 2), Custom String("EXIT THE GARAGE"), Visible To and String);
  • Wait(0.250, Ignore Condition);
  • Big Message(All Players(Team 2), Custom String("Exit the garage"));
  • }
  • }
  • rule("Open")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Event Player, Vector(-95.613, 5.359, -77.624)) <= 2;
  • Is Game In Progress == False;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Press {0} to open door", Input Binding String(Button(Interact))));
  • }
  • }
  • rule("Open")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Event Player, Vector(-95.613, 5.359, -77.624)) <= 2;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Is Game In Progress == False;
  • }
  • actions
  • {
  • Unpause Match Time;
  • Wait(0.250, Ignore Condition);
  • Set Match Time(0);
  • Destroy In-World Text(Global.ObjectiveIcon);
  • Wait(0.250, Ignore Condition);
  • Pause Match Time;
  • Set Match Time(100000000);
  • Big Message(All Players(Team 2), Custom String("GET TO THE DISTILLERY"));
  • Create In-World Text(All Players(Team 2), Custom String(" {0}\r\nDISTILLERY", Ability Icon String(Hero(Pharah), Button(
  • Ability 2))), Vector(-3.846, 7.175, -79.123), 1.500, Do Not Clip, Visible To Position and String, Color(Blue),
  • Default Visibility);
  • Set Objective Description(All Players(Team 2), Custom String("GET TO THE DISTILLERY"), Visible To and String);
  • Global.ObjectiveIcon = Last Text ID;
  • }
  • }
  • rule("Contest here")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Distance Between(Payload Position, Vector(56.125, 7.213, -82.903)) <= 5;
  • Global.Round < 6;
  • Is Game In Progress == True;
  • Number Of Heroes(Hero(Ana), Team 1) == 0;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Ana), Team 1, -1, Vector(56.125, 7.213, -82.903), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Invis bot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Ana;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Set Invisible(Event Player, All);
  • Set Status(Event Player, Null, Phased Out, 9999);
  • }
  • }
  • rule("Create Enemies - First Area")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(-72.032, 5.360, -60.926), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(-72.032, 5.360, -60.926), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(-72.032, 5.360, -60.926), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(-41.717, 7.051, -50.493), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(-41.717, 7.051, -50.493), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(-41.717, 7.051, -50.493), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(-41.717, 7.051, -50.493), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(-49.575, 10.496, -42.367), Vector(0, 0, 0));
  • Global.FirstWave = True;
  • }
  • }
  • rule("Create Enemies - First Area Part 2")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.FirstWave == True;
  • Number Of Players(Team 1) == 0;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(-40.030, 24.406, -40.539), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(-30.326, 24.403, -47.800), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(-30.326, 24.403, -47.800), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(-23.031, 12.455, -51.262), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(-23.031, 12.455, -51.262), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(-23.539, 6.480, -50.658), Vector(0, 0, 0));
  • Global.SecondWave = True;
  • Wait(0.250, Ignore Condition);
  • Global.FirstWave = False;
  • }
  • }
  • rule("Create Enemies - First Area Part 3")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.SecondWave == True;
  • Number Of Players(Team 1) == 4;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(-31.766, 20.398, -47.684), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(-38.485, 21.054, -44.372), Vector(0, 0, 0));
  • Global.ThirdWave = True;
  • Wait(0.250, Ignore Condition);
  • Global.SecondWave = False;
  • }
  • }
  • rule("Create Enemies - Second Area")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.ThirdWave == True;
  • Number Of Players(Team 1) == 0;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(-11.405, 6.305, -79.291), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(-11.405, 6.305, -79.291), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(-7.207, 6.320, -75.051), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(-7.128, 6.303, -77.813), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(-7.254, 6.303, -80.495), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(-7.090, 6.445, -83.533), Vector(0, 0, 0));
  • Wait Until(Number Of Players(Team 1) == 5, 99999);
  • Wait Until(Number Of Players(Team 1) <= 5, 99999);
  • Create Dummy Bot(Hero(Widowmaker), Team 1, -1, Vector(-1.107, 12.455, -80.166), Vector(0, 0, 0));
  • Global.FourthWave = True;
  • Wait(0.250, Ignore Condition);
  • Global.ThirdWave = False;
  • }
  • }
  • rule("Create Enemies - Second Area Part 2")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.FourthWave == True;
  • Number Of Players(Team 1) == 0;
  • }
  • actions
  • {
  • Global.FourthWave = False;
  • Create Effect(All Players(All Teams), Cloud, Color(White), Vector(-8.753, 6.455, -87.713), 1, Visible To Position and Radius);
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(-8.753, 6.455, -87.713), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(-8.753, 6.455, -87.713), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(-8.753, 6.455, -87.713), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(-8.753, 6.455, -87.713), Vector(0, 0, 0));
  • Wait(1, Ignore Condition);
  • Destroy All Effects;
  • Create Effect(All Players(All Teams), Cloud, Color(White), Vector(-8.753, 6.455, -87.713), 1, Visible To Position and Radius);
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(-8.360, 6.521, -69.313), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(-8.360, 6.521, -69.313), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(-8.360, 6.521, -69.313), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(-8.360, 6.521, -69.313), Vector(0, 0, 0));
  • Wait(1, Ignore Condition);
  • Destroy All Effects;
  • }
  • }
  • rule("Is dead remove")
  • {
  • event
  • {
  • Player Died;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Destroy Dummy Bot(Team Of(Event Player), Slot Of(Event Player));
  • }
  • }
  • rule("Shooting - Reaper")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reaper;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.LineofSight == True;
  • Count Of(Filtered Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Current Array Element.Invis == False), Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)))
  • > 0;
  • }
  • actions
  • {
  • Wait(1.500, Ignore Condition);
  • Press Button(Event Player, Button(Primary Fire));
  • Loop If Condition Is True;
  • }
  • }
  • rule("Pathfinder: Resolve Current")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.pathfinderDoGetCurrent == True;
  • }
  • actions
  • {
  • Event Player.pathfinderCurrent = Index Of Array Value(Global.Nodes[Event Player.pathmapReference], First Of(Sorted Array(
  • Filtered Array(Global.Nodes[Event Player.pathmapReference], Is In Line of Sight(Eye Position(Event Player),
  • Current Array Element, Barriers Do Not Block LOS) == True), Distance Between(Position Of(Event Player),
  • Current Array Element))));
  • Start Throttle In Direction(Event Player, Direction Towards(Position Of(Event Player),
  • Event Player.pathfinderCurrent == -1 ? Event Player.destination : Global.Nodes[Event Player.pathmapReference][Event Player.pathfinderCurrent]),
  • 1, To World, Replace existing throttle, Direction and Magnitude);
  • Event Player.pathfinderDoGetCurrent = False;
  • }
  • }
  • rule("Pathfinder: Resolve Next")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Position Of(Event Player),
  • Event Player.pathfinderCurrent == -1 ? Event Player.destination : Global.Nodes[Event Player.pathmapReference][Event Player.pathfinderCurrent])
  • <= 0.400;
  • Event Player.parentArray != Null;
  • }
  • actions
  • {
  • If(Event Player.pathfinderCurrent != -1);
  • Event Player.lastAttribute = Mapped Array(Filtered Array(Global.Attributes[Event Player.pathmapReference], X Component Of(
  • Current Array Element) == Event Player.pathfinderCurrent && Y Component Of(Current Array Element)
  • == Event Player.parentArray[Event Player.pathfinderCurrent] - 1), Z Component Of(Current Array Element));
  • Event Player.pathfinderCurrent = Event Player.parentArray[Event Player.pathfinderCurrent] - 1;
  • Else;
  • Stop Throttle In Direction(Event Player);
  • Event Player.parentArray = Null;
  • End;
  • }
  • }
  • rule("Moving")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Hero Of(Event Player) != Hero(Ana);
  • Hero Of(Event Player) != Hero(Widowmaker);
  • Event Player.LineofSight == True;
  • Distance Between(Event Player, First Of(Sorted Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Current Array Element.Invis == False), Distance Between(Event Player, Current Array Element)))) > 5;
  • Count Of(Filtered Array(All Players(Opposite Team Of(Team Of(Event Player))), Current Array Element.Invis == False)) > 0;
  • }
  • actions
  • {
  • Event Player._extendedPlayerCollection[0] = First Of(Sorted Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(
  • Event Player))), Current Array Element.Invis == False), Distance Between(Event Player, Current Array Element)));
  • Event Player.Dijkstra_Final_Path = Empty Array;
  • Event Player.Dijkstra_Final_Path_Attributes = Empty Array;
  • Event Player.Dijkstra_Current = Index Of Array Value(Global.Nodes[Global.map], First Of(Sorted Array(Global.Nodes[Global.map],
  • Distance Between(Event Player._extendedPlayerCollection[0], Current Array Element))));
  • Event Player.Dijkstra_Distances[Event Player.Dijkstra_Current] = 0.000;
  • Event Player.Dijkstra_Unvisited = Mapped Array(Global.Nodes[Global.map], Current Array Index);
  • While(Is True For Any(Event Player.Dijkstra_Unvisited, Event Player.Dijkstra_Distances[Current Array Element] != 0));
  • Wait(0.016, Ignore Condition);
  • Event Player.Dijkstra_Connected_Segments = Filtered Array(Global.Segments[Global.map], Array Contains(Append To Array(
  • Append To Array(Empty Array, X Component Of(Current Array Element)), Y Component Of(Current Array Element)),
  • Event Player.Dijkstra_Current));
  • Event Player._extendedPlayerCollection[1] = 0;
  • While(Event Player._extendedPlayerCollection[1] < Count Of(Event Player.Dijkstra_Connected_Segments));
  • Wait(0.016, Ignore Condition);
  • Event Player.Dijkstra_Neighbor_Index = First Of(Filtered Array(Append To Array(Append To Array(Empty Array, X Component Of(
  • Event Player.Dijkstra_Connected_Segments[Event Player._extendedPlayerCollection[1]])), Y Component Of(
  • Event Player.Dijkstra_Connected_Segments[Event Player._extendedPlayerCollection[1]])),
  • Current Array Element != Event Player.Dijkstra_Current));
  • Event Player.Dijkstra_Distance = Distance Between(Global.Nodes[Global.map][Event Player.Dijkstra_Neighbor_Index],
  • Global.Nodes[Global.map][Event Player.Dijkstra_Current]) + Event Player.Dijkstra_Distances[Event Player.Dijkstra_Current];
  • Event Player.Dijkstra_Neighbor_Attributes = Filtered Array(Global.Attributes[Global.map], Y Component Of(Current Array Element)
  • == Event Player.Dijkstra_Current && X Component Of(Current Array Element) == Event Player.Dijkstra_Neighbor_Index);
  • If((
  • Event Player.Dijkstra_Distances[Event Player.Dijkstra_Neighbor_Index] == 0 || Event Player.Dijkstra_Distance < Event Player.Dijkstra_Distances[Event Player.Dijkstra_Neighbor_Index])
  • && (!Count Of(Event Player.Dijkstra_Neighbor_Attributes) || Is True For Any(Event Player.Dijkstra_Neighbor_Attributes,
  • Array Contains(Null, Z Component Of(Current Array Element)))));
  • Event Player.Dijkstra_Distances[Event Player.Dijkstra_Neighbor_Index] = Event Player.Dijkstra_Distance;
  • Event Player.Dijkstra_Parent_Array[Event Player.Dijkstra_Neighbor_Index] = Event Player.Dijkstra_Current + 1;
  • End;
  • Event Player._extendedPlayerCollection[1] += 1;
  • End;
  • Modify Player Variable(Event Player, Dijkstra_Unvisited, Remove From Array By Value, Event Player.Dijkstra_Current);
  • Skip If(Index Of Array Value(Global.Nodes[Global.map], First Of(Sorted Array(Global.Nodes[Global.map], Distance Between(
  • Position Of(Event Player), Current Array Element)))) == Event Player.Dijkstra_Current, 2);
  • Event Player.Dijkstra_Current = First Of(Sorted Array(Filtered Array(Event Player.Dijkstra_Unvisited,
  • Event Player.Dijkstra_Distances[Current Array Element] != 0), Event Player.Dijkstra_Distances[Current Array Element]));
  • End;
  • Event Player.pathmapReference = Global.map;
  • Event Player.parentArray = Event Player.Dijkstra_Parent_Array;
  • Event Player.destination = First Of(Event Player._extendedPlayerCollection);
  • Event Player.pathfinderDoGetCurrent = True;
  • Event Player.Dijkstra_Current = 0;
  • Event Player.Dijkstra_Distances = 0;
  • Event Player.Dijkstra_Connected_Segments = 0;
  • Event Player.Dijkstra_Neighbor_Index = 0;
  • Event Player.Dijkstra_Distance = 0;
  • Event Player.Dijkstra_Parent_Array = 0;
  • Wait(5, Ignore Condition);
  • Loop If(Distance Between(Event Player, First Of(Sorted Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(
  • Event Player))), Current Array Element.Invis == False), Distance Between(Event Player, Current Array Element)))) <= 5);
  • }
  • }
  • rule("Moving Closer")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Distance Between(Event Player, First Of(Sorted Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Current Array Element.Invis == False), Distance Between(Event Player, Current Array Element)))) <= 5;
  • Hero Of(Event Player) != Hero(Ana);
  • Hero Of(Event Player) != Hero(Widowmaker);
  • Hero Of(Event Player) != Hero(Genji);
  • Count Of(Filtered Array(All Players(Opposite Team Of(Team Of(Event Player))), Current Array Element.Invis == False)) > 0;
  • }
  • actions
  • {
  • Stop Throttle In Direction(Event Player);
  • Wait(Random Integer(1, 2), Ignore Condition);
  • Start Throttle In Direction(Event Player, Direction Towards(Position Of(Event Player), Position Of(First Of(Sorted Array(
  • Filtered Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Current Array Element.Invis == False), Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)),
  • Distance Between(Event Player, Current Array Element)))) + Direction From Angles(Total Time Elapsed * 135, 0) * 5), 1,
  • To World, Replace existing throttle, Direction and Magnitude);
  • Wait(Random Integer(1, 2), Ignore Condition);
  • Loop If(Distance Between(Event Player, First Of(Sorted Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(
  • Event Player))), Current Array Element.Invis == False), Distance Between(Event Player, Current Array Element)))) <= 5);
  • }
  • }
  • rule("Shooting - Baptiste")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Baptiste;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Firing Primary(Event Player) == False;
  • Event Player.LineofSight == True;
  • Count Of(Filtered Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Current Array Element.Invis == False), Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)))
  • > 0;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Start Facing")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.LineofSight == True;
  • Count Of(Filtered Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Current Array Element.Invis == False), Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)))
  • > 0;
  • }
  • actions
  • {
  • Start Facing(Event Player, Direction Towards(Event Player, Eye Position(First Of(Sorted Array(Filtered Array(Filtered Array(
  • All Living Players(Opposite Team Of(Team Of(Event Player))), Current Array Element.Invis == False), Is In Line of Sight(
  • Event Player, Current Array Element, Barriers Do Not Block LOS)), Distance Between(Event Player, Current Array Element))))
  • + Down + Down), 200, To World, Direction and Turn Rate);
  • }
  • }
  • rule("Stop Facing")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Count Of(Filtered Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Current Array Element.Invis == False), Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)))
  • <= 0;
  • }
  • actions
  • {
  • Stop Facing(Event Player);
  • }
  • }
  • rule("All Dead")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Number Of Living Players(Team 2) == 0;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Declare Team Victory(Team 1);
  • }
  • }
  • rule("No Respawn")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • actions
  • {
  • Disable Built-In Game Mode Respawning(Event Player);
  • }
  • }
  • rule("Set Spawn After Game Starts")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Start Forcing Spawn Room(Team 2, 1);
  • }
  • }
  • rule("Damage - Assassin")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Genji;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Set Damage Dealt(Event Player, 25);
  • }
  • }
  • rule("Shooting - Widow")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Widowmaker;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Firing Secondary(Event Player) == True;
  • Count Of(Filtered Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Current Array Element.Invis == False), Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)))
  • > 0;
  • }
  • actions
  • {
  • Wait(2, Restart When True);
  • Press Button(Event Player, Button(Primary Fire));
  • Loop If Condition Is True;
  • }
  • }
  • rule("Aiming Widow")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Widowmaker;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Distance Between(Event Player, First Of(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Distance Between(
  • Event Player, Current Array Element)))) <= 5;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Event Player._extendedPlayerCollection[2] = Last Of(Sorted Array(Global.SniperPos, Distance Between(Event Player,
  • Current Array Element)));
  • "Set current to the first node."
  • Event Player.Dijkstra_Current_0 = Index Of Array Value(Global.Nodes[Global.map], First Of(Sorted Array(Global.Nodes[Global.map],
  • Distance Between(Event Player._extendedPlayerCollection[2], Current Array Element))));
  • Event Player.Dijkstra_Distances_0[Event Player.Dijkstra_Current_0] = 0.000;
  • Event Player.Dijkstra_Unvisited_0 = Mapped Array(Global.Nodes[Global.map], Current Array Index);
  • While(Is True For Any(Event Player.Dijkstra_Unvisited_0, Event Player.Dijkstra_Distances_0[Current Array Element]));
  • Wait(0.016, Ignore Condition);
  • Event Player.Dijkstra_Connected_Segments_0 = Filtered Array(Global.Segments[Global.map], Array Contains(Append To Array(
  • Append To Array(Empty Array, X Component Of(Current Array Element)), Y Component Of(Current Array Element)),
  • Event Player.Dijkstra_Current_0));
  • Event Player._extendedPlayerCollection[3] = 0;
  • While(Event Player._extendedPlayerCollection[3] < Count Of(Event Player.Dijkstra_Connected_Segments_0));
  • Wait(0.016, Ignore Condition);
  • Event Player.Dijkstra_Neighbor_Index_0 = First Of(Filtered Array(Append To Array(Append To Array(Empty Array, X Component Of(
  • Event Player.Dijkstra_Connected_Segments_0[Event Player._extendedPlayerCollection[3]])), Y Component Of(
  • Event Player.Dijkstra_Connected_Segments_0[Event Player._extendedPlayerCollection[3]])),
  • Current Array Element != Event Player.Dijkstra_Current_0));
  • Event Player.Dijkstra_Distance_0 = Distance Between(Global.Nodes[Global.map][Event Player.Dijkstra_Neighbor_Index_0],
  • Global.Nodes[Global.map][Event Player.Dijkstra_Current_0])
  • + Event Player.Dijkstra_Distances_0[Event Player.Dijkstra_Current_0];
  • Event Player.Dijkstra_Neighbor_Attributes_0 = Filtered Array(Global.Attributes[Global.map], Y Component Of(Current Array Element)
  • == Event Player.Dijkstra_Current_0 && X Component Of(Current Array Element) == Event Player.Dijkstra_Neighbor_Index_0);
  • "If the distance between this node and the neighbor node is lower than the node's current parent,\r\nthen the current node is closer and should be set as the neighbor's parent.\r\nAlternatively, if the neighbor's distance is 0, that means it was not set so this"
  • If((
  • !Event Player.Dijkstra_Distances_0[Event Player.Dijkstra_Neighbor_Index_0] || Event Player.Dijkstra_Distance_0 < Event Player.Dijkstra_Distances_0[Event Player.Dijkstra_Neighbor_Index_0])
  • && (!Count Of(Event Player.Dijkstra_Neighbor_Attributes_0) || Is True For Any(Event Player.Dijkstra_Neighbor_Attributes_0,
  • Array Contains(Null, Z Component Of(Current Array Element)))));
  • "Set the neighbor's distance to be the distance between the current node and neighbor node."
  • Event Player.Dijkstra_Distances_0[Event Player.Dijkstra_Neighbor_Index_0] = Event Player.Dijkstra_Distance_0;
  • "Set the neighbor's parent ('parentArray[neighborIndex]') to be current. 1 is added to current because\r\n0 means no parent was set yet (the first node will have current equal 0). This value will be subtracted\r\nback by 1 when used."
  • Event Player.Dijkstra_Parent_Array_0[Event Player.Dijkstra_Neighbor_Index_0] = Event Player.Dijkstra_Current_0 + 1;
  • End;
  • Event Player._extendedPlayerCollection[3] += 1;
  • End;
  • Modify Player Variable(Event Player, Dijkstra_Unvisited_0, Remove From Array By Value, Event Player.Dijkstra_Current_0);
  • Skip If(Index Of Array Value(Global.Nodes[Global.map], First Of(Sorted Array(Global.Nodes[Global.map], Distance Between(
  • Position Of(Event Player), Current Array Element)))) == Event Player.Dijkstra_Current_0, 2);
  • Event Player.Dijkstra_Current_0 = First Of(Sorted Array(Filtered Array(Event Player.Dijkstra_Unvisited_0,
  • Event Player.Dijkstra_Distances_0[Current Array Element] != 0), Event Player.Dijkstra_Distances_0[Current Array Element]));
  • End;
  • Event Player.pathmapReference = Global.map;
  • Event Player.parentArray = Event Player.Dijkstra_Parent_Array_0;
  • Event Player.destination = Event Player._extendedPlayerCollection[2];
  • Event Player.pathfinderDoGetCurrent = True;
  • Event Player.Dijkstra_Current_0 = 0;
  • Event Player.Dijkstra_Distances_0 = 0;
  • Event Player.Dijkstra_Connected_Segments_0 = 0;
  • Event Player.Dijkstra_Neighbor_Index_0 = 0;
  • Event Player.Dijkstra_Distance_0 = 0;
  • Event Player.Dijkstra_Parent_Array_0 = 0;
  • }
  • }
  • rule("Aiming Widow")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Widowmaker;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Distance Between(Event Player, First Of(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Distance Between(
  • Event Player, Current Array Element)))) > 5;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Stop Throttle In Direction(Event Player);
  • }
  • }
  • rule("Shooting - Widow")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Widowmaker;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Firing Secondary(Event Player) == False;
  • Count Of(Filtered Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Current Array Element.Invis == False), Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)))
  • > 0;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Shooting - Widow")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Widowmaker;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Firing Secondary(Event Player) == False;
  • Count Of(Filtered Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Current Array Element.Invis == False), Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)))
  • <= 0;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Sniper HP")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Widowmaker;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • If(Global.Normal == True);
  • Set Damage Dealt(Event Player, 33);
  • Set Max Health(Event Player, 150);
  • Wait(0.160, Ignore Condition);
  • Set Player Health(Event Player, 300);
  • Else If(Global.Hard == True);
  • Set Damage Dealt(Event Player, 83);
  • Set Max Health(Event Player, 225);
  • Wait(0.160, Ignore Condition);
  • Set Player Health(Event Player, 450);
  • Else If(Global.Expert == True);
  • Set Damage Dealt(Event Player, 125);
  • Set Max Health(Event Player, 300);
  • Wait(0.160, Ignore Condition);
  • Set Player Health(Event Player, 600);
  • Else If(Global.Legendary == True);
  • Set Damage Dealt(Event Player, 167);
  • Set Max Health(Event Player, 400);
  • Wait(0.160, Ignore Condition);
  • Set Player Health(Event Player, 800);
  • End;
  • }
  • }
  • rule("Modes")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.Normal = Workshop Setting Toggle(Custom String("Difficulty"), Custom String("Normal"), True, 0);
  • Global.Hard = Workshop Setting Toggle(Custom String("Difficulty"), Custom String("Hard"), False, 0);
  • Global.Expert = Workshop Setting Toggle(Custom String("Difficulty"), Custom String("Expert"), False, 0);
  • Global.Legendary = Workshop Setting Toggle(Custom String("Difficulty"), Custom String("Legendary"), False, 0);
  • }
  • }
  • rule("Distillery")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Distance Between(Payload Position, Vector(-5.929, 7.097, -79.301)) <= 5;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Small Message(All Players(Team 2), Custom String("Objective bonus: 1350"));
  • Global.TeamScore += 1350;
  • Destroy In-World Text(Global.ObjectiveIcon);
  • Set Objective Description(All Players(Team 2), Custom String("SECURE THE DISTILLERY"), Visible To and String);
  • Big Message(All Players(Team 2), Custom String("SECURE THE DISTILLERY"));
  • Global.SecureDistillery = True;
  • }
  • }
  • rule("Secure Distillery")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.SecureDistillery == True;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Wait(0.250, Ignore Condition);
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(17.768, 7.250, -86.534), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(17.768, 7.250, -86.534), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(27.843, 7.250, -72.872), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(52.726, 7.070, -83.137), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(52.726, 7.070, -83.137), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(51.839, 7.250, -87.605), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(51.839, 7.250, -87.605), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(64.232, 13.250, -83.238), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Survive Talon Forces")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.SecureDistillery == True;
  • Is Game In Progress == True;
  • Distance Between(Payload Position, Vector(56.125, 7.213, -82.903)) <= 5;
  • }
  • actions
  • {
  • Wait(1, Abort When False);
  • Big Message(All Players(Team 2), Custom String("SURVIVE THE INCOMING TALON FORCES"));
  • Set Objective Description(All Players(Team 2), Custom String("SURVIVE THE INCOMING TALON FORCES"), Visible To and String);
  • Global.Survive = True;
  • Global.SecureDistillery = False;
  • Global.Round = 1;
  • }
  • }
  • rule("Round 1")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Survive == True;
  • Global.Round == 1;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(52.366, 7.250, -101.304), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(52.366, 7.250, -101.304), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(52.366, 7.250, -101.304), Vector(0, 0, 0));
  • Wait(Random Integer(4, 6), Ignore Condition);
  • Create Dummy Bot(Hero(Genji), Team 1, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Wait Until(Number Of Players(Team 1) <= 1, 99999);
  • Create Effect(All Players(All Teams), Cloud, Color(White), Vector(19.887, 7.250, -62.647), 5, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Cloud, Color(White), Vector(56.097, 12.250, -71.812), 5, Visible To Position and Radius);
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(19.887, 7.250, -62.647), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(19.887, 7.250, -62.647), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(19.887, 7.250, -62.647), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(55.831, 12.250, -72.611), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(55.831, 12.250, -72.611), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(55.831, 12.250, -72.611), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(55.831, 12.250, -72.611), Vector(0, 0, 0));
  • Wait(1, Ignore Condition);
  • Destroy All Effects;
  • }
  • }
  • rule("Assassin")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Genji;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Global.Survive == True;
  • }
  • actions
  • {
  • Event Player.AsssasinPositions = Array(Vector(48.975, 12.166, -98.075), Vector(63.562, 13.250, -83.233), Vector(55.949, 12.358,
  • -75.544));
  • Event Player.Assasindopositions = True;
  • }
  • }
  • rule("Force Pos")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Genji;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.Assasindopositions == True;
  • }
  • actions
  • {
  • Wait(0.250, Ignore Condition);
  • Skip If(Is Using Ultimate(Event Player) == True, 1);
  • Press Button(Event Player, Button(Ultimate));
  • Start Forcing Player Position(Event Player, Random Value In Array(Event Player.AsssasinPositions), False);
  • Wait(1, Ignore Condition);
  • Start Forcing Player Position(Event Player, Random Value In Array(Event Player.AsssasinPositions), False);
  • Wait(1, Ignore Condition);
  • Stop Forcing Player Position(Event Player);
  • Wait(0.250, Ignore Condition);
  • Event Player.Assasindopositions = False;
  • }
  • }
  • rule("Melee to get Assassin off")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == False;
  • Has Status(Event Player, Knocked Down) == True;
  • Is Button Held(Event Player, Button(Melee)) == True;
  • }
  • actions
  • {
  • Clear Status(Event Player, Knocked Down);
  • Set Status(Sorted Array(Players On Hero(Hero(Genji), Team 1), Distance Between(Event Player, Current Array Element)), Null,
  • Stunned, 2);
  • Wait(2, Ignore Condition);
  • Sorted Array(Players On Hero(Hero(Genji), Team 1), Distance Between(Event Player, Current Array Element)).IsAttacking = False;
  • Sorted Array(Players On Hero(Hero(Genji), Team 1), Distance Between(Event Player, Current Array Element))
  • .Assasindopositions = True;
  • }
  • }
  • rule("Attack")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Genji;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Distance Between(Event Player, First Of(Sorted Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Current Array Element.Invis == False), Distance Between(Event Player, Current Array Element)))) <= 2;
  • }
  • actions
  • {
  • Damage(First Of(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Distance Between(Event Player,
  • Current Array Element))), Event Player, Global.Expert == True ? 100 : (Global.Legendary == True ? 150 : 50));
  • Stop Throttle In Direction(Event Player);
  • Set Status(Event Player, Null, Rooted, 9999);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Event Player.IsAttacking = True;
  • Set Status(First Of(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Distance Between(Event Player,
  • Current Array Element))), Null, Knocked Down, 9999);
  • }
  • }
  • rule("Attack")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 1;
  • Genji;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.Assasindopositions == False;
  • Event Player.IsAttacking == True;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • Clear Status(Event Player, Rooted);
  • Set Status(Event Player, Null, Stunned, 1);
  • Clear Status(First Of(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Distance Between(Event Player,
  • Current Array Element))), Knocked Down);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(1, Ignore Condition);
  • Event Player.IsAttacking = False;
  • Event Player.Assasindopositions = True;
  • }
  • }
  • rule("Attack")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Genji;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.Assasindopositions == False;
  • Horizontal Speed Of(Event Player) < 1;
  • Is On Wall(Event Player) == False;
  • Event Player.IsAttacking == False;
  • Has Status(Event Player, Stunned) == True;
  • }
  • actions
  • {
  • Wait Until(Has Status(Event Player, Stunned) == False, 99999);
  • Wait(0.160, Ignore Condition);
  • Clear Status(Event Player, Rooted);
  • Set Status(Event Player, Null, Stunned, 3);
  • Clear Status(All Players(Team 2), Knocked Down);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(3, Ignore Condition);
  • Event Player.IsAttacking = False;
  • Event Player.Assasindopositions = True;
  • }
  • }
  • rule("Stop Attack")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Genji;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.Assasindopositions == False;
  • Event Player.IsAttacking == True;
  • Distance Between(Event Player, First Of(Sorted Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Current Array Element.Invis == False), Distance Between(Event Player, Current Array Element)))) > 5;
  • }
  • actions
  • {
  • Clear Status(Event Player, Rooted);
  • Set Status(Event Player, Null, Stunned, 1);
  • Clear Status(All Players(Team 2), Knocked Down);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(1, Ignore Condition);
  • Event Player.Assasindopositions = True;
  • Event Player.IsAttacking = False;
  • }
  • }
  • rule("Dead Geji")
  • {
  • event
  • {
  • Player Died;
  • Team 1;
  • Genji;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Clear Status(Event Player, Rooted);
  • Set Status(Event Player, Null, Stunned, 1);
  • Clear Status(All Players(Team 2), Knocked Down);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Genji")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Genji;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Jump));
  • }
  • }
  • rule("Round 2")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Survive == True;
  • Global.Round == 2;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(44.490, 7.250, -63.348), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(44.490, 7.250, -63.348), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(44.490, 7.250, -63.348), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(44.490, 7.250, -63.348), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(57.123, 7.250, -75.865), Vector(0, 0, 0));
  • }
  • }
  • rule("Change Round")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Survive == True;
  • Count Of(Filtered Array(All Players(Team 1), Hero Of(Current Array Element) != Hero(Ana))) == 0;
  • }
  • actions
  • {
  • Global.Round += 1;
  • }
  • }
  • rule("Round 3")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Survive == True;
  • Global.Round == 3;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(27.337, 20.326, -79.188), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(27.337, 20.326, -79.188), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(27.337, 20.326, -79.188), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(27.337, 20.326, -79.188), Vector(0, 0, 0));
  • }
  • }
  • rule("Round 4")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Survive == True;
  • Global.Round == 4;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(38.995, 6.455, -90.064), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(31.662, 10.456, -95.158), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(27.515, 10.532, -89.070), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(10.411, 6.532, -99.799), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(10.411, 6.532, -99.799), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(10.411, 6.532, -99.799), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(10.411, 6.532, -99.799), Vector(0, 0, 0));
  • }
  • }
  • rule("Round 5")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Survive == True;
  • Global.Round == 5;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(27.291, 20.553, -80.092), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(27.291, 20.553, -80.092), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(27.291, 20.553, -80.092), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(20.906, 16.072, -69.660), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(20.906, 16.072, -69.660), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(20.906, 16.072, -69.660), Vector(0, 0, 0));
  • }
  • }
  • rule("Round 6")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Survive == True;
  • Global.Round == 6;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Widowmaker), Team 1, -1, Vector(63.898, 12.455, -82.597), Vector(0, 0, 0));
  • Wait(Random Integer(2, 3), Ignore Condition);
  • Create Dummy Bot(Hero(Widowmaker), Team 1, -1, Vector(15.277, 13.467, -67.934), Vector(0, 0, 0));
  • }
  • }
  • rule("Round 7")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Survive == True;
  • Global.Round == 7;
  • }
  • actions
  • {
  • Create Effect(All Players(All Teams), Cloud, Color(White), Vector(34.283, 6.455, -60.333), 5, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Cloud, Color(White), Vector(26.851, 10.455, -82.716), 5, Visible To Position and Radius);
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(26.851, 10.455, -82.716), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(26.851, 10.455, -82.716), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(26.851, 10.455, -82.716), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(34.283, 6.455, -60.333), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(34.283, 6.455, -60.333), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(34.283, 6.455, -60.333), Vector(0, 0, 0));
  • Wait(1, Ignore Condition);
  • Destroy All Effects;
  • Wait(4, Ignore Condition);
  • Create Dummy Bot(Hero(Wrecking Ball), Team 1, -1, Vector(26.514, 19.307, -79.801), Vector(0, 0, 0));
  • }
  • }
  • rule("Was Heavy Assault")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.Washeavyassault = True;
  • }
  • }
  • rule("Wrecking ball slam on entry")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Crouch));
  • }
  • }
  • rule("Wrecking ball slam on entry")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Is Dummy Bot(Event Player) == True;
  • Is Using Ability 1(Event Player) == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.250, Ignore Condition);
  • Loop If(Is Using Ability 1(Event Player) == True);
  • }
  • }
  • rule("Heavy Assault - Shooting")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.LineofSight == True;
  • Count Of(Filtered Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Current Array Element.Invis == False), Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)))
  • > 0;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Heavy Assault - Shooting")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Count Of(Filtered Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Current Array Element.Invis == False), Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)))
  • <= 0;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Heavy Assault Charge")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Event Player.Washeavyassault == True;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Wait(10, Ignore Condition);
  • Event Player.PreviousHP = Health(Event Player);
  • Event Player.Charge = True;
  • Loop;
  • }
  • }
  • rule("Heavy Assault Charge")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Event Player.Charge == True;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Start Forcing Player To Be Hero(Event Player, Hero(Reinhardt));
  • Wait(0.250, Ignore Condition);
  • Set Player Health(Event Player, Event Player.PreviousHP);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(1, Ignore Condition);
  • Event Player.Charging = True;
  • }
  • }
  • rule("Heavy Assualt Charge")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.Charging == True;
  • Is Using Ability 1(Event Player) == False;
  • }
  • actions
  • {
  • Event Player.PreviousHP = Health(Event Player);
  • Event Player.Charging = False;
  • Event Player.Charge = False;
  • Wait(0.250, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Hero(Wrecking Ball));
  • Wait(0.250, Ignore Condition);
  • Set Player Health(Event Player, Event Player.PreviousHP);
  • Set Status(Event Player, Null, Stunned, 3);
  • }
  • }
  • rule("Finish Waves")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Ana;
  • }
  • conditions
  • {
  • Global.Round == 8;
  • Global.Survive == True;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Destroy Dummy Bot(Team Of(Event Player), Slot Of(Event Player));
  • Small Message(All Players(Team 2), Custom String("Objective bonus: 2700"));
  • Global.TeamScore += 2700;
  • Big Message(All Players(Team 2), Custom String("TAKE THE TRUCK TO THE SEA FORT"));
  • Set Objective Description(All Players(Team 2), Custom String("TAKE THE TRUCK TO THE SEA FORT"), Visible To and String);
  • Global.Survive = False;
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(97.802, 7.605, -48.208), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(99.438, 7.605, -45.488), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(108.108, 7.484, -45.951), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(108.108, 7.484, -45.951), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(105.208, 7.490, -50.632), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("More enemies")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Distance Between(Payload Position, Vector(92.890, 6.401, -56.371)) <= 5;
  • Is Game In Progress == True;
  • Global.PayloadReachedpos == False;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(92.013, 27.380, -50.264), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(92.013, 27.380, -50.264), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(92.013, 27.380, -50.264), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(92.013, 27.380, -50.264), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(92.013, 27.380, -50.264), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(92.013, 27.380, -50.264), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(92.013, 27.380, -50.264), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(92.013, 27.380, -50.264), Vector(Empty Array, Empty Array, Empty Array));
  • Global.NextSpawns = True;
  • Global.PayloadReachedpos = True;
  • }
  • }
  • rule("Next Spawns")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.NextSpawns == True;
  • Number Of Players(Team 1) == 0;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(94.975, 9.523, -33.966), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(94.975, 9.523, -33.966), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(94.975, 9.523, -33.966), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(94.975, 9.523, -33.966), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(94.975, 9.523, -33.966), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(134.168, 6.532, -46.416), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(134.168, 6.532, -46.416), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Widowmaker), Team 1, -1, Vector(85.822, 12.422, -46.669), Vector(0, 0, 0));
  • Global.NextSpawns = False;
  • Global.NextSpawns2 = True;
  • }
  • }
  • rule("Next Spawns2")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.NextSpawns2 == True;
  • Number Of Players(Team 1) == 0;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Create Effect(All Players(All Teams), Cloud, Color(White), Vector(125.083, 6.455, -54.663), 5, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Cloud, Color(White), Vector(126.644, 6.588, -34.520), 5, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Cloud, Color(White), Vector(97.550, 5.619, -39.038), 5, Visible To Position and Radius);
  • Create Dummy Bot(Hero(Genji), Team 1, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(125.083, 6.455, -54.663), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(125.083, 6.455, -54.663), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(125.083, 6.455, -54.663), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(126.644, 6.588, -34.520), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(97.550, 5.619, -39.038), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(97.550, 5.619, -39.038), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(97.550, 5.619, -39.038), Vector(0, 0, 0));
  • Wait(1, Ignore Condition);
  • Destroy All Effects;
  • Global.NextSpawns2 = False;
  • }
  • }
  • rule("Revive")
  • {
  • event
  • {
  • Player Died;
  • Team 2;
  • All;
  • }
  • actions
  • {
  • Create Effect(All Players(Team 2), Ring, Color(Yellow), Position Of(Event Player), 3, Visible To Position and Radius);
  • Event Player.ReviveEffect = Last Created Entity;
  • Create In-World Text(All Players(Team 2), Custom String("REVIVE"), Position Of(Event Player), 1, Do Not Clip,
  • Visible To Position and String, Color(Yellow), Default Visibility);
  • Event Player.ReviveText = Last Text ID;
  • Event Player.CanBeRevived = True;
  • }
  • }
  • rule("Revive")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Event Player, First Of(Sorted Array(All Dead Players(Team Of(Event Player)), Distance Between(Event Player,
  • Current Array Element)))) <= 3;
  • Is Alive(Event Player) == True;
  • First Of(Sorted Array(All Dead Players(Team Of(Event Player)), Distance Between(Event Player, Current Array Element)))
  • .CanBeRevived == True;
  • }
  • actions
  • {
  • Big Message(First Of(Sorted Array(All Dead Players(Team Of(Event Player)), Distance Between(Event Player, Current Array Element))),
  • Custom String("Reviving"));
  • Small Message(Event Player, Custom String("Reviving..."));
  • Wait(3, Abort When False);
  • First Of(Sorted Array(All Dead Players(Team Of(Event Player)), Distance Between(Event Player, Current Array Element)))
  • .CanBeRevived = False;
  • Wait(0.250, Ignore Condition);
  • Destroy Effect(First Of(Sorted Array(All Dead Players(Team Of(Event Player)), Distance Between(Event Player,
  • Current Array Element))).ReviveEffect);
  • Destroy In-World Text(First Of(Sorted Array(All Dead Players(Team Of(Event Player)), Distance Between(Event Player,
  • Current Array Element))).ReviveText);
  • Destroy Progress Bar In-World Text(Event Player.ProgressBar);
  • Resurrect(First Of(Sorted Array(All Dead Players(Team Of(Event Player)), Distance Between(Event Player, Current Array Element))));
  • }
  • }
  • rule("Revive")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Destroy Effect(Event Player.ReviveEffect);
  • Destroy In-World Text(Event Player.ReviveText);
  • Destroy Progress Bar In-World Text(Event Player.ProgressBar);
  • }
  • }
  • rule("Revive")
  • {
  • event
  • {
  • Player Died;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is In Air(Event Player) == True;
  • }
  • actions
  • {
  • Teleport(Event Player, Nearest Walkable Position(Event Player));
  • }
  • }
  • rule("Revive Timer")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player.CanBeRevived == True;
  • }
  • actions
  • {
  • Event Player.ReviveTimer = 44;
  • Wait(0.250, Ignore Condition);
  • Chase Player Variable Over Time(Event Player, ReviveTimer, 0, 44, Destination and Duration);
  • Create Progress Bar In-World Text(All Players(All Teams), Event Player.ReviveTimer * 44 / 100, Null, Event Player, 2,
  • Create Progress Bar In-World Text(All Players(All Teams), Event Player.ReviveTimer * 44 / 100, Null, Event Player, 1,
  • Clip Against Surfaces, Color(Red), Color(White), None, Default Visibility);
  • Event Player.ProgressBar = Last Text ID;
  • Wait(44, Abort When False);
  • Abort If(Is Alive(Event Player) == True);
  • Event Player.CanBeRevived = False;
  • Destroy Effect(Event Player.ReviveEffect);
  • Destroy In-World Text(Event Player.ReviveText);
  • Create Effect(All Players(All Teams), Ring, Color(Red), Position Of(Event Player), 5, None);
  • Create In-World Text(All Players(All Teams), Custom String("DEAD"), Position Of(Event Player), 2, Do Not Clip, None, Color(Red),
  • Default Visibility);
  • Destroy Progress Bar In-World Text(Event Player.ProgressBar);
  • }
  • }
  • rule("Revive Timer")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player.CanBeRevived == False;
  • }
  • actions
  • {
  • Stop Chasing Player Variable(Event Player, ReviveTimer);
  • }
  • }
  • rule("Contest here")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Distance Between(Payload Position, Vector(134.372, 7.439, -46.234)) <= 5;
  • Is Game In Progress == True;
  • Global.ClearSeaFort == False;
  • Number Of Heroes(Hero(Ana), Team 1) == 0;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Ana), Team 1, -1, Vector(134.372, 7.439, -46.234), Vector(Empty Array, Empty Array, Empty Array));
  • Big Message(All Players(Team 2), Custom String("Clear The Sea Fort"));
  • Set Objective Description(All Players(Team 2), Custom String("Clear The Sea Fort"), Visible To and String);
  • Wait(0.250, Ignore Condition);
  • Global.ClearSeaFort = True;
  • Global.Round = 0;
  • }
  • }
  • rule("Assassin pos")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Genji;
  • }
  • conditions
  • {
  • Global.Survive == False;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.AsssasinPositions = Array(Vector(133.404, 14.757, -65.646), Vector(146.804, 16.300, -46.169), Vector(120.050, 15.158,
  • -46.252));
  • Event Player.Assasindopositions = True;
  • }
  • }
  • rule("Enforcer HP")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reaper;
  • }
  • actions
  • {
  • If(Global.Normal == True);
  • Set Damage Dealt(Event Player, 29);
  • Add Health Pool To Player(Event Player, Shields, 100, True, True);
  • Else If(Global.Hard == True);
  • Set Damage Dealt(Event Player, 71);
  • Add Health Pool To Player(Event Player, Shields, 100, True, True);
  • Else If(Global.Expert == True);
  • Set Damage Dealt(Event Player, 107);
  • Set Max Health(Event Player, 250);
  • Wait(0.160, Ignore Condition);
  • Set Player Health(Event Player, 500);
  • Add Health Pool To Player(Event Player, Shields, 200, True, True);
  • Else If(Global.Legendary == True);
  • Set Damage Dealt(Event Player, 143);
  • Set Max Health(Event Player, 225);
  • Wait(0.160, Ignore Condition);
  • Set Player Health(Event Player, 450);
  • Add Health Pool To Player(Event Player, Shields, 400, True, True);
  • End;
  • }
  • }
  • rule("Assassin HP")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Genji;
  • }
  • actions
  • {
  • If(Global.Normal == True);
  • Set Max Health(Event Player, 200);
  • Wait(0.160, Ignore Condition);
  • Set Player Health(Event Player, 400);
  • Add Health Pool To Player(Event Player, Shields, 100, True, True);
  • Else If(Global.Hard == True);
  • Set Max Health(Event Player, 400);
  • Wait(0.160, Ignore Condition);
  • Set Player Health(Event Player, 800);
  • Add Health Pool To Player(Event Player, Shields, 100, True, True);
  • Else If(Global.Expert == True);
  • Set Max Health(Event Player, 500);
  • Wait(0.160, Ignore Condition);
  • Set Player Health(Event Player, 1000);
  • Add Health Pool To Player(Event Player, Shields, 100, True, True);
  • Else If(Global.Legendary == True);
  • Set Max Health(Event Player, 400);
  • Wait(0.160, Ignore Condition);
  • Set Player Health(Event Player, 800);
  • Add Health Pool To Player(Event Player, Shields, 400, True, True);
  • End;
  • }
  • }
  • rule("Heavy Assault HP")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Wrecking Ball;
  • }
  • actions
  • {
  • If(Global.Normal == True);
  • Set Damage Dealt(Event Player, 120);
  • Set Max Health(Event Player, 1000);
  • Wait(0.160, Ignore Condition);
  • Set Player Health(Event Player, 6000);
  • Else If(Global.Hard == True);
  • Set Damage Dealt(Event Player, 120);
  • Set Max Health(Event Player, 1166);
  • Wait(0.160, Ignore Condition);
  • Set Player Health(Event Player, 7000);
  • Else If(Global.Expert == True);
  • Set Damage Dealt(Event Player, 180);
  • Set Max Health(Event Player, 1500);
  • Wait(0.160, Ignore Condition);
  • Set Player Health(Event Player, 9000);
  • Else If(Global.Legendary == True);
  • Set Damage Dealt(Event Player, 240);
  • Set Max Health(Event Player, 1833);
  • Wait(0.160, Ignore Condition);
  • Set Player Health(Event Player, 11000);
  • End;
  • }
  • }
  • rule("Change Round")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.ClearSeaFort == True;
  • Count Of(Filtered Array(All Players(Team 1), Hero Of(Current Array Element) != Hero(Ana))) == 0;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Global.Round += 1;
  • }
  • }
  • rule("Clear Sea Fort - Round 1")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.ClearSeaFort == True;
  • Global.Round == 1;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(153.781, 10.662, -62.169), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(153.781, 10.662, -62.169), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(153.781, 10.662, -62.169), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(153.781, 10.662, -62.169), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(153.664, 10.588, -29.895), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(153.664, 10.588, -29.895), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(153.664, 10.588, -29.895), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(153.664, 10.588, -29.895), Vector(0, 0, 0));
  • }
  • }
  • rule("Clear Sea Fort - Round 2")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.ClearSeaFort == True;
  • Global.Round == 2;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(141.407, 27.330, -43.987), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(141.407, 27.330, -43.987), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(141.407, 27.330, -43.987), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(141.407, 27.330, -43.987), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(132.601, 25.044, -45.877), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(132.601, 25.044, -45.877), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(132.601, 25.044, -45.877), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(132.601, 25.044, -45.877), Vector(0, 0, 0));
  • }
  • }
  • rule("Clear Sea Fort - Round 3")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.ClearSeaFort == True;
  • Global.Round == 3;
  • }
  • actions
  • {
  • Create Effect(All Players(Team 2), Cloud, Color(White), Vector(126.939, 12.428, -54.851), 5, Visible To Position and Radius);
  • Create Effect(All Players(Team 2), Cloud, Color(White), Vector(133.233, 6.455, -59.762), 5, Visible To Position and Radius);
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(125.455, 12.455, -56.235), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(125.455, 12.455, -56.235), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(125.455, 12.455, -56.235), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(133.332, 6.473, -62.341), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(123.913, 12.532, -53.475), Vector(0, 0, 0));
  • Wait(1, Ignore Condition);
  • Destroy All Effects;
  • Wait(2, Ignore Condition);
  • Create Dummy Bot(Hero(Widowmaker), Team 1, -1, Vector(124.314, 10.464, -34.289), Vector(0, 0, 0));
  • }
  • }
  • rule("Clear Sea Fort - Round 4")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.ClearSeaFort == True;
  • Global.Round == 4;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Widowmaker), Team 1, -1, Vector(148.168, 9.501, -61.271), Vector(0, 0, 0));
  • Wait(3, Ignore Condition);
  • Create Dummy Bot(Hero(Widowmaker), Team 1, -1, Vector(127.817, 12.403, -54.443), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Vector(138.521, 6.475, -28.245), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(138.521, 6.475, -28.245), Vector(0, 0, 0));
  • Wait Until(Number Of Heroes(Hero(Widowmaker), Team 1) == 0, 99999);
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Wrecking Ball), Team 1, -1, Vector(140.929, 27.210, -44.980), Vector(0, 0, 0));
  • If(Global.Expert == True);
  • Wait(25, Ignore Condition);
  • Create Dummy Bot(Hero(Wrecking Ball), Team 1, -1, Vector(140.929, 27.210, -44.980), Vector(0, 0, 0));
  • Else If(Global.Legendary == True);
  • Wait(25, Ignore Condition);
  • Create Dummy Bot(Hero(Wrecking Ball), Team 1, -1, Vector(140.929, 27.210, -44.980), Vector(0, 0, 0));
  • End;
  • Wait Until((Number Of Heroes(Hero(Wrecking Ball), Team 1) || Number Of Heroes(Hero(Reinhardt), Team 1)) == 0, 99999);
  • Wait(2, Ignore Condition);
  • Big Message(All Players(Team 2), Custom String("Arm The Truck"));
  • Set Objective Description(All Players(Team 2), Custom String("Arm The Truck"), Visible To and String);
  • Create In-World Text(All Players(Team 2), Custom String(" {0}\r\nPAYLOAD", Ability Icon String(Hero(Pharah), Button(
  • Ability 2))), Payload Position, 1.500, Do Not Clip, Visible To Position and String, Color(Blue), Default Visibility);
  • Global.ObjectiveIcon = Last Text ID;
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(138.398, 6.475, -28.215), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Vector(138.398, 6.475, -28.215), Vector(0, 0, 0));
  • Global.ArmTruck = True;
  • }
  • }
  • rule("Arm payload")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.ArmTruck == True;
  • Distance Between(Event Player, Payload Position) <= 5;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Press {0} to arm the Truck", Input Binding String(Button(Interact))));
  • }
  • }
  • rule("Arm payload")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.ArmTruck == True;
  • Distance Between(Event Player, Payload Position) <= 5;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • }
  • actions
  • {
  • Global.ArmTruck = False;
  • Big Message(All Players(Team 2), Custom String("PLAYLOAD ARMED"));
  • Global.TruckArmed = True;
  • }
  • }
  • rule("Arm payload")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.TruckArmed == True;
  • Payload Progress Percentage == 100;
  • }
  • actions
  • {
  • Big Message(All Players(Team 2), Custom String("OBJECTIVE COMPLETE"));
  • Small Message(All Players(Team 2), Custom String("Objective bonus: 4050"));
  • Global.TeamScore += 4050;
  • Wait(1, Ignore Condition);
  • Set Slow Motion(50);
  • Play Effect(All Players(Team 2), Bad Explosion, Color(Red), Vector(149.039, 7.542, -46.966), 200);
  • Play Effect(All Players(Team 2), Explosion Sound, Color(Red), Vector(149.039, 7.542, -46.966), 200);
  • Wait(1, Ignore Condition);
  • Declare Team Victory(Team 2);
  • }
  • }
  • rule("PAYLOAD ARMED")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Ana;
  • }
  • conditions
  • {
  • Global.TruckArmed == True;
  • }
  • actions
  • {
  • Destroy Dummy Bot(Team Of(Event Player), Slot Of(Event Player));
  • }
  • }
  • rule("Bap Reload")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Baptiste;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Ammo(Event Player, 0) < 1;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Reload));
  • }
  • }
  • rule("All heroes")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.Allheroes == True;
  • }
  • actions
  • {
  • Set Player Allowed Heroes(Event Player, All Heroes);
  • }
  • }
  • rule("Enable")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Global.AssemblingHeroes == False;
  • }
  • actions
  • {
  • Wait(0.250, Ignore Condition);
  • Enable Game Mode HUD(Event Player);
  • Enable Movement Collision With Players(Event Player);
  • Enable Hero HUD(Event Player);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Primary Fire Enabled(Event Player, True);
  • Set Secondary Fire Enabled(Event Player, True);
  • }
  • }
  • rule("Damage - Heavy Assault Charge")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reinhardt;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • If(Global.Normal == True);
  • Set Damage Dealt(Event Player, 100);
  • Else If(Global.Hard == True);
  • Set Damage Dealt(Event Player, 100);
  • Else If(Global.Expert == True);
  • Set Damage Dealt(Event Player, 150);
  • Else If(Global.Legendary == True);
  • Set Damage Dealt(Event Player, 200);
  • End;
  • }
  • }
  • rule("Damage - Troopers")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Baptiste;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • If(Global.Normal == True);
  • Set Damage Dealt(Event Player, 8);
  • Else If(Global.Hard == True);
  • Set Damage Dealt(Event Player, 17);
  • Else If(Global.Expert == True);
  • Set Damage Dealt(Event Player, 25);
  • Else If(Global.Legendary == True);
  • Set Damage Dealt(Event Player, 42);
  • End;
  • }
  • }
  • rule("Score - Kill Trooper")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Victim) == Hero(Baptiste);
  • }
  • actions
  • {
  • Global.TeamScore += 27;
  • }
  • }
  • rule("Score - Kill Enforcer")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Victim) == Hero(Reaper);
  • }
  • actions
  • {
  • Global.TeamScore += 81;
  • }
  • }
  • rule("Score - Kill Sniper")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Victim) == Hero(Widowmaker);
  • }
  • actions
  • {
  • Global.TeamScore += 216;
  • }
  • }
  • rule("Score - Kill Assassin")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Victim) == Hero(Genji);
  • }
  • actions
  • {
  • Global.TeamScore += 216;
  • }
  • }
  • rule("Score - Kill Heavy Assault")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Victim) == Hero(Wrecking Ball);
  • }
  • actions
  • {
  • Global.TeamScore += 675;
  • }
  • }
  • rule("Score - Kill Heavy Assault")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Victim) == Hero(Reinhardt);
  • }
  • actions
  • {
  • Global.TeamScore += 675;
  • }
  • }
  • rule("Heavy Assault - Melee")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Distance Between(Event Player, First Of(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Distance Between(
  • Event Player, Current Array Element)))) <= 3;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Melee));
  • }
  • }
  • rule("Heavy Assault - Melee")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 1;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Meleeing(Event Player) == True;
  • }
  • actions
  • {
  • Apply Impulse(First Of(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Distance Between(Event Player,
  • Current Array Element))), Direction Towards(First Of(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element))), Event Player), -50, To World, Cancel Contrary Motion);
  • }
  • }
  • rule("Challenge Missions")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.BloodMoonRising = Workshop Setting Toggle(Custom String("Challenge Missions"), Custom String("Blood Moon Rising"), False,
  • 0);
  • Global.StormRaging = Workshop Setting Toggle(Custom String("Challenge Missions"), Custom String("Storm Raging"), False, 0);
  • }
  • }
  • rule("Blood Moon Rising")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.BloodMoonRising == True;
  • }
  • actions
  • {
  • Global.Normal = False;
  • Global.Hard = False;
  • Global.Expert = True;
  • Global.Legendary = False;
  • Global.Allheroes = False;
  • }
  • }
  • rule("Blood Moon Rising")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.BloodMoonRising == True;
  • }
  • actions
  • {
  • Wait(0.250, Ignore Condition);
  • Set Player Allowed Heroes(Event Player, All Damage Heroes);
  • }
  • }
  • rule("Blood Moon Rising")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.BloodMoonRising == True;
  • }
  • actions
  • {
  • Heal(Event Player, Event Player, Event Damage);
  • }
  • }
  • rule("Storm Raging")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.StormRaging == True;
  • }
  • actions
  • {
  • Global.Normal = False;
  • Global.Hard = False;
  • Global.Expert = True;
  • Global.Legendary = False;
  • Global.Allheroes = True;
  • }
  • }
  • rule("Storm Raging")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Event Player.HasRage == True;
  • }
  • actions
  • {
  • Wait(0.500, Ignore Condition);
  • Set Status(Event Player, Null, Burning, 9999);
  • Set Damage Received(Event Player, 50);
  • Heal(Event Player, Event Player, 250);
  • If(Hero Of(Event Player) == Hero(Wrecking Ball));
  • Set Damage Dealt(Event Player, 230);
  • Else If(Hero Of(Event Player) == Hero(Reinhardt));
  • Set Damage Dealt(Event Player, 200);
  • Else If(Hero Of(Event Player) == Hero(Widowmaker));
  • Set Damage Dealt(Event Player, 175);
  • Else If(Hero Of(Event Player) == Hero(Baptiste));
  • Set Damage Dealt(Event Player, 75);
  • Else If(Hero Of(Event Player) == Hero(Reaper));
  • Set Damage Dealt(Event Player, 157);
  • Else If(Hero Of(Event Player) == Hero(Genji));
  • Set Damage Dealt(Event Player, 75);
  • End;
  • }
  • }
  • rule("Storm Raging")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.StormRaging == True;
  • }
  • actions
  • {
  • Random Value In Array(All Players(Team 1)).HasRage = True;
  • }
  • }
  • rule("Storm Raging")
  • {
  • event
  • {
  • Player Died;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Event Player.HasRage == True;
  • }
  • actions
  • {
  • Random Value In Array(Filtered Array(All Players(Team 1), Current Array Element.HasRage == False)).HasRage = True;
  • Random Value In Array(Filtered Array(All Players(Team 1), Current Array Element.HasRage == False)).HasRage = True;
  • Clear Status(Event Player, Burning);
  • }
  • }
  • rule("Storm Raging")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • All Players(Team 1).HasRage == False;
  • }
  • actions
  • {
  • Wait(0.500, Ignore Condition);
  • Random Value In Array(All Players(Team 1)).HasRage = True;
  • }
  • }
  • rule("Invis")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Sombra;
  • }
  • conditions
  • {
  • Is Using Ability 1(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.Invis = True;
  • }
  • }
  • rule("Invis")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Sombra;
  • }
  • conditions
  • {
  • Is Using Ability 1(Event Player) == False;
  • }
  • actions
  • {
  • Event Player.Invis = False;
  • }
  • }
  • rule("Invis")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.CreateSelfPromotionText == False;
  • }
  • actions
  • {
  • Big Message(All Players(All Teams), Custom String("This version is not legitimate!"));
  • Small Message(All Players(All Teams), Custom String("MESSAGE WAITEDBOAT4#7816 AND REPORT THE CODE"));
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Color(White), All Players(All Teams), 200);
  • Set Status(All Players(All Teams), Null, Rooted, 9999);
  • Wait(0.250, Ignore Condition);
  • Loop;
  • }
  • }
  • rule("Teleport to group")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player.Joined == False;
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Number Of Living Players(Team 2) > 0;
  • Is Dummy Bot(Event Player) == False;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Teleport(Event Player, All Living Players(Team 2));
  • Event Player.Joined = True;
  • }
  • }
  • rule("Wrecking ball takes 10% knockback")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Set Knockback Received(Event Player, 10);
  • }
  • }
  • rule("Reinhardt takes 10% knockback")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reinhardt;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Set Knockback Received(Event Player, 10);
  • }
  • }
  • rule("Preload Reinhardt")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Preload Hero(Event Player, Hero(Reinhardt));
  • }
  • }
  • rule("Preload Wrecking ball")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reinhardt;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Preload Hero(Event Player, Hero(Wrecking Ball));
  • }
  • }
  • rule("Line of Sight")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Distance Between(Event Player, First Of(Sorted Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Current Array Element.Invis == False), Distance Between(Event Player, Current Array Element)))) <= 20;
  • Is In Line of Sight(Event Player, First Of(Sorted Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Current Array Element.Invis == False), Distance Between(Event Player, Current Array Element))), Barriers Do Not Block LOS)
  • == True;
  • }
  • actions
  • {
  • Event Player.LineofSight = True;
  • }
  • }
  • rule("Line of Sight")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Survive == True;
  • }
  • actions
  • {
  • Global.LineofSight = True;
  • }
  • }
  • rule("Line of Sight")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Global.LineofSight == True;
  • }
  • actions
  • {
  • Event Player.LineofSight = True;
  • }
  • }
  • rule("Line of Sight")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Widowmaker;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.LineofSight = True;
  • }
  • }
  • rule("Line of Sight")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.LineofSight = True;
  • }
  • }
  • rule("Distillery Spawns")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.Spawns = Array(Vector(43.481, 7.065, -83.180), Vector(20.628, 7.162, -79.653), Vector(33.658, 5.250, -98.174), Vector(
  • 65.070, 11.250, -99.674));
  • }
  • }
  • rule("Passive - Distillery Spawns")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Survive == True;
  • (Number Of Heroes(Hero(Genji), Team 1) || Number Of Heroes(Hero(Reinhardt), Team 1) || Number Of Heroes(Hero(Widowmaker), Team 1)
  • || Number Of Heroes(Hero(Wrecking Ball), Team 1)) > 0;
  • }
  • actions
  • {
  • Wait(Random Integer(5, 20), Abort When False);
  • Global.CurrentSpawn = Random Value In Array(Filtered Array(Global.Spawns, Is In Line of Sight(All Players(Team 2),
  • Current Array Element, Barriers Do Not Block LOS) == False));
  • Create Dummy Bot(Hero(Reaper), Team 1, -1, Global.CurrentSpawn, Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Global.CurrentSpawn, Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Global.CurrentSpawn, Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Global.CurrentSpawn, Vector(0, 0, 0));
  • Loop If(Global.Survive == True);
  • }
  • }
  • rule("Cancel Hook")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 2;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Using Ability 1(Event Player) == True;
  • Array Contains(Array(Hero(Wrecking Ball), Hero(Reinhardt)), Hero Of(Victim)) == True;
  • }
  • actions
  • {
  • Cancel Primary Action(Event Player);
  • }
  • }
  • rule("Cancel Charge")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Reinhardt;
  • }
  • conditions
  • {
  • Is Using Ability 1(Event Player) == True;
  • Distance Between(Event Player, Players On Hero(Array Contains(Array(Hero(Wrecking Ball), Hero(Reinhardt)), Hero Of(
  • Closest Player To(Event Player, Opposite Team Of(Team Of(Event Player))))), Opposite Team Of(Team Of(Event Player)))) <= 2;
  • Number Of Heroes(Hero(Wrecking Ball), Team 1) > 0;
  • Number Of Heroes(Hero(Reinhardt), Team 1) > 0;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Stunned, 0.100);
  • }
  • }
  • rule("Reaper Gets Ignored")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Reaper;
  • }
  • conditions
  • {
  • Is Using Ability 1(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.Invis = True;
  • }
  • }
  • rule("Reaper Gets Ignored")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Reaper;
  • }
  • conditions
  • {
  • Is Using Ability 1(Event Player) == False;
  • }
  • actions
  • {
  • Event Player.Invis = False;
  • }
  • }
  • rule("Sea Fort Spawns")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.ClearSeaFort == True;
  • }
  • actions
  • {
  • Global.Spawns = Array(Vector(124.072, 6.455, -60.113), Vector(127.759, 6.455, -29.918), Vector(133.483, 6.455, -62.663), Vector(
  • 134.858, 5.432, -18.582));
  • }
  • }
  • rule("Passive - Sea Fort Spawns")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.ClearSeaFort == True;
  • Is Game In Progress == True;
  • (Number Of Heroes(Hero(Genji), Team 1) || Number Of Heroes(Hero(Reinhardt), Team 1) || Number Of Heroes(Hero(Widowmaker), Team 1)
  • || Number Of Heroes(Hero(Wrecking Ball), Team 1)) > 0;
  • }
  • actions
  • {
  • Wait(Random Integer(5, 20), Abort When False);
  • Global.CurrentSpawn = Random Value In Array(Filtered Array(Global.Spawns, Is In Line of Sight(All Players(Team 2),
  • Current Array Element, Barriers Do Not Block LOS) == False));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Global.CurrentSpawn, Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Global.CurrentSpawn, Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Global.CurrentSpawn, Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Global.CurrentSpawn, Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Baptiste), Team 1, -1, Global.CurrentSpawn, Vector(0, 0, 0));
  • Loop If(Global.ClearSeaFort == True);
  • }
  • }
  • rule("Widow Positions First Area")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Global.SniperPos = Array(Vector(-0.863, 12.455, -79.492), Vector(-26.572, 8.689, -69.528), Vector(-19.551, 14.898, -84.050));
  • }
  • }
  • rule("Widow Positions Distillery")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Survive == True;
  • }
  • actions
  • {
  • Global.SniperPos = Array(Vector(15.473, 13.467, -67.787), Vector(42.166, 11.661, -90.343), Vector(64.930, 12.455, -83.050), Vector(
  • 55.295, 11.455, -74.135));
  • }
  • }
  • rule("Widow Positions Sea Fort")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round == 8;
  • }
  • actions
  • {
  • Global.SniperPos = Array(Vector(86.641, 12.501, -48.290), Vector(117.935, 13.498, -57.781), Vector(123.813, 12.455, -53.457),
  • Vector(124.487, 10.457, -33.262));
  • }
  • }
  • rule("Widow Hook")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Widowmaker;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Distance Between(Event Player, First Of(Sorted Array(Global.SniperPos, Distance Between(Event Player, Current Array Element))))
  • > 5;
  • Distance Between(Event Player, First Of(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Distance Between(
  • Event Player, Current Array Element)))) <= 5;
  • }
  • actions
  • {
  • Wait(5, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Event Player, Evaluate Once(Vector(Random Integer(-500, 500), 13, Random Integer(-500,
  • 500)))), 500, To World, Direction and Turn Rate);
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(1, Ignore Condition);
  • Skip If(Count Of(Filtered Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Current Array Element.Invis == False), Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)))
  • <= 0, 1);
  • Start Facing(Event Player, Direction Towards(Event Player, Eye Position(First Of(Sorted Array(Filtered Array(Filtered Array(
  • All Living Players(Opposite Team Of(Team Of(Event Player))), Current Array Element.Invis == False), Is In Line of Sight(
  • Event Player, Current Array Element, Barriers Do Not Block LOS)), Distance Between(Event Player, Current Array Element))))
  • + Down + Down), 200, To World, Direction and Turn Rate);
  • }
  • }
  • rule("Invicible")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Workshop Setting Toggle(Custom String("Settings"), Custom String("Invicible"), False, 0) == True;
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Invincible, 9999);
  • }
  • }
  • rule("Trooper Melee")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Baptiste;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.LineofSight == True;
  • Distance Between(Event Player, First Of(Sorted Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Current Array Element.Invis == False), Distance Between(Event Player, Current Array Element)))) <= 3;
  • Count Of(Filtered Array(All Players(Opposite Team Of(Team Of(Event Player))), Current Array Element.Invis == False)) > 0;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Melee));
  • }
  • }
Join the Workshop.codes Discord