public static void shieldedMurderAttempt() { if (Medic.shielded != null && Medic.shielded == PlayerControl.LocalPlayer && Medic.showAttemptToShielded && HudManager.CMJOLNCMAPD?.FullScreen != null) { HudManager.CMJOLNCMAPD.FullScreen.enabled = true; HudManager.CMJOLNCMAPD.StartCoroutine(Effects.LDACHPMFOIF(0.5f, new Action <float>((p) => { var renderer = HudManager.CMJOLNCMAPD.FullScreen; Color c = Palette.LDCHDOFJPGH; if (p < 0.5) { if (renderer != null) { renderer.color = new Color(c.r, c.g, c.b, Mathf.Clamp01(p * 2 * 0.75f)); } } else { if (renderer != null) { renderer.color = new Color(c.r, c.g, c.b, Mathf.Clamp01((1 - p) * 2 * 0.75f)); } } if (p == 1f && renderer != null) { renderer.enabled = false; } }))); } }
public Footprint(float footprintDuration, bool anonymousFootprints, PlayerControl player) { this.owner = player; this.anonymousFootprints = anonymousFootprints; if (anonymousFootprints) { this.color = Palette.CALCLMEEPGL[6]; } else { this.color = Palette.CALCLMEEPGL[(int)player.IDOFAMCIJKE.JFHFMIKFHGG]; } footprint = new GameObject("Footprint"); Vector3 position = new Vector3(player.transform.position.x, player.transform.position.y, player.transform.position.z + 1f); footprint.transform.position = position; footprint.transform.localPosition = position; footprint.transform.SetParent(player.transform.parent); footprint.transform.Rotate(0.0f, 0.0f, UnityEngine.Random.Range(0.0f, 360.0f)); spriteRenderer = footprint.AddComponent <SpriteRenderer>(); spriteRenderer.sprite = getFootprintSprite(); spriteRenderer.color = color; footprint.SetActive(true); footprints.Add(this); PlayerControl.LocalPlayer.StartCoroutine(Effects.LDACHPMFOIF(footprintDuration, new Action <float>((p) => { Color c = color; if (!anonymousFootprints && owner != null) { if (owner == Morphling.morphling && Morphling.morphTimer > 0 && Morphling.morphTarget?.IDOFAMCIJKE != null) { c = Palette.CHIIBPFJACF[Morphling.morphTarget.IDOFAMCIJKE.JFHFMIKFHGG]; } else if (Camouflager.camouflageTimer > 0) { c = Palette.CALCLMEEPGL[6]; } } if (spriteRenderer) { spriteRenderer.color = new Color(c.r, c.g, c.b, Mathf.Clamp01(1 - p)); } if (p == 1f && footprint != null) { UnityEngine.Object.Destroy(footprint); footprints.Remove(this); } }))); }
public static void timeMasterShield() { TimeMaster.shieldActive = true; PlayerControl.LocalPlayer.StartCoroutine(Effects.LDACHPMFOIF(TimeMaster.shieldDuration, new Action <float>((p) => { if (p == 1f) { TimeMaster.shieldActive = false; } }))); }
public static void timeMasterRewindTime() { HudManager.CMJOLNCMAPD.FullScreen.color = new Color(0f, 0.5f, 0.8f, 0.3f); HudManager.CMJOLNCMAPD.FullScreen.enabled = true; PlayerControl.LocalPlayer.StartCoroutine(Effects.LDACHPMFOIF(TimeMaster.rewindTime / 2, new Action <float>((p) => { if (p == 1f) { HudManager.CMJOLNCMAPD.FullScreen.enabled = false; } }))); if (TimeMaster.timeMaster == null) { return; } PlayerControl lp = PlayerControl.LocalPlayer; if (lp?.IDOFAMCIJKE != null && !lp.IDOFAMCIJKE.FGNJJFABIHJ && lp.inVent) { if ((float)(DateTime.UtcNow - localVentEnterTimePoint).TotalMilliseconds < 1000 * TimeMaster.rewindTime) { foreach (Vent vent in ShipStatus.Instance.GIDPCPOEFBC) { bool canUse; bool couldUse; vent.CanUse(PlayerControl.LocalPlayer.IDOFAMCIJKE, out canUse, out couldUse); if (canUse) { PlayerControl.LocalPlayer.MyPhysics.RpcExitVent(vent.Id); vent.SetButtons(false); } } } } if (PlayerControl.LocalPlayer == TimeMaster.timeMaster) { return; // Time Master himself does not rewind } TimeMaster.isRewinding = true; if (MapBehaviour.Instance) { MapBehaviour.Instance.Close(); } if (Minigame.Instance) { Minigame.Instance.ForceClose(); } PlayerControl.LocalPlayer.moveable = false; }
static void Prefix(UnityEngine.Object obj) { if (ExileController.Instance != null && obj == ExileController.Instance.gameObject) { // Reset custom button timers where necessary CustomButton.MeetingEndedUpdate(); // Child set adapted cooldown if (Child.child != null && PlayerControl.LocalPlayer == Child.child && Child.child.IDOFAMCIJKE.CIDDOFDJHJH) { var multiplier = Child.isGrownUp() ? 0.66f : 2f; Child.child.SetKillTimer(PlayerControl.GameOptions.ELBDIKIOHHH * multiplier); } // Seer spawn souls if (Seer.deadBodyPositions != null && Seer.seer != null && PlayerControl.LocalPlayer == Seer.seer && (Seer.mode == 0 || Seer.mode == 2)) { foreach (Vector3 pos in Seer.deadBodyPositions) { GameObject soul = new GameObject(); soul.transform.position = pos; soul.layer = 5; var rend = soul.AddComponent <SpriteRenderer>(); rend.sprite = Seer.getSoulSprite(); PlayerControl.LocalPlayer.StartCoroutine(Effects.LDACHPMFOIF(Seer.soulDuration, new Action <float>((p) => { if (rend != null) { var tmp = rend.color; tmp.a = Mathf.Clamp01(1 - p); rend.color = tmp; } if (p == 1f && rend?.gameObject != null) { UnityEngine.Object.Destroy(rend.gameObject); } }))); } Seer.deadBodyPositions = new List <Vector3>(); } } }
public static void Postfix(PlayerControl __instance, PlayerControl IGLDJOKKFJE) { // Collect dead player info DeadPlayer deadPlayer = new DeadPlayer(IGLDJOKKFJE, DateTime.UtcNow, DeathReason.Kill, __instance); GameHistory.deadPlayers.Add(deadPlayer); // Reset killer to crewmate if resetToCrewmate if (resetToCrewmate) { __instance.IDOFAMCIJKE.CIDDOFDJHJH = false; } if (resetToDead) { __instance.IDOFAMCIJKE.FGNJJFABIHJ = true; } // Lover suicide trigger on murder if ((Lovers.lover1 != null && IGLDJOKKFJE == Lovers.lover1) || (Lovers.lover2 != null && IGLDJOKKFJE == Lovers.lover2)) { PlayerControl otherLover = IGLDJOKKFJE == Lovers.lover1 ? Lovers.lover2 : Lovers.lover1; if (PlayerControl.LocalPlayer == IGLDJOKKFJE && otherLover != null && !otherLover.IDOFAMCIJKE.FGNJJFABIHJ && Lovers.bothDie) // Only the dead lover sends the rpc { MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.LoverSuicide, Hazel.SendOption.Reliable, -1); writer.Write(otherLover.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.loverSuicide(otherLover.PlayerId); } } // Sidekick promotion trigger on murder if (Sidekick.promotesToJackal && Sidekick.sidekick != null && !Sidekick.sidekick.IDOFAMCIJKE.FGNJJFABIHJ && IGLDJOKKFJE == Jackal.jackal && Jackal.jackal == PlayerControl.LocalPlayer) { MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.SidekickPromotes, Hazel.SendOption.Reliable, -1); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.sidekickPromotes(); } // Seer show flash and add dead player position if (Seer.seer != null && PlayerControl.LocalPlayer == Seer.seer && !Seer.seer.IDOFAMCIJKE.FGNJJFABIHJ && Seer.seer != IGLDJOKKFJE && Seer.mode <= 1) { HudManager.CMJOLNCMAPD.FullScreen.enabled = true; HudManager.CMJOLNCMAPD.StartCoroutine(Effects.LDACHPMFOIF(1f, new Action <float>((p) => { var renderer = HudManager.CMJOLNCMAPD.FullScreen; if (p < 0.5) { if (renderer != null) { renderer.color = new Color(42f / 255f, 187f / 255f, 245f / 255f, Mathf.Clamp01(p * 2 * 0.75f)); } } else { if (renderer != null) { renderer.color = new Color(42f / 255f, 187f / 255f, 245f / 255f, Mathf.Clamp01((1 - p) * 2 * 0.75f)); } } if (p == 1f && renderer != null) { renderer.enabled = false; } }))); } if (Seer.deadBodyPositions != null) { Seer.deadBodyPositions.Add(IGLDJOKKFJE.transform.position); } // Child set adapted kill cooldown if (Child.child != null && PlayerControl.LocalPlayer == Child.child && Child.child.IDOFAMCIJKE.CIDDOFDJHJH) { var multiplier = Child.isGrownUp() ? 0.66f : 2f; Child.child.SetKillTimer(PlayerControl.GameOptions.ELBDIKIOHHH * multiplier); } }
static bool Prefix(MeetingHud __instance, Il2CppStructArray <byte> HIDHPMAKEKH) { // Swapper swap votes PlayerVoteArea swapped1 = null; PlayerVoteArea swapped2 = null; foreach (PlayerVoteArea playerVoteArea in __instance.DHCOPOOJCLN) { if (playerVoteArea.HMPHKKGPLAG == Swapper.playerId1) { swapped1 = playerVoteArea; } if (playerVoteArea.HMPHKKGPLAG == Swapper.playerId2) { swapped2 = playerVoteArea; } } bool doSwap = swapped1 != null && swapped2 != null; if (doSwap) { __instance.StartCoroutine(Effects.NFAIFCPOFJK(swapped1.transform, swapped1.transform.localPosition, swapped2.transform.localPosition, 2f)); __instance.StartCoroutine(Effects.NFAIFCPOFJK(swapped2.transform, swapped2.transform.localPosition, swapped1.transform.localPosition, 2f)); } // Mayor display vote twice __instance.TitleText.Text = DestroyableSingleton <TranslationController> .CMJOLNCMAPD.GetString(StringNames.MeetingVotingResults, new Il2CppReferenceArray <Il2CppSystem.Object>(0)); int num = doSwap ? 4 : 0; // Delay animaton if swapping for (int i = 0; i < __instance.DHCOPOOJCLN.Length; i++) { PlayerVoteArea playerVoteArea = __instance.DHCOPOOJCLN[i]; playerVoteArea.ClearForResults(); int num2 = doSwap ? 4 : 0; // Delay animaton if swapping bool mayorFirstVoteDisplayed = false; for (int j = 0; j < __instance.DHCOPOOJCLN.Length; j++) { PlayerVoteArea playerVoteArea2 = __instance.DHCOPOOJCLN[j]; byte self = HIDHPMAKEKH[(int)playerVoteArea2.HMPHKKGPLAG]; if (!((self & 128) > 0)) { GameData.OFKOJOKOOAK playerById = GameData.Instance.GetPlayerById((byte)playerVoteArea2.HMPHKKGPLAG); int votedFor = (int)PlayerVoteArea.GetVotedFor(self); if (votedFor == (int)playerVoteArea.HMPHKKGPLAG) { SpriteRenderer spriteRenderer = UnityEngine.Object.Instantiate <SpriteRenderer>(__instance.PlayerVotePrefab); if (PlayerControl.GameOptions.LNMFPEMGKOB) { PlayerControl.SetPlayerMaterialColors(Palette.JMELLHINKGM, spriteRenderer); } else { PlayerControl.SetPlayerMaterialColors((int)playerById.JFHFMIKFHGG, spriteRenderer); } spriteRenderer.transform.SetParent(playerVoteArea.transform); spriteRenderer.transform.localPosition = __instance.ALGONDAMLHA + new Vector3(__instance.LKIOFMMBOBJ.x * (float)num2, 0f, 0f); spriteRenderer.transform.localScale = Vector3.zero; spriteRenderer.transform.SetParent(playerVoteArea.transform.parent); // Reparent votes so they don't move with their playerVoteArea __instance.StartCoroutine(Effects.POFLJMGFBEJ((float)num2 * 0.5f, spriteRenderer.transform, 1f, 0.5f)); num2++; } else if (i == 0 && votedFor == -1) { SpriteRenderer spriteRenderer2 = UnityEngine.Object.Instantiate <SpriteRenderer>(__instance.PlayerVotePrefab); if (PlayerControl.GameOptions.LNMFPEMGKOB) { PlayerControl.SetPlayerMaterialColors(Palette.JMELLHINKGM, spriteRenderer2); } else { PlayerControl.SetPlayerMaterialColors((int)playerById.JFHFMIKFHGG, spriteRenderer2); } spriteRenderer2.transform.SetParent(__instance.SkippedVoting.transform); spriteRenderer2.transform.localPosition = __instance.ALGONDAMLHA + new Vector3(__instance.LKIOFMMBOBJ.x * (float)num, 0f, 0f); spriteRenderer2.transform.localScale = Vector3.zero; spriteRenderer2.transform.SetParent(playerVoteArea.transform.parent); // Reparent votes so they don't move with their playerVoteArea __instance.StartCoroutine(Effects.POFLJMGFBEJ((float)num * 0.5f, spriteRenderer2.transform, 1f, 0.5f)); num++; } // Major vote, redo this iteration to place a second vote if (Mayor.mayor != null && playerVoteArea2.HMPHKKGPLAG == (sbyte)Mayor.mayor.PlayerId && !mayorFirstVoteDisplayed) { mayorFirstVoteDisplayed = true; j--; } } } } return(false); }
public static void Postfix(HudManager __instance) { // Engineer Repair engineerRepairButton = new CustomButton( () => { engineerRepairButton.Timer = 0f; MessageWriter usedRepairWriter = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.EngineerUsedRepair, Hazel.SendOption.Reliable, -1); AmongUsClient.Instance.FinishRpcImmediately(usedRepairWriter); RPCProcedure.engineerUsedRepair(); foreach (PlayerTask task in PlayerControl.LocalPlayer.myTasks) { if (task.TaskType == TaskTypes.FixLights) { MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.EngineerFixLights, Hazel.SendOption.Reliable, -1); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.engineerFixLights(); } else if (task.TaskType == TaskTypes.RestoreOxy) { ShipStatus.Instance.RpcRepairSystem(SystemTypes.LifeSupp, 0 | 64); ShipStatus.Instance.RpcRepairSystem(SystemTypes.LifeSupp, 1 | 64); } else if (task.TaskType == TaskTypes.ResetReactor) { ShipStatus.Instance.RpcRepairSystem(SystemTypes.Reactor, 16); } else if (task.TaskType == TaskTypes.ResetSeismic) { ShipStatus.Instance.RpcRepairSystem(SystemTypes.Laboratory, 16); } else if (task.TaskType == TaskTypes.FixComms) { ShipStatus.Instance.RpcRepairSystem(SystemTypes.Comms, 16 | 0); ShipStatus.Instance.RpcRepairSystem(SystemTypes.Comms, 16 | 1); } else if (task.TaskType == TaskTypes.StopCharles) { ShipStatus.Instance.RpcRepairSystem(SystemTypes.Reactor, 0 | 16); ShipStatus.Instance.RpcRepairSystem(SystemTypes.Reactor, 1 | 16); } } }, () => { return(Engineer.engineer != null && Engineer.engineer == PlayerControl.LocalPlayer && !PlayerControl.LocalPlayer.IDOFAMCIJKE.FGNJJFABIHJ); }, () => { bool sabotageActive = false; foreach (PlayerTask task in PlayerControl.LocalPlayer.myTasks) { if (task.TaskType == TaskTypes.FixLights || task.TaskType == TaskTypes.RestoreOxy || task.TaskType == TaskTypes.ResetReactor || task.TaskType == TaskTypes.ResetSeismic || task.TaskType == TaskTypes.FixComms || task.TaskType == TaskTypes.StopCharles) { sabotageActive = true; } } return(sabotageActive && !Engineer.usedRepair && PlayerControl.LocalPlayer.AMDJMEEHNIG); }, () => {}, Engineer.getButtonSprite(), new Vector3(-1.3f, 0, 0), __instance ); // Janitor Clean janitorCleanButton = new CustomButton( () => { foreach (Collider2D collider2D in Physics2D.OverlapCircleAll(PlayerControl.LocalPlayer.GetTruePosition(), PlayerControl.LocalPlayer.MaxReportDistance, Constants.NFGGONLDDAN)) { if (collider2D.tag == "DeadBody") { DeadBody component = collider2D.GetComponent <DeadBody>(); if (component && !component.Reported) { Vector2 truePosition = PlayerControl.LocalPlayer.GetTruePosition(); Vector2 truePosition2 = component.NCMFGFMFDJB; if (Vector2.Distance(truePosition2, truePosition) <= PlayerControl.LocalPlayer.MaxReportDistance && PlayerControl.LocalPlayer.AMDJMEEHNIG && !PhysicsHelpers.GCFCONMBBOF(truePosition, truePosition2, Constants.DHLPLBPJNBA, false)) { GameData.OFKOJOKOOAK OFKOJOKOOAK = GameData.Instance.GetPlayerById(component.ParentId); MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.JanitorClean, Hazel.SendOption.Reliable, -1); writer.Write(OFKOJOKOOAK.GMBAIPNOKLP); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.janitorClean(OFKOJOKOOAK.GMBAIPNOKLP); janitorCleanButton.Timer = janitorCleanButton.MaxTimer; break; } } } } }, () => { return(Janitor.janitor != null && Janitor.janitor == PlayerControl.LocalPlayer && !PlayerControl.LocalPlayer.IDOFAMCIJKE.FGNJJFABIHJ); }, () => { return(__instance.ReportButton.renderer.color == Palette.MKAFGNEBHKC && PlayerControl.LocalPlayer.AMDJMEEHNIG); }, () => { janitorCleanButton.Timer = janitorCleanButton.MaxTimer; }, Janitor.getButtonSprite(), new Vector3(-1.3f, 0, 0), __instance ); // Sheriff Kill sheriffKillButton = new CustomButton( () => { if (Medic.shielded != null && Medic.shielded == Sheriff.currentTarget) { MessageWriter attemptWriter = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.ShieldedMurderAttempt, Hazel.SendOption.Reliable, -1); AmongUsClient.Instance.FinishRpcImmediately(attemptWriter); RPCProcedure.shieldedMurderAttempt(); return; } byte targetId = 0; if ((Sheriff.currentTarget.IDOFAMCIJKE.CIDDOFDJHJH && (Sheriff.currentTarget != Child.child || Child.isGrownUp())) || Sheriff.currentTarget == Jackal.jackal || Sheriff.currentTarget == Sidekick.sidekick || (Sheriff.spyCanDieToSheriff && Spy.spy != null && Spy.spy == Sheriff.currentTarget) || (Sheriff.jesterCanDieToSheriff && Jester.jester != null && Jester.jester == Sheriff.currentTarget)) { targetId = Sheriff.currentTarget.PlayerId; } else { targetId = PlayerControl.LocalPlayer.PlayerId; } MessageWriter killWriter = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.SheriffKill, Hazel.SendOption.Reliable, -1); killWriter.Write(targetId); AmongUsClient.Instance.FinishRpcImmediately(killWriter); RPCProcedure.sheriffKill(targetId); sheriffKillButton.Timer = sheriffKillButton.MaxTimer; Sheriff.currentTarget = null; }, () => { return(Sheriff.sheriff != null && Sheriff.sheriff == PlayerControl.LocalPlayer && !PlayerControl.LocalPlayer.IDOFAMCIJKE.FGNJJFABIHJ); }, () => { return(Sheriff.currentTarget && PlayerControl.LocalPlayer.AMDJMEEHNIG); }, () => { sheriffKillButton.Timer = sheriffKillButton.MaxTimer; }, __instance.KillButton.renderer.sprite, new Vector3(-1.3f, 0, 0), __instance ); // Time Master Rewind Time timeMasterShieldButton = new CustomButton( () => { MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.TimeMasterShield, Hazel.SendOption.Reliable, -1); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.timeMasterShield(); }, () => { return(TimeMaster.timeMaster != null && TimeMaster.timeMaster == PlayerControl.LocalPlayer && !PlayerControl.LocalPlayer.IDOFAMCIJKE.FGNJJFABIHJ); }, () => { return(PlayerControl.LocalPlayer.AMDJMEEHNIG); }, () => { timeMasterShieldButton.Timer = timeMasterShieldButton.MaxTimer; timeMasterShieldButton.isEffectActive = false; timeMasterShieldButton.killButtonManager.TimerText.Color = Palette.MKAFGNEBHKC; }, TimeMaster.getButtonSprite(), new Vector3(-1.3f, 0, 0), __instance, true, TimeMaster.shieldDuration, () => { timeMasterShieldButton.Timer = timeMasterShieldButton.MaxTimer; } ); // Medic Shield medicShieldButton = new CustomButton( () => { medicShieldButton.Timer = 0f; MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.MedicSetShielded, Hazel.SendOption.Reliable, -1); writer.Write(Medic.currentTarget.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.medicSetShielded(Medic.currentTarget.PlayerId); }, () => { return(Medic.medic != null && Medic.medic == PlayerControl.LocalPlayer && !PlayerControl.LocalPlayer.IDOFAMCIJKE.FGNJJFABIHJ); }, () => { return(!Medic.usedShield && Medic.currentTarget && PlayerControl.LocalPlayer.AMDJMEEHNIG); }, () => {}, Medic.getButtonSprite(), new Vector3(-1.3f, 0, 0), __instance ); // Shifter shift shifterShiftButton = new CustomButton( () => { MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.SetFutureShifted, Hazel.SendOption.Reliable, -1); writer.Write(Shifter.currentTarget.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.setFutureShifted(Shifter.currentTarget.PlayerId); }, () => { return(Shifter.shifter != null && Shifter.shifter == PlayerControl.LocalPlayer && !PlayerControl.LocalPlayer.IDOFAMCIJKE.FGNJJFABIHJ); }, () => { return(Shifter.currentTarget && Shifter.futureShift == null && PlayerControl.LocalPlayer.AMDJMEEHNIG); }, () => { }, Shifter.getButtonSprite(), new Vector3(-1.3f, 0, 0), __instance ); // Morphling morph morphlingButton = new CustomButton( () => { if (Morphling.sampledTarget != null) { MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.MorphlingMorph, Hazel.SendOption.Reliable, -1); writer.Write(Morphling.sampledTarget.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.morphlingMorph(Morphling.sampledTarget.PlayerId); Morphling.sampledTarget = null; morphlingButton.EffectDuration = 10f; } else if (Morphling.currentTarget != null) { Morphling.sampledTarget = Morphling.currentTarget; morphlingButton.Sprite = Morphling.getMorphSprite(); morphlingButton.EffectDuration = 1f; } }, () => { return(Morphling.morphling != null && Morphling.morphling == PlayerControl.LocalPlayer && !PlayerControl.LocalPlayer.IDOFAMCIJKE.FGNJJFABIHJ); }, () => { return((Morphling.currentTarget || Morphling.sampledTarget) && PlayerControl.LocalPlayer.AMDJMEEHNIG); }, () => { morphlingButton.Timer = morphlingButton.MaxTimer; morphlingButton.Sprite = Morphling.getSampleSprite(); morphlingButton.isEffectActive = false; morphlingButton.killButtonManager.TimerText.Color = Palette.MKAFGNEBHKC; Morphling.sampledTarget = null; }, Morphling.getSampleSprite(), new Vector3(-1.3f, 1.3f, 0f), __instance, true, 10f, () => { if (Morphling.sampledTarget == null) { morphlingButton.Timer = morphlingButton.MaxTimer; morphlingButton.Sprite = Morphling.getSampleSprite(); } } ); // Camouflager camouflage camouflagerButton = new CustomButton( () => { MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.CamouflagerCamouflage, Hazel.SendOption.Reliable, -1); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.camouflagerCamouflage(); }, () => { return(Camouflager.camouflager != null && Camouflager.camouflager == PlayerControl.LocalPlayer && !PlayerControl.LocalPlayer.IDOFAMCIJKE.FGNJJFABIHJ); }, () => { return(PlayerControl.LocalPlayer.AMDJMEEHNIG); }, () => { camouflagerButton.Timer = camouflagerButton.MaxTimer; camouflagerButton.isEffectActive = false; camouflagerButton.killButtonManager.TimerText.Color = Palette.MKAFGNEBHKC; }, Camouflager.getButtonSprite(), new Vector3(-1.3f, 1.3f, 0f), __instance, true, 10f, () => { camouflagerButton.Timer = camouflagerButton.MaxTimer; } ); // Hacker button hackerButton = new CustomButton( () => { Hacker.hackerTimer = Hacker.duration; }, () => { return(Hacker.hacker != null && Hacker.hacker == PlayerControl.LocalPlayer && !PlayerControl.LocalPlayer.IDOFAMCIJKE.FGNJJFABIHJ); }, () => { return(PlayerControl.LocalPlayer.AMDJMEEHNIG); }, () => { hackerButton.Timer = hackerButton.MaxTimer; hackerButton.isEffectActive = false; hackerButton.killButtonManager.TimerText.Color = Palette.MKAFGNEBHKC; }, Hacker.getButtonSprite(), new Vector3(-1.3f, 0, 0), __instance, true, 0f, () => { hackerButton.Timer = hackerButton.MaxTimer; } ); // Tracker button trackerButton = new CustomButton( () => { MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.TrackerUsedTracker, Hazel.SendOption.Reliable, -1); writer.Write(Tracker.currentTarget.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.trackerUsedTracker(Tracker.currentTarget.PlayerId); }, () => { return(Tracker.tracker != null && Tracker.tracker == PlayerControl.LocalPlayer && !PlayerControl.LocalPlayer.IDOFAMCIJKE.FGNJJFABIHJ); }, () => { return(PlayerControl.LocalPlayer.AMDJMEEHNIG && Tracker.currentTarget != null && !Tracker.usedTracker); }, () => { }, Tracker.getButtonSprite(), new Vector3(-1.3f, 0, 0), __instance ); vampireKillButton = new CustomButton( () => { if (Helpers.handleMurderAttempt(Vampire.currentTarget)) { if (Vampire.targetNearGarlic) { PlayerControl.LocalPlayer.RpcMurderPlayer(Vampire.currentTarget); vampireKillButton.HasEffect = false; // Block effect on this click vampireKillButton.Timer = vampireKillButton.MaxTimer; } else { Vampire.bitten = Vampire.currentTarget; // Notify players about bitten MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.VampireSetBitten, Hazel.SendOption.Reliable, -1); writer.Write(Vampire.bitten.PlayerId); writer.Write(0); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.vampireSetBitten(Vampire.bitten.PlayerId, 0); PlayerControl.LocalPlayer.StartCoroutine(Effects.LDACHPMFOIF(Vampire.delay, new Action <float>((p) => { // Delayed action if (p == 1f) { if (Vampire.bitten != null && !Vampire.bitten.IDOFAMCIJKE.FGNJJFABIHJ && Helpers.handleMurderAttempt(Vampire.bitten)) { // Perform kill MessageWriter killWriter = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.VampireTryKill, Hazel.SendOption.Reliable, -1); AmongUsClient.Instance.FinishRpcImmediately(killWriter); RPCProcedure.vampireTryKill(); } else { // Notify players about clearing bitten MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.VampireSetBitten, Hazel.SendOption.Reliable, -1); writer.Write(byte.MaxValue); writer.Write(byte.MaxValue); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.vampireSetBitten(byte.MaxValue, byte.MaxValue); } } }))); vampireKillButton.HasEffect = true; // Trigger effect on this click } } else { vampireKillButton.HasEffect = false; // Block effect if no action was fired } }, () => { return(Vampire.vampire != null && Vampire.vampire == PlayerControl.LocalPlayer && !PlayerControl.LocalPlayer.IDOFAMCIJKE.FGNJJFABIHJ); }, () => { if (Vampire.targetNearGarlic && Vampire.canKillNearGarlics) { vampireKillButton.killButtonManager.renderer.sprite = __instance.KillButton.renderer.sprite; } else { vampireKillButton.killButtonManager.renderer.sprite = Vampire.getButtonSprite(); } return(Vampire.currentTarget != null && PlayerControl.LocalPlayer.AMDJMEEHNIG && (!Vampire.targetNearGarlic || Vampire.canKillNearGarlics)); }, () => { vampireKillButton.Timer = vampireKillButton.MaxTimer; vampireKillButton.isEffectActive = false; vampireKillButton.killButtonManager.TimerText.Color = Palette.MKAFGNEBHKC; }, Vampire.getButtonSprite(), new Vector3(-1.3f, 0, 0), __instance, false, 0f, () => { vampireKillButton.Timer = vampireKillButton.MaxTimer; } ); garlicButton = new CustomButton( () => { Vampire.localPlacedGarlic = true; var pos = PlayerControl.LocalPlayer.transform.position; byte[] buff = new byte[sizeof(float) * 2]; Buffer.BlockCopy(BitConverter.GetBytes(pos.x), 0, buff, 0 * sizeof(float), sizeof(float)); Buffer.BlockCopy(BitConverter.GetBytes(pos.y), 0, buff, 1 * sizeof(float), sizeof(float)); MessageWriter writer = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.PlaceGarlic, Hazel.SendOption.Reliable); writer.WriteBytesAndSize(buff); writer.EndMessage(); RPCProcedure.placeGarlic(buff); }, () => { return(!Vampire.localPlacedGarlic && !PlayerControl.LocalPlayer.IDOFAMCIJKE.FGNJJFABIHJ && Vampire.garlicsActive); }, () => { return(PlayerControl.LocalPlayer.AMDJMEEHNIG && !Vampire.localPlacedGarlic); }, () => { }, Vampire.getGarlicButtonSprite(), Vector3.zero, __instance, true ); // Jackal Sidekick Button jackalSidekickButton = new CustomButton( () => { MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.JackalCreatesSidekick, Hazel.SendOption.Reliable, -1); writer.Write(Jackal.currentTarget.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.jackalCreatesSidekick(Jackal.currentTarget.PlayerId); }, () => { return(Jackal.canCreateSidekick && Sidekick.sidekick == null && Jackal.fakeSidekick == null && Jackal.jackal != null && Jackal.jackal == PlayerControl.LocalPlayer && !PlayerControl.LocalPlayer.IDOFAMCIJKE.FGNJJFABIHJ); }, () => { return(Sidekick.sidekick == null && Jackal.fakeSidekick == null && Jackal.currentTarget != null && PlayerControl.LocalPlayer.AMDJMEEHNIG); }, () => { jackalSidekickButton.Timer = jackalSidekickButton.MaxTimer; }, Jackal.getSidekickButtonSprite(), new Vector3(-1.3f, 1.3f, 0f), __instance ); // Jackal Kill jackalKillButton = new CustomButton( () => { if (!Helpers.handleMurderAttempt(Jackal.currentTarget)) { return; } byte targetId = Jackal.currentTarget.PlayerId; MessageWriter killWriter = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.JackalKill, Hazel.SendOption.Reliable, -1); killWriter.Write(targetId); AmongUsClient.Instance.FinishRpcImmediately(killWriter); RPCProcedure.jackalKill(targetId); jackalKillButton.Timer = jackalKillButton.MaxTimer; Jackal.currentTarget = null; }, () => { return(Jackal.jackal != null && Jackal.jackal == PlayerControl.LocalPlayer && !PlayerControl.LocalPlayer.IDOFAMCIJKE.FGNJJFABIHJ); }, () => { return(Jackal.currentTarget && PlayerControl.LocalPlayer.AMDJMEEHNIG); }, () => { jackalKillButton.Timer = jackalKillButton.MaxTimer; }, __instance.KillButton.renderer.sprite, new Vector3(-1.3f, 0, 0), __instance ); // Sidekick Kill sidekickKillButton = new CustomButton( () => { if (!Helpers.handleMurderAttempt(Sidekick.currentTarget)) { return; } byte targetId = Sidekick.currentTarget.PlayerId; MessageWriter killWriter = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.SidekickKill, Hazel.SendOption.Reliable, -1); killWriter.Write(targetId); AmongUsClient.Instance.FinishRpcImmediately(killWriter); RPCProcedure.sidekickKill(targetId); sidekickKillButton.Timer = sidekickKillButton.MaxTimer; Sidekick.currentTarget = null; }, () => { return(Sidekick.canKill && Sidekick.sidekick != null && Sidekick.sidekick == PlayerControl.LocalPlayer && !PlayerControl.LocalPlayer.IDOFAMCIJKE.FGNJJFABIHJ); }, () => { return(Sidekick.currentTarget && PlayerControl.LocalPlayer.AMDJMEEHNIG); }, () => { sidekickKillButton.Timer = sidekickKillButton.MaxTimer; }, __instance.KillButton.renderer.sprite, new Vector3(-1.3f, 0, 0), __instance ); // Lighter light lighterButton = new CustomButton( () => { Lighter.lighterTimer = Lighter.duration; }, () => { return(Lighter.lighter != null && Lighter.lighter == PlayerControl.LocalPlayer && !PlayerControl.LocalPlayer.IDOFAMCIJKE.FGNJJFABIHJ); }, () => { return(PlayerControl.LocalPlayer.AMDJMEEHNIG); }, () => { lighterButton.Timer = lighterButton.MaxTimer; lighterButton.isEffectActive = false; lighterButton.killButtonManager.TimerText.Color = Palette.MKAFGNEBHKC; }, Lighter.getButtonSprite(), new Vector3(-1.3f, 0f, 0f), __instance, true, Lighter.duration, () => { lighterButton.Timer = lighterButton.MaxTimer; } ); // Eraser erase button eraserButton = new CustomButton( () => { eraserButton.MaxTimer += 10; eraserButton.Timer = eraserButton.MaxTimer; MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.SetFutureErased, Hazel.SendOption.Reliable, -1); writer.Write(Eraser.currentTarget.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.setFutureErased(Eraser.currentTarget.PlayerId); }, () => { return(Eraser.eraser != null && Eraser.eraser == PlayerControl.LocalPlayer && !PlayerControl.LocalPlayer.IDOFAMCIJKE.FGNJJFABIHJ); }, () => { return(PlayerControl.LocalPlayer.AMDJMEEHNIG && Eraser.currentTarget != null); }, () => { eraserButton.Timer = eraserButton.MaxTimer; }, Eraser.getButtonSprite(), new Vector3(-1.3f, 1.3f, 0f), __instance ); // Set the default (or settings from the previous game) timers/durations when spawning the buttons setCustomButtonCooldowns(); }