Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of CompetitiveCompany v0.3.1
CompetitiveCompany.dll
Decompiled 2 years agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using CSync.Lib; using CSync.Util; using CompetitiveCompany; using CompetitiveCompany.patches; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using TMPro; using Unity.Netcode; using UnityEngine; using UnityEngine.UI; using UnityEngine.UIElements.Collections; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("CompetitiveCompany")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Your Mod Description Goes Here")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+8b26f609e928f638868b8916e7cd58fa7c6ac023")] [assembly: AssemblyProduct("CompetitiveCompany")] [assembly: AssemblyTitle("CompetitiveCompany")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } [DataContract] public class Config : SyncedConfig<Config> { [DataMember] internal SyncedEntry<int> team1Suit { get; private set; } [DataMember] internal SyncedEntry<int> team2Suit { get; private set; } [DataMember] internal SyncedEntry<string> team1Name { get; private set; } [DataMember] internal SyncedEntry<string> team2Name { get; private set; } [DataMember] internal SyncedEntry<string> team1ColorCode { get; private set; } [DataMember] internal SyncedEntry<string> team2ColorCode { get; private set; } [DataMember] internal SyncedEntry<int> graceTime { get; private set; } [DataMember] internal SyncedEntry<int> fineAmount { get; private set; } public Config(ConfigFile cfg) : base("CompetitiveCompany") { ConfigManager.Register<Config>(this); team1Suit = Extensions.BindSyncedEntry<int>(cfg, "Suits", "Team 1 Suits", 0, "Originally the orange suit.\nIf you want to set a custom suit with AdditionalSuits, their suits\nGet logged when the game starts. Simply read the logs\nAnd use their SuitIDs!"); team2Suit = Extensions.BindSyncedEntry<int>(cfg, "Suits", "Team 2 Suits", 3, "Originally the Pajama Suit"); team1Name = Extensions.BindSyncedEntry<string>(cfg, "Names", "Team 1 Name", "Orange", "Set the name for team 1."); team2Name = Extensions.BindSyncedEntry<string>(cfg, "Names", "Team 2 Name", "Blue", "Set the name for team 2."); team1ColorCode = Extensions.BindSyncedEntry<string>(cfg, "Colors", "Team 1 Color", "orange", "Set the color code for team 1. Hex codes can be used."); team2ColorCode = Extensions.BindSyncedEntry<string>(cfg, "Colors", "Team 2 Color", "blue", "Set the color code for team 2. Hex codes can be used."); graceTime = Extensions.BindSyncedEntry<int>(cfg, "Grace Time", "Grace Time", 14, "How long grace lasts for. 12+ = PM"); fineAmount = Extensions.BindSyncedEntry<int>(cfg, "Grace Time", "Fine Amount", 200, "How much should you be fined for leaving early"); } [HarmonyPostfix] [HarmonyPatch(typeof(PlayerControllerB), "ConnectClientToPlayerObject")] public static void InitializeLocalPlayer() { Plugin.Instance.mls.LogError((object)"10088 - Start"); if (SyncedInstance<Config>.IsHost) { SyncedInstance<Config>.Synced = true; } else { SyncedInstance<Config>.Synced = false; } } } public class Randomizer { public static void Randomize<T>(T[] items) { Random random = new Random(); for (int i = 0; i < items.Length - 1; i++) { int num = random.Next(i, items.Length); T val = items[i]; items[i] = items[num]; items[num] = val; } } } namespace CompetitiveCompany { [BepInPlugin("org.agmas.CompetitiveCompany", "Competitive Company", "0.3.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { private const string modGUID = "org.agmas.CompetitiveCompany"; private const string modName = "Competitive Company"; private const string modVersion = "0.3.0"; private readonly Harmony harmony = new Harmony("org.agmas.CompetitiveCompany"); public static Plugin Instance; public static int blueScore = 0; public static bool startLogic = false; public static bool warnship = true; public static bool finedForShip = false; public static int redScore = 0; public static int curHour = 0; public static int nextHour = 0; public static Dictionary<PlayerControllerB, int> teams = new Dictionary<PlayerControllerB, int>(); public static Dictionary<PlayerControllerB, bool> initiated = new Dictionary<PlayerControllerB, bool>(); public ManualLogSource mls; public static Config MyConfig { get; internal set; } private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } MyConfig = new Config(((BaseUnityPlugin)this).Config); mls = Logger.CreateLogSource("org.agmas.CompetitiveCompany"); mls.LogInfo((object)"We're up and running!"); harmony.PatchAll(typeof(RoundManagerPatch)); harmony.PatchAll(typeof(HudManagerPatch)); harmony.PatchAll(typeof(PlayerControllerBPatch)); harmony.PatchAll(typeof(GrabbableObjectPatch)); harmony.PatchAll(typeof(StartOfRoundPatch)); harmony.PatchAll(typeof(Config)); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "CompetitiveCompany"; public const string PLUGIN_NAME = "CompetitiveCompany"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace CompetitiveCompany.patches { [HarmonyPatch(typeof(GrabbableObject))] internal class GrabbableObjectPatch { } [HarmonyPatch(typeof(HUDManager))] internal class HudManagerPatch { public static TextMeshProUGUI _blueTeam; public static TextMeshProUGUI _seperator; public static TextMeshProUGUI _redTeam; [HarmonyPatch(typeof(HUDManager), "Start")] [HarmonyPrefix] public static void fix(HUDManager __instance) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Expected O, but got Unknown //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Expected O, but got Unknown //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("BlueHUD"); val.AddComponent<RectTransform>(); TextMeshProUGUI val2 = val.AddComponent<TextMeshProUGUI>(); RectTransform rectTransform = ((TMP_Text)val2).rectTransform; ((Transform)rectTransform).SetParent(((Component)__instance.PTTIcon).transform, false); rectTransform.anchoredPosition = new Vector2(0f, 2f); ((TMP_Text)val2).font = ((TMP_Text)__instance.controlTipLines[0]).font; ((TMP_Text)val2).fontSize = 16f; ((TMP_Text)val2).text = "1000"; ((Graphic)val2).color = Color.red; ((TMP_Text)val2).overflowMode = (TextOverflowModes)0; ((Behaviour)val2).enabled = true; _redTeam = val2; GameObject val3 = new GameObject("SepHUD"); val3.AddComponent<RectTransform>(); TextMeshProUGUI val4 = val3.AddComponent<TextMeshProUGUI>(); RectTransform rectTransform2 = ((TMP_Text)val4).rectTransform; ((Transform)rectTransform2).SetParent(((Component)__instance.PTTIcon).transform, false); rectTransform2.anchoredPosition = new Vector2(0f, 2f); ((TMP_Text)val4).font = ((TMP_Text)__instance.controlTipLines[0]).font; ((TMP_Text)val4).fontSize = 16f; ((TMP_Text)val4).text = "vs"; ((Graphic)val4).color = Color.gray; ((TMP_Text)val4).overflowMode = (TextOverflowModes)0; ((Behaviour)val4).enabled = true; _seperator = val4; GameObject val5 = new GameObject("RedHUD"); val5.AddComponent<RectTransform>(); TextMeshProUGUI val6 = val5.AddComponent<TextMeshProUGUI>(); RectTransform rectTransform3 = ((TMP_Text)val6).rectTransform; ((Transform)rectTransform3).SetParent(((Component)__instance.PTTIcon).transform, false); rectTransform3.anchoredPosition = new Vector2(0f, 2f); ((TMP_Text)val6).font = ((TMP_Text)__instance.controlTipLines[0]).font; ((TMP_Text)val6).fontSize = 16f; ((TMP_Text)val6).text = "1000"; ((Graphic)val6).color = Color.blue; ((TMP_Text)val6).overflowMode = (TextOverflowModes)0; ((Behaviour)val6).enabled = true; _blueTeam = val6; } [HarmonyPatch(typeof(HUDManager), "DisplayDaysLeft")] [HarmonyPrefix] private static bool teams2() { if (((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsHost || ((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsServer) { TimeOfDay.Instance.timeUntilDeadline = 2000f; } if (Plugin.blueScore > Plugin.redScore) { ((TMP_Text)HUDManager.Instance.profitQuotaDaysLeftText).text = SyncedInstance<Config>.Instance.team2Name.Value + " Wins!"; ((TMP_Text)HUDManager.Instance.profitQuotaDaysLeftText2).text = SyncedInstance<Config>.Instance.team2Name.Value + " Wins!"; } if (Plugin.blueScore < Plugin.redScore) { ((TMP_Text)HUDManager.Instance.profitQuotaDaysLeftText).text = SyncedInstance<Config>.Instance.team1Name.Value + " Wins!"; ((TMP_Text)HUDManager.Instance.profitQuotaDaysLeftText2).text = SyncedInstance<Config>.Instance.team1Name.Value + " Wins!"; } if (Plugin.blueScore == Plugin.redScore) { ((TMP_Text)HUDManager.Instance.profitQuotaDaysLeftText).text = "Tie!"; ((TMP_Text)HUDManager.Instance.profitQuotaDaysLeftText2).text = "Tie!"; } if (((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsHost || ((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsServer) { RoundManager.Instance.DespawnPropsAtEndOfRound(true); } HUDManager.Instance.reachedProfitQuotaAnimator.SetTrigger("displayDaysLeftCalm"); HUDManager.Instance.UIAudio.PlayOneShot(HUDManager.Instance.profitQuotaDaysLeftCalmSFX); return false; } [HarmonyPatch(typeof(HUDManager), "FillEndGameStats")] [HarmonyPostfix] private static void teams() { if (Plugin.blueScore > Plugin.redScore) { ((TMP_Text)HUDManager.Instance.statsUIElements.gradeLetter).text = SyncedInstance<Config>.Instance.team2Name.Value.Substring(0, 2); if (((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsServer || ((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsHost) { HUDManager.Instance.AddTextToChatOnServer("<color=" + SyncedInstance<Config>.Instance.team2ColorCode.Value + ">" + SyncedInstance<Config>.Instance.team2Name.Value + " won the game!!", -1); } } if (Plugin.blueScore < Plugin.redScore) { ((TMP_Text)HUDManager.Instance.statsUIElements.gradeLetter).text = SyncedInstance<Config>.Instance.team1Name.Value.Substring(0, 2); if (((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsServer || ((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsHost) { HUDManager.Instance.AddTextToChatOnServer("<color=" + SyncedInstance<Config>.Instance.team1ColorCode.Value + ">" + SyncedInstance<Config>.Instance.team1Name.Value + " won the game!!", -1); } } if (Plugin.blueScore == Plugin.redScore) { ((TMP_Text)HUDManager.Instance.statsUIElements.gradeLetter).text = "T"; if (((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsServer || ((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsHost) { HUDManager.Instance.AddTextToChatOnServer("<color=white>Tied.", -1); } } } [HarmonyPatch(typeof(HUDManager), "AddChatMessage")] [HarmonyPrefix] public static bool Prefix(HUDManager __instance, string chatMessage, string nameOfUserWhoTyped = "") { if (string.IsNullOrEmpty(nameOfUserWhoTyped)) { if (chatMessage.StartsWith("<color=" + SyncedInstance<Config>.Instance.team1ColorCode.Value + ">") && chatMessage.EndsWith(" was put on " + SyncedInstance<Config>.Instance.team1Name.Value + "!")) { string text = (string)chatMessage.Clone(); text = text.Remove(0, 8 + SyncedInstance<Config>.Instance.team1ColorCode.Value.Length); string[] array = text.Split(" was"); Plugin.Instance.mls.LogInfo((object)("Detected Player " + array[0])); PlayerControllerB[] allPlayerScripts = RoundManager.Instance.playersManager.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { if (array[0].Equals(val.playerUsername) && !Plugin.teams.ContainsKey(val)) { Plugin.teams.Add(val, 0); } } } if (chatMessage.Equals("<color=green>Use the suit rack to switch team or\nPut on the Yellow suit to be randomly selected!")) { HUDManager.Instance.DisplayTip("Competitive Company", "Use the suit rack to switch team or\nPut on the Yellow suit to be randomly selected!", false, false, "LC_Tip1"); return false; } if (chatMessage.StartsWith("<color=" + SyncedInstance<Config>.Instance.team2ColorCode.Value + ">") && chatMessage.EndsWith(" was put on " + SyncedInstance<Config>.Instance.team2Name.Value + "!")) { string text2 = (string)chatMessage.Clone(); text2 = text2.Remove(0, 8 + SyncedInstance<Config>.Instance.team2ColorCode.Value.Length); string[] array2 = text2.Split(" was"); Plugin.Instance.mls.LogInfo((object)("Detected Player " + array2[0])); PlayerControllerB[] allPlayerScripts2 = RoundManager.Instance.playersManager.allPlayerScripts; foreach (PlayerControllerB val2 in allPlayerScripts2) { if (array2[0].Equals(val2.playerUsername) && !Plugin.teams.ContainsKey(val2)) { Plugin.teams.Add(val2, 1); } } } if (chatMessage.StartsWith("<color=" + SyncedInstance<Config>.Instance.team1ColorCode.Value + ">" + GameNetworkManager.Instance.localPlayerController.playerUsername + " was put on " + SyncedInstance<Config>.Instance.team1Name.Value + "!")) { __instance.DisplayTip("Competitive Company", "You're on " + SyncedInstance<Config>.Instance.team1Name.Value + "!", false, false, "LC_Tip1"); } if (chatMessage.StartsWith("<color=" + SyncedInstance<Config>.Instance.team2ColorCode.Value + ">" + GameNetworkManager.Instance.localPlayerController.playerUsername + " was put on " + SyncedInstance<Config>.Instance.team2Name.Value + "!")) { __instance.DisplayTip("Competitive Company", "You're on " + SyncedInstance<Config>.Instance.team2Name.Value + "!", false, false, "LC_Tip1"); } } return true; } } [HarmonyPatch(typeof(PlayerControllerB))] internal class PlayerControllerBPatch { [HarmonyPatch(typeof(PlayerControllerB), "SetItemInElevator")] [HarmonyPrefix] private static void gammaPatch2(PlayerControllerB __instance, ref GrabbableObject gObject, ref bool droppedInShipRoom) { if (!((gObject.itemProperties.isScrap && !gObject.scrapPersistedThroughRounds) & droppedInShipRoom) || RoundManager.Instance.scrapCollectedThisRound.Contains(gObject) || !Plugin.teams.ContainsKey(__instance)) { return; } if (DictionaryExtensions.Get<PlayerControllerB, int>((IDictionary<PlayerControllerB, int>)Plugin.teams, __instance, 0) == 0) { Plugin.redScore += gObject.scrapValue; if (GameNetworkManager.Instance.isHostingGame) { Terminal val = Object.FindObjectOfType<Terminal>(); val.groupCredits += gObject.scrapValue; val.SyncGroupCreditsServerRpc(val.groupCredits, val.numberOfItemsInDropship); HUDManager.Instance.AddTextToChatOnServer("<color=" + SyncedInstance<Config>.Instance.team1ColorCode.Value + ">+" + gObject.scrapValue + "\n<color=white>(<color=red>" + Plugin.redScore + "<color=white> - <color=blue>" + Plugin.blueScore + "<color=white>)", -1); } } if (DictionaryExtensions.Get<PlayerControllerB, int>((IDictionary<PlayerControllerB, int>)Plugin.teams, __instance, 0) == 1) { Plugin.blueScore += gObject.scrapValue; if (GameNetworkManager.Instance.isHostingGame) { Terminal val2 = Object.FindObjectOfType<Terminal>(); val2.groupCredits += gObject.scrapValue; val2.SyncGroupCreditsServerRpc(val2.groupCredits, val2.numberOfItemsInDropship); HUDManager.Instance.AddTextToChatOnServer("<color=" + SyncedInstance<Config>.Instance.team2ColorCode.Value + ">+" + gObject.scrapValue + "\n<color=white>(<color=red>" + Plugin.redScore + "<color=white> - <color=blue>" + Plugin.blueScore + "<color=white>)", -1); } } } [HarmonyPatch(typeof(PlayerControllerB), "DamagePlayerFromOtherClientServerRpc")] [HarmonyPrefix] private static void ff(PlayerControllerB __instance, ref int damageAmount, ref int playerWhoHit) { int num = (int)(TimeOfDay.Instance.normalizedTimeOfDay * (60f * (float)TimeOfDay.Instance.numberOfHours)) + 360; int num2 = (int)Mathf.Floor((float)(num / 60)); if (RoundManager.Instance.playersManager.allPlayerScripts[playerWhoHit].currentSuitID == __instance.currentSuitID) { HUDManager.Instance.DisplayTip("Competitive Company", "Friendly fire is not allowed!", true, false, "LC_Tip1"); damageAmount = 0; } if (num2 >= SyncedInstance<Config>.Instance.graceTime.Value) { return; } damageAmount = 0; if (((object)RoundManager.Instance.playersManager.allPlayerScripts[playerWhoHit]).Equals((object?)GameNetworkManager.Instance.localPlayerController)) { int num3 = 0; string text = "am"; num3 += SyncedInstance<Config>.Instance.graceTime.Value; if (num3 > 12) { num3 -= 12; text = "pm"; } HUDManager.Instance.DisplayTip("Competitive Company", "You can only attack others in the factory or after " + num3 + text + "!", true, false, "LC_Tip1"); } } private static IEnumerator SuitSetter(PlayerControllerB b) { yield return (object)new WaitForSeconds(2f); UnlockableSuit[] array = Object.FindObjectsOfType<UnlockableSuit>(true); UnlockableSuit[] array2 = array; foreach (UnlockableSuit us in array2) { if (us.suitID == 2) { us.SwitchSuitToThis(b); } } } [HarmonyPatch(typeof(PlayerControllerB), "Update")] [HarmonyPostfix] private static void gammaPatch(PlayerControllerB __instance) { //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)__instance != (Object)null)) { return; } if (((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsServer || ((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsHost) { if (!Plugin.initiated.ContainsKey(__instance)) { Plugin.initiated.Add(__instance, value: true); HUDManager.Instance.AddTextToChatOnServer("<color=green>Use the suit rack to switch team or\nPut on the Yellow suit to be randomly selected!", -1); ((MonoBehaviour)__instance).StartCoroutine(SuitSetter(__instance)); } if (Plugin.teams.ContainsKey(__instance) && Plugin.startLogic && RoundManager.Instance.dungeonFinishedGeneratingForAllPlayers) { if (DictionaryExtensions.Get<PlayerControllerB, int>((IDictionary<PlayerControllerB, int>)Plugin.teams, __instance, 0) == 0 && __instance.currentSuitID != SyncedInstance<Config>.Instance.team1Suit.Value) { UnlockableSuit[] array = Object.FindObjectsOfType<UnlockableSuit>(true); UnlockableSuit[] array2 = array; foreach (UnlockableSuit val in array2) { if (val.suitID == SyncedInstance<Config>.Instance.team1Suit.Value) { val.SwitchSuitToThis(__instance); } } } if (DictionaryExtensions.Get<PlayerControllerB, int>((IDictionary<PlayerControllerB, int>)Plugin.teams, __instance, 0) == 1 && __instance.currentSuitID != SyncedInstance<Config>.Instance.team2Suit.Value) { UnlockableSuit[] array3 = Object.FindObjectsOfType<UnlockableSuit>(true); UnlockableSuit[] array4 = array3; foreach (UnlockableSuit val2 in array4) { if (val2.suitID == SyncedInstance<Config>.Instance.team2Suit.Value) { val2.SwitchSuitToThis(__instance); } } } } } if (__instance.currentSuitID == 0) { ((Graphic)__instance.usernameBillboardText).color = Color.red; } if (__instance.currentSuitID == 3) { ((Graphic)__instance.usernameBillboardText).color = Color.blue; } if (__instance.currentSuitID == 2) { ((Graphic)__instance.usernameBillboardText).color = Color.yellow; } } } [HarmonyPatch(typeof(RoundManager))] internal class RoundManagerPatch { [HarmonyPatch(typeof(RoundManager), "OnDestroy")] [HarmonyPostfix] private static void undo(RoundManager __instance) { Plugin.startLogic = false; Plugin.teams.Clear(); Plugin.initiated.Clear(); } [HarmonyPatch(typeof(RoundManager), "Update")] [HarmonyPostfix] private static void checkIfDead(RoundManager __instance) { //IL_03af: Unknown result type (might be due to invalid IL or missing references) //IL_03ef: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)null) { return; } if (!StartOfRound.Instance.unlockablesList.unlockables[2].alreadyUnlocked && (((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsServer || ((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsHost)) { if (SyncedInstance<Config>.Instance.team2Suit.Value == 0 || SyncedInstance<Config>.Instance.team1Suit.Value == 1 || SyncedInstance<Config>.Instance.team1Suit.Value == 24 || SyncedInstance<Config>.Instance.team1Suit.Value == 3) { UnlockShipItem(StartOfRound.Instance, SyncedInstance<Config>.Instance.team1Suit.Value, "Pajama Suit"); } if (SyncedInstance<Config>.Instance.team2Suit.Value == 0 || SyncedInstance<Config>.Instance.team2Suit.Value == 1 || SyncedInstance<Config>.Instance.team2Suit.Value == 24 || SyncedInstance<Config>.Instance.team2Suit.Value == 3) { UnlockShipItem(StartOfRound.Instance, SyncedInstance<Config>.Instance.team2Suit.Value, "Pajama Suit"); } UnlockShipItem(StartOfRound.Instance, 2, "Hazard Suit"); } if (Plugin.startLogic) { if (StartOfRound.Instance.shipHasLanded) { if (Plugin.curHour >= Plugin.nextHour) { } int num = 0; int num2 = 0; PlayerControllerB[] allPlayerScripts = RoundManager.Instance.playersManager.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { if (Plugin.teams.ContainsKey(val) && !val.isPlayerDead && val.isPlayerControlled) { if (DictionaryExtensions.Get<PlayerControllerB, int>((IDictionary<PlayerControllerB, int>)Plugin.teams, val, 0) == 0) { num++; } if (DictionaryExtensions.Get<PlayerControllerB, int>((IDictionary<PlayerControllerB, int>)Plugin.teams, val, 0) == 1) { num2++; } } } if (num == 0) { Plugin.startLogic = false; Plugin.redScore = -400; if (GameNetworkManager.Instance.isHostingGame) { HUDManager.Instance.AddTextToChatOnServer("<color=" + SyncedInstance<Config>.Instance.team1ColorCode.Value + ">" + SyncedInstance<Config>.Instance.team1Name.Value + " was team-wiped...", -1); StartOfRound.Instance.EndGameServerRpc(-1); } } if (num2 == 0) { Plugin.startLogic = false; Plugin.blueScore = -400; if (GameNetworkManager.Instance.isHostingGame) { HUDManager.Instance.AddTextToChatOnServer("<color=" + SyncedInstance<Config>.Instance.team2ColorCode.Value + ">" + SyncedInstance<Config>.Instance.team2Name.Value + " was team-wiped...", -1); StartOfRound.Instance.EndGameServerRpc(-1); } } } ((TMP_Text)HudManagerPatch._blueTeam).text = Plugin.blueScore.ToString(); ((TMP_Text)HudManagerPatch._seperator).text = "vs"; ((TMP_Text)HudManagerPatch._redTeam).text = Plugin.redScore.ToString(); ((TMP_Text)HudManagerPatch._seperator).rectTransform.anchoredPosition = new Vector2((float)((((TMP_Text)HudManagerPatch._redTeam).text.Length + 1) * 8), 2f); ((TMP_Text)HudManagerPatch._blueTeam).rectTransform.anchoredPosition = new Vector2((float)((((TMP_Text)HudManagerPatch._redTeam).text.Length + 1 + ((TMP_Text)HudManagerPatch._seperator).text.Length + 1) * 8), 2f); } else { ((TMP_Text)HudManagerPatch._redTeam).text = ""; ((TMP_Text)HudManagerPatch._blueTeam).text = ""; ((TMP_Text)HudManagerPatch._seperator).text = ""; } } [HarmonyPatch(typeof(TimeOfDay), "UpdateProfitQuotaCurrentTime")] [HarmonyPostfix] public static void noDeadline(RoundManager __instance) { TimeOfDay.Instance.timeUntilDeadline = (int)(TimeOfDay.Instance.totalTime * (float)TimeOfDay.Instance.quotaVariables.deadlineDaysAmount); ((TMP_Text)StartOfRound.Instance.deadlineMonitorText).text = "Competitive\nCompany"; } [HarmonyPatch(typeof(RoundManager), "GenerateNewLevelClientRpc")] [HarmonyPostfix] private static void gammaPatch(RoundManager __instance) { Plugin.warnship = true; Plugin.blueScore = 0; Plugin.startLogic = true; Plugin.redScore = 0; } [HarmonyPatch(typeof(StartMatchLever), "LeverAnimation")] [HarmonyPrefix] private static bool noLeave(StartMatchLever __instance) { int num = (int)(TimeOfDay.Instance.normalizedTimeOfDay * (60f * (float)TimeOfDay.Instance.numberOfHours)) + 360; int num2 = (int)Mathf.Floor((float)(num / 60)); if (num2 < SyncedInstance<Config>.Instance.graceTime.Value && Plugin.warnship && RoundManager.Instance.playersManager.shipHasLanded) { HUDManager.Instance.DisplayTip("Competitive Company", "You can't leave this early!\nIf you want to leave anyways, You will be fined " + SyncedInstance<Config>.Instance.fineAmount.Value + "$ and the ship will leave.", true, false, "LC_Tip1"); Plugin.warnship = false; return false; } return true; } private static void UnlockShipItem(StartOfRound instance, int unlockableID, string name) { try { MethodInfo method = ((object)instance).GetType().GetMethod("UnlockShipObject", BindingFlags.Instance | BindingFlags.NonPublic); method.Invoke(instance, new object[1] { unlockableID }); } catch (NullReferenceException arg) { Plugin.Instance.mls.LogError((object)$"Could not invoke UnlockShipObject method: {arg}"); } } public static Vector3 GetPlayerSpawnPosition(int playerNum, bool simpleTeleport = false) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_02ce: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_0208: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_022a: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_025f: Unknown result type (might be due to invalid IL or missing references) //IL_026f: Unknown result type (might be due to invalid IL or missing references) //IL_02b1: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_02c0: Unknown result type (might be due to invalid IL or missing references) //IL_02c5: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) Transform[] playerSpawnPositions = StartOfRound.Instance.playerSpawnPositions; if (simpleTeleport) { return playerSpawnPositions[0].position; } Debug.DrawRay(playerSpawnPositions[playerNum].position, Vector3.up, Color.red, 15f); if (!Physics.CheckSphere(playerSpawnPositions[playerNum].position, 0.2f, 67108864, (QueryTriggerInteraction)1)) { return playerSpawnPositions[playerNum].position; } if (!Physics.CheckSphere(playerSpawnPositions[playerNum].position + Vector3.up, 0.2f, 67108864, (QueryTriggerInteraction)1)) { return playerSpawnPositions[playerNum].position + Vector3.up * 0.5f; } for (int i = 0; i < playerSpawnPositions.Length; i++) { if (i != playerNum) { Debug.DrawRay(playerSpawnPositions[i].position, Vector3.up, Color.green, 15f); if (!Physics.CheckSphere(playerSpawnPositions[i].position, 0.12f, -67108865, (QueryTriggerInteraction)1)) { return playerSpawnPositions[i].position; } if (!Physics.CheckSphere(playerSpawnPositions[i].position + Vector3.up, 0.12f, 67108864, (QueryTriggerInteraction)1)) { return playerSpawnPositions[i].position + Vector3.up * 0.5f; } } } Random random = new Random(65); float y = playerSpawnPositions[0].position.y; Vector3 val = default(Vector3); for (int j = 0; j < 15; j++) { Bounds bounds = StartOfRound.Instance.shipInnerRoomBounds.bounds; int minValue = (int)((Bounds)(ref bounds)).min.x; bounds = StartOfRound.Instance.shipInnerRoomBounds.bounds; float num = random.Next(minValue, (int)((Bounds)(ref bounds)).max.x); bounds = StartOfRound.Instance.shipInnerRoomBounds.bounds; int minValue2 = (int)((Bounds)(ref bounds)).min.z; bounds = StartOfRound.Instance.shipInnerRoomBounds.bounds; ((Vector3)(ref val))..ctor(num, y, (float)random.Next(minValue2, (int)((Bounds)(ref bounds)).max.z)); val = ((Component)StartOfRound.Instance.shipInnerRoomBounds).transform.InverseTransformPoint(val); Debug.DrawRay(val, Vector3.up, Color.yellow, 15f); if (!Physics.CheckSphere(val, 0.12f, 67108864, (QueryTriggerInteraction)1)) { return playerSpawnPositions[j].position; } } return playerSpawnPositions[0].position + Vector3.up * 0.5f; } } [HarmonyPatch(typeof(StartOfRound))] internal class StartOfRoundPatch { [HarmonyPatch(typeof(StartOfRound), "EndOfGame")] [HarmonyPostfix] private static void undo(StartOfRound __instance) { Plugin.startLogic = false; Plugin.teams.Clear(); if (!((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsServer && !((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsHost) { return; } PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { UnlockableSuit[] array = Object.FindObjectsOfType<UnlockableSuit>(true); UnlockableSuit[] array2 = array; foreach (UnlockableSuit val2 in array2) { if (val2.suitID == 2) { val2.SwitchSuitToThis(val); } } } } [HarmonyPatch(typeof(StartOfRound), "WritePlayerNotes")] [HarmonyPrefix] private static void teams() { PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { if ((!val.disconnectedMidGame && !val.isPlayerDead && !val.isPlayerControlled) || !Plugin.teams.ContainsKey(val)) { continue; } if (DictionaryExtensions.Get<PlayerControllerB, int>((IDictionary<PlayerControllerB, int>)Plugin.teams, val, 0) == 0) { StartOfRound.Instance.gameStats.allPlayerStats[val.playerClientId].playerNotes.Add(SyncedInstance<Config>.Instance.team1Name.Value + " Team"); if (Plugin.redScore >= Plugin.blueScore) { StartOfRound.Instance.gameStats.allPlayerStats[val.playerClientId].playerNotes.Add("Won the game!"); } else { StartOfRound.Instance.gameStats.allPlayerStats[val.playerClientId].playerNotes.Add("Lost the game.."); } } if (DictionaryExtensions.Get<PlayerControllerB, int>((IDictionary<PlayerControllerB, int>)Plugin.teams, val, 0) == 1) { StartOfRound.Instance.gameStats.allPlayerStats[val.playerClientId].playerNotes.Add(SyncedInstance<Config>.Instance.team2Name.Value + " Team"); if (Plugin.blueScore >= Plugin.redScore) { StartOfRound.Instance.gameStats.allPlayerStats[val.playerClientId].playerNotes.Add("Won the game!"); } else { StartOfRound.Instance.gameStats.allPlayerStats[val.playerClientId].playerNotes.Add("Lost the game.."); } } } } [HarmonyPatch(typeof(StartOfRound), "StartGame")] [HarmonyPostfix] private static void gammaPatch(StartOfRound __instance) { int num = 0; int num2 = 0; int num3 = 0; if (!((NetworkBehaviour)__instance).IsServer && !((NetworkBehaviour)__instance).IsHost) { return; } PlayerControllerB[] array = (PlayerControllerB[])RoundManager.Instance.playersManager.allPlayerScripts.Clone(); Randomizer.Randomize(array); PlayerControllerB[] array2 = array; foreach (PlayerControllerB val in array2) { if (val.currentSuitID == SyncedInstance<Config>.Instance.team1Suit.Value) { num2++; } if (val.currentSuitID == SyncedInstance<Config>.Instance.team2Suit.Value) { num++; } } PlayerControllerB[] array3 = array; foreach (PlayerControllerB val2 in array3) { if (!val2.isPlayerControlled) { continue; } if (val2.currentSuitID != SyncedInstance<Config>.Instance.team1Suit.Value && val2.currentSuitID != SyncedInstance<Config>.Instance.team2Suit.Value) { if (num2 <= num) { HUDManager.Instance.AddTextToChatOnServer("<color=" + SyncedInstance<Config>.Instance.team1ColorCode.Value + ">" + val2.playerUsername + " was put on " + SyncedInstance<Config>.Instance.team1Name.Value + "!", -1); num3 = 0; num2++; } else { HUDManager.Instance.AddTextToChatOnServer("<color=" + SyncedInstance<Config>.Instance.team2ColorCode.Value + ">" + val2.playerUsername + " was put on " + SyncedInstance<Config>.Instance.team2Name.Value + "!", -1); num++; num3 = 1; } if (Plugin.teams.ContainsKey(val2)) { Plugin.teams.Remove(val2); } Plugin.teams.Add(val2, num3); } if (val2.currentSuitID == SyncedInstance<Config>.Instance.team1Suit.Value) { HUDManager.Instance.AddTextToChatOnServer("<color=" + SyncedInstance<Config>.Instance.team1ColorCode.Value + ">" + val2.playerUsername + " was put on " + SyncedInstance<Config>.Instance.team1Name.Value + "!", -1); if (Plugin.teams.ContainsKey(val2)) { Plugin.teams.Remove(val2); } Plugin.teams.Add(val2, 0); } if (val2.currentSuitID == SyncedInstance<Config>.Instance.team2Suit.Value) { HUDManager.Instance.AddTextToChatOnServer("<color=" + SyncedInstance<Config>.Instance.team2ColorCode.Value + ">" + val2.playerUsername + " was put on " + SyncedInstance<Config>.Instance.team2Name.Value + "!", -1); if (Plugin.teams.ContainsKey(val2)) { Plugin.teams.Remove(val2); } Plugin.teams.Add(val2, 1); } } } [HarmonyPatch(typeof(StartOfRound), "EndGameClientRpc")] [HarmonyPostfix] private static void fine(StartOfRound __instance, ref int playerClientId) { //IL_005c: Unknown result type (might be due to invalid IL or missing references) if (playerClientId == -1) { return; } StartOfRound.Instance.localPlayerController.isInElevator = true; StartOfRound.Instance.localPlayerController.isInHangarShipRoom = true; StartOfRound.Instance.localPlayerController.isInsideFactory = false; StartOfRound.Instance.localPlayerController.TeleportPlayer(RoundManagerPatch.GetPlayerSpawnPosition((int)StartOfRound.Instance.localPlayerController.playerClientId, simpleTeleport: true), false, 0f, false, true); PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[playerClientId]; if (Plugin.finedForShip) { return; } Plugin.finedForShip = true; int num = (int)(TimeOfDay.Instance.normalizedTimeOfDay * (60f * (float)TimeOfDay.Instance.numberOfHours)) + 360; int num2 = (int)Mathf.Floor((float)(num / 60)); if (!Plugin.teams.ContainsKey(val) || num2 >= SyncedInstance<Config>.Instance.graceTime.Value) { return; } if (DictionaryExtensions.Get<PlayerControllerB, int>((IDictionary<PlayerControllerB, int>)Plugin.teams, val, 0) == 0) { if (((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsServer || ((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsHost) { HUDManager.Instance.AddTextToChatOnServer("<color=" + SyncedInstance<Config>.Instance.team1ColorCode.Value + ">" + SyncedInstance<Config>.Instance.team1Name.Value + " <color=red>was fined for leaving the ship early...", -1); HUDManager.Instance.DisplayTip("Fined!", SyncedInstance<Config>.Instance.team1Name.Value + " was fined for leaving!", true, false, "LC_Tip1"); } Plugin.redScore -= SyncedInstance<Config>.Instance.fineAmount.Value; } else { if (((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsServer || ((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsHost) { HUDManager.Instance.AddTextToChatOnServer("<color=" + SyncedInstance<Config>.Instance.team2ColorCode.Value + ">" + SyncedInstance<Config>.Instance.team2Name.Value + " <color=red>was fined for leaving the ship early...", -1); HUDManager.Instance.DisplayTip("Fined!", SyncedInstance<Config>.Instance.team1Name.Value + " was fined for leaving!", true, false, "LC_Tip1"); } Plugin.blueScore -= SyncedInstance<Config>.Instance.fineAmount.Value; } } } }