Decompiled source of AnotherClassMod v0.1.1

AnotherClassMod.dll

Decompiled 2 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using AnotherClassMod.Class;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using DG.Tweening;
using DG.Tweening.Core;
using DG.Tweening.Plugins.Options;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Peak;
using Peak.Afflictions;
using Photon.Pun;
using TMPro;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("AnotherClassMod")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("0.0.2.0")]
[assembly: AssemblyInformationalVersion("0.0.2")]
[assembly: AssemblyProduct("com.github.little_imp.AnotherClassMod")]
[assembly: AssemblyTitle("AnotherClassMod")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.2.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace AnotherClassMod
{
	public class GlobalPunishment
	{
		public static float MaxStaminaBarPercentCoefficient { get; set; }

		public static float StaminaUsageCoefficient { get; set; }

		public static bool RandomInstantiateZombie { get; set; }

		public static float RandomInstantiateZombieDuration { get; set; }

		public static float RandomInstantiateZombieTimeTicker { get; set; }

		public static bool RandomInstantiateGhostBall { get; set; }

		public static float RandomInstantiateGhostBallDuration { get; set; }

		public static float RandomInstantiateGhostBallTimeTicker { get; set; }

		public static ConfigFile Config { get; set; }

		public static void UpdateGlobalPunishment()
		{
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_011a: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0200: Unknown result type (might be due to invalid IL or missing references)
			//IL_0205: Unknown result type (might be due to invalid IL or missing references)
			//IL_021c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: Unknown result type (might be due to invalid IL or missing references)
			//IL_0230: Unknown result type (might be due to invalid IL or missing references)
			//IL_0244: Unknown result type (might be due to invalid IL or missing references)
			//IL_024e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0258: Unknown result type (might be due to invalid IL or missing references)
			if (PhotonNetwork.IsConnectedAndReady && PhotonNetwork.InRoom && PhotonNetwork.IsMasterClient)
			{
				ReadConfig(Config);
				SelectedClass instance = SelectedClass.Instance;
				if (instance != null)
				{
					PhotonView obj = instance.PVReadyByTicker(hasDuration: true);
					if (obj != null)
					{
						obj.RPC("RPC_SyncGlobalPunishment", (RpcTarget)0, new object[4] { MaxStaminaBarPercentCoefficient, StaminaUsageCoefficient, RandomInstantiateZombie, RandomInstantiateZombieDuration });
					}
				}
				if (RandomInstantiateZombie)
				{
					RandomInstantiateZombieTimeTicker += Time.deltaTime * Random.Range(0.7f, 1.3f);
					if (RandomInstantiateZombieTimeTicker > RandomInstantiateZombieDuration)
					{
						Character[] array = Character.AllCharacters.Where((Character t) => t.IsPlayerControlled && !t.data.dead && !t.data.passedOut).ToArray();
						MushroomZombie component = PhotonNetwork.Instantiate("MushroomZombie", array[Random.Range(0, array.Count())].Center + Vector3.up * 2f, Random.rotation, (byte)0, (object[])null).GetComponent<MushroomZombie>();
						ZombieManager.Instance.RegisterZombie(component);
						component.lifetime = 10f;
						RandomInstantiateZombieTimeTicker = 0f;
					}
				}
				if (RandomInstantiateGhostBall)
				{
					RandomInstantiateGhostBallTimeTicker += Time.deltaTime * Random.Range(0.7f, 1.3f);
					if (RandomInstantiateGhostBallTimeTicker > RandomInstantiateGhostBallDuration)
					{
						Character[] array2 = Character.AllCharacters.Where((Character t) => t.IsPlayerControlled && !t.data.dead && !t.data.passedOut).ToArray();
						Character val = array2[Random.Range(0, array2.Count())];
						GhostBall component2 = PhotonNetwork.Instantiate("GhostBall", val.Center + Vector3.back * 25f, Quaternion.identity, (byte)0, (object[])null).GetComponent<GhostBall>();
						component2.maxHeight = val.Center.y + (Vector3.up * 200f).y;
						component2.chaseHeight = val.Center.y - (Vector3.up * 200f).y;
						RandomInstantiateGhostBallTimeTicker = 0f;
					}
				}
			}
			if ((Object)(object)Character.localCharacter != (Object)null && MaxStaminaBarPercentCoefficient <= 1f)
			{
				Character.localCharacter.refs.afflictions.SetStatus((STATUSTYPE)4, 1f - MaxStaminaBarPercentCoefficient, true);
			}
		}

		public static void ReadConfig(ConfigFile config)
		{
			Config = config;
			MaxStaminaBarPercentCoefficient = Config.Bind<float>("Stamina", "MaxStaminaBarPrecentCoefficient", 0.8f, "value must <= 1").Value;
			StaminaUsageCoefficient = Config.Bind<float>("Stamina", "StaminaUsageCoefficient", 1.2f, "value>1 use more samina, value<1 use less samina").Value;
			RandomInstantiateZombie = config.Bind<bool>("Zombie", "RandomInstantiateZombie", false, "Random instantiate zombie on player head").Value;
			RandomInstantiateZombieDuration = config.Bind<float>("Zombie", "RandomInstantiateZombieDuration", 180f, "Base duration with a random jitter of ±30%.").Value;
			RandomInstantiateGhostBall = config.Bind<bool>("GhostBall", "RandomInstantiateGhostBall", false, "Random instantiate GhostBall").Value;
			RandomInstantiateGhostBallDuration = config.Bind<float>("GhostBall", "RandomInstantiateGhostBallDuration", 180f, "Base duration with a random jitter of ±30%.").Value;
		}
	}
	public static class HarmonyTemp
	{
		public static float GameGrabbingDistance = 4f;

		public static float GameMaxBackpackSlots = 4f;

		public static float WeightReduce = 0f;
	}
	[HarmonyPatch(typeof(RichPresenceService))]
	public class RichPresenceServicePatch
	{
		[HarmonyPatch("SetState")]
		[HarmonyPostfix]
		private static void SetStatePostfix(RichPresenceService __instance, RichPresenceState state)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			Plugin.GameStage = state;
		}
	}
	[HarmonyPatch(typeof(GUIManager))]
	public class GUIManagerPatch
	{
		[HarmonyPatch("Awake")]
		[HarmonyPostfix]
		private static void AwakePostfix(GUIManager __instance)
		{
			if ((Object)(object)Plugin.playerClassSelector == (Object)null)
			{
				Plugin.playerClassSelector = Plugin.PluginGameObject.AddComponent<PlayerClassSelector>();
			}
		}
	}
	[HarmonyPatch(typeof(MainCameraMovement))]
	public class MainCameraMovementPatches
	{
		[HarmonyPostfix]
		[HarmonyPatch("CharacterCam")]
		public static void CharacterCamPostfix(MainCameraMovement __instance)
		{
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: 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)
			if (SelectedClass.isLockCurrentClass && SelectedClass.CurrentClass is Crypto && ((Crypto)SelectedClass.CurrentClass).isCamMoving)
			{
				Transform transform = ((Component)__instance).transform;
				transform.position += ((Crypto)SelectedClass.CurrentClass).camOffset;
			}
		}
	}
	[HarmonyPatch(typeof(CharacterInput))]
	public class CharacterInputPatches
	{
		[HarmonyPrefix]
		[HarmonyPatch("Sample")]
		public static bool SamplePrefix(CharacterInput __instance, ref bool playerMovementActive)
		{
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			if (!SelectedClass.isLockCurrentClass)
			{
				return true;
			}
			MethodInfo methodInfo = AccessTools.Method(typeof(CharacterInput), "ResetInput", (Type[])null, (Type[])null);
			if (SelectedClass.CurrentClass is Crypto && ((Crypto)SelectedClass.CurrentClass).isCamMoving)
			{
				methodInfo.Invoke(__instance, null);
				__instance.interactWasPressed = CharacterInput.action_interact.WasPressedThisFrame();
				__instance.interactIsPressed = CharacterInput.action_interact.IsPressed();
				__instance.interactWasReleased = CharacterInput.action_interact.WasReleasedThisFrame();
				if (playerMovementActive)
				{
					FieldInfo fieldInfo = AccessTools.Field(typeof(CharacterInput), "action_look");
					__instance.lookInput = ((InputAction)fieldInfo.GetValue(null)).ReadValue<Vector2>();
					__instance.pingWasPressed = CharacterInput.action_ping.WasPressedThisFrame();
					__instance.useSecondaryWasPressed = CharacterInput.action_useSecondary.WasPressedThisFrame();
					__instance.useSecondaryIsPressed = CharacterInput.action_useSecondary.IsPressed();
					__instance.useSecondaryWasReleased = CharacterInput.action_useSecondary.WasReleasedThisFrame();
				}
				return false;
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(CharacterGrabbing))]
	public class CharacterGrabbingPatches
	{
		[HarmonyPatch("TargetCanBeHelped")]
		[HarmonyPatch(new Type[]
		{
			typeof(Character),
			typeof(Character)
		})]
		[HarmonyPostfix]
		private static void TargetCanBeHelpedPostfix(CharacterGrabbing __instance, ref Character target, ref Character helper, ref bool __result)
		{
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			if (SelectedClass.CurrentClass != null && SelectedClass.CurrentClass is Crypto && ((Crypto)SelectedClass.CurrentClass).isCamMoving)
			{
				__result = false;
			}
			bool flag = false;
			bool flag2 = false;
			if (SelectedClass.Instance.PartyClass != null && SelectedClass.Instance.PartyClass.ContainsKey(((MonoBehaviourPun)helper).photonView.Owner.ActorNumber) && SelectedClass.Instance.PartyClass[((MonoBehaviourPun)helper).photonView.Owner.ActorNumber]?.TypeName != "Gibbon")
			{
				flag = true;
			}
			if (SelectedClass.Instance.PartyClass != null && SelectedClass.Instance.PartyClass.ContainsKey(((MonoBehaviourPun)helper).photonView.Owner.ActorNumber) && SelectedClass.Instance.PartyClass[((MonoBehaviourPun)helper).photonView.Owner.ActorNumber]?.TypeName != "Gibbon")
			{
				flag2 = true;
			}
			if (flag && flag2)
			{
				__result = __result && Vector3.Distance(helper.Center, target.Center) <= HarmonyTemp.GameGrabbingDistance;
			}
		}

		[HarmonyPatch("Reach")]
		[HarmonyTranspiler]
		private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
		{
			FieldInfo grabbingDistanceField = AccessTools.Field(typeof(Gibbon), "PullRange");
			foreach (CodeInstruction instruction in instructions)
			{
				if (instruction.opcode == OpCodes.Ldc_R4 && (float)instruction.operand == 4f)
				{
					instruction.opcode = OpCodes.Ldsfld;
					instruction.operand = grabbingDistanceField;
				}
				yield return instruction;
			}
		}
	}
	[HarmonyPatch(typeof(Character))]
	public class CharacterPatches
	{
		[HarmonyPatch("UseStamina")]
		[HarmonyPrefix]
		private static void UseStaminaPrefix(Character __instance, ref float usage, bool useBonusStamina)
		{
			if ((Object)(object)__instance != (Object)null && __instance.IsLocal)
			{
				usage *= GlobalPunishment.StaminaUsageCoefficient;
			}
		}
	}
	[HarmonyPatch(typeof(BackpackData))]
	public class BackpackPatches
	{
		[HarmonyPatch("DeserializeValue")]
		[HarmonyTranspiler]
		private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
		{
			foreach (CodeInstruction instruction in instructions)
			{
				if (instruction.opcode == OpCodes.Ldc_I4_4)
				{
					instruction.opcode = OpCodes.Call;
					instruction.operand = AccessTools.Method(typeof(PatchUtils), "GetDynamicMaxSlots", (Type[])null, (Type[])null);
				}
				yield return instruction;
			}
		}

		[HarmonyPatch("Init")]
		[HarmonyPrefix]
		private static bool InitPrefix(BackpackData __instance)
		{
			if (SelectedClass.isLockCurrentClass && SelectedClass.Instance.PartyClass.Values.Any((SelectedClass.PartyClassInfo? info) => info.Value.TypeName == typeof(Porter).Name))
			{
				__instance.itemSlots = (ItemSlot[])(object)new ItemSlot[Porter.maxBackpackSlots];
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(BackpackVisuals))]
	public class BackpackVisualsPatches
	{
		[HarmonyPatch("RefreshVisuals")]
		[HarmonyTranspiler]
		private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
		{
			foreach (CodeInstruction instruction in instructions)
			{
				if (instruction.opcode == OpCodes.Ldc_I4_4)
				{
					instruction.opcode = OpCodes.Call;
					instruction.operand = AccessTools.Method(typeof(PatchUtils), "GetDynamicMaxSlots", (Type[])null, (Type[])null);
				}
				yield return instruction;
			}
		}
	}
	[HarmonyPatch(typeof(BackpackWheel))]
	public class BackpackWheelPatches
	{
		[HarmonyPatch("InitWheel")]
		[HarmonyPrefix]
		private static bool InitWheelPrefix(BackpackWheel __instance, ref BackpackReference bp, ref int slotCount, ref BackpackType backpackType)
		{
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0121: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_014b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			bool flag = SelectedClass.isLockCurrentClass && SelectedClass.Instance.PartyClass.Values.Any((SelectedClass.PartyClassInfo? info) => info.Value.TypeName == typeof(Porter).Name);
			if ((int)backpackType != 1 || !flag)
			{
				return true;
			}
			slotCount = Porter.maxBackpackSlots;
			if (__instance.slices.Length < Porter.maxBackpackSlots + 1)
			{
				BackpackWheelSlice[] slices = __instance.slices;
				List<BackpackWheelSlice> list = new List<BackpackWheelSlice>(slices.Length);
				list.AddRange(slices);
				for (int num = 5; num < Porter.maxBackpackSlots + 1; num++)
				{
					BackpackWheelSlice item = Object.Instantiate<BackpackWheelSlice>(__instance.slices[1], ((Component)__instance.slices[1]).transform.parent);
					list.Add(item);
				}
				__instance.slices = list.ToArray();
			}
			Quaternion localRotation = ((Component)__instance.slices[0]).transform.localRotation;
			float num2 = 360f / (float)__instance.slices.Length;
			for (int num3 = 0; num3 < __instance.slices.Length; num3++)
			{
				((Component)__instance.slices[num3]).transform.localRotation = localRotation;
				Transform transform = ((Component)__instance.slices[num3]).transform;
				transform.localRotation *= Quaternion.Euler(0f, 0f, (float)num3 * num2);
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(CharacterAfflictions))]
	public class CharacterAfflictionsPatches
	{
		[HarmonyPatch("UpdateWeight")]
		[HarmonyPostfix]
		private static void UpdatePostfix(CharacterAfflictions __instance)
		{
			if (!SelectedClass.isLockCurrentClass || !SelectedClass.Instance.PartyClass.Values.Any((SelectedClass.PartyClassInfo? info) => info.Value.TypeName == typeof(Porter).Name))
			{
				HarmonyTemp.WeightReduce = 0f;
			}
			__instance.SetStatus((STATUSTYPE)7, __instance.currentStatuses[7] * (1f - HarmonyTemp.WeightReduce), true);
		}
	}
	public static class PatchUtils
	{
		public static int GetDynamicMaxSlots()
		{
			if (SelectedClass.isLockCurrentClass && SelectedClass.Instance.PartyClass.Values.Any((SelectedClass.PartyClassInfo? info) => info.Value.TypeName == typeof(Porter).Name))
			{
				return Porter.maxBackpackSlots;
			}
			return 4;
		}
	}
	public static class Localization
	{
		public static Dictionary<Language, PluginText> LocalizationTexts;

		public static Language[] InnerLanguage;

		public static PluginText CurrentText
		{
			get
			{
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				//IL_0019: Unknown result type (might be due to invalid IL or missing references)
				if (LocalizationTexts.ContainsKey(LocalizedText.CURRENT_LANGUAGE))
				{
					return LocalizationTexts[LocalizedText.CURRENT_LANGUAGE];
				}
				return LocalizationTexts[InnerLanguage[0]];
			}
		}

		static Localization()
		{
			LocalizationTexts = new Dictionary<Language, PluginText>();
			InnerLanguage = (Language[])(object)new Language[2]
			{
				default(Language),
				(Language)9
			};
			LocalizationTexts.Add((Language)0, new PluginText
			{
				Selector_CurrentClass = "Current Class",
				Selector_ChangeClass = "Change Class",
				Selector_CancelCD = "Cancel Cool Down"
			});
			LocalizationTexts.Add((Language)9, new PluginText
			{
				Selector_CurrentClass = "当前职业",
				Selector_ChangeClass = "变更职业",
				Selector_CancelCD = "取消主动技能CD"
			});
		}
	}
	public class PluginText
	{
		public string Selector_CurrentClass { get; set; } = "Current Class";

		public string Selector_ChangeClass { get; set; } = "Change Class";

		public string Selector_CancelCD { get; set; } = "Cancel Cool Down";
	}
	[DisallowMultipleComponent]
	public class PlayerClassSelector : MonoBehaviourPun
	{
		private int currentClassIndex;

		public TextMeshProUGUI classInfoText;

		private GameObject canvasGO;

		private void Awake()
		{
			Plugin.Logger.LogInfo((object)"PlayerClassSelector Awake called");
			SelectedClass selectedClass = default(SelectedClass);
			if (!Plugin.PluginGameObject.TryGetComponent<SelectedClass>(ref selectedClass))
			{
				Plugin.PluginGameObject.AddComponent<SelectedClass>();
				Plugin.Logger.LogInfo((object)"AddComponent: SelectedClass");
			}
		}

		private void Start()
		{
			if (SelectedClass.CurrentClass != null)
			{
				currentClassIndex = SelectedClass.CurrentClass.ClassIndexInList();
			}
			else
			{
				currentClassIndex = Plugin.savedClassIndexInList.Value;
				SetClass();
			}
			try
			{
				CreateClassNameUI();
			}
			catch
			{
			}
		}

		private void OnDestroy()
		{
			Plugin.Logger.LogInfo((object)"PlayerClassSelector Destroy called");
			Object.Destroy((Object)(object)classInfoText);
			Object.Destroy((Object)(object)canvasGO);
		}

		private void OnDisable()
		{
			if ((Object)(object)classInfoText != (Object)null)
			{
				((Behaviour)classInfoText).enabled = false;
			}
		}

		private void OnEnable()
		{
			if ((Object)(object)classInfoText != (Object)null)
			{
				((Behaviour)classInfoText).enabled = true;
			}
		}

		private void Update()
		{
			if (Input.GetKeyDown((KeyCode)276) || Input.GetKeyDown((KeyCode)275))
			{
				int count = BaseClass.GetClassArray().Count;
				if (count > 0)
				{
					if (Input.GetKeyDown((KeyCode)276))
					{
						currentClassIndex = (currentClassIndex - 1 + count) % count;
					}
					else if (Input.GetKeyDown((KeyCode)275))
					{
						currentClassIndex = (currentClassIndex + 1) % count;
					}
					SetClass();
				}
			}
			if ((Object)(object)canvasGO == (Object)null)
			{
				try
				{
					CreateClassNameUI();
					return;
				}
				catch (Exception ex)
				{
					Plugin.Logger.LogError((object)("UI Create Error: " + ex.Message));
					return;
				}
			}
			UpdateClassNameUI();
		}

		public void SetClass()
		{
			List<Type> classArray = BaseClass.GetClassArray();
			int count = classArray.Count;
			if (currentClassIndex >= 0 && currentClassIndex < count)
			{
				Type type = classArray[currentClassIndex];
				if (SelectedClass.CurrentClass != null)
				{
					SelectedClass.CurrentClass.Dispose();
				}
				SelectedClass.CurrentClass = (BaseClass)Activator.CreateInstance(type);
				Plugin.Logger.LogInfo((object)("Current Class: " + SelectedClass.CurrentClass.InnerText_ClassName()));
			}
		}

		private void CreateClassNameUI()
		{
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Expected O, but got Unknown
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Expected O, but got Unknown
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: Unknown result type (might be due to invalid IL or missing references)
			//IL_016e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			//IL_0189: Unknown result type (might be due to invalid IL or missing references)
			//IL_018e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0193: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0213: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = GameObject.Find("GAME/GUIManager");
			GUIManager component = val.GetComponent<GUIManager>();
			TMP_FontAsset font = ((TMP_Text)component.interactNameText).font;
			canvasGO = new GameObject("canvasInfoGO");
			Object.DontDestroyOnLoad((Object)(object)canvasGO);
			Canvas val2 = canvasGO.AddComponent<Canvas>();
			canvasGO.SetActive(true);
			val2.renderMode = (RenderMode)0;
			CanvasScaler val3 = canvasGO.AddComponent<CanvasScaler>();
			if ((Object)(object)val3 != (Object)null)
			{
				val3.uiScaleMode = (ScaleMode)1;
				val3.referenceResolution = new Vector2(1920f, 1080f);
				val3.matchWidthOrHeight = 0.5f;
			}
			canvasGO.AddComponent<GraphicRaycaster>();
			GameObject val4 = new GameObject("classInfoText");
			val4.transform.SetParent(((Component)val2).transform, false);
			classInfoText = val4.AddComponent<TextMeshProUGUI>();
			((TMP_Text)classInfoText).font = font;
			((TMP_Text)classInfoText).fontSize = 22f;
			((TMP_Text)classInfoText).alignment = (TextAlignmentOptions)257;
			((TMP_Text)classInfoText).enableVertexGradient = true;
			((TMP_Text)classInfoText).colorGradient = new VertexGradient(Color32.op_Implicit(new Color32(byte.MaxValue, (byte)242, (byte)194, byte.MaxValue)), Color32.op_Implicit(new Color32(byte.MaxValue, (byte)242, (byte)194, byte.MaxValue)), Color32.op_Implicit(new Color32((byte)217, (byte)158, (byte)50, byte.MaxValue)), Color32.op_Implicit(new Color32((byte)217, (byte)158, (byte)50, byte.MaxValue)));
			RectTransform component2 = ((Component)classInfoText).GetComponent<RectTransform>();
			component2.anchorMin = new Vector2(0f, 0.5f);
			component2.anchorMax = new Vector2(0f, 0.5f);
			component2.pivot = new Vector2(0f, 0.5f);
			component2.anchoredPosition = new Vector2(20f, 240f);
			component2.sizeDelta = new Vector2(400f, 200f);
		}

		private void UpdateClassNameUI()
		{
			StringBuilder stringBuilder = new StringBuilder();
			stringBuilder.AppendFormat(Localization.CurrentText.Selector_CurrentClass + ": <color=#FF5555>" + SelectedClass.CurrentClass?.InnerText_ClassName() + "</color>\n");
			stringBuilder.AppendFormat("<color=#FF5555>" + SelectedClass.CurrentClass?.InnerText_ClassDescription() + "</color>\n");
			stringBuilder.AppendLine("← / →  " + Localization.CurrentText.Selector_ChangeClass + "\n");
			((TMP_Text)classInfoText).text = stringBuilder.ToString();
		}
	}
	[BepInPlugin("AnotherClassMod", "com.github.little_imp.AnotherClassMod", "0.0.2")]
	public class Plugin : BaseUnityPlugin
	{
		private static Harmony harmony;

		public static ManualLogSource Logger { get; private set; }

		public ConfigEntry<bool> modEnabled { get; private set; }

		public static ConfigEntry<KeyCode> skillKey { get; private set; }

		public static ConfigEntry<int> savedClassIndexInList { get; private set; }

		public static GameObject PluginGameObject { get; private set; }

		public static PlayerClassSelector playerClassSelector { get; set; }

		public static RichPresenceState GameStage { get; set; }

		private void Awake()
		{
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Expected O, but got Unknown
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Expected O, but got Unknown
			Logger = ((BaseUnityPlugin)this).Logger;
			modEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Enable", true, "Enable Mod");
			skillKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("General", "Key", (KeyCode)102, "Key to activate skill");
			savedClassIndexInList = ((BaseUnityPlugin)this).Config.Bind<int>("General", "Current Class Index In List", 1, "The class that last game saved");
			GlobalPunishment.ReadConfig(((BaseUnityPlugin)this).Config);
			if (!modEnabled.Value)
			{
				ManualLogSource logger = Logger;
				if (logger != null)
				{
					logger.LogInfo((object)"com.github.little_imp.AnotherClassMod is disabled, exiting load.");
				}
			}
			else
			{
				harmony = new Harmony("AnotherClassMod");
				harmony.PatchAll();
				Logger.LogInfo((object)"com.github.little_imp.AnotherClassMod load,0.0.2");
				PluginGameObject = new GameObject("AnotherClassMod");
				Object.DontDestroyOnLoad((Object)(object)PluginGameObject);
				PhotonView val = PluginGameObject.AddComponent<PhotonView>();
				val.ViewID = 999994869;
			}
		}

		private void Update()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Invalid comparison between Unknown and I4
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Invalid comparison between Unknown and I4
			PlayerClassSelector playerClassSelector2 = default(PlayerClassSelector);
			if ((int)GameStage == 1)
			{
				PlayerClassSelector playerClassSelector = default(PlayerClassSelector);
				if (PluginGameObject.TryGetComponent<PlayerClassSelector>(ref playerClassSelector))
				{
					((Behaviour)playerClassSelector).enabled = true;
				}
			}
			else if (PluginGameObject.TryGetComponent<PlayerClassSelector>(ref playerClassSelector2))
			{
				((Behaviour)playerClassSelector2).enabled = false;
			}
			SelectedClass selectedClass2 = default(SelectedClass);
			if ((int)GameStage == 0)
			{
				SelectedClass selectedClass = default(SelectedClass);
				if (PluginGameObject.TryGetComponent<SelectedClass>(ref selectedClass))
				{
					((Behaviour)selectedClass).enabled = false;
				}
			}
			else if (PluginGameObject.TryGetComponent<SelectedClass>(ref selectedClass2))
			{
				((Behaviour)selectedClass2).enabled = true;
			}
		}

		private void OnDestroy()
		{
			Logger.LogInfo((object)"com.github.little_imp.AnotherClassMod exiting load.");
			if (SelectedClass.CurrentClass != null)
			{
				savedClassIndexInList.Value = SelectedClass.CurrentClass.ClassIndexInList();
			}
			harmony.UnpatchSelf();
		}
	}
	[DisallowMultipleComponent]
	public class SelectedClass : MonoBehaviourPun
	{
		public struct PartyClassInfo
		{
			public string DisplayName;

			public string TypeName;
		}

		public Dictionary<int, PartyClassInfo?> PartyClass { get; set; } = new Dictionary<int, PartyClassInfo?>();

		public static BaseClass CurrentClass { get; set; }

		public static SelectedClass Instance { get; set; }

		public static bool isLockCurrentClass
		{
			get
			{
				if ((Object)(object)Instance == (Object)null)
				{
					return false;
				}
				if (CurrentClass == null)
				{
					return false;
				}
				return true;
			}
		}

		public float RPCTicker { get; set; }

		public float RPCDuration { get; } = 1f;

		private void Awake()
		{
			Instance = this;
		}

		private void Update()
		{
			//IL_0111: Unknown result type (might be due to invalid IL or missing references)
			RPCTicker += Time.deltaTime;
			if (CurrentClass == null || (Object)(object)Character.localCharacter == (Object)null)
			{
				return;
			}
			if ((Object)(object)CurrentClass.canvasGO == (Object)null)
			{
				CurrentClass.CreateUI();
			}
			try
			{
				PhotonView obj = PVReadyByTicker(hasDuration: true);
				if (obj != null)
				{
					obj.RPC("RPC_ChangeClass", (RpcTarget)0, new object[3]
					{
						((MonoBehaviourPun)Character.localCharacter).photonView.OwnerActorNr,
						"<color=" + CurrentClass.ClassColor + ">" + CurrentClass.InnerText_ClassName() + "</color>",
						CurrentClass.GetType().Name
					});
				}
				CurrentClass.ClassTrigger();
			}
			catch (Exception ex)
			{
				Plugin.Logger.LogError((object)ex);
			}
			GlobalPunishment.UpdateGlobalPunishment();
			if (Input.GetKeyDown(CurrentClass.SkillKeyCode) && !CurrentClass.IsCoolDown && CurrentClass.ClassSkill())
			{
				CurrentClass.IsCoolDown = true;
				CurrentClass.CDTicker = CurrentClass.ClassSkillCoolDown;
				CurrentClass.ShowCooldownUI();
			}
			CurrentClass.UpdateInfoText();
			if (CurrentClass.IsCoolDown)
			{
				CurrentClass.CDTicker -= Time.deltaTime;
				if (CurrentClass.CDTicker <= 0f)
				{
					CurrentClass.CDTicker = 0f;
					CurrentClass.IsCoolDown = false;
					CurrentClass.HideCooldownUI();
				}
				CurrentClass.UpdateCooldownVisual();
				if ((Object)(object)CurrentClass.CDText != (Object)null)
				{
					((TMP_Text)CurrentClass.CDText).text = CurrentClass.CDTicker.ToString("F1");
				}
			}
			if (RPCTicker > RPCDuration)
			{
				RPCTicker = 0f;
			}
		}

		private void OnDestroy()
		{
			Instance = null;
			CurrentClass.Dispose();
		}

		private void OnDisable()
		{
			if (CurrentClass != null)
			{
				if ((Object)(object)CurrentClass.CDBackCircle != (Object)null)
				{
					((Behaviour)CurrentClass.CDBackCircle).enabled = false;
				}
				if ((Object)(object)CurrentClass.CDCircle != (Object)null)
				{
					((Behaviour)CurrentClass.CDBackCircle).enabled = false;
				}
				if ((Object)(object)CurrentClass.CDText != (Object)null)
				{
					((Behaviour)CurrentClass.CDBackCircle).enabled = false;
				}
				if ((Object)(object)CurrentClass.InfoText != (Object)null)
				{
					((Behaviour)CurrentClass.CDBackCircle).enabled = false;
				}
			}
		}

		private void OnEnable()
		{
			if (CurrentClass != null)
			{
				if ((Object)(object)CurrentClass.CDBackCircle != (Object)null)
				{
					((Behaviour)CurrentClass.CDBackCircle).enabled = true;
				}
				if ((Object)(object)CurrentClass.CDCircle != (Object)null)
				{
					((Behaviour)CurrentClass.CDBackCircle).enabled = true;
				}
				if ((Object)(object)CurrentClass.CDText != (Object)null)
				{
					((Behaviour)CurrentClass.CDBackCircle).enabled = true;
				}
				if ((Object)(object)CurrentClass.InfoText != (Object)null)
				{
					((Behaviour)CurrentClass.CDBackCircle).enabled = true;
				}
			}
		}

		public PhotonView PVReadyByTicker(bool hasDuration)
		{
			if (PhotonNetwork.IsConnectedAndReady && PhotonNetwork.InRoom && (Object)(object)((MonoBehaviourPun)this).photonView != (Object)null)
			{
				if (hasDuration && RPCTicker < RPCDuration)
				{
					return null;
				}
				return ((MonoBehaviourPun)this).photonView;
			}
			return null;
		}

		[PunRPC]
		public void RPC_SubtractStatus(Vector3 classPostion, float maxDistance, STATUSTYPE statusType, float value)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: 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)
			if (Vector3.Distance(Character.localCharacter.Center, classPostion) <= maxDistance)
			{
				Character.localCharacter.refs.afflictions.SubtractStatus(statusType, value, false, false);
			}
		}

		[PunRPC]
		public void RPC_AddStatus(Vector3 classPostion, float maxDistance, STATUSTYPE statusType, float value)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: 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)
			if (Vector3.Distance(Character.localCharacter.Center, classPostion) <= maxDistance)
			{
				Character.localCharacter.refs.afflictions.AddStatus(statusType, value, false, true, true, false);
			}
		}

		[PunRPC]
		public void RPC_SetStatus_Chain_Skill(float average_Hunger, float average_Injury, float average_Poison, float average_Spores, float average_Drowsy, float average_Hot, float average_Cold)
		{
			if (!Character.localCharacter.data.dead)
			{
				Character.localCharacter.refs.afflictions.SetStatus((STATUSTYPE)1, average_Hunger, true);
				Character.localCharacter.refs.afflictions.SetStatus((STATUSTYPE)0, average_Injury, true);
				Character.localCharacter.refs.afflictions.SetStatus((STATUSTYPE)3, average_Poison, true);
				Character.localCharacter.refs.afflictions.SetStatus((STATUSTYPE)10, average_Spores, true);
				Character.localCharacter.refs.afflictions.SetStatus((STATUSTYPE)6, average_Drowsy, true);
				Character.localCharacter.refs.afflictions.SetStatus((STATUSTYPE)8, average_Hot, true);
				Character.localCharacter.refs.afflictions.SetStatus((STATUSTYPE)2, average_Cold, true);
			}
		}

		[PunRPC]
		public void RPC_AvgStatus_Chain_Aura()
		{
			if (!Character.localCharacter.data.dead)
			{
				IEnumerable<Character> source = Character.AllCharacters.Where((Character c) => !c.data.dead && c.IsPlayerControlled);
				float num = source.Average((Character t) => t.refs.afflictions.GetCurrentStatus((STATUSTYPE)0));
				Character.localCharacter.refs.afflictions.AdjustStatus((STATUSTYPE)0, num - Character.localCharacter.refs.afflictions.GetCurrentStatus((STATUSTYPE)0), false);
			}
		}

		[PunRPC]
		public void RPC_AddStatus_WithPvId(STATUSTYPE statusType, float value, int pvId)
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			if (((MonoBehaviourPun)Character.localCharacter).photonView.ViewID == pvId)
			{
				Character.localCharacter.refs.afflictions.AddStatus(statusType, value, false, true, true, false);
			}
		}

		[PunRPC]
		public void RPC_SetSavedStatus(float[] savedStatus, int pvId)
		{
			if (((MonoBehaviourPun)Character.localCharacter).photonView.ViewID == pvId)
			{
				Array.Copy(savedStatus, Character.localCharacter.refs.afflictions.currentStatuses, savedStatus.Length);
			}
		}

		[PunRPC]
		public void RPC_SubtractStatus_WhoPassOut(Vector3 classPostion, float maxDistance, STATUSTYPE statusType, float value)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			if (Vector3.Distance(Character.localCharacter.Center, classPostion) <= maxDistance && Character.localCharacter.data.fullyPassedOut)
			{
				Character.localCharacter.refs.afflictions.SubtractStatus(statusType, value, false, false);
			}
		}

		[PunRPC]
		public void RPC_AddAffliction_InvincibilityFromMilk(Vector3 classPostion, float maxDistance, float value)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: 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_0022: Expected O, but got Unknown
			if (Vector3.Distance(Character.localCharacter.Center, classPostion) <= maxDistance)
			{
				Affliction_Invincibility val = new Affliction_Invincibility();
				((Affliction)val).totalTime = value;
				val.isFromMilk = true;
				Character.localCharacter.refs.afflictions.AddAffliction((Affliction)(object)val, false);
			}
		}

		[PunRPC]
		public void RPC_AddAffliction_InfiniteStamina(Vector3 classPostion, float maxDistance, float value)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: 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_0022: Expected O, but got Unknown
			if (Vector3.Distance(Character.localCharacter.Center, classPostion) <= maxDistance)
			{
				Affliction_InfiniteStamina val = new Affliction_InfiniteStamina();
				((Affliction)val).totalTime = value;
				Character.localCharacter.refs.afflictions.AddAffliction((Affliction)(object)val, false);
			}
		}

		[PunRPC]
		public void RPC_Affliction_LowGravity(Vector3 classPostion, float maxDistance, int lowGravAmount, float totalTime)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: 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_0022: Expected O, but got Unknown
			if (Vector3.Distance(Character.localCharacter.Center, classPostion) <= maxDistance)
			{
				Affliction_LowGravity val = new Affliction_LowGravity();
				((Affliction)val).totalTime = totalTime;
				val.lowGravAmount = lowGravAmount;
				Character.localCharacter.refs.afflictions.AddAffliction((Affliction)(object)val, false);
			}
		}

		[PunRPC]
		public void RPC_AddAffliction_Affliction_FasterBoi(Vector3 classPostion, float maxDistance, float amount)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: 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_0022: Expected O, but got Unknown
			if (Vector3.Distance(Character.localCharacter.Center, classPostion) <= maxDistance)
			{
				Affliction_FasterBoi val = new Affliction_FasterBoi();
				((Affliction)val).totalTime = amount;
				val.climbDelay = 0f;
				Character.localCharacter.refs.afflictions.AddAffliction((Affliction)(object)val, false);
			}
		}

		[PunRPC]
		public void RPC_AddExtraStamina(Vector3 classPostion, float maxDistance, float maxExtraStamina, float value)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			if (Vector3.Distance(Character.localCharacter.Center, classPostion) <= maxDistance && Character.localCharacter.data.extraStamina < maxExtraStamina && !Character.localCharacter.data.isClimbingAnything && !Character.localCharacter.data.isJumping)
			{
				Character.localCharacter.AddExtraStamina(value);
			}
		}

		[PunRPC]
		public void RPC_ChangeClass(int OAN, string className, string classTypename)
		{
			try
			{
				className = className ?? "NoClass";
				classTypename = classTypename ?? "";
				if (!isLockCurrentClass)
				{
					return;
				}
				if (PartyClass == null)
				{
					PartyClass = new Dictionary<int, PartyClassInfo?>();
				}
				PartyClass[OAN] = new PartyClassInfo
				{
					DisplayName = className,
					TypeName = classTypename
				};
				if ((Object)(object)GUIManager.instance == (Object)null || (Object)(object)GUIManager.instance.playerNames == (Object)null)
				{
					return;
				}
				PlayerName[] playerNameText = GUIManager.instance.playerNames.playerNameText;
				if (playerNameText == null)
				{
					return;
				}
				PlayerName[] array = playerNameText;
				foreach (PlayerName val in array)
				{
					if (!((Object)(object)val == (Object)null) && !((Object)(object)val.characterInteractable == (Object)null) && !((Object)(object)val.text == (Object)null))
					{
						int ownerActorNr = ((MonoBehaviourPun)val.characterInteractable.character).photonView.OwnerActorNr;
						string name = val.characterInteractable.GetName();
						if (!string.IsNullOrEmpty(name) && PartyClass.ContainsKey(ownerActorNr))
						{
							((TMP_Text)val.text).text = "<" + PartyClass[ownerActorNr]?.DisplayName + ">" + name;
						}
					}
				}
				List<int> list = new List<int>();
				foreach (KeyValuePair<int, PartyClassInfo?> item in PartyClass)
				{
					if (!PhotonNetwork.CurrentRoom.Players.ContainsKey(item.Key))
					{
						list.Add(item.Key);
					}
				}
				foreach (int item2 in list)
				{
					PartyClass.Remove(item2);
				}
			}
			catch (Exception arg)
			{
				Plugin.Logger.LogError((object)$"RPC_ChangeClass 内部发生异常: {arg}");
			}
		}

		[PunRPC]
		public void RPC_WarpPlayer(Vector3 postion, int pvId)
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			if (pvId == ((MonoBehaviourPun)Character.localCharacter).photonView.ViewID)
			{
				Character.localCharacter.WarpPlayerRPC(postion, false);
			}
		}

		[PunRPC]
		public void RPC_WeightReduce(Vector3 classPostion, float maxDistance, float reduce)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			if (Vector3.Distance(Character.localCharacter.Center, classPostion) <= maxDistance)
			{
				HarmonyTemp.WeightReduce = reduce;
			}
			else
			{
				HarmonyTemp.WeightReduce = 0f;
			}
		}

		[PunRPC]
		public void RPC_SyncGlobalPunishment(float _maxStaminaBarCoefficient, float _staminaUsageCoefficient, bool _randomInstantiateZombie, float _randomInstantiateZombieDuration)
		{
			GlobalPunishment.MaxStaminaBarPercentCoefficient = _maxStaminaBarCoefficient;
			GlobalPunishment.StaminaUsageCoefficient = _staminaUsageCoefficient;
			GlobalPunishment.RandomInstantiateZombie = _randomInstantiateZombie;
			GlobalPunishment.RandomInstantiateZombieDuration = _randomInstantiateZombieDuration;
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "AnotherClassMod";

		public const string PLUGIN_NAME = "com.github.little_imp.AnotherClassMod";

		public const string PLUGIN_VERSION = "0.0.2";
	}
}
namespace AnotherClassMod.Class
{
	public abstract class BaseClass : IDisposable
	{
		public static List<Type> ClassTypes { get; private set; }

		public KeyCode SkillKeyCode { get; set; } = Plugin.skillKey.Value;

		public Func<bool> ClassSkill { get; set; } = () => false;

		public Action ClassTrigger { get; set; } = delegate
		{
		};

		public float ClassSkillCoolDown { get; set; } = 0f;

		public string ClassColor { get; set; } = "#FFFFFF";

		public float CDTicker { get; set; }

		public bool IsCoolDown { get; set; } = false;

		public GameObject canvasGO { get; set; } = null;

		public GameObject CDCircleGO { get; set; } = null;

		public GameObject CDBackCircleGO { get; set; } = null;

		public Image CDCircle { get; set; } = null;

		public Image CDBackCircle { get; set; } = null;

		public GameObject CDTextGO { get; set; } = null;

		public TextMeshProUGUI CDText { get; set; } = null;

		public GameObject InfoTextGO { get; set; } = null;

		public TextMeshProUGUI InfoText { get; set; } = null;

		public float infoDuration { get; } = 2f;

		public float infoTick { get; set; } = 0f;

		public abstract string InnerText_ClassName();

		public abstract string InnerText_ClassDescription();

		public void CreateUI()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Expected O, but got Unknown
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Expected O, but got Unknown
			//IL_0053: 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_019a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0208: Unknown result type (might be due to invalid IL or missing references)
			//IL_020d: Unknown result type (might be due to invalid IL or missing references)
			//IL_023a: Unknown result type (might be due to invalid IL or missing references)
			//IL_025a: 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_029a: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_02da: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_031a: Unknown result type (might be due to invalid IL or missing references)
			//IL_033a: Unknown result type (might be due to invalid IL or missing references)
			//IL_035a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0399: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a3: Expected O, but got Unknown
			//IL_041d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0422: Unknown result type (might be due to invalid IL or missing references)
			//IL_0449: Unknown result type (might be due to invalid IL or missing references)
			//IL_045f: Unknown result type (might be due to invalid IL or missing references)
			//IL_047f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0495: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d3: Expected O, but got Unknown
			//IL_054d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0552: Unknown result type (might be due to invalid IL or missing references)
			//IL_0583: Unknown result type (might be due to invalid IL or missing references)
			canvasGO = new GameObject("SkillCooldownCanvas");
			Canvas val = canvasGO.AddComponent<Canvas>();
			val.renderMode = (RenderMode)0;
			CanvasScaler val2 = canvasGO.AddComponent<CanvasScaler>();
			if ((Object)(object)val2 != (Object)null)
			{
				val2.uiScaleMode = (ScaleMode)1;
				val2.referenceResolution = new Vector2(1920f, 1080f);
				val2.matchWidthOrHeight = 0.5f;
			}
			canvasGO.AddComponent<GraphicRaycaster>();
			CDCircleGO = new GameObject("CooldownCircle");
			CDBackCircleGO = new GameObject("CDBackCircleGO");
			CDCircleGO.transform.SetParent(canvasGO.transform, false);
			CDBackCircleGO.transform.SetParent(canvasGO.transform, false);
			CDCircle = CDCircleGO.AddComponent<Image>();
			CDBackCircle = CDBackCircleGO.AddComponent<Image>();
			UI_UseItemProgress val3 = Object.FindFirstObjectByType<UI_UseItemProgress>();
			if ((Object)(object)val3 != (Object)null)
			{
				CDBackCircle.sprite = val3.fill.sprite;
				CDCircle.sprite = val3.fill.sprite;
			}
			CDCircle.type = (Type)3;
			CDCircle.fillMethod = (FillMethod)4;
			CDCircle.fillOrigin = 2;
			CDCircle.fillClockwise = false;
			CDCircle.fillAmount = 0f;
			((Graphic)CDCircle).color = Color32.op_Implicit(new Color32((byte)0, (byte)242, (byte)254, byte.MaxValue));
			((Behaviour)CDCircle).enabled = false;
			CDBackCircle.type = (Type)3;
			CDBackCircle.fillMethod = (FillMethod)4;
			CDBackCircle.fillOrigin = 2;
			CDBackCircle.fillClockwise = false;
			CDBackCircle.fillAmount = 1f;
			((Graphic)CDBackCircle).color = Color32.op_Implicit(new Color32((byte)26, (byte)31, (byte)44, byte.MaxValue));
			((Behaviour)CDBackCircle).enabled = false;
			((Graphic)CDCircle).rectTransform.anchorMin = new Vector2(0.5f, 0.5f);
			((Graphic)CDCircle).rectTransform.anchorMax = new Vector2(0.5f, 0.5f);
			((Graphic)CDCircle).rectTransform.pivot = new Vector2(0.5f, 0.5f);
			((Graphic)CDCircle).rectTransform.anchoredPosition = new Vector2(200f, -200f);
			((Graphic)CDCircle).rectTransform.sizeDelta = new Vector2(80f, 80f);
			((Graphic)CDBackCircle).rectTransform.anchorMin = new Vector2(0.5f, 0.5f);
			((Graphic)CDBackCircle).rectTransform.anchorMax = new Vector2(0.5f, 0.5f);
			((Graphic)CDBackCircle).rectTransform.pivot = new Vector2(0.5f, 0.5f);
			((Graphic)CDBackCircle).rectTransform.anchoredPosition = new Vector2(200f, -200f);
			((Graphic)CDBackCircle).rectTransform.sizeDelta = new Vector2(80f, 80f);
			((Transform)((Graphic)CDBackCircle).rectTransform).SetAsFirstSibling();
			GUIManager component = GameObject.Find("GAME/GUIManager").GetComponent<GUIManager>();
			TMP_FontAsset font = ((TMP_Text)component.heroDayText).font;
			CDTextGO = new GameObject("CooldownText");
			CDTextGO.transform.SetParent(((Component)CDCircle).transform, false);
			CDText = CDTextGO.AddComponent<TextMeshProUGUI>();
			((TMP_Text)CDText).font = font;
			((TMP_Text)CDText).fontSize = 20f;
			((TMP_Text)CDText).alignment = (TextAlignmentOptions)514;
			((Graphic)CDText).color = Color32.op_Implicit(new Color32((byte)230, (byte)238, (byte)244, byte.MaxValue));
			((TMP_Text)CDText).text = "0.0";
			((TMP_Text)CDText).rectTransform.anchorMin = Vector2.zero;
			((TMP_Text)CDText).rectTransform.anchorMax = Vector2.one;
			((TMP_Text)CDText).rectTransform.pivot = new Vector2(0.5f, 0.5f);
			((TMP_Text)CDText).rectTransform.anchoredPosition = Vector2.zero;
			((TMP_Text)CDText).rectTransform.sizeDelta = Vector2.zero;
			((Behaviour)CDText).enabled = false;
			InfoTextGO = new GameObject("InfoTextGO");
			InfoTextGO.transform.SetParent(canvasGO.transform, false);
			InfoText = InfoTextGO.AddComponent<TextMeshProUGUI>();
			((TMP_Text)InfoText).font = font;
			((TMP_Text)InfoText).fontSize = 32f;
			((TMP_Text)InfoText).alignment = (TextAlignmentOptions)514;
			((Graphic)InfoText).color = Color32.op_Implicit(new Color32((byte)224, byte.MaxValue, byte.MaxValue, byte.MaxValue));
			((TMP_Text)InfoText).text = "";
			((TMP_Text)InfoText).rectTransform.anchoredPosition = new Vector2(0f, -200f);
			((Behaviour)InfoText).enabled = false;
		}

		public void ShowCooldownUI()
		{
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)CDCircle != (Object)null)
			{
				((Behaviour)CDCircle).enabled = true;
				((Behaviour)CDBackCircle).enabled = true;
				((Behaviour)CDText).enabled = true;
				CDCircle.fillAmount = 1f;
				((Component)CDCircle).transform.localScale = Vector3.zero;
				TweenSettingsExtensions.SetEase<TweenerCore<Vector3, Vector3, VectorOptions>>(ShortcutExtensions.DOScale(((Component)CDCircle).transform, 1f, 0.25f), (Ease)27);
			}
		}

		public void HideCooldownUI()
		{
			if ((Object)(object)CDCircle != (Object)null)
			{
				((Behaviour)CDCircle).enabled = false;
				((Behaviour)CDBackCircle).enabled = false;
				((Behaviour)CDText).enabled = false;
			}
		}

		public void UpdateCooldownVisual()
		{
			if ((Object)(object)CDCircle != (Object)null)
			{
				if (CDTicker > ClassSkillCoolDown)
				{
					CDTicker = ClassSkillCoolDown;
				}
				CDCircle.fillAmount = CDTicker / ClassSkillCoolDown;
			}
		}

		public void UpdateInfoText()
		{
			if ((Object)(object)InfoText != (Object)null && ((Behaviour)InfoText).enabled)
			{
				infoTick -= Time.deltaTime;
				if (infoTick <= 0f)
				{
					((Behaviour)InfoText).enabled = false;
				}
			}
		}

		public void RestartInfoText(string info)
		{
			if ((Object)(object)InfoText != (Object)null)
			{
				infoTick = infoDuration;
				((TMP_Text)InfoText).text = info;
				((Behaviour)InfoText).enabled = true;
			}
		}

		public bool SpawnItemInHand(string itemName)
		{
			if ((Object)(object)Character.localCharacter != (Object)null && Character.localCharacter.IsLocal)
			{
				CharacterItems items = Character.localCharacter.refs.items;
				if ((Object)(object)items != (Object)null)
				{
					MethodInfo methodInfo = AccessTools.Method(typeof(CharacterItems), "SpawnItemInHand", new Type[1] { typeof(string) }, (Type[])null);
					try
					{
						methodInfo.Invoke(items, new object[1] { itemName });
						return true;
					}
					catch
					{
					}
				}
			}
			return false;
		}

		public void Dispose()
		{
			Object.Destroy((Object)(object)CDTextGO);
			Object.Destroy((Object)(object)CDCircleGO);
			Object.Destroy((Object)(object)CDBackCircleGO);
			Object.Destroy((Object)(object)InfoTextGO);
			Object.Destroy((Object)(object)canvasGO);
		}

		public static List<Type> GetClassArray()
		{
			Assembly executingAssembly = Assembly.GetExecutingAssembly();
			if (ClassTypes == null)
			{
				ClassTypes = executingAssembly.GetTypes().Where(delegate(Type t)
				{
					int result;
					if (t.IsClass && !t.IsAbstract)
					{
						string? text = t.Namespace;
						if (text != null && text.StartsWith("AnotherClassMod.Class"))
						{
							result = (typeof(BaseClass).IsAssignableFrom(t) ? 1 : 0);
							goto IL_003c;
						}
					}
					result = 0;
					goto IL_003c;
					IL_003c:
					return (byte)result != 0;
				}).ToList();
			}
			return ClassTypes;
		}

		public int ClassIndexInList()
		{
			return GetClassArray().IndexOf(GetType());
		}
	}
	public class Cook : BaseClass
	{
		private float range = 100f;

		private float lessPrecent = 0.3f;

		public Cook()
		{
			base.ClassTrigger = CookAura;
			base.ClassSkill = CookSkill;
			base.ClassSkillCoolDown = 25f;
			base.ClassColor = "#FFB703";
		}

		public void CookAura()
		{
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			if (Character.localCharacter.data.dead)
			{
				return;
			}
			SelectedClass instance = SelectedClass.Instance;
			if (instance != null)
			{
				PhotonView obj = instance.PVReadyByTicker(hasDuration: true);
				if (obj != null)
				{
					obj.RPC("RPC_SubtractStatus", (RpcTarget)0, new object[4]
					{
						Character.localCharacter.Center,
						range,
						(object)(STATUSTYPE)1,
						0.0005f * lessPrecent
					});
				}
			}
		}

		public bool CookSkill()
		{
			if (Character.localCharacter.data.fullyPassedOut || Character.localCharacter.data.dead)
			{
				return false;
			}
			return SpawnItemInHand("PortableStovetopItem");
		}

		public override string InnerText_ClassName()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "厨师";
			}
			return "Cook";
		}

		public override string InnerText_ClassDescription()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "技能:生成锅;被动:抗饿光环";
			}
			return "[Skill] Spawn Stovetop. [Passive] emits a hunger-reduction Aura.";
		}
	}
	public class Crypto : BaseClass
	{
		private Vector3 lockPostion;

		private float camSpeed = 6f;

		private GameObject currentLocalModel;

		public Vector3 camOffset { get; set; }

		public bool isCamMoving { get; set; } = false;

		public Crypto()
		{
			base.ClassTrigger = Aura;
			base.ClassSkill = Skill;
			base.ClassSkillCoolDown = 1f;
			base.ClassColor = "#70E000";
		}

		private void Aura()
		{
			//IL_004b: 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)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: 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_007f: 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)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: 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_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			if (Character.localCharacter.data.fullyPassedOut || Character.localCharacter.data.dead)
			{
				isCamMoving = false;
			}
			if (isCamMoving)
			{
				Transform transform = ((Component)Camera.main).transform;
				Vector3 val = Vector3.zero;
				if (Input.GetKey((KeyCode)119))
				{
					val += transform.forward;
				}
				if (Input.GetKey((KeyCode)115))
				{
					val -= transform.forward;
				}
				if (Input.GetKey((KeyCode)97))
				{
					val -= transform.right;
				}
				if (Input.GetKey((KeyCode)100))
				{
					val += transform.right;
				}
				if (Input.GetKey((KeyCode)32))
				{
					val += transform.up;
				}
				if (Input.GetKey((KeyCode)306))
				{
					val -= transform.up;
				}
				camOffset += val * Time.deltaTime * camSpeed;
				LoadItemToScreenCenter();
			}
			else
			{
				ClearCurrentModel();
			}
		}

		private bool Skill()
		{
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			if (Character.localCharacter.data.fullyPassedOut || Character.localCharacter.data.dead)
			{
				isCamMoving = false;
				return false;
			}
			isCamMoving = !isCamMoving;
			if (isCamMoving)
			{
				camOffset = Vector3.up * 3f;
				lockPostion = Character.localCharacter.Center;
			}
			else
			{
				Character.localCharacter.WarpPlayerRPC(lockPostion, false);
			}
			return true;
		}

		public override string InnerText_ClassDescription()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "技能:召唤皇帝的新无人机(可交互、右键、ping)";
			}
			return "[Skill] Summon the Emperor's New Drone(right click, ping).";
		}

		public override string InnerText_ClassName()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "DJI高手";
			}
			return "Crypto";
		}

		public void LoadItemToScreenCenter()
		{
			//IL_0047: 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_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: 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)
			//IL_0080: 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_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			ClearCurrentModel();
			string text = "0_Items/Glider";
			GameObject val = Resources.Load<GameObject>(text);
			if (!((Object)(object)val == (Object)null))
			{
				Camera main = Camera.main;
				if (!((Object)(object)main == (Object)null))
				{
					Vector3 val2 = ((Component)main).transform.position + ((Component)main).transform.forward * 4f + ((Component)main).transform.up * -0.5f;
					currentLocalModel = Object.Instantiate<GameObject>(val, val2, ((Component)main).transform.rotation);
					Transform transform = currentLocalModel.transform;
					transform.localScale *= 0.3f;
					currentLocalModel.transform.SetParent(((Component)main).transform);
				}
			}
		}

		public void ClearCurrentModel()
		{
			if ((Object)(object)currentLocalModel != (Object)null)
			{
				Object.Destroy((Object)(object)currentLocalModel);
				currentLocalModel = null;
			}
		}
	}
	public class Dancer : BaseClass
	{
		private float range = 8f;

		private Character partner = Character.localCharacter;

		private float amountTime = 2f;

		private float buffDuration = 8f;

		private float buffDuration_range_down = 6f;

		private float buffDuration_range_up = 10f;

		private float buffTicker = 0f;

		public Dancer()
		{
			base.ClassTrigger = Aura;
			base.ClassSkill = Skill;
			base.ClassSkillCoolDown = 1f;
			base.ClassColor = "#F72585";
		}

		public void Aura()
		{
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_013d: Unknown result type (might be due to invalid IL or missing references)
			buffTicker += Time.deltaTime;
			Affliction val = default(Affliction);
			if (buffTicker > buffDuration && !Character.localCharacter.data.dead && Character.AllCharacters.IndexOf(partner) != -1 && (Object)(object)partner != (Object)(object)Character.localCharacter && Vector3.Distance(partner.Center, Character.localCharacter.Center) < range && !partner.refs.afflictions.HasAfflictionType((AfflictionType)2, ref val))
			{
				SelectedClass instance = SelectedClass.Instance;
				if (instance != null)
				{
					PhotonView obj = instance.PVReadyByTicker(hasDuration: false);
					if (obj != null)
					{
						obj.RPC("RPC_AddAffliction_Affliction_FasterBoi", ((MonoBehaviourPun)partner).photonView.Owner, new object[3]
						{
							Character.localCharacter.Center,
							range,
							amountTime
						});
					}
				}
				SelectedClass instance2 = SelectedClass.Instance;
				if (instance2 != null)
				{
					PhotonView obj2 = instance2.PVReadyByTicker(hasDuration: false);
					if (obj2 != null)
					{
						obj2.RPC("RPC_AddAffliction_Affliction_FasterBoi", ((MonoBehaviourPun)Character.localCharacter).photonView.Owner, new object[3]
						{
							Character.localCharacter.Center,
							range,
							amountTime
						});
					}
				}
			}
			if (buffTicker > buffDuration)
			{
				buffTicker = 0f;
				buffDuration = Random.Range(buffDuration_range_down, buffDuration_range_up);
			}
		}

		public bool Skill()
		{
			List<Character> allCharacters = Character.AllCharacters;
			partner = Character.localCharacter;
			if (allCharacters != null && allCharacters.Count > 1)
			{
				int num = allCharacters.IndexOf(partner);
				int num2 = 0;
				while ((Object)(object)partner == (Object)(object)Character.localCharacter && num2++ < 10)
				{
					partner = allCharacters[++num % allCharacters.Count];
				}
				if ((Object)(object)partner != (Object)(object)Character.localCharacter && partner.IsPlayerControlled)
				{
					RestartInfoText("<color=#03543F>Partner: " + partner.characterName + "</color>");
					return true;
				}
			}
			RestartInfoText("<color=#E6A23C>No Partner</color>");
			return false;
		}

		public override string InnerText_ClassName()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "舞者";
			}
			return "Dancer";
		}

		public override string InnerText_ClassDescription()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "技能:更换舞伴;被动:靠近舞伴获得增强!";
			}
			return "[Skill] Switch Partner. [Passive] Proximity to partner grants a buff.";
		}
	}
	public class Endurer : BaseClass
	{
		private float range = 15f;

		private float max_extra_stamina = 0.2f;

		private float amount = 0.05f;

		private float time = 2.5f;

		public Endurer()
		{
			base.ClassTrigger = Aura;
			base.ClassSkill = Skill;
			base.ClassSkillCoolDown = 30f;
			base.ClassColor = "#E07A5F";
		}

		private void Aura()
		{
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			if (Character.localCharacter.data.dead)
			{
				return;
			}
			SelectedClass instance = SelectedClass.Instance;
			if (instance != null)
			{
				PhotonView obj = instance.PVReadyByTicker(hasDuration: true);
				if (obj != null)
				{
					obj.RPC("RPC_AddExtraStamina", (RpcTarget)0, new object[4]
					{
						Character.localCharacter.Center,
						range,
						max_extra_stamina,
						amount
					});
				}
			}
		}

		private bool Skill()
		{
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			if (Character.localCharacter.data.fullyPassedOut || Character.localCharacter.data.dead)
			{
				return false;
			}
			SelectedClass instance = SelectedClass.Instance;
			if (instance != null)
			{
				PhotonView obj = instance.PVReadyByTicker(hasDuration: false);
				if (obj != null)
				{
					obj.RPC("RPC_AddAffliction_InfiniteStamina", (RpcTarget)0, new object[3]
					{
						Character.localCharacter.Center,
						range,
						time
					});
				}
			}
			Plugin.Logger.LogInfo((object)"Endurer Skill RPC...");
			return true;
		}

		public override string InnerText_ClassDescription()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "技能:吹响号角!被动:恢复额外耐力条光环";
			}
			return "[Skill] Sound the Horn! [Passive] Aura: Extra Stamina Recovery";
		}

		public override string InnerText_ClassName()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "忍耐者";
			}
			return "Endurer";
		}
	}
	public class Gibbon : BaseClass
	{
		public static float PullRange = 6f;

		private float maxSkillPullRange = 12f;

		public Gibbon()
		{
			base.ClassTrigger = Aura;
			base.ClassSkill = Skill;
			base.ClassSkillCoolDown = 30f;
			base.ClassColor = "#D4A373";
		}

		private void Aura()
		{
		}

		private bool Skill()
		{
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_0121: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: 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)
			if (Character.localCharacter.data.fullyPassedOut || Character.localCharacter.data.dead)
			{
				return false;
			}
			Character val = null;
			float num = float.MinValue;
			foreach (Character item in Character.AllCharacters.Where((Character c) => c.IsPlayerControlled).ToList())
			{
				if (item.data.dead)
				{
					break;
				}
				float num2 = Vector3.Distance(item.Center, Character.localCharacter.Center);
				if (num2 <= maxSkillPullRange && num2 > num)
				{
					num = num2;
					val = item;
				}
			}
			if ((Object)(object)val != (Object)null && (Object)(object)val != (Object)(object)Character.localCharacter)
			{
				((MonoBehaviourPun)val).photonView.RPC("WarpPlayerRPC", ((MonoBehaviourPun)val).photonView.Owner, new object[2]
				{
					Character.localCharacter.Center + Vector3.up * 2f,
					false
				});
				Plugin.Logger.LogInfo((object)"Gibbon Skill RPC...");
				return true;
			}
			return false;
		}

		public override string InnerText_ClassDescription()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "技能:把最远队友拉向自己(存在距离限制);被动:右键拉队友的距离增大";
			}
			return "[Skill] Pulls the farthest ally toward you (Max distance applies). [Passive] Extends the pull range when dragging allies via Right-Click";
		}

		public override string InnerText_ClassName()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "长臂猿";
			}
			return "Gibbon";
		}
	}
	public class Medic : BaseClass
	{
		private float medicRange = 8f;

		private float medicAmount = 0.01f;

		private float milkTime = 4f;

		public Medic()
		{
			base.ClassTrigger = MedicAura;
			base.ClassSkill = MedicSkill;
			base.ClassSkillCoolDown = 40f;
			base.ClassColor = "#FF5E7E";
		}

		public void MedicAura()
		{
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			if (Character.localCharacter.data.dead)
			{
				return;
			}
			SelectedClass instance = SelectedClass.Instance;
			if (instance != null)
			{
				PhotonView obj = instance.PVReadyByTicker(hasDuration: true);
				if (obj != null)
				{
					obj.RPC("RPC_SubtractStatus", (RpcTarget)0, new object[4]
					{
						Character.localCharacter.Center,
						medicRange,
						(object)(STATUSTYPE)0,
						medicAmount
					});
				}
			}
			SelectedClass instance2 = SelectedClass.Instance;
			if (instance2 != null)
			{
				PhotonView obj2 = instance2.PVReadyByTicker(hasDuration: true);
				if (obj2 != null)
				{
					obj2.RPC("RPC_SubtractStatus", (RpcTarget)0, new object[4]
					{
						Character.localCharacter.Center,
						medicRange,
						(object)(STATUSTYPE)3,
						medicAmount
					});
				}
			}
			SelectedClass instance3 = SelectedClass.Instance;
			if (instance3 != null)
			{
				PhotonView obj3 = instance3.PVReadyByTicker(hasDuration: true);
				if (obj3 != null)
				{
					obj3.RPC("RPC_SubtractStatus", (RpcTarget)0, new object[4]
					{
						Character.localCharacter.Center,
						medicRange,
						(object)(STATUSTYPE)10,
						medicAmount
					});
				}
			}
		}

		public bool MedicSkill()
		{
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			if (Character.localCharacter.data.fullyPassedOut || Character.localCharacter.data.dead)
			{
				return false;
			}
			SelectedClass instance = SelectedClass.Instance;
			if (instance != null)
			{
				PhotonView obj = instance.PVReadyByTicker(hasDuration: false);
				if (obj != null)
				{
					obj.RPC("RPC_AddAffliction_InvincibilityFromMilk", (RpcTarget)0, new object[3]
					{
						Character.localCharacter.Center,
						medicRange,
						milkTime
					});
				}
			}
			Plugin.Logger.LogInfo((object)"Medic Skill RPC...");
			return true;
		}

		public override string InnerText_ClassName()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "医生";
			}
			return "Medic";
		}

		public override string InnerText_ClassDescription()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "技能:对范围内队友使用奶白金;被动:范围治疗光环";
			}
			return "[Active] use Fortified Milk on allies. [Passive] Emits a Healing Aura.";
		}
	}
	public class Porter : BaseClass
	{
		public static sbyte maxBackpackSlots = 6;

		private int lowGravAmount = 5;

		private float totalTime = 1f;

		private float gravRange = 10f;

		private float range = 100f;

		private float weightReduce = 0.3f;

		public Porter()
		{
			base.ClassTrigger = Aura;
			base.ClassSkill = Skill;
			base.ClassSkillCoolDown = 30f;
			base.ClassColor = "#FF7F11";
		}

		private void Aura()
		{
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			if (Character.localCharacter.data.dead)
			{
				return;
			}
			SelectedClass instance = SelectedClass.Instance;
			if (instance != null)
			{
				PhotonView obj = instance.PVReadyByTicker(hasDuration: true);
				if (obj != null)
				{
					obj.RPC("RPC_WeightReduce", (RpcTarget)0, new object[3]
					{
						Character.localCharacter.Center,
						range,
						weightReduce
					});
				}
			}
		}

		private bool Skill()
		{
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			if (Character.localCharacter.data.fullyPassedOut || Character.localCharacter.data.dead)
			{
				return false;
			}
			SelectedClass instance = SelectedClass.Instance;
			if (instance != null)
			{
				PhotonView obj = instance.PVReadyByTicker(hasDuration: false);
				if (obj != null)
				{
					obj.RPC("RPC_Affliction_LowGravity", (RpcTarget)0, new object[4]
					{
						Character.localCharacter.Center,
						gravRange,
						lowGravAmount,
						totalTime
					});
				}
			}
			Plugin.Logger.LogInfo((object)"Porter Skill RPC...");
			return true;
		}

		public override string InnerText_ClassDescription()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "主动:改变重力;被动:队友背包格子+2; 减重光环";
			}
			return "[Skill]Change Gravity. [Passive] Ally Backpack Slots +2; Aura: Weight Reduce";
		}

		public override string InnerText_ClassName()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "负重者";
			}
			return "Porter";
		}
	}
	public class Rescuer : BaseClass
	{
		private float amount_1f = 0.01f;

		public Rescuer()
		{
			base.ClassTrigger = Aura;
			base.ClassSkill = Skill;
			base.ClassSkillCoolDown = 30f;
			base.ClassColor = "#00F5D4";
		}

		private void Aura()
		{
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			if (Character.localCharacter.data.dead)
			{
				return;
			}
			SelectedClass instance = SelectedClass.Instance;
			if (instance != null)
			{
				PhotonView obj = instance.PVReadyByTicker(hasDuration: true);
				if (obj != null)
				{
					obj.RPC("RPC_SubtractStatus_WhoPassOut", (RpcTarget)1, new object[4]
					{
						Character.localCharacter.Center,
						5f,
						(object)(STATUSTYPE)0,
						amount_1f
					});
				}
			}
		}

		private bool Skill()
		{
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			if (Character.localCharacter.data.fullyPassedOut || Character.localCharacter.data.dead)
			{
				return false;
			}
			Character val = null;
			float num = float.MaxValue;
			foreach (Character item in Character.AllCharacters.Where((Character c) => c.IsPlayerControlled).ToList())
			{
				if (item.data.dead)
				{
					break;
				}
				if (item.Center.y < num)
				{
					num = item.Center.y;
					val = item;
				}
			}
			if ((Object)(object)val != (Object)null && (Object)(object)Character.localCharacter != (Object)(object)val)
			{
				Character.localCharacter.WarpPlayerRPC(val.Center + Vector3.up * 2f, false);
				return true;
			}
			return false;
		}

		public override string InnerText_ClassDescription()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "技能:飞向位置最低的落后队友;被动:能缓慢治疗晕倒队友的光环";
			}
			return "[Skill] Flies to the ally with the lowest position. [Passive] Emits an aura that slowly heals knocked-out allies.";
		}

		public override string InnerText_ClassName()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "救援者";
			}
			return "Rescuer";
		}
	}
	public class SoulChainer : BaseClass
	{
		private float skillDuration = 15f;

		private float skillTicker = 0f;

		private bool useSkill = false;

		public SoulChainer()
		{
			base.ClassTrigger = Aura;
			base.ClassSkill = Skill;
			base.ClassSkillCoolDown = 60f;
			base.ClassColor = "#111625";
		}

		public void Aura()
		{
			if (Character.localCharacter.data.dead)
			{
				return;
			}
			if (useSkill)
			{
				skillTicker += Time.deltaTime;
				if (skillTicker > skillDuration)
				{
					useSkill = false;
					skillTicker = 0f;
				}
				return;
			}
			SelectedClass instance = SelectedClass.Instance;
			if (instance != null)
			{
				PhotonView obj = instance.PVReadyByTicker(hasDuration: true);
				if (obj != null)
				{
					obj.RPC("RPC_AvgStatus_Chain_Aura", (RpcTarget)0, new object[0]);
				}
			}
		}

		public bool Skill()
		{
			if (Character.localCharacter.data.dead)
			{
				return false;
			}
			float num = Character.AllCharacters.Where((Character c) => !c.data.dead && c.IsPlayerControlled).Sum((Character t) => t.refs.afflictions.GetCurrentStatus((STATUSTYPE)1));
			float num2 = Character.AllCharacters.Where((Character c) => !c.data.dead && c.IsPlayerControlled).Sum((Character t) => t.refs.afflictions.GetCurrentStatus((STATUSTYPE)0));
			float num3 = Character.AllCharacters.Where((Character c) => !c.data.dead && c.IsPlayerControlled).Sum((Character t) => t.refs.afflictions.GetCurrentStatus((STATUSTYPE)3));
			float num4 = Character.AllCharacters.Where((Character c) => !c.data.dead && c.IsPlayerControlled).Sum((Character t) => t.refs.afflictions.GetCurrentStatus((STATUSTYPE)10));
			float num5 = Character.AllCharacters.Where((Character c) => !c.data.dead && c.IsPlayerControlled).Sum((Character t) => t.refs.afflictions.GetCurrentStatus((STATUSTYPE)6));
			float num6 = Character.AllCharacters.Where((Character c) => !c.data.dead && c.IsPlayerControlled).Sum((Character t) => t.refs.afflictions.GetCurrentStatus((STATUSTYPE)8));
			float num7 = Character.AllCharacters.Where((Character c) => !c.data.dead && c.IsPlayerControlled).Sum((Character t) => t.refs.afflictions.GetCurrentStatus((STATUSTYPE)2));
			float num8 = 0f;
			if ((num8 = num + num2 + num3 + num4 + num5 + num6 + num7) > 2f)
			{
				float num9 = 2f / num8;
				num *= num9;
				num2 *= num9;
				num3 *= num9;
				num4 *= num9;
				num5 *= num9;
				num6 *= num9;
				num7 *= num9;
			}
			Character.localCharacter.refs.afflictions.SetStatus((STATUSTYPE)1, num, true);
			Character.localCharacter.refs.afflictions.SetStatus((STATUSTYPE)0, num2, true);
			Character.localCharacter.refs.afflictions.SetStatus((STATUSTYPE)3, num3, true);
			Character.localCharacter.refs.afflictions.SetStatus((STATUSTYPE)10, num4, true);
			Character.localCharacter.refs.afflictions.SetStatus((STATUSTYPE)6, num5, true);
			Character.localCharacter.refs.afflictions.SetStatus((STATUSTYPE)8, num6, true);
			Character.localCharacter.refs.afflictions.SetStatus((STATUSTYPE)2, num7, true);
			SelectedClass instance = SelectedClass.Instance;
			if (instance != null)
			{
				PhotonView obj = instance.PVReadyByTicker(hasDuration: false);
				if (obj != null)
				{
					obj.RPC("RPC_SetStatus_Chain_Skill", (RpcTarget)1, new object[7] { 0f, 0f, 0f, 0f, 0f, 0f, 0f });
				}
			}
			useSkill = true;
			return true;
		}

		public override string InnerText_ClassName()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "灵魂锁链者(Beta)";
			}
			return "SoulChainer(Beta)";
		}

		public override string InnerText_ClassDescription()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "被动:受伤状态会进行均分。主动:从队友处吸收异常状态(最多200%)。";
			}
			return "[Passive] Injury status build-up is shared equally. [Active] Absorbs up to 200% of negative status effects from allies for a duration";
		}
	}
	public class TimeTraveler : BaseClass
	{
		private struct savedCharacter
		{
			public float[] savedStatus;

			public Vector3 savedPosition;
		}

		private KeyCode savedKeys;

		private float saveDuration = 0.5f;

		private float saveTicker = 0f;

		private int maxSavedCount = 60;

		private Dictionary<int, savedCharacter> savedCharacters = new Dictionary<int, savedCharacter>();

		public TimeTraveler()
		{
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			base.ClassTrigger = Aura;
			base.ClassSkill = Skill;
			base.ClassSkillCoolDown = 40f;
			base.ClassColor = "#00B4D8";
			savedKeys = (KeyCode)118;
		}

		private void Aura()
		{
			//IL_0002: 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_008b: 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_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			if (!Input.GetKeyDown(savedKeys))
			{
				return;
			}
			foreach (Character item in Character.AllCharacters.Where((Character ct) => ct.IsPlayerControlled).ToList())
			{
				savedCharacter value = new savedCharacter
				{
					savedStatus = new float[item.refs.afflictions.currentStatuses.Length],
					savedPosition = new Vector3(item.Center.x, item.Center.y, item.Center.z)
				};
				Array.Copy(item.refs.afflictions.currentStatuses, value.savedStatus, item.refs.afflictions.currentStatuses.Length);
				savedCharacters[((MonoBehaviourPun)item).photonView.ViewID] = value;
			}
			RestartInfoText("<color=#22C55E>Time Saved</color>");
		}

		private bool Skill()
		{
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			if (Character.localCharacter.data.dead)
			{
				return false;
			}
			foreach (Character item in Character.AllCharacters.Where((Character ct) => ct.IsPlayerControlled).ToList())
			{
				if (item.data.dead && savedCharacters[((MonoBehaviourPun)item).photonView.ViewID].savedStatus != null)
				{
					_ = savedCharacters[((MonoBehaviourPun)item).photonView.ViewID];
					if (true)
					{
						continue;
					}
				}
				savedCharacter savedCharacter = savedCharacters[((MonoBehaviourPun)item).photonView.ViewID];
				((MonoBehaviourPun)item).photonView.RPC("WarpPlayerRPC", ((MonoBehaviourPun)item).photonView.Owner, new object[2] { savedCharacter.savedPosition, false });
				SelectedClass instance = SelectedClass.Instance;
				if (instance != null)
				{
					PhotonView obj = instance.PVReadyByTicker(hasDuration: false);
					if (obj != null)
					{
						obj.RPC("RPC_SetSavedStatus", (RpcTarget)0, new object[2]
						{
							savedCharacter.savedStatus,
							((MonoBehaviourPun)item).photonView.ViewID
						});
					}
				}
			}
			return true;
		}

		public override string InnerText_ClassDescription()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "技能:回到过去;被动:记录时间点(V键)";
			}
			return "[Skill] Time Rewind. [Passive] Record Timeline.(key:V)";
		}

		public override string InnerText_ClassName()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			Language cURRENT_LANGUAGE = LocalizedText.CURRENT_LANGUAGE;
			Language val = cURRENT_LANGUAGE;
			Language val2 = val;
			if ((int)val2 == 9)
			{
				return "时间旅行者";
			}
			return "TimeTraveler";
		}
	}
	public class Warlock : BaseClass
	{
		private float CeremonyLastTime { get; set; } = 0f;

		public Warlock()
		{
			base.ClassTrigger = Aura;
			base.ClassSkill = Skill;
			base.ClassSkillCoolDown = 3f;
			base.ClassColor = "#9B5DE5";
		}

		private void Aura()
		{
			//IL_006b: 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_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: Unknown result type (might be due to invalid IL or missing references)
			//IL_016b: Unknown result type (might be due to invalid IL or missing references)
			List<int> list = new List<int>();
			List<Character> list2 = new List<Character>();
			bool flag = true;
			int num = 0;
			foreach (Character allCharacter in Character.AllCharacters)
			{
				if (!allCharacter.IsPlayerControlled || allCharacter.data.dead || allCharacter.data.fullyPassedOut)
				{
					list2.Add(allCharacter);
					continue;
				}
				num++;
				float num2 = Vector3.Distance(allCharacter.Center, Character.localCharacter.Center);
				if (num2 > 4f || !allCharacter.input.useSecondaryIsPressed)
				{
					flag = false;
				}
				else
				{
					list.Add(((MonoBehaviourPun)allCharacter).photonView.ViewID);
				}
			}
			if (num > 1 && flag)
			{
				CeremonyLastTime += Time.de