using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Pigeon.Math;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyCompany("CraniusHunt")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("0.0.0.0")]
[assembly: AssemblyInformationalVersion("0.0.0-alpha.0")]
[assembly: AssemblyProduct("CraniusHunt")]
[assembly: AssemblyTitle("CraniusHunt")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.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;
}
}
}
namespace CraniusHunt
{
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "CraniusHunt";
public const string PLUGIN_NAME = "CraniusHunt";
public const string PLUGIN_VERSION = "0.0.0";
}
}
namespace CraniusMissionMod
{
[BepInPlugin("com.yourname.craniushunt", "CraniusHunt", "1.0.0")]
public class CraniusMissionMod : BaseUnityPlugin
{
private void Awake()
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Expected O, but got Unknown
Harmony val = new Harmony("com.yourname.craniushunt");
val.PatchAll(typeof(MissionSelectWindowInitPatch));
val.PatchAll(typeof(AmalgamationObjectivePatch));
val.PatchAll(typeof(MissionSelectWindowPatch));
((BaseUnityPlugin)this).Logger.LogInfo((object)(val.Id + " loaded!"));
}
}
public class CraniusMission : AmalgamationMission
{
public override bool CanShowInMissionSelect(out bool showLocked, out string lockedMessage)
{
showLocked = false;
lockedMessage = null;
return true;
}
}
[HarmonyPatch(typeof(MissionSelectWindow), "Awake")]
public class MissionSelectWindowInitPatch
{
public static CraniusMission craniusMission;
public static EnemyClass craniusClass;
[HarmonyPostfix]
public static void Postfix(MissionSelectWindow __instance)
{
//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
AmalgamationMission val = Resources.FindObjectsOfTypeAll<AmalgamationMission>()[0];
if ((Object)(object)val == (Object)null)
{
return;
}
craniusMission = ScriptableObject.CreateInstance<CraniusMission>();
FieldInfo[] fields = typeof(AmalgamationMission).GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
foreach (FieldInfo fieldInfo in fields)
{
fieldInfo.SetValue(craniusMission, fieldInfo.GetValue(val));
}
FieldInfo field = typeof(Mission).GetField("_missionName", BindingFlags.Instance | BindingFlags.NonPublic);
if (field != null)
{
field.SetValue(craniusMission, "cranius_hunt");
}
FieldInfo field2 = typeof(Mission).GetField("_description", BindingFlags.Instance | BindingFlags.NonPublic);
if (field2 != null)
{
field2.SetValue(craniusMission, "Hunt down the secret boss Cranius!");
}
((Mission)craniusMission).MissionIcon = ((Mission)val).MissionIcon;
((Mission)craniusMission).MissionColor = Color.magenta;
((Mission)craniusMission).ShowInReplayMenu = true;
((Mission)craniusMission).Selectable = true;
EnemyClass[] array = Resources.FindObjectsOfTypeAll<EnemyClass>();
foreach (EnemyClass val2 in array)
{
if (val2.customSpawner is ScrapBossSpawner)
{
craniusClass = val2;
break;
}
}
if ((Object)(object)craniusClass == (Object)null)
{
return;
}
FieldInfo field3 = typeof(Global).GetField("Missions", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
if (field3 == null)
{
return;
}
Mission[] array2 = (Mission[])field3.GetValue(Global.Instance);
bool flag = false;
Mission[] array3 = array2;
for (int i = 0; i < array3.Length; i++)
{
if (array3[i] is CraniusMission)
{
flag = true;
break;
}
}
if (!flag)
{
Mission[] array4 = (Mission[])(object)new Mission[array2.Length + 1];
Array.Copy(array2, array4, array2.Length);
array4[array2.Length] = (Mission)(object)craniusMission;
field3.SetValue(Global.Instance, array4);
}
if (PlayerData.Instance != null && PlayerData.Instance.GetFlag("cranius") == 0)
{
PlayerData.Instance.SetFlag("cranius", 1);
}
if (PlayerData.Instance.GetFlag("cranius") != 1)
{
PlayerData.Instance.SetFlag("cranius", 1);
}
}
}
[HarmonyPatch(typeof(AmalgamationObjective), "Setup")]
public class AmalgamationObjectivePatch
{
[HarmonyPostfix]
public static void Postfix(AmalgamationObjective __instance)
{
if (MissionManager.Instance.Mission is CraniusMission)
{
FieldInfo field = typeof(AmalgamationObjective).GetField("amalgamationClass", BindingFlags.Instance | BindingFlags.NonPublic);
if (field != null)
{
field.SetValue(__instance, MissionSelectWindowInitPatch.craniusClass);
}
}
}
}
[HarmonyPatch(typeof(MissionSelectWindow), "ToggleReplayWindow")]
public class MissionSelectWindowPatch
{
[HarmonyPostfix]
public static void Postfix(MissionSelectWindow __instance)
{
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Expected O, but got Unknown
//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0105: Expected O, but got Unknown
//IL_01b8: 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_01f8: Unknown result type (might be due to invalid IL or missing references)
//IL_0204: Unknown result type (might be due to invalid IL or missing references)
//IL_021a: 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_0230: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)MissionSelectWindowInitPatch.craniusMission == (Object)null)
{
return;
}
FieldInfo field = typeof(MissionSelectWindow).GetField("replayMissionContainer", BindingFlags.Instance | BindingFlags.NonPublic);
if (field == null)
{
return;
}
RectTransform val = (RectTransform)field.GetValue(__instance);
if ((Object)(object)val == (Object)null)
{
return;
}
List<MissionSelectButton> list = new List<MissionSelectButton>();
for (int i = 0; i < ((Transform)val).childCount; i++)
{
MissionSelectButton component = ((Component)((Transform)val).GetChild(i)).GetComponent<MissionSelectButton>();
if ((Object)(object)component != (Object)null && (Object)(object)((MissionData)(ref component.Mission)).Mission == (Object)(object)MissionSelectWindowInitPatch.craniusMission)
{
list.Add(component);
}
}
if (list.Count > 1)
{
for (int j = 1; j < list.Count; j++)
{
Object.Destroy((Object)(object)((Component)list[j]).gameObject);
}
}
if (list.Count > 0)
{
return;
}
FieldInfo field2 = typeof(MissionSelectWindow).GetField("missionButtonPrefab", BindingFlags.Instance | BindingFlags.NonPublic);
if (field2 == null)
{
return;
}
MissionSelectButton val2 = (MissionSelectButton)field2.GetValue(__instance);
if (!((Object)(object)val2 == (Object)null))
{
MissionSelectButton obj = Object.Instantiate<MissionSelectButton>(val2, (Transform)(object)val);
((Component)obj).gameObject.SetActive(true);
Random val3 = default(Random);
((Random)(ref val3))..ctor(Global.MissionSelectSeed + (((Mission)MissionSelectWindowInitPatch.craniusMission).ID.GetHashCode() + 3173) * 5390921);
WorldRegion val4 = ((Mission)MissionSelectWindowInitPatch.craniusMission).OverrideRegion() ?? Global.Instance.Regions[((Random)(ref val3)).Next(Global.Instance.Regions.Length)];
string text = default(string);
string text2 = (((Mission)MissionSelectWindowInitPatch.craniusMission).OverrideScene(ref text) ? text : val4.SceneNames[((Random)(ref val3)).Next(val4.SceneNames.Length)]);
obj.Setup(new MissionData(((Random)(ref val3)).Next(), (Mission)(object)MissionSelectWindowInitPatch.craniusMission, val4, text2, (MissionContainer)null), __instance, true, false);
RectTransform component2 = ((Component)obj).GetComponent<RectTransform>();
if ((Object)(object)component2 != (Object)null)
{
component2.anchorMin = new Vector2(0.5f, 0.5f);
component2.anchorMax = new Vector2(0.5f, 0.5f);
component2.anchoredPosition = Vector2.zero;
component2.sizeDelta = new Vector2(100f, 100f);
((Transform)component2).localScale = Vector3.one * 1.5f;
}
}
}
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
public IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}