From a51e6f29cf6f1130195fdf1cb51f89db01dc8427 Mon Sep 17 00:00:00 2001 From: New78799 Date: Wed, 15 Apr 2026 20:00:54 +0700 Subject: [PATCH] Add Absorber (Addon) (#575) * Update CustomRoles.cs * Update en_US.jsonc * Add Absorber class implementing IAddon interface * Update CustomRoles.cs * Update Main.cs * Update PlayerControlPatch.cs * Update PlayerControlPatch.cs --- CTA/CustomTeamAssigner/CustomRoles.cs | 1 + CustomRoles.cs | 1 + Main.cs | 1 + Patches/PlayerControlPatch.cs | 7 +++++++ Resources/Lang/en_US.jsonc | 3 +++ Roles/Standard/Addons/Common/Absorber,cs | 11 +++++++++++ 6 files changed, 24 insertions(+) create mode 100644 Roles/Standard/Addons/Common/Absorber,cs diff --git a/CTA/CustomTeamAssigner/CustomRoles.cs b/CTA/CustomTeamAssigner/CustomRoles.cs index c7f029308..1f6ecfb8c 100644 --- a/CTA/CustomTeamAssigner/CustomRoles.cs +++ b/CTA/CustomTeamAssigner/CustomRoles.cs @@ -503,6 +503,7 @@ public enum CustomRoles // Sub-role after 500 NotAssigned = 500, + Absorber, Aide, Allergic, Anchor, diff --git a/CustomRoles.cs b/CustomRoles.cs index c7f029308..1f6ecfb8c 100644 --- a/CustomRoles.cs +++ b/CustomRoles.cs @@ -503,6 +503,7 @@ public enum CustomRoles // Sub-role after 500 NotAssigned = 500, + Absorber, Aide, Allergic, Anchor, diff --git a/Main.cs b/Main.cs index 34738f5b5..e5ffe9eec 100644 --- a/Main.cs +++ b/Main.cs @@ -691,6 +691,7 @@ public class Main : BasePlugin { CustomRoles.Aide, "#ff1919" }, { CustomRoles.Anchor, "#6B4CE4" }, { CustomRoles.Fragile, "#debe66" }, + { CustomRoles.Absorber, "#29f5a0" }, { CustomRoles.Allergic, "#e3bd56" }, { CustomRoles.Introvert, "#6293e3" }, { CustomRoles.Deadlined, "#ffa500" }, diff --git a/Patches/PlayerControlPatch.cs b/Patches/PlayerControlPatch.cs index 045c6cd1f..3b7cb5bc0 100644 --- a/Patches/PlayerControlPatch.cs +++ b/Patches/PlayerControlPatch.cs @@ -1339,6 +1339,13 @@ internal static class ReportDeadBodyPatch if (player.Is(CustomRoles.Looter)) tpc.GetCustomSubRoles().FindAll(x => !player.Is(x) && !x.IsGhostRole() && !x.IsNotAssignableMidGame() && CustomRolesHelper.CheckAddonConflict(x, player)).ForEach(x => player.RpcSetCustomRole(x)); + + if (player.Is(CustomRoles.Absorber)) + { + float give = target.PlayerId.GetAbilityUseLimit(); + if (give < 1f) player.RpcIncreaseAbilityUseLimitBy(give); + else player.RpcIncreaseAbilityUseLimitBy(1f); + } } if (QuizMaster.On) diff --git a/Resources/Lang/en_US.jsonc b/Resources/Lang/en_US.jsonc index 7d5040dd3..02ec41af8 100644 --- a/Resources/Lang/en_US.jsonc +++ b/Resources/Lang/en_US.jsonc @@ -3461,6 +3461,9 @@ /* ============================== Roles (Add-ons) ============================== */ + "Absorber": "Absorber", + "AbsorberInfo": "Report bodies to absorb Ability Uses", + "AbsorberInfoLong": "(Add-ons):\\nAs the Absorber, you can take at most 1 ability use from dead players by reporting their body.", "Aide": "Aide", "AideInfo": "You Can't Sabotage", "AideInfoLong": "(Add-ons):\\nYou cannot sabotage.", diff --git a/Roles/Standard/Addons/Common/Absorber,cs b/Roles/Standard/Addons/Common/Absorber,cs new file mode 100644 index 000000000..2f25ef3d3 --- /dev/null +++ b/Roles/Standard/Addons/Common/Absorber,cs @@ -0,0 +1,11 @@ +namespace EHR.Roles; + +public class Absorber : IAddon +{ + public AddonTypes Type => AddonTypes.Helpful; + + public void SetupCustomOption() + { + Options.SetupAdtRoleOptions(645670, CustomRoles.Absorber, canSetNum: true, teamSpawnOptions: true); + } +}