Create
Return to post

Comparing difference between and

View raw
  • settings
  • {
  • main
  • {
  • Description: "Junkenstein's Revenge PVE - made by Waitedboat4#2760 - Update V11.9: Shock-Tire Modifier"
  • }
  • lobby
  • {
  • Map Rotation: Paused
  • Max Spectators: 6
  • Max Team 1 Players: 4
  • Max Team 2 Players: 0
  • Return To Lobby: Never
  • Swap Teams After Match: No
  • }
  • modes
  • {
  • Team Deathmatch
  • {
  • enabled maps
  • {
  • Eichenwalde Halloween
  • }
  • }
  • General
  • {
  • Allow Hero Switching: Off
  • Kill Cam: Off
  • Mercy Resurrect Counteracts Kills: Off
  • Self Initiated Respawn: Off
  • Spawn Health Packs: Disabled
  • }
  • }
  • heroes
  • {
  • Team 1
  • {
  • Ashe
  • {
  • Coach Gun Knockback Scalar Enemy: 90%
  • }
  • Brigitte
  • {
  • Whip Shot Knockback Scalar: 90%
  • }
  • D.Va
  • {
  • Boosters Knockback Scalar: 90%
  • }
  • Doomfist
  • {
  • Rising Uppercut Knockback Scalar: 90%
  • Rocket Punch Knockback Scalar: 90%
  • }
  • Junkrat
  • {
  • Concussion Mine Knockback Scalar: 90%
  • }
  • Lúcio
  • {
  • Soundwave Knockback Scalar: 90%
  • }
  • Pharah
  • {
  • Concussive Blast Knockback Scalar: 90%
  • }
  • Wrecking Ball
  • {
  • Grappling Claw Knockback Scalar: 90%
  • }
  • }
  • Team 2
  • {
  • D.Va
  • {
  • Boosters Knockback Scalar: 0%
  • }
  • Junkrat
  • {
  • No Ammunition Requirement: On
  • Spawn With Ultimate Ready: On
  • }
  • Mercy
  • {
  • Weapons Enabled: Caduceus Staff Only
  • }
  • Sigma
  • {
  • Spawn With Ultimate Ready: On
  • }
  • Symmetra
  • {
  • Spawn With Ultimate Ready: On
  • }
  • Zarya
  • {
  • Health: 40%
  • }
  • Zenyatta
  • {
  • Movement Speed: 65%
  • }
  • }
  • }
  • }
  • variables
  • {
  • global:
  • 0: _extendedGlobalCollection
  • 2: Nodes
  • 3: Segments
  • 4: Attributes
  • 5: map
  • 6: _classIndexes
  • 7: _tempNodes
  • 8: _tempSegments
  • 9: _tempAttributes
  • 10: DoorHealth
  • 11: UndeadSpawnPoints
  • 12: Score
  • 13: Junkdiff
  • 14: Reapdiff
  • 15: Mondiff
  • 16: Sumdiff
  • 17: Witchdiff
  • 18: mins
  • 19: sec
  • 20: GAMEBROKE
  • 21: Reaperintro
  • 22: Monintro
  • 23: Junkintro
  • 24: Sumintro
  • 25: Witchintro
  • 26: FrenziedStampede
  • 27: Effects
  • 28: Allheroes
  • 29: Forever
  • 30: TheMaeDiff
  • 31: TheMaeIntro
  • 32: Createmaestro
  • 33: NumberofZens
  • 34: NumberofZombardiers
  • 35: AddAI
  • 36: RevengeIntro
  • 37: Cutsceneended
  • 38: CurrentBonusKills
  • 39: NormalWaves
  • 40: EndGame
  • 41: HUDtext
  • 42: Endless
  • 43: Waveint
  • 44: MaxWave
  • 45: BonusWave
  • 46: WaveType
  • 47: Zencankick
  • 48: Shrinkingpotion
  • 49: Hugepotion
  • 50: Normal
  • 51: Hard
  • 52: Expert
  • 53: Legendary
  • 54: Stopspawningaiteam1
  • 55: DestroyallTeam2
  • 56: VengefulGhost
  • 57: Ghost
  • 58: GhostPOS
  • 59: Shocktire
  • 60: Ghostspawning
  • 61: VolatileZomnics
  • 62: Kills
  • 63: ThreeTheyWere
  • 64: MysterySwap
  • 65: ShockingSurprise
  • 66: StartingDoorHP
  • 67: DoorHPColour
  • 68: DamagedHP
  • player:
  • 0: _extendedPlayerCollection
  • 1: DoorPath
  • 2: DoorPathIndex
  • 3: Invis
  • 4: Finishedpath
  • 5: Lastpos
  • 7: pathfinderDoGetCurrent
  • 8: pathfinderCurrent
  • 9: pathmapReference
  • 10: parentArray
  • 11: destination
  • 12: lastAttribute
  • 13: Dijkstra_Final_Path
  • 14: Dijkstra_Final_Path_Attributes
  • 15: Dijkstra_Current
  • 16: Dijkstra_Distances
  • 17: Dijkstra_Unvisited
  • 18: Dijkstra_Connected_Segments
  • 19: Dijkstra_Neighbor_Index
  • 20: Dijkstra_Distance
  • 21: Dijkstra_Neighbor_Attributes
  • 22: Dijkstra_Parent_Array
  • 23: Dijkstra_Final_Path_0
  • 24: Dijkstra_Final_Path_Attributes_0
  • 25: Dijkstra_Current_0
  • 26: Dijkstra_Distances_0
  • 27: Dijkstra_Unvisited_0
  • 28: Dijkstra_Connected_Segments_0
  • 29: Dijkstra_Neighbor_Index_0
  • 30: Dijkstra_Distance_0
  • 31: Dijkstra_Neighbor_Attributes_0
  • 32: Dijkstra_Parent_Array_0
  • 33: Dijkstra_Final_Path_1
  • 34: Dijkstra_Final_Path_Attributes_1
  • 35: Dijkstra_Current_1
  • 36: Dijkstra_Distances_1
  • 37: Dijkstra_Unvisited_1
  • 38: Dijkstra_Connected_Segments_1
  • 39: Dijkstra_Neighbor_Index_1
  • 40: Dijkstra_Distance_1
  • 41: Dijkstra_Neighbor_Attributes_1
  • 42: Dijkstra_Parent_Array_1
  • 43: WasUsingUlt
  • 44: CanReceiveEliteBonus
  • 53: Dijkstra_Final_Path_3
  • 54: Dijkstra_Final_Path_Attributes_3
  • 55: Dijkstra_Current_3
  • 56: Dijkstra_Distances_3
  • 57: Dijkstra_Unvisited_3
  • 58: Dijkstra_Connected_Segments_3
  • 59: Dijkstra_Neighbor_Index_3
  • 60: Dijkstra_Distance_3
  • 61: Dijkstra_Neighbor_Attributes_3
  • 62: Dijkstra_Parent_Array_3
  • }
  • rule("Disable - Global")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Global.Stopspawningaiteam1 = False;
  • Global.Shocktire = Empty Array;
  • Disable Built-In Game Mode Completion;
  • Disable Built-In Game Mode Scoring;
  • Disable Built-In Game Mode Announcer;
  • Disable Messages(All Players(Team 1));
  • Wait(6, Ignore Condition);
  • Enable Messages(All Players(Team 1));
  • }
  • }
  • rule("Disable - Player")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Disable Game Mode In-World UI(Event Player);
  • Disable Game Mode HUD(Event Player);
  • Disable Death Spectate Target HUD(Event Player);
  • Disable Death Spectate All Players(Event Player);
  • }
  • }
  • rule("Junkenstein's Revenge intro")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Global.RevengeIntro = True;
  • Create Dummy Bot(Hero(Junkrat), Team 2, -1, Vector(60.605, 20.639, -92.102), Vector(60.840, 20.152, -90.710));
  • Start Camera(All Players(All Teams), Vector(61.588, 19.575, -89.057), Vector(62.016, 20.321, -92.440), 0);
  • Wait(2, Ignore Condition);
  • Start Camera(All Players(All Teams), Vector(73.852, 17.921, -95.652), Vector(67.776, 19.183, -94.479), 1);
  • Wait(2, Ignore Condition);
  • Create Dummy Bot(Hero(Zenyatta), Team 2, -1, Vector(68.333, 15.200, -97.410), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Zenyatta), Team 2, -1, Vector(68.333, 15.200, -97.410), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Zenyatta), Team 2, -1, Vector(68.333, 15.200, -97.410), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Zenyatta), Team 2, -1, Vector(68.333, 15.200, -97.410), Vector(0, 0, 0));
  • Start Camera(All Players(All Teams), Vector(75.266, 14.085, -94.347), Vector(69.998, 14.476, -97.515), 1);
  • Wait(2, Ignore Condition);
  • Start Camera(All Players(All Teams), Vector(81.784, 24.712, -90.594), Vector(77.399, 27.034, -95.033), 1);
  • Big Message(All Players(All Teams), Custom String("JUNKENSTEIN'S REVENGE™"));
  • Wait(4, Ignore Condition);
  • Stop Camera(All Players(All Teams));
  • Global.Cutsceneended = True;
  • Wait(0.500, Ignore Condition);
  • Global.RevengeIntro = False;
  • Global.Cutsceneended = False;
  • }
  • }
  • rule("Initial Global")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global._classIndexes[1000] = 0;
  • 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(87.190, 12.650, -71.510));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(85.470, 12.680, -77.710));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(76.990, 12.660, -66.540));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(93.590, 12.680, -72.380));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(93.020, 12.670, -77.800));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(103.010, 12.680, -74.210));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(103.940, 12.730, -79.220));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(103.320, 9.990, -86.370));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(101.990, 9.550, -92.100));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(78.530, 12.690, -99.600));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(74.670, 10.880, -110.610));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(66.730, 12.180, -94.560));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(72.780, 12.660, -70.900));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(68.040, 12.720, -70.320));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(65.140, 12.720, -75.570));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(61.610, 18.720, -88.080));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(60.800, 18.720, -92.610));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(59.170, 18.720, -98.750));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(70.110, 15.180, -63.960));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(67.400, 17.670, -68.020));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(63.980, 18.040, -74.490));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(59.470, 18.040, -76.530));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(59.380, 18.050, -82.820));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(62.720, 18.260, -87.210));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(93.680, 12.720, -101.340));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(97.810, 12.720, -101.310));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(94.600, 12.720, -109.360));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(90.910, 12.720, -107.600));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(91.230, 12.720, -116.380));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(81.770, 10.720, -110.940));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(91.670, 12.720, -104.200));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(72.190, 10.720, -114.450));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(64.490, 10.740, -113.930));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(54.240, 6.720, -103.980));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(59.100, 4.720, -85.400));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(66.450, 4.900, -83.080));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(58.290, 6.720, -71.060));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(59.590, 6.720, -74.580));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(60.390, 8.620, -68.710));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(57.810, 17.720, -103.560));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(58.300, 10.760, -93.530));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(57.240, 11.130, -87.580));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(54.230, 11.800, -85.620));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(59.260, 11.720, -72.790));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(63.750, 12.720, -73.820));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(53.750, 10.720, -103.790));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(58.050, 10.720, -105.670));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(57.140, 10.720, -110.500));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(62.060, 10.720, -115.150));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(70.500, 13.310, -77.490));
  • Modify Global Variable(_tempNodes, Append To Array, Vector(65.670, 7.780, -107.900));
  • Modify Global Variable(_tempSegments, Append To Array, Up);
  • Modify Global Variable(_tempSegments, Append To Array, Vector(Empty Array, 4, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(Empty Array, 3, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(Empty Array, 2, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(1, 4, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(1, 3, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(1, 2, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(4, 2, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(3, 2, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(3, 5, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(5, 6, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(6, 4, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(6, 7, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(7, 8, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(1, 9, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(9, 10, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(9, 11, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(12, 2, 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(16, 11, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(22, 21, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(21, 20, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(20, 19, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(19, 18, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(18, 2, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(22, 23, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(23, 15, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(28, 26, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(26, 27, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(24, 25, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(25, 8, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(25, 26, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(28, 29, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(29, 10, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(24, 30, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(30, 27, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(10, 31, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(31, 32, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(33, 34, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(34, 35, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(34, 37, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(37, 36, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(38, 36, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(38, 13, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(17, 39, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(11, 40, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(40, 41, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(41, 42, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(42, 43, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(43, 44, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(44, 14, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(40, 45, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(45, 46, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(46, 47, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(47, 48, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(48, 32, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(49, 35, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(30, 9, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(12, 49, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(33, 50, Empty Array));
  • Modify Global Variable(_tempSegments, Append To Array, Vector(50, 10, Empty Array));
  • Modify Global Variable(_tempAttributes, Append To Array, Vector(11, 16, 1));
  • Modify Global Variable(_tempAttributes, Append To Array, Vector(35, 49, 1));
  • Modify Global Variable(_tempAttributes, Append To Array, Vector(36, 38, 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("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(
  • Global.Nodes[Event Player.pathmapReference], Distance Between(Position Of(Event Player), Current Array Element))));
  • 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("Pathfind to player")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Hero Of(Event Player) != Hero(Zenyatta);
  • Hero Of(Event Player) != Hero(Zarya);
  • Hero Of(Event Player) != Hero(Junkrat);
  • Hero Of(Event Player) != Hero(Mercy);
  • Event Player.Finishedpath == 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
  • {
  • Event Player._extendedPlayerCollection[0] = First Of(Sorted Array(Sorted Array(Sorted Array(All Living Players(Opposite Team Of(
  • Team Of(Event Player))), Y Component Of(Event Player)), Is In Line of Sight(Event Player, Current Array Element,
  • Barriers Do Not Block LOS)), 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(First Of(Event Player._extendedPlayerCollection), 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(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)))) > 3);
  • }
  • }
  • rule("Stop Pathfind to player")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Hero Of(Event Player) != Hero(Zenyatta);
  • Hero Of(Event Player) != Hero(Zarya);
  • Hero Of(Event Player) != Hero(Junkrat);
  • Hero Of(Event Player) != Hero(Mercy);
  • Event Player.Finishedpath == 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;
  • Hero Of(Event Player) != Hero(Symmetra);
  • Hero Of(Event Player) != Hero(Reaper);
  • }
  • actions
  • {
  • Stop Throttle In Direction(Event Player);
  • Event Player.parentArray = Null;
  • 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(All Living Players(Opposite Team Of(Team Of(Event Player))), 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) * 3), 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(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)))) <= 3);
  • }
  • }
  • rule("Symmetra Circle")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Symmetra;
  • }
  • 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;
  • Event Player.Finishedpath == True;
  • }
  • actions
  • {
  • Start Throttle In Direction(Event Player, Direction Towards(Position Of(Event Player), Position Of(First Of(Sorted Array(
  • Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))), 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) * 3), 1, To World, Replace existing throttle, Direction and Magnitude);
  • }
  • }
  • rule("Reaper Circle Wraith")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Reaper;
  • }
  • 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;
  • Event Player.Finishedpath == True;
  • Is Using Ability 1(Event Player) == True;
  • }
  • actions
  • {
  • Start Throttle In Direction(Event Player, Direction Towards(Position Of(Event Player), Position Of(First Of(Sorted Array(
  • Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))), 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) * 3), 1, To World, Replace existing throttle, Direction and Magnitude);
  • }
  • }
  • rule("Stop Pathfind to player - Reaper")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Reaper;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.Finishedpath == 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;
  • Is Using Ability 1(Event Player) == False;
  • }
  • actions
  • {
  • Stop Throttle In Direction(Event Player);
  • Event Player.parentArray = Null;
  • }
  • }
  • rule("Timer")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • }
  • actions
  • {
  • Set Match Time(1620);
  • }
  • }
  • rule("Timer")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.NormalWaves == True;
  • }
  • actions
  • {
  • Global.mins = 8;
  • Set Match Time(Global.mins * 60);
  • }
  • }
  • rule("Timer")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Forever == True;
  • Global.NormalWaves == False;
  • Global.Endless == False;
  • }
  • actions
  • {
  • Pause Match Time;
  • Global.mins = 0;
  • }
  • }
  • rule("Timer")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Forever == False;
  • Global.NormalWaves == False;
  • Global.Endless == False;
  • }
  • actions
  • {
  • Global.mins = 15;
  • Set Match Time(Global.mins * 60);
  • }
  • }
  • rule("Gamemode Made By Waitedboat4 - Please DO NOT Steal My Work As This Took Too Long To Make")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.RevengeIntro == False;
  • }
  • actions
  • {
  • Wait(0.250, Abort When False);
  • Create HUD Text(Event Player, Null, Custom String("https://workshop.codes/junkensteinsrevenge"), Null, Right, 0, Color(White),
  • Color(Green), Color(Green), Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, Null, Null, Custom String("Created By Waitedboat4#2760"), Right, 0, Color(White), Color(White),
  • Color(Green), Visible To and String, Default Visibility);
  • Big Message(Event Player, Custom String("DEFEND THE CASTLE DOOR!"));
  • Small Message(Event Player, Custom String("Gamemode Created By Waitedboat4#2760"));
  • Global.HUDtext = Custom String("DEFEND THE DOOR");
  • }
  • }
  • rule("Skip Setup")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is In Setup == True;
  • }
  • actions
  • {
  • Set Match Time(0);
  • }
  • }
  • rule("Invis")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Sombra;
  • }
  • conditions
  • {
  • Is Using Ability 1(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.Invis = True;
  • }
  • }
  • rule("Invis")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Sombra;
  • }
  • conditions
  • {
  • Is Using Ability 1(Event Player) == False;
  • }
  • actions
  • {
  • Event Player.Invis = False;
  • }
  • }
  • rule("Barrier - Effect")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Workshop Setting Toggle(Custom String("Settings"), Custom String("Show Boundaries"), False, 0) == True;
  • }
  • actions
  • {
  • Create Effect(All Players(All Teams), Sphere, Color(Blue), Vector(85.024, 13.948, -89.771), 35, Visible To Position and Radius);
  • }
  • }
  • rule("Barrier - Push Back")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Event Player, Vector(85.024, 13.948, -89.771)) > 34;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.Lastpos = Position Of(Event Player);
  • }
  • }
  • rule("Barrier - Push Back")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Event Player, Vector(85.024, 13.948, -89.771)) > 35;
  • Is Alive(Event Player) == True;
  • Is On Ground(Event Player) == True;
  • }
  • actions
  • {
  • Abort If(Is Alive(Event Player) == False);
  • Teleport(Event Player, Event Player.Lastpos);
  • Wait(0.250, Ignore Condition);
  • Loop If(Distance Between(Event Player, Vector(85.024, 13.948, -89.771)) > 35);
  • }
  • }
  • rule("Barrier - Push Back")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Event Player, Vector(85.024, 13.948, -89.771)) > 35;
  • Is Alive(Event Player) == True;
  • Is On Ground(Event Player) == True;
  • }
  • actions
  • {
  • Teleport(Event Player, Vector(87.559, 13.896, -69.931));
  • }
  • }
  • rule("Player Spawn")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Teleport(Event Player, Vector(87.559, 13.896, -69.931));
  • Set Facing(Event Player, Direction Towards(Event Player, Vector(80.084, 14.263, -99.969)), To World);
  • }
  • }
  • rule("Undead Spawn Points")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.UndeadSpawnPoints = Array(Vector(59.451, 19.973, -99.597), Vector(75.129, 11.941, -110.958), Vector(101.827, 10.854,
  • -93.440));
  • Global.DoorHPColour = Color(White);
  • Global.DoorHealth = Workshop Setting Integer(Custom String("Settings"), Custom String("Door Health"), 2000, 80, 9999999, 0);
  • Wait(0.250, Ignore Condition);
  • Global.StartingDoorHP = Global.DoorHealth;
  • Global.DamagedHP = Global.DoorHealth;
  • }
  • }
  • rule("Path to door")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Zenyatta;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Is Dummy Bot(Event Player) == True;
  • Global.RevengeIntro == False;
  • }
  • actions
  • {
  • Skip If(Global.Zencankick == True, 1);
  • Start Facing(Event Player, Direction Towards(Event Player, Event Player.DoorPath[Event Player.DoorPathIndex]), 200, To World,
  • Direction and Turn Rate);
  • Start Throttle In Direction(Event Player, Direction Towards(Event Player, Event Player.DoorPath[Event Player.DoorPathIndex]), 1,
  • To World, Replace existing throttle, Direction and Magnitude);
  • If(Distance Between(Event Player, First Of(Global.UndeadSpawnPoints)) <= 2);
  • Event Player.DoorPath = Array(Vector(61.533, 19.973, -89.165), Vector(66.128, 13.973, -73.540), Vector(69.729, 13.973, -70.517),
  • Vector(73.689, 13.910, -70.007), Vector(77.196, 13.910, -67.016), Vector(87.650, 13.969, -66.907), Vector(88.928, 14.062,
  • -63.771));
  • Else If(Distance Between(Event Player, Global.UndeadSpawnPoints[1]) <= 2);
  • Event Player.DoorPath = Vector(88.838, 14.064, -64.502);
  • Else If(Distance Between(Event Player, Global.UndeadSpawnPoints[2]) <= 2);
  • Event Player.DoorPath = Array(Vector(103.648, 11.016, -87.708), Vector(103.747, 13.976, -79.025), Vector(85.959, 13.914, -75.011),
  • Vector(88.725, 14.174, -64.664));
  • End;
  • }
  • }
  • rule("Zomnics Explode")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Zenyatta;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Distance Between(Event Player, Vector(88.946, 14.053, -63.987)) <= 2;
  • Is Alive(Event Player) == True;
  • Global.Ghost != Event Player;
  • }
  • actions
  • {
  • Stop Throttle In Direction(Event Player);
  • Set Status(Event Player, Null, Stunned, 1.250);
  • Wait(1, Ignore Condition);
  • Abort If(Is Alive(Event Player) == False);
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Red), Event Player, 5);
  • Damage(Players Within Radius(Event Player, 5, Opposite Team Of(Team Of(Event Player)), Surfaces And Enemy Barriers), Event Player,
  • 40);
  • Global.DoorHealth -= 80;
  • Wait(0.250, Ignore Condition);
  • Destroy Dummy Bot(Team Of(Event Player), Slot Of(Event Player));
  • }
  • }
  • rule("Create Zomnics")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Number Of Heroes(Hero(Zenyatta), Team 2) < Global.NumberofZens;
  • Is Game In Progress == True;
  • Global.RevengeIntro == False;
  • }
  • actions
  • {
  • Wait(Random Integer(0, 5), Ignore Condition);
  • Abort If(Is Game In Progress == False);
  • Create Dummy Bot(Hero(Zenyatta), Team 2, -1, Random Value In Array(Global.UndeadSpawnPoints), Forward);
  • Loop If(Number Of Heroes(Hero(Zenyatta), Team 2) < Global.NumberofZens);
  • }
  • }
  • rule("Zomnics Path")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Zenyatta;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Distance Between(Event Player, Event Player.DoorPath[Event Player.DoorPathIndex]) <= 2;
  • Event Player.DoorPathIndex < Count Of(Event Player.DoorPath);
  • }
  • actions
  • {
  • Event Player.DoorPathIndex += 1;
  • }
  • }
  • rule("Bots Die")
  • {
  • event
  • {
  • Player Died;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Global.NormalWaves == False;
  • Global.Endless == False;
  • }
  • actions
  • {
  • Wait(0.250, Ignore Condition);
  • Destroy Dummy Bot(Team Of(Event Player), Slot Of(Event Player));
  • }
  • }
  • rule("HUD")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.RevengeIntro == False;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Create Progress Bar HUD Text(All Players(Team 1), Global.DoorHealth / Global.StartingDoorHP * 100, Null, Top, 0,
  • Global.DoorHPColour, Color(White), Visible To Values and Color, Default Visibility);
  • Create HUD Text(All Players(Team 1), Null, Null, Icon String(Plus), Top, 0, Color(White), Color(White), Color(White),
  • Visible To and String, Default Visibility);
  • Create HUD Text(All Players(Team 1), Null, Null, Custom String("TEAM SCORE: {0}", Global.Score), Left, 0, Color(White), Color(
  • White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(Team 1), Null, Null, Custom String("{2} | {0}:{1}", Global.mins, Global.sec, Global.HUDtext), Top, 0,
  • Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • }
  • }
  • rule("Create Maestro")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.Createmaestro = Workshop Setting Toggle(Custom String("Experimental Settings"), Custom String("The Maestro"), False, 0);
  • }
  • }
  • rule("Create Junkenstein")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Number Of Heroes(Hero(Mercy), Team 2) == 0;
  • Global.NormalWaves == False;
  • Global.Endless == False;
  • }
  • actions
  • {
  • Wait(Global.Junkdiff, Ignore Condition);
  • Create Dummy Bot(Hero(Junkrat), Team 2, -1, Vector(56.648, 24.364, -104.668), Vector(Empty Array, Empty Array, Empty Array));
  • Loop;
  • }
  • }
  • rule("Junkrat immune to knockback")
  • {
  • event
  • {
  • Player Received Knockback;
  • Team 2;
  • Junkrat;
  • }
  • actions
  • {
  • Apply Impulse(Event Player, Event Direction, -1, To World, Cancel Contrary Motion);
  • }
  • }
  • rule("Pathfind to Player")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Junkrat;
  • }
  • 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)))) > 20;
  • Distance Between(Event Player, Vector(56.648, 24.364, -104.668)) > 5;
  • Global.RevengeIntro == False;
  • Array Contains(Global.Shocktire, Event Player) == False;
  • }
  • actions
  • {
  • Event Player._extendedPlayerCollection[8] = First Of(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)));
  • Event Player.Dijkstra_Final_Path_3 = Empty Array;
  • Event Player.Dijkstra_Final_Path_Attributes_3 = Empty Array;
  • Event Player.Dijkstra_Current_3 = Index Of Array Value(Global.Nodes[Global.map], First Of(Sorted Array(Global.Nodes[Global.map],
  • Distance Between(Event Player._extendedPlayerCollection[8], Current Array Element))));
  • Event Player.Dijkstra_Distances_3[Event Player.Dijkstra_Current_3] = 0.000;
  • Event Player.Dijkstra_Unvisited_3 = Mapped Array(Global.Nodes[Global.map], Current Array Index);
  • While(Is True For Any(Event Player.Dijkstra_Unvisited_3, Event Player.Dijkstra_Distances_3[Current Array Element] != 0));
  • Wait(0.016, Ignore Condition);
  • Event Player.Dijkstra_Connected_Segments_3 = 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_3));
  • Event Player._extendedPlayerCollection[9] = 0;
  • While(Event Player._extendedPlayerCollection[9] < Count Of(Event Player.Dijkstra_Connected_Segments_3));
  • Wait(0.016, Ignore Condition);
  • Event Player.Dijkstra_Neighbor_Index_3 = First Of(Filtered Array(Append To Array(Append To Array(Empty Array, X Component Of(
  • Event Player.Dijkstra_Connected_Segments_3[Event Player._extendedPlayerCollection[9]])), Y Component Of(
  • Event Player.Dijkstra_Connected_Segments_3[Event Player._extendedPlayerCollection[9]])),
  • Current Array Element != Event Player.Dijkstra_Current_3));
  • Event Player.Dijkstra_Distance_3 = Distance Between(Global.Nodes[Global.map][Event Player.Dijkstra_Neighbor_Index_3],
  • Global.Nodes[Global.map][Event Player.Dijkstra_Current_3])
  • + Event Player.Dijkstra_Distances_3[Event Player.Dijkstra_Current_3];
  • Event Player.Dijkstra_Neighbor_Attributes_3 = Filtered Array(Global.Attributes[Global.map], Y Component Of(Current Array Element)
  • == Event Player.Dijkstra_Current_3 && X Component Of(Current Array Element) == Event Player.Dijkstra_Neighbor_Index_3);
  • If((
  • Event Player.Dijkstra_Distances_3[Event Player.Dijkstra_Neighbor_Index_3] == 0 || Event Player.Dijkstra_Distance_3 < Event Player.Dijkstra_Distances_3[Event Player.Dijkstra_Neighbor_Index_3])
  • && (!Count Of(Event Player.Dijkstra_Neighbor_Attributes_3) || Is True For Any(Event Player.Dijkstra_Neighbor_Attributes_3,
  • Array Contains(Null, Z Component Of(Current Array Element)))));
  • Event Player.Dijkstra_Distances_3[Event Player.Dijkstra_Neighbor_Index_3] = Event Player.Dijkstra_Distance_3;
  • Event Player.Dijkstra_Parent_Array_3[Event Player.Dijkstra_Neighbor_Index_3] = Event Player.Dijkstra_Current_3 + 1;
  • End;
  • Event Player._extendedPlayerCollection[9] += 1;
  • End;
  • Modify Player Variable(Event Player, Dijkstra_Unvisited_3, Remove From Array By Value, Event Player.Dijkstra_Current_3);
  • 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_3, 2);
  • Event Player.Dijkstra_Current_3 = First Of(Sorted Array(Filtered Array(Event Player.Dijkstra_Unvisited_3,
  • Event Player.Dijkstra_Distances_3[Current Array Element] != 0), Event Player.Dijkstra_Distances_3[Current Array Element]));
  • End;
  • Event Player.pathmapReference = Global.map;
  • Event Player.parentArray = Event Player.Dijkstra_Parent_Array_3;
  • Event Player.destination = Event Player._extendedPlayerCollection[8];
  • Event Player.pathfinderDoGetCurrent = True;
  • Event Player.Dijkstra_Current_3 = 0;
  • Event Player.Dijkstra_Distances_3 = 0;
  • Event Player.Dijkstra_Connected_Segments_3 = 0;
  • Event Player.Dijkstra_Neighbor_Index_3 = 0;
  • Event Player.Dijkstra_Distance_3 = 0;
  • Event Player.Dijkstra_Parent_Array_3 = 0;
  • Wait(5, Ignore Condition);
  • Loop If(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)))) > 20);
  • }
  • }
  • rule("Stop Pathfind")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Junkrat;
  • }
  • 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)))) <= 20;
  • Global.RevengeIntro == False;
  • Array Contains(Global.Shocktire, Event Player) == False;
  • }
  • actions
  • {
  • Stop Throttle In Direction(Event Player);
  • Event Player.parentArray = Null;
  • Wait(0.250, Ignore Condition);
  • Loop If(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)))) <= 20);
  • }
  • }
  • rule("Facing - Zarya")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Global.RevengeIntro == False;
  • Hero Of(Event Player) != Hero(Zenyatta);
  • Hero Of(Event Player) != Hero(Mercy);
  • Hero Of(Event Player) != Hero(Reaper);
  • Hero Of(Event Player) != Hero(Junkrat);
  • Hero Of(Event Player) != Hero(Symmetra);
  • Hero Of(Event Player) != Hero(Roadhog);
  • Hero Of(Event Player) != Hero(Sigma);
  • }
  • actions
  • {
  • Start Facing(Event Player, Direction Towards(Event Player, First Of(Filtered Array(Sorted Array(Filtered Array(All Living Players(
  • Opposite Team Of(Team Of(Event Player))), Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)) + Velocity Of(
  • Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) * (Distance Between(Event Player,
  • Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) / 24)), 200, To World,
  • Direction and Turn Rate);
  • }
  • }
  • rule("Facing - Roadhog + Sigma")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Global.RevengeIntro == False;
  • Hero Of(Event Player) != Hero(Zenyatta);
  • Hero Of(Event Player) != Hero(Mercy);
  • Hero Of(Event Player) != Hero(Reaper);
  • Hero Of(Event Player) != Hero(Junkrat);
  • Hero Of(Event Player) != Hero(Symmetra);
  • Hero Of(Event Player) != Hero(Zarya);
  • Event Player.Finishedpath == True;
  • }
  • actions
  • {
  • Start Facing(Event Player, Direction Towards(Event Player, First Of(Filtered Array(Sorted Array(Filtered Array(All Living Players(
  • Opposite Team Of(Team Of(Event Player))), Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)) + Velocity Of(
  • Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) * (Distance Between(Event Player,
  • Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) / 24)), 200, To World,
  • Direction and Turn Rate);
  • }
  • }
  • rule("Facing - Junkrat")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Junkrat;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Global.RevengeIntro == False;
  • Array Contains(Global.Shocktire, Event Player) == False;
  • }
  • actions
  • {
  • Start Facing(Event Player, Direction From Angles(Horizontal Angle From Direction(Vector Towards(Eye Position(Event Player),
  • Position Of(First Of(Sorted Array(Filtered Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)), Current Array Element.Invis == False),
  • Distance Between(Event Player, Current Array Element)))))), 0 - Arctangent In Degrees((625 - Square Root(
  • 390625 - 156.250 * Distance Between(Vector(0, 0, 0), Vector Towards(Eye Position(Event Player), Position Of(First Of(
  • Sorted Array(Filtered Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Is In Line of Sight(
  • Event Player, Current Array Element, Barriers Do Not Block LOS)), Current Array Element.Invis == False), Distance Between(
  • Event Player, Current Array Element))))) * Vector(1, 0, 1)) * Distance Between(Vector(0, 0, 0), Vector Towards(Eye Position(
  • Event Player), Position Of(First Of(Sorted Array(Filtered Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(
  • Event Player))), Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)),
  • Current Array Element.Invis == False), Distance Between(Event Player, Current Array Element))))) * Vector(1, 0, 1))
  • - 15625 * Y Component Of(Vector Towards(Eye Position(Event Player), Position Of(First Of(Sorted Array(Filtered Array(
  • Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))), Is In Line of Sight(Event Player,
  • Current Array Element, Barriers Do Not Block LOS)), Current Array Element.Invis == False), Distance Between(Event Player,
  • Current Array Element)))))))) / (12.500 * Distance Between(Vector(0, 0, 0), Vector Towards(Eye Position(Event Player),
  • Position Of(First Of(Sorted Array(Filtered Array(Filtered Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)), Current Array Element.Invis == False),
  • Distance Between(Event Player, Current Array Element))))) * Vector(1, 0, 1))), 1)), 200, To World, Direction and Turn Rate);
  • }
  • }
  • rule("Shooting")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Hero Of(Event Player) != Hero(Zenyatta);
  • Hero Of(Event Player) != Hero(Mercy);
  • Hero Of(Event Player) != Hero(Zarya);
  • Hero Of(Event Player) != Hero(Sigma);
  • Global.RevengeIntro == False;
  • Is Using Ultimate(Event Player) == False;
  • Event Player.Finishedpath == True;
  • Hero Of(Event Player) != Hero(Junkrat);
  • Hero Of(Event Player) != Hero(Reaper);
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Shooting")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Hero Of(Event Player) != Hero(Zenyatta);
  • Hero Of(Event Player) != Hero(Mercy);
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == False;
  • Hero Of(Event Player) != Hero(Sigma);
  • Global.RevengeIntro == False;
  • Event Player.Finishedpath == True;
  • Hero Of(Event Player) != Hero(Junkrat);
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Roadhog Right Click")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Distance Between(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) > 10;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Is Dummy Bot(Event Player) == True;
  • Event Player.Finishedpath == True;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.250, Ignore Condition);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Roadhog Right Click")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Distance Between(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) <= 10;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Is Dummy Bot(Event Player) == True;
  • Event Player.Finishedpath == True;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.250, Ignore Condition);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Symmetra Right Click")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Symmetra;
  • }
  • conditions
  • {
  • Distance Between(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) > 10;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Is Dummy Bot(Event Player) == True;
  • Event Player.Finishedpath == True;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.250, Ignore Condition);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Symmetra Right Click")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Symmetra;
  • }
  • conditions
  • {
  • Distance Between(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) <= 10;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Is Dummy Bot(Event Player) == True;
  • Event Player.Finishedpath == True;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.250, Ignore Condition);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Create Junkenstein's Monster")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Number Of Heroes(Hero(Mercy), Team 2) == 0;
  • Global.NormalWaves == False;
  • Global.Endless == False;
  • }
  • actions
  • {
  • Wait(Global.Mondiff, Ignore Condition);
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Forward);
  • Loop;
  • }
  • }
  • rule("Start Following")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Set Facing(Event Player, Forward, To World);
  • Skip If(Global.Monintro == True, 1);
  • Wait(2, Ignore Condition);
  • Event Player.Finishedpath = True;
  • }
  • }
  • rule("Sym Ult")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Symmetra;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Ultimate Charge Percent(Event Player) == 100;
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Start Facing(Event Player, Direction Towards(Event Player, Vector(64.411, 18.021, -78.218)), 10000, To World,
  • Direction and Turn Rate);
  • Wait(1, Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • Wait(0.250, Ignore Condition);
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(1, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Event Player, First Of(Filtered Array(Sorted Array(Filtered Array(Filtered Array(
  • Players in View Angle(Event Player, Opposite Team Of(Team Of(Event Player)), 180), Is Alive(Current Array Element)),
  • Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)), Distance Between(Event Player,
  • Current Array Element)), Current Array Element.Invis == False))), 200, To World, Direction and Turn Rate);
  • Event Player.Finishedpath = True;
  • }
  • }
  • rule("Ability 1 - Reaper")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 2;
  • Reaper;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 1)) == 0;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Event Player.Finishedpath == True;
  • Is Using Ability 2(Event Player) == False;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("Ability 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 1)) == 0;
  • Hero Of(Event Player) != Hero(Junkrat);
  • Hero Of(Event Player) != Hero(Zarya);
  • Hero Of(Event Player) != Hero(Zenyatta);
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Hero Of(Event Player) != Hero(Roadhog);
  • Event Player.Finishedpath == True;
  • Is Using Ability 2(Event Player) == False;
  • Hero Of(Event Player) != Hero(Reaper);
  • Hero Of(Event Player) != Hero(Symmetra);
  • Hero Of(Event Player) != Hero(Mercy);
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("Ability 1 Roadhog")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 1)) == 0;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Is Using Ability 2(Event Player) == False;
  • }
  • actions
  • {
  • Wait(0.250, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("Roadhog Abilities")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Health(Event Player) < Max Health(Event Player);
  • Ability Cooldown(Event Player, Button(Ability 2)) == 0;
  • Is Using Ability 1(Event Player) == False;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 2));
  • }
  • }
  • rule("ULT")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Ultimate Charge Percent(Event Player) == 100;
  • Hero Of(Event Player) != Hero(Zarya);
  • Hero Of(Event Player) != Hero(Zenyatta);
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Hero Of(Event Player) != Hero(Junkrat);
  • Hero Of(Event Player) != Hero(Sigma);
  • Hero Of(Event Player) != Hero(Mercy);
  • Hero Of(Event Player) != Hero(Symmetra);
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ultimate));
  • }
  • }
  • rule("Create The Witch")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.NormalWaves == False;
  • Global.Endless == False;
  • }
  • actions
  • {
  • Wait(Global.Witchdiff, Ignore Condition);
  • Create Dummy Bot(Hero(Mercy), Team 2, -1, Vector(83.339, 14.454, -94.776), Vector(Empty Array, Empty Array, Empty Array));
  • Loop;
  • }
  • }
  • rule("Revive")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Mercy;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Set Facing(Event Player, Forward, To World);
  • Skip If(Global.Witchintro == True, 1);
  • Wait(2, Ignore Condition);
  • Event Player.Finishedpath = True;
  • Wait(0.250, Ignore Condition);
  • Skip If(Number Of Heroes(Hero(Roadhog), Team 2) >= 1, 1);
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Position Of(Event Player), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(0.250, Ignore Condition);
  • Skip If(Filtered Array(Number Of Heroes(Hero(Junkrat), Team 2), !Array Contains(Global.Shocktire, Current Array Element)) >= 1, 1);
  • Create Dummy Bot(Hero(Junkrat), Team 2, -1, Vector(56.648, 24.364, -104.668), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Revive")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Mercy;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Is Alive(Players On Hero(Hero(Roadhog), Team 2)) == True;
  • Is Alive(Players On Hero(Hero(Junkrat), Team 2)) == True;
  • Event Player.Finishedpath == True;
  • }
  • actions
  • {
  • Global.Effects = Empty Array;
  • Create Effect(All Players(All Teams), Orb, Color(Yellow), Players On Hero(Hero(Roadhog), Team 2), 10,
  • Visible To Position and Radius);
  • Modify Global Variable(Effects, Append To Array, Last Created Entity);
  • Create Effect(All Players(All Teams), Orb, Color(Yellow), Players On Hero(Hero(Junkrat), Team 2), 10,
  • Visible To Position and Radius);
  • Modify Global Variable(Effects, Append To Array, Last Created Entity);
  • Create Effect(All Players(All Teams), Orb, Color(Yellow), Event Player, 4, Visible To Position and Radius);
  • Modify Global Variable(Effects, Append To Array, Last Created Entity);
  • Wait(2, Ignore Condition);
  • Destroy Effect(First Of(Global.Effects));
  • Destroy Effect(Global.Effects[1]);
  • Destroy Effect(Global.Effects[2]);
  • }
  • }
  • rule("Witch Heal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Mercy;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Event Player.Finishedpath == True;
  • Distance Between(Event Player, Last Of(Filtered Array(Filtered Array(Sorted Array(All Living Players(Team 2), Hero Of(
  • Current Array Element) == Hero(Roadhog)), Hero Of(Current Array Element) != Hero(Junkrat)), Hero Of(Current Array Element)
  • != Hero(Mercy)))) > 5;
  • }
  • actions
  • {
  • Start Facing(Event Player, Direction Towards(Event Player, First Of(Sorted Array(Filtered Array(Sorted Array(All Living Players(
  • Team 2), Hero Of(Current Array Element) == Hero(Roadhog)), Hero Of(Current Array Element) != Hero(Mercy)), Distance Between(
  • Event Player, Current Array Element)))), 200, To World, Direction and Turn Rate);
  • Event Player._extendedPlayerCollection[0] = Last Of(Sorted Array(Filtered Array(Players On Hero(Hero(Roadhog), Team 2), Is Alive(
  • Current Array Element)), 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(First Of(Event Player._extendedPlayerCollection), 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, Last Of(Filtered Array(Filtered Array(Sorted Array(All Living Players(Team 2), Hero Of(
  • Current Array Element) == Hero(Roadhog)), Hero Of(Current Array Element) != Hero(Junkrat)), Hero Of(Current Array Element)
  • != Hero(Mercy)))) > 5);
  • }
  • }
  • rule("Witch Heal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Mercy;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Distance Between(Event Player, Last Of(Filtered Array(Filtered Array(Sorted Array(All Living Players(Team 2), Hero Of(
  • Current Array Element) == Hero(Roadhog)), Hero Of(Current Array Element) != Hero(Junkrat)), Hero Of(Current Array Element)
  • != Hero(Mercy)))) <= 5;
  • Global.Witchintro == True;
  • }
  • actions
  • {
  • Stop Throttle In Direction(Event Player);
  • Event Player.parentArray = Null;
  • Wait(Random Integer(1, 2), Ignore Condition);
  • Start Throttle In Direction(Event Player, Direction Towards(Position Of(Event Player), Position Of(Last Of(Filtered Array(
  • Filtered Array(Sorted Array(All Living Players(Team 2), Hero Of(Current Array Element) == Hero(Roadhog)), Hero Of(
  • Current Array Element) != Hero(Junkrat)), Hero Of(Current Array Element) != Hero(Mercy)))) + 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, Last Of(Filtered Array(Filtered Array(Sorted Array(All Living Players(Team 2), Hero Of(
  • Current Array Element) == Hero(Roadhog)), Hero Of(Current Array Element) != Hero(Junkrat)), Hero Of(Current Array Element)
  • != Hero(Mercy)))) <= 5);
  • }
  • }
  • rule("Witch Heal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Mercy;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Lose")
  • {
  • event
  • {
  • Player Died;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Number Of Living Players(Team 1) == 0;
  • Is Game In Progress == True;
  • Global.Forever == False;
  • }
  • actions
  • {
  • Global.Stopspawningaiteam1 = True;
  • Disable Built-In Game Mode Respawning(Event Player);
  • Destroy All Progress Bar HUD Text;
  • Destroy All HUD Text;
  • Wait(0.500, Ignore Condition);
  • Set Slow Motion(35);
  • Start Camera(All Players(Team 1), Position Of(Victim) + Up + Up + Up, Position Of(Victim), 0);
  • Global.DestroyallTeam2 = True;
  • Wait(2, Ignore Condition);
  • Declare Team Victory(Team 2);
  • Create Dummy Bot(Hero(Mercy), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Junkrat), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • }
  • }
  • rule("Lose")
  • {
  • event
  • {
  • Player Died;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Number Of Living Players(Team 1) == 0;
  • Is Game In Progress == True;
  • Global.Forever == True;
  • }
  • actions
  • {
  • Disable Built-In Game Mode Respawning(Event Player);
  • Destroy All Progress Bar HUD Text;
  • Destroy All HUD Text;
  • Global.Stopspawningaiteam1 = True;
  • Wait(0.500, Ignore Condition);
  • Set Slow Motion(35);
  • Start Camera(All Players(Team 1), Position Of(Victim) + Up + Up + Up, Position Of(Victim), 0);
  • Wait(2, Ignore Condition);
  • Global.DestroyallTeam2 = True;
  • Declare Team Victory(Team 1);
  • }
  • }
  • rule("Win")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Match Time == 0;
  • Is Game In Progress == True;
  • Global.Forever == False;
  • Global.NormalWaves == False;
  • Global.Endless == False;
  • }
  • actions
  • {
  • Disable Built-In Game Mode Respawning(Event Player);
  • Declare Team Victory(Team 1);
  • }
  • }
  • rule("Create The Reaper")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.NormalWaves == False;
  • Global.Endless == False;
  • }
  • actions
  • {
  • Wait(Global.Reapdiff, Ignore Condition);
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • Loop;
  • }
  • }
  • rule("Teleport")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Reaper;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Wait(0.500, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Event Player, Vector(85.495, 13.932, -77.854)), 500, To World,
  • Direction and Turn Rate);
  • Wait(0.500, Ignore Condition);
  • Stop Facing(Event Player);
  • Press Button(Event Player, Button(Ability 2));
  • Wait(0.250, Ignore Condition);
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(2, Ignore Condition);
  • Event Player.Finishedpath = True;
  • Start Facing(Event Player, Direction Towards(Event Player, First Of(Filtered Array(Sorted Array(Filtered Array(Filtered Array(
  • Players in View Angle(Event Player, Opposite Team Of(Team Of(Event Player)), 180), Is Alive(Current Array Element)),
  • Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)), Distance Between(Event Player,
  • Current Array Element)), Current Array Element.Invis == False))), 200, To World, Direction and Turn Rate);
  • }
  • }
  • rule("Wraith")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Reaper;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Using Ability 1(Event Player) == True;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Wraith")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Reaper;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Using Ability 1(Event Player) == False;
  • Event Player.Finishedpath == True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Create The Summoner")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.NormalWaves == False;
  • Global.Endless == False;
  • }
  • actions
  • {
  • Wait(Global.Sumdiff, Ignore Condition);
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • Loop;
  • }
  • }
  • rule("Lose")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.DoorHealth <= 0;
  • Is Game In Progress == True;
  • Global.Endless == False;
  • }
  • actions
  • {
  • Global.Stopspawningaiteam1 = True;
  • Destroy All HUD Text;
  • Big Message(All Players(All Teams), Custom String("DOOR DESTROYED"));
  • Disable Built-In Game Mode Respawning(All Players(Team 1));
  • Wait(4, Ignore Condition);
  • Declare Team Victory(Team 2);
  • }
  • }
  • rule("Create Zombardiers")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Number Of Heroes(Hero(Zarya), Team 2) < Global.NumberofZombardiers;
  • Is Game In Progress == True;
  • Global.RevengeIntro == False;
  • }
  • actions
  • {
  • Wait(Random Integer(10, 30), Ignore Condition);
  • Abort If(Is Game In Progress == False);
  • Create Dummy Bot(Hero(Zarya), Team 2, -1, Random Value In Array(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array,
  • Empty Array));
  • Loop If(Number Of Heroes(Hero(Zarya), Team 2) < Global.NumberofZombardiers);
  • }
  • }
  • rule("Pathfind to player")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Zarya;
  • }
  • 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)))) > 10;
  • }
  • actions
  • {
  • Event Player._extendedPlayerCollection[2] = First Of(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element) >= 10));
  • Event Player.Dijkstra_Final_Path_0 = Empty Array;
  • Event Player.Dijkstra_Final_Path_Attributes_0 = Empty Array;
  • 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] != 0));
  • 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((
  • Event Player.Dijkstra_Distances_0[Event Player.Dijkstra_Neighbor_Index_0] == 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)))));
  • Event Player.Dijkstra_Distances_0[Event Player.Dijkstra_Neighbor_Index_0] = Event Player.Dijkstra_Distance_0;
  • 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;
  • Wait(5, Ignore Condition);
  • Loop If(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)))) > 10);
  • }
  • }
  • rule("Pathfind away from player")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Zarya;
  • }
  • 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)))) <= 10;
  • }
  • actions
  • {
  • Event Player._extendedPlayerCollection[4] = Nearest Walkable Position(Facing Direction Of(Event Player) + Backward);
  • Event Player.Dijkstra_Final_Path_1 = Empty Array;
  • Event Player.Dijkstra_Final_Path_Attributes_1 = Empty Array;
  • Event Player.Dijkstra_Current_1 = Index Of Array Value(Global.Nodes[Global.map], First Of(Sorted Array(Global.Nodes[Global.map],
  • Distance Between(Event Player._extendedPlayerCollection[4], Current Array Element))));
  • Event Player.Dijkstra_Distances_1[Event Player.Dijkstra_Current_1] = 0.000;
  • Event Player.Dijkstra_Unvisited_1 = Mapped Array(Global.Nodes[Global.map], Current Array Index);
  • While(Is True For Any(Event Player.Dijkstra_Unvisited_1, Event Player.Dijkstra_Distances_1[Current Array Element] != 0));
  • Wait(0.016, Ignore Condition);
  • Event Player.Dijkstra_Connected_Segments_1 = 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_1));
  • Event Player._extendedPlayerCollection[5] = 0;
  • While(Event Player._extendedPlayerCollection[5] < Count Of(Event Player.Dijkstra_Connected_Segments_1));
  • Wait(0.016, Ignore Condition);
  • Event Player.Dijkstra_Neighbor_Index_1 = First Of(Filtered Array(Append To Array(Append To Array(Empty Array, X Component Of(
  • Event Player.Dijkstra_Connected_Segments_1[Event Player._extendedPlayerCollection[5]])), Y Component Of(
  • Event Player.Dijkstra_Connected_Segments_1[Event Player._extendedPlayerCollection[5]])),
  • Current Array Element != Event Player.Dijkstra_Current_1));
  • Event Player.Dijkstra_Distance_1 = Distance Between(Global.Nodes[Global.map][Event Player.Dijkstra_Neighbor_Index_1],
  • Global.Nodes[Global.map][Event Player.Dijkstra_Current_1])
  • + Event Player.Dijkstra_Distances_1[Event Player.Dijkstra_Current_1];
  • Event Player.Dijkstra_Neighbor_Attributes_1 = Filtered Array(Global.Attributes[Global.map], Y Component Of(Current Array Element)
  • == Event Player.Dijkstra_Current_1 && X Component Of(Current Array Element) == Event Player.Dijkstra_Neighbor_Index_1);
  • If((
  • Event Player.Dijkstra_Distances_1[Event Player.Dijkstra_Neighbor_Index_1] == 0 || Event Player.Dijkstra_Distance_1 < Event Player.Dijkstra_Distances_1[Event Player.Dijkstra_Neighbor_Index_1])
  • && (!Count Of(Event Player.Dijkstra_Neighbor_Attributes_1) || Is True For Any(Event Player.Dijkstra_Neighbor_Attributes_1,
  • Array Contains(Null, Z Component Of(Current Array Element)))));
  • Event Player.Dijkstra_Distances_1[Event Player.Dijkstra_Neighbor_Index_1] = Event Player.Dijkstra_Distance_1;
  • Event Player.Dijkstra_Parent_Array_1[Event Player.Dijkstra_Neighbor_Index_1] = Event Player.Dijkstra_Current_1 + 1;
  • End;
  • Event Player._extendedPlayerCollection[5] += 1;
  • End;
  • Modify Player Variable(Event Player, Dijkstra_Unvisited_1, Remove From Array By Value, Event Player.Dijkstra_Current_1);
  • 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_1, 2);
  • Event Player.Dijkstra_Current_1 = First Of(Sorted Array(Filtered Array(Event Player.Dijkstra_Unvisited_1,
  • Event Player.Dijkstra_Distances_1[Current Array Element] != 0), Event Player.Dijkstra_Distances_1[Current Array Element]));
  • End;
  • Event Player.pathmapReference = Global.map;
  • Event Player.parentArray = Event Player.Dijkstra_Parent_Array_1;
  • Event Player.destination = Event Player._extendedPlayerCollection[4];
  • Event Player.pathfinderDoGetCurrent = True;
  • Event Player.Dijkstra_Current_1 = 0;
  • Event Player.Dijkstra_Distances_1 = 0;
  • Event Player.Dijkstra_Connected_Segments_1 = 0;
  • Event Player.Dijkstra_Neighbor_Index_1 = 0;
  • Event Player.Dijkstra_Distance_1 = 0;
  • Event Player.Dijkstra_Parent_Array_1 = 0;
  • Wait(1, Ignore Condition);
  • Loop If(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)))) <= 10);
  • }
  • }
  • rule("Shooting")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Zarya;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Shooting")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Zarya;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == False;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Spawn No Heal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is In Spawn Room(Event Player) == True;
  • }
  • actions
  • {
  • Set Healing Received(Event Player, 0);
  • }
  • }
  • rule("Spawn No Heal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is In Spawn Room(Event Player) == False;
  • }
  • actions
  • {
  • Set Healing Received(Event Player, 100);
  • }
  • }
  • rule("Hardness")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.Reapdiff = Workshop Setting Integer(Custom String("Difficulty"), Custom String("The Reaper Delay"), 150, 10, 500, 0);
  • Global.Mondiff = Workshop Setting Integer(Custom String("Difficulty"), Custom String("Junkenstein's Monster Delay"), 200, 10, 500,
  • 0);
  • Global.Sumdiff = Workshop Setting Integer(Custom String("Difficulty"), Custom String("The Summoner Delay"), 250, 10, 500, 0);
  • Global.Junkdiff = Workshop Setting Integer(Custom String("Difficulty"), Custom String("Dr Junkenstein Delay"), 300, 10, 500, 0);
  • Global.Witchdiff = Workshop Setting Integer(Custom String("Difficulty"), Custom String("The Witch Delay"), 350, 10, 500, 0);
  • Global.TheMaeDiff = Workshop Setting Integer(Custom String("Experimental Settings"), Custom String("The Maestro Delay"), 400, 10,
  • 500, 0);
  • }
  • }
  • rule("Hardness")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Wait(60, Ignore Condition);
  • Skip If(Global.Reapdiff <= 10, 1);
  • Global.Reapdiff -= 10;
  • Skip If(Global.Mondiff <= 10, 1);
  • Global.Mondiff -= 10;
  • Skip If(Global.Sumdiff <= 10, 1);
  • Global.Sumdiff -= 10;
  • Skip If(Global.Junkdiff <= 10, 1);
  • Global.Junkdiff -= 10;
  • Skip If(Global.Witchdiff <= 10, 1);
  • Global.Witchdiff -= 10;
  • Skip If(Global.TheMaeDiff <= 10, 1);
  • Global.TheMaeDiff -= 10;
  • Loop If(Is Game In Progress == True);
  • }
  • }
  • rule("Mins")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.sec == 59;
  • Global.mins > 0;
  • }
  • actions
  • {
  • Global.mins -= 1;
  • }
  • }
  • rule("Sec")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.sec == 59;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • Abort If(Match Time <= 0);
  • Global.sec -= 1;
  • Loop If(Global.sec > 0);
  • }
  • }
  • rule("Sec")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.sec == 0;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • Global.sec = 59;
  • }
  • }
  • rule("Shooting - Reaper")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Reaper;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.Finishedpath == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Create Zomnics - Game Broke")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Number Of Heroes(Hero(Zenyatta), Team 2) < Global.NumberofZens;
  • Is Game In Progress == True;
  • Global.GAMEBROKE == True;
  • }
  • actions
  • {
  • Wait(Random Integer(0, 5), Ignore Condition);
  • Abort If(Is Game In Progress == False);
  • Create Dummy Bot(Hero(Zenyatta), Team 2, -1, Random Value In Array(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array,
  • Empty Array));
  • Loop If(Number Of Heroes(Hero(Zenyatta), Team 2) < Global.NumberofZens);
  • }
  • }
  • rule("Broke Verify")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Number Of Heroes(Hero(Zenyatta), Team 2) == 0;
  • Is Game In Progress == True;
  • Global.RevengeIntro == False;
  • }
  • actions
  • {
  • Wait(6, Abort When False);
  • Global.GAMEBROKE = True;
  • Wait(0.250, Ignore Condition);
  • Global.GAMEBROKE = False;
  • }
  • }
  • rule("Junkrat Intro")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Junkrat;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Global.Junkintro == False;
  • Is Dummy Bot(Event Player) == True;
  • Global.RevengeIntro == False;
  • Array Contains(Global.Shocktire, Event Player) == False;
  • }
  • actions
  • {
  • Disable Hero HUD(Event Player);
  • Set Status(All Players(Team 1), Null, Invincible, 2);
  • Set Slow Motion(35);
  • Start Camera(All Players(Team 1), Update Every Frame(Eye Position(Filtered Array(Players On Hero(Hero(Junkrat), Team 2),
  • Array Contains(Global.Shocktire, Event Player) == False)) + Forward), Update Every Frame(Eye Position(Filtered Array(
  • Players On Hero(Hero(Junkrat), Team 2), Array Contains(Global.Shocktire, Event Player) == False))), 0);
  • Big Message(All Players(All Teams), Custom String("Dr Junkenstein"));
  • Wait(2, Ignore Condition);
  • Global.Junkintro = True;
  • Stop Camera(All Players(Team 1));
  • Set Slow Motion(100);
  • Enable Hero HUD(Event Player);
  • }
  • }
  • rule("Road Intro")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Global.Monintro == False;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Disable Hero HUD(Event Player);
  • Set Status(All Players(Team 1), Null, Invincible, 2);
  • Set Slow Motion(35);
  • Start Camera(All Players(Team 1), Update Every Frame(Eye Position(Players On Hero(Hero(Roadhog), Team 2)) + Facing Direction Of(
  • Event Player)), Update Every Frame(Eye Position(Players On Hero(Hero(Roadhog), Team 2))), 0);
  • Big Message(All Players(All Teams), Custom String("Junkenstein's Monster"));
  • Wait(2, Ignore Condition);
  • Global.Monintro = True;
  • Stop Camera(All Players(Team 1));
  • Set Slow Motion(100);
  • Enable Hero HUD(Event Player);
  • }
  • }
  • rule("Witch Intro")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Mercy;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Global.Witchintro == False;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Disable Hero HUD(Event Player);
  • Set Status(All Players(Team 1), Null, Invincible, 2);
  • Set Slow Motion(35);
  • Start Camera(All Players(Team 1), Update Every Frame(Eye Position(Players On Hero(Hero(Mercy), Team 2)) + Facing Direction Of(
  • Event Player)), Update Every Frame(Eye Position(Players On Hero(Hero(Mercy), Team 2))), 0);
  • Big Message(All Players(All Teams), Custom String("The Witch"));
  • Wait(2, Ignore Condition);
  • Global.Witchintro = True;
  • Stop Camera(All Players(Team 1));
  • Set Slow Motion(100);
  • Enable Hero HUD(Event Player);
  • }
  • }
  • rule("Summoner Intro")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Symmetra;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Global.Sumintro == False;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Disable Hero HUD(Event Player);
  • Enable Messages(Event Player);
  • Set Status(All Players(Team 1), Null, Invincible, 2);
  • Set Slow Motion(35);
  • Start Camera(All Players(Team 1), Update Every Frame(Eye Position(Players On Hero(Hero(Symmetra), Team 2)) + Facing Direction Of(
  • Event Player)), Update Every Frame(Eye Position(Players On Hero(Hero(Symmetra), Team 2))), 0);
  • Big Message(All Players(All Teams), Custom String("The Summoner"));
  • Wait(2, Ignore Condition);
  • Global.Sumintro = True;
  • Stop Camera(All Players(Team 1));
  • Set Slow Motion(100);
  • Enable Hero HUD(Event Player);
  • Disable Messages(Event Player);
  • }
  • }
  • rule("Maestro Intro")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Sigma;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Global.TheMaeIntro == False;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Disable Hero HUD(Event Player);
  • Set Status(All Players(Team 1), Null, Invincible, 2);
  • Set Slow Motion(35);
  • Start Camera(All Players(Team 1), Update Every Frame(Eye Position(Players On Hero(Hero(Sigma), Team 2)) + Facing Direction Of(
  • Event Player)), Update Every Frame(Eye Position(Players On Hero(Hero(Sigma), Team 2))), 0);
  • Big Message(All Players(All Teams), Custom String("The Maestro"));
  • Wait(2, Ignore Condition);
  • Global.TheMaeIntro = True;
  • Stop Camera(All Players(Team 1));
  • Set Slow Motion(100);
  • Enable Hero HUD(Event Player);
  • }
  • }
  • rule("Allowed heroes")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.Allheroes = Workshop Setting Toggle(Custom String("Settings"), Custom String("All Heroes"), False, 0);
  • }
  • }
  • rule("Allowed heroes")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.Allheroes == True;
  • }
  • actions
  • {
  • Set Player Allowed Heroes(Event Player, All Heroes);
  • }
  • }
  • rule("Allowed heroes")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.Allheroes == False;
  • }
  • actions
  • {
  • Set Player Allowed Heroes(Event Player, Array(Hero(Genji), Hero(Hanzo), Hero(McCree), Hero(Soldier: 76), Hero(Torbjörn), Hero(
  • Tracer), Hero(Widowmaker), Hero(Ana), Hero(Brigitte), Hero(Zenyatta), Hero(Ashe), Hero(Baptiste)));
  • }
  • }
  • rule("Forever")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.Forever = Workshop Setting Toggle(Custom String("Settings"), Custom String("Never Ending Mode"), False, 0);
  • }
  • }
  • rule("Scoreboard")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Global.RevengeIntro == False;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Create HUD Text(All Players(Team 1), 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);
  • }
  • }
  • rule("Shorter Assemble Heroes")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Assembling Heroes == True;
  • Count Of(Filtered Array(All Players(Team 1), !Has Spawned(Current Array Element))) < Number Of Players(Team 1);
  • }
  • actions
  • {
  • Wait(0.160, Ignore Condition);
  • Set Match Time(8);
  • Loop If(Count Of(Filtered Array(All Players(Team 1), !Has Spawned(Current Array Element))) < Number Of Players(Team 1));
  • }
  • }
  • rule("Invincible")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Has Status(Event Player, Invincible) == False;
  • }
  • actions
  • {
  • If(Workshop Setting Toggle(Custom String("Settings"), Custom String("Invincible Mode"), False, 0) == True);
  • Set Status(Event Player, Null, Invincible, 9999);
  • Else;
  • Clear Status(Event Player, Invincible);
  • }
  • }
  • rule("Create The Maestro")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Createmaestro == True;
  • Global.NormalWaves == False;
  • Global.Endless == False;
  • }
  • actions
  • {
  • Wait(Global.TheMaeDiff, Ignore Condition);
  • Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(83.198, 14.183, -87.143), Vector(Empty Array, Empty Array, Empty Array));
  • Loop;
  • }
  • }
  • rule("Spawn and Ult")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Sigma;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Ultimate Charge Percent(Event Player) == 100;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • Start Holding Button(Event Player, Button(Jump));
  • Wait(0.500, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Jump));
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(0.500, Ignore Condition);
  • Event Player.Finishedpath = True;
  • }
  • }
  • rule("Health")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Sigma;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Set Max Health(Event Player, 1125);
  • Wait(0.250, Ignore Condition);
  • Heal(Event Player, Null, Max Health(Event Player));
  • }
  • }
  • rule("Shooting")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Sigma;
  • }
  • conditions
  • {
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Is Dummy Bot(Event Player) == True;
  • Event Player.Finishedpath == True;
  • Is Using Ultimate(Event Player) == False;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Shooting")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Sigma;
  • }
  • conditions
  • {
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == False;
  • Is Dummy Bot(Event Player) == True;
  • Event Player.Finishedpath == True;
  • Is Using Ultimate(Event Player) == False;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Sigma Black Hole")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 2;
  • Sigma;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.Finishedpath == True;
  • Is Using Ultimate(Event Player) == False;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("Sigma Shield")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Sigma;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element))), Barriers Do Not Block LOS) == True;
  • Event Player.Finishedpath == True;
  • Is Using Ultimate(Event Player) == False;
  • }
  • actions
  • {
  • Wait(5, Ignore Condition);
  • Press Button(Event Player, Button(Secondary Fire));
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.300, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Loop If(Is In Line of Sight(Event Player, First Of(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element))), Barriers Do Not Block LOS) == True);
  • }
  • }
  • rule("Rock")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Sigma;
  • }
  • conditions
  • {
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Is Dummy Bot(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 2)) == 0;
  • Event Player.Finishedpath == True;
  • Is Using Ultimate(Event Player) == False;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 2));
  • Wait(0.500, Ignore Condition);
  • Loop If(Ability Cooldown(Event Player, Button(Ability 2)) == 0);
  • }
  • }
  • rule("Numberofzens")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.NumberofZens = Workshop Setting Integer(Custom String("Settings"), Custom String("Max Number of Zomnics"), 4, 0, 8, 0);
  • }
  • }
  • rule("Numberofzaryas")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.NumberofZombardiers = Workshop Setting Integer(Custom String("Settings"), Custom String("Max Number of Zombardiers"), 2, 0,
  • 8, 0);
  • }
  • }
  • rule("Setting - Add AI")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.AddAI = Workshop Setting Toggle(Custom String("Settings"), Custom String("Add AI"), False, 0);
  • }
  • }
  • rule("Create Dummy Bot")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.AddAI == True;
  • Number Of Players(Team 1) < 4;
  • Is Game In Progress == True;
  • Global.DoorHealth > 0;
  • Global.Stopspawningaiteam1 == False;
  • }
  • actions
  • {
  • Abort If(Global.Stopspawningaiteam1 == True);
  • Skip If(Global.Allheroes == True, 1);
  • Create Dummy Bot(Randomized Array(Array(Hero(Ana), Hero(Genji), Hero(Hanzo), Hero(McCree), Hero(Soldier: 76), Hero(Torbjörn), Hero(
  • Tracer), Hero(Widowmaker), Hero(Brigitte), Hero(Zenyatta))), Team 1, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Skip If(Global.Allheroes == False, 1);
  • Create Dummy Bot(Random Value In Array(All Heroes), Team 1, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Wait(0.250, Ignore Condition);
  • Loop If(Number Of Players(Team 1) < 4);
  • }
  • }
  • rule("Pathfind to Enemy")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Number Of Living Players(Team 2) > 0;
  • Hero Of(Event Player) != Hero(Mercy);
  • 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
  • {
  • Event Player._extendedPlayerCollection[0] = First Of(Sorted Array(Sorted Array(Sorted Array(All Living Players(Opposite Team Of(
  • Team Of(Event Player))), Y Component Of(Event Player)), Is In Line of Sight(Event Player, Current Array Element,
  • Barriers Do Not Block LOS)), 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(First Of(Event Player._extendedPlayerCollection), 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(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)))) > 3);
  • }
  • }
  • rule("Stop Pathfind to Enemy")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Hero Of(Event Player) != Hero(Mercy);
  • 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
  • {
  • Stop Throttle In Direction(Event Player);
  • Event Player.parentArray = Null;
  • }
  • }
  • rule("Stop Pathfind to Enemy")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Number Of Living Players(Team 2) == 0;
  • Is Alive(Event Player) == True;
  • Hero Of(Event Player) != Hero(Mercy);
  • }
  • actions
  • {
  • Stop Throttle In Direction(Event Player);
  • Event Player.parentArray = Null;
  • }
  • }
  • rule("Facing")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Start Facing(Event Player, Direction Towards(Event Player, First Of(Filtered Array(Sorted Array(Filtered Array(Filtered Array(
  • Players in View Angle(Event Player, Opposite Team Of(Team Of(Event Player)), 180), Is Alive(Current Array Element)),
  • Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)), Distance Between(Event Player,
  • Current Array Element)), Current Array Element.Invis == False))), 200, To World, Direction and Turn Rate);
  • }
  • }
  • rule("Shooting")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Hero Of(Event Player) != Hero(Hanzo);
  • Hero Of(Event Player) != Hero(Widowmaker);
  • Hero Of(Event Player) != Hero(Ashe);
  • Hero Of(Event Player) != Hero(Moira);
  • Hero Of(Event Player) != Hero(Mercy);
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Shooting")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == False;
  • Hero Of(Event Player) != Hero(Mercy);
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Hanzo Shooting")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Hanzo;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.900, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Loop If(Is In Line of Sight(Event Player, First Of(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element))), Barriers Do Not Block LOS) == True);
  • }
  • }
  • rule("Mercy Heal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Mercy;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Start Facing(Event Player, Direction Towards(Event Player, Closest Player To(Event Player, Team Of(Event Player))), 200, To World,
  • Direction and Turn Rate);
  • }
  • }
  • rule("Mercy Heal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Mercy;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Distance Between(Event Player, First Of(Sorted Array(All Living Players(Team 1), Distance Between(Event Player,
  • Current Array Element)))) > 3;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Start Throttle In Direction(Event Player, Direction Towards(Event Player, First Of(Sorted Array(All Living Players(Team 1),
  • Distance Between(Event Player, Current Array Element)))), 1, To World, Replace existing throttle, Direction and Magnitude);
  • }
  • }
  • rule("Mercy Heal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Mercy;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Distance Between(Event Player, First Of(Sorted Array(All Living Players(Team 1), Distance Between(Event Player,
  • Current Array Element)))) <= 3;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Stop Throttle In Direction(Event Player);
  • }
  • }
  • rule("Mercy Heal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Mercy;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Ability 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 1)) == 0;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Is Using Ability 2(Event Player) == False;
  • Hero Of(Event Player) != Hero(Bastion);
  • Hero Of(Event Player) != Hero(Wrecking Ball);
  • Hero Of(Event Player) != Hero(Reaper);
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("Ability 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 2)) == 0;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Is Using Ability 1(Event Player) == False;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 2));
  • }
  • }
  • rule("Bastion Setup")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Bastion;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Distance Between(Event Player, Vector(87.953, 14.497, -67.948)) < 5;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("Brigitte Shield")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Brigitte;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Distance Between(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) > 6;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Brigitte Shield")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Brigitte;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Distance Between(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) <= 6;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.250, Ignore Condition);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Brigitte Shield")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Brigitte;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Distance Between(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) <= 4;
  • Is Firing Secondary(Event Player) == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Mccree Ult")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • McCree;
  • }
  • conditions
  • {
  • Is Using Ultimate(Event Player) == True;
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • }
  • actions
  • {
  • Wait(4, Abort When False);
  • Press Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Zen Ult")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Zenyatta;
  • }
  • conditions
  • {
  • Ultimate Charge Percent(Event Player) == 100;
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ultimate));
  • }
  • }
  • 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("Widow Fire")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Widowmaker;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Distance Between(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) < 10;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.250, Ignore Condition);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Widow Fire")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Widowmaker;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Distance Between(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) >= 10;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.250, Ignore Condition);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Widow Fire")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Widowmaker;
  • }
  • conditions
  • {
  • Is Firing Secondary(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Wait(0.900, Ignore Condition);
  • Press Button(Event Player, Button(Primary Fire));
  • Loop If(Is Firing Secondary(Event Player) == True);
  • }
  • }
  • rule("Ashe Fire")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Ashe;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Ashe Scope")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Ashe;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Distance Between(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) < 10;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Ashe Scope")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Ashe;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Distance Between(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) >= 10;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Rein Shield")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reinhardt;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Distance Between(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) > 5;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Rein Shield")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reinhardt;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Distance Between(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) <= 5;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Ability 1 - Reaper")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 1;
  • Reaper;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 1)) == 0;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Is Using Ability 2(Event Player) == False;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("Hold Interact")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Interact));
  • }
  • }
  • rule("Doom Punch")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Doomfist;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Ability Cooldown(Event Player, Button(Secondary Fire)) == 0;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(2, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Reaper Teleport Shoot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reaper;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Is Using Ability 2(Event Player) == False;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Mei Icycle")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Mei;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Has Status(Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player))), Frozen) == True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Mei Icycle")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Mei;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Has Status(Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player))), Frozen) == False;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Mei Ice wall")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Mei;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Using Ability 2(Event Player) == True;
  • }
  • actions
  • {
  • Wait(0.250, Ignore Condition);
  • Press Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Sigma Ult")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Sigma;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Is Using Ultimate(Event Player) == True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Jump));
  • Wait(0.500, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Jump));
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Shooting - Moira")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Moira;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Reaper Teleport")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reaper;
  • }
  • conditions
  • {
  • Is Using Ability 2(Event Player) == True;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • Press Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Shoot after teleport")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Reaper;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Using Ability 2(Event Player) == False;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("ULT")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Ultimate Charge Percent(Event Player) == 100;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ultimate));
  • }
  • }
  • rule("ULT - junk")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Junkrat;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Using Ultimate(Event Player) == True;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • Press Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Zarya Right Click")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Zarya;
  • }
  • conditions
  • {
  • Distance Between(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) > 10;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.250, Ignore Condition);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Zarya Right Click")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Zarya;
  • }
  • conditions
  • {
  • Distance Between(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) <= 10;
  • Is In Line of Sight(Event Player, First Of(Filtered Array(Sorted Array(All Living Players(Opposite Team Of(Team Of(Event Player))),
  • Distance Between(Event Player, Current Array Element)), Current Array Element.Invis == False)), Barriers Do Not Block LOS)
  • == True;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.250, Ignore Condition);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Jump/Fly")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is In Air(Event Player) == True;
  • }
  • actions
  • {
  • Wait(0.250, Abort When False);
  • Start Holding Button(Event Player, Button(Jump));
  • }
  • }
  • disabled rule("Stop if not alive")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Global._extendedGlobalCollection[0]) == False;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Stop Throttle In Direction(Event Player);
  • Event Player.parentArray = Null;
  • }
  • }
  • rule("Junkrat go away")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Junkrat;
  • }
  • conditions
  • {
  • Global.RevengeIntro == True;
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • Start Throttle In Direction(Event Player, Direction Towards(Event Player, Vector(58.864, 20.272, -99.861)), 1, To World,
  • Replace existing throttle, Direction and Magnitude);
  • Start Facing(Event Player, Direction Towards(Event Player, Vector(58.864, 20.272, -99.861)), 200, To World,
  • Direction and Turn Rate);
  • }
  • }
  • rule("Junkrat go away")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Junkrat;
  • }
  • conditions
  • {
  • Global.RevengeIntro == True;
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Distance Between(Event Player, Vector(58.864, 20.274, -99.862)) <= 2;
  • }
  • actions
  • {
  • Destroy Dummy Bot(Team Of(Event Player), Slot Of(Event Player));
  • }
  • }
  • rule("Get rid of zens")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Zenyatta;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Global.Cutsceneended == True;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Destroy Dummy Bot(Team Of(Event Player), Slot Of(Event Player));
  • }
  • }
  • rule("Clear HUD")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Destroy All HUD Text;
  • }
  • }
  • rule("Score - Reaper")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Hero Of(Victim) == Hero(Reaper);
  • }
  • actions
  • {
  • Global.Score += 400;
  • }
  • }
  • rule("Score - Rest of Bosses")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Hero Of(Victim) != Hero(Reaper);
  • Hero Of(Victim) != Hero(Zenyatta);
  • Hero Of(Victim) != Hero(Zarya);
  • }
  • actions
  • {
  • Global.Score += 800;
  • }
  • }
  • rule("Score - Zomnic")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Hero Of(Victim) == Hero(Zenyatta);
  • }
  • actions
  • {
  • Global.Score += 20;
  • }
  • }
  • rule("Score - Zombardier")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Hero Of(Victim) == Hero(Zarya);
  • }
  • actions
  • {
  • Global.Score += 20;
  • }
  • }
  • rule("Score - Enemies Killed")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Kills == 25;
  • }
  • actions
  • {
  • Global.Score += 25;
  • Global.CurrentBonusKills = 25;
  • Big Message(All Players(Team 1), Custom String("Survival Bonus +25PTS"));
  • }
  • }
  • rule("Score - Enemies Killed")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Kills == Global.CurrentBonusKills + 50;
  • Global.CurrentBonusKills <= 600;
  • }
  • actions
  • {
  • Global.CurrentBonusKills = Global.Kills;
  • Wait(0.250, Ignore Condition);
  • Global.Score += Global.CurrentBonusKills;
  • Big Message(All Players(Team 1), Custom String("Survival Bonus +{0}PTS", Global.CurrentBonusKills));
  • }
  • }
  • rule("Score - Reset Bonus")
  • {
  • event
  • {
  • Player Died;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Global.Kills = 0;
  • Global.CurrentBonusKills = 0;
  • }
  • }
  • rule("Bastion Setup")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Bastion;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Distance Between(Event Player, Vector(61.213, 19.671, -91.980)) < 2;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("Bastion Heal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Bastion;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Health(Event Player) < Max Health(Event Player);
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Bastion Heal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Bastion;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Health(Event Player) == Max Health(Event Player);
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Wave Mode")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.NormalWaves = Workshop Setting Toggle(Custom String("Settings"), Custom String("Normal Waves"), True, 0);
  • }
  • }
  • rule("The Reaper")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.NormalWaves == True;
  • Is Game In Progress == True;
  • Global.mins == 5;
  • Global.sec == 42;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Junkenstein's Monster")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.NormalWaves == True;
  • Is Game In Progress == True;
  • Global.mins == 3;
  • Global.sec == 45;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("The Summoner")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.NormalWaves == True;
  • Is Game In Progress == True;
  • Global.mins == 2;
  • Global.sec == 45;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Dr. Junkenstein")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.NormalWaves == True;
  • Is Game In Progress == True;
  • Global.mins == 1;
  • Global.sec == 45;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Junkrat), Team 2, -1, Vector(56.648, 24.364, -104.668), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("The Reaper 2")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.NormalWaves == True;
  • Is Game In Progress == True;
  • Global.mins == 1;
  • Global.sec == 34;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("The Reaper 3")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.NormalWaves == True;
  • Is Game In Progress == True;
  • Global.mins == 0;
  • Global.sec == 33;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("End Game")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.NormalWaves == True;
  • Is Game In Progress == True;
  • Match Time <= 0;
  • }
  • actions
  • {
  • Global.HUDtext = Custom String("DEFEAT THE BOSSES");
  • Global.EndGame = True;
  • Big Message(All Players(All Teams), Custom String("FINAL BATTLE!"));
  • Pause Match Time;
  • Skip If(Global.Legendary == False, 1);
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Mercy), Team 2, -1, Vector(83.339, 14.454, -94.776), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Win")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Global.NormalWaves == True;
  • Is Game In Progress == True;
  • Match Time <= 0;
  • Count Of(Filtered Array(All Living Players(Team 2), Hero Of(Current Array Element) == Hero(Roadhog))) == 0;
  • Count Of(Filtered Array(All Living Players(Team 2), Hero Of(Current Array Element) == Hero(Mercy))) == 0;
  • Count Of(Filtered Array(All Living Players(Team 2), Hero Of(Current Array Element) == Hero(Reaper))) == 0;
  • Count Of(Filtered Array(All Living Players(Team 2), Hero Of(Current Array Element) == Hero(Symmetra))) == 0;
  • Count Of(Filtered Array(Filtered Array(All Living Players(Team 2), Array Contains(Global.Shocktire, Current Array Element)
  • == False), Hero Of(Current Array Element) == Hero(Junkrat))) == 0;
  • Global.DoorHealth > 0;
  • }
  • actions
  • {
  • Destroy All Progress Bar HUD Text;
  • Destroy All HUD Text;
  • Set Slow Motion(35);
  • Start Camera(All Players(Team 1), Position Of(Victim) + Up + Up + Up, Position Of(Victim), 0);
  • Wait(2, Ignore Condition);
  • Declare Team Victory(Team 1);
  • }
  • }
  • disabled rule("set time")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Interact)) == True;
  • }
  • actions
  • {
  • Set Match Time(30);
  • }
  • }
  • rule("Bots die")
  • {
  • event
  • {
  • Player Died;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.NormalWaves == True;
  • Is Game In Progress == True;
  • Is Dummy Bot(Event Player) == True;
  • Hero Of(Event Player) != Hero(Reaper);
  • Hero Of(Event Player) != Hero(Symmetra);
  • Hero Of(Event Player) != Hero(Roadhog);
  • Hero Of(Event Player) != Hero(Junkrat);
  • Hero Of(Event Player) != Hero(Mercy);
  • }
  • actions
  • {
  • Destroy Dummy Bot(Team Of(Event Player), Slot Of(Event Player));
  • }
  • }
  • rule("Bots die")
  • {
  • event
  • {
  • Player Died;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.NormalWaves == True;
  • Is Game In Progress == True;
  • Is Dummy Bot(Event Player) == True;
  • Hero Of(Event Player) != Hero(Zarya);
  • Hero Of(Event Player) != Hero(Zenyatta);
  • }
  • actions
  • {
  • Wait(5, Ignore Condition);
  • Destroy Dummy Bot(Team Of(Event Player), Slot Of(Event Player));
  • }
  • }
  • rule("Junkenstein Endless")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.Endless = Workshop Setting Toggle(Custom String("Settings"), Custom String("Junkenstein Endless"), False, 0);
  • }
  • }
  • rule("WaveInt")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • }
  • actions
  • {
  • Global.Waveint = 1;
  • Global.MaxWave = 12;
  • Global.mins = 0;
  • Global.sec = 59;
  • Global.BonusWave = False;
  • Global.WaveType = Custom String("Wave");
  • }
  • }
  • rule("WaveHUD")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • }
  • actions
  • {
  • Create HUD Text(All Players(Team 1), Null, Custom String("{0} {1}/{2}", Global.WaveType, Global.Waveint, Global.MaxWave), Null,
  • Top, 0, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • }
  • }
  • rule("ChangeWave")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.sec == 0;
  • Is Game In Progress == True;
  • Global.Endless == True;
  • }
  • actions
  • {
  • Global.mins = 0;
  • Skip If(Global.Waveint == Global.MaxWave, 1);
  • Global.Waveint += 1;
  • }
  • }
  • rule("ChangeToBonusWaves")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • (Global.mins && Global.sec) == 0;
  • Global.Waveint == 12;
  • Global.BonusWave == False;
  • }
  • actions
  • {
  • Wait(59, Ignore Condition);
  • Global.BonusWave = True;
  • Global.WaveType = Custom String("Bonus Wave");
  • Global.Waveint = 1;
  • Global.MaxWave = 15;
  • Global.sec = 59;
  • }
  • }
  • rule("Wave 1 - The Reaper")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 18;
  • Global.Waveint == 1;
  • Global.BonusWave == False;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Wave 3 - Junkenstein's Monster")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 42;
  • Global.Waveint == 3;
  • Global.BonusWave == False;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Wave 4 - Dr. Junkenstein")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 47;
  • Global.Waveint == 4;
  • Global.BonusWave == False;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Junkrat), Team 2, -1, Vector(56.648, 24.364, -104.668), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Wave 5 - The Reaper (2x)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 47;
  • Global.Waveint == 5;
  • Global.BonusWave == False;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Wave 6 - The Summoner")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 50;
  • Global.Waveint == 6;
  • Global.BonusWave == False;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Wave 7 - Junkenstein's Monster (2x)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 50;
  • Global.Waveint == 7;
  • Global.BonusWave == False;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Wave 8 - The Witch, Junkenstein's Monster, Dr. Junkenstein")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 48;
  • Global.Waveint == 8;
  • Global.BonusWave == False;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Mercy), Team 2, -1, Vector(83.339, 14.454, -94.776), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Wave 9 - The Reaper (3x)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 47;
  • Global.Waveint == 9;
  • Global.BonusWave == False;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Wave 10 - The Summoner (2x)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 50;
  • Global.Waveint == 10;
  • Global.BonusWave == False;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Wave 11 - Junkenstein's Monster (2x)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 50;
  • Global.Waveint == 11;
  • Global.BonusWave == False;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Wave 12 - The Witch, Junkenstein's Monster, Dr. Junkenstein")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 48;
  • Global.Waveint == 12;
  • Global.BonusWave == False;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Mercy), Team 2, -1, Vector(83.339, 14.454, -94.776), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Bonus Wave 1 - The Reaper (3x)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 48;
  • Global.Waveint == 1;
  • Global.BonusWave == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Bonus Wave 2 - The Summoner (2x)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 48;
  • Global.Waveint == 2;
  • Global.BonusWave == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Bonus Wave 3 - Junkenstein's Monster (x3)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 48;
  • Global.Waveint == 3;
  • Global.BonusWave == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Bonus Wave 4 - The Witch (x2), Junkenstein's Monster, Dr. Junkenstein")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 48;
  • Global.Waveint == 4;
  • Global.BonusWave == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Mercy), Team 2, -1, Vector(83.339, 14.454, -94.776), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Mercy), Team 2, -1, Vector(83.339, 14.454, -94.776), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Junkrat), Team 2, -1, Vector(56.648, 24.364, -104.668), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Bonus Wave 5 - The Reaper (x4)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 48;
  • Global.Waveint == 5;
  • Global.BonusWave == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Bonus Wave 6 - The Summoner (x4)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 48;
  • Global.Waveint == 6;
  • Global.BonusWave == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Bonus Wave 7 - Junkenstein's Monster (x3)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 48;
  • Global.Waveint == 7;
  • Global.BonusWave == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Bonus Wave 8 - The Witch (x2), Junkenstein's Monster, Dr. Junkenstein")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 48;
  • Global.Waveint == 8;
  • Global.BonusWave == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Mercy), Team 2, -1, Vector(83.339, 14.454, -94.776), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Mercy), Team 2, -1, Vector(83.339, 14.454, -94.776), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Junkrat), Team 2, -1, Vector(56.648, 24.364, -104.668), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Bonus Wave 9 - The Reaper (x4)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 48;
  • Global.Waveint == 9;
  • Global.BonusWave == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Bonus Wave 10 - The Summoner (x4)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 48;
  • Global.Waveint == 10;
  • Global.BonusWave == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Bonus Wave 11 - Junkenstein's Monster (x4)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 48;
  • Global.Waveint == 11;
  • Global.BonusWave == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Bonus Wave 12 - The Witch (x2), Junkenstein's Monster (2x), Dr. Junkenstein (2x)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 48;
  • Global.Waveint == 12;
  • Global.BonusWave == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Mercy), Team 2, -1, Vector(83.339, 14.454, -94.776), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Mercy), Team 2, -1, Vector(83.339, 14.454, -94.776), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Junkrat), Team 2, -1, Vector(56.648, 24.364, -104.668), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Bonus Wave 13 - The Reaper (x4)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 48;
  • Global.Waveint == 13;
  • Global.BonusWave == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(62.376, 20.399, -92.766), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Bonus Wave 14 - The Summoner (x4)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 48;
  • Global.Waveint == 14;
  • Global.BonusWave == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Bonus Wave 15 - Junkenstein's Monster (x4)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.sec == 48;
  • Global.Waveint == 15;
  • Global.BonusWave == True;
  • Match Time > 0;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Bonus Wave 15 - Final Battle - The Witch (x2), Junkenstein's Monster (2x), Dr. Junkenstein (2x), The Summoner (2x)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Endless == True;
  • Global.Waveint == 15;
  • Global.BonusWave == True;
  • Match Time <= 0;
  • }
  • actions
  • {
  • Global.HUDtext = Custom String("DEFEAT THE BOSSES");
  • Big Message(All Players(Team 1), Custom String("FINAL BATTLE!"));
  • Pause Match Time;
  • Create Dummy Bot(Hero(Mercy), Team 2, -1, Vector(83.339, 14.454, -94.776), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Mercy), Team 2, -1, Vector(83.339, 14.454, -94.776), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(80.076, 14.239, -98.538), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Junkrat), Team 2, -1, Vector(56.648, 24.364, -104.668), Vector(Empty Array, Empty Array, Empty Array));
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, First Of(Global.UndeadSpawnPoints), Vector(Empty Array, Empty Array, Empty Array));
  • }
  • }
  • rule("Win Endless")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Global.Endless == True;
  • Is Game In Progress == True;
  • Match Time <= 0;
  • Count Of(Filtered Array(All Living Players(Team 2), Hero Of(Current Array Element) == Hero(Roadhog))) == 0;
  • Count Of(Filtered Array(All Living Players(Team 2), Hero Of(Current Array Element) == Hero(Mercy))) == 0;
  • Count Of(Filtered Array(All Living Players(Team 2), Hero Of(Current Array Element) == Hero(Reaper))) == 0;
  • Count Of(Filtered Array(All Living Players(Team 2), Hero Of(Current Array Element) == Hero(Symmetra))) == 0;
  • Count Of(Filtered Array(Filtered Array(All Living Players(Team 2), Array Contains(Global.Shocktire, Current Array Element)
  • == False), Hero Of(Current Array Element) == Hero(Junkrat))) == 0;
  • Global.BonusWave == True;
  • Global.Waveint == 15;
  • Global.DoorHealth > 0;
  • }
  • actions
  • {
  • Destroy All Progress Bar HUD Text;
  • Destroy All HUD Text;
  • Set Slow Motion(35);
  • Start Camera(All Players(Team 1), Position Of(Victim) + Up + Up + Up, Position Of(Victim), 0);
  • Wait(2, Ignore Condition);
  • Declare Team Victory(Team 1);
  • }
  • }
  • rule("Win Endless")
  • {
  • event
  • {
  • Player Died;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.Endless == True;
  • Is Game In Progress == True;
  • Global.BonusWave == True;
  • Number Of Living Players(Team 1) == 0;
  • }
  • actions
  • {
  • Global.Stopspawningaiteam1 = True;
  • Destroy All Progress Bar HUD Text;
  • Destroy All HUD Text;
  • Disable Built-In Game Mode Respawning(All Players(Team 1));
  • Wait(0.500, Ignore Condition);
  • Start Camera(All Players(Team 1), Position Of(Victim) + Up + Up + Up, Position Of(Victim), 0);
  • Set Slow Motion(35);
  • Wait(2, Ignore Condition);
  • Declare Team Victory(Team 1);
  • }
  • }
  • rule("Win Endless")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Endless == True;
  • Is Game In Progress == True;
  • Global.BonusWave == True;
  • Global.DoorHealth <= 0;
  • }
  • actions
  • {
  • Global.Stopspawningaiteam1 = True;
  • Destroy All HUD Text;
  • Big Message(All Players(All Teams), Custom String("DOOR DESTROYED"));
  • Disable Built-In Game Mode Respawning(All Players(Team 1));
  • Wait(4, Ignore Condition);
  • Declare Team Victory(Team 1);
  • }
  • }
  • rule("Lose Endless")
  • {
  • event
  • {
  • Player Died;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Global.Endless == True;
  • Is Game In Progress == True;
  • Global.BonusWave == False;
  • Number Of Living Players(Team 1) == 0;
  • }
  • actions
  • {
  • Global.Stopspawningaiteam1 = True;
  • Destroy All Progress Bar HUD Text;
  • Destroy All HUD Text;
  • Disable Built-In Game Mode Respawning(All Players(Team 1));
  • Wait(0.500, Ignore Condition);
  • Start Camera(All Players(Team 1), Position Of(Victim) + Up + Up + Up, Position Of(Victim), 0);
  • Set Slow Motion(35);
  • Global.DestroyallTeam2 = True;
  • Wait(2, Ignore Condition);
  • Declare Team Victory(Team 2);
  • Create Dummy Bot(Hero(Mercy), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Junkrat), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • }
  • }
  • rule("Lose Endless")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Endless == True;
  • Is Game In Progress == True;
  • Global.BonusWave == False;
  • Global.DoorHealth <= 0;
  • }
  • actions
  • {
  • Global.Stopspawningaiteam1 = True;
  • Destroy All Progress Bar HUD Text;
  • Destroy All HUD Text;
  • Big Message(All Players(All Teams), Custom String("DOOR DESTROYED"));
  • Disable Built-In Game Mode Respawning(All Players(Team 1));
  • Wait(4, Ignore Condition);
  • Declare Team Victory(Team 2);
  • }
  • }
  • rule("Enable Endless")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.NormalWaves == True;
  • Global.Endless == True;
  • }
  • actions
  • {
  • Global.NormalWaves = False;
  • }
  • }
  • rule("Bots die")
  • {
  • event
  • {
  • Player Died;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.Endless == True;
  • Is Game In Progress == True;
  • Is Dummy Bot(Event Player) == True;
  • Hero Of(Event Player) != Hero(Reaper);
  • Hero Of(Event Player) != Hero(Symmetra);
  • Hero Of(Event Player) != Hero(Roadhog);
  • Hero Of(Event Player) != Hero(Junkrat);
  • Hero Of(Event Player) != Hero(Mercy);
  • }
  • actions
  • {
  • Destroy Dummy Bot(Team Of(Event Player), Slot Of(Event Player));
  • }
  • }
  • rule("Bots die")
  • {
  • event
  • {
  • Player Died;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.Endless == True;
  • Is Game In Progress == True;
  • Is Dummy Bot(Event Player) == True;
  • Hero Of(Event Player) != Hero(Zarya);
  • Hero Of(Event Player) != Hero(Zenyatta);
  • }
  • actions
  • {
  • Wait(5, Ignore Condition);
  • Destroy Dummy Bot(Team Of(Event Player), Slot Of(Event Player));
  • }
  • }
  • rule("Door Dead cutscene")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.DoorHealth <= 0;
  • }
  • actions
  • {
  • Global.DestroyallTeam2 = True;
  • Destroy All Progress Bar HUD Text;
  • Destroy All HUD Text;
  • Wait(0.250, Ignore Condition);
  • Set Slow Motion(50);
  • Set Status(All Players(Team 1), Null, Invincible, 9999);
  • Set Invisible(All Players(Team 1), All);
  • Create Dummy Bot(Hero(Zenyatta), Team 2, -1, Vector(87.616, 14.196, -69.726), Vector(0, 0, 0));
  • Start Camera(All Players(Team 1), Vector(86.435, 14.358, -66.878), Vector(88.661, 14.463, -64.664), 0);
  • Wait(2, Ignore Condition);
  • Start Camera(All Players(Team 1), Vector(81.212, 14.187, -72.847), Vector(84.565, 14.131, -70.413), 1);
  • Create Dummy Bot(Hero(Zenyatta), Team 2, -1, Vector(88.626, 14.167, -74.166), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Zenyatta), Team 2, -1, Vector(86.304, 14.147, -73.481), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Zenyatta), Team 2, -1, Vector(84.537, 14.151, -72.719), Vector(0, 0, 0));
  • Wait(2, Ignore Condition);
  • Create Dummy Bot(Hero(Mercy), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Roadhog), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Junkrat), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Symmetra), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Reaper), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • }
  • }
  • rule("Zenyatta go to door")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Zenyatta;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.DoorHealth <= 0;
  • }
  • actions
  • {
  • Start Facing(Event Player, Direction Towards(Event Player, Vector(88.946, 14.053, -63.987)), 200, To World,
  • Direction and Turn Rate);
  • Start Throttle In Direction(Event Player, Facing Direction Of(Event Player), 1, To World, Replace existing throttle,
  • Direction and Magnitude);
  • }
  • }
  • rule("Jump")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Horizontal Speed Of(Event Player) < 1;
  • Hero Of(Event Player) != Hero(Zenyatta);
  • Is Moving(Event Player) == True;
  • }
  • actions
  • {
  • Wait(0.250, Abort When False);
  • Press Button(Event Player, Button(Jump));
  • }
  • }
  • rule("Jump")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Horizontal Speed Of(Event Player) < 1;
  • Is Moving(Event Player) == True;
  • }
  • actions
  • {
  • Wait(0.250, Abort When False);
  • Press Button(Event Player, Button(Jump));
  • }
  • }
  • rule("Zen can kick lol")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.Zencankick = Workshop Setting Toggle(Custom String("Requests"), Custom String(
  • "Zen Can Kick - Requested by Dead By Friendship"), False, 0);
  • }
  • }
  • rule("Zen facing")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Zenyatta;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Global.Zencankick == True;
  • }
  • actions
  • {
  • Start Facing(Event Player, Direction Towards(Event Player, First Of(Filtered Array(Sorted Array(Filtered Array(Filtered Array(
  • Players in View Angle(Event Player, Opposite Team Of(Team Of(Event Player)), 180), Is Alive(Current Array Element)),
  • Is In Line of Sight(Event Player, Current Array Element, Barriers Do Not Block LOS)), Distance Between(Event Player,
  • Current Array Element)), Current Array Element.Invis == False))), 200, To World, Direction and Turn Rate);
  • }
  • }
  • rule("Zen kick")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Zenyatta;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Global.Zencankick == 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)))) <= 2;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Melee));
  • Wait(0.250, Ignore Condition);
  • Loop If(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)))) <= 2);
  • }
  • }
  • rule("Shrinking Potion")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.Shrinkingpotion = Workshop Setting Toggle(Custom String("Requests"), Custom String(
  • "Shrinking Potion - Requested by u/PokeAust"), False, 0);
  • }
  • }
  • rule("Shrinking Potion")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Global.Junkintro == False;
  • Global.Shrinkingpotion == True;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Start Scaling Player(Event Player, 0.500, True);
  • Start Modifying Hero Voice Lines(Event Player, 1.500, True);
  • }
  • }
  • rule("Junkrat hit")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Junkrat;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Global.RevengeIntro == False;
  • Global.Shocktire != Event Player;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Huge Potion")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.Hugepotion = Workshop Setting Toggle(Custom String("Requests"), Custom String("Huge Potion - Requested by Skylander816"),
  • False, 0);
  • }
  • }
  • rule("Huge Potion")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Global.Junkintro == False;
  • Global.Hugepotion == True;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Start Scaling Player(Event Player, 1.500, True);
  • Start Modifying Hero Voice Lines(Event Player, 0.500, True);
  • }
  • }
  • rule("Mode")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.Normal = Workshop Setting Toggle(Custom String("Difficulty Mode"), Custom String("Normal"), True, 0);
  • Global.Hard = Workshop Setting Toggle(Custom String("Difficulty Mode"), Custom String("Hard"), False, 0);
  • Global.Expert = Workshop Setting Toggle(Custom String("Difficulty Mode"), Custom String("Expert"), False, 0);
  • Global.Legendary = Workshop Setting Toggle(Custom String("Difficulty Mode"), Custom String("Legendary"), False, -1);
  • }
  • }
  • rule("Junkrat Health")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Junkrat;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Array Contains(Global.Shocktire, Event Player) == False;
  • }
  • actions
  • {
  • Set Damage Dealt(Event Player, 41);
  • If(Global.Normal == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 2050, True, True);
  • Else If(Global.Hard == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 2550, True, True);
  • Else If(Global.Expert == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 2800, True, True);
  • Else If(Global.Legendary == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 3050, True, True);
  • }
  • }
  • rule("Roadhog Health")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • If(Global.Normal == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 3200, True, True);
  • Set Damage Dealt(Event Player, 25);
  • Else If(Global.Hard == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 3650, True, True);
  • Set Damage Dealt(Event Player, 50);
  • Else If(Global.Expert == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 3900, True, True);
  • Set Damage Dealt(Event Player, 75);
  • Else If(Global.Legendary == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 4000, True, True);
  • Set Damage Dealt(Event Player, 80);
  • }
  • }
  • rule("Symmetra Health")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Symmetra;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • If(Global.Normal == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 1300, True, True);
  • Else If(Global.Hard == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 1600, True, True);
  • Else If(Global.Expert == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 1800, True, True);
  • Else If(Global.Legendary == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 2100, True, True);
  • }
  • }
  • rule("Mercy Health")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Mercy;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • If(Global.Normal == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 1400, True, True);
  • Else If(Global.Hard == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 1550, True, True);
  • Else If(Global.Expert == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 1900, True, True);
  • Set Healing Dealt(Event Player, 200);
  • Else If(Global.Legendary == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 2300, True, True);
  • Set Healing Dealt(Event Player, 400);
  • }
  • }
  • rule("Reaper Health")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Reaper;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • If(Global.Normal == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 750, True, True);
  • Set Damage Dealt(Event Player, 25);
  • Else If(Global.Hard == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 1000, True, True);
  • Set Damage Dealt(Event Player, 50);
  • Else If(Global.Expert == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 1350, True, True);
  • Set Damage Dealt(Event Player, 75);
  • Else If(Global.Legendary == True);
  • Remove All Health Pools From Player(Event Player);
  • Wait(0.160, Ignore Condition);
  • Add Health Pool To Player(Event Player, Health, 1750, True, True);
  • Set Damage Dealt(Event Player, 100);
  • }
  • }
  • rule("DestroyallTeam2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Global.DestroyallTeam2 == True;
  • }
  • actions
  • {
  • Destroy Dummy Bot(Team Of(Event Player), Slot Of(Event Player));
  • Global.DestroyallTeam2 = False;
  • }
  • }
  • rule("Challenge Missions")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.VengefulGhost = Workshop Setting Toggle(Custom String("Challenge Missions"), Custom String("Vengeful Ghost"), False, 0);
  • Global.FrenziedStampede = Workshop Setting Toggle(Custom String("Challenge Missions"), Custom String("Frenzied Stampede"), False,
  • 0);
  • Global.VolatileZomnics = Workshop Setting Toggle(Custom String("Challenge Missions"), Custom String("Volatile Zomnics"), False, 0);
  • Global.ThreeTheyWere = Workshop Setting Toggle(Custom String("Challenge Missions"), Custom String("Three They Were"), False, 0);
  • Global.MysterySwap = Workshop Setting Toggle(Custom String("Challenge Missions"), Custom String("Mystery Swap"), False, 0);
  • Global.ShockingSurprise = Workshop Setting Toggle(Custom String("Challenge Missions"), Custom String("Shocking Surprise"), False,
  • 0);
  • }
  • }
  • rule("Frenzied Stampede")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Zenyatta;
  • }
  • conditions
  • {
  • Global.FrenziedStampede == True;
  • }
  • actions
  • {
  • Set Move Speed(Event Player, 100);
  • }
  • }
  • rule("Vengeful Ghost")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.VengefulGhost == True;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Global.Normal = False;
  • Global.Legendary = False;
  • Global.Hard = False;
  • Global.Expert = True;
  • Wait(30, Ignore Condition);
  • Create Effect(All Players(All Teams), Bad Aura, Color(Purple), Vector(82.791, 17.375, -88.210), 1, Visible To Position and Radius);
  • Global.Ghostspawning = Last Created Entity;
  • Wait(1, Ignore Condition);
  • Destroy Effect(Global.Ghostspawning);
  • Create Dummy Bot(Hero(Zenyatta), Team 2, -1, Vector(82.791, 17.375, -88.210), Vector(0, 0, 0));
  • Global.Ghost = Last Created Entity;
  • }
  • }
  • rule("Vengeful Ghost")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Zenyatta;
  • }
  • conditions
  • {
  • Global.VengefulGhost == True;
  • Global.Ghost == Event Player;
  • }
  • actions
  • {
  • Global.GhostPOS = Position Of(Event Player);
  • Disable Movement Collision With Environment(Event Player, True);
  • Set Gravity(Event Player, 0);
  • Start Forcing Player Position(Event Player, Global.GhostPOS, True);
  • Set Status(Event Player, Null, Phased Out, 9999);
  • Create Effect(All Players(All Teams), Sphere, Color(Purple), Event Player, 3, Visible To Position and Radius);
  • Start Facing(Event Player, Direction Towards(Event Player, First Of(Sorted Array(All Living Players(Opposite Team Of(Team Of(
  • Event Player))), Distance Between(Event Player, Current Array Element)))), 200, To World, Direction and Turn Rate);
  • Chase Global Variable At Rate(GhostPOS, Position Of(First Of(Sorted Array(All Living Players(Opposite Team Of(Team Of(
  • Event Player))), Distance Between(Event Player, Current Array Element)))), 3.575, Destination and Rate);
  • }
  • }
  • rule("Vengeful Ghost")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Global.VengefulGhost == True;
  • Distance Between(Event Player, Global.Ghost) <= 3;
  • Is Alive(Global.Ghost) == True;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Start Damage Over Time(Event Player, Global.Ghost, 9999, 10);
  • }
  • }
  • rule("Vengeful Ghost")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Global.VengefulGhost == True;
  • Distance Between(Event Player, Global.Ghost) > 3;
  • Is Alive(Global.Ghost) == True;
  • }
  • actions
  • {
  • Stop All Damage Over Time(Event Player);
  • }
  • }
  • rule("Vengeful Ghost - Clear Damage")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • (Is Waiting For Players || Is Game In Progress) == True;
  • }
  • actions
  • {
  • Stop All Damage Over Time(Event Player);
  • }
  • }
  • rule("Frenzied Stampede")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Zenyatta;
  • }
  • conditions
  • {
  • Global.FrenziedStampede == False;
  • }
  • actions
  • {
  • Set Move Speed(Event Player, 65);
  • }
  • }
  • rule("Frenzied Stampede")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.FrenziedStampede == True;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Global.Normal = False;
  • Global.Legendary = False;
  • Global.Hard = False;
  • Global.Expert = True;
  • }
  • }
  • rule("Shock Tire")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Wait(Random Integer(Workshop Setting Integer(Custom String("Difficulty"), Custom String("Shock-Tire Delay MIN"), 10, 1, 500, -1),
  • Workshop Setting Integer(Custom String("Difficulty"), Custom String("Shock-Tire Delay MAX"), 60, 1, 500, -1)),
  • Ignore Condition);
  • Create Dummy Bot(Hero(Junkrat), Team 2, -1, Random Value In Array(Global.UndeadSpawnPoints), Vector(0, 0, 0));
  • Modify Global Variable(Shocktire, Append To Array, Last Created Entity);
  • Loop;
  • }
  • }
  • rule("Shock Tire Properties")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Array Contains(Global.Shocktire, Event Player) == True;
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Set Damage Dealt(Event Player, 16.666);
  • Set Status(Event Player, Null, Invincible, 9999);
  • Set Ultimate Ability Enabled(Event Player, True);
  • Set Ultimate Charge(Event Player, 100);
  • Wait(1, Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • Wait(1, Ignore Condition);
  • Event Player.WasUsingUlt = True;
  • }
  • }
  • rule("Shock Tire Left")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Distance Between(Event Player, Global.UndeadSpawnPoints[0]) <= 2;
  • Array Contains(Global.Shocktire, Event Player) == True;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Event Player, Vector(65.058, 13.973, -74.060)), 100000000, To World,
  • Direction and Turn Rate);
  • Wait(3.500, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Vector(65.058, 13.973, -74.060), Vector(66.847, 13.975, -70.258)), 500, To World,
  • Direction and Turn Rate);
  • Wait(0.500, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Vector(66.847, 13.975, -70.258), Vector(73.186, 13.913, -71.976)), 500, To World,
  • Direction and Turn Rate);
  • Wait(0.500, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Vector(73.186, 13.913, -71.976), Vector(75.410, 13.911, -67.422)), 500, To World,
  • Direction and Turn Rate);
  • Wait(0.500, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Vector(75.410, 13.911, -67.422), Vector(87.316, 13.906, -70.732)), 500, To World,
  • Direction and Turn Rate);
  • Wait(1, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Vector(87.316, 13.906, -70.732), Vector(89.120, 14.073, -63.608)), 500, To World,
  • Direction and Turn Rate);
  • Wait(0.500, Ignore Condition);
  • Abort If(Is Using Ultimate(Event Player) == False);
  • Press Button(Event Player, Button(Primary Fire));
  • Global.DoorHealth -= 240;
  • Wait(0.250, Ignore Condition);
  • Destroy Dummy Bot(Team Of(Event Player), Slot Of(Event Player));
  • }
  • }
  • rule("Shock Tire Middle")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Distance Between(Event Player, Global.UndeadSpawnPoints[1]) <= 2;
  • Array Contains(Global.Shocktire, Event Player) == True;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Event Player, Vector(87.926, 14.687, -62.737)), 1000000, To World,
  • Direction and Turn Rate);
  • Wait(5.500, Ignore Condition);
  • Abort If(Is Using Ultimate(Event Player) == False);
  • Press Button(Event Player, Button(Primary Fire));
  • Global.DoorHealth -= 240;
  • Wait(0.250, Ignore Condition);
  • Destroy Dummy Bot(Team Of(Event Player), Slot Of(Event Player));
  • }
  • }
  • rule("Shock Tire Right")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Distance Between(Event Player, Global.UndeadSpawnPoints[2]) <= 2;
  • Array Contains(Global.Shocktire, Event Player) == True;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Event Player, Vector(104.287, 13.975, -78.858)), 100000000, To World,
  • Direction and Turn Rate);
  • Wait(2.500, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Vector(104.287, 13.975, -78.858), Vector(86.139, 13.924, -75.736)), 500, To World,
  • Direction and Turn Rate);
  • Wait(1.500, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Vector(86.139, 13.924, -75.736), Vector(88.974, 14.051, -63.539)), 500, To World,
  • Direction and Turn Rate);
  • Wait(1, Ignore Condition);
  • Abort If(Is Using Ultimate(Event Player) == False);
  • Press Button(Event Player, Button(Primary Fire));
  • Global.DoorHealth -= 240;
  • Wait(0.250, Ignore Condition);
  • Destroy Dummy Bot(Team Of(Event Player), Slot Of(Event Player));
  • }
  • }
  • rule("Shock Tire - Remove Junkrat")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Junkrat;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Event Player.WasUsingUlt == True;
  • Is Using Ultimate(Event Player) == False;
  • Array Contains(Global.Shocktire, Event Player) == True;
  • }
  • actions
  • {
  • Global.Score += 80;
  • Destroy Dummy Bot(Team Of(Event Player), Slot Of(Event Player));
  • }
  • }
  • rule("Insta-Ult")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Workshop Setting Toggle(Custom String("Settings"), Custom String("Insta-Ult"), False, 0) == True;
  • }
  • actions
  • {
  • Set Ultimate Charge(Event Player, 100);
  • Wait(0.250, Ignore Condition);
  • Loop;
  • }
  • }
  • rule("Global Kills")
  • {
  • event
  • {
  • Player Earned Elimination;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Global.Kills += 1;
  • }
  • }
  • rule("Shock-Tire Health")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Junkrat;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Array Contains(Global.Shocktire, Event Player) == True;
  • }
  • actions
  • {
  • If(Global.Legendary == True);
  • Set Max Health(Event Player, 200);
  • Wait(0.250, Ignore Condition);
  • Set Player Health(Event Player, 200);
  • Else If(Global.Hard == True);
  • Set Max Health(Event Player, 200);
  • Wait(0.250, Ignore Condition);
  • Set Player Health(Event Player, 200);
  • Else If(Global.Expert == True);
  • Set Max Health(Event Player, 200);
  • Wait(0.250, Ignore Condition);
  • Set Player Health(Event Player, 200);
  • }
  • }
  • rule("Symmetra Damage Dealt")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Symmetra;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • If(Is Firing Primary(Event Player) == True);
  • Set Damage Dealt(Event Player, 26);
  • Else If(Is Firing Secondary(Event Player) == True);
  • Set Damage Dealt(Event Player, 116);
  • End;
  • Wait(0.250, Ignore Condition);
  • Loop;
  • }
  • }
  • rule("Elite Bonus - Reaper")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Reaper;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Global.Reaperintro == True;
  • Is Using Ability 2(Event Player) == False;
  • }
  • actions
  • {
  • Event Player.CanReceiveEliteBonus = True;
  • Wait(6, Ignore Condition);
  • Event Player.CanReceiveEliteBonus = False;
  • }
  • }
  • rule("Elite Bonus - Roadhog")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Global.Monintro == True;
  • }
  • actions
  • {
  • Event Player.CanReceiveEliteBonus = True;
  • Wait(12, Ignore Condition);
  • Event Player.CanReceiveEliteBonus = False;
  • }
  • }
  • rule("Elite Bonus - Junkrat")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Junkrat;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Global.Junkintro == True;
  • }
  • actions
  • {
  • Event Player.CanReceiveEliteBonus = True;
  • Wait(9, Ignore Condition);
  • Event Player.CanReceiveEliteBonus = False;
  • }
  • }
  • rule("Elite Bonus - Symmetra")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Symmetra;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Global.Sumintro == True;
  • }
  • actions
  • {
  • Event Player.CanReceiveEliteBonus = True;
  • Wait(7, Ignore Condition);
  • Event Player.CanReceiveEliteBonus = False;
  • }
  • }
  • rule("Elite Bonus")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Victim.CanReceiveEliteBonus == True;
  • }
  • actions
  • {
  • If(Hero Of(Victim) == Hero(Reaper));
  • Global.Score += 100;
  • Big Message(All Players(Team 1), Custom String("Elite Bonus +100PTS"));
  • Else;
  • Global.Score += 250;
  • Big Message(All Players(Team 1), Custom String("Elite Bonus +250PTS"));
  • }
  • }
  • rule("Diff")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.VolatileZomnics == True;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Global.Normal = False;
  • Global.Legendary = False;
  • Global.Hard = False;
  • Global.Expert = True;
  • }
  • }
  • rule("Volatile Zomnics")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Zenyatta;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Global.VolatileZomnics == True;
  • Global.Ghost != Event Player;
  • 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;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Stop Throttle In Direction(Event Player);
  • Set Status(Event Player, Null, Stunned, 1.250);
  • Wait(1, Ignore Condition);
  • Abort If(Is Alive(Event Player) == False);
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Red), Event Player, 5);
  • Damage(Players Within Radius(Event Player, 5, Opposite Team Of(Team Of(Event Player)), Surfaces And Enemy Barriers), Event Player,
  • 40);
  • Wait(0.250, Ignore Condition);
  • Destroy Dummy Bot(Team Of(Event Player), Slot Of(Event Player));
  • }
  • }
  • rule("Diff")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.ThreeTheyWere == True;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Global.Normal = False;
  • Global.Legendary = False;
  • Global.Hard = False;
  • Global.Expert = True;
  • }
  • }
  • rule("Three They Were")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Number Of Players(Team 1) <= 3;
  • Global.ThreeTheyWere == True;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Set Damage Dealt(Event Player, 120);
  • }
  • }
  • rule("Three They Were")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Number Of Players(Team 1) > 3;
  • Global.ThreeTheyWere == True;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Set Damage Dealt(Event Player, 100);
  • }
  • }
  • rule("Kill Feed Modifier")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Health(Victim) < Max Health(Victim) / 2;
  • }
  • actions
  • {
  • If(Hero Of(Victim) == Hero(Zenyatta));
  • Disable Kill Feed(All Players(Team 1));
  • Else If(Hero Of(Victim) == Hero(Zarya));
  • Disable Kill Feed(All Players(Team 1));
  • Else;
  • Enable Kill Feed(All Players(Team 1));
  • }
  • }
  • rule("Diff")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.MysterySwap == True;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Global.Normal = False;
  • Global.Legendary = False;
  • Global.Hard = False;
  • Global.Expert = True;
  • }
  • }
  • rule("Mystery Swap")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.MysterySwap == True;
  • }
  • actions
  • {
  • Wait(60, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Random Value In Array(Allowed Heroes(Event Player)));
  • Wait(0.250, Ignore Condition);
  • Stop Forcing Player To Be Hero(Event Player);
  • Loop;
  • }
  • }
  • rule("Shocking Surprise")
  • {
  • event
  • {
  • Player Died;
  • Team 2;
  • Zarya;
  • }
  • conditions
  • {
  • Global.ShockingSurprise == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Junkrat), Team 2, -1, First Of(Sorted Array(Global.UndeadSpawnPoints, Distance Between(Event Player,
  • Current Array Element))), Vector(0, 0, 0));
  • Modify Global Variable(Shocktire, Append To Array, Last Created Entity);
  • }
  • }
  • rule("Shocking Surprise")
  • {
  • event
  • {
  • Player Died;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) != Hero(Zenyatta);
  • Hero Of(Event Player) != Hero(Zarya);
  • Global.ShockingSurprise == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Junkrat), Team 2, -1, First Of(Sorted Array(Global.UndeadSpawnPoints, Distance Between(Event Player,
  • Current Array Element))), Vector(0, 0, 0));
  • Modify Global Variable(Shocktire, Append To Array, Last Created Entity);
  • Wait(1, Ignore Condition);
  • Create Dummy Bot(Hero(Junkrat), Team 2, -1, First Of(Sorted Array(Global.UndeadSpawnPoints, Distance Between(Event Player,
  • Current Array Element))), Vector(0, 0, 0));
  • Modify Global Variable(Shocktire, Append To Array, Last Created Entity);
  • }
  • }
  • rule("Diff")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.ShockingSurprise == True;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Global.Normal = False;
  • Global.Legendary = False;
  • Global.Hard = False;
  • Global.Expert = True;
  • }
  • }
  • rule("Door Attacked")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.DoorHealth < Global.DamagedHP;
  • }
  • actions
  • {
  • Global.DoorHPColour = Color(Red);
  • Wait(0.250, Ignore Condition);
  • Global.DoorHPColour = Color(White);
  • Global.DamagedHP = Global.DoorHealth;
  • }
  • }
  • rule("Reaper Intro")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Reaper;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Global.Reaperintro == False;
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Disable Hero HUD(Event Player);
  • Set Slow Motion(35);
  • Set Status(All Players(Team 1), Null, Invincible, 2);
  • Start Camera(All Players(Team 1), Update Every Frame(Eye Position(Players On Hero(Hero(Reaper), Team 2)) + Facing Direction Of(
  • Event Player)), Update Every Frame(Eye Position(Players On Hero(Hero(Reaper), Team 2))), 0);
  • Big Message(All Players(All Teams), Custom String("The Reaper"));
  • Wait(2, Ignore Condition);
  • Global.Reaperintro = True;
  • Stop Camera(All Players(Team 1));
  • Set Slow Motion(100);
  • Enable Hero HUD(Event Player);
  • }
  • }
Join the Workshop.codes Discord