Decompiled source of MagicalWizardThatTeleportsYouToMithrix v1.0.0

MagicalWizard.dll

Decompiled a month ago
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using KinematicCharacterController;
using R2API;
using RoR2;
using RoR2.Networking;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("MagicalWizard")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("MagicalWizard")]
[assembly: AssemblyTitle("MagicalWizard")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace MagicalWizard;

[BepInPlugin("com.rob.MagicalWizardThatTeleportsYouToMithrix", "MagicalWizardThatTeleportsYouToMithrix", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
	public const string MODUID = "com.rob.MagicalWizardThatTeleportsYouToMithrix";

	public static AssetBundle mainAssetBundle;

	public static GameObject wizardPrefab;

	public static Vector3 moonSpawnPoint = new Vector3(2607.263f, 204.15f, 732.7989f);

	public static Vector3 moon2SpawnPoint = new Vector3(1072f, -283.95f, 1150f);

	public static Vector3 moonWarpPoint = new Vector3(128.1882f, 497.2452f, 160.3198f);

	public static Vector3 moon2WarpPoint = new Vector3(128.1882f, 497.2452f, 160.3198f);

	private void Awake()
	{
		//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
		using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MagicalWizard.robwizard"))
		{
			mainAssetBundle = AssetBundle.LoadFromStream(stream);
		}
		using (Stream stream2 = Assembly.GetExecutingAssembly().GetManifestResourceStream("MagicalWizard.wizard_bank.bnk"))
		{
			byte[] array = new byte[stream2.Length];
			stream2.Read(array, 0, array.Length);
			SoundBanks.Add(array);
		}
		GameObject val = mainAssetBundle.LoadAsset<GameObject>("mdlWizard");
		SkinnedMeshRenderer componentInChildren = val.GetComponentInChildren<SkinnedMeshRenderer>();
		((Renderer)componentInChildren).material.shader = Resources.Load<Shader>("Shaders/Deferred/HGStandard");
		wizardPrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Barrel1/Barrel1.prefab").WaitForCompletion(), "MagicalWizard", true);
		wizardPrefab.GetComponent<Highlight>().targetRenderer.enabled = false;
		((Component)wizardPrefab.GetComponent<Highlight>().targetRenderer).GetComponent<SkinnedMeshRenderer>().sharedMesh = null;
		Object.Destroy((Object)(object)wizardPrefab.GetComponent<BarrelInteraction>());
		Object.Destroy((Object)(object)wizardPrefab.GetComponent<GenericDisplayNameProvider>());
		wizardPrefab.GetComponent<SfxLocator>().openSound = "";
		Transform modelTransform = wizardPrefab.GetComponent<ModelLocator>().modelTransform;
		wizardPrefab.AddComponent<WizardInteraction>().animator = val.GetComponentInChildren<Animator>();
		((Behaviour)((Component)modelTransform).GetComponent<Animator>()).enabled = false;
		((Renderer)((Component)modelTransform.Find("BarrelMesh")).GetComponent<SkinnedMeshRenderer>()).enabled = false;
		val.transform.parent = ((Component)wizardPrefab.GetComponent<Highlight>().targetRenderer).transform;
		val.transform.localPosition = new Vector3(0f, 0f, 0f);
		val.transform.localRotation = Quaternion.Euler(new Vector3(90f, 0f, 0f));
		wizardPrefab.GetComponent<Highlight>().targetRenderer = (Renderer)(object)componentInChildren;
		((Component)componentInChildren).gameObject.AddComponent<EntityLocator>().entity = wizardPrefab;
		Object.Destroy((Object)(object)wizardPrefab.transform.Find("HologramPivot"));
		SceneManager.sceneLoaded += SceneManager_sceneLoaded;
	}

	private void SceneManager_sceneLoaded(Scene arg0, LoadSceneMode arg1)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0061: Unknown result type (might be due to invalid IL or missing references)
		//IL_0066: 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_004e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		//IL_0090: 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_00b6: Unknown result type (might be due to invalid IL or missing references)
		Scene activeScene = SceneManager.GetActiveScene();
		if (((Scene)(ref activeScene)).name == "moon")
		{
			GameObject val = Object.Instantiate<GameObject>(wizardPrefab);
			val.transform.position = moonSpawnPoint;
			val.transform.rotation = Quaternion.Euler(new Vector3(0f, 130f, 0f));
			return;
		}
		activeScene = SceneManager.GetActiveScene();
		if (((Scene)(ref activeScene)).name == "moon2")
		{
			GameObject val2 = Object.Instantiate<GameObject>(wizardPrefab);
			val2.transform.position = moon2SpawnPoint;
			val2.transform.rotation = Quaternion.Euler(new Vector3(0f, 90f, 0f));
		}
	}
}
public class DelayedWarp : MonoBehaviour
{
	private void Awake()
	{
		((MonoBehaviour)this).Invoke("Sound", 1.4f);
		((MonoBehaviour)this).Invoke("Warp", 1.5f);
	}

	private void Sound()
	{
		Util.PlaySound("sfx_wizard_teleport", ((Component)this).gameObject);
	}

	private void Warp()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: 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)
		//IL_0027: 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)
		Vector3 val = Plugin.moonWarpPoint;
		Scene activeScene = SceneManager.GetActiveScene();
		if (((Scene)(ref activeScene)).name == "moon2")
		{
			val = Plugin.moon2WarpPoint;
		}
		CharacterMotor component = ((Component)this).GetComponent<CharacterMotor>();
		if (Object.op_Implicit((Object)(object)component))
		{
			((BaseCharacterController)component).Motor.SetPosition(val, true);
		}
		Object.Destroy((Object)(object)this);
	}
}
public class WizardInteraction : NetworkBehaviour, IInteractable, IDisplayNameProvider
{
	public string displayNameToken = "Raphael";

	public string contextToken = "Ask for the wizard's help";

	public Animator animator;

	[SyncVar]
	private bool opened;

	private float stopwatch;

	private uint playID;

	public bool Networkopened
	{
		get
		{
			return opened;
		}
		[param: In]
		set
		{
			((NetworkBehaviour)this).SetSyncVar<bool>(value, ref opened, 1u);
		}
	}

	bool IInteractable.ShouldProximityHighlight()
	{
		return true;
	}

	public string GetContextString(Interactor activator)
	{
		return Language.GetString(contextToken);
	}

	public override int GetNetworkChannel()
	{
		return QosChannelIndex.defaultReliable.intVal;
	}

	public Interactability GetInteractability(Interactor activator)
	{
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: 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)
		if (opened)
		{
			return (Interactability)0;
		}
		return (Interactability)2;
	}

	private void Update()
	{
		stopwatch -= Time.deltaTime;
		if (stopwatch <= 0f)
		{
			opened = false;
			Networkopened = false;
		}
	}

	[Server]
	public void OnInteractionBegin(Interactor activator)
	{
		if (!NetworkServer.active || opened)
		{
			return;
		}
		Networkopened = true;
		if (Object.op_Implicit((Object)(object)animator))
		{
			animator.PlayInFixedTime("CastSpell");
		}
		Util.PlaySound("sfx_wizard_laugh2", ((Component)this).gameObject);
		stopwatch = 1.55f;
		if (Object.op_Implicit((Object)(object)activator))
		{
			((Component)activator).gameObject.AddComponent<DelayedWarp>();
			CharacterBody component = ((Component)activator).GetComponent<CharacterBody>();
			if (Object.op_Implicit((Object)(object)component))
			{
				component.AddTimedBuff(Buffs.Immune, 1.5f);
			}
		}
	}

	public string GetDisplayName()
	{
		return Language.GetString(displayNameToken);
	}

	public bool ShouldIgnoreSpherecastForInteractibility(Interactor activator)
	{
		return false;
	}

	public void OnEnable()
	{
		playID = Util.PlaySound("sfx_wizard_bgm", ((Component)this).gameObject);
		InstanceTracker.Add<WizardInteraction>(this);
	}

	public void OnDisable()
	{
		AkSoundEngine.StopPlayingID(playID);
		InstanceTracker.Remove<WizardInteraction>(this);
	}

	public bool ShouldShowOnScanner()
	{
		return !opened;
	}

	private void UNetVersion()
	{
	}

	public override bool OnSerialize(NetworkWriter writer, bool forceAll)
	{
		if (forceAll)
		{
			writer.Write(opened);
			return true;
		}
		bool flag = false;
		if ((((NetworkBehaviour)this).syncVarDirtyBits & (true ? 1u : 0u)) != 0)
		{
			if (!flag)
			{
				writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits);
				flag = true;
			}
			writer.Write(opened);
		}
		if (!flag)
		{
			writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits);
		}
		return flag;
	}

	public override void OnDeserialize(NetworkReader reader, bool initialState)
	{
		if (initialState)
		{
			opened = reader.ReadBoolean();
			return;
		}
		int num = (int)reader.ReadPackedUInt32();
		if (((uint)num & (true ? 1u : 0u)) != 0)
		{
			opened = reader.ReadBoolean();
		}
	}

	public override void PreStartClient()
	{
	}
}