From 7cc2372eb4463808a738557d76acab772a8d720b Mon Sep 17 00:00:00 2001 From: "zypheruskhan711 (via Bot)" Date: Sat, 27 Dec 2025 16:35:14 +0000 Subject: [PATCH 01/13] Add EAC entry: 825431910 --- Resources/Config/EACList.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Config/EACList.txt b/Resources/Config/EACList.txt index 290cb40ec..56fa43649 100644 --- a/Resources/Config/EACList.txt +++ b/Resources/Config/EACList.txt @@ -96,6 +96,7 @@ whaleutter#4768 | 9e04dc5d5 | | Cheating in Syl's lobby | No name cheater whimrecent#6558 | f8452a9d1 | | Cheating | No name cheater pureplot#2423 | ed4c7bdf6 | hdrzz | Cheater | Cheated in Sarha's lobby +wackytext#6530 | 825431910 | | Disrupting lobbies | Cheating in Dora Chan's Livestream ## Griefers, Toxic, harrasing, morons setmolar#4374 | | 藏族顶针 | Toxic | overtfeast#5802 | | 黑影 | Toxic | From c282c792c86b8c07718b41843e681b875027be25 Mon Sep 17 00:00:00 2001 From: "zypheruskhan711 (via Bot)" Date: Sat, 27 Dec 2025 18:19:29 +0000 Subject: [PATCH 02/13] Add EAC entry: Test --- Resources/Config/EACList.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Config/EACList.txt b/Resources/Config/EACList.txt index 56fa43649..33f50af1a 100644 --- a/Resources/Config/EACList.txt +++ b/Resources/Config/EACList.txt @@ -97,6 +97,7 @@ whimrecent#6558 | f8452a9d1 | | Cheating | No name cheater pureplot#2423 | ed4c7bdf6 | hdrzz | Cheater | Cheated in Sarha's lobby wackytext#6530 | 825431910 | | Disrupting lobbies | Cheating in Dora Chan's Livestream +#0000 | Test | | Testing | ## Griefers, Toxic, harrasing, morons setmolar#4374 | | 藏族顶针 | Toxic | overtfeast#5802 | | 黑影 | Toxic | From 7708ec120ff10ed103bddfe5e4a232f7689b0de6 Mon Sep 17 00:00:00 2001 From: "zypheruskhan711 (via Bot)" Date: Sun, 28 Dec 2025 18:23:29 +0000 Subject: [PATCH 03/13] Add EAC entry: 2476a9933 --- Resources/Config/EACList.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Config/EACList.txt b/Resources/Config/EACList.txt index 33f50af1a..62a7da073 100644 --- a/Resources/Config/EACList.txt +++ b/Resources/Config/EACList.txt @@ -98,6 +98,7 @@ pureplot#2423 | ed4c7bdf6 | hdrzz | Cheater | Cheated in Sarha's lobby wackytext#6530 | 825431910 | | Disrupting lobbies | Cheating in Dora Chan's Livestream #0000 | Test | | Testing | +waistaxial#2305 | 2476a9933 | | Cheater | Disrupting Dora Chan's lobby ## Griefers, Toxic, harrasing, morons setmolar#4374 | | 藏族顶针 | Toxic | overtfeast#5802 | | 黑影 | Toxic | From 108a65650e4d8c137f6d603bde9cdaeb4deb3d39 Mon Sep 17 00:00:00 2001 From: ZypherusKhan Date: Mon, 29 Dec 2025 00:43:08 +0530 Subject: [PATCH 04/13] Fix EAC list formatting and section spacing with title (#450) Updated the list of cheaters and modified the category heading. --- Resources/Config/EACList.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Resources/Config/EACList.txt b/Resources/Config/EACList.txt index 62a7da073..9d041ed8b 100644 --- a/Resources/Config/EACList.txt +++ b/Resources/Config/EACList.txt @@ -95,11 +95,10 @@ waiverfore#0496 | b493df896 | | Cheating in Syl's lobby | whaleutter#4768 | 9e04dc5d5 | | Cheating in Syl's lobby | No name cheater whimrecent#6558 | f8452a9d1 | | Cheating | No name cheater pureplot#2423 | ed4c7bdf6 | hdrzz | Cheater | Cheated in Sarha's lobby - wackytext#6530 | 825431910 | | Disrupting lobbies | Cheating in Dora Chan's Livestream -#0000 | Test | | Testing | waistaxial#2305 | 2476a9933 | | Cheater | Disrupting Dora Chan's lobby -## Griefers, Toxic, harrasing, morons + +## Griefers, Toxic, Harrasing, Racist setmolar#4374 | | 藏族顶针 | Toxic | overtfeast#5802 | | 黑影 | Toxic | roomybump#8560 | | 中国国民党 | Toxic | From 22387ab85035aefc07cb3308ecd3c18f26a4570f Mon Sep 17 00:00:00 2001 From: Jamesssssssssssssss <87044058+Jamesssssssssssssss@users.noreply.github.com> Date: Mon, 29 Dec 2025 08:21:36 +0000 Subject: [PATCH 05/13] missing import (#451) --- Roles/Crewmate/Retributionist.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Roles/Crewmate/Retributionist.cs b/Roles/Crewmate/Retributionist.cs index 2ea86370d..35f1d6ff5 100644 --- a/Roles/Crewmate/Retributionist.cs +++ b/Roles/Crewmate/Retributionist.cs @@ -2,6 +2,7 @@ using System; using System.Linq; using AmongUs.GameOptions; using EHR.Modules; +using EHR.Neutral; using Hazel; using UnityEngine; From 4e9d9b65b034c1fea47af6d4eac9c2fa8c4b00a5 Mon Sep 17 00:00:00 2001 From: PEPPERcula Date: Mon, 29 Dec 2025 01:23:30 -0700 Subject: [PATCH 06/13] Rename Roles (#452) * Update CustomRoles.cs * Update Flash.cs * Update Main.cs * Update CustomRolesHelper.cs * Update ExtendedPlayerControl.cs * Update PlayerGameOptionsSender.cs * Update GameState.cs * Update GuessManager.cs * Update HudPatch.cs * Update CustomRoleSelector.cs * Update OptionHolder.cs * Update en_US.json * Update IntroPatch.cs * Update en_US.json --- CustomRoles.cs | 6 +++--- Main.cs | 4 ++-- Modules/CustomRoleSelector.cs | 2 +- Modules/CustomRolesHelper.cs | 14 +++++++------- Modules/ExtendedPlayerControl.cs | 4 ++-- .../PlayerGameOptionsSender.cs | 7 ++++--- Modules/GameState.cs | 5 +++-- Modules/GuessManager.cs | 5 ++--- Modules/OptionHolder.cs | 2 +- Patches/HudPatch.cs | 4 ++-- Patches/IntroPatch.cs | 4 ++-- Resources/Lang/en_US.json | 18 +++++++++--------- Roles/AddOns/Common/Flash.cs | 10 +++++----- 13 files changed, 43 insertions(+), 42 deletions(-) diff --git a/CustomRoles.cs b/CustomRoles.cs index 346db06d8..9306f5866 100644 --- a/CustomRoles.cs +++ b/CustomRoles.cs @@ -428,7 +428,7 @@ public enum CustomRoles Wyrd, // Solo Kombat - SoloPVP_Player, + Challenger, // FFA Killer, @@ -536,7 +536,7 @@ public enum CustomRoles Examiner, Facilitator, // Ghost role Finder, - Flashman, + Flash, Fragile, Fool, Giant, @@ -603,4 +603,4 @@ public enum CustomRoles Watcher, Workhorse, Youtuber -} \ No newline at end of file +} diff --git a/Main.cs b/Main.cs index a0b96a06b..ff4eb2f5d 100644 --- a/Main.cs +++ b/Main.cs @@ -690,7 +690,7 @@ public class Main : BasePlugin { CustomRoles.Stained, "#e6bf91" }, { CustomRoles.Clumsy, "#b8b8b8" }, { CustomRoles.Mischievous, "#30221c" }, - { CustomRoles.Flashman, "#ff8400" }, + { CustomRoles.Flash, "#ff8400" }, { CustomRoles.Haste, "#f0ec22" }, { CustomRoles.Busy, "#32a852" }, { CustomRoles.Sleep, "#000000" }, @@ -754,7 +754,7 @@ public class Main : BasePlugin { CustomRoles.Underdog, "#ff1919" }, // Solo PVP - { CustomRoles.SoloPVP_Player, "#f55252" }, + { CustomRoles.Challenger, "#f55252" }, // FFA { CustomRoles.Killer, "#00ffff" }, // Stop And Go diff --git a/Modules/CustomRoleSelector.cs b/Modules/CustomRoleSelector.cs index 47f7caf23..b09eb68d7 100644 --- a/Modules/CustomRoleSelector.cs +++ b/Modules/CustomRoleSelector.cs @@ -23,7 +23,7 @@ internal static class CustomRoleSelector public static readonly Dictionary GameModeRoles = new() { - { CustomGameMode.SoloPVP, CustomRoles.SoloPVP_Player }, + { CustomGameMode.SoloPVP, CustomRoles.Challenger }, { CustomGameMode.FFA, CustomRoles.Killer }, { CustomGameMode.StopAndGo, CustomRoles.Tasker }, { CustomGameMode.HotPotato, CustomRoles.Potato }, diff --git a/Modules/CustomRolesHelper.cs b/Modules/CustomRolesHelper.cs index 61586a408..5c516db40 100644 --- a/Modules/CustomRolesHelper.cs +++ b/Modules/CustomRolesHelper.cs @@ -60,7 +60,7 @@ internal static class CustomRolesHelper public static bool IsForOtherGameMode(this CustomRoles role) { return CustomHnS.AllHnSRoles.Contains(role) || role is - CustomRoles.SoloPVP_Player or + CustomRoles.Challenger or CustomRoles.Killer or CustomRoles.Tasker or CustomRoles.Potato or @@ -460,7 +460,7 @@ internal static class CustomRolesHelper return role switch { // Solo PVP - CustomRoles.SoloPVP_Player => RoleTypes.Impostor, + CustomRoles.Challenger => RoleTypes.Impostor, // FFA CustomRoles.Killer => RoleTypes.Impostor, // Capture The Flag @@ -975,7 +975,7 @@ internal static class CustomRolesHelper return role is CustomRoles.KOTZPlayer or CustomRoles.CTFPlayer or - CustomRoles.SoloPVP_Player or + CustomRoles.Challenger or CustomRoles.BedWarsPlayer or CustomRoles.Weatherman or CustomRoles.Altruist or @@ -1155,7 +1155,7 @@ internal static class CustomRolesHelper CustomRoles.Torch when !pc.IsCrewmate() || 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.Flashman) || pc.Is(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, CustomRoles.Sunglasses when pc.Is(CustomRoles.Torch) || pc.Is(CustomRoles.GuardianAngelEHR) || pc.Is(CustomRoles.Bewilder) => false, CustomRoles.Guesser when pc.GetCustomRole() is CustomRoles.EvilGuesser or CustomRoles.NiceGuesser or CustomRoles.Doomsayer or CustomRoles.CopyCat => false, CustomRoles.Madmate when !pc.CanBeMadmate() || pc.Is(CustomRoles.Egoist) || pc.Is(CustomRoles.Rascal) => false, @@ -1164,8 +1164,8 @@ internal static class CustomRolesHelper CustomRoles.Egoist when !pc.IsImpostor() => false, CustomRoles.Damocles when pc.GetCustomRole() is CustomRoles.Bomber or CustomRoles.Nuker or CustomRoles.Mercenary or CustomRoles.Cantankerous => false, CustomRoles.Damocles when pc.GetRoleTypes() is not (RoleTypes.Impostor or RoleTypes.Phantom or RoleTypes.Shapeshifter or RoleTypes.Viper) => false, - CustomRoles.Flashman when pc.Is(CustomRoles.Swiftclaw) || pc.Is(CustomRoles.Giant) || pc.Is(CustomRoles.Spurt) || pc.GetCustomRole() is CustomRoles.Tank or CustomRoles.Zombie => false, - CustomRoles.Giant when pc.Is(CustomRoles.Flashman) || pc.Is(CustomRoles.Spurt) || pc.Is(CustomRoles.RoomRusher) => false, + CustomRoles.Flash when pc.Is(CustomRoles.Swiftclaw) || pc.Is(CustomRoles.Giant) || pc.Is(CustomRoles.Spurt) || pc.GetCustomRole() is CustomRoles.Tank or CustomRoles.Zombie => false, + CustomRoles.Giant when pc.Is(CustomRoles.Flash) || pc.Is(CustomRoles.Spurt) || pc.Is(CustomRoles.RoomRusher) => false, CustomRoles.Necroview when pc.Is(CustomRoles.Visionary) => false, CustomRoles.Mimic when pc.Is(CustomRoles.Nemesis) => false, CustomRoles.Rascal when !pc.IsCrewmate() => false, @@ -1216,7 +1216,7 @@ internal static class CustomRolesHelper CustomRoles.Haste when pc.GetRoleTypes() is not (RoleTypes.Impostor or RoleTypes.Phantom or RoleTypes.Shapeshifter or RoleTypes.Viper) || !pc.CanUseImpostorVentButton() || pc.Is(CustomRoles.Glitch) => false, CustomRoles.Diseased when pc.Is(CustomRoles.Antidote) => false, CustomRoles.Antidote when pc.Is(CustomRoles.Diseased) => false, - CustomRoles.Flashman or CustomRoles.Giant when pc.GetCustomRole() is CustomRoles.Swooper or CustomRoles.Wraith or CustomRoles.Chameleon or CustomRoles.Alchemist or CustomRoles.Ankylosaurus => false, + CustomRoles.Flash or CustomRoles.Giant when pc.GetCustomRole() is CustomRoles.Swooper or CustomRoles.Wraith or CustomRoles.Chameleon or CustomRoles.Alchemist or CustomRoles.Ankylosaurus => false, CustomRoles.Bait when pc.Is(CustomRoles.Disregarded) => false, CustomRoles.Busy when !pc.GetTaskState().HasTasks => false, CustomRoles.Truant when pc.Is(CustomRoles.SoulHunter) => false, diff --git a/Modules/ExtendedPlayerControl.cs b/Modules/ExtendedPlayerControl.cs index ee5e57484..c544317c8 100644 --- a/Modules/ExtendedPlayerControl.cs +++ b/Modules/ExtendedPlayerControl.cs @@ -1404,7 +1404,7 @@ internal static class ExtendedPlayerControl return pc.GetCustomRole() switch { // Solo PVP - CustomRoles.SoloPVP_Player => pc.SoloAlive(), + CustomRoles.Challenger => pc.SoloAlive(), // FFA CustomRoles.Killer => pc.IsAlive(), // Stop And Go @@ -1755,7 +1755,7 @@ internal static class ExtendedPlayerControl Main.AllPlayerKillCooldown[player.PlayerId] = player.GetCustomRole() switch { - CustomRoles.SoloPVP_Player => SoloPVP.SoloPVP_ATKCooldown.GetFloat(), + CustomRoles.Challenger => SoloPVP.SoloPVP_ATKCooldown.GetFloat(), CustomRoles.Killer => FreeForAll.FFAKcd.GetFloat(), CustomRoles.Runner => Speedrun.KCD, CustomRoles.CTFPlayer => CaptureTheFlag.KCD, diff --git a/Modules/GameOptionsSender/PlayerGameOptionsSender.cs b/Modules/GameOptionsSender/PlayerGameOptionsSender.cs index a40e712f2..3a4305ca5 100644 --- a/Modules/GameOptionsSender/PlayerGameOptionsSender.cs +++ b/Modules/GameOptionsSender/PlayerGameOptionsSender.cs @@ -263,9 +263,9 @@ public sealed class PlayerGameOptionsSender(PlayerControl player) : GameOptionsS opt.SetBool(BoolOptionNames.AnonymousVotes, false); break; } - case CustomRoles.Flashman: + case CustomRoles.Flash: { - Main.AllPlayerSpeed[player.PlayerId] = Options.FlashmanSpeed.GetFloat(); + Main.AllPlayerSpeed[player.PlayerId] = Options.FlashSpeed.GetFloat(); break; } case CustomRoles.Giant: @@ -660,4 +660,5 @@ public sealed class PlayerGameOptionsSender(PlayerControl player) : GameOptionsS { return base.AmValid() && player != null && player.Data != null && !player.Data.Disconnected && Main.RealOptionsData != null; } -} \ No newline at end of file + +} diff --git a/Modules/GameState.cs b/Modules/GameState.cs index 2bc43aee4..3ee86fa3e 100644 --- a/Modules/GameState.cs +++ b/Modules/GameState.cs @@ -337,7 +337,7 @@ public class PlayerState(byte playerId) { SubRoles.Remove(role); - if (role is CustomRoles.Flashman or CustomRoles.Dynamo or CustomRoles.Spurt) + if (role is CustomRoles.Flash or CustomRoles.Dynamo or CustomRoles.Spurt) { Main.AllPlayerSpeed[PlayerId] = Main.RealOptionsData.GetFloat(FloatOptionNames.PlayerSpeedMod); PlayerGameOptionsSender.SetDirty(PlayerId); @@ -597,4 +597,5 @@ public static class MeetingStates public static bool IsExistDeadBody => DeadBodies.Length > 0; public static NetworkedPlayerInfo ReportTarget { get; set; } -} \ No newline at end of file + +} diff --git a/Modules/GuessManager.cs b/Modules/GuessManager.cs index 7e8e77ddc..b39541739 100644 --- a/Modules/GuessManager.cs +++ b/Modules/GuessManager.cs @@ -335,7 +335,7 @@ public static class GuessManager case CustomRoles.Goose when !Goose.CanBeGuessed.GetBool(): case CustomRoles.BananaMan: case CustomRoles.Disco: - case CustomRoles.Flashman: + case CustomRoles.Flash: case CustomRoles.Giant: case CustomRoles.Glow: case CustomRoles.LastImpostor: @@ -1044,7 +1044,7 @@ public static class GuessManager CustomRoles.BananaMan or CustomRoles.Car or CustomRoles.Disco or - CustomRoles.Flashman or + CustomRoles.Flash or CustomRoles.Giant or CustomRoles.LastImpostor or CustomRoles.NotAssigned or @@ -1651,4 +1651,3 @@ public static class GuessManager } } - diff --git a/Modules/OptionHolder.cs b/Modules/OptionHolder.cs index 642960fa5..1bfc40e4a 100644 --- a/Modules/OptionHolder.cs +++ b/Modules/OptionHolder.cs @@ -826,7 +826,7 @@ public static class Options public static OptionItem PresidentCanBeMadmate; public static OptionItem MadSnitchTasks; - public static OptionItem FlashmanSpeed; + public static OptionItem FlashSpeed; public static OptionItem GiantSpeed; public static OptionItem ImpEgoistVisibalToAllies; public static OptionItem VotesPerKill; diff --git a/Patches/HudPatch.cs b/Patches/HudPatch.cs index b6910ae40..83d817162 100644 --- a/Patches/HudPatch.cs +++ b/Patches/HudPatch.cs @@ -237,7 +237,7 @@ internal static class HudManagerPatch case CustomRoles.Medic: usedButton?.OverrideText(GetString("MedicalerButtonText")); break; - case CustomRoles.SoloPVP_Player: + case CustomRoles.Challenger: case CustomRoles.BedWarsPlayer: __instance.KillButton?.OverrideText(GetString("DemonButtonText")); break; @@ -660,7 +660,7 @@ internal static class SetHudActivePatch __instance.ImpostorVentButton?.ToggleVisible(false); break; - case CustomRoles.SoloPVP_Player: + case CustomRoles.Challenger: __instance.SabotageButton?.ToggleVisible(false); __instance.AbilityButton?.ToggleVisible(false); __instance.ReportButton?.ToggleVisible(false); diff --git a/Patches/IntroPatch.cs b/Patches/IntroPatch.cs index 12db1e312..6067dc602 100644 --- a/Patches/IntroPatch.cs +++ b/Patches/IntroPatch.cs @@ -875,11 +875,11 @@ internal static class BeginCrewmatePatch { case CustomGameMode.SoloPVP: { - __instance.TeamTitle.text = GetString("SoloPVP_Player"); + __instance.TeamTitle.text = GetString("Challenger"); __instance.TeamTitle.color = __instance.BackgroundBar.material.color = new Color32(245, 82, 82, byte.MaxValue); PlayerControl.LocalPlayer.Data.Role.IntroSound = DestroyableSingleton.Instance.HnSOtherImpostorTransformSfx; __instance.ImpostorText.gameObject.SetActive(true); - __instance.ImpostorText.text = GetString("SoloPVP_PlayerInfo"); + __instance.ImpostorText.text = GetString("ChallengerInfo"); break; } case CustomGameMode.FFA: diff --git a/Resources/Lang/en_US.json b/Resources/Lang/en_US.json index 988a5b4c9..e49e6a31e 100644 --- a/Resources/Lang/en_US.json +++ b/Resources/Lang/en_US.json @@ -346,7 +346,7 @@ "Stained": "Stained", "Clumsy": "Clumsy", "Mischievous": "Mischievous", - "Flashman": "Flash", + "Flash": "Flash", "Undead": "Undead", "Busy": "Busy", "Truant": "Truant", @@ -404,7 +404,7 @@ "Prefix.Stained": "Stained", "Prefix.Clumsy": "Clumsy", "Prefix.Mischievous": "Mischievous", - "Prefix.Flashman": "Flash", + "Prefix.Flash": "Flash", "Prefix.Undead": "Undead", "Prefix.Busy": "Busy", "Prefix.Truant": "Truant", @@ -577,7 +577,7 @@ "ExecutionerInfo": "Get your target voted out", "LawyerInfo": "Help your target win!", "VectorInfo": "Jump in, jump out, win!", - "JackalInfo": "Murder everyone", + "JackalInfo": "Convert & Murder Everyone", "GodInfo": "Everything is under your control", "InnocentInfo": "Get someone ejected by making them kill you", "PelicanInfo": "Eat all players", @@ -621,7 +621,7 @@ "NtrInfo": "Everyone sees you as their Lover", "WatcherInfo": "You see vote colors", "LastImpostorInfo": "Lower kill cooldown", - "FlashmanInfo": "You're faster", + "FlashInfo": "You're faster", "GiantInfo": "You're slower", "TruantInfo": "You freeze after meetings for some time", "TorchInfo": "You have a higher vision!", @@ -853,7 +853,7 @@ "StainedInfoLong": "(Add-ons):\\nYour killer gets a violet name for 3 seconds.", "ClumsyInfoLong": "(Add-ons):\\nWhile walking, you have a small chance of tripping, meaning you freeze for a few seconds.", "MischievousInfoLong": "(Add-ons):\\nYou can sabotage.", - "FlashmanInfoLong": "(Add-ons):\\nThe Flash is faster by default.", + "FlashInfoLong": "(Add-ons):\\nThe Flash is faster by default.", "GiantInfoLong": "(Add-ons):\\nThe Giant is slower by default.", "BusyInfoLong": "(Add-ons):\\nYou have more tasks.", "DiscoInfoLong": "(Add-ons):\\nYou change your skin color every few seconds.", @@ -1499,7 +1499,7 @@ "BewilderVision": "Bewilder Vision", "JesterVision": "Jester Vision", "LawyerVision": "Lawyer Vision", - "FlashmanSpeed": "Flash Speed", + "FlashSpeed": "Flash Speed", "GiantSpeed": "Giant Speed", "NeutralsKnowEachOther": "Neutrals know each other", "LoverDieConsequence": "Consequence for Second Lover, When First One Dies", @@ -4500,7 +4500,7 @@ "MagicianBombExlodesIn": "Bomb explodes in {0}s", "MagicianCardUsed": "Card used", "Necromancer": "Necromancer", - "NecromancerInfo": "Recruit Everyone", + "NecromancerInfo": "Recruit Everyone to the Undead", "NecromancerInfoLong": "(Neutrals):\\nThe Necromancer is the main recruiter for the Undead faction. The first person it kills will become a Deathknight. With the help of the Deathknight, they must work together to convert others to the Undead. If the Necromancer were to die, The Deathknight would turn into Necromancer.", "Deathknight": "Deathknight", "DeathknightInfo": "Help the Necromancer Recruit", @@ -4924,8 +4924,8 @@ "SoloPVP": "SOLO PVP", "ModeSoloPVP": "Gamemode: Solo PVP", "ModeDescribe.SoloPVP": "In the Solo PVP game mode, everyone has HP and can use their kill button to cause damage on other players. When a player's health reaches 0, they 'die' and respawn after a few seconds. The player(s) with the highest number of kills win(s) at the end of the game.", - "SoloPVP_Player": "SOLO PVP", - "SoloPVP_PlayerInfo": "DEFEAT OPPONENTS TO WIN", + "Challenger": "SOLO PVP", + "ChallengerInfo": "DEFEAT OPPONENTS TO WIN", "SoloPVP_GameTime": "Game duration", "SoloPVP_HPMax": "Default HP", "SoloPVP_ATK": "Default Attack", diff --git a/Roles/AddOns/Common/Flash.cs b/Roles/AddOns/Common/Flash.cs index 81a367a74..30197e83a 100644 --- a/Roles/AddOns/Common/Flash.cs +++ b/Roles/AddOns/Common/Flash.cs @@ -1,15 +1,15 @@ namespace EHR.AddOns.Common; -internal class Flashman : IAddon +internal class Flash : IAddon { public AddonTypes Type => AddonTypes.Helpful; public void SetupCustomOption() { - Options.SetupAdtRoleOptions(18700, CustomRoles.Flashman, canSetNum: true, tab: TabGroup.Addons, teamSpawnOptions: true); + Options.SetupAdtRoleOptions(18700, CustomRoles.Flash, canSetNum: true, tab: TabGroup.Addons, teamSpawnOptions: true); - Options.FlashmanSpeed = new FloatOptionItem(18708, "FlashmanSpeed", new(0.25f, 3f, 0.05f), 2.5f, TabGroup.Addons) - .SetParent(Options.CustomRoleSpawnChances[CustomRoles.Flashman]) + Options.FlashSpeed = new FloatOptionItem(18708, "FlashSpeed", new(0.25f, 3f, 0.05f), 2.5f, TabGroup.Addons) + .SetParent(Options.CustomRoleSpawnChances[CustomRoles.Flash]) .SetValueFormat(OptionFormat.Multiplier); } -} \ No newline at end of file +} From 2a0540dc06fb4d8f0e13160eefb13f41ccfc5ed1 Mon Sep 17 00:00:00 2001 From: Jamesssssssssssssss <87044058+Jamesssssssssssssss@users.noreply.github.com> Date: Mon, 29 Dec 2025 20:57:53 +0000 Subject: [PATCH 07/13] Add GitHub Action to build the mod on each PR (#453) * missing import * Create build.yml --- .github/workflows/build.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..1a35dc2cd --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,32 @@ +name: Build + +on: + pull_request: + branches: [ main ] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 8.0.x + + - name: Cache NuGet packages + uses: actions/cache@v3 + with: + path: ~/.nuget/packages + key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }} + restore-keys: | + ${{ runner.os }}-nuget- + + - name: Restore dependencies + run: dotnet restore + + - name: Build + run: dotnet build --configuration Release --no-restore From 2baee8987596e23df8930d1a0ad0ce3a002029d2 Mon Sep 17 00:00:00 2001 From: "zypheruskhan711 (via Bot)" Date: Tue, 30 Dec 2025 07:34:56 +0000 Subject: [PATCH 08/13] Add EAC entry: Fortegreen --- Resources/Config/EACList.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Config/EACList.txt b/Resources/Config/EACList.txt index 9d041ed8b..243d0ec35 100644 --- a/Resources/Config/EACList.txt +++ b/Resources/Config/EACList.txt @@ -97,6 +97,7 @@ whimrecent#6558 | f8452a9d1 | | Cheating | No name cheater pureplot#2423 | ed4c7bdf6 | hdrzz | Cheater | Cheated in Sarha's lobby wackytext#6530 | 825431910 | | Disrupting lobbies | Cheating in Dora Chan's Livestream waistaxial#2305 | 2476a9933 | | Cheater | Disrupting Dora Chan's lobby +mindfecund#4895 | 0589ce12b | Fortegreen | Cheater | Using lobby ss cheat ## Griefers, Toxic, Harrasing, Racist setmolar#4374 | | 藏族顶针 | Toxic | From 501b6c5a1b63279119a9c6b01a6c2096a01a8070 Mon Sep 17 00:00:00 2001 From: Wyzeriss Date: Tue, 30 Dec 2025 09:18:48 +0000 Subject: [PATCH 09/13] Some stuffs (#454) * Update Speedrunner.cs 0.1 -> 0.05 * Update Pacifist.cs 1 -> 0.5 * Update Stasis.cs 1 -> 0.5 * Update en_US.json . * Update en_US.json a * Update en_US.json e * Update CustomRolesHelper.cs * Update CustomRolesHelper.cs a * Update CustomRolesHelper.cs * Update Predator.cs * Update Lurker.cs 0 -> 1 * Update Arrogance.cs * Update Juggernaut.cs * Update Reckless.cs * Update Wraith.cs a * Update Dazzler.cs * Update Astral.cs * Update Hypnotist.cs * Update Amogus.cs * Update Amogus.cs * Update Arrogance.cs 0.5 * Update Juggernaut.cs 0.5 * Update Reckless.cs 0.5 * Update Wraith.cs 0.5 * Update en_US.json \ * Update Amogus.cs no more decimal * Update Amogus.cs i think it's fixed --- Modules/CustomRolesHelper.cs | 4 ++++ Resources/Lang/en_US.json | 14 +++++++------- Roles/Crewmate/Astral.cs | 4 ++-- Roles/Crewmate/Pacifist.cs | 4 ++-- Roles/Crewmate/Speedrunner.cs | 2 +- Roles/Impostor/Arrogance.cs | 2 +- Roles/Impostor/Dazzler.cs | 5 +++-- Roles/Impostor/Hypnotist.cs | 4 ++-- Roles/Impostor/Lurker.cs | 5 +++-- Roles/Impostor/Stasis.cs | 4 ++-- Roles/Neutral/Amogus.cs | 4 ++-- Roles/Neutral/Juggernaut.cs | 6 ++++-- Roles/Neutral/Predator.cs | 4 ++-- Roles/Neutral/Reckless.cs | 4 ++-- Roles/Neutral/Wraith.cs | 6 ++++-- 15 files changed, 41 insertions(+), 31 deletions(-) diff --git a/Modules/CustomRolesHelper.cs b/Modules/CustomRolesHelper.cs index 5c516db40..dbd46c302 100644 --- a/Modules/CustomRolesHelper.cs +++ b/Modules/CustomRolesHelper.cs @@ -1237,6 +1237,7 @@ internal static class CustomRolesHelper CustomRoles.Lucky when pc.Is(CustomRoles.Unlucky) => false, CustomRoles.Fool when pc.GetCustomRole() is CustomRoles.Mechanic or CustomRoles.GuardianAngelEHR or CustomRoles.Technician => false, CustomRoles.Coroner when pc.Is(CustomRoles.Oblivious) => false, + CustomRoles.Fragile when pc.Is(CustomRoles.Detour) => false, CustomRoles.DoubleShot when pc.GetCustomRole() is not CustomRoles.EvilGuesser and not CustomRoles.NiceGuesser and not CustomRoles.Augur && !Options.GuesserMode.GetBool() => false, CustomRoles.DoubleShot when !pc.Is(CustomRoles.Guesser) && !pc.Is(CustomRoles.EvilGuesser) && pc.Is(CustomRoleTypes.Impostor) && !Options.ImpostorsCanGuess.GetBool() => false, CustomRoles.DoubleShot when !pc.Is(CustomRoles.Guesser) && !pc.Is(CustomRoles.NiceGuesser) && pc.Is(CustomRoleTypes.Crewmate) && !Options.CrewmatesCanGuess.GetBool() => false, @@ -2034,3 +2035,6 @@ public enum CountTypes Coven } + + + diff --git a/Resources/Lang/en_US.json b/Resources/Lang/en_US.json index e49e6a31e..d14f6fb3d 100644 --- a/Resources/Lang/en_US.json +++ b/Resources/Lang/en_US.json @@ -504,7 +504,7 @@ "TricksterInfo": "Kill and trick the crew", "VindicatorInfo": "Use your extra votes to kill everyone", "ParasiteInfo": "Help the Impostors kill the crew", - "DisperserInfo": "Shift to teleport everyone to a random vent", + "DisperserInfo": "Shift/Vanish to teleport everyone to a random vent", "InhibitorInfo": "You cannot kill during sabotages", "SaboteurInfo": "Kill to call and stack sabotages. You can only kill during a sabotage", "CouncillorInfo": "Kill crewmates during meetings", @@ -554,7 +554,7 @@ "MorticianInfo": "Report a body to know who interacted with them last", "MediumInfo": "Talk with ghosts", "ObserverInfo": "You can see all shield-animations", - "PacifistInfo": "Vent to reset kill cooldowns", + "PacifistInfo": "Vent/Pet to reset kill cooldowns", "MonarchInfo": "Give your crew extra voting power!", "InvestigatorInfo": "Reveal roles of other players", "CoronerInfo": "Find corpses and their killers", @@ -566,7 +566,7 @@ "TracefinderInfo": "Locate dead bodies", "OracleInfo": "Vote a player to see their alignment", "SpiritualistInfo": "You see where a ghost is", - "ChameleonInfo": "Vent to disguise into your surroundings", + "ChameleonInfo": "Vent/Pet to disguise into your surroundings", "InspectorInfo": "Validate the alignments of two players", "TimeMasterInfo": "Rewind time to dodge attacks!", "CrusaderInfo": "Kill a player's attacker", @@ -596,7 +596,7 @@ "FollowerInfo": "Follow a player and help them", "CultistInfo": "Charm everyone", "HexMasterInfo": "Hex players to kill them in meetings", - "WraithInfo": "Vent to go invisible temporarily", + "WraithInfo": "Vent/Vanish to go invisible temporarily", "SerialKillerInfo": "Kill everyone to win!", "JuggernautInfo": "Your cooldown decreases with each kill you get", "InfectiousInfo": "Infect everyone", @@ -604,7 +604,7 @@ "PursuerInfo": "Protect yourself and live to the end!", "SpecterInfo": "Get killed and finish your tasks to win!", "JinxInfo": "Reflect attacks onto your attackers", - "MaverickInfo": "Survive until the end to win", + "MaverickInfo": "Kill and survive until the end to win", "CursedSoulInfo": "Snatch souls and steal the win", "RitualistInfo": "Kill and reveal the roles of your enemies", "PickpocketInfo": "Steal votes from your kills", @@ -865,7 +865,7 @@ "BewilderInfoLong": "(Add-ons):\\nBewilder's vision changes killer's vision on death.", "TruantInfoLong": "(Add-ons):\\nAfter each meeting, you freeze in place for a set amount of seconds.", "WorkhorseInfoLong": "(Add-ons):\\nComplete all tasks to become Workhorse and get extra tasks set by the host.", - "FoolInfoLong": "(Add-ons):\\nYou can't fix Lights and Comms sabotages.", + "FoolInfoLong": "(Add-ons):\\nYou can't fix Lights and Comms sabotages. Note: Technician can't be fool", "AvengerInfoLong": "(Add-ons):\\nHost can allow Impostor to become Avenger. If Avenger dies, they'll revenge a random player.", "YoutuberInfoLong": "(Add-ons):\\nIf the YouTuber is the first player killed, they win. If not, they follow the Crewmate to win. Note: Indirect killing methods don't trigger the YouTuber's skills.", "EgoistInfoLong": "(Add-ons):\\nOnly impostors can get Egoist. If the impostor team wins while there's at least one Impostor alive who isn't an Egoist, the Egoist loses.\\nIn order for the Egoist to win, they must eject all other impostors and stay alive.", @@ -3643,7 +3643,7 @@ "ReportBaitAtAllCost": "Report <#00f7ff>Bait at All Cost", "Jailor": "Jailor", "JailorInfo": "Lock up your target in Jail", - "JailorInfoLong": "(Crewmates):\\nAs the Jailor, use your kill button to lock a player in jail. Jailed players cannot be guessed or judged and jailed players can only guess Jailor.", + "JailorInfoLong": "(Crewmates):\\nAs the Jailor, use your kill button to lock a player in jail. Jailed players cannot be guessed or judged and jailed players can only guess Jailor.\\nWhile in jail, jailed players can privately communicate with the Jailor using /jailtalk", "JailorJailCooldown": "Jail cooldown", "JailorTargetAlreadySelected": "You have already selected a target", "SuccessfullyJailed": "Target successfully Jailed", diff --git a/Roles/Crewmate/Astral.cs b/Roles/Crewmate/Astral.cs index 8b6b70af4..9c3f8bfe7 100644 --- a/Roles/Crewmate/Astral.cs +++ b/Roles/Crewmate/Astral.cs @@ -26,7 +26,7 @@ public class Astral : RoleBase { StartSetup(651400) .AutoSetupOption(ref AbilityCooldown, 30, new IntegerValueRule(0, 120, 1), OptionFormat.Seconds) - .AutoSetupOption(ref AbilityDuration, 10, new IntegerValueRule(0, 30, 1), OptionFormat.Seconds) + .AutoSetupOption(ref AbilityDuration, 10, new IntegerValueRule(1, 30, 1), OptionFormat.Seconds) .AutoSetupOption(ref AbilityUseLimit, 1f, new FloatValueRule(0, 20, 0.05f), OptionFormat.Times) .AutoSetupOption(ref AbilityUseGainWithEachTaskCompleted, 0.3f, new FloatValueRule(0f, 5f, 0.05f), OptionFormat.Times) .AutoSetupOption(ref AbilityChargesWhenFinishedTasks, 0.2f, new FloatValueRule(0f, 5f, 0.05f), OptionFormat.Times); @@ -144,4 +144,4 @@ public class Astral : RoleBase if (seer.PlayerId != AstralId || seer.PlayerId != target.PlayerId || hud || meeting || BackTS == 0) return string.Empty; return string.Format(Translator.GetString("AstralSuffix"), BackTS - Utils.TimeStamp - 1); } -} \ No newline at end of file +} diff --git a/Roles/Crewmate/Pacifist.cs b/Roles/Crewmate/Pacifist.cs index 6a9806ea4..54541f978 100644 --- a/Roles/Crewmate/Pacifist.cs +++ b/Roles/Crewmate/Pacifist.cs @@ -15,7 +15,7 @@ internal class Pacifist : RoleBase { SetupRoleOptions(7700, TabGroup.CrewmateRoles, CustomRoles.Pacifist); - PacifistCooldown = new FloatOptionItem(7710, "PacifistCooldown", new(0f, 180f, 1f), 7f, TabGroup.CrewmateRoles) + PacifistCooldown = new FloatOptionItem(7710, "PacifistCooldown", new(0f, 180f, 0.5f), 7f, TabGroup.CrewmateRoles) .SetParent(CustomRoleSpawnChances[CustomRoles.Pacifist]) .SetValueFormat(OptionFormat.Seconds); @@ -102,4 +102,4 @@ internal class Pacifist : RoleBase { return !IsThisRole(pc) || pc.Is(CustomRoles.Nimble) || pc.GetClosestVent()?.Id == ventId; } -} \ No newline at end of file +} diff --git a/Roles/Crewmate/Speedrunner.cs b/Roles/Crewmate/Speedrunner.cs index 4a21d6e9e..08519f947 100644 --- a/Roles/Crewmate/Speedrunner.cs +++ b/Roles/Crewmate/Speedrunner.cs @@ -37,7 +37,7 @@ internal class Speedrunner : RoleBase SpeedrunnerNotifyAtXTasksLeft = new IntegerOptionItem(652511, "SpeedrunnerNotifyAtXTasksLeft", new(0, 90, 1), 3, TabGroup.CrewmateRoles) .SetParent(CustomRoleSpawnChances[CustomRoles.Speedrunner]); - SpeedrunnerSpeed = new FloatOptionItem(652512, "SpeedrunnerSpeed", new(0.1f, 3f, 0.1f), 1.5f, TabGroup.CrewmateRoles) + SpeedrunnerSpeed = new FloatOptionItem(652512, "SpeedrunnerSpeed", new(0.1f, 3f, 0.05f), 1.5f, TabGroup.CrewmateRoles) .SetParent(CustomRoleSpawnChances[CustomRoles.Speedrunner]) .SetValueFormat(OptionFormat.Multiplier); diff --git a/Roles/Impostor/Arrogance.cs b/Roles/Impostor/Arrogance.cs index 81edfc6d8..fa8afffef 100644 --- a/Roles/Impostor/Arrogance.cs +++ b/Roles/Impostor/Arrogance.cs @@ -43,7 +43,7 @@ public class Arrogance : RoleBase .SetParent(CustomRoleSpawnChances[CustomRoles.Arrogance]) .SetValueFormat(OptionFormat.Seconds); - ReduceKillCooldown = new FloatOptionItem(Id + 11, "ArroganceReduceKillCooldown", new(0f, 30f, 0.5f), 3.5f, TabGroup.ImpostorRoles) + ReduceKillCooldown = new FloatOptionItem(Id + 11, "ArroganceReduceKillCooldown", new(0.5f, 30f, 0.5f), 3.5f, TabGroup.ImpostorRoles) .SetParent(CustomRoleSpawnChances[CustomRoles.Arrogance]) .SetValueFormat(OptionFormat.Seconds); diff --git a/Roles/Impostor/Dazzler.cs b/Roles/Impostor/Dazzler.cs index 17c13dc48..32b07529a 100644 --- a/Roles/Impostor/Dazzler.cs +++ b/Roles/Impostor/Dazzler.cs @@ -38,7 +38,7 @@ public class Dazzler : RoleBase .SetParent(CustomRoleSpawnChances[CustomRoles.Dazzler]) .SetValueFormat(OptionFormat.Multiplier); - DazzleLimitOpt = new IntegerOptionItem(Id + 14, "DazzlerDazzleLimit", new(0, 15, 1), 1, TabGroup.ImpostorRoles) + DazzleLimitOpt = new IntegerOptionItem(Id + 14, "DazzlerDazzleLimit", new(1, 15, 1), 1, TabGroup.ImpostorRoles) .SetParent(CustomRoleSpawnChances[CustomRoles.Dazzler]) .SetValueFormat(OptionFormat.Times); @@ -113,4 +113,5 @@ public class Dazzler : RoleBase { hud.AbilityButton?.OverrideText(GetString("DazzleButtonText")); } -} \ No newline at end of file + +} diff --git a/Roles/Impostor/Hypnotist.cs b/Roles/Impostor/Hypnotist.cs index 0580cb00d..7c024168b 100644 --- a/Roles/Impostor/Hypnotist.cs +++ b/Roles/Impostor/Hypnotist.cs @@ -27,7 +27,7 @@ public class Hypnotist : RoleBase { StartSetup(647550) .AutoSetupOption(ref AbilityCooldown, 30, new IntegerValueRule(0, 60, 1), OptionFormat.Seconds) - .AutoSetupOption(ref AbilityDuration, 15, new IntegerValueRule(0, 30, 1), OptionFormat.Seconds) + .AutoSetupOption(ref AbilityDuration, 15, new IntegerValueRule(1, 30, 1), OptionFormat.Seconds) .AutoSetupOption(ref AbilityUseLimit, 1f, new FloatValueRule(0, 20, 0.05f), OptionFormat.Times) .AutoSetupOption(ref AbilityUseGainWithEachKill, 0.8f, new FloatValueRule(0f, 5f, 0.1f), OptionFormat.Times) .AutoSetupOption(ref DoReportAfterHypnosisEnds, true); @@ -127,4 +127,4 @@ public class Hypnotist : RoleBase var timeLeft = (int)(ActivateTS + AbilityDuration.GetInt() - Utils.TimeStamp); return timeLeft <= 5 ? $"\u25a9 ({timeLeft})" : "\u25a9"; } -} \ No newline at end of file +} diff --git a/Roles/Impostor/Lurker.cs b/Roles/Impostor/Lurker.cs index 6122dc664..617db9a51 100644 --- a/Roles/Impostor/Lurker.cs +++ b/Roles/Impostor/Lurker.cs @@ -21,7 +21,7 @@ public class Lurker : RoleBase .SetParent(CustomRoleSpawnChances[CustomRoles.Lurker]) .SetValueFormat(OptionFormat.Seconds); - ReduceKillCooldown = new FloatOptionItem(Id + 11, "ArroganceReduceKillCooldown", new(0f, 10f, 1f), 1f, TabGroup.ImpostorRoles) + ReduceKillCooldown = new FloatOptionItem(Id + 11, "ArroganceReduceKillCooldown", new(1f, 10f, 1f), 1f, TabGroup.ImpostorRoles) .SetParent(CustomRoleSpawnChances[CustomRoles.Lurker]) .SetValueFormat(OptionFormat.Seconds); } @@ -61,4 +61,5 @@ public class Lurker : RoleBase { killer.ResetKillCooldown(); } -} \ No newline at end of file + +} diff --git a/Roles/Impostor/Stasis.cs b/Roles/Impostor/Stasis.cs index 3888c02c0..5d50923cf 100644 --- a/Roles/Impostor/Stasis.cs +++ b/Roles/Impostor/Stasis.cs @@ -32,7 +32,7 @@ public class Stasis : RoleBase .AutoSetupOption(ref AbilityDuration, 10, new IntegerValueRule(1, 60, 1), OptionFormat.Seconds) .AutoSetupOption(ref AffectsOtherImpostors, true) .AutoSetupOption(ref CanVent, false) - .AutoSetupOption(ref KillCooldown, 30f, new FloatValueRule(0f, 180f, 1f), OptionFormat.Seconds) + .AutoSetupOption(ref KillCooldown, 30f, new FloatValueRule(0f, 180f, 0.5f), OptionFormat.Seconds) .AutoSetupOption(ref CanSabotage, false); } @@ -156,4 +156,4 @@ public class Stasis : RoleBase pc.RpcResetAbilityCooldown(); } } -} \ No newline at end of file +} diff --git a/Roles/Neutral/Amogus.cs b/Roles/Neutral/Amogus.cs index 5fa98bc98..d3a76c47a 100644 --- a/Roles/Neutral/Amogus.cs +++ b/Roles/Neutral/Amogus.cs @@ -37,7 +37,7 @@ public class Amogus : RoleBase .AutoSetupOption(ref StartingLevel, 0, Enum.GetValues().Select(x => $"Amogus.Levels.{x}").ToArray()) .AutoSetupOption(ref SugomaSpeed, 2f, new FloatValueRule(0.1f, 3f, 0.1f), OptionFormat.Multiplier) .AutoSetupOption(ref SuspiciousSusArrowsToBodies, false) - .AutoSetupOption(ref UltimateSusVotesPerKill, 1, new IntegerValueRule(1, 10, 1), OptionFormat.Votes) + .AutoSetupOption(ref UltimateSusVotesPerKill, 1, new IntegerValueRule(0, 10, 1), OptionFormat.Votes) .AutoSetupOption(ref AbilityCooldown, 20f, new FloatValueRule(0f, 180f, 0.5f), OptionFormat.Seconds) .AutoSetupOption(ref AbilityDuration, 15f, new FloatValueRule(0f, 180f, 0.5f), OptionFormat.Seconds) .AutoSetupOption(ref KillCooldown, 22.5f, new FloatValueRule(0f, 180f, 0.5f), OptionFormat.Seconds) @@ -211,4 +211,4 @@ public class Amogus : RoleBase SuspiciousSus, UltimateSus } -} \ No newline at end of file +} diff --git a/Roles/Neutral/Juggernaut.cs b/Roles/Neutral/Juggernaut.cs index 0cef5385e..7fb99f10d 100644 --- a/Roles/Neutral/Juggernaut.cs +++ b/Roles/Neutral/Juggernaut.cs @@ -23,7 +23,7 @@ public class Juggernaut : RoleBase .SetParent(CustomRoleSpawnChances[CustomRoles.Juggernaut]) .SetValueFormat(OptionFormat.Seconds); - ReduceKillCooldown = new FloatOptionItem(Id + 11, "ArroganceReduceKillCooldown", new(0f, 30f, 0.5f), 4f, TabGroup.NeutralRoles) + ReduceKillCooldown = new FloatOptionItem(Id + 11, "ArroganceReduceKillCooldown", new(0.5f, 30f, 0.5f), 4f, TabGroup.NeutralRoles) .SetParent(CustomRoleSpawnChances[CustomRoles.Juggernaut]) .SetValueFormat(OptionFormat.Seconds); @@ -44,4 +44,6 @@ public class Juggernaut : RoleBase public override void Init() { } public override void Add(byte playerId) { } -} \ No newline at end of file + +} + diff --git a/Roles/Neutral/Predator.cs b/Roles/Neutral/Predator.cs index d8db811dc..dbbd3762d 100644 --- a/Roles/Neutral/Predator.cs +++ b/Roles/Neutral/Predator.cs @@ -29,7 +29,7 @@ internal class Predator : RoleBase NumOfRolesToKill = new IntegerOptionItem(Id + 2, "NumOfRolesToKill", new(1, 10, 1), 3, TabGroup.NeutralRoles) .SetParent(Options.CustomRoleSpawnChances[CustomRoles.Predator]); - MaxImpRolePicks = new IntegerOptionItem(Id + 3, "MaxImpRolePicks", new(1, 10, 1), 1, TabGroup.NeutralRoles) + MaxImpRolePicks = new IntegerOptionItem(Id + 3, "MaxImpRolePicks", new(0, 10, 1), 1, TabGroup.NeutralRoles) .SetParent(Options.CustomRoleSpawnChances[CustomRoles.Predator]); KillCooldown = new FloatOptionItem(Id + 4, "KillCooldown", new(0f, 180f, 0.5f), 15f, TabGroup.NeutralRoles) @@ -166,4 +166,4 @@ internal class Predator : RoleBase string text = pt.RolesToKill.Join(x => x.ToColoredString()); return hud ? text : $"{text}"; } -} \ No newline at end of file +} diff --git a/Roles/Neutral/Reckless.cs b/Roles/Neutral/Reckless.cs index c7d826289..9cff1bef5 100644 --- a/Roles/Neutral/Reckless.cs +++ b/Roles/Neutral/Reckless.cs @@ -23,7 +23,7 @@ public class Reckless : RoleBase .SetParent(CustomRoleSpawnChances[CustomRoles.Reckless]) .SetValueFormat(OptionFormat.Seconds); - ReduceKillCooldown = new FloatOptionItem(Id + 11, "ArroganceReduceKillCooldown", new(0f, 30f, 0.5f), 5f, TabGroup.NeutralRoles) + ReduceKillCooldown = new FloatOptionItem(Id + 11, "ArroganceReduceKillCooldown", new(0.5f, 30f, 0.5f), 5f, TabGroup.NeutralRoles) .SetParent(CustomRoleSpawnChances[CustomRoles.Reckless]) .SetValueFormat(OptionFormat.Seconds); @@ -44,4 +44,4 @@ public class Reckless : RoleBase public override void Init() { } public override void Add(byte playerId) { } -} \ No newline at end of file +} diff --git a/Roles/Neutral/Wraith.cs b/Roles/Neutral/Wraith.cs index 2be0d4a37..489239e94 100644 --- a/Roles/Neutral/Wraith.cs +++ b/Roles/Neutral/Wraith.cs @@ -15,7 +15,7 @@ public class Wraith : RoleBase { StartSetup(13300) .AutoSetupOption(ref WraithCooldown, 20f, new FloatValueRule(0f, 60f, 0.5f), OptionFormat.Seconds) - .AutoSetupOption(ref WraithDuration, 10f, new FloatValueRule(0f, 30f, 0.5f), OptionFormat.Seconds) + .AutoSetupOption(ref WraithDuration, 10f, new FloatValueRule(0.5f, 30f, 0.5f), OptionFormat.Seconds) .AutoSetupOption(ref WraithVentNormallyOnCooldown, true) .AutoSetupOption(ref WraithCanVent, true, overrideName: "CanVent") .AutoSetupOption(ref ImpostorVision, true) @@ -25,4 +25,6 @@ public class Wraith : RoleBase public override void Init() { } public override void Add(byte playerId) { } -} \ No newline at end of file + +} + From ce8dfadcde9e000ad025642452d169574f529694 Mon Sep 17 00:00:00 2001 From: Jamesssssssssssssss <87044058+Jamesssssssssssssss@users.noreply.github.com> Date: Tue, 30 Dec 2025 17:54:21 +0000 Subject: [PATCH 10/13] Update build.yml to not build PRs from the translation branch (#456) * missing import * Create build.yml * Update build.yml Ignore PRs from the translation branch --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1a35dc2cd..ff5cca596 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,6 +6,7 @@ on: jobs: build: + if: github.head_ref != 'translation' runs-on: ubuntu-latest steps: From 24e92fc74c79eece7f84d067c7657d409a7b4734 Mon Sep 17 00:00:00 2001 From: "zypheruskhan711 (via Bot)" Date: Tue, 30 Dec 2025 20:23:58 +0000 Subject: [PATCH 11/13] Add EAC entry: 4e44cffe6 --- Resources/Config/EACList.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Config/EACList.txt b/Resources/Config/EACList.txt index 243d0ec35..e4cf61687 100644 --- a/Resources/Config/EACList.txt +++ b/Resources/Config/EACList.txt @@ -125,6 +125,7 @@ gougesole#0734 | ed140c20d | | Toxic | Pedophile Behaviour deltamalty#8755 | | Nggeereee | Toxic | polarsail#2468 | | hatenggers | Toxic | primesnow#4272 | 65b98a6de | HiverXM | Toxic | The n word +todayside#9634 | 4e44cffe6 | | Racist | Joined a lobby with racial slur in name ## Other tenthrope#3476 | | Oldishwire | Other | From e4a71631624660398f506fddc30874a69d2ab7c4 Mon Sep 17 00:00:00 2001 From: PEPPERcula Date: Thu, 1 Jan 2026 01:53:59 -0700 Subject: [PATCH 12/13] Android support with Zoom (#457) * Implement touch zoom support for Android Added touch input support for zoom functionality on Android devices. * Update CustomRoles.cs * Fix sprite showing when Transporter is role basis Add-on * Fix Viper kill button text * Update Wraith.cs * Update Juggernaut.cs * Update CustomRolesHelper.cs * Update Lurker.cs * Update Dazzler.cs * Update en_US.json * Update en_US.json * Update en_US.json * Update HudSpritePatch.cs * Fix build error --- CTA/CustomTeamAssigner/CustomRoles.cs | 12 +++---- Modules/CustomRolesHelper.cs | 3 -- Modules/Zoom.cs | 47 +++++++++++++++++++++------ Patches/HudPatch.cs | 2 +- Patches/HudSpritePatch.cs | 11 ++++--- Resources/Lang/en_US.json | 24 +++++++------- Roles/Impostor/Dazzler.cs | 1 - Roles/Impostor/Lurker.cs | 1 - Roles/Neutral/Juggernaut.cs | 2 -- Roles/Neutral/Wraith.cs | 2 -- 10 files changed, 62 insertions(+), 43 deletions(-) diff --git a/CTA/CustomTeamAssigner/CustomRoles.cs b/CTA/CustomTeamAssigner/CustomRoles.cs index 346db06d8..86a77827d 100644 --- a/CTA/CustomTeamAssigner/CustomRoles.cs +++ b/CTA/CustomTeamAssigner/CustomRoles.cs @@ -427,19 +427,19 @@ public enum CustomRoles VoodooMaster, Wyrd, - // Solo Kombat - SoloPVP_Player, + // Solo PVP + Challenger, // FFA Killer, - // Move And Stop + // Stop And Go Tasker, // Hot Potato Potato, - // H&S + // Hide And Seek Hider, Seeker, Fox, @@ -536,7 +536,7 @@ public enum CustomRoles Examiner, Facilitator, // Ghost role Finder, - Flashman, + Flash, Fragile, Fool, Giant, @@ -603,4 +603,4 @@ public enum CustomRoles Watcher, Workhorse, Youtuber -} \ No newline at end of file +} diff --git a/Modules/CustomRolesHelper.cs b/Modules/CustomRolesHelper.cs index dbd46c302..779a5d7e7 100644 --- a/Modules/CustomRolesHelper.cs +++ b/Modules/CustomRolesHelper.cs @@ -2035,6 +2035,3 @@ public enum CountTypes Coven } - - - diff --git a/Modules/Zoom.cs b/Modules/Zoom.cs index dac71ea48..4deba4f6f 100644 --- a/Modules/Zoom.cs +++ b/Modules/Zoom.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using UnityEngine; @@ -20,7 +20,41 @@ public static class Zoom if (((GameStates.IsShip && !GameStates.IsMeeting && GameStates.IsCanMove && !PlayerControl.LocalPlayer.IsAlive()) || (GameStates.IsLobby && GameStates.IsCanMove)) && !InGameRoleInfoMenu.Showing) { if (Camera.main.orthographicSize > 3.0f) ResetButtons = true; +#if ANDROID + if (Input.touchCount == 2) + { + Touch touch0 = Input.GetTouch(0); + Touch touch1 = Input.GetTouch(1); + Vector2 touch0PrevPos = touch0.position - touch0.deltaPosition; + Vector2 touch1PrevPos = touch1.position - touch1.deltaPosition; + + float prevTouchDeltaMag = (touch0PrevPos - touch1PrevPos).magnitude; + float currentTouchDeltaMag = (touch0.position - touch1.position).magnitude; + float deltaMagnitudeDiff = currentTouchDeltaMag - prevTouchDeltaMag; + + switch (deltaMagnitudeDiff) + { + case > 0: + { + if (Camera.main.orthographicSize > 3.0f) + SetZoomSize(); + + break; + } + case < 0: + { + if (GameStates.IsDead || GameStates.IsFreePlay || DebugModeManager.AmDebugger || GameStates.IsLobby) + { + if (Camera.main.orthographicSize < 18.0f) + SetZoomSize(true); + } + + break; + } + } + } +#else switch (Input.mouseScrollDelta.y) { case > 0: @@ -41,7 +75,7 @@ public static class Zoom break; } } - +#endif Flag.NewFlag("Zoom"); } else @@ -107,11 +141,4 @@ public static class Flag { if (!OneTimeList.Contains(type)) OneTimeList.Add(type); } - - /* - public static void DeleteFlag(string type) - { - if (OneTimeList.Contains(type)) OneTimeList.Remove(type); - } - */ -} \ No newline at end of file +} diff --git a/Patches/HudPatch.cs b/Patches/HudPatch.cs index 83d817162..6a3a45f6a 100644 --- a/Patches/HudPatch.cs +++ b/Patches/HudPatch.cs @@ -205,7 +205,7 @@ internal static class HudManagerPatch ActionButton usedButton = __instance.KillButton; if (usesPetInsteadOfKill) usedButton = __instance.PetButton; - __instance.KillButton?.OverrideText(GetString("KillButtonText")); + __instance.KillButton?.OverrideText(player.GetRoleTypes() == RoleTypes.Viper ? GetString("KillButtonText.Viper") : GetString("KillButtonText")); __instance.ReportButton?.OverrideText(GetString("ReportButtonText")); __instance.PetButton?.OverrideText(GetString("PetButtonText")); __instance.ImpostorVentButton?.OverrideText(GetString("VentButtonText")); diff --git a/Patches/HudSpritePatch.cs b/Patches/HudSpritePatch.cs index 6ddc91c54..893989525 100644 --- a/Patches/HudSpritePatch.cs +++ b/Patches/HudSpritePatch.cs @@ -1,4 +1,5 @@ using System; +using AmongUs.GameOptions; using EHR.Crewmate; using EHR.Impostor; using EHR.Neutral; @@ -177,7 +178,7 @@ public static class HudSpritePatch newAbilityButton = CustomButton.Get("JesterVent"); break; } - case CustomRoles.Transporter: + case CustomRoles.Transporter when player.GetRoleTypes() == RoleTypes.Shapeshifter: case CustomRoles.Swapster: { newAbilityButton = CustomButton.Get("Transport"); @@ -189,7 +190,7 @@ public static class HudSpritePatch else if (!shapeshifting) newAbilityButton = CustomButton.Get("Disperse"); break; - } + } case CustomRoles.Duellist: case CustomRoles.SoulCatcher: case CustomRoles.Twister: @@ -314,8 +315,8 @@ public static class HudSpritePatch { newKillButton = CustomButton.Get("Shield"); break; - } - case CustomRoles.Gangster when Gangster.CanRecruit(player.PlayerId): + } + case CustomRoles.Gangster when Gangster.CanRecruit(player.PlayerId): case CustomRoles.Jackal when player.GetAbilityUseLimit() > 0: { newKillButton = CustomButton.Get("Sidekick"); @@ -509,4 +510,4 @@ public static class HudSpritePatch } } } -} \ No newline at end of file +} diff --git a/Resources/Lang/en_US.json b/Resources/Lang/en_US.json index d14f6fb3d..11d685022 100644 --- a/Resources/Lang/en_US.json +++ b/Resources/Lang/en_US.json @@ -456,7 +456,7 @@ "ScientistEHRInfo": "Access portable vitals from anywhere", "ShapeshifterEHRInfo": "Disguise as crewmates to frame them", "GuardianAngelEHRInfo": "Protect the crewmates from the Impostors", - "ImpostorEHRInfo": "Kill and sabotage", + "ImpostorEHRInfo": "Kill & Sabotage", "CrewmateEHRInfo": "Do your tasks", "NoisemakerEHRInfo": "Alert the crewmates when you die", "TrackerEHRInfo": "Track players", @@ -466,13 +466,13 @@ "FireworkerInfo": "Go out with a BANG", "MercenaryInfo": "Keep killing, else you suicide", "VampireInfo": "Your kills are delayed", - "WarlockInfo": "Curse crewmates & shift to make them kill", - "NinjaInfo": "Mark a target, then shift to kill them", + "WarlockInfo": "Curse crewmates & Shift to make them kill", + "NinjaInfo": "Mark a target, then Shift to kill them", "ZombieInfo": "You're very slow, but can't be ejected", "AnonymousInfo": "Force a player to report a body", "MinerInfo": "Warp to your last used vent by shifting", "KillingMachineInfo": "You can ONLY kill, but low cooldown and bypass shields", - "EscapistInfo": "Shift to mark places and warp back to them", + "EscapistInfo": "Shift/Vanish to mark places and warp back to them", "WitchInfo": "Spell crewmates to kill them in meetings", "NemesisInfo": "Revenge After Death", "GodfatherInfo": "Recruit players by voting them", @@ -482,7 +482,7 @@ "EvilTrackerInfo": "Track players by shifting", "AntiAdminerInfo": "Track device usage", "ArroganceInfo": "Your cooldown decreases with each kill you make", - "BomberInfo": "Vanish to explode", + "BomberInfo": "Shift/Vanish to explode", "TrapsterInfo": "Start a killing chain", "ScavengerInfo": "Your kills are unreportable", "EvilGuesserInfo": "Guess roles in meetings to kill", @@ -604,7 +604,7 @@ "PursuerInfo": "Protect yourself and live to the end!", "SpecterInfo": "Get killed and finish your tasks to win!", "JinxInfo": "Reflect attacks onto your attackers", - "MaverickInfo": "Kill and survive until the end to win", + "MaverickInfo": "Kill & Survive until the end to win", "CursedSoulInfo": "Snatch souls and steal the win", "RitualistInfo": "Kill and reveal the roles of your enemies", "PickpocketInfo": "Steal votes from your kills", @@ -656,7 +656,7 @@ "BloodlustInfo": "You can kill", "StainedInfo": "Your killer gets a violet name for 3s", "ClumsyInfo": "You trip while walking", - "MischievousInfo": "You can sabotage", + "MischievousInfo": "You can Sabotage", "DisregardedInfo": "Your body can't be reported", "LuckyInfo": "Dodge attackers", "DoubleShotInfo": "You have an extra life when guessing", @@ -680,7 +680,7 @@ "NotAssignedInfo": "Error, report to host!!", "SunnyboyInfo": "Shine, shine my sunshine!", "BardInfo": "Poem's grace, murder's trace, a rhythmic dance in a dark embrace.", - "NukerInfo": "Vanish to nuke everyone", + "NukerInfo": "Shift/Vanish to nuke everyone", "EngineerEHRInfoLong": "(Crewmates):\\nAs the Engineer, you may access the vents while comms are not sabotaged. Vents are disabled when they are sabotaged.", "ScientistEHRInfoLong": "(Crewmates):\\nAs the Scientist, you have a portable tablet with the crew's vitals on it. Use this any way you'd like. Catching self-reports, extra intel on body age, etc.", "ShapeshifterEHRInfoLong": "(Impostors):\\nAs the Shapeshifter, you have a shapeshifting ability that you may use to frame other crewmates. Just be aware that there is an egg while shifting, and the disguise is temporary.", @@ -852,7 +852,7 @@ "BloodlustInfoLong": "(Add-ons):\\nYou can kill. You are a neutral killer while keeping your role's ability (as much as host-only limitations allow).\\nIf your role has an ability to be used through the kill button, you can single-click to use your ability and double-click the kill button to kill.", "StainedInfoLong": "(Add-ons):\\nYour killer gets a violet name for 3 seconds.", "ClumsyInfoLong": "(Add-ons):\\nWhile walking, you have a small chance of tripping, meaning you freeze for a few seconds.", - "MischievousInfoLong": "(Add-ons):\\nYou can sabotage.", + "MischievousInfoLong": "(Add-ons):\\nYou can Sabotage.", "FlashInfoLong": "(Add-ons):\\nThe Flash is faster by default.", "GiantInfoLong": "(Add-ons):\\nThe Giant is slower by default.", "BusyInfoLong": "(Add-ons):\\nYou have more tasks.", @@ -865,7 +865,7 @@ "BewilderInfoLong": "(Add-ons):\\nBewilder's vision changes killer's vision on death.", "TruantInfoLong": "(Add-ons):\\nAfter each meeting, you freeze in place for a set amount of seconds.", "WorkhorseInfoLong": "(Add-ons):\\nComplete all tasks to become Workhorse and get extra tasks set by the host.", - "FoolInfoLong": "(Add-ons):\\nYou can't fix Lights and Comms sabotages. Note: Technician can't be fool", + "FoolInfoLong": "(Add-ons):\\nYou can't fix Lights and Comms sabotages. Note: Technician can't be Fool.", "AvengerInfoLong": "(Add-ons):\\nHost can allow Impostor to become Avenger. If Avenger dies, they'll revenge a random player.", "YoutuberInfoLong": "(Add-ons):\\nIf the YouTuber is the first player killed, they win. If not, they follow the Crewmate to win. Note: Indirect killing methods don't trigger the YouTuber's skills.", "EgoistInfoLong": "(Add-ons):\\nOnly impostors can get Egoist. If the impostor team wins while there's at least one Impostor alive who isn't an Egoist, the Egoist loses.\\nIn order for the Egoist to win, they must eject all other impostors and stay alive.", @@ -3221,7 +3221,7 @@ "AbilityButtonText.Impostor": "Haunt", "AbilityButtonText.Shapeshifter": "Shift", "AbilityButtonText.Phantom": "Vanish", - "AbilityButtonText.Viper": "Acid", + "KillButtonText.Viper": "Acid", "AbilityButtonText.Detective": "Notes", "SecondaryAbilityButtonText.Detective": "Interrogate", "GauloisKillButtonText": "Speed Up", @@ -3643,7 +3643,7 @@ "ReportBaitAtAllCost": "Report <#00f7ff>Bait at All Cost", "Jailor": "Jailor", "JailorInfo": "Lock up your target in Jail", - "JailorInfoLong": "(Crewmates):\\nAs the Jailor, use your kill button to lock a player in jail. Jailed players cannot be guessed or judged and jailed players can only guess Jailor.\\nWhile in jail, jailed players can privately communicate with the Jailor using /jailtalk", + "JailorInfoLong": "(Crewmates):\\nAs the Jailor, use your kill button to lock a player in jail. Jailed players cannot be guessed or judged and jailed players can only guess Jailor.\\nWhile in jail, jailed players can privately communicate with the Jailor using /jailtalk.", "JailorJailCooldown": "Jail cooldown", "JailorTargetAlreadySelected": "You have already selected a target", "SuccessfullyJailed": "Target successfully Jailed", diff --git a/Roles/Impostor/Dazzler.cs b/Roles/Impostor/Dazzler.cs index 32b07529a..e3542e646 100644 --- a/Roles/Impostor/Dazzler.cs +++ b/Roles/Impostor/Dazzler.cs @@ -113,5 +113,4 @@ public class Dazzler : RoleBase { hud.AbilityButton?.OverrideText(GetString("DazzleButtonText")); } - } diff --git a/Roles/Impostor/Lurker.cs b/Roles/Impostor/Lurker.cs index 617db9a51..760357894 100644 --- a/Roles/Impostor/Lurker.cs +++ b/Roles/Impostor/Lurker.cs @@ -61,5 +61,4 @@ public class Lurker : RoleBase { killer.ResetKillCooldown(); } - } diff --git a/Roles/Neutral/Juggernaut.cs b/Roles/Neutral/Juggernaut.cs index 7fb99f10d..945c2af7e 100644 --- a/Roles/Neutral/Juggernaut.cs +++ b/Roles/Neutral/Juggernaut.cs @@ -44,6 +44,4 @@ public class Juggernaut : RoleBase public override void Init() { } public override void Add(byte playerId) { } - } - diff --git a/Roles/Neutral/Wraith.cs b/Roles/Neutral/Wraith.cs index 489239e94..f105487d4 100644 --- a/Roles/Neutral/Wraith.cs +++ b/Roles/Neutral/Wraith.cs @@ -25,6 +25,4 @@ public class Wraith : RoleBase public override void Init() { } public override void Add(byte playerId) { } - } - From dd85ada4e063a46c7c7ccdc02124c9f5d190918e Mon Sep 17 00:00:00 2001 From: Wyzeriss Date: Fri, 2 Jan 2026 21:54:42 +0000 Subject: [PATCH 13/13] Some more stuff (#458) * Update CustomRolesHelper.cs 4 more combo ban currently Tracefinder & Physicist Doctor & Physicist Swiftclaw & Flash Swiftclaw & Giant * Update CustomRolesHelper.cs slighty shorter code * Update CustomRolesHelper.cs I forgot to add saboteur * Update CustomRolesHelper.cs Unneccesary space * Update and rename CustomRolesHelper.cs to vector e * wtf lowkey got no idea how i rename it to vector, maybe i had accidentally click on the name? * Update CustomRolesHelper.cs gotta add addict and lurker now that i think of it * Update Judge.cs step 0.5 * Update Spy.cs 0.5 * Update HeadHunter.cs 0.5 step 1 instead of 0 minimum (for target amount) * Update Revolutionist.cs * Update Ritualist.cs * Update RouleteGrandeur.cs 0.5 * Update Jinx.cs * Update Maverick.cs * Update Revolutionist.cs 1 -> 0.5 * Update Werewolf.cs * Update Beehive.cs * Update Timelord.cs * Update VoodooMaster.cs * Update Dreamweaver.cs * Update Samurai.cs * Update HeadHunter.cs * Update Maverick.cs --- Modules/CustomRolesHelper.cs | 26 ++++++++------------------ Roles/Coven/Dreamweaver.cs | 4 ++-- Roles/Coven/Timelord.cs | 4 ++-- Roles/Coven/VoodooMaster.cs | 4 ++-- Roles/Crewmate/Judge.cs | 3 ++- Roles/Crewmate/Spy.cs | 4 ++-- Roles/Neutral/Beehive.cs | 4 ++-- Roles/Neutral/HeadHunter.cs | 4 +++- Roles/Neutral/Jinx.cs | 5 +++-- Roles/Neutral/Maverick.cs | 4 +++- Roles/Neutral/Revolutionist.cs | 6 +++--- Roles/Neutral/Ritualist.cs | 5 +++-- Roles/Neutral/RouleteGrandeur.cs | 4 ++-- Roles/Neutral/Samurai.cs | 4 ++-- Roles/Neutral/Werewolf.cs | 5 +++-- 15 files changed, 42 insertions(+), 44 deletions(-) diff --git a/Modules/CustomRolesHelper.cs b/Modules/CustomRolesHelper.cs index 779a5d7e7..70a0272e3 100644 --- a/Modules/CustomRolesHelper.cs +++ b/Modules/CustomRolesHelper.cs @@ -1126,6 +1126,7 @@ internal static class CustomRolesHelper CustomRoles.Commited when pc.GetRoleTypes() is not (RoleTypes.Impostor or RoleTypes.Phantom or RoleTypes.Shapeshifter or RoleTypes.Viper) => false, CustomRoles.Underdog when pc.Is(CustomRoles.Mare) => false, CustomRoles.Shy when Options.DisableWhisperCommand.GetBool() => false, + CustomRoles.Listener when Options.DisableWhisperCommand.GetBool() => false, CustomRoles.Blocked when !pc.CanUseVent() => false, CustomRoles.Aide when pc.IsMadmate() || pc.Is(CustomRoles.Saboteur) => false, CustomRoles.Sleuth when pc.GetCustomRole() is CustomRoles.NecroGuesser or CustomRoles.Imitator or CustomRoles.Forensic => false, @@ -1172,14 +1173,7 @@ internal static class CustomRolesHelper CustomRoles.LazyGuy when pc.GetCustomRole().IsAdditionRole() => false, CustomRoles.Stealer when pc.Is(CustomRoles.Vindicator) => false, CustomRoles.Bloodlust when !pc.GetCustomRole().IsCrewmate() || pc.GetCustomRole().IsTaskBasedCrewmate() || pc.GetCustomRole() is CustomRoles.Medic => false, - CustomRoles.Mare when pc.Is(CustomRoles.Inhibitor) => false, - CustomRoles.Mare when pc.Is(CustomRoles.Saboteur) => false, - CustomRoles.Mare when pc.Is(CustomRoles.Swift) => false, - CustomRoles.Mare when pc.Is(CustomRoles.Nemesis) => false, - CustomRoles.Mare when pc.Is(CustomRoles.Sniper) => false, - CustomRoles.Mare when pc.Is(CustomRoles.Fireworker) => false, - CustomRoles.Mare when pc.Is(CustomRoles.Swooper) => false, - CustomRoles.Mare when pc.Is(CustomRoles.Vampire) => false, + CustomRoles.Mare when pc.GetCustomRole() is CustomRoles.Inhibitor or CustomRoles.Saboteur or CustomRoles.Swift or CustomRoles.Nemesis or CustomRoles.Sniper or CustomRoles.Fireworker or CustomRoles.Swooper or CustomRoles.Vampire => false, CustomRoles.Torch when pc.GetCustomRole() is CustomRoles.Lighter or CustomRoles.Ignitor or CustomRoles.Investigator or CustomRoles.Eclipse or CustomRoles.Decryptor => false, CustomRoles.Bewilder when pc.GetCustomRole() is CustomRoles.Lighter or CustomRoles.Ignitor or CustomRoles.Investigator or CustomRoles.Eclipse or CustomRoles.Decryptor => false, CustomRoles.Sunglasses when pc.GetCustomRole() is CustomRoles.Lighter or CustomRoles.Ignitor or CustomRoles.Investigator or CustomRoles.Eclipse or CustomRoles.Decryptor => false, @@ -1201,14 +1195,7 @@ internal static class CustomRolesHelper CustomRoles.Bait when pc.Is(CustomRoles.Beartrap) => false, CustomRoles.Beartrap when pc.Is(CustomRoles.Bait) => false, CustomRoles.Schizophrenic when pc.Is(CustomRoles.Dictator) => false, - CustomRoles.Swift when pc.Is(CustomRoles.Swooper) => false, - CustomRoles.Swift when pc.Is(CustomRoles.Vampire) => false, - CustomRoles.Swift when pc.Is(CustomRoles.Scavenger) => false, - CustomRoles.Swift when pc.Is(CustomRoles.Puppeteer) => false, - CustomRoles.Swift when pc.Is(CustomRoles.Warlock) => false, - CustomRoles.Swift when pc.Is(CustomRoles.Consigliere) => false, - CustomRoles.Swift when pc.Is(CustomRoles.Witch) => false, - CustomRoles.Swift when pc.Is(CustomRoles.Nemesis) => false, + CustomRoles.Swift when pc.GetCustomRole() is CustomRoles.Swooper or CustomRoles.Vampire or CustomRoles.Scavenger or CustomRoles.Puppeteer or CustomRoles.Warlock or CustomRoles.Consigliere or CustomRoles.Witch or CustomRoles.Nemesis => false, CustomRoles.Reach when pc.GetCustomRole() is CustomRoles.Mafioso or CustomRoles.Evolver or CustomRoles.Berserker => false, CustomRoles.Beartrap when pc.Is(CustomRoles.GuardianAngelEHR) => false, CustomRoles.Reach when pc.GetRoleTypes() is not (RoleTypes.Impostor or RoleTypes.Phantom or RoleTypes.Shapeshifter or RoleTypes.Viper) => false, @@ -1216,7 +1203,7 @@ internal static class CustomRolesHelper CustomRoles.Haste when pc.GetRoleTypes() is not (RoleTypes.Impostor or RoleTypes.Phantom or RoleTypes.Shapeshifter or RoleTypes.Viper) || !pc.CanUseImpostorVentButton() || pc.Is(CustomRoles.Glitch) => false, CustomRoles.Diseased when pc.Is(CustomRoles.Antidote) => false, CustomRoles.Antidote when pc.Is(CustomRoles.Diseased) => false, - CustomRoles.Flash or CustomRoles.Giant when pc.GetCustomRole() is CustomRoles.Swooper or CustomRoles.Wraith or CustomRoles.Chameleon or CustomRoles.Alchemist or CustomRoles.Ankylosaurus => false, + CustomRoles.Flash or CustomRoles.Giant when pc.GetCustomRole() is CustomRoles.Swooper or CustomRoles.Wraith or CustomRoles.Chameleon or CustomRoles.Alchemist or CustomRoles.Ankylosaurus or CustomRoles.Swiftclaw => false, CustomRoles.Bait when pc.Is(CustomRoles.Disregarded) => false, CustomRoles.Busy when !pc.GetTaskState().HasTasks => false, CustomRoles.Truant when pc.Is(CustomRoles.SoulHunter) => false, @@ -1232,12 +1219,13 @@ internal static class CustomRolesHelper CustomRoles.DoubleShot when pc.Is(CustomRoles.CopyCat) => false, CustomRoles.Tiebreaker when pc.Is(CustomRoles.Dictator) => false, CustomRoles.Lucky when pc.Is(CustomRoles.Luckey) => false, - CustomRoles.Unlucky when pc.GetCustomRole() is CustomRoles.Luckey or CustomRoles.Tank => false, + CustomRoles.Unlucky when pc.GetCustomRole() is CustomRoles.Luckey or CustomRoles.Tank or CustomRoles.Vector or CustomRoles.Addict or CustomRoles.Lurker => false, CustomRoles.Unlucky when pc.Is(CustomRoles.Lucky) => false, CustomRoles.Lucky when pc.Is(CustomRoles.Unlucky) => false, CustomRoles.Fool when pc.GetCustomRole() is CustomRoles.Mechanic or CustomRoles.GuardianAngelEHR or CustomRoles.Technician => false, CustomRoles.Coroner when pc.Is(CustomRoles.Oblivious) => false, CustomRoles.Fragile when pc.Is(CustomRoles.Detour) => false, + CustomRoles.Physicist when pc.GetCustomRole() is CustomRoles.Tracefinder or CustomRoles.Doctor => false, CustomRoles.DoubleShot when pc.GetCustomRole() is not CustomRoles.EvilGuesser and not CustomRoles.NiceGuesser and not CustomRoles.Augur && !Options.GuesserMode.GetBool() => false, CustomRoles.DoubleShot when !pc.Is(CustomRoles.Guesser) && !pc.Is(CustomRoles.EvilGuesser) && pc.Is(CustomRoleTypes.Impostor) && !Options.ImpostorsCanGuess.GetBool() => false, CustomRoles.DoubleShot when !pc.Is(CustomRoles.Guesser) && !pc.Is(CustomRoles.NiceGuesser) && pc.Is(CustomRoleTypes.Crewmate) && !Options.CrewmatesCanGuess.GetBool() => false, @@ -2035,3 +2023,5 @@ public enum CountTypes Coven } + + diff --git a/Roles/Coven/Dreamweaver.cs b/Roles/Coven/Dreamweaver.cs index 82181d3cc..4cddb8006 100644 --- a/Roles/Coven/Dreamweaver.cs +++ b/Roles/Coven/Dreamweaver.cs @@ -28,7 +28,7 @@ public class Dreamweaver : Coven { StartSetup(650080) .AutoSetupOption(ref AbilityCooldown, 30f, new FloatValueRule(0f, 120f, 0.5f), OptionFormat.Seconds) - .AutoSetupOption(ref AbilityUseLimit, 5f, new FloatValueRule(0, 20, 0.05f), OptionFormat.Times) + .AutoSetupOption(ref AbilityUseLimit, 5f, new FloatValueRule(0, 20, 1f), OptionFormat.Times) .AutoSetupOption(ref CanVentBeforeNecronomicon, false) .AutoSetupOption(ref CanVentAfterNecronomicon, false); } @@ -114,4 +114,4 @@ public class Dreamweaver : Coven break; } } -} \ No newline at end of file +} diff --git a/Roles/Coven/Timelord.cs b/Roles/Coven/Timelord.cs index 7a538dfd9..a5a9781b3 100644 --- a/Roles/Coven/Timelord.cs +++ b/Roles/Coven/Timelord.cs @@ -19,7 +19,7 @@ public class Timelord : Coven { StartSetup(650110) .AutoSetupOption(ref KillCooldown, 30f, new FloatValueRule(0f, 120f, 0.5f), OptionFormat.Seconds) - .AutoSetupOption(ref TimeStolenWithEachKill, 10, new IntegerValueRule(0, 60, 1), OptionFormat.Seconds) + .AutoSetupOption(ref TimeStolenWithEachKill, 10, new IntegerValueRule(1, 60, 1), OptionFormat.Seconds) .AutoSetupOption(ref CanVentBeforeNecronomicon, false) .AutoSetupOption(ref CanVentAfterNecronomicon, true); } @@ -71,4 +71,4 @@ public class Timelord : Coven string stolen = Utils.ColorString(Team.Coven.GetColor().ShadeColor(0.25f), $" -{GetTotalStolenTime()}s"); return baseText + stolen; } -} \ No newline at end of file +} diff --git a/Roles/Coven/VoodooMaster.cs b/Roles/Coven/VoodooMaster.cs index 3561d72f1..f70dd503b 100644 --- a/Roles/Coven/VoodooMaster.cs +++ b/Roles/Coven/VoodooMaster.cs @@ -20,7 +20,7 @@ public class VoodooMaster : Coven { StartSetup(650050) .AutoSetupOption(ref AbilityCooldown, 30f, new FloatValueRule(0f, 120f, 0.5f), OptionFormat.Seconds) - .AutoSetupOption(ref AbilityUseLimit, 5f, new FloatValueRule(0, 20, 0.05f), OptionFormat.Times) + .AutoSetupOption(ref AbilityUseLimit, 5f, new FloatValueRule(0, 20, 1f), OptionFormat.Times) .AutoSetupOption(ref CanVentBeforeNecronomicon, false) .AutoSetupOption(ref CanVentAfterNecronomicon, true); } @@ -70,4 +70,4 @@ public class VoodooMaster : Coven return HasNecronomicon; } -} \ No newline at end of file +} diff --git a/Roles/Crewmate/Judge.cs b/Roles/Crewmate/Judge.cs index 7eed3729b..1e99468a8 100644 --- a/Roles/Crewmate/Judge.cs +++ b/Roles/Crewmate/Judge.cs @@ -39,7 +39,7 @@ public class Judge : RoleBase Options.SetupRoleOptions(Id, TabGroup.CrewmateRoles, CustomRoles.Judge); TrialLimitPerMeeting = new FloatOptionItem(Id + 10, "TrialLimitPerMeeting", new(0f, 15f, 1f), 1f, TabGroup.CrewmateRoles).SetParent(Options.CustomRoleSpawnChances[CustomRoles.Judge]).SetValueFormat(OptionFormat.Times); TrialLimitPerGame = new FloatOptionItem(Id + 9, "TrialLimitPerGame", new(0f, 30f, 1f), 3f, TabGroup.CrewmateRoles).SetParent(Options.CustomRoleSpawnChances[CustomRoles.Judge]).SetValueFormat(OptionFormat.Times); - AbilityUseLimit = new FloatOptionItem(Id + 18, "AbilityUseLimit", new(0f, 30f, 1f), 1f, TabGroup.CrewmateRoles).SetParent(Options.CustomRoleSpawnChances[CustomRoles.Judge]).SetValueFormat(OptionFormat.Times); + AbilityUseLimit = new FloatOptionItem(Id + 18, "AbilityUseLimit", new(0f, 30f, 0.5f), 1f, TabGroup.CrewmateRoles).SetParent(Options.CustomRoleSpawnChances[CustomRoles.Judge]).SetValueFormat(OptionFormat.Times); CanTrialMadmate = new BooleanOptionItem(Id + 12, "JudgeCanTrialMadmate", true, TabGroup.CrewmateRoles).SetParent(Options.CustomRoleSpawnChances[CustomRoles.Judge]); CanTrialConverted = new BooleanOptionItem(Id + 16, "JudgeCanTrialConverted", true, TabGroup.CrewmateRoles).SetParent(Options.CustomRoleSpawnChances[CustomRoles.Judge]); CanTrialCrewKilling = new BooleanOptionItem(Id + 13, "JudgeCanTrialnCrewKilling", false, TabGroup.CrewmateRoles).SetParent(Options.CustomRoleSpawnChances[CustomRoles.Judge]); @@ -336,3 +336,4 @@ public class Judge : RoleBase countsAs = 1; } } + diff --git a/Roles/Crewmate/Spy.cs b/Roles/Crewmate/Spy.cs index 2eee2cf78..b8430eea1 100644 --- a/Roles/Crewmate/Spy.cs +++ b/Roles/Crewmate/Spy.cs @@ -30,7 +30,7 @@ public class Spy : RoleBase .SetParent(CustomRoleSpawnChances[CustomRoles.Spy]) .SetValueFormat(OptionFormat.Times); - SpyRedNameDur = new FloatOptionItem(Id + 11, "SpyRedNameDur", new(0f, 70f, 1f), 3f, TabGroup.CrewmateRoles) + SpyRedNameDur = new FloatOptionItem(Id + 11, "SpyRedNameDur", new(0f, 70f, 0.5f), 3f, TabGroup.CrewmateRoles) .SetParent(CustomRoleSpawnChances[CustomRoles.Spy]) .SetValueFormat(OptionFormat.Seconds); @@ -134,4 +134,4 @@ public class Spy : RoleBase } } } -} \ No newline at end of file +} diff --git a/Roles/Neutral/Beehive.cs b/Roles/Neutral/Beehive.cs index d903d2de2..8f687787b 100644 --- a/Roles/Neutral/Beehive.cs +++ b/Roles/Neutral/Beehive.cs @@ -29,7 +29,7 @@ public class Beehive : RoleBase var id = 647350; Options.SetupRoleOptions(id++, TabGroup.NeutralRoles, CustomRoles.Beehive); - Distance = new FloatOptionItem(++id, "Beehive.Distance", new(0f, 20f, 0.5f), 15f, TabGroup.NeutralRoles) + Distance = new FloatOptionItem(++id, "Beehive.Distance", new(0.5f, 20f, 0.5f), 15f, TabGroup.NeutralRoles) .SetParent(Options.CustomRoleSpawnChances[CustomRoles.Beehive]); Time = new FloatOptionItem(++id, "Beehive.Time", new(0f, 30f, 0.5f), 10f, TabGroup.NeutralRoles) @@ -156,4 +156,4 @@ public class Beehive : RoleBase string color2 = walked >= distance ? "<#00ffff>" : "<#ffff00>"; return $"{color}{walked}{color2}/{distance} <#ffffff>({time}s)"; } -} \ No newline at end of file +} diff --git a/Roles/Neutral/HeadHunter.cs b/Roles/Neutral/HeadHunter.cs index d324d089e..6bbba658c 100644 --- a/Roles/Neutral/HeadHunter.cs +++ b/Roles/Neutral/HeadHunter.cs @@ -186,4 +186,6 @@ public class HeadHunter : RoleBase SendRPC(); Utils.NotifyRoles(SpecifySeer: Utils.GetPlayerById(HeadHunterId)); } -} \ No newline at end of file + +} + diff --git a/Roles/Neutral/Jinx.cs b/Roles/Neutral/Jinx.cs index cedf89d00..6fe5fcf6b 100644 --- a/Roles/Neutral/Jinx.cs +++ b/Roles/Neutral/Jinx.cs @@ -24,7 +24,7 @@ public class Jinx : RoleBase CanVent = new BooleanOptionItem(Id + 11, "CanVent", true, TabGroup.NeutralRoles).SetParent(CustomRoleSpawnChances[CustomRoles.Jinx]); HasImpostorVision = new BooleanOptionItem(Id + 13, "ImpostorVision", true, TabGroup.NeutralRoles).SetParent(CustomRoleSpawnChances[CustomRoles.Jinx]); - JinxSpellTimes = new IntegerOptionItem(Id + 14, "JinxSpellTimes", new(0, 15, 1), 1, TabGroup.NeutralRoles) + JinxSpellTimes = new IntegerOptionItem(Id + 14, "JinxSpellTimes", new(1, 15, 1), 1, TabGroup.NeutralRoles) .SetParent(CustomRoleSpawnChances[CustomRoles.Jinx]) .SetValueFormat(OptionFormat.Times); @@ -34,4 +34,5 @@ public class Jinx : RoleBase public override void Init() { } public override void Add(byte playerId) { } -} \ No newline at end of file + +} diff --git a/Roles/Neutral/Maverick.cs b/Roles/Neutral/Maverick.cs index 5394cda8d..6ed11a78a 100644 --- a/Roles/Neutral/Maverick.cs +++ b/Roles/Neutral/Maverick.cs @@ -95,4 +95,6 @@ public class Maverick : RoleBase { NumOfKills = reader.ReadPackedInt32(); } -} \ No newline at end of file + +} + diff --git a/Roles/Neutral/Revolutionist.cs b/Roles/Neutral/Revolutionist.cs index d34e97f92..a1f26356d 100644 --- a/Roles/Neutral/Revolutionist.cs +++ b/Roles/Neutral/Revolutionist.cs @@ -36,7 +36,7 @@ internal class Revolutionist : RoleBase .SetParent(CustomRoleSpawnChances[CustomRoles.Revolutionist]) .SetValueFormat(OptionFormat.Seconds); - RevolutionistDrawCount = new IntegerOptionItem(18412, "RevolutionistDrawCount", new(0, 14, 1), 6, TabGroup.NeutralRoles) + RevolutionistDrawCount = new IntegerOptionItem(18412, "RevolutionistDrawCount", new(1, 14, 1), 6, TabGroup.NeutralRoles) .SetParent(CustomRoleSpawnChances[CustomRoles.Revolutionist]) .SetValueFormat(OptionFormat.Players); @@ -44,7 +44,7 @@ internal class Revolutionist : RoleBase .SetParent(CustomRoleSpawnChances[CustomRoles.Revolutionist]) .SetValueFormat(OptionFormat.Percent); - RevolutionistVentCountDown = new FloatOptionItem(18414, "RevolutionistVentCountDown", new(0f, 180f, 1f), 15f, TabGroup.NeutralRoles) + RevolutionistVentCountDown = new FloatOptionItem(18414, "RevolutionistVentCountDown", new(0.5f, 180f, 0.5f), 15f, TabGroup.NeutralRoles) .SetParent(CustomRoleSpawnChances[CustomRoles.Revolutionist]) .SetValueFormat(OptionFormat.Seconds); } @@ -249,4 +249,4 @@ internal class Revolutionist : RoleBase RevolutionistLastTime.Remove(pc.PlayerId); RevolutionistCountdown.Remove(pc.PlayerId); } -} \ No newline at end of file +} diff --git a/Roles/Neutral/Ritualist.cs b/Roles/Neutral/Ritualist.cs index a21e1b23d..0ed2eff61 100644 --- a/Roles/Neutral/Ritualist.cs +++ b/Roles/Neutral/Ritualist.cs @@ -21,7 +21,7 @@ public class Ritualist : RoleBase .SetParent(CustomRoleSpawnChances[CustomRoles.Ritualist]) .SetValueFormat(OptionFormat.Seconds); - RitualMaxCount = new IntegerOptionItem(Id + 11, "RitualMaxCount", new(0, 15, 1), 1, TabGroup.NeutralRoles) + RitualMaxCount = new IntegerOptionItem(Id + 11, "RitualMaxCount", new(1, 15, 1), 1, TabGroup.NeutralRoles) .SetParent(CustomRoleSpawnChances[CustomRoles.Ritualist]) .SetValueFormat(OptionFormat.Times); @@ -35,4 +35,5 @@ public class Ritualist : RoleBase public override void Init() { } public override void Add(byte playerId) { } -} \ No newline at end of file + +} diff --git a/Roles/Neutral/RouleteGrandeur.cs b/Roles/Neutral/RouleteGrandeur.cs index 5f9ec806c..00ee9f6b1 100644 --- a/Roles/Neutral/RouleteGrandeur.cs +++ b/Roles/Neutral/RouleteGrandeur.cs @@ -37,7 +37,7 @@ public class RouleteGrandeur : RoleBase HasImpostorVision = new BooleanOptionItem(Id + 3, "ImpostorVision", true, TabGroup.NeutralRoles) .SetParent(Options.CustomRoleSpawnChances[CustomRoles.RouleteGrandeur]); - KCDReduction = new FloatOptionItem(Id + 4, "KCDReduction", new(0f, 100f, 0.5f), 3.5f, TabGroup.NeutralRoles) + KCDReduction = new FloatOptionItem(Id + 4, "KCDReduction", new(0.5f, 100f, 0.5f), 3.5f, TabGroup.NeutralRoles) .SetParent(Options.CustomRoleSpawnChances[CustomRoles.RouleteGrandeur]) .SetValueFormat(OptionFormat.Seconds); } @@ -179,4 +179,4 @@ public class RouleteGrandeur : RoleBase return string.Format(Translator.GetString("RG.Suffix"), Bullets); } -} \ No newline at end of file +} diff --git a/Roles/Neutral/Samurai.cs b/Roles/Neutral/Samurai.cs index 5a950de48..1ef3c590a 100644 --- a/Roles/Neutral/Samurai.cs +++ b/Roles/Neutral/Samurai.cs @@ -45,7 +45,7 @@ internal class Samurai : RoleBase .SetParent(CustomRoleSpawnChances[CustomRoles.Samurai]) .SetValueFormat(OptionFormat.Seconds); - KillDelay = new FloatOptionItem(id + 7, "Samurai.KillDelay", new(0f, 60f, 0.5f), 5f, TabGroup.NeutralRoles) + KillDelay = new FloatOptionItem(id + 7, "Samurai.KillDelay", new(0.5f, 60f, 0.5f), 5f, TabGroup.NeutralRoles) .SetParent(CustomRoleSpawnChances[CustomRoles.Samurai]) .SetValueFormat(OptionFormat.Seconds); } @@ -143,4 +143,4 @@ internal class Samurai : RoleBase Delays.Clear(); } -} \ No newline at end of file +} diff --git a/Roles/Neutral/Werewolf.cs b/Roles/Neutral/Werewolf.cs index e0c8ab2d1..5d76800c0 100644 --- a/Roles/Neutral/Werewolf.cs +++ b/Roles/Neutral/Werewolf.cs @@ -50,7 +50,7 @@ public class Werewolf : RoleBase .SetParent(CustomRoleSpawnChances[CustomRoles.Werewolf]) .SetValueFormat(OptionFormat.Seconds); - RampageDur = new FloatOptionItem(Id + 13, "WWRampageDur", new(0f, 180f, 1f), 12f, TabGroup.NeutralRoles) + RampageDur = new FloatOptionItem(Id + 13, "WWRampageDur", new(0.5f, 180f, 0.5f), 12f, TabGroup.NeutralRoles) .SetParent(CustomRoleSpawnChances[CustomRoles.Werewolf]) .SetValueFormat(OptionFormat.Seconds); @@ -285,4 +285,5 @@ public class Werewolf : RoleBase return true; } -} \ No newline at end of file + +}