-
Notifications
You must be signed in to change notification settings - Fork 1
/
ravensaidome.min.ow.txt
1 lines (1 loc) · 301 KB
/
ravensaidome.min.ow.txt
1
settings { main { Description: "Raven's AI Dome is a tool for practicing against dummy bots with AI for all Heroes. (한국어 옵션 포함!)\n♥ Import Code: BWGAP\n♥ Created by Raven#112503\n♥ If you modify this mode and share your modification, please prepend \"Modified by: [your battletag]\"to this description." Mode Name: "Raven's AI Dome" } lobby { Allow Players Who Are In Queue: Yes Max Spectators: 4 Max Team 2 Players: 0 Return To Lobby: Never } modes { Skirmish { enabled maps { Workshop Expanse } } General { Game Mode Start: Immediately Hero Limit: Off Respawn Time Scalar: 0% Spawn Health Packs: Disabled } } heroes { Team 1 { Mercy { Weapons Enabled: Caduceus Blaster Only } } General { Ultimate Generation: 250% Wrecking Ball { Jump Vertical Speed: 300% } } } } variables { global: 0: a 1: b 2: c 3: d 4: e 5: f 6: g 7: h 8: i 9: j 10: k 11: l 12: m 13: n 14: o 15: p 16: q 17: r 18: s 19: t 20: u 21: v 22: w 23: x 24: y 25: z 26: A 27: B 28: C 29: D 30: E 31: F 32: G 33: H 54: ac 55: ad 34: I 35: J 36: K 37: L 38: M 39: N 40: O 41: P 42: Q 43: R 44: S 45: T 46: U 48: W 49: X 50: Y 51: Z 52: aa 53: ab player: 0: a 1: b 2: c 3: d 4: e 5: f 6: g 7: h 8: i 9: j 10: k 11: l 12: m 13: n 14: o 15: p 16: q 17: r 18: s 19: t 20: u 21: v 22: w 23: x 24: y 25: z 26: A 27: B 28: C 29: D 30: E 31: F 32: G 33: H 34: I 35: J 36: K 37: L 38: M 39: N 40: O 41: P 42: Q 43: R 44: S 45: T 46: U 47: V 48: W 49: X 50: Y 51: Z 52: aa 53: ab 54: ac 55: ad 56: ae 57: af 58: ag 59: ah 60: ai 61: aj 62: ak 63: al 64: am 65: an 66: ao 67: ap 68: aq 69: ar 70: as 71: at 72: au 73: av 74: aw 75: ax 76: ay 77: az 78: ba 79: bb 80: bc 81: bd 82: be 83: bf 84: bg 85: bh 86: bi 87: bj 88: bk 89: bl 90: bm 91: bn 92: bo 93: bp 94: bq 95: br 96: bs 97: bt 98: bu 99: bv 100: bw 101: bx 102: by 103: bz 104: ca 105: cb 106: cc } subroutines { 0: a 1: b 2: c 3: d 4: e 5: f 6: g 7: h 8: i 9: j 10: k 11: l 12: m 13: n 14: o 15: p 16: q 17: r 18: s 19: t 20: u 21: v 22: w 23: x 24: y 25: z 26: A 27: B 28: C 29: D 30: E 31: F 32: G 33: H 34: I 35: J 36: K 37: L 38: M 39: N 40: O 41: P 69: ar 42: Q 43: R 44: S 65: an 66: ao 45: T 46: U 47: V 48: W 49: X 50: Y 51: Z 52: aa 53: ab 54: ac 55: ad 56: ae 57: af 58: ag 59: ah 60: ai 61: aj 62: ak 63: al 64: am 67: ap 68: aq } rule("Global Settings") { event { Ongoing - Global; } actions { Global.R = Workshop Setting Combo ( Custom String("Default Settings / 기본 설정"), Custom String("Language / 언어"), 0, Array(Custom String("English"), Custom String("한국어")), 0 ); Global.N = Workshop Setting Combo ( Custom String("Default Settings / 기본 설정"), Custom String("Difficulty / 난이도"), 6, Array ( Custom String("No AI Easy"), Custom String("No AI Medium"), Custom String("No AI Hard"), Custom String("AI Bronze"), Custom String("AI Silver"), Custom String("AI Gold"), Custom String("AI Platinum"), Custom String("AI Diamond"), Custom String("AI Master"), Custom String("AI Grand Master"), Custom String("AI Top 500") ), 1 ); Global.Q = Workshop Setting Integer ( Custom String("Default Settings / 기본 설정"), Custom String("Kill Goal / 필요한 킬 수"), 4, 4, 64, 2 ); If(Global.Q % 4 != 0 && Global.Q > 4); Global.Q = Global.Q - Global.Q % 4; End; Global.O = Workshop Setting Combo ( Custom String("Default Settings / 기본 설정"), Custom String("Bot Hero Role / 영웅 유형"), 0, Array ( Custom String("All"), Custom String("Tank"), Custom String("Damage"), Custom String("Support") ), 3 ); Global.T = Workshop Setting Toggle ( Custom String("Default Settings / 기본 설정"), Custom String("Player Healing / 플레이어 치유"), True, 4 ); Global.I = Workshop Setting Toggle ( Custom String("Default Settings / 기본 설정"), Custom String("Bot Healing / 인공지는 치유"), False, 5 ); Global.X = Workshop Setting Toggle ( Custom String("Default Settings / 기본 설정"), Custom String("Random Names For Bots"), True, 5.5 ); Global.M = Workshop Setting Toggle ( Custom String("Debug Settings / 디버그 설정"), Custom String("Debug Mode / 디버그 모드"), False, 6 ); Global.L = Workshop Setting Toggle ( Custom String("Debug Settings / 디버그 설정"), Custom String("Debug HUD / 디버그 HUD"), False, 7 ); Global.S = Workshop Setting Toggle ( Custom String("Debug Settings / 디버그 설정"), Custom String ("Global 1 Second Cooldown Mode / 글로벌 쿨 다운 새로 고침"), False, 8 ); Global.K = Array(); Global.K[0] = Workshop Setting Toggle ( Custom String("Debug Settings / 디버그 설정"), Custom String("Debug Hero Enabled / 디버그 영웅 활성화"), False, 9 ); If(Global.K[0] == True); Global.K[1] = Workshop Setting Hero ( Custom String("Debug Settings / 디버그 설정"), Custom String("Debug Hero / 디버그 영웅"), Genji, 10 ); End; If(Global.M == True); Enable Inspector Recording; Else; Disable Inspector Recording; End; Disable Built-In Game Mode Completion; } } rule("Global Main Tick Loop") { event { Ongoing - Global; } conditions { Is Game In Progress == True; } actions { For Global Variable(W, 0, 60, 1); If(Server Load >= 240); Wait(2 / 60, Ignore Condition); Else If(Server Load >= 225); Wait(1 / 60, Ignore Condition); Else; Wait(0.500 / 60, Ignore Condition); End; End; Loop If Condition Is True; } } rule("Global Defines") { event { Ongoing - Global; } actions { Global.P = False; Global.D = Custom String("1.0.1"); Global.c = Custom String("20220623"); Global.G = Custom String("BWGAP"); Global.j = Custom String("Raven#112503"); Global.C = Custom String("twitch.tv/RavenLuna"); Global.l = Custom String ("github.com/SnowLune/RavensAIDome"); Global.k = Custom String("TBA"); Global.o = 65; Global.r = 50; Global.A = 35; Global.E = 20; Global.H = 20; Global.b = 80; Global.q = 10; Global.y = 999999; Global.m = Array(); Global.m[0] = All Heroes; Global.m[1] = All Tank Heroes; Global.m[2] = All Damage Heroes; Global.m[3] = All Support Heroes; Global.p = Array(); Global.p[0] = Hero(Widowmaker); Global.s = Array(); Global.s[0] = Hero(Ana); Global.s[1] = Hero(Ashe); Global.s[2] = Hero(Baptiste); Global.s[3] = Hero(Hanzo); Global.B = Array(); Global.B[0] = Hero(Bastion); Global.B[1] = Hero(Lúcio); Global.B[2] = Hero(Cassidy); Global.B[3] = Hero(Mei); Global.B[4] = Hero(Orisa); Global.B[5] = Hero(Soldier: 76); Global.B[6] = Hero(Torbjörn); Global.B[7] = Hero(Zenyatta); Global.B[8] = Hero(Roadhog); Global.F = Array(); Global.F[0] = Hero(Brigitte); Global.F[1] = Hero(D.Va); Global.F[2] = Hero(Moira); Global.F[3] = Hero(Reaper); Global.F[4] = Hero(Reinhardt); Global.F[5] = Hero(Sigma); Global.F[6] = Hero(Symmetra); Global.F[7] = Hero(Winston); Global.F[8] = Hero(Zarya); Global.F[9] = Hero(Doomfist); Global.x = Array(); Global.x[0] = Hero(Ana); Global.x[1] = Hero(Ashe); Global.x[2] = Hero(Baptiste); Global.x[3] = Hero(Bastion); Global.x[4] = Hero(D.Va); Global.x[5] = Hero(Echo); Global.x[6] = Hero(Genji); Global.x[7] = Hero(Hanzo); Global.x[8] = Hero(Junkrat); Global.x[9] = Hero(Lúcio); Global.x[10] = Hero(Cassidy); Global.x[11] = Hero(Mercy); Global.x[12] = Hero(Orisa); Global.x[13] = Hero(Pharah); Global.x[14] = Hero(Reaper); Global.x[15] = Hero(Roadhog); Global.x[16] = Hero(Sigma); Global.x[17] = Hero(Soldier: 76); Global.x[18] = Hero(Sombra); Global.x[19] = Hero(Torbjörn); Global.x[20] = Hero(Tracer); Global.x[21] = Hero(Widowmaker); Global.x[22] = Hero(Wrecking Ball); Global.x[23] = Hero(Zenyatta); Global.n = Array(); Global.n[0] = Hero(Echo); Global.n[1] = Hero(Genji); Global.n[2] = Hero(Junkrat); Global.n[3] = Hero(Mercy); Global.n[4] = Hero(Pharah); Global.n[5] = Hero(Sombra); Global.n[6] = Hero(Tracer); Global.n[7] = Hero(Wrecking Ball); Global.z = Array(); Global.z[0] = Hero(Ana); Global.z[1] = Hero(Ashe); Global.z[2] = Hero(Widowmaker); Global.t = Array(); Global.t[0] = Forward; Global.t[1] = Backward; Global.t[2] = Left; Global.t[3] = Right; Global.t[4] = Vector(1, 0, 1); Global.t[5] = Vector(-1, 0, 1); Global.t[6] = Vector(1, 0, -1); Global.t[7] = Vector(-1, 0, -1); Global.v = Array(); Global.v[0] = Forward; Global.v[1] = Left; Global.v[2] = Right; Global.v[3] = Vector(1, 0, 1); Global.v[4] = Vector(-1, 0, 1); Global.u = Array(); Global.u[0] = Backward; Global.u[1] = Left; Global.u[2] = Right; Global.u[3] = Vector(1, 0, -1); Global.u[4] = Vector(-1, 0, -1); Global.w = Array(); Global.w[0] = Left; Global.w[1] = Right; Global.h = Custom Color(255, 195, 216, 255); Global.d = Custom Color(255, 135, 176, 255); Global.i = Custom Color(190, 235, 233, 255); Global.e = Custom Color(138, 198, 209, 255); Global.g = Custom Color(230, 230, 230, 255); Global.f = Array(); Global.f[0] = Color(White); Global.f[1] = Color(Gray); Global.f[2] = Color(Black); Global.f[3] = Color(Red); Global.f[4] = Color(Green); Global.f[5] = Color(Blue); Global.f[6] = Color(Rose); Global.f[7] = Color(Lime Green); Global.f[8] = Color(Sky Blue); Global.f[9] = Color(Violet); Global.J = Array(); Global.a = Array(); Global.a[0] = Custom String("Amanda"); Global.a[1] = Custom String("Amber"); Global.a[2] = Custom String("Aphrodite"); Global.a[3] = Custom String("CatShark"); Global.a[4] = Custom String("BeepBoop"); Global.a[5] = Custom String("BitsAndBytes"); Global.a[6] = Custom String("Blue"); Global.a[7] = Custom String("Mochi"); Global.a[8] = Custom String("BronzeSmurf"); Global.a[9] = Custom String("Comfort"); Global.a[10] = Custom String("Enceladus"); Global.a[11] = Custom String("Dirt"); Global.a[12] = Custom String("Ganymede"); Global.a[13] = Custom String("DoomfistOTP"); Global.a[14] = Custom String("DoomSlayer"); Global.a[15] = Custom String("DPSDiff"); Global.a[16] = Custom String("DPSLucio"); Global.a[17] = Custom String("DPSMercy"); Global.a[18] = Custom String("DrinkWater"); Global.a[19] = Custom String("Error"); Global.a[20] = Custom String("Fallout"); Global.a[21] = Custom String("Fear"); Global.a[22] = Custom String("Friend"); Global.a[23] = Custom String("GenjiMain"); Global.a[24] = Custom String("GGILY"); Global.a[25] = Custom String("GiveMeHanzo"); Global.a[26] = Custom String("GlaDOS"); Global.a[27] = Custom String("Triton"); Global.a[28] = Custom String("Greg"); Global.a[29] = Custom String("HammerOnly"); Global.a[30] = Custom String("HealPls"); Global.a[31] = Custom String("SRVacuum"); Global.a[32] = Custom String("Eris"); Global.a[33] = Custom String("HotTopic"); Global.a[34] = Custom String("IBMPC"); Global.a[35] = Custom String("IDontMiss"); Global.a[36] = Custom String("IMainSupport"); Global.a[37] = Custom String("ImSorry"); Global.a[38] = Custom String("Instalock"); Global.a[39] = Custom String("IntMain"); Global.a[40] = Custom String("JustLikeBart"); Global.a[41] = Custom String("ICantDoMore"); Global.a[42] = Custom String("Aaron"); Global.a[43] = Custom String("Player"); Global.a[44] = Custom String("Mars"); Global.a[45] = Custom String("Mercury"); Global.a[46] = Custom String("MercyMainBTW"); Global.a[47] = Custom String("MercyOnly"); Global.a[48] = Custom String("Mint"); Global.a[49] = Custom String("MoicyIsCanon"); Global.a[50] = Custom String("Mother"); Global.a[51] = Custom String("Neptune"); Global.a[52] = Custom String("NotABot"); Global.a[53] = Custom String("NotASmurf"); Global.a[54] = Custom String("NotScripting"); Global.a[55] = Custom String("NotSmurfing"); Global.a[56] = Custom String("OatMilk"); Global.a[57] = Custom String("OnesAndZeros"); Global.a[58] = Custom String("Overclocked"); Global.a[59] = Custom String("Deimos"); Global.a[60] = Custom String("Persephone"); Global.a[61] = Custom String("Phobos"); Global.a[62] = Custom String("Princess"); Global.a[63] = Custom String("Ramen"); Global.a[64] = Custom String("Reboot"); Global.a[65] = Custom String("Samantha"); Global.a[66] = Custom String("Sedna"); Global.a[67] = Custom String("Deadbeat"); Global.a[68] = Custom String("SupportDiff"); Global.a[69] = Custom String("Takoyaki"); Global.a[70] = Custom String("TankDiff"); Global.a[71] = Custom String("Tempest"); Global.a[72] = Custom String("TheBoyMayor"); Global.a[73] = Custom String("Titan"); Global.a[74] = Custom String("TokyoFool"); Global.a[75] = Custom String("TryRustLang"); Global.a[76] = Custom String("Venus"); Global.a[77] = Custom String("Veronica"); Global.a[78] = Custom String("ZaryaMain"); Global.a[79] = Custom String("ZenMainBTW"); Global.a[80] = Custom String("HelloWorld"); Global.a[81] = Custom String("Alien"); Global.a[82] = Custom String("MyMainIsT500"); Global.a[83] = Custom String("SuperFan"); Global.a[84] = Custom String("Europa"); Global.a[85] = Custom String("Callisto"); Global.a[86] = Custom String("Io"); Global.a[87] = Custom String("LoveYourself"); Global.a[88] = Custom String("GoodLuck"); Global.a[89] = Custom String("ILoveCats"); Global.a[90] = Custom String("LoveDVa"); Global.a[91] = Custom String("Brig1Trick"); Global.a[92] = Custom String("Monke"); Global.a[93] = Custom String("GravNanoRein"); Global.a[94] = Custom String("StanLOONA"); Global.a[95] = Custom String("OverTuned"); Global.U = Array(); Global.ac = Array(); Global.ac[0] = Custom String("None"); Global.ac[1] = Custom String("Widowmaker 1v1"); Global.ac[2] = Custom String("Reinhardt 1v1"); Global.ac[3] = Custom String("Roadhog Hook Practice"); Global.ac[4] = Custom String("Ana Sleepdart Practice"); Global.ac[5] = Custom String("Hard, Thorough Warmup"); Global.ac[6] = Custom String("Easy, Thorough Warmup"); Global.ad = Array(); Global.ad[0] = Color(White); Global.ad[1] = Color(White); Global.ad[2] = Color(White); Global.ad[3] = Custom Color(190, 130, 93, 255); Global.ad[4] = Custom Color(212, 212, 212, 255); Global.ad[5] = Custom Color(242, 217, 114, 255); Global.ad[6] = Custom Color(235, 241, 235, 255); Global.ad[7] = Custom Color(178, 186, 255, 255); Global.ad[8] = Custom Color(255, 208, 128, 255); Global.ad[9] = Custom Color(255, 255, 212, 255); Global.ad[10] = Custom Color(226, 237, 255, 255); Global.P = True; } } rule("aa") { event { Subroutine; aa; } actions { If(Count Of(Players In Slot(Slot Of(Event Player), Team 1).aj) > 0); Call Subroutine(af); End; If(Count Of(Players In Slot(Slot Of(Event Player), Team 1).ag) > 0); Call Subroutine(ab); End; If(Count Of(Players In Slot(Slot Of(Event Player), Team 1).ai) > 0); Call Subroutine(ac); End; Wait(3 / 60, Ignore Condition); If(Count Of(Players In Slot(Slot Of(Event Player), Team 1).ad) > 0); For Player Variable(Players In Slot(Slot Of(Event Player), Team 1), af, Count Of(Players In Slot(Slot Of(Event Player), Team 1) .ad), -1, -1); Destroy HUD Text(Players In Slot(Slot Of(Event Player), Team 1).ad[Players In Slot(Slot Of(Event Player), Team 1).af]); Players In Slot(Slot Of(Event Player), Team 1).ad = Remove From Array(Players In Slot(Slot Of(Event Player), Team 1) .ad, Players In Slot(Slot Of(Event Player), Team 1).ad[Players In Slot(Slot Of(Event Player), Team 1).af]); End; Players In Slot(Slot Of(Event Player), Team 1).ae = False; If(Count Of(Players In Slot(Slot Of(Event Player), Team 1).ai) <= 0); Call Subroutine(ac); End; Else; Players In Slot(Slot Of(Event Player), Team 1).ad = Array(); Players In Slot(Slot Of(Event Player), Team 1).ae = True; Create HUD Text(Players In Slot(Slot Of(Event Player), Team 1), Custom String("Server Load: {0}% ({1})", Round To Integer( Server Load / 2.550, Down), Server Load), Custom String("Average: {0}% ({1})", Round To Integer(Server Load Average / 2.550, Down), Server Load Average), Custom String("Peak: {0}% ({1})", Round To Integer(Server Load Peak / 2.550, Down), Server Load Peak), Top, 100, Global.h, Global.i, Global.e, Visible To and String, Default Visibility); Modify Player Variable(Players In Slot(Slot Of(Event Player), Team 1), ad, Append To Array, Last Text ID); Create HUD Text(Players In Slot(Slot Of(Event Player), Team 1), Null, Custom String("Enemy Pos: {0}", Position Of(Players In Slot( Slot Of(Event Player), Team 2))), Custom String("Player Pos: {0}", Position Of(Event Player)), Left, 4, Color(White), Global.h, Global.i, Visible To and String, Default Visibility); Modify Player Variable(Players In Slot(Slot Of(Event Player), Team 1), ad, Append To Array, Last Text ID); Create HUD Text(Players In Slot(Slot Of(Event Player), Team 1), Null, Custom String("Enemy Dist From Home: {0}", Distance Between( Players In Slot(Slot Of(Event Player), Team 2), Players In Slot(Slot Of(Event Player), Team 1).bm)), Custom String( "Player Dist From Home: {0}", Distance Between(Players In Slot(Slot Of(Event Player), Team 1), Players In Slot(Slot Of( Event Player), Team 1).bm)), Left, 5, Color(White), Global.h, Global.i, Visible To and String, Default Visibility); Modify Player Variable(Players In Slot(Slot Of(Event Player), Team 1), ad, Append To Array, Last Text ID); Create HUD Text(Players In Slot(Slot Of(Event Player), Team 1), Custom String("Enemy Distance From Player: {0}", Distance Between( Players In Slot(Slot Of(Event Player), Team 1), Players In Slot(Slot Of(Event Player), Team 2))), Null, Null, Left, 5.200, Global.h, Color(White), Color(White), Visible To and String, Default Visibility); Modify Player Variable(Players In Slot(Slot Of(Event Player), Team 1), ad, Append To Array, Last Text ID); Create HUD Text(Players In Slot(Slot Of(Event Player), Team 1), Custom String("Enemy Ult Charge: {0}", Ultimate Charge Percent( Players In Slot(Slot Of(Event Player), Team 2))), Null, Null, Right, 6, Global.g, Color(White), Color(White), Visible To and String, Default Visibility); Modify Player Variable(Players In Slot(Slot Of(Event Player), Team 1), ad, Append To Array, Last Text ID); Create HUD Text(Players In Slot(Slot Of(Event Player), Team 1), Custom String("Player Facing Dir: {0}", Facing Direction Of( Event Player)), Null, Custom String("Enemy Facing Dir: {0}", Facing Direction Of(Players In Slot(Slot Of(Event Player), Team 2))), Left, 6.100, Global.i, Color(White), Global.h, Visible To and String, Default Visibility); Modify Player Variable(Players In Slot(Slot Of(Event Player), Team 1), ad, Append To Array, Last Text ID); End; } } rule("ab") { event { Subroutine; ab; } actions { If(Count Of(Players In Slot(Slot Of(Event Player), Team 1).aj) > 0); Call Subroutine(af); End; If(Count Of(Players In Slot(Slot Of(Event Player), Team 1).ad) > 0); Call Subroutine(aa); End; Wait(3 / 60, Ignore Condition); If(Players In Slot(Slot Of(Event Player), Team 1).ah == True); Modify Global Variable(Y, Remove From Array By Value, Event Player); Modify Global Variable(Z, Remove From Array By Value, Event Player); Players In Slot(Slot Of(Event Player), Team 1).ah = False; Else; If(Players In Slot(Slot Of(Event Player), Team 1).bo == 1); Modify Global Variable(Y, Remove From Array By Value, Event Player); Modify Global Variable(Z, Append To Array, Event Player); Else; Modify Global Variable(Z, Remove From Array By Value, Event Player); Modify Global Variable(Y, Append To Array, Event Player); End; Players In Slot(Slot Of(Event Player), Team 1).ah = True; Wait(20, Ignore Condition); If(Event Player.ah == True); Call Subroutine(ab); End; End; } } rule("ac") { event { Subroutine; ac; } actions { If(Count Of(Players In Slot(Slot Of(Event Player), Team 1).ai) > 0); For Player Variable(Players In Slot(Slot Of(Event Player), Team 1), af, Count Of(Players In Slot(Slot Of(Event Player), Team 1) .ai), -1, -1); Destroy HUD Text(Players In Slot(Slot Of(Event Player), Team 1).ai[Players In Slot(Slot Of(Event Player), Team 1).af]); Players In Slot(Slot Of(Event Player), Team 1).ai = Remove From Array(Players In Slot(Slot Of(Event Player), Team 1) .ai, Players In Slot(Slot Of(Event Player), Team 1).ai[Players In Slot(Slot Of(Event Player), Team 1).af]); End; Else; Wait(3 / 60, Ignore Condition); Players In Slot(Slot Of(Event Player), Team 1).ai = Array(); Create HUD Text(Players In Slot(Slot Of(Event Player), Team 1), Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("{0} 킬: {1} / {2}", Hero Icon String(Players In Slot(Slot Of(Event Player), Team 1) .bj[Players In Slot(Slot Of(Event Player), Team 1).ar]), Players In Slot(Slot Of(Event Player), Team 1) .Q, Players In Slot(Slot Of(Event Player), Team 1).bn == Global.y ? Custom String("무한") : Players In Slot(Slot Of(Event Player), Team 1).bn) : Custom String("{0} Kills: {1} / {2}", Hero Icon String( Players In Slot(Slot Of(Event Player), Team 1).bj[Players In Slot(Slot Of(Event Player), Team 1).ar]), Players In Slot(Slot Of(Event Player), Team 1).Q, Players In Slot(Slot Of(Event Player), Team 1) .bn == Global.y ? Custom String("Infinite") : Players In Slot(Slot Of(Event Player), Team 1).bn), Null, Null, Right, -3, Color(White), Color(White), Color(White), Visible To and String, Default Visibility); Modify Player Variable(Players In Slot(Slot Of(Event Player), Team 1), ai, Append To Array, Last Text ID); Create HUD Text(Players In Slot(Slot Of(Event Player), Team 1), Null, Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("{0} 당신을 {1} 번 죽였습니다", Hero Of(Players In Slot(Slot Of(Event Player), Team 2)), Players In Slot(Slot Of(Event Player), Team 2).Q) : Custom String("{0} killed you {1} time(s).", Hero Of( Players In Slot(Slot Of(Event Player), Team 2)), Players In Slot(Slot Of(Event Player), Team 2).Q), Null, Right, -2.900, Color(White), Global.h, Color(Red), Visible To and String, Default Visibility); Modify Player Variable(Players In Slot(Slot Of(Event Player), Team 1), ai, Append To Array, Last Text ID); Create HUD Text(Players In Slot(Slot Of(Event Player), Team 1), Null, Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("영웅 유형: {0}", Players In Slot(Slot Of(Event Player), Team 1).bk) : Custom String( "Hero Type: {0}", Players In Slot(Slot Of(Event Player), Team 1).bk), Players In Slot(Slot Of(Event Player), Team 1).bo == 1 ? Custom String("영웅: {0} / {1}", 1 + Players In Slot(Slot Of(Event Player), Team 1).ar, Count Of(Players In Slot(Slot Of(Event Player), Team 1).bj)) : Custom String("Hero: {0} / {1}", 1 + Players In Slot( Slot Of(Event Player), Team 1).ar, Count Of(Players In Slot(Slot Of(Event Player), Team 1).bj)), Right, -2.200, Color(White), Color(White), Global.i, Visible To and String, Default Visibility); Modify Player Variable(Players In Slot(Slot Of(Event Player), Team 1), ai, Append To Array, Last Text ID); Create HUD Text(Players In Slot(Slot Of(Event Player), Team 1), Null, Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("다음 영웅: {0}", Players In Slot(Slot Of(Event Player), Team 1) .bu == True ? Custom String("?") : Hero Icon String(Players In Slot(Slot Of(Event Player), Team 1) .bj[Players In Slot(Slot Of(Event Player), Team 1).as])) : Custom String("Next Hero: {0}", Players In Slot(Slot Of(Event Player), Team 1).bu == True ? Custom String("?") : Hero Icon String( Players In Slot(Slot Of(Event Player), Team 1).bj[Players In Slot(Slot Of(Event Player), Team 1) .as])), Null, Right, -2, Color(White), Global.e, Color(Aqua), Visible To and String, Default Visibility); Modify Player Variable(Players In Slot(Slot Of(Event Player), Team 1), ai, Append To Array, Last Text ID); Create HUD Text(Players In Slot(Slot Of(Event Player), Team 1), Null, Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("난이도: {0}", Players In Slot(Slot Of(Event Player), Team 1).az[Players In Slot( Slot Of(Event Player), Team 1).ay]) : Custom String("Difficulty: {0}", Players In Slot(Slot Of(Event Player), Team 1) .az[Players In Slot(Slot Of(Event Player), Team 1).ay]), Null, Right, -0.900, Color(White), Global.g, Color(White), Visible To and String, Default Visibility); Modify Player Variable(Players In Slot(Slot Of(Event Player), Team 1), ai, Append To Array, Last Text ID); End; } } rule("ae") { event { Subroutine; ae; } actions { If(Event Player.an == 0); Play Effect(Event Player, Buff Impact Sound, Color(White), Players In Slot(Slot Of(Event Player), Team 1).am - Vector(0, 15, 0), 20); Else If(Event Player.an == 1); Play Effect(Event Player, Debuff Impact Sound, Color(White), Players In Slot(Slot Of( Event Player), Team 1).am - Vector(0, 15, 0), 20); Else If(Event Player.an == 2); Play Effect(Event Player, Explosion Sound, Color(White), Players In Slot(Slot Of(Event Player), Team 1).am - Vector(0, 15, 0), 15); Else; Play Effect(Event Player, Explosion Sound, Color(White), Players In Slot(Slot Of(Event Player), Team 1).am - Vector(0, 15, 0), 10); End; } } rule("af") { event { Subroutine; af; } actions { If(Event Player.ah == True); Call Subroutine(ab); End; If(Count Of(Event Player.ad) > 0); Call Subroutine(aa); End; If(Count Of(Event Player.ai) > 0); Call Subroutine(ac); End; Wait(3 / 60, Ignore Condition); If(Count Of(Event Player.aj) > 0); For Player Variable(Event Player, af, Count Of(Event Player .aj), -1, -1); Destroy In-World Text(Event Player.aj[Event Player .af]); Event Player.aj = Remove From Array(Event Player .aj, Event Player.aj[Event Player .af]); End; Destroy Effect(Event Player.ba[10]); Destroy Effect(Event Player.ba[11]); If(Event Player.bv != 2); Clear Status(Event Player, Phased Out); End; Stop Forcing Player Position(Event Player); Stop Facing(Event Player); Call Subroutine(Q); Wait(6 / 60, Ignore Condition); Event Player.al = False; Event Player.ap = Null; Event Player.ak[0] = Null; Event Player.ak[1] = Null; Stop Camera(Event Player); Enable Hero HUD(Event Player); Call Subroutine(ac); If(Event Player.cc != Global.ac[Event Player.cb]); Event Player.cc = Global.ac[Event Player.cb]; Call Subroutine(aq); End; If(Event Player.bk != Event Player .bi[Event Player.aq]); Event Player.ar = 0; Event Player.bl = 0; Call Subroutine(ak); Call Subroutine(X); Else; Call Subroutine(Y); End; Else; If(Players In Slot(Slot Of(Event Player), Team 2).c == True); Call Subroutine(W); End; Set Status(Event Player, Null, Phased Out, Global.y); If(Event Player.bc == True); Start Forcing Player Position(Event Player, Event Player .bm + Vector(0, Event Player.bd, 0), False); Else; Start Forcing Player Position(Event Player, Event Player .bm, False); End; Start Facing(Event Player, Facing Direction Of(Event Player), 100, To World, Direction and Turn Rate); Call Subroutine(R); Clear Status(Event Player, Burning); Clear Status(Event Player, Knocked Down); Clear Status(Event Player, Asleep); Clear Status(Event Player, Frozen); Clear Status(Event Player, Stunned); Clear Status(Event Player, Rooted); Heal(Event Player, Null, Max Health(Event Player)); Event Player.ap = Event Player; Call Subroutine(ad); Disable Hero HUD(Event Player); Event Player.ao = Array(); For Player Variable(Event Player, af, -1, 15, 1); Modify Player Variable(Event Player, ao, Append To Array, Vector(0, 45, 1.250 * Event Player.af)); End; Event Player.am = Event Player .ao[0]; Event Player.ak = Array(Null, Null); Event Player.aj = Array(); Create In-World Text(Event Player.ak[0], Icon String(Arrow: Left), Event Player.am + Vector(4.500, 0, 0), 1.250, Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility); Modify Player Variable(Event Player, aj, Append To Array, Last Text ID); Create In-World Text(Event Player.ak[1], Icon String(Arrow: Right), Event Player.am + Vector(-4.500, 0, 0), 1.250, Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility); Modify Player Variable(Event Player, aj, Append To Array, Last Text ID); Create Beam Effect(Event Player, Bad Beam, Event Player .am + Vector(-4.500, 0, -0.500), Event Player .am + Vector(4.500, 0, -0.500), Event Player.bb, Position Radius and Color); Event Player.ba[10] = Last Created Entity; Create Beam Effect(Event Player, Bad Beam, Event Player .am + Vector(-4.500, 0, -1.500), Event Player .am + Vector(4.500, 0, -1.500), Event Player.bb, Position Radius and Color); Event Player.ba[11] = Last Created Entity; Create In-World Text(Event Player.ap, Event Player.bo == 1 ? Custom String("난이도: {0}", Event Player .az[Event Player.ay]) : Custom String("Difficulty: {0}", Event Player.az[Event Player.ay]), Event Player.ao[0], 1.500, Clip Against Surfaces, Visible To String and Color, Global.ad[Event Player.ay], Default Visibility); Modify Player Variable(Event Player, aj, Append To Array, Last Text ID); Create In-World Text(Event Player.ap, Event Player.bo == 1 ? Custom String("필요한 킬 수: {0}", Event Player .bn == Global.y ? Custom String("무한") : Event Player.bn) : Custom String("Kill Goal: {0}", Event Player .bn == Global.y ? Custom String("Infinite") : Event Player.bn), Event Player.ao[1], 1.500, Clip Against Surfaces, Visible To and String, Color(White), Default Visibility); Modify Player Variable(Event Player, aj, Append To Array, Last Text ID); Create In-World Text(Event Player.ap, Custom String("Preset: {0}", Global.ac[Event Player.cb]), Event Player.ao[2], 1.250, Clip Against Surfaces, Visible To and String, Color(White), Default Visibility); Modify Player Variable(Event Player, aj, Append To Array, Last Text ID); Create In-World Text(Event Player.ap, Event Player.bo == 1 ? Custom String("영웅 유형: {0}", Event Player .bi[Event Player.aq]) : Custom String("Bot Hero Role: {0}", Event Player.bi[Event Player .aq]), Event Player.ao[3], 1.500, Clip Against Surfaces, Visible To and String, Color(White), Default Visibility); Modify Player Variable(Event Player, aj, Append To Array, Last Text ID); Create In-World Text(Event Player.ap, Event Player.bo == 1 ? Custom String("빠른 모드: {0}", Event Player .bu == True ? Custom String("활성화") : Custom String("비활성화")) : Custom String("Quick Mode: {0}", Players In Slot( Slot Of(Event Player), Team 1).bu == True ? Custom String("On") : Custom String("Off")), Players In Slot( Slot Of(Event Player), Team 1).ao[4], 1.500, Clip Against Surfaces, Visible To and String, Color(White), Default Visibility); Modify Player Variable(Event Player, aj, Append To Array, Last Text ID); Create In-World Text(Event Player.ap, Event Player.bo == 1 ? Custom String("같은 영웅 모드: {0}", Event Player .bq == True ? Custom String("활성화") : Custom String("비활성화")) : Custom String("Mirror Mode: {0}", Event Player.bq == True ? Custom String("On") : Custom String("Off")), Event Player.ao[5], 1.500, Clip Against Surfaces, Visible To and String, Color(White), Default Visibility); Modify Player Variable(Event Player, aj, Append To Array, Last Text ID); Create In-World Text(Event Player.ap, Event Player.bo == 1 ? Custom String("1 초 쿨 다운 모드: {0}", Event Player .br == 3 ? Custom String("플레이어 + 인공 지능") : (Event Player .br == 2 ? Custom String("인공지는") : (Event Player .br == 1 ? Custom String("플레이어") : Custom String("비활성화")))) : Custom String("1 Sec Cooldown Mode: {0}", Event Player.br == 3 ? Custom String("Player & Bot") : (Players In Slot( Slot Of(Event Player), Team 1).br == 2 ? Custom String("Bot") : (Event Player .br == 1 ? Custom String("Player") : Custom String("Off")))), Event Player .ao[6], 1.250, Clip Against Surfaces, Visible To and String, Color(White), Default Visibility); Modify Player Variable(Event Player, aj, Append To Array, Last Text ID); Create In-World Text(Event Player.ap, Event Player.bo == 1 ? Custom String("킬 점수 패널티: {0}", Event Player .bp) : Custom String("Points Lost On Death: {0}", Event Player.bp == Global.y ? Custom String("All") : Event Player.bp), Event Player.ao[7], 1.500, Clip Against Surfaces, Visible To and String, Color(White), Default Visibility); Modify Player Variable(Event Player, aj, Append To Array, Last Text ID); Create In-World Text(Event Player.ap, Event Player.bo == 1 ? Custom String("플레이어 치유: {0}", Event Player .by == True ? Custom String("활성화") : Custom String("비활성화")) : Custom String("Player Healing: {0}", Event Player.by == True ? Custom String("On") : Custom String("Off")), Event Player.ao[8], 1.500, Clip Against Surfaces, Visible To and String, Color(White), Default Visibility); Modify Player Variable(Event Player, aj, Append To Array, Last Text ID); Create In-World Text(Event Player.ap, Event Player.bo == 1 ? Custom String("인공지는 치유: {0}", Event Player .bz == True ? Custom String("활성화") : Custom String("비활성화")) : Custom String("Bot Healing: {0}", Event Player.bz == True ? Custom String("On") : Custom String("Off")), Event Player.ao[9], 1.500, Clip Against Surfaces, Visible To and String, Color(White), Default Visibility); Modify Player Variable(Event Player, aj, Append To Array, Last Text ID); Create In-World Text(Event Player.ap, Event Player.bo == 1 ? Custom String("플레이어는 죽일 수 없다: {0}", Event Player .bv == True ? Custom String("활성화") : Custom String("비활성화")) : Custom String("Player Unkillable: {0}", Event Player.bv == 3 ? Custom String("On (Invincible)") : Event Player.bv == 2 ? Custom String("On (Phased Out)") : Event Player.bv == 1 ? Custom String("On (Unkillable)") : Custom String("Off")), Event Player.ao[10], 1.500, Clip Against Surfaces, Visible To and String, Color(White), Default Visibility); Modify Player Variable(Event Player, aj, Append To Array, Last Text ID); Create In-World Text(Event Player.ap, Event Player.bo == 1 ? Custom String("인공지는 궁극적 인 장애인: {0}", Event Player .ca == True ? Custom String("활성화") : Custom String("비활성화")) : Custom String("Disable Bot Ultimate: {0}", Event Player.ca == True ? Custom String("On") : Custom String("Off")), Event Player.ao[11], 1.500, Clip Against Surfaces, Visible To and String, Color(White), Default Visibility); Modify Player Variable(Event Player, aj, Append To Array, Last Text ID); Create In-World Text(Event Player.ap, Event Player.bo == 1 ? Custom String("인공지는 깜박거리는: {0}", Event Player .bx == True ? Custom String("활성화") : Custom String("비활성화")) : Custom String("Bot Flicker: {0}", Event Player.bx == True ? Custom String("On") : Custom String("Off")), Event Player.ao[12], 1.500, Clip Against Surfaces, Visible To and String, Color(White), Default Visibility); Modify Player Variable(Event Player, aj, Append To Array, Last Text ID); Create In-World Text(Event Player.ap, Event Player.bo == 1 ? Custom String("플레이어 엘리베이터: {0}", Event Player .bc == True ? Custom String("활성화") : Custom String("비활성화")) : Custom String("Player Elevator: {0}", Event Player.bc == True ? Custom String("On") : Custom String("Off")), Event Player.ao[13], 1.500, Clip Against Surfaces, Visible To and String, Color(White), Default Visibility); Modify Player Variable(Event Player, aj, Append To Array, Last Text ID); Create In-World Text(Event Player.ap, Event Player.bo == 1 ? Custom String("색깔: {0}", Event Player.bb) : Custom String("Bubble & Effect Color: {0}", Event Player.bb), Players In Slot( Slot Of(Event Player), Team 1).ao[14], 1.500, Clip Against Surfaces, Visible To and String, Color(White), Default Visibility); Modify Player Variable(Event Player, aj, Append To Array, Last Text ID); Create In-World Text(Event Player.ap, Event Player.bo == 1 ? Custom String("언어: {0}", Event Player .bo == 1 ? Custom String("한국어") : Custom String("English")) : Custom String("Language: {0}", Players In Slot(Slot Of( Event Player), Team 1).bo == 1 ? Custom String("한국어") : Custom String("English")), Players In Slot(Slot Of( Event Player), Team 1).ao[15], 1.500, Clip Against Surfaces, Visible To and String, Color(White), Default Visibility); Modify Player Variable(Event Player, aj, Append To Array, Last Text ID); Call Subroutine(ad); Stop Camera(Event Player); Call Subroutine(S); Start Camera(Event Player, Event Player .am - Vector(0, 15, 0.001), Event Player.am, 30); Event Player.al = True; Big Message(Event Player, Event Player .bo == 1 ? Custom String("메뉴를 탐색하려면 WASD 버튼을 사용하십시오") : Custom String("Use WASD to navigate the menu")); Big Message(Event Player, Event Player .bo == 1 ? Custom String("[{0} 및 {1}]를 길게 누르면 메뉴가 닫힙니다", Input Binding String(Button(Reload)), Input Binding String( Button(Melee))) : Custom String("Press {0} and {1} to close the menu", Input Binding String(Button(Reload)), Input Binding String(Button(Melee)))); End; Play Effect(Event Player, Buff Explosion Sound, Color(White), Players In Slot(Slot Of( Event Player), Team 1).am - Vector(0, 15, 0), 75); } } rule("Global HUD") { event { Ongoing - Global; } conditions { Is Game In Progress == True; } actions { Create HUD Text(All Players(All Teams), Null, Custom String(" "), Custom String(" "), Left, -20, Color(White), Color(White), Color( White), Visible To, Default Visibility); Create HUD Text(All Players(All Teams), Null, Custom String(" "), Custom String(" "), Left, -20, Color(White), Color(White), Color( White), Visible To, Default Visibility); Create HUD Text(All Players(All Teams), Custom String("{0}", Global.G), Custom String("{0}+{1}, {2}", Global.D, Global.c, Global.j), Custom String("Raven's AI Dome"), Left, -3, Global.h, Global.g, Global.i, Visible To, Default Visibility); Create HUD Text(Global.aa, Custom String(""), Custom String("Press {0} and {1} to show/hide info", Input Binding String(Button(Crouch)), Input Binding String(Button(Interact))), Null, Left, -1.890, Color(White), Color(White), Color(White), Visible To and String, Default Visibility); Create HUD Text(Global.aa, Custom String(""), Custom String("Hold {0} and {1} to change heroes", Input Binding String(Button(Crouch)), Input Binding String(Button(Reload))), Null, Left, -1.800, Color(White), Color(White), Color(White), Visible To and String, Default Visibility); Create HUD Text(Global.aa, Custom String(""), Custom String("Hold {0} and press {1} or {2} to cycle enemy hero", Input Binding String(Button(Interact)), Input Binding String(Button(Primary Fire)), Input Binding String(Button( Secondary Fire))), Null, Left, -1.600, Color(White), Color(White), Color(Yellow), Visible To and String, Default Visibility); Create HUD Text(Global.aa, Custom String(""), Custom String("Hold {0} and {1} to select specific enemy hero", Input Binding String(Button(Interact)), Input Binding String(Button(Reload))), Custom String( "Press {0} and {1} to open/close the menu", Input Binding String(Button(Reload)), Input Binding String(Button(Melee))), Left, -1.500, Color(White), Color(White), Global.d, Visible To and String, Default Visibility); Create HUD Text(Global.ab, Custom String(""), Custom String("버튼을 [{0} 및 {1}] 눌러 힌트 창을 닫습니다", Input Binding String( Button(Crouch)), Input Binding String(Button(Interact))), Null, Left, -1.890, Color(White), Color(White), Color(White), Visible To and String, Default Visibility); Create HUD Text(Global.ab, Custom String(""), Custom String("버튼 [{0} 및 {1}] 를 길게 눌러 영웅 선택", Input Binding String( Button(Crouch)), Input Binding String(Button(Reload))), Null, Left, -1.800, Color(White), Color(White), Color(White), Visible To and String, Default Visibility); Create HUD Text(Global.ab, Custom String(""), Custom String("버튼 [{0} 및 {1}] 를 길게 눌러 AI 영웅을 순환합니다.", Input Binding String(Button(Interact)), Input Binding String(Button(Primary Fire)), Input Binding String(Button( Secondary Fire))), Null, Left, -1.600, Color(White), Color(White), Color(Yellow), Visible To and String, Default Visibility); Create HUD Text(Global.ab, Custom String(""), Custom String("버튼 [{0} 및 {1}] 를 길게 눌러 AI 영웅을 선택합니다", Input Binding String(Button(Interact)), Input Binding String(Button(Reload))), Custom String("[{0} 및 {1}] 버튼을 길게 눌러 메뉴를 전환합니다", Input Binding String(Button(Reload)), Input Binding String(Button(Melee))), Left, -1.500, Color(White), Color(White), Global.d, Visible To and String, Default Visibility); Create HUD Text(Global.Y, Custom String("Welcome to Raven's AI Dome!"), Global.C, Custom String( "Created by {0}", Global.j), Top, 3, Global.i, Global.h, Global.h, Visible To and String, Default Visibility); Create HUD Text(Global.Y, Custom String(""), Custom String( "This workshop mode allows you to thoroughly warm up/practice your movement and aim on and against ALL heroes."), Custom String( "You are placed in a bubble against one bot opponent. When you kill them enough times it progresses to the next hero in the list."), Top, 5, Color(Yellow), Color(White), Global.d, Visible To and String, Default Visibility); Create HUD Text(Global.Y, Custom String(""), Null, Custom String( "The AI modes contain AI for all heroes written from scratch by myself. The bots do not attack below the difficulty \"AI Bronze\"."), Top, 5.100, Color(Yellow), Color(White), Color(White), Visible To and String, Default Visibility); Create HUD Text(Global.Y, Custom String(""), Null, Custom String( "There are many difficulties and they correspond to many variables that affect the bots' movement, aim, and reaction time."), Top, 5.120, Color(Yellow), Color(White), Color(White), Visible To and String, Default Visibility); Create HUD Text(Global.Y, Custom String(""), Null, Custom String("Press {0} and {1} to toggle the menu!", Input Binding String(Button(Reload)), Input Binding String(Button(Melee))), Top, 5.200, Color(White), Color(White), Global.e, Visible To and String, Default Visibility); Create HUD Text(Global.Y, Custom String(""), Custom String( "There are many settings so you can customize your warmup!"), Custom String("See the top left corner for controls."), Top, 5.300, Color(Yellow), Color(White), Global.e, Visible To and String, Default Visibility); Create HUD Text(Global.Y, Custom String(""), Custom String("{0}", Global.l), Custom String("For the most recent version: Please import code: {0}", Global.G), Top, 7, Color(Yellow), Global.i, Global.h, Visible To and String, Default Visibility); Create HUD Text(Global.Y, Custom String(""), Custom String("Press {0} and {1} to hide this text", Input Binding String(Button(Crouch)), Input Binding String(Button(Interact))), Null, Top, 8, Color(Yellow), Global.g, Color(Sky Blue), Visible To and String, Default Visibility); Create HUD Text(Global.Z, Custom String("Raven's AI Dome 어서 오십시오!"), Global.C, Custom String( "창조자: {0}", Global.j), Top, 3, Global.i, Global.h, Global.h, Visible To and String, Default Visibility); Create HUD Text(Global.Z, Custom String(""), Custom String("이 모드를 사용하면 워밍업하고 철저하게 연습 할 수 있습니다."), Custom String( "적을 충분한 횟수로 처치하면 다음 영웅이 생성됩니다."), Top, 5, Color(Yellow), Color(White), Global.d, Visible To and String, Default Visibility); Create HUD Text(Global.Z, Custom String(""), Null, Custom String( "나는 모든 영웅을 위해 인공 지능을 프로그래밍했습니다. 난이도가 \"인공지능 브론즈\" 미만이면 봇은 공격하지 않습니다."), Top, 5.100, Color(Yellow), Color(White), Color(White), Visible To and String, Default Visibility); Create HUD Text(Global.Z, Custom String(""), Null, Custom String("난이도은 인공 지능의 움직임, 겨냥, 반응 시간에 영향을 미칩니다."), Top, 5.120, Color(Yellow), Color(White), Color(White), Visible To and String, Default Visibility); Create HUD Text(Global.Z, Custom String(""), Null, Custom String("[{0} 및 {1}] 버튼을 길게 눌러 메뉴를 전환합니다!", Input Binding String(Button(Reload)), Input Binding String(Button(Melee))), Top, 5.200, Color(White), Color(White), Global.e, Visible To and String, Default Visibility); Create HUD Text(Global.Z, Custom String(""), Custom String("당신이 당신의 연습 루틴을 사용자 정의 할 수 있도록 많은 설정이 있습니다!"), Custom String("컨트롤은 왼쪽 상단을 참조하십시오."), Top, 5.300, Color(Yellow), Color(White), Global.e, Visible To and String, Default Visibility); Create HUD Text(Global.Z, Custom String(""), Custom String( "{0}", Global.l), Custom String( "최신 버전을 얻으려면 코드 {0}를 사용하십시오!", Global.G), Top, 7, Color(Yellow), Global.i, Global.h, Visible To and String, Default Visibility); Create HUD Text(Global.Z, Custom String(""), Custom String("이 정보를 숨기려면 {0} 및 {1} 버튼을 사용하십시오", Input Binding String(Button(Crouch)), Input Binding String(Button(Interact))), Null, Top, 8, Color(Yellow), Global.g, Color(Sky Blue), Visible To and String, Default Visibility); If(Global.L == True); Create HUD Text(Null, Custom String("Server Load: {0}% ({1})", Round To Integer(Server Load / 2.550, Down), Server Load), Custom String("Average: {0}% ({1})", Round To Integer(Server Load Average / 2.550, Down), Server Load Average), Custom String( "Peak: {0}% ({1})", Round To Integer(Server Load Peak / 2.550, Down), Server Load Peak), Top, 100, Global.h, Global.i, Global.e, Visible To and String, Visible Always); End; } } rule("Player Sky Menu Toggle") { event { Ongoing - Each Player; Team 1; All; } conditions { Is Button Held(Event Player, Button(Melee)) == True; Is Button Held(Event Player, Button(Reload)) == True; Event Player.bt == True; } actions { Call Subroutine(S); Call Subroutine(af); } } rule("Player Sky Menu Move Selection Up") { event { Ongoing - Each Player; Team 1; All; } conditions { Event Player.al == True; Throttle Of(Event Player) == Forward; } actions { Event Player.an = 3; Call Subroutine(ae); If(Event Player.am == Event Player.ao[0]); Event Player.am = Last Of(Event Player.ao); Else; Event Player.am = Event Player.ao[Index Of Array Value(Event Player.ao, Event Player.am) - 1]; End; Call Subroutine(ad); } } rule("Player Sky Menu Move Selection Down") { event { Ongoing - Each Player; Team 1; All; } conditions { Event Player.al == True; Throttle Of(Event Player) == Backward; } actions { Event Player.an = 3; Call Subroutine(ae); If(Event Player.am == Event Player.ao[Count Of(Event Player.ao) - 1]); Event Player.am = Event Player.ao[0]; Else; Event Player.am = Event Player.ao[Index Of Array Value(Event Player.ao, Event Player.am) + 1]; End; Call Subroutine(ad); } } rule("Player Sky Menu Move Selection Decrease") { event { Ongoing - Each Player; Team 1; All; } conditions { Event Player.al == True; Throttle Of(Event Player) == Left; } actions { If(Event Player.am == Event Player.ao[0] && Event Player.ay > 0); Event Player.an = 2; Call Subroutine(ae); Event Player.ay -= 1; Call Subroutine(ai); Else If(Event Player.am == Event Player.ao[1] && Event Player.bu == False); Event Player.an = 2; Call Subroutine(ae); If(Event Player.bn <= 4); Event Player.bn = Global.y; Else If(Event Player.bn == Global.y); Event Player.bn = 64; Else; Event Player.bn -= 4; End; If(Event Player.Q >= Event Player.bn); Event Player.Q = Event Player.bn - 1; End; Else If(Event Player.am == Event Player.ao[2]); Event Player.an = 2; Call Subroutine(ae); If(Event Player.cb == 0); Event Player.cb = Count Of(Global.ac) - 1; Else; Event Player.cb -= 1; End; Else If(Event Player.am == Event Player.ao[3]); Event Player.an = 2; Call Subroutine(ae); If(Event Player.aq > 0); Event Player.aq -= 1; Else; Event Player.aq = 3; End; Else If(Event Player.am == Event Player.ao[4] && Event Player.bu == True); Event Player.an = 1; Call Subroutine(ae); Call Subroutine(ah); Else If(Event Player.am == Event Player.ao[5] && Event Player.bq == True); Event Player.an = 1; Call Subroutine(ae); Event Player.bq = False; Else If(Event Player.am == Event Player.ao[6]); Event Player.an = 2; Call Subroutine(ae); If(Event Player.br == 0); Event Player.br = 3; Else; Event Player.br -= 1; End; Else If(Event Player.am == Event Player.ao[7]); Event Player.an = 1; Call Subroutine(ae); If(Event Player.bp == 0); Event Player.bp = Global.y; Else If(Event Player.bp == Global.y); Event Player.bp = 10; Else; Event Player.bp -= 1; End; Else If(Event Player.am == Event Player.ao[8] && Event Player.by == True); Event Player.an = 1; Call Subroutine(ae); Event Player.by = False; Else If(Event Player.am == Event Player.ao[9] && Event Player.bz == True); Event Player.an = 1; Call Subroutine(ae); Event Player.bz = False; Else If(Event Player.am == Event Player.ao[10]); Event Player.an = 1; Call Subroutine(ae); If(Event Player.bv > 0); Event Player.bv -= 1; Else; Event Player.bv = 3; End; Call Subroutine(ap); Else If(Event Player.am == Event Player.ao[11] && Event Player.ca == True); Event Player.an = 1; Call Subroutine(ae); Set Ultimate Ability Enabled(Players In Slot(Slot Of(Event Player), Team 2), True); Event Player.ca = False; Else If(Event Player.am == Event Player.ao[12] && Event Player.bx == True); Event Player.an = 1; Call Subroutine(ae); Event Player.bx = False; Else If(Event Player.am == Event Player.ao[13] && Event Player.bc == True); Event Player.an = 1; Call Subroutine(ae); Event Player.bc = False; Stop Chasing Player Variable(Event Player, bd); Event Player.bd = 0; Stop Accelerating(Event Player); Set Jump Enabled(Event Player, True); Set Crouch Enabled(Event Player, True); Set Gravity(Event Player, 100); Else If(Event Player.am == Event Player.ao[14]); Event Player.an = 2; Call Subroutine(ae); If(Event Player.bb == Global.f[0]); Event Player.bb = Global.f[Count Of(Global.f) - 1]; Else; Event Player.bb = Global.f[Index Of Array Value(Global.f, Event Player.bb) - 1]; End; Else If(Event Player.am == Event Player.ao[15] && Event Player.bo == 1); Event Player.an = 2; Call Subroutine(ae); Event Player.bo = 0; Call Subroutine(am); Call Subroutine(al); End; Call Subroutine(ad); } } rule("Player Sky Menu Move Selection Increase") { event { Ongoing - Each Player; Team 1; All; } conditions { Event Player.al == True; Throttle Of(Event Player) == Right; } actions { If(Event Player.am == Event Player.ao[0] && Event Player.ay < 10); Event Player.an = 2; Call Subroutine(ae); Event Player.ay += 1; Call Subroutine(ai); Else If(Event Player.am == Event Player.ao[1] && Event Player.bu == False); Event Player.an = 2; Call Subroutine(ae); If(Event Player.bn == 64); Event Player.bn = Global.y; Else If(Event Player.bn == Global.y); Event Player.bn = 4; Else; Event Player.bn += 4; End; If(Event Player.Q >= Event Player.bn); Event Player.Q = Event Player.bn - 1; End; Else If(Event Player.am == Event Player.ao[2]); Event Player.an = 2; Call Subroutine(ae); If(Event Player.cb == Count Of(Global.ac) - 1); Event Player.cb = 0; Else; Event Player.cb += 1; End; Else If(Event Player.am == Event Player.ao[3]); Event Player.an = 2; Call Subroutine(ae); If(Event Player.aq < 3); Event Player.aq += 1; Else; Event Player.aq = 0; End; Else If(Event Player.am == Event Player.ao[4] && Event Player.bu == False); Event Player.an = 0; Call Subroutine(ae); Call Subroutine(ah); Else If(Event Player.am == Event Player.ao[5] && Event Player.bq == False); Event Player.an = 0; Call Subroutine(ae); Event Player.bq = True; Start Forcing Dummy Bot Name(Players In Slot(Slot Of(Event Player), Team 2), Event Player); Else If(Event Player.am == Event Player.ao[6]); Event Player.an = 2; Call Subroutine(ae); If(Event Player.br == 3); Event Player.br = 0; Else; Event Player.br += 1; End; Else If(Event Player.am == Event Player.ao[7]); Event Player.an = 0; Call Subroutine(ae); If(Event Player.bp == Global.y); Event Player.bp = 0; Else If(Event Player.bp == 10); Event Player.bp = Global.y; Else; Event Player.bp += 1; End; Else If(Event Player.am == Event Player.ao[8] && Event Player.by == False); Event Player.an = 0; Call Subroutine(ae); Event Player.by = True; Else If(Event Player.am == Event Player.ao[9] && Event Player.bz == False); Event Player.an = 0; Call Subroutine(ae); Event Player.bz = True; Else If(Event Player.am == Event Player.ao[10]); Event Player.an = 0; Call Subroutine(ae); If(Event Player.bv < 3); Event Player.bv += 1; Else; Event Player.bv = 0; End; Call Subroutine(ap); Else If(Event Player.am == Event Player.ao[11] && Event Player .ca == False); Event Player.an = 0; Call Subroutine(ae); Set Ultimate Ability Enabled(Players In Slot(Slot Of(Event Player), Team 2), False); Event Player.ca = True; Else If(Event Player.am == Event Player.ao[12] && Event Player .bx == False); Event Player.an = 0; Call Subroutine(ae); Event Player.bx = True; Else If(Event Player.am == Event Player.ao[13] && Event Player .bc == False); Event Player.an = 0; Call Subroutine(ae); Event Player.bc = True; Set Jump Enabled(Event Player, False); Set Crouch Enabled(Event Player, False); Set Gravity(Event Player, 0); Small Message(Event Player, Event Player.bo == 1 ? Custom String("{0} = 올리다 / {1} = 낮추다", Input Binding String(Button(Jump)), Input Binding String(Button(Crouch))) : Custom String("{0} to go Up / {1} to go Down", Input Binding String(Button(Jump)), Input Binding String(Button(Crouch)))); Else If(Event Player.am == Event Player.ao[14]); Event Player.an = 2; Call Subroutine(ae); If(Event Player.bb == Global.f[Count Of(Global.f) - 1]); Event Player.bb = Global.f[0]; Else; Event Player.bb = Global.f[Index Of Array Value(Global.f, Event Player.bb) + 1]; End; Else If(Event Player.am == Event Player.ao[15] && Event Player.bo == 0); Event Player.an = 2; Call Subroutine(ae); Event Player.bo = 1; Call Subroutine(am); Call Subroutine(al); End; Call Subroutine(ad); } } rule("Player Sky Menu Arrow Visibility") { event { Subroutine; ad; } actions { If(Event Player.am == Event Player.ao[0]); If(Event Player.ay == 0); Event Player.ak[0] = Null; Event Player.ak[1] = Event Player; Else If(Event Player.ay == 10); Event Player.ak[0] = Event Player; Event Player.ak[1] = Null; Else; Event Player.ak[0] = Event Player; Event Player.ak[1] = Event Player; End; Else If(Event Player.am == Event Player.ao[1]); Event Player.ak[0] = Event Player; Event Player.ak[1] = Event Player; Else If(Event Player.am == Event Player.ao[2]); Event Player.ak[0] = Event Player; Event Player.ak[1] = Event Player; Else If(Event Player.am == Event Player.ao[3]); Event Player.ak[0] = Event Player; Event Player.ak[1] = Event Player; Else If(Event Player.am == Event Player.ao[4]); If(Event Player.bu == False); Event Player.ak[0] = Null; Event Player.ak[1] = Event Player; Else If(Event Player.bu == True); Event Player.ak[1] = Null; Event Player.ak[0] = Event Player; End; Else If(Event Player.am == Event Player.ao[5]); If(Event Player.bq == False); Event Player.ak[0] = Null; Event Player.ak[1] = Event Player; Else If(Event Player.bq == True); Event Player.ak[1] = Null; Event Player.ak[0] = Event Player; End; Else If(Event Player.am == Event Player.ao[6]); Event Player.ak[0] = Event Player; Event Player.ak[1] = Event Player; Else If(Event Player.am == Event Player.ao[7]); Event Player.ak[0] = Event Player; Event Player.ak[1] = Event Player; Else If(Event Player.am == Event Player.ao[8]); If(Event Player.by == False); Event Player.ak[0] = Null; Event Player.ak[1] = Event Player; Else If(Event Player.by == True); Event Player.ak[1] = Null; Event Player.ak[0] = Event Player; End; Else If(Event Player.am == Event Player.ao[9]); If(Event Player.bz == False); Event Player.ak[0] = Null; Event Player.ak[1] = Event Player; Else If(Event Player.bz == True); Event Player.ak[1] = Null; Event Player.ak[0] = Event Player; End; Else If(Event Player.am == Event Player.ao[10]); Event Player.ak[0] = Event Player; Event Player.ak[1] = Event Player; Else If(Event Player.am == Event Player.ao[11]); If(Event Player.ca == False); Event Player.ak[0] = Null; Event Player.ak[1] = Event Player; Else If(Event Player.ca == True); Event Player.ak[1] = Null; Event Player.ak[0] = Event Player; End; Else If(Event Player.am == Event Player.ao[12]); If(Event Player.bx == False); Event Player.ak[0] = Null; Event Player.ak[1] = Event Player; Else If(Event Player.bx == True); Event Player.ak[1] = Null; Event Player.ak[0] = Event Player; End; Else If(Event Player.am == Event Player.ao[13]); If(Event Player.bc == False); Event Player.ak[0] = Null; Event Player.ak[1] = Event Player; Else If(Event Player.bc == True); Event Player.ak[1] = Null; Event Player.ak[0] = Event Player; End; Else If(Event Player.am == Event Player.ao[14]); If(Event Player.bo == 0); Event Player.ak[0] = Null; Event Player.ak[1] = Event Player; Else; Event Player.ak[1] = Null; Event Player.ak[0] = Event Player; End; Else; Event Player.ak[0] = Event Player; Event Player.ak[1] = Event Player; End; } } rule("Debug Toggle") { event { Ongoing - Each Player; Team 1; All; } conditions { Is Button Held(Event Player, Button(Ability 2)) == True; Is Button Held(Event Player, Button(Reload)) == True; Is Button Held(Event Player, Button(Jump)) == True; } actions { Wait(0.500, Abort When False); Call Subroutine(aa); } } rule("Info Toggle") { event { Ongoing - Each Player; Team 1; All; } conditions { Is Button Held(Event Player, Button(Interact)) == True; Is Button Held(Event Player, Button(Crouch)) == True; } actions { Start Rule(ab, Restart Rule); } } rule("ai") { event { Subroutine; ai; } actions { If(Event Player.ay == 3); Else If(Event Player.ay == 4); Else If(Event Player.ay == 5); Else If(Event Player.ay == 6); Else If(Event Player.ay == 7); Else If(Event Player.ay == 8); Else If(Event Player.ay == 9); Else If(Event Player.ay == 10); End; Players In Slot(Slot Of(Event Player), Team 2).p = Players In Slot(Slot Of(Event Player), Team 1).ay / 25; Players In Slot(Slot Of(Event Player), Team 2).s = 150 + 10 * Players In Slot(Slot Of(Event Player), Team 1) .ay; Players In Slot(Slot Of(Event Player), Team 2).t = 0.225 + 0.005 * Players In Slot(Slot Of(Event Player), Team 1) .ay; Players In Slot(Slot Of(Event Player), Team 2).u = 540 + 18 * Players In Slot(Slot Of(Event Player), Team 1) .ay; Players In Slot(Slot Of(Event Player), Team 2).v = 540 + 9 * Players In Slot(Slot Of(Event Player), Team 1) .ay; Players In Slot(Slot Of(Event Player), Team 2).w = 300 + 5 * Players In Slot(Slot Of(Event Player), Team 1) .ay; Players In Slot(Slot Of(Event Player), Team 2).x = 200 + 5 * Players In Slot(Slot Of(Event Player), Team 1) .ay; Players In Slot(Slot Of(Event Player), Team 2).I = 0.250 + 0.050 * (Global.q - Players In Slot(Slot Of( Event Player), Team 1).ay); Players In Slot(Slot Of(Event Player), Team 2).T = 0.100 + Players In Slot(Slot Of(Event Player), Team 1) .ay * 0.010; Players In Slot(Slot Of(Event Player), Team 2).V = 0.080 * Players In Slot(Slot Of(Event Player), Team 1) .ay; Players In Slot(Slot Of(Event Player), Team 2).W = 0.160 + Players In Slot(Slot Of(Event Player), Team 1) .ay * 0.030; Players In Slot(Slot Of(Event Player), Team 2).Y = 1 + Players In Slot(Slot Of(Event Player), Team 1) .ay * 0.070; Players In Slot(Slot Of(Event Player), Team 2).aa = 2 - 0.100 * Players In Slot(Slot Of(Event Player), Team 1) .ay; If(Players In Slot(Slot Of(Event Player), Team 1).ay < 3); Clear Status(Players In Slot(Slot Of(Event Player), Team 2), Unkillable); End; } } rule("ak") { event { Subroutine; ak; } actions { If(Array Contains(All Heroes, Global.K[1])); Players In Slot(Slot Of(Event Player), Team 1).bn = Global.y; Players In Slot(Slot Of(Event Player), Team 1).bj = Array(Global.K[1]); Players In Slot(Slot Of(Event Player), Team 1).bk = Global.K[1]; Else; If(Players In Slot(Slot Of(Event Player), Team 1).bk != Players In Slot(Slot Of(Event Player), Team 1) .bi[Players In Slot(Slot Of(Event Player), Team 1).aq]); Players In Slot(Slot Of(Event Player), Team 1).bj = Randomized Array(Global.m[Players In Slot(Slot Of( Event Player), Team 1).aq]); Players In Slot(Slot Of(Event Player), Team 1).bk = Players In Slot(Slot Of(Event Player), Team 1) .bi[Players In Slot(Slot Of(Event Player), Team 1).aq]; End; End; } } rule("Player Set Language") { event { Subroutine; am; } actions { If(Event Player.bo == 1); Modify Global Variable(aa, Remove From Array By Value, Event Player); Modify Global Variable(ab, Append To Array, Event Player); Else; Modify Global Variable(ab, Remove From Array By Value, Event Player); Modify Global Variable(aa, Append To Array, Event Player); End; } } rule("Player Set Names") { event { Subroutine; al; } actions { Players In Slot(Slot Of(Event Player), Team 1).az = Array(); Players In Slot(Slot Of(Event Player), Team 1).az[0] = Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("안전하고 쉬움") : Custom String("No AI Easy"); Players In Slot(Slot Of(Event Player), Team 1).az[1] = Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("안전하고 중간") : Custom String("No AI Medium"); Players In Slot(Slot Of(Event Player), Team 1).az[2] = Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("안전하고 곤란한") : Custom String("No AI Hard"); Players In Slot(Slot Of(Event Player), Team 1).az[3] = Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("인공지능 브론즈") : Custom String("AI Bronze"); Players In Slot(Slot Of(Event Player), Team 1).az[4] = Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("인공지능 실버") : Custom String("AI Silver"); Players In Slot(Slot Of(Event Player), Team 1).az[5] = Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("인공지능 골드") : Custom String("AI Gold"); Players In Slot(Slot Of(Event Player), Team 1).az[6] = Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("인공지능 플래티넘") : Custom String("AI Platinum"); Players In Slot(Slot Of(Event Player), Team 1).az[7] = Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("인공지능 다이아몬드") : Custom String("AI Diamond"); Players In Slot(Slot Of(Event Player), Team 1).az[8] = Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("인공지능 마스터") : Custom String("AI Master"); Players In Slot(Slot Of(Event Player), Team 1).az[9] = Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("인공지능 그랜드마스터") : Custom String("AI Grandmaster"); Players In Slot(Slot Of(Event Player), Team 1).az[10] = Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("인공지능 상위500위") : Custom String("AI Top 500"); Players In Slot(Slot Of(Event Player), Team 1).bi = Array(); Players In Slot(Slot Of(Event Player), Team 1).bi[0] = Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("모든") : Custom String("All"); Players In Slot(Slot Of(Event Player), Team 1).bi[1] = Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("돌격") : Custom String("Tank"); Players In Slot(Slot Of(Event Player), Team 1).bi[2] = Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("공격") : Custom String("Damage"); Players In Slot(Slot Of(Event Player), Team 1).bi[3] = Players In Slot(Slot Of(Event Player), Team 1) .bo == 1 ? Custom String("지원") : Custom String("Support"); } } rule("Player Set Distances") { event { Subroutine; aj; } actions { Players In Slot(Slot Of(Event Player), Team 1).bw = Global.H; If(Array Contains(Global.p, Hero Of(Players In Slot(Slot Of(Event Player), Team 1))) == True); Players In Slot(Slot Of(Event Player), Team 1).bf = Global.o; Else If(Array Contains(Global.s, Hero Of(Players In Slot(Slot Of(Event Player), Team 1))) == True); Players In Slot(Slot Of(Event Player), Team 1).bf = Global.r; Else If(Array Contains(Global.B, Hero Of(Players In Slot(Slot Of(Event Player), Team 1))) == True); Players In Slot(Slot Of(Event Player), Team 1).bf = Global.A; Else If(Array Contains(Global.n, Hero Of(Players In Slot(Slot Of(Event Player), Team 1))) == True); Players In Slot(Slot Of(Event Player), Team 1).bf = Global.A; Players In Slot(Slot Of(Event Player), Team 1).bw = Players In Slot(Slot Of(Event Player), Team 1).bf; Else If(Array Contains(Global.F, Hero Of(Players In Slot(Slot Of(Event Player), Team 1))) == True); Players In Slot(Slot Of(Event Player), Team 1).bf = Global.E; Players In Slot(Slot Of(Event Player), Team 1).bw = Players In Slot(Slot Of(Event Player), Team 1).bf; End; } } rule("ah") { event { Subroutine; ah; } actions { If(Event Player.bu); Event Player.bn = Global.Q; Event Player.bu = False; Else; Event Player.Q = 0; Event Player.bn = 1; Event Player.bu = True; End; } } rule("ag") { event { Subroutine; ag; } actions { Start Forcing Throttle(Event Player, 0, 0, 0, 0, 0, 0); Stop Chasing Player Variable(Event Player, bd); Start Forcing Player Position(Event Player, Vector(X Component Of(Event Player.bm), Event Player.bd, Z Component Of(Event Player.bm)), True); Chase Player Variable Over Time(Event Player, bd, (Event Player.R[0] == 1 ? 2 : -2) + Event Player.bd - Event Player.bd % 2, 0.250, None); Wait(0.250, Ignore Condition); Loop If Condition Is True; Wait(0.250, Ignore Condition); Stop Forcing Player Position(Event Player); Stop Forcing Throttle(Event Player); Event Player.be = Array(); Event Player.be[0] = Position Of(Event Player); Wait(0.100, Ignore Condition); Event Player.be[1] = Position Of(Event Player); Apply Impulse(Event Player, Direction Towards(Event Player.be[1], Event Player.be[0]), Speed Of In Direction(Event Player, Direction Towards(Event Player.be[0], Event Player.be[1])), To World, Incorporate Contrary Motion); Small Message(Event Player, Players In Slot(Slot Of(Event Player), Team 1).bo == 1 ? Custom String("높이: {0} 미터", Event Player.bd) : Custom String("Height: {0} Meters", Event Player.bd)); } } rule("ap") { event { Subroutine; ap; } actions { Clear Status(Event Player, Unkillable); Clear Status(Event Player, Phased Out); Clear Status(Event Player, Invincible); If(Event Player.bv == 1); Set Status(Event Player, Null, Unkillable, Global.y); Else If(Event Player.bv == 2); Set Status(Event Player, Null, Phased Out, Global.y); Else If(Event Player.bv == 3); Set Status(Event Player, Null, Invincible, Global.y); End; } } rule("aq") { event { Subroutine; aq; } actions { If(Event Player.cb == 0); Event Player.cc = Global.ac[Event Player.cb]; Event Player.bn = Global.Q; Event Player.bp = 0; Event Player.br = 0; Small Message(Event Player, Custom String("Preset Cleared")); Else If(Event Player.cb == 1); If(Event Player.aq != 0); Event Player.aq = 0; Call Subroutine(ak); End; Event Player.ar = Index Of Array Value(Event Player.bj, Hero(Widowmaker)); Call Subroutine(X); If(Hero Of(Event Player) != Hero(Widowmaker)); Start Forcing Player To Be Hero(Event Player, Hero(Widowmaker)); Stop Forcing Player To Be Hero(Event Player); End; Event Player.br = 0; Event Player.bn = Global.y; Small Message(Event Player, Custom String("Preset: Widowmaker 1v1")); Else If(Event Player.cb == 2); If(Event Player.aq != 0); Event Player.aq = 0; Call Subroutine(ak); End; Event Player.ar = Index Of Array Value(Event Player.bj, Hero(Reinhardt)); Call Subroutine(X); If(Hero Of(Event Player) != Hero(Reinhardt)); Start Forcing Player To Be Hero(Event Player, Hero(Reinhardt)); Stop Forcing Player To Be Hero(Event Player); End; Event Player.br = 0; Event Player.bp = 2; Event Player.bn = 32; Small Message(Event Player, Custom String("Preset: Reinhardt 1v1")); Else If(Event Player.cb == 3); If(Hero Of(Event Player) != Hero(Roadhog)); Start Forcing Player To Be Hero(Event Player, Hero(Roadhog)); Stop Forcing Player To Be Hero(Event Player); End; Event Player.br = 1; Event Player.bn = Global.Q; Small Message(Event Player, Custom String("Preset: Roadhog Low Cooldown")); Else If(Event Player.cb == 4); If(Hero Of(Event Player) != Hero(Ana)); Start Forcing Player To Be Hero(Event Player, Hero(Ana)); Stop Forcing Player To Be Hero(Event Player); End; Event Player.br = 1; Event Player.bn = Global.Q; Small Message(Event Player, Custom String("Preset: Ana Low Cooldown")); Else If(Event Player.cb == 5); Event Player.bn = 8; Event Player.bp = 1; Event Player.by = True; Event Player.bz = True; Event Player.br = 0; Event Player.ay = 9; Call Subroutine(ai); Small Message(Event Player, Custom String("Preset: Hard, Thorough Warmup")); Else If(Event Player.cb == 6); Event Player.bn = 8; Event Player.bp = 0; Event Player.by = True; Event Player.bz = False; Event Player.br = 0; Event Player.ay = 0; Call Subroutine(ai); Small Message(Event Player, Custom String("Preset: Easy, Thorough Warmup")); End; Call Subroutine(aj); } } rule("Player Init") { event { Ongoing - Each Player; Team 1; All; } conditions { Global.P == True; Event Player.bt == False; Has Spawned(Event Player) == True; } actions { Call Subroutine(R); Start Facing(Event Player, Vector(0, 0, 0), 1000, To World, None); Start Forcing Throttle(Event Player, 0, 0, 0, 0, 0, 0); Event Player.bo = Global.R; Call Subroutine(am); Start Rule(ab, Restart Rule); Disable Game Mode HUD(Event Player); Disable Hero HUD(Event Player); Event Player.au = Vector(0, Global.b * 2, 0); Event Player.av = Vector(0, 200, 0); Start Camera(Event Player, Event Player.au, Event Player.av, 10); Call Subroutine(al); Event Player.Q = 0; Event Player.ar = 0; Event Player.aq = Global.O; Event Player.bl = 0; Event Player.bn = Global.Q; Call Subroutine(ak); Event Player.ah = False; Event Player.by = Global.T; Event Player.br = False; Event Player.bp = 0; Event Player.bq = False; Event Player.cb = 0; Event Player.cc = Global.ac[Event Player.cb]; Event Player.ay = Global.N; Event Player.bb = Global.f[0]; Event Player.bw = Global.H; Event Player.bs = Hero Of(Event Player); Call Subroutine(aj); Event Player.ag = Array(); Event Player.ad = Array(); Event Player.aj = Array(); If(Slot Of(Event Player) == 0); Event Player.bm = Vector(-380 + Global.b, 0, 380 - Global.b); Else If(Slot Of(Event Player) == 1); Event Player.bm = Vector(380 - Global.b, 0, -380 + Global.b); Else If(Slot Of(Event Player) == 2); Event Player.bm = Vector(380 - Global.b, 0, 380 - Global.b); Else If(Slot Of(Event Player) == 3); Event Player.bm = Vector(-380 + Global.b, 0, -380 + Global.b); Else If(Slot Of(Event Player) == 4); Event Player.bm = Vector(0, 0, 380 - Global.b); Else If(Slot Of(Event Player) == 5); Event Player.bm = Vector(0, 0, -380 + Global.b); End; Event Player.ba = Array(); Create Effect(All Players(All Teams), Sphere, Event Player.bb, Event Player.bm, Global.b, Color); Event Player.ba[0] = Last Created Entity; Create Effect(All Players(All Teams), Ring, Event Player.bb, Event Player.bm, Event Player.bw + 1.250, Position Radius and Color); Event Player.ba[1] = Last Created Entity; Create Effect(All Players(All Teams), Light Shaft, Event Player.bb, Event Player.bm, Event Player.bf + 1.250, Position Radius and Color); Event Player.ba[2] = Last Created Entity; Wait(1, Ignore Condition); Event Player.av = Event Player.bm; Small Message(Event Player, Players In Slot(Slot Of(Event Player), Team 1).bo == 1 ? Custom String("메뉴를 열어 환경 설정을 구성하십시오.") : Custom String("Open menu for options")); Wait(1, Ignore Condition); Event Player.au = Event Player.bm + Vector(0, Global.b * 2, 0.001); Small Message(Event Player, Players In Slot(Slot Of(Event Player), Team 1).bo == 1 ? Custom String("활성화하려면 봇을 공격하십시오.") : Custom String("Attack the bot to start")); Wait(1, Ignore Condition); Event Player.au = Event Player.bm + Vector(0, 5, 0.001); For Player Variable(Event Player, N, 0, Count Of(All Heroes), 1); Preload Hero(Event Player, All Heroes[Event Player.N]); Wait(1 / 60, Ignore Condition); End; If(Global.S == True); Event Player.br = 3; End; Teleport(Event Player, Event Player.bm); Event Player.au = Eye Position(Event Player); Event Player.av = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(Event Player) * 1, Null, Event Player, False); Wait(0.500, Ignore Condition); Stop Camera(Event Player); Call Subroutine(ac); Enable Hero HUD(Event Player); Call Subroutine(Q); Stop Forcing Throttle(Event Player); Event Player.bt = True; Log To Inspector(Custom String("{0} spawned as {1} at vector {2}", Custom String("{0}: {1}", Total Time Elapsed, Event Player), Hero Of(Event Player), Event Player.bm)); If(Global.X == True && Count Of(Global.U) < 256); Modify Global Variable(U, Append To Array, Custom String("{0}", Event Player)); End; Wait(0.100, Ignore Condition); Call Subroutine(X); Call Subroutine(ai); Event Player.bz = Global.I; Stop Facing(Event Player); Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Players In Slot(Slot Of(Event Player), Team 2))), Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Eye Position( Players In Slot(Slot Of(Event Player), Team 2)))) * 10, To World, None); Wait(12 / 60, Ignore Condition); Stop Facing(Event Player); } } rule("Player Died") { event { Player Died; Team 1; All; } conditions { Event Player.ay >= 3; } actions { Stop Heal Over Time(Event Player.O); Set Status(Event Player, Null, Invincible, 2.250); Stop Forcing Player Position(Event Player); } } rule("Player Heal After Elim") { event { Player Dealt Final Blow; Team 1; All; } conditions { Is Alive(Event Player) == True; Health(Event Player) != Max Health(Event Player); Event Player.by == True; } actions { Call Subroutine(an); } } rule("Player Heal After Damage") { event { Player Dealt Damage; Team 1; All; } conditions { Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 2)) == True; Event Player.by == True; Total Time Elapsed >= Event Player.P + 1; Event Damage > 5; } actions { Call Subroutine(ao); } } rule("Increment Kills") { event { Player Dealt Final Blow; Team 1; All; } conditions { Players In Slot(Slot Of(Event Player), Team 2) == Victim; } actions { Event Player.Q += 1; } } rule("Next Hero") { event { Ongoing - Each Player; Team 1; All; } conditions { Is Game In Progress == True; Event Player.Q == Event Player.bn; } actions { If(Is Duplicating(Event Player)); Damage(Event Player, Null, 9999); Wait(5, Ignore Condition); End; If(Event Player.cb > 0 && Event Player.cb <= 2); Event Player.cb = 0; Call Subroutine(aq); End; Event Player.bl = 1; Call Subroutine(X); } } rule("Reset Player At Home") { event { Ongoing - Each Player; Team 1; All; } conditions { Distance Between(Vector(X Component Of(Position Of(Event Player)), 0, Z Component Of(Position Of(Event Player))), Event Player.bm) > Event Player.bw; Is Alive(Event Player) == True; Has Spawned(Event Player) == True; Event Player.bt == True; } actions { If(((Hero Of(Event Player) == Hero(Widowmaker) && Is Using Ability 1(Event Player)) || (Hero Of(Event Player) == Hero(Doomfist) && Is Using Ability 2(Event Player))) == True); Cancel Primary Action(Event Player); End; Play Effect(Event Player, Debuff Impact Sound, Color(White), Event Player, 75); Play Effect(Event Player, Bad Pickup Effect, Color(White), Event Player.bm, 1); If(Is In View Angle( Event Player, Eye Position(Players In Slot(Slot Of(Event Player), Team 2)) - Vector(0, Y Component Of(Eye Position(Event Player)), 0),20 ) == True ); Teleport(Event Player, Event Player.bm); Wait(1 / 60, Ignore Condition); Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Players In Slot(Slot Of(Event Player), Team 2))), Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Eye Position( Players In Slot(Slot Of(Event Player), Team 2)))) * 5, To World, None); Wait(0.200, Ignore Condition); Stop Facing(Event Player); Else; Teleport(Event Player, Event Player.bm); End; If(Event Player.bc == True); Start Forcing Player Position(Event Player, Vector(X Component Of(Event Player.bm), Event Player.bd, Z Component Of(Event Player.bm)), False); Wait(0.250, Ignore Condition); Stop Forcing Player Position(Event Player); End; Allow Button(Event Player, Button(Jump)); } } rule("Player Change Self Hero") { event { Ongoing - Each Player; Team 1; All; } conditions { Is Button Held(Event Player, Button(Crouch)) == True; Is Button Held(Event Player, Button(Reload)) == True; Event Player.M == False; Players In Slot(Slot Of(Event Player), Team 2).M == False; Event Player.bt == True; } actions { Wait(15 / 60, Abort When False); If(Event Player.bq == True); Small Message(Event Player, Players In Slot(Slot Of(Event Player), Team 1).bo == 1 ? Custom String( "같은 영웅 모드가 활성화 된 동안에는 영웅을 변경할 수 없습니다.") : Custom String("Cannot change heroes while Mirror Mode is on")); Abort; End; Small Message(Event Player, Players In Slot(Slot Of(Event Player), Team 1).bo == 1 ? Custom String( "{0} 및 {1} 버튼을 계속 누르고 있으면 영웅이 변경됩니다.", Input Binding String(Button(Crouch)), Input Binding String(Button(Reload))) : Custom String("Continue holding {0} and {1} to change heroes", Input Binding String(Button(Crouch)), Input Binding String( Button(Reload)))); Set Status(Event Player, Null, Phased Out, 1); Wait(15 / 60, Abort When False); Set Player Allowed Heroes(Event Player, Remove From Array(All Heroes, Hero Of(Event Player))); Event Player.M = True; Wait(1, Ignore Condition); Reset Player Hero Availability(Event Player); } } rule("Player Self Hero Change Teleport Enemy On Spawn") { event { Ongoing - Each Player; Team 1; All; } conditions { Is In Spawn Room(Event Player) == False; Has Spawned(Event Player) == True; Event Player.M == True; Players In Slot(Slot Of(Event Player), Team 2).M == False; } actions { Wait(6 / 60, Abort When False); Call Subroutine(aj); Call Subroutine(ap); Call Subroutine(Y); Event Player.M = False; } } rule("Player Change Bot Hero") { event { Ongoing - Each Player; Team 1; All; } conditions { Is Button Held(Event Player, Button(Interact)) == True; Is Button Held(Event Player, Button(Reload)) == True; Players In Slot(Slot Of(Event Player), Team 2).M == False; Event Player.M == False; Event Player.bt == True; } actions { Wait(15 / 60, Abort When False); Small Message(Event Player, Players In Slot(Slot Of(Event Player), Team 1).bo == 1 ? Custom String( "{0} 및 {1} 버튼을 계속 누르고 있으면 적 영웅을 선택합니다.", Input Binding String(Button(Interact)), Input Binding String(Button(Reload))) : Custom String("Continue holding {0} and {1} to change bot hero", Input Binding String(Button(Interact)), Input Binding String(Button(Reload)))); Set Status(Event Player, Null, Phased Out, 1); Wait(15 / 60, Abort When False); Event Player.bs = Hero Of(Event Player); Start Camera(Event Player, Position Of(Players In Slot(Slot Of(Event Player), Team 2) + Vector(0, 10, 10)), Position Of( Players In Slot(Slot Of(Event Player), Team 2)), 45); Set Player Allowed Heroes(Event Player, Remove From Array(All Heroes, Hero Of(Event Player))); Players In Slot(Slot Of(Event Player), Team 2).M = True; Wait(1, Ignore Condition); Reset Player Hero Availability(Event Player); } } rule("Player Change Bot Hero On Spawn") { event { Ongoing - Each Player; Team 1; All; } conditions { Is In Spawn Room(Event Player) == False; Has Spawned(Event Player) == True; Event Player.M == False; Players In Slot(Slot Of(Event Player), Team 2).M == True; } actions { Wait(9 / 60, Abort When False); If(Event Player.aq != 0); Event Player.aq = 0; Call Subroutine(ak); End; Event Player.ar = Index Of Array Value(Event Player.bj, Hero Of(Event Player)); Start Forcing Player To Be Hero(Event Player, Event Player.bs); Wait(1 / 60, Ignore Condition); Stop Forcing Player To Be Hero(Event Player); Call Subroutine(ap); Call Subroutine(X); Players In Slot(Slot Of(Event Player), Team 2).M = False; Set Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Players In Slot(Slot Of(Event Player), Team 2)) - Vector(0, 0.250, 0)), To World); Wait(0.350, Ignore Condition); Stop Camera(Event Player); } } rule("Disable Primary Secondary Skip") { event { Ongoing - Each Player; Team 1; All; } conditions { Is Button Held(Event Player, Button(Interact)) == True; Has Spawned(Event Player) == True; } actions { Disallow Button(Event Player, Button(Primary Fire)); Disallow Button(Event Player, Button(Secondary Fire)); Wait Until(Is Button Held(Event Player, Button(Interact)) == False, 9999); Wait(0.750, Ignore Condition); Allow Button(Event Player, Button(Primary Fire)); Allow Button(Event Player, Button(Secondary Fire)); } } rule("Skip Hero") { event { Ongoing - Each Player; Team 1; All; } conditions { Is Button Held(Event Player, Button(Interact)) == True; (Is Button Held(Event Player, Button(Primary Fire)) == True || Is Button Held(Event Player, Button(Secondary Fire)) == True) == True; } actions { If(Event Player.cb > 0 && Event Player.cb <= 2); Event Player.cb = 0; Call Subroutine(aq); End; If(Is Button Held(Event Player, Button(Primary Fire)) == True); Event Player.bl = 1; Else; Event Player.bl = -1; End; Call Subroutine(X); } } rule("Help Skip Message") { event { Player Died; Team 1; All; } conditions { Is Game In Progress == True; Players In Slot(Slot Of(Event Player), Team 2).Q >= 2; Players In Slot(Slot Of(Event Player), Team 2).Q > Event Player.Q; Players In Slot(Slot Of(Event Player), Team 2).Q % 2 == 0; Event Player.ay >= 3; } actions { If(Players In Slot(Slot Of(Event Player), Team 2).Q % 4 == 0); Small Message(Event Player, Players In Slot(Slot Of(Event Player), Team 1).bo == 1 ? Custom String( "조언: 메뉴에서 난이도를 낮출 수 있습니다") : Custom String("Tip: Difficulty can be lowered in the menu")); End; Small Message(Event Player, Players In Slot(Slot Of(Event Player), Team 1).bo == 1 ? Custom String( "{1} 및 {2} 을 눌러 {0} 건너 뛰기", Hero Icon String(Hero Of(Players In Slot(Slot Of(Event Player), Team 2))), Input Binding String( Button(Interact)), Input Binding String(Button(Primary Fire))) : Custom String("To skip {0} hold {1} and press {2}", Hero Icon String(Hero Of(Players In Slot(Slot Of(Event Player), Team 2))), Input Binding String(Button(Interact)), Input Binding String(Button(Primary Fire)))); } } rule("Player Mirror Mode On") { event { Ongoing - Each Player; Team 1; All; } conditions { Event Player.bq == True; Event Player.al == False; Event Player.M == False; Players In Slot(Slot Of(Event Player), Team 2).M == False; Hero Of(Event Player) != Hero Of(Players In Slot(Slot Of(Event Player), Team 2)); Entity Exists(Players In Slot(Slot Of(Event Player), Team 2)) == True; } actions { Start Forcing Player To Be Hero(Event Player, Hero Of(Players In Slot(Slot Of(Event Player), Team 2))); Wait(1 / 60, Ignore Condition); Stop Forcing Player To Be Hero(Event Player); Call Subroutine(aj); } } rule("Player 1 Second Cooldown Resets") { event { Ongoing - Each Player; Team 1; All; } conditions { Event Player.br > 0; Event Player.al == False; Is Alive(Event Player) == True; } actions { Wait(1, Abort When False); If(Event Player.br != 2); If(Ability Cooldown(Event Player, Button(Primary Fire)) != 0); Set Ability Cooldown(Event Player, Button(Primary Fire), 0); End; If(Ability Cooldown(Event Player, Button(Secondary Fire)) != 0 && Is Using Ability 1(Event Player) == False); Set Ability Cooldown(Event Player, Button(Secondary Fire), 0); End; If(Ability Cooldown(Event Player, Button(Ability 1)) != 0 && Is Using Ability 1(Event Player) == False); Set Ability Cooldown(Event Player, Button(Ability 1), 0); End; If(Ability Cooldown(Event Player, Button(Ability 2)) != 0 && Is Using Ability 2(Event Player) == False); Set Ability Cooldown(Event Player, Button(Ability 2), 0); End; If(Ability Cooldown(Event Player, Button(Crouch)) != 0); Set Ability Cooldown(Event Player, Button(Crouch), 0); End; If(Ultimate Charge Percent(Event Player) < 100 && Is Using Ultimate(Event Player) == False); Set Ultimate Charge(Event Player, 100); End; Set Ammo(Event Player, 0, Max Ammo(Event Player, 0)); Set Ammo(Event Player, 1, Max Ammo(Event Player, 1)); Set Ability Charge(Event Player, Button(Ability 1), 3); Set Ability Charge(Event Player, Button(Ability 2), 3); Set Ability Resource(Event Player, Button(Secondary Fire), 100); Set Ability Resource(Event Player, Button(Jump), 100); End; If(Event Player.br != 1 && Round To Integer(Total Time Elapsed, Down) % 2 == 0); If(Ability Cooldown(Players In Slot(Slot Of(Event Player), Team 2), Button(Primary Fire)) != 0); Set Ability Cooldown(Players In Slot(Slot Of(Event Player), Team 2), Button(Primary Fire), 0); End; If(Ability Cooldown(Players In Slot(Slot Of(Event Player), Team 2), Button(Secondary Fire)) != 0 && Is Using Ability 1( Players In Slot(Slot Of(Event Player), Team 2)) == False); Set Ability Cooldown(Players In Slot(Slot Of(Event Player), Team 2), Button(Secondary Fire), 0); End; If(Ability Cooldown(Players In Slot(Slot Of(Event Player), Team 2), Button(Ability 1)) != 0 && Is Using Ability 1(Players In Slot( Slot Of(Event Player), Team 2)) == False); Set Ability Cooldown(Players In Slot(Slot Of(Event Player), Team 2), Button(Ability 1), 0); End; If(Ability Cooldown(Players In Slot(Slot Of(Event Player), Team 2), Button(Ability 2)) != 0 && Is Using Ability 2(Players In Slot( Slot Of(Event Player), Team 2)) == False); Set Ability Cooldown(Players In Slot(Slot Of(Event Player), Team 2), Button(Ability 2), 0); End; If(Ability Cooldown(Players In Slot(Slot Of(Event Player), Team 2), Button(Crouch)) != 0); Set Ability Cooldown(Players In Slot(Slot Of(Event Player), Team 2), Button(Crouch), 0); End; If(Ultimate Charge Percent(Players In Slot(Slot Of(Event Player), Team 2)) < 100 && Is Using Ultimate(Players In Slot(Slot Of( Event Player), Team 2)) == False); Set Ultimate Charge(Players In Slot(Slot Of(Event Player), Team 2), 100); End; Set Ammo(Players In Slot(Slot Of(Event Player), Team 2), 0, Max Ammo(Players In Slot(Slot Of(Event Player), Team 2), 0)); Set Ammo(Players In Slot(Slot Of(Event Player), Team 2), 1, Max Ammo(Players In Slot(Slot Of(Event Player), Team 2), 1)); Set Ability Charge(Players In Slot(Slot Of(Event Player), Team 2), Button(Ability 1), 3); Set Ability Charge(Players In Slot(Slot Of(Event Player), Team 2), Button(Ability 2), 3); Set Ability Resource(Players In Slot(Slot Of(Event Player), Team 2), Button(Secondary Fire), 100); Set Ability Resource(Players In Slot(Slot Of(Event Player), Team 2), Button(Jump), 100); End; Loop If Condition Is True; } } rule("Player Elevator Up") { event { Ongoing - Each Player; Team 1; All; } conditions { Event Player.bc == True; Event Player.bd < 32; Event Player.bd % 2 == 0; Vertical Speed Of(Event Player) >= 0; Is Alive(Event Player) == True; Is Button Held(Event Player, Button(Jump)) == True; Is Button Held(Event Player, Button(Crouch)) == False; } actions { Event Player.R[0] = 1; Call Subroutine(ag); Loop If Condition Is True; } } rule("Player Elevator Down") { event { Ongoing - Each Player; Team 1; All; } conditions { Event Player.bc == True; Event Player.bd > 0; Event Player.bd % 2 == 0; Vertical Speed Of(Event Player) <= 0; Is Alive(Event Player) == True; Is Button Held(Event Player, Button(Crouch)) == True; Is Button Held(Event Player, Button(Jump)) == False; Is Button Held(Event Player, Button(Reload)) == False; } actions { Event Player.R[0] = 2; Call Subroutine(ag); Loop If Condition Is True; } } rule("Player Elevator Movement Start") { event { Ongoing - Each Player; Team 1; All; } conditions { Event Player.bc == True; Is Alive(Event Player) == True; Throttle Of(Event Player) != Vector(0, 0, 0); } actions { Stop Accelerating(Event Player); Start Accelerating(Event Player, Throttle Of(Event Player), 100, Speed Of(Event Player), To Player, Direction Rate and Max Speed); } } rule("Player Elevator Movement Stop") { event { Ongoing - Each Player; Team 1; All; } conditions { Event Player.bc == True; Is Alive(Event Player) == True; Throttle Of(Event Player) == Vector(0, 0, 0); Speed Of(Event Player) > 0; } actions { Stop Accelerating(Event Player); Event Player.be = Array(); Event Player.be[0] = Position Of(Event Player); Wait(0.100, Ignore Condition); Event Player.be[1] = Position Of(Event Player); Apply Impulse(Event Player, Direction Towards(Event Player.be[1], Event Player.be[0]), Speed Of In Direction(Event Player, Direction Towards(Event Player.be[0], Event Player.be[1])), To World, Incorporate Contrary Motion); } } rule("W") { event { Subroutine; W; } actions { Players In Slot(Slot Of(Event Player), Team 2).S = False; If(Players In Slot(Slot Of(Event Player), Team 2).c == True && Global.M == False); Players In Slot(Slot Of(Event Player), Team 2).c = False; Players In Slot(Slot Of(Event Player), Team 2).Z = False; Players In Slot(Slot Of(Event Player), Team 2).U = False; Players In Slot(Slot Of(Event Player), Team 2).X = False; Players In Slot(Slot Of(Event Player), Team 2).A = False; Players In Slot(Slot Of(Event Player), Team 2).z = False; Players In Slot(Slot Of(Event Player), Team 2).J = 5; End; Cancel Primary Action(Players In Slot(Slot Of(Event Player), Team 2)); Call Subroutine(I); Call Subroutine(Z); Stop Facing(Players In Slot(Slot Of(Event Player), Team 2)); Call Subroutine(S); If( Hero Of(Players In Slot(Slot Of(Event Player), Team 2)) != Players In Slot(Slot Of(Event Player), Team 1).bj [Players In Slot(Slot Of(Event Player), Team 1).ar] ); If(Entity Exists(Players In Slot(Slot Of(Event Player), Team 2))); Call Subroutine(S); Destroy Dummy Bot(Team 2, Slot Of(Event Player)); Wait Until(Entity Exists(Players In Slot(Slot Of(Event Player), Team 2)) == False, 5); End; Call Subroutine(S); Create Dummy Bot( Players In Slot(Slot Of(Event Player), Team 1).bj [Players In Slot(Slot Of(Event Player), Team 1).ar], Team 2, Slot Of(Event Player), Vector(0, 0, 0), Vector(0, 0, 0) ); Wait Until(Entity Exists(Players In Slot(Slot Of(Event Player), Team 2)), 5); If(Players In Slot(Slot Of(Event Player), Team 1).bq == True); Start Forcing Dummy Bot Name( Players In Slot(Slot Of(Event Player), Team 2), Custom String("{0}", Players In Slot(Slot Of(Event Player), Team 1)) ); Else If(Global.X == True); If( Count Of(Global.J) - Count Of(Mapped Array(All Players(Team 1), Custom String("{0}", Current Array Element))) <= 0 ); Global.J = Append To Array(Global.a, Global.U); End; Players In Slot(Slot Of(Event Player), Team 2).ab = Random Value In Array( Remove From Array( Global.J, Mapped Array(All Players(Team 1), Custom String("{0}", Current Array Element)) ) ); Modify Global Variable( J, Remove From Array By Value, Players In Slot(Slot Of(Event Player), Team 2).ab ); Stop Forcing Dummy Bot Name(Players In Slot(Slot Of(Event Player), Team 2)); Start Forcing Dummy Bot Name( Players In Slot(Slot Of(Event Player), Team 2), Players In Slot(Slot Of(Event Player), Team 2).ab ); End; Call Subroutine(ai); Disable Built-In Game Mode Respawning(Players In Slot(Slot Of(Event Player), Team 2)); Call Subroutine(S); Set Invisible(Players In Slot(Slot Of(Event Player), Team 2), All); Call Subroutine(S); Small Message( Players In Slot(Slot Of(Event Player), Team 1), Custom String( "{0} {1}!", Hero Icon String( Hero Of(Players In Slot(Slot Of(Event Player), Team 2)) ), Hero Of(Players In Slot(Slot Of(Event Player), Team 2)) ) ); End; Call Subroutine(S); If( Players In Slot(Slot Of(Event Player), Team 1).ay >= 3 && (Global.K[0] == False && Global.M == False) == True ); Set Status(Players In Slot(Slot Of(Event Player), Team 2), Null, Unkillable, 9999); End; If(Players In Slot(Slot Of(Event Player), Team 1).ay >= 3); Players In Slot(Slot Of(Event Player), Team 2).J = 5; If(Global.K[0] == True || Global.M == True); Call Subroutine(J); End; End; If(Players In Slot(Slot Of(Event Player), Team 1).ca == True); Set Ultimate Ability Enabled(Players In Slot(Slot Of(Event Player), Team 2), False); End; Players In Slot(Slot Of(Event Player), Team 2).S = True; } } rule("X") { event { Subroutine; X; } actions { If( Health(Players In Slot(Slot Of(Event Player), Team 1)) != Max Health(Players In Slot(Slot Of(Event Player), Team 1)) ); Heal( Players In Slot(Slot Of(Event Player), Team 1), Null, Max Health(Players In Slot(Slot Of(Event Player), Team 1)) ); End; Players In Slot(Slot Of(Event Player), Team 1).Q = 0; Players In Slot(Slot Of(Event Player), Team 2).Q = 0; If(Players In Slot(Slot Of(Event Player), Team 1).bl == 1); If(Players In Slot(Slot Of(Event Player), Team 1).ar == Count Of(Event Player.bj) - 1); Players In Slot(Slot Of(Event Player), Team 1).ar = 0; Else; Players In Slot(Slot Of(Event Player), Team 1).ar = Players In Slot(Slot Of(Event Player), Team 1).as; End; Else If(Players In Slot(Slot Of(Event Player), Team 1).bl == -1); If(Players In Slot(Slot Of(Event Player), Team 1).ar == 0); Players In Slot(Slot Of(Event Player), Team 1).ar = Count Of(Players In Slot(Slot Of(Event Player), Team 1).bj) - 1; Else; Players In Slot(Slot Of(Event Player), Team 1).ar -= 1; End; End; If( Players In Slot(Slot Of(Event Player), Team 1).ar == Count Of(Players In Slot(Slot Of(Event Player), Team 1).bj) - 1 ); Players In Slot(Slot Of(Event Player), Team 1).as = 0; Else; Players In Slot(Slot Of(Event Player), Team 1).as = Players In Slot(Slot Of(Event Player), Team 1).ar + 1; End; Players In Slot(Slot Of(Event Player), Team 1).bl = 0; Call Subroutine(W); Call Subroutine(Y); } } rule("Y") { event { Subroutine; Y; } actions { Stop Forcing Player Position(Players In Slot(Slot Of(Event Player), Team 2)); Call Subroutine(S); Set Invisible(Players In Slot(Slot Of(Event Player), Team 2), All); Call Subroutine(S); Set Facing( Players In Slot(Slot Of(Event Player), Team 2), Vector( Random Real(-1, 1), Random Real(-0.500, 0.500), Random Real(-1, 1) ), To Player ); Call Subroutine(S); Players In Slot(Slot Of(Event Player), Team 1).bg = Players In Slot(Slot Of(Event Player), Team 1).bf / Players In Slot(Slot Of(Event Player), Team 1).bn * 2; Call Subroutine(S); If( Players In Slot(Slot Of(Event Player), Team 1).bn != 1 && Players In Slot(Slot Of(Event Player), Team 1).bn != Global.y ); Players In Slot(Slot Of(Event Player), Team 1).at = Array(); Players In Slot(Slot Of(Event Player), Team 1).at[0] = ( Players In Slot(Slot Of(Event Player), Team 1).bn - 1 - Players In Slot(Slot Of(Event Player), Team 1).Q ) % (Players In Slot(Slot Of(Event Player), Team 1).bn / 2) * Players In Slot(Slot Of(Event Player), Team 1).bg; Players In Slot(Slot Of(Event Player), Team 1).at[1] = Players In Slot(Slot Of(Event Player), Team 1).at[0] + Players In Slot(Slot Of(Event Player), Team 1).bg; If( Players In Slot(Slot Of(Event Player), Team 1).Q == 0 || Players In Slot(Slot Of(Event Player), Team 1).Q == Players In Slot(Slot Of(Event Player), Team 1).bn / 2 ); Players In Slot(Slot Of(Event Player), Team 1).at[1] = Players In Slot(Slot Of(Event Player), Team 1).at[1] - 2.500; End; Call Subroutine(S); Teleport( Players In Slot(Slot Of(Event Player), Team 2), Direction From Angles(Random Integer(1, 360), 0) * Random Integer( Players In Slot(Slot Of(Event Player), Team 1).at[0], Players In Slot(Slot Of(Event Player), Team 1).at[1] ) + Players In Slot(Slot Of(Event Player), Team 1).bm ); Else; Call Subroutine(S); Teleport( Players In Slot(Slot Of(Event Player), Team 2), Direction From Angles(Random Integer(1, 360), 0) * Random Real(0, Players In Slot(Slot Of(Event Player), Team 1).bf) + Players In Slot(Slot Of(Event Player), Team 1).bm ); End; Call Subroutine(S); Play Effect( Players In Slot(Slot Of(Event Player), Team 1), Buff Impact Sound, Color(White), Players In Slot(Slot Of(Event Player), Team 2), 180 ); Call Subroutine(S); Play Effect( Players In Slot(Slot Of(Event Player), Team 1), Bad Pickup Effect, Color(White), Players In Slot(Slot Of(Event Player), Team 2), 1 ); Call Subroutine(S); Set Invisible(Players In Slot(Slot Of(Event Player), Team 2), None); } } rule("V") { event { Subroutine; V; } actions { Start Throttle In Direction( Players In Slot(Slot Of(Event Player), Team 2), Players In Slot(Slot Of(Event Player), Team 2).ac, 1, To Player, Replace existing throttle, None ); Wait( Random Real( Players In Slot(Slot Of(Event Player), Team 2).aa / Players In Slot(Slot Of(Event Player), Team 1).ay, Players In Slot(Slot Of(Event Player), Team 2).aa ), Ignore Condition ); } } rule("T") { event { Subroutine; T; } actions { Call Subroutine(P); If(Random Real(0, 1) < Players In Slot(Slot Of(Event Player), Team 2).T); Stop Holding Button(Players In Slot(Slot Of(Event Player), Team 2), Button(Crouch)); Start Holding Button(Players In Slot(Slot Of(Event Player), Team 2), Button(Crouch)); Wait( Random Real( Players In Slot(Slot Of(Event Player), Team 2).V / 5, Players In Slot(Slot Of(Event Player), Team 2).V ), Ignore Condition ); End; Stop Holding Button(Players In Slot(Slot Of(Event Player), Team 2), Button(Crouch)); } } rule("U") { event { Subroutine; U; } actions { If(Random Real(0, 1) < Players In Slot(Slot Of(Event Player), Team 2).W); Press Button(Players In Slot(Slot Of(Event Player), Team 2), Button(Jump)); End; Wait( Random Real( Players In Slot(Slot Of(Event Player), Team 2).Y / 5, Players In Slot(Slot Of(Event Player), Team 2).Y ), Ignore Condition ); } } rule("Z") { event { Subroutine; Z; } actions { Wait(4 / 60, Ignore Condition); Stop Throttle In Direction(Players In Slot(Slot Of(Event Player), Team 2)); } } rule("Player Leave Destroy All Objects") { event { Ongoing - Each Player; Team 2; All; } conditions { Entity Exists(Players In Slot(Slot Of(Event Player), Team 1)) == False; Is In Spawn Room(Players In Slot(Slot Of(Event Player), Team 1)) == False; Has Spawned(Players In Slot(Slot Of(Event Player), Team 1)) == False; } actions { If(Count Of(Players In Slot(Slot Of(Event Player), Team 1).aj) > 0); Call Subroutine(af); End; If(Count Of(Players In Slot(Slot Of(Event Player), Team 1).ad) > 0); Call Subroutine(aa); End; If(Count Of(Players In Slot(Slot Of(Event Player), Team 1).ag) > 0); Call Subroutine(ab); End; If(Count Of(Players In Slot(Slot Of(Event Player), Team 1).ai) > 0); Call Subroutine(ac); End; If(Count Of(Players In Slot(Slot Of(Event Player), Team 1).ba) > 0); For Player Variable(Players In Slot(Slot Of(Event Player), Team 1), N, Count Of(Players In Slot(Slot Of(Event Player), Team 1) .ba), -1, -1); Destroy Effect(Players In Slot(Slot Of(Event Player), Team 1).ba[Players In Slot(Slot Of(Event Player), Team 1).N]); Players In Slot(Slot Of(Event Player), Team 1).ba = Remove From Array(Players In Slot(Slot Of(Event Player), Team 1) .ba, Players In Slot(Slot Of(Event Player), Team 1).ba[Players In Slot(Slot Of(Event Player), Team 1).N]); End; End; Destroy Dummy Bot(Team 2, Slot Of(Event Player)); } } rule("Bot Respawn") { event { Player Died; Team 2; All; } conditions { Players In Slot(Slot Of(Event Player), Team 1).Q < Players In Slot(Slot Of(Event Player), Team 1).bn; } actions { Wait(0.250, Abort When False); Call Subroutine(I); Event Player.z = False; Event Player.A = False; Stop Heal Over Time(Event Player.O); Stop Facing(Event Player); Call Subroutine(S); Respawn(Event Player); Call Subroutine(Y); } } rule("Bot Elimination") { event { Player Dealt Final Blow; Team 2; All; } conditions { Is Game In Progress == True; } actions { Event Player.Q += 1; If( Players In Slot(Slot Of(Event Player), Team 1).bp > 0 && Players In Slot(Slot Of(Event Player), Team 1).Q > 0 ); If( Players In Slot(Slot Of(Event Player), Team 1).bp > Players In Slot(Slot Of(Event Player), Team 1).Q ); Players In Slot(Slot Of(Event Player), Team 1).Q = 0; Else; Players In Slot(Slot Of(Event Player), Team 1).Q -= Players In Slot(Slot Of(Event Player), Team 1).bp; End; End; If(Random Real(0, 1) < 0.600); Event Player.l = Random Integer(1, 4); Wait(Random Real(0.650, 1.150), Ignore Condition); If(Event Player.l == 1); Communicate(Event Player, Hello); Else If(Event Player.l == 2); Communicate(Event Player, Thanks); Else If(Event Player.l == 3); Communicate(Event Player, Sorry); Else If(Event Player.l == 4); Communicate(Event Player, Goodbye); End; End; Call Subroutine(P); Call Subroutine(I); } } rule("Bot Heal After Elim") { event { Player Dealt Final Blow; Team 2; All; } conditions { Is Alive(Event Player) == True; Health(Event Player) != Max Health(Event Player); Players In Slot(Slot Of(Event Player), Team 1).bz == True; } actions { Call Subroutine(an); } } rule("Bot Heal After Damage") { event { Player Dealt Damage; Team 2; All; } conditions { Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Players In Slot(Slot Of(Event Player), Team 1).bz == True; Total Time Elapsed >= Event Player.P + 1; Event Damage > 5; } actions { Call Subroutine(ao); } } rule("Bot Reset Position Non AI Difficulty") { event { Ongoing - Each Player; Team 2; All; } conditions { Is Game In Progress == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1).bm) >= Players In Slot(Slot Of( Event Player), Team 1).bf - 1; Players In Slot(Slot Of(Event Player), Team 1).ay < 3; } actions { Stop Facing(Event Player); Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(Vector(0, 0, -5), Event Player, Rotation)), Random Integer(300, 500), To Player, None); } } rule("Bot Reset Position Out Of Bounds") { event { Ongoing - Each Player; Team 2; All; } conditions { Is Game In Progress == True; Has Spawned(Event Player) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1).bm) > Players In Slot(Slot Of( Event Player), Team 1).bf + 15; } actions { Wait(0.750, Abort When False); Call Subroutine(Y); } } rule("Bot Hello") { event { Ongoing - Each Player; Team 1; All; } conditions { Is Game In Progress == True; Is Communicating(Event Player, Hello) == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 2)) == True; } actions { Wait(Random Real(1, 1.250), Ignore Condition); Communicate(Players In Slot(Slot Of(Event Player), Team 2), Hello); } } rule("Bot You Are Welcome") { event { Ongoing - Each Player; Team 1; All; } conditions { Is Game In Progress == True; Is Communicating(Event Player, Thanks) == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 2)) == True; } actions { Wait(Random Real(1.500, 2), Ignore Condition); Communicate(Players In Slot(Slot Of(Event Player), Team 2), You are Welcome); } } rule("Bot Asleep Thanks") { event { Ongoing - Each Player; Team 1; Ana; } conditions { Is Alive(Players In Slot(Slot Of(Event Player), Team 2)) == True; Has Status(Players In Slot(Slot Of(Event Player), Team 2), Asleep) == True; } actions { If(Random Real(0, 1) < 0.750); Wait(Random Real(0.750, 1), Ignore Condition); Communicate(Players In Slot(Slot Of(Event Player), Team 2), Thanks); End; } } rule("Hard Mode WASD") { event { Ongoing - Each Player; Team 1; All; } conditions { Event Player.ay == 2; Is Alive(Players In Slot(Slot Of(Event Player), Team 2)) == True; Players In Slot(Slot Of(Event Player), Team 2).S == True; } actions { Players In Slot(Slot Of(Event Player), Team 2).ac = Random Value In Array(Global.t); Start Rule(V, Do Nothing); Start Rule(T, Do Nothing); Start Rule(U, Do Nothing); Wait(0.250, Ignore Condition); Loop If Condition Is True; Stop Throttle In Direction(Players In Slot(Slot Of(Event Player), Team 2)); Stop Holding Button(Players In Slot(Slot Of(Event Player), Team 2), Button(Crouch)); Stop Holding Button(Players In Slot(Slot Of(Event Player), Team 2), Button(Jump)); } } rule("Medium Mode WASD") { event { Ongoing - Each Player; Team 1; All; } conditions { Event Player.ay == 1; Is Alive(Players In Slot(Slot Of(Event Player), Team 2)) == True; (Event Player.Q >= Event Player.bn / 2 || ( Event Player.bn == Global.y && Event Player.Q % 2 == 1)) == True; Players In Slot(Slot Of(Event Player), Team 2).S == True; } actions { Players In Slot(Slot Of(Event Player), Team 2).ac = Random Value In Array(Global.v); Start Rule(V, Do Nothing); Start Rule(T, Do Nothing); Start Rule(U, Do Nothing); Wait(0.250, Ignore Condition); Loop If Condition Is True; Stop Throttle In Direction(Players In Slot(Slot Of(Event Player), Team 2)); Stop Holding Button(Players In Slot(Slot Of(Event Player), Team 2), Button(Crouch)); Stop Holding Button(Players In Slot(Slot Of(Event Player), Team 2), Button(Jump)); } } rule("Easy Mode WASD") { event { Ongoing - Each Player; Team 1; All; } conditions { Event Player.ay == 0; Is Alive(Players In Slot(Slot Of(Event Player), Team 2)) == True; (Event Player.Q >= Event Player.bn / 2 || ( Event Player.bn == Global.y && Event Player.Q % 2 == 1)) == True; Players In Slot(Slot Of(Event Player), Team 2).S == True; } actions { Start Throttle In Direction(Players In Slot(Slot Of(Event Player), Team 2), Forward, 1, To Player, Replace existing throttle, Direction and Magnitude); Wait(1, Ignore Condition); Loop If Condition Is True; Stop Throttle In Direction(Players In Slot(Slot Of(Event Player), Team 2)); } } rule("Non AI Scope Hero Scope In") { event { Ongoing - Each Player; Team 2; All; } conditions { Is Alive(Event Player) == True; Players In Slot(Slot Of(Event Player), Team 1).ay < 3; Array Contains(Global.z, Hero Of(Event Player)) == True; Event Player.S == True; } actions { If(Players In Slot(Slot Of(Event Player), Team 1).ay < 2 && Players In Slot(Slot Of(Event Player), Team 1) .bn == Global.y); If(Players In Slot(Slot Of(Event Player), Team 1).Q % 4 == 0 || (Players In Slot(Slot Of(Event Player), Team 1) .Q - 1) % 4 == 0); Stop Holding Button(Event Player, Button(Secondary Fire)); Wait(3 / 60, Ignore Condition); Start Holding Button(Event Player, Button(Secondary Fire)); Event Player.X = False; Else; Skip If(Is Button Held(Event Player, Button(Secondary Fire)) == False, 1); Stop Holding Button(Event Player, Button(Secondary Fire)); Event Player.X = True; End; Else; If(Players In Slot(Slot Of(Event Player), Team 1).Q % 2 == 0); Stop Holding Button(Event Player, Button(Secondary Fire)); Wait(3 / 60, Ignore Condition); Start Holding Button(Event Player, Button(Secondary Fire)); Event Player.X = False; Else; Skip If(Is Button Held(Event Player, Button(Secondary Fire)) == False, 1); Stop Holding Button(Event Player, Button(Secondary Fire)); Event Player.X = True; End; End; } } rule("Bot Flicker") { event { Ongoing - Each Player; Team 2; All; } conditions { Is Alive(Event Player) == True; Players In Slot(Slot Of(Event Player), Team 1).bx == True; Event Player.S == True; } actions { Cancel Primary Action(Event Player); Set Invisible(Event Player, All); Event Player.m = False; Event Player.n = False; Event Player.o = False; Set Status(Event Player, Null, Phased Out, 9999); Wait(Random Real(0.300, 3), Ignore Condition); Set Invisible(Event Player, None); Event Player.m = True; Event Player.n = True; Event Player.o = True; Clear Status(Event Player, Phased Out); Wait(Random Real(0.250, 2.500), Ignore Condition); Loop If Condition Is True; } } rule("S") { event { Subroutine; S; } actions { Wait Until(((Slot Of(Event Player) % 2 == 0 && Global.W % 2 == 0) || (Slot Of(Event Player) % 2 != 0 && Global.W % 2 != 0)) == True, 2 / 60); Wait(0.500 / 60, Ignore Condition); } } rule("ao") { event { Subroutine; ao; } actions { If(Event Player.O != 0); Stop Heal Over Time(Event Player.O); End; Start Heal Over Time(Event Player, Null, 6, 15); Event Player.O = Last Heal Over Time ID; Event Player.P = Total Time Elapsed; } } rule("an") { event { Subroutine; an; } actions { Wait(6 / 60, Ignore Condition); Start Heal Over Time(Event Player, Null, 2, 55); } } rule("R") { event { Subroutine; R; } actions { Disallow Button(Event Player, Button(Primary Fire)); Disallow Button(Event Player, Button(Secondary Fire)); Disallow Button(Event Player, Button(Ability 1)); Disallow Button(Event Player, Button(Ability 2)); Disallow Button(Event Player, Button(Ultimate)); Disallow Button(Event Player, Button(Jump)); Disallow Button(Event Player, Button(Crouch)); Disallow Button(Event Player, Button(Melee)); Disallow Button(Event Player, Button(Reload)); } } rule("Q") { event { Subroutine; Q; } actions { Allow Button(Event Player, Button(Primary Fire)); Allow Button(Event Player, Button(Secondary Fire)); Allow Button(Event Player, Button(Ability 1)); Allow Button(Event Player, Button(Ability 2)); Allow Button(Event Player, Button(Ultimate)); Allow Button(Event Player, Button(Jump)); Allow Button(Event Player, Button(Crouch)); Allow Button(Event Player, Button(Melee)); Allow Button(Event Player, Button(Reload)); } } rule("Special Rule: Doomfist Rocket Punch Start") { event { Ongoing - Each Player; All; Doomfist; } conditions { Is Firing Secondary(Event Player) == True; Is Alive(Event Player) == True; } actions { Event Player.r = Total Time Elapsed; Event Player.q = 0; } } rule("Special Rule: Doomfist Rocket Punch") { event { Ongoing - Each Player; All; Doomfist; } conditions { Is Firing Secondary(Event Player) == False; Is Alive(Event Player) == True; Event Player.r != 0; } actions { Event Player.q = min( (Total Time Elapsed - Event Player.r) / 1.400 * 100.750 + 49.250, 150 ); } } rule("Special Rule: Doomfist Rocket Punch Damage") { event { Ongoing - Each Player; All; Doomfist; } conditions { Has Status(Players In Slot(Slot Of(Event Player), Opposite Team Of(Team Of(Event Player))), Stunned) == True; Distance Between(Players In Slot(Slot Of(Event Player), Opposite Team Of(Team Of(Event Player))), Players In Slot(Slot Of( Event Player), Team 1).bm) >= Players In Slot(Slot Of(Event Player), Team 1).bw - 2.500; } actions { Apply Impulse(Players In Slot(Slot Of(Event Player), Opposite Team Of(Team Of(Event Player))), Direction Towards(Players In Slot( Slot Of(Event Player), Opposite Team Of(Team Of(Event Player))), Event Player), 1, To World, Cancel Contrary Motion); Damage(Players In Slot(Slot Of(Event Player), Opposite Team Of(Team Of(Event Player))), Event Player, Event Player.q); Event Player.r = 0; Event Player.q = 0; } } rule("Special Rule: Reinhardt Charge") { event { Ongoing - Each Player; All; Reinhardt; } conditions { Is Alive(Event Player) == True; Is Using Ability 1(Event Player) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1).bm) >= Players In Slot(Slot Of(Event Player), Team 1).bw - 2.500; Distance Between( Position Of(Event Player) + World Vector Of(Vector(0, 0, -5), Event Player, Rotation), Players In Slot(Slot Of(Event Player), Team 1).bm ) <= Players In Slot(Slot Of(Event Player), Team 1).bw - 2.500; } actions { If(Players In Slot(Slot Of(Event Player), Team 1).ay >= 3); Stop Facing(Players In Slot(Slot Of(Event Player), Team 2)); End; Set Status(Event Player, Null, Stunned, 0.650); Start Forcing Player Position(Event Player, Position Of(Event Player), False); If(Has Status(Players In Slot(Slot Of(Event Player), Opposite Team Of(Team Of(Event Player))), Stunned) && Distance Between( Event Player, Players In Slot(Slot Of(Event Player), Opposite Team Of(Team Of(Event Player)))) < 2); Start Forcing Player Position(Players In Slot(Slot Of(Event Player), Opposite Team Of(Team Of(Event Player))), Position Of( Players In Slot(Slot Of(Event Player), Opposite Team Of(Team Of(Event Player)))), False); Damage(Players In Slot(Slot Of(Event Player), Opposite Team Of(Team Of(Event Player))), Event Player, 300); End; Wait(0.650, Ignore Condition); Stop Forcing Player Position(Event Player); Stop Forcing Player Position(Players In Slot(Slot Of(Event Player), Opposite Team Of(Team Of(Event Player)))); If(Players In Slot(Slot Of(Event Player), Team 1).ay >= 3); Call Subroutine(L); End; If(Event Player == Players In Slot(Slot Of(Event Player), Team 2)); Event Player.X = True; End; } } rule("Special Rule: Player Ana Self Nano Boost") { event { Ongoing - Each Player; Team 1; Ana; } conditions { Is Alive(Event Player) == True; Ultimate Charge Percent(Event Player) == 100; Is Button Held(Event Player, Button(Ultimate)) == True; } actions { Set Ultimate Charge(Event Player, 0); Wait(0.150, Abort When False); Set Ultimate Ability Enabled(Event Player, False); Disallow Button(Event Player, Button(Ultimate)); Big Message(Event Player, Players In Slot(Slot Of(Event Player), Team 1).bo == 1 ? Custom String("{0} 활성화!", Ability Icon String(Hero(Ana), Button(Ultimate))) : Custom String("{0} ACTIVATED!", Ability Icon String(Hero(Ana), Button( Ultimate)))); Play Effect(All Players(All Teams), Good Pickup Effect, Color(Blue), Event Player, 2); Play Effect(All Players(All Teams), Explosion Sound, Color(White), Event Player, 60); Heal(Event Player, Event Player, 250); Start Damage Modification(Players In Slot(Slot Of(Event Player), Team 2), Event Player, 150, Receivers Damagers and Damage Percent); Call Subroutine(S); Event Player.aw = Last Damage Modification ID; Start Damage Modification(Event Player, Players In Slot(Slot Of(Event Player), Team 2), 50, Receivers Damagers and Damage Percent); Call Subroutine(S); Event Player.ax = Last Damage Modification ID; Wait Until(Is Dead(Event Player), 8); Set Ultimate Ability Enabled(Event Player, True); Allow Button(Event Player, Button(Ultimate)); Stop Damage Modification(Event Player.aw); Stop Damage Modification(Event Player.ax); } } rule("Special Rule: Player Sombra Disable Enemy Attack") { event { Ongoing - Each Player; Team 1; Sombra; } conditions { Players In Slot(Slot Of(Event Player), Team 2).c == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 2)) == True; Is Using Ability 1(Event Player) == True; } actions { Wait(Random Real(0.250, 0.500), Ignore Condition); Players In Slot(Slot Of(Event Player), Team 2).U = False; Players In Slot(Slot Of(Event Player), Team 2).n = False; Players In Slot(Slot Of(Event Player), Team 2).o = False; While(Is Using Ability 1(Event Player) == True && Hero Of(Event Player) == Hero(Sombra)); Players In Slot(Slot Of(Event Player), Team 2).B = Vector(Random Real(-5, 5), Random Real(1, 2), Random Real(-5, 5)) + Position Of(Players In Slot(Slot Of(Event Player), Team 2)); Call Subroutine(K); Wait(Random Real(0.250, 1.250), Ignore Condition); Players In Slot(Slot Of(Event Player), Team 2).m = True; If(Random Real(0, 1) < 0.050); Communicate(Players In Slot(Slot Of(Event Player), Team 2), Hello); End; End; Wait(Random Real(0.250, 0.500), Ignore Condition); Players In Slot(Slot Of(Event Player), Team 2).n = True; Players In Slot(Slot Of(Event Player), Team 2).o = True; Players In Slot(Slot Of(Event Player), Team 2).U = True; } } rule("J") { event { Subroutine; J; } actions { Call Subroutine(S); Clear Status(Players In Slot(Slot Of(Event Player), Team 2), Unkillable); Players In Slot(Slot Of(Event Player), Team 2).Z = True; Players In Slot( Slot Of(Event Player), Team 2).U = True; Players In Slot(Slot Of(Event Player), Team 2).X = True; Players In Slot(Slot Of(Event Player), Team 2).c = True; Call Subroutine(L); } } rule("P") { event { Subroutine; P; } actions { Wait( Random Real( Players In Slot(Slot Of(Event Player), Team 2).I / 4, Players In Slot(Slot Of(Event Player), Team 2).I), Ignore Condition ); } } rule("I") { event { Subroutine; I; } actions { Stop Holding Button(Players In Slot(Slot Of(Event Player), Team 2), Button(Primary Fire)); Stop Holding Button(Players In Slot(Slot Of(Event Player), Team 2), Button(Secondary Fire)); Stop Holding Button(Players In Slot(Slot Of(Event Player), Team 2), Button(Ability 1)); Stop Holding Button(Players In Slot(Slot Of(Event Player), Team 2), Button(Ability 2)); Stop Holding Button(Players In Slot(Slot Of(Event Player), Team 2), Button(Ultimate)); Stop Holding Button(Players In Slot(Slot Of(Event Player), Team 2), Button(Jump)); Stop Holding Button(Players In Slot(Slot Of(Event Player), Team 2), Button(Crouch)); Stop Holding Button(Players In Slot(Slot Of(Event Player), Team 2), Button(Melee)); Stop Holding Button(Players In Slot(Slot Of(Event Player), Team 2), Button(Reload)); Wait(1 / 60, Ignore Condition); } } rule("M") { event { Subroutine; M; } actions { Call Subroutine(S); Abort If(Players In Slot(Slot Of(Event Player), Team 2).m == False); Stop Facing(Players In Slot(Slot Of(Event Player), Team 2)); If(Players In Slot(Slot Of(Event Player), Team 2).j == 0); If(Players In Slot(Slot Of(Event Player), Team 2).d == 0); Start Facing( Players In Slot(Slot Of(Event Player), Team 2), Direction From Angles( Horizontal Angle Towards( Players In Slot(Slot Of(Event Player), Team 2), Eye Position( Players In Slot(Slot Of(Event Player), Team 1)) - Vector(0, 0.250, 0) ) + Players In Slot(Slot Of(Event Player), Team 2).f, Vertical Angle From Direction( Direction Towards( Eye Position( Players In Slot(Slot Of(Event Player), Team 2)), Eye Position( Players In Slot(Slot Of(Event Player), Team 1)) - Vector(0, 0.250, 0) ) ) + Players In Slot(Slot Of(Event Player), Team 2).g ), Players In Slot(Slot Of(Event Player), Team 2).i, To Player, Direction and Turn Rate ); Else If( Players In Slot(Slot Of(Event Player), Team 2).d == 1); Start Facing( Players In Slot(Slot Of(Event Player), Team 2), Direction From Angles( Horizontal Angle Towards( Players In Slot(Slot Of(Event Player), Team 2), Eye Position( Players In Slot(Slot Of(Event Player), Team 1)) ) + Players In Slot(Slot Of(Event Player), Team 2).f, Vertical Angle From Direction( Direction Towards( Eye Position( Players In Slot(Slot Of(Event Player), Team 2)), Eye Position( Players In Slot(Slot Of(Event Player), Team 1)) ) ) + Players In Slot(Slot Of(Event Player), Team 2).g ), Players In Slot(Slot Of(Event Player), Team 2).i, To Player, Direction and Turn Rate ); Else If( Players In Slot(Slot Of(Event Player), Team 2).d == 2); Start Facing( Players In Slot(Slot Of(Event Player), Team 2), Direction From Angles( Horizontal Angle Towards( Players In Slot(Slot Of(Event Player), Team 2), Position Of(Players In Slot(Slot Of(Event Player), Team 1)) ) + Players In Slot(Slot Of(Event Player), Team 2).f, Vertical Angle From Direction( Direction Towards( Eye Position( Players In Slot(Slot Of(Event Player), Team 2)), Position Of( Players In Slot(Slot Of(Event Player), Team 1)) ) ) + Players In Slot(Slot Of(Event Player), Team 2).g ), Players In Slot(Slot Of(Event Player), Team 2).i, To Player, Direction and Turn Rate ); Else If( Players In Slot(Slot Of(Event Player), Team 2).d == 3); Start Facing( Players In Slot(Slot Of(Event Player), Team 2), Direction From Angles( Horizontal Angle Towards( Players In Slot(Slot Of(Event Player), Team 2), Position Of(Players In Slot(Slot Of(Event Player), Team 1)) + Players In Slot( Slot Of(Event Player), Team 2).y ) + Players In Slot(Slot Of(Event Player), Team 2).f, Vertical Angle From Direction( Direction Towards( Eye Position( Players In Slot(Slot Of(Event Player), Team 2)), Position Of( Players In Slot(Slot Of(Event Player), Team 1)) + Players In Slot( Slot Of(Event Player), Team 2).y ) ) + Players In Slot(Slot Of(Event Player), Team 2).g ), Players In Slot(Slot Of(Event Player), Team 2).i, To Player, Direction and Turn Rate ); End; Else If(Players In Slot(Slot Of(Event Player), Team 2).j == 1); If(Players In Slot(Slot Of(Event Player), Team 2).d == 0); Start Facing( Players In Slot(Slot Of(Event Player), Team 2), Direction From Angles( Horizontal Angle Towards( Players In Slot(Slot Of(Event Player), Team 2), World Vector Of( Speed Of(Players In Slot(Slot Of(Event Player), Team 1)) * Throttle Of( Players In Slot(Slot Of(Event Player), Team 1)), Players In Slot(Slot Of(Event Player), Team 1), Rotation ) * ( Distance Between( Position Of( Players In Slot(Slot Of(Event Player), Team 2)), Position Of( Players In Slot(Slot Of(Event Player), Team 1)) ) / Players In Slot( Slot Of(Event Player), Team 2).G ) + Position Of( Players In Slot(Slot Of(Event Player), Team 1)) ) + Players In Slot(Slot Of(Event Player), Team 2).f, Vertical Angle From Direction( Direction Towards( Eye Position( Players In Slot(Slot Of(Event Player), Team 2)), Eye Position( Players In Slot(Slot Of(Event Player), Team 1)) - Vector(0, 0.250, 0) ) ) + Players In Slot(Slot Of(Event Player), Team 2).g ), Players In Slot(Slot Of(Event Player), Team 2).i, To Player, Direction and Turn Rate ); Else If( Players In Slot(Slot Of(Event Player), Team 2).d == 1); Start Facing( Players In Slot(Slot Of(Event Player), Team 2), Direction From Angles( Horizontal Angle Towards( Players In Slot(Slot Of(Event Player), Team 2), World Vector Of( Speed Of(Players In Slot(Slot Of(Event Player), Team 1)) * Throttle Of( Players In Slot(Slot Of(Event Player), Team 1)), Players In Slot(Slot Of(Event Player), Team 1), Rotation ) * ( Distance Between( Position Of( Players In Slot(Slot Of(Event Player), Team 2)), Position Of( Players In Slot(Slot Of(Event Player), Team 1)) ) / Players In Slot( Slot Of(Event Player), Team 2).G ) + Position Of( Players In Slot(Slot Of(Event Player), Team 1)) ) + Players In Slot(Slot Of(Event Player), Team 2).f, Vertical Angle From Direction( Direction Towards( Eye Position( Players In Slot(Slot Of(Event Player), Team 2)), Eye Position( Players In Slot(Slot Of(Event Player), Team 1)) ) ) + Players In Slot(Slot Of(Event Player), Team 2).g ), Players In Slot(Slot Of(Event Player), Team 2).i, To Player, Direction and Turn Rate ); Else If( Players In Slot(Slot Of(Event Player), Team 2).d == 2); Start Facing( Players In Slot(Slot Of(Event Player), Team 2), Direction From Angles( Horizontal Angle Towards( Players In Slot(Slot Of(Event Player), Team 2), World Vector Of( Speed Of(Players In Slot(Slot Of(Event Player), Team 1)) * Throttle Of( Players In Slot(Slot Of(Event Player), Team 1)), Players In Slot(Slot Of(Event Player), Team 1), Rotation ) * ( Distance Between( Position Of( Players In Slot(Slot Of(Event Player), Team 2)), Position Of( Players In Slot(Slot Of(Event Player), Team 1)) ) / Players In Slot( Slot Of(Event Player), Team 2).G ) + Position Of( Players In Slot(Slot Of(Event Player), Team 1)) ) + Players In Slot(Slot Of(Event Player), Team 2).f, Vertical Angle From Direction( Direction Towards( Eye Position( Players In Slot(Slot Of(Event Player), Team 2)), Position Of( Players In Slot(Slot Of(Event Player), Team 1)) ) ) + Players In Slot(Slot Of(Event Player), Team 2).g ), Players In Slot(Slot Of(Event Player), Team 2).i, To Player, Direction and Turn Rate ); Else If( Players In Slot(Slot Of(Event Player), Team 2).d == 3); Start Facing( Players In Slot(Slot Of(Event Player), Team 2), Direction From Angles( Horizontal Angle Towards( Players In Slot(Slot Of(Event Player), Team 2), World Vector Of( Speed Of(Players In Slot(Slot Of(Event Player), Team 1)) * Throttle Of( Players In Slot(Slot Of(Event Player), Team 1)), Players In Slot(Slot Of(Event Player), Team 1), Rotation ) * ( Distance Between( Position Of( Players In Slot(Slot Of(Event Player), Team 2)), Position Of( Players In Slot(Slot Of(Event Player), Team 1)) ) / Players In Slot( Slot Of(Event Player), Team 2).G ) + Position Of( Players In Slot(Slot Of(Event Player), Team 1)) + Players In Slot( Slot Of(Event Player), Team 2).y ) + Players In Slot(Slot Of(Event Player), Team 2).f, Vertical Angle From Direction( Direction Towards( Eye Position( Players In Slot(Slot Of(Event Player), Team 2)), Position Of( Players In Slot(Slot Of(Event Player), Team 1)) + Players In Slot( Slot Of(Event Player), Team 2).y ) ) + Players In Slot(Slot Of(Event Player), Team 2).g ), Players In Slot(Slot Of(Event Player), Team 2).i, To Player, Direction and Turn Rate ); End; Else If(Players In Slot(Slot Of(Event Player), Team 2).j == 2); If(Players In Slot(Slot Of(Event Player), Team 2).d == 0); Start Facing( Players In Slot(Slot Of(Event Player), Team 2), Direction From Angles( Horizontal Angle Towards( Players In Slot(Slot Of(Event Player), Team 2), World Vector Of( Speed Of(Players In Slot(Slot Of(Event Player), Team 1)) * Throttle Of( Players In Slot(Slot Of(Event Player), Team 1)), Players In Slot(Slot Of(Event Player), Team 1), Rotation ) * ( Distance Between( Position Of( Players In Slot(Slot Of(Event Player), Team 2)), Position Of( Players In Slot(Slot Of(Event Player), Team 1)) ) / Players In Slot( Slot Of(Event Player), Team 2).G ) + Position Of( Players In Slot(Slot Of(Event Player), Team 1)) ) + Players In Slot(Slot Of(Event Player), Team 2).f, Vertical Angle From Direction( Direction Towards( Eye Position( Players In Slot(Slot Of(Event Player), Team 2)), Eye Position( Players In Slot(Slot Of(Event Player), Team 1)) - Vector(0, 0.250, 0) ) ) + Players In Slot(Slot Of(Event Player), Team 2).g + Arcsine In Degrees( -15.800 * ( Distance Between( Eye Position( Players In Slot(Slot Of(Event Player), Team 2)), Eye Position( Players In Slot(Slot Of(Event Player), Team 1)) - Vector(0, 0.250, 0) ) ) / Players In Slot( Slot Of(Event Player), Team 2).G ^ 2 ) / 2 ), Players In Slot(Slot Of(Event Player), Team 2).i, To Player, Direction and Turn Rate ); Else If( Players In Slot(Slot Of(Event Player), Team 2).d == 1); Start Facing( Players In Slot(Slot Of(Event Player), Team 2), Direction From Angles( Horizontal Angle Towards( Players In Slot(Slot Of(Event Player), Team 2), World Vector Of( Speed Of(Players In Slot(Slot Of(Event Player), Team 1)) * Throttle Of( Players In Slot(Slot Of(Event Player), Team 1)), Players In Slot(Slot Of(Event Player), Team 1), Rotation ) * ( Distance Between( Position Of( Players In Slot(Slot Of(Event Player), Team 2)), Position Of( Players In Slot(Slot Of(Event Player), Team 1)) ) / Players In Slot( Slot Of(Event Player), Team 2).G ) + Position Of( Players In Slot(Slot Of(Event Player), Team 1)) ) + Players In Slot(Slot Of(Event Player), Team 2).f, Vertical Angle From Direction( Direction Towards( Eye Position( Players In Slot(Slot Of(Event Player), Team 2)), Eye Position( Players In Slot(Slot Of(Event Player), Team 1)) ) ) + Players In Slot(Slot Of(Event Player), Team 2).g + Arcsine In Degrees( -15.800 * ( Distance Between( Eye Position( Players In Slot(Slot Of(Event Player), Team 2)), Eye Position( Players In Slot(Slot Of(Event Player), Team 1)) ) ) / Players In Slot( Slot Of(Event Player), Team 2).G ^ 2 ) / 2 ), Players In Slot(Slot Of(Event Player), Team 2).i, To Player, Direction and Turn Rate ); Else If( Players In Slot(Slot Of(Event Player), Team 2).d == 2); Start Facing( Players In Slot(Slot Of(Event Player), Team 2), Direction From Angles( Horizontal Angle Towards( Players In Slot(Slot Of(Event Player), Team 2), World Vector Of( Speed Of(Players In Slot(Slot Of(Event Player), Team 1)) * Throttle Of( Players In Slot(Slot Of(Event Player), Team 1)), Players In Slot(Slot Of(Event Player), Team 1), Rotation ) * ( Distance Between( Position Of( Players In Slot(Slot Of(Event Player), Team 2)), Position Of( Players In Slot(Slot Of(Event Player), Team 1)) ) / Players In Slot( Slot Of(Event Player), Team 2).G ) + Position Of( Players In Slot(Slot Of(Event Player), Team 1)) ) + Players In Slot(Slot Of(Event Player), Team 2).f, Vertical Angle From Direction( Direction Towards( Eye Position( Players In Slot(Slot Of(Event Player), Team 2)), Position Of( Players In Slot(Slot Of(Event Player), Team 1)) ) ) + Players In Slot(Slot Of(Event Player), Team 2).g + Arcsine In Degrees( -15.800 * ( Distance Between( Eye Position( Players In Slot(Slot Of(Event Player), Team 2)), Position Of( Players In Slot(Slot Of(Event Player), Team 1)) ) ) / Players In Slot( Slot Of(Event Player), Team 2).G ^ 2 ) / 2 ), Players In Slot(Slot Of(Event Player), Team 2).i, To Player, Direction and Turn Rate ); Else If( Players In Slot(Slot Of(Event Player), Team 2).d == 3); Start Facing( Players In Slot(Slot Of(Event Player), Team 2), Direction From Angles( Horizontal Angle Towards( Players In Slot(Slot Of(Event Player), Team 2), World Vector Of( Speed Of(Players In Slot(Slot Of(Event Player), Team 1)) * Throttle Of( Players In Slot(Slot Of(Event Player), Team 1)), Players In Slot(Slot Of(Event Player), Team 1), Rotation ) * ( Distance Between( Position Of( Players In Slot(Slot Of(Event Player), Team 2)), Position Of( Players In Slot(Slot Of(Event Player), Team 1)) ) / Players In Slot( Slot Of(Event Player), Team 2).G ) + Position Of( Players In Slot(Slot Of(Event Player), Team 1)) + Players In Slot( Slot Of(Event Player), Team 2).y ) + Players In Slot(Slot Of(Event Player), Team 2).f, Vertical Angle From Direction( Direction Towards( Eye Position( Players In Slot(Slot Of(Event Player), Team 2)), Position Of( Players In Slot(Slot Of(Event Player), Team 1)) + Players In Slot( Slot Of(Event Player), Team 2).y ) ) + Players In Slot(Slot Of(Event Player), Team 2).g + Arcsine In Degrees( -15.800 * ( Distance Between( Eye Position( Players In Slot(Slot Of(Event Player), Team 2)), Position Of( Players In Slot(Slot Of(Event Player), Team 1)) + Players In Slot( Slot Of(Event Player), Team 2).y ) ) / Players In Slot( Slot Of(Event Player), Team 2).G ^ 2 ) / 2 ), Players In Slot(Slot Of(Event Player), Team 2).i, To Player, Direction and Turn Rate ); End; End; } } rule("K") { event { Subroutine; K; } actions { Players In Slot(Slot Of(Event Player), Team 2).m = False; Wait(2 / 60, Ignore Condition); Players In Slot(Slot Of(Event Player), Team 2).i = Random Real( Players In Slot(Slot Of(Event Player), Team 2).v, Players In Slot( Slot Of(Event Player), Team 2).v * 1.500 ); Stop Facing(Players In Slot(Slot Of(Event Player), Team 2)); Start Facing(Players In Slot(Slot Of(Event Player), Team 2), Direction Towards( Eye Position(Players In Slot(Slot Of(Event Player), Team 2)), Players In Slot(Slot Of(Event Player), Team 2).B), Evaluate Once( Random Real( Players In Slot(Slot Of(Event Player), Team 2).v, Players In Slot(Slot Of(Event Player), Team 2).u)), To World, Direction and Turn Rate); Wait Until( Is In View Angle( Players In Slot(Slot Of(Event Player), Team 2), Players In Slot(Slot Of(Event Player), Team 2).B - Vector( 0, Y Component Of( Eye Position( Players In Slot(Slot Of(Event Player), Team 2))), 0), 12.500), 2); Stop Facing(Players In Slot(Slot Of(Event Player), Team 2)); } } rule("L") { event { Subroutine; L; } actions { Players In Slot(Slot Of(Event Player), Team 2).j = Players In Slot(Slot Of(Event Player), Team 2).k; Players In Slot(Slot Of(Event Player), Team 2).d = Players In Slot(Slot Of(Event Player), Team 2).e; Call Subroutine(M); } } rule("AI Aim Mod Calculation") { event { Subroutine; H; } actions { Stop Chasing Player Variable(Event Player, f); Stop Chasing Player Variable(Event Player, g); If(Array Contains(Global.z, Hero Of(Event Player)) && Is Firing Secondary(Event Player)); If( Horizontal Angle Towards( Event Player, Players In Slot(Slot Of(Event Player), Team 1) ) > 0); Chase Player Variable Over Time( Event Player, f, Random Real(0, (Global.q - Players In Slot( Slot Of(Event Player), Team 1).ay) * 0.250 + 0.250), Random Real(0.100, 0.250), None ); Else; Chase Player Variable Over Time( Event Player, f, Random Real( (Global.q - Players In Slot( Slot Of(Event Player), Team 1).ay) * -0.250 - 0.250, 0), Random Real(0.100, 0.250), None ); End; Event Player.g = Random Real( (Global.q - Players In Slot( Slot Of(Event Player), Team 1).ay) * -0.250 - 0.250, (Global.q - Players In Slot( Slot Of(Event Player), Team 1).ay) * 0.250 + 0.250 ); Else; If( Horizontal Angle Towards( Event Player, Players In Slot(Slot Of(Event Player), Team 1)) > 0); Chase Player Variable Over Time( Event Player, f, Random Real(0, (Global.q - Players In Slot( Slot Of(Event Player), Team 1).ay) * 0.500 + 0.500 ), Random Real(0.100, 0.250), None ); Else; Chase Player Variable Over Time( Event Player, f, Random Real( (Global.q - Players In Slot( Slot Of(Event Player), Team 1).ay) * -0.500 - 0.500, 0 ), Random Real(0.100, 0.250), None ); End; Event Player.g = Random Real( (Global.q - Players In Slot( Slot Of(Event Player), Team 1).ay) * -0.350 - 0.350, (Global.q - Players In Slot( Slot Of(Event Player), Team 1).ay) * 0.350 + 0.350 ); End; } } rule("AI Aim Calculation") { event { Subroutine; G; } actions { Call Subroutine(S); If(Event Player.i == 0); Start Rule(H, Restart Rule); Chase Player Variable Over Time( Event Player, i, Random Real(Event Player.x, Event Player.w) / 1.5, Random Real(0.025, 0.200), None ); Wait(Random Real(0.025, 0.200), Ignore Condition); Stop Chasing Player Variable(Event Player, i); Else If(Event Player.L < 10 && Random Real(0, 1) < 0.900 - Event Player.p); Call Subroutine(ar); Else; Event Player.i = ( Event Player.s * Angle Between Vectors( Facing Direction Of(Event Player), Direction Towards( Eye Position(Event Player), Eye Position(Players In Slot( Slot Of(Event Player), Team 1)) - Vector(0, 0.300, 0) ) ) ) ^ Event Player.t + Random Real(Event Player.x, Event Player.w); End; If(Array Contains(Global.z, Hero Of(Event Player)) && Is Firing Secondary(Event Player)); Event Player.i = Event Player.i / 1.500; End; } } rule("AI Aim Mouse Stop") { event { Subroutine; ar; } actions { If(Global.L == True); Small Message(Event Player, Custom String("aim stop")); End; Event Player.h = Total Time Elapsed + Random Real(0.450, 0.900) - Event Player.p; Stop Chasing Player Variable(Event Player, i); Chase Player Variable At Rate(Event Player, i, 0, Random Integer(360, 720), None); Wait Until(Event Player.i == 0, 0.9); Stop Chasing Player Variable(Event Player, i); } } rule("N") { event { Subroutine; N; } actions { Stop Facing(Players In Slot(Slot Of(Event Player), Team 2)); If(Players In Slot(Slot Of(Event Player), Team 2).d == 0); Start Facing(Players In Slot(Slot Of(Event Player), Team 2), Direction Towards( Eye Position(Event Player), Eye Position(Players In Slot(Slot Of(Event Player), Team 1)) - Vector(0, 0.250, 0)), Evaluate Once( Random Integer( Players In Slot(Slot Of(Event Player), Team 2).u - 180, Players In Slot( Slot Of(Event Player), Team 2).u)), To World, Direction and Turn Rate); Wait Until( Is In View Angle( Players In Slot(Slot Of(Event Player), Team 2), Vector( X Component Of( Eye Position( Players In Slot(Slot Of(Event Player), Team 1)) - Vector(0, 0.250, 0)), Y Component Of( Eye Position(Players In Slot(Slot Of(Event Player),Team 1)) - Vector(0, 0.250, 0)) - Y Component Of( Eye Position( Players In Slot(Slot Of(Event Player), Team 2)) - Vector(0, 0.250, 0)), Z Component Of( Eye Position( Players In Slot(Slot Of(Event Player), Team 1)))), 0.500), 1); Else If(Players In Slot(Slot Of(Event Player), Team 2).d == 1); Start Facing(Players In Slot(Slot Of(Event Player), Team 2), Direction Towards(Eye Position(Event Player), Eye Position(Players In Slot(Slot Of(Event Player), Team 1))), Evaluate Once( Random Integer( Players In Slot(Slot Of(Event Player), Team 2).u - 180, Players In Slot( Slot Of(Event Player), Team 2).u)), To World, Direction and Turn Rate); Wait Until( Is In View Angle(Players In Slot(Slot Of(Event Player), Team 2), Vector( X Component Of( Eye Position( Players In Slot(Slot Of(Event Player), Team 1))), Y Component Of( Eye Position( Players In Slot(Slot Of(Event Player), Team 1))) - Y Component Of( Eye Position( Players In Slot(Slot Of(Event Player), Team 2))), Z Component Of( Eye Position( Players In Slot(Slot Of(Event Player), Team 1)))), 0.500), 1); End; } } rule("O") { event { Subroutine; O; } actions { Stop Facing(Players In Slot(Slot Of(Event Player), Team 2)); Start Facing(Players In Slot(Slot Of(Event Player), Team 2), Direction From Angles( Horizontal Facing Angle Of( Players In Slot(Slot Of(Event Player), Team 2)) - Random Real(0.600, 1), Vertical Facing Angle Of( Players In Slot(Slot Of(Event Player),Team 2)) - Random Real(0.300, 0.700)), Evaluate Once( Random Integer( Players In Slot(Slot Of(Event Player), Team 2).u - 180, Players In Slot(Slot Of(Event Player), Team 2).u)), To World, None); Wait(Random Real(0.100, 0.200), Ignore Condition); Call Subroutine(L); } } rule("AI Enable") { event { Player Took Damage; Team 2; All; } conditions { Event Player.c == False; Players In Slot(Slot Of(Event Player), Team 1).ay >= 3; Players In Slot(Slot Of(Event Player), Team 1).al == False; Event Player.S == True; } actions { Wait(0.250, Ignore Condition); Heal(Event Player, Null, Max Health(Event Player)); Call Subroutine(J); } } rule("AI Aim Calculation Loop") { event { Ongoing - Each Player; Team 2; All; } conditions { Is Alive(Event Player) == True; Event Player.S == True; Event Player.c == True; Event Player.m == True; Players In Slot(Slot Of(Event Player), Team 1).ay >= 3; Total Time Elapsed >= Event Player.h; ( (Slot Of(Event Player) % 2 == 0 && Global.W % 2 == 0) || (Slot Of(Event Player) % 2 != 0 && Global.W % 2 != 0) ) == True; Global.W % 5 == 0; } actions { Event Player.L = Distance Between ( Ray Cast Hit Position ( Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(Event Player) * Distance Between ( Event Player, Players In Slot(Slot Of(Event Player), Team 1) ), All Players(Team 1), Event Player, True ), Eye Position(Players In Slot(Slot Of(Event Player), Team 1)) ); Start Rule(G, Do Nothing); } } rule("AI Aim Stop") { event { Ongoing - Each Player; Team 2; All; } conditions { Is Alive(Event Player) == True; Event Player.S == True; Event Player.c == True; Event Player.m == True; Players In Slot(Slot Of(Event Player), Team 1).ay >= 3; Event Player.L <= 1; } actions { If(Random Real(0, 1) < 0.900 - Event Player.p); Call Subroutine(ar); End; } } rule("AI Aim Flick") { event { Ongoing - Each Player; Team 2; All; } conditions { Is Alive(Event Player) == True; Event Player.S == True; Event Player.c == True; Event Player.m == True; Players In Slot(Slot Of(Event Player), Team 1).ay >= 3; Event Player.L > 3 - Players In Slot(Slot Of(Event Player), Team 1).ay * 0.250; } actions { If(Global.L == True); Small Message(Event Player, Custom String("aim flick")); End; Start Rule(G, Restart Rule); } } rule("AI Attack Melee") { event { Ongoing - Each Player; Team 2; All; } conditions { Event Player.c == True; Event Player.n == True; Is Alive(Event Player) == True; Distance Between (Event Player, Players In Slot(Slot Of(Event Player), Team 1)) < 2.500; Event Player.L <= 2; Health(Players In Slot(Slot Of(Event Player), Team 1)) <= 30; Health(Players In Slot(Slot Of(Event Player), Team 1)) > 0; } actions { Call Subroutine(P); Press Button(Event Player, Button(Melee)); } } rule("AI Aim Start") { event { Ongoing - Each Player; Team 2; All; } conditions { Event Player.c == True; Event Player.z == True; Is Alive(Event Player) == True; Event Player.m == True; } actions { Call Subroutine(M); } } rule("AI Rule Can Aim") { event { Ongoing - Each Player; Team 2; All; } conditions { Event Player.c == True; Event Player.z == True; Is Alive(Event Player) == True; 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.m = True; } } rule("AI Rule Can Attack") { event { Ongoing - Each Player; Team 2; All; } conditions { Event Player.c == True; Is Alive(Event Player) == True; Has Status(Event Player, Knocked Down) == False; Has Status(Event Player, Asleep) == False; Has Status(Event Player, Frozen) == False; Has Status(Event Player, Phased Out) == False; Has Status(Event Player, Stunned) == False; } actions { Event Player.n = True; } } rule("AI Rule Can Use Abilities") { event { Ongoing - Each Player; Team 2; All; } conditions { Event Player.c == True; Is Alive(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, Phased Out) == False; Has Status(Event Player, Stunned) == False; } actions { Event Player.o = True; } } rule("AI Rule Status Hacked") { event { Ongoing - Each Player; Team 2; All; } conditions { Event Player.c == True; Is Alive(Event Player) == True; Has Status(Event Player, Hacked) == True; } actions { Event Player.o = False; } } rule("AI Rule Status Knocked Down") { event { Ongoing - Each Player; Team 2; All; } conditions { Event Player.c == True; Is Alive(Event Player) == True; Has Status(Event Player, Knocked Down) == True; } actions { Event Player.m = False; Event Player.n = False; Event Player.o = False; Stop Facing(Players In Slot(Slot Of(Event Player), Team 2)); } } rule("AI Rule Status Asleep") { event { Ongoing - Each Player; Team 2; All; } conditions { Event Player.c == True; Is Alive(Event Player) == True; Has Status(Event Player, Asleep) == True; } actions { Event Player.m = False; Event Player.n = False; Event Player.o = False; Stop Facing(Players In Slot(Slot Of(Event Player), Team 2)); } } rule("AI Rule Status Frozen") { event { Ongoing - Each Player; Team 2; All; } conditions { Event Player.c == True; Is Alive(Event Player) == True; Has Status(Event Player, Frozen) == True; } actions { Event Player.m = False; Event Player.n = False; Event Player.o = False; Stop Facing(Players In Slot(Slot Of(Event Player), Team 2)); } } rule("AI Rule Status Phased Out") { event { Ongoing - Each Player; Team 2; All; } conditions { Event Player.c == True; Is Alive(Event Player) == True; Has Status(Event Player, Phased Out) == True; } actions { Event Player.o = False; Event Player.n = False; } } rule("AI Rule Status Stunned") { event { Ongoing - Each Player; Team 2; All; } conditions { Event Player.c == True; Is Alive(Event Player) == True; Has Status(Event Player, Stunned) == True; } actions { Event Player.m = False; Event Player.n = False; Event Player.o = False; Stop Facing(Players In Slot(Slot Of(Event Player), Team 2)); } } rule("AI Movement WASD Strafe On Dmg") { event { Player Took Damage; Team 2; All; } conditions { Event Player.c == True; Event Player.Z == True; Event Player.z == True; Is Alive(Event Player) == True; Distance Between (Event Player, Players In Slot(Slot Of(Event Player), Team 1)) > Event Player.E + Event Player.J; Event Damage > 25; } actions { If(Random Real(0, 1) < 0.100 + Event Player.p); Call Subroutine(P); Event Player.ac = Random Value In Array(Global.w); Start Rule(V, Restart Rule); End; } } rule("AI Movement WASD Move Closer") { event { Ongoing - Each Player; Team 2; All; } conditions { Event Player.c == True; Event Player.Z == True; Event Player.z == True; Is Alive(Event Player) == True; Distance Between ( Event Player, Vector ( X Component Of (Position Of(Players In Slot(Slot Of(Event Player), Team 1))), 0, Z Component Of (Position Of(Players In Slot(Slot Of(Event Player), Team 1))) ) ) >= Event Player.E; } actions { If ( Distance Between (Event Player, Players In Slot(Slot Of(Event Player), Team 1)) > Event Player.E + Event Player.J ); Event Player.ac = Random Value In Array ( Remove From Array ( Global.v, Array(Left, Right, Event Player.ac) ) ); Else; Event Player.ac = Random Value In Array ( Remove From Array (Global.v, Event Player.ac) ); End; Call Subroutine(V); Loop If Condition Is True; } } rule("AI Movement WASD Move Farther") { event { Ongoing - Each Player; Team 2; All; } conditions { Event Player.c == True; Event Player.Z == True; Event Player.z == True; Is Alive(Event Player) == True; Distance Between ( Event Player, Vector ( X Component Of (Position Of(Players In Slot(Slot Of(Event Player), Team 1))), 0, Z Component Of (Position Of(Players In Slot(Slot Of(Event Player), Team 1))) ) ) < Event Player.E; } actions { Event Player.ac = Random Value In Array ( Remove From Array (Global.u, Event Player.ac) ); Call Subroutine(V); Loop If Condition Is True; } } rule("AI Optimal Distance Default Resize") { event { Ongoing - Each Player; Team 2; All; } conditions { Event Player.c == True; Is Alive(Event Player) == True; Distance Between ( Event Player, Players In Slot(Slot Of(Event Player), Team 1).bm ) >= Players In Slot(Slot Of(Event Player), Team 1).bf - 2.500; } actions { Event Player.E = Random Real(2.500, 5); Wait(Random Real(1.500, 3), Ignore Condition); Loop If Condition Is True; Event Player.E = Event Player.F; } } rule("AI Movement Crouch") { event { Ongoing - Each Player; Team 2; All; } conditions { Event Player.c == True; Event Player.U == True; Is Alive(Event Player) == True; Is On Ground(Event Player) == True; Event Player.L < 5; } actions { Call Subroutine(T); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Crouch)); } } rule("AI Movement Jump") { event { Ongoing - Each Player; Team 2; All; } conditions { Event Player.c == True; Event Player.X == True; Is Alive(Event Player) == True; Is On Ground(Event Player) == True; } actions { Call Subroutine(U); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Jump)); } } rule("Quick Mode AI Enable") { event { Ongoing - Each Player; Team 2; All; } conditions { Players In Slot(Slot Of(Event Player), Team 1).bu == True; Players In Slot(Slot Of(Event Player), Team 1).ay >= 3; Players In Slot(Slot Of(Event Player), Team 1).al == False; Is Alive(Event Player) == True; Event Player.S == True; } actions { Call Subroutine(J); } } rule("AI Ana") { event { Subroutine; a; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Skip If(Is Button Held(Event Player, Button(Primary Fire)), 1); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); If(Is Button Held(Event Player, Button(Secondary Fire))); Stop Holding Button(Event Player, Button(Secondary Fire)); Call Subroutine(L); Else; Event Player.X = False; Start Holding Button(Event Player, Button(Secondary Fire)); Event Player.j = 0; Event Player.d = 0; Call Subroutine(M); End; Else If(Event Player.a == Button(Ability 1)); Call Subroutine(I); Event Player.j = 1; Event Player.d = 0; Event Player.G = Event Player.H[2]; Call Subroutine(M); Press Button(Event Player, Button(Ability 1)); Wait(0.300, Ignore Condition); Call Subroutine(L); Else If(Event Player.a == Button(Ability 2)); Call Subroutine(I); If(Event Player.b == 0); Event Player.j = 2; Event Player.d = 2; Event Player.G = Event Player.H[3]; Call Subroutine(M); Wait(Random Real(0.300, 0.400), Ignore Condition); Press Button(Event Player, Button(Ability 2)); Wait(0.250, Ignore Condition); Call Subroutine(L); Else If(Event Player.b == 1); Event Player.B = Position Of(Event Player) + World Vector Of(Vector(0, 0, 0.250), Event Player, Rotation); Call Subroutine(K); Press Button(Event Player, Button(Ability 2)); Wait(0.100, Ignore Condition); Event Player.m = True; End; Event Player.j = 1; Else If(Event Player.a == Button(Ultimate)); Press Button(Event Player, Button(Ultimate)); End; Event Player.A = False; } } rule("AI Ana General") { event { Ongoing - Each Player; Team 2; Ana; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(15, 20); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.k = 1; Event Player.H[0] = 125; Event Player.H[2] = 60; Event Player.H[3] = 30; Call Subroutine(L); Event Player.z = True; } } rule("AI Ana Scope In") { event { Ongoing - Each Player; Team 2; Ana; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= Global.b; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) >= 15; Event Player.L < 5; Is Button Held(Event Player, Button(Secondary Fire)) == False; Has Status(Players In Slot(Slot Of(Event Player), Team 1), Asleep) == False; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(a); } } rule("AI Ana Scope Out") { event { Ongoing - Each Player; Team 2; Ana; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) < 15; Is Button Held(Event Player, Button(Secondary Fire)) == True; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(a); } } rule("AI Ana Attack") { event { Ongoing - Each Player; Team 2; Ana; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 50; Event Player.L < 2; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(a); Wait(0.800, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Ana Sleep Dart") { event { Ongoing - Each Player; Team 2; Ana; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) < 15; Event Player.L < 1; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Is Using Ability 1(Event Player) == False; Is Using Ability 2(Event Player) == False; } actions { Event Player.a = Button(Ability 1); Call Subroutine(a); } } rule("AI Ana Sleep Dart Face Enemy Asleep") { event { Ongoing - Each Player; Team 2; Ana; } conditions { Event Player.c == True; Event Player.m == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Has Status(Players In Slot(Slot Of(Event Player), Team 1), Asleep) == True; } actions { Call Subroutine(P); Event Player.j = 1; Event Player.d = 3; Event Player.y = Vector(0, 0.250, 0); Call Subroutine(M); If(Ability Cooldown(Event Player, Button(Ability 2)) <= 4 && Ability Cooldown(Event Player, Button(Ability 2)) > 0); Event Player.n = False; Wait Until(Ability Cooldown(Event Player, Button(Ability 2)) == 0, 4); Event Player.n = True; End; Wait Until(Has Status(Players In Slot(Slot Of(Event Player), Team 1), Asleep) == False, 6); Call Subroutine(L); } } rule("AI Ana Biotic Grenade") { event { Ongoing - Each Player; Team 2; Ana; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 35; Event Player.L < 1.25; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 1(Event Player) == False; Is Using Ability 2(Event Player) == False; Health(Event Player) > 100; Is On Ground(Event Player) == True; Altitude Of(Players In Slot(Slot Of(Event Player), Team 1)) <= 2; } actions { Event Player.a = Button(Ability 2); Event Player.b = 0; Call Subroutine(a); } } rule("AI Ana Biotic Grenade Self") { event { Ongoing - Each Player; Team 2; Ana; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Health(Event Player) <= 100; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 1(Event Player) == False; Is Using Ability 2(Event Player) == False; } actions { Event Player.a = Button(Ability 2); Event Player.b = 1; Call Subroutine(a); } } rule("AI Ana Nano Boost") { event { Ongoing - Each Player; Team 2; Ana; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= Event Player.E; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Ultimate); Call Subroutine(a); } } rule("AI Ashe") { event { Subroutine; b; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); If(Event Player.j != 0 || Event Player.d != 0); Event Player.j = 0; Event Player.d = 0; Call Subroutine(M); End; Press Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); If(Is Button Held(Event Player, Button(Secondary Fire))); Stop Holding Button(Event Player, Button(Secondary Fire)); Else; Start Holding Button(Event Player, Button(Secondary Fire)); Wait(0.250, Ignore Condition); End; Else If(Event Player.a == Button(Reload)); Call Subroutine(I); Press Button(Event Player, Button(Reload)); Wait Until(Ammo(Event Player, 0) == Random Integer(8, Max Ammo(Event Player, 0)), 3.500); Else If(Event Player.a == Button(Ability 1)); Press Button(Event Player, Button(Ability 1)); Wait(0.100, Ignore Condition); Wait Until(Is Using Ability 1(Event Player) == False, 1); Else If(Event Player.a == Button(Ability 2)); Event Player.j = 2; Event Player.d = 2; Event Player.G = Event Player.H[3]; Call Subroutine(M); Wait(Random Real(0.300, 0.400), Ignore Condition); Press Button(Event Player, Button(Ability 2)); Wait(0.250, Ignore Condition); Call Subroutine(L); Else If(Event Player.a == Button(Ultimate)); Press Button(Event Player, Button(Ultimate)); Wait(0.250, Ignore Condition); End; Event Player.A = False; } } rule("AI Ashe General") { event { Ongoing - Each Player; Team 2; Ashe; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(15, 25); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.k = 0; Event Player.H[3] = 25; Call Subroutine(L); Event Player.z = True; } } rule("AI Ashe Attack Scope In") { event { Ongoing - Each Player; Team 2; Ashe; } conditions { Event Player.c == True; Event Player.m == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) >= 7.500; Is Reloading(Event Player) == False; Is Firing Secondary(Event Player) == False; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(b); } } rule("AI Ashe Attack Scope Out") { event { Ongoing - Each Player; Team 2; Ashe; } conditions { Event Player.c == True; Event Player.m == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) < 7.500; Is Firing Secondary(Event Player) == True; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(b); } } rule("AI Ashe Attack Scoped") { event { Ongoing - Each Player; Team 2; Ashe; } conditions { Event Player.c == True; Event Player.m == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 1.25; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 50; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) >= 7.500; Is Reloading(Event Player) == False; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(b); Wait(0.700, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Secondary Fire)); } } rule("AI Ashe Attack Unscoped") { event { Ongoing - Each Player; Team 2; Ashe; } conditions { Event Player.c == True; Event Player.m == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 1.5; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) < 7.500; Is Button Held(Event Player, Button(Secondary Fire)) == False; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(b); Wait(0.250, Ignore Condition); Loop If Condition Is True; } } rule("AI Ashe Reload") { event { Ongoing - Each Player; Team 2; Ashe; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Ammo(Event Player, 0) == 0; } actions { Event Player.a = Button(Reload); Call Subroutine(b); } } rule("AI Ashe Reload After Kill") { event { Player Dealt Final Blow; Team 2; Ashe; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; } actions { Event Player.a = Button(Reload); Call Subroutine(b); } } rule("AI Ashe Coach Gun Defensive") { event { Ongoing - Each Player; Team 2; Ashe; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 9.400; Health(Event Player) <= 125; } actions { Event Player.a = Button(Ability 1); Call Subroutine(b); } } rule("AI Ashe Coach Gun Finishing") { event { Ongoing - Each Player; Team 2; Ashe; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 5; Health(Players In Slot(Slot Of(Event Player), Team 1)) < 90; } actions { Event Player.a = Button(Ability 1); Call Subroutine(b); } } rule("AI Ashe Dynamite") { event { Ongoing - Each Player; Team 2; Ashe; } conditions { Event Player.c == True; Event Player.m == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 30; Event Player.L < 2; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Altitude Of(Players In Slot(Slot Of(Event Player), Team 1)) <= 2; Is Reloading(Event Player) == False; } actions { Event Player.a = Button(Ability 2); Call Subroutine(b); } } rule("AI Ashe B.O.B.") { event { Ongoing - Each Player; Team 2; Ashe; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 10; Event Player.L < 1; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Ultimate); Call Subroutine(b); } } rule("AI Baptiste") { event { Subroutine; c; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Reload)); Press Button(Event Player, Button(Reload)); Wait Until(Ammo(Event Player, 0) == Max Ammo(Event Player, 0), 1.500); Else If(Event Player.a == Button(Ability 1)); Call Subroutine(I); Press Button(Event Player, Button(Ability 1)); Else If(Event Player.a == Button(Ability 2)); Call Subroutine(I); Event Player.B = Position Of(Event Player); Call Subroutine(K); Press Button(Event Player, Button(Ability 2)); Call Subroutine(P); Event Player.m = True; Else If(Event Player.a == Button(Ultimate)); Call Subroutine(I); Press Button(Event Player, Button(Ultimate)); Event Player.B = Position Of(Event Player) + World Vector Of(Vector(0, 0, 5), Event Player, Rotation); Call Subroutine(K); Press Button(Event Player, Button(Primary Fire)); Call Subroutine(P); Event Player.m = True; End; Event Player.A = False; } } rule("AI Baptiste General") { event { Ongoing - Each Player; Team 2; Baptiste; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(14, 18); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.d = Event Player.e; Event Player.j = 0; Event Player.z = True; } } rule("AI Baptiste Attack") { event { Ongoing - Each Player; Team 2; Baptiste; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) < Global.b; Event Player.L < 2; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(c); Wait(0.580, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Baptiste Reload") { event { Ongoing - Each Player; Team 2; Baptiste; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Ammo(Event Player, 0) <= 0; } actions { Event Player.a = Button(Reload); Call Subroutine(c); } } rule("AI Baptiste Regenerative Burst") { event { Ongoing - Each Player; Team 2; Baptiste; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Is Using Ability 1(Event Player) == False; Health(Event Player) <= 100; } actions { Event Player.a = Button(Ability 1); Call Subroutine(c); } } rule("AI Baptiste Immortality Field") { event { Player Took Damage; Team 2; Baptiste; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 2(Event Player) == False; Health(Event Player) <= 75; Altitude Of(Event Player) < 3; } actions { Event Player.a = Button(Ability 2); Call Subroutine(c); } } rule("AI Baptiste Amplification Matrix") { event { Ongoing - Each Player; Team 2; Baptiste; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Is On Ground(Event Player) == True; } actions { Event Player.a = Button(Ultimate); Call Subroutine(c); } } rule("AI Bastion") { event { Subroutine; d; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); Start Holding Button(Event Player, Button(Secondary Fire)); Wait((Max Health(Event Player) - Health(Event Player)) / 75, Ignore Condition); Stop Holding Button(Event Player, Button(Secondary Fire)); Else If(Event Player.a == Button(Ability 1)); Press Button(Event Player, Button(Ability 1)); Else If(Event Player.a == Button(Ability 2)); Else If(Event Player.a == Button(Ultimate)); Event Player.j = 1; Event Player.G = Event Player.H[4]; Press Button(Event Player, Button(Ultimate)); Event Player.d = 2; Wait(0.250, Ignore Condition); End; Event Player.A = False; } } rule("AI Bastion General") { event { Ongoing - Each Player; Team 2; Bastion; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(18, 22); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.d = Event Player.e; Event Player.j = 0; Event Player.H[4] = 60; Event Player.z = True; } } rule("AI Bastion Attack") { event { Ongoing - Each Player; Team 2; Bastion; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 40; Event Player.L < 2; Is Using Ability 1(Event Player) == False; Is Firing Secondary(Event Player) == False; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(d); Wait(0.500, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Bastion Reconfigure") { event { Ongoing - Each Player; Team 2; Bastion; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= Event Player.E; Event Player.L < 3; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Is Using Ability 1(Event Player) == False; Is Moving(Event Player) == True; } actions { If(Random Real(0, 1) < 0.250 + Event Player.p); Event Player.a = Button(Ability 1); Call Subroutine(d); End; } } rule("AI Bastion Self-Repair") { event { Player Took Damage; Team 2; Bastion; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Health(Event Player) <= Max Health(Event Player) / 2; Is Firing Secondary(Event Player) == False; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(d); } } rule("AI Bastion Configuration: Tank") { event { Ongoing - Each Player; Team 2; Bastion; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Health(Event Player) >= 100; } actions { Event Player.a = Button(Ultimate); Call Subroutine(d); Wait Until(Is Using Ultimate(Event Player) == False, 8); Event Player.j = 0; Event Player.d = 0; } } rule("AI Brigitte") { event { Subroutine; e; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); If(Event Player.b == 0); Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Start Holding Button(Event Player, Button(Primary Fire)); Wait(0.200, Ignore Condition); Else If(Event Player.b == 1); Stop Holding Button(Event Player, Button(Primary Fire)); Start Holding Button(Event Player, Button(Secondary Fire)); Wait(Random Real(0.100, 0.150), Ignore Condition); Press Button(Event Player, Button(Primary Fire)); Wait(0.100, Ignore Condition); Stop Holding Button(Event Player, Button(Secondary Fire)); Else If(Event Player.b == 2); Event Player.X = False; Event Player.U = False; Event Player.Z = False; Start Throttle In Direction(Event Player, Forward, 1, To Player, Replace existing throttle, Direction and Magnitude); Start Holding Button(Event Player, Button(Secondary Fire)); Wait(Random Real(0.150, 0.250), Ignore Condition); Press Button(Event Player, Button(Primary Fire)); Wait(0.150, Ignore Condition); Start Holding Button(Event Player, Button(Jump)); Wait(0.500, Ignore Condition); Stop Holding Button(Event Player, Button(Secondary Fire)); Stop Holding Button(Event Player, Button(Jump)); Stop Throttle In Direction(Event Player); Event Player.Z = True; Event Player.X = True; Event Player.U = True; End; Else If(Event Player.a == Button(Secondary Fire)); Stop Holding Button(Event Player, Button(Primary Fire)); Skip If(Is Button Held(Event Player, Button(Secondary Fire)), 1); Start Holding Button(Event Player, Button(Secondary Fire)); Wait(Random Real(0.500, 2), Ignore Condition); Stop Holding Button(Event Player, Button(Secondary Fire)); Else If(Event Player.a == Button(Ability 1)); Call Subroutine(I); Event Player.j = 1; Wait(Random Real(0.100, 0.200), Ignore Condition); Press Button(Event Player, Button(Ability 1)); Wait(Random Real(0.100, 0.200), Ignore Condition); Event Player.j = 0; Else If(Event Player.a == Button(Ability 2)); Else If(Event Player.a == Button(Ultimate)); Press Button(Event Player, Button(Ultimate)); End; Event Player.A = False; } } rule("AI Brigitte General") { event { Ongoing - Each Player; Team 2; Brigitte; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(3, 6); Event Player.E = Event Player.F; Event Player.J = 0; Event Player.e = 0; Event Player.d = Event Player.e; Event Player.j = 0; Event Player.H[2] = 80; Event Player.z = True; } } rule("AI Brigitte Attack") { event { Ongoing - Each Player; Team 2; Brigitte; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 8; Event Player.L < 1.5; Is Firing Secondary(Event Player) == False; } actions { Event Player.a = Button(Primary Fire); Event Player.b = 0; Call Subroutine(e); Wait(0.600, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Brigitte Use Shield") { event { Ongoing - Each Player; Team 2; Brigitte; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 5; ( Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) > 6 || Health(Event Player) <= 100 ) == True; Distance Between( Players In Slot(Slot Of(Event Player), Team 1), Players In Slot(Slot Of(Event Player), Team 1).bm ) < Global.b; } actions { If(Random Real(0, 1) < 0.300 + Event Player.p); Event Player.a = Button(Secondary Fire); Call Subroutine(e); End; Wait(0.500, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Secondary Fire)); } } rule("AI Brigitte Shield Bash") { event { Player Dealt Damage; Team 2; Brigitte; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 1; Altitude Of(Players In Slot(Slot Of(Event Player), Team 1)) < 2; Altitude Of(Event Player) < 2; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 6.850; Ability Cooldown(Event Player, Button(Primary Fire)) == 0; } actions { If(Random Real(0, 1) < 0.400 + Event Player.p); Event Player.a = Button(Primary Fire); Event Player.b = 1; Call Subroutine(e); End; } } rule("AI Brigitte Shield Bash Gap Closer") { event { Ongoing - Each Player; Team 2; Brigitte; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) >= 12.500; Distance Between(Players In Slot(Slot Of(Event Player), Team 1), Players In Slot(Slot Of(Event Player), Team 1).bm) < Global.b; Ability Cooldown(Event Player, Button(Primary Fire)) == 0; } actions { Event Player.a = Button(Primary Fire); Event Player.b = 2; Call Subroutine(e); } } rule("AI Brigitte Whip Shot Final") { event { Ongoing - Each Player; Team 2; Brigitte; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 1; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 20; Health(Players In Slot(Slot Of(Event Player), Team 1)) <= 70; Ability Cooldown(Event Player, Button(Ability 1)) == 0; } actions { Event Player.a = Button(Ability 1); Call Subroutine(e); } } rule("AI Brigitte Whip Shot Boop") { event { Ongoing - Each Player; Team 2; Brigitte; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 1; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 10; Health(Players In Slot(Slot Of(Event Player), Team 1)) > 100; Health(Event Player) < 100; Ability Cooldown(Event Player, Button(Ability 1)) == 0; } actions { Event Player.a = Button(Ability 1); Call Subroutine(e); } } rule("AI Brigitte Rally") { event { Ongoing - Each Player; Team 2; Brigitte; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 3; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 15; Health(Event Player) >= 50; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Ultimate); Call Subroutine(e); } } rule("AI Cassidy") { event { Subroutine; m; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Skip If(Is Button Held(Event Player, Button(Primary Fire)), 1); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); Event Player.d = 2; Call Subroutine(P); Press Button(Event Player, Button(Secondary Fire)); Call Subroutine(P); Call Subroutine(L); Else If(Event Player.a == Button(Ability 1)); Press Button(Event Player, Button(Ability 1)); Else If(Event Player.a == Button(Ability 2)); Press Button(Event Player, Button(Ability 2)); Else If(Event Player.a == Button(Ultimate)); Call Subroutine(I); Press Button(Event Player, Button(Ultimate)); Wait Until(Event Player.C >= Health(Players In Slot(Slot Of(Event Player), Team 1)), 5); Call Subroutine(P); Stop Chasing Player Variable(Event Player, C); Start Holding Button(Event Player, Button(Primary Fire)); End; Event Player.A = False; } } rule("AI Cassidy General") { event { Ongoing - Each Player; Team 2; Cassidy; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(13, 16); Event Player.E = Event Player.F; Event Player.k = 0; Event Player.e = 0; Call Subroutine(L); Event Player.z = True; } } rule("AI Cassidy Attack Primary") { event { Ongoing - Each Player; Team 2; Cassidy; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 1.25; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 45; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(m); Wait(0.500, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Cassidy Attack Secondary") { event { Ongoing - Each Player; Team 2; Cassidy; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 1; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 7.500; (Has Status(Players In Slot(Slot Of(Event Player), Team 1), Stunned) == True || Health(Players In Slot(Slot Of(Event Player), Team 1)) <= 75) == True; Is Using Ultimate(Event Player) == False; Ammo(Event Player, 0) >= 3; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(m); } } rule("AI Cassidy Combat Roll") { event { Ongoing - Each Player; Team 2; Cassidy; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is In View Angle(Players In Slot(Slot Of(Event Player), Team 1), Eye Position(Event Player) - Vector(0, 0.250 + Y Component Of( Eye Position(Players In Slot(Slot Of(Event Player), Team 1))), 0), 15) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 8; Ability Cooldown(Event Player, Button(Ability 1)) == 0; } actions { If(Random Real(0, 1) < 0.350 + Event Player.p); Event Player.a = Button(Ability 1); Call Subroutine(m); End; } } rule("AI Cassidy Flashbang") { event { Ongoing - Each Player; Team 2; Cassidy; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 1.35; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 10; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Ammo(Event Player, 0) > 0; } actions { If(Random Real(0, 1) < 0.450 + Event Player.p); Event Player.a = Button(Ability 2); Call Subroutine(m); End; } } rule("AI Cassidy Deadeye Start") { event { Ongoing - Each Player; Team 2; Cassidy; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Event Player.L < 5; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 200; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) >= 10; Health(Players In Slot(Slot Of(Event Player), Team 1)) >= 125; } actions { Event Player.a = Button(Ultimate); Call Subroutine(m); } } rule("AI Cassidy Deadeye Charge") { event { Ongoing - Each Player; Team 2; Cassidy; } conditions { Event Player.c == True; Is Using Ultimate(Event Player) == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; } actions { Event Player.C = 0; Event Player.D = 100; Wait(0.200, Ignore Condition); Chase Player Variable At Rate(Event Player, C, 2802.500, Event Player.D, Destination and Rate); Wait(0.800, Ignore Condition); Event Player.D = 275; Wait(0.500, Ignore Condition); Event Player.D = 550; Wait Until(Is Using Ultimate(Event Player) == False, 4.600); Event Player.C = 0; } } rule("AI Doomfist") { event { Subroutine; f; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Secondary Fire)); If(Event Player.b == 0); Start Holding Button(Event Player, Button(Secondary Fire)); Event Player.X = False; Wait(Random Real(0.900, 1.800), Ignore Condition); Stop Holding Button(Event Player, Button(Secondary Fire)); Else If(Event Player.b == 1); Start Holding Button(Event Player, Button(Secondary Fire)); Wait(Random Real(0.750, 1.500), Ignore Condition); Stop Holding Button(Event Player, Button(Secondary Fire)); Wait(Random Real(0.100, 0.250), Ignore Condition); Press Button(Event Player, Button(Jump)); End; Else If(Event Player.a == Button(Ability 1)); Press Button(Event Player, Button(Ability 1)); Else If(Event Player.a == Button(Ability 2)); Press Button(Event Player, Button(Jump)); Event Player.j = 0; Event Player.d = 3; Event Player.y = Vector(0, -2, 0); Call Subroutine(M); Wait(Random Real(0.150, 0.350), Ignore Condition); Press Button(Event Player, Button(Ability 2)); Call Subroutine(P); Call Subroutine(L); Else If(Event Player.a == Button(Ultimate)); Press Button(Event Player, Button(Ultimate)); Event Player.d = 2; Call Subroutine(M); Event Player.E = 0; While(Is Using Ultimate(Event Player)); Wait(10 / 60, Ignore Condition); If(Distance Between(Vector(X Component Of(Position Of(Event Player)), 0, Z Component Of(Position Of(Event Player))), Vector( X Component Of(Position Of(Players In Slot(Slot Of(Event Player), Team 1))), 0, Z Component Of(Position Of(Players In Slot( Slot Of(Event Player), Team 1))))) <= 2); Press Button(Event Player, Button(Primary Fire)); End; End; Event Player.E = Event Player.F; Call Subroutine(L); End; Event Player.A = False; } } rule("AI Doomfist General") { event { Ongoing - Each Player; Team 2; Doomfist; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(3, 6); Event Player.E = Event Player.F; Event Player.J = 3; Event Player.k = 1; Event Player.e = 0; Event Player.G = 80; Event Player.z = True; } } rule("AI Doomfist Attack") { event { Ongoing - Each Player; Team 2; Doomfist; } conditions { Event Player.c == True; Event Player.n == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 15; Event Player.L < 2.5; Is Firing Secondary(Event Player) == False; Ammo(Event Player, 0) > 0; Is Using Ultimate(Event Player) == False; } actions { Skip If(Is Button Held(Event Player, Button(Primary Fire)), 1); Start Holding Button(Event Player, Button(Primary Fire)); Wait(0.333, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Doomfist Rocket Punch") { event { Ongoing - Each Player; Team 2; Doomfist; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Health(Players In Slot(Slot Of(Event Player), Team 1)) >= 50; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 12.500; Event Player.L < 2; Ability Cooldown(Event Player, Button(Secondary Fire)) == 0; (Ability Cooldown(Event Player, Button(Ability 1)) == 0 ? Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) > 5 : True) == True; } actions { Event Player.a = Button(Secondary Fire); Event Player.b = 0; Call Subroutine(f); Wait Until(Speed Of(Event Player) < 45, 2); Event Player.X = True; } } rule("AI Doomfist Rocket Punch Gap Closer") { event { Ongoing - Each Player; Team 2; Doomfist; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) >= Event Player.E * 3.500; Distance Between(Players In Slot(Slot Of(Event Player), Team 1), Players In Slot(Slot Of(Event Player), Team 1).bm) < Global.b; Ability Cooldown(Event Player, Button(Secondary Fire)) == 0; } actions { Event Player.a = Button(Secondary Fire); Event Player.b = 1; Call Subroutine(f); } } rule("AI Doomfist Uppercut") { event { Ongoing - Each Player; Team 2; Doomfist; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 5; Event Player.L < 1.5; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Is Button Held(Event Player, Button(Secondary Fire)) == False; } actions { Event Player.a = Button(Ability 1); Call Subroutine(f); } } rule("AI Doomfist Seismic Slam") { event { Ongoing - Each Player; Team 2; Doomfist; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is On Ground(Players In Slot(Slot Of(Event Player), Team 1)) == True; (Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) >= 9 || Is In Air(Event Player)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 15; Event Player.L < 2; Is Button Held(Event Player, Button(Secondary Fire)) == False; Ability Cooldown(Event Player, Button(Ability 2)) == 0; } actions { Event Player.a = Button(Ability 2); Call Subroutine(f); } } rule("AI Doomfist Meteor Strike") { event { Ongoing - Each Player; Team 2; Doomfist; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 20; Event Player.L < 5; Health(Players In Slot(Slot Of(Event Player), Team 1)) > 100; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) > 1.500; Is Button Held(Event Player, Button(Secondary Fire)) == False; } actions { Event Player.a = Button(Ultimate); Call Subroutine(f); } } rule("AI D.Va") { event { Subroutine; g; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Secondary Fire)); Call Subroutine(I); Start Holding Button(Event Player, Button(Secondary Fire)); Wait Until(Is Firing Secondary(Event Player), 0.100); Wait Until(Is Firing Secondary(Event Player) == False, Random Real(0.500, 1.250)); Stop Holding Button(Event Player, Button(Secondary Fire)); Else If(Event Player.a == Button(Ability 2)); Event Player.j = 1; Event Player.G = Event Player.H[3]; Press Button(Event Player, Button(Ability 2)); Wait Until(Is Using Ability 2(Event Player), 0.100); Wait Until(Is Using Ability 2(Event Player) == False, 2); Event Player.j = 0; Call Subroutine(L); Else If(Event Player.a == Button(Ultimate)); Call Subroutine(I); If(Event Player.b == 0); If(Ability Cooldown(Event Player, Button(Ability 1)) == 0); Event Player.j = 2; Event Player.d = 2; Event Player.G = Event Player.H[4]; Call Subroutine(M); Call Subroutine(P); Press Button(Event Player, Button(Ability 1)); Call Subroutine(P); Press Button(Event Player, Button(Ultimate)); Call Subroutine(P); Call Subroutine(L); Else; Press Button(Event Player, Button(Ultimate)); End; Wait Until(Is In Alternate Form(Event Player), 1.500); Else If(Event Player.b == 1); Wait(3, Ignore Condition); Press Button(Event Player, Button(Ultimate)); End; End; Event Player.A = False; } } rule("AI D.Va General") { event { Ongoing - Each Player; Team 2; D.Va; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(4, 8); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.d = Event Player.e; Event Player.j = 0; Event Player.H[0] = 50; Event Player.H[3] = 40; Event Player.H[4] = 12; Event Player.z = True; } } rule("AI D.Va Attack") { event { Ongoing - Each Player; Team 2; D.Va; } conditions { Event Player.c == True; Event Player.n == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 30; Event Player.L < 3.5; Is Firing Secondary(Event Player) == False; } actions { Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); Wait(0.250, Abort When False); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI D.Va Defense Matrix") { event { Player Took Damage; Team 2; D.Va; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is In Alternate Form(Event Player) == False; Array Contains(Global.x, Hero Of(Attacker)) == True; Event Player.L < 8; Ability Cooldown(Event Player, Button(Secondary Fire)) == 0; Is Firing Secondary(Event Player) == False; Ability Resource(Event Player, Button(Secondary Fire)) > 0; } actions { If(Random Real(0, 1) < 0.400 + Event Player.p); Event Player.a = Button(Secondary Fire); Call Subroutine(g); End; } } rule("AI D.Va Boosters") { event { Ongoing - Each Player; Team 2; D.Va; } conditions { Event Player.c == True; Event Player.o == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is In Alternate Form(Event Player) == False; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) > 10; Distance Between(Players In Slot(Slot Of(Event Player), Team 1), Players In Slot(Slot Of(Event Player), Team 1).bm) < Global.b; Event Player.L < 10; Ultimate Charge Percent(Event Player) <= 95; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Is Using Ability 1(Event Player) == False; } actions { Press Button(Event Player, Button(Ability 1)); Wait Until(Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 5, 2); Call Subroutine(P); Press Button(Event Player, Button(Ability 1)); } } rule("AI D.Va Micro Missiles") { event { Ongoing - Each Player; Team 2; D.Va; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is In Alternate Form(Event Player) == False; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 10; Event Player.L < 2; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 2(Event Player) == False; } actions { Event Player.a = Button(Ability 2); Call Subroutine(g); } } rule("AI D.Va Self-Destruct") { event { Ongoing - Each Player; Team 2; D.Va; } conditions { Event Player.c == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is In Alternate Form(Event Player) == False; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 20; } actions { Event Player.a = Button(Ultimate); Event Player.b = 0; Call Subroutine(g); } } rule("AI D.Va Call Mech") { event { Ongoing - Each Player; Team 2; D.Va; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Is In Alternate Form(Event Player) == True; } actions { Event Player.a = Button(Ultimate); Event Player.b = 1; Call Subroutine(g); } } rule("AI Echo") { event { Subroutine; h; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); If(Event Player.j != 1 || Event Player.d != 0); Event Player.j = 1; Event Player.d = 0; Call Subroutine(M); End; Event Player.G = Event Player.H[0]; Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); Call Subroutine(I); If(Event Player.j != 1 || Event Player.d != 3); Event Player.j = 1; Event Player.d = 3; Event Player.y = Vector(0, 0.350, 0); Call Subroutine(M); End; Event Player.G = Event Player.H[1]; Press Button(Event Player, Button(Secondary Fire)); Wait(1, Ignore Condition); Else If(Event Player.a == Button(Ability 1)); Press Button(Event Player, Button(Ability 1)); Else If(Event Player.a == Button(Ability 2)); If(Event Player.j != 0 || Event Player.d != 0); Event Player.j = 0; Event Player.d = 0; Call Subroutine(M); End; Press Button(Event Player, Button(Ability 2)); Wait Until(Is Using Ability 2(Event Player), 0.250); Wait Until(Is Using Ability 2(Event Player) == False, 2.500); Else If(Event Player.a == Button(Ultimate)); Press Button(Event Player, Button(Ultimate)); Wait Until(Is Using Ultimate(Event Player), 0.250); End; Event Player.A = False; } } rule("AI Echo General") { event { Ongoing - Each Player; Team 2; Echo; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(9, 13); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.k = 1; Event Player.H[0] = 75; Event Player.H[1] = 50; Call Subroutine(L); Event Player.z = True; } } rule("AI Echo Glide") { event { Ongoing - Each Player; Team 2; Echo; } conditions { Event Player.c == True; Event Player.o == True; Is Alive(Event Player) == True; Is In Air(Event Player) == True; } actions { Start Holding Button(Event Player, Button(Jump)); Wait Until(Is In Air(Event Player) == False, 30); Stop Holding Button(Event Player, Button(Jump)); } } rule("AI Echo Attack") { event { Ongoing - Each Player; Team 2; Echo; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 35; Event Player.L < 3.25; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(h); Wait(0.330, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Echo Flight") { event { Ongoing - Each Player; Team 2; Echo; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Is Using Ability 1(Event Player) == False; } actions { Event Player.a = Button(Ability 1); Call Subroutine(h); } } rule("AI Echo Focusing Beam") { event { Ongoing - Each Player; Team 2; Echo; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Health(Players In Slot(Slot Of(Event Player), Team 1)) <= Max Health(Players In Slot(Slot Of(Event Player), Team 1)) / 2; Health(Players In Slot(Slot Of(Event Player), Team 1)) >= Max Health(Players In Slot(Slot Of(Event Player), Team 1)) / 4; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 16; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 2(Event Player) == False; } actions { Event Player.a = Button(Ability 2); Call Subroutine(h); } } rule("AI Echo Sticky Bombs") { event { Ongoing - Each Player; Team 2; Echo; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Health(Players In Slot(Slot Of(Event Player), Team 1)) >= Max Health(Players In Slot(Slot Of(Event Player), Team 1)) / 2; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 20; Ability Cooldown(Event Player, Button(Secondary Fire)) == 0; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(h); } } disabled rule("AI Echo Duplicate") { event { Ongoing - Each Player; Team 2; Echo; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 20; Event Player.L < 0.75; } actions { Event Player.a = Button(Ultimate); Call Subroutine(h); } } rule("AI Genji") { event { Subroutine; i; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); If(Is Using Ultimate(Event Player)); Skip If(Event Player.j == 0 && Event Player.d == 0, 3); Event Player.j = 0; Event Player.d = 0; Call Subroutine(M); Else; Skip If(Event Player.j == 1 && Event Player.d == 0, 3); Event Player.j = 1; Event Player.d = 0; Call Subroutine(M); End; Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); If(Event Player.j != 1 || Event Player.d != 0); Event Player.j = 1; Event Player.d = 0; Call Subroutine(M); End; Skip If(Is Button Held(Event Player, Button(Secondary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Secondary Fire)); Else If(Event Player.a == Button(Ability 1)); If(Event Player.b == 0); Press Button(Event Player, Button(Ability 1)); Else If(Event Player.b == 1); Event Player.d = 3; Event Player.y = Vector(0, 0.500, 0); Call Subroutine(M); Wait(Random Real(0.100, 0.200), Ignore Condition); Press Button(Event Player, Button(Ability 1)); Wait(0.100, Ignore Condition); Call Subroutine(L); End; Else If(Event Player.a == Button(Ability 2)); Press Button(Event Player, Button(Ability 2)); Wait(Random Real(1.5, 2), Ignore Condition); Else If(Event Player.a == Button(Ultimate)); If(Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 15 && Ability Cooldown(Event Player, Button( Ability 1)) != 0); Press Button(Event Player, Button(Ultimate)); Else; Event Player.B = Vector(X Component Of(Position Of(Players In Slot(Slot Of(Event Player), Team 1))), Random Real(5, 15), Z Component Of(Position Of(Players In Slot(Slot Of(Event Player), Team 1)))); Call Subroutine(K); Press Button(Event Player, Button(Ability 1)); Wait Until(Is Using Ability 1(Event Player) == False, 0.300); Event Player.m = True; Press Button(Event Player, Button(Ultimate)); End; Wait Until(Is Using Ultimate(Event Player) == True, 1); Event Player.J = 0; Event Player.E = Random Real(1.5, 3); Event Player.j = 0; Event Player.d = 0; Call Subroutine(M); End; Event Player.A = False; } } rule("AI Genji General") { event { Ongoing - Each Player; Team 2; Genji; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(5, 10); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.k = 1; Event Player.G = 60; Call Subroutine(L); Event Player.z = True; } } rule("AI Genji Attack Primary") { event { Ongoing - Each Player; Team 2; Genji; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 35; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) >= 10; Event Player.L < 4; Is Using Ability 1(Event Player) == False; Is Using Ability 2(Event Player) == False; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(i); Wait(0.950, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Genji Attack Secondary") { event { Ongoing - Each Player; Team 2; Genji; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) < 10; Event Player.L < 2; Is Using Ability 1(Event Player) == False; Is Using Ability 2(Event Player) == False; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(i); Wait(0.750, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Secondary Fire)); } } rule("AI Genji Swift Strike Movement") { event { Ongoing - Each Player; Team 2; Genji; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) < 15; Event Player.L < 1.5; Is Using Ability 2(Event Player) == False; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Is Using Ultimate(Event Player) == False; } actions { If(Random Real(0, 1) < 0.750 - Event Player.p); Event Player.a = Button(Ability 1); Event Player.b = 0; Call Subroutine(i); End; } } rule("AI Genji Swift Strike Final") { event { Ongoing - Each Player; Team 2; Genji; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 12.500; Event Player.L < 1.5; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Health(Players In Slot(Slot Of(Event Player), Team 1)) <= 50; Health(Players In Slot(Slot Of(Event Player), Team 1)) > 0; } actions { Event Player.a = Button(Ability 1); Event Player.b = 0; Call Subroutine(i); } } rule("AI Genji Deflect") { event { Ongoing - Each Player; Team 2; Genji; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 4; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 2(Event Player) == False; Array Contains(Global.x, Hero Of(Players In Slot(Slot Of(Event Player), Team 1))) == True; Is Button Held(Players In Slot(Slot Of(Event Player), Team 1), Button(Primary Fire)) == True; } actions { If(Random Real(0, 1) < 0.350 + Event Player.p); Event Player.a = Button(Ability 2); Call Subroutine(i); End; } } rule("AI Genji Deflect Deadeye") { event { Ongoing - Each Player; Team 2; Genji; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 5; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Hero Of(Players In Slot(Slot Of(Event Player), Team 1)) == Hero(Cassidy); Is Using Ultimate(Players In Slot(Slot Of(Event Player), Team 1)) == True; } actions { Event Player.a = Button(Ability 2); Call Subroutine(i); } } rule("AI Genji Dragonblde") { event { Ongoing - Each Player; Team 2; Genji; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 30; Event Player.L < 5; Is Using Ability 2(Event Player) == False; Health(Players In Slot(Slot Of(Event Player), Team 1)) >= 50; Health(Event Player) >= 75; } actions { Event Player.a = Button(Ultimate); Call Subroutine(i); Wait Until(Is Using Ultimate(Event Player) == False, 8); Event Player.E = Event Player.F; Event Player.J = Event Player.E + 5; } } rule("AI Genji Dragonblde Swift Strike Gap Closer") { event { Ongoing - Each Player; Team 2; Genji; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is Using Ultimate(Event Player) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) > 4.500; Distance Between(Players In Slot(Slot Of(Event Player), Team 1), Players In Slot(Slot Of(Event Player), Team 1).bm) < Global.b; Event Player.L < 1.5; Ability Cooldown(Event Player, Button(Ability 1)) == 0; } actions { Event Player.a = Button(Ability 1); Event Player.b = 1; Call Subroutine(i); } } rule("AI Genji Dragonblde Swing") { event { Ongoing - Each Player; Team 2; Genji; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 8; Event Player.L < 2; Is Using Ability 2(Event Player) == False; Is Using Ultimate(Event Player) == True; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(i); Wait(0.900, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Genji Double Jump") { event { Ongoing - Each Player; Team 2; Genji; } conditions { Event Player.c == True; Is Alive(Event Player) == True; Is In Air(Event Player) == True; } actions { If(Random Real(0, 1) < 0.375 + Event Player.p); Wait(Random Real(0.150, 0.250), Ignore Condition); Press Button(Event Player, Button(Jump)); End; } } rule("AI Hanzo") { event { Subroutine; j; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); If(Is Using Ability 2(Event Player)); Press Button(Event Player, Button(Primary Fire)); Else If(Is Button Held(Event Player, Button(Primary Fire))); Stop Holding Button(Event Player, Button(Primary Fire)); Else; Start Holding Button(Event Player, Button(Primary Fire)); Event Player.K = Total Time Elapsed; End; Else If(Event Player.a == Button(Secondary Fire)); Else If(Event Player.a == Button(Ability 1)); Press Button(Event Player, Button(Ability 1)); Else If(Event Player.a == Button(Ability 2)); Press Button(Event Player, Button(Ability 2)); Else If(Event Player.a == Button(Ultimate)); Press Button(Event Player, Button(Ultimate)); Wait(0.900, Ignore Condition); End; Event Player.A = False; } } rule("AI Hanzo General") { event { Ongoing - Each Player; Team 2; Hanzo; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(15, 20); Event Player.E = Event Player.F; Event Player.e = 1; Event Player.k = 2; Event Player.G = 110; Call Subroutine(L); Event Player.z = True; } } rule("AI Hanzo Lunge") { event { Ongoing - Each Player; Team 2; Hanzo; } conditions { Event Player.c == True; Event Player.o == True; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 30; Is In Air(Event Player) == True; } actions { If(Random Real(0, 1) < 0.250 + Event Player.p); Wait(Random Real(0.150, 0.250), Ignore Condition); Press Button(Event Player, Button(Jump)); End; } } rule("AI Hanzo Attack Charge") { event { Ongoing - Each Player; Team 2; Hanzo; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Event Player.z == True; Is Using Ability 2(Event Player) == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 50; Is Button Held(Event Player, Button(Primary Fire)) == False; Event Player.L < 4; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(j); } } rule("AI Hanzo Attack") { event { Ongoing - Each Player; Team 2; Hanzo; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Event Player.z == True; Is Using Ability 2(Event Player) == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 2; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 50; Is Button Held(Event Player, Button(Primary Fire)) == True; Total Time Elapsed >= Event Player.K + 1.250; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(j); } } rule("AI Hanzo Sonic Arrow") { event { Ongoing - Each Player; Team 2; Hanzo; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 25; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Is Using Ability 1(Event Player) == False; Is Using Ability 2(Event Player) == False; } actions { Event Player.a = Button(Ability 1); Call Subroutine(j); } } rule("AI Hanzo Storm Arrows Start") { event { Ongoing - Each Player; Team 2; Hanzo; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 15; Health(Players In Slot(Slot Of(Event Player), Team 1)) >= 100; Event Player.L < 4; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 2(Event Player) == False; } actions { Event Player.a = Button(Ability 2); Call Subroutine(j); } } rule("AI Hanzo Storm Arrows Fire") { event { Ongoing - Each Player; Team 2; Hanzo; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 2; Is Using Ability 2(Event Player) == True; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(j); Wait(0.333, Ignore Condition); Loop If Condition Is True; } } rule("AI Hanzo Dragonstrike") { event { Ongoing - Each Player; Team 2; Hanzo; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Using Ability 2(Event Player) == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 3; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 30; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) >= 10; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Ultimate); Call Subroutine(j); } } rule("AI Junkrat") { event { Subroutine; k; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Skip If(Is Button Held(Event Player, Button(Primary Fire)), 1); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Ability 1)); Press Button(Event Player, Button(Ability 1)); Wait(Random Real(0.450, 0.650), Ignore Condition); Press Button(Event Player, Button(Secondary Fire)); Else If(Event Player.a == Button(Ability 2)); Event Player.B = Position Of(Event Player) + World Vector Of(Vector(Random Real(-5, 5), 0, Random Real(0, 2)), Event Player, Rotation); Call Subroutine(K); Press Button(Event Player, Button(Ability 2)); Call Subroutine(P); Event Player.m = True; Else If(Event Player.a == Button(Ultimate)); Call Subroutine(I); Press Button(Event Player, Button(Ultimate)); Wait(1, Ignore Condition); If(Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 10); Press Button(Event Player, Button(Primary Fire)); Else; Wait(Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) / 12, Ignore Condition); Press Button(Event Player, Button(Primary Fire)); End; End; Event Player.A = False; } } rule("AI Junkrat General") { event { Ongoing - Each Player; Team 2; Junkrat; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(9, 12); Event Player.E = Event Player.F; Event Player.e = 2; Event Player.k = 2; Event Player.G = 25; Call Subroutine(L); Event Player.z = True; } } rule("AI Junkrat Attack") { event { Ongoing - Each Player; Team 2; Junkrat; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 50; Event Player.L < 3.5; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(k); Wait(0.670, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Junkrat Concussion Mine") { event { Ongoing - Each Player; Team 2; Junkrat; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 10; Event Player.L < 3.5; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Ability Charge(Event Player, Button(Ability 1)) > 0; } actions { Event Player.a = Button(Ability 1); Call Subroutine(k); } } rule("AI Junkrat Steel Trap") { event { Ongoing - Each Player; Team 2; Junkrat; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 8; Event Player.L < 5; Ability Cooldown(Event Player, Button(Ability 2)) == 0; } actions { Event Player.a = Button(Ability 2); Call Subroutine(k); } } rule("AI Junkrat Riptire") { event { Ongoing - Each Player; Team 2; Junkrat; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) >= 10; Distance Between(Players In Slot(Slot Of(Event Player), Team 1), Players In Slot(Slot Of(Event Player), Team 1).bm) < Global.b; Health(Players In Slot(Slot Of(Event Player), Team 1)) >= 100; } actions { Event Player.a = Button(Ultimate); Call Subroutine(k); } } rule("AI Lucio") { event { Subroutine; l; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); Press Button(Event Player, Button(Secondary Fire)); Else If(Event Player.a == Button(Ability 1)); Press Button(Event Player, Button(Ability 1)); Else If(Event Player.a == Button(Ability 2)); Press Button(Event Player, Button(Ability 2)); Else If(Event Player.a == Button(Ultimate)); Press Button(Event Player, Button(Ultimate)); Wait(0.750, Ignore Condition); End; Event Player.A = False; } } rule("AI Lucio General") { event { Ongoing - Each Player; Team 2; Lúcio; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(5, 7.500); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.d = Event Player.e; Event Player.j = 1; Event Player.G = 50; Event Player.z = True; } } rule("AI Lucio Attack") { event { Ongoing - Each Player; Team 2; Lúcio; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 30; Event Player.L < 3; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(l); Wait(0.935, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Lucio Crossfade Heal Self") { event { Ongoing - Each Player; Team 2; Lúcio; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Health(Event Player) <= 100; Is In Alternate Form(Event Player) == True; } actions { Event Player.a = Button(Ability 1); Call Subroutine(l); } } rule("AI Lucio Crossfade Speed Self") { event { Ongoing - Each Player; Team 2; Lúcio; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Health(Event Player) > 100; Is In Alternate Form(Event Player) == False; } actions { Event Player.a = Button(Ability 1); Call Subroutine(l); } } rule("AI Lucio Amp It Up") { event { Ongoing - Each Player; Team 2; Lúcio; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; (Health(Event Player) <= 75 || Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) > 15) == True; Distance Between(Players In Slot(Slot Of(Event Player), Team 1), Players In Slot(Slot Of(Event Player), Team 1).bm) < Global.b; Ability Cooldown(Event Player, Button(Ability 2)) == 0; } actions { Event Player.a = Button(Ability 2); Call Subroutine(l); } } rule("AI Lucio Soundwave Boop") { event { Ongoing - Each Player; Team 2; Lúcio; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Health(Event Player) <= 100; Event Player.L < 1.5; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 8; Ability Cooldown(Event Player, Button(Secondary Fire)) == 0; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(l); } } rule("AI Lucio Soundwave Final") { event { Ongoing - Each Player; Team 2; Lúcio; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Health(Players In Slot(Slot Of(Event Player), Team 1)) <= 25; Event Player.L < 1.5; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 8; Ability Cooldown(Event Player, Button(Secondary Fire)) == 0; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(l); } } rule("AI Lucio Sound Barrier") { event { Ongoing - Each Player; Team 2; Lúcio; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; (Is Using Ultimate(Players In Slot(Slot Of(Event Player), Team 1)) || Health(Event Player) <= 75) == True; } actions { Event Player.a = Button(Ultimate); Call Subroutine(l); } } rule("AI Mei") { event { Subroutine; n; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Event Player.G = Event Player.H[0]; Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); Event Player.G = Event Player.H[1]; Skip If(Is Button Held(Event Player, Button(Secondary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Secondary Fire)); Else If(Event Player.a == Button(Ability 1)); Press Button(Event Player, Button(Ability 1)); Wait Until(Health(Event Player) >= 200, 4.250); Press Button(Event Player, Button(Ability 1)); Else If(Event Player.a == Button(Ability 2)); Event Player.U = False; Event Player.X = False; Press Button(Event Player, Button(Ability 2)); Event Player.B = Position Of(Players In Slot(Slot Of(Event Player), Team 1)) + World Vector Of(Vector(0, 0, 2.500), Event Player, Rotation); Call Subroutine(K); Press Button(Event Player, Button(Primary Fire)); Wait(0.100, Ignore Condition); Event Player.m = True; Event Player.U = True; Event Player.X = True; Else If(Event Player.a == Button(Ultimate)); Event Player.G = Event Player.H[4]; Event Player.d = 2; Wait(0.250, Ignore Condition); Press Button(Event Player, Button(Ultimate)); Wait(0.250, Ignore Condition); Call Subroutine(L); End; Event Player.A = False; } } rule("AI Mei General") { event { Ongoing - Each Player; Team 2; Mei; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(6, 10); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.d = Event Player.e; Event Player.j = 1; Event Player.H[0] = 20; Event Player.H[1] = 115; Event Player.H[4] = 20; Event Player.z = True; } } rule("AI Mei Attack Primary") { event { Ongoing - Each Player; Team 2; Mei; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 10; Event Player.L < 3; Is Using Ability 1(Event Player) == False; Has Status(Players In Slot(Slot Of(Event Player), Team 1), Frozen) == False; Health(Players In Slot(Slot Of(Event Player), Team 1)) > 75; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(n); Wait(0.150, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Mei Attack Secondary") { event { Ongoing - Each Player; Team 2; Mei; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 50; (Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) > 10 || Health(Players In Slot(Slot Of( Event Player), Team 1)) <= 75) == True; Event Player.L < 2.5; Is Using Ability 1(Event Player) == False; Has Status(Players In Slot(Slot Of(Event Player), Team 1), Frozen) == False; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(n); Wait(0.800, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Secondary Fire)); } } rule("AI Mei Attack Secondary Frozen") { event { Ongoing - Each Player; Team 2; Mei; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 20; Event Player.L < 1; Is Using Ability 1(Event Player) == False; Has Status(Players In Slot(Slot Of(Event Player), Team 1), Frozen) == True; } actions { Event Player.U = False; Event Player.X = False; Event Player.d = 1; Event Player.a = Button(Secondary Fire); Call Subroutine(n); Wait(0.800, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Secondary Fire)); Call Subroutine(L); Event Player.U = True; Event Player.X = True; } } rule("AI Mei Cryo-Freeze") { event { Ongoing - Each Player; Team 2; Mei; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Health(Event Player) <= 70; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Is Using Ability 1(Event Player) == False; } actions { Event Player.a = Button(Ability 1); Call Subroutine(n); } } rule("AI Mei Ice Wall") { event { Ongoing - Each Player; Team 2; Mei; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 10; Is On Ground(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 2(Event Player) == False; } actions { Event Player.a = Button(Ability 2); Call Subroutine(n); } } rule("AI Mei Blizzrd") { event { Ongoing - Each Player; Team 2; Mei; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Health(Players In Slot(Slot Of(Event Player), Team 1)) >= 100; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 15; } actions { Event Player.a = Button(Ultimate); Call Subroutine(n); } } rule("AI Mercy") { event { Subroutine; o; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Ultimate)); Press Button(Event Player, Button(Ultimate)); Wait Until(Is Using Ultimate(Event Player), 1); If(Is Using Ultimate(Event Player)); Event Player.E = Random Real(12, 16); Event Player.U = False; Event Player.Z = False; Event Player.B = Vector(X Component Of(Position Of(Event Player)), 10, Z Component Of(Position Of(Event Player))); Call Subroutine(K); Start Throttle In Direction(Event Player, Forward, 1, To Player, Replace existing throttle, Direction and Magnitude); Wait(Random Real(0.500, 1), Ignore Condition); Event Player.m = True; Start Throttle In Direction(Event Player, Backward, 1, To Player, Replace existing throttle, Direction and Magnitude); Wait(Random Real(0.500, 1), Ignore Condition); Event Player.Z = True; Wait Until(Is Using Ultimate(Event Player) == False, 15); Event Player.U = True; Event Player.E = Event Player.F; End; End; Event Player.A = False; } } rule("AI Mercy General") { event { Ongoing - Each Player; Team 2; Mercy; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(8, 12); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.k = 1; Event Player.G = 50; Set Weapon(Event Player, 2); Call Subroutine(L); Event Player.z = True; } } rule("Non AI Mercy Wield Staff") { event { Ongoing - Each Player; Team 2; Mercy; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == False; } actions { Set Weapon(Event Player, 1); } } rule("AI Mercy Attack") { event { Ongoing - Each Player; Team 2; Mercy; } conditions { Event Player.c == True; Event Player.n == True; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 3.5; } actions { Skip If(Is Button Held(Event Player, Button(Primary Fire)), 1); Start Holding Button(Event Player, Button(Primary Fire)); Wait(0.250, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Mercy Valkyrie") { event { Ongoing - Each Player; Team 2; Mercy; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Ultimate); Call Subroutine(o); } } rule("AI Moira") { event { Subroutine; p; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); Skip If(Is Button Held(Event Player, Button(Secondary Fire)), 1); Start Holding Button(Event Player, Button(Secondary Fire)); Else If(Event Player.a == Button(Ability 1)); If(Event Player.b == 0); Press Button(Event Player, Button(Jump)); Wait(Random Real(0.150, 0.250), Ignore Condition); Press Button(Event Player, Button(Ability 1)); Wait(Random Real(0.500, 0.600), Ignore Condition); Press Button(Event Player, Button(Jump)); Else If(Event Player.b == 1); Press Button(Event Player, Button(Ability 1)); End; Else If(Event Player.a == Button(Ability 2)); Stop Holding Button(Event Player, Button(Secondary Fire)); Call Subroutine(P); Press Button(Event Player, Button(Ability 2)); Call Subroutine(P); If(Event Player.b == 0); Press Button(Event Player, Button(Primary Fire)); Else If(Event Player.b == 1); Press Button(Event Player, Button(Secondary Fire)); End; Else If(Event Player.a == Button(Ultimate)); If(Ability Cooldown(Event Player, Button(Ability 2)) == 0); Event Player.a = Button(Ability 2); Event Player.b = 1; Call Subroutine(p); End; Press Button(Event Player, Button(Ultimate)); Wait Until(Is Using Ultimate(Event Player), 1 / 60); Wait Until(Is Using Ultimate(Event Player) == False, 8); End; Event Player.A = False; } } rule("AI Moira General") { event { Ongoing - Each Player; Team 2; Moira; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(10, 15); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.k = 0; Call Subroutine(L); Event Player.z = True; } } rule("AI Moira Attack") { event { Ongoing - Each Player; Team 2; Moira; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 2; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 20; Is Using Ability 2(Event Player) == False; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(p); Wait(0.250, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Secondary Fire)); } } rule("AI Moira Fade") { event { Player Took Damage; Team 2; Moira; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Health(Event Player) <= 75; Ability Cooldown(Event Player, Button(Ability 1)) == 0; } actions { Event Player.a = Button(Ability 1); Event Player.b = 0; Call Subroutine(p); } } rule("AI Moira Fade Gap Closer") { event { Ongoing - Each Player; Team 2; Moira; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) >= 25; Distance Between(Players In Slot(Slot Of(Event Player), Team 1), Players In Slot(Slot Of(Event Player), Team 1).bm) < Global.b; Ability Cooldown(Event Player, Button(Ability 1)) == 0; } actions { Event Player.a = Button(Ability 1); Event Player.b = 0; Call Subroutine(p); } } rule("AI Moira Fade Ultimate") { event { Ongoing - Each Player; Team 2; Moira; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is Using Ultimate(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ability Cooldown(Event Player, Button(Ability 1)) == 0; } actions { If(Random Real(0, 1) < 0.500 + Event Player.p); Event Player.a = Button(Ability 1); Event Player.b = 1; Call Subroutine(p); End; } } rule("AI Moira Biotic Orb Damage") { event { Ongoing - Each Player; Team 2; Moira; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 2.75; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 15; Ultimate Charge Percent(Event Player) < 80; Health(Event Player) >= 100; Health(Players In Slot(Slot Of(Event Player), Team 1)) > 75; Is Using Ability 1(Event Player) == False; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 2(Event Player) == False; } actions { Event Player.a = Button(Ability 2); Event Player.b = 1; Call Subroutine(p); } } rule("AI Moira Biotic Orb Healing") { event { Ongoing - Each Player; Team 2; Moira; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Health(Event Player) <= 100; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 2(Event Player) == False; } actions { Event Player.a = Button(Ability 2); Event Player.b = 0; Call Subroutine(p); } } rule("AI Moira Coalescence") { event { Ongoing - Each Player; Team 2; Moira; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 2; } actions { Event Player.a = Button(Ultimate); Call Subroutine(p); } } rule("AI Orisa") { event { Subroutine; q; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Secondary Fire)); Event Player.G = Event Player.H[1]; Event Player.d = 3; Event Player.y = Vector(Random Real(-2, 2), Random Real(3, 6), Random Real(-2, 2)); Call Subroutine(P); Press Button(Event Player, Button(Secondary Fire)); Wait(0.100, Ignore Condition); Event Player.G = Event Player.H[0]; Event Player.d = 0; If(Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) > 0.450 * Event Player.H[1]); Wait(Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) / Event Player.H[1], Ignore Condition); Else; Wait(0.450, Ignore Condition); End; Press Button(Event Player, Button(Secondary Fire)); Wait(0.500, Ignore Condition); Else If(Event Player.a == Button(Ability 1)); Press Button(Event Player, Button(Ability 1)); Else If(Event Player.a == Button(Ability 2)); Event Player.B = Position Of(Event Player) + World Vector Of(Vector(0, 0, 4), Event Player, Rotation); Call Subroutine(K); Press Button(Event Player, Button(Ability 2)); Call Subroutine(P); Event Player.m = True; Else If(Event Player.a == Button(Ultimate)); Press Button(Event Player, Button(Ultimate)); End; Event Player.A = False; } } rule("AI Orisa General") { event { Ongoing - Each Player; Team 2; Orisa; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(15, 20); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.d = Event Player.e; Event Player.j = 1; Event Player.H[0] = 120; Event Player.H[1] = 25; Event Player.z = True; } } rule("AI Orisa Attack") { event { Ongoing - Each Player; Team 2; Orisa; } conditions { Event Player.c == True; Event Player.n == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 50; Event Player.L < 3; } actions { Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); Wait(0.250, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Orisa Halt!") { event { Ongoing - Each Player; Team 2; Orisa; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 30; Event Player.L < 3; Ability Cooldown(Event Player, Button(Secondary Fire)) == 0; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(q); } } rule("AI Orisa Fortify") { event { Player Took Damage; Team 2; Orisa; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 30; Ability Cooldown(Event Player, Button(Ability 1)) == 0; } actions { If(Random Real(0, 1) < 0.333 + Event Player.p); Event Player.a = Button(Ability 1); Call Subroutine(q); End; } } rule("AI Orisa Protective Barrier") { event { Ongoing - Each Player; Team 2; Orisa; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= Event Player.E; Absolute Value( Horizontal Angle Towards( Event Player, Players In Slot(Slot Of(Event Player), Team 1) ) ) <= 12; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 2(Event Player) == False; } actions { Event Player.a = Button(Ability 2); Call Subroutine(q); } } rule("AI Orisa Supercharger") { event { Ongoing - Each Player; Team 2; Orisa; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= Event Player.E; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Ultimate); Call Subroutine(q); } } rule("AI Pharah") { event { Subroutine; r; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Event Player.G = Event Player.H[0]; Press Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); Start Holding Button(Event Player, Button(Secondary Fire)); Else If(Event Player.a == Button(Ability 1)); Press Button(Event Player, Button(Ability 1)); Else If(Event Player.a == Button(Ability 2)); Event Player.G = Event Player.H[3]; Call Subroutine(P); Press Button(Event Player, Button(Ability 2)); Else If(Event Player.a == Button(Ultimate)); Event Player.G = Event Player.H[4]; Press Button(Event Player, Button(Ultimate)); Wait Until(Is Using Ultimate(Event Player) == True, 0.250); Wait Until(Is Using Ultimate(Event Player) == False, 2.500); End; Event Player.A = False; } } rule("AI Pharah General") { event { Ongoing - Each Player; Team 2; Pharah; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(9, 12); Event Player.E = Event Player.F; Event Player.J = 10; Event Player.e = 2; Event Player.k = 1; Event Player.H[0] = 35; Event Player.H[3] = 60; Event Player.H[4] = 45; Call Subroutine(L); Event Player.z = True; } } rule("AI Pharah Hover Jets") { event { Ongoing - Each Player; Team 2; Pharah; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Altitude Of(Event Player) <= 20; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(r); Wait(Random Real(0.250, 1.250), Ignore Condition); Stop Holding Button(Event Player, Button(Secondary Fire)); Wait(Random Real(0.500, 1), Ignore Condition); Loop If Condition Is True; } } rule("AI Pharah Attack") { event { Ongoing - Each Player; Team 2; Pharah; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 35; Event Player.L < 3.5; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(r); Wait(0.850, Ignore Condition); Loop If Condition Is True; } } rule("AI Pharah Jump Jet") { event { Ongoing - Each Player; Team 2; Pharah; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Altitude Of(Event Player) <= 20; } actions { Event Player.a = Button(Ability 1); Call Subroutine(r); } } rule("AI Pharah Concussive Blast") { event { Ongoing - Each Player; Team 2; Pharah; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 3; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Ability 2); Call Subroutine(r); } } rule("AI Pharah Barrage") { event { Ongoing - Each Player; Team 2; Pharah; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Altitude Of(Event Player) >= 3; Altitude Of(Event Player) <= 12; Health(Players In Slot(Slot Of(Event Player), Team 1)) >= 100; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 15; Event Player.L < 3; } actions { Event Player.a = Button(Ultimate); Call Subroutine(r); } } rule("AI Reaper") { event { Subroutine; s; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Skip If(Is Button Held(Event Player, Button(Primary Fire)), 1); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Ability 1)); Call Subroutine(I); Press Button(Event Player, Button(Ability 1)); Wait(Random Real(2, 3), Ignore Condition); Press Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Ability 2)); Press Button(Event Player, Button(Ability 2)); Event Player.B = Position Of(Players In Slot(Slot Of(Event Player), Team 1) + Vector(Random Real(0, 5), 0, Random Real(0, 5))); Call Subroutine(K); Press Button(Event Player, Button(Primary Fire)); Wait(1.500, Ignore Condition); Event Player.m = True; Else If(Event Player.a == Button(Ultimate)); Press Button(Event Player, Button(Ultimate)); Wait Until(Is Using Ultimate(Event Player), 0.500); Wait Until(Is Using Ultimate(Event Player) == False, 3); End; Event Player.A = False; } } rule("AI Reaper General") { event { Ongoing - Each Player; Team 2; Reaper; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(3, 7); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.k = 0; Call Subroutine(L); Event Player.z = True; } } rule("AI Reaper Attack") { event { Ongoing - Each Player; Team 2; Reaper; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Event Player.z == True; Is Using Ability 1(Event Player) == False; Is Using Ability 2(Event Player) == False; Is Using Ultimate(Event Player) == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 25; Event Player.L < 2; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(s); Wait(0.500, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Reaper Wraith Form") { event { Player Took Damage; Team 2; Reaper; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Health(Event Player) < 100; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Is Using Ability 1(Event Player) == False; } actions { Event Player.a = Button(Ability 1); Call Subroutine(s); } } rule("AI Reaper Shadow Step") { event { Ongoing - Each Player; Team 2; Reaper; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) > 20; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1).bm) < Global.b; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 2(Event Player) == False; } actions { Wait(0.250, Abort When False); Event Player.a = Button(Ability 2); Call Subroutine(s); } } rule("AI Reaper Death Blossom") { event { Ongoing - Each Player; Team 2; Reaper; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Health(Players In Slot(Slot Of(Event Player), Team 1)) >= 100; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) < 8; } actions { Event Player.a = Button(Ultimate); Call Subroutine(s); } } rule("AI Reinhardt") { event { Subroutine; t; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); Call Subroutine(I); Start Holding Button(Event Player, Button(Secondary Fire)); Wait Until(Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) < 6.500, Random Real(0.500, 2.750)); Stop Holding Button(Event Player, Button(Secondary Fire)); Else If(Event Player.a == Button(Ability 1)); Press Button(Event Player, Button(Ability 1)); Event Player.X = False; Else If(Event Player.a == Button(Ability 2)); Call Subroutine(I); Event Player.j = 1; Event Player.d = 3; Event Player.y = Vector(0, 0.750, 0); Event Player.G = Event Player.H[3]; Call Subroutine(M); Wait(Random Real(0.150, 0.250), Ignore Condition); Press Button(Event Player, Button(Ability 2)); Wait(1.120, Ignore Condition); Call Subroutine(L); Else If(Event Player.a == Button(Ultimate)); Call Subroutine(I); Press Button(Event Player, Button(Ultimate)); Wait(0.950, Ignore Condition); If(Has Status(Players In Slot(Slot Of(Event Player), Team 1), Knocked Down)); Event Player.U = False; Event Player.E = Random Real(1.500, 3); If(Ability Cooldown(Event Player, Button(Ability 1)) == 0); Press Button(Event Player, Button(Ability 1)); End; End; End; Event Player.A = False; } } rule("AI Reinhardt General") { event { Ongoing - Each Player; Team 2; Reinhardt; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(3.5, 4.5); Event Player.E = Event Player.F; Event Player.J = 0; Event Player.e = 0; Event Player.k = 0; Event Player.H[3] = 25; Call Subroutine(L); Event Player.z = True; } } rule("AI Reinhardt Attack") { event { Ongoing - Each Player; Team 2; Reinhardt; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) < 8; Event Player.L < 3; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(t); Wait(0.960, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Reinhardt Use Shield") { event { Ongoing - Each Player; Team 2; Reinhardt; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is In View Angle(Players In Slot(Slot Of(Event Player), Team 1), Eye Position(Event Player) - Vector(0, 0.250 + Y Component Of( Eye Position(Players In Slot(Slot Of(Event Player), Team 1))), 0), 15) == True; (Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) >= 7.500 || Health(Event Player) < 250) == True; Distance Between(Players In Slot(Slot Of(Event Player), Team 1), Players In Slot(Slot Of(Event Player), Team 1).bm) < Global.b; Has Status(Players In Slot(Slot Of(Event Player), Team 1), Knocked Down) == False; Is Using Ultimate(Event Player) == False; } actions { If(Random Real(0, 1) < 0.450 + Event Player.p); Event Player.a = Button(Secondary Fire); Call Subroutine(t); End; Loop If Condition Is True; Stop Holding Button(Event Player, Button(Secondary Fire)); } } rule("AI Reinhardt Block Earthshtter") { event { Ongoing - Each Player; Team 2; Reinhardt; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is In View Angle(Players In Slot(Slot Of(Event Player), Team 1), Eye Position(Event Player) - Vector(0, 0.250 + Y Component Of( Eye Position(Players In Slot(Slot Of(Event Player), Team 1))), 0), 30) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 20; Ultimate Charge Percent(Players In Slot(Slot Of(Event Player), Team 1)) == 0; } actions { If(Random Real(0, 1) < 0.250 + Event Player.p); Event Player.a = Button(Secondary Fire); Call Subroutine(t); End; } } rule("AI Reinhardt Charge") { event { Ongoing - Each Player; Team 2; Reinhardt; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 2.5; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 10; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1).bm) < Players In Slot(Slot Of( Event Player), Team 1).bf - 2.500; Health(Players In Slot(Slot Of(Event Player), Team 1)) >= 75; Altitude Of(Players In Slot(Slot Of(Event Player), Team 1)) < 2; Altitude Of(Event Player) < 2; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Ultimate Charge Percent(Event Player) < 90; } actions { Event Player.a = Button(Ability 1); Call Subroutine(t); } } rule("AI Reinhardt Charge Gap Closer") { event { Ongoing - Each Player; Team 2; Reinhardt; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 4; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) > 20; Ability Cooldown(Event Player, Button(Ability 1)) == 0; } actions { Event Player.a = Button(Ability 1); Call Subroutine(t); } } rule("AI Reinhardt Firestrike") { event { Ongoing - Each Player; Team 2; Reinhardt; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 2.5; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) < 20; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Ultimate Charge Percent(Event Player) < 90; } actions { Event Player.a = Button(Ability 2); Call Subroutine(t); } } rule("AI Reinhardt Earthshtter") { event { Ongoing - Each Player; Team 2; Reinhardt; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Event Player.L < 3.5; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 16; Health(Players In Slot(Slot Of(Event Player), Team 1)) > 80; Health(Event Player) >= 50; Is On Ground(Event Player) == True; Is On Ground(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is Jumping(Event Player) == False; (Hero Of(Players In Slot(Slot Of(Event Player), Team 1)) == Hero(Reinhardt) ? Is Firing Secondary(Players In Slot(Slot Of( Event Player), Team 1)) == False : True) == True; } actions { Wait(Random Real(0.100, 0.500), Abort When False); Event Player.a = Button(Ultimate); Call Subroutine(t); Wait Until(Has Status(Players In Slot(Slot Of(Event Player), Team 1), Knocked Down) == False, 2.500); Event Player.U = True; Event Player.E = Event Player.F; } } rule("AI Roadhog") { event { Subroutine; u; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Event Player.G = Event Player.H[0]; Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); Event Player.G = Event Player.H[0]; Skip If(Is Button Held(Event Player, Button(Secondary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Secondary Fire)); Else If(Event Player.a == Button(Ability 1)); Event Player.G = Event Player.H[2]; Wait(Random Real(0.100, 0.250), Ignore Condition); Event Player.Z = False; Start Throttle In Direction(Event Player, Forward, 1, To Player, Replace existing throttle, None); Press Button(Event Player, Button(Ability 1)); Wait Until(Is Using Ability 1(Event Player), 1); Wait Until(Is Using Ability 1(Event Player) == False, 1); Start Holding Button(Event Player, Button(Primary Fire)); Wait(0.250, Ignore Condition); Press Button(Event Player, Button(Melee)); Wait(0.750, Ignore Condition); Stop Holding Button(Event Player, Button(Primary Fire)); Call Subroutine(Z); Event Player.Z = True; Else If(Event Player.a == Button(Ability 2)); Press Button(Event Player, Button(Ability 2)); Else If(Event Player.a == Button(Ultimate)); Press Button(Event Player, Button(Ultimate)); End; Event Player.A = False; } } rule("AI Roadhog General") { event { Ongoing - Each Player; Team 2; Roadhog; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(9, 12); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.d = Event Player.e; Event Player.j = 1; Event Player.H[0] = 80; Event Player.H[2] = 40; Event Player.z = True; } } rule("AI Roadhog Attack Primary") { event { Ongoing - Each Player; Team 2; Roadhog; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 15; Event Player.L < 2.5; Is Using Ability 1(Event Player) == False; Is Using Ability 2(Event Player) == False; Is Using Ultimate(Event Player) == False; Is Firing Secondary(Event Player) == False; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(u); Wait(0.850, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Roadhog Attack Secondary") { event { Ongoing - Each Player; Team 2; Roadhog; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) > 15; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 38; Event Player.L < 3; Is Using Ability 1(Event Player) == False; Is Using Ability 2(Event Player) == False; Is Using Ultimate(Event Player) == False; Is Firing Primary(Event Player) == False; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(u); Wait(0.850, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Secondary Fire)); } } rule("AI Roadhog Chain Hook") { event { Ongoing - Each Player; Team 2; Roadhog; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Ammo(Event Player, 0) > 1; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Health(Players In Slot(Slot Of(Event Player), Team 1)) >= 75; Event Player.L < 2.25; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 20; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1).bm) <= Players In Slot(Slot Of( Event Player), Team 1).bw; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Is Using Ability 1(Event Player) == False; Is Using Ability 2(Event Player) == False; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Ability 1); Call Subroutine(u); } } rule("AI Roadhog Take A Breather") { event { Ongoing - Each Player; Team 2; Roadhog; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Health(Event Player) < 100; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 1(Event Player) == False; Is Using Ability 2(Event Player) == False; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Ability 2); Call Subroutine(u); } } rule("AI Roadhog Whole Hog") { event { Ongoing - Each Player; Team 2; Roadhog; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 15; Event Player.L < 3; Is Using Ability 1(Event Player) == False; Is Using Ability 2(Event Player) == False; } actions { Event Player.a = Button(Ultimate); Call Subroutine(u); } } rule("AI Sigma") { event { Subroutine; v; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); If(Event Player.j != 2 || Event Player.d != 0); Event Player.j = 2; Event Player.d = 0; Call Subroutine(M); End; Event Player.G = Event Player.H[0]; Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); If(Event Player.j != 0 || Event Player.d != 0); Event Player.j = 0; Event Player.d = 0; Call Subroutine(M); End; Call Subroutine(I); Start Holding Button(Event Player, Button(Secondary Fire)); Wait(Random Real(0.150, 0.400), Ignore Condition); Stop Holding Button(Event Player, Button(Secondary Fire)); Else If(Event Player.a == Button(Ability 1)); If(Event Player.j != 0 || Event Player.d != 0); Event Player.j = 0; Event Player.d = 0; Call Subroutine(M); End; Press Button(Event Player, Button(Ability 1)); Wait(0.100, Ignore Condition); Wait Until(Is Using Ability 1(Event Player) == False, 2); Else If(Event Player.a == Button(Ability 2)); If(Event Player.j != 2 || Event Player.d != 0); Event Player.j = 2; Event Player.d = 0; Call Subroutine(M); End; Event Player.G = Event Player.H[3]; Call Subroutine(P); Press Button(Event Player, Button(Ability 2)); Wait(0.650, Ignore Condition); Else If(Event Player.a == Button(Ultimate)); If(Event Player.j != 0 || Event Player.d != 2); Event Player.j = 0; Event Player.d = 2; Call Subroutine(M); End; Press Button(Event Player, Button(Ultimate)); Start Holding Button(Event Player, Button(Jump)); Wait(Random Real(0.750, 1.500), Ignore Condition); Wait Until(Event Player.L < 3, 4); Start Holding Button(Event Player, Button(Primary Fire)); Event Player.j = 0; Event Player.d = 0; Call Subroutine(M); Wait Until(Is Using Ultimate(Event Player) == False, 5); End; Event Player.A = False; } } rule("AI Sigma General") { event { Ongoing - Each Player; Team 2; Sigma; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(12, 15); Event Player.E = Event Player.F; Event Player.e = 2; Event Player.k = 2; Event Player.H[0] = 50; Event Player.H[3] = 37.500; Call Subroutine(L); Event Player.z = True; } } rule("AI Sigma Attack") { event { Ongoing - Each Player; Team 2; Sigma; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 25; Event Player.L < 3.25; Is Using Ability 1(Event Player) == False; Is Using Ability 2(Event Player) == False; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(v); Wait(1.500, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Sigma Experimental Barrier") { event { Ongoing - Each Player; Team 2; Sigma; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 3; Ability Cooldown(Event Player, Button(Secondary Fire)) == 0; Is Firing Secondary(Event Player) == False; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(v); Wait(4, Ignore Condition); Press Button(Event Player, Button(Secondary Fire)); Loop If Condition Is True; } } rule("AI Sigma Kinetic Grasp") { event { Player Took Damage; Team 2; Sigma; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 5; Is In View Angle(Players In Slot(Slot Of(Event Player), Team 1), Eye Position(Event Player) - Vector(0, 0.250 + Y Component Of( Eye Position(Players In Slot(Slot Of(Event Player), Team 1))), 0), 15) == True; Array Contains(Global.x, Hero Of(Players In Slot(Slot Of(Event Player), Team 1))) == True; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Is Using Ability 1(Event Player) == False; } actions { If(Random Real(0, 1) < 0.450 + Event Player.p); Event Player.a = Button(Ability 1); Call Subroutine(v); End; } } rule("AI Sigma Accretion") { event { Ongoing - Each Player; Team 2; Sigma; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 20; Event Player.L < 2.75; Speed Of(Players In Slot(Slot Of(Event Player), Team 1)) <= 6; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 2(Event Player) == False; } actions { Event Player.a = Button(Ability 2); Call Subroutine(v); } } rule("AI Sigma Gravitic Flux") { event { Ongoing - Each Player; Team 2; Sigma; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Health(Players In Slot(Slot Of(Event Player), Team 1)) >= 125; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 20; Event Player.L < 4; } actions { Event Player.a = Button(Ultimate); Call Subroutine(v); } } rule("AI Soldier: 76") { event { Subroutine; w; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); Event Player.j = 1; Event Player.d = 2; Event Player.G = Event Player.H[1]; Call Subroutine(M); Wait(Random Real(0.150, 0.250), Ignore Condition); Press Button(Event Player, Button(Secondary Fire)); Wait(0.250, Ignore Condition); Call Subroutine(L); Else If(Event Player.a == Button(Ability 1)); Call Subroutine(I); Start Holding Button(Event Player, Button(Ability 1)); Wait Until(Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) < Event Player.E + 5, 9999); Stop Holding Button(Event Player, Button(Ability 1)); Else If(Event Player.a == Button(Ability 2)); Press Button(Event Player, Button(Ability 2)); Else If(Event Player.a == Button(Ultimate)); Press Button(Event Player, Button(Ultimate)); End; Event Player.A = False; } } rule("AI Soldier: 76 General") { event { Ongoing - Each Player; Team 2; Soldier: 76; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(15, 20); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.k = 0; Event Player.H[1] = 50; Call Subroutine(L); Event Player.z = True; } } rule("AI Soldier: 76 Attack") { event { Ongoing - Each Player; Team 2; Soldier: 76; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 50; Event Player.L < 2.25; Is Using Ability 1(Event Player) == False; Is Firing Secondary(Event Player) == False; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(w); Wait(0.250, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Soldier: 76 Helix Rockets") { event { Ongoing - Each Player; Team 2; Soldier: 76; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 2.75; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 20; Ability Cooldown(Event Player, Button(Secondary Fire)) == 0; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(w); } } rule("AI Soldier: 76 Sprint") { event { Ongoing - Each Player; Team 2; Soldier: 76; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) > Event Player.E + 5; Distance Between(Players In Slot(Slot Of(Event Player), Team 1), Players In Slot(Slot Of(Event Player), Team 1).bm) < Global.b; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Is Using Ability 1(Event Player) == False; } actions { Event Player.a = Button(Ability 1); Call Subroutine(w); } } rule("AI Soldier: 76 Biotic Field") { event { Player Took Damage; Team 2; Soldier: 76; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Health(Event Player) < 100; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 2(Event Player) == False; } actions { Event Player.a = Button(Ability 2); Call Subroutine(w); } } rule("AI Soldier: 76 Tactical Visor") { event { Ongoing - Each Player; Team 2; Soldier: 76; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Health(Event Player) >= 50; } actions { Event Player.a = Button(Ultimate); Call Subroutine(w); } } rule("AI Sombra") { event { Subroutine; x; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); If(Is Using Ability 1(Event Player) == True); Press Button(Event Player, Button(Ability 1)); Wait(0.800, Ignore Condition); End; Start Holding Button(Event Player, Button(Secondary Fire)); Wait(0.750, Ignore Condition); Stop Holding Button(Event Player, Button(Secondary Fire)); Else If(Event Player.a == Button(Ability 1)); Else If(Event Player.a == Button(Ability 2)); If(Is Using Ability 2(Event Player)); If(Ability Cooldown(Event Player, Button(Ability 1)) == 0); Press Button(Event Player, Button(Ability 1)); Wait(1 / 60, Ignore Condition); End; Press Button(Event Player, Button(Ability 2)); Wait(0.250, Ignore Condition); Heal(Event Player, Null, 75); Else; Event Player.B = Position Of(Event Player) + World Vector Of(Vector(Random Real(-5, 5), Random Real(1, 3), Random Real(-10, -15)), Event Player, Rotation); Call Subroutine(K); Press Button(Event Player, Button(Ability 2)); Wait(0.100, Ignore Condition); Event Player.m = True; End; Else If(Event Player.a == Button(Ultimate)); Press Button(Event Player, Button(Ultimate)); Wait(0.100, Ignore Condition); Wait Until(Is Using Ultimate(Event Player) == False, 0.650); End; Event Player.A = False; } } rule("AI Sombra General") { event { Ongoing - Each Player; Team 2; Sombra; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(5, 8); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.d = Event Player.e; Event Player.j = 0; If(Ability Cooldown(Event Player, Button(Ability 1)) == 0); Press Button(Event Player, Button(Ability 1)); End; Event Player.z = True; } } rule("AI Sombra Attack") { event { Ongoing - Each Player; Team 2; Sombra; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 30; Event Player.L < 2.5; Is Using Ability 1(Event Player) == False; Is Button Held(Event Player, Button(Secondary Fire)) == False; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(x); Wait(0.250, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Sombra Hack") { event { Ongoing - Each Player; Team 2; Sombra; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 10; Event Player.L < 1.5; Is In View Angle(Players In Slot(Slot Of(Event Player), Team 1), Eye Position(Event Player) - Vector(0, 0.250 + Y Component Of( Eye Position(Players In Slot(Slot Of(Event Player), Team 1))), 0), 15) == False; Ability Cooldown(Event Player, Button(Secondary Fire)) == 0; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(x); } } rule("AI Sombra Stealth") { event { Player Dealt Final Blow; Team 2; Sombra; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Is Using Ability 1(Event Player) == False; } actions { Call Subroutine(P); Press Button(Event Player, Button(Ability 1)); } } rule("AI Sombra Translocator Place") { event { Ongoing - Each Player; Team 2; Sombra; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Using Ability 2(Event Player) == False; Is Firing Secondary(Event Player) == False; Ability Cooldown(Event Player, Button(Ability 2)) == 0; } actions { Event Player.a = Button(Ability 2); Call Subroutine(x); } } rule("AI Sombra Translocator Use") { event { Ongoing - Each Player; Team 2; Sombra; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Health(Event Player) <= 75; Is Using Ability 1(Event Player) == False; Is Using Ability 2(Event Player) == True; Ability Cooldown(Event Player, Button(Ability 2)) == 0; } actions { Event Player.a = Button(Ability 2); Call Subroutine(x); } } rule("AI Sombra EMP") { event { Ongoing - Each Player; Team 2; Sombra; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Health(Players In Slot(Slot Of(Event Player), Team 1)) >= 75; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 15; } actions { Event Player.a = Button(Ultimate); Call Subroutine(x); } } rule("AI Symmetra") { event { Subroutine; y; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Event Player.j = 0; Event Player.d = 0; Call Subroutine(M); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); Event Player.j = 1; Event Player.d = 0; Event Player.G = Event Player.H[1]; Call Subroutine(M); Call Subroutine(I); Start Holding Button(Event Player, Button(Secondary Fire)); Wait(Random Real(0.500, 1), Ignore Condition); Stop Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Ability 1)); Event Player.B = Position Of(Players In Slot(Slot Of(Event Player), Team 1)) + Vector(Random Real(-6, 6), 0, Random Real(-6, 6)); Call Subroutine(K); Press Button(Event Player, Button(Ability 1)); Wait(0.350, Ignore Condition); Event Player.m = True; Else If(Event Player.a == Button(Ultimate)); Press Button(Event Player, Button(Ultimate)); Wait(0.250, Ignore Condition); Press Button(Event Player, Button(Ultimate)); Wait(0.250, Ignore Condition); Press Button(Event Player, Button(Primary Fire)); End; Event Player.A = False; } } rule("AI Symmetra General") { event { Ongoing - Each Player; Team 2; Symmetra; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(6, 10); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.d = Event Player.e; Event Player.j = 0; Event Player.H[1] = 25; Event Player.z = True; } } rule("AI Symmetra Attack Primary") { event { Ongoing - Each Player; Team 2; Symmetra; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 12; Event Player.L < 2; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(y); Wait(0.250, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Symmetra Attack Secondary") { event { Ongoing - Each Player; Team 2; Symmetra; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 40; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) > 12; Event Player.L < 3.5; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(y); Loop If Condition Is True; Event Player.j = 0; } } rule("AI Symmetra Sentry Turret") { event { Ongoing - Each Player; Team 2; Symmetra; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is On Ground(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 20; Ability Charge(Event Player, Button(Ability 1)) > 0; Ability Cooldown(Event Player, Button(Ability 1)) == 0; } actions { Event Player.a = Button(Ability 1); Call Subroutine(y); } } rule("AI Symmetra Photon Barrier") { event { Ongoing - Each Player; Team 2; Symmetra; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Ultimate); Call Subroutine(y); } } rule("AI Torbjorn") { event { Subroutine; z; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Event Player.G = Event Player.H[0]; Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); Event Player.G = Event Player.H[1]; Skip If(Is Button Held(Event Player, Button(Secondary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Secondary Fire)); Else If(Event Player.a == Button(Ability 1)); Event Player.B = Position Of(Event Player) + World Vector Of(Vector(Random Real(-8, 8), 0, Random Real(0, 3)), Event Player, Rotation); Call Subroutine(K); Press Button(Event Player, Button(Ability 1)); Call Subroutine(P); Event Player.m = True; Call Subroutine(L); Else If(Event Player.a == Button(Ability 2)); Press Button(Event Player, Button(Ability 2)); Else If(Event Player.a == Button(Ultimate)); Call Subroutine(I); Event Player.G = Event Player.H[4]; Call Subroutine(P); Press Button(Event Player, Button(Ultimate)); Wait(1, Ignore Condition); While(Is Using Ultimate(Event Player)); Press Button(Event Player, Button(Primary Fire)); Wait(Random Real(0.150, 0.500), Ignore Condition); End; Call Subroutine(L); End; Event Player.A = False; } } rule("AI Torbjorn General") { event { Ongoing - Each Player; Team 2; Torbjörn; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(15, 20); Event Player.E = Event Player.F; Event Player.e = 1; Event Player.k = 2; Event Player.H[0] = 70; Event Player.H[1] = 120; Event Player.H[4] = 40; Call Subroutine(L); Event Player.z = True; } } rule("AI Torbjorn Attack Primary") { event { Ongoing - Each Player; Team 2; Torbjörn; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 40; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) > 10; Event Player.L < 2.25; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(z); Wait(0.600, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Torbjorn Attack Secondary") { event { Ongoing - Each Player; Team 2; Torbjörn; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 10; Event Player.L < 1.75; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(z); Wait(0.800, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Secondary Fire)); } } rule("AI Torbjorn Deploy Turret") { event { Ongoing - Each Player; Team 2; Torbjörn; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is Using Ultimate(Event Player) == False; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Is Using Ability 1(Event Player) == False; Players In Slot(Slot Of(Event Player), Team 1).Q % 2 == 0; } actions { Event Player.a = Button(Ability 1); Call Subroutine(z); } } rule("AI Torbjorn Overload") { event { Player Took Damage; Team 2; Torbjörn; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Health(Event Player) <= 90; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 2(Event Player) == False; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Ability 2); Call Subroutine(z); } } rule("AI Torbjorn Molten Core") { event { Ongoing - Each Player; Team 2; Torbjörn; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 30; } actions { Event Player.a = Button(Ultimate); Call Subroutine(z); } } rule("AI Tracer") { event { Subroutine; A; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Skip If(Is Button Held(Event Player, Button(Primary Fire)), 1); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Ability 1)); Press Button(Event Player, Button(Ability 1)); Wait(0.100, Ignore Condition); Else If(Event Player.a == Button(Ability 2)); Press Button(Event Player, Button(Ability 2)); Else If(Event Player.a == Button(Ultimate)); Event Player.G = Event Player.H[4]; Event Player.j = 2; Call Subroutine(M); Wait(Random Real(0.150, 0.250), Ignore Condition); Press Button(Event Player, Button(Ultimate)); Wait(0.150, Ignore Condition); Event Player.E = Event Player.F; Event Player.j = 0; Call Subroutine(M); End; Event Player.A = False; } } rule("AI Tracer General") { event { Ongoing - Each Player; Team 2; Tracer; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(4, 6); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.k = 0; Event Player.H[4] = 15; Call Subroutine(L); Event Player.z = True; } } rule("AI Tracer Attack") { event { Ongoing - Each Player; Team 2; Tracer; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 23; Event Player.L < 2; Is Reloading(Event Player) == False; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(A); Wait(1, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Tracer Blink") { event { Ongoing - Each Player; Team 2; Tracer; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 20; Is In View Angle(Players In Slot(Slot Of(Event Player), Team 1), Eye Position(Event Player) - Vector(0, 0.250 + Y Component Of( Eye Position(Players In Slot(Slot Of(Event Player), Team 1))), 0), 7.5) == True; Ability Charge(Event Player, Button(Ability 1)) > 0; Is Using Ability 1(Event Player) == False; } actions { If(Random Real(0, 1) < 0.300 + Event Player.p); Event Player.a = Button(Ability 1); Call Subroutine(A); End; } } rule("AI Tracer Recall") { event { Player Took Damage; Team 2; Tracer; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Health(Event Player) < 85; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 2(Event Player) == False; } actions { Event Player.a = Button(Ability 2); Call Subroutine(A); } } rule("AI Tracer Pulse Bomb Update Range") { event { Ongoing - Each Player; Team 2; Tracer; } conditions { Event Player.c == True; Event Player.o == True; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Health(Players In Slot(Slot Of(Event Player), Team 1)) >= 100; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; } actions { Event Player.E = Random Real(1, 3); } } rule("AI Tracer Pulse Bomb Toss") { event { Ongoing - Each Player; Team 2; Tracer; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Health(Players In Slot(Slot Of(Event Player), Team 1)) >= 75; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 5; Event Player.L < 1.5; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Ultimate); Call Subroutine(A); } } rule("AI Tracer Pulse Bomb Stick Recall") { event { Player Dealt Damage; Team 2; Tracer; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Damage == 5; Ultimate Charge Percent(Event Player) == 0; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 2(Event Player) == False; } actions { Event Player.a = Button(Ability 2); Call Subroutine(A); } } rule("AI Widowmaker") { event { Subroutine; B; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); If(Is Firing Secondary(Event Player)); If(Random Real(0, 1) < Players In Slot(Slot Of(Event Player), Team 1).ay / 20); Call Subroutine(N); Press Button(Event Player, Button(Primary Fire)); Call Subroutine(O); Else; Press Button(Event Player, Button(Primary Fire)); End; Event Player.K = Total Time Elapsed; Else; Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); End; Else If(Event Player.a == Button(Secondary Fire)); If(Is Button Held(Event Player, Button(Secondary Fire))); Stop Holding Button(Event Player, Button(Secondary Fire)); If(Event Player.j != 0 || Event Player.d != 0); Event Player.j = 0; Event Player.d = 0; Call Subroutine(M); End; Else; Event Player.X = False; Call Subroutine(I); Start Holding Button(Event Player, Button(Secondary Fire)); Wait(0.333, Ignore Condition); Event Player.K = Total Time Elapsed; If(Event Player.j != 0 || Event Player.d != 1); Call Subroutine(L); End; End; Else If(Event Player.a == Button(Ability 1)); Event Player.n = False; Call Subroutine(I); Call Subroutine(K); Press Button(Event Player, Button(Ability 1)); Stop Facing(Event Player); Wait Until(Is Using Ability 1(Event Player) == True, 2); Wait Until(Is Using Ability 1(Event Player) == False, 2); Event Player.m = True; Event Player.n = True; Else If(Event Player.a == Button(Ability 2)); Stop Holding Button(Event Player, Button(Secondary Fire)); Event Player.j = 2; Event Player.d = 2; Event Player.G = Event Player.H[3]; Call Subroutine(M); Call Subroutine(P); Press Button(Event Player, Button(Ability 2)); Wait(0.150, Ignore Condition); Call Subroutine(L); Else If(Event Player.a == Button(Ultimate)); Stop Holding Button(Event Player, Button(Secondary Fire)); Press Button(Event Player, Button(Ultimate)); End; Event Player.A = False; } } rule("AI Widowmaker General") { event { Ongoing - Each Player; Team 2; Widowmaker; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Integer(20, 35); Event Player.E = Event Player.F; Event Player.J = 10; Event Player.e = 1; Event Player.k = 0; Event Player.H[3] = 20; Call Subroutine(L); Event Player.z = True; } } rule("AI Widowmaker Scope In") { event { Ongoing - Each Player; Team 2; Widowmaker; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) >= 7.500; Distance Between(Players In Slot(Slot Of(Event Player), Team 1), Players In Slot(Slot Of(Event Player), Team 1).bm) < Global.b; Is Using Ability 1(Event Player) == False; Is Button Held(Event Player, Button(Secondary Fire)) == False; Is Reloading(Event Player) == False; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(B); } } rule("AI Widowmaker Scope Out") { event { Ongoing - Each Player; Team 2; Widowmaker; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; (Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) < 7.500 || Is Alive(Players In Slot(Slot Of( Event Player), Team 1)) == False) == True; Is Using Ability 1(Event Player) == False; Is Firing Secondary(Event Player) == True; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(B); } } rule("AI Widowmaker Scope Out Reloading") { event { Ongoing - Each Player; Team 2; Widowmaker; } conditions { Event Player.c == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Using Ability 1(Event Player) == False; Is Button Held(Event Player, Button(Secondary Fire)) == True; Is Reloading(Event Player) == True; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(B); } } rule("AI Widowmaker Charge And Fire") { event { Ongoing - Each Player; Team 2; Widowmaker; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is Firing Secondary(Event Player) == True; Is Using Ability 1(Event Player) == False; Event Player.L <= 1.25; Total Time Elapsed >= Event Player.K + 1.250; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(B); } } rule("AI Widowmaker Attack SMG") { event { Ongoing - Each Player; Team 2; Widowmaker; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) < 7.500; Event Player.L < 2; Is Using Ability 1(Event Player) == False; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(B); Wait(0.250, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Widowmaker Grappling Hook Closer") { event { Ongoing - Each Player; Team 2; Widowmaker; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is Using Ability 1(Event Player) == False; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) >= Event Player.E + 10; Distance Between(Players In Slot(Slot Of(Event Player), Team 1), Players In Slot(Slot Of(Event Player), Team 1).bm) < Global.b; } actions { Event Player.B = Position Of(Event Player) + World Vector Of(Vector(Random Real(-8, 8), 0, Random Real(8, 16)), Event Player, Rotation); Event Player.a = Button(Ability 1); Call Subroutine(B); } } rule("AI Widowmaker Grappling Hook Farther") { event { Ongoing - Each Player; Team 2; Widowmaker; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is Using Ability 1(Event Player) == False; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= Event Player.E - 10; Distance Between(Players In Slot(Slot Of(Event Player), Team 1), Players In Slot(Slot Of(Event Player), Team 1).bm) < Global.b; } actions { Event Player.B = Position Of(Event Player) + World Vector Of(Vector(Random Real(-8, 8), 0, Random Real(-8, -16)), Event Player, Rotation); Event Player.a = Button(Ability 1); Call Subroutine(B); } } rule("AI Widowmaker Venom Mine") { event { Ongoing - Each Player; Team 2; Widowmaker; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is Using Ability 1(Event Player) == False; Is Using Ability 2(Event Player) == False; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= Event Player.E; } actions { Event Player.a = Button(Ability 2); Call Subroutine(B); } } rule("AI Widowmaker Infra-Sight") { event { Ongoing - Each Player; Team 2; Widowmaker; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Health(Event Player) >= 75; } actions { Event Player.a = Button(Ultimate); Call Subroutine(B); } } rule("AI Winston") { event { Subroutine; C; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); Else If(Event Player.a == Button(Ability 1)); Event Player.Z = False; Start Throttle In Direction(Event Player, Direction Towards(Event Player, Players In Slot(Slot Of(Event Player), Team 1)), 1, To World, Replace existing throttle, Direction and Magnitude); Event Player.j = 2; Event Player.d = 2; Event Player.G = Event Player.H[2]; Call Subroutine(M); Wait(Random Real(0.250, 0.750), Ignore Condition); Press Button(Event Player, Button(Ability 1)); Wait(0.100, Ignore Condition); Event Player.Z = True; Call Subroutine(L); Else If(Event Player.a == Button(Ability 2)); Press Button(Event Player, Button(Ability 2)); Else If(Event Player.a == Button(Ultimate)); Press Button(Event Player, Button(Ultimate)); Event Player.E = Random Real(1.500, 3); Wait Until(Is Using Ultimate(Event Player) == True, 0.250); End; Event Player.A = False; } } rule("AI Winston General") { event { Ongoing - Each Player; Team 2; Winston; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(3, 6); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.k = 0; Event Player.H[2] = 30; Event Player.J = 1.500; Call Subroutine(L); Event Player.z = True; } } rule("AI Winston Attack") { event { Ongoing - Each Player; Team 2; Winston; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 8; Event Player.L < 2.75; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(C); Wait(0.250, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Winston Jump Pack") { event { Ongoing - Each Player; Team 2; Winston; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 3; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) >= 12; Distance Between(Players In Slot(Slot Of(Event Player), Team 1), Players In Slot(Slot Of(Event Player), Team 1).bm) < Global.b; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Is Using Ability 1(Event Player) == False; } actions { Event Player.a = Button(Ability 1); Call Subroutine(C); } } rule("AI Winston Barrier Projector") { event { Player Took Damage; Team 2; Winston; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Health(Event Player) <= 350; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= Event Player.E + 10; Ability Cooldown(Event Player, Button(Ability 2)) == 0; Is Using Ability 2(Event Player) == False; } actions { If(Random Real(0, 1) < 0.250 + Event Player.p); Event Player.a = Button(Ability 2); Call Subroutine(C); End; } } rule("AI Winston Primal Rage") { event { Ongoing - Each Player; Team 2; Winston; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Event Player.z == True; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Health(Players In Slot(Slot Of(Event Player), Team 1)) >= 100; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 20; Event Player.L < 3; } actions { Event Player.a = Button(Ultimate); Call Subroutine(C); Wait Until(Is Using Ultimate(Event Player) == False, 10); Event Player.E = Event Player.F; } } rule("AI Wrecking Ball") { event { Subroutine; D; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Crouch)); Event Player.U = False; Press Button(Event Player, Button(Jump)); Wait(0.250, Ignore Condition); Press Button(Event Player, Button(Crouch)); Event Player.U = True; Else If(Event Player.a == Button(Ability 1)); Press Button(Event Player, Button(Ability 1)); Else If(Event Player.a == Button(Ability 2)); Press Button(Event Player, Button(Ability 2)); Else If(Event Player.a == Button(Ultimate)); Press Button(Event Player, Button(Ultimate)); End; Event Player.A = False; } } rule("AI Wrecking Ball General") { event { Ongoing - Each Player; Team 2; Wrecking Ball; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(5, 10); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.d = Event Player.e; Event Player.X = False; Event Player.j = 0; Event Player.z = True; } } rule("AI Wrecking Ball Attack") { event { Ongoing - Each Player; Team 2; Wrecking Ball; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 10; Event Player.L < 2.25; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(D); Wait(0.250, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Wrecking Ball Roll") { event { Ongoing - Each Player; Team 2; Wrecking Ball; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) >= 15; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Is Using Ability 1(Event Player) == False; } actions { Event Player.a = Button(Ability 1); Call Subroutine(D); } } rule("AI Wrecking Ball Adaptive Shield") { event { Player Took Damage; Team 2; Wrecking Ball; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Health(Event Player) <= 150; Ability Cooldown(Event Player, Button(Ability 2)) == 0; } actions { Event Player.a = Button(Ability 2); Call Subroutine(D); } } rule("AI Wrecking Ball Piledriver") { event { Ongoing - Each Player; Team 2; Wrecking Ball; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 8; Ability Cooldown(Event Player, Button(Crouch)) == 0; } actions { Event Player.a = Button(Crouch); Call Subroutine(D); } } rule("AI Wrecking Ball Minefield") { event { Ongoing - Each Player; Team 2; Wrecking Ball; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Health(Players In Slot(Slot Of(Event Player), Team 1)) > 50; Is In Air(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 12.500; } actions { Event Player.a = Button(Ultimate); Call Subroutine(D); } } rule("AI Zarya") { event { Subroutine; E; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); If(Event Player.j != 0 || Event Player.d != 0); Call Subroutine(L); End; Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); If(Event Player.j != 2 || Event Player.d != 2); Event Player.j = 2; Event Player.d = 2; Event Player.G = Event Player.H[1]; Call Subroutine(M); End; Skip If(Is Button Held(Event Player, Button(Secondary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Secondary Fire)); Else If(Event Player.a == Button(Ability 1)); Press Button(Event Player, Button(Ability 1)); Else If(Event Player.a == Button(Ability 2)); Else If(Event Player.a == Button(Ultimate)); Event Player.j = 2; Event Player.d = 2; Event Player.G = Event Player.H[4]; Call Subroutine(M); Call Subroutine(P); Press Button(Event Player, Button(Ultimate)); Wait(0.150, Ignore Condition); Call Subroutine(L); End; Event Player.A = False; } } rule("AI Zarya General") { event { Ongoing - Each Player; Team 2; Zarya; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(5, 10); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.k = 0; Event Player.H[1] = 25; Event Player.H[4] = 25; Call Subroutine(L); Event Player.z = True; } } rule("AI Zarya Attack Primary") { event { Ongoing - Each Player; Team 2; Zarya; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 15; Event Player.L < 2.5; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(E); Wait(0.250, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Zarya Attack Secondary") { event { Ongoing - Each Player; Team 2; Zarya; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) > 15; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 50; Event Player.L < 3.25; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(E); Wait(1, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Secondary Fire)); } } rule("AI Zarya Use Bubble") { event { Ongoing - Each Player; Team 2; Zarya; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is In View Angle(Players In Slot(Slot Of(Event Player), Team 1), Eye Position(Event Player) - Vector(0, 0.250 + Y Component Of( Eye Position(Players In Slot(Slot Of(Event Player), Team 1))), 0), 12) == True; Ability Cooldown(Event Player, Button(Ability 1)) == 0; Is Using Ability 1(Event Player) == False; } actions { If(Random Real(0, 1) < 0.300 + Event Player.p); Event Player.a = Button(Ability 1); Call Subroutine(E); End; } } rule("AI Zarya Graviton Surge") { event { Ongoing - Each Player; Team 2; Zarya; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 15; Event Player.L < 2.5; Health(Players In Slot(Slot Of(Event Player), Team 1)) >= 100; } actions { Event Player.a = Button(Ultimate); Call Subroutine(E); } } rule("AI Zenyatta") { event { Subroutine; F; } actions { Event Player.A = True; Call Subroutine(P); If(Event Player.a == Button(Primary Fire)); Skip If(Is Button Held(Event Player, Button(Primary Fire)), 2); Call Subroutine(I); Start Holding Button(Event Player, Button(Primary Fire)); Else If(Event Player.a == Button(Secondary Fire)); Call Subroutine(I); Start Holding Button(Event Player, Button(Secondary Fire)); Wait(Random Integer(3, 5) * 0.520, Ignore Condition); Stop Holding Button(Event Player, Button(Secondary Fire)); Else If(Event Player.a == Button(Ability 1)); Else If(Event Player.a == Button(Ability 2)); Press Button(Event Player, Button(Ability 2)); Else If(Event Player.a == Button(Ultimate)); Press Button(Event Player, Button(Ultimate)); End; Event Player.A = False; } } rule("AI Zenyatta General") { event { Ongoing - Each Player; Team 2; Zenyatta; } conditions { Is Game In Progress == True; Is Alive(Event Player) == True; Event Player.c == True; } actions { Event Player.F = Random Real(12, 16); Event Player.E = Event Player.F; Event Player.e = 0; Event Player.d = Event Player.e; Event Player.j = 1; Event Player.G = 90; Event Player.z = True; } } rule("AI Zenyatta Attack Primary") { event { Ongoing - Each Player; Team 2; Zenyatta; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is Using Ultimate(Event Player) == False; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 35; Event Player.L < 3; } actions { Event Player.a = Button(Primary Fire); Call Subroutine(F); Wait(0.400, Ignore Condition); Loop If Condition Is True; Stop Holding Button(Event Player, Button(Primary Fire)); } } rule("AI Zenyatta Attack Secondary") { event { Ongoing - Each Player; Team 2; Zenyatta; } conditions { Event Player.c == True; Event Player.n == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Is Using Ultimate(Event Player) == False; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) >= 10; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 12; Event Player.L < 2.5; Is Firing Primary(Event Player) == False; } actions { Event Player.a = Button(Secondary Fire); Call Subroutine(F); Loop If Condition Is True; } } rule("AI Zenyatta Orb of Discord") { event { Ongoing - Each Player; Team 2; Zenyatta; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Event Player.L < 1.25; Distance Between(Event Player, Players In Slot(Slot Of(Event Player), Team 1)) <= 75; Is Using Ability 2(Event Player) == False; Is Using Ultimate(Event Player) == False; } actions { Event Player.a = Button(Ability 2); Call Subroutine(F); } } rule("AI Zenyatta Transcendence") { event { Player Took Damage; Team 2; Zenyatta; } conditions { Event Player.c == True; Event Player.o == True; Event Player.A == False; Is Alive(Event Player) == True; Is Alive(Players In Slot(Slot Of(Event Player), Team 1)) == True; Ultimate Charge Percent(Event Player) == 100; Is Using Ultimate(Event Player) == False; Health(Event Player) < 50; } actions { Event Player.a = Button(Ultimate); Call Subroutine(F); } }