Create
Return to post

Comparing difference between and

View raw
  • settings
  • {
  • main
  • {
  • Description: "code: 2C2EQ, 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
  • {
  • Ammunition Clip Size Scalar: 50%
  • 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
  • 26: BC1
  • 27: BC2
  • 28: BCeffects
  • 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(135.564, 6.820, -282.152);
  • Global.W[3] = Vector(96.281, 8.820, -231.488);
  • Global.W[4] = Vector(138.066, 4.127, -197.404);
  • Global.W[5] = Vector(175.342, 6.820, -241.121);
  • Global.W[6] = Vector(126.287, 8.821, -201.997);
  • Global.W[7] = Vector(141.335, 0, -247.561);
  • Global.W[8] = Vector(115.055, 8.848, -273.541);
  • Global.W[9] = Vector(167.240, 8.848, -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(141.335, 8.725, -247.561);
  • Global.W[1] = Vector(91.165, 3.849, -244.486);
  • Global.W[2] = Vector(135.564, 6.820, -282.152);
  • Global.W[3] = Vector(96.281, 8.820, -231.488);
  • Global.W[4] = Vector(138.066, 4.127, -197.404);
  • Global.W[5] = Vector(175.342, 6.820, -241.121);
  • Global.W[6] = Vector(126.287, 8.821, -201.997);
  • Global.W[7] = Vector(141.335, 0, -247.561);
  • Global.W[8] = Vector(115.055, 8.848, -273.541);
  • Global.W[9] = Vector(167.240, 8.848, -221.432);
  • }
  • }
  • 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;
  • Is Dummy Bot(Event Player) == False;
  • }
  • 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;
  • Is Dummy Bot(Victim) == False;
  • }
  • actions
  • {
  • Event Player.EXP += Event Damage * 0.500;
  • }
  • }
  • rule("Leveling - active elimination")
  • {
  • event
  • {
  • Player Earned Elimination;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.X != 0;
  • Global.MatchStatus == 1;
  • Is Dummy Bot(Victim) == False;
  • }
  • actions
  • {
  • Event Player.EXP += 45;
  • }
  • }
  • rule("Leveling - active final blow")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.X != 0;
  • Global.MatchStatus == 1;
  • Is Dummy Bot(Victim) == False;
  • }
  • actions
  • {
  • Event Player.EXP += 40 + 20 * (Victim.Level - Event Player.Level);
  • If(Victim.Level - Event Player.Level > 3);
  • Small Message(Event Player, Custom String("{0} {1}", Custom String("shutdown!"), String("{0}: {1}", Custom String("bonus exp"),
  • 20 * (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.100, Ignore Condition);
  • Event Player.X = 0;
  • Wait(0.100, Ignore Condition);
  • Event Player.EXP -= 30 * Event Player.Level + 70;
  • Loop If Condition Is True;
  • Small Message(Event Player, Custom String("{0} {1} {2}", Custom String("You have -"), Event Player.Points, Custom String(
  • " - upgrade points")));
  • Wait(0.100, Ignore Condition);
  • 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(2, 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(Secondary 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.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(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(Secondary 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.010;
  • 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;
  • Event Player.InClassShop == False;
  • }
  • 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 eighth 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.100, 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.100, 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.100, 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.100, 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.100, 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.100,
  • 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.100,
  • 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.100,
  • 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 In-World Text(Event Player.StatHuds[7]);
  • Destroy In-World Text(Event Player.StatHuds[8]);
  • Destroy In-World Text(Event Player.StatHuds[9]);
  • Destroy In-World Text(Event Player.StatHuds[10]);
  • Destroy In-World Text(Event Player.StatHuds[11]);
  • Destroy In-World Text(Event Player.StatHuds[12]);
  • Destroy In-World Text(Event Player.StatHuds[13]);
  • Destroy In-World 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(Orange), Global.W[8], 3, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Ring, Color(Orange), Global.W[9], 3, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Cloud, Color(Black), Global.W[Global.BC1[0]] - Vector(0, 1.400, 0), 5,
  • Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Orb, Color(Red), Global.W[Global.BC1[0]] + Vector(0, 1, 0), 1,
  • Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Bad Aura, Color(Red), Global.W[Global.BC1[0]] + Vector(0, 1, 0), 1,
  • Visible To Position and Radius);
  • Create In-World Text(All Players(All Teams), Custom String("BLOOD CRYSTAL"), Global.W[Global.BC1[0]] + Vector(0, 1.250, 0), 1.350,
  • Clip Against Surfaces, Visible To Position and String, Color(Red), Default Visibility);
  • Create In-World Text(All Players(All Teams), String("{0}: {1}", Custom String("Blood required"), Global.BC1[2]),
  • Global.W[Global.BC1[0]] + Vector(0, 0.350, 0), 1.150, Clip Against Surfaces, Visible To Position and String, Color(Red),
  • Default Visibility);
  • Create Effect(All Players(All Teams), Cloud, Color(Black), Global.W[Global.BC2[0]] - Vector(0, 1.400, 0), 5,
  • Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Orb, Color(Red), Global.W[Global.BC2[0]] + Vector(0, 1, 0), 1,
  • Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Bad Aura, Color(Red), Global.W[Global.BC2[0]] + Vector(0, 1, 0), 1,
  • Visible To Position and Radius);
  • Create In-World Text(All Players(All Teams), Custom String("BLOOD CRYSTAL"), Global.W[Global.BC2[0]] + Vector(0, 1.250, 0), 1.350,
  • Clip Against Surfaces, Visible To Position and String, Color(Red), Default Visibility);
  • Create In-World Text(All Players(All Teams), String("{0}: {1}", Custom String("Blood required"), Global.BC2[2]),
  • Global.W[Global.BC2[0]] + Vector(0, 0.350, 0), 1.150, Clip Against Surfaces, Visible To Position and String, Color(Red),
  • Default Visibility);
  • }
  • }
  • 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("Create blood crystal #1")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Global.BC1[0] = Random Integer(1, 3);
  • Global.BC1[1] = Global.BC1[1] + 20;
  • Wait(0.016, Ignore Condition);
  • Global.BC1[2] = 180 + Global.BC1[1];
  • Wait(0.016, Ignore Condition);
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Color(Red), Global.W[Global.BC1[0]], 600);
  • disabled Create Effect(All Players(All Teams), Cloud, Color(Black), Global.W[Global.BC1[0]] - Vector(0, 1.400, 0), 5,
  • Visible To Position and Radius);
  • disabled Global.BCeffects[0] = Last Created Entity;
  • disabled Create Effect(All Players(All Teams), Orb, Color(Red), Global.W[Global.BC1[0]] + Vector(0, 1, 0), 1,
  • Visible To Position and Radius);
  • disabled Global.BCeffects[1] = Last Created Entity;
  • disabled Create Effect(All Players(All Teams), Bad Aura, Color(Red), Global.W[Global.BC1[0]] + Vector(0, 1, 0), 1,
  • Visible To Position and Radius);
  • disabled Global.BCeffects[2] = Last Created Entity;
  • disabled Create In-World Text(All Players(All Teams), Custom String("BLOOD CRYSTAL"), Global.W[Global.BC1[0]] + Vector(0, 1.250, 0), 1.350,
  • Clip Against Surfaces, Visible To Position and String, Color(Red), Default Visibility);
  • disabled Global.BCeffects[3] = Last Text ID;
  • disabled Create In-World Text(All Players(All Teams), String("{0}: {1}", Custom String("Blood required"), Global.BC1[2]),
  • Global.W[Global.BC1[0]] + Vector(0, 0.350, 0), 1.150, Clip Against Surfaces, Visible To Position and String, Color(Red),
  • Default Visibility);
  • disabled Global.BCeffects[4] = Last Text ID;
  • Wait Until(Global.BC1[2] <= 0, 9999);
  • Play Effect(All Players(All Teams), Bad Pickup Effect, Color(Red), Global.W[Global.BC1[0]], 1.500);
  • disabled Destroy Effect(First Of(Global.BCeffects));
  • disabled Destroy Effect(Global.BCeffects[1]);
  • disabled Destroy Effect(Global.BCeffects[2]);
  • disabled Destroy In-World Text(Global.BCeffects[3]);
  • disabled Destroy In-World Text(Global.BCeffects[4]);
  • Wait(0.016, Ignore Condition);
  • Global.BC1[0] = 7;
  • Wait(45, Abort When False);
  • Big Message(All Players(All Teams), Custom String("Blood Crystal has respawned!"));
  • Loop;
  • }
  • }
  • rule("Blood crystal #1 fill up")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Position Of(Event Player), Global.W[Global.BC1[0]]) <= 4;
  • Is Alive(Event Player) == True;
  • Global.MatchStatus == 1;
  • Health(Event Player) > 20 + Global.BC1[1] * 0.050;
  • Global.BC1[2] > 0;
  • Global.BC1[0] != 7;
  • }
  • actions
  • {
  • Skip If(Event Player.MiscIDs[1] != 0, 2);
  • Create Beam Effect(All Players(All Teams), Bad Beam, Event Player, Global.W[Global.BC1[0]] + Vector(0, 1, 0), Color(Red),
  • Visible To Position and Radius);
  • Event Player.MiscIDs[1] = Last Created Entity;
  • Wait(0.500, Ignore Condition);
  • Skip If(Health(Event Player) <= 20 + Global.BC1[1] * 0.050, 2);
  • Damage(Event Player, Null, 20 + Global.BC1[1] * 0.050);
  • Global.BC1[2] = Global.BC1[2] - (20 + Global.BC1[1] * 0.050);
  • Loop If Condition Is True;
  • Destroy Effect(Event Player.MiscIDs[1]);
  • Event Player.MiscIDs[1] = 0;
  • }
  • }
  • rule("Blood crystal #1 complete")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Position Of(Event Player), Global.W[Global.BC1[0]]) <= 4;
  • Is Alive(Event Player) == True;
  • Global.MatchStatus == 1;
  • Global.BC1[2] <= 0;
  • }
  • actions
  • {
  • Event Player.EXP += 150 + Global.BC1[1] * 0.250;
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Red), Event Player, 1.500);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Color(Orange), Event Player, 100);
  • Small Message(Event Player, Custom String("{0} {1}", Custom String("Blood Crystal Completed!"), String("{0}: {1}", Custom String(
  • "EXP gained"), 150 + Global.BC1[1] * 0.250)));
  • Wait(0.250, Abort When False);
  • }
  • }
  • rule("Create blood crystal #2")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • }
  • actions
  • {
  • Global.BC2[0] = Random Integer(4, 6);
  • Global.BC2[1] = Global.BC2[1] + 20;
  • Wait(0.016, Ignore Condition);
  • Global.BC2[2] = 180 + Global.BC2[1];
  • Wait(0.016, Ignore Condition);
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Color(Red), Global.W[Global.BC2[0]], 600);
  • disabled Create Effect(All Players(All Teams), Cloud, Color(Black), Global.W[Global.BC2[0]] - Vector(0, 1.400, 0), 5,
  • Visible To Position and Radius);
  • disabled Global.BCeffects[5] = Last Created Entity;
  • disabled Create Effect(All Players(All Teams), Orb, Color(Red), Global.W[Global.BC2[0]] + Vector(0, 1, 0), 1,
  • Visible To Position and Radius);
  • disabled Global.BCeffects[6] = Last Created Entity;
  • disabled Create Effect(All Players(All Teams), Bad Aura, Color(Red), Global.W[Global.BC2[0]] + Vector(0, 1, 0), 1,
  • Visible To Position and Radius);
  • disabled Global.BCeffects[7] = Last Created Entity;
  • disabled Create In-World Text(All Players(All Teams), Custom String("BLOOD CRYSTAL"), Global.W[Global.BC2[0]] + Vector(0, 1.250, 0), 1.350,
  • Clip Against Surfaces, Visible To Position and String, Color(Red), Default Visibility);
  • disabled Global.BCeffects[8] = Last Text ID;
  • disabled Create In-World Text(All Players(All Teams), String("{0}: {1}", Custom String("Blood required"), Global.BC2[2]),
  • Global.W[Global.BC2[0]] + Vector(0, 0.350, 0), 1.150, Clip Against Surfaces, Visible To Position and String, Color(Red),
  • Default Visibility);
  • disabled Global.BCeffects[9] = Last Text ID;
  • Wait Until(Global.BC2[2] <= 0, 9999);
  • Play Effect(All Players(All Teams), Bad Pickup Effect, Color(Red), Global.W[Global.BC2[0]], 1.500);
  • disabled Destroy Effect(Global.BCeffects[5]);
  • disabled Destroy Effect(Global.BCeffects[6]);
  • disabled Destroy Effect(Global.BCeffects[7]);
  • disabled Destroy In-World Text(Global.BCeffects[8]);
  • disabled Destroy In-World Text(Global.BCeffects[9]);
  • Wait(0.016, Ignore Condition);
  • Global.BC2[0] = 7;
  • Wait(45, Abort When False);
  • Big Message(All Players(All Teams), Custom String("Blood Crystal has respawned!"));
  • Loop;
  • }
  • }
  • rule("Blood crystal #2 fill up")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Position Of(Event Player), Global.W[Global.BC2[0]]) <= 4;
  • Is Alive(Event Player) == True;
  • Global.MatchStatus == 1;
  • Health(Event Player) > 20 + Global.BC2[1] * 0.050;
  • Global.BC2[2] > 0;
  • Global.BC1[0] != 7;
  • }
  • actions
  • {
  • Skip If(Event Player.MiscIDs[1] != 0, 2);
  • Create Beam Effect(All Players(All Teams), Bad Beam, Event Player, Global.W[Global.BC2[0]] + Vector(0, 1, 0), Color(Red),
  • Visible To Position and Radius);
  • Event Player.MiscIDs[1] = Last Created Entity;
  • Wait(0.500, Ignore Condition);
  • Skip If(Health(Event Player) <= 20 + Global.BC2[1] * 0.050, 2);
  • Damage(Event Player, Null, 20 + Global.BC2[1] * 0.050);
  • Global.BC2[2] = Global.BC2[2] - (20 + Global.BC2[1] * 0.050);
  • Loop If Condition Is True;
  • Destroy Effect(Event Player.MiscIDs[1]);
  • Event Player.MiscIDs[1] = 0;
  • }
  • }
  • rule("Blood crystal #2 complete")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Position Of(Event Player), Global.W[Global.BC2[0]]) <= 4;
  • Is Alive(Event Player) == True;
  • Global.MatchStatus == 1;
  • Global.BC2[2] <= 0;
  • }
  • actions
  • {
  • Event Player.EXP += 150 + Global.BC2[1] * 0.250;
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Red), Event Player, 1.500);
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Color(Red), Event Player, 100);
  • Small Message(Event Player, Custom String("{0} {1}", Custom String("Blood Crystal Completed!"), String("{0}: {1}", Custom String(
  • "EXP gained"), 150 + Global.BC2[1] * 0.250)));
  • Wait(0.250, Abort When False);
  • }
  • }
  • 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 when used on yourself"), 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, 14, To World, Cancel Contrary Motion);
  • }
  • }
  • disabled 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] = 110 + First Of(Event Player.PlayerUpgrades);
  • Event Player.PlayerStats[1] = 80 + Event Player.PlayerUpgrades[1];
  • Event Player.PlayerStats[2] = 100 + Event Player.PlayerUpgrades[2];
  • Wait(0.100, Ignore Condition);
  • Event Player.PlayerStats[3] = 100 + Event Player.PlayerUpgrades[3];
  • Event Player.PlayerStats[5] = 10 + Event Player.PlayerUpgrades[5];
  • Event Player.PlayerStats[6] = Event Player.PlayerUpgrades[6];
  • Wait(0.100, 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 Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • Set Damage Received(Event Player, 100 - Event Player.PlayerStats[6]);
  • Wait(0.100, Ignore Condition);
  • 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.100, 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, Custom Color(130, 250,
  • 250, 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(Baptiste), Button(Ability 1)), Custom String("Cryohealing"), Custom String(
  • "Passive: upon using an ability, heal yourself."), Left, 2, Custom Color(130, 250, 250, 255), Custom Color(130, 250, 250, 255),
  • Custom Color(130, 250, 250, 255), Visible To and String, Default Visibility);
  • Event Player.Huds[1] = Last Text ID;
  • Create HUD Text(Event Player, Ability Icon String(Hero(Mei), Button(Ultimate)), Custom String("Frozen domain"), Custom String(
  • "Passive: entering combat spawns a zone that buffs you, and freezes enemies who enter/exit."), Left, 1, Custom Color(130, 250,
  • 250, 255), Custom Color(130, 250, 250, 255), Custom Color(130, 250, 250, 255), Visible To and String, Default Visibility);
  • Event Player.Huds[2] = Last Text ID;
  • Wait(0.100, Ignore Condition);
  • 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, 25 + 25 * Event Player.PlayerStats[5] * 0.010);
  • 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);
  • Wait(0.016, Ignore Condition);
  • 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, 25 + 25 * Event Player.PlayerStats[5] * 0.010);
  • 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("Mei enter combat via taking damage")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • Mei;
  • }
  • conditions
  • {
  • Event Player.B == False;
  • }
  • actions
  • {
  • Event Player.B = True;
  • Wait(0.016, Restart When True);
  • Event Player.B = False;
  • }
  • }
  • rule("Mei enter combat via dealing damage")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • Mei;
  • }
  • conditions
  • {
  • Event Player.B == False;
  • }
  • actions
  • {
  • Event Player.B = True;
  • Wait(0.016, Restart When True);
  • Event Player.B = False;
  • }
  • }
  • rule("Mei in combat status")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Mei;
  • }
  • conditions
  • {
  • Event Player.B == True;
  • Event Player.C == 0;
  • }
  • actions
  • {
  • Event Player.F = True;
  • Wait(4, Restart When True);
  • Event Player.F = False;
  • }
  • }
  • rule("Mei create frozen domain")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Mei;
  • }
  • conditions
  • {
  • Event Player.F == True;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Good Pickup Effect, Color(Aqua), Event Player, 2);
  • Play Effect(All Players(All Teams), Ring Explosion, Color(Aqua), Position Of(Event Player), 26);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Color(Aqua), Event Player, 125);
  • Small Message(Event Player, String("{0} {1} {2}", Ability Icon String(Hero(Mei), Button(Ultimate)), Custom String(
  • "Domain created!"), Ability Icon String(Hero(Mei), Button(Ultimate))));
  • Event Player.O = Position Of(Event Player);
  • Event Player.T = Event Player;
  • Wait(0.016, Ignore Condition);
  • Create Effect(All Players(All Teams), Cloud, Custom Color(130, 250, 250, 255), Event Player.O, 12, Visible To Position and Radius);
  • Event Player.Effects[0] = Last Created Entity;
  • Create Effect(All Players(All Teams), Light Shaft, Custom Color(130, 250, 250, 75), Event Player.O - Vector(0, 10, 0), 12,
  • Visible To Position and Radius);
  • Event Player.Effects[1] = Last Created Entity;
  • Wait(0.100, Ignore Condition);
  • Create Effect(All Players(All Teams), Sparkles, Color(Aqua), Event Player.O, 12, Visible To Position and Radius);
  • Event Player.Effects[2] = Last Created Entity;
  • Wait(0.100, Ignore Condition);
  • Create Effect(All Players(All Teams), Smoke Sound, Color(Aqua), Event Player.O, 500, Visible To Position and Radius);
  • Event Player.Effects[3] = Last Created Entity;
  • Wait Until((Event Player.F == False || Is Dead(Event Player) == True) == True, 9999);
  • Event Player.O = 0;
  • Play Effect(Event Player, Debuff Impact Sound, Color(Aqua), Event Player, 75);
  • Small Message(Event Player, String("{0} {1} {2}", Ability Icon String(Hero(Mei), Button(Ultimate)), Custom String(
  • "Domain expired."), Ability Icon String(Hero(Mei), Button(Ultimate))));
  • Event Player.C = 100;
  • Chase Player Variable At Rate(Event Player, C, 0, 10, Destination and Rate);
  • Create Progress Bar HUD Text(Event Player, Event Player.C, Custom String("Frozen domain recharge"), Top, 10, Color(Aqua),
  • Custom Color(130, 250, 250, 127.500), Visible To Values and Color, Default Visibility);
  • Event Player.Effects[4] = Last Text ID;
  • Destroy Effect(Event Player.Effects[0]);
  • Destroy Effect(Event Player.Effects[1]);
  • Wait(0.100, Ignore Condition);
  • Destroy Effect(Event Player.Effects[2]);
  • Wait(0.100, Ignore Condition);
  • Destroy Effect(Event Player.Effects[3]);
  • Wait Until((Event Player.C == 0 || Is Dead(Event Player) == True) == True, 12);
  • Destroy Progress Bar HUD Text(Event Player.Effects[4]);
  • }
  • }
  • rule("Mei frozen domain grant bonus stats")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Mei;
  • }
  • conditions
  • {
  • Event Player.O != 0;
  • Distance Between(Position Of(Event Player), Vector(X Component Of(Event Player.O), Y Component Of(Position Of(Event Player)),
  • Z Component Of(Event Player.O))) <= 12;
  • }
  • actions
  • {
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5] + 20);
  • Skip If(Event Player.D[0] != 0, 2);
  • Start Damage Modification(Filtered Array(All Players(All Teams), Distance Between(Position Of(Current Array Element), Vector(
  • X Component Of(Event Player.O), Y Component Of(Position Of(Event Player)), Z Component Of(Event Player.O))) <= 12),
  • 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;
  • Stop Damage Modification(Event Player.D[0]);
  • Event Player.D = 0;
  • Set Healing Dealt(Event Player, Event Player.PlayerStats[5]);
  • }
  • }
  • rule("Mei frozen domain freeze enemies")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is True For Any(Players On Hero(Hero(Mei), All Teams), Current Array Element.O != 0) == True;
  • Is True For Any(Filtered Array(Players On Hero(Hero(Mei), All Teams),
  • Current Array Element.O != 0 && Current Array Element.T != Event Player), Distance Between(Position Of(Event Player), Vector(
  • X Component Of(Current Array Element.O), Y Component Of(Position Of(Event Player)), Z Component Of(Current Array Element.O)))
  • >= 11.250 && Distance Between(Position Of(Event Player), Vector(X Component Of(Current Array Element.O), Y Component Of(
  • Position Of(Event Player)), Z Component Of(Current Array Element.O))) <= 12.750) == True;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Frozen, 2);
  • Small Message(Event Player, String("{0} {1} {2}", Hero Icon String(Hero(Mei)), Custom String("Crossed the frozen border!"),
  • Hero Icon String(Hero(Mei))));
  • Wait(4, Ignore Condition);
  • }
  • }
  • 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.500);
  • 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
  • {
  • disabled 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.25 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 - recal to a selected position, heal and reset cd's and ammo after recal. Deal 50% damage while recal 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.500;
  • }
  • }
  • rule("Genji passive")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Genji;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Genji);
  • }
  • 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), 95)), Event Player, 125, Receivers Damagers and Damage Percent);
  • Event Player.D[0] = Last Damage Modification ID;
  • Wait(0.500, Ignore Condition);
  • Loop If Condition Is True;
  • Stop Damage Modification(Event Player.D[0]);
  • }
  • }
  • 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.500);
  • 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.F[0] * 0.500);
  • Skip If(Event Player.F[1] == 0, 2);
  • Set Ability Cooldown(Event Player, Button(Ability 1), 0);
  • Event Player.F[1] = 0;
  • Skip If(Event Player.F[2] == 0, 2);
  • Set Ammo(Event Player, 0, Ammo(Event Player, False) + Event Player.F[2]);
  • Event Player.F[2] = 0;
  • Event Player.F[0] = 0;
  • }
  • }
  • rule("Genji ability 2 used shift during recall")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Genji;
  • }
  • conditions
  • {
  • Event Player.R > 0;
  • Is Using Ability 1(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.F[1] = 1;
  • }
  • }
  • rule("Genji ability 2 used ammo during recall")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Genji;
  • }
  • conditions
  • {
  • Event Player.R > 0;
  • (Is Firing Primary(Event Player) || Is Firing Secondary(Event Player)) == True;
  • }
  • actions
  • {
  • Event Player.F[2] += 3;
  • }
  • }
  • rule("Genji ability 2 count damage received")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • Genji;
  • }
  • conditions
  • {
  • Event Player.R > 0;
  • }
  • actions
  • {
  • Event Player.F[0] = Event Player.F[0] + 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.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 + 1], 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 != 1;
  • }
  • 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 = 1;
  • 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 == 2;
  • 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 = 2;
  • 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 == 3;
  • 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 = 3;
  • 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 set configuration: Sentry when no other config has been set")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Bastion;
  • }
  • conditions
  • {
  • Global.MatchStatus == 1;
  • Event Player.F == 0;
  • }
  • actions
  • {
  • Allow Button(Event Player, Button(Ability 1));
  • Event Player.PlayerStats[12] = Event Player.PlayerStats[12] + 10;
  • Event Player.F = 1;
  • 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 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 == 1;
  • 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 == 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;
  • 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 == 3;
  • 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;
  • }
  • }
  • rule("Set slow motion when server load is high")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Server Load > 100;
  • }
  • actions
  • {
  • Set Slow Motion(100 - 5 + Server Load * 0.300);
  • Wait(0.016, Ignore Condition);
  • Loop If Condition Is True;
  • Set Slow Motion(100);
  • }
  • }
Join the Workshop.codes Discord