Skip to content

Commit

Permalink
Update v1.1.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
mxyx0412 committed Dec 5, 2024
1 parent b75000c commit bcb61b1
Show file tree
Hide file tree
Showing 45 changed files with 1,899 additions and 1,379 deletions.
Binary file modified Strings.xlsx
Binary file not shown.
164 changes: 112 additions & 52 deletions TheOtherRoles/Buttons/Buttons.cs

Large diffs are not rendered by default.

5 changes: 2 additions & 3 deletions TheOtherRoles/Buttons/CustomButton.cs
Original file line number Diff line number Diff line change
Expand Up @@ -148,11 +148,10 @@ public static void ResetAllCooldowns(float Time = -1)
Error($"NullReferenceException from MeetingEndedUpdate().HasButton(), if theres only one warning its fine\n{e}", "CustomButton");
}
}
var time = Time == -1 ? ModOption.KillCooddown : Time;
CachedPlayer.LocalPlayer.PlayerControl.killTimer = time;
}

/// <summary>
/// ÖØÖÃÍæ¼Ò»÷ɱ°´Å¥cd
/// </summary>
public static void resetKillButton(PlayerControl p, float time = -1)
{
if (p.IsDead()) return;
Expand Down
69 changes: 35 additions & 34 deletions TheOtherRoles/Helper/Helpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ public enum LogLevel
public static class Helpers
{
public static bool zoomOutStatus;

public static bool InGame => AmongUsClient.Instance != null && AmongUsClient.Instance.GameState == InnerNetClient.GameStates.Started;
public static bool IsCountDown => GameStartManager.InstanceExists && GameStartManager.Instance.startState == GameStartManager.StartingStates.Countdown;
public static bool InMeeting => InGame && MeetingHud.Instance;
Expand All @@ -90,24 +89,25 @@ public static class Helpers
/// </summary>
public static bool hasFakeTasks(this PlayerControl player)
{
if (player == Specter.player) return false;
return player == Werewolf.werewolf ||
player == Doomsayer.doomsayer ||
player == Juggernaut.juggernaut ||
player == Jester.jester ||
player == Arsonist.arsonist ||
player == Jackal.jackal ||
player == Sidekick.sidekick ||
player == Pavlovsdogs.pavlovsowner ||
player == Witness.player ||
player == PartTimer.partTimer ||
player == Akujo.akujo ||
player == Swooper.swooper ||
player == Lawyer.lawyer ||
player == Executioner.executioner ||
player == Vulture.vulture ||
Pursuer.pursuer.Contains(player) ||
Survivor.survivor.Contains(player) ||
Pavlovsdogs.pavlovsdogs.Contains(player) ||
Jackal.formerJackals.Contains(player);
player == Jackal.sidekick ||
player == Pavlovsdogs.pavlovsowner ||
Jackal.jackal.Any(x => x == player) ||
Pursuer.pursuer.Any(x => x == player) ||
Survivor.survivor.Any(x => x == player) ||
Pavlovsdogs.pavlovsdogs.Any(x => x == player);
}

/// <summary>
Expand Down Expand Up @@ -136,10 +136,10 @@ public static bool killingCrewAlive()
public static bool hasImpVision(GameData.PlayerInfo player)
{
return player.Role.IsImpostor
|| (((Jackal.jackal != null && Jackal.jackal.PlayerId == player.PlayerId) || Jackal.formerJackals.Any(x => x.PlayerId == player.PlayerId)) && Jackal.hasImpostorVision)
|| (Sidekick.sidekick != null && Sidekick.sidekick.PlayerId == player.PlayerId && Sidekick.hasImpostorVision)
|| (Jackal.jackal.Any(p => p.PlayerId == player.PlayerId) && Jackal.hasImpostorVision)
|| (Jackal.sidekick != null && Jackal.sidekick.PlayerId == player.PlayerId && Jackal.hasImpostorVision)
|| (Pavlovsdogs.pavlovsowner != null && Pavlovsdogs.pavlovsowner.PlayerId == player.PlayerId && Pavlovsdogs.hasImpostorVision)
|| (Pavlovsdogs.pavlovsdogs != null && Pavlovsdogs.pavlovsdogs.Any(p => p.PlayerId == player.PlayerId) && Pavlovsdogs.hasImpostorVision)
|| (Pavlovsdogs.pavlovsdogs.Any(p => p.PlayerId == player.PlayerId) && Pavlovsdogs.hasImpostorVision)
|| (Spy.spy != null && Spy.spy.PlayerId == player.PlayerId && Spy.hasImpostorVision)
|| (Juggernaut.juggernaut != null && Juggernaut.juggernaut.PlayerId == player.PlayerId && Juggernaut.hasImpostorVision)
|| (Jester.jester != null && Jester.jester.PlayerId == player.PlayerId && Jester.hasImpostorVision)
Expand Down Expand Up @@ -174,11 +174,11 @@ public static bool roleCanUseVents(this PlayerControl player)
{
roleCouldUse = true;
}
else if (Jackal.canUseVents && Jackal.jackal != null && Jackal.jackal == player)
else if (Jackal.canUseVents && Jackal.jackal != null && Jackal.jackal.Any(x => x == player))
{
roleCouldUse = true;
}
else if (Sidekick.canUseVents && Sidekick.sidekick != null && Sidekick.sidekick == player)
else if (Jackal.canUseVents && Jackal.sidekick != null && Jackal.sidekick == player)
{
roleCouldUse = true;
}
Expand Down Expand Up @@ -253,7 +253,7 @@ public static bool checkAndDoVetKill(PlayerControl target)
public static bool isNeutral(PlayerControl player)
{
var roleInfo = RoleInfo.getRoleInfoForPlayer(player, false).FirstOrDefault();
return roleInfo != null && roleInfo.roleTeam == RoleType.Neutral;
return roleInfo != null && roleInfo.roleType == RoleType.Neutral;
}

public static bool isKillerNeutral(PlayerControl player)
Expand All @@ -263,17 +263,17 @@ public static bool isKillerNeutral(PlayerControl player)
player == Werewolf.werewolf ||
player == Swooper.swooper ||
player == Arsonist.arsonist ||
player == Jackal.jackal ||
player == Sidekick.sidekick ||
player == Jackal.sidekick ||
player == Pavlovsdogs.pavlovsowner ||
Jackal.jackal.Contains(player) ||
Pavlovsdogs.pavlovsdogs.Contains(player));
}

public static bool isEvilNeutral(PlayerControl player)
{
return isNeutral(player) &&
player != Amnisiac.amnisiac &&
player != PartTimer.partTimer &&
!Amnisiac.player.Contains(player) &&
!Pursuer.pursuer.Contains(player) &&
!Survivor.survivor.Contains(player);
}
Expand Down Expand Up @@ -345,7 +345,7 @@ public static bool roleCanSabotage(this PlayerControl player)
{
var roleCouldUse = false;
if (ModOption.disableSabotage) return false;
if (Jackal.canSabotage && (player == Jackal.jackal || player == Sidekick.sidekick || Jackal.formerJackals.Contains(player)) && !ModOption.disableSabotage)
if (Jackal.canSabotage && (Jackal.jackal.Contains(player) || player == Jackal.sidekick) && !ModOption.disableSabotage)
roleCouldUse = true;
if (Pavlovsdogs.canSabotage && (player == Pavlovsdogs.pavlovsowner || Pavlovsdogs.pavlovsdogs.Any(p => p == player)) && !ModOption.disableSabotage)
roleCouldUse = true;
Expand Down Expand Up @@ -475,7 +475,7 @@ public static void showTargetNameOnButton(PlayerControl target, CustomButton but
// set to morphed player
else if (Morphling.morphling != null && Morphling.morphTarget != null && target == Morphling.morphling && Morphling.morphTimer > 0) text = Morphling.morphTarget.Data.PlayerName;
else if (target == Swooper.swooper && Swooper.isInvisable) text = defaultText;
else if (target == Jackal.jackal && Jackal.isInvisable) text = defaultText;
else if (Jackal.jackal.Any(p => p == target) && Jackal.isInvisable) text = defaultText;
//else if (target == PhantomRole.phantomRole) text = defaultText;
else if (target == null) text = defaultText; // Set text to defaultText if no target
else text = target.Data.PlayerName; // Set text to playername
Expand Down Expand Up @@ -630,7 +630,7 @@ public static List<RoleInfo> allRoleInfos()
var allRoleInfo = new List<RoleInfo>();
foreach (var role in RoleInfo.allRoleInfos)
{
if (role.roleTeam == RoleType.Modifier) continue;
if (role.roleType is RoleType.Modifier or RoleType.GhostRole or RoleType.Special) continue;
allRoleInfo.Add(role);
}
return allRoleInfo;
Expand All @@ -639,7 +639,7 @@ public static List<RoleInfo> allRoleInfos()
public static List<RoleInfo> onlineRoleInfos()
{
var role = new List<RoleInfo>();
role.AddRange(CachedPlayer.AllPlayers.Select(n => RoleInfo.getRoleInfoForPlayer(n, false)).SelectMany(n => n));
role.AddRange(CachedPlayer.AllPlayers.Select(n => RoleInfo.getRoleInfoForPlayer(n, false, false)).SelectMany(x => x));
return role;
}

Expand All @@ -651,12 +651,15 @@ public static PlayerControl playerById(byte id)
return null;
}

public static Dictionary<byte, PlayerControl> allPlayersById()
public static bool isSabotageActive()
{
var res = new Dictionary<byte, PlayerControl>();
foreach (PlayerControl player in CachedPlayer.AllPlayers)
res.Add(player.PlayerId, player);
return res;
foreach (var task in CachedPlayer.LocalPlayer.PlayerControl.myTasks.GetFastEnumerator())
if (task.TaskType == TaskTypes.FixLights || task.TaskType == TaskTypes.RestoreOxy ||
task.TaskType == TaskTypes.ResetReactor || task.TaskType == TaskTypes.ResetSeismic ||
task.TaskType == TaskTypes.FixComms || task.TaskType == TaskTypes.StopCharles
|| (SubmergedCompatibility.IsSubmerged && task.TaskType == SubmergedCompatibility.RetrieveOxygenMask))
return true;
return false;
}

public static void handleVampireBiteOnBodyReport()
Expand Down Expand Up @@ -755,7 +758,7 @@ public static Color getTeamColor(RoleType team)
RoleType.Impostor => Palette.ImpostorRed,
RoleType.Neutral => Color.gray,
RoleType.Modifier => Color.yellow,
RoleType.Special => Palette.Purple,
RoleType.GhostRole => new Color32(159, 127, 209, byte.MaxValue),
_ => Palette.White
};
}
Expand Down Expand Up @@ -939,7 +942,7 @@ public static bool hidePlayerName(PlayerControl source, PlayerControl target)
return true; // No names are visible
if (SurveillanceMinigamePatch.nightVisionIsActive) return true;
if (Ninja.isInvisble && Ninja.ninja == target) return true;
if (Jackal.isInvisable && Jackal.jackal == target) return true;
if (Jackal.isInvisable && Jackal.jackal.Any(p => p == target)) return true;
if (Swooper.isInvisable && Swooper.swooper == target) return true;
if (ModOption.hideOutOfSightNametags && InGame && source.IsAlive() && !isFungle
&& PhysicsHelpers.AnythingBetween(localPlayer.GetTruePosition(), target.GetTruePosition(), Constants.ShadowMask, false))
Expand All @@ -948,15 +951,13 @@ public static bool hidePlayerName(PlayerControl source, PlayerControl target)
if (!ModOption.hidePlayerNames) return false; // All names are visible
if (source == null || target == null) return true;
if (source == target) return false; // Player sees his own name
if (source.Data.Role.IsImpostor && (target.Data.Role.IsImpostor || target == Spy.spy ||
(target == Sidekick.sidekick && Sidekick.wasTeamRed) ||
(target == Jackal.jackal && Jackal.wasTeamRed)))
if (source.Data.Role.IsImpostor && (target.Data.Role.IsImpostor || target == Spy.spy))
return false; // Members of team Impostors see the names of Impostors/Spies
if ((source == Lovers.lover1 || source == Lovers.lover2) &&
(target == Lovers.lover1 || target == Lovers.lover2))
return false; // Members of team Lovers see the names of each other
if ((source == Jackal.jackal || source == Sidekick.sidekick)
&& (target == Jackal.jackal || target == Sidekick.sidekick))
if ((Jackal.jackal.Any(p => p == source) || source == Jackal.sidekick)
&& (Jackal.jackal.Any(p => p == target) || target == Jackal.sidekick))
return false; // Members of team Jackal see the names of each other
if ((source == Pavlovsdogs.pavlovsowner || Pavlovsdogs.pavlovsdogs.Any(x => x == target))
&& (target == Pavlovsdogs.pavlovsowner || Pavlovsdogs.pavlovsdogs.Any(x => x == target)))
Expand Down Expand Up @@ -1289,7 +1290,7 @@ public static MurderAttemptResult checkMurderAttemptAndKill(PlayerControl killer
CachedPlayer.LocalPlayer.PlayerControl.NetId, (byte)CustomRPC.MimicMimicRole, SendOption.Reliable);
writerMimic.Write(target.PlayerId);
AmongUsClient.Instance.FinishRpcImmediately(writerMimic);
RPCProcedure.mimicMimicRole(target.PlayerId);
Mimic.MimicRole(target.PlayerId);
}

MurderPlayer(killer, target, showAnimation);
Expand Down
4 changes: 1 addition & 3 deletions TheOtherRoles/Modules/ChatCommands.cs
Original file line number Diff line number Diff line change
Expand Up @@ -259,9 +259,7 @@ public static void Postfix(ChatBubble __instance, [HarmonyArgument(0)] string pl
.FirstOrDefault(x => x.Data != null && x.Data.PlayerName.Equals(playerName, StringComparison.Ordinal));

if (CachedPlayer.LocalPlayer != null && CachedPlayer.LocalPlayer.Data.Role.IsImpostor && __instance != null
&& ((Spy.spy != null && sourcePlayer.PlayerId == Spy.spy.PlayerId)
|| (Sidekick.sidekick != null && Sidekick.wasTeamRed && sourcePlayer.PlayerId == Sidekick.sidekick.PlayerId)
|| (Jackal.jackal != null && Jackal.wasTeamRed && sourcePlayer.PlayerId == Jackal.jackal.PlayerId)))
&& (Spy.spy != null && sourcePlayer.PlayerId == Spy.spy.PlayerId))
{
__instance.NameText.color = Palette.ImpostorRed;
}
Expand Down
16 changes: 13 additions & 3 deletions TheOtherRoles/Options/CustomOptionHolder.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
using TheOtherRoles.Roles.Ghost;
using TheOtherRoles.Roles.Neutral;
using UnityEngine;
using static TheOtherRoles.Options.CustomOption;
using Types = TheOtherRoles.Options.CustomOption.CustomOptionType;
Expand Down Expand Up @@ -124,7 +126,6 @@ public class CustomOptionHolder
public static CustomOption jackalCanUseVents;
public static CustomOption jackalCanUseSabo;
public static CustomOption jackalCanCreateSidekick;
public static CustomOption jackalCanImpostorFindSidekick;
public static CustomOption sidekickPromotesToJackal;
public static CustomOption sidekickCanKill;
public static CustomOption sidekickCanUseVents;
Expand Down Expand Up @@ -228,6 +229,9 @@ public class CustomOptionHolder

public static CustomOption ghostEngineerSpawnRate;

public static CustomOption specterSpawnRate;
public static CustomOption specterResetRole;

public static CustomOption sheriffSpawnRate;
public static CustomOption sheriffMisfireKills;
public static CustomOption sheriffCooldown;
Expand Down Expand Up @@ -383,6 +387,8 @@ public class CustomOptionHolder
public static CustomOption executionerPromotesToLawyer;
public static CustomOption executionerOnTargetDead;

public static CustomOption witnessSpawnRate;

public static CustomOption balancerSpawnRate;
public static CustomOption balancerCount;
public static CustomOption balancerVoteTime;
Expand Down Expand Up @@ -900,6 +906,9 @@ public static void Load()

//-------------------------- Neutral Options 20000-29999 -------------------------- //

specterSpawnRate = Create(50020, Types.Neutral, cs(Specter.color, "SpecterOptions"), rates, null, true);
specterResetRole = Create(50021, Types.Neutral, "amnisiacResetRole", true, specterSpawnRate);

survivorSpawnRate = Create(20280, Types.Neutral, cs(Survivor.color, "Survivor"), rates, null, true);
survivorVestEnable = Create(20281, Types.Neutral, "survivorVestEnable", true, survivorSpawnRate);
survivorVestNumber = Create(20282, Types.Neutral, "survivorVestNumber", 5f, 1f, 20f, 1f, survivorVestEnable);
Expand Down Expand Up @@ -930,7 +939,6 @@ public static void Load()
jackalCanCreateSidekick = Create(20135, Types.Neutral, cs(Jackal.color, "jackalCanCreateSidekick"), false, jackalSpawnRate);
jackalCreateSidekickCooldown = Create(20136, Types.Neutral, "jackalCreateSidekickCooldown", 25f, 10f, 60f, 2.5f, jackalCanCreateSidekick);
jackalkillFakeImpostor = Create(20145, Types.Neutral, cs(Palette.ImpostorRed, "jackalkillFakeImpostor"), false, jackalCanCreateSidekick);
jackalCanImpostorFindSidekick = Create(20137, Types.Neutral, cs(Palette.ImpostorRed, "jackalCanImpostorFindSidekick"), true, jackalCanCreateSidekick);
sidekickCanKill = Create(20138, Types.Neutral, "sidekickCanKill", true, jackalCanCreateSidekick);
sidekickCanUseVents = Create(20139, Types.Neutral, "sidekickCanUseVents", true, jackalCanCreateSidekick);
sidekickPromotesToJackal = Create(20140, Types.Neutral, "sidekickPromotesToJackal", false, jackalCanCreateSidekick);
Expand Down Expand Up @@ -1001,6 +1009,8 @@ public static void Load()
partTimerDeathTurn = Create(20292, Types.Neutral, "partTimerDeathTurn", 2, 1, 6, 1, partTimerSpawnRate);
partTimerKnowsRole = Create(20293, Types.Neutral, "partTimerIsCheckTargetRole", true, partTimerSpawnRate);

witnessSpawnRate = Create(20301, Types.Neutral, cs(Witness.color, "Witness"), rates, null, true);

doomsayerSpawnRate = Create(20221, Types.Neutral, cs(Doomsayer.color, "Doomsayer"), rates, null, true);
doomsayerCooldown = Create(20222, Types.Neutral, "doomsayerCooldown", 20f, 2.5f, 60f, 2.5f, doomsayerSpawnRate);
doomsayerHasMultipleShotsPerMeeting = Create(20223, Types.Neutral, "doomsayerHasMultipleShotsPerMeeting", true, doomsayerSpawnRate);
Expand Down Expand Up @@ -1029,7 +1039,7 @@ public static void Load()

//-------------------------- Crewmate Options 30000-39999 -------------------------- //

ghostEngineerSpawnRate = Create(50010, Types.Crewmate, cs(GhostEngineer.color, "GhostEngineer"), rates, null, true);
ghostEngineerSpawnRate = Create(50010, Types.Crewmate, cs(GhostEngineer.color, "GhostEngineerOptions"), rates, null, true);

guesserSpawnRate = Create(30100, Types.Crewmate, cs(Vigilante.color, "Vigilante"), rates, null, true);
guesserNumberOfShots = Create(30101, Types.Crewmate, "guesserNumberOfShots", 3f, 1f, 15f, 1f, guesserSpawnRate);
Expand Down
6 changes: 3 additions & 3 deletions TheOtherRoles/Options/CustomOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,7 @@ public static void Postfix(GameOptionsMenu __instance)
copyButton.transform.localPosition += Vector3.down * 0.8f;
var copyButtonPassive = copyButton.GetComponent<PassiveButton>();
var copyButtonRenderer = copyButton.GetComponent<SpriteRenderer>();
copyButtonRenderer.sprite = UnityHelper.loadSpriteFromResources("TheOtherRoles.Resources.CopyButton.png", 175f);
copyButtonRenderer.sprite = new ResourceSprite("TheOtherRoles.Resources.CopyButton.png", 175f);
copyButtonPassive.OnClick.RemoveAllListeners();
copyButtonPassive.OnClick = new Button.ButtonClickedEvent();
copyButtonPassive.OnClick.AddListener((Action)(() =>
Expand Down Expand Up @@ -1151,9 +1151,9 @@ private static string buildOptionsOfType(CustomOptionType type, bool headerOnly)
if (option.id == 30170) //Deputy
sb.AppendLine($"- {cs(Deputy.color, "Deputy".Translate())}: {option.getString()}");
else if (option.id == 20142)
sb.AppendLine($"- {cs(Sidekick.color, "jackalSwoopChance".Translate())}: {option.getString()}");
sb.AppendLine($"- {cs(Jackal.color, "jackalSwoopChance".Translate())}: {option.getString()}");
else if (option.id == 20135) //Sidekick
sb.AppendLine($"- {cs(Sidekick.color, "Sidekick".Translate())}: {option.getString()}");
sb.AppendLine($"- {cs(Jackal.color, "Sidekick".Translate())}: {option.getString()}");
}

if (headerOnly) return sb.ToString();
Expand Down
Loading

0 comments on commit bcb61b1

Please sign in to comment.