Decompiled source of Sp00ky Emotes Pack v1.1.2

sp00kyEmotes.dll

Decompiled 7 months ago
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using BepInEx;
using BepInEx.Logging;
using EmotesAPI;
using R2API;
using R2API.Utils;
using RoR2;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using sp00kyEmotes.Scripts;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
namespace sp00kyEmotes
{
	internal static class Log
	{
		internal static ManualLogSource _logSource;

		internal static void Init(ManualLogSource logSource)
		{
			_logSource = logSource;
		}

		internal static void LogDebug(object data)
		{
			_logSource.LogDebug(data);
		}

		internal static void LogError(object data)
		{
			_logSource.LogError(data);
		}

		internal static void LogFatal(object data)
		{
			_logSource.LogFatal(data);
		}

		internal static void LogInfo(object data)
		{
			_logSource.LogInfo(data);
		}

		internal static void LogMessage(object data)
		{
			_logSource.LogMessage(data);
		}

		internal static void LogWarning(object data)
		{
			_logSource.LogWarning(data);
		}
	}
	public class DeadComp : MonoBehaviour
	{
		public BoneMapper boneMapper;

		private CharacterModel characterModel;

		private GameObject deadSkele;

		private int originalInvCount;

		private bool spawned;

		private void Start()
		{
			boneMapper = ((Component)this).GetComponent<BoneMapper>();
			characterModel = boneMapper.model.gameObject.GetComponent<CharacterModel>();
			originalInvCount = characterModel.invisibilityCount;
		}

		public void SpawnSkeleton()
		{
			//IL_006e: 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_0088: Unknown result type (might be due to invalid IL or missing references)
			if (!spawned && NetworkServer.active)
			{
				if (Object.op_Implicit((Object)(object)sp00kyEmotesPlugin.deadSkele))
				{
					NetworkServer.Destroy(sp00kyEmotesPlugin.deadSkele);
				}
				deadSkele = CustomEmotesAPI.SpawnWorldProp(sp00kyEmotesPlugin.deadSkeleInt);
				deadSkele.transform.SetParent(((Component)characterModel).transform);
				deadSkele.transform.localPosition = new Vector3(0f, 0f, 1f);
				deadSkele.transform.localRotation = Quaternion.Euler(Vector3.zero);
				deadSkele.transform.SetParent((Transform)null);
				sp00kyEmotesPlugin.ScaleWorldProp(boneMapper, deadSkele);
				sp00kyEmotesPlugin.deadSkele = deadSkele;
				NetworkServer.Spawn(sp00kyEmotesPlugin.deadSkele);
				spawned = true;
			}
		}

		public void MakeInvisible()
		{
			if (characterModel.invisibilityCount == 0)
			{
				CharacterModel obj = characterModel;
				obj.invisibilityCount++;
				characterModel.visibility = (VisibilityLevel)0;
			}
		}

		public void Makevisible()
		{
			characterModel.invisibilityCount = originalInvCount;
			characterModel.visibility = (VisibilityLevel)3;
		}

		private void OnDestroy()
		{
			Makevisible();
		}
	}
	public class WwiseTest : MonoBehaviour
	{
		public int msTime;

		private int[] times = new int[5] { 3780, 13890, 24000, 34100, 54310 };

		public uint playingID;

		private bool check;

		public bool destroy;

		private AKRESULT aKRESULT;

		private BoneMapperTracker boneMapper;

		private void Start()
		{
			boneMapper = sp00kyEmotesPlugin.tracker.GetComponent<BoneMapperTracker>();
		}

		private void Update()
		{
			if (playingID != 0)
			{
				UpdateSpeed();
			}
		}

		private void UpdateSpeed()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			aKRESULT = AkSoundEngine.GetSourcePlayPosition(playingID, ref msTime);
			if (msTime < times[0])
			{
				if (CustomEmotesAPI.localMapper.a2.speed != 1f)
				{
					boneMapper.UpdateSpeed(1f);
				}
			}
			else if (msTime < times[1] && msTime > times[0])
			{
				if (CustomEmotesAPI.localMapper.a2.speed != 2f)
				{
					boneMapper.UpdateSpeed(2f);
				}
			}
			else if (msTime < times[2] && msTime > times[1])
			{
				if (CustomEmotesAPI.localMapper.a2.speed != 4f)
				{
					boneMapper.UpdateSpeed(4f);
				}
			}
			else if (msTime < times[3] && msTime > times[2])
			{
				if (CustomEmotesAPI.localMapper.a2.speed != 2f)
				{
					boneMapper.UpdateSpeed(2f);
				}
			}
			else if (msTime < times[4] && msTime > times[3])
			{
				if (CustomEmotesAPI.localMapper.a2.speed != 4f)
				{
					boneMapper.UpdateSpeed(4f);
				}
			}
			else if (msTime > times[4] && msTime < 83350 && CustomEmotesAPI.localMapper.a2.speed != 2f)
			{
				boneMapper.UpdateSpeed(2f);
			}
		}

		private void FixedUpdate()
		{
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("Sussy_Impostors_United_Inc.Sp00kyEmotePack", "Sp00kyEmotePack", "1.1.2")]
	[R2APISubmoduleDependency(new string[] { "SoundAPI", "PrefabAPI", "LegacyResourcesAPI", "NetworkingAPI" })]
	public class sp00kyEmotesPlugin : BaseUnityPlugin
	{
		public const string PluginGUID = "Sussy_Impostors_United_Inc.Sp00kyEmotePack";

		public const string PluginAuthor = "Sussy_Impostors_United_Inc";

		public const string PluginName = "Sp00kyEmotePack";

		public const string PluginVersion = "1.1.2";

		public static uint playingID;

		public static GameObject tracker;

		internal static int deadSkeleInt;

		internal static GameObject deadSkele;

		internal static int rattleEmInt;

		internal static GameObject rattleEm;

		public void Awake()
		{
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Expected O, but got Unknown
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Expected O, but got Unknown
			//IL_0180: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Expected O, but got Unknown
			//IL_0220: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: Expected O, but got Unknown
			//IL_0277: Unknown result type (might be due to invalid IL or missing references)
			//IL_0281: Expected O, but got Unknown
			//IL_0288: Unknown result type (might be due to invalid IL or missing references)
			//IL_0292: Expected O, but got Unknown
			Log.Init(((BaseUnityPlugin)this).Logger);
			Assets.Init();
			CreateCollection();
			CustomEmotesAPI.AddCustomAnimation(Assets.skeletons, false, "Play_Spooky_scary", "Stop_Spooky_scary", (HumanBodyBones[])null, (HumanBodyBones[])null, (AnimationClip)null, false, false, false, true, false, false);
			AnimationClipParams val = new AnimationClipParams();
			val.animationClip = (AnimationClip[])(object)new AnimationClip[1] { Assets.spookMonth };
			val.looping = true;
			val._wwiseEventName = new string[1] { "Play_Scary_Swings_loop" };
			val._wwiseStopEvent = new string[1] { "Stop_Scary_Swings_loop" };
			val.dimWhenClose = false;
			val.syncAnim = true;
			val.syncAudio = true;
			val.customPostEventCodeSync = spookMonthPostEvent;
			CustomEmotesAPI.AddCustomAnimation(val);
			CustomEmotesAPI.AddCustomAnimation(Assets.tf2Heavy, false, "", "", (HumanBodyBones[])null, (HumanBodyBones[])null, (AnimationClip)null, false, false, false, true, false, false);
			CustomEmotesAPI.AddCustomAnimation(Assets.ghost, true, "Play_Spooky2", "Stop_Spooky2", (HumanBodyBones[])null, (HumanBodyBones[])null, (AnimationClip)null, false, false, false, true, true, true);
			CustomEmotesAPI.AddCustomAnimation(Assets.danceSkel, true, "Play_Spooky3", "Stop_Spooky3", (HumanBodyBones[])null, (HumanBodyBones[])null, (AnimationClip)null, false, false, false, true, true, true);
			AnimationClipParams val2 = new AnimationClipParams();
			val2.animationClip = (AnimationClip[])(object)new AnimationClip[1] { Assets.skeletonsStart };
			val2.looping = false;
			val2.syncAnim = true;
			val2.syncAudio = true;
			val2.secondaryAnimation = (AnimationClip[])(object)new AnimationClip[1] { Assets.skeletonsLoop };
			val2.customName = "spooky skele loop";
			val2._wwiseEventName = new string[1] { "Play_Spooky_scary" };
			val2._wwiseStopEvent = new string[1] { "Stop_Spooky_scary" };
			CustomEmotesAPI.AddCustomAnimation(val2);
			AnimationClipParams val3 = new AnimationClipParams();
			val3.animationClip = (AnimationClip[])(object)new AnimationClip[1] { Assets.idle };
			val3.looping = true;
			val3._wwiseEventName = new string[1] { "Play_Man_im_dead" };
			val3._wwiseStopEvent = new string[1] { "Stop_Man_im_dead" };
			val3.dimWhenClose = false;
			val3.syncAnim = false;
			val3.syncAudio = false;
			val3.customPostEventCodeSync = ImDeadPostEvent;
			CustomEmotesAPI.AddCustomAnimation(val3);
			CustomEmotesAPI.AddNonAnimatingEmote("Rattle em Boys!", true);
			CustomEmotesAPI.BlackListEmote("Rattle em Boys!");
			CustomEmotesAPI.AddNonAnimatingEmote("Delete Rattle em", true);
			CustomEmotesAPI.BlackListEmote("Delete Rattle em");
			AnimationClipParams val4 = new AnimationClipParams();
			val4.animationClip = (AnimationClip[])(object)new AnimationClip[1] { Assets.linkStart };
			val4.secondaryAnimation = (AnimationClip[])(object)new AnimationClip[1] { Assets.linkLoop };
			val4.looping = true;
			val4.dimWhenClose = false;
			val4.syncAnim = false;
			val4.syncAudio = false;
			CustomEmotesAPI.AddCustomAnimation(val4);
			CustomEmotesAPI.animChanged += new AnimationChanged(CustomEmotesAPI_animChanged);
			CustomEmotesAPI.animJoined += new AnimationJoined(CustomEmotesAPI_animJoined);
		}

		private void Start()
		{
			Assets.LoadAddressables();
		}

		private void CustomEmotesAPI_animJoined(string joinedAnimation, BoneMapper joiner, BoneMapper host)
		{
		}

		public static void ScaleWorldProp(BoneMapper animationPlayer, GameObject prop)
		{
			//IL_0051: 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_002d: 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)
			Transform parent = prop.transform.parent;
			float scale = animationPlayer.scale;
			if ((Object)(object)prop.transform.parent == (Object)null)
			{
				Transform transform = prop.transform;
				transform.localScale *= scale;
				return;
			}
			prop.transform.SetParent((Transform)null);
			Transform transform2 = prop.transform;
			transform2.localScale *= scale;
			prop.transform.SetParent(parent);
		}

		private void CreateCollection()
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: 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_0016: 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_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_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: 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_0052: Expected O, but got Unknown
			//IL_0057: Expected O, but got Unknown
			GameObject val = new GameObject
			{
				name = "spookyEmoteTracker"
			};
			val.transform.position = Vector3.zero;
			val.transform.rotation = Quaternion.Euler(Vector3.zero);
			val.transform.localScale = Vector3.one;
			val.AddComponent<BoneMapperTracker>();
			Object.DontDestroyOnLoad((Object)val);
			tracker = val;
		}

		private static void spookMonthPostEvent(BoneMapper mapper)
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Expected O, but got Unknown
			playingID = AkSoundEngine.PostEvent(BoneMapper.startEvents[mapper.currentClip.syncPos][mapper.currEvent], CustomEmotesAPI.audioContainers[mapper.currentClip.syncPos], 1048576u, new EventCallback(SpookCallbackFunction), (object)null);
		}

		private static void ImDeadPostEvent(BoneMapper mapper)
		{
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Expected O, but got Unknown
			AkSoundEngine.PostEvent(BoneMapper.startEvents[mapper.currentClip.syncPos][mapper.currEvent], CustomEmotesAPI.audioContainers[mapper.currentClip.syncPos], 1u, new EventCallback(ImDeadCallbackFunction), (object)null);
		}

		private static void SpookCallbackFunction(object in_cookie, AkCallbackType in_type, object in_info)
		{
		}

		private static void ImDeadCallbackFunction(object in_cookie, AkCallbackType in_type, AkCallbackInfo in_info)
		{
		}

		private void CustomEmotesAPI_animChanged(string newAnimation, BoneMapper mapper)
		{
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_0194: Unknown result type (might be due to invalid IL or missing references)
			//IL_0280: Unknown result type (might be due to invalid IL or missing references)
			//IL_0294: Unknown result type (might be due to invalid IL or missing references)
			//IL_0299: Unknown result type (might be due to invalid IL or missing references)
			int num = -1;
			if (newAnimation == "spooky dance")
			{
				if (!tracker.GetComponent<BoneMapperTracker>().boneMappers.Contains(mapper))
				{
					tracker.GetComponent<BoneMapperTracker>().boneMappers.Add(mapper);
				}
				num = mapper.props.Count;
				mapper.props.Add(Object.Instantiate<GameObject>(Assets.spookyDanceGO));
				mapper.props[num].GetComponent<WwiseTest>().playingID = playingID;
				mapper.props[num].transform.SetParent(((Component)mapper).transform.parent);
				mapper.props[num].transform.localEulerAngles = Vector3.zero;
				mapper.props[num].transform.localPosition = Vector3.zero;
				mapper.ScaleProps();
			}
			if (newAnimation != "spooky dance" && tracker.GetComponent<BoneMapperTracker>().boneMappers.Contains(mapper))
			{
				tracker.GetComponent<BoneMapperTracker>().boneMappers.Remove(mapper);
			}
			if (newAnimation == "Spawn Redead")
			{
				num = mapper.props.Count;
				mapper.props.Add(Object.Instantiate<GameObject>(Assets.Redead));
				mapper.props[num].transform.SetParent(((Component)mapper).transform.parent);
				mapper.props[num].transform.localRotation = Quaternion.Euler(Vector3.zero);
				mapper.props[num].transform.localPosition = Vector3.zero;
				mapper.ScaleProps();
			}
			if (newAnimation == "ImDead" && !Object.op_Implicit((Object)(object)((Component)mapper).gameObject.GetComponent<DeadComp>()))
			{
				((Component)mapper).gameObject.AddComponent<DeadComp>();
			}
			if (newAnimation != "ImDead" && Object.op_Implicit((Object)(object)((Component)mapper).gameObject.GetComponent<DeadComp>()))
			{
				((Component)mapper).gameObject.GetComponent<DeadComp>().Makevisible();
				Object.Destroy((Object)(object)((Component)mapper).gameObject.GetComponent<DeadComp>());
			}
			if (newAnimation == "Rattle em Boys!" && NetworkServer.active)
			{
				if (Object.op_Implicit((Object)(object)rattleEm))
				{
					NetworkServer.Destroy(rattleEm);
				}
				rattleEm = CustomEmotesAPI.SpawnWorldProp(rattleEmInt);
				rattleEm.transform.SetParent(((Component)mapper).transform.parent);
				rattleEm.transform.localPosition = new Vector3(0f, 0f, 2.5f);
				rattleEm.transform.localRotation = Quaternion.Euler(Vector3.zero);
				rattleEm.transform.SetParent((Transform)null);
				NetworkServer.Spawn(rattleEm);
			}
			if (newAnimation == "Delete Rattle em" && NetworkServer.active && Object.op_Implicit((Object)(object)rattleEm))
			{
				NetworkServer.Destroy(rattleEm);
			}
		}
	}
}
namespace sp00kyEmotes.Scripts
{
	public static class Assets
	{
		internal const string assetBundleName = "sp00kAssets";

		internal const string soundBankName = "Spooky_Month_Pack";

		internal static AssetBundle mainAssetBundle;

		public static AnimationClip skeletons;

		public static AnimationClip skeletonsStart;

		public static AnimationClip skeletonsLoop;

		public static AnimationClip ghost;

		public static AnimationClip spookMonth;

		public static AnimationClip tf2Heavy;

		public static AnimationClip danceSkel;

		public static GameObject spookyDanceGO;

		public static AnimationClip spookyMonth2;

		public static GameObject Redead;

		public static GameObject deadSkele;

		public static AnimationClip idle;

		public static GameObject rattleEm;

		public static GameObject muzzleFlashPrefab;

		public static GameObject tracerPrefab;

		public static GameObject hitEffectPrefab;

		public static GameObject ejectPrefab;

		public static AnimationClip linkStart;

		public static AnimationClip linkLoop;

		internal static void Init()
		{
			LoadAssetBundle();
			LoadSoundBank();
			PopulateAssets();
		}

		internal static void PopulateAssets()
		{
			if (!Object.op_Implicit((Object)(object)mainAssetBundle))
			{
				Log.LogError("Sp00kyEmotePack: assetBundle not Found.");
				return;
			}
			skeletons = mainAssetBundle.LoadAsset<AnimationClip>("spooky skele");
			skeletonsStart = mainAssetBundle.LoadAsset<AnimationClip>("spooky skele loop");
			skeletonsLoop = mainAssetBundle.LoadAsset<AnimationClip>("spookylooping");
			ghost = mainAssetBundle.LoadAsset<AnimationClip>("spinning ghost");
			spookMonth = mainAssetBundle.LoadAsset<AnimationClip>("spooky dance");
			tf2Heavy = mainAssetBundle.LoadAsset<AnimationClip>("heavythriller");
			danceSkel = mainAssetBundle.LoadAsset<AnimationClip>("skele dance");
			spookyDanceGO = mainAssetBundle.LoadAsset<GameObject>("SpookyDance");
			Redead = mainAssetBundle.LoadAsset<GameObject>("redead");
			linkStart = mainAssetBundle.LoadAsset<AnimationClip>("Spawn Redead");
			linkLoop = mainAssetBundle.LoadAsset<AnimationClip>("redeadLinkAttackLoop");
			deadSkele = mainAssetBundle.LoadAsset<GameObject>("imDeadSkele");
			sp00kyEmotesPlugin.deadSkeleInt = CustomEmotesAPI.RegisterWorldProp(deadSkele, (JoinSpot[])(object)new JoinSpot[0]);
			idle = mainAssetBundle.LoadAsset<AnimationClip>("ImDead");
			rattleEm = mainAssetBundle.LoadAsset<GameObject>("RattleEm");
			sp00kyEmotesPlugin.rattleEmInt = CustomEmotesAPI.RegisterWorldProp(rattleEm, (JoinSpot[])(object)new JoinSpot[0]);
		}

		internal static void LoadAssetBundle()
		{
			if ((Object)(object)mainAssetBundle == (Object)null)
			{
				mainAssetBundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "sp00kAssets"));
				if (!Object.op_Implicit((Object)(object)mainAssetBundle))
				{
					Log.LogError("Sp00kyEmotePack: assetBundle not Found.");
				}
			}
		}

		internal static void LoadAddressables()
		{
			//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_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_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_004a: 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)
			muzzleFlashPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/Muzzleflash1.prefab").WaitForCompletion();
			tracerPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/TracerCommandoDefault.prefab").WaitForCompletion();
			hitEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/HitsparkCommando.prefab").WaitForCompletion();
			ejectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/Bandit2Reload.prefab").WaitForCompletion();
		}

		internal static void LoadSoundBank()
		{
			SoundBanks.Add(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Spooky_Month_Pack.bnk"));
		}
	}
	public class BoneMapperTracker : MonoBehaviour
	{
		public float speedVar;

		public List<BoneMapper> boneMappers;

		private int oldVal;

		public int curVal;

		private void Start()
		{
			boneMappers = new List<BoneMapper>();
			speedVar = 1f;
			oldVal = 0;
			curVal = 0;
		}

		private void FixedUpdate()
		{
			curVal = boneMappers.Count;
			if (curVal == oldVal)
			{
				return;
			}
			if (curVal > oldVal)
			{
				foreach (BoneMapper boneMapper in boneMappers)
				{
					_ = boneMapper;
					UpdateSpeed(speedVar);
				}
			}
			oldVal = curVal;
		}

		public void CheckMappers(string animName)
		{
			foreach (BoneMapper boneMapper in boneMappers)
			{
				if (((Object)boneMapper.currentClip).name != animName)
				{
					boneMappers.Remove(boneMapper);
				}
			}
		}

		public void UpdateSpeed(float speed)
		{
			foreach (BoneMapper boneMapper in boneMappers)
			{
				boneMapper.SetAnimationSpeed(speed);
				speedVar = speed;
			}
		}
	}
	public class RattleEvents : MonoBehaviour
	{
		private GameObject muzzleFlashPrefab;

		private GameObject tracerPrefab;

		private GameObject hitEffectPrefab;

		private GameObject ejectPrefab;

		private float damage = 1f;

		private float damageCoef = 1f;

		private float force = 50f;

		private BulletAttack bulletAttack;

		private Ray aimRay;

		private ChildLocator childLocator;

		private NetworkIdentity identity;

		private EffectData muzzleFlash;

		private EffectData effectData;

		private void Start()
		{
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: 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_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Expected O, but got Unknown
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Expected O, but got Unknown
			//IL_0111: Unknown result type (might be due to invalid IL or missing references)
			muzzleFlashPrefab = Assets.muzzleFlashPrefab;
			tracerPrefab = Assets.tracerPrefab;
			hitEffectPrefab = Assets.hitEffectPrefab;
			ejectPrefab = Assets.ejectPrefab;
			aimRay = new Ray(((Component)this).transform.position, ((Component)this).transform.forward);
			identity = ((Component)((Component)this).transform.root).GetComponent<NetworkIdentity>();
			childLocator = ((Component)this).GetComponent<ChildLocator>();
			muzzleFlash = new EffectData();
			muzzleFlash.SetNetworkedObjectReference(childLocator.FindChildGameObject("Muzzle"));
			muzzleFlash.origin = muzzleFlash.rootObject.transform.position;
			muzzleFlash.rotation = muzzleFlash.rootObject.transform.rotation;
			effectData = new EffectData();
			effectData.SetNetworkedObjectReference(childLocator.FindChildGameObject("Eject"));
			effectData.origin = effectData.rootObject.transform.position;
		}

		private void Update()
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: 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_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			muzzleFlash.origin = childLocator.FindChildGameObject("Muzzle").transform.position;
			muzzleFlash.rotation = muzzleFlash.rootObject.transform.rotation;
			effectData.origin = childLocator.FindChildGameObject("Eject").transform.position;
			effectData.rotation = effectData.rootObject.transform.rotation;
		}

		public void Shoot()
		{
			EffectManager.SpawnEffect(muzzleFlashPrefab, muzzleFlash, false);
			EffectManager.SpawnEffect(ejectPrefab, effectData, false);
		}
	}
	public class SpawnSound : MonoBehaviour
	{
		[SerializeField]
		private string soundName;

		[SerializeField]
		private string stopSound;

		private void Start()
		{
			Util.PlaySound(soundName, ((Component)this).gameObject);
		}

		private void Update()
		{
		}

		private void OnDestroy()
		{
			if (stopSound != null)
			{
				Util.PlaySound(stopSound, ((Component)this).gameObject);
			}
		}
	}
	public class TestEvents : MonoBehaviour
	{
		[SerializeField]
		public List<CharacterJoint> CharacterJointColliders;

		private float timer = 3f;

		private bool startTimer;

		private void FixedUpdate()
		{
			if (timer > 0f && startTimer)
			{
				timer -= Time.fixedDeltaTime;
			}
			if (timer <= 0f && startTimer)
			{
				DisableRagdoll();
				startTimer = false;
			}
		}

		public void DisableRagdoll()
		{
			CapsuleCollider val = default(CapsuleCollider);
			SphereCollider val2 = default(SphereCollider);
			foreach (CharacterJoint characterJointCollider in CharacterJointColliders)
			{
				if (((Component)characterJointCollider).gameObject.TryGetComponent<CapsuleCollider>(ref val))
				{
					val.radius = 0.2f;
				}
				else if (((Component)characterJointCollider).gameObject.TryGetComponent<SphereCollider>(ref val2))
				{
					val2.radius = 0.5f;
				}
				Object.Destroy((Object)(object)characterJointCollider);
			}
			Util.PlaySound("Play_Skeleton_explode", ((Component)this).gameObject);
		}

		public void EnableRagdoll()
		{
			((Behaviour)((Component)this).gameObject.GetComponent<Animator>()).enabled = false;
			startTimer = true;
		}
	}
}