diff --git a/CustomRoles.cs b/CustomRoles.cs
index f05e923d0..e7a802f91 100644
--- a/CustomRoles.cs
+++ b/CustomRoles.cs
@@ -508,6 +508,7 @@ public enum CustomRoles
Commited,
Compelled,
Composter,
+ Concealer,
Contagious,
Damocles,
Deadlined,
diff --git a/Main.cs b/Main.cs
index b66c9d1e7..668951f19 100644
--- a/Main.cs
+++ b/Main.cs
@@ -657,6 +657,7 @@ public class Main : BasePlugin
{ CustomRoles.Listener, "#060270" },
{ CustomRoles.Unbound, "#DFC57B" },
{ CustomRoles.AntiTP, "#fcba03" },
+ { CustomRoles.Concealer, "#595959" },
{ CustomRoles.Composter, "#8D6F64" },
{ CustomRoles.TaskMaster, "#00ffa5" },
{ CustomRoles.Compelled, "#D2E44C" },
diff --git a/Modules/CustomRoleSelector.cs b/Modules/CustomRoleSelector.cs
index 91c078740..b088e569d 100644
--- a/Modules/CustomRoleSelector.cs
+++ b/Modules/CustomRoleSelector.cs
@@ -971,6 +971,7 @@ internal static class CustomRoleSelector
switch (role)
{
+ case CustomRoles.Concealer when Options.AnonymousBodies.GetBool():
case CustomRoles.Autopsy when Options.EveryoneSeesDeathReasons.GetBool():
case CustomRoles.Gravestone when Options.EveryoneSeesDeadPlayersRoles.GetBool():
case CustomRoles.Mare or CustomRoles.Glow or CustomRoles.Sleep when Main.CurrentMap == MapNames.Fungle:
diff --git a/Modules/ExtendedPlayerControl.cs b/Modules/ExtendedPlayerControl.cs
index 67859fb7f..8aa755dfe 100644
--- a/Modules/ExtendedPlayerControl.cs
+++ b/Modules/ExtendedPlayerControl.cs
@@ -1946,12 +1946,12 @@ internal static class ExtendedPlayerControl
IncreaseAbilityUseLimitOnKill(killer);
target.SetRealKiller(killer, true);
+
+ PlayerControl realKiller = Main.PlayerStates.TryGetValue(target.PlayerId, out PlayerState state) ? state.RealKiller.ID.GetPlayer() ?? killer : killer;
+ if (realKiller == null) realKiller = killer;
if (target.PlayerId == Godfather.GodfatherTarget)
- {
- PlayerControl realKiller = Main.PlayerStates.TryGetValue(target.PlayerId, out PlayerState state) ? state.RealKiller.ID.GetPlayer() ?? killer : killer;
realKiller.RpcSetCustomRole(CustomRoles.Refugee);
- }
if (target.Is(CustomRoles.Jackal)) Jackal.Instances.Do(x => x.PromoteSidekick());
@@ -1960,7 +1960,7 @@ internal static class ExtendedPlayerControl
if (killer.IsLocalPlayer() && !killer.HasKillButton() && killer.PlayerId != target.PlayerId && Options.CurrentGameMode == CustomGameMode.Standard)
Achievements.Type.InnocentKiller.Complete();
- if (Options.AnonymousBodies.GetBool())
+ if (Options.AnonymousBodies.GetBool() || realKiller.Is(CustomRoles.Concealer))
{
Main.AllPlayerSpeed[target.PlayerId] = Main.MinSpeed;
target.SyncSettings();
@@ -2004,8 +2004,8 @@ internal static class ExtendedPlayerControl
killer.RpcMurderPlayer(target, true);
- if (Main.PlayerStates.TryGetValue(target.PlayerId, out var state) && !state.IsDead)
- state.SetDead();
+ if (Main.PlayerStates.TryGetValue(target.PlayerId, out var playerState) && !playerState.IsDead)
+ playerState.SetDead();
LateTask.New(() =>
{
diff --git a/Resources/Lang/en_US.json b/Resources/Lang/en_US.json
index 6eed94ba5..a1afdc452 100644
--- a/Resources/Lang/en_US.json
+++ b/Resources/Lang/en_US.json
@@ -9237,6 +9237,10 @@
"AgitaterTargetNotify": "<#ffff00>YOU HAVE THE BOMB!!\\n<#ffa500>Pass it to someone else or die!",
"AgitaterCanGetBombed": "Agitator can get the bomb",
"AgitaterAutoReportBait": "Agitator Auto Report Bait",
+ "Concealer": "Concealer",
+ "ConcealerInfo": "Your Kills are Anonymous",
+ "ConcealerInfoLong": "(Add-ons):\\nAs the Concealer, each body of yours will be camouflaged.",
+ "Prefix.Concealer": "Concealer",
"Investor": "Investor",
"InvestorInfo": "Invest in Players",
"InvestorInfoLong": "(Neutrals):\\nAs the Investor, you can mark players using your kill button to invest in them. At the end, you win with the winning team if at least a set percentage of your marked players have won.",
diff --git a/Roles/AddOns/Common/Concealer.cs b/Roles/AddOns/Common/Concealer.cs
new file mode 100644
index 000000000..6add2a406
--- /dev/null
+++ b/Roles/AddOns/Common/Concealer.cs
@@ -0,0 +1,11 @@
+namespace EHR.AddOns.Common;
+
+public class Concealer : IAddon
+{
+ public AddonTypes Type => AddonTypes.ImpOnly;
+
+ public void SetupCustomOption()
+ {
+ Options.SetupAdtRoleOptions(656200, CustomRoles.Concealer, canSetNum: true);
+ }
+}
\ No newline at end of file