From 37faf3e02c3dc9172e656771227964fe6cff6412 Mon Sep 17 00:00:00 2001 From: New78799 Date: Thu, 16 Apr 2026 18:25:45 +0700 Subject: [PATCH] Add Constricted (Addon) (#582) * Update PlayerGameOptionsSender.cs * Update CustomRolesHelper.cs * Add 'Constricted' role to CustomRoles * Update CustomRoles.cs * Update en_US.jsonc * Update Main.cs * Create Constricted.cs --- CTA/CustomTeamAssigner/CustomRoles.cs | 1 + CustomRoles.cs | 1 + Main.cs | 1 + Modules/CustomRolesHelper.cs | 4 +++- Modules/GameOptionsSender/PlayerGameOptionsSender.cs | 5 +++++ Resources/Lang/en_US.jsonc | 3 +++ Roles/Standard/Addons/Common/Constricted.cs | 11 +++++++++++ 7 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 Roles/Standard/Addons/Common/Constricted.cs diff --git a/CTA/CustomTeamAssigner/CustomRoles.cs b/CTA/CustomTeamAssigner/CustomRoles.cs index a5e87fe8c..26e7db642 100644 --- a/CTA/CustomTeamAssigner/CustomRoles.cs +++ b/CTA/CustomTeamAssigner/CustomRoles.cs @@ -530,6 +530,7 @@ public enum CustomRoles Compelled, Composter, Concealer, + Constricted, Contagious, Damocles, Deadlined, diff --git a/CustomRoles.cs b/CustomRoles.cs index 0fe5d9d62..08dc1e7b4 100644 --- a/CustomRoles.cs +++ b/CustomRoles.cs @@ -530,6 +530,7 @@ public enum CustomRoles Commited, Compelled, Composter, + Constricted, Concealer, Contagious, Damocles, diff --git a/Main.cs b/Main.cs index 32abb3202..6e2a37702 100644 --- a/Main.cs +++ b/Main.cs @@ -683,6 +683,7 @@ public class Main : BasePlugin { CustomRoles.Looter, "#F5D866" }, { CustomRoles.Tired, "#ff1919" }, { CustomRoles.Concealer, "#ff1919" }, + { CustomRoles.Constricted, "#c561ec" }, { CustomRoles.Composter, "#8D6F64" }, { CustomRoles.TaskMaster, "#00ffa5" }, { CustomRoles.Compelled, "#D2E44C" }, diff --git a/Modules/CustomRolesHelper.cs b/Modules/CustomRolesHelper.cs index 0ac320955..72e27c2b3 100644 --- a/Modules/CustomRolesHelper.cs +++ b/Modules/CustomRolesHelper.cs @@ -1891,9 +1891,11 @@ internal static class CustomRolesHelper CustomRoles.Beartrap when pc.Is(CustomRoles.Bait) => false, CustomRoles.Schizophrenic when pc.Is(CustomRoles.Dictator) => 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 or CustomRoles.Viper or CustomRoles.ViperEHR => false, - CustomRoles.Reach when pc.GetCustomRole() is CustomRoles.Mafioso or CustomRoles.Evolver or CustomRoles.Berserker => false, + CustomRoles.Reach when (pc.GetCustomRole() is CustomRoles.Mafioso or CustomRoles.Evolver or CustomRoles.Berserker) || pc.Is(CustomRoles.Constricted) => false, + CustomRoles.Constricted when (pc.GetCustomRole() is CustomRoles.Mafioso or CustomRoles.Evolver or CustomRoles.Berserker) || pc.Is(CustomRoles.Reach) => 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, + CustomRoles.Constricted when pc.GetRoleTypes() is not (RoleTypes.Impostor or RoleTypes.Phantom or RoleTypes.Shapeshifter or RoleTypes.Viper) => false, CustomRoles.Magnet when pc.GetRoleTypes() is not (RoleTypes.Impostor or RoleTypes.Phantom or RoleTypes.Shapeshifter or RoleTypes.Viper) => false, 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, diff --git a/Modules/GameOptionsSender/PlayerGameOptionsSender.cs b/Modules/GameOptionsSender/PlayerGameOptionsSender.cs index c0b7f0608..1924c4c6d 100644 --- a/Modules/GameOptionsSender/PlayerGameOptionsSender.cs +++ b/Modules/GameOptionsSender/PlayerGameOptionsSender.cs @@ -354,6 +354,11 @@ public sealed class PlayerGameOptionsSender(PlayerControl player) : GameOptionsS opt.SetInt(Int32OptionNames.KillDistance, 2); break; } + case CustomRoles.Constricted: + { + opt.SetInt(Int32OptionNames.KillDistance, 0); + break; + } case CustomRoles.Madmate: { opt.SetVision(Options.MadmateHasImpostorVision.GetBool()); diff --git a/Resources/Lang/en_US.jsonc b/Resources/Lang/en_US.jsonc index 248ad135a..0eb918495 100644 --- a/Resources/Lang/en_US.jsonc +++ b/Resources/Lang/en_US.jsonc @@ -3575,6 +3575,9 @@ "Concealer": "Concealer", "ConcealerInfo": "Your Kills are Anonymous", "ConcealerInfoLong": "(Add-ons):\\nAs the Concealer, each body of yours will be camouflaged.", + "Constricted": "Constricted", + "ConstrictedInfo": "You have a shorter kill range", + "ConstrictedInfoLong": "(Add-ons):\\nOnly roles with a kill button can get this add-on. You have the shortest kill range possible in the game, unlike everyone else.", "Contagious": "Contagious", "ContagiousInfo": " You've been Infected by the Virus", "ContagiousInfoLong": "(Betrayal Add-ons):\\nWhen the Virus infects you, you become contagious. Contagious players are on the Virus team.\\n\\nWhether or not you die after a meeting depends on the settings for the Virus.", diff --git a/Roles/Standard/Addons/Common/Constricted.cs b/Roles/Standard/Addons/Common/Constricted.cs new file mode 100644 index 000000000..bb305ce1f --- /dev/null +++ b/Roles/Standard/Addons/Common/Constricted.cs @@ -0,0 +1,11 @@ +namespace EHR.Roles; + +internal class Constricted : IAddon +{ + public AddonTypes Type => AddonTypes.Harmful; + + public void SetupCustomOption() + { + Options.SetupAdtRoleOptions(656360, CustomRoles.Constricted, canSetNum: true, teamSpawnOptions: true); + } +}