Decompiled source of NewtsHalloween v3.2.10

plugins/viliger-TrickOrTreat/TrickOrTreat.dll

Decompiled 2 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using On.RoR2;
using R2API;
using R2API.Networking;
using R2API.Networking.Interfaces;
using RoR2;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Networking;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("TrickOrTreat")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("TrickOrTreat")]
[assembly: AssemblyTitle("TrickOrTreat")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace RoR2_TrickOrTreat;

public class CandyBucketInteractable
{
	public class TrickOrTreatSoundMessage : INetMessage, ISerializableObject
	{
		private NetworkInstanceId netId;

		private string soundName;

		public TrickOrTreatSoundMessage()
		{
		}

		public TrickOrTreatSoundMessage(NetworkInstanceId netId, string soundName)
		{
			//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)
			this.netId = netId;
			this.soundName = soundName;
		}

		public void OnReceived()
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			if (!NetworkServer.active)
			{
				GameObject val = Util.FindNetworkObject(netId);
				if (Object.op_Implicit((Object)(object)val))
				{
					Util.PlaySound(soundName, val);
				}
			}
		}

		public void Serialize(NetworkWriter writer)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			writer.Write(netId);
			writer.Write(soundName);
		}

		public void Deserialize(NetworkReader reader)
		{
			//IL_0002: 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)
			netId = reader.ReadNetworkId();
			soundName = reader.ReadString();
		}
	}

	public class CandyBucketInteractableManager : NetworkBehaviour
	{
		public GenericInteraction genericInteraction;

		private GameObject interactorObject;

		public void Start()
		{
			((UnityEvent<Interactor>)(object)genericInteraction.onActivation).AddListener((UnityAction<Interactor>)OnActivation);
		}

		public void OnActivation(Interactor interactor)
		{
			//IL_005b: 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_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Expected O, but got Unknown
			if (NetworkServer.active)
			{
				interactorObject = ((Component)interactor).gameObject;
				CharacterBody val = default(CharacterBody);
				if (((Component)interactor).TryGetComponent<CharacterBody>(ref val))
				{
					Chat.SendBroadcastChat((ChatMessageBase)new BodyChatMessage
					{
						bodyObject = ((Component)val).gameObject,
						token = "INTERACTABLE_CANDY_BUCKET_CHAT"
					});
				}
				Util.PlaySound("viliger_TrickOrTreat", interactorObject);
				NetMessageExtensions.Send((INetMessage)(object)new TrickOrTreatSoundMessage(interactorObject.GetComponent<NetworkIdentity>().netId, "viliger_TrickOrTreat"), (NetworkDestination)1);
				((MonoBehaviour)this).Invoke("TryYourLuck", 2f);
				genericInteraction.SetInteractabilityDisabled();
			}
		}

		private void TryYourLuck()
		{
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Expected O, but got Unknown
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: 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_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: 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_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: 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_00ee: 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)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_012a: Unknown result type (might be due to invalid IL or missing references)
			//IL_012f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: Unknown result type (might be due to invalid IL or missing references)
			//IL_017d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0182: 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_0191: Unknown result type (might be due to invalid IL or missing references)
			//IL_0196: 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)
			//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b9: 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)
			//IL_01c0: 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)
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01de: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ec: 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_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Expected O, but got Unknown
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			if (Util.CheckRoll(60f, interactorObject.GetComponent<CharacterBody>().master))
			{
				Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
				{
					baseToken = "INTERACTABLE_CANDY_BUCKET_NEWT_TREAT"
				});
				Util.PlaySound("viliger_Cheer", interactorObject);
				NetMessageExtensions.Send((INetMessage)(object)new TrickOrTreatSoundMessage(interactorObject.GetComponent<NetworkIdentity>().netId, "viliger_Cheer"), (NetworkDestination)1);
				DropItems();
				return;
			}
			Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
			{
				baseToken = "INTERACTABLE_CANDY_BUCKET_NEWT_TRICK"
			});
			BlastAttack val = new BlastAttack
			{
				radius = 50f,
				procCoefficient = 0f,
				position = ((Component)this).gameObject.transform.position + 0.5f * ((Component)this).gameObject.transform.forward + Vector3.up * -0.25f,
				attacker = interactorObject,
				crit = false,
				baseDamage = 5000f,
				falloffModel = (FalloffModel)0,
				baseForce = 8000f
			};
			val.teamIndex = TeamComponent.GetObjectTeam(val.attacker);
			val.damageType = DamageTypeCombo.op_Implicit((DamageType)2);
			val.attackerFiltering = (AttackerFiltering)0;
			val.Fire();
			new BlastAttack
			{
				radius = 50f,
				procCoefficient = 0f,
				position = ((Component)this).gameObject.transform.position + 0.5f * ((Component)this).gameObject.transform.forward + Vector3.up * -0.25f,
				attacker = null,
				crit = false,
				baseDamage = 1f,
				falloffModel = (FalloffModel)2,
				baseForce = 8000f,
				teamIndex = (TeamIndex)0,
				damageType = DamageTypeCombo.op_Implicit((DamageType)2),
				attackerFiltering = (AttackerFiltering)0,
				canRejectForce = false
			}.Fire();
		}

		private void DropItems()
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Expected O, but got Unknown
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: 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_004c: 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)
			//IL_005b: 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_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_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			Xoroshiro128Plus rng = new Xoroshiro128Plus(Run.instance.treasureRng.nextUlong);
			int participatingPlayerCount = Run.instance.participatingPlayerCount;
			if (participatingPlayerCount != 0)
			{
				float num = 360f / (float)participatingPlayerCount;
				Vector3 val = Quaternion.AngleAxis((float)Random.Range(0, 360), Vector3.up) * (Vector3.up * 40f + Vector3.forward * 5f);
				Quaternion val2 = Quaternion.AngleAxis(num, Vector3.up);
				for (int i = 0; i < participatingPlayerCount; i++)
				{
					PickupDropletController.CreatePickupDroplet(GetPickupIndex(rng), new Vector3(-74.4528f, -24f, -27.9666f), val);
					val = val2 * val;
				}
			}
		}

		private PickupIndex GetPickupIndex(Xoroshiro128Plus rng)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: 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_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: 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_003a: 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_0052: 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)
			PickupIndex val = rng.NextElementUniform<PickupIndex>(Run.instance.availableTier1DropList);
			PickupIndex val2 = rng.NextElementUniform<PickupIndex>(Run.instance.availableTier2DropList);
			PickupIndex val3 = rng.NextElementUniform<PickupIndex>(Run.instance.availableTier3DropList);
			WeightedSelection<PickupIndex> obj = new WeightedSelection<PickupIndex>(8);
			obj.AddChoice(val, 60f);
			obj.AddChoice(val2, 35f);
			obj.AddChoice(val3, 5f);
			return obj.Evaluate(rng.nextNormalizedFloat);
		}
	}

	public static GameObject GetInteractable()
	{
		//IL_010c: Unknown result type (might be due to invalid IL or missing references)
		AssetBundle obj = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(TrickOrTreatPlugin.PInfo.Location), "Assets", "candybucket"));
		TrickOrTreatPlugin.ShaderConversion(obj);
		GameObject val = obj.LoadAsset<GameObject>("candybucket");
		val.AddComponent<NetworkIdentity>();
		GenericInteraction val2 = val.AddComponent<GenericInteraction>();
		val2.contextToken = "INTERACTABLE_CANDY_BUCKET_CONTEXT";
		val2.shouldShowOnScanner = false;
		val.AddComponent<GenericDisplayNameProvider>().displayToken = "INTERACTABLE_CANDY_BUCKET_NAME";
		ModelLocator obj2 = val.AddComponent<ModelLocator>();
		obj2.modelTransform = val.transform.Find("mdlCandyBucket");
		obj2.modelBaseTransform = val.transform.Find("mdlCandyBucket");
		obj2.dontDetatchFromParent = false;
		obj2.autoUpdateModelTransform = true;
		((Component)val.GetComponentInChildren<MeshCollider>()).gameObject.AddComponent<EntityLocator>().entity = val;
		val.AddComponent<CandyBucketInteractableManager>().genericInteraction = val2;
		Highlight obj3 = val.AddComponent<Highlight>();
		obj3.targetRenderer = (Renderer)(object)(from x in val.GetComponentsInChildren<MeshRenderer>()
			where ((Object)((Component)x).gameObject).name.Contains("mdlCandyBucket")
			select x).First();
		obj3.strength = 1f;
		obj3.highlightColor = (HighlightColor)0;
		return val;
	}
}
public class TrickOrTreatLanguages
{
	public const string LanguageFileName = "TrickOrTreat.language";

	public const string LanguageFileFolder = "Languages";

	public void Init(PluginInfo info)
	{
		LanguageAPI.AddPath(Path.Combine(Path.GetDirectoryName(info.Location), "Languages", "TrickOrTreat.language"));
	}
}
[BepInPlugin("com.Viliger.TrickOrTreat", "TrickOrTreat", "1.1.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class TrickOrTreatPlugin : BaseUnityPlugin
{
	public static PluginInfo PInfo;

	private GameObject candyBucketPrefab;

	public static ConfigEntry<bool> EnableAlways;

	public static Dictionary<string, string> ShaderLookup = new Dictionary<string, string> { { "Stubbed Hopoo Games/Deferred/Standard", "shaders/deferred/hgstandard" } };

	private void Awake()
	{
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Expected O, but got Unknown
		EnableAlways = ((BaseUnityPlugin)this).Config.Bind<bool>("Candy Bucket", "Always Enabled", false, "Enables Candy Bucket for entire year and not just October.");
		if (DateTime.Now.Month == 10 || EnableAlways.Value)
		{
			PInfo = ((BaseUnityPlugin)this).Info;
			LoadSoundBanks();
			candyBucketPrefab = PrefabAPI.InstantiateClone(CandyBucketInteractable.GetInteractable(), "CandyBucketInteractable");
			new TrickOrTreatLanguages().Init(PInfo);
			BazaarController.Awake += new hook_Awake(BazaarController_Awake);
			NetworkingAPI.RegisterMessageType<CandyBucketInteractable.TrickOrTreatSoundMessage>();
		}
	}

	private void LoadSoundBanks()
	{
		using FileStream fileStream = new FileStream(Path.Combine(Path.GetDirectoryName(PInfo.Location), "Soundbanks", "TrickOrTreat.bnk"), FileMode.Open, FileAccess.Read);
		byte[] array = new byte[fileStream.Length];
		fileStream.Read(array, 0, array.Length);
		SoundBanks.Add(array);
	}

	private void BazaarController_Awake(orig_Awake orig, BazaarController self)
	{
		//IL_001d: 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_0041: Unknown result type (might be due to invalid IL or missing references)
		if (NetworkServer.active)
		{
			GameObject obj = Object.Instantiate<GameObject>(candyBucketPrefab, new Vector3(-74.4528f, -25f, -27.9666f), Quaternion.identity);
			obj.transform.eulerAngles = new Vector3(0f, 270f, 0f);
			NetworkServer.Spawn(obj);
			orig.Invoke(self);
		}
	}

	public static void ShaderConversion(AssetBundle assets)
	{
		foreach (Material item in from material in assets.LoadAllAssets<Material>()
			where ((Object)material.shader).name.StartsWith("Stubbed Hopoo Games")
			select material)
		{
			Shader val = LegacyResourcesAPI.Load<Shader>(ShaderLookup[((Object)item.shader).name]);
			if (Object.op_Implicit((Object)(object)val))
			{
				item.shader = val;
			}
		}
	}
}