using System;
using System.Collections;
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 BlackMagicAPI.Enums;
using BlackMagicAPI.Managers;
using BlackMagicAPI.Modules.Spells;
using FishNet;
using FishNet.Connection;
using FishNet.Managing.Server;
using FishNet.Object;
using FishUtilities.Managers;
using HarmonyLib;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.SceneManagement;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("SummonSkeletonSpellMod")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SummonSkeletonSpellMod")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("a0a2ff6b-6f0b-47f8-ae45-70b101cca695")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
[HarmonyPatch(typeof(Generator2D), "RpcLogic___ServerSpawnSkeleMage_2166136261")]
public static class SkeleMageSpawnPatch
{
[CompilerGenerated]
private sealed class <DestroySpawnedRocksDelayed>d__2 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <DestroySpawnedRocksDelayed>d__2(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>2__current = null;
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
<>2__current = null;
<>1__state = 2;
return true;
case 2:
{
<>1__state = -1;
GameObject[] array = (from n in Object.FindObjectsOfType<NetworkObject>()
select ((Component)n).gameObject into o
where ((Object)o).name.Contains("HiltRock") || ((Object)o).name.Contains("BladeRock")
select o).ToArray();
foreach (GameObject val in array)
{
Object.Destroy((Object)(object)val);
Debug.Log((object)("[SkeleMageSpawnMod] Destroyed spawned rock: " + ((Object)val).name));
}
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();
}
}
[HarmonyPrefix]
public static void Prefix()
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Expected O, but got Unknown
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
if (!SummonUndeadPlugin.OverrideSpawnPosition.HasValue)
{
return;
}
GameObject val = new GameObject("ForcedSpawnNode");
val.tag = "ainodes";
val.transform.position = SummonUndeadPlugin.OverrideSpawnPosition.Value;
GameObject[] array = GameObject.FindGameObjectsWithTag("ainodes");
foreach (GameObject val2 in array)
{
if ((Object)(object)val2 != (Object)(object)val)
{
val2.tag = "Untagged";
}
}
Vector3 position = val.transform.position;
Debug.Log((object)("[SummonUndeadPlugin] Placed fake ainode at " + ((object)(Vector3)(ref position)).ToString()));
}
private static void Postfix(Generator2D __instance)
{
((MonoBehaviour)SummonUndeadPlugin.Instance).StartCoroutine(DestroySpawnedRocksDelayed());
}
[IteratorStateMachine(typeof(<DestroySpawnedRocksDelayed>d__2))]
private static IEnumerator DestroySpawnedRocksDelayed()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <DestroySpawnedRocksDelayed>d__2(0);
}
}
internal class SummonUndeadData : SpellData
{
public override SpellType SpellType => (SpellType)0;
public override string Name => "Summon Undead";
public override float Cooldown => 15f;
public override Color GlowColor => Color.green;
}
internal class SummonUndeadLogic : SpellLogic
{
public override void CastSpell(GameObject caster, PageController page, Vector3 direction, Vector3 targetPoint, int level)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
if (direction == Vector3.zero)
{
direction = caster.transform.forward;
}
Vector3 val = SummonUndeadPlugin.FindValidNavMeshSpawn(caster.transform.position + ((Vector3)(ref direction)).normalized * 10f);
SummonUndeadPlugin.AddForcedAINode(val);
SummonUndeadPlugin.SetNextSpawnPosition(val);
SummonUndeadPlugin.PostSpawnAdjustments(SummonUndeadPlugin.ForceSpawnSkeleMage(val), caster);
}
}
[BepInPlugin("Freezie.summonskeletonspell.91", "Summon Skeleton Spell", "1.0.0")]
public class SummonUndeadPlugin : BaseUnityPlugin
{
[CompilerGenerated]
private sealed class <DelayedAdjustHP>d__18 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
public GameObject skeleMage;
public float newHP;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <DelayedAdjustHP>d__18(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>2__current = null;
<>1__state = 1;
return true;
case 1:
{
<>1__state = -1;
Component component = skeleMage.GetComponent("SkelemageController");
if ((Object)(object)component != (Object)null)
{
FieldInfo field = ((object)component).GetType().GetField("hp", BindingFlags.Instance | BindingFlags.NonPublic);
if (field != null)
{
field.SetValue(component, newHP);
Debug.Log((object)$"[SkeleMageSpawnMod] Delayed HP set to {newHP}");
}
else
{
Debug.LogWarning((object)"[SkeleMageSpawnMod] Could not find 'hp' field via reflection.");
}
}
else
{
Debug.LogWarning((object)"[SkeleMageSpawnMod] SkeleMageController not found on spawned mage.");
}
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();
}
}
[CompilerGenerated]
private sealed class <DelayedInject>d__8 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <DelayedInject>d__8(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>2__current = (object)new WaitForSeconds(2f);
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
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();
}
}
[CompilerGenerated]
private sealed class <DelayedTeleport>d__21 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <DelayedTeleport>d__21(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Expected O, but got Unknown
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>2__current = (object)new WaitForSeconds(0.5f);
<>1__state = 1;
return true;
case 1:
{
<>1__state = -1;
GameObject[] array = (from n in Object.FindObjectsOfType<NetworkObject>()
where ((Object)n).name.Contains("SkeleMage")
select ((Component)n).gameObject).ToArray();
if (array.Length == 0)
{
Debug.LogError((object)"[SkeleMageSpawnMod] No SkeleMage found after spawn!");
return false;
}
GameObject val = array.OrderByDescending((GameObject s) => ((Object)s).GetInstanceID()).First();
if (OverrideSpawnPosition.HasValue)
{
val.transform.position = OverrideSpawnPosition.Value;
Vector3 value = OverrideSpawnPosition.Value;
Debug.Log((object)("[SkeleMageSpawnMod] Teleported SkeleMage to " + ((object)(Vector3)(ref value)).ToString()));
OverrideSpawnPosition = null;
}
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();
}
}
public static string modsync = "all";
public static SummonUndeadPlugin Instance;
public static Vector3? OverrideSpawnPosition = null;
private static GameObject forcedNode;
private static List<GameObject> cachedAINodes = new List<GameObject>();
private bool hasInjectedPage;
public static MonoBehaviour SceneContext;
private static GameObject skeleMagePrefab;
private void Awake()
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Expected O, but got Unknown
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
GameObject val = new GameObject("FishContextHelper");
Object.DontDestroyOnLoad((Object)val);
val.AddComponent<FishContextHelper>();
Instance = this;
BlackMagicManager.RegisterSpell((BaseUnityPlugin)(object)this, typeof(SummonUndeadData), typeof(SummonUndeadLogic));
((BaseUnityPlugin)this).Logger.LogInfo((object)"Summon Undead Test Plugin Loaded.");
new Harmony("com.freezie.skelemagespawnmod").PatchAll();
((BaseUnityPlugin)this).Logger.LogInfo((object)"SkeleMage Spawn Override Patch Applied.");
TryFindSkeleMagePrefab();
FishManager.RegisterNetworkObjectPrefab((BaseUnityPlugin)(object)Instance, (MonoBehaviour)(object)FishContextHelper.Instance, "SkeleMage", false);
}
[IteratorStateMachine(typeof(<DelayedInject>d__8))]
private IEnumerator DelayedInject()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <DelayedInject>d__8(0);
}
private void SpawnSummonUndeadPage()
{
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: 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_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: 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_00e8: Unknown result type (might be due to invalid IL or missing references)
GameObject val = GameObject.FindGameObjectWithTag("NetItemManager");
if ((Object)(object)val == (Object)null)
{
Debug.LogError((object)"[SummonUndeadPlugin] NetItemManager not found.");
return;
}
PageLootTable component = val.GetComponent<PageLootTable>();
if ((Object)(object)component == (Object)null || component.Pages.Length <= 7)
{
Debug.LogError((object)"[SummonUndeadPlugin] PageLootTable not found or SummonUndeadPage not loaded.");
return;
}
PlayerMovement val2 = Object.FindObjectOfType<PlayerMovement>();
if ((Object)(object)val2 == (Object)null)
{
Debug.LogError((object)"[SummonUndeadPlugin] Player not found.");
return;
}
Vector3 position = ((Component)val2).transform.position + Vector3.forward * 2f;
GameObject val3 = Object.Instantiate<GameObject>(component.Pages[7]);
val3.transform.position = position;
val3.transform.localRotation = Quaternion.Euler(10f, 0f, 180f);
if ((Object)(object)val3.GetComponent<NetworkObject>() != (Object)null)
{
ServerManager val4 = Object.FindObjectOfType<ServerManager>();
if ((Object)(object)val4 != (Object)null)
{
val4.Spawn(val3, (NetworkConnection)null, default(Scene));
Debug.Log((object)"[SummonUndeadPlugin] SummonUndeadPage spawned via ServerManager.");
}
else
{
Debug.LogError((object)"[SummonUndeadPlugin] ServerManager not found.");
}
}
else
{
Debug.LogError((object)"[SummonUndeadPlugin] Spawned page has no NetworkObject!");
}
}
public static void SetNextSpawnPosition(Vector3 position)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
OverrideSpawnPosition = position;
}
public static void AddForcedAINode(Vector3 position)
{
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Expected O, but got Unknown
//IL_003f: 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)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)forcedNode != (Object)null)
{
Object.Destroy((Object)(object)forcedNode);
}
forcedNode = new GameObject("ForcedAINode");
forcedNode.tag = "ainodes";
forcedNode.transform.position = position;
Vector3 val = position;
Debug.Log((object)("[SkeleMageSpawnMod] Forced AINode created at: " + ((object)(Vector3)(ref val)).ToString()));
}
public static GameObject ForceSpawnSkeleMage(Vector3 spawnPosition)
{
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)skeleMagePrefab == (Object)null)
{
Debug.LogError((object)"[SkeleMageSpawnMod] SkeleMage prefab not cached. Did you run TryFindSkeleMagePrefab?");
return null;
}
GameObject val = Object.Instantiate<GameObject>(skeleMagePrefab, spawnPosition, Quaternion.identity);
val.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
Vector3 val2 = spawnPosition;
Debug.Log((object)("[SkeleMageSpawnMod] Spawned SkeleMage manually at: " + ((object)(Vector3)(ref val2)).ToString()));
if (InstanceFinder.IsServer)
{
ServerManager serverManager = InstanceFinder.ServerManager;
if ((Object)(object)serverManager != (Object)null)
{
serverManager.Spawn(val, (NetworkConnection)null, default(Scene));
Debug.Log((object)"[SkeleMageSpawnMod] Spawned SkeleMage via ServerManager.");
}
else
{
Debug.LogError((object)"[SkeleMageSpawnMod] ServerManager not available.");
}
Debug.Log((object)"[SkeleMageSpawnMod] Spawned SkeleMage via FishManager.");
}
else
{
Debug.LogWarning((object)"[SkeleMageSpawnMod] Not on server, skipping network spawn.");
}
return val;
}
public static Vector3 FindValidNavMeshSpawn(Vector3 desiredPoint, int maxAttempts = 10, float stepOut = 0.5f)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: 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_001f: 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_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: 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)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
RaycastHit val = default(RaycastHit);
for (int i = 0; i < maxAttempts; i++)
{
if (Physics.Raycast(desiredPoint + Vector3.right * stepOut * (float)i + Vector3.up * 5f, Vector3.down, ref val, 10f) && ((RaycastHit)(ref val)).normal.y > 0.5f)
{
Debug.Log((object)$"[SkeleMageSpawnMod] Found ground surface at {((RaycastHit)(ref val)).point} on attempt {i + 1}");
return ((RaycastHit)(ref val)).point;
}
}
Debug.LogWarning((object)"[SkeleMageSpawnMod] Could not find valid NavMesh ground. Defaulting to original point.");
return desiredPoint;
}
public static void TryFindSkeleMagePrefab()
{
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: 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)
if ((Object)(object)skeleMagePrefab != (Object)null)
{
Debug.Log((object)"[SummonUndead] Prefab already cached.");
return;
}
GameObject[] array = Resources.FindObjectsOfTypeAll<GameObject>();
Debug.Log((object)$"[SummonUndead] Scanning {array.Length} objects for SkeleMage...");
GameObject[] array2 = array;
foreach (GameObject val in array2)
{
if (((Object)val).name.Contains("SkeleMage"))
{
Scene scene = val.scene;
if (((Scene)(ref scene)).rootCount == 0 && (int)((Object)val).hideFlags == 0)
{
skeleMagePrefab = val;
Debug.Log((object)("[SummonUndead] Found SkeleMage prefab: " + ((Object)val).name));
return;
}
}
}
Debug.LogWarning((object)"[SummonUndead] No valid SkeleMage prefab found in memory.");
}
public static void PostSpawnAdjustments(GameObject skeleMage, GameObject caster)
{
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)skeleMage == (Object)null)
{
return;
}
NavMeshAgent component = skeleMage.GetComponent<NavMeshAgent>();
if ((Object)(object)component != (Object)null)
{
bool flag = component.Warp(skeleMage.transform.position);
Debug.Log((object)$"[SummonUndead] Warp success: {flag}");
}
SkelemageController component2 = skeleMage.GetComponent<SkelemageController>();
if ((Object)(object)component2 != (Object)null)
{
Transform val = FindTargetAtLookDirection() ?? caster.transform;
FieldInfo field = typeof(SkelemageController).GetField("CurrentTarget", BindingFlags.Instance | BindingFlags.NonPublic);
if (field != null)
{
field.SetValue(component2, val);
Debug.Log((object)"[SkeleMageSpawnMod] Assigned CurrentTarget.");
}
if ((Object)(object)component2.AniController != (Object)null && (Object)(object)val != (Object)null)
{
component2.AniController.target = val;
Debug.Log((object)"[SkeleMageSpawnMod] Assigned AniController target.");
}
}
AdjustSkeleMageHPWithDelay(skeleMage);
}
public static void AdjustSkeleMageHPWithDelay(GameObject skeleMage, float newHP = 50f)
{
((MonoBehaviour)Instance).StartCoroutine(DelayedAdjustHP(skeleMage, newHP));
}
[IteratorStateMachine(typeof(<DelayedAdjustHP>d__18))]
private static IEnumerator DelayedAdjustHP(GameObject skeleMage, float newHP)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <DelayedAdjustHP>d__18(0)
{
skeleMage = skeleMage,
newHP = newHP
};
}
public static void AdjustSkeleMageHP(GameObject skeleMage, float newHP = 50f)
{
Component component = skeleMage.GetComponent("SkelemageController");
if ((Object)(object)component != (Object)null)
{
FieldInfo field = ((object)component).GetType().GetField("hp", BindingFlags.Instance | BindingFlags.NonPublic);
if (field != null)
{
field.SetValue(component, newHP);
Debug.Log((object)$"[SkeleMageSpawnMod] Set {((Object)skeleMage).name} HP to {newHP} via reflection.");
}
else
{
Debug.LogWarning((object)"[SkeleMageSpawnMod] Could not find 'hp' field via reflection.");
}
}
}
public static Transform FindTargetAtLookDirection()
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: 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)
//IL_0027: 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_003c: 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_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
Camera main = Camera.main;
Ray val = new Ray(((Component)main).transform.position, ((Component)main).transform.forward);
Vector3 val2 = ((Component)main).transform.position + ((Component)main).transform.forward * 100f;
RaycastHit val3 = default(RaycastHit);
if (Physics.Raycast(val, ref val3, 100f))
{
val2 = ((RaycastHit)(ref val3)).point;
}
Transform[] array = (from pm in Object.FindObjectsOfType<PlayerMovement>()
select ((Component)pm).transform).ToArray();
Transform result = null;
float num = float.PositiveInfinity;
Transform[] array2 = array;
foreach (Transform val4 in array2)
{
float num2 = Vector3.Distance(val4.position, val2);
if (num2 < num && num2 < 10f)
{
result = val4;
num = num2;
}
}
return result;
}
[IteratorStateMachine(typeof(<DelayedTeleport>d__21))]
private static IEnumerator DelayedTeleport()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <DelayedTeleport>d__21(0);
}
private static void SetSkeleMageTarget(SkelemageController controller, Transform target)
{
FieldInfo field = typeof(SkelemageController).GetField("CurrentTarget", BindingFlags.Instance | BindingFlags.NonPublic);
if (field != null)
{
field.SetValue(controller, target);
Debug.Log((object)("[SkeleMageSpawnMod] Assigned target to SkeleMage: " + ((Object)target).name));
}
else
{
Debug.LogError((object)"[SkeleMageSpawnMod] Failed to find 'CurrentTarget' field on SkelemageController.");
}
}
public static void TeleportLastSpawnedSkeleMage()
{
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
GameObject[] array = (from n in Object.FindObjectsOfType<NetworkObject>()
where ((Object)n).name.Contains("SkeleMage")
select ((Component)n).gameObject).ToArray();
if (array.Length == 0)
{
Debug.LogError((object)"[SkeleMageSpawnMod] No SkeleMage found after spawn!");
return;
}
GameObject val = array.OrderByDescending((GameObject s) => ((Object)s).GetInstanceID()).First();
if (OverrideSpawnPosition.HasValue)
{
val.transform.position = OverrideSpawnPosition.Value;
Vector3 value = OverrideSpawnPosition.Value;
Debug.Log((object)("[SkeleMageSpawnMod] Teleported SkeleMage to " + ((object)(Vector3)(ref value)).ToString()));
OverrideSpawnPosition = null;
}
}
}
public class FishContextHelper : MonoBehaviour
{
public static FishContextHelper Instance;
private void Awake()
{
Instance = this;
}
}
namespace SummonSkeletonSpellMod;
public class Class1
{
}
internal class SpawnSummonUndeadPage
{
}