diff --git a/Modules/ExtendedPlayerControl.cs b/Modules/ExtendedPlayerControl.cs index 8b3cead14..756245828 100644 --- a/Modules/ExtendedPlayerControl.cs +++ b/Modules/ExtendedPlayerControl.cs @@ -371,10 +371,10 @@ internal static class ExtendedPlayerControl CustomGameMode.Speedrun when newCustomRole == CustomRoles.Runner => Speedrun.CanKill.Contains(playerId) ? RoleTypes.Impostor : RoleTypes.Crewmate, CustomGameMode.Standard when StartGameHostPatch.BasisChangingAddons.FindFirst(x => x.Value.Contains(playerId), out KeyValuePair> kvp) => kvp.Key switch { - CustomRoles.Bloodlust when newRoleType is RoleTypes.Crewmate or RoleTypes.Engineer or RoleTypes.Scientist => RoleTypes.Impostor, - CustomRoles.Nimble when newRoleType is RoleTypes.Crewmate or RoleTypes.Scientist => RoleTypes.Engineer, + CustomRoles.Bloodlust when newRoleType is RoleTypes.Crewmate or RoleTypes.Engineer or RoleTypes.Scientist or RoleTypes.Tracker or RoleTypes.Noisemaker => RoleTypes.Impostor, + CustomRoles.Nimble when newRoleType is RoleTypes.Crewmate or RoleTypes.Scientist or RoleTypes.Noisemaker or RoleTypes.Tracker => RoleTypes.Engineer, CustomRoles.Physicist when newRoleType == RoleTypes.Crewmate => RoleTypes.Scientist, - CustomRoles.Finder when newRoleType is RoleTypes.Crewmate or RoleTypes.Scientist => RoleTypes.Tracker, + CustomRoles.Finder when newRoleType is RoleTypes.Crewmate or RoleTypes.Scientist or RoleTypes.Noisemaker => RoleTypes.Tracker, CustomRoles.Noisy when newRoleType == RoleTypes.Crewmate => RoleTypes.Noisemaker, _ => newRoleType }, diff --git a/Modules/FixedUpdateCaller.cs b/Modules/FixedUpdateCaller.cs index 66b518831..9a14f3266 100644 --- a/Modules/FixedUpdateCaller.cs +++ b/Modules/FixedUpdateCaller.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using EHR.Patches; using HarmonyLib; using InnerNet; @@ -48,9 +49,34 @@ public static class FixedUpdateCaller if (!PlayerControl.LocalPlayer) return; + try + { + if (GameStates.IsInTask && !ExileController.Instance && !AntiBlackout.SkipTasks && PlayerControl.LocalPlayer.CanUseKillButton()) + { + List players = PlayerControl.LocalPlayer.GetPlayersInAbilityRangeSorted(); + PlayerControl closest = players.Count == 0 ? null : players[0]; + + KillButton killButton = hudManager.KillButton; + + if (killButton.currentTarget && killButton.currentTarget != closest) + killButton.currentTarget.ToggleHighlight(false, RoleTeamTypes.Impostor); + + killButton.currentTarget = closest; + + if (killButton.currentTarget) + { + killButton.currentTarget.ToggleHighlight(true, RoleTeamTypes.Impostor); + killButton.SetEnabled(); + } + else + killButton.SetDisabled(); + } + } + catch { } + bool lobby = GameStates.IsLobby; - if (lobby || (Main.IntroDestroyed && !GameStates.IsMeeting && !ExileController.Instance && !AntiBlackout.SkipTasks)) + if (lobby || (Main.IntroDestroyed && GameStates.InGame && !GameStates.IsMeeting && !ExileController.Instance && !AntiBlackout.SkipTasks)) { NonLowLoadPlayerIndex++; diff --git a/Patches/CredentialsPatch.cs b/Patches/CredentialsPatch.cs index 171961db7..91ae8809d 100644 --- a/Patches/CredentialsPatch.cs +++ b/Patches/CredentialsPatch.cs @@ -73,8 +73,9 @@ internal static class PingTrackerUpdatePatch Color fpscolor = fps switch { < 10f => Color.red, - < 30f => Color.yellow, - _ => Color.green + < 25f => Color.yellow, + < 50f => Color.green, + _ => new Color32(0, 165, 255, 255) }; AppendSeparator(); diff --git a/Patches/HudPatch.cs b/Patches/HudPatch.cs index 51af6e7ca..febf038a1 100644 --- a/Patches/HudPatch.cs +++ b/Patches/HudPatch.cs @@ -478,6 +478,15 @@ internal static class ToggleHighlightPatch } } +[HarmonyPatch(typeof(KillButton), nameof(KillButton.SetTarget))] +internal static class KillButtonSetTargetPatch +{ + public static bool Prefix() + { + return false; + } +} + [HarmonyPatch(typeof(Vent), nameof(Vent.SetOutline))] internal static class SetVentOutlinePatch { @@ -487,8 +496,9 @@ internal static class SetVentOutlinePatch public static void Postfix(Vent __instance, [HarmonyArgument(1)] ref bool mainTarget) { Color color = PlayerControl.LocalPlayer.GetRoleColor(); - __instance.myRend.material.SetColor(OutlineColor, color); - __instance.myRend.material.SetColor(AddColor, mainTarget ? color : Color.clear); + Material material = __instance.myRend.material; + material.SetColor(OutlineColor, color); + material.SetColor(AddColor, mainTarget ? color : Color.clear); } } diff --git a/Patches/OnGameStartedPatch.cs b/Patches/OnGameStartedPatch.cs index 42e54a0d3..0efeb89d6 100644 --- a/Patches/OnGameStartedPatch.cs +++ b/Patches/OnGameStartedPatch.cs @@ -1150,7 +1150,7 @@ internal static class StartGameHostPatch ? roleMap.RoleType : RpcSetRoleReplacer.StoragedData[target.PlayerId]; - bool forceDisplayCrewmate = target.Is(Team.Crewmate) && roleType is not (RoleTypes.Crewmate or RoleTypes.Scientist or RoleTypes.Engineer or RoleTypes.Noisemaker or RoleTypes.Tracker or RoleTypes.CrewmateGhost or RoleTypes.GuardianAngel); + bool forceDisplayCrewmate = Options.CurrentGameMode == CustomGameMode.Standard && target.Is(Team.Crewmate) && roleType is not (RoleTypes.Crewmate or RoleTypes.Scientist or RoleTypes.Engineer or RoleTypes.Noisemaker or RoleTypes.Tracker or RoleTypes.CrewmateGhost or RoleTypes.GuardianAngel); if (forceDisplayCrewmate) RpcSetRoleReplacer.OverriddenTeamRevealScreen[target.PlayerId] = roleType; target.RpcSetRoleDesync(forceDisplayCrewmate ? RoleTypes.Crewmate : roleType, targetClientId); @@ -1435,7 +1435,19 @@ internal static class StartGameHostPatch int targetClientId = pc.OwnerId; if (targetClientId == -1) continue; - pc.RpcSetRoleDesync(roleTypes, targetClientId); + RoleTypes actualRoleType = BasisChangingAddons.FindFirst(x => x.Value.Contains(id), out KeyValuePair> kvp) + ? kvp.Key switch + { + CustomRoles.Bloodlust when roleTypes is RoleTypes.Crewmate or RoleTypes.Engineer or RoleTypes.Scientist or RoleTypes.Tracker or RoleTypes.Noisemaker => RoleTypes.Impostor, + CustomRoles.Nimble when roleTypes is RoleTypes.Crewmate or RoleTypes.Scientist or RoleTypes.Noisemaker or RoleTypes.Tracker => RoleTypes.Engineer, + CustomRoles.Physicist when roleTypes == RoleTypes.Crewmate => RoleTypes.Scientist, + CustomRoles.Finder when roleTypes is RoleTypes.Crewmate or RoleTypes.Scientist or RoleTypes.Noisemaker => RoleTypes.Tracker, + CustomRoles.Noisy when roleTypes == RoleTypes.Crewmate => RoleTypes.Noisemaker, + _ => roleTypes + } + : roleTypes; + + pc.RpcSetRoleDesync(actualRoleType, targetClientId); LateTask.New(() => { diff --git a/Patches/PlayerControlPatch.cs b/Patches/PlayerControlPatch.cs index 9c6d97489..0ac7afe0e 100644 --- a/Patches/PlayerControlPatch.cs +++ b/Patches/PlayerControlPatch.cs @@ -1337,17 +1337,6 @@ internal static class FixedUpdatePatch bool inTask = GameStates.IsInTask; bool alive = player.IsAlive(); - try - { - if (__instance.AmOwner && inTask && __instance.CanUseKillButton() && ((Main.ChangedRole && localPlayer && AmongUsClient.Instance.AmHost) || (!__instance.Is(CustomRoleTypes.Impostor) && !__instance.Data.IsDead))) - { - List players = __instance.GetPlayersInAbilityRangeSorted(); - PlayerControl closest = players.Count == 0 ? null : players[0]; - FastDestroyableSingleton.Instance.KillButton.SetTarget(closest); - } - } - catch { } - if (localPlayer) { Zoom.OnFixedUpdate(); diff --git a/Patches/ShowHostMeetingPatch.cs b/Patches/ShowHostMeetingPatch.cs index ba43dd468..4578e3773 100644 --- a/Patches/ShowHostMeetingPatch.cs +++ b/Patches/ShowHostMeetingPatch.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using HarmonyLib; using TMPro; using UnityEngine; @@ -25,7 +26,7 @@ public static class ShowHostMeetingPatch NetworkedPlayerInfo.PlayerOutfit outfit = Main.PlayerStates[host.Data.PlayerId].NormalOutfit; HostControl = host; - HostName = outfit.PlayerName; + HostName = Main.AllPlayerNames.GetValueOrDefault(host.PlayerId, outfit.PlayerName); HostColor = outfit.ColorId; } } @@ -39,7 +40,7 @@ public static class ShowHostMeetingPatch PlayerControl host = AmongUsClient.Instance.GetHost().Character; HostControl = host; - HostName = host.CurrentOutfit.PlayerName; + HostName = Main.AllPlayerNames.GetValueOrDefault(host.PlayerId, host.CurrentOutfit.PlayerName); HostColor = host.CurrentOutfit.ColorId; } diff --git a/Roles/Impostor/Swooper.cs b/Roles/Impostor/Swooper.cs index 789aba9bc..31823a710 100644 --- a/Roles/Impostor/Swooper.cs +++ b/Roles/Impostor/Swooper.cs @@ -122,7 +122,7 @@ public class Swooper : RoleBase public override bool CanUseImpostorVentButton(PlayerControl pc) { - return pc.Data.RoleType != RoleTypes.Engineer; + return UsedRole != CustomRoles.Chameleon; } private void SendRPC()