Untitled
unknown
plain_text
a year ago
183 kB
10
Indexable
settings { "main": { "description": "Uses Modded Mercy Parkour Editor\nOriginal Editor Code (by Peace): T6QQT\nModded Editor Code: J1ANR", "modeName": "Widow Parkour Rialto" }, "lobby": { "allowPlayersInQueue": true, "mapRotation": "paused", "enableMatchVoiceChat": true, "spectatorSlots": 12, "team1Slots": 8, "team2Slots": 0, "returnToLobby": "never", "swapTeamsAfterMatch": false }, "gamemodes": { "skirmish": { "enabledMaps": [ { "rialto": [ "evening" ] } ] }, "tdm": { "enabledMaps": [], "gameLengthInMn": 15, "scoreToWin": 200, "enableSelfInitiatedRespawn": false }, "general": { "enableHeroSwitching": false, "enableEnemyHealthBars": false, "gamemodeStartTrigger": "immediately", "heroLimit": "off", "enableKillCam": false, "enableKillFeed": false, "spawnHealthPacks": "disabled" } }, "heroes": { "allTeams": { "mei": { "enableAbility2": false }, "widowmaker": { "enableAbility2": false }, "enabledHeroes": [ "mercy", "widowmaker" ], "general": { "abilityCooldown%": 0, "enableInfiniteAmmo": true, "enableSpawningWithUlt": true } } }, "workshop": { "Land on arrival point도착은 착지가 필요하다": true, "New level crouch새 관문 앉기": true, "New level radius새 관문 반경": 1.6, "Skip Back only after clearing the level need to turn on the Skip Back": false } } #Global variables globalvar EditMode 0 globalvar NewCheckpointDefaultRadius 1 globalvar NewCheckpointDefaultCtrl 2 globalvar NewCheckpointDefaultMaxRefresh 3 globalvar BotGravity 4 globalvar Error 5 globalvar TeleportAnimation 6 globalvar Cheat 7 globalvar FinishedCheat 8 globalvar Sparkle 9 globalvar FinishedDisplaySparkle 10 globalvar Aura 11 globalvar FinishedDisplayAura 12 globalvar Dome 13 globalvar FinishedDisplayDome 14 globalvar Hexagram 15 globalvar FinishedDisplayHexagram 16 globalvar Checkpoint 17 globalvar ChooseOrbPosition 18 globalvar ChooseSpherePosition 19 globalvar ChooseCloudPosition 20 globalvar CurrentChooseOrb 21 globalvar CurrentChooseSphere 22 globalvar CurrentChooseCloud 23 globalvar TempArray 24 globalvar I 25 globalvar Once 26 globalvar NumberOfUsedEntity 27 globalvar Vips 28 globalvar CircleLoop 29 globalvar Chase 30 globalvar PlayersRecord 31 globalvar PlayersData 32 globalvar Top5 33 globalvar TipHudSpaceHolder 34 globalvar OnGround 35 globalvar CreatorAndCode 36 globalvar FirstPlaceTimeArray 37 globalvar Config 38 globalvar Top5Color 39 globalvar WorldTexts 40 globalvar BigMessages 41 globalvar SmallMessages 42 globalvar Tips 43 globalvar Debug 44 globalvar II 45 globalvar ShowHotKeyPlayers 46 globalvar EmoteSyncPlayers 47 globalvar PreviewPosition 48 globalvar CheckpointBPosition 49 globalvar TempVar 50 globalvar nullTimeArray 52 globalvar FirstPlaceTimeString 53 globalvar FirstPlaceTime 54 #Player variables playervar editMode 0 playervar checkpoint 1 playervar third 2 playervar freeMode 3 playervar spectatorMode 4 playervar cheat 5 playervar time 6 playervar mistake 7 playervar sphereEffects 8 playervar cloudEffects 9 playervar objectivePosition 10 playervar displayedCheckpoint 11 playervar jump 12 playervar bhop 13 playervar bestRecord 14 playervar playerData 15 playervar tempCurrentOrb 16 playervar chooseHero 17 playervar playerEffect 18 playervar choosePlayerEffect 19 playervar isSetAbilities 20 playervar voice 21 playervar bodySize 22 playervar barrierSize 23 playervar projectile 24 playervar playerColor 25 playervar playerNickname 26 playervar currentWorldText 27 playervar recentDamage 28 playervar currentBigMessage 29 playervar currentSmallMessage 30 playervar i 31 playervar dataIndex 32 playervar tp 33 playervar leaveOriginalCheckpoint 34 playervar finished 35 playervar checkpointA 36 playervar checkpointB 37 playervar currentCheckpoint 38 playervar currentCloud 39 playervar currentSphere 40 playervar currentOrb 41 playervar orbEffects 42 playervar orbIcons 43 playervar botIcons 44 playervar nearestOrb 45 playervar botEffects 46 playervar targetBot 47 playervar movementCollision 48 playervar resurrectTime 49 playervar resurrectNumber 50 playervar numberOfNeedResurrect 51 playervar ability2 52 playervar killTargetBot 53 playervar playerTittle 54 playervar segmentTimeString 55 playervar segmentTimeArray 56 playervar segmentVsPersonalBestArray 57 playervar segmentStart 58 playervar segmentEnd 59 playervar personalBestString 60 playervar segmentTimeArrayCounter 61 playervar personalBestArray 62 playervar vsPersonalBestRunningTally 63 playervar sumOfBestSegments 64 playervar bestSegmentsArray 65 playervar bestSegmentsArrayString 66 playervar editModeCharacterResetted 67 playervar trueBotHealth 68 #Subroutine names subroutine CreateNewEffect 0 subroutine EditChoosedEffect 1 subroutine CreatePlayerHUDAndEffects 2 subroutine InitializePlayerVariables 3 subroutine CreatePlayerTargetBot 4 subroutine SetCurrentAbilities 5 subroutine DisplayCurrentAbilityMsgs 6 subroutine CreateCurrentEffects 7 subroutine GetCurrentCheckpoint 8 subroutine EditPlayerData 9 subroutine TempSavePlayerData 10 subroutine CreateGlobalHUD 11 subroutine TeleportCurrentBot 12 subroutine CreateCurrentWorldText 13 subroutine DisplayCurrentCustomBigMsgs 14 subroutine DisplayCurrentCustomSmallMsgs 15 subroutine InitializeGlobalVariables 16 subroutine TeleportToCurrentCheckoint 17 subroutine ValidationPlayerData 18 subroutine ClearRedundantData 19 subroutine PlayDestroyMapEffect 20 subroutine CancelAbilityAndMomentum 21 subroutine EnableAllAbilities 22 subroutine ContinueTiming 23 subroutine ErrorWarningMessage 24 subroutine TeleportBotToRefreshPosition 25 subroutine SkipOrBackCheckpoint 26 subroutine ChooseCheckpoint 27 subroutine KillOrResurrectBot 28 #Activated extensions #!extension buffStatusEffects #!extension explosionSounds #!extension playMoreEffects #!extension spawnMoreDummyBots #!extension explosionSounds #!extension explosionSounds #!extension explosionSounds #!extension explosionSounds #!extension explosionSounds #!extension buffStatusEffects #!extension buffStatusEffects #!extension buffStatusEffects #!extension buffStatusEffects #!extension buffStatusEffects #!extension buffStatusEffects #!extension buffStatusEffects #!extension buffStatusEffects #!extension buffStatusEffects #!extension buffStatusEffects #!extension buffStatusEffects #!extension buffStatusEffects #!extension buffStatusEffects #!extension buffStatusEffects #!extension buffStatusEffects rule "Put the data here (Originally from peace's mercy parkour editor: T6QQT)": EditMode = true NewCheckpointDefaultRadius = 1.6 NewCheckpointDefaultCtrl = true NewCheckpointDefaultMaxRefresh = false BotGravity = false TeleportAnimation = true Cheat = true FinishedCheat = false Sparkle = false FinishedDisplaySparkle = true Aura = false FinishedDisplayAura = true Dome = false FinishedDisplayDome = true Hexagram = false FinishedDisplayHexagram = true Checkpoint = [[vect(39.899, 2.137, -31.787), 1.6, true, [vect(-2.325, 5.75, -42.028), false, true], false, false, [], [], []], [vect(29.118, 1.707, -45.74), 1.6, true, [vect(0.745, 5.75, -72.341), false, true], false, false, [], [], []], [vect(31.064, -0.25, -62.298), 1.6, true, [vect(1.264, 3.75, -33.549), false, true], false, false, [], [], []], [vect(20.245, 1.763, -64.02), 1.6, true, [false, false, true], false, false, [], [], []], [vect(39.188, 5.75, -85.876), 1.6, true, [vect(59.813, 4.75, -37.819), false, true], false, false, [], [], []], [vect(44.065, -0.296, -71.941), 1.6, true, [vect(44.174, -1.25, -15.646), false, true], false, false, [[vect(43.399, 5.346, -55.67), false, false, true]], [], []], [vect(43.353, 5.75, -46.675), 2.7, true, [vect(-1.008, -0.576, -42.659), false, true], false, false, [], [], []], [vect(39.937, 2.133, -31.823), 1.6, true, [vect(44.182, 4.74, -85.681), false, true], false, false, [], [], []], [vect(50.268, 4.75, -33.693), 3, true, [false, false, true], false, false, [[vect(53.99, 4.221, -41.115), false, false, true]], [], []], [vect(55.439, 1.849, -51.953), 1.6, true, [vect(74.99, 3.758, -16.596), false, true], false, false, [], [], []], [vect(62.896, 1.819, -60.743), 1.6, true, [vect(100.723, -2.031, -61.56), false, true], false, false, [[vect(70.589, 8.67, -46.245), false, false, true], [vect(79.51, 9.601, -44.764), false, false, true]], [], []], [vect(82.996, -0.4, -49.964), 1.6, true, [vect(90.021, -0.265, -15.766), false, true], false, false, [], [], []], [vect(92.522, 0.751, -49.838), 1.6, true, [false, false, true], false, false, [], [], []], [vect(107.322, -1.25, -28.767), 1.6, true, [vect(63.803, 4.75, -24.576), false, true], false, false, [], [], []], [vect(83.327, 3.75, -26.117), 1.6, true, [vect(42.223, 5.75, -65.785), false, true], false, false, [[vect(74.824, 13.763, -30.681), false, false, true]], [], []], [vect(67.487, 4.75, -31.682), 1.6, true, [vect(67.421, 0.752, -70.004), false, true], false, false, [], [], []], [vect(60.06, 4.75, -39.796), 1.6, true, [vect(15.23, 2.75, -40.32), false, true], false, false, [], [], []], [vect(50.08, 4.75, -33.633), 1.6, true, [vect(-10.45, 5.807, -76.312), false, true], false, false, [], [], []], [vect(30.949, -0.251, -52.465), 1.6, true, [vect(-1.609, -0.25, -60.167), false, true], false, false, [], [], []], [vect(31.684, -0.25, -74.852), 1.6, true, [false, false, true], false, false, [], [], []], [vect(11.009, -0.25, -56.534), 1.6, true, [vect(-1.968, 5.75, -39.549), false, true], false, false, [], [], []], [vect(-2.313, 5.75, -51.248), 1.6, true, [vect(-1.146, -0.585, -41.65), false, true], false, false, [], [], []], [vect(-22.318, -1.398, -47.979), 3.35, true, [vect(-19.382, -0.957, -81.586), false, true], false, false, [], [], []], [vect(-19.786, 1.413, -38.718), 1.6, true, [vect(-36.086, 4.75, -78.962), false, true], false, false, [], [], []], [vect(-29.753, -1.75, -50.215), 2.75, true, [vect(-36.905, 1.75, -106.941), false, true], false, false, [], [], []], [vect(-35.575, -1.4, -69.342), 1.6, true, [vect(-57.277, 1.6, -106.806), false, true], false, false, [], [], []], [vect(-36.083, 0.312, -88.774), 1.6, true, [vect(-69.384, 4.75, -139.55), false, true], false, false, [], [], []], [vect(-56.914, 1.6, -101.556), 3.3, true, [vect(-41.322, 4.75, -145.737), false, true], false, false, [], [], []], [vect(-57.796, 2.6, -122.161), 1.6, true, [false, false, true], false, false, [], [], []], [vect(80.414, 8.934, -44.684), 1.6, true, [false, false, true], false, false, [], [], []]] Once = true NumberOfUsedEntity = 79 Vips = [["Peace", "<Icon> Peace", Color.WHITE], ["冰丶柠檬", "<Icon> IceLemon", Color.WHITE], ["Sera", "", Color.WHITE], ["풋사과의그린애플", "", Color.GREEN], ["kroissant", "", Color.SKY_BLUE], ["", "", Color.WHITE], ["", "", Color.WHITE], ["", "", Color.WHITE]] PlayersRecord = [] PlayersData = [] Top5 = [] TipHudSpaceHolder = ["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"] OnGround = true CreatorAndCode = ["", ""] FirstPlaceTimeArray = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] Config = [rgb(34, 162, 192), Color.BLUE, "Come to me!", 1.6, Color.GREEN, Color.LIME_GREEN, rgb(167, 168, 189), rgb(167, 168, 189), 1, Color.ORANGE, Color.RED, "`s zen", rgba(251, 242, 227, 180), "Level Progress", Color.WHITE, "Free mode enabled", "Spectator mode enabled", "<Icon>Crouch Disabled", "Crouch Enabled", "No zen for this level", "", "BINGO", "You have to pick up the orb", "<Icon> Also refreshed!", "", Color.GREEN, "HighLights", Color.WHITE, rgb(158, 255, 187), "<Icon> set to unlimited", "<Icon> set to single", "Get bhop", "You have successfully resurrected the target", "Kill Zen then Collect all the orbs (if there are any).", 0, 0, 0, 0, 0, 0, Color.BLACK, Color.BLUE, Color.RED, Color.YELLOW, Color.PURPLE, Color.TURQUOISE, Color.TURQUOISE, Color.TURQUOISE, Color.RED, Color.RED, Color.RED, 0, 0, 0, 0, 0, 0, 0, 0, 0, vect(-999, -999, -999), [Color.VIOLET, 0, 10000], [Color.VIOLET, 0, 45]] Top5Color = [rgb(255, 215, 0), rgb(220, 223, 227), rgb(191, 173, 111), rgb(192, 192, 192), rgb(128, 138, 135)] BigMessages = [["", ""]] SmallMessages = [["", ""]] Debug = false ShowHotKeyPlayers = [] PreviewPosition = [] TempVar = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] nullTimeArray = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] rule "Creator and code (Originally from peace's mercy parkour editor: T6QQT)": #String, Fill in the creator CreatorAndCode[0] = "" #String, Fill in the code CreatorAndCode[1] = "" rule "HUD guidance text (Originally from peace's mercy parkour editor: T6QQT)": #Tips[0] = "Note: This map was made with 50% grapple sensitivity, so some levels might not work at other settings." #Tips[1] = "Zen can't be killed from the start circle, use the grapple to find a way to kill him then land in the goal circle." #Tips[2] = "If you need to kill a Zen it will have a blue arrow and outline, if you see another player's zen just ignore it." #Tips[3] = "While on the ground, if you grapple above yourself and hold jump after you cancel grapple, you will bhop." #Tips[6] = "If you walk off of a ledge without jumping you can bhop, giving you more time to connect your grapple." #Tips[8] = "You can also bhop while scoped in, this allows you to stay scoped and shoot during the bhop." #Tips[19] = "Sometimes using grapple at the edge of a floor you are underneath will cause you to get on top of it." rule "Map guidance text (Originally from peace's mercy parkour editor: T6QQT)": #index, Fill in the level; #[0] Fill in the text; #[1] Fill in the postion (If not filled in, it will be displayed at the next checkpoint); #[2] Fill in the text size; #[3] Fill in the text color #WorldTexts[38] = ["{0}\n{1}\n{2}".format(" Thanks for playing!", "Here are the codes for some other maps (easiest to hardest):", "{0}\n{1}\n{2}".format(" Chateau (Easy (3)): ZTEN5 by HiyaXD\n {0}".format("Junkertown (Normal (5)): 93TRD by HiyaXD\n {0}".format("Busan (Normal (6)): HYY7J by HiyaXD & CAROUSEL")), " Hanamura (Normal (6)): EQ188 by HiyaXD\n {0}".format("Circuit Royal (Normal (8)): ER5CW by HiyaXD, murriner, and jlh311"), " Hollywood (Hard (10)): KW3AD by HiyaXD")), vect(108.741, 12.465, 12.009), 2, Color.BLUE] rule "Big message text (Originally from peace's mercy parkour editor: T6QQT)": #index, Fill in the level; # string, Fill in the text (Multiple texts in one level) BigMessages[0] = ["", ""] rule "Small message text (Originally from peace's mercy parkour editor: T6QQT)": #index, Fill in the level; #String, Fill in the text (Multiple texts in one level) SmallMessages[0] = ["", ""] rule "Player title (Originally from peace's mercy parkour editor: T6QQT)": Vips = [["Peace", "{0} Peace".format(abilityIconString(Hero.MERCY, Button.ABILITY_1)), Color.WHITE], ["冰丶柠檬", "{0} IceLemon".format(abilityIconString(Hero.ANA, Button.ABILITY_1)), Color.WHITE], ["Sera", "", Color.WHITE], ["풋사과의그린애플", "", Color.GREEN], ["kroissant", "", Color.SKY_BLUE]] #[0] Fill in the player's nickname; #[1] Fill in the display text, If not fill in, The default is the player's nickname; #[2] Fill in the text color, White is a random color Vips[len(Vips)] = ["", "", Color.WHITE] Vips[len(Vips)] = ["", "", Color.WHITE] Vips[len(Vips)] = ["", "", Color.WHITE] rule "Personalized Configuration (Originally from peace's mercy parkour editor: T6QQT)": #Ring color of this level Config[0] = rgb(34, 162, 192) #Bot icon color (Crouch Enabled) Config[1] = Color.BLUE #Next checkpoint text Config[2] = "Come to me!" #Next checkpoint text size Config[3] = 1.6 #Next checkpoint text color Config[4] = Color.GREEN #Next checkpoint icon color Config[5] = Color.LIME_GREEN #Next checkpoint effect color Config[6] = rgb(167, 168, 189) #Next checkpoint ring color Config[7] = rgb(167, 168, 189) #Next Checkpoint effect: 0 = Light Shaft; 1 = sparkle; 2 = cloud; 3 = Harmful Aura Config[8] = 1 #TP checkpoint effect color Config[9] = Color.ORANGE #TP checkpoint ring color Config[10] = Color.RED #Bot name text Config[11] = "`s zen" #Creator, code text color Config[12] = rgba(251, 242, 227, 180) #Level Progress text Config[13] = "Level Progress" #Level Progress text color Config[14] = Color.WHITE #Free mode enabled text Config[15] = "Free mode enabled" #Spectator mode enabled text Config[16] = "Spectator mode enabled" #Crouch disabled text Config[17] = "{0}Crouch Disabled".format(iconString(Icon.NO)) #Crouch enabled text Config[18] = "Crouch Enabled" #No target bot text Config[19] = "No zen for this level" #Need get orb text #Display if not filled in: #This level has {number} orbs to pick up Config[20] = "" #Get orb text Config[21] = "BINGO" #Arrive but no get all the orbs Config[22] = "You have to pick up the orb" #Ga refresh text Config[23] = "{0} Also refreshed!".format(abilityIconString(Hero.MERCY, Button.ABILITY_1)) #Top5 text #Display if not filled in: #Today`s Top {number} Config[24] = "" #Top5 text color Config[25] = Color.GREEN #Other winner text Config[26] = "HighLights" #Other winner text color Config[27] = Color.WHITE #Other winner ranking color Config[28] = rgb(158, 255, 187) #Unlimited Ga text Config[29] = "{0} set to unlimited".format(abilityIconString(Hero.MERCY, Button.ABILITY_1)) #Single Ga text Config[30] = "{0} set to single".format(abilityIconString(Hero.MERCY, Button.ABILITY_1)) #Get bhop text Config[31] = "Get bhop" #Resurrection success text Config[32] = "You have successfully resurrected the target" #Arrive but no resurrect bot Config[33] = "Kill Zen then Collect all the orbs (if there are any)." #Obstacle sphere color Config[40] = Color.BLACK #Elastic cloud color Config[41] = Color.BLUE #Orb color(Plus) Config[42] = Color.RED #Orb icon color(Plus) Config[43] = Color.YELLOW #Orb color(Refresh) Config[44] = Color.PURPLE #Orb icon color(Refresh) Config[45] = Color.TURQUOISE #Bot teleport position icon color Config[46] = Color.TURQUOISE #Bot teleport position effect color Config[47] = Color.TURQUOISE #Orb icon color(Refresh, Need Resurrect) Config[48] = Color.RED #Bot teleport position icon color(Refresh, Need Resurrect) Config[49] = Color.RED #Bot teleport position effect color(Refresh, Need Resurrect) Config[50] = Color.RED #Bot default position Config[60] = vect(-999, -999, -999) #Dome personalization configuration: [0] color; [1] postion; [2] radius Config[61] = [Color.VIOLET, (nearestWalkablePosition(vect(500, -500, 500)) + nearestWalkablePosition(vect(-500, -500, -500))) / 2, 10000] #Six-man star personalized configuration: [0] color; [1] postion; [2] radius Config[62] = [Color.VIOLET, (nearestWalkablePosition(vect(500, -500, 500)) + nearestWalkablePosition(vect(-500, -500, -500))) / 2 + vect(0, 100, 0), 45] rule "Global initialization (Originally from peace's mercy parkour editor: T6QQT)": InitializeGlobalVariables() disableAnnouncer() disableScoring() disableMusic() disableGamemodeCompletion() if not Debug: disableInspector() CreateGlobalHUD() if getCurrentGamemode() != Gamemode.SKIRMISH: setMatchTime(1) pauseMatchTime() rule "Player initialization (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition eventPlayer.hasSpawned() == true #@Condition eventPlayer.isDummy() == false eventPlayer.disableGamemodeInWorldUi() getAllPlayers().disableNameplatesFor(getAllPlayers()) eventPlayer.enableDeathSpectateAllPlayers() eventPlayer.enableDeathSpectateTargetHud() if getCurrentGamemode() != Gamemode.SKIRMISH: eventPlayer.disableGamemodeHud() InitializePlayerVariables() ValidationPlayerData() eventPlayer.teleport(Checkpoint[eventPlayer.checkpoint][0] if Checkpoint[eventPlayer.checkpoint] else eventPlayer) CreatePlayerTargetBot() CreatePlayerHUDAndEffects() GetCurrentCheckpoint() if not eventPlayer.finished: SetCurrentAbilities() TeleportCurrentBot() DisplayCurrentAbilityMsgs() async(CreateCurrentEffects, AsyncBehavior.RESTART) CreateCurrentWorldText() async(DisplayCurrentCustomBigMsgs, AsyncBehavior.NOOP) async(DisplayCurrentCustomSmallMsgs, AsyncBehavior.NOOP) rule "Switch edit mode (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == true @Condition eventPlayer == hostPlayer @Condition eventPlayer.isHoldingButton(Button.INTERACT) == true @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == false @Condition eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == false @Condition eventPlayer.isHoldingButton(Button.ULTIMATE) == false @Condition eventPlayer.isHoldingButton(Button.JUMP) == false @Condition eventPlayer.isHoldingButton(Button.CROUCH) == false @Condition eventPlayer.isHoldingButton(Button.MELEE) == false @Condition eventPlayer.isHoldingButton(Button.RELOAD) == false waitUntil(not eventPlayer.isHoldingButton(Button.INTERACT), 9999) waitUntil(eventPlayer.isHoldingButton(Button.INTERACT), 0.3) if eventPlayer.isHoldingButton(Button.INTERACT): eventPlayer.editMode += -3 if eventPlayer.editMode == 4 else 1 eventPlayer.nearestOrb = null KillOrResurrectBot() smallMessage(getAllPlayers(), "Swtiched to {0} mode".format([null, "Checkpoint", "Orb", "Sphere", "Cloud"][eventPlayer.editMode])) playEffect(eventPlayer, DynamicEffect.RING_EXPLOSION_SOUND, null, eventPlayer, 100) rule "create / delete checkpoint, orb, sphere, cloud (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == true @Condition eventPlayer == hostPlayer @Condition eventPlayer.isHoldingButton(Button.INTERACT) == true @Condition (eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) or eventPlayer.isHoldingButton(Button.SECONDARY_FIRE)) == true @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == false @Condition eventPlayer.isHoldingButton(Button.ULTIMATE) == false @Condition eventPlayer.isHoldingButton(Button.JUMP) == false @Condition eventPlayer.isHoldingButton(Button.CROUCH) == false @Condition eventPlayer.isHoldingButton(Button.MELEE) == false @Condition eventPlayer.isHoldingButton(Button.RELOAD) == false if eventPlayer.isHoldingButton(Button.PRIMARY_FIRE): if eventPlayer.editMode == 1: #0, checkponit position #1, checkpoint radius #2, crouch #3, bot, default empty array(BotVector, NeedResurrect, RefreshAbility1) #4, unlimited ga #5, teleport, defalut false #6, orb, default empty array #7, sphere, default empty array #8, cloud, default empty array Checkpoint[len(Checkpoint)] = [eventPlayer.getPosition(), NewCheckpointDefaultRadius, NewCheckpointDefaultCtrl, [false, false, true], NewCheckpointDefaultMaxRefresh, false, [], [], []] eventPlayer.checkpoint = len(Checkpoint) - 1 GetCurrentCheckpoint() TeleportCurrentBot() async(CreateCurrentEffects, AsyncBehavior.RESTART) smallMessage(getAllPlayers(), "New level created") elif eventPlayer.editMode == 2: ErrorWarningMessage() if Error: Error = false return #0, orb position #1, bot position, default false eventPlayer.currentOrb[len(eventPlayer.currentOrb)] = [(eventPlayer.getPosition() + eventPlayer.getEyePosition()) / 2, false, false, true] CurrentChooseOrb = len(eventPlayer.currentOrb) - 1 ChooseOrbPosition = eventPlayer.currentOrb[CurrentChooseOrb][0] Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentOrb if i == 6 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() KillOrResurrectBot() CreateNewEffect() smallMessage(getAllPlayers(), "New orb created") elif eventPlayer.editMode == 3: ErrorWarningMessage() if Error: Error = false return #0, sphere position #1, sphere radius eventPlayer.currentSphere[len(eventPlayer.currentSphere)] = [(eventPlayer.getPosition() + eventPlayer.getEyePosition()) / 2, 4] CurrentChooseSphere = len(eventPlayer.currentSphere) - 1 ChooseSpherePosition = eventPlayer.currentSphere[CurrentChooseSphere][0] Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentSphere if i == 7 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() CreateNewEffect() smallMessage(getAllPlayers(), "New sphere created") else: ErrorWarningMessage() if Error: Error = false return #0, cloud position #1, cloud level eventPlayer.currentCloud[len(eventPlayer.currentCloud)] = [eventPlayer.getPosition(), 8] CurrentChooseCloud = len(eventPlayer.currentCloud) - 1 ChooseCloudPosition = eventPlayer.currentCloud[CurrentChooseCloud][0] Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentCloud if i == 8 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() CreateNewEffect() smallMessage(getAllPlayers(), "New cloud created") playEffect(eventPlayer, DynamicEffect.BUFF_IMPACT_SOUND, null, eventPlayer, 100) elif eventPlayer.getCurrentWeapon() == 2: if eventPlayer.editMode == 1: ErrorWarningMessage() if Error: Error = false return del Checkpoint[eventPlayer.checkpoint] if Checkpoint[0]: eventPlayer.teleport((Checkpoint[eventPlayer.checkpoint - 1])[0] if eventPlayer.checkpoint > 0 else Checkpoint[eventPlayer.checkpoint][0]) eventPlayer.checkpoint -= 1 if eventPlayer.checkpoint > 0 else 0 GetCurrentCheckpoint() if not eventPlayer.finished and not eventPlayer.freeMode: SetCurrentAbilities() KillOrResurrectBot() DisplayCurrentAbilityMsgs() async(CreateCurrentEffects, AsyncBehavior.RESTART) smallMessage(getAllPlayers(), "The selected checkpoint has been deleted") elif eventPlayer.editMode == 2: ErrorWarningMessage() if Error: Error = false return del eventPlayer.currentOrb[CurrentChooseOrb] destroyEffect(eventPlayer.orbEffects[CurrentChooseOrb]) del eventPlayer.orbEffects[CurrentChooseOrb] destroyIcon(eventPlayer.orbIcons[CurrentChooseOrb]) del eventPlayer.orbIcons[CurrentChooseOrb] destroyIcon(eventPlayer.botIcons[CurrentChooseOrb]) del eventPlayer.botIcons[CurrentChooseOrb] destroyEffect(eventPlayer.botEffects[CurrentChooseOrb]) del eventPlayer.botEffects[CurrentChooseOrb] CurrentChooseOrb -= 1 if CurrentChooseOrb > 0 else 0 ChooseOrbPosition = eventPlayer.currentOrb[CurrentChooseOrb][0] Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentOrb if i == 6 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() KillOrResurrectBot() smallMessage(getAllPlayers(), "The selected orb has been deleted") elif eventPlayer.editMode == 3: ErrorWarningMessage() if Error: Error = false return del eventPlayer.currentSphere[CurrentChooseSphere] destroyEffect(eventPlayer.sphereEffects[CurrentChooseSphere]) del eventPlayer.sphereEffects[CurrentChooseSphere] CurrentChooseSphere -= 1 if CurrentChooseSphere > 0 else 0 ChooseSpherePosition = eventPlayer.currentSphere[CurrentChooseSphere][0] Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentSphere if i == 7 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() smallMessage(getAllPlayers(), "The selected sphere has been deleted") else: ErrorWarningMessage() if Error: Error = false return del eventPlayer.currentCloud[CurrentChooseCloud] destroyEffect(eventPlayer.cloudEffects[CurrentChooseCloud]) del eventPlayer.cloudEffects[CurrentChooseCloud] CurrentChooseCloud -= 1 if CurrentChooseCloud > 0 else 0 ChooseCloudPosition = eventPlayer.currentCloud[CurrentChooseCloud][0] Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentCloud if i == 8 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() smallMessage(getAllPlayers(), "The selected cloud has been deleted") playEffect(eventPlayer, DynamicEffect.DEBUFF_IMPACT_SOUND, null, eventPlayer, 100) rule "Move checkpoint (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == true @Condition len(Checkpoint) > 0 @Condition eventPlayer == hostPlayer @Condition eventPlayer.editMode == 1 @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == true @Condition eventPlayer.isHoldingButton(Button.INTERACT) == true @Condition eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == false @Condition eventPlayer.isHoldingButton(Button.ULTIMATE) == false @Condition eventPlayer.isHoldingButton(Button.JUMP) == false @Condition eventPlayer.isHoldingButton(Button.CROUCH) == false @Condition eventPlayer.isHoldingButton(Button.MELEE) == false @Condition eventPlayer.isHoldingButton(Button.RELOAD) == false Checkpoint[eventPlayer.checkpoint] = [eventPlayer.getPosition() if i == 0 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() smallMessage(getAllPlayers(), "Moved checkpoint to player position") playEffect(eventPlayer, DynamicEffect.BUFF_EXPLOSION_SOUND, null, eventPlayer, 100) rule "Insert point (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == true @Condition eventPlayer.finished == false @Condition eventPlayer.editMode == 1 @Condition eventPlayer == hostPlayer @Condition eventPlayer.isHoldingButton(Button.MELEE) == true @Condition eventPlayer.isHoldingButton(Button.INTERACT) == true @Condition eventPlayer.isHoldingButton(Button.CROUCH) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == false @Condition eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.RELOAD) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == false @Condition eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.ULTIMATE) == false @Condition eventPlayer.isHoldingButton(Button.JUMP) == false TempArray = Checkpoint.slice(eventPlayer.checkpoint + 1, len(Checkpoint)) Checkpoint = Checkpoint.slice(0, eventPlayer.checkpoint + 1) Checkpoint[len(Checkpoint)] = [eventPlayer.getPosition(), NewCheckpointDefaultRadius, NewCheckpointDefaultCtrl, [false, false, true], NewCheckpointDefaultMaxRefresh, false, [], [], []] Checkpoint.append(TempArray) eventPlayer.checkpoint += 1 GetCurrentCheckpoint() TeleportCurrentBot() async(CreateCurrentEffects, AsyncBehavior.RESTART) wait(0.1) smallMessage(getAllPlayers(), "Already at level{0} and level{1} between Insertion point".format(eventPlayer.checkpoint - 1, eventPlayer.checkpoint)) playEffect(eventPlayer, DynamicEffect.BUFF_IMPACT_SOUND, null, eventPlayer, 100) rule "Create / Delete bot (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == true @Condition eventPlayer.editMode < 3 @Condition eventPlayer == hostPlayer @Condition eventPlayer.isHoldingButton(Button.MELEE) == true @Condition (eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) or eventPlayer.isHoldingButton(Button.SECONDARY_FIRE)) == true @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == false @Condition eventPlayer.isHoldingButton(Button.ULTIMATE) == false @Condition eventPlayer.isHoldingButton(Button.INTERACT) == false @Condition eventPlayer.isHoldingButton(Button.JUMP) == false @Condition eventPlayer.isHoldingButton(Button.RELOAD) == false ErrorWarningMessage() if Error: Error = false return if eventPlayer.editMode == 1: if eventPlayer.isHoldingButton(Button.PRIMARY_FIRE): Checkpoint[eventPlayer.checkpoint] = [[eventPlayer.getPosition(), player[1], player[2]] if i == 3 else player for player, i in eventPlayer.checkpointA] playEffect(eventPlayer, DynamicEffect.BUFF_IMPACT_SOUND, null, eventPlayer, 100) else: Checkpoint[eventPlayer.checkpoint] = [[false, false, player[2]] if i == 3 else player for player, i in eventPlayer.checkpointA] playEffect(eventPlayer, DynamicEffect.DEBUFF_IMPACT_SOUND, null, eventPlayer, 100) GetCurrentCheckpoint() if not eventPlayer.finished and not eventPlayer.freeMode: SetCurrentAbilities() KillOrResurrectBot() smallMessage(getAllPlayers(), "Created/Moved Bot" if eventPlayer.checkpointA[3] else "Bot Deleted") else: if eventPlayer.isHoldingButton(Button.PRIMARY_FIRE): eventPlayer.currentOrb[CurrentChooseOrb] = [eventPlayer.getPosition() if idx == 1 else i for i, idx in eventPlayer.currentOrb[CurrentChooseOrb]] Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentOrb if i == 6 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() KillOrResurrectBot() CreateNewEffect() smallMessage(getAllPlayers(), "Created/Moved Bot") playEffect(eventPlayer, DynamicEffect.BUFF_IMPACT_SOUND, null, eventPlayer, 100) else: eventPlayer.currentOrb[CurrentChooseOrb] = [false if idx == 1 or idx == 2 else i for i, idx in eventPlayer.currentOrb[CurrentChooseOrb]] Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentOrb if i == 6 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() KillOrResurrectBot() CreateNewEffect() smallMessage(getAllPlayers(), "Bot Deleted") playEffect(eventPlayer, DynamicEffect.DEBUFF_IMPACT_SOUND, null, eventPlayer, 100) rule "Choose checkpoint, orb, sphere, cloud (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == true @Condition len(Checkpoint) > 0 @Condition eventPlayer == hostPlayer @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == true @Condition (eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) or eventPlayer.isHoldingButton(Button.SECONDARY_FIRE)) == true @Condition eventPlayer.isHoldingButton(Button.MELEE) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == false @Condition eventPlayer.isHoldingButton(Button.ULTIMATE) == false @Condition eventPlayer.isHoldingButton(Button.INTERACT) == false @Condition eventPlayer.isHoldingButton(Button.JUMP) == false @Condition eventPlayer.isHoldingButton(Button.CROUCH) == false @Condition eventPlayer.isHoldingButton(Button.RELOAD) == false if eventPlayer.editMode == 1 and len(Checkpoint) > 1: ChooseCheckpoint() eventPlayer.teleport(Checkpoint[eventPlayer.checkpoint][0]) GetCurrentCheckpoint() if not eventPlayer.freeMode: SetCurrentAbilities() KillOrResurrectBot() async(CreateCurrentEffects, AsyncBehavior.RESTART) CreateCurrentWorldText() elif eventPlayer.editMode == 2 and len(eventPlayer.currentOrb) > 1: if eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) and CurrentChooseOrb < len(eventPlayer.currentOrb) - 1: CurrentChooseOrb += 1 ChooseOrbPosition = eventPlayer.currentOrb[CurrentChooseOrb][0] KillOrResurrectBot() elif eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) and CurrentChooseOrb > 0: CurrentChooseOrb -= 1 ChooseOrbPosition = eventPlayer.currentOrb[CurrentChooseOrb][0] KillOrResurrectBot() elif eventPlayer.editMode == 3 and len(eventPlayer.currentSphere) > 1: if eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) and CurrentChooseSphere < len(eventPlayer.currentSphere) - 1: CurrentChooseSphere += 1 ChooseSpherePosition = eventPlayer.currentSphere[CurrentChooseSphere][0] elif eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) and CurrentChooseSphere > 0: CurrentChooseSphere -= 1 ChooseSpherePosition = eventPlayer.currentSphere[CurrentChooseSphere][0] elif eventPlayer.editMode == 4 and len(eventPlayer.currentCloud) > 1: if eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) and CurrentChooseCloud < len(eventPlayer.currentCloud) - 1: CurrentChooseCloud += 1 ChooseCloudPosition = eventPlayer.currentCloud[CurrentChooseCloud][0] elif eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) and CurrentChooseCloud > 0: CurrentChooseCloud -= 1 ChooseCloudPosition = eventPlayer.currentCloud[CurrentChooseCloud][0] rule "Switch crouch,teleport, unlimited ga, need resurrect (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == true @Condition eventPlayer.editMode < 3 @Condition eventPlayer == hostPlayer @Condition eventPlayer.isHoldingButton(Button.INTERACT) == true @Condition (eventPlayer.isHoldingButton(Button.CROUCH) or eventPlayer.isHoldingButton(Button.JUMP) or eventPlayer.isHoldingButton(Button.ULTIMATE) or eventPlayer.isHoldingButton(Button.RELOAD) or eventPlayer.isHoldingButton(Button.ABILITY_1)) == true @Condition eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == false @Condition eventPlayer.isHoldingButton(Button.MELEE) == false ErrorWarningMessage() if Error: Error = false return if eventPlayer.editMode == 1: if eventPlayer.isHoldingButton(Button.CROUCH): Checkpoint[eventPlayer.checkpoint] = [not player if i == 2 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() eventPlayer.setCrouchEnabled(eventPlayer.checkpointA[2]) TeleportCurrentBot() wait(0.1) smallMessage(getAllPlayers(), "Selected level {0} crouch".format("Enable" if eventPlayer.checkpointA[2] else "Disable")) elif eventPlayer.isHoldingButton(Button.JUMP): Checkpoint[eventPlayer.checkpoint] = [not player if i == 5 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() wait(0.1) smallMessage(getAllPlayers(), "Selected level teleport {0}".format("Enabled ( Official game takes effect )" if eventPlayer.checkpointA[5] else "Disabled")) elif eventPlayer.isHoldingButton(Button.ULTIMATE): Checkpoint[eventPlayer.checkpoint] = [not player if i == 4 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() wait(0.1) smallMessage(getAllPlayers(), "Selected level {0} has been set to {1}".format(abilityIconString(Hero.MERCY, Button.ABILITY_1), "Infinite times" if eventPlayer.checkpointA[4] else "Single time")) elif eventPlayer.isHoldingButton(Button.RELOAD): Checkpoint[eventPlayer.checkpoint] = [[player[0], not player[1], player[2]] if i == 3 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() KillOrResurrectBot() eventPlayer.setAbility2Enabled(eventPlayer.checkpointA[3][1]) eventPlayer.ability2 = eventPlayer.checkpointA[3][1] wait(0.1) smallMessage(getAllPlayers(), "The selected level's mercy has enabled resurrection(interact+shift Turn off or on to refresh the ga after resurrection)" if eventPlayer.checkpointA[3][1] else "The selected level's mercy has disabled resurrection") elif eventPlayer.isHoldingButton(Button.ABILITY_1): Checkpoint[eventPlayer.checkpoint] = [[player[0], player[1], not player[2]] if i == 3 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() wait(0.1) smallMessage(getAllPlayers(), "The selected level resurrection has enabled refresh the ga" if eventPlayer.checkpointA[3][2] else "The selected level resurrection has disabled refresh the ga") playEffect(eventPlayer, DynamicEffect.BUFF_EXPLOSION_SOUND, null, eventPlayer, 100) else: if eventPlayer.isHoldingButton(Button.RELOAD): eventPlayer.currentOrb[CurrentChooseOrb] = [not i if idx == 2 else i for i, idx in eventPlayer.currentOrb[CurrentChooseOrb]] Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentOrb if i == 6 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() KillOrResurrectBot() CreateNewEffect() wait(0.1) smallMessage(getAllPlayers(), "The selected orb's mercy has enabled resurrection(interact+shift Turn off or on to refresh the ga after resurrection)" if eventPlayer.nearestOrb[2] else "The selected orb's mercy has disabled resurrection") elif eventPlayer.isHoldingButton(Button.ABILITY_1): eventPlayer.currentOrb[CurrentChooseOrb] = [not i if idx == 3 else i for i, idx in eventPlayer.currentOrb[CurrentChooseOrb]] Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentOrb if i == 6 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() KillOrResurrectBot() wait(0.1) smallMessage(getAllPlayers(), "The selected orb resurrection has enabled refresh the ga" if eventPlayer.nearestOrb[3] else "The selected orb resurrection has disabled refresh the ga") playEffect(eventPlayer, DynamicEffect.BUFF_EXPLOSION_SOUND, null, eventPlayer, 100) rule "Modify the size of the checkpoint / sphere / cloud (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == true @Condition eventPlayer.editMode != 2 @Condition eventPlayer == hostPlayer @Condition eventPlayer.isHoldingButton(Button.JUMP) == true @Condition (eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) or eventPlayer.isHoldingButton(Button.SECONDARY_FIRE)) == true @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == false @Condition eventPlayer.isHoldingButton(Button.CROUCH) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == false @Condition eventPlayer.isHoldingButton(Button.ULTIMATE) == false @Condition eventPlayer.isHoldingButton(Button.INTERACT) == false @Condition eventPlayer.isHoldingButton(Button.MELEE) == false @Condition eventPlayer.isHoldingButton(Button.RELOAD) == false if hostPlayer.isHoldingButton(Button.PRIMARY_FIRE): if eventPlayer.getCurrentWeapon() == 2 and eventPlayer.editMode == 1 and len(Checkpoint) > 0: Checkpoint[eventPlayer.checkpoint] = [player + 0.05 if i == 1 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() wait(0.1) if RULE_CONDITION: goto RULE_START smallMessage(getAllPlayers(), "Change the selected level radius to {0}".format(eventPlayer.checkpointA[1])) playEffect(eventPlayer, DynamicEffect.BUFF_EXPLOSION_SOUND, null, eventPlayer, 100) elif eventPlayer.editMode == 3 and len(eventPlayer.currentSphere) > 0: if Once: EditChoosedEffect() Once = false eventPlayer.currentSphere[CurrentChooseSphere] = [i + 0.1 if idx == 1 else i for i, idx in eventPlayer.currentSphere[CurrentChooseSphere]] wait(0.05) if RULE_CONDITION: goto RULE_START Once = true Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentSphere if i == 7 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() CreateNewEffect() playEffect(eventPlayer, DynamicEffect.BUFF_EXPLOSION_SOUND, null, eventPlayer, 100) elif eventPlayer.editMode == 4 and len(eventPlayer.currentCloud) > 0: eventPlayer.currentCloud[CurrentChooseCloud] = [i + 1 if idx == 1 else i for i, idx in eventPlayer.currentCloud[CurrentChooseCloud]] wait(0.1) if RULE_CONDITION: goto RULE_START Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentCloud if i == 8 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() playEffect(eventPlayer, DynamicEffect.BUFF_EXPLOSION_SOUND, null, eventPlayer, 100) elif hostPlayer.isHoldingButton(Button.SECONDARY_FIRE): if eventPlayer.getCurrentWeapon() == 2 and eventPlayer.editMode == 1 and len(Checkpoint) > 0 and eventPlayer.checkpointA[1] > 0.5: Checkpoint[eventPlayer.checkpoint] = [player - 0.05 if i == 1 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() wait(0.1) if RULE_CONDITION: goto RULE_START smallMessage(getAllPlayers(), "Change the selected level radius to {0}".format(eventPlayer.checkpointA[1])) playEffect(eventPlayer, DynamicEffect.BUFF_EXPLOSION_SOUND, null, eventPlayer, 100) elif eventPlayer.editMode == 3 and len(eventPlayer.currentSphere) > 0 and eventPlayer.currentSphere[CurrentChooseSphere][1] > 1: if Once: EditChoosedEffect() Once = false eventPlayer.currentSphere[CurrentChooseSphere] = [i - 0.1 if idx == 1 else i for i, idx in eventPlayer.currentSphere[CurrentChooseSphere]] wait(0.05) if RULE_CONDITION: goto RULE_START Once = true Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentSphere if i == 7 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() CreateNewEffect() playEffect(eventPlayer, DynamicEffect.BUFF_EXPLOSION_SOUND, null, eventPlayer, 100) elif eventPlayer.editMode == 4 and len(eventPlayer.currentCloud) > 0 and eventPlayer.currentCloud[CurrentChooseCloud][1] > 1: eventPlayer.currentCloud[CurrentChooseCloud] = [i - 1 if idx == 1 else i for i, idx in eventPlayer.currentCloud[CurrentChooseCloud]] wait(0.1) if RULE_CONDITION: goto RULE_START Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentCloud if i == 8 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() playEffect(eventPlayer, DynamicEffect.BUFF_EXPLOSION_SOUND, null, eventPlayer, 100) rule "Move Sphere / Cloud (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == true @Condition eventPlayer.editMode != 1 @Condition eventPlayer == hostPlayer @Condition eventPlayer.isHoldingButton(Button.RELOAD) == true @Condition (eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) or eventPlayer.isHoldingButton(Button.SECONDARY_FIRE)) == true @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == false @Condition eventPlayer.isHoldingButton(Button.ULTIMATE) == false @Condition eventPlayer.isHoldingButton(Button.INTERACT) == false @Condition eventPlayer.isHoldingButton(Button.JUMP) == false @Condition eventPlayer.isHoldingButton(Button.MELEE) == false @Condition eventPlayer.isHoldingButton(Button.CROUCH) == false if eventPlayer.isHoldingButton(Button.PRIMARY_FIRE): if eventPlayer.editMode == 2 and len(eventPlayer.currentOrb) > 0: if Once: EditChoosedEffect() Once = false chase(ChooseOrbPosition, eventPlayer.getEyePosition() + (eventPlayer.getFacingDirection() * (distance(eventPlayer.getPosition(), ChooseOrbPosition) + 10)), rate=1, ChaseReeval.DESTINATION_AND_RATE) wait() if RULE_CONDITION: goto RULE_START stopChasingVariable(ChooseOrbPosition) Once = true eventPlayer.currentOrb[CurrentChooseOrb] = [ChooseOrbPosition if idx == 0 else i for i, idx in eventPlayer.currentOrb[CurrentChooseOrb]] Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentOrb if i == 6 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() CreateNewEffect() playEffect(eventPlayer, DynamicEffect.BUFF_EXPLOSION_SOUND, null, eventPlayer, 100) elif eventPlayer.editMode == 3 and len(eventPlayer.currentSphere) > 0: if Once: EditChoosedEffect() Once = false chase(ChooseSpherePosition, eventPlayer.getEyePosition() + (eventPlayer.getFacingDirection() * (distance(eventPlayer.getPosition(), ChooseSpherePosition) + 10)), rate=1, ChaseReeval.DESTINATION_AND_RATE) wait() if RULE_CONDITION: goto RULE_START stopChasingVariable(ChooseSpherePosition) Once = true eventPlayer.currentSphere[CurrentChooseSphere] = [ChooseSpherePosition if idx == 0 else i for i, idx in eventPlayer.currentSphere[CurrentChooseSphere]] Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentSphere if i == 7 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() CreateNewEffect() playEffect(eventPlayer, DynamicEffect.BUFF_EXPLOSION_SOUND, null, eventPlayer, 100) elif eventPlayer.editMode == 4 and len(eventPlayer.currentCloud) > 0: if Once: EditChoosedEffect() Once = false chase(ChooseCloudPosition, eventPlayer.getEyePosition() + (eventPlayer.getFacingDirection() * (distance(eventPlayer.getPosition(), ChooseCloudPosition) + 10)), rate=1, ChaseReeval.DESTINATION_AND_RATE) wait() if RULE_CONDITION: goto RULE_START stopChasingVariable(ChooseCloudPosition) Once = true eventPlayer.currentCloud[CurrentChooseCloud] = [ChooseCloudPosition if idx == 0 else i for i, idx in eventPlayer.currentCloud[CurrentChooseCloud]] Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentCloud if i == 8 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() CreateNewEffect() playEffect(eventPlayer, DynamicEffect.BUFF_EXPLOSION_SOUND, null, eventPlayer, 100) elif eventPlayer.isHoldingButton(Button.SECONDARY_FIRE): if eventPlayer.editMode == 2 and len(eventPlayer.currentOrb) > 0: if Once: EditChoosedEffect() Once = false chase(ChooseOrbPosition, eventPlayer.getEyePosition() - (eventPlayer.getFacingDirection() * (distance(eventPlayer.getPosition(), ChooseOrbPosition) + 10)), rate=1, ChaseReeval.DESTINATION_AND_RATE) wait() if RULE_CONDITION: goto RULE_START stopChasingVariable(ChooseOrbPosition) Once = true eventPlayer.currentOrb[CurrentChooseOrb] = [ChooseOrbPosition if idx == 0 else i for i, idx in eventPlayer.currentOrb[CurrentChooseOrb]] Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentOrb if i == 6 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() CreateNewEffect() playEffect(eventPlayer, DynamicEffect.BUFF_EXPLOSION_SOUND, null, eventPlayer, 100) elif eventPlayer.editMode == 3 and len(eventPlayer.currentSphere) > 0: if Once: EditChoosedEffect() Once = false chase(ChooseSpherePosition, eventPlayer.getEyePosition() - (eventPlayer.getFacingDirection() * (distance(eventPlayer.getPosition(), ChooseSpherePosition) + 10)), rate=1, ChaseReeval.DESTINATION_AND_RATE) wait() if RULE_CONDITION: goto RULE_START stopChasingVariable(ChooseSpherePosition) Once = true eventPlayer.currentSphere[CurrentChooseSphere] = [ChooseSpherePosition if idx == 0 else i for i, idx in eventPlayer.currentSphere[CurrentChooseSphere]] Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentSphere if i == 7 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() CreateNewEffect() playEffect(eventPlayer, DynamicEffect.BUFF_EXPLOSION_SOUND, null, eventPlayer, 100) elif eventPlayer.editMode == 4 and len(eventPlayer.currentCloud) > 0: if Once: EditChoosedEffect() Once = false chase(ChooseCloudPosition, eventPlayer.getEyePosition() - (eventPlayer.getFacingDirection() * (distance(eventPlayer.getPosition(), ChooseCloudPosition) + 10)), rate=1, ChaseReeval.DESTINATION_AND_RATE) wait() if RULE_CONDITION: goto RULE_START stopChasingVariable(ChooseCloudPosition) Once = true eventPlayer.currentCloud[CurrentChooseCloud] = [ChooseCloudPosition if idx == 0 else i for i, idx in eventPlayer.currentCloud[CurrentChooseCloud]] Checkpoint[eventPlayer.checkpoint] = [eventPlayer.currentCloud if i == 8 else player for player, i in eventPlayer.checkpointA] GetCurrentCheckpoint() CreateNewEffect() playEffect(eventPlayer, DynamicEffect.BUFF_EXPLOSION_SOUND, null, eventPlayer, 100) rule "If the map is a 3CP map, group up can transfer to other map (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == true @Condition eventPlayer.isCommunicating(Comms.GROUP_UP) == true @Condition getCurrentMap() in [Map.BUSAN, Map.ILIOS, Map.LIJIANG_TOWER, Map.LIJIANG_TOWER, Map.NEPAL, Map.OASIS] == true eventPlayer.objectivePosition += -2 if eventPlayer.objectivePosition == 2 else 1 eventPlayer.teleport(nearestWalkablePosition(getObjectivePosition(eventPlayer.objectivePosition))) rule "Export data (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == true @Condition eventPlayer == hostPlayer #@Condition eventPlayer.isCommunicatingEmote() == true #@Condition eventPlayer.isHoldingButton(Button.INTERACT) == true @Condition eventPlayer.isHoldingButton(Button.ULTIMATE) == true @Condition eventPlayer.isHoldingButton(Button.CROUCH) == true @Condition eventPlayer.isHoldingButton(Button.MELEE) == true @Condition eventPlayer.isHoldingButton(Button.JUMP) == true ClearRedundantData() enableInspector() disableInspector() destroyAllInWorldTexts() destroyAllHudTexts() destroyAllIcons() destroyAllEffects() getAllPlayers().startCamera((getObjectivePosition(0 if getCurrentMap() in [Map.LIJIANG_TOWER, Map.LIJIANG_TOWER, Map.KINGS_ROW, Map.KINGS_ROW, Map.TEMPLE_OF_ANUBIS] else 2 if getCurrentMap() == Map.WATCHPOINT_GIBRALTAR else 1)) + vect(-25, 50, 25), (getObjectivePosition(0 if getCurrentMap() in [Map.LIJIANG_TOWER, Map.LIJIANG_TOWER, Map.KINGS_ROW, Map.KINGS_ROW, Map.TEMPLE_OF_ANUBIS] else 2 if getCurrentMap() == Map.WATCHPOINT_GIBRALTAR else 1)) + vect(0, 0, 0), 0) hudSubtext(hostPlayer, "\n\n\n\n\n\n\n", HudPosition.LEFT, -1, null, HudReeval.VISIBILITY, SpecVisibility.DEFAULT) hudText(hostPlayer, null, "Step", "1. ESC calls out the menu, select \"Open Workshop Inspector\" and open;", HudPosition.LEFT, 0, Color.BLACK, rgb(192, 196, 195), rgb(205, 209, 211), HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) hudSubtext(hostPlayer, "2. Change the variable target at the bottom right of the viewer from Auto to Global;", HudPosition.LEFT, 1, rgb(205, 209, 211), HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) hudSubtext(hostPlayer, "3. Click (X) directly below the viewer (the point data has been obtained on your clipboard at this time);", HudPosition.LEFT, 2, rgb(205, 209, 211), HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) hudSubtext(hostPlayer, "4. ESC calls up the menu, select \"Open Workshop Editor\" and open;", HudPosition.LEFT, 3, rgb(205, 209, 211), HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) hudSubtext(hostPlayer, "5. Click the + sign on the left to expand the data rules (Rule 1), Then click the yellow + (paste);", HudPosition.LEFT, 4, rgb(205, 209, 211), HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) hudSubtext(hostPlayer, "6. If the data is not 1, check whether the steps are wrong, and repeat the above operation;", HudPosition.LEFT, 5, rgb(205, 209, 211), HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) hudSubtext(hostPlayer, "7. ESC calls up the menu, selects \"Show Lobby\" and opens it. After entering the lobby interface,{0}".format("\n click on the \"Settings\" on the right, and find the orange \"Workshop Settings\" at the bottom left to open;"), HudPosition.LEFT, 6, rgb(205, 209, 211), HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) hudSubtext(hostPlayer, "8. Turn off the edit mode in the map workshop settings, click the link button on the right to share and copy this code;", HudPosition.LEFT, 7, rgb(205, 209, 211), HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) hudSubtext(hostPlayer, "9. ESC will go back to \"Settings\" and open \"Workshop\";", HudPosition.LEFT, 8, rgb(205, 209, 211), HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) hudSubtext(hostPlayer, "10. Expand the creator rules (Rule 2), and fill in the nickname and code as required;", HudPosition.LEFT, 9, rgb(205, 209, 211), HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) hudSubtext(hostPlayer, "11. ESC goes back to \"Settings\", share the code again and choose to upload to the existing code,{0}".format("\n and fill in the code copied before (End)."), HudPosition.LEFT, 10, rgb(205, 209, 211), HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) bigMessage(getAllPlayers(), "Data exported") rule "Arrival checkpoint (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition eventPlayer.finished == false @Condition eventPlayer.freeMode == false @Condition eventPlayer.checkpointB == true @Condition (eventPlayer.isOnGround() or eventPlayer.isOnGround() == OnGround) == true #@Condition eventPlayer.isDummy() == false @Condition distance(eventPlayer, eventPlayer.checkpointB[0]) <= eventPlayer.checkpointB[1] if len(eventPlayer.tempCurrentOrb) > 0: TeleportToCurrentCheckoint() smallMessage(eventPlayer, Config[22]) playEffect(eventPlayer, DynamicEffect.EXPLOSION_SOUND, null, eventPlayer, 100) return if eventPlayer.targetBot.isAlive(): TeleportToCurrentCheckoint() smallMessage(eventPlayer, Config[33]) playEffect(eventPlayer, DynamicEffect.EXPLOSION_SOUND, null, eventPlayer, 100) return eventPlayer.checkpoint += 1 if not eventPlayer.cheat: EditPlayerData() GetCurrentCheckpoint() SetCurrentAbilities() TeleportCurrentBot() DisplayCurrentAbilityMsgs() async(CreateCurrentEffects, AsyncBehavior.RESTART) CreateCurrentWorldText() async(DisplayCurrentCustomBigMsgs, AsyncBehavior.NOOP) async(DisplayCurrentCustomSmallMsgs, AsyncBehavior.NOOP) if not EditMode and not eventPlayer.cheat: eventPlayer.segmentEnd = eventPlayer.time eventPlayer.segmentTimeArray[eventPlayer.checkpoint - 1] = eventPlayer.segmentEnd - eventPlayer.segmentStart eventPlayer.segmentStart = eventPlayer.time if eventPlayer.checkpoint: if eventPlayer.personalBestArray: eventPlayer.segmentVsPersonalBestArray[eventPlayer.checkpoint - 1] = eventPlayer.segmentTimeArray[eventPlayer.checkpoint - 1] - (eventPlayer.personalBestArray[eventPlayer.checkpoint - 1]) eventPlayer.vsPersonalBestRunningTally = eventPlayer.segmentVsPersonalBestArray[eventPlayer.checkpoint - 1] + eventPlayer.vsPersonalBestRunningTally if eventPlayer.bestSegmentsArray[eventPlayer.checkpoint - 1]: if eventPlayer.segmentTimeArray[eventPlayer.checkpoint - 1] < eventPlayer.bestSegmentsArray[eventPlayer.checkpoint - 1]: eventPlayer.sumOfBestSegments -= eventPlayer.bestSegmentsArray[eventPlayer.checkpoint - 1] - (eventPlayer.segmentTimeArray[eventPlayer.checkpoint - 1]) eventPlayer.bestSegmentsArray[eventPlayer.checkpoint - 1] = eventPlayer.segmentTimeArray[eventPlayer.checkpoint - 1] eventPlayer.bestSegmentsArrayString = null else: eventPlayer.bestSegmentsArray[eventPlayer.checkpoint - 1] = eventPlayer.segmentTimeArray[eventPlayer.checkpoint - 1] eventPlayer.sumOfBestSegments += eventPlayer.segmentTimeArray[eventPlayer.checkpoint - 1] eventPlayer.bestSegmentsArrayString = null if eventPlayer.checkpoint < len(Checkpoint) - 1: if not EditMode and eventPlayer.checkpointA[5]: return playEffect(eventPlayer, DynamicEffect.BUFF_EXPLOSION_SOUND, null, eventPlayer, 100) else: stopChasingVariable(eventPlayer.time) if not EditMode and not eventPlayer.cheat: FirstPlaceTime = (eventPlayer.time if eventPlayer.time < FirstPlaceTime else FirstPlaceTime) if FirstPlaceTime else eventPlayer.time eventPlayer.bestRecord = eventPlayer.bestRecord if eventPlayer.bestRecord and eventPlayer.bestRecord < eventPlayer.time else eventPlayer.time PlayersRecord[PlayersRecord.index(eventPlayer.playerNickname) / 2 if PlayersRecord.index(eventPlayer.playerNickname) > -1 else len(PlayersRecord)] = ([player for player in PlayersRecord if player[0] == eventPlayer.playerNickname])[0] if PlayersRecord.index(eventPlayer.playerNickname) > -1 and (([player for player in PlayersRecord if player[0] == eventPlayer.playerNickname])[0])[1] < eventPlayer.time else [eventPlayer.playerNickname, eventPlayer.time] Top5 = sorted(PlayersRecord, lambda player: player[1]).slice(0, 5) bigMessage(getAllPlayers(), "{0} finished in {1} seconds!".format(eventPlayer.playerNickname, eventPlayer.time)) eventPlayer.personalBestArray = eventPlayer.segmentTimeArray if eventPlayer.time == eventPlayer.bestRecord else eventPlayer.personalBestArray FirstPlaceTimeArray = eventPlayer.segmentTimeArray if eventPlayer.time == FirstPlaceTime else FirstPlaceTimeArray playEffect(getAllPlayers(), DynamicEffect.RING_EXPLOSION_SOUND, null, eventPlayer, 200) if EditMode: return destroyDummy(eventPlayer.getTeam(), eventPlayer.getSlot() + getNumberOfSlots(Team.ALL)) rule "Set status for players (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Condition eventPlayer.hasStatusEffect(Status.PHASED_OUT) == false eventPlayer.disablePlayerCollision() #eventPlayer.setStatusEffect(null, Status.PHASED_OUT, 9999) if not eventPlayer.isDummy(): wait(2) eventPlayer.startScalingSize(eventPlayer.bodySize, true) eventPlayer.startModifyingVoicelinePitch(eventPlayer.voice, true) eventPlayer.startScalingBarriers(eventPlayer.barrierSize, true) else: eventPlayer.disableRespawn() eventPlayer.setKnockbackReceived(0) if BotGravity: wait() eventPlayer.setGravity(0) while true: if not eventPlayer.hasStatusEffect(Status.PHASED_OUT): eventPlayer.setStatusEffect(null, Status.PHASED_OUT, 9999) eventPlayer.startForcingButton(Button.JUMP) wait(1) rule "Resurrection after death (Originally from peace's mercy parkour editor: T6QQT)": @Event playerDied @Team 1 @Condition eventPlayer.spectatorMode == false #@Condition eventPlayer.isDummy() == false if not eventPlayer.finished and not eventPlayer.freeMode: eventPlayer.teleport(eventPlayer.checkpointA[0]) eventPlayer.mistake += 1 SetCurrentAbilities() if eventPlayer.currentOrb: TeleportCurrentBot() else: eventPlayer.teleport(nearestWalkablePosition(eventPlayer.getPosition())) eventPlayer.resurrect() rule "Kill bot (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition eventPlayer.numberOfNeedResurrect != 0 @Condition eventPlayer.targetBot.isAlive() == true @Condition (eventPlayer.killTargetBot and (eventPlayer.freeMode or eventPlayer.finished) or eventPlayer.ability2 and not eventPlayer.freeMode and not eventPlayer.finished) == true kill(eventPlayer.targetBot, null) rule "back point after landing (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition eventPlayer.finished == false @Condition eventPlayer.freeMode == false @Condition eventPlayer.isOnGround() == true #@Condition eventPlayer.isDummy() == false @Condition distance(eventPlayer, eventPlayer.checkpointA[0]) > eventPlayer.checkpointA[1] @Condition distance(eventPlayer, eventPlayer.checkpointB[0]) > eventPlayer.checkpointB[1] @Condition eventPlayer.checkpoint in [-1, -1, -1] == false TeleportToCurrentCheckoint() rule "Ga usage restrictions (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition eventPlayer.finished == false @Condition eventPlayer.freeMode == false @Condition eventPlayer.checkpointA[4] == false @Condition eventPlayer.isUsingAbility1() == true eventPlayer.currentCheckpoint = eventPlayer.checkpoint waitUntil(not eventPlayer.isUsingAbility1(), 9999) if not eventPlayer.freeMode and eventPlayer.checkpoint == eventPlayer.currentCheckpoint and (eventPlayer.isInAir() or distance(eventPlayer, eventPlayer.checkpointA[0]) > eventPlayer.checkpointA[1]): eventPlayer.setAbility1Enabled(false) /* rule "Refresh the ga after resurrecting the target (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Hero mercy @Condition eventPlayer.isUsingAbility2() == true eventPlayer.resurrectTime = 0 chase(eventPlayer.resurrectTime, 9999, rate=1, ChaseReeval.NONE) waitUntil(not eventPlayer.isUsingAbility2(), 1.75) stopChasingVariable(eventPlayer.resurrectTime) if not eventPlayer.finished and not eventPlayer.freeMode: eventPlayer.setAbility2Enabled(false) eventPlayer.ability2 = false if abs(eventPlayer.resurrectTime - 1.75) < 0.05: eventPlayer.resurrectNumber += 1 eventPlayer.targetBot.resurrect() smallMessage(eventPlayer, "{0}{1}".format(Config[32], "" if eventPlayer.checkpointA[4] or not eventPlayer.checkpointA[3][2] and not eventPlayer.nearestOrb or eventPlayer.nearestOrb and not eventPlayer.nearestOrb[3] else ", {0}".format(Config[23]))) if not eventPlayer.freeMode and not eventPlayer.finished and (eventPlayer.checkpointA[3][2] and not eventPlayer.nearestOrb or eventPlayer.nearestOrb[2] and eventPlayer.nearestOrb[3]): eventPlayer.setAbility1Enabled(true) */ rule "Back to point refresh ablities (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition eventPlayer.finished == false @Condition eventPlayer.freeMode == false @Condition eventPlayer.checkpointA == true @Condition eventPlayer.isOnGround() == true @Condition distance(eventPlayer, eventPlayer.checkpointA[0]) <= eventPlayer.checkpointA[1] if not eventPlayer.isSetAbilities: SetCurrentAbilities() if eventPlayer.currentOrb: TeleportCurrentBot() eventPlayer.isSetAbilities = false rule "Crouch disabled tips (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition eventPlayer.isHoldingButton(Button.CROUCH) == true @Condition eventPlayer.checkpointA[2] == false @Condition eventPlayer.finished == false @Condition eventPlayer.freeMode == false smallMessage(eventPlayer, Config[17]) wait(1) /* rule "Landing initialization jump and bhop (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Hero widowmaker @Condition eventPlayer.isOnGround() == true @Condition eventPlayer.isHoldingButton(Button.JUMP) == false eventPlayer.jump = 1 eventPlayer.bhop = 0 */ /* rule "Pressing the space will lose the jump (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Hero widowmaker @Condition eventPlayer.isHoldingButton(Button.JUMP) == true @Condition eventPlayer.jump == 1 eventPlayer.jump = 0 */ /* rule "Walking out of the platform or using the guardian angel without pressing the space will get a bhop and lose the jump (T6QQT)": @Event eachPlayer @Team 1 @Hero widowmaker @Condition eventPlayer.jump == 1 @Condition eventPlayer.isInAir() == true @Condition eventPlayer.isHoldingButton(Button.JUMP) == false eventPlayer.bhop = 1 eventPlayer.jump = 0 */ /* rule "Use bhop (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Hero widowmaker @Condition eventPlayer.bhop != 0 @Condition eventPlayer.isJumping() == true eventPlayer.bhop = 0 */ /* rule "Ga bhop for tips (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Hero widowmaker @Condition (eventPlayer.isOnGround() or eventPlayer.bhop >= 1) == true @Condition eventPlayer.isUsingAbility1() == true @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == true @Condition eventPlayer.isHoldingButton(Button.JUMP) == false @Condition eventPlayer.isJumping() == false waitUntil(eventPlayer.isHoldingButton(Button.JUMP) and not eventPlayer.isHoldingButton(Button.ULTIMATE), 9999) if not eventPlayer.isUsingAbility1() and not eventPlayer.isOnGround() and not eventPlayer.isJumping(): if eventPlayer.bhop != 2: smallMessage(eventPlayer, Config[31]) eventPlayer.bhop = 2 else: eventPlayer.bhop = 0 */ rule "3rd person (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition eventPlayer.isHoldingButton(Button.RELOAD) == true @Condition eventPlayer.isHoldingButton(Button.JUMP) == true @Condition eventPlayer.isHoldingButton(Button.MELEE) == false @Condition eventPlayer.isAlive() == true eventPlayer.third = not eventPlayer.third if eventPlayer.third: #by overclocking eventPlayer.startCamera(raycast(eventPlayer + (Vector.UP * (distance(eventPlayer.getEyePosition(), eventPlayer) + 0.5)), raycast(eventPlayer + (Vector.UP * (distance(eventPlayer.getEyePosition(), eventPlayer) + 0.5)), eventPlayer + (Vector.UP * (distance(eventPlayer.getEyePosition(), eventPlayer) + 0.5)) + eventPlayer.getFacingDirection() * -3, null, eventPlayer, true).getHitPosition(), null, eventPlayer, true).getHitPosition(), eventPlayer + eventPlayer.getFacingDirection() * 100, 100) else: eventPlayer.stopCamera() rule "Back to point (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition eventPlayer.checkpointA == true @Condition (eventPlayer.isHoldingButton(Button.ULTIMATE) or eventPlayer.isCommunicating(Comms.SPRAY_UP)) == true if not eventPlayer.finished and not eventPlayer.freeMode and eventPlayer.isHoldingButton(Button.ULTIMATE): TeleportToCurrentCheckoint() elif EditMode and eventPlayer.isCommunicating(Comms.SPRAY_UP): CancelAbilityAndMomentum() eventPlayer.teleport(eventPlayer.checkpointA[0]) if eventPlayer.currentOrb: TeleportCurrentBot() rule "Free mode (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition eventPlayer.finished == false @Condition eventPlayer.isHoldingButton(Button.RELOAD) == true @Condition eventPlayer.isHoldingButton(Button.MELEE) == true @Condition eventPlayer.isAlive() == true if not eventPlayer.freeMode: stopChasingVariable(eventPlayer.time) EnableAllAbilities() eventPlayer.freeMode = not eventPlayer.freeMode smallMessage(eventPlayer, Config[15]) else: if not eventPlayer.movementCollision: eventPlayer.enableEnvironmentCollision() eventPlayer.movementCollision = true eventPlayer.disallowButton(Button.PRIMARY_FIRE) eventPlayer.disallowButton(Button.SECONDARY_FIRE) CreatePlayerTargetBot() eventPlayer.setUltEnabled(false) TeleportToCurrentCheckoint() DisplayCurrentAbilityMsgs() if eventPlayer.isUsingUltimate(): kill(eventPlayer, null) eventPlayer.resurrect() eventPlayer.freeMode = not eventPlayer.freeMode ContinueTiming() eventPlayer.allowButton(Button.PRIMARY_FIRE) eventPlayer.allowButton(Button.SECONDARY_FIRE) rule "Spectator mode (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition eventPlayer.isHoldingButton(Button.ULTIMATE) == true @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == true @Condition eventPlayer.isHoldingButton(Button.INTERACT) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == false @Condition eventPlayer.isHoldingButton(Button.RELOAD) == false @Condition eventPlayer.isHoldingButton(Button.MELEE) == false @Condition eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.JUMP) == false @Condition eventPlayer.isHoldingButton(Button.CROUCH) == false eventPlayer.spectatorMode = not eventPlayer.spectatorMode if eventPlayer.spectatorMode: eventPlayer.disableRespawn() stopChasingVariable(eventPlayer.time) eventPlayer.tp[0] = eventPlayer.getPosition() kill(eventPlayer, null) wait() eventPlayer.teleport(vect(0, -999, 0)) smallMessage(eventPlayer, Config[16]) else: eventPlayer.enableRespawn() eventPlayer.teleport(nearestWalkablePosition(eventPlayer.getPosition())) eventPlayer.resurrect() ContinueTiming() /* rule "Preview point (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Condition eventPlayer.finished == false @Condition eventPlayer.freeMode == false @Condition eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) == true @Condition eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) == true @Condition eventPlayer.isHoldingButton(Button.ULTIMATE) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == false @Condition eventPlayer.isHoldingButton(Button.INTERACT) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == false @Condition eventPlayer.isHoldingButton(Button.RELOAD) == false @Condition eventPlayer.isHoldingButton(Button.MELEE) == false @Condition eventPlayer.isHoldingButton(Button.JUMP) == false @Condition eventPlayer.isHoldingButton(Button.CROUCH) == false @Condition distance(eventPlayer, eventPlayer.checkpointA[0]) <= eventPlayer.checkpointA[1] if EditMode or not PreviewPosition[eventPlayer.checkpoint]: CheckpointBPosition = eventPlayer.checkpointB[0] TempVar = [distance(CheckpointBPosition, raycast(CheckpointBPosition, CheckpointBPosition + angleToDirection(i * 30, -45) * 15, null, null, false).getHitPosition()) for _, i in TempVar] while abs(len(TempVar.exclude(sorted(TempVar).last())) - 5.5) < 5.5: TempVar = [TempVar[(i + 11) % 12] + player + (TempVar[(i + 1) % 12]) for player, i in TempVar] PreviewPosition[eventPlayer.checkpoint] = raycast(CheckpointBPosition, CheckpointBPosition + 15 * (angleToDirection(30 * TempVar.index(sorted(TempVar).last()), -45)), getAllPlayers(), eventPlayer, true).getHitPosition() eventPlayer.setFacing(directionTowards(PreviewPosition[eventPlayer.checkpoint], eventPlayer.checkpointB[0]), Relativity.TO_WORLD) eventPlayer.startCamera(raycast(eventPlayer.checkpointB[0], eventPlayer.checkpointB[0] + eventPlayer.getFacingDirection() * -15, null, null, false).getHitPosition(), eventPlayer.checkpointB[0], 30) stopChasingVariable(eventPlayer.time) eventPlayer.setPrimaryFireEnabled(false) eventPlayer.setSecondaryFireEnabled(false) eventPlayer.setStatusEffect(null, Status.ROOTED, 9999) smallMessage(eventPlayer, "release {0} / {1} to cancel preview".format(buttonString(Button.PRIMARY_FIRE), buttonString(Button.SECONDARY_FIRE))) waitUntil(not eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) or not eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) or eventPlayer.isHoldingButton(Button.ABILITY_2) or distance(eventPlayer, eventPlayer.checkpointA[0]) > eventPlayer.checkpointA[1], 9999) eventPlayer.clearStatusEffect(Status.ROOTED) eventPlayer.setPrimaryFireEnabled(true) eventPlayer.setSecondaryFireEnabled(true) eventPlayer.stopCamera() eventPlayer.setFacing(directionTowards(eventPlayer, eventPlayer.checkpointA[3][0] if eventPlayer.checkpointA[3][0] else eventPlayer.checkpointB[0]), Relativity.TO_WORLD) ContinueTiming() wait(0.25) */ rule "voice (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition (eventPlayer.isCommunicating(Comms.NEED_HELP) or eventPlayer.isCommunicating(Comms.SORRY) or eventPlayer.isCommunicating(Comms.THANKS)) == true if eventPlayer.isCommunicating(Comms.NEED_HELP): if eventPlayer.cheat: TempSavePlayerData() eventPlayer.checkpoint = eventPlayer.playerData[0] SkipOrBackCheckpoint() elif eventPlayer.freeMode or eventPlayer.finished: if eventPlayer.isCommunicating(Comms.SORRY): eventPlayer.tp[0] = eventPlayer.getPosition() kill(eventPlayer, null) wait() eventPlayer.teleport(eventPlayer.tp[0]) elif eventPlayer.numberOfNeedResurrect != 0: eventPlayer.killTargetBot = not eventPlayer.killTargetBot smallMessage(eventPlayer, "The target bot is set to always die" if eventPlayer.killTargetBot else "Setting canceled") wait(2) rule "set temporary checkpoint (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition (eventPlayer.freeMode or eventPlayer.finished) == true @Condition eventPlayer.editMode < 2 @Condition (eventPlayer.isHoldingButton(Button.ABILITY_2) or eventPlayer.isHoldingButton(Button.RELOAD)) == true @Condition eventPlayer.isHoldingButton(Button.ULTIMATE) == false @Condition eventPlayer.isHoldingButton(Button.INTERACT) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == false @Condition eventPlayer.isHoldingButton(Button.MELEE) == false @Condition eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.JUMP) == false @Condition eventPlayer.isHoldingButton(Button.CROUCH) == false if eventPlayer.isHoldingButton(Button.ABILITY_2): waitUntil(not eventPlayer.isHoldingButton(Button.ABILITY_2), 9999) waitUntil(eventPlayer.isHoldingButton(Button.ABILITY_2), 0.2) if eventPlayer.isHoldingButton(Button.ABILITY_2) and not eventPlayer.isHoldingButton(Button.JUMP) and not eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) and not eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) and (eventPlayer.freeMode or eventPlayer.finished): eventPlayer.tp[1] = false if eventPlayer.tp[1] else eventPlayer.getPosition() smallMessage(eventPlayer, "Temporary cp has been set, press {0} to use".format(buttonString(Button.RELOAD)) if eventPlayer.tp[1] else "Temporary cp deleted") elif eventPlayer.tp[1] and not eventPlayer.isHoldingButton(Button.MELEE) and not eventPlayer.isCommunicatingEmote(): CancelAbilityAndMomentum() eventPlayer.teleport(eventPlayer.tp[1]) rule "Obstacle Sphere effect (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition eventPlayer.currentSphere != [] @Condition eventPlayer.checkpointA == true @Condition (any([distance(eventPlayer, player[0]) <= player[1] or distance(eventPlayer.getEyePosition(), player[0]) <= player[1] for player in eventPlayer.currentSphere])) == true if not eventPlayer.finished and not eventPlayer.freeMode: eventPlayer.setStatusEffect(null, Status.BURNING, 0.15) TeleportToCurrentCheckoint() else: eventPlayer.setStatusEffect(null, Status.BURNING, 9999) waitUntil(all([distance(eventPlayer, player[0]) > player[1] and distance(eventPlayer.getEyePosition(), player[0]) > player[1] for player in eventPlayer.currentSphere]), 9999) eventPlayer.clearStatusEffect(Status.BURNING) rule "Elastic cloud effect (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition eventPlayer.currentCloud != [] @Condition eventPlayer.checkpointA == true @Condition (eventPlayer.getAltitude() >= 0.03 or eventPlayer.isOnGround()) == true @Condition any([distance(eventPlayer, player[0]) <= 1.5 for player in eventPlayer.currentCloud]) == true eventPlayer.applyImpulse(Vector.UP, (([player for player in eventPlayer.currentCloud if distance(eventPlayer, player[0]) <= 1.5])[0])[1], Relativity.TO_WORLD, Impulse.CANCEL_CONTRARY_MOTION) playEffect(eventPlayer, DynamicEffect.EXPLOSION_SOUND, null, eventPlayer, 80) rule "Player left match, destroy the player`s mercy (Originally from peace's mercy parkour editor: T6QQT)": @Event playerLeft @Team 1 if eventPlayer in ShowHotKeyPlayers: ShowHotKeyPlayers.remove(eventPlayer) for I in range(getNumberOfSlots(Team.ALL)): if not (entityExists(getPlayersInSlot(I, Team.1 if getNumberOfSlots(Team.1) > getNumberOfSlots(Team.2) else Team.2))): destroyDummy(Team.1 if getNumberOfSlots(Team.1) > getNumberOfSlots(Team.2) else Team.2, I + getNumberOfSlots(Team.ALL)) rule "Start timing after leaving the initial point (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == false @Condition eventPlayer.freeMode == false @Condition eventPlayer.cheat == false @Condition eventPlayer.leaveOriginalCheckpoint == false @Condition eventPlayer.checkpointB == true @Condition distance(eventPlayer, eventPlayer.checkpointA[0]) > eventPlayer.checkpointA[1] chase(eventPlayer.time, 16200, rate=1, ChaseReeval.NONE) eventPlayer.leaveOriginalCheckpoint = true if eventPlayer.currentCheckpoint == 0: eventPlayer.segmentStart = 0 rule "Return to the initial point to reset the timing (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == false @Condition eventPlayer.checkpoint == 0 @Condition eventPlayer.cheat == false @Condition distance(eventPlayer, Checkpoint[0][0]) <= Checkpoint[0][1] stopChasingVariable(eventPlayer.time) eventPlayer.time = 0 eventPlayer.mistake = 0 eventPlayer.leaveOriginalCheckpoint = false rule "Restart (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition eventPlayer.isHoldingButton(Button.CROUCH) == true @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == true @Condition eventPlayer.isHoldingButton(Button.MELEE) == false @Condition eventPlayer.isHoldingButton(Button.INTERACT) == true @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == false @Condition eventPlayer.isHoldingButton(Button.RELOAD) == false @Condition eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.ULTIMATE) == false @Condition eventPlayer.isHoldingButton(Button.JUMP) == false @Condition (not EditMode or eventPlayer != hostPlayer) == true @Condition (not eventPlayer.checkpointA[5] or eventPlayer.finished) == true playEffect(eventPlayer, DynamicEffect.TRACER_RECALL_DISAPPEAR_SOUND, null, eventPlayer, 200) destroyEffect(eventPlayer.playerEffect) eventPlayer.teleport(Checkpoint[0][0]) if eventPlayer.isUsingUltimate(): kill(eventPlayer, null) eventPlayer.resurrect() eventPlayer.startForcingHero(Hero.WIDOWMAKER) InitializePlayerVariables() EditPlayerData() CreatePlayerTargetBot() GetCurrentCheckpoint() eventPlayer.setUltEnabled(false) SetCurrentAbilities() TeleportCurrentBot() DisplayCurrentAbilityMsgs() async(CreateCurrentEffects, AsyncBehavior.RESTART) CreateCurrentWorldText() async(DisplayCurrentCustomBigMsgs, AsyncBehavior.NOOP) async(DisplayCurrentCustomSmallMsgs, AsyncBehavior.NOOP) playEffect(eventPlayer, DynamicEffect.TRACER_RECALL_REAPPEAR_SOUND, null, eventPlayer, 200) eventPlayer.segmentStart = 0 rule "Skip / Back (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == true @Condition eventPlayer.isHoldingButton(Button.MELEE) == true @Condition (eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) or eventPlayer.isHoldingButton(Button.SECONDARY_FIRE)) == true @Condition eventPlayer.isHoldingButton(Button.JUMP) == false @Condition eventPlayer.isHoldingButton(Button.CROUCH) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == false @Condition eventPlayer.isHoldingButton(Button.INTERACT) == false @Condition eventPlayer.isHoldingButton(Button.RELOAD) == false @Condition eventPlayer.isHoldingButton(Button.ULTIMATE) == false @Condition (EditMode or (Cheat and (not FinishedCheat or eventPlayer.bestRecord)) or eventPlayer.playerTittle) == true @Condition (not EditMode or eventPlayer != hostPlayer) == true @Condition len(Checkpoint) > 1 @Condition (not eventPlayer.checkpointA[5] or EditMode) == true TempSavePlayerData() ChooseCheckpoint() while not EditMode and Checkpoint[eventPlayer.checkpoint][5]: ChooseCheckpoint() SkipOrBackCheckpoint() rule "Show or hide shortcuts (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition eventPlayer.isHoldingButton(Button.INTERACT) == true @Condition eventPlayer.isHoldingButton(Button.CROUCH) == false @Condition eventPlayer.isHoldingButton(Button.MELEE) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == false @Condition eventPlayer.isHoldingButton(Button.RELOAD) == false @Condition eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == false @Condition eventPlayer.isHoldingButton(Button.ULTIMATE) == false @Condition eventPlayer.isHoldingButton(Button.JUMP) == false @Condition EditMode == false waitUntil(not eventPlayer.isHoldingButton(Button.INTERACT), 9999) waitUntil(eventPlayer.isHoldingButton(Button.INTERACT), 0.3) if eventPlayer.isHoldingButton(Button.INTERACT): if not eventPlayer in ShowHotKeyPlayers: ShowHotKeyPlayers.append(eventPlayer) else: ShowHotKeyPlayers.remove(eventPlayer) rule "Send hello or goodbye robot automatic reply (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition (eventPlayer.isCommunicating(Comms.HELLO) or eventPlayer.isCommunicating(Comms.GOODBYE)) == true if eventPlayer.isCommunicating(Comms.HELLO): wait(0.5) eventPlayer.targetBot.communicate(Comms.HELLO) else: wait(0.5) eventPlayer.targetBot.communicate(Comms.GOODBYE) rule "Teleport animation (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == false @Condition eventPlayer.finished == false @Condition eventPlayer.freeMode == false @Condition eventPlayer.checkpointA[5] == true @Condition eventPlayer.checkpointB == true @Condition distance(eventPlayer, eventPlayer.checkpointA[0]) <= eventPlayer.checkpointA[1] if TeleportAnimation: eventPlayer.startCamera(raycast(eventPlayer + Vector.UP, eventPlayer + eventPlayer.getFacingDirection() * -1 * 20, null, null, false).getHitPosition(), eventPlayer + Vector.UP, 0) eventPlayer.setStatusEffect(null, Status.ROOTED, 1.2) playEffect(eventPlayer, DynamicEffect.SOMBRA_TRANSLOCATOR_DISAPPEAR_SOUND, null, eventPlayer, 100) wait(0.3) eventPlayer.setInvisibility(Invis.ALL) wait(0.5) eventPlayer.teleport(eventPlayer.checkpointB[0]) wait(0.5) eventPlayer.setInvisibility(Invis.NONE) playEffect(eventPlayer, DynamicEffect.SOMBRA_TRANSLOCATOR_REAPPEAR_SOUND, null, eventPlayer, 100) wait(0.5) eventPlayer.stopCamera() eventPlayer.third = false else: wait() eventPlayer.teleport(eventPlayer.checkpointB[0]) rule "Sparks, dome, aura, hexagram effect (Originally from peace's mercy parkour editor: T6QQT)": @Condition EditMode == false @Condition (Dome or Aura or Sparkle or Hexagram) == true wait(0.25) if Dome: createEffect([player for player in getAllPlayers() if player.finished] if FinishedDisplayDome else getAllPlayers(), Effect.SPHERE, Config[61][0], Config[61][1], Config[61][2], EffectReeval.VISIBILITY) if Aura: for II in range(6): createEffect([player for player in getAllPlayers() if player.finished] if FinishedDisplayAura else getAllPlayers(), Effect.GOOD_AURA, [Color.AQUA, Color.LIME_GREEN, Color.GREEN, Color.YELLOW, Color.TURQUOISE, Color.SKY_BLUE][II], Config[61][1], 10000, EffectReeval.VISIBILITY) wait(0.25) if Sparkle: for II in range(0, 50, 2): createEffect([player for player in getAllPlayers() if player.finished] if FinishedDisplaySparkle else getAllPlayers(), Effect.SPARKLES, rgb(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)), Config[61][1] + (vect(0, -2 + II, 0)), 10000, EffectReeval.VISIBILITY) wait(0.25) if Hexagram: #by Crystal#54774 for II in range(6): createBeam([player for player in getAllPlayers() if player.finished] if FinishedDisplayHexagram else getAllPlayers(), Beam.BAD, Config[62][1] + vect(0, -0.8, 0) + ((angleToDirection(CircleLoop * 6 + evalOnce(II * 60), 0)) * Config[62][2]), Config[62][1] + vect(0, -0.8, 0) + ((angleToDirection(CircleLoop * 6 + (evalOnce(II * 60 + (240 if II < 2 else -120))), 0)) * Config[62][2]), Config[62][0], EffectReeval.VISIBILITY_POSITION_AND_RADIUS) wait(0.25) chase(CircleLoop, 360, rate=1, ChaseReeval.DESTINATION_AND_RATE) while CircleLoop < 361: waitUntil(CircleLoop >= 360, 360) CircleLoop = 0 rule "Bombing effect (Originally from peace's mercy parkour editor: T6QQT)": @Condition getTotalTimeElapsed() > 16140 smallMessage(getAllPlayers(), "Countdown: 60 seconds") if EditMode: return wait(50) bigMessage(getAllPlayers(), "— 10 —") wait(1) bigMessage(getAllPlayers(), "— 9 —") wait(1) bigMessage(getAllPlayers(), "— 8 —") wait(1) bigMessage(getAllPlayers(), "— 7 —") wait(1) bigMessage(getAllPlayers(), "— 6 —") wait(1) bigMessage(getAllPlayers(), "— 5 —") wait(1) bigMessage(getAllPlayers(), "— 4 —") wait(1) bigMessage(getAllPlayers(), "— 3 —") getAllPlayers().communicate(Comms.COUNTDOWN) wait(1) bigMessage(getAllPlayers(), "— 2 —") wait(1) bigMessage(getAllPlayers(), "— 1 —") wait(1) bigMessage(getAllPlayers(), "Boom!") getAllPlayers().disableHeroHud() getAllPlayers().disableGamemodeHud() getAllPlayers().disableScoreboard() getAllPlayers().disableGamemodeInWorldUi() getAllPlayers().disableNameplatesFor(getAllPlayers()) destroyAllEffects() destroyAllIcons() destroyAllHudTexts() destroyAllInWorldTexts() destroyAllDummies() wait(0.16) getAllPlayers().teleport(vect(0, 500, 0)) getAllPlayers().setInvisibility(Invis.ALL) getAllPlayers().setGravity(0) getAllPlayers().resurrect() getAllPlayers().startCamera((nearestWalkablePosition(vect(999, 999, 999)) + nearestWalkablePosition(vect(-999, -999, -999))) / 2 + angleToDirection(getMatchTime() * 7.5, -30) * 200, (nearestWalkablePosition(vect(999, 999, 999)) + nearestWalkablePosition(vect(-999, -999, -999))) / 2, 5) PlayDestroyMapEffect() wait(1) restartMatch() rule "Finished setting (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition eventPlayer.checkpoint >= len(Checkpoint) - 1 #@Condition eventPlayer.isDummy() == false eventPlayer.finished = true EnableAllAbilities() rule "Not finished setting (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Condition eventPlayer.checkpoint < len(Checkpoint) - 1 #@Condition eventPlayer.isDummy() == false eventPlayer.finished = false if not eventPlayer.freeMode: eventPlayer.setUltEnabled(false) if not eventPlayer.movementCollision: eventPlayer.enableEnvironmentCollision() eventPlayer.movementCollision = true rule "Set Ultimate Charge 100% (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition (eventPlayer.finished or eventPlayer.freeMode) == true @Condition eventPlayer.getUltCharge() < 100 #@Condition eventPlayer.isDummy() == false eventPlayer.setUltCharge(100) rule "Hold R, go through the wall (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition (eventPlayer.finished or eventPlayer.freeMode) == true @Condition eventPlayer.isHoldingButton(Button.RELOAD) == true @Condition eventPlayer.isHoldingButton(Button.INTERACT) == false @Condition eventPlayer.isHoldingButton(Button.CROUCH) == false @Condition eventPlayer.isHoldingButton(Button.MELEE) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == false @Condition eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == false @Condition eventPlayer.isHoldingButton(Button.ULTIMATE) == false @Condition eventPlayer.isHoldingButton(Button.JUMP) == false wait(1, Wait.ABORT_WHEN_FALSE) eventPlayer.movementCollision = not eventPlayer.movementCollision if eventPlayer.movementCollision: eventPlayer.enableEnvironmentCollision() smallMessage(eventPlayer, "Enable Movement Collision With Environment") else: eventPlayer.disableEnvironmentCollision(false) smallMessage(eventPlayer, "Disable Movement Collision With Environment") rule "Interact, teleporting players (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition eventPlayer.isHoldingButton(Button.INTERACT) == true @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == false @Condition eventPlayer.isHoldingButton(Button.MELEE) == false @Condition eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == false @Condition eventPlayer.isHoldingButton(Button.ULTIMATE) == false @Condition eventPlayer.isHoldingButton(Button.JUMP) == false @Condition eventPlayer.isHoldingButton(Button.CROUCH) == false @Condition (eventPlayer.finished or eventPlayer.freeMode) == true @Condition eventPlayer.getPlayerClosestToReticle(Team.ALL).isDummy() == false @Condition eventPlayer.isInViewAngle(eventPlayer.getPlayerClosestToReticle(Team.ALL), 10) == true @Condition (not EditMode or eventPlayer != hostPlayer) == true @Condition len(Checkpoint) > 1 @Condition eventPlayer.checkpointA[5] == false @Condition (getCurrentMap() != Map.BUSAN or distance(eventPlayer, vect(134, 17, -125)) > 5) == true if eventPlayer.isHoldingButton(Button.RELOAD) and not eventPlayer.getPlayerClosestToReticle(Team.ALL).checkpointA[5] and (EditMode or (Cheat and (not FinishedCheat or eventPlayer.bestRecord)) or eventPlayer.playerTittle): TempSavePlayerData() eventPlayer.checkpoint = eventPlayer.getPlayerClosestToReticle(Team.ALL).checkpoint SkipOrBackCheckpoint() else: eventPlayer.teleport(eventPlayer.getPlayerClosestToReticle(Team.ALL)) rule "Primary / Secondary Fire, select hero (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == false @Condition eventPlayer.finished == true @Condition (eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) or eventPlayer.isHoldingButton(Button.SECONDARY_FIRE)) == true if eventPlayer.isHoldingButton(Button.PRIMARY_FIRE): eventPlayer.chooseHero += 1 - len(getAllHeroes()) if eventPlayer.chooseHero == len(getAllHeroes()) - 1 else 1 elif eventPlayer.isHoldingButton(Button.SECONDARY_FIRE): eventPlayer.chooseHero -= 1 - len(getAllHeroes()) if eventPlayer.chooseHero == 0 else 1 eventPlayer.preloadHero(getAllHeroes()[eventPlayer.chooseHero]) /* rule "\"I need healing\", change hero (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == false @Condition eventPlayer.finished == true @Condition eventPlayer.isCommunicating(Comms.NEED_HEALING) == true playEffect(getPlayers(eventPlayer.getTeam()), DynamicEffect.BRIGITTE_REPAIR_PACK_ARMOR_SOUND, null, eventPlayer, 100) wait(0.3) eventPlayer.startForcingHero(getAllHeroes()[eventPlayer.chooseHero]) eventPlayer.playerColor = (rgb(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) if eventPlayer.playerTittle[2] == Color.WHITE else eventPlayer.playerTittle[2]) if eventPlayer.playerTittle else Color.WHITE */ rule "emote sync within the radius (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == false @Condition eventPlayer.isCommunicatingEmote() == true @Condition eventPlayer.isHoldingButton(Button.RELOAD) == true @Condition (eventPlayer.finished or eventPlayer.freeMode) == true EmoteSyncPlayers = [player for player in getPlayersInRadius(eventPlayer, 15, Team.ALL, LosCheck.OFF) if player.isCommunicatingEmote() and player.getCurrentHero() == eventPlayer.getCurrentHero()] EmoteSyncPlayers = [[player, 0 if player.isCommunicating(Comms.EMOTE_UP) else 1 if player.isCommunicating(Comms.EMOTE_DOWN) else 2 if player.isCommunicating(Comms.EMOTE_LEFT) else 3] for player in EmoteSyncPlayers] [player[0] for player in EmoteSyncPlayers].cancelPrimaryAction() wait(0.2) for I in range(len(EmoteSyncPlayers)): if EmoteSyncPlayers[I][1] == 0: EmoteSyncPlayers[I][0].communicate(Comms.EMOTE_UP) elif EmoteSyncPlayers[I][1] == 1: EmoteSyncPlayers[I][0].communicate(Comms.EMOTE_DOWN) elif EmoteSyncPlayers[I][1] == 2: EmoteSyncPlayers[I][0].communicate(Comms.EMOTE_LEFT) elif EmoteSyncPlayers[I][1] == 3: EmoteSyncPlayers[I][0].communicate(Comms.EMOTE_RIGHT) /* rule "Crouch+Ablitiy2+Primary/Secondary/Melee, control voice (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == false @Condition eventPlayer.finished == true @Condition eventPlayer.isHoldingButton(Button.CROUCH) == true @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == true @Condition (eventPlayer.isHoldingButton(Button.MELEE) or eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) or eventPlayer.isHoldingButton(Button.SECONDARY_FIRE)) == true if eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) and eventPlayer.voice < 1.5: eventPlayer.voice += 0.01 wait() wait(0.5, Wait.ABORT_WHEN_FALSE) while eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) and eventPlayer.voice < 1.5: eventPlayer.voice += 0.01 wait() wait(0.03, Wait.ABORT_WHEN_FALSE) elif eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) and eventPlayer.voice > 0.5: eventPlayer.voice -= 0.01 wait() wait(0.5, Wait.ABORT_WHEN_FALSE) while eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) and eventPlayer.voice > 0.5: eventPlayer.voice -= 0.01 wait() wait(0.03, Wait.ABORT_WHEN_FALSE) elif eventPlayer.isHoldingButton(Button.MELEE): smallMessage(eventPlayer, "Return the default pitch after pressing for 2 seconds") wait(2, Wait.ABORT_WHEN_FALSE) eventPlayer.voice = 1 smallMessage(eventPlayer, "Default pitch restored") */ /* rule "Jump+Ablitiy2+Primary/Secondary/Melee, control body size (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == false @Condition eventPlayer.finished == true @Condition eventPlayer.isHoldingButton(Button.JUMP) == true @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == true @Condition (eventPlayer.isHoldingButton(Button.MELEE) or eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) or eventPlayer.isHoldingButton(Button.SECONDARY_FIRE)) == true if eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) and eventPlayer.bodySize < 7: eventPlayer.bodySize += 0.01 wait() wait(0.5, Wait.ABORT_WHEN_FALSE) while eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) and eventPlayer.bodySize < 7: eventPlayer.bodySize += 0.01 wait() wait(0.03, Wait.ABORT_WHEN_FALSE) elif eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) and eventPlayer.bodySize > 0.1: eventPlayer.bodySize -= 0.01 wait() wait(0.5, Wait.ABORT_WHEN_FALSE) while eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) and eventPlayer.bodySize > 0.1: eventPlayer.bodySize -= 0.01 wait() wait(0.03, Wait.ABORT_WHEN_FALSE) elif eventPlayer.isHoldingButton(Button.MELEE): smallMessage(eventPlayer, "Return to the default body size after holding for 2 seconds") wait(2, Wait.ABORT_WHEN_FALSE) eventPlayer.bodySize = 1 smallMessage(eventPlayer, "Default Body size restored") */ /* rule "Crouch+Ability1+Primary/Secondary/melee, control the trajectory (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == false @Condition eventPlayer.finished == true @Condition eventPlayer.isHoldingButton(Button.CROUCH) == true @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == true @Condition (eventPlayer.isHoldingButton(Button.MELEE) or eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) or eventPlayer.isHoldingButton(Button.SECONDARY_FIRE)) == true if eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) and eventPlayer.projectile < 500: eventPlayer.projectile += 1 wait() eventPlayer.setProjectileSpeed(eventPlayer.projectile) eventPlayer.setProjectileGravity(eventPlayer.projectile) wait(0.5, Wait.ABORT_WHEN_FALSE) while eventPlayer.isHoldingButton(Button.CROUCH) and eventPlayer.isHoldingButton(Button.ABILITY_1) and eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) and eventPlayer.projectile < 500: eventPlayer.projectile += 1 wait(0.05) elif eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) and eventPlayer.projectile > 0: eventPlayer.projectile -= 1 wait() eventPlayer.setProjectileSpeed(eventPlayer.projectile) eventPlayer.setProjectileGravity(eventPlayer.projectile) wait(0.5, Wait.ABORT_WHEN_FALSE) while eventPlayer.isHoldingButton(Button.CROUCH) and eventPlayer.isHoldingButton(Button.ABILITY_1) and eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) and eventPlayer.projectile > 0: eventPlayer.projectile -= 1 wait(0.05) elif eventPlayer.isHoldingButton(Button.MELEE): smallMessage(eventPlayer, "Return to the default trajectory after holding for 2 seconds") wait(2, Wait.ABORT_WHEN_FALSE) eventPlayer.projectile = 100 smallMessage(eventPlayer, "Default trajectory restored") eventPlayer.setProjectileSpeed(eventPlayer.projectile) eventPlayer.setProjectileGravity(eventPlayer.projectile) */ /* rule "Jump+Ability1+Primary/Secondary/Melee, control barrier (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == false @Condition eventPlayer.finished == true @Condition eventPlayer.isHoldingButton(Button.JUMP) == true @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == true @Condition (eventPlayer.isHoldingButton(Button.MELEE) or eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) or eventPlayer.isHoldingButton(Button.SECONDARY_FIRE)) == true if eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) and eventPlayer.barrierSize < 7: eventPlayer.barrierSize += 0.01 wait() wait(0.5, Wait.ABORT_WHEN_FALSE) while eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) and eventPlayer.barrierSize < 7: eventPlayer.barrierSize += 0.01 wait() wait(0.03, Wait.ABORT_WHEN_FALSE) elif eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) and eventPlayer.barrierSize > 0.1: eventPlayer.barrierSize -= 0.01 wait() wait(0.5, Wait.ABORT_WHEN_FALSE) while eventPlayer.isHoldingButton(Button.SECONDARY_FIRE) and eventPlayer.barrierSize > 0.1: eventPlayer.barrierSize -= 0.01 wait() wait(0.03, Wait.ABORT_WHEN_FALSE) elif eventPlayer.isHoldingButton(Button.MELEE): smallMessage(eventPlayer, "Return to the default barrier after holding for 2 seconds") wait(2, Wait.ABORT_WHEN_FALSE) eventPlayer.barrierSize = 1 smallMessage(eventPlayer, "Default barrier restored") */ rule "Voice Line Up, Swap effect (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == false @Condition eventPlayer.finished == true @Condition eventPlayer.isCommunicating(Comms.VOICE_LINE_UP) == true destroyEffect(eventPlayer.playerEffect if eventPlayer.playerEffect else null) eventPlayer.choosePlayerEffect = random.randint(0, 21) if eventPlayer.choosePlayerEffect == 0: createEffect(getAllPlayers(), Effect.SPHERE, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 1: createEffect(getAllPlayers(), Effect.LIGHT_SHAFT, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 2: createEffect(getAllPlayers(), Effect.ORB, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 3: createEffect(getAllPlayers(), Effect.RING, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 4: createEffect(getAllPlayers(), Effect.CLOUD, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 5: createEffect(getAllPlayers(), Effect.SPARKLES, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 6: createEffect(getAllPlayers(), Effect.GOOD_AURA, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 7: createEffect(getAllPlayers(), Effect.BAD_AURA, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 8: createEffect(getAllPlayers(), Effect.HEAL_TARGET_ACTIVE, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 9: createEffect(getAllPlayers(), Effect.HEAL_TARGET, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 10: createEffect(getAllPlayers(), Effect.ANA_BIOTIC_GRENADE_INCREASED_HEALING, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 11: createEffect(getAllPlayers(), Effect.ANA_NANO_BOOSTED, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 12: createEffect(getAllPlayers(), Effect.BAPTISTE_IMMORTALITY_FIELD_PROTECTED, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 13: createEffect(getAllPlayers(), Effect.ECHO_CLONING, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 14: createEffect(getAllPlayers(), Effect.LUCIO_SOUND_BARRIER_PROTECTED, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 15: createEffect(getAllPlayers(), Effect.MERCY_DAMAGE_BOOSTED, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 16: createEffect(getAllPlayers(), Effect.REAPER_WRAITH_FORM, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 17: createEffect(getAllPlayers(), Effect.SOLDIER_SPRINTING, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 18: createEffect(getAllPlayers(), Effect.TORBJORN_OVERLOADING, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 19: createEffect(getAllPlayers(), Effect.WINSTON_PRIMAL_RAGE, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 20: createEffect(getAllPlayers(), Effect.WRECKING_BALL_ADAPTIVE_SHIELD_TARGET, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif eventPlayer.choosePlayerEffect == 21: createEffect(getAllPlayers(), Effect.WRECKING_BALL_PILEDRIVER_FIRE, eventPlayer.playerColor, eventPlayer, eventPlayer.bodySize, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) eventPlayer.playerEffect = getLastCreatedEntity() rule "Fast melee (Originally from peace's mercy parkour editor: T6QQT)": @Event eachPlayer @Team 1 @Condition EditMode == false @Condition (eventPlayer.finished or eventPlayer.freeMode) == true @Condition eventPlayer.getCurrentHero() != Hero.REINHARDT @Condition eventPlayer.getCurrentHero() != Hero.BRIGITTE @Condition eventPlayer.isHoldingButton(Button.MELEE) == true @Condition eventPlayer.isHoldingButton(Button.RELOAD) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_1) == false @Condition eventPlayer.isHoldingButton(Button.ABILITY_2) == false wait(0.5, Wait.ABORT_WHEN_FALSE) eventPlayer.disallowButton(Button.PRIMARY_FIRE) eventPlayer.disallowButton(Button.SECONDARY_FIRE) eventPlayer.disallowButton(Button.ABILITY_1) eventPlayer.disallowButton(Button.ABILITY_2) eventPlayer.disallowButton(Button.ULTIMATE) while eventPlayer.isHoldingButton(Button.MELEE): wait() eventPlayer.forceButtonPress(Button.MELEE) wait(0.034) eventPlayer.cancelPrimaryAction() eventPlayer.setAbilityCooldown(Button.MELEE, 0) wait(0.05) eventPlayer.allowButton(Button.PRIMARY_FIRE) eventPlayer.allowButton(Button.SECONDARY_FIRE) eventPlayer.allowButton(Button.ABILITY_1) eventPlayer.allowButton(Button.ABILITY_2) eventPlayer.allowButton(Button.ULTIMATE) def ErrorWarningMessage(): @Name "Subroutine ErrorWarningMessage (Originally from peace's mercy parkour editor: T6QQT)" if len(Checkpoint) == 0: smallMessage(eventPlayer, "There are no checkpoints yet") playEffect(eventPlayer, DynamicEffect.EXPLOSION_SOUND, null, eventPlayer, 100) Error = true elif eventPlayer.isHoldingButton(Button.PRIMARY_FIRE): if len(eventPlayer.currentSphere) + len(eventPlayer.currentCloud) + len(eventPlayer.currentOrb) * 2 + len([player for player in eventPlayer.currentOrb if player[1]]) * 2 >= floor((256 - NumberOfUsedEntity) / getNumberOfSlots(Team.ALL)): smallMessage(eventPlayer, "The available effects of this level have reached the upper limit") playEffect(eventPlayer, DynamicEffect.EXPLOSION_SOUND, null, eventPlayer, 100) Error = true elif eventPlayer.isHoldingButton(Button.MELEE) and eventPlayer.editMode == 2 and len(eventPlayer.currentOrb) == 0: smallMessage(eventPlayer, "There is no orb yet") playEffect(eventPlayer, DynamicEffect.EXPLOSION_SOUND, null, eventPlayer, 100) Error = true elif eventPlayer.isHoldingButton(Button.SECONDARY_FIRE): if eventPlayer.editMode == 2 and len(eventPlayer.currentOrb) == 0: smallMessage(eventPlayer, "There is no orb yet") playEffect(eventPlayer, DynamicEffect.EXPLOSION_SOUND, null, eventPlayer, 100) Error = true elif eventPlayer.editMode == 3 and len(eventPlayer.currentSphere) == 0: smallMessage(eventPlayer, "There is no sphere yet") playEffect(eventPlayer, DynamicEffect.EXPLOSION_SOUND, null, eventPlayer, 100) Error = true elif eventPlayer.editMode == 4 and len(eventPlayer.currentCloud) == 0: smallMessage(eventPlayer, "There is no cloud yet") playEffect(eventPlayer, DynamicEffect.EXPLOSION_SOUND, null, eventPlayer, 100) Error = true elif eventPlayer.isHoldingButton(Button.RELOAD): if eventPlayer.editMode == 1 and not eventPlayer.checkpointA[3][0]: smallMessage(eventPlayer, "Target mercy not created in current level") playEffect(eventPlayer, DynamicEffect.EXPLOSION_SOUND, null, eventPlayer, 100) Error = true elif eventPlayer.editMode == 2 and not eventPlayer.currentOrb[CurrentChooseOrb][1]: smallMessage(eventPlayer, "Target mercy not created in current orb") playEffect(eventPlayer, DynamicEffect.EXPLOSION_SOUND, null, eventPlayer, 100) Error = true elif eventPlayer.isHoldingButton(Button.ABILITY_1): if eventPlayer.editMode == 1 and not eventPlayer.checkpointA[3][1]: smallMessage(eventPlayer, "The current level's target mercy is not set and needs to be resurrected") playEffect(eventPlayer, DynamicEffect.EXPLOSION_SOUND, null, eventPlayer, 100) Error = true elif eventPlayer.editMode == 2 and not eventPlayer.currentOrb[CurrentChooseOrb][2]: smallMessage(eventPlayer, "The current orb's target mercy is not set and needs to be resurrected") playEffect(eventPlayer, DynamicEffect.EXPLOSION_SOUND, null, eventPlayer, 100) Error = true def CreateNewEffect(): @Name "Subroutine CreateNewEffect (Originally from peace's mercy parkour editor: T6QQT)" if eventPlayer.editMode == 2: destroyIcon(eventPlayer.botIcons[CurrentChooseOrb]) del eventPlayer.botIcons[CurrentChooseOrb] destroyEffect(eventPlayer.botEffects[CurrentChooseOrb]) del eventPlayer.botEffects[CurrentChooseOrb] destroyIcon(eventPlayer.orbIcons[CurrentChooseOrb]) destroyEffect(eventPlayer.orbEffects[CurrentChooseOrb]) if eventPlayer.currentOrb[CurrentChooseOrb][1]: createIcon(eventPlayer if any([player[0] == evalOnce(eventPlayer.currentOrb[CurrentChooseOrb][0]) for player in eventPlayer.tempCurrentOrb]) or eventPlayer.finished or eventPlayer.freeMode else null, eventPlayer.currentOrb[CurrentChooseOrb][1] + vect(0, 2, 0), Icon.ARROW_DOWN, IconReeval.VISIBILITY, Config[49] if eventPlayer.currentOrb[CurrentChooseOrb][2] else Config[46], true) eventPlayer.botIcons[CurrentChooseOrb] = getLastCreatedEntity() createEffect(eventPlayer if any([player[0] == evalOnce(eventPlayer.currentOrb[CurrentChooseOrb][0]) for player in eventPlayer.tempCurrentOrb]) or eventPlayer.finished or eventPlayer.freeMode else null, Effect.GOOD_AURA, Config[50] if eventPlayer.currentOrb[CurrentChooseOrb][2] else Config[47], eventPlayer.currentOrb[CurrentChooseOrb][1] + vect(0, 0.8, 0), 1, EffectReeval.VISIBILITY) eventPlayer.botEffects[CurrentChooseOrb] = getLastCreatedEntity() createIcon(eventPlayer if any([player[0] == evalOnce(eventPlayer.currentOrb[CurrentChooseOrb][0]) for player in eventPlayer.tempCurrentOrb]) or eventPlayer.finished or eventPlayer.freeMode else null, eventPlayer.currentOrb[CurrentChooseOrb][0] + vect(0, 0.5, 0), Icon.RECYCLE, IconReeval.VISIBILITY, Config[48] if eventPlayer.currentOrb[CurrentChooseOrb][2] else Config[45], true) else: createIcon(eventPlayer if any([player[0] == evalOnce(eventPlayer.currentOrb[CurrentChooseOrb][0]) for player in eventPlayer.tempCurrentOrb]) or eventPlayer.finished or eventPlayer.freeMode else null, eventPlayer.currentOrb[CurrentChooseOrb][0] + vect(0, 0.5, 0), Icon.HALO, IconReeval.VISIBILITY, Config[43], true) eventPlayer.orbIcons[CurrentChooseOrb] = getLastCreatedEntity() createEffect(eventPlayer if any([player[0] == evalOnce(eventPlayer.currentOrb[CurrentChooseOrb][0]) for player in eventPlayer.tempCurrentOrb]) or eventPlayer.finished or eventPlayer.freeMode else null, Effect.ORB, Config[44] if eventPlayer.currentOrb[CurrentChooseOrb][1] else Config[42], eventPlayer.currentOrb[CurrentChooseOrb][0], 1, EffectReeval.VISIBILITY) eventPlayer.orbEffects[CurrentChooseOrb] = getLastCreatedEntity() elif eventPlayer.editMode == 3: destroyEffect(eventPlayer.sphereEffects[CurrentChooseSphere]) createEffect(eventPlayer, Effect.SPHERE, Config[40], eventPlayer.currentSphere[CurrentChooseSphere][0], eventPlayer.currentSphere[CurrentChooseSphere][1], EffectReeval.NONE) eventPlayer.sphereEffects[CurrentChooseSphere] = getLastCreatedEntity() elif eventPlayer.editMode == 4: destroyEffect(eventPlayer.cloudEffects[CurrentChooseCloud]) createEffect(eventPlayer, Effect.CLOUD, Config[41], eventPlayer.currentCloud[CurrentChooseCloud][0], 1, EffectReeval.NONE) eventPlayer.cloudEffects[CurrentChooseCloud] = getLastCreatedEntity() def EditChoosedEffect(): @Name "Subroutine EditChoosedEffect (Originally from peace's mercy parkour editor: T6QQT)" if eventPlayer.editMode == 2: destroyIcon(eventPlayer.orbIcons[CurrentChooseOrb]) destroyEffect(eventPlayer.orbEffects[CurrentChooseOrb]) if eventPlayer.currentOrb[CurrentChooseOrb][1]: createIcon(eventPlayer if any([player[0] == evalOnce(eventPlayer.currentOrb[CurrentChooseOrb][0]) for player in eventPlayer.tempCurrentOrb]) or eventPlayer.finished or eventPlayer.freeMode else null, ChooseOrbPosition + vect(0, 0.5, 0), Icon.RECYCLE, IconReeval.VISIBILITY_AND_POSITION, Config[49] if eventPlayer.currentOrb[CurrentChooseOrb][2] else Config[46], true) else: createIcon(eventPlayer if any([player[0] == evalOnce(eventPlayer.currentOrb[CurrentChooseOrb][0]) for player in eventPlayer.tempCurrentOrb]) or eventPlayer.finished or eventPlayer.freeMode else null, ChooseOrbPosition + vect(0, 0.5, 0), Icon.HALO, IconReeval.VISIBILITY_AND_POSITION, Config[43], true) eventPlayer.orbIcons[CurrentChooseOrb] = getLastCreatedEntity() createEffect(eventPlayer if any([player[0] == evalOnce(eventPlayer.currentOrb[CurrentChooseOrb][0]) for player in eventPlayer.tempCurrentOrb]) or eventPlayer.finished or eventPlayer.freeMode else null, Effect.ORB, Config[44] if eventPlayer.currentOrb[CurrentChooseOrb][1] else Config[42], ChooseOrbPosition, 1, EffectReeval.VISIBILITY_POSITION_AND_RADIUS) eventPlayer.orbEffects[CurrentChooseOrb] = getLastCreatedEntity() elif eventPlayer.editMode == 3: destroyEffect(eventPlayer.sphereEffects[CurrentChooseSphere]) createEffect(eventPlayer, Effect.SPHERE, Config[40], ChooseSpherePosition, eventPlayer.currentSphere[CurrentChooseSphere][1], EffectReeval.POSITION_AND_RADIUS) eventPlayer.sphereEffects[CurrentChooseSphere] = getLastCreatedEntity() elif eventPlayer.editMode == 4: destroyEffect(eventPlayer.cloudEffects[CurrentChooseCloud]) createEffect(eventPlayer, Effect.CLOUD, Config[41], ChooseCloudPosition, 1, EffectReeval.POSITION_AND_RADIUS) eventPlayer.cloudEffects[CurrentChooseCloud] = getLastCreatedEntity() def KillOrResurrectBot(): @Name "Subroutine KillOrResurrectBot (Originally from peace's mercy parkour editor: T6QQT)" if eventPlayer.editMode == 2: eventPlayer.nearestOrb = eventPlayer.currentOrb[CurrentChooseOrb] if eventPlayer.nearestOrb[2]: kill(eventPlayer.targetBot, null) else: eventPlayer.targetBot.resurrect() heal(eventPlayer.targetBot, null, 1000) TeleportBotToRefreshPosition() else: if eventPlayer.checkpointA[3][1]: kill(eventPlayer.targetBot, null) else: eventPlayer.targetBot.resurrect() heal(eventPlayer.targetBot, null, 1000) TeleportCurrentBot() def TeleportBotToRefreshPosition(): @Name "Subroutine TeleportBotToRefreshPosition (Originally from peace's mercy parkour editor: T6QQT)" eventPlayer.targetBot.teleport(eventPlayer.nearestOrb[1] if eventPlayer.nearestOrb[1] else Config[60]) eventPlayer.targetBot.startForcingOutlineFor(eventPlayer, true, Color.RED if eventPlayer.nearestOrb[1] else null, OutlineVisibility.ALWAYS) heal(eventPlayer.targetBot, null, 1000) kill(eventPlayer.targetBot if eventPlayer.nearestOrb[2] else null, null) def ClearRedundantData(): @Name "Subroutine ClearRedundantData (Originally from peace's mercy parkour editor: T6QQT)" EditMode = null Debug = null Error = null ChooseOrbPosition = null ChooseSpherePosition = null ChooseCloudPosition = null TipHudSpaceHolder = null Cheat = null Vips = null PlayersRecord = null PlayersData = null BigMessages = null Tips = null WorldTexts = null SmallMessages = null BotGravity = null CurrentChooseOrb = null CurrentChooseSphere = null CurrentChooseCloud = null NewCheckpointDefaultCtrl = null NewCheckpointDefaultRadius = null NewCheckpointDefaultMaxRefresh = null Config = null NumberOfUsedEntity = null Sparkle = null FinishedDisplaySparkle = null FinishedDisplayDome = null Dome = null Aura = null FinishedDisplayAura = null TempArray = null FinishedCheat = null I = null II = null CircleLoop = null Hexagram = null FinishedDisplayHexagram = null OnGround = null Chase = null Once = null CreatorAndCode = null Top5 = null Top5Color = null TeleportAnimation = null ShowHotKeyPlayers = null EmoteSyncPlayers = null PreviewPosition = null TempVar = null CheckpointBPosition = null FirstPlaceTimeArray = null nullTimeArray = null def InitializeGlobalVariables(): @Name "Subroutine InitializeGlobalVariables (Originally from peace's mercy parkour editor: T6QQT)" EditMode = createWorkshopSetting(bool, "Edit Mode(편집 모드)", "Edit Mode(편집 모드)", true, 0) NewCheckpointDefaultRadius = createWorkshopSetting(float[1:5], "Edit Mode(편집 모드)", "New level radius(새 관문 반경)", 1.6, 1) NewCheckpointDefaultCtrl = createWorkshopSetting(bool, "Edit Mode(편집 모드)", "New level crouch(새 관문 앉기)", false, 2) NewCheckpointDefaultMaxRefresh = createWorkshopSetting(bool, "Edit Mode(편집 모드)", "New level Ga infinite times(새 관문 수호천사를 무제한)", false, 3) BotGravity = createWorkshopSetting(bool, "Edit Mode(편집 모드)", "Bot floating(로봇이 떠다니다)", false, 4) OnGround = createWorkshopSetting(bool, "Edit Mode(편집 모드)", "Land on arrival point(도착은 착지가 필요하다)", false, 5) Cheat = createWorkshopSetting(bool, "Official game", "Skip / Back", true, 0) FinishedCheat = createWorkshopSetting(bool, "Official game", "Skip / Back only after clearing the level (need to turn on the Skip / Back)", true, 1) TeleportAnimation = createWorkshopSetting(bool, "Official game", "Teleport animation", true, 2) Sparkle = createWorkshopSetting(bool, "Official game", "Spark effect", false, 3) FinishedDisplaySparkle = createWorkshopSetting(bool, "Official game", "Only visible sparks after clearing the level(Need to turn on the spark effect", true, 4) Dome = createWorkshopSetting(bool, "Official game", "Dome effect", false, 5) FinishedDisplayDome = createWorkshopSetting(bool, "Official game", "Only visible dome after clearing the level(Need to turn on the dome effect)", true, 6) Aura = createWorkshopSetting(bool, "Official game", "Halo effect", false, 7) FinishedDisplayAura = createWorkshopSetting(bool, "Official game", "Only visible halo after clearing the level(Need to turn on the halo effect)", true, 8) Hexagram = createWorkshopSetting(bool, "Official game", "Six-pointed star effect", false, 9) FinishedDisplayHexagram = createWorkshopSetting(bool, "Official game", "Only visible six-pointed star after clearing the level(Need to turn on the six-pointed star effect)", true, 10) Debug = createWorkshopSetting(bool, "Debug (Don't change)", "Debug", false, 0) Checkpoint = Checkpoint if Checkpoint else [] PreviewPosition = [] TempVar[11] = null Once = true NumberOfUsedEntity = getNumberOfSlots(Team.ALL) * 5 + 25 + 6 + 1 + 6 + 1 ShowHotKeyPlayers = [] PlayersRecord = [] PlayersData = [] Top5 = [] Top5Color = [rgb(255, 215, 0), rgb(220, 223, 227), rgb(191, 173, 111), rgb(192, 192, 192), rgb(128, 138, 135)] TipHudSpaceHolder[0] = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" TipHudSpaceHolder[1] = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" nullTimeArray = [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] FirstPlaceTimeArray = nullTimeArray.slice(0, len(Checkpoint) - 1) def InitializePlayerVariables(): @Name "Subroutine InitializePlayerVariables (Originally from peace's mercy parkour editor: T6QQT)" eventPlayer.checkpoint = 0 eventPlayer.freeMode = false eventPlayer.spectatorMode = false eventPlayer.cheat = false eventPlayer.leaveOriginalCheckpoint = false eventPlayer.time = 0 eventPlayer.mistake = 0 eventPlayer.bodySize = 1 if not eventPlayer.movementCollision: eventPlayer.enableEnvironmentCollision() eventPlayer.movementCollision = true if not eventPlayer.playerNickname: eventPlayer.editMode = 1 if EditMode else 0 eventPlayer.bestRecord = (([player for player in PlayersRecord if player[0] == "{0}".format(eventPlayer)])[0])[1] eventPlayer.chooseHero = 0 eventPlayer.voice = 1 eventPlayer.barrierSize = 1 eventPlayer.projectile = 100 eventPlayer.currentOrb = [] eventPlayer.currentSphere = [] eventPlayer.currentCloud = [] eventPlayer.playerTittle = ([player for player in Vips if player[0] == "{0}".format(eventPlayer)])[0] eventPlayer.playerNickname = (eventPlayer.playerTittle[1] if eventPlayer.playerTittle[1] else "{0}".format(eventPlayer)) if eventPlayer.playerTittle else "{0}".format(eventPlayer) eventPlayer.playerColor = (rgb(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) if eventPlayer.playerTittle[2] == Color.WHITE else eventPlayer.playerTittle[2]) if eventPlayer.playerTittle else Color.WHITE if EditMode and not eventPlayer in ShowHotKeyPlayers: ShowHotKeyPlayers.append(eventPlayer) eventPlayer.segmentTimeArray = nullTimeArray.slice(0, len(Checkpoint) - 1) eventPlayer.segmentVsPersonalBestArray = [] eventPlayer.vsPersonalBestRunningTally = 0 if not eventPlayer.editMode and eventPlayer.getCurrentHero() != Hero.WIDOWMAKER: eventPlayer.startForcingHero(Hero.WIDOWMAKER) def CreatePlayerTargetBot(): @Name "Subroutine CreatePlayerTargetBot (Originally from peace's mercy parkour editor: T6QQT)" if not entityExists(eventPlayer.targetBot): createDummy(Hero.WIDOWMAKER, getOppositeTeam(eventPlayer.getTeam()), eventPlayer.getSlot() + getNumberOfSlots(Team.ALL), Checkpoint[eventPlayer.checkpoint][3][0] if Checkpoint[eventPlayer.checkpoint][3][0] else Config[60], null) eventPlayer.targetBot = getLastCreatedEntity() eventPlayer.targetBot.setMaxHealth(500) wait() eventPlayer.targetBot.startForcingName("{0}{1}".format(eventPlayer, Config[11])) wait() eventPlayer.targetBot.startFacing(directionTowards(updateEveryTick(eventPlayer.targetBot.getEyePosition()), updateEveryTick(eventPlayer.getEyePosition())), 9999, Relativity.TO_WORLD, FacingReeval.DIRECTION_AND_TURN_RATE) if eventPlayer.targetBot.getCurrentHero() == Hero.TRACER or eventPlayer.targetBot.getCurrentHero() == Hero.DVA: eventPlayer.trueBotHealth = 150 else: if eventPlayer.targetBot.getCurrentHero() == Hero.WIDOWMAKER: eventPlayer.trueBotHealth = 175 else: eventPlayer.trueBotHealth = 200 def CreateGlobalHUD(): @Name "Subroutine CreateGlobalHUD (Originally from peace's mercy parkour editor: T6QQT)" #运行时间 if getCurrentGamemode() == Gamemode.SKIRMISH: setObjectiveDescription(getAllPlayers(), "Elapsed time {0} minutes {1} seconds".format(floor(getTotalTimeElapsed() / 60), floor(getTotalTimeElapsed() % 60)), HudReeval.VISIBILITY_AND_STRING) else: hudSubheader(getAllPlayers(), "Elapsed time {0} minutes {1} seconds".format(floor(getTotalTimeElapsed() / 60), floor(getTotalTimeElapsed() % 60)), HudPosition.TOP, 0, Color.WHITE, HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) createEffect(localPlayer if localPlayer.bhop else null, Effect.ANA_NANO_BOOSTED, null, localPlayer, 1, EffectReeval.VISIBILITY_POSITION_AND_RADIUS) hudSubtext(getAllPlayers(), "Widow Parkour {0} by {1}\nCode: {2}".format(getCurrentMap(), CreatorAndCode[0] if CreatorAndCode[0] else "Anonymous", CreatorAndCode[1] if CreatorAndCode[1] else "Not yet"), HudPosition.LEFT, -999, Config[12], HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) hudSubtext(getAllPlayers(), " ", HudPosition.LEFT, -998, null, HudReeval.VISIBILITY, SpecVisibility.DEFAULT) hudSubtext(getAllPlayers(), " ", HudPosition.RIGHT, 2, null, HudReeval.VISIBILITY, SpecVisibility.DEFAULT) hudText([player for player in getAllPlayers() if not EditMode and not player.finished], null, " \n \n ", " ", HudPosition.RIGHT, 3, null, null, null, HudReeval.VISIBILITY, SpecVisibility.DEFAULT) hudSubtext(getAllPlayers(), " ", HudPosition.RIGHT, 10, null, HudReeval.VISIBILITY, SpecVisibility.DEFAULT) hudSubtext(getAllPlayers(), "{0} Double click ({1}) Show or hide controls".format(abilityIconString(Hero.TORBJORN, Button.ABILITY_2), buttonString(Button.INTERACT)), HudPosition.RIGHT, 98, rgba(220, 220, 220, 200), HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) hudText(ShowHotKeyPlayers, null, "--------------------{0}{1}".format("----" if "{0}".format(Hero.MERCY) == "Mercy" else (("-----" if strLen(buttonString(Button.INTERACT)) > 5 else "---") if strLen(buttonString(Button.INTERACT)) > 3 else "--") if strLen(buttonString(Button.INTERACT)) > 1 else "", "-------------" if "{0}".format(Hero.MERCY) == "マーシー" else "----------" if "{0}".format(Hero.MERCY) == "慈悲" else ""), "Preview next point : {0} + {1}\n{2}".format(buttonString(Button.PRIMARY_FIRE), buttonString(Button.SECONDARY_FIRE), "Back to point : {0}{1}\n{2}".format(buttonString(Button.ULTIMATE), " / Spray Up" if EditMode else "", "Free Mode : {0} + {1}\n{2}".format(buttonString(Button.RELOAD), buttonString(Button.MELEE), "3rd Person : {0} + {1}\n{2}".format(buttonString(Button.RELOAD), buttonString(Button.JUMP), "Spectator Mode : {0} + {1}{2}".format(buttonString(Button.ULTIMATE), buttonString(Button.ABILITY_2), "" if EditMode and localPlayer == hostPlayer else "\nRestart : {0} + {1} + {2}".format(buttonString(Button.CROUCH), buttonString(Button.ABILITY_2), buttonString(Button.INTERACT))))))), HudPosition.RIGHT, 100, null, null, rgb(205, 209, 211), HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) hudText([player for player in ShowHotKeyPlayers if player.freeMode or player.finished], null, "--------------------{0}{1}".format("----" if "{0}".format(Hero.MERCY) == "Mercy" else (("-----" if strLen(buttonString(Button.INTERACT)) > 5 else "---") if strLen(buttonString(Button.INTERACT)) > 3 else "--") if strLen(buttonString(Button.INTERACT)) > 1 else "", "-------------" if "{0}".format(Hero.MERCY) == "マーシー" else "----------" if "{0}".format(Hero.MERCY) == "慈悲" else ""), ("앞으로 텔포 : Hold {0}\n{1}".format(buttonString(Button.RELOAD), "발키리 해제 : 음성 \"{0}\"\n{1}".format(l"Sorry", "임시 CP 설정 : 두 번 탭 {0}{1}".format(buttonString(Button.ABILITY_2), "" if EditMode and localPlayer == hostPlayer else "\n상대에게 텔포 : {0}{1}".format(buttonString(Button.INTERACT), "\n상대 레벨로 이동 : {0} + {1}".format(buttonString(Button.INTERACT), buttonString(Button.RELOAD)) if EditMode or (Cheat and (not FinishedCheat or localPlayer.bestRecord)) or localPlayer.playerTittle else ""))))) if "{0}".format(Hero.MERCY) == "메르시" else "Cancel Movement collision : Hold {0}\n{1}".format(buttonString(Button.RELOAD), "Interrupt Valkyrie : Voice Line \"Sorry\"\n{0}".format("Set Temporary cp : Double click {0}{1}".format(buttonString(Button.ABILITY_2), "" if EditMode and localPlayer == hostPlayer else "\nTo player's position : {0}{1}".format(buttonString(Button.INTERACT), "\nTo player's level : {0} + {1}".format(buttonString(Button.INTERACT), buttonString(Button.RELOAD)) if EditMode or (Cheat and (not FinishedCheat or localPlayer.bestRecord)) or localPlayer.playerTittle else "")))), HudPosition.RIGHT, 101, null, rgb(205, 209, 211), rgba(205, 209, 211, 175), HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) hudText([player for player in ShowHotKeyPlayers if EditMode and player != hostPlayer or (not EditMode and (Cheat and (not FinishedCheat or player.bestRecord) or player.playerTittle))], null, "--------------------{0}{1}".format("----" if "{0}".format(Hero.MERCY) == "Mercy" else (("-----" if strLen(buttonString(Button.INTERACT)) > 5 else "---") if strLen(buttonString(Button.INTERACT)) > 3 else "--") if strLen(buttonString(Button.INTERACT)) > 1 else "", "-------------" if "{0}".format(Hero.MERCY) == "マーシー" else "----------" if "{0}".format(Hero.MERCY) == "慈悲" else ""), "Next level : {0} + {1} + {2}".format(buttonString(Button.ABILITY_2), buttonString(Button.MELEE), "{0}\nPrev Level : {1} + {2}".format(buttonString(Button.PRIMARY_FIRE), buttonString(Button.ABILITY_2), "{0} + {1}".format(buttonString(Button.MELEE), buttonString(Button.SECONDARY_FIRE)))), HudPosition.RIGHT, 102, null, rgba(205, 209, 211, 175), Color.ORANGE, HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) if not EditMode: #TOP5 hudSubtext(getAllPlayers() if Top5 else null, Config[24] if Config[24] else "Today`s Top {0}".format(len(Top5)), HudPosition.LEFT, -991, Config[25], HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) for I in range(5): hudText(getAllPlayers() if Top5[evalOnce(I)] else null, heroIcon(Hero.WIDOWMAKER), "{0} {1}".format(["1st", "2nd", "3rd", "4th", "5th"][evalOnce(I)], Top5[evalOnce(I)][0]), "{0} sec".format(Top5[evalOnce(I)][1]), HudPosition.LEFT, -990 + I, Top5Color[I], Top5Color[I], Top5Color[I], HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) hudSubtext(getAllPlayers(), " ", HudPosition.LEFT, -901, null, HudReeval.VISIBILITY, SpecVisibility.DEFAULT) #HighLights hudSubtext(getAllPlayers() if any([player.bestRecord and Top5.index("{0}".format(player.playerNickname)) < 0 for player in getAllPlayers()]) else null, Config[26], HudPosition.LEFT, -1 * 900, Config[27], HudReeval.VISIBILITY, SpecVisibility.DEFAULT) hudSubtext(getAllPlayers(), "{0} {1}".format(abilityIconString(Hero.WIDOWMAKER, Button.ABILITY_2), "Uses Modded Mercy Parkour Editor\nOriginal Editor Code (by Peace): T6QQT\nModded Editor Code: J1ANR"), HudPosition.LEFT, -997, rgba(220, 220, 220, 200), HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) hudSubtext(getAllPlayers(), " ", HudPosition.LEFT, -996, null, HudReeval.VISIBILITY, SpecVisibility.DEFAULT) else: hudText(hostPlayer, null, ["", "Controls: Checkpoint", "Controls: Orb", "Controls: Sphere", "Controls: Cloud"][hostPlayer.editMode], ["", "Create Point | Interact + Primary Fire\nInsert Point | Interact + Melee{0}".format("\nSelect Point | E + Primary / Secondary Fire\nMove Point | Interact + E\nSwitch Crouch | Interact + Crouch"), "Create Orb | Interact + Primary Fire\nSelect Orb | E + Primary / Secondary Fire{0}".format("\nMove Position | Reload + Primary / Secondary Fire\nCreate Bot | Melee + Primary Fire\nDelete Bot | Melee + Secondary Fire"), "Create Sphere | Interact + Primary Fire\nSelect Sphere | E + Primary / Secondary {0}".format("Fire\nMove Position | Reload + Primary / Secondary Fire\nAdjust Radius | Jump + Primary / Secondary Fire"), "Create Cloud | Interact + Primary Fire\nSelect Cloud | E + Primary / Secondary Fire{0}".format("\nMove Position | Reload + Primary / Secondary Fire\nAdjust Level | Jump + Primary / Secondary Fire")][hostPlayer.editMode], HudPosition.LEFT, 100, null, Color.WHITE, Color.TURQUOISE, HudReeval.VISIBILITY_SORT_ORDER_STRING_AND_COLOR, SpecVisibility.DEFAULT) hudSubtext(hostPlayer, ["", "Set Unlimited Grapple | Interact + Ultimate\nSwitch Teleport | Interact + Jump{0}".format("\nCreate Bot | Melee + Primary Fire\nDelete Bot | Melee + Secondary Fire\nKill Bot | Interact + Reload"), "Kill Bot | Interact + Melee", "", ""][hostPlayer.editMode], HudPosition.LEFT, 101, Color.TURQUOISE, HudReeval.VISIBILITY_SORT_ORDER_STRING_AND_COLOR, SpecVisibility.DEFAULT) hudSubtext(hostPlayer, ["", "Only Usable on Mercy (use \"I need healing\" to switch)\n{0}".format("Adjust Radius | Jump + Primary / Secondary Fire [Gun]\nDelete Checkpoint | Interact + Secondary Fire [Gun]"), "Only Usable on Mercy (Switch to spectator and back to switch)\nDelete Orb | Interact + Secondary Fire [Gun]", "Only Usable on Mercy (Switch to spectator and back to switch)\nDelete Sphere | Interact + Secondary Fire [Gun]", "Only Usable on Mercy (Switch to spectator and back to switch)\nDelete Cloud | Interact + Secondary Fire [Gun]"][hostPlayer.editMode], HudPosition.LEFT, 102, Color.TURQUOISE if hostPlayer.getCurrentWeapon() == 2 else rgb(181, 152, 161), HudReeval.VISIBILITY_SORT_ORDER_STRING_AND_COLOR, SpecVisibility.DEFAULT) hudSubtext(hostPlayer if hostPlayer.editMode == 1 and getCurrentMap() in [Map.BUSAN, Map.ILIOS, Map.LIJIANG_TOWER, Map.LIJIANG_TOWER, Map.NEPAL, Map.OASIS] else null, "Teleport Other Map | Voice Line \"Group Up\"", HudPosition.LEFT, 103, Color.TURQUOISE, HudReeval.VISIBILITY_SORT_ORDER_STRING_AND_COLOR, SpecVisibility.DEFAULT) hudText(hostPlayer, null, "--------------", "Current Mode | {0} (Double click {1} Switch) \nExport data | {2}".format(["", "Checkpoint", "Orb", "Sphere", "Cloud"][hostPlayer.editMode], buttonString(Button.INTERACT), "{0} + {1} + {2}".format(buttonString(Button.ULTIMATE), buttonString(Button.CROUCH), "{0} + {1}".format(buttonString(Button.JUMP), buttonString(Button.MELEE)))), HudPosition.LEFT, 104, null, rgb(205, 209, 211), rgb(205, 209, 211), HudReeval.VISIBILITY_SORT_ORDER_STRING_AND_COLOR, SpecVisibility.DEFAULT) createIcon(getAllPlayers() if len(Checkpoint) > 0 else null, hostPlayer.checkpointA[0] + vect(0, 1.2, 0), Icon.FLAG, IconReeval.VISIBILITY_AND_POSITION, Color.RED, true) createEffect(getAllPlayers() if len(Checkpoint) > 0 else null, Effect.LIGHT_SHAFT, Color.RED, hostPlayer.checkpointA[0], hostPlayer.checkpointA[1], EffectReeval.VISIBILITY_POSITION_AND_RADIUS) createInWorldText(getAllPlayers() if len(Checkpoint) > 0 else null, "LEVEL : {0}\n{1}".format(hostPlayer.checkpoint, "RADIUS : {0}\n{1}".format(hostPlayer.checkpointA[1], "CROUCH : {0}\n{1}".format("√" if hostPlayer.checkpointA[2] else "×", "RESURRECT : {0}\n{1}".format("√" if hostPlayer.checkpointA[3][1] else "×", "Resurrection refresh GA : {0}\n{1}".format("√" if hostPlayer.checkpointA[3][1] and hostPlayer.checkpointA[3][2] else "×", "UNLIMITED GA : {0}\n{1}".format("√" if hostPlayer.checkpointA[4] else "×", "TELEPORT : {0}\n{1}".format("√" if hostPlayer.checkpointA[5] else "×", "EFFECTS : {0}\n{1}".format(floor((256 - NumberOfUsedEntity) / getNumberOfSlots(Team.ALL)) - len(hostPlayer.currentOrb) * 2 - len([player for player in hostPlayer.currentOrb if player[1]]) * 2 - len(hostPlayer.currentSphere) - len(hostPlayer.currentCloud), "POSITION : {0}".format(hostPlayer.checkpointA[0]))))))))), hostPlayer.checkpointA[0] + vect(0, 0.5, 0), 1.2, Clip.NONE, WorldTextReeval.VISIBILITY_POSITION_AND_STRING, Color.GREEN, SpecVisibility.DEFAULT) createEffect(getAllPlayers() if len(hostPlayer.currentOrb) > 0 and hostPlayer.editMode == 2 else null, Effect.GOOD_AURA, Config[44] if hostPlayer.currentOrb[CurrentChooseOrb][1] else Config[42], ChooseOrbPosition, 1.3, EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) createInWorldText(getAllPlayers() if len(hostPlayer.currentOrb) > 0 and hostPlayer.editMode == 2 else null, "TELEPORT BOT : {0}\n{1}".format("√" if hostPlayer.currentOrb[CurrentChooseOrb][1] else "×", "RESURRECT : {0}\n{1}".format("√" if hostPlayer.currentOrb[CurrentChooseOrb][2] else "×", "Resurrection refresh GA : {0}\n{1}".format("√" if hostPlayer.currentOrb[CurrentChooseOrb][2] and hostPlayer.currentOrb[CurrentChooseOrb][3] else "×", "DISTANCE : {0}\n{1}".format(distance(hostPlayer, ChooseOrbPosition) - hostPlayer.currentOrb[CurrentChooseOrb][0], "POSITION : {0}".format(ChooseOrbPosition))))), ChooseOrbPosition + vect(0, 0.5, 0), 1.2, Clip.NONE, WorldTextReeval.VISIBILITY_POSITION_AND_STRING, Color.GREEN, SpecVisibility.DEFAULT) createEffect(getAllPlayers() if len(hostPlayer.currentSphere) > 0 and hostPlayer.editMode == 3 else null, Effect.ORB, Color.GREEN, ChooseSpherePosition, 1, EffectReeval.VISIBILITY_POSITION_AND_RADIUS) createInWorldText(getAllPlayers() if len(hostPlayer.currentSphere) > 0 and hostPlayer.editMode == 3 else null, "RADIUS: {0}\n{1}".format(hostPlayer.currentSphere[CurrentChooseSphere][1], "DISTANCE : {0}\n{1}".format(distance(hostPlayer, ChooseSpherePosition) - hostPlayer.currentSphere[CurrentChooseSphere][0], "POSITION : {0}".format(ChooseSpherePosition))), ChooseSpherePosition + vect(0, 0.5, 0), 1.2, Clip.NONE, WorldTextReeval.VISIBILITY_POSITION_AND_STRING, Color.GREEN, SpecVisibility.DEFAULT) createEffect(getAllPlayers() if len(hostPlayer.currentCloud) > 0 and hostPlayer.editMode == 4 else null, Effect.GOOD_AURA, Color.GREEN, ChooseCloudPosition, 1.3, EffectReeval.VISIBILITY_POSITION_AND_RADIUS) createInWorldText(getAllPlayers() if len(hostPlayer.currentCloud) > 0 and hostPlayer.editMode == 4 else null, "LEVEL : {0}\n{1}".format(hostPlayer.currentCloud[CurrentChooseCloud][1], "DISTANCE : {0}\n{1}".format(distance(hostPlayer, ChooseCloudPosition) - hostPlayer.currentCloud[CurrentChooseCloud][0], "POSITION : {0}".format(ChooseCloudPosition))), ChooseCloudPosition + vect(0, 0.5, 0), 1.2, Clip.NONE, WorldTextReeval.VISIBILITY_POSITION_AND_STRING, Color.GREEN, SpecVisibility.DEFAULT) def CreatePlayerHUDAndEffects(): @Name "Subroutine CreatePlayerHUDAndEffects (Originally from peace's mercy parkour editor: T6QQT)" if not EditMode: createInWorldText(eventPlayer if eventPlayer.checkpoint == len(Checkpoint) - 1 else null, eventPlayer.segmentTimeString, vect(175, 18, 0), 1, Clip.NONE, WorldTextReeval.VISIBILITY_POSITION_AND_STRING, Color.SKY_BLUE, SpecVisibility.DEFAULT) createInWorldText(eventPlayer if eventPlayer.checkpoint == len(Checkpoint) - 1 else null, eventPlayer.personalBestString, vect(200, 18.009, 0), 1, Clip.NONE, WorldTextReeval.VISIBILITY_POSITION_AND_STRING, Color.BLUE, SpecVisibility.DEFAULT) createInWorldText(eventPlayer if eventPlayer.checkpoint == len(Checkpoint) - 1 else null, FirstPlaceTimeString, vect(225, 18, 0), 1, Clip.NONE, WorldTextReeval.VISIBILITY_POSITION_AND_STRING, rgb(255, 215, 0), SpecVisibility.DEFAULT) createInWorldText(eventPlayer if eventPlayer.checkpoint == len(Checkpoint) - 1 else null, eventPlayer.bestSegmentsArrayString, vect(250, 18, 0), 1, Clip.NONE, WorldTextReeval.VISIBILITY_POSITION_AND_STRING, rgb(150, 230, 210), SpecVisibility.DEFAULT) hudSubtext(eventPlayer, ("Distance to bot: {0}\r\nCharge Needed: {1}%\r\n{2}".format(distance(eventPlayer, eventPlayer.targetBot) - 0.19, 66.67 + ((distance(eventPlayer, eventPlayer.targetBot) - 40.19) * 2.5) if distance(eventPlayer, eventPlayer.targetBot) > 40.19 else 66.67, "Last Damage: {0}".format(eventPlayer.recentDamage))) if eventPlayer.checkpointA[3][0] else "Distance to bot: N/A\nCharge Needed: N/A\nLast Damage: {0}".format(eventPlayer.recentDamage), HudPosition.RIGHT, 2, Color.GREEN if distance(eventPlayer, eventPlayer.targetBot) < 40.19 else Color.YELLOW if distance(eventPlayer, eventPlayer.targetBot) < 53.52 else Color.RED, HudReeval.VISIBILITY_STRING_AND_COLOR, SpecVisibility.DEFAULT) if eventPlayer.editModeCharacterResetted == 1: wait(0.03) destroyHudText(getLastCreatedText()) createInWorldText(getAllPlayers(), "{0} {1}".format(eventPlayer.playerNickname, eventPlayer.checkpoint if EditMode else eventPlayer.displayedCheckpoint), eventPlayer, 1.3, Clip.NONE, WorldTextReeval.VISIBILITY_POSITION_STRING_AND_COLOR, eventPlayer.playerColor, SpecVisibility.DEFAULT) hudSubtext(eventPlayer, "{0} {1} / {2}".format(Config[13], eventPlayer.checkpoint if EditMode else eventPlayer.displayedCheckpoint, "{0}{1}{2}".format(len(Checkpoint) - 1 if EditMode else evalOnce((len([player for player in Checkpoint if not player[5]])) - 1), " [{0}]".format((len([player for player in Checkpoint if not player[5]])) - 1) if EditMode and any([player[5] for player in Checkpoint]) else "", TipHudSpaceHolder[0])), HudPosition.TOP, 1, Config[14], HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) createEffect(eventPlayer if eventPlayer.checkpointA[0] and (EditMode or eventPlayer.checkpointB[0]) else null, Effect.RING, Config[0] if not eventPlayer.checkpointA[5] else Config[10], eventPlayer.checkpointA[0], eventPlayer.checkpointA[1], EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) createIcon(eventPlayer if eventPlayer.checkpointA[3][0] and eventPlayer.editMode != 2 and not eventPlayer.nearestOrb or eventPlayer.nearestOrb[1] else null, eventPlayer.targetBot if eventPlayer.targetBot.isAlive() else eventPlayer.targetBot.getPosition() + vect(0, 2, 0), Icon.ARROW_DOWN, IconReeval.VISIBILITY_POSITION_AND_COLOR, Config[1] if eventPlayer.checkpointA[2] and not eventPlayer.nearestOrb[1] else Color.RED, true) createInWorldText(eventPlayer if eventPlayer.checkpointB[0] else null, Config[2], eventPlayer.checkpointB[0] + vect(0, 0.2, 0), Config[3], Clip.NONE, WorldTextReeval.VISIBILITY_POSITION_AND_STRING, Config[4], SpecVisibility.DEFAULT) createIcon(eventPlayer if eventPlayer.checkpointB[0] else null, eventPlayer.checkpointB[0] + vect(0, 1.3, 0), Icon.FLAG, IconReeval.VISIBILITY_AND_POSITION, Config[5], true) createEffect(eventPlayer if eventPlayer.checkpointB[0] else null, Effect.RING, Config[7] if not eventPlayer.checkpointB[5] else Config[10], eventPlayer.checkpointB[0], eventPlayer.checkpointB[1], EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) if Config[8] == 0: createEffect(eventPlayer if eventPlayer.checkpointB[0] else null, Effect.LIGHT_SHAFT, Config[6] if not eventPlayer.checkpointB[5] else Config[9], eventPlayer.checkpointB[0], eventPlayer.checkpointB[1], EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif Config[8] == 1: createEffect(eventPlayer if eventPlayer.checkpointB[0] else null, Effect.SPARKLES, Config[6] if not eventPlayer.checkpointB[5] else Config[9], eventPlayer.checkpointB[0], eventPlayer.checkpointB[1], EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) elif Config[8] == 2: createEffect(eventPlayer if eventPlayer.checkpointB[0] else null, Effect.CLOUD, Config[6] if not eventPlayer.checkpointB[5] else Config[9], eventPlayer.checkpointB[0], eventPlayer.checkpointB[1], EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) else: createEffect(eventPlayer if eventPlayer.checkpointB[0] else null, Effect.BAD_AURA, Config[6] if not eventPlayer.checkpointB[5] else Config[9], eventPlayer.checkpointB[0], eventPlayer.checkpointB[1], EffectReeval.VISIBILITY_POSITION_RADIUS_AND_COLOR) if not EditMode: hudText(getAllPlayers() if eventPlayer.bestRecord and Top5.index(eventPlayer.playerNickname) < 0 else null, heroIcon(Hero.MERCY), eventPlayer.playerNickname, "{0} sec".format(eventPlayer.bestRecord), HudPosition.LEFT, eventPlayer.bestRecord / 100, Config[28], Config[28], Config[28], HudReeval.VISIBILITY_SORT_ORDER_AND_STRING, SpecVisibility.DEFAULT) hudSubheader(eventPlayer, "Previous Segment: {0} {1}".format(eventPlayer.segmentTimeArray[eventPlayer.checkpoint - 1] if eventPlayer.checkpoint else "N/A", "({0})".format(eventPlayer.segmentVsPersonalBestArray[eventPlayer.checkpoint - 1]) if eventPlayer.checkpoint and eventPlayer.personalBestArray else ""), HudPosition.RIGHT, 1, (rgb(255, 215, 0) if eventPlayer.segmentTimeArray[eventPlayer.checkpoint - 1] <= eventPlayer.bestSegmentsArray[eventPlayer.checkpoint - 1] else Color.GREEN if eventPlayer.segmentTimeArray[eventPlayer.checkpoint - 1] <= eventPlayer.personalBestArray[eventPlayer.checkpoint - 1] else Color.RED) if eventPlayer.checkpoint and eventPlayer.personalBestArray else Color.GREEN, HudReeval.VISIBILITY_STRING_AND_COLOR, SpecVisibility.DEFAULT) hudSubheader(eventPlayer, "Running Total vs pb: {0}".format(eventPlayer.vsPersonalBestRunningTally) if eventPlayer.checkpoint and eventPlayer.personalBestArray else "", HudPosition.RIGHT, 1, Color.GREEN if eventPlayer.vsPersonalBestRunningTally <= 0 else Color.RED, HudReeval.VISIBILITY_STRING_AND_COLOR, SpecVisibility.DEFAULT) hudSubheader(eventPlayer, "Sum of Best: {0}".format(eventPlayer.sumOfBestSegments) if eventPlayer.personalBestArray else "", HudPosition.RIGHT, 1, rgb(150, 230, 210), HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) hudHeader(eventPlayer if Tips[eventPlayer.displayedCheckpoint] and not eventPlayer.freeMode and not eventPlayer.finished else null, "{0} : \n {1}\n".format(heroIcon(Hero.MERCY), Tips[eventPlayer.displayedCheckpoint]), HudPosition.TOP, 100, Color.TURQUOISE, HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) hudSubtext(eventPlayer, "Mistakes: {0} Times\nTime: {1} Seconds".format("∞" if eventPlayer.cheat else eventPlayer.mistake, "∞" if eventPlayer.cheat else eventPlayer.time), HudPosition.RIGHT, 0, Color.WHITE, HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) #hudText(eventPlayer if eventPlayer.finished else null, heroIcon(getAllHeroes()[eventPlayer.chooseHero]), l"{0} {1}".format(l"Hero", eventPlayer.chooseHero + 1), getAllHeroes()[eventPlayer.chooseHero], HudPosition.RIGHT, 5, Color.WHITE, Color.WHITE, Color.WHITE, HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) #hudSubheader(eventPlayer if eventPlayer.finished else null, "Pitch: {0}{1} {2}".format(eventPlayer.voice, ".00" if eventPlayer.voice % 1 == 0 else "", "Trajectory: {0}{1}\r\n{2}".format(eventPlayer.projectile / 100, ".00" if eventPlayer.projectile % 100 == 0 else "", "Body size: {0}{1} {2}".format(eventPlayer.bodySize, ".00" if eventPlayer.bodySize % 1 == 0 else "", "Barrier: {0}{1}".format(eventPlayer.barrierSize, ".00" if eventPlayer.barrierSize % 1 == 0 else "")))), HudPosition.RIGHT, 6, Color.WHITE, HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) def TeleportToCurrentCheckoint(): @Name "Subroutine TeleportToCurrentCheckoint (Originally from peace's mercy parkour editor: T6QQT)" CancelAbilityAndMomentum() eventPlayer.mistake += 1 if eventPlayer.checkpoint != 0 and not eventPlayer.freeMode and distance(eventPlayer, eventPlayer.checkpointA[0]) > eventPlayer.checkpointA[1] else 0 eventPlayer.teleport(eventPlayer.checkpointA[0]) eventPlayer.setStatusEffect(null, Status.ROOTED, 0.25) SetCurrentAbilities() if eventPlayer.currentOrb: TeleportCurrentBot() def ContinueTiming(): @Name "Subroutine ContinueTiming (Originally from peace's mercy parkour editor: T6QQT)" if not EditMode and not eventPlayer.finished and not eventPlayer.freeMode and not eventPlayer.cheat and eventPlayer.leaveOriginalCheckpoint: chase(eventPlayer.time, 16200, rate=1, ChaseReeval.NONE) def GetCurrentCheckpoint(): @Name "Subroutine GetCurrentCheckpoint (Originally from peace's mercy parkour editor: T6QQT)" eventPlayer.checkpointA = Checkpoint[eventPlayer.checkpoint] if Checkpoint[eventPlayer.checkpoint] else null eventPlayer.checkpointB = Checkpoint[eventPlayer.checkpoint + 1] if Checkpoint[eventPlayer.checkpoint + 1] else null eventPlayer.displayedCheckpoint = eventPlayer.checkpoint - (len([player for player, i in Checkpoint if i <= eventPlayer.checkpoint and player[5]])) eventPlayer.numberOfNeedResurrect = (1 if eventPlayer.checkpointA[3][1] else 0) + (len([i for i in eventPlayer.checkpointA[6] if i[2] and i[1]])) eventPlayer.currentOrb = eventPlayer.checkpointA[6] eventPlayer.tempCurrentOrb = eventPlayer.currentOrb eventPlayer.currentSphere = eventPlayer.checkpointA[7] eventPlayer.currentCloud = eventPlayer.checkpointA[8] def SetCurrentAbilities(): @Name "Subroutine SetCurrentAbilities (Originally from peace's mercy parkour editor: T6QQT)" eventPlayer.setCrouchEnabled(eventPlayer.checkpointA[2]) #eventPlayer.setAbility1Enabled(true if eventPlayer.checkpointA[3][0] else false) eventPlayer.setAbility1Enabled(true) eventPlayer.setAbility2Enabled(false) if eventPlayer.checkpointA[3][1]: kill(eventPlayer.targetBot, null) else: eventPlayer.targetBot.resurrect() heal(eventPlayer.targetBot, null, 1000) eventPlayer.ability2 = false eventPlayer.resurrectNumber = 0 eventPlayer.tempCurrentOrb = eventPlayer.currentOrb eventPlayer.nearestOrb = null eventPlayer.isSetAbilities = true def TeleportCurrentBot(): @Name "Subroutine TeleportCurrentBot (Originally from peace's mercy parkour editor: T6QQT)" eventPlayer.targetBot.teleport(eventPlayer.checkpointA[3][0] if eventPlayer.checkpointA[3][0] else Config[60]) eventPlayer.targetBot.startForcingOutlineFor(eventPlayer, true, (Config[1] if eventPlayer.checkpointA[2] else Color.RED) if eventPlayer.checkpointA[3][0] else null, OutlineVisibility.ALWAYS) def DisplayCurrentAbilityMsgs(): @Name "Subroutine DisplayCurrentAbilityMsgs (Originally from peace's mercy parkour editor: T6QQT)" if eventPlayer.checkpointA[5] or not eventPlayer.checkpointB: return if len(eventPlayer.currentOrb) > 0: smallMessage(eventPlayer, Config[20] if Config[20] else "This level has {0} orb to get".format(len(eventPlayer.currentOrb))) if not eventPlayer.checkpointA[3][0]: smallMessage(eventPlayer, Config[19]) else: if len([player for player in Checkpoint if player[2]]) >= (len([player for player in Checkpoint if not player[2]])) and not eventPlayer.checkpointA[2]: smallMessage(eventPlayer, Config[17]) elif len([player for player in Checkpoint if player[2]]) < (len([player for player in Checkpoint if not player[2]])) and eventPlayer.checkpointA[2]: smallMessage(eventPlayer, Config[18]) if eventPlayer.checkpointA[4]: smallMessage(eventPlayer, Config[29]) elif len([player for player in Checkpoint if player[4]]) >= (len([player for player in Checkpoint if not player[4]])) and not eventPlayer.checkpointA[4]: smallMessage(eventPlayer, Config[30]) def CreateCurrentEffects(): @Name "Subroutine CreateCurrentEffects (Originally from peace's mercy parkour editor: T6QQT)" destroyEffect(eventPlayer.orbEffects) destroyEffect(eventPlayer.botEffects) eventPlayer.orbEffects = [] eventPlayer.botEffects = [] while len(eventPlayer.orbIcons) > 0: destroyIcon(eventPlayer.orbIcons[0]) del eventPlayer.orbIcons[0] destroyIcon(eventPlayer.botIcons[0]) del eventPlayer.botIcons[0] destroyEffect(eventPlayer.sphereEffects) eventPlayer.sphereEffects = [] destroyEffect(eventPlayer.cloudEffects) eventPlayer.cloudEffects = [] if EditMode and eventPlayer == hostPlayer: CurrentChooseOrb = 0 ChooseOrbPosition = eventPlayer.currentOrb[CurrentChooseOrb][0] CurrentChooseSphere = 0 ChooseSpherePosition = eventPlayer.currentSphere[CurrentChooseSphere][0] CurrentChooseCloud = 0 ChooseCloudPosition = eventPlayer.currentCloud[CurrentChooseCloud][0] for eventPlayer.i in range(len(eventPlayer.currentOrb)): if eventPlayer.currentOrb[eventPlayer.i][1]: createIcon(eventPlayer if any([player[0] == evalOnce(eventPlayer.currentOrb[eventPlayer.i][0]) for player in eventPlayer.tempCurrentOrb]) or eventPlayer.finished or eventPlayer.freeMode else null, eventPlayer.currentOrb[eventPlayer.i][1] + vect(0, 2, 0), Icon.ARROW_DOWN, IconReeval.VISIBILITY, Config[49] if eventPlayer.currentOrb[eventPlayer.i][2] else Config[46], true) eventPlayer.botIcons[eventPlayer.i] = getLastCreatedEntity() createEffect(eventPlayer if any([player[0] == evalOnce(eventPlayer.currentOrb[eventPlayer.i][0]) for player in eventPlayer.tempCurrentOrb]) or eventPlayer.finished or eventPlayer.freeMode else null, Effect.GOOD_AURA, Config[50] if eventPlayer.currentOrb[eventPlayer.i][2] else Config[47], eventPlayer.currentOrb[eventPlayer.i][1] + vect(0, 0.8, 0), 1, EffectReeval.VISIBILITY) eventPlayer.botEffects[eventPlayer.i] = getLastCreatedEntity() createIcon(eventPlayer if any([player[0] == evalOnce(eventPlayer.currentOrb[eventPlayer.i][0]) for player in eventPlayer.tempCurrentOrb]) or eventPlayer.finished or eventPlayer.freeMode else null, eventPlayer.currentOrb[eventPlayer.i][0] + vect(0, 0.5, 0), Icon.RECYCLE, IconReeval.VISIBILITY, Config[48] if eventPlayer.currentOrb[eventPlayer.i][2] else Config[45], true) else: createIcon(eventPlayer if any([player[0] == evalOnce(eventPlayer.currentOrb[eventPlayer.i][0]) for player in eventPlayer.tempCurrentOrb]) or eventPlayer.finished or eventPlayer.freeMode else null, eventPlayer.currentOrb[eventPlayer.i][0] + vect(0, 0.5, 0), Icon.HALO, IconReeval.VISIBILITY, Config[43], true) eventPlayer.orbIcons[eventPlayer.i] = getLastCreatedEntity() createEffect(eventPlayer if any([player[0] == evalOnce(eventPlayer.currentOrb[eventPlayer.i][0]) for player in eventPlayer.tempCurrentOrb]) or eventPlayer.finished or eventPlayer.freeMode else null, Effect.ORB, Config[44] if eventPlayer.currentOrb[eventPlayer.i][1] else Config[42], eventPlayer.currentOrb[eventPlayer.i][0], 1, EffectReeval.VISIBILITY) eventPlayer.orbEffects[eventPlayer.i] = getLastCreatedEntity() for eventPlayer.i in range(len(eventPlayer.currentSphere)): createEffect(eventPlayer, Effect.SPHERE, Config[40], eventPlayer.currentSphere[eventPlayer.i][0], eventPlayer.currentSphere[eventPlayer.i][1], EffectReeval.VISIBILITY) eventPlayer.sphereEffects[eventPlayer.i] = getLastCreatedEntity() for eventPlayer.i in range(len(eventPlayer.currentCloud)): createEffect(eventPlayer, Effect.CLOUD, Config[41], eventPlayer.currentCloud[eventPlayer.i][0], 1, EffectReeval.VISIBILITY) eventPlayer.cloudEffects[eventPlayer.i] = getLastCreatedEntity() def CreateCurrentWorldText(): @Name "Subroutine CreateCurrentWorldText (Originally from peace's mercy parkour editor: T6QQT)" destroyInWorldText(eventPlayer.currentWorldText) if WorldTexts[eventPlayer.displayedCheckpoint] and not eventPlayer.checkpointA[5]: createInWorldText(eventPlayer, WorldTexts[eventPlayer.displayedCheckpoint][0], WorldTexts[eventPlayer.displayedCheckpoint][1] if WorldTexts[eventPlayer.displayedCheckpoint][1] else eventPlayer.checkpointB[0] + vect(0, 1.8, 0), WorldTexts[eventPlayer.displayedCheckpoint][2], Clip.NONE, WorldTextReeval.VISIBILITY, WorldTexts[eventPlayer.displayedCheckpoint][3], SpecVisibility.DEFAULT) eventPlayer.currentWorldText = getLastCreatedText() def DisplayCurrentCustomBigMsgs(): @Name "Subroutine DisplayCurrentCustomBigMsgs (Originally from peace's mercy parkour editor: T6QQT)" if BigMessages[eventPlayer.displayedCheckpoint] and not eventPlayer.checkpointA[5]: eventPlayer.currentBigMessage = [i for i in BigMessages[eventPlayer.displayedCheckpoint] if i] while len(eventPlayer.currentBigMessage) > 0: wait(0.5) bigMessage(eventPlayer, eventPlayer.currentBigMessage[0]) wait(2.3) del eventPlayer.currentBigMessage[0] def DisplayCurrentCustomSmallMsgs(): @Name "Subroutine DisplayCurrentCustomSmallMsgs (Originally from peace's mercy parkour editor: T6QQT)" if SmallMessages[eventPlayer.displayedCheckpoint] and not eventPlayer.checkpointA[5]: eventPlayer.currentSmallMessage = [i for i in SmallMessages[eventPlayer.displayedCheckpoint] if i] while len(eventPlayer.currentSmallMessage) > 0: wait(0.5) smallMessage(eventPlayer, eventPlayer.currentSmallMessage[0]) wait(2.3) del eventPlayer.currentSmallMessage[0] def EnableAllAbilities(): @Name "Subroutine EnableAllAbilities (Originally from peace's mercy parkour editor: T6QQT)" eventPlayer.setCrouchEnabled(true) eventPlayer.setAbility1Enabled(true) eventPlayer.setAbility2Enabled(false) eventPlayer.setUltEnabled(false) eventPlayer.setUltCharge(100) def CancelAbilityAndMomentum(): @Name "Subroutine CancelAbilityAndMomentum (Originally from peace's mercy parkour editor: T6QQT)" eventPlayer.cancelPrimaryAction() eventPlayer.applyImpulse(Vector.UP, 0, Relativity.TO_WORLD, Impulse.CANCEL_CONTRARY_MOTION_XYZ) wait(0.016, Wait.RESTART_WHEN_TRUE) eventPlayer.applyImpulse(normalize(eventPlayer.getVelocity()) * -1 * 1, eventPlayer.getSpeed(), Relativity.TO_WORLD, Impulse.INCORPORATE_CONTRARY_MOTION) def ValidationPlayerData(): @Name "Subroutine ValidationPlayerData (Originally from peace's mercy parkour editor: T6QQT)" if PlayersData.index("{0}".format(eventPlayer)) > -1: eventPlayer.checkpoint = (([player for player in PlayersData if player[0] == "{0}".format(eventPlayer)])[0])[1] eventPlayer.time = (([player for player in PlayersData if player[0] == "{0}".format(eventPlayer)])[0])[2] eventPlayer.mistake = (([player for player in PlayersData if player[0] == "{0}".format(eventPlayer)])[0])[3] smallMessage(eventPlayer, "Welcome back, {0}".format(eventPlayer.playerNickname)) else: PlayersData[len(PlayersData)] = ["{0}".format(eventPlayer), eventPlayer.checkpoint, eventPlayer.time, eventPlayer.mistake] eventPlayer.dataIndex = PlayersData.index("{0}".format(eventPlayer)) / 4 def EditPlayerData(): @Name "Subroutine EditPlayerData (Originally from peace's mercy parkour editor: T6QQT)" PlayersData[eventPlayer.dataIndex] = ["{0}".format(eventPlayer), eventPlayer.checkpoint, eventPlayer.time, eventPlayer.mistake] if eventPlayer.checkpoint < len(Checkpoint) - 1 else ["{0}".format(eventPlayer), 0, 0, 0] def TempSavePlayerData(): @Name "Subroutine TempSavePlayerData (Originally from peace's mercy parkour editor: T6QQT)" if not EditMode: if not eventPlayer.cheat: stopChasingVariable(eventPlayer.time) EditPlayerData() eventPlayer.playerData = [_ for _, i in PlayersData[eventPlayer.dataIndex] if i != 0] eventPlayer.playerData.append(eventPlayer.displayedCheckpoint) if not eventPlayer.finished: smallMessage(eventPlayer, "Timer paused, Return to the level {0} again to continue timing >_<".format(eventPlayer.playerData[3])) bigMessage(eventPlayer, "\"Need Help\", Return to level {0}".format(eventPlayer.playerData[3])) if eventPlayer.finished: eventPlayer.bodySize = 1 eventPlayer.startForcingHero(Hero.WIDOWMAKER) CreatePlayerTargetBot() def ChooseCheckpoint(): @Name "Subroutine ChooseCheckpoint (Originally from peace's mercy parkour editor: T6QQT)" if eventPlayer.isHoldingButton(Button.PRIMARY_FIRE): eventPlayer.checkpoint += 1 - len(Checkpoint) if eventPlayer.checkpoint == len(Checkpoint) - 1 else 1 else: eventPlayer.checkpoint -= 1 - len(Checkpoint) if eventPlayer.checkpoint == 0 else 1 def SkipOrBackCheckpoint(): @Name "Subroutine SkipOrBackCheckpoint (Originally from peace's mercy parkour editor: T6QQT)" if not EditMode: if eventPlayer.checkpoint == eventPlayer.playerData[0]: eventPlayer.cheat = false eventPlayer.leaveOriginalCheckpoint = false eventPlayer.time = eventPlayer.playerData[1] eventPlayer.mistake = eventPlayer.playerData[2] if eventPlayer.checkpoint != 0 or eventPlayer.playerData[3] == 0: smallMessage(eventPlayer, "You have returned to level {0}, Leave the checkpoint and continue timing!".format(eventPlayer.playerData[3])) else: eventPlayer.cheat = true eventPlayer.teleport(Checkpoint[eventPlayer.checkpoint][0]) GetCurrentCheckpoint() if not eventPlayer.freeMode: SetCurrentAbilities() KillOrResurrectBot() async(CreateCurrentEffects, AsyncBehavior.RESTART) CreateCurrentWorldText() if not EditMode and eventPlayer.checkpoint == len(Checkpoint) - 1: destroyDummy(eventPlayer.getTeam(), eventPlayer.getSlot() + getNumberOfSlots(Team.ALL)) def PlayDestroyMapEffect(): @Name "Subroutine PlayDestroyMapEffect -- by Mazattack#1183" if getCurrentMap() == Map.WATCHPOINT_GIBRALTAR: setMatchTime(48 + (random.randint(horizontalAngleOfDirection(directionTowards(getObjectivePosition(1), getObjectivePosition(0))) / 7.5 - 12, horizontalAngleOfDirection(directionTowards(getObjectivePosition(1), getObjectivePosition(0))) / 7.5 + -6))) elif getCurrentMap() == Map.ROUTE66: setMatchTime(48 + (random.randint(horizontalAngleOfDirection(directionTowards(getObjectivePosition(1), getObjectivePosition(0))) / 7.5 - -6, horizontalAngleOfDirection(directionTowards(getObjectivePosition(1), getObjectivePosition(0))) / 7.5 + 12))) else: setMatchTime(48 + (random.randint(horizontalAngleOfDirection(directionTowards(getObjectivePosition(1), getObjectivePosition(0))) / 7.5 - 6, horizontalAngleOfDirection(directionTowards(getObjectivePosition(1), getObjectivePosition(0))) / 7.5 + 9))) Chase = (nearestWalkablePosition(vect(999, 999, 999)) + nearestWalkablePosition(vect(-999, -999, -999))) / 2 + angleToDirection(random.randint(0, 359), random.uniform(-45, -60)) * 500 wait() chase(Chase, (nearestWalkablePosition(vect(999, 999, 999)) + nearestWalkablePosition(vect(-999, -999, -999))) / 2, duration=5, ChaseReeval.DESTINATION_AND_DURATION) while distance(Chase, (nearestWalkablePosition(vect(999, 999, 999)) + nearestWalkablePosition(vect(-999, -999, -999))) / 2) > 1: playEffect(getAllPlayers(), DynamicEffect.GOOD_EXPLOSION, Color.SKY_BLUE, Chase, 3) wait() for I in range(400): playEffect(getAllPlayers(), DynamicEffect.BAD_EXPLOSION, Color.ORANGE, (nearestWalkablePosition(vect(999, 999, 999)) + nearestWalkablePosition(vect(-999, -999, -999))) / 2 + (angleToDirection(random.uniform(0, 360), 0) * (random.randint(0, (I + 1) / 1))), random.randint(I / 5, I)) playEffect(getAllPlayers(), DynamicEffect.BAD_EXPLOSION, Color.ORANGE, (nearestWalkablePosition(vect(999, 999, 999)) + nearestWalkablePosition(vect(-999, -999, -999))) / 2 + (angleToDirection(random.uniform(0, 360), 0) * (random.randint(0, (I + 1) / 1))), I) wait() rule "Redirect damage to attacker's bot (I made this *smile*)": @Event playerDealtDamage @Condition eventPlayer.isDummy() == false if victim != eventPlayer.targetBot: if victim.isDead(): victim.resurrect() heal(victim, null, 1000) else: heal(victim, null, eventDamage) if distance(victim, eventPlayer.targetBot) <= 1: damage(eventPlayer.targetBot, eventPlayer, eventDamage) #eventPlayer.recentDamage = eventDamage else: if eventDamage >= 100: smallMessage(eventPlayer, "you are shooting the wrong zen") else: if not eventDamage > 300: eventPlayer.recentDamage = eventDamage if eventPlayer.targetBot.getHealth() <= eventPlayer.targetBot.getMaxHealth() - eventPlayer.trueBotHealth: kill(eventPlayer.targetBot, eventPlayer) rule "Prevent killing the bot from starting cp": @Event playerDealtDamage @Condition eventPlayer.isDummy() == false @Condition distance(eventPlayer, eventPlayer.checkpointA[0]) < eventPlayer.checkpointA[1] if victim.isDead(): smallMessage(eventPlayer, "You can't kill zen from the starting CP.") victim.resurrect() heal(victim, null, 1000) else: heal(victim, null, eventDamage) /* rule "Rule 101": hudText(getAllPlayers(), getServerLoad(), getPeakServerLoad(), getAverageServerLoad(), HudPosition.LEFT, 0, Color.WHITE, Color.WHITE, Color.WHITE, HudReeval.VISIBILITY_AND_STRING, SpecVisibility.DEFAULT) */ rule "Rule 102": @Event eachPlayer @Team 1 @Condition eventPlayer.isAlive() == true @Condition eventPlayer.checkpoint == len(Checkpoint) - 1 @Condition EditMode == false eventPlayer.segmentTimeString = "This Run Segments:" for eventPlayer.segmentTimeArrayCounter in range(len(eventPlayer.segmentTimeArray)): eventPlayer.segmentTimeString = "{0}\r\nCheckpoint {2}: {1}".format(eventPlayer.segmentTimeString, eventPlayer.segmentTimeArray[eventPlayer.segmentTimeArrayCounter], eventPlayer.segmentTimeArrayCounter) eventPlayer.segmentTimeString = "{0}\r\nTotal Time: {1}".format(eventPlayer.segmentTimeString, eventPlayer.time) if eventPlayer.time <= eventPlayer.bestRecord: if eventPlayer.time <= FirstPlaceTime: FirstPlaceTimeString = "1ST Place Segments:" for eventPlayer.segmentTimeArrayCounter in range(len(eventPlayer.segmentTimeArray)): FirstPlaceTimeString = "{0}\r\nCheckpoint {2}: {1}".format(FirstPlaceTimeString, FirstPlaceTimeArray[eventPlayer.segmentTimeArrayCounter], eventPlayer.segmentTimeArrayCounter) FirstPlaceTimeString = "{0}\nTotal Time: {1}".format(FirstPlaceTimeString, FirstPlaceTime) eventPlayer.personalBestString = "Personal Best Segments:" for eventPlayer.segmentTimeArrayCounter in range(len(eventPlayer.segmentTimeArray)): eventPlayer.personalBestString = "{0}\r\nCheckpoint {2}: {1}".format(eventPlayer.personalBestString, eventPlayer.personalBestArray[eventPlayer.segmentTimeArrayCounter], eventPlayer.segmentTimeArrayCounter) eventPlayer.personalBestString = "{0}\r\nTotal Time: {1}".format(eventPlayer.personalBestString, eventPlayer.time) #wait(5) if not eventPlayer.bestSegmentsArrayString: eventPlayer.bestSegmentsArrayString = "Best Segments (Across Your Runs):" for eventPlayer.segmentTimeArrayCounter in range(len(eventPlayer.segmentTimeArray)): eventPlayer.bestSegmentsArrayString = "{0}\r\nCheckpoint {2}: {1}".format(eventPlayer.bestSegmentsArrayString, eventPlayer.bestSegmentsArray[eventPlayer.segmentTimeArrayCounter], eventPlayer.segmentTimeArrayCounter) eventPlayer.bestSegmentsArrayString = "{0}\r\nTotal Time: {1}".format(eventPlayer.bestSegmentsArrayString, eventPlayer.sumOfBestSegments if eventPlayer.personalBestArray else "N/A") rule "changing hero (hit need healing comms button) - ty to felicity for the code for this rule": @Event eachPlayer @Team 1 @Condition eventPlayer.isCommunicating(Comms.NEED_HEALING) == true @Condition EditMode == true eventPlayer.setAllowedHeroes(getAllHeroes().exclude(eventPlayer.getCurrentHero())) wait(0.25) eventPlayer.editModeCharacterResetted = 1 eventPlayer.resetHeroAvailability() rule "Rule 104": rule "Get orb": @Event eachPlayer @Condition eventPlayer.tempCurrentOrb != [] @Condition eventPlayer.checkpointA == true @Condition (any([distance(eventPlayer, player[0]) <= 1.5 or distance(eventPlayer.getEyePosition(), player[0]) <= 1.5 for player in eventPlayer.tempCurrentOrb])) == true #if not eventPlayer.targetBot.isAlive() and not eventPlayer.freeMode and not eventPlayer.finished: #TeleportToCurrentCheckoint() #smallMessage(eventPlayer, Config[33][1] if "{0}".format(Hero.MERCY) == "메르시" else Config[33][2] if "{0}".format(Hero.MERCY) == "天使" else Config[33][0]) #playEffect(eventPlayer, DynamicEffect.EXPLOSION_SOUND, null, eventPlayer, 100) #return #__end__() eventPlayer.nearestOrb = ([player for player in eventPlayer.tempCurrentOrb if distance(eventPlayer, player[0]) <= 1.5 or distance(eventPlayer.getEyePosition(), player[0]) <= 1.5])[0] eventPlayer.tempCurrentOrb = [player for player in eventPlayer.tempCurrentOrb if distance(eventPlayer, player[0]) > 1.5 and distance(eventPlayer.getEyePosition(), player[0]) > 1.5] if not eventPlayer.finished and not eventPlayer.freeMode else eventPlayer.tempCurrentOrb if eventPlayer.nearestOrb[1] and (eventPlayer.editMode != 2 or not eventPlayer.freeMode and not eventPlayer.finished): if eventPlayer.nearestOrb[2]: eventPlayer.setAbility2Enabled(true) kill(eventPlayer.targetBot, null) eventPlayer.ability2 = true elif not eventPlayer.targetBot.isAlive(): eventPlayer.targetBot.resurrect() TeleportBotToRefreshPosition() smallMessage(eventPlayer, "{0}{1}{2}".format(Config[21][1] if "{0}".format(Hero.MERCY) == "메르시" else Config[21][2] if "{0}".format(Hero.MERCY) == "天使" else Config[21][0], " {0} / {1}".format(len(eventPlayer.currentOrb) - len(eventPlayer.tempCurrentOrb), len(eventPlayer.currentOrb)) if not eventPlayer.finished and not eventPlayer.freeMode else "", (", {0}".format(Config[23][1] if "{0}".format(Hero.MERCY) == "메르시" else Config[23][2] if "{0}".format(Hero.MERCY) == "天使" else Config[23][0])) if eventPlayer.nearestOrb[1] and not eventPlayer.checkpointA[4] else "")) playEffect(eventPlayer, DynamicEffect.BUFF_IMPACT_SOUND, null, eventPlayer, 80) if not eventPlayer.nearestOrb[1] or eventPlayer.freeMode or eventPlayer.finished or eventPlayer.checkpointA[4] and eventPlayer.checkpointA[3][0]: return waitUntil(not eventPlayer.isUsingAbility1(), 9999) eventPlayer.setAbility1Enabled(true)
Editor is loading...
Leave a Comment