diff --git a/CHANGELOG.md b/CHANGELOG.md index 02d93b50e..177f6cb2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,17 +1,44 @@ # Thank you so much for finding and using EHR! -> [!CAUTION] +> [!INFO] +> Updated to Among Us v2026.3.31 (v17.3) + +> [!WARNING] > **Use commands with a `/cmd ` prefix, otherwise your message gets leaked.** So if you were to type `/bt 4 snitch`, you would now type `/cmd bt 4 snitch`. The system will NOT spam the chat after command usage even if it would be required. -- Clarified role descriptions -- Attempted to fix meeting glitches for vanilla clients -- cmd prefix usage warning no longer sends on meeting shapeshift -- Fixed duplicate option IDs -- Fixed Jailor target not resetting after the meeting ends -- Added `Kill Cooldown` setting for Kidnapper, Centralizer, Framer, and Freezer -- Penguin/Goose stops dragging their victim when eaten by Pelican -- Other internal changes +## Bug Fixes +- Fixed Custom Hide And Seek errors when the host uses /setrole with an unavailable role +- Fixed Mingle ending during killing process +- Fixed disasters spawning while some players still see the ejection screen in Natural Disasters +- Fixed sinkholes not being despawned properly in Natural Disasters when the disaster limit specified in settings is reached +- Fixed players getting stuck inside collapsed buildings in Natural Disasters +- Fixed Sprayer, Catcher CNOs not disappearing after meetings +- Fixed Skeld/Dleks Electrical bounds overlapping Storage's colliders +- Fixed after-death actions not being triggered after guesses if the game instantly ends due to it +- Fixed shapeshift-related issues (by TommyXL) +- Fixed april fools stuff (by TommyXL) +- Fixed host's messages not being logged (for chat spam & chat during game notifies) +- GM and Specators cannot be summoned by Summoner +- Fixed Hacker consuming ability uses when looking at physical admin map +- Fixed memory leak +- Medic's tasks don't reset if it uses the pet button as the kill button (by Hyper) +- Time Master & Stasis now reset player speeds to their original values instead of the global value +- Bloodmoon now always gives Loss Of Blood as the death reason -### See changes from v7.3.0 on [the v7.3.1 release page](https://github.com/Gurge44/EndlessHostRoles/releases/tag/v7.3.1) +## Changes +- **More compatibility with Starlight** (should be stable at this point) +- Player points are counted individually in King Of The Zones (by Zypherus) +- Optimized Natural Disasters: Suffix cache & saved about 3/4 of all RPCs sent +- Reduced Snowdown vanish cooldown from 2s to 1s +- Reduced network pressure in Solo PVP +- Missing 'Notification' template no longer sends an error message +- Snowdown auto enables pet use, just like Bed Wars +- Many more small improvements + +## Additions +- New setting for Capture The Flag: `Spawn Protection Time` (by Zypherus) +- New setting for Natural Disasters: `Disaster Spawn Mode` (`All On Players`/`All On Random Places`/`On Players & Random Places`) +- Death messages for others in Natural Disasters +- New client option: `Classic Mode` (by TommyXL) --- \ No newline at end of file diff --git a/Main.cs b/Main.cs index 63d8e50df..be4f30653 100644 --- a/Main.cs +++ b/Main.cs @@ -41,8 +41,8 @@ public class Main : BasePlugin private const string DebugKeyHash = "c0fd562955ba56af3ae20d7ec9e64c664f0facecef4b3e366e109306adeae29d"; private const string DebugKeySalt = "59687b"; private const string PluginGuid = "com.gurge44.endlesshostroles"; - public const string PluginVersion = "7.3.5"; - public const string PluginDisplayVersion = "7.3.5"; + public const string PluginVersion = "7.4.0"; + public const string PluginDisplayVersion = "7.4.0"; public const bool TestBuild = false; public const string NeutralColor = "#ffab1b"; @@ -155,7 +155,7 @@ public class Main : BasePlugin public static Dictionary NumEmergencyMeetingsUsed = []; public static int MadmateNum; - public static Stopwatch GameTimer = new(); + public static readonly Stopwatch GameTimer = new(); public static bool GameEndDueToTimer; public static bool ShowResult = true; diff --git a/Modules/CustomRolesHelper.cs b/Modules/CustomRolesHelper.cs index 25b9c7c38..ffd667290 100644 --- a/Modules/CustomRolesHelper.cs +++ b/Modules/CustomRolesHelper.cs @@ -1165,7 +1165,7 @@ internal static class CustomRolesHelper CustomRoles.Tiebreaker when pc.Is(CustomRoles.Dictator) => false, CustomRoles.Stressed when !pc.IsCrewmate() || pc.GetCustomRole().IsTasklessCrewmate() => false, CustomRoles.Stealer or CustomRoles.Swift or CustomRoles.DeadlyQuota or CustomRoles.Damocles or CustomRoles.Mare when pc.Is(CustomRoles.Bomber) || pc.Is(CustomRoles.Nuker) || pc.Is(CustomRoles.Trapster) || pc.Is(CustomRoles.Capitalist) => false, - CustomRoles.Torch when !pc.IsCrewmate() || pc.Is(CustomRoles.Bewilder) || pc.Is(CustomRoles.Sunglasses) || pc.Is(CustomRoles.GuardianAngelEHR) => false, + CustomRoles.Torch when pc.Is(CustomRoles.Bewilder) || pc.Is(CustomRoles.Sunglasses) || pc.Is(CustomRoles.GuardianAngelEHR) => false, CustomRoles.Bewilder when pc.Is(CustomRoles.Torch) || pc.Is(CustomRoles.GuardianAngelEHR) || pc.Is(CustomRoles.Sunglasses) => false, CustomRoles.Dynamo when pc.Is(CustomRoles.Spurt) || pc.GetCustomRole() is CustomRoles.Tank or CustomRoles.Ankylosaurus => false, CustomRoles.Spurt when pc.GetCustomSubRoles().Any(x => x is CustomRoles.Dynamo or CustomRoles.Swiftclaw or CustomRoles.Giant or CustomRoles.Flash) || pc.Is(CustomRoles.Ankylosaurus) => false, diff --git a/Patches/IntroPatch.cs b/Patches/IntroPatch.cs index f323ab618..2b464f9ea 100644 --- a/Patches/IntroPatch.cs +++ b/Patches/IntroPatch.cs @@ -1139,8 +1139,7 @@ internal static class IntroCutsceneDestroyPatch if (AmongUsClient.Instance.AmHost) { - apc.DoIf(x => x.Is(CustomRoles.NotAssigned) && ((x.AmOwner && Main.GM.Value) || ChatCommands.Spectators.Contains(x.PlayerId)), x => x.RpcSetCustomRole(CustomRoles.GM)); - LateTask.New(() => apc.DoIf(x => x && x.Is(CustomRoles.NotAssigned) && ((x.AmOwner && Main.GM.Value) || ChatCommands.Spectators.Contains(x.PlayerId)), x => x.RpcSetCustomRole(CustomRoles.GM)), 8f); + LateTask.New(() => apc.DoIf(x => x && ((x.AmOwner && Main.GM.Value) || ChatCommands.Spectators.Contains(x.PlayerId)), x => x.RpcSetCustomRole(CustomRoles.GM)), 8f); var aapc = Main.AllAlivePlayerControls; diff --git a/Roles/Standard/Crewmate/Killing/Vigilante.cs b/Roles/Standard/Crewmate/Killing/Vigilante.cs index 74d8d4c25..755e1a826 100644 --- a/Roles/Standard/Crewmate/Killing/Vigilante.cs +++ b/Roles/Standard/Crewmate/Killing/Vigilante.cs @@ -110,7 +110,7 @@ public class Vigilante : RoleBase SendRPC(killer.PlayerId); Killed.Add(killer.PlayerId); SetKillCooldown(killer.PlayerId); - if (UsePet.GetBool()) return; + if (Options.UsePets.GetBool() && UsePet.GetBool()) return; killer.RpcChangeRoleBasis(CustomRoles.CrewmateEHR); killer.RpcResetTasks(); Utils.NotifyRoles(SpecifySeer: killer, SpecifyTarget: killer);