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 TheCompany v0.1.9
TheCompany.dll
Decompiled 2 years agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Net.Http; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using StaticNetcodeLib; using TheCompany.AI; using TheCompany.Components; using TheCompany.Enemy; using TheCompany.Patches; using TheCompany.Patches.Enemy; using Unity.Netcode; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("TheCompany")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("TheCompany")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("cb833b0f-d0cd-4e40-bf49-09f5f36ff617")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace TheCompany { internal class ItemUtils { public static void GetItems(string name) { Dictionary<string, Item> all = new Dictionary<string, Item>(); StartOfRound.Instance.allItemsList.itemsList.ForEach(delegate(Item item) { all.Add(((Object)item).name, item); TheCompanyMod.logger.LogInfo((object)((Object)item).name); }); } } internal class ModMenu : MonoBehaviour { internal static ModMenu Instance; internal bool Visible = false; private const int MENUWIDTH = 600; private const int MENUHEIGHT = 800; private int MENUX; private int MENUY; private int ITEMWIDTH = 200; private int CENTERX; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } MENUX = Screen.width / 2; MENUY = Screen.height / 2; CENTERX = MENUX + (300 - ITEMWIDTH / 2); } private void Update() { } private void OnGUI() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) if (Visible) { GUI.Box(new Rect((float)MENUX, (float)MENUY, 600f, 800f), "The word of The Company"); } } private Texture2D MakeTex(int width, int height, Color color) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Expected O, but got Unknown Color[] array = (Color[])(object)new Color[width * height]; for (int i = 0; i < array.Length; i++) { array[i] = color; } Texture2D val = new Texture2D(width, height); val.SetPixels(array); val.Apply(); return val; } } [BepInPlugin("Xexplotion.TheCompany", "The Company", "0.1.6")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class TheCompanyMod : BaseUnityPlugin { private const string modGUID = "Xexplotion.TheCompany"; private const string modName = "The Company"; private const string modVersion = "0.1.6"; private readonly Harmony harmony = new Harmony("Xexplotion.TheCompany"); internal static TheCompanyMod Instance; internal static ManualLogSource logger; internal ModMenu modMenu; public static GameObject poofExplosion; public static AudioClip poofSFX; internal static AssetBundle EasterEggBundle; public static TheCompanyConfig BoundConfig { get; private set; } private void Awake() { //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Expected O, but got Unknown //IL_0255: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) BoundConfig = new TheCompanyConfig(((BaseUnityPlugin)this).Config); if ((Object)(object)Instance == (Object)null) { Instance = this; } logger = Logger.CreateLogSource("Xexplotion.TheCompany"); logger.LogInfo((object)"All shall provail under my rain >:)"); harmony.PatchAll(typeof(TheCompanyMod)); harmony.PatchAll(typeof(PlayerControllerBPatch)); harmony.PatchAll(typeof(ShovelPatch)); harmony.PatchAll(typeof(GameNetworkManagerPatch)); harmony.PatchAll(typeof(StartOfRoundPatch)); harmony.PatchAll(typeof(IHitablePatch)); harmony.PatchAll(typeof(ShotGunPatch)); harmony.PatchAll(typeof(ThumperPatch)); harmony.PatchAll(typeof(BaboonHawkPatch)); harmony.PatchAll(typeof(BunkerSpiderPatch)); harmony.PatchAll(typeof(CoilheadPatch)); harmony.PatchAll(typeof(CentipedePatch)); harmony.PatchAll(typeof(PufferPatch)); harmony.PatchAll(typeof(BlobPatch)); harmony.PatchAll(typeof(CoilheadPatch)); harmony.PatchAll(typeof(MaskedPatch)); harmony.PatchAll(typeof(EyelessDogPatch)); harmony.PatchAll(typeof(ForestGiantAI)); GameObject val = new GameObject("ModMenu"); Object.DontDestroyOnLoad((Object)(object)val); ((Object)val).hideFlags = (HideFlags)61; val.AddComponent<ModMenu>(); modMenu = (ModMenu)(object)val.GetComponent("ModMenu"); string text = ((BaseUnityPlugin)Instance).Info.Location.TrimEnd("TheCompany.dll".ToCharArray()) + "Assets/easteregg.assetbundle"; EasterEggBundle = AssetBundle.LoadFromFile(text); GameObject val2 = EasterEggBundle.LoadAsset<GameObject>("EasterEgg.prefab"); GameObject val3 = Object.Instantiate<GameObject>(val2, default(Vector3), Quaternion.identity); StunGrenadeItem component = val3.GetComponent<StunGrenadeItem>(); poofExplosion = component.stunGrenadeExplosion; poofSFX = component.explodeSFX; Object.Destroy((Object)(object)val2); Object.Destroy((Object)(object)val3); } } public static class ReflectionsExtensions { public static T GetFieldValue<T>(this object obj, string name) { BindingFlags bindingAttr = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; FieldInfo field = obj.GetType().GetField(name, bindingAttr); if (field == null) { return default(T); } return (T)(field?.GetValue(obj)); } } public class TheCompanyConfig { public readonly ConfigEntry<bool> enableGod; public readonly ConfigEntry<bool> disableNonServerExplosions; public TheCompanyConfig(ConfigFile cfg) { cfg.SaveOnConfigSet = false; enableGod = cfg.Bind<bool>("General", "GodEnabled", true, "Enables or disables god."); disableNonServerExplosions = cfg.Bind<bool>("General", "NoExplosionClients", false, "Disabled explosions from non server hosts."); ClearOrphanedEntries(cfg); cfg.Save(); cfg.SaveOnConfigSet = true; } private static void ClearOrphanedEntries(ConfigFile cfg) { PropertyInfo propertyInfo = AccessTools.Property(typeof(ConfigFile), "OrphanedEntries"); Dictionary<ConfigDefinition, string> dictionary = (Dictionary<ConfigDefinition, string>)propertyInfo.GetValue(cfg); dictionary.Clear(); } } } namespace TheCompany.Patches { [HarmonyPatch(typeof(EnemyAI))] internal class EnemyAIPatch { [HarmonyPatch("OnCollideWithPlayer")] [HarmonyPostfix] public static void OnPlayerKilled(Collider other, EnemyAI __instance) { if ((Object)(object)__instance != (Object)null && (Object)(object)other != (Object)null) { PlayerControllerB val = __instance.MeetsStandardPlayerCollisionConditions(other, __instance.GetFieldValue<bool>("inKillAnimation"), false); DivineMessenger divineMessenger = default(DivineMessenger); if ((Object)(object)val != (Object)null && ((Component)__instance).TryGetComponent<DivineMessenger>(ref divineMessenger) && (Object)(object)divineMessenger.target != (Object)null && !((Object)(object)val == (Object)(object)divineMessenger.target)) { } } } private static IEnumerator Explode(GameObject entity, PlayerControllerB player) { if (!((Object)(object)TheCompanyMod.poofExplosion == (Object)null) && !((Object)(object)TheCompanyMod.poofSFX == (Object)null)) { yield return (object)new WaitForSeconds(2f); Object.Instantiate<GameObject>(TheCompanyMod.poofExplosion, entity.transform.position, Quaternion.identity); Object.Destroy((Object)(object)entity.gameObject); } } } [HarmonyPatch(typeof(GameNetworkManager))] internal class GameNetworkManagerPatch { [HarmonyPatch("Start")] [HarmonyPrefix] public static void StartPatch() { } } [HarmonyPatch(typeof(GrabbableObject))] internal class GrabbableObjectPatch { [HarmonyPatch("OnHitGround")] [HarmonyPrefix] public static void postOnHitGround(GrabbableObject __instance) { if (__instance.scrapValue != 0 && __instance.isInShipRoom && StartOfRound.Instance.inShipPhase) { } } } [HarmonyPatch(typeof(PlayerControllerB))] internal class IHitablePatch { [HarmonyTargetMethod] public static MethodBase TargetMethod() { return AccessTools.Method(typeof(PlayerControllerB), "IHittable.Hit", new Type[5] { typeof(int), typeof(Vector3), typeof(PlayerControllerB), typeof(bool), typeof(int) }, (Type[])null); } [HarmonyPostfix] public static bool Prefix(int force, Vector3 hitDirection, PlayerControllerB playerWhoHit, bool playHitSFX, int hitID, PlayerControllerB __instance) { if (__instance.criticallyInjured && __instance.health - 20 <= 0) { GodClient.CastJudgementManual(GodClient.JudgementType.Action, __instance.actualClientId, playerWhoHit.actualClientId); } return true; } } [HarmonyPatch(typeof(PlayerControllerB))] [StaticNetcode] internal class PlayerControllerBPatch { [HarmonyPatch("Awake")] [HarmonyPostfix] public static void postAwake(PlayerControllerB __instance) { ((Component)__instance).gameObject.AddComponent<GodsOpinion>(); } [HarmonyPatch("KillPlayerClientRpc")] [HarmonyPostfix] public static void postKilledPlayer(int playerId, bool spawnBody, Vector3 bodyVelocity, int causeOfDeath, int deathAnimation, Vector3 positionOffset) { DivineMessenger[] array = Object.FindObjectsOfType<DivineMessenger>(); foreach (DivineMessenger divineMessenger in array) { if ((Object)(object)StartOfRound.Instance.allPlayerScripts[playerId] == (Object)(object)divineMessenger.target && !divineMessenger.completed) { divineMessenger.Despawn(); } } } [HarmonyPatch("SetItemInElevator")] [HarmonyPostfix] public static void PostSetItemInElevator(bool droppedInShipRoom, bool droppedInElevator, GrabbableObject gObject, PlayerControllerB __instance) { if (droppedInShipRoom && (Object)(object)((Component)gObject).gameObject.GetComponent<CollectComponent>() == (Object)null) { ((Component)gObject).gameObject.AddComponent<CollectComponent>(); ((Component)gObject).gameObject.GetComponent<CollectComponent>().Collect(); ((Component)__instance).GetComponent<GodsOpinion>().ChangeBias((float)gObject.scrapValue / 100f); } } [HarmonyPatch("Update")] [HarmonyPostfix] public static void postUpdate(PlayerControllerB __instance) { if ((!TheCompanyMod.BoundConfig.disableNonServerExplosions.Value || ((NetworkBehaviour)__instance).IsHost) && ((__instance.isPlayerControlled && (!((NetworkBehaviour)__instance).IsServer || __instance.isHostPlayerObject)) || __instance.isTestingPlayer) && ((ButtonControl)Keyboard.current.xKey).wasPressedThisFrame) { TheCompanyMod.logger.LogInfo((object)"Exploding..."); explode(__instance); if (((NetworkBehaviour)__instance).IsServer) { SyncExplosionClientRpc(__instance.actualClientId); } } } private static void explode(PlayerControllerB sendingPlayer) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)TheCompanyMod.poofExplosion == (Object)null) && !((Object)(object)TheCompanyMod.poofSFX == (Object)null)) { Object.Instantiate<GameObject>(TheCompanyMod.poofExplosion, ((Component)sendingPlayer).transform.position, Quaternion.identity); AudioSource.PlayClipAtPoint(TheCompanyMod.poofSFX, ((Component)sendingPlayer).transform.position); } } [ServerRpc(RequireOwnership = false)] public static void SyncExplosionServerRpc(ulong sendingClientId) { SyncExplosionClientRpc(sendingClientId); } [ClientRpc] public static void SyncExplosionClientRpc(ulong sendingClientId) { TheCompanyMod.logger.LogInfo((object)$"received rpc for {sendingClientId}"); if (!((NetworkBehaviour)StartOfRound.Instance.allPlayerScripts[sendingClientId]).IsOwner) { PlayerControllerB sendingPlayer = StartOfRound.Instance.allPlayerScripts[sendingClientId]; explode(sendingPlayer); } } } internal class QuickMenuManagerPatch { [HarmonyPatch("OpenQuickMenu")] [HarmonyPrefix] public static void OpenMenu() { TheCompanyMod.Instance.modMenu.Visible = true; } [HarmonyPatch("CloseQuickMenu")] [HarmonyPrefix] public static void CloseMenu() { TheCompanyMod.Instance.modMenu.Visible = false; } [HarmonyPatch("LeaveGameConfirm")] [HarmonyPrefix] public static void CloseMenuOnLeaveGame() { TheCompanyMod.Instance.modMenu.Visible = false; } } [HarmonyPatch(typeof(ShotgunItem))] [StaticNetcode] internal class ShotGunPatch { [HarmonyPatch("ShootGun")] [HarmonyPostfix] public static void PostShoot(Vector3 shotgunPosition, Vector3 shotgunForward, ShotgunItem __instance) { //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) bool flag = false; if (((GrabbableObject)__instance).isHeld && (Object)(object)((GrabbableObject)__instance).playerHeldBy != (Object)null && (Object)(object)((GrabbableObject)__instance).playerHeldBy == (Object)(object)GameNetworkManager.Instance.localPlayerController) { flag = true; } if (((GrabbableObject)__instance).isHeldByEnemy) { return; } PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if ((Object)(object)localPlayerController == (Object)null) { return; } Vector3 val = localPlayerController.playerCollider.ClosestPoint(shotgunPosition); if (!flag && !Physics.Linecast(shotgunPosition, val, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1) && Vector3.Angle(shotgunForward, val - shotgunPosition) < 30f) { float num = Vector3.Distance(((Component)localPlayerController).transform.position, ((Component)__instance.shotgunRayPoint).transform.position); int num2 = 0; if (num < 5f) { num2 = 100; } if (num < 15f) { num2 = 100; } else if (num < 23f) { num2 = 40; } else if (num < 30f) { num2 = 20; } if (localPlayerController.health - num2 <= 0 && !localPlayerController.hasBegunSpectating) { IWasShotServerRpc(localPlayerController.actualClientId, ((GrabbableObject)__instance).playerHeldBy.actualClientId); } } } [ServerRpc(RequireOwnership = false)] public static void IWasShotServerRpc(ulong sendingClientId, ulong whoShotMeId) { GodClient.CastJudgementManual(GodClient.JudgementType.Action, sendingClientId, whoShotMeId); } } [HarmonyPatch(typeof(Shovel))] internal class ShovelPatch { [HarmonyPatch("HitShovel")] [HarmonyPostfix] public static void postUpdate(bool cancel, Shovel __instance) { } } [HarmonyPatch(typeof(RoundManager))] internal class SpawnScrapInLevelPatch { [HarmonyPatch("SpawnScrapInLevel")] [HarmonyPostfix] public static void postSpawnScrapInLevel(RoundManager __instance) { __instance.currentLevel.spawnableScrap.ForEach(delegate(SpawnableItemWithRarity scrap) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) if (((Object)scrap.spawnableItem).name.Equals("EasterEgg")) { GameObject spawnPrefab = scrap.spawnableItem.spawnPrefab; GameObject val = Object.Instantiate<GameObject>(spawnPrefab, default(Vector3), Quaternion.identity, __instance.spawnedScrapContainer); StunGrenadeItem component = val.GetComponent<StunGrenadeItem>(); if ((Object)(object)component != (Object)null) { TheCompanyMod.poofExplosion = component.stunGrenadeExplosion; TheCompanyMod.poofSFX = component.explodeSFX; } Object.Destroy((Object)(object)val); } }); } } [StaticNetcode] [HarmonyPatch(typeof(StartOfRound))] internal class StartOfRoundPatch { [HarmonyPatch("EndOfGame")] [HarmonyPostfix] public static void PostEndOfGame(int bodiesInsured, int connectedPlayersOnServer, int scrapCollected, StartOfRound __instance) { //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) int num = 0; int num2 = 0; for (int i = 0; i < __instance.gameStats.allPlayerStats.Length; i++) { if (__instance.gameStats.allPlayerStats[i].isActivePlayer && __instance.gameStats.allPlayerStats[i].profitable < num2) { num = i; num2 = __instance.gameStats.allPlayerStats[i].profitable; } } PlayerStats val = __instance.gameStats.allPlayerStats[num]; PlayerControllerB val2 = StartOfRound.Instance.allPlayerScripts[num]; if (!(((Component)val2).GetComponent<GodsOpinion>().GetBias() >= 3f)) { return; } HashSet<Item> source = (from item in Resources.FindObjectsOfTypeAll<Item>() where Object.op_Implicit((Object)(object)item.spawnPrefab) select item).ToHashSet(); HashSet<Item> hashSet = source.Where((Item scrap) => scrap.isScrap).ToHashSet(); foreach (Item item in hashSet) { if (((Object)item).name == "Zeddog") { GameObject val3 = Object.Instantiate<GameObject>(item.spawnPrefab, ((Component)val2).transform.position, Quaternion.identity); int num3 = Mathf.RoundToInt(((Component)val2).GetComponent<GodsOpinion>().GetBias() * 30f); val3.GetComponent<GrabbableObject>().SetScrapValue(num3); val3.GetComponent<GrabbableObject>().Start(); val3.GetComponent<GrabbableObject>().isInShipRoom = true; NetworkObject componentInChildren = val3.gameObject.GetComponentInChildren<NetworkObject>(); ((Component)val2).GetComponent<GodsOpinion>().ChangeBias(((Component)val2).GetComponent<GodsOpinion>().GetBias() * 0f); componentInChildren.Spawn(true); UpdateRewardClientRpc(NetworkBehaviourReference.op_Implicit((NetworkBehaviour)(object)val3.GetComponent<GrabbableObject>()), num3); } } } [ClientRpc] public static void UpdateRewardClientRpc(NetworkBehaviourReference rewardObject, int reward) { GrabbableObject val = default(GrabbableObject); if (((NetworkBehaviourReference)(ref rewardObject)).TryGet<GrabbableObject>(ref val, (NetworkManager)null)) { val.SetScrapValue(reward); } } } } namespace TheCompany.Patches.Enemy { [HarmonyPatch(typeof(BaboonBirdAI))] internal class BaboonHawkPatch { [HarmonyPatch("killPlayerAnimation")] [HarmonyPostfix] public static void OnKillPlayerAnimation(int playerObject, BaboonBirdAI __instance) { if ((Object)(object)((EnemyAI)__instance).targetPlayer == (Object)(object)((Component)__instance).GetComponent<DivineMessenger>()?.target) { ((Component)__instance).GetComponent<DivineMessenger>()?.Complete(); } } } [HarmonyPatch(typeof(BlobAI))] internal class BlobPatch { [HarmonyPatch("eatPlayerBody")] [HarmonyPostfix] public static void PostEatBody(BlobAI __instance) { if ((Object)(object)((EnemyAI)__instance).targetPlayer == (Object)(object)((Component)__instance).GetComponent<DivineMessenger>()?.target) { ((Component)__instance).GetComponent<DivineMessenger>()?.Complete(); } } } [HarmonyPatch(typeof(SandSpiderAI))] internal class BunkerSpiderPatch { [HarmonyPatch("turnBodyIntoWeb")] [HarmonyPostfix] public static void OnTurnBodyIntoWeb(SandSpiderAI __instance) { if ((Object)(object)((EnemyAI)__instance).targetPlayer == (Object)(object)((Component)__instance).GetComponent<DivineMessenger>()?.target) { ((Component)__instance).GetComponent<DivineMessenger>()?.Complete(); } } } [HarmonyPatch(typeof(CentipedeAI))] internal class CentipedePatch { [HarmonyPatch("UnclingFromPlayer")] [HarmonyPostfix] public static void OnUnclingFromPlayer(PlayerControllerB playerBeingKilled, bool playerDead, CentipedeAI __instance) { if (playerDead && (Object)(object)playerBeingKilled == (Object)(object)((Component)__instance).GetComponent<DivineMessenger>()?.target) { ((Component)__instance).GetComponent<DivineMessenger>()?.Complete(); } } } [HarmonyPatch(typeof(SpringManAI))] internal class CoilheadPatch { [HarmonyPatch("OnCollideWithPlayer")] [HarmonyPrefix] public static void OnOnCollideWithPlayer(Collider other, SpringManAI __instance) { PlayerControllerB val = ((EnemyAI)__instance).MeetsStandardPlayerCollisionConditions(other, false, false); if (val.health - 90 <= 0 && (Object)(object)val == (Object)(object)((Component)__instance).GetComponent<DivineMessenger>()?.target) { ((Component)__instance).GetComponent<DivineMessenger>()?.Complete(); } } } [HarmonyPatch(typeof(MouthDogAI))] internal class EyelessDogPatch { [HarmonyPatch("StopKillAnimation")] [HarmonyPostfix] public static void OnStopKillAnimation(MouthDogAI __instance) { if ((Object)(object)__instance.GetFieldValue<DeadBodyInfo>("carryingBody") != (Object)null && (Object)(object)__instance.GetFieldValue<DeadBodyInfo>("carryingBody").playerScript == (Object)(object)((Component)__instance).GetComponent<DivineMessenger>()?.target) { ((Component)__instance).GetComponent<DivineMessenger>()?.Complete(); } } } [HarmonyPatch(typeof(ForestGiantAI))] internal class ForestKeeperPatch { [HarmonyPatch("EatPlayerAnimation")] [HarmonyPostfix] private static IEnumerator OnEatPlayerAnimation(PlayerControllerB playerBeingEaten, Vector3 enemyPosition, int enemyYRot, ForestGiantAI __instance) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) yield return (object)new WaitForSeconds(4.5f); if ((Object)(object)playerBeingEaten == (Object)(object)((Component)__instance).GetComponent<DivineMessenger>()?.target) { ((Component)__instance).GetComponent<DivineMessenger>()?.Complete(); } } } [HarmonyPatch(typeof(JesterAI))] internal class JesterPatch { [HarmonyPatch("killPlayerAnimation")] [HarmonyPostfix] private static IEnumerator OnKillPlayerAnimation(int playerId, JesterAI __instance) { yield return (object)new WaitForSeconds(4.5f); if ((Object)(object)StartOfRound.Instance.allPlayerScripts[playerId] == (Object)(object)((Component)__instance).GetComponent<DivineMessenger>()?.target) { ((Component)__instance).GetComponent<DivineMessenger>()?.Complete(); } } } [HarmonyPatch(typeof(MaskedPlayerEnemy))] internal class MaskedPatch { [HarmonyPatch("FinishKillAnimation")] [HarmonyPostfix] public static void OnFinishKillAnimation(bool killedPlayer, MaskedPlayerEnemy __instance) { if (killedPlayer && (Object)(object)((EnemyAI)__instance).targetPlayer == (Object)(object)((Component)__instance).GetComponent<DivineMessenger>()?.target) { ((Component)__instance).GetComponent<DivineMessenger>()?.Complete(); } } } [HarmonyPatch(typeof(PufferAI))] internal class PufferPatch { [HarmonyPatch("stompAnimation")] [HarmonyPostfix] public static void OnStompAnimation(PufferAI __instance) { if ((Object)(object)((EnemyAI)__instance).targetPlayer == (Object)(object)((Component)__instance).GetComponent<DivineMessenger>()?.target) { ((Component)__instance).GetComponent<DivineMessenger>()?.Complete(); } } } [HarmonyPatch(typeof(CrawlerAI))] internal class ThumperPatch { [HarmonyPatch("EatPlayerBodyAnimation")] [HarmonyPostfix] public static void OnEatBody(CrawlerAI __instance) { if ((Object)(object)((EnemyAI)__instance).targetPlayer == (Object)(object)((Component)__instance).GetComponent<DivineMessenger>()?.target) { ((Component)__instance).GetComponent<DivineMessenger>()?.Complete(); } } } } namespace TheCompany.Enemy { [StaticNetcode] internal class DivineMessenger : NetworkBehaviour { public PlayerControllerB target; public bool completed; public void Complete() { completed = true; ((MonoBehaviour)this).StartCoroutine(Explode(((Component)this).gameObject, target)); } public void Despawn() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) explode(((Component)this).transform.position); if (((NetworkBehaviour)this).IsServer) { SyncExplosionServerRpc(((Component)this).transform.position); } Object.Destroy((Object)(object)((Component)this).gameObject); } private IEnumerator Explode(GameObject entity, PlayerControllerB player) { if (!((Object)(object)TheCompanyMod.poofExplosion == (Object)null) && !((Object)(object)TheCompanyMod.poofSFX == (Object)null)) { if (((Object)((Component)this).gameObject).name.Contains("MouthDog")) { yield return (object)new WaitForSeconds(3.02f); } if (((Object)((Component)this).gameObject).name.Contains("ForestGiant")) { yield return (object)new WaitForSeconds(5f); } if (((Object)((Component)this).gameObject).name.Contains("Jester")) { yield return (object)new WaitForSeconds(2.5f); } if (((Object)((Component)this).gameObject).name.Contains("Masked")) { yield return (object)new WaitForSeconds(2.5f); } explode(((Component)this).transform.position); if (((NetworkBehaviour)this).IsServer) { SyncExplosionServerRpc(((Component)this).transform.position); } Object.Destroy((Object)(object)entity); } } [ServerRpc(RequireOwnership = true)] public static void SyncExplosionServerRpc(Vector3 pos) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) SyncExplosionClientRpc(pos); } [ClientRpc] public static void SyncExplosionClientRpc(Vector3 pos) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) TheCompanyMod.logger.LogInfo((object)$"received explode rpc at {pos}"); explode(pos); } private static void explode(Vector3 pos) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)TheCompanyMod.poofExplosion == (Object)null) && !((Object)(object)TheCompanyMod.poofSFX == (Object)null)) { Object.Instantiate<GameObject>(TheCompanyMod.poofExplosion, pos, Quaternion.identity); AudioSource.PlayClipAtPoint(TheCompanyMod.poofSFX, pos); } } } internal class EnemyUtil { public static void spawn(string name, Vector3 pos, PlayerControllerB target) { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) Vector3 val = default(Vector3); FlowermanAI val3 = default(FlowermanAI); PufferAI val4 = default(PufferAI); for (int i = 0; (float)i < Mathf.Floor(((Component)target).GetComponent<GodsOpinion>().GetBias() * -1f - 0.5f); i++) { ((Vector3)(ref val))..ctor(Random.Range(-7f, 7f), 0f, Random.Range(-7f, 7f)); GameObject val2 = Object.Instantiate<GameObject>(GeneralExtensions.GetValueSafe<string, EnemyType>(GetEnemies(), name).enemyPrefab, pos + val, Quaternion.identity); if (val2.TryGetComponent<FlowermanAI>(ref val3)) { val3.AvoidClosestPlayer(); } if (val2.TryGetComponent<PufferAI>(ref val4)) { val4.ShakeTailServerRpc(); } DivineMessenger divineMessenger = val2.AddComponent(typeof(DivineMessenger)) as DivineMessenger; divineMessenger.target = target; divineMessenger.completed = false; val2.GetComponentInChildren<NetworkObject>().Spawn(true); } } public static Dictionary<string, EnemyType> GetEnemies() { Dictionary<string, EnemyType> dictionary = new Dictionary<string, EnemyType>(); SelectableLevel[] levels = StartOfRound.Instance.levels; foreach (SelectableLevel val in levels) { if (!((Object)(object)val != (Object)null)) { continue; } IEnumerable<SpawnableEnemyWithRarity> enumerable = val.OutsideEnemies.Concat(val.DaytimeEnemies); foreach (SpawnableEnemyWithRarity item in enumerable) { if ((Object)(object)item.enemyType != (Object)null && !dictionary.ContainsKey(item.enemyType.enemyName)) { dictionary.Add(item.enemyType.enemyName, item.enemyType); } } foreach (SpawnableEnemyWithRarity enemy in val.Enemies) { if ((Object)(object)enemy.enemyType != (Object)null && !dictionary.ContainsKey(enemy.enemyType.enemyName)) { dictionary.Add(enemy.enemyType.enemyName, enemy.enemyType); } } } return dictionary; } } } namespace TheCompany.Components { internal class CollectComponent : NetworkBehaviour { private bool wasCollected; public void Collect() { wasCollected = true; } public bool WasCollected() { return wasCollected; } } internal class GodsOpinion : NetworkBehaviour { private float bias; public void Awake() { bias = 0f; } public float GetBias() { return bias; } public void ChangeBias(float amount) { bias += amount; } } } namespace TheCompany.AI { [StaticNetcode] internal class GodClient { public enum JudgementType { SpokenWord, Action } private static readonly HttpClient client = new HttpClient(); private static Random random = new Random(); private static List<string> spokenWordPunishments = new List<string> { "[Commiter], for your blasphemy, you shall be punished with a [Punishment], a fitting end for one who dares defy a god's will.", "[Commiter], your blasphemy has brought forth the wrath of the divine. I condemn you to die by a [Punishment], a sentence befitting your arrogance.", "[Commiter], for your blasphemous words, I sentence you to a [Punishment]. Let this punishment remind all that the divine is not to be questioned.", "[Commiter], your blasphemy echoes through the realms. As a result, you shall endure a [Punishment], a fate designed to crush the pride you dared show.", "[Commiter], for your affront against divinity, you are cursed with a [Punishment]. May this punishment haunt you, as your words have desecrated the sacred." }; private static List<string> actionPunishments = new List<string> { "[Commiter], for your transgression against [Victim], I deem you worthy of retribution. You have violated the natural order with your actions, and thus, you shall face a [Punishment]. Know that your cruelty cannot go unanswered.", "In your reckless pursuit of power, [Commiter], you have wronged [Victim]. Such a vile deed cannot go unpunished. I sentence you to deal with a [Punishment], as a reminder that no soul escapes judgment.", "Your actions, [Commiter], have brought harm to [Victim], disturbing the balance of this realm. For this crime, you shall suffer from a [Punishment], for balance must be restored, and your wrongdoing cannot be ignored.", "For the betrayal of [Victim], I, as ruler of this realm, decree that [Commiter] shall endure a [Punishment]. Let this serve as a lesson that those who harm others shall be repaid tenfold in suffering.", "[Commiter], you have crossed a line that should never have been breached. Your cruelty toward [Victim] brings you to my attention. As penance, you are condemned to die by a [Punishment]. Such malice will never go unpunished under my gaze." }; private static Dictionary<string, string> outdoorEnemies = new Dictionary<string, string> { { "Eyeless Dog", "MouthDog" }, { "Forest Giant", "ForestGiant" }, { "Earthworm", "Earth Leviatian" }, { "Baboon Hawk", "Baboon Hawk" }, { "Old Bird", "RadMech" } }; private static Dictionary<string, string> indoorEnemies = new Dictionary<string, string> { { "Bracken", "Flowerman" }, { "Jester", "Jester" }, { "Nutcracker", "Nutcracker" }, { "Coilhead", "Spring" }, { "Bunker Spider", "Bunker Spider" }, { "Thumper", "Crawler" }, { "Mimic", "Masked" }, { "Maneater", "Maneater" }, { "Butler", "Butler" }, { "Snare Flea", "Centipede" }, { "Spore Lizard", "Puffer" } }; public static void CastJudgementManual(JudgementType type, ulong victimId, ulong commiterId) { //IL_015f: 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_017e: Unknown result type (might be due to invalid IL or missing references) if (TheCompanyMod.BoundConfig.enableGod.Value && ((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsOwner && GameNetworkManager.Instance.localPlayerController.playerClientId == 0) { string text = ""; switch (type) { case JudgementType.SpokenWord: text = spokenWordPunishments[random.Next(spokenWordPunishments.Count)]; break; case JudgementType.Action: text = actionPunishments[random.Next(actionPunishments.Count)]; break; } PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[commiterId]; if (type == JudgementType.Action) { ((Component)val).gameObject.GetComponent<GodsOpinion>().ChangeBias(-1.5f); } text = text.Replace("[Commiter]", val.playerUsername); text = text.Replace("[Victim]", StartOfRound.Instance.allPlayerScripts[victimId].playerUsername); string punishment = getPunishment(val.isInsideFactory); text = text.Replace("[Punishment]", punishment); if (val.isInsideFactory) { EnemyUtil.spawn(GeneralExtensions.GetValueSafe<string, string>(indoorEnemies, punishment), ((Component)val).transform.position, val); } else { EnemyUtil.spawn(GeneralExtensions.GetValueSafe<string, string>(outdoorEnemies, punishment), ((Component)val).transform.position, val); } SendTipServerRpc(text, ((Component)StartOfRound.Instance.allPlayerScripts[commiterId]).transform.position); } } private static string getPunishment(bool inside) { if (inside) { List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>(indoorEnemies); int index = random.Next(list.Count); return list[index].Key; } List<KeyValuePair<string, string>> list2 = new List<KeyValuePair<string, string>>(outdoorEnemies); int index2 = random.Next(list2.Count); return list2[index2].Key; } [ServerRpc(RequireOwnership = true)] public static void SendTipServerRpc(string tip, Vector3 pos) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) List<ulong> list = new List<ulong>(); PlayerControllerB[] array = Object.FindObjectsByType<PlayerControllerB>((FindObjectsSortMode)0); foreach (PlayerControllerB val in array) { float num = Vector3.Distance(((Component)val).transform.position, pos); if (num <= 50f) { TheCompanyMod.logger.LogInfo((object)$"Found PlayerController {((Object)((Component)val).gameObject).name} within {num} units."); list.Add(val.actualClientId); } } SendTipClientRpc(tip, pos, list); } [ClientRpc] public static void SendTipClientRpc(string tip, Vector3 pos, List<ulong> clientIds) { if (clientIds.Contains(GameNetworkManager.Instance.localPlayerController.actualClientId)) { HUDManager.Instance.DisplayTip("Divine Guidence", tip, true, false, "LC_Tip1"); } } } }