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 ViniModTrolling v1.2.1
ViniMod.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; 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 Unity.Collections; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; using ViniMod.Patches; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("ViniMod")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ViniMod")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("40cae2cb-bb3e-49f1-b936-e751b774f718")] [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 ViniMod { public class ConfigSettings { public List<ulong> SteamIdsList = new List<ulong>(); public List<ulong> CoilHeadTargetsList = new List<ulong>(); public List<ulong> YippeBoomTargetsList = new List<ulong>(); public ConfigEntry<string> SteamIds { get; set; } public ConfigEntry<string> CoilHeadTargets { get; set; } public ConfigEntry<string> YippeBoomTargets { get; set; } public ConfigEntry<string> YippeDanceTargets { get; set; } public ConfigEntry<bool> ApplyToAll { get; set; } public void LoadConfigs() { SteamIds = ((BaseUnityPlugin)ViniModBase.Instance).Config.Bind<string>("SteamIds", "SteamIdsList", "0", "Add steamID64 (Dec) in the following format: 124551,12414124,5125251"); CoilHeadTargets = ((BaseUnityPlugin)ViniModBase.Instance).Config.Bind<string>("CoilHeadTargets", "CoilHeadTargetsList", "0", "Add steamID64 (Dec) in the following format: 124551,12414124,5125251"); YippeBoomTargets = ((BaseUnityPlugin)ViniModBase.Instance).Config.Bind<string>("YippeBoomTargets", "YippeBoomTargetsList", "0", "Add steamID64 (Dec) in the following format: 124551,12414124,5125251"); ApplyToAll = ((BaseUnityPlugin)ViniModBase.Instance).Config.Bind<bool>("ApplyToAll", "ApplyToAll", true, "Apply trolling to all players in game, This will ignore the steamIDS"); try { SteamIdsList = SteamIds.Value.Split(new char[1] { ',' }).Select(ulong.Parse).ToList(); CoilHeadTargetsList = CoilHeadTargets.Value.Split(new char[1] { ',' }).Select(ulong.Parse).ToList(); YippeBoomTargetsList = YippeBoomTargets.Value.Split(new char[1] { ',' }).Select(ulong.Parse).ToList(); } catch (Exception ex) { ViniModBase.mls.LogError((object)("Invalid format for steamIds!" + ex.Message)); } } } [BepInPlugin("ViniMod", "Vini MOD", "1.1.0")] public class ViniModBase : BaseUnityPlugin { private const string modGUID = "ViniMod"; private const string modName = "Vini MOD"; private const string modVersion = "1.1.0"; public static ConfigSettings configSettings = new ConfigSettings(); private readonly Harmony harmony = new Harmony("ViniMod"); public static ViniModBase Instance; public static ManualLogSource mls; [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_Landmine() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Expected O, but got Unknown NetworkManager.Singleton.CustomMessagingManager.RegisterNamedMessageHandler("ViniMod-ClientExplodeRpc", new HandleNamedMessageDelegate(HoardingBugPatch.ExplodeYipeeClientRpc)); NetworkManager.Singleton.CustomMessagingManager.RegisterNamedMessageHandler("ViniMod-ServerExplodeRpc", new HandleNamedMessageDelegate(HoardingBugPatch.ExplodeYipeeServerRpc)); } private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } mls = Logger.CreateLogSource("ViniMod"); mls.LogDebug((object)"ViniMod has awoken!"); configSettings.LoadConfigs(); mls.LogDebug((object)"Config has awoken!"); mls = ((BaseUnityPlugin)this).Logger; harmony.PatchAll(typeof(ViniModBase)); harmony.PatchAll(typeof(RoundManagerPatch)); harmony.PatchAll(typeof(HoardingBugPatch)); harmony.PatchAll(typeof(CoilHeadPatch)); } } } namespace ViniMod.Patches { internal class CoilHeadPatch { [HarmonyPatch(typeof(SpringManAI), "Update")] [HarmonyPostfix] public static void Prefix(SpringManAI __instance, ref float ___currentAnimSpeed) { //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_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) List<PlayerControllerB> list = StartOfRound.Instance.allPlayerScripts.Where((PlayerControllerB item) => ViniModBase.configSettings.CoilHeadTargetsList.Contains(item.playerSteamId)).ToList(); if (ViniModBase.configSettings.ApplyToAll.Value) { list = StartOfRound.Instance.allPlayerScripts.ToList(); } foreach (PlayerControllerB item in list) { if (item.HasLineOfSightToPosition(((Component)__instance).transform.position + Vector3.up * 1.6f, 68f, 60, -1f) && Vector3.Distance(((Component)item.gameplayCamera).transform.position, ((EnemyAI)__instance).eye.position) > 0.3f) { if (!((NetworkBehaviour)__instance).IsServer) { ((EnemyAI)__instance).ChangeOwnershipOfEnemy(StartOfRound.Instance.allPlayerScripts[0].actualClientId); } __instance.SetAnimationGoServerRpc(); ___currentAnimSpeed = 0.01f; ((EnemyAI)__instance).creatureAnimator.SetFloat("walkSpeed", 0.01f); ((EnemyAI)__instance).agent.speed = 0.01f; } } } } internal class FlowerManPatch { [HarmonyPatch(typeof(FlowermanAI), "DoAIInterval")] [HarmonyPrefix] public static void Prefix(HoarderBugAI __instance, ref PlayerControllerB ___targetPlayer) { if (!___targetPlayer.isPlayerDead) { PlayerControllerB val = StartOfRound.Instance.allPlayerScripts.Where((PlayerControllerB item) => ViniModBase.configSettings.SteamIdsList.Contains(item.playerSteamId)).First(); ViniModBase.mls.LogDebug((object)((Object)val).name); if ((Object)(object)val != (Object)null) { ((EnemyAI)__instance).targetPlayer = val; } } } } [HarmonyPatch(typeof(HoarderBugAI))] internal class HoardingBugPatch : NetworkBehaviour { public static HoardingBugPatch hoardingBugPatchInst; [HarmonyPatch("Start")] [HarmonyPostfix] public static void startPatch() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Expected O, but got Unknown NetworkManager.Singleton.CustomMessagingManager.RegisterNamedMessageHandler("ViniMod-ClientExplodeRpc", new HandleNamedMessageDelegate(ExplodeYipeeClientRpc)); NetworkManager.Singleton.CustomMessagingManager.RegisterNamedMessageHandler("ViniMod-ServerExplodeRpc", new HandleNamedMessageDelegate(ExplodeYipeeServerRpc)); } [HarmonyPatch(typeof(HoarderBugAI), "DetectAndLookAtPlayers")] [HarmonyPostfix] public static void Postfix(HoarderBugAI __instance, ref bool ___isEnemyDead, ref float ___annoyanceMeter, ref Vector3 ___serverPosition) { //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) PlayerControllerB val; try { val = ((EnemyAI)__instance).GetClosestPlayer(true, true, true); } catch { val = null; } if ((Object)(object)val == (Object)null) { return; } if ((Object)(object)hoardingBugPatchInst == (Object)null) { hoardingBugPatchInst = new HoardingBugPatch(); } if ((ViniModBase.configSettings.YippeBoomTargetsList.Contains(val.playerSteamId) || ViniModBase.configSettings.ApplyToAll.Value) && !___isEnemyDead && ((Object)(object)__instance?.angryAtPlayer != (Object)null || ___annoyanceMeter > 1.5f || Vector3.Distance(((Component)val).transform.position, ___serverPosition) < 5f)) { ViniModBase.mls.LogDebug((object)("Yipeee BOOM!" + ((Object)((Component)val).transform).name + " " + val.playerUsername + "\n")); RoundManager.PlayRandomClip(((EnemyAI)__instance).creatureSFX, __instance.chitterSFX, true, 1f, 0); if ((Object)(object)val != (Object)null && !val.isPlayerDead && !((Object)(object)val != (Object)(object)GameNetworkManager.Instance.localPlayerController)) { hoardingBugPatchInst.TriggerMineOnLocalClientByExiting(___serverPosition); } } } private void TriggerMineOnLocalClientByExiting(Vector3 location) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) Landmine.SpawnExplosion(location, true, 5f, 5f); ManualLogSource mls = ViniModBase.mls; Vector3 val = location; mls.LogDebug((object)("Boom at " + ((object)(Vector3)(ref val)).ToString())); NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { ViniModBase.mls.LogDebug((object)"Server is dead?"); return; } ViniModBase.mls.LogInfo((object)base.__rpc_exec_stage); if (networkManager.IsServer || networkManager.IsHost) { ViniModBase.mls.LogDebug((object)"Ís server, sending to clients..."); FastBufferWriter val2 = default(FastBufferWriter); ((FastBufferWriter)(ref val2))..ctor(12, (Allocator)2, -1); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref location); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessageToAll("ViniMod-ClientExplodeRpc", val2, (NetworkDelivery)3); } else { ViniModBase.mls.LogDebug((object)"is client, sending to Server..."); FastBufferWriter val3 = default(FastBufferWriter); ((FastBufferWriter)(ref val3))..ctor(12, (Allocator)2, -1); ((FastBufferWriter)(ref val3)).WriteValueSafe(ref location); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("ViniMod-ServerExplodeRpc", 0uL, val3, (NetworkDelivery)3); } } public static void ExplodeYipeeClientRpc(ulong clientId, FastBufferReader reader) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) Vector3 val = default(Vector3); ((FastBufferReader)(ref reader)).ReadValue(ref val); Landmine.SpawnExplosion(val, true, 5f, 5f); ViniModBase.mls.LogDebug((object)"ExplodeClientRPC"); } public static void ExplodeYipeeServerRpc(ulong clientId, FastBufferReader reader) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) Vector3 val = default(Vector3); ((FastBufferReader)(ref reader)).ReadValue(ref val); Landmine.SpawnExplosion(val, true, 5f, 5f); ViniModBase.mls.LogDebug((object)"Explode Server RPC"); FastBufferWriter val2 = default(FastBufferWriter); ((FastBufferWriter)(ref val2))..ctor(12, (Allocator)2, -1); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref val); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessageToAll("ViniMod-ClientExplodeRpc", val2, (NetworkDelivery)3); } } [HarmonyPatch(typeof(RoundManager))] internal class RoundManagerPatch { [HarmonyPatch(typeof(RoundManager), "LoadNewLevel")] [HarmonyPrefix] public static void spawnYippees(ref SelectableLevel newLevel) { //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) ViniModBase.mls.LogDebug((object)newLevel.PlanetName); if (!(newLevel.PlanetName == "71 Gordion")) { return; } bool flag = false; bool flag2 = false; foreach (SpawnableEnemyWithRarity outsideEnemy in newLevel.OutsideEnemies) { if ((Object)(object)outsideEnemy.enemyType.enemyPrefab.GetComponent<NutcrackerEnemyAI>() != (Object)null) { flag = true; } } if (!flag) { SelectableLevel[] levels = StartOfRound.Instance.levels; foreach (SelectableLevel val in levels) { foreach (SpawnableEnemyWithRarity enemy in val.Enemies) { if ((Object)(object)enemy.enemyType.enemyPrefab.GetComponent<NutcrackerEnemyAI>() != (Object)null && !flag2) { flag2 = true; newLevel.OutsideEnemies.Add(enemy); } } } } for (int j = 0; j < newLevel.OutsideEnemies.Count; j++) { if ((Object)(object)newLevel.OutsideEnemies[j].enemyType.enemyPrefab.GetComponent<NutcrackerEnemyAI>() != (Object)null) { Vector3 navMeshPosition = RoundManager.Instance.GetNavMeshPosition(new Vector3(10f, -2.67f, 10f), default(NavMeshHit), 5f, -1); GameObject val2 = Object.Instantiate<GameObject>(newLevel.OutsideEnemies[j].enemyType.enemyPrefab, navMeshPosition, Quaternion.Euler(Vector3.zero)); val2.gameObject.GetComponentInChildren<NetworkObject>().Spawn(true); RoundManager.Instance.SpawnedEnemies.Add(val2.GetComponent<EnemyAI>()); EnemyType enemyType = val2.GetComponent<EnemyAI>().enemyType; enemyType.numberSpawned++; ((Behaviour)val2.GetComponent<NavMeshAgent>()).enabled = true; } else { ViniModBase.mls.LogDebug((object)("Found a " + ((Object)newLevel.OutsideEnemies[j].enemyType).name + ":(")); } } } } }