Decompiled source of Whats Your Deal v0.1.0

plugins/com.github.Fetalpile.dll

Decompiled a month ago
using System;
using System.Collections;
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.Logging;
using ForbiddenFoods;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using PEAKLib.Core;
using PEAKLib.Items;
using Peak.Afflictions;
using Photon.Pun;
using Photon.Voice.PUN;
using Sirenix.Utilities;
using TMPro;
using Unity.Mathematics;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.InputSystem;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using Zorro.Core;
using Zorro.Core.CLI;
using Zorro.Core.Serizalization;
using pworld.Scripts.Extensions;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("com.github.Fetalpile")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("0.0.2.0")]
[assembly: AssemblyInformationalVersion("0.0.2")]
[assembly: AssemblyProduct("com.github.Fetalpile")]
[assembly: AssemblyTitle("ForbiddenFoods")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.2.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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[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;
		}
	}
}
public class Action_InflictSunburn : ItemAction
{
	public float inflictionTime;

	public float burnPerSecond;
}
public class Affliction_Golden : Affliction
{
	public float moveSpeedMod = 0.5f;

	public float climbSpeedMod = 0.75f;

	public float climbDelay;

	public float globmod = 1f;

	public Affliction_Golden(float globmod)
	{
		this.globmod = globmod;
	}

	public override AfflictionType GetAfflictionType()
	{
		//IL_0000: Unknown result type (might be due to invalid IL or missing references)
		return AttitudeCharacterAfflictions.GOLDEN;
	}

	public override void Stack(Affliction incomingAffliction)
	{
		base.totalTime = Mathf.Max(base.totalTime, incomingAffliction.totalTime);
	}

	public override void UpdateEffect()
	{
		if (base.character.data.isClimbing)
		{
			climbDelay = 0f;
			base.bonusTime = 0f;
		}
	}

	public override void OnApplied()
	{
		((Affliction)this).OnApplied();
		base.totalTime = 40f;
		CharacterMovement movement = base.character.refs.movement;
		movement.movementModifier += moveSpeedMod * globmod;
		CharacterClimbing climbing = base.character.refs.climbing;
		climbing.climbSpeedMod += climbSpeedMod * globmod;
		CharacterRopeHandling ropeHandling = base.character.refs.ropeHandling;
		ropeHandling.climbSpeedMod += climbSpeedMod * globmod;
		CharacterVineClimbing vineClimbing = base.character.refs.vineClimbing;
		vineClimbing.climbSpeedMod += climbSpeedMod * globmod;
		if (base.character.IsLocal)
		{
			((Component)base.character).GetComponent<AttitudePlayerAttachment>().StartGoldenAge();
		}
		base.bonusTime = climbDelay;
	}

	public override void OnRemoved()
	{
		((Affliction)this).OnRemoved();
		CharacterMovement movement = base.character.refs.movement;
		movement.movementModifier -= moveSpeedMod * globmod;
		CharacterClimbing climbing = base.character.refs.climbing;
		climbing.climbSpeedMod -= climbSpeedMod * globmod;
		CharacterRopeHandling ropeHandling = base.character.refs.ropeHandling;
		ropeHandling.climbSpeedMod -= climbSpeedMod * globmod;
		CharacterVineClimbing vineClimbing = base.character.refs.vineClimbing;
		vineClimbing.climbSpeedMod -= climbSpeedMod * globmod;
		if (base.character.IsLocal)
		{
			((Component)base.character).GetComponent<AttitudePlayerAttachment>().EndGoldenAge();
		}
	}

	public override void Serialize(BinarySerializer serializer)
	{
		serializer.WriteFloat(base.totalTime);
		serializer.WriteFloat(moveSpeedMod);
		serializer.WriteFloat(climbSpeedMod);
		serializer.WriteFloat(climbDelay);
		serializer.WriteFloat(globmod);
	}

	public override void Deserialize(BinaryDeserializer serializer)
	{
		base.totalTime = serializer.ReadFloat();
		moveSpeedMod = serializer.ReadFloat();
		climbSpeedMod = serializer.ReadFloat();
		climbDelay = serializer.ReadFloat();
		globmod = serializer.ReadFloat();
		base.bonusTime = climbDelay;
	}
}
public class Affliction_Hyped : Affliction
{
	public float moveSpeedMod = 0.75f;

	public float climbSpeedMod = 0.75f;

	public float drowsyOnEnd;

	private float cachedDrowsy;

	public float climbDelay;

	public float globmod = 1f;

	public bool shouldRemoveExtraStamina;

	public int causer;

	public Affliction_Hyped(float globmod, bool shouldremove, int causerID)
	{
		this.globmod = globmod;
		shouldRemoveExtraStamina = shouldremove;
		causer = causerID;
	}

	public override AfflictionType GetAfflictionType()
	{
		return (AfflictionType)12220;
	}

	public override void Stack(Affliction incomingAffliction)
	{
		base.totalTime = Mathf.Max(base.totalTime, incomingAffliction.totalTime);
	}

	public override void UpdateEffect()
	{
		base.character.AddExtraStamina(-0.0005f * (shouldRemoveExtraStamina ? 1f : 0.5f) * ((!base.character.data.isClimbing) ? 0.5f : 1f));
		if (base.character.data.isClimbing)
		{
			climbDelay = 0f;
			base.bonusTime = 0f;
		}
	}

	public override void OnApplied()
	{
		((Affliction)this).OnApplied();
		base.totalTime = 50f;
		CharacterMovement movement = base.character.refs.movement;
		movement.movementModifier += moveSpeedMod * globmod;
		CharacterClimbing climbing = base.character.refs.climbing;
		climbing.climbSpeedMod += climbSpeedMod * globmod;
		CharacterRopeHandling ropeHandling = base.character.refs.ropeHandling;
		ropeHandling.climbSpeedMod += climbSpeedMod * globmod;
		CharacterVineClimbing vineClimbing = base.character.refs.vineClimbing;
		vineClimbing.climbSpeedMod += climbSpeedMod * globmod;
		if (base.character.IsLocal)
		{
			GUIManager.instance.StartEnergyDrink();
		}
		cachedDrowsy = base.character.refs.afflictions.GetCurrentStatus((STATUSTYPE)6);
		base.character.refs.afflictions.SubtractStatus((STATUSTYPE)6, 2f, false);
		base.bonusTime = climbDelay;
	}

	public override void OnRemoved()
	{
		((Affliction)this).OnRemoved();
		CharacterMovement movement = base.character.refs.movement;
		movement.movementModifier -= moveSpeedMod * globmod;
		CharacterClimbing climbing = base.character.refs.climbing;
		climbing.climbSpeedMod -= climbSpeedMod * globmod;
		CharacterRopeHandling ropeHandling = base.character.refs.ropeHandling;
		ropeHandling.climbSpeedMod -= climbSpeedMod * globmod;
		CharacterVineClimbing vineClimbing = base.character.refs.vineClimbing;
		vineClimbing.climbSpeedMod -= climbSpeedMod * globmod;
		GUIManager.instance.EndEnergyDrink();
	}

	public override void Serialize(BinarySerializer serializer)
	{
		serializer.WriteFloat(base.totalTime);
		serializer.WriteFloat(moveSpeedMod);
		serializer.WriteFloat(climbSpeedMod);
		serializer.WriteFloat(drowsyOnEnd);
		serializer.WriteFloat(cachedDrowsy);
		serializer.WriteFloat(climbDelay);
		serializer.WriteFloat(globmod);
		serializer.WriteBool(shouldRemoveExtraStamina);
		serializer.WriteInt(causer);
	}

	public override void Deserialize(BinaryDeserializer serializer)
	{
		base.totalTime = serializer.ReadFloat();
		moveSpeedMod = serializer.ReadFloat();
		climbSpeedMod = serializer.ReadFloat();
		drowsyOnEnd = serializer.ReadFloat();
		cachedDrowsy = serializer.ReadFloat();
		climbDelay = serializer.ReadFloat();
		globmod = serializer.ReadFloat();
		shouldRemoveExtraStamina = serializer.ReadBool();
		causer = serializer.ReadInt();
		base.bonusTime = climbDelay;
	}
}
public class AttitudeCharacterAfflictions : MonoBehaviourPunCallbacks
{
	public enum STATUSTYPE
	{
		SUNBURN,
		DEPRESSION
	}

	public static AfflictionType GOLDEN = (AfflictionType)12220;

	public static AfflictionType HYPED = (AfflictionType)12221;

	public static AfflictionType DRAINED = (AfflictionType)12222;
}
public static class AttitudeHandler
{
	public static Dictionary<string, Attitude> attitudes = new Dictionary<string, Attitude>
	{
		{
			"NONE",
			new Attitude()
		},
		{
			"BOOKWORM",
			new BookWormAttitude()
		},
		{
			"BULLY",
			new BullyAttitude()
		},
		{
			"CLASS_CLOWN",
			new ClassClownAttitude()
		},
		{
			"EXCITABLE",
			new ExcitableAttitude()
		},
		{
			"FREAK",
			new FreakAttitude()
		},
		{
			"GOLDEN_CHILD",
			new GoldenChildAttitude()
		},
		{
			"GOTH",
			new GothAttitude()
		},
		{
			"NAUGHTY",
			new NaughtyAttitude()
		},
		{
			"PICKY_EATER",
			new PickyEaterAttitude()
		},
		{
			"POINDEXTER",
			new PoindexterAttitude()
		},
		{
			"STICKY",
			new StickyAttitude()
		},
		{
			"SWEETIE",
			new SweetieAttitude()
		}
	};

	public static void Start()
	{
	}

	public static bool IsCharacterAttitude(string att, Character cha)
	{
		if ((Object)(object)cha == (Object)null || (Object)(object)((Component)cha).gameObject.GetComponentInChildren<AttitudePlayerAttachment>() == (Object)null)
		{
			return false;
		}
		return ((Component)cha).gameObject.GetComponentInChildren<AttitudePlayerAttachment>().getCurrentAttitude() == attitudes.GetValueOrDefault(att);
	}

	public static bool IsCharacterAttitudeUnlocked(string att, Character cha)
	{
		if ((Object)(object)cha == (Object)null || (Object)(object)((Component)cha).gameObject.GetComponentInChildren<AttitudePlayerAttachment>() == (Object)null)
		{
			return false;
		}
		return ((Component)cha).gameObject.GetComponentInChildren<AttitudePlayerAttachment>().unlockedAttitudes.Contains(att);
	}

	public static void SetAttitude(string NewAttitude, Character cha)
	{
		if (!((Object)(object)cha == (Object)null) && !((Object)(object)((Component)cha).gameObject.GetComponentInChildren<AttitudePlayerAttachment>() == (Object)null))
		{
			((Component)cha).gameObject.GetComponentInChildren<AttitudePlayerAttachment>().setCurrentAttitude(NewAttitude);
		}
	}

	public static string GetCurrentAttitude(Character cha)
	{
		return ((Component)cha).gameObject.GetComponentInChildren<AttitudePlayerAttachment>().getCurrentAttitude().getDictCode();
	}
}
public class AttitudePlayerAttachment : MonoBehaviour
{
	[CompilerGenerated]
	private sealed class <IThrow>d__34 : IEnumerator<object>, IEnumerator, IDisposable
	{
		private int <>1__state;

		private object <>2__current;

		public int myid;

		public int id;

		public float mod;

		object IEnumerator<object>.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		object IEnumerator.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		[DebuggerHidden]
		public <IThrow>d__34(int <>1__state)
		{
			this.<>1__state = <>1__state;
		}

		[DebuggerHidden]
		void IDisposable.Dispose()
		{
			<>1__state = -2;
		}

		private bool MoveNext()
		{
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: 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_0086: 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_00a4: Unknown result type (might be due to invalid IL or missing references)
			switch (<>1__state)
			{
			default:
				return false;
			case 0:
			{
				<>1__state = -1;
				Character component = ((Component)PhotonView.Find(myid)).GetComponent<Character>();
				Character component2 = ((Component)PhotonView.Find(id)).GetComponent<Character>();
				if (component2.IsLocal)
				{
					GamefeelHandler.instance.AddPerlinShake(15f, 0.5f, 15f);
				}
				if (mod != 0f)
				{
					Vector3 lookDirection = component.data.lookDirection;
					((Vector3)(ref lookDirection)).Normalize();
					Vector3 val = lookDirection * 1500f * mod;
					component2.RPCA_Fall(1f);
					component2.AddForce(val, 0.7f, 1f);
					component2.refs.afflictions.AddStatus((STATUSTYPE)0, 0.025f * (mod * 0.01f), true);
					if (component.refs.view.IsMine)
					{
						GUIManager.instance.Grasp();
					}
					else if (component2.refs.view.IsMine)
					{
						GUIManager.instance.InjuryFX(mod);
					}
				}
				component2.GetBodypartRig((BodypartType)2).useGravity = true;
				<>2__current = null;
				<>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 <delayedCurrent>d__23 : IEnumerator<object>, IEnumerator, IDisposable
	{
		private int <>1__state;

		private object <>2__current;

		public AttitudePlayerAttachment <>4__this;

		object IEnumerator<object>.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		object IEnumerator.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		[DebuggerHidden]
		public <delayedCurrent>d__23(int <>1__state)
		{
			this.<>1__state = <>1__state;
		}

		[DebuggerHidden]
		void IDisposable.Dispose()
		{
			<>1__state = -2;
		}

		private bool MoveNext()
		{
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Expected O, but got Unknown
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Expected O, but got Unknown
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			int num = <>1__state;
			AttitudePlayerAttachment attitudePlayerAttachment = <>4__this;
			switch (num)
			{
			default:
				return false;
			case 0:
				<>1__state = -1;
				goto IL_004e;
			case 1:
				<>1__state = -1;
				goto IL_004e;
			case 2:
				<>1__state = -1;
				<>2__current = null;
				<>1__state = 3;
				return true;
			case 3:
				<>1__state = -1;
				<>2__current = null;
				<>1__state = 4;
				return true;
			case 4:
				<>1__state = -1;
				<>2__current = (object)new WaitForSeconds(1.55f);
				<>1__state = 5;
				return true;
			case 5:
				{
					<>1__state = -1;
					GameObject val = Object.Instantiate<GameObject>(new GameObject(), ((Component)TransformExtensions.FindChildRecursive(GameObject.Find("Canvas_HUD").transform, "Inventory")).transform);
					attitudePlayerAttachment.TMPGrade = val.AddComponent<TextMeshProUGUI>();
					((TMP_Text)attitudePlayerAttachment.TMPGrade).outlineColor = Color32.op_Implicit(Color.black);
					((TMP_Text)attitudePlayerAttachment.TMPGrade).outlineWidth = 10f;
					val.transform.position = new Vector3(1850f, 175f, 0f);
					((TMP_Text)attitudePlayerAttachment.TMPGrade).text = "";
					((TMP_Text)attitudePlayerAttachment.TMPGrade).font = Resources.FindObjectsOfTypeAll<TMP_FontAsset>().ToList().Find((TMP_FontAsset x) => ((Object)x).name == "Montserrat-ExtraBold SDF");
					((TMP_Text)attitudePlayerAttachment.TMPGrade).fontMaterial = Resources.FindObjectsOfTypeAll<Material>().ToList().Find((Material x) => ((Object)x).name == "Montserrat-ExtraBold SDF Material");
					((Behaviour)attitudePlayerAttachment.TMPGrade).enabled = false;
					GameObject val2 = Object.Instantiate<GameObject>(Plugin.goldenVFX, GameObject.Find("Volumes").transform);
					attitudePlayerAttachment.goldenSVFX = val2.GetComponent<ScreenVFX>();
					attitudePlayerAttachment.sparkle = Object.Instantiate<GameObject>(Plugin.sparkles, ((Component)attitudePlayerAttachment.parent.GetBodypart((BodypartType)2)).transform, false);
					attitudePlayerAttachment.sparkleSys = attitudePlayerAttachment.sparkle.GetComponent<ParticleSystem>();
					attitudePlayerAttachment.sparkleSys.Stop();
					attitudePlayerAttachment.sparkleSys.Clear();
					attitudePlayerAttachment.currentAttitude.OnAdd(attitudePlayerAttachment.parent);
					return false;
				}
				IL_004e:
				if (!Object.op_Implicit((Object)(object)Character.localCharacter))
				{
					<>2__current = null;
					<>1__state = 1;
					return true;
				}
				<>2__current = null;
				<>1__state = 2;
				return true;
			}
		}

		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 Character parent;

	public Character target;

	public int tickcount;

	public float grade = 100f;

	public string gradeLetter = "N/A";

	public bool isLocal;

	public SpringJoint joint;

	public bool isThrowing;

	public float sinceSpecialPressTime;

	public AttitudeCharacterInput input;

	private Attitude currentAttitude = AttitudeHandler.attitudes.GetValueOrDefault("NONE", new Attitude());

	public TextMeshProUGUI TMPGrade;

	public ScreenVFX goldenSVFX;

	public GameObject sparkle;

	public ParticleSystem sparkleSys;

	public List<string> unlockedAttitudes = AttitudeHandler.attitudes.Keys.ToList();

	public void StartGoldenAge()
	{
		PExt.Restart(sparkleSys);
	}

	public void EndGoldenAge()
	{
		sparkleSys.Stop();
	}

	public void unlockAttitude(string tude)
	{
		if (isLocal && !unlockedAttitudes.Contains(tude))
		{
			unlockedAttitudes.Add(tude);
		}
	}

	public Attitude getCurrentAttitude()
	{
		return currentAttitude;
	}

	public void setCurrentAttitude(string tude)
	{
		currentAttitude.OnRemove(parent);
		if (unlockedAttitudes.Contains(tude) && !AttitudeHandler.attitudes.TryGetValue(tude, out currentAttitude))
		{
			Plugin.Log.LogError((object)(tude + " is Not A Valid Attitude"));
		}
		else
		{
			PlayerPrefs.SetString("shellworks:ATTITUDE", tude);
		}
		currentAttitude.OnAdd(parent);
	}

	public void setCurrentAttitude(Attitude tude)
	{
		if (isLocal)
		{
			currentAttitude = tude;
			PlayerPrefs.SetString("shellworks:ATTITUDE", tude.getDictCode());
		}
	}

	private void Start()
	{
		string @string = PlayerPrefs.GetString("shellworks:ATTITUDE");
		parent = ((Component)this).GetComponentInParent<Character>();
		if (unlockedAttitudes.Contains(@string) && !AttitudeHandler.attitudes.TryGetValue(@string, out currentAttitude))
		{
			Plugin.Log.LogError((object)(@string + " is Not A Valid Attitude"));
		}
		if (parent.view.IsMine)
		{
			((MonoBehaviour)this).StartCoroutine(delayedCurrent());
		}
	}

	[IteratorStateMachine(typeof(<delayedCurrent>d__23))]
	public IEnumerator delayedCurrent()
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <delayedCurrent>d__23(0)
		{
			<>4__this = this
		};
	}

	private void Update()
	{
		if (isLocal && Object.op_Implicit((Object)(object)Character.localCharacter) && currentAttitude != null)
		{
			input.Sample(playerMovementActive: true);
			UpdateVariablesFixed();
		}
	}

	private void FixedUpdate()
	{
		if (isLocal && Object.op_Implicit((Object)(object)Character.localCharacter) && currentAttitude != null)
		{
			currentAttitude.UpdateAttitude(parent, this);
			tickcount++;
		}
	}

	private void UpdateVariablesFixed()
	{
		if (input.specialWasPressed)
		{
			currentAttitude.onPress(parent, this);
		}
		if (input.specialIsHeld)
		{
			sinceSpecialPressTime += Time.fixedDeltaTime;
			currentAttitude.onHeld(parent, this, sinceSpecialPressTime);
		}
		if (input.specialWasReleased)
		{
			currentAttitude.onRelease(parent, this, sinceSpecialPressTime);
			sinceSpecialPressTime = 0f;
		}
	}

	[PunRPC]
	public void RPCA_AddStatusCurse(int target)
	{
		Character component = ((Component)PhotonView.Find(target)).GetComponent<Character>();
		if (component.IsLocal)
		{
			Character.localCharacter.refs.afflictions.AddStatus((STATUSTYPE)5, 0.001f, false);
		}
	}

	[PunRPC]
	public void RPCA_AddStatusStamina(int target)
	{
		Character component = ((Component)PhotonView.Find(target)).GetComponent<Character>();
		if (component.IsLocal)
		{
			component.AddStamina(0.001f);
		}
	}

	[PunRPC]
	public void RPCA_AddStatusStaminaCap(int target, int id, float stamina)
	{
		Character component = ((Component)PhotonView.Find(target)).GetComponent<Character>();
		if (component.IsLocal)
		{
			Affliction val = (Affliction)(object)new Affliction_Hyped(stamina, shouldremove: false, id);
			component.refs.afflictions.AddAffliction(val, false);
		}
	}

	[PunRPC]
	public void RPCA_RemoveStatusStaminaCap(int target, int id)
	{
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		Character component = ((Component)PhotonView.Find(target)).GetComponent<Character>();
		Affliction val = default(Affliction);
		if (component.IsLocal && component.refs.afflictions.HasAfflictionType((IEnumerable<Affliction>)component.refs.afflictions.afflictionList, AttitudeCharacterAfflictions.HYPED, ref val) && val is Affliction_Hyped affliction_Hyped && affliction_Hyped.causer == id)
		{
			component.refs.afflictions.RemoveAffliction(val, false);
		}
	}

	[PunRPC]
	public void RPCA_AddStatusExtraStamina(int target)
	{
		Character component = ((Component)PhotonView.Find(target)).GetComponent<Character>();
		if (component.IsLocal)
		{
			component.AddExtraStamina(0.0005f);
		}
	}

	[PunRPC]
	public void RPCA_AddStinkoid(int id)
	{
		Character component = ((Component)PhotonView.Find(id)).GetComponent<Character>();
		GameObject val = Object.Instantiate<GameObject>(Plugin.stinkcloud, ((Component)component.GetBodypart((BodypartType)2)).transform, false);
		Plugin.Log.LogMessage((object)"STUNK");
	}

	[PunRPC]
	public void RPCA_ThrowYay(float mod, int id, int myid)
	{
		((MonoBehaviour)this).StartCoroutine(IThrow(mod, id, myid));
	}

	[IteratorStateMachine(typeof(<IThrow>d__34))]
	private IEnumerator IThrow(float mod, int id, int myid)
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <IThrow>d__34(0)
		{
			mod = mod,
			id = id,
			myid = myid
		};
	}

	[PunRPC]
	public void RPCA_Punch(float mod, int id, int myid)
	{
		//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_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_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: 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)
		//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_007b: Unknown result type (might be due to invalid IL or missing references)
		Character component = ((Component)PhotonView.Find(myid)).GetComponent<Character>();
		Character component2 = ((Component)PhotonView.Find(id)).GetComponent<Character>();
		if (component2.IsLocal)
		{
			GamefeelHandler.instance.AddPerlinShake(15f * mod, 0.5f, 15f);
		}
		if (mod != 0f)
		{
			Vector3 val = Vector3.Normalize(component.Center - component2.Center);
			Vector3 val2 = val * 2000f * mod;
			component2.RPCA_Fall(1f);
			component2.AddForce(val2, 0.7f, 1f);
			component2.refs.afflictions.AddStatus((STATUSTYPE)0, 0.0125f * (mod * 0.05f), true);
			if (!component.refs.view.IsMine && component2.refs.view.IsMine)
			{
				GUIManager.instance.InjuryFX(mod);
			}
		}
	}

	[PunRPC]
	public void RPCA_BEHELD(int id, int myid)
	{
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		Character component = ((Component)PhotonView.Find(myid)).GetComponent<Character>();
		Character component2 = ((Component)PhotonView.Find(id)).GetComponent<Character>();
		component2.DragTowards(((Component)component.GetBodypartRig((BodypartType)10)).transform.position, 150f);
		component2.LimitFalling();
	}

	[PunRPC]
	public void RPCA_GRISP(int id, int myid)
	{
		Character component = ((Component)PhotonView.Find(myid)).GetComponent<Character>();
		Character component2 = ((Component)PhotonView.Find(id)).GetComponent<Character>();
		if (component.GetTotalStamina() > component2.GetTotalStamina())
		{
			ItemSlot itemSlot = component.player.GetItemSlot(component.refs.items.currentSelectedSlot.Value);
			component.player.AddItem(component2.data.currentItem.itemID, component2.data.currentItem.data, ref itemSlot);
			component2.player.GetItemSlot(component2.refs.items.currentSelectedSlot.Value).prefab.Consume();
			component2.player.GetItemSlot(component2.refs.items.currentSelectedSlot.Value).EmptyOut();
		}
	}

	[PunRPC]
	public void RPCA_UpdateAttitude(int id, string option)
	{
	}
}
public class Attitude
{
	[Serializable]
	public class AttitudeUIData
	{
		public string attitudeName;

		public string likes;

		public string dislikes;

		public Texture2D icon;

		public Vector3 iconPositionOffset;

		public Vector3 iconRotationOffset;

		public float iconScaleOffset = 1f;

		public AttitudeUIData(string attitudeName, string likes, string dislikes, Texture2D icon)
		{
			this.attitudeName = attitudeName;
			this.likes = likes;
			this.dislikes = dislikes;
			this.icon = icon;
		}

		public AttitudeUIData(string attitudeName, string likes, string dislikes, Texture2D icon, Vector3 iconPositionOffset, Vector3 iconRotationOffset, float iconScaleOffset)
		{
			//IL_002f: 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_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			this.attitudeName = attitudeName;
			this.likes = likes;
			this.dislikes = dislikes;
			this.icon = icon;
			this.iconPositionOffset = iconPositionOffset;
			this.iconRotationOffset = iconRotationOffset;
			this.iconScaleOffset = iconScaleOffset;
		}
	}

	private AttitudeUIData baddata = new AttitudeUIData("NONE", "Water without any ice", "The term 'normie'", Icons.NONE);

	private string dictcode = "NONE";

	public virtual string getDictCode()
	{
		return dictcode;
	}

	public virtual AttitudeUIData GetUIData()
	{
		return baddata;
	}

	public virtual void OnAdd(Character cha)
	{
	}

	public virtual void OnRemove(Character cha)
	{
	}

	public virtual void UpdateAttitude(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
	}

	public virtual void onHeld(Character cha, AttitudePlayerAttachment attitudePlayerAttachment, float sinceSpecialPressTime)
	{
	}

	public virtual void onPress(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
	}

	public virtual void onRelease(Character cha, AttitudePlayerAttachment attitudePlayerAttachment, float sinceSpecialPressTime)
	{
	}
}
public class BookWormAttitude : Attitude
{
	private AttitudeUIData uidata = new AttitudeUIData("BOOKWORM", "learning!", "long walks :(", Icons.BOOKWORM);

	private string dictcode = "BOOKWORM";

	public override string getDictCode()
	{
		return dictcode;
	}

	public override AttitudeUIData GetUIData()
	{
		return uidata;
	}

	public override void UpdateAttitude(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
	}
}
public class BullyAttitude : Attitude
{
	public int timer = 10000;

	private AttitudeUIData uidata = new AttitudeUIData("BULLY", "hurting others", "thinking about home.", Icons.BULLY);

	private string dictcode = "BULLY";

	public override string getDictCode()
	{
		return dictcode;
	}

	public override AttitudeUIData GetUIData()
	{
		return uidata;
	}

	public override void onPress(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
		if (!cha.data.dead && (Object)(object)cha.data.currentItem == (Object)null)
		{
			attitudePlayerAttachment.target = GetTarget(cha);
			_ = (Object)(object)attitudePlayerAttachment.target != (Object)null;
		}
	}

	public override void onHeld(Character cha, AttitudePlayerAttachment attitudePlayerAttachment, float sinceSpecialPressTime)
	{
		if (cha.view.IsMine && (Object)(object)attitudePlayerAttachment.target != (Object)null)
		{
			HoldPlayer(cha, attitudePlayerAttachment, 0f);
			Plugin.Log.LogMessage((object)("I:" + ((object)cha)?.ToString() + " am Trying to hold : " + (object)attitudePlayerAttachment.target));
		}
	}

	public override void onRelease(Character cha, AttitudePlayerAttachment attitudePlayerAttachment, float sinceSpecialPressTime)
	{
		if (!((Object)(object)attitudePlayerAttachment.target != (Object)null))
		{
			return;
		}
		if (sinceSpecialPressTime >= 1f)
		{
			float num = sinceSpecialPressTime / 10f;
			Plugin.Log.LogMessage((object)("Trying to throw : " + (object)attitudePlayerAttachment.target));
			cha.view.RPC("RPCA_ThrowYay", (RpcTarget)0, new object[3]
			{
				num,
				attitudePlayerAttachment.target.view.ViewID,
				cha.view.ViewID
			});
			cha.UseStamina(num, true);
			attitudePlayerAttachment.isThrowing = false;
			attitudePlayerAttachment.target = null;
		}
		else if (cha.input.interactIsPressed)
		{
			if ((Object)(object)cha.data.currentItem == (Object)null && (Object)(object)attitudePlayerAttachment.target.data.currentItem != (Object)null)
			{
				cha.view.RPC("RPCA_GRISP", (RpcTarget)0, new object[2]
				{
					attitudePlayerAttachment.target.view.ViewID,
					cha.view.ViewID
				});
			}
		}
		else if (sinceSpecialPressTime > 0.01f)
		{
			Plugin.Log.LogMessage((object)("Trying to BOP : " + (object)attitudePlayerAttachment.target));
			cha.view.RPC("RPCA_Punch", (RpcTarget)0, new object[3]
			{
				sinceSpecialPressTime,
				attitudePlayerAttachment.target.view.ViewID,
				cha.view.ViewID
			});
			cha.UseStamina(sinceSpecialPressTime * 0.2f, true);
			attitudePlayerAttachment.isThrowing = false;
			attitudePlayerAttachment.target = null;
		}
	}

	private void HoldPlayer(Character cha, AttitudePlayerAttachment attitudePlayerAttachment, float power)
	{
		cha.view.RPC("RPCA_BEHELD", (RpcTarget)0, new object[2]
		{
			attitudePlayerAttachment.target.view.ViewID,
			cha.view.ViewID
		});
		cha.UseStamina((((Vector3)(ref attitudePlayerAttachment.target.data.worldMovementInput)).magnitude > 0f) ? (0.01f * attitudePlayerAttachment.target.GetTotalStamina()) : 0.001f, true);
		if (cha.OutOfStamina())
		{
			Plugin.Log.LogMessage((object)("Dropped : " + (object)attitudePlayerAttachment.target));
			cha.view.RPC("RPCA_ThrowYay", (RpcTarget)0, new object[3]
			{
				0,
				attitudePlayerAttachment.target.view.ViewID,
				cha.view.ViewID
			});
			attitudePlayerAttachment.isThrowing = false;
			attitudePlayerAttachment.target = null;
		}
	}

	private Character GetTarget(Character cha)
	{
		//IL_004b: 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_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_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)
		Character val = null;
		float num = float.MaxValue;
		foreach (Character allPlayerCharacter in PlayerHandler.GetAllPlayerCharacters())
		{
			Plugin.Log.LogMessage((object)("Considering Yanking : " + (object)allPlayerCharacter));
			float num2 = Vector3.Angle(((Component)MainCamera.instance).transform.forward, allPlayerCharacter.Center - ((Component)MainCamera.instance).transform.position);
			if ((double)num2 < (double)num && (Object)(object)allPlayerCharacter != (Object)(object)cha && Vector3.Distance(allPlayerCharacter.Center, cha.Center) < 2f)
			{
				num = num2;
				val = allPlayerCharacter;
			}
		}
		Plugin.Log.LogMessage((object)("Trying to yank : " + (object)val));
		return val;
	}

	public override void UpdateAttitude(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
		if (!cha.data.dead && !cha.refs.afflictions.m_inAirport && attitudePlayerAttachment.tickcount > timer)
		{
			attitudePlayerAttachment.tickcount = 0;
			cha.refs.afflictions.AddStatus((STATUSTYPE)5, 0.025f, false);
		}
	}
}
public class ClassClownAttitude : Attitude
{
	public static float threshold = 10f;

	public int timer = 20;

	private AttitudeUIData uidata = new AttitudeUIData("CLASS CLOWN", "making my friends happy!", "the inevitability of death...", Icons.CLASSCLOWN);

	private string dictcode = "CLASS_CLOWN";

	public override string getDictCode()
	{
		return dictcode;
	}

	public override AttitudeUIData GetUIData()
	{
		return uidata;
	}

	public override void UpdateAttitude(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
		//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		if (attitudePlayerAttachment.tickcount <= timer)
		{
			return;
		}
		attitudePlayerAttachment.tickcount = 0;
		foreach (Character allPlayerCharacter in PlayerHandler.GetAllPlayerCharacters())
		{
			if (allPlayerCharacter.data.dead)
			{
				continue;
			}
			if (cha.data.dead)
			{
				if (Vector3.Distance(cha.Ghost.m_target.Center, allPlayerCharacter.Center) <= threshold)
				{
					cha.view.RPC("RPCA_AddStatusCurse", (RpcTarget)0, new object[1] { allPlayerCharacter.view.ViewID });
				}
			}
			else if (Vector3.Distance(cha.Center, allPlayerCharacter.Center) <= threshold)
			{
				cha.view.RPC("RPCA_AddStatusStamina", (RpcTarget)0, new object[1] { allPlayerCharacter.view.ViewID });
				if ((Object)(object)((Component)cha).gameObject.GetComponent<PhotonVoiceView>() != (Object)null && (Object)(object)((Component)cha).gameObject.GetComponent<PhotonVoiceView>().RecorderInUse != (Object)null && ((Component)cha).gameObject.GetComponent<PhotonVoiceView>().RecorderInUse.LevelMeter.CurrentAvgAmp > 0.01f)
				{
					cha.view.RPC("RPCA_AddStatusExtraStamina", (RpcTarget)0, new object[1] { allPlayerCharacter.view.ViewID });
				}
			}
		}
	}
}
public class ExcitableAttitude : Attitude
{
	public static float threshold = 10.5f;

	public static int timer = 250;

	private AttitudeUIData uidata = new AttitudeUIData("EXCITABLE", "RUNNING FAST", "getting sleepy", Icons.EXCITABLE);

	private string dictcode = "EXCITABLE";

	public override string getDictCode()
	{
		return dictcode;
	}

	public override AttitudeUIData GetUIData()
	{
		return uidata;
	}

	public override void OnAdd(Character cha)
	{
		base.OnAdd(cha);
	}

	public override void onPress(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
		//IL_007e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		if (!(cha.data.extraStamina > 0f))
		{
			return;
		}
		cha.refs.afflictions.AddAffliction((Affliction)(object)new Affliction_Hyped(cha.data.extraStamina, shouldremove: true, ((MonoBehaviourPun)cha).photonView.ViewID), false);
		foreach (Character allPlayerCharacter in PlayerHandler.GetAllPlayerCharacters())
		{
			if (!allPlayerCharacter.data.dead && (Object)(object)cha != (Object)(object)allPlayerCharacter && !cha.data.dead && Vector3.Distance(cha.Center, allPlayerCharacter.Center) <= threshold)
			{
				cha.view.RPC("RPCA_AddStatusStaminaCap", (RpcTarget)0, new object[3]
				{
					allPlayerCharacter.view.ViewID,
					cha.view.ViewID,
					cha.data.extraStamina
				});
			}
		}
	}

	public override void onRelease(Character cha, AttitudePlayerAttachment attitudePlayerAttachment, float sinceSpecialPressTime)
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		Affliction val = default(Affliction);
		if (cha.refs.afflictions.HasAfflictionType((IEnumerable<Affliction>)cha.refs.afflictions.afflictionList, AttitudeCharacterAfflictions.HYPED, ref val))
		{
			cha.refs.afflictions.RemoveAffliction(val, false);
		}
		foreach (Character allPlayerCharacter in PlayerHandler.GetAllPlayerCharacters())
		{
			if (!allPlayerCharacter.data.dead && (Object)(object)cha != (Object)(object)allPlayerCharacter && !cha.data.dead)
			{
				cha.view.RPC("RPCA_RemoveStatusStaminaCap", (RpcTarget)0, new object[2]
				{
					((MonoBehaviourPun)allPlayerCharacter).photonView.ViewID,
					((MonoBehaviourPun)cha).photonView.ViewID
				});
			}
		}
	}

	public override void UpdateAttitude(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
		if (attitudePlayerAttachment.tickcount % timer == 0 && !(cha.data.extraStamina > 0f))
		{
			cha.refs.afflictions.AddStatus((STATUSTYPE)6, 0.0125f, false);
		}
	}
}
public class FreakAttitude : Attitude
{
	public static int timer = 1000;

	private AttitudeUIData uidata = new AttitudeUIData("FREAK", "Gross stuff", "You.", Icons.FREAK);

	private string dictcode = "FREAK";

	private Random rand;

	public override string getDictCode()
	{
		return dictcode;
	}

	public override AttitudeUIData GetUIData()
	{
		return uidata;
	}

	public override void UpdateAttitude(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
		if (attitudePlayerAttachment.tickcount % timer == 0 && ((Random)(ref rand)).NextInt(100) == 0)
		{
			cha.view.RPC("RPCA_AddStinkoid", (RpcTarget)0, new object[1] { cha.view.ViewID });
		}
	}
}
public class GoldenChildAttitude : Attitude
{
	public static int timer = 200;

	private AttitudeUIData uidata = new AttitudeUIData("GOLDEN CHILD", "Being Praised For My Abilities", "When I Mess Up", Icons.GOLDENCHILD);

	private string dictcode = "GOLDEN_CHILD";

	public override string getDictCode()
	{
		return dictcode;
	}

	public override AttitudeUIData GetUIData()
	{
		return uidata;
	}

	public override void UpdateAttitude(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
		if (attitudePlayerAttachment.tickcount > timer)
		{
			attitudePlayerAttachment.tickcount = 0;
			UpdateGrade(cha, attitudePlayerAttachment);
		}
	}

	public override void OnAdd(Character cha)
	{
		((Behaviour)((Component)cha).GetComponent<AttitudePlayerAttachment>().TMPGrade).enabled = true;
		UpdateGrade(cha, ((Component)cha).GetComponent<AttitudePlayerAttachment>());
	}

	public override void OnRemove(Character cha)
	{
		((Behaviour)((Component)cha).GetComponent<AttitudePlayerAttachment>().TMPGrade).enabled = false;
	}

	public void UpdateGrade(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: Unknown result type (might be due to invalid IL or missing references)
		//IL_00af: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0135: 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_01a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0242: 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_02e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_037c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0335: Unknown result type (might be due to invalid IL or missing references)
		float num = (attitudePlayerAttachment.grade = GradePercent(cha, attitudePlayerAttachment));
		if (num >= 100f)
		{
			attitudePlayerAttachment.gradeLetter = "A++";
			((Graphic)attitudePlayerAttachment.TMPGrade).color = Color.yellow;
			cha.refs.afflictions.AddAffliction((Affliction)(object)new Affliction_Golden(1.25f), false);
		}
		else if (num >= 98f)
		{
			attitudePlayerAttachment.gradeLetter = "A+";
			((Graphic)attitudePlayerAttachment.TMPGrade).color = Color.green;
			cha.refs.afflictions.AddAffliction((Affliction)(object)new Affliction_Golden(0.95f), false);
		}
		else if (num >= 95f)
		{
			attitudePlayerAttachment.gradeLetter = "A";
			((Graphic)attitudePlayerAttachment.TMPGrade).color = Color.green;
			cha.refs.afflictions.AddAffliction((Affliction)(object)new Affliction_Golden(0.5f), false);
		}
		else if (num >= 90f)
		{
			attitudePlayerAttachment.gradeLetter = "A-";
			((Graphic)attitudePlayerAttachment.TMPGrade).color = Color.green;
			cha.refs.afflictions.AddAffliction((Affliction)(object)new Affliction_Golden(0.125f), false);
		}
		else if (num >= 88f)
		{
			attitudePlayerAttachment.gradeLetter = "B+";
			((Graphic)attitudePlayerAttachment.TMPGrade).color = Color.green;
			cha.refs.afflictions.AddAffliction((Affliction)(object)new Affliction_Golden(0.0025f), false);
		}
		else if (num >= 85f)
		{
			attitudePlayerAttachment.gradeLetter = "B";
			((Graphic)attitudePlayerAttachment.TMPGrade).color = Color.green;
		}
		else if (num >= 80f)
		{
			attitudePlayerAttachment.gradeLetter = "B-";
			((Graphic)attitudePlayerAttachment.TMPGrade).color = Color.green;
		}
		else if (num >= 78f)
		{
			attitudePlayerAttachment.gradeLetter = "C+";
			((Graphic)attitudePlayerAttachment.TMPGrade).color = Color.red;
		}
		else if (num >= 75f)
		{
			attitudePlayerAttachment.gradeLetter = "C";
			((Graphic)attitudePlayerAttachment.TMPGrade).color = Color.red;
			cha.view.RPC("RPCA_AddStatusCurse", (RpcTarget)0, new object[1] { cha.view.ViewID });
		}
		else if (num >= 70f)
		{
			attitudePlayerAttachment.gradeLetter = "C-";
			((Graphic)attitudePlayerAttachment.TMPGrade).color = Color.red;
			cha.view.RPC("RPCA_AddStatusCurse", (RpcTarget)0, new object[1] { cha.view.ViewID });
		}
		else if (num >= 68f)
		{
			attitudePlayerAttachment.gradeLetter = "D+";
			((Graphic)attitudePlayerAttachment.TMPGrade).color = Color.red;
			cha.view.RPC("RPCA_AddStatusCurse", (RpcTarget)0, new object[1] { cha.view.ViewID });
		}
		else if (num >= 65f)
		{
			attitudePlayerAttachment.gradeLetter = "D";
			((Graphic)attitudePlayerAttachment.TMPGrade).color = Color.red;
			cha.view.RPC("RPCA_AddStatusCurse", (RpcTarget)0, new object[1] { cha.view.ViewID });
		}
		else if (num >= 60f)
		{
			attitudePlayerAttachment.gradeLetter = "D-";
			((Graphic)attitudePlayerAttachment.TMPGrade).color = Color.red;
			cha.view.RPC("RPCA_AddStatusCurse", (RpcTarget)0, new object[1] { cha.view.ViewID });
		}
		else
		{
			attitudePlayerAttachment.gradeLetter = "F";
			((Graphic)attitudePlayerAttachment.TMPGrade).color = Color.red;
			cha.DieInstantly();
		}
		((TMP_Text)attitudePlayerAttachment.TMPGrade).text = attitudePlayerAttachment.gradeLetter;
	}

	public float GradePercent(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
		float num = 100f;
		num -= GradeDeductionByPlacement(cha, attitudePlayerAttachment);
		num -= GradeDeductionByAilments(cha, attitudePlayerAttachment) * ((num == 100f) ? 1.75f : 1f);
		return num + cha.data.extraStamina * 10f;
	}

	public float GradeDeductionByAilments(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
		float num = 0f;
		num = cha.refs.afflictions.statusSum - cha.refs.afflictions.GetCurrentStatus((STATUSTYPE)5);
		return num * 30f;
	}

	public float GradeDeductionByPlacement(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
		//IL_0064: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		float num = 25f;
		float num2 = 0f;
		float num3 = 0f;
		List<Character> allCharacters = Character.AllCharacters;
		foreach (Character item in allCharacters)
		{
			num2 += 1f;
			if (!item.isBot && !item.data.dead && !item.data.fullyPassedOut && (Object)(object)cha != (Object)(object)item && item.Center.y - cha.Center.y > 3f)
			{
				num3 += 1f;
			}
		}
		return num / Mathf.Max(num2, 1f) * num3;
	}
}
public class GothAttitude : Attitude
{
	public int timer = 100;

	private AttitudeUIData uidata = new AttitudeUIData("GOTH", "Death~", "the sun", Icons.GOTH);

	private string dictcode = "GOTH";

	public override string getDictCode()
	{
		return dictcode;
	}

	public override AttitudeUIData GetUIData()
	{
		return uidata;
	}

	public override void UpdateAttitude(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
		//IL_0063: 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_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		if (cha.data.dead || cha.refs.afflictions.m_inAirport || attitudePlayerAttachment.tickcount <= timer)
		{
			return;
		}
		attitudePlayerAttachment.tickcount = 0;
		if (DayNightManager.instance.isDay == 1f)
		{
			float num = LightVolume.Instance().SamplePositionAlpha((((Component)cha.GetBodypart((BodypartType)13)).transform.position + ((Component)cha.GetBodypart((BodypartType)16)).transform.position) * 0.5f) * 1.75f;
			num *= ((!cha.data.isCrouching) ? 0.75f : 1f);
			Plugin.Log.LogMessage((object)("ll:" + num));
			Plugin.Log.LogMessage((object)("total heat to add:" + num * 0.0125f));
			if (num >= 0.25f)
			{
				cha.refs.afflictions.AddStatus((STATUSTYPE)8, 0.025f * num, false);
			}
		}
		else if (Character.AllCharacters.Count == 1)
		{
			cha.refs.afflictions.AdjustStatus((STATUSTYPE)0, -0.0005f, false);
			cha.refs.afflictions.AdjustStatus((STATUSTYPE)3, -0.0001f, false);
			cha.refs.afflictions.AdjustStatus((STATUSTYPE)2, -0.0002f, false);
			cha.refs.afflictions.AdjustStatus((STATUSTYPE)8, -0.00015f, false);
			cha.refs.afflictions.AdjustStatus((STATUSTYPE)5, -1E-05f, false);
		}
		for (int i = 0; i < Character.AllCharacters.Count; i++)
		{
			if (Character.AllCharacters[i].data.dead && (Object)(object)Character.AllCharacters[i].Ghost.m_target == (Object)(object)cha)
			{
				cha.refs.afflictions.AdjustStatus((STATUSTYPE)0, -0.001f, false);
				cha.refs.afflictions.AdjustStatus((STATUSTYPE)3, -0.0001f, false);
				cha.refs.afflictions.AdjustStatus((STATUSTYPE)2, -0.0002f, false);
				cha.refs.afflictions.AdjustStatus((STATUSTYPE)8, -0.00015f, false);
				cha.refs.afflictions.AdjustStatus((STATUSTYPE)1, -0.0015f, false);
				cha.refs.afflictions.AdjustStatus((STATUSTYPE)5, -1E-05f, false);
			}
		}
	}
}
public class NaughtyAttitude : Attitude
{
	private AttitudeUIData uidata = new AttitudeUIData("NAUGHTY", "HATE/KILL", "LOVE", Icons.NAUGHTY);

	private string dictcode = "NAUGHTY";

	public override string getDictCode()
	{
		return dictcode;
	}

	public override AttitudeUIData GetUIData()
	{
		return uidata;
	}

	public override void UpdateAttitude(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
	}
}
public class PickyEaterAttitude : Attitude
{
	private AttitudeUIData uidata = new AttitudeUIData("PICKY EATER", "My favorite food!", "Yucky food...", Icons.PICKYEATER);

	private string dictcode = "PICKY_EATER";

	public override string getDictCode()
	{
		return dictcode;
	}

	public override AttitudeUIData GetUIData()
	{
		return uidata;
	}

	public override void UpdateAttitude(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
	}

	public void EatDifferent()
	{
	}
}
public class PoindexterAttitude : Attitude
{
	private AttitudeUIData uidata = new AttitudeUIData("POINDEXTER", "Teaching others.", "When people call me boring...", Icons.POINDEXTER);

	private string dictcode = "POINDEXTER";

	public override string getDictCode()
	{
		return dictcode;
	}

	public override AttitudeUIData GetUIData()
	{
		return uidata;
	}

	public override void UpdateAttitude(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
	}
}
public class StickyAttitude : Attitude
{
	private AttitudeUIData uidata = new AttitudeUIData("STICKY", "THAT I CLING LIKE A GECKO", "WHEN OTHER KIDS GET STUCK TO ME", Icons.STICKY);

	private string dictcode = "STICKY";

	public override string getDictCode()
	{
		return dictcode;
	}

	public override AttitudeUIData GetUIData()
	{
		return uidata;
	}

	public override void UpdateAttitude(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
	}
}
public class SweetieAttitude : Attitude
{
	public static int timer = 500;

	private AttitudeUIData uidata = new AttitudeUIData("SWEETIE", "mytoybeartiffles", "ifilostmytoybear:(", Icons.SWEETIE);

	private string dictcode = "SWEETIE";

	public override string getDictCode()
	{
		return dictcode;
	}

	public override AttitudeUIData GetUIData()
	{
		return uidata;
	}

	public override void OnAdd(Character cha)
	{
		if (AttitudeHandler.IsCharacterAttitude("SWEETIE", cha))
		{
			cha.refs.items.SpawnItemInHand(((Object)((Component)Plugin.Tif).gameObject).name);
		}
	}

	public override void OnRemove(Character cha)
	{
		ItemSlot[] itemSlots = cha.player.itemSlots;
		foreach (ItemSlot val in itemSlots)
		{
			if (val.GetPrefabName() == ((Object)((Component)Plugin.Tif).gameObject).name)
			{
				val.prefab.Consume();
				val.EmptyOut();
			}
		}
	}

	public override void UpdateAttitude(Character cha, AttitudePlayerAttachment attitudePlayerAttachment)
	{
		if (cha.data.dead || cha.refs.afflictions.m_inAirport || attitudePlayerAttachment.tickcount <= timer)
		{
			return;
		}
		attitudePlayerAttachment.tickcount = 0;
		bool flag = true;
		ItemSlot[] itemSlots = cha.player.itemSlots;
		foreach (ItemSlot val in itemSlots)
		{
			if (val.GetPrefabName() == ((Object)((Component)Plugin.Tif).gameObject).name)
			{
				flag = false;
			}
		}
		if (flag)
		{
			cha.refs.afflictions.AddStatus((STATUSTYPE)5, 0.0125f, false);
		}
	}
}
public class ActionMagazine : ItemAction
{
	public override void RunAction()
	{
		MagazineHandler.instance.ToggleOpen();
	}
}
public class MagazineButton : MonoBehaviour
{
	public TMP_Text title;

	public TMP_Text likes;

	public TMP_Text dislikes;

	public Button button;

	public MagazineHandler manager;

	public RawImage icon;

	public RawImage lockedIcon;

	public RawImage border;

	public string attitude;

	private int currentIndex;

	public void SetButton(string tude, int index)
	{
		if (AttitudeHandler.attitudes.ContainsKey(tude))
		{
			((Component)this).gameObject.SetActive(true);
			if (!AttitudeHandler.IsCharacterAttitudeUnlocked(tude, Character.localCharacter) && !manager.testUnlockAll)
			{
				((Component)lockedIcon).gameObject.SetActive(true);
				((Component)icon).gameObject.SetActive(false);
				title.text = "??????";
				likes.text = "Likes:???";
				dislikes.text = "Dislikes:???";
			}
			else
			{
				((Component)lockedIcon).gameObject.SetActive(false);
				((Component)icon).gameObject.SetActive(true);
				icon.texture = (Texture)(object)AttitudeHandler.attitudes.GetValueOrDefault(tude).GetUIData().icon;
				title.text = AttitudeHandler.attitudes.GetValueOrDefault(tude).GetUIData().attitudeName;
				likes.text = "Likes: " + AttitudeHandler.attitudes.GetValueOrDefault(tude).GetUIData().likes;
				dislikes.text = "Dislikes: " + AttitudeHandler.attitudes.GetValueOrDefault(tude).GetUIData().dislikes;
			}
		}
		else
		{
			((Component)this).gameObject.SetActive(false);
		}
		attitude = tude;
		currentIndex = index;
	}

	public void Click()
	{
		if (AttitudeHandler.IsCharacterAttitudeUnlocked(attitude, Character.localCharacter) || manager.testUnlockAll)
		{
			manager.SetOption(attitude, currentIndex);
		}
		EventSystem.current.SetSelectedGameObject((GameObject)null);
	}
}
public class MagazineHandler : MenuWindow
{
	[CompilerGenerated]
	private sealed class <CloseRoutine>d__22 : IEnumerator<object>, IEnumerator, IDisposable
	{
		private int <>1__state;

		private object <>2__current;

		public MagazineHandler <>4__this;

		object IEnumerator<object>.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		object IEnumerator.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		[DebuggerHidden]
		public <CloseRoutine>d__22(int <>1__state)
		{
			this.<>1__state = <>1__state;
		}

		[DebuggerHidden]
		void IDisposable.Dispose()
		{
			<>1__state = -2;
		}

		private bool MoveNext()
		{
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Expected O, but got Unknown
			int num = <>1__state;
			MagazineHandler magazineHandler = <>4__this;
			switch (num)
			{
			default:
				return false;
			case 0:
				<>1__state = -1;
				Plugin.Log.LogDebug((object)("IT SHOULD CLOSE THIS:" + (object)magazineHandler.uiObject));
				magazineHandler.closing = true;
				magazineHandler.CameraIn();
				<>2__current = (object)new WaitForSeconds(0.5f);
				<>1__state = 1;
				return true;
			case 1:
				<>1__state = -1;
				magazineHandler.uiObject.SetActive(false);
				magazineHandler.closing = false;
				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 MagazineHandler instance;

	public GameObject uiObject;

	public MagazineButton[] buttons;

	public Color inactiveBorderColor = Color.white;

	public Color activeBorderColor = Color.black;

	public bool testUnlockAll;

	public bool closing;

	public override bool openOnStart => false;

	public override bool selectOnOpen => true;

	public override Selectable objectToSelectOnOpen => (Selectable)(object)buttons[0].button;

	public override bool closeOnPause => true;

	public override bool closeOnUICancel => true;

	public override bool autoHideOnClose => false;

	public void Awake()
	{
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: Expected O, but got Unknown
		//IL_00de: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e8: Expected O, but got Unknown
		//IL_0330: Unknown result type (might be due to invalid IL or missing references)
		//IL_0335: Unknown result type (might be due to invalid IL or missing references)
		//IL_0353: Unknown result type (might be due to invalid IL or missing references)
		instance = this;
		uiObject = ((Component)((Component)this).gameObject.transform.GetChild(0)).gameObject;
		((UnityEvent)((Component)TransformExtensions.FindChildRecursive(((Component)this).gameObject.transform, "UI_Close")).GetComponent<Button>().onClick).AddListener((UnityAction)delegate
		{
			((MenuWindow)((Component)this).GetComponent<MagazineHandler>()).Close();
		});
		GameObject gameObject = ((Component)TransformExtensions.FindChildRecursive(((Component)this).gameObject.transform, "GridMagazine")).gameObject;
		int num = 0;
		buttons = new MagazineButton[AttitudeHandler.attitudes.Count];
		foreach (Attitude value in AttitudeHandler.attitudes.Values)
		{
			GameObject val = Object.Instantiate<GameObject>(Plugin.MagButton, gameObject.transform);
			MagazineButton magazineButton = val.AddComponent<MagazineButton>();
			magazineButton.button = val.GetComponent<Button>();
			((UnityEvent)val.GetComponent<Button>().onClick).AddListener(new UnityAction(magazineButton.Click));
			magazineButton.manager = this;
			magazineButton.icon = ((Component)TransformExtensions.FindChildRecursive(val.transform, "Icon")).GetComponent<RawImage>();
			magazineButton.lockedIcon = ((Component)TransformExtensions.FindChildRecursive(val.transform, "LockedIcon")).GetComponent<RawImage>();
			magazineButton.border = ((Component)TransformExtensions.FindChildRecursive(val.transform, "Border")).GetComponent<RawImage>();
			magazineButton.title = ((Component)TransformExtensions.FindChildRecursive(val.transform, "Title")).GetComponent<TMP_Text>();
			magazineButton.title.font = Resources.FindObjectsOfTypeAll<TMP_FontAsset>().ToList().Find((TMP_FontAsset x) => ((Object)x).name == "Montserrat-ExtraBold SDF");
			magazineButton.title.fontMaterial = Resources.FindObjectsOfTypeAll<Material>().ToList().Find((Material x) => ((Object)x).name == "Montserrat-ExtraBold SDF Material");
			magazineButton.likes = ((Component)TransformExtensions.FindChildRecursive(val.transform, "Likes")).GetComponent<TMP_Text>();
			magazineButton.likes.font = Resources.FindObjectsOfTypeAll<TMP_FontAsset>().ToList().Find((TMP_FontAsset x) => ((Object)x).name == "Montserrat-ExtraBold SDF");
			magazineButton.likes.fontMaterial = Resources.FindObjectsOfTypeAll<Material>().ToList().Find((Material x) => ((Object)x).name == "Montserrat-ExtraBold SDF Material");
			magazineButton.dislikes = ((Component)TransformExtensions.FindChildRecursive(val.transform, "Dislikes")).GetComponent<TMP_Text>();
			magazineButton.dislikes.font = Resources.FindObjectsOfTypeAll<TMP_FontAsset>().ToList().Find((TMP_FontAsset x) => ((Object)x).name == "Montserrat-ExtraBold SDF");
			magazineButton.dislikes.fontMaterial = Resources.FindObjectsOfTypeAll<Material>().ToList().Find((Material x) => ((Object)x).name == "Montserrat-ExtraBold SDF Material");
			if (num == 3 || num == 4 || num == 5 || num == 9 || num == 10 || num == 11 || num == 15 || num == 16 || num == 17)
			{
				Vector3 position = magazineButton.title.transform.position;
				position.x += 18f;
				magazineButton.title.transform.position = position;
			}
			buttons[num++] = magazineButton;
		}
		uiObject.SetActive(false);
	}

	public void ToggleOpen()
	{
		if (closing)
		{
			return;
		}
		if (!((MenuWindow)this).isOpen)
		{
			((MenuWindow)this).Open();
			for (int i = 0; i < AttitudeHandler.attitudes.Count; i++)
			{
				buttons[i].SetButton(AttitudeHandler.attitudes.Keys.ElementAt(i), i);
			}
			SetActiveButton(AttitudeHandler.GetCurrentAttitude(Character.localCharacter));
			uiObject.SetActive(true);
		}
		else
		{
			((MenuWindow)this).Close();
		}
	}

	public override void OnClose()
	{
		((MonoBehaviour)this).StartCoroutine(CloseRoutine());
	}

	[IteratorStateMachine(typeof(<CloseRoutine>d__22))]
	public IEnumerator CloseRoutine()
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <CloseRoutine>d__22(0)
		{
			<>4__this = this
		};
	}

	public void CameraIn()
	{
	}

	public void CameraOut()
	{
	}

	public void SetActiveButton(string tude)
	{
		//IL_0024: 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_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		Color color = Singleton<Customization>.Instance.skins[GameHandler.GetService<PersistentPlayerDataService>().GetPlayerData(PhotonNetwork.LocalPlayer).customizationData.currentSkin].color;
		for (int i = 0; i < buttons.Length; i++)
		{
			((Graphic)buttons[i].border).color = ((tude == buttons[i].attitude) ? ColorExtensions.Pow(color, 2f) : Color.clear);
		}
	}

	public void SetOption(string option, int index)
	{
		AttitudeHandler.SetAttitude(option, Character.localCharacter);
		Character.localCharacter.view.RPC("RPCA_UpdateAttitude", (RpcTarget)0, new object[2]
		{
			Character.localCharacter.view.ViewID,
			option
		});
		SetActiveButton(option);
	}
}
public class AttitudeAttribute : EnumAttr
{
	public Attitude attitude { get; set; } = new Attitude();


	public AttitudeAttribute(Attitude at)
	{
		attitude = at;
	}
}
public class AttitudeCharacterInput : MonoBehaviour
{
	public static InputAction action_special;

	public bool specialWasPressed;

	public bool specialIsHeld;

	public bool specialWasReleased;

	public static void Init()
	{
		//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_0037: Unknown result type (might be due to invalid IL or missing references)
		InputActionMap val = InputSystem.actions.actionMaps[0];
		action_special = InputActionSetupExtensions.AddAction(val, "Special", (InputActionType)0, (string)null, (string)null, (string)null, (string)null, (string)null);
		InputActionSetupExtensions.AddBinding(action_special, "<Keyboard>/f", (string)null, (string)null, (string)null);
	}

	public static void lateInit()
	{
		action_special.Enable();
	}

	internal void Sample(bool playerMovementActive)
	{
		ResetInput();
		specialWasPressed = action_special.WasPressedThisFrame();
		specialWasReleased = action_special.WasReleasedThisFrame();
		specialIsHeld = action_special.IsPressed();
	}

	internal void SampleAlways()
	{
	}

	internal void ResetInput()
	{
		specialWasPressed = false;
		specialWasReleased = false;
		specialIsHeld = false;
	}
}
public static class Commands
{
	[TypeParser(typeof(Attitude))]
	public class AttitudeCLIParser : CLITypeParser
	{
		public override object Parse(string str)
		{
			return AttitudeHandler.attitudes.GetValueOrDefault(str);
		}

		public override List<ParameterAutocomplete> FindAutocomplete(string parameterText)
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Expected O, but got Unknown
			List<ParameterAutocomplete> list = new List<ParameterAutocomplete>();
			if (string.IsNullOrEmpty(parameterText))
			{
				foreach (string key in AttitudeHandler.attitudes.Keys)
				{
					list.Add(new ParameterAutocomplete(key));
				}
			}
			return list;
		}
	}
}
[AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)]
public class EnumAttr : Attribute
{
}
public static class EnumExtension
{
	public static EnumAttr GetAttr(this Enum value)
	{
		Type type = value.GetType();
		FieldInfo field = type.GetField(value.ToString());
		EnumAttr[] array = (EnumAttr[])field.GetCustomAttributes(typeof(EnumAttr), inherit: false);
		if (array.Length == 0)
		{
			return null;
		}
		return array[0];
	}
}
public static class Icons
{
	public static Texture2D NONE = new Texture2D(2, 2);

	public static Texture2D BOOKWORM = new Texture2D(2, 2);

	public static Texture2D BULLY = new Texture2D(2, 2);

	public static Texture2D CLASSCLOWN = new Texture2D(2, 2);

	public static Texture2D EXCITABLE = new Texture2D(2, 2);

	public static Texture2D FREAK = new Texture2D(2, 2);

	public static Texture2D GOLDENCHILD = new Texture2D(2, 2);

	public static Texture2D GOTH = new Texture2D(2, 2);

	public static Texture2D NAUGHTY = new Texture2D(2, 2);

	public static Texture2D PICKYEATER = new Texture2D(2, 2);

	public static Texture2D POINDEXTER = new Texture2D(2, 2);

	public static Texture2D STICKY = new Texture2D(2, 2);

	public static Texture2D SWEETIE = new Texture2D(2, 2);

	public static void Start()
	{
		ImageConversion.LoadImage(NONE, File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "icons/ICON-none.png")));
		ImageConversion.LoadImage(BOOKWORM, File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "icons/ICON-bookworm.png")));
		ImageConversion.LoadImage(BULLY, File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "icons/ICON-bully.png")));
		ImageConversion.LoadImage(EXCITABLE, File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "icons/ICON-excitable.png")));
		ImageConversion.LoadImage(FREAK, File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "icons/ICON-freak.png")));
		ImageConversion.LoadImage(GOLDENCHILD, File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "icons/ICON-goldenchild.png")));
		ImageConversion.LoadImage(GOTH, File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "icons/ICON-goth.png")));
		ImageConversion.LoadImage(NAUGHTY, File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "icons/ICON-naughty.png")));
		ImageConversion.LoadImage(POINDEXTER, File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "icons/ICON-pointdexter.png")));
		ImageConversion.LoadImage(STICKY, File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "icons/ICON-sticky.png")));
		ImageConversion.LoadImage(SWEETIE, File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "icons/ICON-sweetie.png")));
		ImageConversion.LoadImage(PICKYEATER, File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "icons/ICON-pickyeaater.png")));
		ImageConversion.LoadImage(CLASSCLOWN, File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "icons/ICON-classclown.png")));
	}
}
public static class SceneLoader
{
	public static bool LoadedIslandStartup = true;

	public static void Start()
	{
		SceneManager.sceneLoaded += OnSceneLoaded;
	}

	public static void OnSceneLoaded(Scene scene, LoadSceneMode mode)
	{
		if (((Scene)(ref scene)).name == "Airport")
		{
			GameObject val = GameObject.Find("GAME");
			GameObject val2 = Object.Instantiate<GameObject>(Plugin.MagMan);
			val2.transform.SetParent(val.transform);
			GameObject val3 = GameObject.Find("PassportSpawner");
			SpawnItemInHand val4 = val3.AddComponent<SpawnItemInHand>();
			val4.item = Plugin.Bundle.LoadAsset<GameObject>("Maggy.prefab").GetComponent<Item>();
		}
	}
}
namespace BepInEx
{
	[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
	[Conditional("CodeGeneration")]
	internal sealed class BepInAutoPluginAttribute : Attribute
	{
		public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null)
		{
		}
	}
}
namespace BepInEx.Preloader.Core.Patching
{
	[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
	[Conditional("CodeGeneration")]
	internal sealed class PatcherAutoPluginAttribute : Attribute
	{
		public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null)
		{
		}
	}
}
namespace ForbiddenFoods
{
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.github.Fetalpile", "ForbiddenFoods", "0.0.2")]
	public class Plugin : BaseUnityPlugin
	{
		private class MyPatches
		{
			[HarmonyPatch(typeof(Character), "Start")]
			[HarmonyPostfix]
			private static void Character_Start(Character __instance)
			{
				if (!__instance.isBot && (Object)(object)__instance.player != (Object)null)
				{
					AttitudePlayerAttachment attitudePlayerAttachment = ((Component)__instance).gameObject.AddComponent<AttitudePlayerAttachment>();
					attitudePlayerAttachment.isLocal = __instance.view.IsMine;
					AttitudeCharacterInput input = ((Component)__instance).gameObject.AddComponent<AttitudeCharacterInput>();
					attitudePlayerAttachment.input = input;
					AttitudeCharacterInput.lateInit();
					Log.LogInfo((object)("Added Component to: " + __instance.characterName));
				}
			}

			[HarmonyPatch(typeof(Action_RestoreHunger), "RunAction")]
			[HarmonyPrefix]
			private static bool FixHunger(Action_RestoreHunger __instance)
			{
				if (AttitudeHandler.IsCharacterAttitude("PICKY_EATER", ((ItemActionBase)__instance).character))
				{
					float num = 0.9f;
					if (((ItemActionBase)__instance).item.GetData<IntItemData>((DataEntryKey)1).Value == 2)
					{
						num = 1.5f;
						((ItemActionBase)__instance).character.AddExtraStamina(num * 0.25f);
					}
					else
					{
						num = 0.5f;
					}
					((ItemActionBase)__instance).character.refs.afflictions.SubtractStatus((STATUSTYPE)1, __instance.restorationAmount * num, false);
					return false;
				}
				return true;
			}

			[HarmonyPatch(typeof(CharacterAfflictions), "AddStatus")]
			[HarmonyPrefix]
			private static bool AddPoison(CharacterAfflictions __instance, ref STATUSTYPE statusType, ref float amount)
			{
				if (AttitudeHandler.IsCharacterAttitude("FREAK", __instance.character) && (int)statusType == 3)
				{
					return false;
				}
				return true;
			}

			[HarmonyPatch(typeof(CharacterMovement), "OnCollision")]
			[HarmonyPrefix]
			private static void CollideSpecial(CharacterMovement __instance, ref Collision collision, ref bool collisionEnter)
			{
				if (AttitudeHandler.IsCharacterAttitude("STICKY", __instance.character))
				{
					Character componentInParent = ((Component)collision.rigidbody).GetComponentInParent<Character>();
					if (!((Object)(object)componentInParent == (Object)(object)__instance.character))
					{
						Object.op_Implicit((Object)(object)componentInParent);
					}
				}
			}

			[HarmonyPatch(typeof(Affliction), "CreateBlankAffliction")]
			[HarmonyPostfix]
			private static void CreateBlankAffliction(AfflictionType afflictionType, ref Affliction __result)
			{
				//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_0016: 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)
				if (afflictionType == AttitudeCharacterAfflictions.HYPED)
				{
					__result = (Affliction)(object)new Affliction_Hyped(1f, shouldremove: false, -1);
				}
				if (afflictionType == AttitudeCharacterAfflictions.GOLDEN)
				{
					__result = (Affliction)(object)new Affliction_Golden(1f);
				}
			}
		}

		public const string Id = "com.github.Fetalpile";

		public static Plugin Instance { get; private set; }

		internal static ManualLogSource Log { get; private set; }

		internal static Harmony? Harmony { get; set; }

		internal static AssetBundle Bundle { get; set; }

		internal static AssetBundle BundleTiffles { get; set; }

		internal static AssetBundle BundlePoison { get; set; }

		internal static AssetBundle BundleSparkles { get; set; }

		internal static AssetBundle BundleUI { get; set; }

		internal static AssetBundle BundleButton { get; set; }

		internal static AssetBundle BundleGolden { get; set; }

		internal static GameObject MagButton { get; set; }

		internal static GameObject MagMan { get; set; }

		internal static GameObject Tiffles { get; set; }

		internal static Item mag { get; set; }

		internal static Item Tif { get; set; }

		internal static GameObject stinkcloud { get; set; }

		internal static GameObject sparkles { get; set; }

		internal static GameObject goldenVFX { get; set; }

		internal static ModDefinition Definition { get; set; }

		public static string Name => "ForbiddenFoods";

		public static string Version => "0.0.2";

		public void Awake()
		{
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_0195: Unknown result type (might be due to invalid IL or missing references)
			//IL_027a: Unknown result type (might be due to invalid IL or missing references)
			//IL_028f: Unknown result type (might be due to invalid IL or missing references)
			Log = ((BaseUnityPlugin)this).Logger;
			Definition = ModDefinition.GetOrCreate(((BaseUnityPlugin)this).Info.Metadata);
			Instance = this;
			Icons.Start();
			AttitudeCharacterInput.Init();
			string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "magazine");
			Bundle = AssetBundle.LoadFromFile(text);
			string text2 = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "tiffles");
			BundleTiffles = AssetBundle.LoadFromFile(text2);
			Tiffles = BundleTiffles.LoadAsset<GameObject>("Stiffles.prefab");
			string text3 = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "golden");
			BundleGolden = AssetBundle.LoadFromFile(text3);
			goldenVFX = BundleGolden.LoadAsset<GameObject>("VFX_Screen_Golden.prefab");
			((Renderer)goldenVFX.GetComponent<MeshRenderer>()).material.shader = Shader.Find("NickPost/Hot");
			string text4 = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "poisonstink");
			BundlePoison = AssetBundle.LoadFromFile(text4);
			stinkcloud = BundlePoison.LoadAsset<GameObject>("FREAK_STINK.prefab");
			((Renderer)stinkcloud.GetComponent<ParticleSystemRenderer>()).material.shader = Shader.Find("Particle_Transparent");
			stinkcloud.transform.position = Vector3.zero;
			string text5 = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "golden_sparkles");
			BundleSparkles = AssetBundle.LoadFromFile(text5);
			sparkles = BundleSparkles.LoadAsset<GameObject>("Golden_Sparkles.prefab");
			sparkles.transform.position = Vector3.zero;
			string text6 = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "magazineui");
			BundleUI = AssetBundle.LoadFromFile(text6);
			MagMan = BundleUI.LoadAsset<GameObject>("MagazineManager.prefab");
			MagMan.AddComponent<MagazineHandler>();
			string text7 = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "magazinebutton");
			BundleButton = AssetBundle.LoadFromFile(text7);
			MagButton = BundleButton.LoadAsset<GameObject>("UI_MagazineButton.prefab");
			Patch();
			mag = Bundle.LoadAsset<GameObject>("Maggy.prefab").GetComponent<Item>();
			ActionMagazine actionMagazine = ((Component)mag).gameObject.AddComponent<ActionMagazine>();
			((ItemAction)actionMagazine).OnCastFinished = true;
			Tif = Tiffles.GetComponent<Item>();
			Log.LogInfo((object)Definition);
			try
			{
				new ItemContent(mag).Register(Definition);
				new ItemContent(Tif).Register(Definition);
			}
			catch (Exception ex)
			{
				Log.LogError((object)ex);
			}
			Harmony.CreateAndPatchAll(typeof(MyPatches), (string)null);
			ConsoleCommands.TypeParsers.Add(typeof(Attitude), (CLITypeParser)(object)new Commands.AttitudeCLIParser());
			SceneLoader.Start();
			Log.LogInfo((object)("Plugin " + Name + " is loaded! Yay! :D"));
		}

		internal static void Patch()
		{
			//IL_001b: 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: Expected O, but got Unknown
			if (Harmony == null)
			{
				Harmony = new Harmony(((BaseUnityPlugin)Instance).Info.Metadata.GUID);
			}
			Log.LogDebug((object)"Patching...");
			Harmony.PatchAll();
			Log.LogDebug((object)"Finished patching!");
		}
	}
}
namespace ForbiddenFoods.Patches
{
	[HarmonyPatch(typeof(ItemCooking))]
	internal class ItemCookingPatches
	{
		[HarmonyPrefix]
		[HarmonyPatch("UpdateCookedBehavior")]
		private static bool UpdateCookedBehaviorPrefix(ref ItemCooking __instance)
		{
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			if (!__instance.setup)
			{
				__instance.setup = true;
				__instance.renderers = ((Component)__instance).GetComponentsInChildren<MeshRenderer>();
				Renderer[] combinedRenderers = GetCombinedRenderers(__instance);
				__instance.defaultTints = (Color[])(object)new Color[combinedRenderers.Length];
				for (int i = 0; i < combinedRenderers.Length; i++)
				{
					__instance.defaultTints[i] = combinedRenderers[i].material.GetColor("_Tint");
				}
			}
			return true;
		}

		[HarmonyPrefix]
		[HarmonyPatch("CookVisually")]
		private static bool CookVisuallyPrefix(ref ItemCooking __instance, int cookedAmount)
		{
			//IL_003a: 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_0045: Unknown result type (might be due to invalid IL or missing references)
			Renderer[] combinedRenderers = GetCombinedRenderers(__instance);
			for (int i = 0; i < combinedRenderers.Length; i++)
			{
				if (cookedAmount > 0)
				{
					Debug.Log((object)$"Cooked amount is {cookedAmount}");
					combinedRenderers[i].material.SetColor("_Tint", __instance.defaultTints[i] * ItemCooking.GetCookColor(cookedAmount));
				}
			}
			return false;
		}

		private static Renderer[] GetCombinedRenderers(ItemCooking __instance)
		{
			SkinnedMeshRenderer[] componentsInChildren = ((Component)__instance).GetComponentsInChildren<SkinnedMeshRenderer>();
			Renderer[] array = Array.Empty<Renderer>();
			Renderer[] array2 = array;
			Renderer[] renderers = (Renderer[])(object)__instance.renderers;
			array = CollectionExtensions.AddRangeToArray<Renderer>(array2, renderers);
			Renderer[] array3 = array;
			renderers = (Renderer[])(object)componentsInChildren;
			return CollectionExtensions.AddRangeToArray<Renderer>(array3, renderers);
		}
	}
	[HarmonyPatch(typeof(Item))]
	internal class ItemPatches
	{
		[HarmonyPrefix]
		[HarmonyPatch("AddPropertyBlock")]
		private static bool AddPropertyBlockPrefix(ref Item __instance)
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Expected O, but got Unknown
			__instance.mainRenderer = (Renderer)(object)((Component)__instance).GetComponentInChildren<SkinnedMeshRenderer>();
			if ((Object)(object)__instance.mainRenderer != (Object)null)
			{
				__instance.mpb = new MaterialPropertyBlock();
				__instance.mainRenderer.GetPropertyBlock(__instance.mpb);
				return false;
			}
			return true;
		}

		[HarmonyPrefix]
		[HarmonyPatch("HoverEnter")]
		private static bool HoverEnterPrefix(ref Item __instance)
		{
			__instance.mpb.SetFloat(Item.PROPERTY_INTERACTABLE, 1f);
			__instance.mainRenderer.SetPropertyBlock(__instance.mpb);
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch("HoverExit")]
		private static bool HoverExit(ref Item __instance)
		{
			__instance.mpb.SetFloat(Item.PROPERTY_INTERACTABLE, 0f);
			__instance.mainRenderer.SetPropertyBlock(__instance.mpb);
			return false;
		}

		[HarmonyPostfix]
		[HarmonyPatch("HideRenderers")]
		private static void HideRenderersPostfix(ref Item __instance)
		{
			LinqExtensions.ForEach<SkinnedMeshRenderer>((IEnumerable<SkinnedMeshRenderer>)((Component)__instance).GetComponentsInChildren<SkinnedMeshRenderer>(), (Action<SkinnedMeshRenderer>)delegate(SkinnedMeshRenderer meshRenderer)
			{
				((Renderer)meshRenderer).enabled = false;
			});
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}