private void CreateButton(HudManager hudManager) { if (killButtonManager != null || !hudManager?.KillButton /*|| imageData == null*/) { return; } killButtonManager = Object.Instantiate(hudManager.KillButton, hudManager.transform); PassiveButton button = killButtonManager.GetComponent <PassiveButton>(); button.OnClick.RemoveAllListeners(); button.OnClick.AddListener(new Action(() => { if (!IsUsable) { return; } PerformMorph(); })); killButtonManager.gameObject.SetActive(HudVisible && Visible); killButtonManager.renderer.enabled = HudVisible && Visible; }
public static void Postfix(KillButtonManager __instance, [HarmonyArgument(0)] PlayerControl target) { if ( PlayerControl.AllPlayerControls.Count <= 1 || PlayerControl.LocalPlayer == null || PlayerControl.LocalPlayer.Data == null || !PlayerControl.LocalPlayer.Is(RoleEnum.Concealer) || target == null ) { return; } Concealer role = Role.GetRole <Concealer>(PlayerControl.LocalPlayer); if (__instance != role.ConcealButton) { return; } if (target.Data.IsImpostor) { __instance.renderer.color = Palette.DisabledClear; __instance.renderer.material.SetFloat("_Desat", 1f); } }
public static void KillButtonPress(Glitch __gInstance, KillButtonManager __instance) { if (__gInstance.KillTarget != null) { if (__gInstance.KillTarget.isShielded()) { var medic = __gInstance.HackTarget.getMedic().Player.PlayerId; var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.AttemptSound, Hazel.SendOption.Reliable, -1); writer.Write(medic); writer.Write(__gInstance.KillTarget.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); if (CustomGameOptions.ShieldBreaks) { __gInstance.LastKill = DateTime.UtcNow; } MedicMod.StopKill.BreakShield(medic, __gInstance.KillTarget.PlayerId, CustomGameOptions.ShieldBreaks); return; } __gInstance.LastKill = DateTime.UtcNow; __gInstance.Player.SetKillTimer(CustomGameOptions.GlitchKillCooldown); Utils.RpcMurderPlayer(__gInstance.Player, __gInstance.KillTarget); } }
public static bool Prefix(KillButtonManager __instance) { var flag = PlayerControl.LocalPlayer.isTimeMaster(); if (!flag) { return(true); } if (!PlayerControl.LocalPlayer.CanMove) { return(false); } var flag2 = Methods.TimeMasterRewindTimer() == 0f & !RecordRewind.rewinding; if (!flag2) { return(false); } StartStop.StartRewind(); var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.Rewind, SendOption.Reliable, -1); AmongUsClient.Instance.FinishRpcImmediately(writer); return(false); }
public static void Postfix(KillButtonManager __instance, [HarmonyArgument(0)] PlayerControl target) { if (PlayerControl.AllPlayerControls.Count <= 1) { return; } if (PlayerControl.LocalPlayer == null) { return; } if (PlayerControl.LocalPlayer.Data == null) { return; } if (!PlayerControl.LocalPlayer.Is(RoleEnum.Morphling)) { return; } var role = Roles.Role.GetRole <Roles.Morphling>(PlayerControl.LocalPlayer); if (target != null && __instance == DestroyableSingleton <HudManager> .Instance.KillButton) { if (target.Data.IsImpostor) { __instance.renderer.color = Palette.DisabledClear; __instance.renderer.material.SetFloat("_Desat", 1f); } } }
public static void SetTarget(KillButtonManager __instance, DeadBody target, Roles.Altruist role) { if (role.CurrentTarget && role.CurrentTarget != target) { role.CurrentTarget.GetComponent <SpriteRenderer>().material.SetFloat("_Outline", 0f); } if (target != null && target.ParentId == DontRevive) { target = null; } role.CurrentTarget = target; if (role.CurrentTarget && __instance.enabled) { var component = role.CurrentTarget.GetComponent <SpriteRenderer>(); component.material.SetFloat("_Outline", 1f); component.material.SetColor("_OutlineColor", Color.red); __instance.renderer.color = Palette.EnabledColor; __instance.renderer.material.SetFloat("_Desat", 0f); return; } __instance.renderer.color = Palette.DisabledClear; __instance.renderer.material.SetFloat("_Desat", 1f); }
private void Start() { killButtonManager = UnityEngine.Object.Instantiate(hudManager.KillButton, hudManager.transform); startColorButton = killButtonManager.renderer.color; startColorText = killButtonManager.TimerText.Color; killButtonManager.gameObject.SetActive(true); killButtonManager.renderer.enabled = true; Texture2D tex = new Texture2D(2, 2, TextureFormat.ARGB32, false); Assembly assembly = Assembly.GetExecutingAssembly(); tex.LoadImage(assembly.GetManifestResourceStream(ResourceName).ReadFully(), false); killButtonManager.renderer.sprite = tex.CreateSprite(); PassiveButton button = killButtonManager.GetComponent <PassiveButton>(); button.OnClick.RemoveAllListeners(); button.OnClick.AddListener((UnityEngine.Events.UnityAction)listener); void listener() { if (Timer < 0f && canUse) { killButtonManager.renderer.color = new Color(1f, 1f, 1f, 0.3f); if (hasEffectDuration) { isEffectActive = true; Timer = EffectDuration; killButtonManager.TimerText.Color = new Color(0, 255, 0); } OnClick(); } } }
public static void MimicButtonUpdate(Glitch __gInstance, HudManager __instance) { if (__gInstance.MimicButton == null) { __gInstance.MimicButton = KillButtonManager.Instantiate(__instance.KillButton); __gInstance.MimicButton.gameObject.SetActive(true); __gInstance.MimicButton.renderer.enabled = true; } __gInstance.MimicButton.renderer.sprite = MimicSprite; __gInstance.MimicButton.gameObject.SetActive(__instance.UseButton.isActiveAndEnabled && !__gInstance.Player.Data.IsDead); __gInstance.MimicButton.transform.position = new Vector3( Camera.main.ScreenToWorldPoint(new Vector3(0, 0)).x + 0.75f, __instance.UseButton.transform.position.y, __instance.UseButton.transform.position.z); __gInstance.MimicButton.SetCoolDown( CustomGameOptions.MimicCooldown - (float)(DateTime.UtcNow - __gInstance.LastMimic).TotalSeconds, CustomGameOptions.MimicCooldown); if (!__gInstance.MimicButton.isCoolingDown && !__gInstance.IsUsingMimic) { __gInstance.MimicButton.isCoolingDown = false; __gInstance.MimicButton.renderer.material.SetFloat("_Desat", 0f); __gInstance.MimicButton.renderer.color = Palette.EnabledColor; } else { __gInstance.MimicButton.isCoolingDown = true; __gInstance.MimicButton.renderer.material.SetFloat("_Desat", 1f); __gInstance.MimicButton.renderer.color = Palette.DisabledClear; } }
public bool CheckCooldown(KillButtonManager instance) { if (!CanKill) { return(false); } PlayerControl closest = PlayerTools.FindClosestTarget(player); if (closest == null || SpecialRoleIsAssigned(out KeyValuePair <byte, Doctor> doctorKvp) && doctorKvp.Value.protectedPlayer?.PlayerId == closest.PlayerId) { return(false); // Sound is already checked with the impostor role, so no need to play here } if (!instance.isCoolingDown) { return(true); } if (DoubleKillUsed || closest.Data.IsImpostor) { return(false); } SoundManager.Instance.PlaySound(ninjaTwo, false, 100f); DoubleKillUsed = true; player.MurderPlayer(closest); MessageWriter writer = GetWriter(RPC.NinjaDoubleKill); writer.Write(player.PlayerId); writer.Write(closest.PlayerId); CloseWriter(writer); player.SetKillTimer(player.killTimer + PlayerControl.GameOptions.KillCooldown * 2); return(false); }
public static bool Prefix(KillButtonManager __instance) { var target = __instance.CurrentTarget; if (target == null) { return(true); } if (target.isShielded()) { if (__instance.isActiveAndEnabled && !__instance.isCoolingDown && CustomGameOptions.PlayerMurderIndicator) { var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.AttemptSound, Hazel.SendOption.None, -1); writer.Write(target.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); BreakShield(target.PlayerId, false); } return(false); } return(true); }
public static bool Prefix(KillButtonManager __instance) { if (!PlayerControl.LocalPlayer.Is(RoleEnum.Teleporter)) { return(true); } if ( !PlayerControl.LocalPlayer.CanMove || PlayerControl.LocalPlayer.Data.IsDead ) { return(false); } Teleporter role = Role.GetRole <Teleporter>(PlayerControl.LocalPlayer); if (__instance != role.TeleportButton) { return(true); } if ( __instance.isCoolingDown || !__instance.isActiveAndEnabled || role.CooldownTimer() > 0 || Utils.IsSabotageActive() ) { return(false); } role.Teleport(); return(false); }
public static bool Prefix(KillButtonManager __instance) { if (!PlayerControl.LocalPlayer.Is(RoleEnum.Grenadier)) { return(true); } if (!PlayerControl.LocalPlayer.CanMove || PlayerControl.LocalPlayer.Data.IsDead) { return(false); } var role = Role.GetRole <Grenadier>(PlayerControl.LocalPlayer); if (__instance != role.FlashButton) { return(true); } if ( __instance.isCoolingDown || !__instance.isActiveAndEnabled || Utils.IsSabotageActive() || role.CooldownTimer() != 0 ) { return(false); } var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.FlashGrenade, SendOption.Reliable, -1); writer.Write(PlayerControl.LocalPlayer.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); role.TimeRemaining = CustomGameOptions.GrenadeDuration; role.Flash(); return(false); }
public static bool Prefix(KillButtonManager __instance) { if (__instance != DestroyableSingleton <HudManager> .Instance.KillButton) { return(true); } if (!PlayerControl.LocalPlayer.Data.IsImpostor) { return(true); } var target = __instance.CurrentTarget; if (target == null) { return(true); } if (target.isShielded()) { if (__instance.isActiveAndEnabled && !__instance.isCoolingDown) { Utils.BreakShield(target); System.Console.WriteLine(CustomGameOptions.ShieldBreaks + "- shield break"); if (CustomGameOptions.ShieldBreaks) { PlayerControl.LocalPlayer.SetKillTimer(PlayerControl.GameOptions.KillCooldown); } } return(false); } return(true); }
public static bool Prefix(KillButtonManager __instance) { if (__instance != DestroyableSingleton<HudManager>.Instance.KillButton) return true; var flag = PlayerControl.LocalPlayer.Is(RoleEnum.Altruist); if (!flag) return true; if (!PlayerControl.LocalPlayer.CanMove) return false; if (PlayerControl.LocalPlayer.Data.IsDead) return false; var role = Roles.Role.GetRole<Altruist>(PlayerControl.LocalPlayer); var flag2 = __instance.isCoolingDown; if (flag2) return false; if (!__instance.enabled) return false; var maxDistance = GameOptionsData.KillDistances[PlayerControl.GameOptions.KillDistance]; if (Vector2.Distance(role.CurrentTarget.TruePosition, PlayerControl.LocalPlayer.GetTruePosition()) > maxDistance) return false; var playerId = role.CurrentTarget.ParentId; var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte) CustomRPC.AltruistRevive, SendOption.Reliable, -1); writer.Write(PlayerControl.LocalPlayer.PlayerId); writer.Write(playerId); AmongUsClient.Instance.FinishRpcImmediately(writer); Coroutines.Start(Coroutine.AltruistRevive(role.CurrentTarget, role)); return false; }
public static bool Prefix(KillButtonManager __instance) { var flag = PlayerControl.LocalPlayer.Is(RoleEnum.Medic); if (!flag) { return(true); } var role = Roles.Role.GetRole <Roles.Medic>(PlayerControl.LocalPlayer); if (!PlayerControl.LocalPlayer.CanMove) { return(false); } if (role.UsedAbility) { return(false); } var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.Protect, SendOption.Reliable, -1); writer.Write(PlayerControl.LocalPlayer.PlayerId); writer.Write(role.ClosestPlayer.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); role.ShieldedPlayer = role.ClosestPlayer; role.UsedAbility = true; return(false); }
public override bool PerformKill(KillButtonManager __instance) { if (__instance != CurseButton) { return(true); } if (CurseButton.isCoolingDown) { return(false); } if (!CurseButton.isActiveAndEnabled) { return(false); } if (Owner._Object.Data.IsDead) { return(false); } if (Owner._Object.inVent && !Main.Instance.Config.SpellsInVents) { return(false); } Vector3 mouseWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition); Main.Instance.RpcCreateCurse(mouseWorld, Owner); return(false); }
public static void HackButtonUpdate(Glitch __gInstance, HudManager __instance) { if (__gInstance.HackButton == null) { __gInstance.HackButton = KillButtonManager.Instantiate(__instance.KillButton); __gInstance.HackButton.gameObject.SetActive(true); __gInstance.HackButton.renderer.enabled = true; } __gInstance.HackButton.renderer.sprite = HackSprite; __gInstance.HackButton.gameObject.SetActive(__instance.UseButton.isActiveAndEnabled && !__gInstance.Player.Data.IsDead); __gInstance.HackButton.transform.position = new Vector3(__gInstance.MimicButton.transform.position.x, __instance.ReportButton.transform.position.y, __instance.ReportButton.transform.position.z); __gInstance.HackButton.SetCoolDown( CustomGameOptions.HackCooldown - (float)(DateTime.UtcNow - __gInstance.LastHack).TotalSeconds, CustomGameOptions.HackCooldown); __gInstance.HackButton.SetTarget(null); __gInstance.HackTarget = null; if (__gInstance.DistClosest < GameOptionsData.KillDistances[CustomGameOptions.GlitchHackDistance]) { __gInstance.HackButton.SetTarget(__gInstance.ClosestPlayer); __gInstance.HackTarget = __gInstance.ClosestPlayer; } if (__gInstance.HackTarget != null) { __gInstance.HackTarget.myRend.material.SetColor("_OutlineColor", __gInstance.Color); } }
private void Start() { killButtonManager = UnityEngine.Object.Instantiate(hudManager.KillButton, hudManager.transform); startColorButton = killButtonManager.renderer.color; startColorText = killButtonManager.TimerText.Color; killButtonManager.gameObject.SetActive(true); killButtonManager.renderer.enabled = true; Texture2D tex = GUIExtensions.CreateEmptyTexture(); Assembly assembly = Assembly.GetExecutingAssembly(); Stream myStream = assembly.GetManifestResourceStream(ResourceName); byte[] buttonTexture = Reactor.Extensions.Extensions.ReadFully(myStream); ImageConversion.LoadImage(tex, buttonTexture, false); killButtonManager.renderer.sprite = GUIExtensions.CreateSprite(tex); PassiveButton button = killButtonManager.GetComponent <PassiveButton>(); button.OnClick.RemoveAllListeners(); button.OnClick.AddListener((UnityEngine.Events.UnityAction)listener); void listener() { if (Timer < 0f && canUse) { killButtonManager.renderer.color = new Color(1f, 1f, 1f, 0.3f); if (hasEffectDuration) { isEffectActive = true; Timer = EffectDuration; killButtonManager.TimerText.Color = new Color(0, 255, 0); } OnClick(); } } }
public static void HackButtonPress(Glitch __gInstance, KillButtonManager __instance) { if (__gInstance.HackTarget != null) { if (__gInstance.HackTarget.isShielded()) { var medic = __gInstance.HackTarget.getMedic().Player.PlayerId; var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.AttemptSound, Hazel.SendOption.Reliable, -1); writer.Write(medic); writer.Write(__gInstance.HackTarget.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); if (CustomGameOptions.ShieldBreaks) { __gInstance.LastHack = DateTime.UtcNow; } MedicMod.StopKill.BreakShield(medic, __gInstance.HackTarget.PlayerId, CustomGameOptions.ShieldBreaks); return; } __gInstance.LastHack = DateTime.UtcNow; //System.Console.WriteLine("Hacking " + __gInstance.HackTarget.Data.PlayerName + "..."); __gInstance.RpcSetHacked(__gInstance.HackTarget); } }
public static bool Prefix(KillButtonManager __instance) { var flag = PlayerControl.LocalPlayer.Is(RoleEnum.TimeLord); if (!flag) { return(true); } var role = Roles.Role.GetRole <Roles.TimeLord>(PlayerControl.LocalPlayer); if (!PlayerControl.LocalPlayer.CanMove) { return(false); } var flag2 = role.TimeLordRewindTimer() == 0f & !RecordRewind.rewinding; if (!flag2) { return(false); } if (!__instance.enabled) { return(false); } StartStop.StartRewind(role); var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.Rewind, SendOption.Reliable, -1); writer.Write(PlayerControl.LocalPlayer.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); return(false); }
static bool Prefix(ref KillButtonManager __instance) { if (IsSheriff(PlayerControl.LocalPlayer.PlayerId) && __instance.isActiveAndEnabled && __instance.CurrentTarget && !__instance.isCoolingDown && !PlayerControl.LocalPlayer.Data.IsImpostor && PlayerControl.LocalPlayer.CanMove) { if (__instance.CurrentTarget.Data.IsImpostor) // target is an impostor { PlayerControl_FixedUpdate.RpcSheriffKill(PlayerControl.LocalPlayer, __instance.CurrentTarget.PlayerId); } else { if (CustomGameOptionsData.customGameOptions.doKillSheriffsTarget.value) { // TODO: uhm PlayerControl_FixedUpdate.RpcSheriffKill(__instance.CurrentTarget, __instance.CurrentTarget.PlayerId); } PlayerControl_FixedUpdate.RpcSheriffKill(PlayerControl.LocalPlayer, PlayerControl.LocalPlayer.PlayerId); } __instance.SetTarget(null); return(false); } return(true); }
public static void MimicButtonPress(Glitch __gInstance, KillButtonManager __instance) { if (__gInstance.MimicList == null) { __gInstance.MimicList = ChatController.Instantiate(HudManager.Instance.Chat); __gInstance.MimicList.transform.SetParent(Camera.main.transform); __gInstance.MimicList.SetVisible(true); __gInstance.MimicList.Toggle(); __gInstance.MimicList.TextBubble.enabled = false; __gInstance.MimicList.TextBubble.gameObject.SetActive(false); __gInstance.MimicList.TextArea.enabled = false; __gInstance.MimicList.TextArea.gameObject.SetActive(false); __gInstance.MimicList.BanButton.enabled = false; __gInstance.MimicList.BanButton.gameObject.SetActive(false); __gInstance.MimicList.CharCount.enabled = false; __gInstance.MimicList.CharCount.gameObject.SetActive(false); __gInstance.MimicList.gameObject.transform.GetChild(0).gameObject.GetComponent <SpriteRenderer>().enabled = false; __gInstance.MimicList.gameObject.transform.GetChild(0).gameObject.SetActive(false); __gInstance.MimicList.BackgroundImage.enabled = false; foreach (SpriteRenderer rend in __gInstance.MimicList.Content.GetComponentsInChildren <SpriteRenderer>()) { if (rend.name == "SendButton" || rend.name == "QuickChatButton") { rend.enabled = false; rend.gameObject.SetActive(false); } } foreach (var bubble in __gInstance.MimicList.chatBubPool.activeChildren) { bubble.enabled = false; bubble.gameObject.SetActive(false); } __gInstance.MimicList.chatBubPool.activeChildren.Clear(); foreach (PlayerControl player in PlayerControl.AllPlayerControls.ToArray().Where(x => x != PlayerControl.LocalPlayer)) { bool oldDead = player.Data.IsDead; player.Data.IsDead = false; //System.Console.WriteLine(player.PlayerId); __gInstance.MimicList.AddChat(player, "Click here"); player.Data.IsDead = oldDead; } } else { __gInstance.MimicList.Toggle(); __gInstance.MimicList.SetVisible(false); __gInstance.MimicList = null; } }
public static bool Prefix(KillButtonManager __instance) { if (!PlayerControl.LocalPlayer.Is(RoleEnum.Janitor)) { return(true); } return(__instance == DestroyableSingleton <HudManager> .Instance.KillButton); }
private static bool Prefix(KillButtonManager __instance) { KillEvent killEvent = new KillEvent(__instance); GameEventManager.callPerformKill(killEvent); return(killEvent.consume); }
public static bool Prefix(KillButtonManager __instance) { if (!PlayerControl.LocalPlayer.Is(RoleEnum.Janitor)) { return(true); } return(CustomGameOptions.JanitorKill && Utils.IsLastImp(PlayerControl.LocalPlayer)); }
public static bool Prefix(KillButtonManager __instance) { if (!PlayerControl.LocalPlayer.Is(RoleEnum.Concealer)) { return(true); } if ( !PlayerControl.LocalPlayer.CanMove || PlayerControl.LocalPlayer.Data.IsDead ) { return(false); } Concealer role = Role.GetRole <Concealer>(PlayerControl.LocalPlayer); if (__instance != role.ConcealButton) { return(true); } if ( __instance.isCoolingDown || !__instance.isActiveAndEnabled || role.CooldownTimer() != 0 || role.Target == null || role.Target.Data.IsImpostor ) { return(false); } if (role.Target.isShielded()) { Utils.BreakShield(role.Target); if (CustomGameOptions.ShieldBreaks) { role.ResetCooldownTimer(); } return(false); } // Sets concealed player role.StartConceal(role.Target); MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.Conceal, SendOption.Reliable, -1); writer.Write(PlayerControl.LocalPlayer.PlayerId); writer.Write(role.Concealed.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); return(false); }
public static bool Prefix(KillButtonManager __instance) { if (__instance == null || PlayerControl.LocalPlayer == null || PlayerControl.LocalPlayer.Data.IsDead) { return(false); } if (TryGetSpecialRole(PlayerControl.LocalPlayer.PlayerId, out Detective detective)) { detective.KillOrCommitSuicide(__instance); } if (TryGetSpecialRole(PlayerControl.LocalPlayer.PlayerId, out Engineer engineer)) { engineer.ShowRepairMap(); } if (TryGetSpecialRole(PlayerControl.LocalPlayer.PlayerId, out Doctor doctor)) { doctor.SetProtectedPlayer(__instance); } if (TryGetSpecialRole(PlayerControl.LocalPlayer.PlayerId, out Tracker tracker)) { tracker.ShowMarkTrapMap(); } PlayerControl closest = PlayerTools.FindClosestTarget(PlayerControl.LocalPlayer); if (closest != null && PlayerControl.LocalPlayer.Data.IsImpostor && SpecialRoleIsAssigned <Doctor>(out var doctorCheckProtected) && doctorCheckProtected.Value.CheckProtectedPlayer(closest.PlayerId)) { doctorCheckProtected.Value.AttemptKillShielded(); if (doctorCheckProtected.Value.shieldKillAttemptIndicator) { WriteImmediately(RPC.AttemptShield); } PlayerControl.LocalPlayer.SetKillTimer(PlayerControl.GameOptions.KillCooldown); } if (TryGetSpecialRole(PlayerControl.LocalPlayer.PlayerId, out Ninja ninja)) { if (ninja.CheckCooldown(__instance)) { SoundManager.Instance.PlaySound(ninjaOne, false, 100f); } } if (TryGetSpecialRole(PlayerControl.LocalPlayer.PlayerId, out Doctor doctorClosestTarget)) { return(doctorClosestTarget.protectedPlayer == null || PlayerTools.FindClosestTarget(PlayerControl.LocalPlayer)?.PlayerId != doctorClosestTarget.protectedPlayer?.PlayerId); } return(true); }
/// <summary> /// Call in HudManager.Start /// </summary> private CooldownButton(Assembly asm, Action onClick, float cooldown, string embeddedResourcePath /*, float pixelsPerUnit*/, Vector2 positionOffset, ButtonCategory category, HudManager hudManager, bool hasEffectDuration, float effectDuration, Action onEffectEnd) { OnEffectEnd = onEffectEnd; PositionOffset = positionOffset; EffectDuration = effectDuration; Category = category; //PixelsPerUnit = pixelsPerUnit; MaxTimer = cooldown; Timer = MaxTimer; Buttons.Add(this); string embeddedResourceFullPath = asm.GetManifestResourceNames().FirstOrDefault(resourceName => resourceName.EndsWith(embeddedResourcePath, StringComparison.Ordinal)); if (string.IsNullOrEmpty(embeddedResourceFullPath)) { throw new ArgumentNullException(nameof(embeddedResourcePath), $"The embedded resource \"{embeddedResourcePath}\" was not found in assembly \"{asm.GetName().Name}\"."); } Stream resourceStream = asm.GetManifestResourceStream(embeddedResourceFullPath); KillButtonManager = Object.Instantiate(hudManager.KillButton, hudManager.transform); //StartColorButton = killButtonManager.renderer.color; StartColorText = KillButtonManager.TimerText.Color; KillButtonManager.gameObject.SetActive(true); KillButtonManager.renderer.enabled = true; Texture2D tex = GUIExtensions.CreateEmptyTexture(); byte[] buttonTexture = Reactor.Extensions.Extensions.ReadFully(resourceStream); ImageConversion.LoadImage(tex, buttonTexture, false); KillButtonManager.renderer.sprite = GUIExtensions.CreateSprite(tex); PassiveButton button = KillButtonManager.GetComponent <PassiveButton>(); button.OnClick.RemoveAllListeners(); button.OnClick.AddListener(new Action(() => { if (Timer < 0f && CanUse) { KillButtonManager.renderer.color = new Color(1f, 1f, 1f, 0.3f); if (hasEffectDuration) { IsEffectActive = true; Timer = EffectDuration; KillButtonManager.TimerText.Color = new Color(0, 255, 0); } onClick(); } })); }
private static void UpdateKillButton(HudManager __instance) { KillButton = __instance.KillButton; if (PlayerControl.AllPlayerControls.Count <= 1) { return; } if (PlayerControl.LocalPlayer == null) { return; } if (PlayerControl.LocalPlayer.Data == null) { return; } var flag8 = PlayerControl.LocalPlayer.Is(RoleEnum.Sheriff); if (flag8) { var role = Role.GetRole <Sheriff>(PlayerControl.LocalPlayer); var isDead = PlayerControl.LocalPlayer.Data.IsDead; if (isDead) { KillButton.gameObject.SetActive(false); KillButton.isActive = false; } else { KillButton.gameObject.SetActive(!MeetingHud.Instance); KillButton.isActive = !MeetingHud.Instance; KillButton.SetCoolDown(role.CooldownTimer(), CustomGameOptions.SheriffKillCd); Utils.SetTarget(ref role.ClosestPlayer, KillButton); } } // TODO: Remove this? else { var isImpostor = PlayerControl.LocalPlayer.Data.IsImpostor; if (!isImpostor) { return; } var isDead2 = PlayerControl.LocalPlayer.Data.IsDead; if (isDead2) { KillButton.gameObject.SetActive(false); KillButton.isActive = false; } else { __instance.KillButton.gameObject.SetActive(!MeetingHud.Instance); __instance.KillButton.isActive = !MeetingHud.Instance; } } }
public static bool Prefix(KillButtonManager __instance) { if (!PlayerControl.LocalPlayer.Is(ModifierEnum.ButtonBarry)) { return(true); } var role = Modifier.GetModifier <ButtonBarry>(PlayerControl.LocalPlayer); if (__instance != role.ButtonButton) { return(true); } if (!PlayerControl.LocalPlayer.CanMove) { return(false); } if (PlayerControl.LocalPlayer.Data.IsDead) { return(false); } if (role.ButtonUsed) { return(false); } if (PlayerControl.LocalPlayer.RemainingEmergencies <= 0) { return(false); } if (!__instance.enabled) { return(false); } System.Console.WriteLine("Reached here!"); role.ButtonUsed = true; var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.BarryButton, SendOption.Reliable, -1); writer.Write(PlayerControl.LocalPlayer.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); if (AmongUsClient.Instance.AmHost) { MeetingRoomManager.Instance.reporter = PlayerControl.LocalPlayer; MeetingRoomManager.Instance.target = null; AmongUsClient.Instance.DisconnectHandlers.AddUnique(MeetingRoomManager.Instance.Cast <IDisconnectHandler>()); if (ShipStatus.Instance.CheckTaskCompletion()) { return(false); } DestroyableSingleton <HudManager> .Instance.OpenMeetingRoom(PlayerControl.LocalPlayer); PlayerControl.LocalPlayer.RpcStartMeeting(null); } return(false); }