Create
Return to post

Comparing difference between and

View raw
  • settings
  • {
  • main
  • {
  • Description: "Junkenstein's Revenge PVE - made by Waitedboat4#2760 - PTR"
  • }
  • 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
  • Game Mode Start: Immediately
  • 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%
  • }
  • }
  • }
  • extensions
  • {
  • Spawn More Dummy Bots
  • }
  • }
  • 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
  • 69: IsIntroPlaying
  • 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
  • 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
  • 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
  • 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
  • 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;
  • Big Message(All Players(Team 1), Custom String("DEFEND THE CASTLE DOOR!"));
  • Global.HUDtext = Custom String("DEFEND THE DOOR");
  • }
  • }
  • rule("Initial Global")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global._classIndexes[1000] = 0;
  • Global._classIndexes[0] = -1;
  • Global._extendedGlobalCollection[1] = Index Of Array Value(Global._classIndexes, 0);
  • Global._classIndexes[Global._extendedGlobalCollection[1]] = -1;
  • Global._tempNodes = Empty Array;
  • Global._tempSegments = Empty Array;
  • Global._tempAttributes = Empty Array;
  • Modify Global Variable(_tempNodes, Append To Array, Vector(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(
  • 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)));
  • "Set current to the first node."
  • 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]));
  • 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 the distance between this node and the neighbor node is lower than the node's current parent,\r\nthen the current node is closer and should be set as the neighbor's parent.\r\nAlternatively, if the neighbor's distance is 0, that means it was not set so this"
  • If((
  • !Event Player.Dijkstra_Distances[Event Player.Dijkstra_Neighbor_Index] || 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)))));
  • "Set the neighbor's distance to be the distance between the current node and neighbor node."
  • Event Player.Dijkstra_Distances[Event Player.Dijkstra_Neighbor_Index] = Event Player.Dijkstra_Distance;
  • "Set the neighbor's parent ('parentArray[neighborIndex]') to be current. 1 is added to current because\r\n0 means no parent was set yet (the first node will have current equal 0). This value will be subtracted\r\nback by 1 when used."
  • Event Player.Dijkstra_Parent_Array[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);
  • Small Message(Event Player, Custom String("Gamemode Created By Waitedboat4#2760"));
  • }
  • }
  • 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)));
  • "Set current to the first node."
  • 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]));
  • 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 the distance between this node and the neighbor node is lower than the node's current parent,\r\nthen the current node is closer and should be set as the neighbor's parent.\r\nAlternatively, if the neighbor's distance is 0, that means it was not set so this"
  • If((
  • !Event Player.Dijkstra_Distances_3[Event Player.Dijkstra_Neighbor_Index_3] || 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)))));
  • "Set the neighbor's distance to be the distance between the current node and neighbor node."
  • Event Player.Dijkstra_Distances_3[Event Player.Dijkstra_Neighbor_Index_3] = Event Player.Dijkstra_Distance_3;
  • "Set the neighbor's parent ('parentArray[neighborIndex]') to be current. 1 is added to current because\r\n0 means no parent was set yet (the first node will have current equal 0). This value will be subtracted\r\nback by 1 when used."
  • Event Player.Dijkstra_Parent_Array_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, Eye Position(First Of(Sorted Array(Filtered Array(Filtered Array(
  • All Living Players(Opposite Team Of(Team Of(Event Player))), Current Array Element.Invis == False), Is In Line of Sight(
  • Event Player, Current Array Element, Barriers Do Not Block LOS)), Distance Between(Event Player, Current Array Element))))
  • + Down + Down) + 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, Eye Position(First Of(Sorted Array(Filtered Array(Filtered Array(
  • All Living Players(Opposite Team Of(Team Of(Event Player))), Current Array Element.Invis == False), Is In Line of Sight(
  • Event Player, Current Array Element, Barriers Do Not Block LOS)), Distance Between(Event Player, Current Array Element))))
  • + Down + Down) + 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, Eye Position(First Of(Sorted Array(Filtered Array(Filtered Array(
  • All Living Players(Opposite Team Of(Team Of(Event Player))), Current Array Element.Invis == False), Is In Line of Sight(
  • Event Player, Current Array Element, Barriers Do Not Block LOS)), Distance Between(Event Player, Current Array Element))))
  • + Down + Down), 200, To World, Direction and Turn Rate);
  • 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);
  • "Set current to the first node."
  • 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]));
  • 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 the distance between this node and the neighbor node is lower than the node's current parent,\r\nthen the current node is closer and should be set as the neighbor's parent.\r\nAlternatively, if the neighbor's distance is 0, that means it was not set so this"
  • If((
  • !Event Player.Dijkstra_Distances[Event Player.Dijkstra_Neighbor_Index] || 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)))));
  • "Set the neighbor's distance to be the distance between the current node and neighbor node."
  • Event Player.Dijkstra_Distances[Event Player.Dijkstra_Neighbor_Index] = Event Player.Dijkstra_Distance;
  • "Set the neighbor's parent ('parentArray[neighborIndex]') to be current. 1 is added to current because\r\n0 means no parent was set yet (the first node will have current equal 0). This value will be subtracted\r\nback by 1 when used."
  • Event Player.Dijkstra_Parent_Array[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;
  • 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)));
  • 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);
  • Start Facing(Event Player, Direction Towards(Event Player, Eye Position(First Of(Sorted Array(Filtered Array(Filtered Array(
  • All Living Players(Opposite Team Of(Team Of(Event Player))), Current Array Element.Invis == False), Is In Line of Sight(
  • Event Player, Current Array Element, Barriers Do Not Block LOS)), Distance Between(Event Player, Current Array Element))))
  • + Down + Down), 200, To World, Direction and Turn Rate);
  • Event Player.Finishedpath = True;
  • }
  • }
  • 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));
  • "Set current to the first node."
  • Event Player.Dijkstra_Current_0 = Index Of Array Value(Global.Nodes[Global.map], First Of(Sorted Array(Global.Nodes[Global.map],
  • Distance Between(Event Player._extendedPlayerCollection[2], Current Array Element))));
  • Event Player.Dijkstra_Distances_0[Event Player.Dijkstra_Current_0] = 0.000;
  • Event Player.Dijkstra_Unvisited_0 = Mapped Array(Global.Nodes[Global.map], Current Array Index);
  • While(Is True For Any(Event Player.Dijkstra_Unvisited_0, Event Player.Dijkstra_Distances_0[Current Array Element]));
  • Wait(0.016, Ignore Condition);
  • Event Player.Dijkstra_Connected_Segments_0 = Filtered Array(Global.Segments[Global.map], Array Contains(Append To Array(
  • Append To Array(Empty Array, X Component Of(Current Array Element)), Y Component Of(Current Array Element)),
  • Event Player.Dijkstra_Current_0));
  • Event Player._extendedPlayerCollection[3] = 0;
  • While(Event Player._extendedPlayerCollection[3] < Count Of(Event Player.Dijkstra_Connected_Segments_0));
  • Wait(0.016, Ignore Condition);
  • Event Player.Dijkstra_Neighbor_Index_0 = First Of(Filtered Array(Append To Array(Append To Array(Empty Array, X Component Of(
  • Event Player.Dijkstra_Connected_Segments_0[Event Player._extendedPlayerCollection[3]])), Y Component Of(
  • Event Player.Dijkstra_Connected_Segments_0[Event Player._extendedPlayerCollection[3]])),
  • Current Array Element != Event Player.Dijkstra_Current_0));
  • Event Player.Dijkstra_Distance_0 = Distance Between(Global.Nodes[Global.map][Event Player.Dijkstra_Neighbor_Index_0],
  • Global.Nodes[Global.map][Event Player.Dijkstra_Current_0])
  • + Event Player.Dijkstra_Distances_0[Event Player.Dijkstra_Current_0];
  • Event Player.Dijkstra_Neighbor_Attributes_0 = Filtered Array(Global.Attributes[Global.map], Y Component Of(Current Array Element)
  • == Event Player.Dijkstra_Current_0 && X Component Of(Current Array Element) == Event Player.Dijkstra_Neighbor_Index_0);
  • "If the distance between this node and the neighbor node is lower than the node's current parent,\r\nthen the current node is closer and should be set as the neighbor's parent.\r\nAlternatively, if the neighbor's distance is 0, that means it was not set so this"
  • If((
  • !Event Player.Dijkstra_Distances_0[Event Player.Dijkstra_Neighbor_Index_0] || Event Player.Dijkstra_Distance_0 < Event Player.Dijkstra_Distances_0[Event Player.Dijkstra_Neighbor_Index_0])
  • && (!Count Of(Event Player.Dijkstra_Neighbor_Attributes_0) || Is True For Any(Event Player.Dijkstra_Neighbor_Attributes_0,
  • Array Contains(Null, Z Component Of(Current Array Element)))));
  • "Set the neighbor's distance to be the distance between the current node and neighbor node."
  • Event Player.Dijkstra_Distances_0[Event Player.Dijkstra_Neighbor_Index_0] = Event Player.Dijkstra_Distance_0;
  • "Set the neighbor's parent ('parentArray[neighborIndex]') to be current. 1 is added to current because\r\n0 means no parent was set yet (the first node will have current equal 0). This value will be subtracted\r\nback by 1 when used."
  • Event Player.Dijkstra_Parent_Array_0[Event Player.Dijkstra_Neighbor_Index_0] = Event Player.Dijkstra_Current_0 + 1;
  • End;
  • Event Player._extendedPlayerCollection[3] += 1;
  • End;
  • Modify Player Variable(Event Player, Dijkstra_Unvisited_0, Remove From Array By Value, Event Player.Dijkstra_Current_0);
  • Skip If(Index Of Array Value(Global.Nodes[Global.map], First Of(Sorted Array(Global.Nodes[Global.map], Distance Between(
  • Position Of(Event Player), Current Array Element)))) == Event Player.Dijkstra_Current_0, 2);
  • Event Player.Dijkstra_Current_0 = First Of(Sorted Array(Filtered Array(Event Player.Dijkstra_Unvisited_0,
  • Event Player.Dijkstra_Distances_0[Current Array Element] != 0), Event Player.Dijkstra_Distances_0[Current Array Element]));
  • End;
  • Event Player.pathmapReference = Global.map;
  • Event Player.parentArray = Event Player.Dijkstra_Parent_Array_0;
  • Event Player.destination = Event Player._extendedPlayerCollection[2];
  • Event Player.pathfinderDoGetCurrent = True;
  • Event Player.Dijkstra_Current_0 = 0;
  • Event Player.Dijkstra_Distances_0 = 0;
  • Event Player.Dijkstra_Connected_Segments_0 = 0;
  • Event Player.Dijkstra_Neighbor_Index_0 = 0;
  • Event Player.Dijkstra_Distance_0 = 0;
  • Event Player.Dijkstra_Parent_Array_0 = 0;
  • 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);
  • "Set current to the first node."
  • 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]));
  • 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 the distance between this node and the neighbor node is lower than the node's current parent,\r\nthen the current node is closer and should be set as the neighbor's parent.\r\nAlternatively, if the neighbor's distance is 0, that means it was not set so this"
  • If((
  • !Event Player.Dijkstra_Distances_1[Event Player.Dijkstra_Neighbor_Index_1] || 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)))));
  • "Set the neighbor's distance to be the distance between the current node and neighbor node."
  • Event Player.Dijkstra_Distances_1[Event Player.Dijkstra_Neighbor_Index_1] = Event Player.Dijkstra_Distance_1;
  • "Set the neighbor's parent ('parentArray[neighborIndex]') to be current. 1 is added to current because\r\n0 means no parent was set yet (the first node will have current equal 0). This value will be subtracted\r\nback by 1 when used."
  • Event Player.Dijkstra_Parent_Array_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
  • {
  • Global.IsIntroPlaying = True;
  • 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);
  • Global.IsIntroPlaying = False;
  • }
  • }
  • 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);
  • Global.IsIntroPlaying = True;
  • 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);
  • Global.IsIntroPlaying = False;
  • }
  • }
  • 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
  • {
  • Global.IsIntroPlaying = True;
  • 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);
  • Global.IsIntroPlaying = False;
  • }
  • }
  • 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);
  • Global.IsIntroPlaying = True;
  • 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);
  • Global.IsIntroPlaying = False;
  • }
  • }
  • 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);
  • Global.IsIntroPlaying = True;
  • 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);
  • Global.IsIntroPlaying = False;
  • }
  • }
  • 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);
  • Global.IsIntroPlaying = True;
  • 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);
  • Global.IsIntroPlaying = False;
  • }
  • }
  • 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, 20, 0);
  • }
  • }
  • rule("Numberofzaryas")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.NumberofZombardiers = Workshop Setting Integer(Custom String("Settings"), Custom String("Max Number of Zombardiers"), 2, 0,
  • 20, 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)));
  • "Set current to the first node."
  • 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]));
  • 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 the distance between this node and the neighbor node is lower than the node's current parent,\r\nthen the current node is closer and should be set as the neighbor's parent.\r\nAlternatively, if the neighbor's distance is 0, that means it was not set so this"
  • If((
  • !Event Player.Dijkstra_Distances[Event Player.Dijkstra_Neighbor_Index] || 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)))));
  • "Set the neighbor's distance to be the distance between the current node and neighbor node."
  • Event Player.Dijkstra_Distances[Event Player.Dijkstra_Neighbor_Index] = Event Player.Dijkstra_Distance;
  • "Set the neighbor's parent ('parentArray[neighborIndex]') to be current. 1 is added to current because\r\n0 means no parent was set yet (the first node will have current equal 0). This value will be subtracted\r\nback by 1 when used."
  • Event Player.Dijkstra_Parent_Array[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, Eye Position(First Of(Sorted Array(Filtered Array(Filtered Array(
  • All Living Players(Opposite Team Of(Team Of(Event Player))), Current Array Element.Invis == False), Is In Line of Sight(
  • Event Player, Current Array Element, Barriers Do Not Block LOS)), Distance Between(Event Player, Current Array Element))))
  • + Down + Down), 200, To World, Direction and Turn Rate);
  • }
  • }
  • rule("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.EndGame = True;
  • Wait(2, Ignore Condition);
  • Big Message(All Players(All Teams), Custom String("FINAL BATTLE!"));
  • Wait(2, Ignore Condition);
  • 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));
  • Global.HUDtext = Custom String("DEFEAT THE BOSSES");
  • }
  • }
  • 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;
  • Global.HUDtext == Custom String("DEFEAT THE BOSSES");
  • }
  • 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
  • {
  • Wait(2, Ignore Condition);
  • Big Message(All Players(All Teams), Custom String("FINAL BATTLE!"));
  • Wait(2, Ignore Condition);
  • 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));
  • Global.HUDtext = Custom String("DEFEAT THE BOSSES");
  • }
  • }
  • 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;
  • Global.HUDtext == Custom String("DEFEAT THE BOSSES");
  • }
  • 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;
  • Global.IsIntroPlaying == False;
  • }
  • 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);
  • Abort If(Global.IsIntroPlaying == True);
  • 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 If(Global.IsIntroPlaying == False);
  • }
  • }
  • 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;
  • Array Contains(Global.Shocktire, Event Player) == False;
  • }
  • 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("Set Timer")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Match Time <= 0;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Global.sec = 0;
  • }
  • }
  • disabled rule("PTR ----")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Junkenstien's Monster Name")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Start Forcing Dummy Bot Name(Event Player, Custom String("Junkenstein's Monster"));
  • }
  • }
  • rule("Junkenstein Name")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Junkrat;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Start Forcing Dummy Bot Name(Event Player, Custom String("Dr Junkenstein"));
  • }
  • }
  • rule("The Reaper Name")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Reaper;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Start Forcing Dummy Bot Name(Event Player, Custom String("The Reaper"));
  • }
  • }
  • rule("The Summoner Name")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Symmetra;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Start Forcing Dummy Bot Name(Event Player, Custom String("The Summoner"));
  • }
  • }
  • rule("The Witch Name")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Mercy;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Start Forcing Dummy Bot Name(Event Player, Custom String("The Witch"));
  • }
  • }
  • rule("The Maestro Name")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Sigma;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Start Forcing Dummy Bot Name(Event Player, Custom String("The Maestro"));
  • }
  • }
  • rule("Zomnic Name")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Zenyatta;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Start Forcing Dummy Bot Name(Event Player, Custom String("Zomnic"));
  • }
  • }
  • rule("Zombardier Name")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Zarya;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Start Forcing Dummy Bot Name(Event Player, Custom String("Zombardier"));
  • }
  • }
Join the Workshop.codes Discord