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 CustomMobMods v1.0.0
plugins/MyMonsterMod.dll
Decompiled 7 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("0.0.0.0")] [BepInPlugin("com.yourname.mymonstermod", "My Monster Mod", "1.0.0")] public class MyMonsterMod : BaseUnityPlugin { private void Awake() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) ((BaseUnityPlugin)this).Logger.LogInfo((object)"My Monster Mod loading..."); new Harmony("com.yourname.mymonstermod").PatchAll(); } [HarmonyPatch(typeof(GameNetworkManager), "Start")] [HarmonyPostfix] private static void SpawnMonsterAfterGameStart() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) new GameObject("MonsterSpawnHelper").AddComponent<MonsterSpawner>(); } } public class MonsterSpawner : MonoBehaviour { [CompilerGenerated] private sealed class <SpawnMonsterCoroutine>d__1 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public MonsterSpawner <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <SpawnMonsterCoroutine>d__1(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Expected O, but got Unknown //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Expected O, but got Unknown //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Expected O, but got Unknown //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) int num = <>1__state; MonsterSpawner monsterSpawner = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(3f); <>1__state = 1; return true; case 1: <>1__state = -1; try { string path = Path.Combine(Paths.BepInExRootPath, "plugins", "MyMonsterMod"); string text = Path.Combine(path, "monster.jpg"); if (!File.Exists(text)) { Debug.LogError((object)("Image not found at: " + text)); return false; } Texture2D val = new Texture2D(1, 1); val.SetPixel(0, 0, Color.red); Debug.Log((object)"Using default texture for testing - image loading skipped"); AudioClip val2 = null; string path2 = Path.Combine(path, "monster.wav"); if (File.Exists(path2)) { val2 = WavUtility.ToAudioClip(File.ReadAllBytes(path2), "MonsterSound"); } GameObject val3 = new GameObject("MyCustomMonster"); SpriteRenderer obj = val3.AddComponent<SpriteRenderer>(); obj.sprite = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f), 100f); obj.color = Color.magenta; if ((Object)(object)val2 != (Object)null) { AudioSource obj2 = val3.AddComponent<AudioSource>(); obj2.clip = val2; obj2.loop = true; obj2.spatialBlend = 1f; obj2.Play(); } else { val3.AddComponent<AudioSource>(); } SphereCollider obj3 = val3.AddComponent<SphereCollider>(); obj3.radius = 1f; ((Collider)obj3).isTrigger = true; val3.AddComponent<CustomMonsterAI>(); val3.transform.position = new Vector3(10f, 0f, 10f); Debug.Log((object)"Custom monster spawned successfully! (Default texture used)"); Object.Destroy((Object)(object)((Component)monsterSpawner).gameObject); } catch (Exception arg) { Debug.LogError((object)$"Error spawning monster: {arg}"); Object.Destroy((Object)(object)((Component)monsterSpawner).gameObject); } return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private void Start() { ((MonoBehaviour)this).StartCoroutine(SpawnMonsterCoroutine()); } [IteratorStateMachine(typeof(<SpawnMonsterCoroutine>d__1))] private IEnumerator SpawnMonsterCoroutine() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <SpawnMonsterCoroutine>d__1(0) { <>4__this = this }; } } public class CustomMonsterAI : MonoBehaviour { public float speed = 1.5f; private Transform player; private AudioSource audioSource; private void Start() { audioSource = ((Component)this).GetComponent<AudioSource>(); FindPlayer(); } private void Update() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: 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_0033: 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) //IL_0040: 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_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00da: 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_0097: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)player == (Object)null) { FindPlayer(); return; } Vector3 val = player.position - ((Component)this).transform.position; Vector3 normalized = ((Vector3)(ref val)).normalized; Transform transform = ((Component)this).transform; transform.position += normalized * speed * Time.deltaTime; if ((Object)(object)audioSource != (Object)null && (Object)(object)audioSource.clip != (Object)null) { float num = Vector3.Distance(((Component)this).transform.position, player.position); audioSource.volume = Mathf.Clamp(1f - num / 10f, 0f, 1f); } if (Vector3.Distance(((Component)this).transform.position, player.position) < 2f) { AttackPlayer(); } } private void FindPlayer() { GameObject val = GameObject.FindWithTag("Player"); if ((Object)(object)val != (Object)null) { player = val.transform; } } private void AttackPlayer() { Debug.Log((object)"Monster attacking player!"); } } public static class WavUtility { public static AudioClip ToAudioClip(byte[] wavFile, string clipName) { if (wavFile == null || wavFile.Length < 44) { return null; } try { int num = BitConverter.ToInt16(wavFile, 22); int num2 = BitConverter.ToInt32(wavFile, 24); int num3 = BitConverter.ToInt16(wavFile, 34); int num4 = 0; int num5 = 44; for (int i = 0; i < wavFile.Length - 4; i++) { if (wavFile[i] == 100 && wavFile[i + 1] == 97 && wavFile[i + 2] == 116 && wavFile[i + 3] == 97) { num4 = BitConverter.ToInt32(wavFile, i + 4); num5 = i + 8; break; } } if (num4 == 0) { return null; } int num6 = num3 / 8; int num7 = num4 / num6; float[] array = new float[num7]; for (int j = 0; j < num7; j++) { int num8 = num5 + j * num6; switch (num3) { case 16: { short num9 = BitConverter.ToInt16(wavFile, num8); array[j] = (float)num9 / 32768f; break; } case 8: { sbyte b = (sbyte)wavFile[num8]; array[j] = (float)b / 128f; break; } default: return null; } } AudioClip obj = AudioClip.Create(clipName, num7, num, num2, false); obj.SetData(array, 0); return obj; } catch (Exception arg) { Debug.LogError((object)$"Error loading WAV file: {arg}"); return null; } } }