Create
Return to post

Comparing difference between and

View raw
  • settings
  • {
  • main
  • {
  • Description: "EVOLVE - In this gamemode, your goal is to defeat enemies in order to climb to the top of the food chain. Spend points, gained by leveling up, on upgrades and new classes, and figure out the best way to stay ahead of your enemies. For more information, visit workshop.codes and search for ''EVOLVE''. -made by Mokby"
  • }
  • lobby
  • {
  • Match Voice Chat: Enabled
  • Max FFA Players: 9
  • Max Spectators: 12
  • }
  • modes
  • {
  • Deathmatch
  • {
  • enabled maps
  • {
  • Nepal Sanctum
  • Oasis Gardens
  • }
  • }
  • General
  • {
  • Allow Hero Switching: Off
  • Game Mode Start: Manual
  • Respawn As Random Hero: On
  • Score To Win: 50
  • Spawn Health Packs: Disabled
  • }
  • }
  • heroes
  • {
  • General
  • {
  • Ana
  • {
  • Ammunition Clip Size Scalar: 57%
  • Biotic Grenade Cooldown Time: 75%
  • }
  • Bastion
  • {
  • Ultimate Duration: 75%
  • }
  • D.Va
  • {
  • Spawn Without Mech: On
  • }
  • Genji
  • {
  • Infinite Ultimate Duration: On
  • Swift Strike Cooldown Time: 125%
  • }
  • Hanzo
  • {
  • Lunge: Off
  • }
  • Junkrat
  • {
  • Ammunition Clip Size Scalar: 60%
  • Concussion Mine Cooldown Time: 130%
  • Concussion Mine Knockback Scalar: 75%
  • }
  • McCree
  • {
  • Combat Roll Cooldown Time: 133%
  • }
  • Mei
  • {
  • Ammunition Clip Size Scalar: 50%
  • Primary Fire: Off
  • Weapon Freeze Rate Scalar: 0%
  • }
  • Moira
  • {
  • Biotic Orb Cooldown Time: 75%
  • Fade Cooldown Time: 67%
  • }
  • Orisa
  • {
  • Ammunition Clip Size Scalar: 67%
  • }
  • Pharah
  • {
  • Ammunition Clip Size Scalar: 50%
  • Hover Jets Maximum Time: 55%
  • Hover Jets Recharge Rate: 75%
  • Jump Jet Acceleration Scalar: 80%
  • }
  • Reaper
  • {
  • Ammunition Clip Size Scalar: 75%
  • }
  • Reinhardt
  • {
  • Charge Cooldown Time: 25%
  • Fire Strike Cooldown Time: 40%
  • }
  • Roadhog
  • {
  • Ammunition Clip Size Scalar: 80%
  • Secondary Fire: Off
  • }
  • Sombra
  • {
  • Ammunition Clip Size Scalar: 100%
  • Hack Cooldown Time: 125%
  • Projectile Gravity: 120%
  • Translocator Cooldown Time: 80%
  • }
  • Tracer
  • {
  • Ammunition Clip Size Scalar: 75%
  • Blink Cooldown Time: 125%
  • }
  • Zenyatta
  • {
  • Ammunition Clip Size Scalar: 50%
  • }
  • enabled heroes
  • {
  • D.Va
  • Hanzo
  • Roadhog
  • }
  • }
  • }
  • }
  • variables
  • {
  • global:
  • 0: MatchStatus
  • 1: HStoneTimer1
  • 2: HStoneStatus1
  • 3: HStoneTimer2
  • 4: HStoneStatus2
  • 12: Minute3
  • 13: Minute4
  • 14: Minute6
  • 17: CombinedLevels
  • 18: AllLevels
  • 19: MatchTime
  • player:
  • 0: ClassID
  • 4: Effects
  • 6: PlayerStats
  • 7: Huds
  • 8: PlayerUpgrades
  • 9: ShopSelect
  • 16: MiscIDs
  • 18: InClassShop
  • 20: ShopRandomizer
  • 21: Points
  • 24: Level
  • 25: EXP
  • 26: IsCrit
  • 27: CritDamage
  • 28: DRS
  • 29: Zpassive
  • 30: SRhacked
  • 31: SRbonusStat
  • 32: ShopPos
  • 34: TookDamage
  • 40: Slow
  • 42: GhostSpeed
  • 43: UsingSpell
  • 44: CritWait
  • 45: IsOnHit
  • 46: OnHitScaling
  • 48: NoGhost
  • 49: SRconfirm
  • 50: StatHuds
  • 51: ShopHuds
  • 52: InShop
  • 53: ShopSelectPos
  • 54: ShopTexts
  • 55: AssistID
  • 56: CountStats
  • }
  • subroutines
  • {
  • 2: ShopSub
  • 4: ClassShopEntry
  • 5: ClassShopExit
  • 7: MidMatchJoin
  • 8: Sub8
  • 9: Sub9
  • 10: HStone1Timer
  • 11: HStone2Timer
  • 12: Zsh1
  • 13: Zsh2
  • 14: Zsh3
  • 15: ORhalt1
  • 16: ORhalt2
  • 17: MCpassive
  • 21: BallBuff
  • 22: RNascend
  • }
  • rule("made by mokby - don't steal this or whatever")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • Create Effect(All Players(All Teams), Ring, Color(Sky Blue), First Of(Global.Z) - Vector(0, 1, 0), 1.500,
  • Visible To Position and Radius);
  • Create In-World Text(All Players(All Teams), String("{0} {1}", Hero Icon String(Hero(Hanzo)), Custom String("Hunter")), First Of(
  • Global.Z) + Vector(0, 0.250, 0), 1.250, Clip Against Surfaces, Visible To Position and String, Color(Sky Blue),
  • Default Visibility);
  • Create In-World Text(All Players(All Teams), Custom String("Hunt others down with high burst damage."), First Of(Global.Z)
  • + Vector(0, -0.500, 0), 1, Clip Against Surfaces, Visible To Position and String, Color(Sky Blue), Default Visibility);
  • Create Effect(All Players(All Teams), Ring, Color(Turquoise), Global.Z[1] - Vector(0, 1, 0), 1.500,
  • Visible To Position and Radius);
  • Create In-World Text(All Players(All Teams), String("{0} {1}", Hero Icon String(Hero(D.Va)), Custom String("Bunny")),
  • Global.Z[1] + Vector(0, 0.250, 0), 1.250, Clip Against Surfaces, Visible To Position and String, Color(Turquoise),
  • Default Visibility);
  • Create In-World Text(All Players(All Teams), Custom String(
  • "Quick and evasive, this class tracks down others and slowly guns them down."), Global.Z[1] + Vector(0, -0.500, 0), 1,
  • Clip Against Surfaces, Visible To Position and String, Color(Turquoise), Default Visibility);
  • Create Effect(All Players(All Teams), Ring, Color(Orange), Global.Z[2] - Vector(0, 1, 0), 1.500, Visible To Position and Radius);
  • Create In-World Text(All Players(All Teams), String("{0} {1}", Hero Icon String(Hero(Roadhog)), Custom String("Hog")),
  • Global.Z[2] + Vector(0, 0.250, 0), 1.250, Clip Against Surfaces, Visible To Position and String, Color(Orange),
  • Default Visibility);
  • Create In-World Text(All Players(All Teams), Custom String("Absorb damage to deal big bursts of damage yourself."),
  • Global.Z[2] + Vector(0, -0.500, 0), 1, Clip Against Surfaces, Visible To Position and String, Color(Orange),
  • Default Visibility);
  • Create In-World Text(All Players(All Teams), Custom String("PRESS INTERACT WHILE STANDING ON A RING TO SELECT YOUR HERO"),
  • Global.Z[3], 1.250, Clip Against Surfaces, Visible To Position and String, Color(Yellow), Default Visibility);
  • }
  • }
  • rule("Global init Village")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Is Game In Progress == True;
  • Current Map == Map(Nepal Village);
  • }
  • actions
  • {
  • Global.Z[0] = Vector(-149.424, -97.086, 96.738);
  • Global.Z[1] = Vector(-142.983, -97.082, 99.838);
  • Global.Z[2] = Vector(-150.681, -97.082, 103.870);
  • Global.Z[3] = Vector(-147.966, -95.083, 99.612);
  • Global.Z[4] = Vector(-140.906, -97.681, 112.599);
  • Global.Y[0] = Vector(-165.349, -97.026, -90.981);
  • Global.Y[1] = Vector(-142.991, -97.093, 84.047);
  • Global.Y[2] = Vector(-165.401, -97.080, 91.161);
  • Global.Y[3] = Vector(-142.787, -97.031, -83.849);
  • Global.Y[4] = Vector(-162.227, -97.778, -105.355);
  • Global.Y[5] = Vector(-139.548, -97.181, -107.396);
  • Global.Y[6] = Vector(-135.939, -97.181, -112.896);
  • Global.Y[7] = Vector(-143.040, -97.181, -116.988);
  • Global.Y[8] = Vector(-148.888, -96.053, -97.092);
  • Global.Y[9] = Vector(-148.888, -96.053, -97.092);
  • Global.X[0] = Vector(-139.013, -98.395, -108.746);
  • Global.X[1] = Vector(-141.651, -98.394, -111.790);
  • Global.X[2] = Vector(-145.477, -98.385, -111.637);
  • Global.X[3] = Vector(-146.571, -97.181, -111.040);
  • Global.X[4] = Vector(-143.088, -97.181, -109.114);
  • Global.X[5] = Vector(207.506, 7.844, -184.787);
  • Global.X[6] = Vector(204.658, 7.844, -182.153);
  • Global.X[7] = Vector(200.920, 7.844, -183.092);
  • Global.X[8] = Vector(198.798, 7.844, -185.214);
  • Global.W[0] = Vector(-195.125, -93.117, 0.100);
  • Global.W[1] = Vector(-172.636, -98.960, 73.425);
  • Global.W[2] = Vector(-171.893, -98.674, -73.545);
  • Global.W[3] = Vector(-195.165, -94.110, 39.022);
  • Global.W[4] = Vector(-195.620, -94.101, -38.688);
  • }
  • }
  • rule("Global init Ruins")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Is Game In Progress == True;
  • Current Map == Map(Ilios Ruins);
  • }
  • actions
  • {
  • Global.Z[0] = Vector(-93.779, 61.396, -160.476);
  • Global.Z[1] = Vector(-95.585, 61.552, -164.759);
  • Global.Z[2] = Vector(-95.838, 61.552, -155.262);
  • Global.Z[3] = Vector(-87.886, 62.685, -160.011);
  • Global.Z[4] = Vector(-107.847, 60.797, -159.952);
  • Global.Y[0] = Vector(130.756, 63.049, -151.328);
  • Global.Y[1] = Vector(135.977, 63.046, -170.600);
  • Global.Y[2] = Vector(-79.038, 63.468, -170.604);
  • Global.Y[3] = Vector(-73.468, 63.467, -151.636);
  • Global.Y[4] = Vector(139.143, 63.052, -143.710);
  • Global.Y[5] = Vector(140.764, 63.121, -176.569);
  • Global.Y[6] = Vector(165.875, 61.592, -159.908);
  • Global.Y[7] = Vector(163.526, 61.318, -157.487);
  • Global.Y[8] = Vector(152.700, 62.072, -159.450);
  • Global.Y[9] = Vector(-148.888, -96.053, -97.092);
  • Global.X[0] = Vector(163.557, 59.859, -157.009);
  • Global.X[1] = Vector(165.385, 59.994, -159.865);
  • Global.X[2] = Vector(163.310, 59.956, -163.186);
  • Global.W[0] = Vector(28.382, 58.107, -156.973);
  • Global.W[1] = Vector(115.261, 61.694, -152.360);
  • Global.W[2] = Vector(-59.151, 61.752, -150.983);
  • Global.W[3] = Vector(82.437, 59.686, -174.988);
  • Global.W[4] = Vector(-26.143, 59.686, -173.785);
  • Global.X[3] = Vector(159.274, 61.318, -162.932);
  • Global.X[4] = Vector(163.636, 61.318, -162.813);
  • Global.X[5] = Vector(168.100, 61.318, -162.828);
  • Global.X[6] = Vector(168.045, 61.318, -157.555);
  • Global.X[7] = Vector(200.920, 7.844, -183.092);
  • Global.X[8] = Vector(159.065, 61.318, -157.479);
  • }
  • }
  • rule("Global init Gardens")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Current Map == Map(Oasis Gardens);
  • }
  • actions
  • {
  • Global.Z[0] = Vector(84.464, 7.432, -304.354);
  • Global.Z[1] = Vector(80.996, 7.376, -303.032);
  • Global.Z[2] = Vector(85.708, 7.374, -307.744);
  • Global.Z[3] = Vector(88.310, 16.244, -300.450);
  • Global.Z[4] = Vector(76.146, 9.874, -312.416);
  • Global.Y[0] = Vector(184.845, 8.615, -204.192);
  • Global.Y[1] = Vector(177.552, 8.904, -183.508);
  • Global.Y[2] = Vector(97.347, 8.659, -291.579);
  • Global.Y[3] = Vector(77.351, 8.842, -283.549);
  • Global.Y[4] = Vector(186.667, 8.936, -202.185);
  • Global.Y[5] = Vector(178.862, 8.878, -184.680);
  • Global.Y[6] = Vector(193.868, 16.120, -194.574);
  • Global.Y[7] = Vector(198.016, 6.874, -190.946);
  • Global.Y[8] = Vector(206.641, 7.663, -182.500);
  • Global.Y[9] = Vector(190.096, 8.739, -186.697);
  • Global.Y[10] = Vector(203.420, 7.739, -195.748);
  • Global.X[0] = Vector(201.026, 6.943, -191.091);
  • Global.X[1] = Vector(198.487, 6.874, -190.497);
  • Global.X[2] = Vector(197.717, 6.874, -187.765);
  • Global.X[3] = Vector(207.114, 7.844, -192.636);
  • Global.X[4] = Vector(207.300, 7.844, -187.987);
  • Global.X[5] = Vector(207.506, 7.844, -184.787);
  • Global.X[6] = Vector(204.658, 7.844, -182.153);
  • Global.X[7] = Vector(200.920, 7.844, -183.092);
  • Global.X[8] = Vector(198.798, 7.844, -185.214);
  • Global.W[0] = Vector(141.335, 8.725, -247.561);
  • Global.W[1] = Vector(91.165, 3.849, -244.486);
  • Global.W[2] = Vector(138.066, 4.127, -197.404);
  • Global.W[3] = Vector(115.055, 8.848, -273.541);
  • Global.W[4] = Vector(167.240, 9.144, -221.432);
  • }
  • }
  • rule("Global init Sanctum")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Is Game In Progress == True;
  • Current Map == Map(Nepal Sanctum);
  • }
  • actions
  • {
  • Global.Z[0] = Vector(81.152, 130.305, 110.491);
  • Global.Z[1] = Vector(82.926, 130.305, 114.841);
  • Global.Z[2] = Vector(78.254, 130.305, 114.650);
  • Global.Z[3] = Vector(81.043, 132.667, 113.110);
  • Global.Z[4] = Vector(80.952, 131.296, 123.808);
  • Global.Y[0] = Vector(69.629, 132.817, 89.941);
  • Global.Y[1] = Vector(92.526, 132.240, 94.001);
  • Global.Y[2] = Vector(92.229, 132.241, -94.334);
  • Global.Y[3] = Vector(69.712, 132.241, -90.283);
  • Global.Y[4] = Vector(97.296, 130.315, -101.643);
  • Global.Y[5] = Vector(62.683, 130.294, -99.435);
  • Global.Y[6] = Vector(81.063, 131.606, -118.248);
  • Global.Y[7] = Vector(81.118, 129.805, -119.666);
  • Global.Y[8] = Vector(81.098, 131.893, -105.985);
  • Global.Y[9] = Vector(76.396, 130.850, -106.294);
  • Global.Y[10] = Vector(85.452, 130.850, -106.341);
  • Global.X[0] = Vector(83.118, 129.805, -116.606);
  • Global.X[1] = Vector(81.118, 129.805, -119.666);
  • Global.X[2] = Vector(78.813, 129.805, -116.613);
  • Global.X[3] = Vector(76.345, 129.320, -115.497);
  • Global.X[4] = Vector(76.124, 129.320, -124.435);
  • Global.X[5] = Vector(78.435, 129.170, -130.334);
  • Global.X[6] = Vector(83.396, 129.170, -130.284);
  • Global.X[7] = Vector(86.468, 129.320, -124.489);
  • Global.X[8] = Vector(86.248, 129.320, -115.445);
  • Global.W[0] = Vector(83.209, 129.266, -0.015);
  • Global.W[1] = Vector(80.942, 131.120, -71.789);
  • Global.W[2] = Vector(81.005, 131.115, 71.687);
  • Global.W[3] = Vector(80.420, 132.961, -23.911);
  • Global.W[4] = Vector(80.987, 132.961, 24.019);
  • }
  • }
  • rule("set scoreboard")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Set Player Score(Event Player, Event Player.Level);
  • Wait(0.750, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Waiting for players hud")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Waiting For Players == True;
  • }
  • actions
  • {
  • Create HUD Text(All Players(All Teams), Null, Null, Custom String("Waiting for players"), Top, 0, Null, Null, Color(Green),
  • Visible To and String, Default Visibility);
  • }
  • }
  • rule("Match walkthrough")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Destroy All HUD Text;
  • Wait(0.100, Ignore Condition);
  • Create HUD Text(All Players(All Teams), Null, Null, String("{0}: {1}", Custom String("Time left"), Global.MatchTime), Top, 0, Null,
  • Null, Color(Green), Visible To and String, Default Visibility);
  • Disable Built-In Game Mode Completion;
  • Pause Match Time;
  • Small Message(All Players(All Teams), Custom String("Press interact to select class"));
  • Start Forcing Player To Be Hero(All Players(All Teams), Hero(Symmetra));
  • Set Status(All Players(All Teams), Null, Invincible, 9999);
  • Global.MatchStatus = 0;
  • Teleport(All Players(All Teams), Global.Z[4]);
  • Global.MatchTime = 30;
  • Chase Global Variable At Rate(MatchTime, 0, 1, Destination and Rate);
  • Call Subroutine(Sub0);
  • Kill(All Players(All Teams), Null);
  • Global.MatchStatus = 1;
  • Global.MatchTime = 2100;
  • Chase Global Variable At Rate(MatchTime, 0, 1, Destination and Rate);
  • Clear Status(All Players(All Teams), Invincible);
  • Stop Forcing Player To Be Hero(All Players(All Teams));
  • Wait(0.100, Ignore Condition);
  • Start Forcing Player To Be Hero(Filtered Array(All Players(All Teams), Current Array Element.ClassID == 1), Hero(Hanzo));
  • Start Forcing Player To Be Hero(Filtered Array(All Players(All Teams), Current Array Element.ClassID == 2), Hero(D.Va));
  • Start Forcing Player To Be Hero(Filtered Array(All Players(All Teams), Current Array Element.ClassID == 3), Hero(Roadhog));
  • Set Player Score(All Players(All Teams), 0);
  • Chase Global Variable At Rate(Minute3, 180, 1, Destination and Rate);
  • Chase Global Variable At Rate(Minute4, 240, 1, Destination and Rate);
  • Chase Global Variable At Rate(Minute6, 360, 1, Destination and Rate);
  • Call Subroutine(Sub0);
  • Declare Player Victory(Filtered Array(All Players(All Teams), Current Array Element.Level > Remove From Array(All Players(
  • All Teams), Current Array Element).Level));
  • }
  • }
  • rule("Match time sub")
  • {
  • event
  • {
  • Subroutine;
  • Sub0;
  • }
  • actions
  • {
  • Wait(5, Ignore Condition);
  • Loop If(Global.MatchTime > 0);
  • }
  • }
  • rule("symmetra pregame init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Symmetra;
  • }
  • actions
  • {
  • Set Move Speed(Event Player, 150);
  • Set Gravity(Event Player, 75);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Set Primary Fire Enabled(Event Player, False);
  • Event Player.ClassID = 0;
  • }
  • }
  • rule("pick Hanzo")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Distance Between(Position Of(Event Player), First Of(Global.Z)) <= 1.500;
  • Event Player.ClassID != 1;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Hunter selected!"));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 50);
  • Event Player.ClassID = 1;
  • }
  • }
  • rule("pick Dva")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Distance Between(Position Of(Event Player), Global.Z[1]) <= 1.500;
  • Event Player.ClassID != 2;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Bunny selected!"));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 50);
  • Event Player.ClassID = 2;
  • }
  • }
  • rule("pick Roadhog")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Distance Between(Position Of(Event Player), Global.Z[2]) <= 1.500;
  • Event Player.ClassID != 3;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Hog selected!"));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 50);
  • Event Player.ClassID = 3;
  • }
  • }
  • rule("pick random class when no class picked")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 0;
  • Global.MatchTime == 0;
  • Event Player.ClassID == 0;
  • }
  • actions
  • {
  • Event Player.ClassID = Random Integer(1, 3);
  • }
  • }
  • rule("Set levels of all players")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Global.AllLevels[0] = Players In Slot(0, All Teams).Level;
  • Global.AllLevels[1] = Players In Slot(1, All Teams).Level;
  • Global.AllLevels[2] = Players In Slot(2, All Teams).Level;
  • Global.AllLevels[3] = Players In Slot(3, All Teams).Level;
  • Global.AllLevels[4] = Players In Slot(4, All Teams).Level;
  • Global.AllLevels[5] = Players In Slot(5, All Teams).Level;
  • Global.AllLevels[6] = Players In Slot(6, All Teams).Level;
  • Global.AllLevels[7] = Players In Slot(7, All Teams).Level;
  • Global.AllLevels[8] = Players In Slot(8, All Teams).Level;
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Set combined levels of all players")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Global.CombinedLevels = First Of(Global.AllLevels)
  • + Global.AllLevels[1] + Global.AllLevels[2] + Global.AllLevels[3] + Global.AllLevels[4] + Global.AllLevels[5] + Global.AllLevels[6] + Global.AllLevels[7] + Global.AllLevels[8];
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Player joined mid-match when game is in progress")
  • {
  • event
  • {
  • Player Joined Match;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • Teleport(Event Player, Global.Z[4]);
  • Small Message(Event Player, Custom String("Press interact to select class"));
  • Start Forcing Player To Be Hero(Event Player, Hero(Symmetra));
  • Set Status(Event Player, Null, Invincible, 9999);
  • Call Subroutine(MidMatchJoin);
  • Wait(0.100, Ignore Condition);
  • Kill(Event Player, Null);
  • Stop Forcing Player To Be Hero(Event Player);
  • Wait(0.100, Ignore Condition);
  • Clear Status(Event Player, Invincible);
  • Start Forcing Player To Be Hero(Filtered Array(Event Player, Current Array Element.ClassID == 1), Hero(Hanzo));
  • Start Forcing Player To Be Hero(Filtered Array(Event Player, Current Array Element.ClassID == 2), Hero(D.Va));
  • Start Forcing Player To Be Hero(Filtered Array(Event Player, Current Array Element.ClassID == 3), Hero(Roadhog));
  • Set Player Score(Event Player, 0);
  • Event Player.Level = Global.CombinedLevels / Count Of(Remove From Array(All Players(All Teams), Players On Hero(Hero(Symmetra),
  • All Teams)));
  • Wait(0.050, Ignore Condition);
  • Event Player.Level = Round To Integer(Event Player.Level, Down);
  • Wait(0.050, Ignore Condition);
  • Big Message(Event Player, Custom String("LEVEL UP!"));
  • Event Player.Points[0] = Event Player.Level;
  • Event Player.Points[1] = Event Player.Level;
  • Wait(0.016, Ignore Condition);
  • Event Player.X = 0;
  • Wait(0.016, Ignore Condition);
  • Event Player.EXP = 0;
  • Small Message(Event Player, Custom String("{0} {1} {2}", Custom String("You have -"), Event Player.Points, Custom String(
  • " - upgrade points")));
  • Set Player Score(Event Player, Score Of(Event Player) + Event Player.Level);
  • Skip If(Event Player.Points[1] / 7 < 1, 1);
  • Small Message(Event Player, Custom String("Class upgrade available"));
  • }
  • }
  • rule("Mid-match join sub")
  • {
  • event
  • {
  • Subroutine;
  • MidMatchJoin;
  • }
  • actions
  • {
  • Wait(0.100, Ignore Condition);
  • Loop If(Event Player.ClassID == 0);
  • }
  • }
  • rule("Player joined mid-match when game is'nt in progress")
  • {
  • event
  • {
  • Player Joined Match;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 0;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • Teleport(Event Player, Global.Z[4]);
  • Small Message(Event Player, Custom String("Press interact to select class"));
  • Start Forcing Player To Be Hero(Event Player, Hero(Symmetra));
  • Set Status(Event Player, Null, Invincible, 9999);
  • }
  • }
  • rule("Stop in game scoring")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Set Player Score(Event Player, Score Of(Event Player) - 1);
  • }
  • }
  • rule("Leveling - passive")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.X != 0;
  • Has Spawned(Event Player) == True;
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Chase Player Variable At Rate(Event Player, EXP, 10000, 0.500 + Event Player.Level * 0.500, Destination and Rate);
  • }
  • }
  • rule("Leveling - active damage dealt")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.X != 0;
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Event Player.EXP += Event Damage * 0.625;
  • }
  • }
  • rule("Leveling - active elimination")
  • {
  • event
  • {
  • Player Earned Elimination;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.X != 0;
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Event Player.EXP += 55;
  • If(Victim.Level - Event Player.Level > 3);
  • Event Player.EXP += 15 * (Victim.Level - Event Player.Level);
  • Small Message(Event Player, Custom String("{0} {1}", Custom String("shutdown!"), String("{0}: {1}", Custom String("bonus exp"),
  • 15 * (Victim.Level - Event Player.Level))));
  • }
  • }
  • rule("Calculate next level exp requirement")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.X == 0;
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Event Player.X = 30 * Event Player.Level + 100;
  • }
  • }
  • rule("Level up")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.EXP >= Event Player.X;
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Big Message(Event Player, Custom String("LEVEL UP!"));
  • Event Player.Points[0] += 1;
  • Event Player.Points[1] += 1;
  • Event Player.Level += 1;
  • Wait(0.016, Ignore Condition);
  • Event Player.X = 0;
  • Wait(0.016, Ignore Condition);
  • Event Player.EXP = 0;
  • Small Message(Event Player, Custom String("{0} {1} {2}", Custom String("You have -"), Event Player.Points, Custom String(
  • " - upgrade points")));
  • Set Player Score(Event Player, Score Of(Event Player) + 1);
  • Skip If(Event Player.Points[1] / 8 < 1, 1);
  • Small Message(Event Player, Custom String("Class upgrade available"));
  • }
  • }
  • rule("Crouch hud")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Create HUD Text(Event Player, Null, Null, Custom String("Hold crouch to see stats"), Right, 1, Null, Null, Color(Orange),
  • Visible To and String, Default Visibility);
  • Event Player.StatHuds[0] = Last Text ID;
  • }
  • }
  • rule("Hero stats (visible if crouched)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Crouch)) == True;
  • Event Player.TookDamage == 0;
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Create HUD Text(Event Player, Null, Null, String("{0}, {1}", String("{0}: {1}", Custom String("Max health"),
  • Event Player.PlayerStats[0]), String("{0}: {1}", Custom String("Damage dealt"), Event Player.PlayerStats[1])), Right, 1, Color(
  • White), Color(White), Color(Orange), Visible To and String, Default Visibility);
  • Event Player.StatHuds[1] = Last Text ID;
  • Create HUD Text(Event Player, Null, Null, String("{0}, {1}", String("{0}: {1}", Custom String("Movement speed"),
  • Event Player.PlayerStats[2]), String("{0}: {1}", Custom String("Projectile speed"), Event Player.PlayerStats[3])), Right, 2,
  • Color(White), Color(White), Color(Orange), Visible To and String, Default Visibility);
  • Event Player.StatHuds[2] = Last Text ID;
  • Create HUD Text(Event Player, Null, Null, String("{0}, {1}", String("{0}: {1}", Custom String("Healing dealt"),
  • Event Player.PlayerStats[5]), String("{0}: {1}", Custom String("Damage resistance"), Event Player.PlayerStats[6])), Right, 3,
  • Color(White), Color(White), Color(Orange), Visible To and String, Default Visibility);
  • Event Player.StatHuds[3] = Last Text ID;
  • Create HUD Text(Event Player, Null, Null, String("{0}, {1}", String("{0}: {1}", Custom String("Lifesteal"),
  • Event Player.PlayerStats[7]), String("{0}: {1}", Custom String("Resistance shred"), Event Player.PlayerStats[8])), Right, 4,
  • Color(White), Color(White), Color(Orange), Visible To and String, Default Visibility);
  • Event Player.StatHuds[4] = Last Text ID;
  • Create HUD Text(Event Player, Null, Null, String("{0}, {1}", String("{0}: {1}", Custom String("Health regen"),
  • Event Player.PlayerStats[9]), String("{0}: {1}", Custom String("Crit chance"), Event Player.PlayerStats[10])), Right, 5, Color(
  • White), Color(White), Color(Orange), Visible To and String, Default Visibility);
  • Event Player.StatHuds[5] = Last Text ID;
  • Create HUD Text(Event Player, Null, Null, String("{0}, {1}", String("{0}: {1}", Custom String("Tenacity"),
  • Event Player.PlayerStats[11]), String("{0}: {1}", Custom String("On-hit damage"),
  • Event Player.PlayerStats[12] * Event Player.OnHitScaling)), Right, 6, Color(White), Color(White), Color(Orange),
  • Visible To and String, Default Visibility);
  • Event Player.StatHuds[6] = Last Text ID;
  • Wait Until(Is Button Held(Event Player, Button(Crouch)) == False || Event Player.TookDamage > 0, 9999);
  • Destroy HUD Text(Event Player.StatHuds[1]);
  • Destroy HUD Text(Event Player.StatHuds[2]);
  • Destroy HUD Text(Event Player.StatHuds[3]);
  • Destroy HUD Text(Event Player.StatHuds[4]);
  • Destroy HUD Text(Event Player.StatHuds[5]);
  • Destroy HUD Text(Event Player.StatHuds[6]);
  • }
  • }
  • rule("Shop hud")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Create HUD Text(Event Player, Null, Null, Custom String("Hold interact (F) and crouch to upgrade"), Right, 0, Null, Null, Color(
  • Purple), Visible To and String, Default Visibility);
  • Event Player.ShopHuds[0] = Last Text ID;
  • }
  • }
  • rule("Shop huds (visible if crouched+interact held)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • (Event Player.ShopSelect[2] == True || (Is Button Held(Event Player, Button(Crouch)) && Is Button Held(Event Player, Button(
  • Interact)))) == True;
  • }
  • actions
  • {
  • Event Player.ShopTexts[0] = Custom String("+5% max health for 1 point");
  • Event Player.ShopTexts[1] = Custom String("+5% damage dealt for 1 point");
  • Event Player.ShopTexts[2] = Custom String("+5% movement speed for 1 point");
  • Event Player.ShopTexts[3] = Custom String("+5% projectile speed for 1 point");
  • Event Player.ShopTexts[4] = Custom String("+5% healing dealt for 1 point");
  • Event Player.ShopTexts[5] = Custom String("+5% damage resistance for 1 point");
  • Event Player.ShopTexts[6] = Custom String("+5% lifesteal for 2 points");
  • Event Player.ShopTexts[7] = Custom String("+2.5% health regen for 2 points");
  • Event Player.ShopTexts[8] = Custom String("+5% tenacity for 2 points");
  • Event Player.ShopTexts[9] = Custom String("+10% crit chance for 2 points");
  • Event Player.ShopTexts[10] = Custom String("+5 on-hit damage (differs per hero) for 2 points");
  • Event Player.ShopTexts[11] = Custom String("+5% resistance shred for 2 points");
  • Create Icon(Event Player, Event Player.ShopSelect[0], Circle, Visible To and Position, Custom Color(230, 0, 250, 255), False);
  • Event Player.ShopHuds[10] = Last Created Entity;
  • Event Player.InShop = True;
  • Set Status(Event Player, Null, Rooted, 9999);
  • Set Primary Fire Enabled(Event Player, False);
  • Disallow Button(Event Player, Button(Secondary Fire));
  • Disallow Button(Event Player, Button(Ability 1));
  • Disallow Button(Event Player, Button(Ability 2));
  • Skip If(Event Player.ShopRandomizer != 0, 4);
  • Event Player.ShopRandomizer[0] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[1] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[2] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[3] = Random Integer(0, 2);
  • Wait(0.050, Ignore Condition);
  • Event Player.ShopPos[0] = Eye Position(Event Player) + Facing Direction Of(Event Player) * 4.500 + Up * 2.200;
  • Event Player.ShopPos[1] = Eye Position(Event Player) + Facing Direction Of(Event Player) * 4.500 + Up * 1.250 + Cross Product(
  • Vector(0, 1, 0), Facing Direction Of(Event Player)) * 1.300;
  • Event Player.ShopPos[2] = Eye Position(Event Player) + Facing Direction Of(Event Player) * 4.500 + Up * 1.150 + Cross Product(
  • Vector(0, 1, 0), Facing Direction Of(Event Player)) * 1.300;
  • Event Player.ShopPos[3] = Eye Position(Event Player) + Facing Direction Of(Event Player) * 4.500 + Up * 0.250 + Cross Product(
  • Vector(0, 1, 0), Facing Direction Of(Event Player)) * 1.300;
  • Event Player.ShopPos[4] = Eye Position(Event Player) + Facing Direction Of(Event Player) * 4.500 + Up * 0.150 + Cross Product(
  • Vector(0, 1, 0), Facing Direction Of(Event Player)) * 1.300;
  • Event Player.ShopPos[5] = Eye Position(Event Player) + Facing Direction Of(Event Player) * 4.500 + Up * 1.250 + Cross Product(
  • Vector(0, 1, 0), Facing Direction Of(Event Player)) * -1.300;
  • Event Player.ShopPos[6] = Eye Position(Event Player) + Facing Direction Of(Event Player) * 4.500 + Up * 1.150 + Cross Product(
  • Vector(0, 1, 0), Facing Direction Of(Event Player)) * -1.300;
  • Event Player.ShopPos[7] = Eye Position(Event Player) + Facing Direction Of(Event Player) * 4.500 + Up * 0.250 + Cross Product(
  • Vector(0, 1, 0), Facing Direction Of(Event Player)) * -1.300;
  • Event Player.ShopPos[8] = Eye Position(Event Player) + Facing Direction Of(Event Player) * 4.500 + Up * 0.150 + Cross Product(
  • Vector(0, 1, 0), Facing Direction Of(Event Player)) * -1.300;
  • Wait(0.050, Ignore Condition);
  • Create In-World Text(Event Player, String("{0}: {1}", Custom String("AIM TO SELECT, FIRE TO BUY. POINTS"), Event Player.Points[0]),
  • Event Player.ShopPos[0], 1.500, Do Not Clip, String, Custom Color(130, 0, 250, 255), Default Visibility);
  • Event Player.ShopHuds[1] = Last Text ID;
  • Create Icon(Event Player, Event Player.ShopPos[1], Ring Thick, None, Custom Color(230, 0, 250, 255), False);
  • Event Player.ShopHuds[2] = Last Created Entity;
  • Create In-World Text(Event Player, Event Player.ShopTexts[Event Player.ShopRandomizer[0]], Event Player.ShopPos[2], 1.250,
  • Do Not Clip, String, Custom Color(130, 0, 250, 255), Default Visibility);
  • Event Player.ShopHuds[3] = Last Text ID;
  • Create Icon(Event Player, Event Player.ShopPos[3], Ring Thick, None, Custom Color(230, 0, 250, 255), False);
  • Event Player.ShopHuds[4] = Last Created Entity;
  • Create In-World Text(Event Player, Event Player.ShopTexts[Event Player.ShopRandomizer[1] + 3], Event Player.ShopPos[4], 1.250,
  • Do Not Clip, String, Custom Color(130, 0, 250, 255), Default Visibility);
  • Event Player.ShopHuds[5] = Last Text ID;
  • Create Icon(Event Player, Event Player.ShopPos[5], Ring Thick, None, Custom Color(230, 0, 250, 255), False);
  • Event Player.ShopHuds[6] = Last Created Entity;
  • Create In-World Text(Event Player, Event Player.ShopTexts[Event Player.ShopRandomizer[2] + 6], Event Player.ShopPos[6], 1.250,
  • Do Not Clip, String, Custom Color(130, 0, 250, 255), Default Visibility);
  • Event Player.ShopHuds[7] = Last Text ID;
  • Create Icon(Event Player, Event Player.ShopPos[7], Ring Thick, None, Custom Color(230, 0, 250, 255), False);
  • Event Player.ShopHuds[8] = Last Created Entity;
  • Create In-World Text(Event Player, Event Player.ShopTexts[Event Player.ShopRandomizer[3] + 9], Event Player.ShopPos[8], 1.250,
  • Do Not Clip, String, Custom Color(130, 0, 250, 255), Default Visibility);
  • Event Player.ShopHuds[9] = Last Text ID;
  • Call Subroutine(ShopSub);
  • Destroy In-World Text(Event Player.ShopHuds[1]);
  • Destroy Icon(Event Player.ShopHuds[2]);
  • Destroy In-World Text(Event Player.ShopHuds[3]);
  • Destroy Icon(Event Player.ShopHuds[4]);
  • Destroy In-World Text(Event Player.ShopHuds[5]);
  • Destroy Icon(Event Player.ShopHuds[6]);
  • Destroy In-World Text(Event Player.ShopHuds[7]);
  • Destroy Icon(Event Player.ShopHuds[8]);
  • Destroy In-World Text(Event Player.ShopHuds[9]);
  • Destroy Icon(Event Player.ShopHuds[10]);
  • Wait(0.016, Ignore Condition);
  • Clear Status(Event Player, Rooted);
  • Skip If(Hero Of(Event Player) == Hero(Mei), 1);
  • Set Primary Fire Enabled(Event Player, True);
  • Allow Button(Event Player, Button(Secondary Fire));
  • Allow Button(Event Player, Button(Ability 1));
  • Allow Button(Event Player, Button(Ability 2));
  • Event Player.InShop = False;
  • Event Player.ShopTexts = 0;
  • }
  • }
  • rule("Shop select upgrades")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Event Player.InShop == True;
  • }
  • actions
  • {
  • Event Player.ShopSelectPos[0] = Event Player.ShopPos[1];
  • Event Player.ShopSelectPos[1] = Event Player.ShopPos[3];
  • Event Player.ShopSelectPos[2] = Event Player.ShopPos[5];
  • Event Player.ShopSelectPos[3] = Event Player.ShopPos[7];
  • Wait(0.100, Ignore Condition);
  • Event Player.ShopSelect[0] = First Of(Sorted Array(Event Player.ShopSelectPos, Distance Between(Current Array Element,
  • Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(Event Player) * 4.500, Null,
  • Event Player, True))));
  • Loop If Condition Is True;
  • }
  • }
  • rule("Shop sub")
  • {
  • event
  • {
  • Subroutine;
  • ShopSub;
  • }
  • actions
  • {
  • Event Player.UsingSpell = True;
  • Wait(0.250, Ignore Condition);
  • Loop If(Is Button Held(Event Player, Button(Interact)) && Is Button Held(Event Player, Button(Crouch)));
  • Wait(0.250, Ignore Condition);
  • Event Player.UsingSpell = False;
  • }
  • }
  • rule("Damage taken status")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Event Player.TookDamage = Event Damage;
  • Wait(0.100, Restart When True);
  • Event Player.TookDamage = 0;
  • }
  • }
  • rule("Shop buy Max health")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.ShopSelect[1] == False;
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • Event Player.ShopSelect[0] == Event Player.ShopSelectPos[0];
  • First Of(Event Player.ShopRandomizer) == 0;
  • First Of(Event Player.Points) >= 1;
  • Event Player.InShop == True;
  • }
  • actions
  • {
  • Event Player.ShopSelect[1] = True;
  • Event Player.PlayerStats[0] += 5;
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Wait(0.050, Ignore Condition);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Small Message(Event Player, Custom String("Max health upgraded!"));
  • Play Effect(All Players(All Teams), Good Explosion, Custom Color(230, 0, 250, 255), Event Player, 1);
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 125);
  • Event Player.ShopRandomizer[0] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[1] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[2] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[3] = Random Integer(0, 2);
  • Event Player.Points[0] -= 1;
  • Event Player.PlayerUpgrades[0] += 5;
  • Wait(0.250, Ignore Condition);
  • Event Player.ShopSelect[1] = False;
  • }
  • }
  • rule("Shop buy Damage dealt")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.ShopSelect[1] == False;
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • Event Player.ShopSelect[0] == Event Player.ShopSelectPos[0];
  • First Of(Event Player.ShopRandomizer) == 1;
  • First Of(Event Player.Points) >= 1;
  • Event Player.InShop == True;
  • }
  • actions
  • {
  • Event Player.ShopSelect[1] = True;
  • Event Player.PlayerStats[1] += 5;
  • Wait(0.050, Ignore Condition);
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Small Message(Event Player, Custom String("Damage dealt upgraded!"));
  • Play Effect(All Players(All Teams), Good Explosion, Custom Color(230, 0, 250, 255), Event Player, 1);
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 125);
  • Event Player.ShopRandomizer[0] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[1] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[2] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[3] = Random Integer(0, 2);
  • Event Player.Points[0] -= 1;
  • Event Player.PlayerUpgrades[1] += 5;
  • Wait(0.250, Ignore Condition);
  • Event Player.ShopSelect[1] = False;
  • }
  • }
  • rule("Shop buy Movement speed")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.ShopSelect[1] == False;
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • Event Player.ShopSelect[0] == Event Player.ShopSelectPos[0];
  • First Of(Event Player.ShopRandomizer) == 2;
  • First Of(Event Player.Points) >= 1;
  • Event Player.InShop == True;
  • }
  • actions
  • {
  • Event Player.ShopSelect[1] = True;
  • Event Player.PlayerStats[2] += 5;
  • Wait(0.050, Ignore Condition);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Small Message(Event Player, Custom String("Movement speed upgraded!"));
  • Play Effect(All Players(All Teams), Good Explosion, Custom Color(230, 0, 250, 255), Event Player, 1);
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 125);
  • Event Player.ShopRandomizer[0] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[1] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[2] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[3] = Random Integer(0, 2);
  • Event Player.Points[0] -= 1;
  • Event Player.PlayerUpgrades[2] += 5;
  • Wait(0.250, Ignore Condition);
  • Event Player.ShopSelect[1] = False;
  • }
  • }
  • rule("Shop buy Projectile speed")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.ShopSelect[1] == False;
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • Event Player.ShopSelect[0] == Event Player.ShopSelectPos[1];
  • Event Player.ShopRandomizer[1] == 0;
  • First Of(Event Player.Points) >= 1;
  • Event Player.InShop == True;
  • }
  • actions
  • {
  • Event Player.ShopSelect[1] = True;
  • Event Player.PlayerStats[3] += 7.500;
  • Wait(0.050, Ignore Condition);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Small Message(Event Player, Custom String("Projectile speed upgraded!"));
  • Play Effect(All Players(All Teams), Good Explosion, Custom Color(230, 0, 250, 255), Event Player, 1);
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 125);
  • Event Player.ShopRandomizer[0] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[1] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[2] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[3] = Random Integer(0, 2);
  • Event Player.Points[0] -= 1;
  • Event Player.PlayerUpgrades[3] += 7.500;
  • Wait(0.250, Ignore Condition);
  • Event Player.ShopSelect[1] = False;
  • }
  • }
  • rule("Shop buy Healing dealt")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.ShopSelect[1] == False;
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • Event Player.ShopSelect[0] == Event Player.ShopSelectPos[1];
  • Event Player.ShopRandomizer[1] == 1;
  • First Of(Event Player.Points) >= 1;
  • Event Player.InShop == True;
  • }
  • actions
  • {
  • Event Player.ShopSelect[1] = True;
  • Event Player.PlayerStats[5] += 5;
  • Wait(0.050, Ignore Condition);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Small Message(Event Player, Custom String("Healing dealt upgraded!"));
  • Play Effect(All Players(All Teams), Good Explosion, Custom Color(230, 0, 250, 255), Event Player, 1);
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 125);
  • Event Player.ShopRandomizer[0] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[1] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[2] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[3] = Random Integer(0, 2);
  • Event Player.Points[0] -= 1;
  • Event Player.PlayerUpgrades[5] += 5;
  • Wait(0.250, Ignore Condition);
  • Event Player.ShopSelect[1] = False;
  • }
  • }
  • rule("Shop buy Damage resistance")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.ShopSelect[1] == False;
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • Event Player.ShopSelect[0] == Event Player.ShopSelectPos[1];
  • Event Player.ShopRandomizer[1] == 2;
  • First Of(Event Player.Points) >= 1;
  • Event Player.InShop == True;
  • }
  • actions
  • {
  • Event Player.ShopSelect[1] = True;
  • Skip If(Event Player.PlayerStats[6] < 80, 1);
  • Small Message(Event Player, Custom String("Max damage resistance reached!"));
  • Skip If(Event Player.PlayerStats[6] >= 80, 12);
  • Event Player.PlayerStats[6] += 5;
  • Wait(0.050, Ignore Condition);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Small Message(Event Player, Custom String("Damage resistance upgraded!"));
  • Play Effect(All Players(All Teams), Good Explosion, Custom Color(230, 0, 250, 255), Event Player, 1);
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 125);
  • Event Player.ShopRandomizer[0] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[1] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[2] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[3] = Random Integer(0, 2);
  • Event Player.Points[0] -= 1;
  • Event Player.PlayerUpgrades[6] += 5;
  • Wait(0.250, Ignore Condition);
  • Event Player.ShopSelect[1] = False;
  • }
  • }
  • rule("Shop buy Life steal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.ShopSelect[1] == False;
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • Event Player.ShopSelect[0] == Event Player.ShopSelectPos[2];
  • Event Player.ShopRandomizer[2] == 0;
  • First Of(Event Player.Points) >= 2;
  • Event Player.InShop == True;
  • }
  • actions
  • {
  • Event Player.ShopSelect[1] = True;
  • Event Player.PlayerStats[7] += 5;
  • Wait(0.050, Ignore Condition);
  • Small Message(Event Player, Custom String("Life steal upgraded!"));
  • Play Effect(All Players(All Teams), Good Explosion, Custom Color(230, 0, 250, 255), Event Player, 1);
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 125);
  • Event Player.ShopRandomizer[0] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[1] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[2] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[3] = Random Integer(0, 2);
  • Event Player.Points[0] -= 2;
  • Event Player.PlayerUpgrades[7] += 5;
  • Wait(0.250, Ignore Condition);
  • Event Player.ShopSelect[1] = False;
  • }
  • }
  • rule("Shop buy resistance shred")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.ShopSelect[1] == False;
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • Event Player.ShopSelect[0] == Event Player.ShopSelectPos[3];
  • Event Player.ShopRandomizer[3] == 2;
  • First Of(Event Player.Points) >= 2;
  • Event Player.InShop == True;
  • }
  • actions
  • {
  • Event Player.ShopSelect[1] = True;
  • Event Player.PlayerStats[8] += 5;
  • Wait(0.050, Ignore Condition);
  • Small Message(Event Player, Custom String("Resistance shred upgraded!"));
  • Play Effect(All Players(All Teams), Good Explosion, Custom Color(230, 0, 250, 255), Event Player, 1);
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 125);
  • Event Player.ShopRandomizer[0] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[1] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[2] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[3] = Random Integer(0, 2);
  • Event Player.Points[0] -= 2;
  • Event Player.PlayerUpgrades[8] += 5;
  • Wait(0.250, Ignore Condition);
  • Event Player.ShopSelect[1] = False;
  • }
  • }
  • rule("Shop buy Health regeneration")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.ShopSelect[1] == False;
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • Event Player.ShopSelect[0] == Event Player.ShopSelectPos[2];
  • Event Player.ShopRandomizer[2] == 1;
  • First Of(Event Player.Points) >= 2;
  • Event Player.InShop == True;
  • }
  • actions
  • {
  • Event Player.ShopSelect[1] = True;
  • Event Player.PlayerStats[9] += 2.500;
  • Stop Heal Over Time(Event Player.MiscIDs[4]);
  • Wait(0.050, Ignore Condition);
  • Small Message(Event Player, Custom String("Health regeneration upgraded!"));
  • Play Effect(All Players(All Teams), Good Explosion, Custom Color(230, 0, 250, 255), Event Player, 1);
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 125);
  • Event Player.ShopRandomizer[0] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[1] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[2] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[3] = Random Integer(0, 2);
  • Event Player.Points[0] -= 2;
  • Event Player.PlayerUpgrades[9] += 2.500;
  • Start Heal Over Time(Event Player, Event Player, 9999, Event Player.PlayerStats[9] * (1 + Event Player.PlayerStats[5] * 0.005));
  • Event Player.MiscIDs[4] = Last Heal Over Time ID;
  • Wait(0.250, Ignore Condition);
  • Event Player.ShopSelect[1] = False;
  • }
  • }
  • rule("Shop buy Critical hit chance")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.ShopSelect[1] == False;
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • Event Player.ShopSelect[0] == Event Player.ShopSelectPos[3];
  • Event Player.ShopRandomizer[3] == 0;
  • First Of(Event Player.Points) >= 2;
  • Event Player.InShop == True;
  • }
  • actions
  • {
  • Event Player.ShopSelect[1] = True;
  • Skip If(Event Player.PlayerStats[10] < 100, 1);
  • Small Message(Event Player, Custom String("Max critical hit chance reached!"));
  • Skip If(Event Player.PlayerStats[10] >= 100, 11);
  • Event Player.PlayerStats[10] += 10;
  • Wait(0.050, Ignore Condition);
  • Small Message(Event Player, Custom String("Critical hit chance upgraded!"));
  • Play Effect(All Players(All Teams), Good Explosion, Custom Color(230, 0, 250, 255), Event Player, 1);
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 125);
  • Event Player.ShopRandomizer[0] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[1] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[2] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[3] = Random Integer(0, 2);
  • Event Player.Points[0] -= 2;
  • Event Player.PlayerUpgrades[10] += 10;
  • Wait(0.250, Ignore Condition);
  • Event Player.ShopSelect[1] = False;
  • }
  • }
  • rule("Shop buy Tenacity")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.ShopSelect[1] == False;
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • Event Player.ShopSelect[0] == Event Player.ShopSelectPos[2];
  • Event Player.ShopRandomizer[2] == 2;
  • First Of(Event Player.Points) >= 2;
  • Event Player.InShop == True;
  • }
  • actions
  • {
  • Start Scaling Player(Event Player, 1 + Event Player.PlayerStats[11] / 100, True);
  • Event Player.ShopSelect[1] = True;
  • Skip If(Event Player.PlayerStats[11] < 50, 1);
  • Small Message(Event Player, Custom String("Max Tenacity Reached!"));
  • Skip If(Event Player.PlayerStats[11] >= 50, 14);
  • Event Player.PlayerStats[11] += 5;
  • Event Player.PlayerStats[0] += 2.500;
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, Event Player.PlayerStats[0]);
  • Small Message(Event Player, Custom String("Tenacity upgraded!"));
  • Play Effect(All Players(All Teams), Good Explosion, Custom Color(230, 0, 250, 255), Event Player, 1);
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 125);
  • Event Player.ShopRandomizer[0] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[1] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[2] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[3] = Random Integer(0, 2);
  • Event Player.Points[0] -= 2;
  • Event Player.PlayerUpgrades[11] += 5;
  • Event Player.PlayerUpgrades[0] += 2.500;
  • Wait(0.250, Ignore Condition);
  • Event Player.ShopSelect[1] = False;
  • }
  • }
  • rule("Shop buy On-hit damage")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.ShopSelect[1] == False;
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • Event Player.ShopSelect[0] == Event Player.ShopSelectPos[3];
  • Event Player.ShopRandomizer[3] == 1;
  • First Of(Event Player.Points) >= 2;
  • Event Player.InShop == True;
  • }
  • actions
  • {
  • Event Player.ShopSelect[1] = True;
  • Skip If(Event Player.PlayerStats[12] < 100, 1);
  • Small Message(Event Player, Custom String("Max On-hit reached!"));
  • Skip If(Event Player.PlayerStats[12] >= 100, 11);
  • Event Player.PlayerStats[12] += 5;
  • Wait(0.050, Ignore Condition);
  • Small Message(Event Player, Custom String("On-hit upgraded!"));
  • Play Effect(All Players(All Teams), Good Explosion, Custom Color(230, 0, 250, 255), Event Player, 1);
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 125);
  • Event Player.ShopRandomizer[0] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[1] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[2] = Random Integer(0, 2);
  • Event Player.ShopRandomizer[3] = Random Integer(0, 2);
  • Event Player.Points[0] -= 2;
  • Event Player.PlayerUpgrades[12] += 5;
  • Wait(0.250, Ignore Condition);
  • Event Player.ShopSelect[1] = False;
  • }
  • }
  • rule("Life steal upgrade start")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.PlayerStats[7] > 0;
  • Victim != Event Player;
  • Is True For Any(Players On Hero(Hero(Orisa), All Teams), Array Contains(Current Array Element.F, Event Player) == True) == False;
  • }
  • actions
  • {
  • Heal(Event Player, Event Player, Event Damage * Event Player.PlayerStats[7] * 0.010 * (1 + Event Player.PlayerStats[5] * 0.005));
  • Event Player.CountStats[6] += Event Damage * Event Player.PlayerStats[7] * 0.010 * (1 + Event Player.PlayerStats[5] * 0.005);
  • }
  • }
  • rule("Damage resistance shred upgrade start")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.PlayerStats[8] > 0;
  • Victim != Event Player;
  • Is True For Any(Players On Hero(Hero(Orisa), All Teams), Array Contains(Current Array Element.F, Event Player) == True) == False;
  • }
  • actions
  • {
  • Skip If(Victim.DRS >= Victim.PlayerStats[6], 2);
  • Play Effect(All Players(All Teams), Good Explosion, Color(Orange), Victim, 0.100);
  • Victim.DRS += Attacker.PlayerStats[8] * 0.100 + Event Damage * 0.100;
  • Wait(3, Restart When True);
  • Victim.DRS = 0;
  • }
  • }
  • rule("Damage resist shred effect")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.DRS > 0;
  • }
  • actions
  • {
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6] + Event Player.DRS);
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • }
  • }
  • rule("Tenacity upgrade start")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.PlayerStats[11] > 0;
  • Is True For Any(Players On Hero(Hero(Orisa), All Teams), Array Contains(Current Array Element.F, Event Player) == True) == False;
  • }
  • actions
  • {
  • Heal(Event Player, Event Player, Event Damage * Event Player.PlayerStats[11] * 0.010 * (1 + Event Player.PlayerStats[11] * 0.005));
  • Event Player.CountStats[5] += Event Damage * Event Player.PlayerStats[11] * 0.010 * (1 + Event Player.PlayerStats[11] * 0.005);
  • }
  • }
  • rule("Critical hit chance upgrade start")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.PlayerStats[10] > 0;
  • Victim != Event Player;
  • Event Player.IsCrit == 0;
  • Is True For Any(Players On Hero(Hero(Orisa), All Teams), Array Contains(Current Array Element.F, Event Player) == True) == False;
  • (Event Ability == Button(Ability 1) || Event Ability == Button(Ability 2) || Event Player == Button(Secondary Fire)
  • || Event Ability == Button(Primary Fire) || Event Ability == Button(Primary Fire) || Event Ability == Button(Melee)
  • || Event Ability == Button(Crouch)) == True;
  • }
  • actions
  • {
  • Skip If(Random Integer(0, 100) > Event Player.PlayerStats[10], 8);
  • Event Player.IsCrit = 1;
  • Wait(0.025, Ignore Condition);
  • Event Player.IsCrit = 2;
  • Wait(0.016, Ignore Condition);
  • Damage(Victim, Event Player, Event Player.CritDamage);
  • Event Player.CountStats[4] += Event Player.CritDamage - Event Player.CritDamage * ((Victim.PlayerStats[6] - Victim.DRS) * 0.01);
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Red), Victim, 0.500);
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Color(White), Victim, 150);
  • Wait(Event Player.CritWait, Ignore Condition);
  • Event Player.IsCrit = 0;
  • Event Player.CritDamage = 0;
  • }
  • }
  • rule("Crit count double damage")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.IsCrit == 1;
  • }
  • actions
  • {
  • Event Player.CritDamage += Event Damage;
  • }
  • }
  • rule("On-hit damage upgrade start")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.PlayerStats[12] > 0;
  • Victim != Event Player;
  • Is True For Any(Players On Hero(Hero(Orisa), All Teams), Array Contains(Current Array Element.F, Event Player) == True) == False;
  • Event Player.IsOnHit == False;
  • (Event Ability == Button(Ability 1) || Event Ability == Button(Ability 2) || Event Player == Button(Secondary Fire)
  • || Event Ability == Button(Primary Fire) || Event Ability == Button(Primary Fire) || Event Ability == Button(Melee)
  • || Event Ability == Button(Crouch)) == True;
  • }
  • actions
  • {
  • Damage(Victim, Event Player, Event Player.PlayerStats[12] * Event Player.OnHitScaling);
  • Event Player.CountStats[3] += Event Player.PlayerStats[12] * Event Player.OnHitScaling - Event Player.PlayerStats[12] * Event Player.OnHitScaling * ((Victim.PlayerStats[6] - Victim.DRS) * 0.01);
  • Event Player.IsOnHit = True;
  • Wait(0.016, Ignore Condition);
  • Event Player.IsOnHit = False;
  • }
  • }
  • rule("Count stats: count damage dealt")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Event Player.CountStats[0] += Event Damage;
  • }
  • }
  • rule("Count stats: count damage healed")
  • {
  • event
  • {
  • Player Dealt Healing;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Event Player.CountStats[1] += Event Healing;
  • }
  • }
  • rule("Count stats: count health regen")
  • {
  • event
  • {
  • Player Dealt Healing;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Event Player.PlayerStats[9] > 0;
  • }
  • actions
  • {
  • Event Player.CountStats[8] = True;
  • Wait(0.100, Abort When False);
  • Event Player.CountStats[8] = False;
  • }
  • }
  • rule("Count stats: count health regen - 2")
  • {
  • event
  • {
  • Player Dealt Healing;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Event Player.PlayerStats[9] > 0;
  • Event Player.CountStats[8] == True;
  • Event Player.InClassShop == False;
  • }
  • actions
  • {
  • Event Player.CountStats[7] += Event Player.PlayerStats[9] * (1 + Event Player.PlayerStats[5] * 0.005) * 0.100;
  • Wait(0.100, Abort When False);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Count stats: count damage resisted")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Event Player.PlayerStats[6] - Event Player.DRS > 0;
  • }
  • actions
  • {
  • Event Player.CountStats[2] += Event Damage / ((100 - (Event Player.PlayerStats[6] - Event Player.DRS)) * 0.010) - Event Damage;
  • }
  • }
  • rule("Hero shop init")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Create Effect(All Players(All Teams), Cloud, Color(Orange), First Of(Global.Y), 5, Visible To Position and Radius);
  • Create In-World Text(All Players(All Teams), Custom String("ENTER CLASS SHOP"), First Of(Global.Y) + Vector(0, 0.500, 0), 1.250,
  • Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility);
  • Create Effect(All Players(All Teams), Cloud, Color(Orange), Global.Y[1], 5, Visible To Position and Radius);
  • Create In-World Text(All Players(All Teams), Custom String("ENTER CLASS SHOP"), Global.Y[1] + Vector(0, 0.500, 0), 1.250,
  • Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility);
  • Create Effect(All Players(All Teams), Cloud, Color(Orange), Global.Y[2], 5, Visible To Position and Radius);
  • Create In-World Text(All Players(All Teams), Custom String("ENTER CLASS SHOP"), Global.Y[2] + Vector(0, 1, 0), 1.250,
  • Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility);
  • Create Effect(All Players(All Teams), Cloud, Color(Orange), Global.Y[3], 5, Visible To Position and Radius);
  • Create In-World Text(All Players(All Teams), Custom String("ENTER CLASS SHOP"), Global.Y[3] + Vector(0, 0.500, 0), 1.250,
  • Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility);
  • Create Effect(All Players(All Teams), Cloud, Color(Orange), Global.Y[4], 5, Visible To Position and Radius);
  • Create In-World Text(All Players(All Teams), Custom String("EXIT"), Global.Y[4] + Vector(0, 0.500, 0), 1.250,
  • Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility);
  • Create Effect(All Players(All Teams), Cloud, Color(Orange), Global.Y[5], 5, Visible To Position and Radius);
  • Create In-World Text(All Players(All Teams), Custom String("EXIT"), Global.Y[5] + Vector(0, 0.500, 0), 1.250,
  • Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility);
  • Create In-World Text(All Players(All Teams), Custom String("PRESS INTERACT ON A RING TO SELECT A HERO"), Global.Y[6], 1.250,
  • Clip Against Surfaces, Visible To Position and String, Color(Yellow), Default Visibility);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 < 1), Custom String(
  • "Get a new class here every seventh level (level 8, 16 and 24)!"), Global.Y[7], 1.250, Clip Against Surfaces,
  • Visible To Position and String, Color(Yellow), Default Visibility);
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 < 1), Ring, Color(Yellow),
  • Global.Y[7] + Vector(0, -0.100, 0), 1, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Good Aura, Color(Yellow), Global.Y[9], 1, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Good Aura, Color(Yellow), Global.Y[10], 1, Visible To Position and Radius);
  • }
  • }
  • rule("Hero shop entry sub")
  • {
  • event
  • {
  • Subroutine;
  • ClassShopEntry;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Entering class shop..."));
  • Wait(2, Abort When False);
  • Teleport(Event Player, Global.Y[8]);
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 125);
  • Small Message(Event Player, Custom String("Class shop entered!"));
  • Set Status(Event Player, Null, Invincible, 9999);
  • Disallow Button(Event Player, Button(Primary Fire));
  • Disallow Button(Event Player, Button(Ability 1));
  • Disallow Button(Event Player, Button(Ability 2));
  • Disallow Button(Event Player, Button(Secondary Fire));
  • Small Message(Event Player, Custom String("Press interact to select your new class"));
  • Event Player.InClassShop = True;
  • }
  • }
  • rule("Hero shop create stat huds")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.InClassShop == True;
  • }
  • actions
  • {
  • Create In-World Text(Event Player, String("{0}: {1}", String("{0} {1}", Icon String(Skull), Custom String("damage dealt")),
  • Event Player.CountStats[0]), Global.Y[9] + Vector(0, 0.150, 0), 1.1, Clip Against Surfaces, Visible To Position and String,
  • Color(Red), Default Visibility);
  • Event Player.StatHuds[7] = Last Text ID;
  • Create In-World Text(Event Player, String("{0}: {1}", String("{0} {1}", Icon String(Plus), Custom String("healing dealt")),
  • Event Player.CountStats[1]), Global.Y[9] - Vector(0, 0.100, 0), 1.1, Clip Against Surfaces, Visible To Position and String,
  • Color(Yellow), Default Visibility);
  • Event Player.StatHuds[8] = Last Text ID;
  • Create In-World Text(Event Player, String("{0}: {1}", String("{0} {1}", Icon String(Ring Thick), Custom String("damage resisted")),
  • Event Player.CountStats[2]), Global.Y[9] - Vector(0, 0.350, 0), 1.1, Clip Against Surfaces, Visible To Position and String,
  • Color(Blue), Default Visibility);
  • Event Player.StatHuds[9] = Last Text ID;
  • Skip If(Event Player.PlayerStats[10] == 0, 2);
  • Create In-World Text(Event Player, String("{0}: {1}", String("{0} {1}", Ability Icon String(Hero(McCree), Button(Ultimate)), Custom String("Crit Damage")),
  • Event Player.CountStats[4]), Global.Y[10] + Vector(0, 0.400, 0), 1.1, Clip Against Surfaces, Visible To Position and String,
  • Color(Red), Default Visibility);
  • Event Player.StatHuds[10] = Last Text ID;
  • Skip If(Event Player.PlayerStats[12] == 0, 2);
  • Create In-World Text(Event Player, String("{0}: {1}", String("{0} {1}", Ability Icon String(Hero(Baptiste), Button(Ultimate)), Custom String("On-Hit Damage")),
  • Event Player.CountStats[3]), Global.Y[10] + Vector(0, 0.150, 0), 1.1, Clip Against Surfaces, Visible To Position and String,
  • Color(Orange), Default Visibility);
  • Event Player.StatHuds[11] = Last Text ID;
  • Skip If(Event Player.PlayerStats[11] == 0, 2);
  • Create In-World Text(Event Player, String("{0}: {1}", String("{0} {1}", Ability Icon String(Hero(Wrecking Ball), Button(Ability 2)), Custom String("Tenacity Healing")),
  • Event Player.CountStats[5]), Global.Y[10] - Vector(0, 0.100, 0), 1.1, Clip Against Surfaces, Visible To Position and String,
  • Color(Green), Default Visibility);
  • Event Player.StatHuds[12] = Last Text ID;
  • Skip If(Event Player.PlayerStats[7] == 0, 2);
  • Create In-World Text(Event Player, String("{0}: {1}", String("{0} {1}", Ability Icon String(Hero(Moira), Button(Secondary Fire)), Custom String("Lifesteal Healing")),
  • Event Player.CountStats[6]), Global.Y[10] - Vector(0, 0.600, 0), 1.1, Clip Against Surfaces, Visible To Position and String,
  • Color(Purple), Default Visibility);
  • Event Player.StatHuds[13] = Last Text ID;
  • Skip If(Event Player.PlayerStats[9] == 0, 2);
  • Create In-World Text(Event Player, String("{0}: {1}", String("{0} {1}", Ability Icon String(Hero(Soldier: 76), Button(Ability 2)), Custom String("Health regen Healing")),
  • Event Player.CountStats[7]), Global.Y[10] - Vector(0, 0.350, 0), 1.1, Clip Against Surfaces, Visible To Position and String,
  • Color(Blue), Default Visibility);
  • Event Player.StatHuds[14] = Last Text ID;
  • Wait Until(Event Player.InClassShop == False, 9999);
  • Destroy HUD Text(Event Player.StatHuds[7]);
  • Destroy HUD Text(Event Player.StatHuds[8]);
  • Destroy HUD Text(Event Player.StatHuds[9]);
  • Destroy HUD Text(Event Player.StatHuds[10]);
  • Destroy HUD Text(Event Player.StatHuds[11]);
  • Destroy HUD Text(Event Player.StatHuds[12]);
  • Destroy HUD Text(Event Player.StatHuds[13]);
  • Destroy HUD Text(Event Player.StatHuds[14]);
  • }
  • }
  • rule("Hero shop entry #1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Position Of(Event Player), First Of(Global.Y)) <= 3;
  • Global.MatchStatus == 1;
  • Hero Of(Event Player) != Hero(Symmetra);
  • Is Alive(Event Player) == True;
  • Event Player.TookDamage == 0;
  • }
  • actions
  • {
  • Call Subroutine(ClassShopEntry);
  • }
  • }
  • rule("Hero shop entry #2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Hero Of(Event Player) != Hero(Symmetra);
  • Is Alive(Event Player) == True;
  • Distance Between(Position Of(Event Player), Global.Y[1]) <= 3;
  • Event Player.TookDamage == 0;
  • }
  • actions
  • {
  • Call Subroutine(ClassShopEntry);
  • }
  • }
  • rule("Hero shop entry #3")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Hero Of(Event Player) != Hero(Symmetra);
  • Is Alive(Event Player) == True;
  • Distance Between(Position Of(Event Player), Global.Y[2]) <= 3;
  • Event Player.TookDamage == 0;
  • }
  • actions
  • {
  • Call Subroutine(ClassShopEntry);
  • }
  • }
  • rule("Hero shop entry #4")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Hero Of(Event Player) != Hero(Symmetra);
  • Is Alive(Event Player) == True;
  • Distance Between(Position Of(Event Player), Global.Y[3]) <= 3;
  • Event Player.TookDamage == 0;
  • }
  • actions
  • {
  • Call Subroutine(ClassShopEntry);
  • }
  • }
  • rule("Hero shop exit #1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Position Of(Event Player), Global.Y[4]) <= 3;
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Call Subroutine(ClassShopExit);
  • }
  • }
  • rule("Hero shop exit #2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Position Of(Event Player), Global.Y[5]) <= 3;
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Call Subroutine(ClassShopExit);
  • }
  • }
  • rule("Hero shop exit sub")
  • {
  • event
  • {
  • Subroutine;
  • ClassShopExit;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Hero shop left"));
  • Wait(0.100, Ignore Condition);
  • Clear Status(Event Player, Invincible);
  • Kill(Event Player, Null);
  • Wait(0.050, Ignore Condition);
  • Allow Button(Event Player, Button(Primary Fire));
  • Allow Button(Event Player, Button(Ability 1));
  • Allow Button(Event Player, Button(Ability 2));
  • Allow Button(Event Player, Button(Secondary Fire));
  • Event Player.InClassShop = False;
  • Respawn(Event Player);
  • }
  • }
  • rule("Hero shop create texts at X[0]")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 1 || Current Array Element.ClassID == 3)), Ring, Custom Color(225, 5, 30, 225), First Of(
  • Global.X) - Vector(0, 1, 0), 1.500, Visible To Position and Radius);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 1 || Current Array Element.ClassID == 3)), String("{0} {1}", Hero Icon String(Hero(Reaper)),
  • Custom String("Phantom")), First Of(Global.X) + Vector(0, 0.250, 0), 1.250, Clip Against Surfaces,
  • Visible To Position and String, Custom Color(225, 5, 30, 225), Default Visibility);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 1 || Current Array Element.ClassID == 3)), Custom String(
  • "Haunt other players with close range burst and sustain."), First Of(Global.X) + Vector(0, -0.500, 0), 1,
  • Clip Against Surfaces, Visible To Position and String, Custom Color(225, 5, 30, 225), Default Visibility);
  • Create Effect(Filtered Array(All Players(All Teams),
  • Current Array Element.Points[1] / 8 >= 1 && Current Array Element.ClassID == 2), Ring, Color(Yellow), First Of(Global.X)
  • - Vector(0, 1, 0), 1.500, Visible To Position and Radius);
  • Create In-World Text(Filtered Array(All Players(All Teams),
  • Current Array Element.Points[1] / 8 >= 1 && Current Array Element.ClassID == 2), String("{0} {1}", Hero Icon String(Hero(
  • Tracer)), Custom String("Flash")), First Of(Global.X) + Vector(0, 0.250, 0), 1.250, Clip Against Surfaces,
  • Visible To Position and String, Color(Yellow), Default Visibility);
  • Create In-World Text(Filtered Array(All Players(All Teams),
  • Current Array Element.Points[1] / 8 >= 1 && Current Array Element.ClassID == 2), Custom String(
  • "Quick and nimble, spray others down or disapear in the blink of an eye."), First Of(Global.X) + Vector(0, -0.500, 0), 1,
  • Clip Against Surfaces, Visible To Position and String, Color(Yellow), Default Visibility);
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 12 || Current Array Element.ClassID == 13 || Current Array Element.ClassID == 14 || Current Array Element.ClassID == 15)),
  • Ring, Color(Sky Blue), First Of(Global.X) - Vector(0, 1, 0), 1.500, Visible To Position and Radius);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 12 || Current Array Element.ClassID == 13 || Current Array Element.ClassID == 14 || Current Array Element.ClassID == 15)),
  • String("{0} {1}", Hero Icon String(Hero(Bastion)), Custom String("Automaton")), First Of(Global.X) + Vector(0, 0.250, 0),
  • 1.250, Clip Against Surfaces, Visible To Position and String, Color(Sky Blue), Default Visibility);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 12 || Current Array Element.ClassID == 13 || Current Array Element.ClassID == 14 || Current Array Element.ClassID == 15)),
  • Custom String("Obliterate enemies with the powers of ancient technology."), First Of(Global.X) + Vector(0, -0.500, 0), 1,
  • Clip Against Surfaces, Visible To Position and String, Color(Sky Blue), Default Visibility);
  • }
  • }
  • rule("Hero shop create texts at X[1]")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 1 || Current Array Element.ClassID == 2)), Ring, Custom Color(200, 70, 255, 255),
  • Global.X[1] - Vector(0, 1, 0), 1.500, Visible To Position and Radius);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 1 || Current Array Element.ClassID == 2)), String("{0} {1}", Hero Icon String(Hero(Sombra)),
  • Custom String("Thief")), Global.X[1] + Vector(0, 0.250, 0), 1.250, Clip Against Surfaces, Visible To Position and String,
  • Custom Color(200, 70, 255, 255), Default Visibility);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 1 || Current Array Element.ClassID == 2)), Custom String(
  • "Take advantage of your opponent's strengths."), Global.X[1] + Vector(0, -0.500, 0), 1, Clip Against Surfaces,
  • Visible To Position and String, Custom Color(200, 70, 255, 255), Default Visibility);
  • Create Effect(Filtered Array(All Players(All Teams),
  • Current Array Element.Points[1] / 8 >= 1 && Current Array Element.ClassID == 3), Ring, Custom Color(160, 230, 5, 255),
  • Global.X[1] - Vector(0, 1, 0), 1.500, Visible To Position and Radius);
  • Create In-World Text(Filtered Array(All Players(All Teams),
  • Current Array Element.Points[1] / 8 >= 1 && Current Array Element.ClassID == 3), String("{0} {1}", Hero Icon String(Hero(
  • Orisa)), Custom String("Golem")), Global.X[1] + Vector(0, 0.250, 0), 1.250, Clip Against Surfaces,
  • Visible To Position and String, Custom Color(160, 230, 5, 255), Default Visibility);
  • Create In-World Text(Filtered Array(All Players(All Teams),
  • Current Array Element.Points[1] / 8 >= 1 && Current Array Element.ClassID == 3), Custom String(
  • "Nullify your oponent's attacks while whitltling them down"), Global.X[1] + Vector(0, -0.500, 0), 1, Clip Against Surfaces,
  • Visible To Position and String, Color(Red), Default Visibility);
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 12 || Current Array Element.ClassID == 13 || Current Array Element.ClassID == 10 || Current Array Element.ClassID == 11)),
  • Ring, Color(Red), Global.X[1] - Vector(0, 1, 0), 1.500, Visible To Position and Radius);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 12 || Current Array Element.ClassID == 13 || Current Array Element.ClassID == 10 || Current Array Element.ClassID == 11)),
  • String("{0} {1}", Hero Icon String(Hero(Reinhardt)), Custom String("Marauder")), Global.X[1] + Vector(0, 0.250, 0), 1.250,
  • Clip Against Surfaces, Visible To Position and String, Color(Red), Default Visibility);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 12 || Current Array Element.ClassID == 13 || Current Array Element.ClassID == 10 || Current Array Element.ClassID == 11)),
  • Custom String("Enhance your strength by makig blood sacrifices to the old gods"), Global.X[1] + Vector(0, -0.500, 0), 1,
  • Clip Against Surfaces, Visible To Position and String, Color(Red), Default Visibility);
  • }
  • }
  • rule("Hero shop create texts at X[2]")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 3 || Current Array Element.ClassID == 2)), Ring, Color(White), Global.X[2] - Vector(0, 1, 0),
  • 1.500, Visible To Position and Radius);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 3 || Current Array Element.ClassID == 2)), String("{0} {1}", Hero Icon String(Hero(Winston)),
  • Custom String("Scientist")), Global.X[2] + Vector(0, 0.250, 0), 1.250, Clip Against Surfaces, Visible To Position and String,
  • Color(White), Default Visibility);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 3 || Current Array Element.ClassID == 2)), Custom String(
  • "Blow away enemies with the power of science."), Global.X[2] + Vector(0, -0.500, 0), 1, Clip Against Surfaces,
  • Visible To Position and String, Color(White), Default Visibility);
  • Create Effect(Filtered Array(All Players(All Teams),
  • Current Array Element.Points[1] / 8 >= 1 && Current Array Element.ClassID == 1), Ring, Custom Color(235, 70, 0, 255),
  • Global.X[2] - Vector(0, 1, 0), 1.500, Visible To Position and Radius);
  • Create In-World Text(Filtered Array(All Players(All Teams),
  • Current Array Element.Points[1] / 8 >= 1 && Current Array Element.ClassID == 1), String("{0} {1}", Hero Icon String(Hero(
  • McCree)), Custom String("Ranger")), Global.X[2] + Vector(0, 0.250, 0), 1.250, Clip Against Surfaces,
  • Visible To Position and String, Custom Color(235, 70, 0, 255), Default Visibility);
  • Create In-World Text(Filtered Array(All Players(All Teams),
  • Current Array Element.Points[1] / 8 >= 1 && Current Array Element.ClassID == 1), Custom String(
  • "Stun enemies while delivering powerfull attacks."), Global.X[2] + Vector(0, -0.500, 0), 1, Clip Against Surfaces,
  • Visible To Position and String, Custom Color(235, 70, 0, 255), Default Visibility);
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 10 || Current Array Element.ClassID == 11 || Current Array Element.ClassID == 14 || Current Array Element.ClassID == 15)),
  • Ring, Color(Lime Green), Global.X[2] - Vector(0, 1, 0), 1.500, Visible To Position and Radius);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 10 || Current Array Element.ClassID == 11 || Current Array Element.ClassID == 14 || Current Array Element.ClassID == 15)),
  • String("{0} {1}", Hero Icon String(Hero(Genji)), Custom String("Assasin")), Global.X[2] + Vector(0, 0.250, 0), 1.250,
  • Clip Against Surfaces, Visible To Position and String, Color(Lime Green), Default Visibility);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 10 || Current Array Element.ClassID == 11 || Current Array Element.ClassID == 14 || Current Array Element.ClassID == 15)),
  • Custom String("Strike your enemies down from behind with powerfull ninjitsu techniques."), Global.X[2] + Vector(0, -0.500, 0),
  • 1, Clip Against Surfaces, Visible To Position and String, Color(Lime Green), Default Visibility);
  • }
  • }
  • rule("Hero shop create texts at other places")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 4 || Current Array Element.ClassID == 7 || Current Array Element.ClassID == 6)), Ring, Color(
  • Blue), Global.X[3] - Vector(0, 1, 0), 1.500, Visible To Position and Radius);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 4 || Current Array Element.ClassID == 7 || Current Array Element.ClassID == 6)), String(
  • "{0} {1}", Hero Icon String(Hero(Pharah)), Custom String("Eagle")), Global.X[3] + Vector(0, 0.250, 0), 1.250,
  • Clip Against Surfaces, Visible To Position and String, Color(Blue), Default Visibility);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 4 || Current Array Element.ClassID == 7 || Current Array Element.ClassID == 6)),
  • Custom String("Use the power of flight to locate and eliminate enemies with ease."), Global.X[3] + Vector(0, -0.500, 0), 1,
  • Clip Against Surfaces, Visible To Position and String, Color(Blue), Default Visibility);
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 4 || Current Array Element.ClassID == 5 || Current Array Element.ClassID == 8)), Ring,
  • Custom Color(125, 0, 200, 255), Global.X[4] - Vector(0, 1, 0), 1.500, Visible To Position and Radius);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 4 || Current Array Element.ClassID == 5 || Current Array Element.ClassID == 8)), String(
  • "{0} {1}", Hero Icon String(Hero(Moira)), Custom String("Alchemist")), Global.X[4] + Vector(0, 0.250, 0), 1.250,
  • Clip Against Surfaces, Visible To Position and String, Custom Color(125, 0, 200, 255), Default Visibility);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 4 || Current Array Element.ClassID == 5 || Current Array Element.ClassID == 8)),
  • Custom String("Use powerfull abilities to blast away enemies, but beware: everything has a prize."), Global.X[4] + Vector(0,
  • -0.500, 0), 1, Clip Against Surfaces, Visible To Position and String, Custom Color(125, 0, 200, 255), Default Visibility);
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 5 || Current Array Element.ClassID == 9 || Current Array Element.ClassID == 8)), Ring, Color(
  • Aqua), Global.X[5] - Vector(0, 1, 0), 1.500, Visible To Position and Radius);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 9 || Current Array Element.ClassID == 5 || Current Array Element.ClassID == 8)), String(
  • "{0} {1}", Hero Icon String(Hero(Mei)), Custom String("Cryomancer")), Global.X[5] + Vector(0, 0.250, 0), 1.250,
  • Clip Against Surfaces, Visible To Position and String, Color(Aqua), Default Visibility);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 9 || Current Array Element.ClassID == 5 || Current Array Element.ClassID == 8)),
  • Custom String("Use powerfull ice spells to create a formidable defense."), Global.X[5] + Vector(0, -0.500, 0), 1,
  • Clip Against Surfaces, Visible To Position and String, Color(Aqua), Default Visibility);
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 4 || Current Array Element.ClassID == 9 || Current Array Element.ClassID == 6)), Ring,
  • Custom Color(240, 170, 40, 255), Global.X[6] - Vector(0, 1, 0), 1.500, Visible To Position and Radius);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 4 || Current Array Element.ClassID == 9 || Current Array Element.ClassID == 6)), String(
  • "{0} {1}", Hero Icon String(Hero(Wrecking Ball)), Custom String("Rumbler")), Global.X[6] + Vector(0, 0.250, 0), 1.250,
  • Clip Against Surfaces, Visible To Position and String, Custom Color(240, 170, 40, 255), Default Visibility);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 4 || Current Array Element.ClassID == 9 || Current Array Element.ClassID == 6)),
  • Custom String("Smash enemies around while eating tasty Hamstersnax."), Global.X[6] + Vector(0, -0.500, 0), 1,
  • Clip Against Surfaces, Visible To Position and String, Custom Color(240, 170, 40, 255), Default Visibility);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 7 || Current Array Element.ClassID == 8 || Current Array Element.ClassID == 9)), String(
  • "{0} {1}", Hero Icon String(Hero(Ana)), Custom String("Witch")), Global.X[7] + Vector(0, 0.250, 0), 1.250,
  • Clip Against Surfaces, Visible To Position and String, Custom Color(70, 35, 200, 225), Default Visibility);
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 7 || Current Array Element.ClassID == 8 || Current Array Element.ClassID == 9)), Ring,
  • Custom Color(70, 35, 200, 225), Global.X[7] - Vector(0, 1, 0), 1.500, Visible To Position and Radius);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 7 || Current Array Element.ClassID == 8 || Current Array Element.ClassID == 9)),
  • Custom String("Vanquish enemies whith powerfull spells."), Global.X[7] + Vector(0, -0.500, 0), 1, Clip Against Surfaces,
  • Visible To Position and String, Custom Color(70, 35, 200, 225), Default Visibility);
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 7 || Current Array Element.ClassID == 5 || Current Array Element.ClassID == 6)), Ring,
  • Custom Color(230, 160, 10, 255), Global.X[8] - Vector(0, 1, 0), 1.500, Visible To Position and Radius);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 7 || Current Array Element.ClassID == 5 || Current Array Element.ClassID == 6)), String(
  • "{0} {1}", Hero Icon String(Hero(Junkrat)), Custom String("Rat")), Global.X[8] + Vector(0, 0.250, 0), 1.250,
  • Clip Against Surfaces, Visible To Position and String, Custom Color(230, 160, 10, 255), Default Visibility);
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.Points[1] / 8 >= 1 && (
  • Current Array Element.ClassID == 7 || Current Array Element.ClassID == 5 || Current Array Element.ClassID == 6)),
  • Custom String("Bring a big surprise to your enemies, an explosive one, some would say."), Global.X[8] + Vector(0, -0.500, 0),
  • 1, Clip Against Surfaces, Visible To Position and String, Custom Color(230, 160, 10, 255), Default Visibility);
  • }
  • }
  • rule("pick Tracer")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Distance Between(Position Of(Event Player), First Of(Global.X)) <= 1.500;
  • Event Player.Points[1] >= 8;
  • (Event Player.ClassID == 2) == True;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Flash selected!"));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 50);
  • Event Player.ClassID = 4;
  • Event Player.Points[1] -= 8;
  • Destroy HUD Text(First Of(Event Player.Huds));
  • Destroy HUD Text(Event Player.Huds[1]);
  • Destroy HUD Text(Event Player.Huds[2]);
  • Wait(0.050, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Hero(Tracer));
  • }
  • }
  • rule("pick Sombra")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Distance Between(Position Of(Event Player), Global.X[1]) <= 1.500;
  • Event Player.Points[1] >= 8;
  • (Event Player.ClassID == 1 || Event Player.ClassID == 2) == True;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Thief selected!"));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 50);
  • Event Player.ClassID = 8;
  • Event Player.Points[1] -= 8;
  • Destroy HUD Text(First Of(Event Player.Huds));
  • Destroy HUD Text(Event Player.Huds[1]);
  • Destroy HUD Text(Event Player.Huds[2]);
  • Wait(0.050, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Hero(Sombra));
  • }
  • }
  • rule("pick Reaper")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Distance Between(Position Of(Event Player), First Of(Global.X)) <= 1.500;
  • Event Player.Points[1] >= 8;
  • (Event Player.ClassID == 1 || Event Player.ClassID == 3) == True;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Phantom selected!"));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 50);
  • Event Player.ClassID = 5;
  • Event Player.Points[1] -= 8;
  • Destroy HUD Text(First Of(Event Player.Huds));
  • Destroy HUD Text(Event Player.Huds[1]);
  • Destroy HUD Text(Event Player.Huds[2]);
  • Wait(0.050, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Hero(Reaper));
  • }
  • }
  • rule("pick McCree")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Distance Between(Position Of(Event Player), Global.X[2]) <= 1.500;
  • Event Player.Points[1] >= 8;
  • (Event Player.ClassID == 1) == True;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Ranger selected!"));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 50);
  • Event Player.ClassID = 7;
  • Event Player.Points[1] -= 8;
  • Destroy HUD Text(First Of(Event Player.Huds));
  • Destroy HUD Text(Event Player.Huds[1]);
  • Destroy HUD Text(Event Player.Huds[2]);
  • Wait(0.050, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Hero(McCree));
  • }
  • }
  • rule("pick Winston")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Distance Between(Position Of(Event Player), Global.X[2]) <= 1.500;
  • Event Player.Points[1] >= 8;
  • (Event Player.ClassID == 2 || Event Player.ClassID == 3) == True;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Scientist selected!"));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 50);
  • Event Player.ClassID = 6;
  • Event Player.Points[1] -= 8;
  • Destroy HUD Text(First Of(Event Player.Huds));
  • Destroy HUD Text(Event Player.Huds[1]);
  • Destroy HUD Text(Event Player.Huds[2]);
  • Wait(0.050, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Hero(Winston));
  • Allow Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("pick Orisa")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Distance Between(Position Of(Event Player), Global.X[1]) <= 1.500;
  • Event Player.Points[1] >= 8;
  • (Event Player.ClassID == 3) == True;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Golem selected!"));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 50);
  • Event Player.ClassID = 9;
  • Event Player.Points[1] -= 8;
  • Destroy HUD Text(First Of(Event Player.Huds));
  • Destroy HUD Text(Event Player.Huds[1]);
  • Destroy HUD Text(Event Player.Huds[2]);
  • Wait(0.050, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Hero(Orisa));
  • }
  • }
  • rule("pick Pharah")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Event Player.Points[1] >= 8;
  • (Event Player.ClassID == 4 || Event Player.ClassID == 6 || Event Player.ClassID == 7) == True;
  • Distance Between(Position Of(Event Player), Global.X[3]) <= 1.500;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Eagle selected!"));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 50);
  • Event Player.ClassID = 10;
  • Event Player.Points[1] -= 8;
  • Destroy HUD Text(First Of(Event Player.Huds));
  • Destroy HUD Text(Event Player.Huds[1]);
  • Destroy HUD Text(Event Player.Huds[2]);
  • Wait(0.050, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Hero(Pharah));
  • }
  • }
  • rule("pick Moira")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Distance Between(Position Of(Event Player), Global.X[4]) <= 1.500;
  • Event Player.Points[1] >= 8;
  • (Event Player.ClassID == 4 || Event Player.ClassID == 5 || Event Player.ClassID == 8) == True;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Alchemist selected!"));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 50);
  • Event Player.ClassID = 11;
  • Event Player.Points[1] -= 8;
  • Destroy HUD Text(First Of(Event Player.Huds));
  • Destroy HUD Text(Event Player.Huds[1]);
  • Destroy HUD Text(Event Player.Huds[2]);
  • Wait(0.050, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Hero(Moira));
  • }
  • }
  • rule("pick Ana")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Event Player.Points[1] >= 8;
  • (Event Player.ClassID == 7 || Event Player.ClassID == 9 || Event Player.ClassID == 8) == True;
  • Distance Between(Position Of(Event Player), Global.X[7]) <= 1.500;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Witch selected!"));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 50);
  • Event Player.ClassID = 14;
  • Event Player.Points[1] -= 8;
  • Destroy HUD Text(First Of(Event Player.Huds));
  • Destroy HUD Text(Event Player.Huds[1]);
  • Destroy HUD Text(Event Player.Huds[2]);
  • Wait(0.050, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Hero(Ana));
  • }
  • }
  • rule("pick Junk")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Distance Between(Position Of(Event Player), Global.X[8]) <= 1.500;
  • Event Player.Points[1] >= 8;
  • (Event Player.ClassID == 7 || Event Player.ClassID == 5 || Event Player.ClassID == 6) == True;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Rat selected!"));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 50);
  • Event Player.ClassID = 15;
  • Event Player.Points[1] -= 8;
  • Destroy HUD Text(First Of(Event Player.Huds));
  • Destroy HUD Text(Event Player.Huds[1]);
  • Destroy HUD Text(Event Player.Huds[2]);
  • Wait(0.050, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Hero(Junkrat));
  • }
  • }
  • rule("pick Mei")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Distance Between(Position Of(Event Player), Global.X[5]) <= 1.500;
  • Event Player.Points[1] >= 8;
  • (Event Player.ClassID == 5 || Event Player.ClassID == 9 || Event Player.ClassID == 8) == True;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Cryomancer selected!"));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 50);
  • Event Player.ClassID = 12;
  • Event Player.Points[1] -= 8;
  • Destroy HUD Text(First Of(Event Player.Huds));
  • Destroy HUD Text(Event Player.Huds[1]);
  • Destroy HUD Text(Event Player.Huds[2]);
  • Wait(0.050, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Hero(Mei));
  • }
  • }
  • rule("pick Ball")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Distance Between(Position Of(Event Player), Global.X[6]) <= 1.500;
  • Event Player.Points[1] >= 8;
  • (Event Player.ClassID == 4 || Event Player.ClassID == 9 || Event Player.ClassID == 6) == True;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Rumbler selected!"));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 50);
  • Event Player.ClassID = 13;
  • Event Player.Points[1] -= 8;
  • Destroy HUD Text(First Of(Event Player.Huds));
  • Destroy HUD Text(Event Player.Huds[1]);
  • Destroy HUD Text(Event Player.Huds[2]);
  • Wait(0.050, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Hero(Wrecking Ball));
  • }
  • }
  • rule("pick Genji")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Distance Between(Position Of(Event Player), Global.X[2]) <= 1.500;
  • Event Player.Points[1] >= 8;
  • (Event Player.ClassID == 10 || Event Player.ClassID == 11 || Event Player.ClassID == 14 || Event Player.ClassID == 15) == True;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Assasin selected!"));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 50);
  • Event Player.ClassID = 16;
  • Event Player.Points[1] -= 8;
  • Destroy HUD Text(First Of(Event Player.Huds));
  • Destroy HUD Text(Event Player.Huds[1]);
  • Destroy HUD Text(Event Player.Huds[2]);
  • Wait(0.050, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Hero(Genji));
  • }
  • }
  • rule("pick Bastion")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Distance Between(Position Of(Event Player), First Of(Global.X)) <= 1.500;
  • Event Player.Points[1] >= 8;
  • (Event Player.ClassID == 15 || Event Player.ClassID == 14 || Event Player.ClassID == 13 || Event Player.ClassID == 12) == True;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Automaton selected!"));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 50);
  • Event Player.ClassID = 18;
  • Event Player.Points[1] -= 8;
  • Destroy HUD Text(First Of(Event Player.Huds));
  • Destroy HUD Text(Event Player.Huds[1]);
  • Destroy HUD Text(Event Player.Huds[2]);
  • Wait(0.050, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Hero(Bastion));
  • }
  • }
  • rule("pick Reinhardt")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Distance Between(Position Of(Event Player), Global.X[1]) <= 1.500;
  • Event Player.Points[1] >= 8;
  • (Event Player.ClassID == 10 || Event Player.ClassID == 11 || Event Player.ClassID == 12 || Event Player.ClassID == 13) == True;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Marauder selected!"));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 50);
  • Event Player.ClassID = 17;
  • Event Player.Points[1] -= 8;
  • Destroy HUD Text(First Of(Event Player.Huds));
  • Destroy HUD Text(Event Player.Huds[1]);
  • Destroy HUD Text(Event Player.Huds[2]);
  • Wait(0.050, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Hero(Reinhardt));
  • }
  • }
  • rule("Create In world buildings")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Create Effect(All Players(All Teams), Ring, Color(Yellow), First Of(Global.W), 5, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Orb, Color(Yellow), First Of(Global.W) + Vector(0, 1, 0), 1, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Bad Aura, Color(Yellow), First Of(Global.W) + Vector(0, 1, 0), 1,
  • Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Good Aura Sound, Color(Yellow), Vector(-195.125, -91.117, 0.100), 700,
  • Visible To Position and Radius);
  • Create In-World Text(All Players(All Teams), Custom String("HEALING WELL"), First Of(Global.W) + Vector(0, 0.500, 0), 1.500,
  • Clip Against Surfaces, Visible To Position and String, Color(Yellow), Default Visibility);
  • Create Effect(All Players(All Teams), Ring, Color(Red), Global.W[1], 5, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Orb, Color(Red), Global.W[1] + Vector(0, 1, 0), 1, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Bad Aura, Color(Red), Global.W[1] + Vector(0, 1, 0), 1, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Bad Aura Sound, Color(Red), Global.W[1], 800, Visible To Position and Radius);
  • Create In-World Text(All Players(All Teams), Custom String("BLOOD CRYSTAL"), Global.W[1] + Vector(0, 1.250, 0), 1.500,
  • Clip Against Surfaces, Visible To Position and String, Color(Red), Default Visibility);
  • Create In-World Text(All Players(All Teams), Custom String("Trade health for EXP"), Global.W[1] + Vector(0, 0.750, 0), 1.250,
  • Clip Against Surfaces, Visible To Position and String, Color(Red), Default Visibility);
  • Create Effect(All Players(All Teams), Ring, Color(Red), Global.W[2], 5, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Orb, Color(Red), Global.W[2] + Vector(0, 1, 0), 1, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Bad Aura, Color(Red), Global.W[2] + Vector(0, 1, 0), 1, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Bad Aura Sound, Color(Red), Global.W[2], 800, Visible To Position and Radius);
  • Create In-World Text(All Players(All Teams), Custom String("BLOOD CRYSTAL"), Global.W[2] + Vector(0, 1.250, 0), 1.500,
  • Clip Against Surfaces, Visible To Position and String, Color(Red), Default Visibility);
  • Create In-World Text(All Players(All Teams), Custom String("Trade health for EXP"), Global.W[2] + Vector(0, 0.750, 0), 1.250,
  • Clip Against Surfaces, Visible To Position and String, Color(Red), Default Visibility);
  • Create Effect(All Players(All Teams), Ring, Color(Orange), Global.W[3], 3, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Ring, Color(Orange), Global.W[4], 3, Visible To Position and Radius);
  • }
  • }
  • rule("Healing well")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Position Of(Event Player), First Of(Global.W)) <= 5;
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Wait(0.500, Ignore Condition);
  • Heal(Event Player, Null, 10);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Blood crystal #1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Position Of(Event Player), Global.W[1]) <= 5;
  • Is Alive(Event Player) == True;
  • Global.MatchStatus == 1;
  • Health(Event Player) > 50;
  • }
  • actions
  • {
  • Skip If(Event Player.MiscIDs[1] != 0, 2);
  • Create Beam Effect(All Players(All Teams), Bad Beam, Event Player, Global.W[1] + Vector(0, 1, 0), Color(Red),
  • Visible To Position and Radius);
  • Event Player.MiscIDs[1] = Last Created Entity;
  • Wait(2, Ignore Condition);
  • Skip If(Health(Event Player) <= 50, 2);
  • Damage(Event Player, Null, 50);
  • Event Player.EXP += 50;
  • Loop If Condition Is True;
  • Destroy Effect(Event Player.MiscIDs[1]);
  • Event Player.MiscIDs[1] = 0;
  • }
  • }
  • rule("Blood crystal #2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Position Of(Event Player), Global.W[2]) <= 5;
  • Is Alive(Event Player) == True;
  • Global.MatchStatus == 1;
  • Health(Event Player) > 50;
  • }
  • actions
  • {
  • Skip If(Event Player.MiscIDs[1] != 0, 2);
  • Create Beam Effect(All Players(All Teams), Bad Beam, Event Player, Global.W[2] + Vector(0, 1, 0), Color(Red),
  • Visible To Position and Radius);
  • Event Player.MiscIDs[1] = Last Created Entity;
  • Wait(2, Ignore Condition);
  • Skip If(Health(Event Player) <= 50, 2);
  • Damage(Event Player, Null, 50);
  • Event Player.EXP += 50;
  • Loop If Condition Is True;
  • Destroy Effect(Event Player.MiscIDs[1]);
  • Event Player.MiscIDs[1] = 0;
  • }
  • }
  • rule("Create healing stone #1")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Global.HStoneTimer1 <= 0;
  • Global.HStoneStatus1 == 0;
  • }
  • actions
  • {
  • Create In-World Text(All Players(All Teams), String("{0}: {1}", Custom String("Respawns after"), String("{0} sec",
  • Global.HStoneTimer1)), Global.W[3] + Vector(0, 1, 0), 1.250, Clip Against Surfaces, Visible To Position and String, Color(
  • Orange), Default Visibility);
  • Global.F[0] = Last Text ID;
  • Global.HStoneTimer1 = 25;
  • Chase Global Variable At Rate(HStoneTimer1, 0, 1, Destination and Rate);
  • Global.HStoneStatus1 = 1;
  • Call Subroutine(HStone1Timer);
  • Destroy In-World Text(First Of(Global.F));
  • Wait(0.016, Ignore Condition);
  • Create In-World Text(All Players(All Teams), Custom String("Healing stone"), Global.W[3] + Vector(0, 1, 0), 1.250,
  • Clip Against Surfaces, Visible To Position and String, Color(Orange), Default Visibility);
  • Global.F[0] = Last Text ID;
  • Global.HStoneStatus1 = 2;
  • Create Effect(All Players(All Teams), Orb, Color(Orange), Global.W[3] + Vector(0, 1, 0), 1, Visible To Position and Radius);
  • Global.F[1] = Last Created Entity;
  • Create Effect(All Players(All Teams), Good Aura, Color(Orange), Global.W[3] + Vector(0, 1, 0), 0.500,
  • Visible To Position and Radius);
  • Global.F[2] = Last Created Entity;
  • }
  • }
  • rule("Healing stone sub #1")
  • {
  • event
  • {
  • Subroutine;
  • HStone1Timer;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • Loop If(Global.HStoneTimer1 > 0);
  • }
  • }
  • rule("Healing stone #1 pickup")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Position Of(Event Player), Global.W[3]) <= 1.500;
  • Global.HStoneStatus1 == 2;
  • Global.HStoneTimer1 <= 0;
  • Global.MatchStatus == 1;
  • Health(Event Player) < Max Health(Event Player);
  • }
  • actions
  • {
  • Heal(Event Player, Null, 20);
  • Play Effect(All Players(All Teams), Good Explosion, Color(Orange), Event Player, 1.500);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Color(Orange), Event Player, 100);
  • Small Message(Event Player, Custom String("Receiving healing!"));
  • Start Heal Over Time(Event Player, Null, 10, 10);
  • Wait(0.050, Ignore Condition);
  • Destroy In-World Text(First Of(Global.F));
  • Destroy Effect(Global.F[1]);
  • Destroy Effect(Global.F[2]);
  • Global.HStoneStatus1 = 0;
  • }
  • }
  • rule("Create healing stone #2")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Global.HStoneTimer2 <= 0;
  • Global.HStoneStatus2 == 0;
  • }
  • actions
  • {
  • Create In-World Text(All Players(All Teams), String("{0}: {1}", Custom String("Respawns after"), String("{0} sec",
  • Global.HStoneTimer2)), Global.W[4] + Vector(0, 1, 0), 1.250, Clip Against Surfaces, Visible To Position and String, Color(
  • Orange), Default Visibility);
  • Global.F[3] = Last Text ID;
  • Global.HStoneTimer2 = 20;
  • Chase Global Variable At Rate(HStoneTimer2, 0, 1, Destination and Rate);
  • Global.HStoneStatus2 = 1;
  • Call Subroutine(HStone2Timer);
  • Destroy In-World Text(Global.F[3]);
  • Wait(0.016, Ignore Condition);
  • Create In-World Text(All Players(All Teams), Custom String("Healing stone"), Global.W[4] + Vector(0, 1, 0), 1.250,
  • Clip Against Surfaces, Visible To Position and String, Color(Orange), Default Visibility);
  • Global.F[3] = Last Text ID;
  • Global.HStoneStatus2 = 2;
  • Create Effect(All Players(All Teams), Orb, Color(Orange), Global.W[4] + Vector(0, 1, 0), 1, Visible To Position and Radius);
  • Global.F[4] = Last Created Entity;
  • Create Effect(All Players(All Teams), Good Aura, Color(Orange), Global.W[4] + Vector(0, 1, 0), 0.500,
  • Visible To Position and Radius);
  • Global.F[5] = Last Created Entity;
  • }
  • }
  • rule("Healing stone sub #2")
  • {
  • event
  • {
  • Subroutine;
  • HStone2Timer;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • Loop If(Global.HStoneTimer2 > 0);
  • }
  • }
  • rule("Healing stone #2 pickup")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Position Of(Event Player), Global.W[4]) <= 1.500;
  • Global.HStoneStatus2 == 2;
  • Global.HStoneTimer2 <= 0;
  • Global.MatchStatus == 1;
  • Health(Event Player) < Max Health(Event Player);
  • }
  • actions
  • {
  • Heal(Event Player, Null, 20);
  • Play Effect(All Players(All Teams), Good Explosion, Color(Orange), Event Player, 1.500);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Color(Orange), Event Player, 100);
  • Small Message(Event Player, Custom String("Receiving healing!"));
  • Start Heal Over Time(Event Player, Null, 10, 10);
  • Wait(0.050, Ignore Condition);
  • Destroy In-World Text(Global.F[3]);
  • Destroy Effect(Global.F[4]);
  • Destroy Effect(Global.F[5]);
  • Global.HStoneStatus2 = 0;
  • }
  • }
  • rule("Dva init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • D.Va;
  • }
  • conditions
  • {
  • Event Player.ClassID == 2;
  • }
  • actions
  • {
  • Destroy HUD Text(First Of(Event Player.Huds));
  • Destroy HUD Text(Event Player.Huds[1]);
  • Event Player.PlayerStats[0] = 66.667;
  • Event Player.PlayerStats[1] = 90;
  • Event Player.PlayerStats[2] = 100;
  • Event Player.PlayerStats[3] = 100;
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 5;
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Set Primary Fire Enabled(Event Player, True);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(D.Va)), Custom String("Bunny")), Null, String(
  • "{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Color(Turquoise),
  • Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • Create HUD Text(Event Player, Ability Icon String(Hero(Winston), Button(Ability 1)), Custom String("Leap"), String("{0}: {1}",
  • Custom String("Cooldown ability 1"), Event Player.C), Left, 1, Color(Turquoise), Color(Turquoise), Color(Turquoise),
  • Visible To and String, Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • Event Player.PlayerStats[6] = 0;
  • Event Player.PlayerStats[7] = 0;
  • Event Player.PlayerStats[8] = 0;
  • Event Player.PlayerStats[9] = 0;
  • Event Player.PlayerStats[10] = 0;
  • Event Player.CritWait = 0.400;
  • Event Player.OnHitScaling = 0.350;
  • }
  • }
  • rule("dva ability 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • D.Va;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Ability 1)) == True;
  • Event Player.C <= 0;
  • Has Status(Event Player, Hacked) == False;
  • Has Status(Event Player, Knocked Down) == False;
  • Has Status(Event Player, Asleep) == False;
  • Has Status(Event Player, Frozen) == False;
  • Has Status(Event Player, Rooted) == False;
  • Has Status(Event Player, Stunned) == False;
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Good Explosion, Color(Turquoise), Event Player, 1);
  • Play Effect(All Players(All Teams), Buff Impact Sound, Color(White), Event Player, 75);
  • Event Player.C = 4.500;
  • Chase Player Variable At Rate(Event Player, C, 0, 1, Destination and Rate);
  • Apply Impulse(Event Player, Throttle Of(Event Player), 20, To Player, Cancel Contrary Motion);
  • Apply Impulse(Event Player, Up, 5, To Player, Cancel Contrary Motion);
  • }
  • }
  • rule("Hanzo init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Hanzo;
  • }
  • conditions
  • {
  • Event Player.ClassID == 1;
  • }
  • actions
  • {
  • Destroy HUD Text(First Of(Event Player.Huds));
  • Destroy HUD Text(Event Player.Huds[1]);
  • Event Player.PlayerStats[0] = 75;
  • Event Player.PlayerStats[1] = 48;
  • Event Player.PlayerStats[2] = 105;
  • Event Player.PlayerStats[3] = 100;
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 5;
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Set Primary Fire Enabled(Event Player, True);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(Hanzo)), Custom String("Hunter")), Null, String(
  • "{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Color(Sky Blue), Color(
  • White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • Create HUD Text(Event Player, Ability Icon String(Hero(Hanzo), Button(Ability 1)), Custom String("Focus"), String("{0}: {1}",
  • Custom String("Cooldown ability 1"), Event Player.C), Left, 1, Color(Sky Blue), Color(Sky Blue), Color(Sky Blue),
  • Visible To and String, Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • Event Player.PlayerStats[6] = 0;
  • Event Player.PlayerStats[7] = 0;
  • Event Player.PlayerStats[8] = 0;
  • Event Player.PlayerStats[9] = 0;
  • Event Player.PlayerStats[10] = 0;
  • Event Player.CritWait = 0.016;
  • Event Player.OnHitScaling = 1;
  • }
  • }
  • rule("Hanzo ability 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Hanzo;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Ability 1)) == True;
  • Event Player.C <= 0;
  • Has Status(Event Player, Hacked) == False;
  • Has Status(Event Player, Knocked Down) == False;
  • Has Status(Event Player, Asleep) == False;
  • Has Status(Event Player, Frozen) == False;
  • Has Status(Event Player, Stunned) == False;
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Sky Blue), Position Of(Event Player), 1.500);
  • Play Effect(All Players(All Teams), Debuff Impact Sound, Color(White), Event Player, 150);
  • Skip If(Entity Exists(Event Player.Effects[0]) == True, 4);
  • Create Effect(All Players(All Teams), Energy Sound, Color(White), Event Player, 55, Visible To Position and Radius);
  • Event Player.Effects[0] = Last Created Entity;
  • Create Progress Bar HUD Text(Event Player, Event Player.R * 16.667, Custom String("Focussed"), Top, 10, Color(Sky Blue), Color(
  • Sky Blue), Visible To Values and Color, Default Visibility);
  • Event Player.Effects[1] = Last Text ID;
  • Small Message(Event Player, Custom String("Next attack deals double damage"));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1] * 2);
  • Event Player.C = 10;
  • Chase Player Variable At Rate(Event Player, C, 0, 1, Destination and Rate);
  • Event Player.B = True;
  • Event Player.R = 6;
  • Chase Player Variable At Rate(Event Player, R, 0, 1, Destination and Rate);
  • Call Subroutine(Sub3);
  • Skip If(Event Player.B == False, 5);
  • Destroy Effect(Event Player.Effects[0]);
  • Event Player.Effects[0] = 0;
  • Destroy Progress Bar HUD Text(Event Player.Effects[1]);
  • Event Player.B = False;
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Play Effect(All Players(All Teams), Explosion Sound, Color(White), Event Player, 125);
  • Stop Chasing Player Variable(Event Player, R);
  • Event Player.R = 0;
  • }
  • }
  • rule("Hanzo ability 1 - 2")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • Hanzo;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Event Player.B == True;
  • }
  • actions
  • {
  • Destroy Progress Bar HUD Text(Event Player.Effects[1]);
  • Destroy Effect(Event Player.Effects[0]);
  • Event Player.Effects[0] = 0;
  • Event Player.B = False;
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Play Effect(All Players(All Teams), Explosion Sound, Color(White), Event Player, 125);
  • }
  • }
  • rule("Hanzo ability 1 - 3")
  • {
  • event
  • {
  • Subroutine;
  • Sub3;
  • }
  • actions
  • {
  • Wait(0.016, Ignore Condition);
  • Loop If(Event Player.R > 0 && Event Player.B == True);
  • }
  • }
  • rule("Hanzo lose charge upon death")
  • {
  • event
  • {
  • Player Died;
  • All;
  • Hanzo;
  • }
  • conditions
  • {
  • Event Player.B == True;
  • }
  • actions
  • {
  • Event Player.B = False;
  • Destroy Progress Bar HUD Text(Event Player.Effects[1]);
  • Destroy Effect(Event Player.Effects[0]);
  • Event Player.Effects[0] = 0;
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • }
  • }
  • rule("Roadhog init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Event Player.ClassID == 3;
  • }
  • actions
  • {
  • Destroy HUD Text(First Of(Event Player.Huds));
  • Destroy HUD Text(Event Player.Huds[1]);
  • Event Player.PlayerStats[0] = 37.500;
  • Event Player.PlayerStats[1] = 83.333;
  • Event Player.PlayerStats[2] = 110;
  • Event Player.PlayerStats[3] = 100;
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 10;
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Set Primary Fire Enabled(Event Player, True);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(Roadhog)), Custom String("Hog")), Null, String(
  • "{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Color(Orange), Color(
  • White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • Create HUD Text(Event Player, Icon String(Ring Thick), Custom String("Absorb"), String("{0}: {1}", Custom String(
  • "Ability 2 - damage absorbed"), Event Player.B), Left, 1, Color(Orange), Color(Orange), Color(Orange), Visible To and String,
  • Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • Event Player.PlayerStats[6] = 0;
  • Event Player.PlayerStats[7] = 0;
  • Event Player.PlayerStats[8] = 0;
  • Event Player.PlayerStats[9] = 0;
  • Event Player.PlayerStats[10] = 0;
  • Event Player.CritWait = 0.016;
  • Event Player.OnHitScaling = 0.100;
  • }
  • }
  • rule("Roadhog ability 2")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Using Ability 2(Event Player) == True;
  • Global.MatchStatus == 1;
  • Attacker != 0;
  • }
  • actions
  • {
  • Event Player.B += Event Damage;
  • Play Effect(All Players(All Teams), Good Explosion, Color(Yellow), Event Player, 1.500);
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Color(Yellow), Event Player, 75);
  • Small Message(Event Player, Custom String("Damage absorbed: next attack deals more damage"));
  • }
  • }
  • rule("Roadhog abiltiy 2 - 2")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Event Player.B > 0;
  • Event Ability != Button(Melee);
  • }
  • actions
  • {
  • Damage(Victim, Event Player, Event Player.B);
  • Wait(0.050, Ignore Condition);
  • Event Player.B = 0;
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Orange), Victim, 1.500);
  • }
  • }
  • rule("Roadhog lose charge upon death")
  • {
  • event
  • {
  • Player Died;
  • All;
  • Roadhog;
  • }
  • actions
  • {
  • Event Player.B = 0;
  • }
  • }
  • rule("Tracer init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Tracer;
  • }
  • conditions
  • {
  • Event Player.ClassID == 4;
  • }
  • actions
  • {
  • Event Player.PlayerStats[0] = 83.333 + First Of(Event Player.PlayerUpgrades);
  • Event Player.PlayerStats[1] = 83.333 + Event Player.PlayerUpgrades[1];
  • Event Player.PlayerStats[2] = 100 + Event Player.PlayerUpgrades[2];
  • Event Player.PlayerStats[3] = 100 + Event Player.PlayerUpgrades[3];
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 5 + Event Player.PlayerUpgrades[5];
  • Event Player.PlayerStats[6] = Event Player.PlayerUpgrades[6];
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Set Primary Fire Enabled(Event Player, True);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(Tracer)), Custom String("Flash")), Null, String(
  • "{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Color(Yellow), Color(
  • White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • disabled Create HUD Text(Event Player, Icon String(Bolt), Custom String("Blink"), Custom String("ability 1"), Left, 1, Color(Yellow), Color(
  • Yellow), Color(Yellow), Visible To and String, Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • Event Player.PlayerStats[7] = Event Player.PlayerUpgrades[7];
  • Event Player.PlayerStats[8] = Event Player.PlayerUpgrades[8];
  • Event Player.PlayerStats[9] = Event Player.PlayerUpgrades[9];
  • Event Player.PlayerStats[10] = Event Player.PlayerUpgrades[10];
  • Event Player.CritWait = 0.500;
  • Event Player.OnHitScaling = 0.150;
  • }
  • }
  • rule("Reaper init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Reaper;
  • }
  • conditions
  • {
  • Event Player.ClassID == 5;
  • }
  • actions
  • {
  • Event Player.PlayerStats[0] = 70 + First Of(Event Player.PlayerUpgrades);
  • Event Player.PlayerStats[1] = 83.333 + Event Player.PlayerUpgrades[1];
  • Event Player.PlayerStats[2] = 100 + Event Player.PlayerUpgrades[2];
  • Event Player.PlayerStats[3] = 100 + Event Player.PlayerUpgrades[3];
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 10 + Event Player.PlayerUpgrades[5];
  • Event Player.PlayerStats[6] = Event Player.PlayerUpgrades[6];
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Set Primary Fire Enabled(Event Player, True);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(Reaper)), Custom String("Phantom")), Null, String(
  • "{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Custom Color(225, 5,
  • 30, 225), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • Create HUD Text(Event Player, Icon String(Poison), Custom String("The haunting"), String("{0}: {1}", Custom String(
  • "Cooldown ability 1 - tp to your latest attacker and get bonus lifesteal"), Event Player.C), Left, 1, Custom Color(225, 5, 30,
  • 225), Custom Color(225, 5, 30, 225), Custom Color(225, 5, 30, 225), Visible To and String, Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • Event Player.PlayerStats[7] = Event Player.PlayerUpgrades[7];
  • Event Player.PlayerStats[8] = Event Player.PlayerUpgrades[8];
  • Event Player.PlayerStats[9] = Event Player.PlayerUpgrades[9];
  • Event Player.PlayerStats[10] = Event Player.PlayerUpgrades[10];
  • Event Player.B = False;
  • Event Player.CritWait = 0.016;
  • Event Player.OnHitScaling = 1;
  • }
  • }
  • rule("Reaper ability 1")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • Reaper;
  • }
  • conditions
  • {
  • Event Player.B == False;
  • Event Player.C <= 0;
  • Has Status(Event Player, Hacked) == False;
  • Has Status(Event Player, Knocked Down) == False;
  • Has Status(Event Player, Asleep) == False;
  • Has Status(Event Player, Frozen) == False;
  • Has Status(Event Player, Stunned) == False;
  • Has Status(Event Player, Rooted) == False;
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Haunting enabled"));
  • Event Player.B = True;
  • Event Player.R = 4;
  • Chase Player Variable At Rate(Event Player, R, 0, 1, Destination and Rate);
  • Call Subroutine(Sub6);
  • Event Player.C = 8;
  • Chase Player Variable At Rate(Event Player, C, 0, 1, Destination and Rate);
  • Event Player.B = False;
  • Event Player.R = 0;
  • Small Message(Event Player, Custom String("Haunting disabled"));
  • }
  • }
  • rule("Reaper ability 1 - 2")
  • {
  • event
  • {
  • Subroutine;
  • Sub6;
  • }
  • actions
  • {
  • Wait(0.050, Ignore Condition);
  • Loop If(!Is Button Held(Event Player, Button(Ability 1)) && Event Player.R > 0);
  • Skip If(Event Player.R <= 0, 8);
  • Create Effect(All Players(All Teams), Sparkles, Custom Color(225, 5, 30, 225), Event Player, 1.250,
  • Visible To Position and Radius);
  • Event Player.Effects = Last Created Entity;
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Custom Color(40, 0, 5, 225), Event Player, 100);
  • Play Effect(All Players(All Teams), Bad Pickup Effect, Custom Color(40, 0, 5, 225), Event Player, 1.500);
  • Play Effect(All Players(All Teams), Ring Explosion, Custom Color(225, 5, 30, 225), Position Of(Event Player), 4);
  • Wait(0.100, Ignore Condition);
  • Teleport(Event Player, Position Of(Attacker));
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Custom Color(40, 0, 5, 225), Event Player, 50);
  • Play Effect(All Players(All Teams), Bad Pickup Effect, Custom Color(40, 0, 5, 225), Event Player, 1.250);
  • Play Effect(All Players(All Teams), Ring Explosion, Custom Color(225, 5, 30, 225), Position Of(Event Player), 3);
  • Wait(3, Ignore Condition);
  • Event Player.PlayerStats[7] += 25;
  • Destroy Effect(Event Player.Effects);
  • Event Player.Effects = 0;
  • Event Player.PlayerStats[7] -= 25;
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Custom Color(225, 5, 30, 225), Event Player, 50);
  • }
  • }
  • rule("Winston init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Winston;
  • }
  • conditions
  • {
  • Event Player.ClassID == 6;
  • }
  • actions
  • {
  • Event Player.PlayerStats[0] = 50 + First Of(Event Player.PlayerUpgrades);
  • Event Player.PlayerStats[1] = 85 + Event Player.PlayerUpgrades[1];
  • Event Player.PlayerStats[2] = 100 + Event Player.PlayerUpgrades[2];
  • Event Player.PlayerStats[3] = 100 + Event Player.PlayerUpgrades[3];
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 5 + Event Player.PlayerUpgrades[5];
  • Event Player.PlayerStats[6] = Event Player.PlayerUpgrades[6];
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Set Primary Fire Enabled(Event Player, True);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(Winston)), Custom String("Scientist")), Null, String(
  • "{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Color(White), Color(
  • White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • disabled Create HUD Text(Event Player, Icon String(Bolt), Custom String("Jet leap"), Custom String("Ability 1"), Left, 1, Color(White),
  • Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • Event Player.PlayerStats[7] = Event Player.PlayerUpgrades[7];
  • Event Player.PlayerStats[8] = Event Player.PlayerUpgrades[8];
  • Event Player.PlayerStats[9] = Event Player.PlayerUpgrades[9];
  • Event Player.PlayerStats[10] = Event Player.PlayerUpgrades[10];
  • Event Player.CritWait = 0.400;
  • Event Player.OnHitScaling = 0.090;
  • }
  • }
  • rule("Winston bonus dmg on shift")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • Winston;
  • }
  • conditions
  • {
  • Event Damage > 30 * Event Player.PlayerStats[1] * 0.010;
  • }
  • actions
  • {
  • Damage(Victim, Event Player, 30);
  • }
  • }
  • rule("Pharah init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Pharah;
  • }
  • conditions
  • {
  • Event Player.ClassID == 10;
  • }
  • actions
  • {
  • Event Player.PlayerStats[0] = 70 + First Of(Event Player.PlayerUpgrades);
  • Event Player.PlayerStats[1] = 75 + Event Player.PlayerUpgrades[1];
  • Event Player.PlayerStats[2] = 100 + Event Player.PlayerUpgrades[2];
  • Event Player.PlayerStats[3] = 92.500 + Event Player.PlayerUpgrades[3];
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 5 + Event Player.PlayerUpgrades[5];
  • Event Player.PlayerStats[6] = Event Player.PlayerUpgrades[6];
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Set Primary Fire Enabled(Event Player, True);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(Pharah)), Custom String("Eagle")), Null, String(
  • "{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Color(Blue), Color(
  • White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • Create HUD Text(Event Player, Icon String(Bolt), Custom String("Natural aviator"), Custom String(
  • "Passive: gain more speed and damage while mid-air."), Left, 1, Color(Blue), Color(Blue), Color(Blue), Visible To and String,
  • Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • Event Player.PlayerStats[7] = Event Player.PlayerUpgrades[7];
  • Event Player.PlayerStats[8] = Event Player.PlayerUpgrades[8];
  • Event Player.PlayerStats[9] = Event Player.PlayerUpgrades[9];
  • Event Player.PlayerStats[10] = Event Player.PlayerUpgrades[10];
  • Event Player.CritWait = 0.016;
  • Event Player.OnHitScaling = 1;
  • }
  • }
  • rule("Pharah passive")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Pharah;
  • }
  • conditions
  • {
  • Altitude Of(Event Player) > 1.250;
  • }
  • actions
  • {
  • Event Player.NoGhost = True;
  • Set Move Speed(Event Player, Event Player.PlayerStats[2] * 1.250 + Event Player.GhostSpeed - Event Player.Slow);
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1] + 12.500);
  • Skip If(First Of(Event Player.Effects) != 0, 3);
  • Create Effect(All Players(All Teams), Energy Sound, Color(White), Event Player, 50, Visible To Position and Radius);
  • Event Player.Effects[0] = Last Created Entity;
  • Small Message(Event Player, Custom String("Extra damage and movement speed"));
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2] + Event Player.GhostSpeed - Event Player.Slow);
  • Small Message(Event Player, Custom String("Damage and movement speed to normal"));
  • Destroy Effect(First Of(Event Player.Effects));
  • Event Player.Effects[0] = 0;
  • Event Player.NoGhost = False;
  • }
  • }
  • rule("Ana init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Ana;
  • }
  • conditions
  • {
  • Event Player.ClassID == 14;
  • }
  • actions
  • {
  • Event Player.PlayerStats[0] = 100 + First Of(Event Player.PlayerUpgrades);
  • Event Player.PlayerStats[1] = 60 + Event Player.PlayerUpgrades[1];
  • Event Player.PlayerStats[2] = 100 + Event Player.PlayerUpgrades[2];
  • Event Player.PlayerStats[3] = 100 + Event Player.PlayerUpgrades[3];
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 50 + Event Player.PlayerUpgrades[5];
  • Event Player.PlayerStats[6] = Event Player.PlayerUpgrades[6];
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, True);
  • Set Primary Fire Enabled(Event Player, True);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(Ana)), Custom String("Witch")), Null, String(
  • "{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Custom Color(70, 35,
  • 200, 225), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • Create HUD Text(Event Player, Icon String(Poison 2), Custom String("Throwing flask"), Custom String(
  • "Ability 2 - Knock yourself back or slow enemies"), Left, 2, Custom Color(70, 35, 200, 225), Custom Color(70, 35, 200, 225),
  • Custom Color(70, 35, 200, 225), Visible To and String, Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • disabled Create HUD Text(Event Player, Icon String(Poison), Custom String("Which bane"), Custom String(
  • "Passive: after hitting an ability your next attack deals bonus damage and reduces your cooldowns."), Left, 1, Custom Color(70,
  • 35, 200, 225), Custom Color(70, 35, 200, 225), Custom Color(70, 35, 200, 225), Visible To and String, Default Visibility);
  • Event Player.Huds[2] = Last Text ID;
  • Event Player.PlayerStats[7] = Event Player.PlayerUpgrades[7];
  • Event Player.PlayerStats[8] = Event Player.PlayerUpgrades[8];
  • Event Player.PlayerStats[9] = Event Player.PlayerUpgrades[9];
  • Event Player.PlayerStats[10] = Event Player.PlayerUpgrades[10];
  • Event Player.CritWait = 0.100;
  • Event Player.OnHitScaling = 0.800;
  • }
  • }
  • rule("Ana always have 1 hp missing")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Ana;
  • }
  • conditions
  • {
  • Health(Event Player) == Max Health(Event Player);
  • }
  • actions
  • {
  • Damage(Event Player, Null, 1);
  • Wait(False, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Ana ability 2 launch yourself")
  • {
  • event
  • {
  • Player Dealt Healing;
  • All;
  • Ana;
  • }
  • conditions
  • {
  • Healee == Event Player;
  • Is Using Ability 2(Event Player) == True;
  • Event Ability == Button(Ability 2);
  • }
  • actions
  • {
  • Apply Impulse(Event Player, Facing Direction Of(Event Player) * -1, 12, To World, Cancel Contrary Motion);
  • }
  • }
  • rule("Ana ability 2 slow enemies")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Damage > 30 * Event Player.PlayerStats[1] * 0.010;
  • Hero Of(Attacker) == Hero(Ana);
  • }
  • actions
  • {
  • Event Player.Slow += 20 + Event Damage * 0.050;
  • Wait(0.700, Ignore Condition);
  • Event Player.Slow -= 10 + Event Damage * 0.050;
  • }
  • }
  • disabled rule("Ana activate passive")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • Ana;
  • }
  • conditions
  • {
  • Event Damage > 30 * Event Player.PlayerStats[1] * 0.010;
  • }
  • actions
  • {
  • Create Effect(All Players(All Teams), Sparkles, Custom Color(70, 35, 200, 225), Event Player, 1.250,
  • Visible To Position and Radius);
  • Event Player.Effects = Last Created Entity;
  • Play Effect(All Players(All Teams), Good Explosion, Custom Color(170, 35, 200, 225), Position Of(Event Player), 1.250);
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Custom Color(170, 35, 200, 225), Event Player, 75);
  • Small Message(Event Player, Custom String("Passive procced!"));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1] + 20);
  • Event Player.B = True;
  • Event Player.R = 1.500;
  • Chase Player Variable At Rate(Event Player, R, 0, 1, Destination and Rate);
  • Wait Until(Event Player.R == 0, 2);
  • Skip If(Event Player.B == False, 5);
  • Destroy Effect(Event Player.Effects);
  • Event Player.Effects = 0;
  • Event Player.B = False;
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Custom Color(170, 35, 200, 225), Event Player, 50);
  • Stop Chasing Player Variable(Event Player, R);
  • Event Player.R = 0;
  • }
  • }
  • disabled rule("Ana passive - 2")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • Ana;
  • }
  • conditions
  • {
  • disabled Global.MatchStatus == 1;
  • Event Player.B == True;
  • Event Damage <= 30 * Event Player.PlayerStats[1] * 0.010;
  • }
  • actions
  • {
  • Destroy Effect(Event Player.Effects);
  • Event Player.Effects = 0;
  • Event Player.B = False;
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Custom Color(170, 35, 200, 225), Event Player, 75);
  • Set Ability Cooldown(Event Player, Button(Ability 2), Ability Cooldown(Event Player, Button(Ability 2)) - 3);
  • }
  • }
  • disabled rule("Ana lose passive upon death")
  • {
  • event
  • {
  • Player Died;
  • All;
  • Ana;
  • }
  • conditions
  • {
  • Event Player.B == True;
  • }
  • actions
  • {
  • Event Player.B = False;
  • Destroy Effect(Event Player.Effects);
  • Event Player.Effects = 0;
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • }
  • }
  • rule("Mei init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Mei;
  • }
  • conditions
  • {
  • Event Player.ClassID == 12;
  • }
  • actions
  • {
  • Event Player.PlayerStats[0] = 120 + First Of(Event Player.PlayerUpgrades);
  • Event Player.PlayerStats[1] = 80 + Event Player.PlayerUpgrades[1];
  • Event Player.PlayerStats[2] = 100 + Event Player.PlayerUpgrades[2];
  • Event Player.PlayerStats[3] = 100 + Event Player.PlayerUpgrades[3];
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 25 + Event Player.PlayerUpgrades[5];
  • Event Player.PlayerStats[6] = Event Player.PlayerUpgrades[6];
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, True);
  • Set Primary Fire Enabled(Event Player, False);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(Mei)), Custom String("Cryomancer")), Null, String(
  • "{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Color(Aqua), Color(
  • White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • Create HUD Text(Event Player, Icon String(Diamond), Custom String("Cryo-aura"), Custom String(
  • "Passive: upon using an ability, heal yourself."), Left, 1, Color(Aqua), Color(Aqua), Color(Aqua), Visible To and String,
  • Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • Event Player.PlayerStats[7] = Event Player.PlayerUpgrades[7];
  • Event Player.PlayerStats[8] = Event Player.PlayerUpgrades[8];
  • Event Player.PlayerStats[9] = Event Player.PlayerUpgrades[9];
  • Event Player.PlayerStats[10] = Event Player.PlayerUpgrades[10];
  • Event Player.CritWait = 0.016;
  • Event Player.OnHitScaling = 1;
  • }
  • }
  • rule("Mei passive ability 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Mei;
  • }
  • conditions
  • {
  • Is Using Ability 2(Event Player) == True;
  • }
  • actions
  • {
  • Call Subroutine(Sub9);
  • Skip If(Event Player.B == True, 4);
  • Heal(Event Player, Event Player, 38 + 40 * Event Player.PlayerStats[5] * 0.010);
  • Wait(0.100, Ignore Condition);
  • Play Effect(All Players(All Teams), Good Explosion, Color(Aqua), Event Player, 1);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Color(Aqua), Event Player, 75);
  • Event Player.B = False;
  • }
  • }
  • rule("Mei passive ability 2 sub")
  • {
  • event
  • {
  • Subroutine;
  • Sub9;
  • }
  • actions
  • {
  • Wait(0.100, Ignore Condition);
  • Skip If(Is Button Held(Event Player, Button(Primary Fire)), 3);
  • Skip If(Is Button Held(Event Player, Button(Secondary Fire)), 1);
  • Loop If Condition Is True;
  • Event Player.B = True;
  • }
  • }
  • rule("Mei passive ability 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Mei;
  • }
  • conditions
  • {
  • Is Using Ability 1(Event Player) == True;
  • }
  • actions
  • {
  • Heal(Event Player, Event Player, 38 + 40 * Event Player.PlayerStats[5] * 0.010);
  • Wait(0.100, Ignore Condition);
  • Play Effect(All Players(All Teams), Good Explosion, Color(Aqua), Event Player, 1);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Color(Aqua), Event Player, 75);
  • }
  • }
  • rule("Reinhardt init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Reinhardt;
  • }
  • conditions
  • {
  • Event Player.ClassID == 17;
  • }
  • actions
  • {
  • Event Player.PlayerStats[0] = 54.545 + First Of(Event Player.PlayerUpgrades);
  • Event Player.PlayerStats[1] = 85 + Event Player.PlayerUpgrades[1];
  • Event Player.PlayerStats[2] = 110 + Event Player.PlayerUpgrades[2];
  • Event Player.PlayerStats[3] = 110 + Event Player.PlayerUpgrades[3];
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 5 + Event Player.PlayerUpgrades[5];
  • Event Player.PlayerStats[6] = 5 + Event Player.PlayerUpgrades[6];
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Set Primary Fire Enabled(Event Player, True);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(Reinhardt)), Custom String("Marauder")), Null, String(
  • "{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Color(Red), Color(
  • White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • Create HUD Text(Event Player, Icon String(Poison), Custom String("Offering"), Custom String(
  • "Passive - Using abilities hurts you."), Left, 2, Color(Red), Color(Red), Color(Red), Visible To and String,
  • Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • Create HUD Text(Event Player, Ability Icon String(Hero(Sigma), Button(Ability 1)), Custom String("Dark ascension"), Custom String(
  • "Passive - taking or dealing enough damage grants multiplied stats and unkillable status."), Left, 2, Color(Red), Color(Red),
  • Color(Red), Visible To and String, Default Visibility);
  • Event Player.Huds[2] = Last Text ID;
  • Event Player.PlayerStats[7] = 5 + Event Player.PlayerUpgrades[7];
  • Event Player.PlayerStats[8] = Event Player.PlayerUpgrades[8];
  • Event Player.PlayerStats[9] = Event Player.PlayerUpgrades[9];
  • Event Player.PlayerStats[10] = Event Player.PlayerUpgrades[10];
  • Event Player.PlayerStats[11] = Event Player.PlayerUpgrades[11];
  • Event Player.PlayerStats[12] = Event Player.PlayerUpgrades[12];
  • Event Player.CritWait = 0.016;
  • Event Player.OnHitScaling = 1;
  • Create Progress Bar HUD Text(Event Player, Event Player.R, Custom String("Dark ascension"), Top, 10, Color(Red), Custom Color(130,
  • 10, 10, 255), Visible To Values and Color, Default Visibility);
  • Event Player.Effects[0] = Last Text ID;
  • Event Player.K = 1;
  • }
  • }
  • rule("Reinhardt ability 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Reinhardt;
  • }
  • conditions
  • {
  • Is Using Ability 1(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.PlayerStats[2] = Event Player.PlayerStats[2] + 110;
  • Wait(0.016, Ignore Condition);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2] + Event Player.GhostSpeed - Event Player.Slow);
  • Wait(0.950, Ignore Condition);
  • Set Status(Event Player, Null, Stunned, 0.050);
  • Event Player.PlayerStats[2] = Event Player.PlayerStats[2] - 110;
  • Wait(0.016, Ignore Condition);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2] + Event Player.GhostSpeed - Event Player.Slow);
  • }
  • }
  • rule("Reinhardt ability 2 and ability 1 hurt you")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Reinhardt;
  • }
  • conditions
  • {
  • (Is Using Ability 2(Event Player) || Is Using Ability 1(Event Player) == True) == True;
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Stop Damage Over Time(Event Player.Effects[1]);
  • Wait(0.016, Ignore Condition);
  • Start Damage Over Time(Event Player, Event Player, 2, 32.5);
  • Event Player.Effects[1] = Last Damage Over Time ID;
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Red), Event Player, 1.500);
  • Play Effect(All Players(All Teams), Ring Explosion, Custom Color(130, 10, 10, 255), Event Player, 3);
  • Wait(2, Restart When True);
  • Stop Damage Over Time(Event Player.Effects[1]);
  • }
  • }
  • rule("Reinhardt fill meter: taking damage")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • Reinhardt;
  • }
  • conditions
  • {
  • Event Player.D == False;
  • Global.MatchStatus == 1;
  • Attacker != Event Player;
  • }
  • actions
  • {
  • Event Player.R += Event Damage * 0.075;
  • Event Player.F = True;
  • Wait(0.016, Restart When True);
  • Event Player.F = False;
  • }
  • }
  • rule("Reinhardt fill meter: Dealing damage")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • Reinhardt;
  • }
  • conditions
  • {
  • Event Player.D == False;
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Event Player.R += Event Damage * 0.300;
  • }
  • }
  • rule("Reinhardt fill meter: Dealing self damage")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • Reinhardt;
  • }
  • conditions
  • {
  • Event Player.D == False;
  • Global.MatchStatus == 1;
  • Victim == Event Player;
  • }
  • actions
  • {
  • Event Player.R += Event Damage * 0.250;
  • Event Player.F = True;
  • Wait(0.016, Restart When True);
  • Event Player.F = False;
  • }
  • }
  • rule("Reinhardt lose meter when out of combat")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Reinhardt;
  • }
  • conditions
  • {
  • Event Player.D == False;
  • Global.MatchStatus == 1;
  • Event Player.F == True;
  • }
  • actions
  • {
  • Stop Chasing Player Variable(Event Player, R);
  • Wait(2, Restart When True);
  • Skip If(Event Player.D == True, 4);
  • Chase Player Variable At Rate(Event Player, R, 0, 20, Destination and Rate);
  • Wait Until(Event Player.R == 0 || Event Player.F == True || Event Player.D == True, 9999);
  • Loop If(Event Player.F == True || Event Player.D == True);
  • Stop Chasing Player Variable(Event Player, R);
  • }
  • }
  • rule("Reinhardt meter full")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Reinhardt;
  • }
  • conditions
  • {
  • Event Player.D == False;
  • Global.MatchStatus == 1;
  • Event Player.R >= 100;
  • }
  • actions
  • {
  • Stop Chasing Player Variable(Event Player, R);
  • Event Player.D = True;
  • Event Player.R = 100;
  • Small Message(Event Player, Custom String("Ascended!"));
  • Create Effect(All Players(All Teams), Bad Aura, Color(Red), Position Of(Event Player), 1 * Event Player.K,
  • Visible To Position and Radius);
  • Event Player.Effects[2] = Last Created Entity;
  • Start Rule(RNascend, Restart Rule);
  • Chase Player Variable At Rate(Event Player, R, 0, 16.667, Destination and Rate);
  • Set Status(Event Player, Event Player, Unkillable, 6);
  • Wait Until(Is Dead(Event Player) == True, 6);
  • Stop Chasing Player Variable(Event Player, R);
  • Event Player.D = False;
  • Event Player.R = 0;
  • Clear Status(Event Player, Unkillable);
  • Destroy Effect(Event Player.Effects[2]);
  • }
  • }
  • rule("Rein ascend gain stats")
  • {
  • event
  • {
  • Subroutine;
  • RNascend;
  • }
  • actions
  • {
  • Event Player.NoGhost = True;
  • Set Move Speed(Event Player, Event Player.PlayerStats[2] + 10 * Event Player.K + Event Player.GhostSpeed - Event Player.Slow);
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1] + 15 * Event Player.K);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6] + 10 * Event Player.K);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3] + 20 * Event Player.K);
  • Wait(0.100, Ignore Condition);
  • Loop If(Event Player.D == True);
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Event Player.NoGhost = False;
  • }
  • }
  • rule("Rein ascend become unkillable")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Reinhardt;
  • }
  • conditions
  • {
  • Event Player.D == True;
  • Health(Event Player) <= 3;
  • }
  • actions
  • {
  • Event Player.K = 1.200;
  • Set Status(Event Player, Event Player, Invincible, 6);
  • Set Status(Event Player, Event Player, Burning, 6);
  • Small Message(Event Player, Custom String("Burning out! Die after ascension is over"));
  • Wait Until(Event Player.D == False, Event Player.R);
  • Wait(0.016, Ignore Condition);
  • Kill(Event Player, Event Player);
  • Event Player.K = 1;
  • Clear Status(Event Player, Invincible);
  • Clear Status(Event Player, Burning);
  • }
  • }
  • rule("Genji init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Genji;
  • }
  • conditions
  • {
  • Event Player.ClassID == 16;
  • }
  • actions
  • {
  • Event Player.PlayerStats[0] = 75 + First Of(Event Player.PlayerUpgrades);
  • Event Player.PlayerStats[1] = 65 + Event Player.PlayerUpgrades[1];
  • Event Player.PlayerStats[2] = 100 + Event Player.PlayerUpgrades[2];
  • Event Player.PlayerStats[3] = 75 + Event Player.PlayerUpgrades[3];
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 5 + Event Player.PlayerUpgrades[5];
  • Event Player.PlayerStats[6] = Event Player.PlayerUpgrades[6];
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, True);
  • Set Primary Fire Enabled(Event Player, True);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(Genji)), Custom String("Assasin")), Null, String(
  • "{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Color(Lime Green),
  • Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • Create HUD Text(Event Player, Ability Icon String(Hero(Genji), Button(Ultimate)), Custom String("Ninja"), Custom String(
  • "Passive: backstabs deal 1.4 times the damage."), Left, 2, Color(Lime Green), Color(Lime Green), Color(Lime Green),
  • Visible To and String, Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • Create HUD Text(Event Player, Ability Icon String(Hero(Echo), Button(Ultimate)), Custom String("Shadow attack"), String("{0}: {1}",
  • Custom String("Cooldown ability 2 - select a position you can recall to. Deal 75% dmg while recall up."), Event Player.C),
  • Left, 1, Color(Lime Green), Color(Lime Green), Color(Lime Green), Visible To and String, Default Visibility);
  • Event Player.Huds[2] = Last Text ID;
  • Event Player.PlayerStats[7] = Event Player.PlayerUpgrades[7];
  • Event Player.PlayerStats[8] = Event Player.PlayerUpgrades[8];
  • Event Player.PlayerStats[9] = Event Player.PlayerUpgrades[9];
  • Event Player.PlayerStats[10] = 5 + Event Player.PlayerUpgrades[10];
  • Event Player.PlayerStats[11] = Event Player.PlayerUpgrades[11];
  • Event Player.PlayerStats[12] = Event Player.PlayerUpgrades[12];
  • Event Player.B = 0;
  • Event Player.CritWait = 0.100;
  • Event Player.OnHitScaling = 0.400;
  • }
  • }
  • rule("Genji passive")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Genji;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Genji);
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Event Player.B = Filtered Array(All Players(All Teams), !Is In View Angle(Current Array Element, Eye Position(Event Player), 85));
  • Skip If(Event Player.D[0] != 0, 2);
  • Start Damage Modification(Filtered Array(All Players(All Teams), !Is In View Angle(Current Array Element, Eye Position(
  • Event Player), 85)), Event Player, 140, Receivers Damagers and Damage Percent);
  • Event Player.D[0] = Last Damage Modification ID;
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Genji always use ult")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Genji;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Is Using Ultimate(Event Player) == False;
  • }
  • actions
  • {
  • Wait(0.100, Ignore Condition);
  • Set Ultimate Charge(Event Player, 100);
  • Wait(0.500, Ignore Condition);
  • Start Holding Button(Event Player, Button(Ultimate));
  • Wait(0.500, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Ultimate));
  • }
  • }
  • rule("Genji passive visual")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • Genji;
  • }
  • conditions
  • {
  • Array Contains(Event Player.B, Victim) == True;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Lime Green), Victim, 1.500);
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Color(Lime Green), Victim, 75);
  • }
  • }
  • rule("Genji passive visual for enemies not looking at you")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is True For Any(Players On Hero(Hero(Genji), All Teams), Array Contains(Current Array Element.B, Event Player)
  • == True && Is In Line of Sight(Eye Position(Event Player), Eye Position(Current Array Element), Barriers Do Not Block LOS))
  • == True;
  • Is Alive(Event Player) == True;
  • (Hero Of(Event Player) == Hero(Junkrat) && Event Player.R > 0) == False;
  • }
  • actions
  • {
  • Skip If(Entity Exists(Event Player.MiscIDs[11]), 2);
  • Create Icon(Filtered Array(Players On Hero(Hero(Genji), All Teams), Array Contains(Current Array Element.B, Event Player)
  • == True && Is In Line of Sight(Eye Position(Event Player), Eye Position(Current Array Element), Barriers Do Not Block LOS)),
  • Event Player, Skull, Visible To and Position, Color(Lime Green), True);
  • Event Player.MiscIDs[11] = Last Created Entity;
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • Destroy Icon(Event Player.MiscIDs[11]);
  • Event Player.MiscIDs[11] = 0;
  • }
  • }
  • rule("Genji no wallclimb")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Genji;
  • }
  • conditions
  • {
  • Is On Wall(Event Player) == True;
  • }
  • actions
  • {
  • Wait(0.150, Abort When False);
  • Disallow Button(Event Player, Button(Jump));
  • Wait Until(Is On Wall(Event Player) == False, 5);
  • Allow Button(Event Player, Button(Jump));
  • }
  • }
  • rule("Genji ability 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Genji;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Ability 2)) == True;
  • Has Status(Event Player, Hacked) == False;
  • Has Status(Event Player, Knocked Down) == False;
  • Has Status(Event Player, Asleep) == False;
  • Has Status(Event Player, Frozen) == False;
  • Has Status(Event Player, Stunned) == False;
  • Event Player.C == 0;
  • Event Player.O == 0;
  • }
  • actions
  • {
  • Event Player.D = 0;
  • Skip If(!Entity Exists(First Of(Event Player.Effects)), 3);
  • Destroy Effect(First Of(Event Player.Effects));
  • Destroy Progress Bar HUD Text(Event Player.Effects[1]);
  • Wait(0.016, Ignore Condition);
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1] * 0.750);
  • Event Player.O = Position Of(Event Player);
  • Create Effect(Event Player, Bad Aura, Color(Lime Green), Event Player.O, 0.500, Visible To Position and Radius);
  • Event Player.Effects[0] = Last Created Entity;
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 100);
  • Small Message(Event Player, Custom String("Recall position selected"));
  • Event Player.R = 8;
  • Chase Player Variable At Rate(Event Player, R, 0, 1, Destination and Rate);
  • Create Progress Bar HUD Text(Event Player, Event Player.R * 12.500, Custom String("Recall active for"), Top, 10, Color(Lime Green),
  • Color(Lime Green), Visible To Values and Color, Default Visibility);
  • Event Player.Effects[1] = Last Text ID;
  • Wait(0.250, Ignore Condition);
  • Event Player.K = True;
  • }
  • }
  • rule("Genji ability 2 recall")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Genji;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Ability 2)) == True;
  • Event Player.R > 0;
  • Event Player.K == True;
  • Has Status(Event Player, Hacked) == False;
  • Has Status(Event Player, Knocked Down) == False;
  • Has Status(Event Player, Asleep) == False;
  • Has Status(Event Player, Frozen) == False;
  • Has Status(Event Player, Stunned) == False;
  • Has Status(Event Player, Rooted) == False;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Good Explosion, Color(White), Event Player, 1.250);
  • Play Effect(All Players(All Teams), Explosion Sound, Color(White), Event Player, 75);
  • Event Player.K = False;
  • Wait(0.016, Ignore Condition);
  • Teleport(Event Player, Event Player.O);
  • Play Effect(Event Player, Buff Impact Sound, Color(Lime Green), Event Player, 75);
  • Small Message(Event Player, Custom String("Recalled!"));
  • Wait(0.016, Ignore Condition);
  • Destroy Effect(First Of(Event Player.Effects));
  • Destroy Progress Bar HUD Text(Event Player.Effects[1]);
  • Event Player.O = 0;
  • Event Player.R = 0;
  • Stop Chasing Player Variable(Event Player, R);
  • Event Player.C = 10;
  • Chase Player Variable At Rate(Event Player, C, 0, 1, Destination and Rate);
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Heal(Event Player, Event Player, Event Player.D * 0.250);
  • }
  • }
  • rule("Genji ability 2 count damage received")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • Genji;
  • }
  • conditions
  • {
  • Event Player.R > 0;
  • }
  • actions
  • {
  • Event Player.D = Event Player.D + Event Damage;
  • }
  • }
  • rule("Genji ability 2 expire")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Genji;
  • }
  • conditions
  • {
  • Event Player.K == True;
  • Event Player.R == 0;
  • Is Button Held(Event Player, Button(Ability 2)) == False;
  • }
  • actions
  • {
  • Event Player.R = 0;
  • Stop Chasing Player Variable(Event Player, R);
  • Event Player.C = 8;
  • Chase Player Variable At Rate(Event Player, C, 0, 1, Destination and Rate);
  • Event Player.O = 0;
  • Event Player.K = False;
  • Destroy Effect(First Of(Event Player.Effects));
  • Destroy Progress Bar HUD Text(Event Player.Effects[1]);
  • Play Effect(Event Player, Debuff Impact Sound, Color(White), Event Player, 75);
  • Small Message(Event Player, Custom String("Recall Expired"));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • }
  • }
  • rule("Genji ability 2 expire at death")
  • {
  • event
  • {
  • Player Died;
  • All;
  • Genji;
  • }
  • conditions
  • {
  • Event Player.R > 0;
  • }
  • actions
  • {
  • Event Player.R = 0;
  • Stop Chasing Player Variable(Event Player, R);
  • Event Player.C = 8;
  • Chase Player Variable At Rate(Event Player, C, 0, 1, Destination and Rate);
  • Event Player.O = 0;
  • Event Player.K = False;
  • Destroy Effect(First Of(Event Player.Effects));
  • Destroy Progress Bar HUD Text(Event Player.Effects[1]);
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • }
  • }
  • rule("Bastion init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Event Player.ClassID == 18;
  • }
  • actions
  • {
  • Event Player.PlayerStats[0] = 75 + First Of(Event Player.PlayerUpgrades);
  • Event Player.PlayerStats[1] = 80 + Event Player.PlayerUpgrades[1];
  • Event Player.PlayerStats[2] = 100 + Event Player.PlayerUpgrades[2];
  • Event Player.PlayerStats[3] = 100 + Event Player.PlayerUpgrades[3];
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 5 + Event Player.PlayerUpgrades[5];
  • Event Player.PlayerStats[6] = Event Player.PlayerUpgrades[6];
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Set Primary Fire Enabled(Event Player, True);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(Bastion)), Custom String("Automaton")), Null, String(
  • "{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Color(Sky Blue), Color(
  • White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • Create HUD Text(Event Player, Ability Icon String(Hero(Bastion), Button(Ability 1)), Custom String("Ancient core"), Custom String(
  • "Your kit changes when either crit, on-hit or tenacity is higher then the other two stats."), Left, 1, Color(Sky Blue), Color(
  • Sky Blue), Color(Sky Blue), Visible To and String, Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • Create HUD Text(Event Player, Icon String(Eye), Custom String("Scan"), String("{0}: {1}", Custom String("Cooldown ability 2"),
  • Event Player.C), Left, 2, Color(Sky Blue), Color(Sky Blue), Color(Sky Blue), Visible To and String, Default Visibility);
  • Event Player.Huds[2] = Last Text ID;
  • Event Player.PlayerStats[7] = Event Player.PlayerUpgrades[7];
  • Event Player.PlayerStats[8] = Event Player.PlayerUpgrades[8];
  • Event Player.PlayerStats[9] = Event Player.PlayerUpgrades[9];
  • Event Player.PlayerStats[10] = Event Player.PlayerUpgrades[10];
  • Event Player.PlayerStats[11] = Event Player.PlayerUpgrades[11];
  • Event Player.PlayerStats[12] = 5 + Event Player.PlayerUpgrades[12];
  • Event Player.PlayerUpgrades[12] = 5 + Event Player.PlayerUpgrades[12];
  • Event Player.CritWait = 0.400;
  • Event Player.OnHitScaling = 0.300;
  • Event Player.D[0] = Custom String("current configuration: Sentry (On-hit)");
  • Event Player.D[1] = Custom String("current configuration: Tank (Crit)");
  • Event Player.D[2] = Custom String("current configuration: Assimilator (Tenacity)");
  • Create Progress Bar HUD Text(Event Player, Event Player.R, Event Player.D[Event Player.F], Top, 10, Color(Sky Blue), Color(
  • Sky Blue), Visible To Values and Color, Default Visibility);
  • Event Player.Effects[0] = Last Text ID;
  • Event Player.R = 100;
  • }
  • }
  • rule("Bastion set ability 1 disallowed")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Event Player.F != 0;
  • }
  • actions
  • {
  • Disallow Button(Event Player, Button(Ability 1));
  • Wait(0.500, Ignore Condition);
  • Loop If Condition Is True;
  • Allow Button(Event Player, Button(Ability 1));
  • }
  • }
  • rule("Bastion set configuration: Sentry")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Event Player.PlayerUpgrades[12] > (Event Player.PlayerUpgrades[10] || Event Player.PlayerUpgrades[11]);
  • }
  • actions
  • {
  • Allow Button(Event Player, Button(Ability 1));
  • Event Player.PlayerStats[12] = Event Player.PlayerStats[12] + 10;
  • Event Player.F = 0;
  • Wait Until(Event Player.PlayerUpgrades[12] <= (Event Player.PlayerUpgrades[10] || Event Player.PlayerUpgrades[11]), 9999);
  • Event Player.PlayerStats[12] = Event Player.PlayerStats[12] - 10;
  • }
  • }
  • rule("Bastion set configuration: Tank")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Event Player.PlayerUpgrades[10] > (Event Player.PlayerUpgrades[11] || Event Player.PlayerUpgrades[12]);
  • }
  • actions
  • {
  • Event Player.PlayerStats[10] = Event Player.PlayerStats[10] + 10;
  • Event Player.F = 1;
  • Wait Until(Event Player.PlayerUpgrades[10] <= (Event Player.PlayerUpgrades[11] || Event Player.PlayerUpgrades[12]), 9999);
  • Event Player.PlayerStats[10] = Event Player.PlayerStats[10] - 10;
  • }
  • }
  • rule("Bastion set configuration: Assimilator")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Event Player.PlayerUpgrades[11] > (Event Player.PlayerUpgrades[12] || Event Player.PlayerUpgrades[10]);
  • }
  • actions
  • {
  • Event Player.PlayerStats[0] += 5;
  • Event Player.PlayerStats[11] = Event Player.PlayerStats[11] + 10;
  • Event Player.F = 2;
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, Event Player.PlayerStats[0]);
  • Wait Until(Event Player.PlayerUpgrades[11] <= (Event Player.PlayerUpgrades[12] || Event Player.PlayerUpgrades[10]), 9999);
  • Event Player.PlayerStats[11] = Event Player.PlayerStats[11] - 10;
  • Event Player.PlayerStats[0] -= 5;
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, Event Player.PlayerStats[0]);
  • }
  • }
  • rule("bastion configuration: sentry ability 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Is Using Ability 1(Event Player) == True;
  • }
  • actions
  • {
  • Stop Chasing Player Variable(Event Player, R);
  • Wait(0.016, Ignore Condition);
  • Chase Player Variable At Rate(Event Player, R, 0, 12.500, Destination and Rate);
  • Event Player.CritWait = 0.600;
  • Event Player.OnHitScaling = 0.100;
  • Wait(0.016, Ignore Condition);
  • Wait Until(Event Player.R == 0 || Is In Alternate Form(Event Player) == False, 10);
  • Skip If(Is In Alternate Form(Event Player) == False, 3);
  • Start Holding Button(Event Player, Button(Ability 1));
  • Wait(0.016, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Ability 1));
  • Event Player.CritWait = 0.400;
  • Event Player.OnHitScaling = 0.300;
  • Chase Player Variable At Rate(Event Player, R, 100, 15, Destination and Rate);
  • }
  • }
  • rule("Bastion disallow ability 1 resource too low")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • disabled Global.MatchStatus == 1;
  • Event Player.F == 0;
  • Event Player.R < 30;
  • Event Player.CritWait == 0.400;
  • }
  • actions
  • {
  • Set Ability 1 Enabled(Event Player, False);
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • Set Ability 1 Enabled(Event Player, True);
  • }
  • }
  • rule("bastion configuration: tank ability 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Ability 1)) == True;
  • Event Player.R == 100;
  • Event Player.F == 1;
  • Has Status(Event Player, Hacked) == False;
  • Has Status(Event Player, Knocked Down) == False;
  • Has Status(Event Player, Asleep) == False;
  • Has Status(Event Player, Frozen) == False;
  • Has Status(Event Player, Stunned) == False;
  • Is Button Held(Event Player, Button(Ultimate)) == False;
  • }
  • actions
  • {
  • Set Ultimate Ability Enabled(Event Player, True);
  • Wait(0.016, Ignore Condition);
  • Set Ultimate Charge(Event Player, 100);
  • Wait(0.016, Ignore Condition);
  • Start Holding Button(Event Player, Button(Ultimate));
  • }
  • }
  • rule("bastion configuration: tank ability 1 - 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Is Using Ultimate(Event Player) == True;
  • }
  • actions
  • {
  • Stop Chasing Player Variable(Event Player, R);
  • Wait(0.016, Ignore Condition);
  • Chase Player Variable At Rate(Event Player, R, 0, 12.500, Destination and Rate);
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1] - 35);
  • Event Player.CritWait = 0.016;
  • Stop Holding Button(Event Player, Button(Ultimate));
  • Wait(0.100, Ignore Condition);
  • Wait Until(Is Using Ultimate(Event Player) == False, 10);
  • Wait(0.100, Ignore Condition);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Event Player.CritWait = 0.500;
  • Chase Player Variable At Rate(Event Player, R, 100, 20, Destination and Rate);
  • }
  • }
  • rule("bastion configuration: assimilator ability 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Ability 1)) == True;
  • Event Player.R > 30;
  • Event Player.F == 2;
  • Has Status(Event Player, Hacked) == False;
  • Has Status(Event Player, Knocked Down) == False;
  • Has Status(Event Player, Asleep) == False;
  • Has Status(Event Player, Frozen) == False;
  • Has Status(Event Player, Stunned) == False;
  • }
  • actions
  • {
  • Set Secondary Fire Enabled(Event Player, True);
  • Wait(0.016, Ignore Condition);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait Until(Is Button Held(Event Player, Button(Ability 1)) == False || Event Player.R <= 0, 10);
  • Set Secondary Fire Enabled(Event Player, False);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("bastion configuration: assimilator ability 1 - 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Is Firing Secondary(Event Player) == True;
  • }
  • actions
  • {
  • Stop Chasing Player Variable(Event Player, R);
  • Event Player.PlayerStats[6] += 50;
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5] + 20);
  • Wait(0.016, Ignore Condition);
  • Chase Player Variable At Rate(Event Player, R, 0, 20, Destination and Rate);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Wait(0.016, Ignore Condition);
  • Wait Until(Is Firing Secondary(Event Player) == False, 10);
  • Wait(0.016, Ignore Condition);
  • Stop Chasing Player Variable(Event Player, R);
  • Event Player.PlayerStats[6] -= 50;
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Wait(0.016, Ignore Condition);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Wait(0.500, Ignore Condition);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Chase Player Variable At Rate(Event Player, R, 100, 15, Destination and Rate);
  • }
  • }
  • rule("Bastion configuration: assimilator absorb damage")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Is Firing Secondary(Event Player) == True;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Ring Explosion, Color(Sky Blue), Position Of(Event Player), 4);
  • Play Effect(All Players(All Teams), Debuff Impact Sound, Color(Sky Blue), Position Of(Event Player), 25);
  • Small Message(Event Player, Custom String("Damage absorbed!"));
  • Event Player.O[0] += Event Damage * 0.040;
  • Event Player.O[1] = 20;
  • Wait(0.016, Ignore Condition);
  • Event Player.PlayerStats[12] = Event Player.PlayerStats[12] + Event Player.O[0];
  • Wait(2, Restart When True);
  • Event Player.O[0] = 0;
  • Event Player.O[1] = 0;
  • Event Player.PlayerStats[12] = 5 + Event Player.PlayerUpgrades[12];
  • }
  • }
  • rule("Bastion configuration: assimilator deplete absorbed damage")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Event Player.O[1] > 0;
  • }
  • actions
  • {
  • Skip If(Event Player.O[0] <= 0, 2);
  • Event Player.O[0] -= 2;
  • Event Player.O[1] -= 1;
  • Wait(0.016, Ignore Condition);
  • Skip If(Event Player.O[0] <= 0, 1);
  • Event Player.PlayerStats[12] = Event Player.PlayerStats[12] + Event Player.O[0];
  • }
  • }
  • rule("Bastion aborbed damage doesn't go under 0")
  • {
  • event
  • {
  • Player Died;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • (Event Player.O[0] < 0 || Event Player.O[1] < 0) == True;
  • }
  • actions
  • {
  • Event Player.O[0] = 0;
  • Event Player.O[1] = 0;
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bastion lose charge upon death")
  • {
  • event
  • {
  • Player Died;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Event Player.O[1] > 0;
  • }
  • actions
  • {
  • Event Player.O[0] = 0;
  • Event Player.O[1] = 0;
  • }
  • }
  • rule("Bastion ability 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Ability 2)) == True;
  • Event Player.C <= 0;
  • Has Status(Event Player, Hacked) == False;
  • Has Status(Event Player, Knocked Down) == False;
  • Has Status(Event Player, Asleep) == False;
  • Has Status(Event Player, Frozen) == False;
  • Has Status(Event Player, Stunned) == False;
  • Global.MatchStatus == 1;
  • Event Player.B == False;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Ring Explosion, Color(Sky Blue), Position Of(Event Player), 40);
  • Play Effect(All Players(All Teams), Debuff Impact Sound, Color(Sky Blue), Position Of(Event Player), 125);
  • Small Message(Event Player, Custom String("Scanning environment..."));
  • Wait(0.100, Ignore Condition);
  • Event Player.B = True;
  • Event Player.C = 14;
  • Chase Player Variable At Rate(Event Player, C, 0, 1, Destination and Rate);
  • Event Player.K = 6;
  • Chase Player Variable At Rate(Event Player, K, 0, 1, Destination and Rate);
  • Call Subroutine(Sub8);
  • Event Player.B = False;
  • Event Player.K = 0;
  • Play Effect(All Players(All Teams), Debuff Impact Sound, Color(White), Event Player, 50);
  • }
  • }
  • rule("Bastion ability 2 - 2")
  • {
  • event
  • {
  • Subroutine;
  • Sub8;
  • }
  • actions
  • {
  • Wait(0.500, Ignore Condition);
  • Play Effect(All Players(All Teams), Ring Explosion, Color(Sky Blue), Position Of(Event Player), 3);
  • Play Effect(All Players(All Teams), Debuff Impact Sound, Color(White), Event Player, 10);
  • Loop If(Event Player.K > 0);
  • }
  • }
  • rule("Bastion ability 2 - 3")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is True For Any(Filtered Array(Players On Hero(Hero(Bastion), All Teams), Current Array Element.B == True), Distance Between(
  • Position Of(Current Array Element), Position Of(Event Player)) <= 20) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Skip If(Entity Exists(Event Player.MiscIDs[2]), 4);
  • Create Icon(Filtered Array(Players On Hero(Hero(Bastion), All Teams), Current Array Element.B == True && Distance Between(
  • Position Of(Current Array Element), Position Of(Event Player)) <= 20), Event Player, Eye, Visible To and Position, Color(
  • Sky Blue), True);
  • Event Player.MiscIDs[2] = Last Created Entity;
  • Create In-World Text(Filtered Array(Players On Hero(Hero(Bastion), All Teams), Current Array Element.B == True && Distance Between(
  • Position Of(Current Array Element), Position Of(Event Player)) <= 20), String("{0}: {1}", Custom String("Class"),
  • Hero Icon String(Hero Of(Event Player))), Event Player, 1.250, Do Not Clip, Visible To Position and String, Color(Sky Blue),
  • Default Visibility);
  • Event Player.MiscIDs[3] = Last Created Entity;
  • Wait(0.500, Ignore Condition);
  • Loop If Condition Is True;
  • Destroy Icon(Event Player.MiscIDs[2]);
  • Event Player.MiscIDs[2] = 0;
  • Destroy Icon(Event Player.MiscIDs[3]);
  • Event Player.MiscIDs[3] = 0;
  • }
  • }
  • rule("Bastion stop scanning upon death")
  • {
  • event
  • {
  • Player Died;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Event Player.B == True;
  • }
  • actions
  • {
  • Event Player.R = 0;
  • }
  • }
  • rule("Zen init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Zenyatta;
  • }
  • conditions
  • {
  • disabled Event Player.ClassID == 11;
  • }
  • actions
  • {
  • Event Player.PlayerStats[0] = 87.500 + First Of(Event Player.PlayerUpgrades);
  • Event Player.PlayerStats[1] = 83.333 + Event Player.PlayerUpgrades[1];
  • Event Player.PlayerStats[2] = 100 + Event Player.PlayerUpgrades[2];
  • Event Player.PlayerStats[3] = 92.500 + Event Player.PlayerUpgrades[3];
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 5 + Event Player.PlayerUpgrades[5];
  • Event Player.PlayerStats[6] = Event Player.PlayerUpgrades[6];
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Ultimate Ability Enabled(Event Player, True);
  • Set Secondary Fire Enabled(Event Player, True);
  • Set Primary Fire Enabled(Event Player, True);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(Zenyatta)), Custom String("Monk")), Null, String(
  • "{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Custom Color(240, 190,
  • 25, 255), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • Create HUD Text(Event Player, Icon String(Skull), Custom String("Deadly precision"), Custom String(
  • "Passive: hitting three shots on the same target makes them vulnerable."), Left, 1, Custom Color(240, 190, 25, 255),
  • Custom Color(240, 190, 25, 255), Custom Color(240, 190, 25, 255), Visible To and String, Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • Create HUD Text(Event Player, Icon String(Eye), Custom String("Sonic shot"), String("{0}: {1}", Custom String(
  • "Cooldown ability 1"), Event Player.C), Left, 2, Custom Color(240, 190, 25, 255), Custom Color(240, 190, 25, 255),
  • Custom Color(240, 190, 25, 255), Visible To and String, Default Visibility);
  • Event Player.Huds[2] = Last Text ID;
  • Event Player.PlayerStats[7] = Event Player.PlayerUpgrades[7];
  • Event Player.PlayerStats[8] = Event Player.PlayerUpgrades[8];
  • Event Player.PlayerStats[9] = Event Player.PlayerUpgrades[9];
  • Event Player.PlayerStats[10] = Event Player.PlayerUpgrades[10];
  • Event Player.PlayerStats[11] = Event Player.PlayerUpgrades[11];
  • Event Player.PlayerStats[12] = Event Player.PlayerUpgrades[12];
  • Event Player.CritWait = 0.016;
  • Event Player.OnHitScaling = 0.750;
  • }
  • }
  • rule("Zen passive stacks")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Attacker) == Hero(Zenyatta);
  • Attacker.Zpassive[Slot Of(Event Player)] < 3;
  • }
  • actions
  • {
  • Attacker.Zpassive[Slot Of(Victim)] += 1;
  • Skip If(Event Player.MiscIDs[5] != 0, 2);
  • Create In-World Text(Filtered Array(Players On Hero(Hero(Zenyatta), All Teams), Current Array Element.Zpassive[Slot Of(
  • Event Player)] > 0), Custom String("O"), Eye Position(Event Player) + Cross Product(Vector(0, 1, 0), Direction Towards(
  • Eye Position(Event Player), Eye Position(Filtered Array(Players On Hero(Hero(Zenyatta), All Teams),
  • Current Array Element.Zpassive[Slot Of(Event Player)] > 0)))), 1.750, Clip Against Surfaces, Visible To Position and String,
  • Custom Color(240, 190, 25, 255), Default Visibility);
  • Event Player.MiscIDs[5] = Last Text ID;
  • Skip If(Event Player.MiscIDs[6] != 0 || Is True For Any(Players On Hero(Hero(Zenyatta), All Teams),
  • Current Array Element.Zpassive[Slot Of(Event Player)] < 2) == True, 2);
  • Create In-World Text(Filtered Array(Players On Hero(Hero(Zenyatta), All Teams), Current Array Element.Zpassive[Slot Of(
  • Event Player)] > 0), Custom String("O"), Eye Position(Event Player) + Cross Product(Vector(0, 1, 0), Direction Towards(
  • Eye Position(Event Player), Eye Position(Filtered Array(Players On Hero(Hero(Zenyatta), All Teams),
  • Current Array Element.Zpassive[Slot Of(Event Player)] > 0)))) * -1, 1.750, Clip Against Surfaces,
  • Visible To Position and String, Custom Color(240, 190, 25, 255), Default Visibility);
  • Event Player.MiscIDs[6] = Last Text ID;
  • Skip If(Event Player.MiscIDs[7] != 0 || Is True For Any(Players On Hero(Hero(Zenyatta), All Teams),
  • Current Array Element.Zpassive[Slot Of(Event Player)] < 3) == True, 2);
  • Create In-World Text(Filtered Array(Players On Hero(Hero(Zenyatta), All Teams), Current Array Element.Zpassive[Slot Of(
  • Event Player)] > 0), Custom String("O"), Eye Position(Event Player) + Vector(0, 1, 0), 2.250, Clip Against Surfaces,
  • Visible To Position and String, Custom Color(240, 220, 90, 255), Default Visibility);
  • Event Player.MiscIDs[7] = Last Text ID;
  • Skip If(Attacker.Zpassive[Slot Of(Event Player)] >= 3, 9);
  • Wait(1, Restart When True);
  • Skip If(Attacker.Zpassive[Slot Of(Event Player)] >= 3, 7);
  • Attacker.Zpassive[Slot Of(Event Player)] = 0;
  • Destroy In-World Text(Event Player.MiscIDs[5]);
  • Event Player.MiscIDs[5] = 0;
  • Destroy In-World Text(Event Player.MiscIDs[6]);
  • Event Player.MiscIDs[6] = 0;
  • Destroy In-World Text(Event Player.MiscIDs[7]);
  • Event Player.MiscIDs[7] = 0;
  • }
  • }
  • rule("Zen passive stack. 3 effect")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Attacker) == Hero(Zenyatta);
  • Attacker.Zpassive[Slot Of(Event Player)] >= 2;
  • }
  • actions
  • {
  • Skip If(Attacker.Zpassive[Slot Of(Event Player)] < 3, 18);
  • Play Effect(All Players(All Teams), Bad Explosion, Custom Color(240, 220, 90, 255), Eye Position(Event Player) - Vector(0, 1, 0),
  • 1.250);
  • Skip If(Event Player.MiscIDs[8] != 0, 5);
  • Small Message(Event Player, String("{0} {1} {2}", Hero Icon String(Hero(Zenyatta)), Custom String("vulnerable!"), Hero Icon String(
  • Hero(Zenyatta))));
  • Start Damage Modification(Event Player, Filtered Array(Players On Hero(Hero(Zenyatta), All Teams),
  • Current Array Element.Zpassive[Slot Of(Event Player)] >= 3), 120, Receivers Damagers and Damage Percent);
  • Event Player.MiscIDs[8] = Last Damage Modification ID;
  • Play Effect(All Players(All Teams), Bad Pickup Effect, Custom Color(240, 220, 90, 255), Eye Position(Event Player), 1);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Custom Color(240, 220, 90, 255), Event Player, 100);
  • Wait(4, Restart When True);
  • Attacker.Zpassive[Slot Of(Event Player)] = 0;
  • Stop Damage Modification(Event Player.MiscIDs[8]);
  • Event Player.MiscIDs[8] = 0;
  • Small Message(Event Player, String("{0} {1} {2}", Hero Icon String(Hero(Zenyatta)), Custom String("vulnerable expired."),
  • Hero Icon String(Hero(Zenyatta))));
  • Destroy In-World Text(Event Player.MiscIDs[5]);
  • Event Player.MiscIDs[5] = 0;
  • Destroy In-World Text(Event Player.MiscIDs[6]);
  • Event Player.MiscIDs[6] = 0;
  • Destroy In-World Text(Event Player.MiscIDs[7]);
  • Event Player.MiscIDs[7] = 0;
  • }
  • }
  • rule("Zen passive deplete on death")
  • {
  • event
  • {
  • Player Died;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is True For Any(Players On Hero(Hero(Zenyatta), All Teams), Current Array Element.Zpassive[Slot Of(Event Player)]) > 0;
  • }
  • actions
  • {
  • Filtered Array(Players On Hero(Hero(Zenyatta), All Teams), Current Array Element.Zpassive[Slot Of(Event Player)] > 0)
  • .Zpassive[Slot Of(Event Player)] = 0;
  • }
  • }
  • rule("Zen ability 1 equip")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Zenyatta;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Ability 1)) == True;
  • Event Player.C <= 0;
  • Has Status(Event Player, Hacked) == False;
  • Has Status(Event Player, Knocked Down) == False;
  • Has Status(Event Player, Asleep) == False;
  • Has Status(Event Player, Frozen) == False;
  • Has Status(Event Player, Stunned) == False;
  • Is Reloading(Event Player) == False;
  • Is Using Ultimate(Event Player) == False;
  • Is Meleeing(Event Player) == False;
  • Is Firing Secondary(Event Player) == False;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Ring Explosion, Custom Color(240, 190, 25, 255), Position Of(Event Player), 3);
  • Play Effect(All Players(All Teams), Buff Impact Sound, Color(Yellow), Event Player, 50);
  • Small Message(Event Player, Custom String("Sonic shot equiped."));
  • Wait(0.200, Ignore Condition);
  • Event Player.D = 1;
  • Call Subroutine(Zsh1);
  • }
  • }
  • rule("Zen ability 1 equip sub")
  • {
  • event
  • {
  • Subroutine;
  • Zsh1;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Ring Explosion, Custom Color(240, 190, 25, 255), Position Of(Event Player), 2);
  • Wait(0.500, Ignore Condition);
  • Loop If(Event Player.D == 1);
  • }
  • }
  • rule("Zen ability 1 unequip")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Zenyatta;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Ability 1)) == True;
  • Event Player.C == Null;
  • Has Status(Event Player, Hacked) == False;
  • Has Status(Event Player, Knocked Down) == False;
  • Has Status(Event Player, Asleep) == False;
  • Has Status(Event Player, Frozen) == False;
  • Has Status(Event Player, Stunned) == False;
  • Event Player.D == 1;
  • Is Firing Secondary(Event Player) == False;
  • }
  • actions
  • {
  • Event Player.D = Null;
  • Play Effect(All Players(All Teams), Debuff Impact Sound, Color(Yellow), Event Player, 40);
  • Small Message(Event Player, Custom String("Sonic shot unequiped."));
  • }
  • }
  • rule("Zen ability 1 track shot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Zenyatta;
  • }
  • conditions
  • {
  • Event Player.D == 1;
  • (Is Firing Primary(Event Player) || Is Firing Secondary(Event Player)) == True;
  • Has Status(Event Player, Hacked) == False;
  • Has Status(Event Player, Knocked Down) == False;
  • Has Status(Event Player, Asleep) == False;
  • Has Status(Event Player, Frozen) == False;
  • Has Status(Event Player, Stunned) == False;
  • }
  • actions
  • {
  • Event Player.N = Eye Position(Event Player);
  • Event Player.P = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(Event Player)
  • * 500, Null, Event Player, True);
  • Event Player.M = Facing Direction Of(Event Player);
  • Skip If(Is Firing Primary(Event Player) == True, 3);
  • Wait(0.016, Ignore Condition);
  • Skip If(Is Using Ultimate(Event Player) == True || Has Status(Event Player, Hacked) || Has Status(Event Player, Knocked Down)
  • || Has Status(Event Player, Asleep) || Has Status(Event Player, Frozen) || Has Status(Event Player, Stunned), 8);
  • Loop If(Is Firing Secondary(Event Player) == True);
  • Event Player.F = 6;
  • Chase Player Variable At Rate(Event Player, F, False, True, Destination and Rate);
  • Create Effect(All Players(All Teams), Bad Aura, Custom Color(80, 240, 240, 255), Event Player.N, 0.125,
  • Visible To Position and Radius);
  • Event Player.Effects[0] = Last Created Entity;
  • Chase Player Variable At Rate(Event Player, N, Event Player.P, 90 * Event Player.PlayerStats[3] * 0.010, Destination and Rate);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Color(White), Event Player, 50);
  • Event Player.D = 2;
  • Event Player.C = 12;
  • Chase Player Variable At Rate(Event Player, C, False, True, Destination and Rate);
  • Skip If(Is Firing Primary(Event Player) == True, 4);
  • Skip If(Is Using Ultimate(Event Player) == True || Has Status(Event Player, Hacked) || Has Status(Event Player, Knocked Down)
  • || Has Status(Event Player, Asleep) || Has Status(Event Player, Frozen) || Has Status(Event Player, Stunned), 1);
  • Skip(2);
  • Event Player.D = 0;
  • Skip(10);
  • Call Subroutine(Zsh2);
  • Event Player.F = 0;
  • Event Player.P = 0;
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Custom Color(80, 240, 240, 255), Event Player.N, 100);
  • Play Effect(All Players(All Teams), Bad Explosion, Custom Color(80, 240, 240, 255), Event Player.N, 1);
  • Play Effect(All Players(All Teams), Ring Explosion, Custom Color(15, 235, 240, 255), Event Player.N, 20);
  • Wait(0.016, Ignore Condition);
  • Event Player.F = 4;
  • Chase Player Variable At Rate(Event Player, F, False, True, Destination and Rate);
  • Call Subroutine(Zsh3);
  • Destroy Effect(Event Player.Effects[0]);
  • Event Player.F = 0;
  • Event Player.P = 0;
  • Event Player.N = 0;
  • Event Player.D = 0;
  • }
  • }
  • rule("Zen ability 1 shot fired sub")
  • {
  • event
  • {
  • Subroutine;
  • Zsh2;
  • }
  • actions
  • {
  • Wait(0.016, Ignore Condition);
  • Skip If(Event Player.F <= 0, 1);
  • Loop If(Distance Between(Event Player.N, Ray Cast Hit Position(Event Player.N, Event Player.N + Event Player.M * 1.500, Null,
  • Event Player, True)) >= 1.500);
  • Stop Chasing Player Variable(Event Player, N);
  • Stop Chasing Player Variable(Event Player, F);
  • }
  • }
  • rule("Zen ability 1 revealing zone sub")
  • {
  • event
  • {
  • Subroutine;
  • Zsh3;
  • }
  • actions
  • {
  • Wait(0.500, Ignore Condition);
  • Event Player.K = Filtered Array(All Living Players(All Teams), Distance Between(Eye Position(Current Array Element),
  • Event Player.N) <= 10);
  • Play Effect(All Players(All Teams), Ring Explosion, Custom Color(15, 235, 240, 255), Event Player.N, 3);
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Color(White), Event Player.N, 10);
  • Loop If(Event Player.F > 0);
  • Event Player.K = 0;
  • }
  • }
  • rule("Zen ability 1 reveal effect")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is True For Any(Players On Hero(Hero(Zenyatta), All Teams), Array Contains(Current Array Element.K, Event Player) == True) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Skip If(Entity Exists(Event Player.MiscIDs[9]), 4);
  • Create Icon(Filtered Array(Players On Hero(Hero(Zenyatta), All Teams), Array Contains(Current Array Element.K, Event Player)
  • == True), Event Player, Eye, Visible To and Position, Custom Color(240, 190, 25, 255), True);
  • Event Player.MiscIDs[9] = Last Created Entity;
  • Create In-World Text(Filtered Array(Players On Hero(Hero(Zenyatta), All Teams), Array Contains(Current Array Element.K,
  • Event Player) == True), String("{0}: {1}", Custom String("Class"), Hero Icon String(Hero Of(Event Player))), Event Player,
  • 1.250, Do Not Clip, Visible To Position and String, Custom Color(240, 190, 25, 255), Default Visibility);
  • Event Player.MiscIDs[10] = Last Created Entity;
  • Wait(0.500, Ignore Condition);
  • Loop If Condition Is True;
  • Destroy Icon(Event Player.MiscIDs[9]);
  • Event Player.MiscIDs[9] = 0;
  • Destroy Icon(Event Player.MiscIDs[10]);
  • Event Player.MiscIDs[10] = 0;
  • }
  • }
  • rule("Zen player hit with sonic shot")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • Zenyatta;
  • }
  • conditions
  • {
  • Event Player.D == 2;
  • Distance Between(Eye Position(Victim), Event Player.N) <= 4;
  • }
  • actions
  • {
  • Skip If(Event Player.D == 3, 2);
  • Event Player.F = 0;
  • Event Player.D = 3;
  • Event Player.N = Eye Position(Victim) - Vector(0, 1, 0);
  • Wait(0.100, Ignore Condition);
  • Loop If(Event Player.F > 0);
  • }
  • }
  • rule("Orisa init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Orisa;
  • }
  • conditions
  • {
  • Event Player.ClassID == 9;
  • }
  • actions
  • {
  • Event Player.PlayerStats[0] = 55.556 + First Of(Event Player.PlayerUpgrades);
  • Event Player.PlayerStats[1] = 75 + Event Player.PlayerUpgrades[1];
  • Event Player.PlayerStats[2] = 100 + Event Player.PlayerUpgrades[2];
  • Event Player.PlayerStats[3] = 115 + Event Player.PlayerUpgrades[3];
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 5 + Event Player.PlayerUpgrades[5];
  • Event Player.PlayerStats[6] = Event Player.PlayerUpgrades[6];
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, True);
  • Set Primary Fire Enabled(Event Player, True);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(Orisa)), Custom String("Golem")), Null, String(
  • "{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Custom Color(160, 230,
  • 5, 255), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • Create HUD Text(Event Player, Icon String(Heart), Custom String("Second Wind"), Custom String(
  • "Passive: Start healing yourself when taking damage. Healing increases per instance of taking damage"), Left, 1, Custom Color(
  • 160, 230, 5, 255), Custom Color(160, 230, 5, 255), Custom Color(160, 230, 5, 255), Visible To and String, Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • Create HUD Text(Event Player, Icon String(Stop), Custom String("HALT!"), Custom String(
  • "Secondary fire - Removes all upgrades from enemies inside halt's radius."), Left, 2, Custom Color(160, 230, 5, 255),
  • Custom Color(160, 230, 5, 255), Custom Color(160, 230, 5, 255), Visible To and String, Default Visibility);
  • Event Player.Huds[2] = Last Text ID;
  • Event Player.PlayerStats[7] = Event Player.PlayerUpgrades[7];
  • Event Player.PlayerStats[8] = Event Player.PlayerUpgrades[8];
  • Event Player.PlayerStats[9] = Event Player.PlayerUpgrades[9];
  • Event Player.PlayerStats[10] = Event Player.PlayerUpgrades[10];
  • Event Player.PlayerStats[11] = Event Player.PlayerUpgrades[11];
  • Event Player.PlayerStats[12] = Event Player.PlayerUpgrades[12];
  • Event Player.CritWait = 0.500;
  • Event Player.OnHitScaling = 0.150;
  • }
  • }
  • rule("Orisa Passive")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • Orisa;
  • }
  • conditions
  • {
  • Has Status(Event Player, Hacked) == False;
  • Has Status(Event Player, Frozen) == False;
  • }
  • actions
  • {
  • Skip If(Event Player.K >= 2, 1);
  • Event Player.K += 0.400;
  • Start Heal Over Time(Event Player, Event Player, 3,
  • Event Damage * 0.050 * Event Player.K + Event Damage * 0.050 * Event Player.K * Event Player.PlayerStats[5] * 0.005);
  • Wait(3, Restart When True);
  • Event Player.K = 0;
  • }
  • }
  • rule("Orisa track halt")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Orisa;
  • }
  • conditions
  • {
  • Is Firing Secondary(Event Player) == True;
  • Event Player.D == 0;
  • }
  • actions
  • {
  • Event Player.N = Eye Position(Event Player);
  • Event Player.P = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(Event Player)
  • * 500, Null, Event Player, True);
  • Event Player.M = Facing Direction Of(Event Player);
  • Wait(0.016, Abort When False);
  • Loop If Condition Is True;
  • Chase Player Variable At Rate(Event Player, N, Event Player.P, 25 * Event Player.PlayerStats[3] * 0.010, Destination and Rate);
  • Event Player.D = 1;
  • Call Subroutine(ORhalt1);
  • Wait(0.350, Ignore Condition);
  • Event Player.P = 0;
  • Create Effect(All Players(All Teams), Good Aura, Custom Color(160, 230, 5, 255), Event Player.N, 1,
  • Visible To Position and Radius);
  • Event Player.Effects[0] = Last Created Entity;
  • Create Effect(All Players(All Teams), Orb, Custom Color(210, 255, 15, 255), Event Player.N, 3, Visible To Position and Radius);
  • Event Player.Effects[1] = Last Created Entity;
  • Create Effect(All Players(All Teams), Beacon Sound, Color(White), Event Player.N, 1000, Visible To Position and Radius);
  • Event Player.Effects[2] = Last Created Entity;
  • Create Effect(All Players(All Teams), Sparkles, Custom Color(160, 230, 5, 255), Event Player.N - Vector(0, 1, 0), 5,
  • Visible To Position and Radius);
  • Event Player.Effects[3] = Last Created Entity;
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Color(White), Event Player.N, 100);
  • Play Effect(All Players(All Teams), Bad Explosion, Custom Color(210, 255, 15, 255), Event Player.N, 5);
  • Play Effect(All Players(All Teams), Ring Explosion, Custom Color(160, 230, 5, 255), Event Player.N, 12);
  • Wait(0.016, Ignore Condition);
  • Event Player.R = 4;
  • Chase Player Variable At Rate(Event Player, R, False, True, Destination and Rate);
  • disabled Event Player.K = Filtered Array(All Living Players(All Teams), Distance Between(Eye Position(Current Array Element),
  • Event Player.N) <= 5 && Is In Line of Sight(Event Player.N, Eye Position(Current Array Element), Barriers Do Not Block LOS));
  • Wait(0.016, Ignore Condition);
  • disabled Event Player.K = Remove From Array(Event Player.K, Event Player);
  • Call Subroutine(ORhalt2);
  • Destroy Effect(Event Player.Effects[0]);
  • Destroy Effect(Event Player.Effects[1]);
  • Destroy Effect(Event Player.Effects[2]);
  • Destroy Effect(Event Player.Effects[3]);
  • Event Player.P = 0;
  • Event Player.N = 0;
  • Event Player.D = 0;
  • Event Player.F = 0;
  • disabled Event Player.K = 0;
  • }
  • }
  • rule("Orisa halt fired sub")
  • {
  • event
  • {
  • Subroutine;
  • ORhalt1;
  • }
  • actions
  • {
  • Wait(0.016, Ignore Condition);
  • Skip If(Event Player.D == 0, 1);
  • Loop If(Distance Between(Event Player.N, Ray Cast Hit Position(Event Player.N, Event Player.N + Event Player.M * 1.500, Null,
  • Event Player, True)) >= 0.750);
  • Wait(0.100, Ignore Condition);
  • Stop Chasing Player Variable(Event Player, N);
  • }
  • }
  • rule("Orisa halt enable second cast")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Orisa;
  • }
  • conditions
  • {
  • disabled Is Button Held(Event Player, Button(Secondary Fire)) == True;
  • Event Player.D == 1;
  • }
  • actions
  • {
  • Wait Until(Is Button Held(Event Player, Button(Secondary Fire)) == False, 9999);
  • Event Player.D = 2;
  • }
  • }
  • rule("Orisa halt second cast")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Orisa;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Secondary Fire)) == True;
  • Event Player.D == 2;
  • }
  • actions
  • {
  • Event Player.D = 0;
  • Wait(0.100, Ignore Condition);
  • Stop Chasing Player Variable(Event Player, N);
  • }
  • }
  • rule("Orisa Halt zone sub")
  • {
  • event
  • {
  • Subroutine;
  • ORhalt2;
  • }
  • actions
  • {
  • Wait(0.100, Ignore Condition);
  • Event Player.F = Filtered Array(All Living Players(All Teams), Distance Between(Eye Position(Current Array Element),
  • Event Player.N) <= 5 && Is In Line of Sight(Event Player.N, Eye Position(Current Array Element), Barriers Do Not Block LOS)
  • && Current Array Element != Event Player);
  • Loop If(Event Player.R > 0);
  • Event Player.F = 0;
  • }
  • }
  • rule("Orisa Halt zone effect")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is True For Any(Players On Hero(Hero(Orisa), All Teams), Array Contains(Current Array Element.F, Event Player) == True) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Small Message(Event Player, String("{0} {1} {2}", Hero Icon String(Hero(Orisa)), Custom String("Upgrades nullified!"),
  • Hero Icon String(Hero(Orisa))));
  • Skip If(Entity Exists(Event Player.MiscIDs[12]), 2);
  • Create Effect(All Players(All Teams), Sparkles, Custom Color(210, 255, 15, 255), Event Player, 2, Visible To Position and Radius);
  • Event Player.MiscIDs[12] = Last Created Entity;
  • Set Move Speed(Event Player, Event Player.PlayerStats[2] - Event Player.PlayerUpgrades[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3] - Event Player.PlayerUpgrades[3]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5] - Event Player.PlayerUpgrades[5]);
  • Set Damage Received(Event Player, 100);
  • disabled Skip If(Is True For Any(Players On Hero(Hero(Orisa), All Teams), Array Contains(Current Array Element.K, Event Player) == False),
  • 1);
  • disabled Set Status(Event Player, Null, Hacked, 4);
  • Wait Until(Is True For All(Players On Hero(Hero(Orisa), All Teams), Array Contains(Current Array Element.F, Event Player) == False)
  • == True || Is Dead(Event Player), 4);
  • Wait(0.700, Restart When True);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2] + Event Player.PlayerUpgrades[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3] + Event Player.PlayerUpgrades[3]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5] + Event Player.PlayerUpgrades[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6] + Event Player.PlayerUpgrades[6]);
  • disabled Clear Status(Event Player, Hacked);
  • disabled Skip If(Is True For Any(Players On Hero(Hero(Orisa), All Teams), Array Contains(Current Array Element.K, Event Player) == True),
  • 1);
  • disabled Filtered Array(Players On Hero(Hero(Orisa), All Teams), Array Contains(Current Array Element.K, Event Player) == True)
  • .K = Remove From Array(Filtered Array(Players On Hero(Hero(Orisa), All Teams), Array Contains(Current Array Element.K,
  • Event Player) == True), Event Player);
  • Small Message(Event Player, String("{0} {1} {2}", Hero Icon String(Hero(Orisa)), Custom String("Upgrades returned"),
  • Hero Icon String(Hero(Orisa))));
  • Destroy Effect(Event Player.MiscIDs[12]);
  • }
  • }
  • rule("Mccree init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • McCree;
  • }
  • conditions
  • {
  • disabled Event Player.ClassID == 7;
  • }
  • actions
  • {
  • Event Player.PlayerStats[0] = 77.778 + First Of(Event Player.PlayerUpgrades);
  • Event Player.PlayerStats[1] = 75 + Event Player.PlayerUpgrades[1];
  • Event Player.PlayerStats[2] = 100 + Event Player.PlayerUpgrades[2];
  • Event Player.PlayerStats[3] = 100 + Event Player.PlayerUpgrades[3];
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 5 + Event Player.PlayerUpgrades[5];
  • Event Player.PlayerStats[6] = Event Player.PlayerUpgrades[6];
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Set Primary Fire Enabled(Event Player, True);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(McCree)), Custom String("Ranger")), Null, String(
  • "{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Custom Color(235, 70,
  • 0, 255), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • Create HUD Text(Event Player, Ability Icon String(Hero(McCree), Button(Ultimate)), Custom String("Lucky shot"), Custom String(
  • "Passive: after using an ability, gain a burst of damage on your next attack."), Left, 1, Custom Color(235, 70, 0, 255),
  • Custom Color(235, 70, 0, 255), Custom Color(235, 70, 0, 255), Visible To and String, Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • Event Player.PlayerStats[7] = Event Player.PlayerUpgrades[7];
  • Event Player.PlayerStats[8] = Event Player.PlayerUpgrades[8];
  • Event Player.PlayerStats[9] = Event Player.PlayerUpgrades[9];
  • Event Player.PlayerStats[10] = Event Player.PlayerUpgrades[10];
  • Event Player.PlayerStats[11] = Event Player.PlayerUpgrades[11];
  • Event Player.PlayerStats[12] = Event Player.PlayerUpgrades[12];
  • Event Player.CritWait = 0.016;
  • Event Player.OnHitScaling = 1;
  • }
  • }
  • rule("Mccree passive enable")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • McCree;
  • }
  • conditions
  • {
  • (Is Using Ability 1(Event Player) || Is Using Ability 2(Event Player)) == True;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Ring Explosion, Custom Color(240, 50, 5, 255), Event Player, 4);
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Color(White), Event Player, 50);
  • Skip If(Event Player.Effects != 0, 2);
  • Create Effect(All Players(All Teams), Sparkles, Custom Color(235, 70, 0, 255), Event Player, 1.500,
  • Visible To Position and Radius);
  • Event Player.Effects = Last Created Entity;
  • Small Message(Event Player, Custom String("Next attack deals bonus damage"));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1] * 1.250);
  • Event Player.B = True;
  • Event Player.R = 2;
  • Chase Player Variable At Rate(Event Player, R, 0, 1, Destination and Rate);
  • Call Subroutine(MCpassive);
  • Skip If(Event Player.B == False, 5);
  • Destroy Effect(Event Player.Effects);
  • Event Player.Effects = 0;
  • Event Player.B = False;
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Play Effect(All Players(All Teams), Debuff Impact Sound, Color(White), Event Player, 40);
  • Stop Chasing Player Variable(Event Player, R);
  • Event Player.R = 0;
  • }
  • }
  • rule("Mccree passive damage dealt")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • McCree;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Event Player.B == True;
  • Event Damage > 10 * Event Player.PlayerStats[1] * 1.250 * 0.010;
  • }
  • actions
  • {
  • Destroy Effect(Event Player.Effects);
  • Event Player.Effects = 0;
  • Event Player.B = False;
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Color(White), Event Player, 60);
  • Play Effect(All Players(All Teams), Ring Explosion, Custom Color(240, 50, 5, 255), Event Player, 4);
  • }
  • }
  • rule("Mccree passive sub")
  • {
  • event
  • {
  • Subroutine;
  • MCpassive;
  • }
  • actions
  • {
  • Wait(0.016, Ignore Condition);
  • Loop If(Event Player.R > 0 && Event Player.B == True);
  • }
  • }
  • rule("Mccree lose passive upon death")
  • {
  • event
  • {
  • Player Died;
  • All;
  • McCree;
  • }
  • conditions
  • {
  • Event Player.B == True;
  • }
  • actions
  • {
  • Event Player.B = False;
  • Destroy Effect(Event Player.Effects);
  • Event Player.Effects = 0;
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • }
  • }
  • rule("Sombra init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Sombra;
  • }
  • conditions
  • {
  • disabled Event Player.ClassID == 8;
  • }
  • actions
  • {
  • Event Player.PlayerStats[0] = 62.500 + First Of(Event Player.PlayerUpgrades);
  • Event Player.PlayerStats[1] = 85 + Event Player.PlayerUpgrades[1];
  • Event Player.PlayerStats[2] = 110 + Event Player.PlayerUpgrades[2];
  • Event Player.PlayerStats[3] = 120 + Event Player.PlayerUpgrades[3];
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 5 + Event Player.PlayerUpgrades[5];
  • Event Player.PlayerStats[6] = Event Player.PlayerUpgrades[6];
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, True);
  • Set Primary Fire Enabled(Event Player, True);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(Sombra)), Custom String("Thief")), Null, String(
  • "{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Custom Color(200, 70,
  • 255, 255), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • disabled Create HUD Text(Event Player, Icon String(Skull), Custom String("Oportunist"), Custom String(
  • "Passive: Deal extra damage to enemies below 50% health."), Left, 1, Custom Color(200, 70, 255, 255), Custom Color(200, 70,
  • 255, 255), Custom Color(200, 70, 255, 255), Visible To and String, Default Visibility);
  • disabled Event Player.Huds[1] = Last Text ID;
  • Create HUD Text(Event Player, Icon String(Bolt), Custom String("Kleptomancer's grasp"), Custom String(
  • "Passive - Steal some stats from enemies you've hacked."), Left, 2, Custom Color(200, 70, 255, 255), Custom Color(200, 70, 255,
  • 255), Custom Color(200, 70, 255, 255), Visible To and String, Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • Event Player.PlayerStats[7] = Event Player.PlayerUpgrades[7];
  • Event Player.PlayerStats[8] = Event Player.PlayerUpgrades[8];
  • Event Player.PlayerStats[9] = Event Player.PlayerUpgrades[9];
  • Event Player.PlayerStats[10] = Event Player.PlayerUpgrades[10];
  • Event Player.PlayerStats[11] = Event Player.PlayerUpgrades[11];
  • Event Player.PlayerStats[12] = Event Player.PlayerUpgrades[12];
  • Event Player.CritWait = 0.400;
  • Event Player.OnHitScaling = 0.150;
  • }
  • }
  • disabled rule("Sombra passive")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Sombra;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Hero Of(Event Player) == Hero(Sombra);
  • }
  • actions
  • {
  • Skip If(Event Player.D[0] != 0, 2);
  • Start Damage Modification(Filtered Array(All Players(All Teams), Normalized Health(Current Array Element) <= 0.500), Event Player,
  • 115, Receivers Damagers and Damage Percent);
  • Event Player.D[0] = Last Damage Modification ID;
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Sombra passive visual")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Normalized Health(Event Player) <= 0.500;
  • Count Of(Players On Hero(Hero(Sombra), All Teams)) > 0;
  • }
  • actions
  • {
  • disabled Skip If(Normalized Health(Event Player) < 0.500, 5);
  • Skip If(Entity Exists(Event Player.MiscIDs[12]), 2);
  • Create Effect(Players On Hero(Hero(Sombra), All Teams), Bad Aura, Custom Color(200, 70, 255, 255), Position Of(Event Player),
  • 0.750, Visible To Position and Radius);
  • Event Player.MiscIDs[12] = Last Created Entity;
  • Wait(0.500, Ignore Condition);
  • Loop If Condition Is True;
  • Destroy Icon(Event Player.MiscIDs[12]);
  • Event Player.MiscIDs[12] = 0;
  • }
  • }
  • rule("Sombra hack")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Sombra;
  • }
  • conditions
  • {
  • Is Firing Secondary(Event Player) == True;
  • Event Player.TookDamage == 0;
  • }
  • actions
  • {
  • Event Player.F = Players in View Angle(Event Player, Opposite Team Of(Team Of(Event Player)), 60);
  • Wait Until(Event Player.TookDamage > 0, 0.650);
  • Skip If(Event Player.TookDamage == 0, 3);
  • Skip If(Is True For Any(Event Player.F, Has Status(Current Array Element, Hacked) == True), 2);
  • Event Player.F = 0;
  • Abort;
  • Event Player.F = First Of(Filtered Array(Event Player.F, Has Status(Current Array Element, Hacked) == True));
  • Modify Player Variable(Event Player.F, SRhacked, Append To Array, Event Player);
  • Skip If(Distance Between(Position Of(Event Player), Position Of(Event Player.F)) >= 20 || Is In Line of Sight(Eye Position(
  • Event Player), Eye Position(Event Player.F), Barriers Do Not Block LOS) == False, 1);
  • Event Player.F.SRconfirm = True;
  • Wait(0.016, Ignore Condition);
  • Modify Player Variable(Event Player.F, SRhacked, Remove From Array By Value, Event Player);
  • Wait(0.016, Ignore Condition);
  • Event Player.F = 0;
  • }
  • }
  • rule("Sombra hack passive - hacked player's side")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Has Status(Event Player, Hacked) == True;
  • Event Player.SRhacked != 0;
  • Event Player.SRconfirm == True;
  • }
  • actions
  • {
  • Event Player.SRhacked.D = 5;
  • Chase Player Variable At Rate(Event Player.SRhacked, D, 0, 1, Destination and Rate);
  • Event Player.SRconfirm = False;
  • Event Player.SRhacked.SRbonusStat[0] += Event Player.PlayerUpgrades[0] * 0.500 + 2.500;
  • Event Player.SRhacked.SRbonusStat[1] += Event Player.PlayerUpgrades[1] * 0.500 + 2.500;
  • Event Player.SRhacked.SRbonusStat[2] += Event Player.PlayerUpgrades[2] * 0.500 + 2.500;
  • Event Player.SRhacked.SRbonusStat[3] += Event Player.PlayerUpgrades[3] * 0.500 + 2.500;
  • Event Player.SRhacked.SRbonusStat[4] += Event Player.PlayerUpgrades[4] * 0.500 + 2.500;
  • Event Player.SRhacked.SRbonusStat[5] += Event Player.PlayerUpgrades[5] * 0.500 + 2.500;
  • Event Player.SRhacked.SRbonusStat[6] += Event Player.PlayerUpgrades[6] * 0.500 + 2.500;
  • Event Player.SRhacked.SRbonusStat[7] += Event Player.PlayerUpgrades[7] * 0.500 + 2.500;
  • Event Player.SRhacked.SRbonusStat[8] += Event Player.PlayerUpgrades[8] * 0.500 + 2.500;
  • Event Player.SRhacked.SRbonusStat[9] += Event Player.PlayerUpgrades[9] * 0.500 + 2.500;
  • Event Player.SRhacked.SRbonusStat[10] += Event Player.PlayerUpgrades[10] * 0.500 + 2.500;
  • Event Player.SRhacked.SRbonusStat[11] += Event Player.PlayerUpgrades[11] * 0.500 + 2.500;
  • Event Player.SRhacked.SRbonusStat[12] += Event Player.PlayerUpgrades[12] * 0.500 + 2.500;
  • }
  • }
  • rule("Sombra hack passive - sombra's side")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Sombra;
  • }
  • conditions
  • {
  • Event Player.SRbonusStat != 0;
  • disabled Is True For Any(All Players(All Teams), Current Array Element.SRhacked == Event Player) == True;
  • Event Player.D > 0;
  • }
  • actions
  • {
  • Event Player.K = Max Health(Event Player);
  • Wait(0.016, Ignore Condition);
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Color(White), Event Player, 75);
  • Play Effect(All Players(All Teams), Good Pickup Effect, Custom Color(200, 70, 255, 255), Event Player.N, 4);
  • Small Message(Event Player, String("{0} {1} {2}", Icon String(Bolt), Custom String("Stats stolen!"), Icon String(Bolt)));
  • Create Effect(All Players(All Teams), Sparkles, Custom Color(200, 70, 255, 255), Position Of(Event Player), 0.750,
  • Visible To Position and Radius);
  • Event Player.Effects[0] = Last Created Entity;
  • Wait(0.100, Ignore Condition);
  • Set Max Health(Event Player, Event Player.SRbonusStat[0] + Event Player.PlayerStats[0]);
  • Set Damage Dealt(Event Player, Event Player.SRbonusStat[1] + Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.SRbonusStat[2] + Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.SRbonusStat[3] + Event Player.PlayerStats[3]);
  • Set Healing Dealt(Event Player, Event Player.SRbonusStat[5] + Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6] - Event Player.SRbonusStat[6]);
  • Event Player.PlayerStats[7] = Event Player.PlayerStats[7] + Event Player.SRbonusStat[7];
  • Event Player.PlayerStats[8] = Event Player.PlayerStats[8] + Event Player.SRbonusStat[8];
  • Event Player.PlayerStats[9] = Event Player.PlayerStats[9] + Event Player.SRbonusStat[9];
  • Event Player.PlayerStats[10] = Event Player.PlayerStats[10] + Event Player.SRbonusStat[10];
  • Event Player.PlayerStats[11] = Event Player.PlayerStats[11] + Event Player.SRbonusStat[11];
  • Event Player.PlayerStats[12] = Event Player.PlayerStats[12] + Event Player.SRbonusStat[12];
  • Heal(Event Player, Null, Max Health(Event Player) - Event Player.K);
  • Wait Until(Event Player.D == 0 || Is Dead(Event Player) == True, 9999);
  • Set Max Health(Event Player, Event Player.PlayerStats[0]);
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Event Player.PlayerStats[7] = Event Player.PlayerStats[7] - Event Player.SRbonusStat[7];
  • Event Player.PlayerStats[8] = Event Player.PlayerStats[8] - Event Player.SRbonusStat[8];
  • Event Player.PlayerStats[9] = Event Player.PlayerStats[9] - Event Player.SRbonusStat[9];
  • Event Player.PlayerStats[10] = Event Player.PlayerStats[10] - Event Player.SRbonusStat[10];
  • Event Player.PlayerStats[11] = Event Player.PlayerStats[11] - Event Player.SRbonusStat[11];
  • Event Player.PlayerStats[12] = Event Player.PlayerStats[12] - Event Player.SRbonusStat[12];
  • Destroy Effect(Event Player.Effects[0]);
  • Play Effect(All Players(All Teams), Debuff Impact Sound, Color(White), Event Player, 60);
  • Play Effect(All Players(All Teams), Ring Explosion, Custom Color(200, 70, 255, 255), Event Player, 4);
  • Small Message(Event Player, String("{0} {1} {2}", Icon String(Bolt), Custom String("Stolen stats expired."), Icon String(Bolt)));
  • Wait(0.016, Ignore Condition);
  • Event Player.SRbonusStat = 0;
  • Event Player.D = 0;
  • Stop Chasing Player Variable(Event Player, D);
  • Event Player.F = 0;
  • Event Player.K = 0;
  • Abort;
  • }
  • }
  • rule("Sombra special stats dont go under 0")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Sombra;
  • }
  • conditions
  • {
  • (Event Player.SRbonusStat[7] || Event Player.SRbonusStat[8] || Event Player.SRbonusStat[9] || Event Player.SRbonusStat[10]) < 0;
  • }
  • actions
  • {
  • Event Player.SRbonusStat[7] = 0;
  • Event Player.SRbonusStat[8] = 0;
  • Event Player.SRbonusStat[9] = 0;
  • Event Player.SRbonusStat[10] = 0;
  • }
  • }
  • rule("Ball init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Event Player.ClassID == 13;
  • }
  • actions
  • {
  • Event Player.PlayerStats[0] = 45.833 + First Of(Event Player.PlayerUpgrades);
  • Event Player.PlayerStats[1] = 80 + Event Player.PlayerUpgrades[1];
  • Event Player.PlayerStats[2] = 100 + Event Player.PlayerUpgrades[2];
  • Event Player.PlayerStats[3] = 100 + Event Player.PlayerUpgrades[3];
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 5 + Event Player.PlayerUpgrades[5];
  • Event Player.PlayerStats[6] = Event Player.PlayerUpgrades[6];
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, True);
  • Set Primary Fire Enabled(Event Player, True);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(Wrecking Ball)), Custom String("Rumbler")), Null,
  • String("{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Custom Color(
  • 240, 170, 40, 255), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • Create HUD Text(Event Player, Icon String(Bolt), Custom String("Hamstersnax"), Custom String(
  • "Passive: Collect snax to gain a temporary buff and to not starve."), Left, 1, Custom Color(240, 170, 40, 255), Custom Color(
  • 240, 170, 40, 255), Custom Color(240, 170, 40, 255), Visible To and String, Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • Create HUD Text(Event Player, Ability Icon String(Hero(Wrecking Ball), Button(Ability 1)), Custom String("Kinetic power"),
  • Custom String("Passive: While in ball form, gain bonus damage based on your speed."), Left, 1, Custom Color(240, 170, 40, 255),
  • Custom Color(240, 170, 40, 255), Custom Color(240, 170, 40, 255), Visible To and String, Default Visibility);
  • Event Player.Huds[2] = Last Text ID;
  • Event Player.PlayerStats[7] = Event Player.PlayerUpgrades[7];
  • Event Player.PlayerStats[8] = Event Player.PlayerUpgrades[8];
  • Event Player.PlayerStats[9] = Event Player.PlayerUpgrades[9];
  • Event Player.PlayerStats[10] = Event Player.PlayerUpgrades[10];
  • Event Player.PlayerStats[11] = Event Player.PlayerUpgrades[11];
  • Event Player.PlayerStats[12] = Event Player.PlayerUpgrades[12];
  • Event Player.CritWait = 0.500;
  • Event Player.OnHitScaling = 0.125;
  • }
  • }
  • rule("Ball generate snax")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Hero Of(Event Player) == Hero(Wrecking Ball);
  • }
  • actions
  • {
  • Event Player.F[Event Player.K] = Nearest Walkable Position(Vector(X Component Of(Position Of(Event Player)) + Random Integer(-100,
  • 100), Y Component Of(Position Of(Event Player)) + Random Integer(-30, 30), Z Component Of(Position Of(Event Player))
  • + Random Integer(-100, 100)));
  • Wait(0.500, Ignore Condition);
  • Loop If(Distance Between(Eye Position(Event Player), Event Player.F[Event Player.K]) <= 50);
  • Destroy Effect(Event Player.N[Event Player.K * 3]);
  • Destroy Effect(Event Player.N[Event Player.K * 3 + True]);
  • Destroy Icon(Event Player.N[Event Player.K * 3 + 2]);
  • Wait(0.050, Ignore Condition);
  • Create Effect(All Players(All Teams), Orb, Custom Color(255, 110, 20, 255), Event Player.F[Event Player.K] + Vector(False, True,
  • False), True, None);
  • Event Player.N[Event Player.K * 3] = Last Created Entity;
  • Wait(False, Ignore Condition);
  • Create Effect(All Players(All Teams), Bad Aura, Custom Color(240, 170, 40, 255), Event Player.F[Event Player.K] + Vector(False,
  • True, False), 0.600, None);
  • Event Player.N[Event Player.K * 3 + True] = Last Created Entity;
  • Create Icon(Event Player, Event Player.F[Event Player.K] + Vector(False, True, False), Bolt, None, Custom Color(240, 170, 40, 255),
  • True);
  • Event Player.N[Event Player.K * 3 + 2] = Last Created Entity;
  • Wait(0.050, Ignore Condition);
  • Skip If(Event Player.K >= 3, True);
  • Skip(True);
  • Event Player.K += True;
  • Skip If(Event Player.K < 3, True);
  • Event Player.K = Null;
  • Wait(30, Abort When False);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Ball snax collected buff")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Event Player.B == True;
  • }
  • actions
  • {
  • Event Player.D = True;
  • Small Message(Event Player, Custom String("Bonus damage and move speed gained!"));
  • Skip If(Entity Exists(Event Player.Effects[0]) == True, 4);
  • Create Effect(All Players(All Teams), Sparkles, Custom Color(240, 170, 40, 255), Event Player, 2, Visible To Position and Radius);
  • Event Player.Effects[0] = Last Created Entity;
  • Create Effect(All Players(All Teams), Beacon Sound, Color(White), Event Player, 800, Visible To Position and Radius);
  • Event Player.Effects[1] = Last Created Entity;
  • Start Rule(BallBuff, Restart Rule);
  • Wait(0.100, Ignore Condition);
  • Wait Until(Event Player.B == True || Is Dead(Event Player) == True, 20);
  • Loop If(Event Player.B == True);
  • Destroy Effect(Event Player.Effects[0]);
  • Destroy Effect(Event Player.Effects[1]);
  • Small Message(Event Player, Custom String("Bonus damage and move speed lost."));
  • Play Effect(All Players(All Teams), Debuff Impact Sound, Color(White), Event Player, 60);
  • Play Effect(All Players(All Teams), Ring Explosion, Custom Color(240, 170, 40, 255), Event Player, 4);
  • Event Player.D = False;
  • }
  • }
  • rule("Ball buff move speed and damage")
  • {
  • event
  • {
  • Subroutine;
  • BallBuff;
  • }
  • actions
  • {
  • Event Player.NoGhost = True;
  • Set Move Speed(Event Player, Event Player.PlayerStats[2] * 1.250 + Event Player.GhostSpeed - Event Player.Slow);
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1] + 25);
  • Wait(0.100, Ignore Condition);
  • Loop If(Event Player.D == True);
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Event Player.NoGhost = False;
  • }
  • }
  • rule("Ball collect snax #1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • First Of(Event Player.F) != Null;
  • Distance Between(Eye Position(Event Player), First Of(Event Player.F)) <= 3;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Good Explosion, Custom Color(240, 170, 40, 255), First Of(Event Player.F), 1);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Color(White), Event Player, 50);
  • Destroy Effect(First Of(Event Player.N));
  • Destroy Effect(Event Player.N[1]);
  • Destroy Icon(Event Player.N[2]);
  • Wait(0.050, Ignore Condition);
  • Small Message(Event Player, String("{0} {1} {2}", Icon String(Bolt), Custom String("Hamstersnax collected!"), Icon String(Bolt)));
  • Event Player.F[0] = 0;
  • Event Player.B = True;
  • Wait(0.050, Ignore Condition);
  • Event Player.B = False;
  • }
  • }
  • rule("Ball collect snax #2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Event Player.F[1] != Null;
  • Distance Between(Eye Position(Event Player), Event Player.F[True]) <= 3;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Good Explosion, Custom Color(240, 170, 40, 255), Event Player.F[True], 1);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Color(White), Event Player, 50);
  • Destroy Effect(Event Player.N[3]);
  • Destroy Effect(Event Player.N[4]);
  • Destroy Icon(Event Player.N[5]);
  • Wait(0.050, Ignore Condition);
  • Small Message(Event Player, String("{0} {1} {2}", Icon String(Bolt), Custom String("Hamstersnax collected!"), Icon String(Bolt)));
  • Event Player.F[True] = Null;
  • Event Player.B = True;
  • Wait(0.050, Ignore Condition);
  • Event Player.B = False;
  • }
  • }
  • rule("Ball collect snax #3")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Event Player.F[2] != Null;
  • Distance Between(Eye Position(Event Player), Event Player.F[2]) <= 3;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Good Explosion, Custom Color(240, 170, 40, 255), Event Player.F[2], 1);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Color(White), Event Player, 50);
  • Destroy Effect(Event Player.N[6]);
  • Destroy Effect(Event Player.N[7]);
  • Destroy Icon(Event Player.N[8]);
  • Wait(0.050, Ignore Condition);
  • Small Message(Event Player, String("{0} {1} {2}", Icon String(Bolt), Custom String("Hamstersnax collected!"), Icon String(Bolt)));
  • Event Player.F[2] = Null;
  • Event Player.B = True;
  • Wait(0.050, Ignore Condition);
  • Event Player.B = False;
  • }
  • }
  • rule("Ball collect snax #4")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Event Player.F[3] != Null;
  • Distance Between(Eye Position(Event Player), Event Player.F[3]) <= 3;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Good Explosion, Custom Color(240, 170, 40, 255), Event Player.F[3], 1);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Color(White), Event Player, 50);
  • Destroy Effect(Event Player.N[9]);
  • Destroy Effect(Event Player.N[10]);
  • Destroy Icon(Event Player.N[11]);
  • Wait(0.050, Ignore Condition);
  • Small Message(Event Player, String("{0} {1} {2}", Icon String(Bolt), Custom String("Hamstersnax collected!"), Icon String(Bolt)));
  • Event Player.F[3] = Null;
  • Event Player.B = True;
  • Wait(0.050, Ignore Condition);
  • Event Player.B = False;
  • }
  • }
  • rule("Ball gain damage based on ms during shift")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Is In Alternate Form(Event Player) == True;
  • }
  • actions
  • {
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1] + Horizontal Speed Of(Event Player) * 1.500);
  • Wait(0.016, Ignore Condition);
  • Loop If Condition Is True;
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • }
  • }
  • rule("Ball starvation")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Hero Of(Event Player) == Hero(Wrecking Ball);
  • }
  • actions
  • {
  • Stop Damage Over Time(Event Player.Effects[2]);
  • Event Player.PlayerStats[2] = Event Player.PlayerStats[2] + Event Player.L;
  • Wait(0.100, Ignore Condition);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Event Player.L = 0;
  • Loop If(Is Dead(Event Player) == True);
  • Wait Until(Event Player.B == True || Is Dead(Event Player) == True, 60);
  • Loop If(Event Player.B == True || Is Dead(Event Player) == True);
  • Event Player.PlayerStats[2] = Event Player.PlayerStats[2] - 10;
  • Event Player.L = Event Player.L + 10;
  • Play Effect(Event Player, Debuff Impact Sound, Color(White), Event Player, 50);
  • Small Message(Event Player, Custom String("Starving... Collect more hamstersnax before it's too late!"));
  • Wait(0.100, Ignore Condition);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Wait Until(Event Player.B == True || Is Dead(Event Player) == True, 30);
  • Loop If(Event Player.B == True || Is Dead(Event Player) == True);
  • Event Player.PlayerStats[2] = Event Player.PlayerStats[2] - 10;
  • Event Player.L = Event Player.L + 10;
  • Play Effect(Event Player, Debuff Impact Sound, Color(White), Event Player, 75);
  • Small Message(Event Player, Custom String("Starving... Collect more hamstersnax before it's too late!"));
  • Start Damage Over Time(Event Player, Null, 9999, 10);
  • Event Player.Effects[2] = Last Damage Over Time ID;
  • Wait(0.100, Ignore Condition);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Wait Until(Event Player.B == True || Is Dead(Event Player) == True, 9999);
  • Loop If(Event Player.B == True || Is Dead(Event Player) == True);
  • }
  • }
  • rule("Moira init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Event Player.ClassID == 11;
  • }
  • actions
  • {
  • Event Player.PlayerStats[0] = 70 + First Of(Event Player.PlayerUpgrades);
  • Event Player.PlayerStats[1] = 75 + Event Player.PlayerUpgrades[1];
  • Event Player.PlayerStats[2] = 100 + Event Player.PlayerUpgrades[2];
  • Event Player.PlayerStats[3] = 100 + Event Player.PlayerUpgrades[3];
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 20 + Event Player.PlayerUpgrades[5];
  • Event Player.PlayerStats[6] = Event Player.PlayerUpgrades[6];
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, True);
  • Set Primary Fire Enabled(Event Player, False);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(Moira)), Custom String("Alchemist")), Null, String(
  • "{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Custom Color(125, 0,
  • 200, 255), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • Create HUD Text(Event Player, Icon String(Poison), Custom String("Give and take"), Custom String(
  • "Passive - Using abilities causes you to take damage."), Left, 2, Custom Color(125, 0, 200, 255), Custom Color(125, 0, 200,
  • 255), Custom Color(125, 0, 200, 255), Visible To and String, Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • Create HUD Text(Event Player, Ability Icon String(Hero(Reaper), Button(Ultimate)), Custom String("Hemmorhage"), Custom String(
  • "Passive - Damaging enemies below 50% hp deals a burst of damage and heals you for it."), Left, 1, Custom Color(125, 0, 200,
  • 255), Custom Color(125, 0, 200, 255), Custom Color(125, 0, 200, 255), Visible To and String, Default Visibility);
  • Event Player.Huds[2] = Last Text ID;
  • Event Player.PlayerStats[7] = Event Player.PlayerUpgrades[7];
  • Event Player.PlayerStats[8] = Event Player.PlayerUpgrades[8];
  • Event Player.PlayerStats[9] = Event Player.PlayerUpgrades[9];
  • Event Player.PlayerStats[10] = Event Player.PlayerUpgrades[10];
  • Event Player.PlayerStats[11] = Event Player.PlayerUpgrades[11];
  • Event Player.PlayerStats[12] = Event Player.PlayerUpgrades[12];
  • Event Player.CritWait = 0.500;
  • Event Player.OnHitScaling = 0.600;
  • }
  • }
  • rule("Moira ability 1 lose hp")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Using Ability 1(Event Player) == True;
  • }
  • actions
  • {
  • Wait Until(Is Using Ability 1(Event Player) == False, 9999);
  • Damage(Event Player, Event Player, 30);
  • }
  • }
  • rule("Moira ability 2 lose hp and instantly fire")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Using Ability 2(Event Player) == True;
  • }
  • actions
  • {
  • Damage(Event Player, Event Player, 40);
  • Wait(0.100, Abort When False);
  • Skip If(Is Button Held(Event Player, Button(Secondary Fire)) == True, 3);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait Until(Is Using Ability 2(Event Player) == False, 2);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Moira ultimate lose hp")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Is Using Ultimate(Event Player) == True;
  • }
  • actions
  • {
  • Damage(Event Player, Event Player, 5);
  • Wait(0.100, Abort When False);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Moira passive burst low health enemies")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Health(Victim) <= Max Health(Victim) / 2;
  • Victim != Event Player;
  • Array Contains(Event Player.F, Victim) == False;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Bad Explosion, Custom Color(125, 0, 200, 255), Eye Position(Victim) + Vector(0, 1.250, 0), 1);
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Yellow), Eye Position(Victim) + Vector(0, 1.250, 0), 0.600);
  • Play Effect(All Players(All Teams), Explosion Sound, Color(White), Victim, 75);
  • Damage(Victim, Event Player, 25 + 25 * Event Player.PlayerStats[1] * 0.010);
  • Heal(Event Player, Event Player, 25 + 25 * Event Player.PlayerStats[5] * 0.010);
  • Wait(0.016, Ignore Condition);
  • Skip If(Random Integer(0, 100) > Event Player.PlayerStats[10] || Event Player.IsCrit > 0, 7);
  • Event Player.IsCrit = 2;
  • Heal(Event Player, Event Player, 25 + 25 * Event Player.PlayerStats[5] * 0.010);
  • Damage(Victim, Event Player, 25 + 25 * Event Player.PlayerStats[1] * 0.010);
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Red), Victim, 0.500);
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Color(White), Victim, 150);
  • Wait(0.025, Ignore Condition);
  • Event Player.IsCrit = 0;
  • Event Player.F[Slot Of(Victim)] = Victim;
  • }
  • }
  • rule("Moira passive cd (slot 1)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Event Player.F[0] != 0;
  • }
  • actions
  • {
  • Wait Until(Is Dead(Event Player.F[0]), 6);
  • Event Player.F[0] = 0;
  • }
  • }
  • rule("Moira passive cd (slot 2)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.F[1] != 0;
  • }
  • actions
  • {
  • Wait Until(Is Dead(Event Player.F[1]), 6);
  • Event Player.F[1] = 0;
  • }
  • }
  • rule("Moira passive cd (slot 3)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Event Player.F[2] != 0;
  • }
  • actions
  • {
  • Wait Until(Is Dead(Event Player.F[2]), 6);
  • Event Player.F[2] = 0;
  • }
  • }
  • rule("Moira passive cd (slot 4)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Event Player.F[3] != 0;
  • }
  • actions
  • {
  • Wait Until(Is Dead(Event Player.F[3]), 6);
  • Event Player.F[3] = 0;
  • }
  • }
  • rule("Moira passive cd (slot 5)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Event Player.F[4] != 0;
  • }
  • actions
  • {
  • Wait Until(Is Dead(Event Player.F[4]), 6);
  • Event Player.F[4] = 0;
  • }
  • }
  • rule("Moira passive cd (slot 6)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Event Player.F[5] != 0;
  • }
  • actions
  • {
  • Wait Until(Is Dead(Event Player.F[5]), 6);
  • Event Player.F[5] = 0;
  • }
  • }
  • rule("Moira passive cd (slot 7)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Event Player.F[6] != 0;
  • }
  • actions
  • {
  • Wait Until(Is Dead(Event Player.F[6]), 6);
  • Event Player.F[6] = 0;
  • }
  • }
  • rule("Moira passive cd (slot 8)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Event Player.F[7] != 0;
  • }
  • actions
  • {
  • Wait Until(Is Dead(Event Player.F[7]), 6);
  • Event Player.F[7] = 0;
  • }
  • }
  • rule("Moira passive cd (slot 9)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Event Player.F[8] != 0;
  • }
  • actions
  • {
  • Wait Until(Is Dead(Event Player.F[8]), 6);
  • Event Player.F[8] = 0;
  • }
  • }
  • rule("Moira passive visual")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Max Health(Event Player) / 2 > Health(Event Player);
  • Count Of(Players On Hero(Hero(Moira), All Teams)) > 0;
  • Is Alive(Event Player) == True;
  • (Hero Of(Event Player) == Hero(Junkrat) && Event Player.R > 0) == False;
  • }
  • actions
  • {
  • Skip If(Entity Exists(Event Player.MiscIDs[14]), 4);
  • Create Effect(Filtered Array(Players On Hero(Hero(Moira), All Teams), Array Contains(Current Array Element.F, Event Player)
  • == False && Current Array Element != Event Player), Bad Aura, Custom Color(125, 0, 200, 255), Eye Position(Event Player)
  • + Vector(0, 1.250, 0), 0.750, Visible To Position and Radius);
  • Event Player.MiscIDs[14] = Last Created Entity;
  • Create Icon(Filtered Array(Players On Hero(Hero(Moira), All Teams), Array Contains(Current Array Element.F, Event Player)
  • == False && Current Array Element != Event Player), Eye Position(Event Player), Skull, Visible To and Position, Color(Yellow),
  • True);
  • Event Player.MiscIDs[15] = Last Created Entity;
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • Destroy Effect(Event Player.MiscIDs[14]);
  • Event Player.MiscIDs[14] = 0;
  • Destroy Icon(Event Player.MiscIDs[15]);
  • Event Player.MiscIDs[15] = 0;
  • }
  • }
  • rule("Junkrat init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Junkrat;
  • }
  • conditions
  • {
  • Event Player.ClassID == 15;
  • }
  • actions
  • {
  • Event Player.PlayerStats[0] = 100 + First Of(Event Player.PlayerUpgrades);
  • Event Player.PlayerStats[1] = 60 + Event Player.PlayerUpgrades[1];
  • Event Player.PlayerStats[2] = 110 + Event Player.PlayerUpgrades[2];
  • Event Player.PlayerStats[3] = 100 + Event Player.PlayerUpgrades[3];
  • Event Player.PlayerStats[4] = 100;
  • Event Player.PlayerStats[5] = 5 + Event Player.PlayerUpgrades[5];
  • Event Player.PlayerStats[6] = Event Player.PlayerUpgrades[6];
  • Wait(0.050, Ignore Condition);
  • Set Max Health(Event Player, First Of(Event Player.PlayerStats));
  • Set Damage Dealt(Event Player, Event Player.PlayerStats[1]);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2]);
  • Set Projectile Speed(Event Player, Event Player.PlayerStats[3]);
  • Set Gravity(Event Player, Event Player.PlayerStats[4]);
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, True);
  • Set Primary Fire Enabled(Event Player, True);
  • Heal(Event Player, Null, Max Health(Event Player));
  • Wait(0.016, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} {1}", Hero Icon String(Hero(Junkrat)), Custom String("Rat")), Null, String(
  • "{0}: {1}", String("Level Up"), Custom String("{0} / {1}", Event Player.EXP, Event Player.X)), Left, 0, Custom Color(230, 160,
  • 10, 255), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.Huds[0] = Last Text ID;
  • Create HUD Text(Event Player, Icon String(Eye), Custom String("Suprise!"), String("{0}: {1}", Custom String(
  • "Cooldown ability 2 - turn invisible and gain bonus movespeed and crit chance"), Event Player.C), Left, 1, Custom Color(230,
  • 160, 10, 255), Custom Color(230, 160, 10, 255), Custom Color(230, 160, 10, 255), Visible To and String, Default Visibility);
  • Event Player.PlayerStats[7] = Event Player.PlayerUpgrades[7];
  • Event Player.PlayerStats[8] = Event Player.PlayerUpgrades[8];
  • Event Player.PlayerStats[9] = Event Player.PlayerUpgrades[9];
  • Event Player.PlayerStats[10] = Event Player.PlayerUpgrades[10];
  • Event Player.PlayerStats[11] = Event Player.PlayerUpgrades[11];
  • Event Player.PlayerStats[12] = Event Player.PlayerUpgrades[12];
  • Event Player.CritWait = 0.016;
  • Event Player.OnHitScaling = 1;
  • }
  • }
  • rule("Junkrat ability 2 activate")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Junkrat;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Ability 2)) == True;
  • Event Player.C <= 0;
  • Has Status(Event Player, Hacked) == False;
  • Has Status(Event Player, Knocked Down) == False;
  • Has Status(Event Player, Asleep) == False;
  • Has Status(Event Player, Frozen) == False;
  • Has Status(Event Player, Stunned) == False;
  • Event Player.R == 0;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Turning invisible..."));
  • Event Player.F = All Players(All Teams);
  • Create Effect(Event Player.F, Bad Aura, Custom Color(230, 160, 10, 255), Position Of(Event Player), 0.750,
  • Visible To Position and Radius);
  • Event Player.Effects[0] = Last Created Entity;
  • Wait Until(Is Dead(Event Player) == True, 2);
  • Skip If(Is Dead(Event Player) == True, 15);
  • Event Player.R = 15;
  • Chase Player Variable At Rate(Event Player, R, 0, 1, Destination and Rate);
  • Create Effect(Event Player, Ring, Custom Color(230, 160, 10, 255), Position Of(Event Player), 6, Visible To Position and Radius);
  • Event Player.Effects[1] = Last Created Entity;
  • Create Progress Bar HUD Text(Event Player, Event Player.R * 6.667, Custom String("Invisible"), Top, 10, Custom Color(230, 160, 10,
  • 255), Custom Color(230, 160, 10, 255), Visible To Values and Color, Default Visibility);
  • Event Player.Effects[2] = Last Text ID;
  • Small Message(Event Player, Custom String("Invisible!"));
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Color(White), Event Player, 75);
  • Play Effect(All Players(All Teams), Bad Explosion, Custom Color(230, 160, 10, 255), Event Player, 1);
  • Set Invisible(Event Player, All);
  • Wait Until(Event Player.R == 0, 15);
  • Set Invisible(Event Player, None);
  • Small Message(Event Player, Custom String("Visible."));
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Color(White), Event Player, 125);
  • Play Effect(All Players(All Teams), Bad Explosion, Custom Color(230, 160, 10, 255), Event Player, 1);
  • Destroy Effect(Event Player.Effects[0]);
  • Destroy Effect(Event Player.Effects[1]);
  • Destroy Progress Bar HUD Text(Event Player.Effects[2]);
  • Wait(0.100, Ignore Condition);
  • Event Player.K = 0;
  • Event Player.F = 0;
  • Event Player.C = 16;
  • Stop Chasing Player Variable(Event Player, R);
  • Chase Player Variable At Rate(Event Player, C, 0, 1, Destination and Rate);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2] - Event Player.Slow);
  • Event Player.NoGhost = False;
  • Wait(0.650, Ignore Condition);
  • Event Player.PlayerStats[10] = Event Player.PlayerUpgrades[10];
  • }
  • }
  • rule("Junkrat ability 2 active")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Junkrat;
  • }
  • conditions
  • {
  • Event Player.R > 0;
  • }
  • actions
  • {
  • Event Player.NoGhost = True;
  • Event Player.PlayerStats[10] = Event Player.PlayerUpgrades[10] + 5 * 1.300;
  • Set Move Speed(Event Player, Event Player.PlayerStats[2] * 1.100 + Event Player.GhostSpeed - Event Player.Slow);
  • Event Player.F = Filtered Array(All Living Players(All Teams), Distance Between(Eye Position(Event Player), Eye Position(
  • Current Array Element)) <= 6 && Is In Line of Sight(Eye Position(Event Player), Eye Position(Current Array Element),
  • Barriers Do Not Block LOS));
  • Play Effect(All Players(All Teams), Ring Explosion, Custom Color(230, 160, 10, 255), Position Of(Event Player), 2);
  • Wait(0.350, Abort When False);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Junkrat ability 2 quit via taking damage")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • Junkrat;
  • }
  • conditions
  • {
  • Event Player.R > 0;
  • }
  • actions
  • {
  • Event Player.R = 0;
  • }
  • }
  • rule("Junkrat ability 2 quit via using abilities")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Junkrat;
  • }
  • conditions
  • {
  • (Is Firing Primary(Event Player) || Is Using Ability 1(Event Player) || Is Meleeing(Event Player) || Is Using Ultimate(
  • Event Player)) == True;
  • }
  • actions
  • {
  • Event Player.R = 0;
  • }
  • }
  • rule("Junkrat ability 2 notify Junk of any players inside stealth radius")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Junkrat;
  • }
  • conditions
  • {
  • Count Of(Event Player.F) > 1;
  • Event Player.R > 0;
  • }
  • actions
  • {
  • Small Message(Event Player, String("{0} {1} {2}", Icon String(Exclamation Mark), Custom String("Detected!"), Icon String(
  • Exclamation Mark)));
  • Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 100);
  • }
  • }
  • rule("Set assisters for moira and rein")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • All;
  • }
  • conditions
  • {
  • Victim != Event Player;
  • (Hero Of(Victim) == Hero(Moira) || Hero Of(Victim) == Hero(Reinhardt)) == True;
  • }
  • actions
  • {
  • Skip If(Victim == Event Player.AssistID[1], 3);
  • Start Assist(Event Player, Victim, Assisters and Targets);
  • Event Player.AssistID[0] = Last Assist ID;
  • Event Player.AssistID[1] = Victim;
  • Wait(7, Restart When True);
  • Stop Assist(Event Player.AssistID[0]);
  • Event Player.AssistID[1] = 0;
  • }
  • }
  • disabled rule("DUMMY BOT")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Is Button Held(Event Player, Button(Crouch)) == False;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Wrecking Ball), All Teams, -1, Position Of(Event Player), Vector(0, 0, 0));
  • }
  • }
  • disabled rule("dorah the explorah")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Is Button Held(Event Player, Button(Crouch)) == False;
  • }
  • actions
  • {
  • "@Condition isGameInProgress() == false"
  • Teleport(Event Player, Eye Position(Event Player) + Facing Direction Of(Event Player) * 10);
  • Set Status(Event Player, Null, Invincible, 9999);
  • }
  • }
  • rule("Slowed effect")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.Slow > Null;
  • }
  • actions
  • {
  • Skip If(Event Player.GhostSpeed > 0, 1);
  • Set Move Speed(Event Player, Event Player.PlayerStats[2] - Event Player.Slow);
  • Chase Player Variable At Rate(Event Player, Slow, False, 7.500, Destination and Rate);
  • Wait(0.250, Ignore Condition);
  • Skip If(!Is Moving(Event Player), True);
  • Play Effect(All Players(All Teams), Ring Explosion, Color(Green), Position Of(Event Player), 2);
  • Loop If Condition Is True;
  • Stop Chasing Player Variable(Event Player, Slow);
  • }
  • }
  • rule("Slow cap at 95")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.Slow > 95;
  • }
  • actions
  • {
  • Event Player.Slow = 95;
  • Wait(0.050, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Create position markers for testing")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Is Button Held(Event Player, Button(Crouch)) == True;
  • }
  • actions
  • {
  • Create Effect(All Players(All Teams), Ring, Color(White), Ray Cast Hit Position(Eye Position(Event Player), Eye Position(
  • Event Player) + Down * 3, Null, Event Player, True), 1, None);
  • Create In-World Text(All Players(All Teams), Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player)
  • + Down * 3, Null, Event Player, True), Eye Position(Event Player), 1, Clip Against Surfaces, None, Color(White),
  • Default Visibility);
  • }
  • }
  • disabled rule("DUMMY BOT SLAM")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Create In-World Text(All Players(All Teams), Event Player.TookDamage, Event Player, 1.250, Do Not Clip,
  • Visible To Position and String, Color(White), Default Visibility);
  • }
  • }
  • disabled rule("BIG BOY")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == False;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • }
  • actions
  • {
  • Event Player.Points[0] = 100;
  • }
  • }
Join the Workshop.codes Discord