From 75ba66f84e9ea60ac900b204941d457c21375fc5 Mon Sep 17 00:00:00 2001 From: mxyx0412 Date: Thu, 6 Feb 2025 19:57:20 +0800 Subject: [PATCH] Update v1.1.2.2 --- CHANGELOG.md | 15 +- Strings.xlsx | Bin 87074 -> 87131 bytes TheOtherRoles/Buttons/Buttons.cs | 15 +- TheOtherRoles/Helper/Helpers.cs | 6 +- TheOtherRoles/Helper/ObjectHelper.cs | 25 +++ TheOtherRoles/Modules/Debugger.cs | 3 +- TheOtherRoles/Modules/KeyboardHandler.cs | 7 + TheOtherRoles/Modules/SimpleButton.cs | 95 ++++++++ TheOtherRoles/Objects/Trap.cs | 3 +- TheOtherRoles/Options/CustomOptionHolder.cs | 210 ++++++++++-------- TheOtherRoles/Options/CustomOptions.cs | 6 +- TheOtherRoles/Options/ModOption.cs | 1 + TheOtherRoles/Patches/EndGamePatch.cs | 155 ++++++------- TheOtherRoles/Patches/ExileControllerPatch.cs | 74 +++--- TheOtherRoles/Patches/IntroPatch.cs | 2 +- TheOtherRoles/Patches/MainMenuPatch.cs | 24 +- TheOtherRoles/Patches/PlayerControlPatch.cs | 46 +++- TheOtherRoles/Patches/RoleAssignmentPatch.cs | 12 +- TheOtherRoles/Patches/UpdatePatch.cs | 4 +- TheOtherRoles/Patches/UsablesPatch.cs | 20 +- TheOtherRoles/RPC.cs | 13 +- TheOtherRoles/Resources/stringData.json | 107 +++++---- TheOtherRoles/Roles/Crewmate/Medium.cs | 2 +- TheOtherRoles/Roles/Crewmate/Prophet.cs | 2 +- TheOtherRoles/Roles/Ghost/Specter.cs | 6 +- TheOtherRoles/Roles/Modifier/Lovers.cs | 23 +- TheOtherRoles/Roles/Modifier/Shifter.cs | 2 +- TheOtherRoles/Roles/Neutral/Arsonist.cs | 1 - TheOtherRoles/Roles/Neutral/Jester.cs | 2 +- TheOtherRoles/Roles/Neutral/Pelican.cs | 12 +- TheOtherRoles/Roles/RoleHelpers.cs | 19 +- TheOtherRoles/SubmergedCompatibility.cs | 1 - TheOtherRoles/TheOtherRoles.csproj | 2 +- 33 files changed, 532 insertions(+), 383 deletions(-) create mode 100644 TheOtherRoles/Helper/ObjectHelper.cs create mode 100644 TheOtherRoles/Modules/SimpleButton.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index a6c72586..3c42cd1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ -v1.1.2.1更新日志 +v1.1.2.2更新日志 -* 修复掷弹兵使用技能时可能会导致所有玩家游戏卡死的问题 -* 怨灵: 新增选项 "拾取尸体后本轮会议结束才可复活" -* 还有其它一些小优化 \ No newline at end of file +* 优化游戏选项中常规选项的页面排版显示 +* 律师的目标如果掉线则律师会变成起诉人 + +问题修复: + +* 炸弹狂、纵火狂技能无法寻到目标 +* 怨灵会被分配到豺狼阵营 +* 非红狼阵营的职业无法使用键盘进入通风口 +* 污点证人在部分情况下无法得分 +* 鹈鹕被击杀时会卡在原地 \ No newline at end of file diff --git a/Strings.xlsx b/Strings.xlsx index 50efa15f1526dde301e0fe84236d4c40ee89ef1c..a01d09ed241fa03bce9ac30779cad946fa220656 100644 GIT binary patch delta 73141 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 untarget = null, bool onlyCrewmates = false, + public static PlayerControl SetTarget(List untarget = null, bool onlyCrewmates = false, bool targetInVents = false, float distances = 0f, PlayerControl targetingPlayer = null) { return PlayerControlFixedUpdatePatch.SetTarget(onlyCrewmates, targetInVents, untarget, KillDistances: distances, targetingPlayer: targetingPlayer); @@ -586,11 +586,10 @@ public static void createButtonsPostfix(HudManager __instance) if (murderAttemptResult == MurderAttemptResult.PerformKill) { byte targetId = 0; - + var DeathReason = CustomDeathReason.SheriffKill; if (Sheriff.sheriffCanKillNeutral(target)) { targetId = target.PlayerId; - GameHistory.RpcOverrideDeathReasonAndKiller(target, CustomDeathReason.SheriffKill, PlayerControl.LocalPlayer); } else { @@ -598,21 +597,22 @@ public static void createButtonsPostfix(HudManager __instance) { case 0: targetId = PlayerControl.LocalPlayer.PlayerId; - GameHistory.RpcOverrideDeathReasonAndKiller(PlayerControl.LocalPlayer, CustomDeathReason.SheriffMisfire, PlayerControl.LocalPlayer); + DeathReason = CustomDeathReason.SheriffMisfire; break; case 1: targetId = target.PlayerId; - GameHistory.RpcOverrideDeathReasonAndKiller(target, CustomDeathReason.SheriffMisadventure, PlayerControl.LocalPlayer); + DeathReason = CustomDeathReason.SheriffMisadventure; break; case 2: targetId = target.PlayerId; + DeathReason = CustomDeathReason.SheriffMisadventure; + var killWriter2 = StartRPC(PlayerControl.LocalPlayer.NetId, CustomRPC.UncheckedMurderPlayer); killWriter2.Write(PlayerControl.LocalPlayer.PlayerId); killWriter2.Write(PlayerControl.LocalPlayer.PlayerId); killWriter2.Write(byte.MaxValue); killWriter2.EndRPC(); RPCProcedure.uncheckedMurderPlayer(PlayerControl.LocalPlayer.PlayerId, PlayerControl.LocalPlayer.PlayerId, byte.MaxValue); - GameHistory.RpcOverrideDeathReasonAndKiller(target, CustomDeathReason.SheriffMisadventure, PlayerControl.LocalPlayer); GameHistory.RpcOverrideDeathReasonAndKiller(PlayerControl.LocalPlayer, CustomDeathReason.SheriffMisfire, PlayerControl.LocalPlayer); break; } @@ -624,6 +624,7 @@ public static void createButtonsPostfix(HudManager __instance) killWriter.Write(byte.MaxValue); killWriter.EndRPC(); RPCProcedure.uncheckedMurderPlayer(PlayerControl.LocalPlayer.PlayerId, targetId, byte.MaxValue); + GameHistory.RpcOverrideDeathReasonAndKiller(target, DeathReason, PlayerControl.LocalPlayer); } if (murderAttemptResult == MurderAttemptResult.BodyGuardKill) checkMurderAttemptAndKill(PlayerControl.LocalPlayer, target); @@ -2264,7 +2265,7 @@ public static void createButtonsPostfix(HudManager __instance) () => { /* On Click */ - Bomber.currentBombTarget = SetTarget(); + Bomber.currentTarget = SetTarget(); if (Bomber.hasBombPlayer == null) SetPlayerOutline(Bomber.currentTarget, Bomber.color); return Bomber.currentTarget && PlayerControl.LocalPlayer.CanMove; }, diff --git a/TheOtherRoles/Helper/Helpers.cs b/TheOtherRoles/Helper/Helpers.cs index ba079ab8..1e11b2c6 100644 --- a/TheOtherRoles/Helper/Helpers.cs +++ b/TheOtherRoles/Helper/Helpers.cs @@ -241,7 +241,7 @@ public static bool checkAndDoVetKill(PlayerControl target) return shouldVetKill; } - public static bool isNeutral(PlayerControl player) + public static bool isNeutral(this PlayerControl player) { var roleInfo = RoleInfo.getRoleInfoForPlayer(player, false).FirstOrDefault(); return roleInfo != null && roleInfo.roleType == RoleType.Neutral; @@ -257,8 +257,8 @@ public static bool isKillerNeutral(PlayerControl player) player == Pelican.Player || player == Jackal.Sidekick || player == Pavlovsdogs.pavlovsowner || - Jackal.jackal.Contains(player) || - Pavlovsdogs.pavlovsdogs.Contains(player)); + Jackal.jackal.Any(x => x.PlayerId == player.PlayerId) || + Pavlovsdogs.pavlovsdogs.Any(x => x.PlayerId == player.PlayerId)); } public static bool isEvilNeutral(PlayerControl player) diff --git a/TheOtherRoles/Helper/ObjectHelper.cs b/TheOtherRoles/Helper/ObjectHelper.cs new file mode 100644 index 00000000..3a331d62 --- /dev/null +++ b/TheOtherRoles/Helper/ObjectHelper.cs @@ -0,0 +1,25 @@ +using TMPro; +using UnityEngine; + +namespace TheOtherRoles.Helper; + +public static class ObjectHelper +{ + ///

+ /// オブジェクトのコンポーネントを破棄します + /// + public static void DestroyTranslator(this GameObject obj) + { + if (obj == null) return; + obj.ForEachChild((Il2CppSystem.Action)DestroyTranslator); + TextTranslatorTMP[] translator = obj.GetComponentsInChildren(true); + translator?.Do(Object.Destroy); + } + /// + /// オブジェクトのコンポーネントを破棄します + /// + public static void DestroyTranslatorL(this MonoBehaviour obj) => obj?.gameObject?.DestroyTranslator(); + + public static void SetActive(this Transform tf, bool b) => tf.gameObject.SetActive(b); + public static void SetActive(this TextMeshPro tf, bool b) => tf.gameObject.SetActive(b); +} \ No newline at end of file diff --git a/TheOtherRoles/Modules/Debugger.cs b/TheOtherRoles/Modules/Debugger.cs index 86c581f9..3765d768 100644 --- a/TheOtherRoles/Modules/Debugger.cs +++ b/TheOtherRoles/Modules/Debugger.cs @@ -1,4 +1,4 @@ -using static TheOtherRoles.Options.ModOption; +using static TheOtherRoles.Options.ModOption; namespace TheOtherRoles.Modules; @@ -34,5 +34,4 @@ public static void Postfix(EndGameNavigation __instance) __instance.NextGame(); } } - } diff --git a/TheOtherRoles/Modules/KeyboardHandler.cs b/TheOtherRoles/Modules/KeyboardHandler.cs index e20e679a..112b7251 100644 --- a/TheOtherRoles/Modules/KeyboardHandler.cs +++ b/TheOtherRoles/Modules/KeyboardHandler.cs @@ -55,6 +55,13 @@ private static void Postfix(KeyboardJoystick __instance) GameStartManager.Instance.countDownTimer = 0; } } + if (PlayerControl.LocalPlayer.IsAlive() && !PlayerControl.LocalPlayer.isImpostor()) + { + if (KeyboardJoystick.player.GetButtonDown(50)) + { + DestroyableSingleton.Instance.ImpostorVentButton.DoClick(); + } + } } public static string RandomString(int length) { diff --git a/TheOtherRoles/Modules/SimpleButton.cs b/TheOtherRoles/Modules/SimpleButton.cs new file mode 100644 index 00000000..4db91094 --- /dev/null +++ b/TheOtherRoles/Modules/SimpleButton.cs @@ -0,0 +1,95 @@ +using System; +using TMPro; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace TheOtherRoles.Modules; + +public class SimpleButton +{ + /// 新しいボタンを作成する + /// 親オブジェクト + /// オブジェクト名 + /// 通常時の背景色 + /// マウスホバー時の背景色 + /// クリック時に発火するアクション + /// ボタンのラベル + /// ボタンの大きさ + /// 初期状態でアクティブにするかどうか(デフォルトtrue) + public SimpleButton( + Transform parent, + string name, + Vector3 localPosition, + Color32 normalColor, + Color32 hoverColor, + Action action, + string label, + bool isActive = true) + { + if (baseButton == null) + throw new InvalidOperationException("baseButtonが未設定"); + + Button = Object.Instantiate(baseButton, parent); + Label = Button.transform.Find("FontPlacer/Text_TMP").GetComponent(); + NormalSprite = Button.inactiveSprites.GetComponent(); + HoverSprite = Button.activeSprites.GetComponent(); + buttonCollider = Button.GetComponent(); + + // ラベルをセンタリング + var container = Label.transform.parent; + Object.Destroy(Label.GetComponent()); + container.SetLocalX(0f); + Label.transform.SetLocalX(0f); + Label.horizontalAlignment = HorizontalAlignmentOptions.Center; + + Button.name = name; + Button.transform.localPosition = localPosition; + NormalSprite.color = normalColor; + HoverSprite.color = hoverColor; + Button.OnClick.AddListener(action); + Label.text = label; + Button.gameObject.SetActive(isActive); + } + public PassiveButton Button { get; } + public TextMeshPro Label { get; } + public SpriteRenderer NormalSprite { get; } + public SpriteRenderer HoverSprite { get; } + private readonly BoxCollider2D buttonCollider; + private Vector2 _scale; + public Vector2 Scale + { + get => _scale; + set => _scale = NormalSprite.size = HoverSprite.size = buttonCollider.size = value; + } + private float _fontSize; + public float FontSize + { + get => _fontSize; + set => _fontSize = Label.fontSize = Label.fontSizeMin = Label.fontSizeMax = value; + } + + private static PassiveButton baseButton; + public static void SetBase(PassiveButton passiveButton) + { + if (baseButton != null || passiveButton == null) + return; + // 複製 + baseButton = Object.Instantiate(passiveButton); + var label = baseButton.transform.Find("FontPlacer/Text_TMP").GetComponent(); + baseButton.gameObject.SetActive(false); + // シーン切替時に破棄されないようにする + Object.DontDestroyOnLoad(baseButton); + baseButton.name = "YuET_SimpleButtonBase"; + // 不要なコンポーネントを無効化 + Object.Destroy(baseButton.GetComponent()); + label.DestroyTranslatorL(); + label.fontSize = label.fontSizeMax = label.fontSizeMin = 3.5f; + label.enableWordWrapping = false; + label.text = "YuET SIMPLE BUTTON BASE"; + // 当たり判定がズレてるのを直す + var buttonCollider = baseButton.GetComponent(); + buttonCollider.offset = new(0f, 0f); + baseButton.OnClick = new(); + } + public static bool IsNullOrDestroyed(SimpleButton button) => button == null || button.Button == null; +} diff --git a/TheOtherRoles/Objects/Trap.cs b/TheOtherRoles/Objects/Trap.cs index c860856a..e016b0d0 100644 --- a/TheOtherRoles/Objects/Trap.cs +++ b/TheOtherRoles/Objects/Trap.cs @@ -157,7 +157,7 @@ public static void Update() target = trap; } } - if (target != null && player.PlayerId != Trapper.trapper.PlayerId && !player.Data.IsDead) + if (target?.revealed == false && player.PlayerId != Trapper.trapper.PlayerId && player.IsAlive()) { var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.TriggerTrap, SendOption.Reliable, -1); @@ -167,7 +167,6 @@ public static void Update() RPCProcedure.triggerTrap(player.PlayerId, (byte)target.instanceId); } - if (!player.Data.IsDead || player.PlayerId == Trapper.trapper.PlayerId) return; foreach (var trap in traps.Where(trap => !trap.trap.active)) trap.trap.SetActive(true); diff --git a/TheOtherRoles/Options/CustomOptionHolder.cs b/TheOtherRoles/Options/CustomOptionHolder.cs index 88c148f3..a540f58f 100644 --- a/TheOtherRoles/Options/CustomOptionHolder.cs +++ b/TheOtherRoles/Options/CustomOptionHolder.cs @@ -16,6 +16,8 @@ public class CustomOptionHolder public static string[] presets = ["预设 1", "预设 2", "预设 3", "Skeld预设", "Mira预设", "Polus预设", "Airship预设", "Fungle预设", "Submerged预设"]; + public static string[] mapOptions = ["ExpandOptions", "CollapseOptions"]; + public static CustomOption presetSelection; public static CustomOption neutralRolesCountMin; public static CustomOption neutralRolesCountMax; @@ -24,6 +26,12 @@ public class CustomOptionHolder public static CustomOption modifiersCountMin; public static CustomOption modifiersCountMax; + public static CustomOption MeetingOptions; + public static CustomOption SaboOptions; + public static CustomOption TaskOptions; + public static CustomOption MapOptions; + public static CustomOption DevicesOption; + public static CustomOption anyPlayerCanStopStart; public static CustomOption enableEventMode; public static CustomOption deadImpsBlockSabotage; @@ -624,6 +632,10 @@ public class CustomOptionHolder public static CustomOption debugMode; public static CustomOption disableGameEnd; + public static CustomOption exiledController; + public static CustomOption exiledReviveRole; + public static CustomOption exiledShowTeamNum; + public static CustomOption enableBetterPolus; public static CustomOption movePolusVents; @@ -700,12 +712,12 @@ private static byte ToByte(float f) public static void Load() { - vanillaSettings = TheOtherRolesPlugin.Instance.Config.Bind("Preset0", "VanillaOptions", ""); + vanillaSettings = Main.Instance.Config.Bind("Preset0", "VanillaOptions", ""); // Role Options presetSelection = Create(0, Types.General, cs(new Color32(204, 204, 0, 255), "presetSelection"), presets, null, true); - anyPlayerCanStopStart = Create(3, Types.General, cs(new Color(204f / 255f, 204f / 255f, 0), "anyPlayerCanStopStart"), false, null, false); + anyPlayerCanStopStart = Create(3, Types.General, cs(new Color(204f / 255f, 204f / 255f, 0), "anyPlayerCanStopStart"), false); neutralRolesCountMin = Create(8, Types.General, cs(new Color32(204, 204, 0, 255), "neutralRolesCountMin"), 2f, 0f, 15f, 1f, null, true); neutralRolesCountMax = Create(9, Types.General, cs(new Color32(204, 204, 0, 255), "neutralRolesCountMax"), 2f, 0f, 15f, 1f); @@ -716,86 +728,96 @@ public static void Load() //-------------------------- Other options 1 - 599 -------------------------- // + //Global options resteButtonCooldown = Create(20, Types.General, "resteButtonCooldown", 20f, 2.5f, 30f, 2.5f, null, true); - maxNumberOfMeetings = Create(21, Types.General, "maxNumberOfMeetings", 10, 0, 15, 1, null, true); - blockSkippingInEmergencyMeetings = Create(22, Types.General, "blockSkippingInEmergencyMeetings", false); - noVoteIsSelfVote = Create(23, Types.General, "noVoteIsSelfVote", false, blockSkippingInEmergencyMeetings); - disableMeeting = Create(36, Types.General, "disableMeeting", false); - shieldFirstKill = Create(24, Types.General, "shieldFirstKill", false); - hidePlayerNames = Create(25, Types.General, "hidePlayerNames", false); - hideOutOfSightNametags = Create(26, Types.General, "hideOutOfSightNametags", true); - hideVentAnimOnShadows = Create(27, Types.General, "hideVentAnimOnShadows", false); - showButtonTarget = Create(28, Types.General, "showButtonTarget", true); - impostorSeeRoles = Create(30, Types.General, cs(Palette.ImpostorRed, "impostorSeeRoles"), false); - blockGameEnd = Create(29, Types.General, cs(Color.yellow, "blockGameEnd"), true); - deadImpsBlockSabotage = Create(32, Types.General, cs(Palette.ImpostorRed, "deadImpsBlockSabotage"), false); - randomLigherPlayer = Create(34, Types.General, "randomLigherPlayer", true); - disableSabotage = Create(35, Types.General, cs(Palette.ImpostorRed, "disableSabotage"), false, null); - allowModGuess = Create(31, Types.General, "allowModGuess", false); - //ghostSpeed = Create(33, Types.General, "ghostSpeed", 1f, 0.75f, 5f, 0.125f); - - guessReVote = Create(221, Types.General, "guessReVote", false, null, true); - guessExtendmeetingTime = Create(222, Types.General, "guessExtendmeetingTime", 15f, 0f, 60f, 5f); - - WireTaskIsRandomOption = Create(44, Types.General, "WireTaskIsRandomOption", false, null, true); - WireTaskNumOption = Create(45, Types.General, "WireTaskNumOption", 3f, 1f, 8f, 1f, WireTaskIsRandomOption); - transparentTasks = Create(40, Types.General, "transparentTasks", false); - disableMedbayWalk = Create(41, Types.General, "disableMedbayWalk", false); - allowParallelMedBayScans = Create(46, Types.General, "allowParallelMedBayScans", false); - finishTasksBeforeHauntingOrZoomingOut = Create(42, Types.General, "finishTasksBeforeHauntingOrZoomingOut", false); - disableTaskGameEnd = Create(43, Types.General, "disableTaskGameEnd", false); + shieldFirstKill = Create(21, Types.General, "shieldFirstKill", false); + hidePlayerNames = Create(22, Types.General, "hidePlayerNames", false); + hideOutOfSightNametags = Create(23, Types.General, "hideOutOfSightNametags", true); + hideVentAnimOnShadows = Create(24, Types.General, "hideVentAnimOnShadows", false); + showButtonTarget = Create(25, Types.General, "showButtonTarget", true); + impostorSeeRoles = Create(26, Types.General, cs(Palette.ImpostorRed, "impostorSeeRoles"), false); + blockGameEnd = Create(27, Types.General, cs(Color.yellow, "blockGameEnd"), true); + randomLigherPlayer = Create(28, Types.General, "randomLigherPlayer", true); + allowModGuess = Create(29, Types.General, "allowModGuess", false); + randomGameStartPosition = Create(30, Types.General, "randomGameStartPosition", false); + randomGameStartToVents = Create(31, Types.General, "randomGameStartToVents", true, randomGameStartPosition); + //ghostSpeed = Create(32, Types.General, "ghostSpeed", 1f, 0.75f, 5f, 0.125f); + + //Meeting options + MeetingOptions = Create(100, Types.General, cs(new Color32(255, 85, 234, byte.MaxValue), "MeetingOptions"), false, null, true); + disableMeeting = Create(101, Types.General, "disableMeeting", false, MeetingOptions); + maxNumberOfMeetings = Create(102, Types.General, "maxNumberOfMeetings", 10, 0, 15, 1, MeetingOptions); + blockSkippingInEmergencyMeetings = Create(103, Types.General, "blockSkippingInEmergencyMeetings", false, MeetingOptions); + noVoteIsSelfVote = Create(104, Types.General, "noVoteIsSelfVote", false, blockSkippingInEmergencyMeetings); + guessReVote = Create(105, Types.General, "guessReVote", false, MeetingOptions); + guessExtendmeetingTime = Create(106, Types.General, "guessExtendmeetingTime", 15f, 0f, 60f, 5f, guessReVote); + exiledController = Create(107, Types.General, "exileController", false, MeetingOptions); + exiledReviveRole = Create(108, Types.General, "exiledReviveRole", ["optionOff", "Role", "Team"], exiledController); + exiledShowTeamNum = Create(109, Types.General, "exiledShowTeamNum", false, exiledController); + + //Task options + TaskOptions = Create(200, Types.General, cs(Palette.CrewmateBlue, "TaskOptions"), false, null, true); + WireTaskIsRandomOption = Create(201, Types.General, "WireTaskIsRandomOption", false, TaskOptions); + WireTaskNumOption = Create(202, Types.General, "WireTaskNumOption", 3f, 1f, 8f, 1f, WireTaskIsRandomOption); + transparentTasks = Create(203, Types.General, "transparentTasks", false, TaskOptions); + disableMedbayWalk = Create(204, Types.General, "disableMedbayWalk", false, TaskOptions); + allowParallelMedBayScans = Create(205, Types.General, "allowParallelMedBayScans", false, TaskOptions); + finishTasksBeforeHauntingOrZoomingOut = Create(206, Types.General, "finishTasksBeforeHauntingOrZoomingOut", false, TaskOptions); + disableTaskGameEnd = Create(207, Types.General, "disableTaskGameEnd", false, TaskOptions); + + //Sabotage options + SaboOptions = Create(300, Types.General, cs(Palette.ImpostorRed, "SaboOptions"), false, null, true); + disableSabotage = Create(301, Types.General, cs(Palette.ImpostorRed, "disableSabotage"), false, SaboOptions); + deadImpsBlockSabotage = Create(302, Types.General, cs(Palette.ImpostorRed, "deadImpsBlockSabotage"), false, SaboOptions); + enableCamoComms = Create(303, Types.General, cs(Palette.ImpostorRed, "enableCamoComms"), false, SaboOptions, true); + IsReactorDurationSetting = Create(310, Types.General, "IsReactorDurationSetting", false, SaboOptions, true); + SkeldReactorTimeLimit = Create(311, Types.General, "SkeldReactorTimeLimit", 30f, 0f, 30f, 2.5f, IsReactorDurationSetting); + SkeldLifeSuppTimeLimit = Create(312, Types.General, "SkeldLifeSuppTimeLimit", 30f, 0f, 30f, 2.5f, IsReactorDurationSetting); + MiraLifeSuppTimeLimit = Create(313, Types.General, "MiraLifeSuppTimeLimit", 30f, 0f, 45f, 2.5f, IsReactorDurationSetting); + MiraReactorTimeLimit = Create(314, Types.General, "MiraReactorTimeLimit", 30f, 0f, 45f, 2.5f, IsReactorDurationSetting); + PolusReactorTimeLimit = Create(315, Types.General, "PolusReactorTimeLimit", 60f, 0f, 60f, 2.5f, IsReactorDurationSetting); + AirshipReactorTimeLimit = Create(316, Types.General, "AirshipReactorTimeLimit", 75f, 0f, 90f, 2.5f, IsReactorDurationSetting); + FungleReactorTimeLimit = Create(317, Types.General, "FungleReactorTimeLimit", 45f, 0f, 60f, 2.5f, IsReactorDurationSetting); //Map options - //enableMapOptions = Create(200, Types.General, "enableMapOptions", false, null, true); - - IsReactorDurationSetting = Create(201, Types.General, "IsReactorDurationSetting", false, null, true); - SkeldReactorTimeLimit = Create(202, Types.General, "SkeldReactorTimeLimit", 30f, 0f, 30f, 2.5f, IsReactorDurationSetting); - SkeldLifeSuppTimeLimit = Create(203, Types.General, "SkeldLifeSuppTimeLimit", 30f, 0f, 30f, 2.5f, IsReactorDurationSetting); - MiraLifeSuppTimeLimit = Create(204, Types.General, "MiraLifeSuppTimeLimit", 30f, 0f, 45f, 2.5f, IsReactorDurationSetting); - MiraReactorTimeLimit = Create(205, Types.General, "MiraReactorTimeLimit", 30f, 0f, 45f, 2.5f, IsReactorDurationSetting); - PolusReactorTimeLimit = Create(206, Types.General, "PolusReactorTimeLimit", 60f, 0f, 60f, 2.5f, IsReactorDurationSetting); - AirshipReactorTimeLimit = Create(207, Types.General, "AirshipReactorTimeLimit", 75f, 0f, 90f, 2.5f, IsReactorDurationSetting); - FungleReactorTimeLimit = Create(208, Types.General, "FungleReactorTimeLimit", 45f, 0f, 60f, 2.5f, IsReactorDurationSetting); - - randomGameStartPosition = Create(50, Types.General, "randomGameStartPosition", false, null, true); - randomGameStartToVents = Create(51, Types.General, "randomGameStartToVents", true, randomGameStartPosition); - - enableMiraModify = Create(70, Types.General, cs(Color.yellow, "Mira"), false, null, true); - miraVitals = Create(71, Types.General, "miraVitals", false, enableMiraModify); - - enableBetterPolus = Create(80, Types.General, cs(Color.yellow, "Polus"), false, null); - movePolusVents = Create(81, Types.General, "movePolusVents", false, enableBetterPolus); - addPolusVents = Create(82, Types.General, "addPolusVents", false, enableBetterPolus); - movePolusVitals = Create(83, Types.General, "movePolusVitals", false, enableBetterPolus); - swapNavWifi = Create(84, Types.General, "swapNavWifi", false, enableBetterPolus); - moveColdTemp = Create(85, Types.General, "moveColdTemp", false, enableBetterPolus); - - enableAirShipModify = Create(90, Types.General, cs(Color.yellow, "AirShip"), false, null); - airshipOptimize = Create(91, Types.General, "airshipOptimize", false, enableAirShipModify); - addAirShipVents = Create(92, Types.General, "addAirShipVents", false, enableAirShipModify); - airshipLadder = Create(93, Types.General, "airshipLadder", false, enableAirShipModify); - - enableFungleModify = Create(100, Types.General, cs(Color.yellow, "Fungle"), false, null); - fungleElectrical = Create(101, Types.General, "fungleElectrical", false, enableFungleModify); - - enableCamoComms = Create(120, Types.General, cs(Palette.ImpostorRed, "enableCamoComms"), false, null, true); - //fungleDisableCamoComms = Create(211, Types.General, "fungleDisableCamoComms", true, enableCamoComms); - restrictDevices = Create(121, Types.General, "restrictDevices", ["optionOff", "restrictDevices2", "restrictDevices3"], null); - //restrictAdmin = Create(122, Types.General, "restrictAdmin", 30f, 0f, 600f, 5f, restrictDevices); - restrictCameras = Create(123, Types.General, "restrictCameras", 30f, 0f, 600f, 5f, restrictDevices); - restrictVents = Create(124, Types.General, "restrictVents", 30f, 0f, 600f, 5f, restrictDevices); - disableCamsRound1 = Create(125, Types.General, "disableCamsRound1", false, null); - camsNightVision = Create(126, Types.General, "camsNightVision", false, null); - camsNoNightVisionIfImpVision = Create(127, Types.General, "camsNoNightVisionIfImpVision", false, camsNightVision); - - dynamicMap = Create(130, Types.General, "dynamicMap", false, null, true); - dynamicMapEnableSkeld = Create(131, Types.General, "Skeld", rates, dynamicMap); - dynamicMapEnableMira = Create(132, Types.General, "Mira", rates, dynamicMap); - dynamicMapEnablePolus = Create(133, Types.General, "Polus", rates, dynamicMap); - dynamicMapEnableAirShip = Create(134, Types.General, "Airship", rates, dynamicMap); - dynamicMapEnableFungle = Create(135, Types.General, "Fungle", rates, dynamicMap); - dynamicMapEnableSubmerged = Create(136, Types.General, "Submerged", rates, dynamicMap); - dynamicMapSeparateSettings = Create(137, Types.General, "dynamicMapSeparateSettings", false, dynamicMap); + MapOptions = Create(400, Types.General, cs(new Color32(223, 157, 192, byte.MaxValue), "MapOptions"), false, null, true); + //Mira + enableMiraModify = Create(420, Types.General, cs(Color.yellow, "Mira"), false, MapOptions); + miraVitals = Create(421, Types.General, "miraVitals", false, enableMiraModify); + //Polus + enableBetterPolus = Create(430, Types.General, cs(Color.yellow, "Polus"), false, MapOptions); + movePolusVents = Create(431, Types.General, "movePolusVents", false, enableBetterPolus); + addPolusVents = Create(432, Types.General, "addPolusVents", false, enableBetterPolus); + movePolusVitals = Create(433, Types.General, "movePolusVitals", false, enableBetterPolus); + swapNavWifi = Create(434, Types.General, "swapNavWifi", false, enableBetterPolus); + moveColdTemp = Create(435, Types.General, "moveColdTemp", false, enableBetterPolus); + //AirShip + enableAirShipModify = Create(440, Types.General, cs(Color.yellow, "AirShip"), false, MapOptions); + airshipOptimize = Create(441, Types.General, "airshipOptimize", false, enableAirShipModify); + addAirShipVents = Create(442, Types.General, "addAirShipVents", false, enableAirShipModify); + airshipLadder = Create(443, Types.General, "airshipLadder", false, enableAirShipModify); + //Fungle + enableFungleModify = Create(450, Types.General, cs(Color.yellow, "Fungle"), false, MapOptions); + fungleElectrical = Create(451, Types.General, "fungleElectrical", false, enableFungleModify); + //dynamicMap options + dynamicMap = Create(470, Types.General, "dynamicMap", false, MapOptions, true); + dynamicMapEnableSkeld = Create(471, Types.General, "Skeld", rates, dynamicMap); + dynamicMapEnableMira = Create(472, Types.General, "Mira", rates, dynamicMap); + dynamicMapEnablePolus = Create(473, Types.General, "Polus", rates, dynamicMap); + dynamicMapEnableAirShip = Create(474, Types.General, "Airship", rates, dynamicMap); + dynamicMapEnableFungle = Create(475, Types.General, "Fungle", rates, dynamicMap); + dynamicMapEnableSubmerged = Create(476, Types.General, "Submerged", rates, dynamicMap); + dynamicMapSeparateSettings = Create(477, Types.General, "dynamicMapSeparateSettings", false, dynamicMap); + + //Devices Option + DevicesOption = Create(500, Types.General, cs(new Color32(255, 50, 0, byte.MaxValue), "DevicesOption"), false, null, true); + restrictDevices = Create(501, Types.General, "restrictDevices", ["optionOff", "restrictDevices2", "restrictDevices3"], DevicesOption); + //restrictAdmin = Create(502, Types.General, "restrictAdmin", 30f, 0f, 600f, 5f, restrictDevices); + restrictCameras = Create(503, Types.General, "restrictCameras", 30f, 0f, 600f, 5f, restrictDevices); + restrictVents = Create(504, Types.General, "restrictVents", 30f, 0f, 600f, 5f, restrictDevices); + disableCamsRound1 = Create(505, Types.General, "disableCamsRound1", false, DevicesOption); + camsNightVision = Create(506, Types.General, "camsNightVision", false, DevicesOption); + camsNoNightVisionIfImpVision = Create(507, Types.General, "camsNoNightVisionIfImpVision", false, camsNightVision); debugMode = Create(900, Types.General, "debugMode", false, null, true); disableGameEnd = Create(901, Types.General, "DisableGameEnd", false, debugMode); @@ -952,9 +974,9 @@ public static void Load() amnisiacResetRole = Create(20112, Types.Neutral, "amnisiacResetRole", true, amnisiacSpawnRate); jesterSpawnRate = Create(20100, Types.Neutral, cs(Jester.color, "Jester"), rates, null, true); - jesterCanCallEmergency = Create(20101, Types.Neutral, "jesterCanCallEmergency", true, jesterSpawnRate); + jesterCanCallEmergency = Create(20101, Types.Neutral, "canCallEmergency", true, jesterSpawnRate); jesterCanVent = Create(20102, Types.Neutral, "jesterCanVent", true, jesterSpawnRate); - jesterHasImpostorVision = Create(20103, Types.Neutral, "jesterHasImpostorVision", true, jesterSpawnRate); + jesterHasImpostorVision = Create(20103, Types.Neutral, "hasImpVision", true, jesterSpawnRate); partTimerSpawnRate = Create(20290, Types.Neutral, cs(PartTimer.color, "PartTimer"), rates, null, true); partTimerCooldown = Create(20291, Types.Neutral, "partTimerCooldown", 20f, 2.5f, 60f, 2.5f, partTimerSpawnRate); @@ -989,7 +1011,7 @@ public static void Load() pavlovsownerCreateDogCooldown = Create(20253, Types.Neutral, "pavlovsownerCreateDogCooldown", 25f, 10f, 60f, 2.5f, pavlovsownerSpawnRate); pavlovsownerCreateDogNum = Create(20254, Types.Neutral, "pavlovsownerCreateDogNum", 3f, 1f, 15f, 1f, pavlovsownerSpawnRate); pavlovsownerCanUseSabo = Create(20255, Types.Neutral, "pavlovsownerCanUseSabo", true, pavlovsownerSpawnRate); - pavlovsownerHasImpostorVision = Create(20256, Types.Neutral, "pavlovsownerHasImpostorVision", true, pavlovsownerSpawnRate); + pavlovsownerHasImpostorVision = Create(20256, Types.Neutral, "hasImpVision", true, pavlovsownerSpawnRate); pavlovsownerCanUseVents = Create(20257, Types.Neutral, "pavlovsownerCanUseVents", ["Pavlovsdogs", "Pavlovsowner", "pavlovsownerCanUseVents3"], pavlovsownerSpawnRate); pavlovsownerRampage = Create(20260, Types.Neutral, "pavlovsownerRampage", true, pavlovsownerSpawnRate); @@ -1011,7 +1033,7 @@ public static void Load() swooperDuration = Create(20153, Types.Neutral, "swooperDuration", 15f, 1f, 20f, 0.5f, swooperSpawnRate); swooperSpeed = Create(20154, Types.Neutral, "swooperSpeed", 1.5f, 1f, 3f, 0.125f, swooperSpawnRate); swooperCanUseVents = Create(20155, Types.Neutral, "canUseVents", true, swooperSpawnRate); - swooperHasImpVision = Create(20156, Types.Neutral, "swooperHasImpVision", true, swooperSpawnRate); + swooperHasImpVision = Create(20156, Types.Neutral, "hasImpVision", true, swooperSpawnRate); werewolfSpawnRate = Create(20200, Types.Neutral, cs(Werewolf.color, "Werewolf"), rates, null, true); werewolfRampageCooldown = Create(20201, Types.Neutral, "werewolfRampageCooldown", 25f, 10f, 60f, 2.5f, werewolfSpawnRate); @@ -1020,7 +1042,7 @@ public static void Load() juggernautSpawnRate = Create(20210, Types.Neutral, cs(Juggernaut.color, "Juggernaut"), rates, null, true); juggernautCooldown = Create(20211, Types.Neutral, "juggernautCooldown", 25f, 2.5f, 60f, 2.5f, juggernautSpawnRate); - juggernautHasImpVision = Create(20212, Types.Neutral, "juggernautHasImpVision", true, juggernautSpawnRate); + juggernautHasImpVision = Create(20212, Types.Neutral, "hasImpVision", true, juggernautSpawnRate); juggernautCanUseVents = Create(20113, Types.Neutral, "canUseVents", true, juggernautSpawnRate); juggernautReducedkillEach = Create(20114, Types.Neutral, "juggernautReducedkillEach", 5f, 1f, 15f, 0.5f, juggernautSpawnRate); @@ -1034,7 +1056,7 @@ public static void Load() lawyerTargetKnows = Create(20182, Types.Neutral, "lawyerTargetKnows", true, lawyerSpawnRate); lawyerVision = Create(20183, Types.Neutral, "lawyerVision", 1.5f, 0.25f, 3f, 0.25f, lawyerSpawnRate); lawyerKnowsRole = Create(20184, Types.Neutral, "lawyerKnowsRole", true, lawyerSpawnRate); - lawyerCanCallEmergency = Create(20185, Types.Neutral, "lawyerCanCallEmergency", true, lawyerSpawnRate); + lawyerCanCallEmergency = Create(20185, Types.Neutral, "canCallEmergency", true, lawyerSpawnRate); lawyerStolenWin = Create(20189, Types.Neutral, "lawyerStolenWin", false, lawyerSpawnRate); lawyerTargetCanBeJester = Create(20186, Types.Neutral, "lawyerTargetCanBeJester", false, lawyerSpawnRate); @@ -1043,7 +1065,7 @@ public static void Load() pursuerBlanksNumber = Create(20273, Types.Neutral, "pursuerBlanksNumber", 6f, 1f, 20f, 1f, lawyerSpawnRate); executionerSpawnRate = Create(20190, Types.Neutral, cs(Executioner.color, "Executioner"), rates, null, true); - executionerCanCallEmergency = Create(20191, Types.Neutral, "executionerCanCallEmergency", true, executionerSpawnRate); + executionerCanCallEmergency = Create(20191, Types.Neutral, "canCallEmergency", true, executionerSpawnRate); executionerPromotesToLawyer = Create(20192, Types.Neutral, "executionerPromotesToLawyer", true, executionerSpawnRate); //executionerOnTargetDead = Create(20193, Types.Neutral, "目标死亡后变为", [cs(Pursuer.color, "Pursuer"), cs(Jester.color, "Jester"), cs(Amnisiac.color, "Amnisiac"), "Crewmate"], executionerSpawnRate); @@ -1069,8 +1091,8 @@ public static void Load() thiefCanKillSheriff = Create(20242, Types.Neutral, $"{"thiefCanKill".Translate()}{cs(Sheriff.color, "Sheriff".Translate())}", true, thiefSpawnRate); thiefCanKillDeputy = Create(20246, Types.Neutral, $"{"thiefCanKill".Translate()}{cs(Sheriff.color, "Deputy".Translate())}", true, thiefSpawnRate); thiefCanKillVeteran = Create(20247, Types.Neutral, $"{"thiefCanKill".Translate()}{cs(Veteran.color, "Veteran".Translate())}", true, thiefSpawnRate); - thiefHasImpVision = Create(20243, Types.Neutral, "thiefHasImpVision", true, thiefSpawnRate); - thiefCanUseVents = Create(20244, Types.Neutral, "thiefCanUseVents", true, thiefSpawnRate); + thiefHasImpVision = Create(20243, Types.Neutral, "hasImpVision", true, thiefSpawnRate); + thiefCanUseVents = Create(20244, Types.Neutral, "canUseVents", true, thiefSpawnRate); thiefCanStealWithGuess = Create(20245, Types.Neutral, "thiefCanStealWithGuess", true, thiefSpawnRate); //-------------------------- Crewmate Options 30000-39999 -------------------------- // @@ -1119,7 +1141,7 @@ public static void Load() prosecutorCanSeeVoteColors = Create(30111, Types.Crewmate, "mayorCanSeeVoteColors", true, prosecutorSpawnRate); prosecutorTasksNeededToSeeVoteColors = Create(30112, Types.Crewmate, "mayorTasksNeededToSeeVoteColors", 5f, 0f, 20f, 1f, prosecutorCanSeeVoteColors); prosecutorDiesOnIncorrectPros = Create(30371, Types.Crewmate, "prosecutorDiesOnIncorrectPros", true, prosecutorSpawnRate); - prosecutorCanCallEmergency = Create(30372, Types.Crewmate, "prosecutorCanCallEmergency", true, prosecutorSpawnRate); + prosecutorCanCallEmergency = Create(30372, Types.Crewmate, "canCallEmergency", true, prosecutorSpawnRate); engineerSpawnRate = Create(30120, Types.Crewmate, cs(Engineer.color, "Engineer"), rates, null, true); engineerRemoteFix = Create(30121, Types.Crewmate, "engineerRemoteFix", true, engineerSpawnRate); @@ -1164,7 +1186,7 @@ public static void Load() veteranAlertDuration = Create(30222, Types.Crewmate, "veteranAlertDuration", 12.5f, 2.5f, 20f, 0.5f, veteranSpawnRate); swapperSpawnRate = Create(30230, Types.Crewmate, cs(Swapper.color, "Swapper"), rates, null, true); - swapperCanCallEmergency = Create(30231, Types.Crewmate, "swapperCanCallEmergency", true, swapperSpawnRate); + swapperCanCallEmergency = Create(30231, Types.Crewmate, "canCallEmergency", true, swapperSpawnRate); swapperCanFixSabotages = Create(30232, Types.Crewmate, "swapperCanFixSabotages", true, swapperSpawnRate); swapperCanOnlySwapOthers = Create(30233, Types.Crewmate, "swapperCanOnlySwapOthers", false, swapperSpawnRate); swapperSwapsNumber = Create(30234, Types.Crewmate, "swapperSwapsNumber", 1f, 0f, 5f, 1f, swapperSpawnRate); @@ -1202,7 +1224,7 @@ public static void Load() prophetSpawnRate = Create(30360, Types.Crewmate, cs(Prophet.color, "Prophet"), rates, null, true); prophetCooldown = Create(30361, Types.Crewmate, "prophetCooldown", 20f, 5f, 60f, 2.5f, prophetSpawnRate); prophetNumExamines = Create(30362, Types.Crewmate, "prophetNumExamines", 4, 1, 10, 1, prophetSpawnRate); - prophetCanCallEmergency = Create(30363, Types.Crewmate, "prophetCanCallEmergency", true, prophetSpawnRate); + prophetCanCallEmergency = Create(30363, Types.Crewmate, "canCallEmergency", true, prophetSpawnRate); prophetIsRevealed = Create(30364, Types.Crewmate, "prophetIsRevealed", false, prophetSpawnRate); prophetExaminesToBeRevealed = Create(30365, Types.Crewmate, "prophetExaminesToBeRevealed", 3, 1, 10, 1, prophetIsRevealed); prophetKillCrewAsRed = Create(30366, Types.Crewmate, "prophetKillCrewAsRed", false, prophetSpawnRate); @@ -1217,8 +1239,8 @@ public static void Load() spySpawnRate = Create(30280, Types.Crewmate, cs(Spy.color, "Spy"), rates, null, true); spyCanDieToSheriff = Create(30281, Types.Crewmate, "spyCanDieToSheriff", false, spySpawnRate); spyImpostorsCanKillAnyone = Create(30282, Types.Crewmate, "spyImpostorsCanKillAnyone", true, spySpawnRate); - spyCanEnterVents = Create(30283, Types.Crewmate, "spyCanEnterVents", true, spySpawnRate); - spyHasImpostorVision = Create(30284, Types.Crewmate, "spyHasImpostorVision", true, spySpawnRate); + spyCanEnterVents = Create(30283, Types.Crewmate, "canUseVents", true, spySpawnRate); + spyHasImpostorVision = Create(30284, Types.Crewmate, "hasImpVision", true, spySpawnRate); portalmakerSpawnRate = Create(30290, Types.Crewmate, cs(Portalmaker.color, "Portalmaker"), rates, null, true); portalmakerCooldown = Create(30291, Types.Crewmate, "portalmakerCooldown", 15f, 10f, 60f, 2.5f, portalmakerSpawnRate); @@ -1258,7 +1280,7 @@ public static void Load() trapperMaxCharges = Create(30352, Types.Crewmate, "trapperMaxCharges", 5f, 1f, 15f, 1f, trapperSpawnRate); trapperRechargeTasksNumber = Create(30353, Types.Crewmate, "trapperRechargeTasksNumber", 2f, 1f, 15f, 1f, trapperSpawnRate); trapperTrapNeededTriggerToReveal = Create(30354, Types.Crewmate, "trapperTrapNeededTriggerToReveal", 2f, 1f, 10f, 1f, trapperSpawnRate); - trapperInfoType = Create(30356, Types.Crewmate, "trapperInfoType", ["trapperInfoType1", "trapperInfoType2", "trapperInfoType3"], trapperSpawnRate); + trapperInfoType = Create(30356, Types.Crewmate, "trapperInfoType", ["Role", "trapperInfoType2", "Name"], trapperSpawnRate); trapperTrapDuration = Create(30357, Types.Crewmate, "trapperTrapDuration", 5f, 1f, 15f, 0.5f, trapperSpawnRate); //-------------------------- Modifier (40000 - 49999) -------------------------- // diff --git a/TheOtherRoles/Options/CustomOptions.cs b/TheOtherRoles/Options/CustomOptions.cs index 57f658f9..016b45d1 100644 --- a/TheOtherRoles/Options/CustomOptions.cs +++ b/TheOtherRoles/Options/CustomOptions.cs @@ -93,7 +93,9 @@ public static CustomOption Create(int id, CustomOptionType type, string name, fl public static CustomOption Create(int id, CustomOptionType type, string name, bool defaultValue, CustomOption parent = null, bool isHeader = false, bool isHidden = false, Action onChange = null) { - return new CustomOption(id, type, name, ["optionOff", "optionOn"], defaultValue ? "optionOn" : "optionOff", parent, isHeader, isHidden, onChange); + var selections = name.Contains("Options") ? new[] { "ExpandOptions", "CollapseOptions" } : new[] { "optionOff", "optionOn" }; + var defaultSelection = defaultValue ? selections[1] : selections[0]; + return new CustomOption(id, type, name, selections, defaultSelection, parent, isHeader, isHidden, onChange); } // Static behaviour @@ -210,6 +212,8 @@ public string GetString() { "optionOn" => "" + sel.Translate() + "", "optionOff" => "" + sel.Translate() + "", + "ExpandOptions" => "" + sel.Translate() + "", + "CollapseOptions" => "" + sel.Translate() + "", _ => sel.Translate(), }; } diff --git a/TheOtherRoles/Options/ModOption.cs b/TheOtherRoles/Options/ModOption.cs index cd0ec6d7..b84f6e85 100644 --- a/TheOtherRoles/Options/ModOption.cs +++ b/TheOtherRoles/Options/ModOption.cs @@ -87,6 +87,7 @@ public static void clearAndReloadMapOptions() ventsToSeal = new(); playerIcons = new Dictionary(); + NormalOptions.ConfirmImpostor = CustomOptionHolder.exiledController.GetBool() && CustomOptionHolder.exiledShowTeamNum.GetBool(); maxNumberOfMeetings = CustomOptionHolder.maxNumberOfMeetings.GetInt(); blockSkippingInEmergencyMeetings = CustomOptionHolder.blockSkippingInEmergencyMeetings.GetBool(); blockSkippingInEmergencyMeetings = CustomOptionHolder.blockSkippingInEmergencyMeetings.GetBool(); diff --git a/TheOtherRoles/Patches/EndGamePatch.cs b/TheOtherRoles/Patches/EndGamePatch.cs index a3383861..feae1464 100644 --- a/TheOtherRoles/Patches/EndGamePatch.cs +++ b/TheOtherRoles/Patches/EndGamePatch.cs @@ -158,7 +158,7 @@ public static void Postfix(AmongUsClient __instance, [HarmonyArgument(0)] ref En Lawyer.lawyer, Executioner.executioner, Witness.Player, - Specter.Player, + //Specter.Player, Thief.thief, Pelican.Player, Juggernaut.juggernaut, @@ -194,8 +194,8 @@ public static void Postfix(AmongUsClient __instance, [HarmonyArgument(0)] ref En var pelicanWin = gameOverReason == (GameOverReason)CustomGameOverReason.PelicanWin && Pelican.Player.IsAlive(); var arsonistWin = Arsonist.arsonist != null && gameOverReason == (GameOverReason)CustomGameOverReason.ArsonistWin; var doomsayerWin = Doomsayer.doomsayer != null && gameOverReason == (GameOverReason)CustomGameOverReason.DoomsayerWin; - var loversWin = Lovers.existingAndAlive() && (gameOverReason == (GameOverReason)CustomGameOverReason.LoversWin || - (GameManager.Instance.DidHumansWin(gameOverReason) && !Lovers.existingWithKiller())); + var loversWin = Lovers.IsAlive() && (gameOverReason == (GameOverReason)CustomGameOverReason.LoversWin || + (GameManager.Instance.DidHumansWin(gameOverReason) && !Lovers.isKillerLover())); var teamJackalWin = gameOverReason == (GameOverReason)CustomGameOverReason.TeamJackalWin && (Jackal.jackal.Any(x => x.IsAlive()) || Jackal.Sidekick.IsAlive()); var teamPavlovsWin = gameOverReason == (GameOverReason)CustomGameOverReason.TeamPavlovsWin && @@ -281,7 +281,7 @@ public static void Postfix(AmongUsClient __instance, [HarmonyArgument(0)] ref En else if (loversWin) { // Double win for lovers, crewmates also win - if (!Lovers.existingWithKiller()) + if (!Lovers.isKillerLover()) { AdditionalTempData.winCondition = WinCondition.LoversTeamWin; TempData.winners = new Il2CppSystem.Collections.Generic.List(); @@ -314,7 +314,7 @@ public static void Postfix(AmongUsClient __instance, [HarmonyArgument(0)] ref En // Jackal wins if nobody except jackal is alive AdditionalTempData.winCondition = WinCondition.JackalWin; TempData.winners = new Il2CppSystem.Collections.Generic.List(); - foreach (var player in Jackal.jackal) + foreach (var player in Jackal.jackal.GroupBy(x => x.PlayerId).Select(g => g.First())) { var wpdFormerJackal = new WinningPlayerData(player.Data); wpdFormerJackal.IsImpostor = false; @@ -857,7 +857,7 @@ private static bool CheckAndEndGameForAkujoWin(ShipStatus __instance, PlayerStat statistics.TeamWerewolfAlive == 0 && statistics.TeamJackalAlive == 0 && statistics.TeamSwooperAlive == 0 && - !(statistics.TeamLoversAlive != 0 && Lovers.existingWithKiller()))) + !(statistics.TeamLoversAlive != 0 && Lovers.isKillerLover()))) { GameManager.Instance.RpcEndGame((GameOverReason)CustomGameOverReason.AkujoWin, false); return true; @@ -916,9 +916,7 @@ private static bool CheckAndEndGameForSwooperWin(ShipStatus __instance, PlayerSt statistics.TeamWerewolfAlive == 0 && statistics.TeamPelicanAlive == 0 && statistics.TeamArsonistAlive == 0 && - !(statistics.TeamSwooperHasAliveLover && - statistics.TeamLoversAlive == 2) && - !killingCrewAlive()) + !(statistics.TeamSwooperHasAliveLover && statistics.TeamLoversAlive == 2) && !killingCrewAlive()) { //__instance.enabled = false; GameManager.Instance.RpcEndGame((GameOverReason)CustomGameOverReason.SwooperWin, false); @@ -936,9 +934,7 @@ private static bool CheckAndEndGameForPelicanWin(ShipStatus __instance, PlayerSt statistics.TeamWerewolfAlive == 0 && statistics.TeamSwooperAlive == 0 && statistics.TeamArsonistAlive == 0 && - !(statistics.TeamPelicanHasAliveLover && - statistics.TeamLoversAlive == 2) && - !killingCrewAlive()) + !(statistics.TeamPelicanHasAliveLover && statistics.TeamLoversAlive == 2) && !killingCrewAlive()) { //__instance.enabled = false; GameManager.Instance.RpcEndGame((GameOverReason)CustomGameOverReason.PelicanWin, false); @@ -957,9 +953,7 @@ private static bool CheckAndEndGameForWerewolfWin(ShipStatus __instance, PlayerS statistics.TeamArsonistAlive == 0 && statistics.TeamPelicanAlive == 0 && statistics.TeamSwooperAlive == 0 && - !(statistics.TeamWerewolfHasAliveLover && - statistics.TeamLoversAlive == 2) && - !killingCrewAlive() + !(statistics.TeamWerewolfHasAliveLover && statistics.TeamLoversAlive == 2) && !killingCrewAlive() ) { //__instance.enabled = false; @@ -981,9 +975,7 @@ private static bool CheckAndEndGameForJuggernautWin(ShipStatus __instance, Playe statistics.TeamPelicanAlive == 0 && statistics.TeamArsonistAlive == 0 && statistics.TeamSwooperAlive == 0 && - !(statistics.TeamJuggernautHasAliveLover && - statistics.TeamLoversAlive == 2) && - !killingCrewAlive() + !(statistics.TeamJuggernautHasAliveLover && statistics.TeamLoversAlive == 2) && !killingCrewAlive() ) { //__instance.enabled = false; @@ -1121,79 +1113,78 @@ private void GetPlayerCounts() var juggernautLover = false; foreach (var playerInfo in GameData.Instance.AllPlayers.GetFastEnumerator()) - if (!playerInfo.Disconnected) - if (!playerInfo.IsDead) - { - numTotalAlive++; + if (!playerInfo.Disconnected && !playerInfo.IsDead) + { + numTotalAlive++; - var lover = isLover(playerInfo); - if (lover) numLoversAlive++; + var lover = isLover(playerInfo); + if (lover) numLoversAlive++; - if (playerInfo.Role.IsImpostor) - { - numImpostorsAlive++; - if (lover) impLover = true; - } + if (playerInfo.Role.IsImpostor) + { + numImpostorsAlive++; + if (lover) impLover = true; + } - if (Jackal.jackal != null && Jackal.jackal.Any(x => x.PlayerId == playerInfo.PlayerId)) - { - numJackalAlive++; - if (lover) jackalLover = true; - } + if (Jackal.jackal != null && Jackal.jackal.Any(x => x.PlayerId == playerInfo.PlayerId)) + { + numJackalAlive++; + if (lover) jackalLover = true; + } - if (Jackal.Sidekick != null && Jackal.Sidekick.PlayerId == playerInfo.PlayerId) - { - numJackalAlive++; - if (lover) jackalLover = true; - } + if (Jackal.Sidekick != null && Jackal.Sidekick.PlayerId == playerInfo.PlayerId) + { + numJackalAlive++; + if (lover) jackalLover = true; + } - if (Arsonist.arsonist != null && Arsonist.arsonist.PlayerId == playerInfo.PlayerId) - { - numArsonistAlive++; - if (lover) arsonistLover = true; - } + if (Arsonist.arsonist != null && Arsonist.arsonist.PlayerId == playerInfo.PlayerId) + { + numArsonistAlive++; + if (lover) arsonistLover = true; + } - if (Pavlovsdogs.pavlovsowner != null && Pavlovsdogs.pavlovsowner.PlayerId == playerInfo.PlayerId) - { - numPavlovsAlive++; - if (lover) pavlovsLover = true; - } + if (Pavlovsdogs.pavlovsowner != null && Pavlovsdogs.pavlovsowner.PlayerId == playerInfo.PlayerId) + { + numPavlovsAlive++; + if (lover) pavlovsLover = true; + } - if (Pavlovsdogs.pavlovsdogs != null && Pavlovsdogs.pavlovsdogs.Any(p => p.PlayerId == playerInfo.PlayerId)) - { - numPavlovsAlive++; - if (lover) pavlovsLover = true; - } + if (Pavlovsdogs.pavlovsdogs != null && Pavlovsdogs.pavlovsdogs.Any(p => p.PlayerId == playerInfo.PlayerId)) + { + numPavlovsAlive++; + if (lover) pavlovsLover = true; + } - if (Werewolf.werewolf != null && Werewolf.werewolf.PlayerId == playerInfo.PlayerId) - { - numWerewolfAlive++; - if (lover) werewolfLover = true; - } - if (Swooper.swooper != null && Swooper.swooper.PlayerId == playerInfo.PlayerId) - { - numSwooperAlive++; - if (lover) swooperLover = true; - } - if (Juggernaut.juggernaut != null && Juggernaut.juggernaut.PlayerId == playerInfo.PlayerId) - { - numJuggernautAlive++; - if (lover) juggernautLover = true; - } - if (Pelican.Player != null && Pelican.Player.PlayerId == playerInfo.PlayerId) - { - numPelicanAlive++; - if (lover) pelicanLover = true; - } - if (Akujo.akujo != null && Akujo.akujo.PlayerId == playerInfo.PlayerId) - { - numAkujoAlive++; - } - if (Akujo.honmei != null && Akujo.honmei.PlayerId == playerInfo.PlayerId) - { - numAkujoAlive++; - } + if (Werewolf.werewolf != null && Werewolf.werewolf.PlayerId == playerInfo.PlayerId) + { + numWerewolfAlive++; + if (lover) werewolfLover = true; + } + if (Swooper.swooper != null && Swooper.swooper.PlayerId == playerInfo.PlayerId) + { + numSwooperAlive++; + if (lover) swooperLover = true; + } + if (Juggernaut.juggernaut != null && Juggernaut.juggernaut.PlayerId == playerInfo.PlayerId) + { + numJuggernautAlive++; + if (lover) juggernautLover = true; + } + if (Pelican.Player != null && Pelican.Player.PlayerId == playerInfo.PlayerId) + { + numPelicanAlive++; + if (lover) pelicanLover = true; + } + if (Akujo.akujo != null && Akujo.akujo.PlayerId == playerInfo.PlayerId) + { + numAkujoAlive++; } + if (Akujo.honmei != null && Akujo.honmei.PlayerId == playerInfo.PlayerId) + { + numAkujoAlive++; + } + } TeamJackalAlive = numJackalAlive; TeamImpostorsAlive = numImpostorsAlive; diff --git a/TheOtherRoles/Patches/ExileControllerPatch.cs b/TheOtherRoles/Patches/ExileControllerPatch.cs index 123a14cf..c5865c90 100644 --- a/TheOtherRoles/Patches/ExileControllerPatch.cs +++ b/TheOtherRoles/Patches/ExileControllerPatch.cs @@ -5,7 +5,6 @@ using AmongUs.GameOptions; using Hazel; using PowerTools; -using Sentry.Protocol; using TheOtherRoles.Buttons; using TheOtherRoles.Objects; using TheOtherRoles.Utilities; @@ -172,6 +171,39 @@ public static void Postfix(ExileController __instance) if (Balancer.currentAbilityUser != null && Balancer.IsDoubleExile && __instance.exiled?.PlayerId == Balancer.targetplayerleft.PlayerId) { __instance.completeString = GetString("二者一同放逐"); + return; + } + + var player = ExileController.Instance?.exiled?.Object; + if (CustomOptionHolder.exiledController.GetBool()) + { + if (CustomOptionHolder.exiledReviveRole.GetBool() && player != null) + { + switch (CustomOptionHolder.exiledReviveRole.GetQuantity()) + { + case 1: + break; + case 2: + __instance.completeString = $"{player.Data.PlayerName} 的职业是 {string.Join(" ", RoleInfo + .getRoleInfoForPlayer(player, false, false).Select(x => x.Name))}"; + break; + case 3: + __instance.completeString = $"{player.Data.PlayerName} 是 {teamString(player)}"; + break; + default: + break; + } + } + if (Prosecutor.ProsecuteThisMeeting && player != null) __instance.completeString += " (被起诉)"; + if (CustomOptionHolder.exiledShowTeamNum.GetBool() && player?.PlayerId != Jester.jester?.PlayerId) + { + var Impostors = PlayerControl.AllPlayerControls.ToArray().Where(x => x.isImpostor() && x.IsAlive() && x.PlayerId != player.PlayerId); + var Neutrals = PlayerControl.AllPlayerControls.ToArray().Where(x => x.isNeutral() && x.IsAlive() && x.PlayerId != player.PlayerId); + __instance.ImpostorText.text = + $"\n{cs(getTeamColor(RoleType.Impostor), "伪装者阵营剩余 " + Impostors.Count())}" + + $" | {cs(getTeamColor(RoleType.Neutral), "中立阵营剩余 " + Neutrals.Count())}"; + + } } } @@ -226,7 +258,7 @@ private static void WrapUpPostfix(GameData.PlayerInfo exiled) } // Mini exile lose condition else if (exiled != null && Mini.mini != null && Mini.mini.PlayerId == exiled.PlayerId && !Mini.isGrownUp() && - !Mini.mini.Data.Role.IsImpostor && !isNeutral(Mini.mini)) + !Mini.mini.Data.Role.IsImpostor && !Mini.mini.isNeutral()) { Mini.triggerMiniLose = true; return; @@ -244,7 +276,7 @@ private static void WrapUpPostfix(GameData.PlayerInfo exiled) AmongUsClient.Instance.FinishRpcImmediately(writer); Executioner.PromotesRole(); } - if (Witness.target != null && Witness.killerTarget != null) + if (Witness.target != null) { bool skip = exiled == null && Witness.skipMeeting; bool targetIsKillerAndNotExiled = Witness.target == Witness.killerTarget && (exiled?.Object == null || Witness.target != exiled?.Object); @@ -266,7 +298,6 @@ private static void WrapUpPostfix(GameData.PlayerInfo exiled) if (Vortox.Player.IsAlive() && exiled == null) { Vortox.skipCount++; - Message($"迷乱旋涡胜利计数{Vortox.skipCount}"); if (Vortox.skipCount == Vortox.skipMeetingNum) Vortox.triggerImpWin = true; } @@ -464,7 +495,7 @@ private static void WrapUpPostfix(GameData.PlayerInfo exiled) if (InfoSleuth.infoSleuth != null && InfoSleuth.target != null && InfoSleuth.infoSleuth == PlayerControl.LocalPlayer) { - var isNotCrew = (isNeutral(InfoSleuth.target) || InfoSleuth.target.isImpostor()) ^ Vortox.Reversal; + var isNotCrew = (InfoSleuth.target.isNeutral() || InfoSleuth.target.isImpostor()) ^ Vortox.Reversal; var team = "的阵营是 " + getTeam(InfoSleuth.target); var info = InfoSleuth.infoType switch { @@ -492,10 +523,10 @@ static string getTeam(PlayerControl player) if (Vortox.Player.IsAlive()) { if (player.isCrew()) return rnd.Next(2) == 0 ? "NeutralRolesText".Translate() : "ImpostorRolesText".Translate(); - if (isNeutral(player) || player.isImpostor()) return "CrewmateRolesText".Translate(); + if (player.isNeutral() || player.isImpostor()) return "CrewmateRolesText".Translate(); } - return isNeutral(player) ? "NeutralRolesText".Translate() + return player.isNeutral() ? "NeutralRolesText".Translate() : player.isImpostor() ? "ImpostorRolesText".Translate() : "CrewmateRolesText".Translate(); } @@ -569,33 +600,4 @@ private static void Postfix() AntiTeleport.setPosition(); Chameleon.lastMoved.Clear(); } -} - -[HarmonyPatch(typeof(TranslationController), nameof(TranslationController.GetString), typeof(StringNames), - typeof(Il2CppReferenceArray))] -internal class ExileControllerMessagePatch -{ - private static void Postfix(ref string __result, [HarmonyArgument(0)] StringNames id) - { - try - { - if (ExileController.Instance != null && ExileController.Instance.exiled != null) - { - var player = playerById(ExileController.Instance.exiled.Object.PlayerId); - if (player == null) return; - // Exile role text - if (id is StringNames.ExileTextPN or StringNames.ExileTextSN or StringNames.ExileTextPP or StringNames.ExileTextSP) - __result = $"{player.Data.PlayerName} 的职业是 {string.Join(" ", RoleInfo.getRoleInfoForPlayer(player, false).Select(x => x.Name).ToArray())}"; - // Hide number of remaining impostors on Jester win - if (id is StringNames.ImpostorsRemainP or StringNames.ImpostorsRemainS) - if (Jester.jester != null && player.PlayerId == Jester.jester.PlayerId) - __result = ""; - if (Prosecutor.ProsecuteThisMeeting) __result += " (被起诉)"; - } - } - catch - { - // pass - Hopefully prevent leaving while exiling to softlock game - } - } } \ No newline at end of file diff --git a/TheOtherRoles/Patches/IntroPatch.cs b/TheOtherRoles/Patches/IntroPatch.cs index 54dba88b..58593b58 100644 --- a/TheOtherRoles/Patches/IntroPatch.cs +++ b/TheOtherRoles/Patches/IntroPatch.cs @@ -184,7 +184,7 @@ internal class IntroPatch public static void setupIntroTeamIcons(IntroCutscene __instance, ref List yourTeam) { // Intro solo teams - if (isNeutral(PlayerControl.LocalPlayer)) + if (PlayerControl.LocalPlayer.isNeutral()) { var soloTeam = new List(); soloTeam.Add(PlayerControl.LocalPlayer); diff --git a/TheOtherRoles/Patches/MainMenuPatch.cs b/TheOtherRoles/Patches/MainMenuPatch.cs index 4039992c..dae84b8c 100644 --- a/TheOtherRoles/Patches/MainMenuPatch.cs +++ b/TheOtherRoles/Patches/MainMenuPatch.cs @@ -1,7 +1,6 @@ using System; using AmongUs.Data; using Assets.InnerNet; -using Il2CppSystem.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.SceneManagement; @@ -14,7 +13,6 @@ namespace TheOtherRoles.Patches; public class MainMenuPatch { private static AnnouncementPopUp popUp; - private static void Prefix(MainMenuManager __instance) { var template = GameObject.Find("ExitGameButton"); @@ -137,7 +135,7 @@ private static void Prefix(MainMenuManager __instance) if (p == 1) { var backup = DataManager.Player.Announcements.allAnnouncements; - DataManager.Player.Announcements.allAnnouncements = new List(); + DataManager.Player.Announcements.allAnnouncements = new Il2CppSystem.Collections.Generic.List(); popUp.Init(false); DataManager.Player.Announcements.SetAnnouncements(new[] { creditsAnnouncement }); popUp.CreateAnnouncementList(); @@ -187,22 +185,4 @@ public static void Postfix(VersionShower __instance) { __instance.text.text = $"Among Us v{Application.version} - The Other Us Edited v{Main.Version}{"-Lite"}"; } -} -/* -[HarmonyPatch(typeof(MainMenuManager), nameof(MainMenuManager.Start)), HarmonyPriority(Priority.First)] -internal class TitleLogoPatch -{ - public static GameObject Sizer; - public static GameObject AULogo; - public static GameObject BottomButtonBounds; - private static void Postfix(MainMenuManager __instance) - { - if (!(Sizer = GameObject.Find("Sizer"))) return; - if (!(AULogo = GameObject.Find("LOGO-AU"))) return; - Sizer.transform.localPosition += new Vector3(0f, 0.12f, 0f); - AULogo.transform.localScale = new Vector3(0.66f, 0.67f, 1f); - AULogo.transform.position -= new Vector3(0f, 0.1f, 0f); - var logoRenderer = AULogo.GetComponent(); - logoRenderer.sprite = Helpers.loadSpriteFromResources("TheOtherRoles.Resources.mxyx-Logo.png", 60f); - } -}*/ \ No newline at end of file +} \ No newline at end of file diff --git a/TheOtherRoles/Patches/PlayerControlPatch.cs b/TheOtherRoles/Patches/PlayerControlPatch.cs index 84e2d1fd..e0fcf696 100644 --- a/TheOtherRoles/Patches/PlayerControlPatch.cs +++ b/TheOtherRoles/Patches/PlayerControlPatch.cs @@ -23,7 +23,7 @@ public static class PlayerControlFixedUpdatePatch // Helpers public static PlayerControl SetTarget(bool onlyCrewmates = false, bool targetPlayersInVents = false, - IEnumerable untargetablePlayers = null, PlayerControl targetingPlayer = null, float KillDistances = 0f) + List untargetablePlayers = null, PlayerControl targetingPlayer = null, float KillDistances = 0f) { PlayerControl result = null; var num = GameOptionsData.KillDistances[Mathf.Clamp(GameOptionsManager.Instance.currentNormalGameOptions.KillDistance, 0, 3)]; @@ -692,7 +692,7 @@ private static void snitchUpdate() var forImpTeam = local.Data.Role.IsImpostor; var forKillerTeam = Snitch.Team == Snitch.includeNeutralTeam.KillNeutral && isKillerNeutral(local); var forEvilTeam = Snitch.Team == Snitch.includeNeutralTeam.EvilNeutral && isEvilNeutral(local); - var forNeutraTeam = Snitch.Team == Snitch.includeNeutralTeam.AllNeutral && isNeutral(local); + var forNeutraTeam = Snitch.Team == Snitch.includeNeutralTeam.AllNeutral && local.isNeutral(); if (numberOfTasks <= Snitch.taskCountForReveal && (forImpTeam || forKillerTeam || forEvilTeam || forNeutraTeam)) { @@ -712,7 +712,7 @@ private static void snitchUpdate() if (Mimic.mimic == p) arrowForImp = true; var arrowForKillerTeam = Snitch.Team == Snitch.includeNeutralTeam.KillNeutral && isKillerNeutral(p); var arrowForEvilTeam = Snitch.Team == Snitch.includeNeutralTeam.EvilNeutral && isEvilNeutral(p); - var arrowForNeutraTeam = Snitch.Team == Snitch.includeNeutralTeam.AllNeutral && isNeutral(p); + var arrowForNeutraTeam = Snitch.Team == Snitch.includeNeutralTeam.AllNeutral && p.isNeutral(); var targetsRole = RoleInfo.getRoleInfoForPlayer(p, false).FirstOrDefault(); if (!p.Data.IsDead && (arrowForImp || arrowForKillerTeam || arrowForEvilTeam || arrowForNeutraTeam)) @@ -752,7 +752,7 @@ private static void snitchTextUpdate() var forImpTeam = local.isImpostor(); var forKillerTeam = Snitch.Team == Snitch.includeNeutralTeam.KillNeutral && isKillerNeutral(local); var forEvilTeam = Snitch.Team == Snitch.includeNeutralTeam.EvilNeutral && isEvilNeutral(local); - var forNeutraTeam = Snitch.Team == Snitch.includeNeutralTeam.AllNeutral && isNeutral(local); + var forNeutraTeam = Snitch.Team == Snitch.includeNeutralTeam.AllNeutral && local.isNeutral(); if (numberOfTasks <= Snitch.taskCountForReveal && (forImpTeam || forKillerTeam || forEvilTeam || forNeutraTeam || isDead)) { @@ -1818,7 +1818,7 @@ public static void HandleMurderPostfix(PlayerControl __instance, PlayerControl t if (Pelican.Player == PlayerControl.LocalPlayer) { - _ = new LateTask(Pelican.PelicanDie, 0.5f); + _ = new LateTask(() => { Pelican.PelicanDie(); }, 0.5f); } } @@ -2080,7 +2080,7 @@ public static void Postfix(PlayerControl __instance) if (__instance.PlayerId == Pelican.Player?.PlayerId && Pelican.eatenPlayers?.Count > 0) { - foreach (var player in Pelican.eatenPlayers.ToArray().Where(p => p != null && p.Data.IsDead)) + foreach (var player in Pelican.eatenPlayers.Where(p => p != null && p.Data.IsDead)) { if (PlayerControl.LocalPlayer == player) { @@ -2157,3 +2157,37 @@ public static void Postfix(PlayerControl __instance) } } } + +[HarmonyPatch] +public static class DisconnectPatch +{ + [HarmonyPatch(typeof(GameData), nameof(GameData.HandleDisconnect), [typeof(PlayerControl), typeof(DisconnectReasons)]), HarmonyPostfix] + public static void DisconnectPostfix(PlayerControl player, DisconnectReasons reason) + { + Message($"玩家 {player?.Data?.PlayerName ?? "null"} 断开连接 {reason}", "HandleDisconnect"); + if (InGame) + { + if (player.isLover()) + { + Lovers.clearAndReload(); + } + + if (Lawyer.lawyer != null && Lawyer.target == player) + { + Lawyer.PromotesToPursuer(); + } + + if (Executioner.executioner != null && Executioner.target == player) + { + Executioner.PromotesRole(); + } + } + } + + + [HarmonyPatch(typeof(InnerNetClient), nameof(InnerNetClient.DisconnectInternal)), HarmonyPrefix] + public static void InnerNetPrefix(InnerNetClient __instance, DisconnectReasons reason, string stringReason) + { + Info($"断开连接 {reason}:{stringReason}, Ping:{__instance.Ping}", "InnerNet"); + } +} diff --git a/TheOtherRoles/Patches/RoleAssignmentPatch.cs b/TheOtherRoles/Patches/RoleAssignmentPatch.cs index a0c4d5eb..dea178c5 100644 --- a/TheOtherRoles/Patches/RoleAssignmentPatch.cs +++ b/TheOtherRoles/Patches/RoleAssignmentPatch.cs @@ -470,7 +470,7 @@ private static void assignRoleTargets(RoleAssignmentData data) // Executioner foreach (PlayerControl p in PlayerControl.AllPlayerControls) if (!p.Data.IsDead && !p.Data.Disconnected && p != Lovers.lover1 && p != Lovers.lover2 && - p != Mini.mini && !p.Data.Role.IsImpostor && !isNeutral(p) && p != Swapper.swapper) + p != Mini.mini && !p.Data.Role.IsImpostor && !p.isNeutral() && p != Swapper.swapper) possibleTargets.Add(p); if (possibleTargets.Count == 0) @@ -508,7 +508,7 @@ private static void assignModifiers() var crewPlayer = new List(players); impPlayer.RemoveAll(x => !x.Data.Role.IsImpostor); impPlayerL.RemoveAll(x => !x.Data.Role.IsImpostor); - crewPlayer.RemoveAll(x => x.Data.Role.IsImpostor || isNeutral(x)); + crewPlayer.RemoveAll(x => x.Data.Role.IsImpostor || x.isNeutral()); var modifierCount = Mathf.Min(players.Count + addMaxNum, modifierCountSettings); @@ -632,8 +632,8 @@ private static void assignGuesserGamemode() var neutralPlayer = PlayerControl.AllPlayerControls.ToArray().ToList().OrderBy(x => Guid.NewGuid()).ToList(); var crewPlayer = PlayerControl.AllPlayerControls.ToArray().ToList().OrderBy(x => Guid.NewGuid()).ToList(); impPlayer.RemoveAll(x => !x.Data.Role.IsImpostor); - neutralPlayer.RemoveAll(x => !isNeutral(x) || x == Doomsayer.doomsayer); - crewPlayer.RemoveAll(x => x.Data.Role.IsImpostor || isNeutral(x)); + neutralPlayer.RemoveAll(x => !x.isNeutral() || x == Doomsayer.doomsayer); + crewPlayer.RemoveAll(x => x.Data.Role.IsImpostor || x.isNeutral()); assignGuesserGamemodeToPlayers(crewPlayer, CustomOptionHolder.guesserGamemodeCrewNumber.GetInt()); assignGuesserGamemodeToPlayers(neutralPlayer, @@ -736,7 +736,7 @@ private static void assignModifiersToPlayers(List modifiers, List !x.Data.Role.IsImpostor); var crewPlayer = new List(playerList); - crewPlayer.RemoveAll(x => x.Data.Role.IsImpostor || isNeutral(x)); + crewPlayer.RemoveAll(x => x.Data.Role.IsImpostor || x.isNeutral()); if (modifiers.Contains(RoleId.Assassin)) { @@ -847,7 +847,7 @@ private static void assignModifiersToPlayers(List modifiers, List x.Data.Role.IsImpostor || isNeutral(x)); + shifterCrewPlayer.RemoveAll(x => x.Data.Role.IsImpostor || x.isNeutral()); } playerId = setModifierToRandomPlayer((byte)RoleId.Shifter, shifterCrewPlayer); crewPlayer.RemoveAll(x => x.PlayerId == playerId); diff --git a/TheOtherRoles/Patches/UpdatePatch.cs b/TheOtherRoles/Patches/UpdatePatch.cs index ccb8c2b8..c92a93ca 100644 --- a/TheOtherRoles/Patches/UpdatePatch.cs +++ b/TheOtherRoles/Patches/UpdatePatch.cs @@ -175,7 +175,7 @@ private static void setNameColors() bool forImp = localPlayer.Data.Role.IsImpostor; bool forKillerTeam = Snitch.Team == Snitch.includeNeutralTeam.KillNeutral && isKillerNeutral(localPlayer); bool forEvilTeam = Snitch.Team == Snitch.includeNeutralTeam.EvilNeutral && isEvilNeutral(localPlayer); - bool forNeutraTeam = Snitch.Team == Snitch.includeNeutralTeam.AllNeutral && isNeutral(localPlayer); + bool forNeutraTeam = Snitch.Team == Snitch.includeNeutralTeam.AllNeutral && localPlayer.isNeutral(); if (numberOfTasks <= Snitch.taskCountForReveal && Snitch.snitch.IsAlive()) { @@ -195,7 +195,7 @@ private static void setNameColors() bool TargetsImp = p.Data.Role.IsImpostor; bool TargetsKillerTeam = Snitch.Team == Snitch.includeNeutralTeam.KillNeutral && isKillerNeutral(p); bool TargetsEvilTeam = Snitch.Team == Snitch.includeNeutralTeam.EvilNeutral && isEvilNeutral(p); - bool TargetsNeutraTeam = Snitch.Team == Snitch.includeNeutralTeam.AllNeutral && isNeutral(p); + bool TargetsNeutraTeam = Snitch.Team == Snitch.includeNeutralTeam.AllNeutral && p.isNeutral(); var targetsRole = RoleInfo.getRoleInfoForPlayer(p, false).FirstOrDefault(); if (localPlayer == Snitch.snitch && (TargetsImp || TargetsKillerTeam || TargetsEvilTeam || TargetsNeutraTeam)) { diff --git a/TheOtherRoles/Patches/UsablesPatch.cs b/TheOtherRoles/Patches/UsablesPatch.cs index 2744bd12..3e82246c 100644 --- a/TheOtherRoles/Patches/UsablesPatch.cs +++ b/TheOtherRoles/Patches/UsablesPatch.cs @@ -184,25 +184,25 @@ public static bool Prefix(Vent otherVent) } } -[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.FixedUpdate))] +[HarmonyPatch(typeof(HudManager), nameof(HudManager.Update))] internal class VentButtonVisibilityPatch { - private static void Postfix(PlayerControl __instance) + private static void Postfix(HudManager __instance) { - if (__instance.AmOwner && ShowButtons) + if (PlayerControl.LocalPlayer.AmOwner && ShowButtons) { - HudManager.Instance.ImpostorVentButton.Hide(); - HudManager.Instance.SabotageButton.Hide(); + __instance.ImpostorVentButton.Hide(); + __instance.SabotageButton.Hide(); if (ShowButtons) { - if (__instance.roleCanUseVents()) - HudManager.Instance.ImpostorVentButton.Show(); + if (PlayerControl.LocalPlayer.roleCanUseVents()) + __instance.ImpostorVentButton.Show(); - if (__instance.roleCanSabotage()) + if (PlayerControl.LocalPlayer.roleCanSabotage()) { - HudManager.Instance.SabotageButton.Show(); - HudManager.Instance.SabotageButton.gameObject.SetActive(true); + __instance.SabotageButton.Show(); + __instance.SabotageButton.gameObject.SetActive(true); } } } diff --git a/TheOtherRoles/RPC.cs b/TheOtherRoles/RPC.cs index 49d2da2b..cd9c7178 100644 --- a/TheOtherRoles/RPC.cs +++ b/TheOtherRoles/RPC.cs @@ -707,10 +707,13 @@ public static void dissectionBody(byte playerId, byte killerId) DeadBody[] array = Object.FindObjectsOfType(); + var list = new List(); + list.AddRange(MapData.MapSpawnPosition(false)); + list.AddRange(MapData.FindVentSpawnPositions(false)); + for (var i = 1; i < array.Length && array[i].ParentId == playerId; i++) { - var randomPosition = MapData.MapSpawnPosition().Random(); - array[i].transform.position = randomPosition; + array[i].transform.position = list.Random(); } } @@ -1162,11 +1165,7 @@ public static void erasePlayerRoles(byte playerId, bool ignoreModifier = true) if (player == Jester.jester) Jester.clearAndReload(); if (player == Werewolf.werewolf) Werewolf.clearAndReload(); if (player == Miner.miner) Miner.clearAndReload(); - if (player == Pelican.Player) - { - Pelican.Player = null; - Pelican.PelicanDie(); - } + if (player == Pelican.Player) Pelican.PelicanDie(true); if (player == Arsonist.arsonist) Arsonist.clearAndReload(); if (Guesser.isGuesser(player.PlayerId)) Guesser.clear(player.PlayerId); diff --git a/TheOtherRoles/Resources/stringData.json b/TheOtherRoles/Resources/stringData.json index 386de9c5..80e5742f 100644 --- a/TheOtherRoles/Resources/stringData.json +++ b/TheOtherRoles/Resources/stringData.json @@ -196,6 +196,17 @@ "0": "Swooper", "13": "隐身豺狼" }, + "Role": { + "0": "Role", + "13": "职业" + }, + "Team": { + "13": "阵营" + }, + "Name": { + "0": "Name", + "13": "名字" + }, "page1": { "0": "Page 1: Vanilla Settings \n\n", "11": "Page 1: バニラの設定 ¦バニラの設定", @@ -258,6 +269,12 @@ "0": "On", "13": "开启" }, + "ExpandOptions": { + "13": "展开" + }, + "CollapseOptions": { + "13": "收起" + }, "presetSelection": { "0": "Preset", "11": "プリセット", @@ -359,6 +376,21 @@ "0": "Maximum Modifiers", "13": "最大附加职业数" }, + "MeetingOptions": { + "13": "会议设置" + }, + "SaboOptions": { + "13": "破坏设置" + }, + "TaskOptions": { + "13": "任务设置" + }, + "MapOptions": { + "13": "地图设置" + }, + "DevicesOption": { + "13": "信息终端设置" + }, "resteButtonCooldown": { "0": "Game Start Cooldown", "13": "游戏开局时重置CD" @@ -619,6 +651,15 @@ "0": "Use Random Map Setting Presets", "13": "使用随机地图设置预设" }, + "exileController": { + "13": "驱逐显示" + }, + "exiledReviveRole": { + "13": "驱逐后显示玩家信息" + }, + "exiledShowTeamNum": { + "13": "驱逐后显示各阵营人数" + }, "debugMode": { "0": "Enable Debug Mode", "13": "开启 Debug 模式" @@ -1261,6 +1302,14 @@ "0": "Vulture Can Use Vents", "13": "可使用管道" }, + "hasImpVision": { + "0": "Have Impostor Vision", + "13": "拥有伪装者视野" + }, + "canCallEmergency": { + "0": "Executioner Can Call Emergency Meeting", + "13": "可以发起紧急会议" + }, "SpecterOptions": { "0": "Specter (Ghost)", "13": "怨灵 (幽灵职业)" @@ -1274,10 +1323,6 @@ "specterAfterMeetingRevived": { "13": "拾取尸体后本轮会议结束才可复活" }, - "jesterCanCallEmergency": { - "0": "Jester Can Call Emergency Meeting", - "13": "小丑可召开会议" - }, "jesterCanVent": { "0": "Jester Can Hide In Vent", "13": "小丑可使用管道" @@ -1410,10 +1455,6 @@ "pavlovsownerCanUseSabo": { "13": "可以破坏" }, - "pavlovsownerHasImpostorVision": { - "0": "Have Impostor Vision", - "13": "拥有伪装者视野" - }, "pavlovsownerCanUseVents": { "13": "可以使用管道" }, @@ -1445,10 +1486,6 @@ "0": "Swoop Speed", "13": "隐身时移速增加" }, - "swooperHasImpVision": { - "0": "Have Impostor Vision", - "13": "拥有伪装者视野" - }, "werewolfRampageCooldown": { "0": "Rampage Cooldown", "13": "狂暴冷却" @@ -1464,10 +1501,6 @@ "juggernautCooldown": { "13": "击杀冷却" }, - "juggernautHasImpVision": { - "0": "Have Impostor Vision", - "13": "拥有伪装者视野" - }, "juggernautReducedkillEach": { "13": "每次击杀后减少的cd" }, @@ -1497,10 +1530,6 @@ "0": "Lawyer Knows Target Role", "13": "可得知目标职业" }, - "lawyerCanCallEmergency": { - "0": "Lawyer Can Call Emergency Meeting", - "13": "可以发起紧急会议" - }, "lawyerTargetCanBeJester": { "0": "Lawyer Target Can Be The Jester", "13": "小丑可以成为律师的客户" @@ -1512,10 +1541,6 @@ "lawyerStolenWin": { "13": "存活会取代客户胜利" }, - "executionerCanCallEmergency": { - "0": "Executioner Can Call Emergency Meeting", - "13": "可以发起紧急会议" - }, "executionerPromotesToLawyer": { "13": "目标职业变更时可以晋升为律师" }, @@ -1623,10 +1648,6 @@ "0": "Thief Can Kill ", "13": "身份窃贼可以击杀 " }, - "thiefHasImpVision": { - "0": "Thief Has Impostor Vision", - "13": "身份窃贼拥有伪装者视野" - }, "thiefCanUseVents": { "0": "Thief Can Use Vents", "13": "身份窃贼可以使用管道" @@ -1680,10 +1701,6 @@ "0": "Prosecutor Dies When They Exile A Crewmate", "13": "驱逐船员会自杀" }, - "prosecutorCanCallEmergency": { - "0": "Prosecutor Can Call Emergency Meeting", - "13": "可以发起紧急会议" - }, "mayorTasksNeededToSeeVoteColors": { "0": "Completed Tasks Needed To See Vote Colors", "13": "获得窥视能力所需完成的任务数" @@ -1879,10 +1896,6 @@ "0": "Alert Duration", "13": "警戒持续时间" }, - "swapperCanCallEmergency": { - "0": "Swapper Can Call Emergency Meeting", - "13": "可以发起紧急会议" - }, "swapperCanFixSabotages": { "0": "Swapper Can Fix Sabotages", "13": "可修理紧急破坏" @@ -2023,10 +2036,6 @@ "0": "Number Of Examinations", "13": "预言总次数" }, - "prophetCanCallEmergency": { - "0": "Prophet Can Call Emergency Meeting", - "13": "可以召开紧急会议" - }, "prophetIsRevealed": { "0": "Prophet Is Revealed To The Killers", "13": "可以被杀手发现" @@ -2069,20 +2078,12 @@ }, "spyCanDieToSheriff": { "0": "Spy Can Die To Sheriff", - "13": "可被警长执法" + "13": "卧底可被警长执法" }, "spyImpostorsCanKillAnyone": { "0": "Impostors Can Kill Anyone If There Is A Spy", "13": "卧底在场时伪装者可击杀队友" }, - "spyCanEnterVents": { - "0": "Spy Can Enter Vents", - "13": "可使用管道" - }, - "spyHasImpostorVision": { - "0": "Spy Has Impostor Vision", - "13": "拥有伪装者视野" - }, "portalmakerCooldown": { "0": "Portalmaker Cooldown", "13": "构建星门冷却" @@ -2208,18 +2209,10 @@ "0": "Trap Information Type", "13": "陷阱信息类型" }, - "trapperInfoType1": { - "0": "Role", - "13": "职业" - }, "trapperInfoType2": { "0": "Good/Evil Role", "13": "善良/邪恶" }, - "trapperInfoType3": { - "0": "Name", - "13": "名字" - }, "trapperTrapDuration": { "0": "Trap Duration", "13": "陷阱定身时间" diff --git a/TheOtherRoles/Roles/Crewmate/Medium.cs b/TheOtherRoles/Roles/Crewmate/Medium.cs index 4d3c2bc9..a5bc2a2d 100644 --- a/TheOtherRoles/Roles/Crewmate/Medium.cs +++ b/TheOtherRoles/Roles/Crewmate/Medium.cs @@ -142,7 +142,7 @@ public static string getInfo(PlayerControl target, PlayerControl killer) condition = "个可以使用管道的玩家" + (count == 1 ? "" : ""); break; case 2: - count = alivePlayersList.Count(pc => isNeutral(pc) && !isKillerNeutral(pc)); + count = alivePlayersList.Count(pc => pc.isNeutral() && !isKillerNeutral(pc)); condition = $"名玩家{(count == 1 ? "" : "")}{(count == 1 ? "是" : "是")}非击杀型中立"; break; } diff --git a/TheOtherRoles/Roles/Crewmate/Prophet.cs b/TheOtherRoles/Roles/Crewmate/Prophet.cs index c669f0e4..4a335304 100644 --- a/TheOtherRoles/Roles/Crewmate/Prophet.cs +++ b/TheOtherRoles/Roles/Crewmate/Prophet.cs @@ -34,7 +34,7 @@ public static bool IsRed(PlayerControl p) if (killCrewAsRed && (Sheriff.Player.Any(x => x == p) || p == Sheriff.Deputy || p == Veteran.veteran)) return true; - if (benignNeutralAsRed && isNeutral(p) && (Amnisiac.Player.Contains(p) || Pursuer.Player.Contains(p) || Survivor.Player.Contains(p))) return true; + if (benignNeutralAsRed && p.isNeutral() && (Amnisiac.Player.Contains(p) || Pursuer.Player.Contains(p) || Survivor.Player.Contains(p))) return true; return evilNeutralAsRed && isEvilNeutral(p); } diff --git a/TheOtherRoles/Roles/Ghost/Specter.cs b/TheOtherRoles/Roles/Ghost/Specter.cs index 0ddee364..4366cc21 100644 --- a/TheOtherRoles/Roles/Ghost/Specter.cs +++ b/TheOtherRoles/Roles/Ghost/Specter.cs @@ -10,7 +10,7 @@ public class Specter public static float duration; public static bool resetRole; - public static bool afterMeetingRevived; + public static bool afterMeetingRevive; public static bool revive; public static bool remember; @@ -20,7 +20,7 @@ public static void ClearAndReload() Player = null; revive = false; remember = !CustomOptionHolder.specterAfterMeetingTakeRole.GetBool(); - afterMeetingRevived = CustomOptionHolder.specterAfterMeetingRevived.GetBool(); + afterMeetingRevive = CustomOptionHolder.specterAfterMeetingRevived.GetBool(); resetRole = CustomOptionHolder.specterResetRole.GetBool(); duration = CustomOptionHolder.specterDuration.GetFloat(); } @@ -333,7 +333,7 @@ public static void TakeRole(byte targetId) } } - if (afterMeetingRevived) + if (afterMeetingRevive) { revive = true; return; diff --git a/TheOtherRoles/Roles/Modifier/Lovers.cs b/TheOtherRoles/Roles/Modifier/Lovers.cs index ebd35a22..aa2d18ba 100644 --- a/TheOtherRoles/Roles/Modifier/Lovers.cs +++ b/TheOtherRoles/Roles/Modifier/Lovers.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; namespace TheOtherRoles.Roles.Modifier; @@ -20,35 +20,28 @@ public static bool isLover(this PlayerControl player) return player != null && (player == lover1 || player == lover2); } - public static bool existing() + public static bool IsAlive() { - return lover1 != null && lover2 != null && !lover1.Data.Disconnected && !lover2.Data.Disconnected; + // ADD NOT ACKED IS LOVER + return lover1.IsAlive() && lover2.IsAlive() && !notAckedExiledIsLover; } - public static bool existingAndAlive() + public static bool isKillerLover() { - return existing() && !lover1.Data.IsDead && !lover2.Data.IsDead && - !notAckedExiledIsLover; // ADD NOT ACKED IS LOVER + return lover1.isKiller() || lover2.isKiller(); } public static PlayerControl otherLover(PlayerControl player) { - if (!existing() || player == null) return null; + if (player == null) return null; if (player == lover1) return lover2; if (player == lover2) return lover1; return null; } - public static bool existingWithKiller() - { - return existing() && (lover1.isKiller() || lover2.isKiller()); - } - public static bool hasAliveKillingLover(this PlayerControl player) { - if (!existingAndAlive() || !existingWithKiller()) - return false; - return player != null && (player == lover1 || player == lover2); + return player.isLover() && IsAlive() && isKillerLover(); } public static void clearAndReload() diff --git a/TheOtherRoles/Roles/Modifier/Shifter.cs b/TheOtherRoles/Roles/Modifier/Shifter.cs index f20df782..b2f9316b 100644 --- a/TheOtherRoles/Roles/Modifier/Shifter.cs +++ b/TheOtherRoles/Roles/Modifier/Shifter.cs @@ -42,7 +42,7 @@ public static bool isShiftNeutral(PlayerControl player) } } - return isNeutral(player); + return player.isNeutral(); } public static void shiftRole(PlayerControl player1, PlayerControl player2, bool repeat = true) diff --git a/TheOtherRoles/Roles/Neutral/Arsonist.cs b/TheOtherRoles/Roles/Neutral/Arsonist.cs index dfb08206..854fac4b 100644 --- a/TheOtherRoles/Roles/Neutral/Arsonist.cs +++ b/TheOtherRoles/Roles/Neutral/Arsonist.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Linq; using UnityEngine; namespace TheOtherRoles.Roles.Neutral; diff --git a/TheOtherRoles/Roles/Neutral/Jester.cs b/TheOtherRoles/Roles/Neutral/Jester.cs index 2b53e8b0..d767e20f 100644 --- a/TheOtherRoles/Roles/Neutral/Jester.cs +++ b/TheOtherRoles/Roles/Neutral/Jester.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; namespace TheOtherRoles.Roles.Neutral; diff --git a/TheOtherRoles/Roles/Neutral/Pelican.cs b/TheOtherRoles/Roles/Neutral/Pelican.cs index 9879a878..e798690c 100644 --- a/TheOtherRoles/Roles/Neutral/Pelican.cs +++ b/TheOtherRoles/Roles/Neutral/Pelican.cs @@ -24,23 +24,17 @@ public static void PelicanKill(byte targetId) eatenPlayers.Add(target); } - public static void PelicanDie() + public static void PelicanDie(bool clear = false) { - if (Player == null) + if (clear || Player?.Data.IsDead == true) { if (eatenPlayers.Any(x => x == PlayerControl.LocalPlayer)) { HudManager.Instance.PlayerCam.Target = PlayerControl.LocalPlayer; PlayerControl.LocalPlayer.NetTransform.RpcSnapTo(Player.transform.position); } - eatenPlayers = new(); + clearAndReload(clear); } - - if (Player?.Data.IsDead == true) - { - HudManager.Instance.PlayerCam.Target = PlayerControl.LocalPlayer; - PlayerControl.LocalPlayer.NetTransform.RpcSnapTo(Player.transform.position); - }; } public static void clearAndReload(bool clear = true) diff --git a/TheOtherRoles/Roles/RoleHelpers.cs b/TheOtherRoles/Roles/RoleHelpers.cs index 4f248361..c7ea0ccb 100644 --- a/TheOtherRoles/Roles/RoleHelpers.cs +++ b/TheOtherRoles/Roles/RoleHelpers.cs @@ -421,13 +421,18 @@ public static void Postfix([HarmonyArgument(0)] PlayerControl player) public static bool otherNeutral(PlayerControl player) { - if (Pelican.Player == player) return false; - if (PartTimer.partTimer == player && PartTimer.target == null) return true; - if (Lawyer.lawyer == player && Lawyer.target.IsDead()) return true; - if (isNeutral(player) && !Jackal.jackal.Contains(player) && player != Jackal.Sidekick && - player != Pavlovsdogs.pavlovsowner && !Pavlovsdogs.pavlovsdogs.Contains(player)) - return true; - return false; + if (Pelican.Player == player || + (PartTimer.partTimer == player && PartTimer.target != null) || + (Lawyer.lawyer == player && Lawyer.target.IsAlive()) || + player == Jackal.Sidekick || + player == Pavlovsdogs.pavlovsowner || + Jackal.jackal.Any(x => x.PlayerId == player.PlayerId) || + Pavlovsdogs.pavlovsdogs.Any(x => x.PlayerId == player.PlayerId)) + { + return false; + } + + return player.isNeutral(); } private static void AssignRole(PlayerControl player, AssignType assignType) diff --git a/TheOtherRoles/SubmergedCompatibility.cs b/TheOtherRoles/SubmergedCompatibility.cs index 6f833dbc..d9d744e8 100644 --- a/TheOtherRoles/SubmergedCompatibility.cs +++ b/TheOtherRoles/SubmergedCompatibility.cs @@ -4,7 +4,6 @@ using System.Reflection; using BepInEx; using BepInEx.Unity.IL2CPP; -using TheOtherRoles.Utilities; using UnityEngine; namespace TheOtherRoles; diff --git a/TheOtherRoles/TheOtherRoles.csproj b/TheOtherRoles/TheOtherRoles.csproj index 75bd9f01..93bae96e 100644 --- a/TheOtherRoles/TheOtherRoles.csproj +++ b/TheOtherRoles/TheOtherRoles.csproj @@ -1,7 +1,7 @@  net6.0 - 1.1.2.1 + 1.1.2.2 TheOtherUs mxyx-club latest