The BepInEx console will not appear when launching like it does for other games on Thunderstore (you can turn it back on in your BepInEx.cfg file). If your PEAK crashes on startup, add -dx12 to your launch parameters.
Decompiled source of CampfireRespawn v1.0.9
Campfire v1.0.9.dll
Decompiled a month agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Photon.Pun; using TMPro; using UnityEngine; using UnityEngine.UI; using Zorro.Core; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("Peak_NoEndGame")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Peak_NoEndGame")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("b253a047-7de8-4c49-8e85-524405e8513d")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace Peak_NoEndGame; [BepInPlugin("com.Xiaohai.CampfireRespawn", "Campfire Respawn", "1.0.9")] public class Plugin : BaseUnityPlugin { public const string GUID = "com.Xiaohai.CampfireRespawn"; public const string NAME = "Campfire Respawn"; public const string VERSION = "1.0.9"; public static Plugin instance; public static ManualLogSource logger; public ConfigEntry<bool> campfireClearStatus; public ConfigEntry<bool> reviveAddCurse; public ConfigEntry<int> respawnItemChance; public ConfigEntry<KeyCode> respawnHotkey; public ConfigEntry<int> respawnMaxTimes; public ConfigEntry<bool> recordItemsAtCampfire; public void Awake() { //IL_00e3: Unknown result type (might be due to invalid IL or missing references) instance = this; logger = ((BaseUnityPlugin)this).Logger; campfireClearStatus = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "CampfireClearStatus", false, "If enabled, campfire will clear all negative player status effects (e.g., curses, poison). 如果启用,在营火休息时会清除所有负面状态效果(例如诅咒、中毒)。"); reviveAddCurse = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "ReviveClearStatus", false, "If enabled, player will add Curse upon respawning. 如果启用,玩家复活时将获得一层诅咒。"); respawnHotkey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("Settings", "RespawnHotkey", (KeyCode)292, "Keybind to force trigger a respawn. 强制触发重生的按键绑定。"); respawnMaxTimes = ((BaseUnityPlugin)this).Config.Bind<int>("Settings", "RespawnMaxTimes", 99, "The maximum number of times the player is allowed to respawn. 允许玩家复活的最大次数。"); recordItemsAtCampfire = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "recordItemsAtCampfire", true, "If TRUE: Item recording triggers at campfire. If FALSE: Item recording triggers upon player death. 如果为TRUE:物品记录在营火处触发。如果为FALSE:物品记录在玩家死亡时触发。"); respawnItemChance = ((BaseUnityPlugin)this).Config.Bind<int>("Settings", "RespawnItemChance", 88, "The percentage chance (0-100) for each recorded item to be restored upon respawning. 复活时,每个被记录的物品被恢复的百分比几率(0-100)。"); new Harmony("com.Xiaohai.CampfireRespawn").PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Campfire Respawn v1.0.9 loaded successfully!篝火复活MOD v1.0.9 已加载!"); } } public static class CampfireTracker { public static Vector3? LastCampfirePosition { get { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) int currentSegment = Singleton<MapHandler>.Instance.currentSegment; if (currentSegment == 5) { return Singleton<MapHandler>.Instance.respawnThePeak.position; } return Singleton<MapHandler>.Instance.segments[currentSegment].reconnectSpawnPos.position; } } } public static class PlayerInventoryHelper { public class RecordedItem { public Item item; public Character player; public string itemName; public ItemInstanceData data; public RecordedItem(Item _item, Character character, string _itemName, ItemInstanceData _data = null) { item = _item; player = character; itemName = _itemName; data = _data; } } public static List<RecordedItem> GetPlayerAllItems(Character player) { List<RecordedItem> list = new List<RecordedItem>(); ItemSlot[] itemSlots = player.player.itemSlots; ItemSlot[] array = itemSlots; foreach (ItemSlot val in array) { if (!val.IsEmpty()) { ItemInstanceData data = CreateDeepCopy(val.data); list.Add(new RecordedItem(null, player, ((Object)val.prefab).name, data)); } } return list; } public static List<RecordedItem> GetAllItems(bool recordedAtCampfire) { //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Invalid comparison between Unknown and I4 List<RecordedItem> list = new List<RecordedItem>(); if (!recordedAtCampfire) { List<Item> list2 = Object.FindObjectsByType<Item>((FindObjectsSortMode)0).ToList(); Plugin.logger.LogInfo((object)$"找到Item有{list2.Count}个"); foreach (Item item in list2) { if ((Object)(object)item.lastThrownCharacter != (Object)null && (int)item.itemState == 0) { list.Add(new RecordedItem(item, item.lastThrownCharacter, ((Object)item).name)); Plugin.logger.LogInfo((object)("记录物品:" + ((Object)item).name + ",记录玩家" + item.lastThrownCharacter.characterName)); } } } else { foreach (Character allCharacter in Character.AllCharacters) { list.AddRange(GetPlayerAllItems(allCharacter)); } } return list; } public static ItemInstanceData CreateDeepCopy(ItemInstanceData original) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown //IL_0053: Unknown result type (might be due to invalid IL or missing references) if (original == null) { return null; } ItemInstanceData val = new ItemInstanceData(original.guid); val.data = new Dictionary<DataEntryKey, DataEntryValue>(); foreach (KeyValuePair<DataEntryKey, DataEntryValue> datum in original.data) { DataEntryValue value = CreateDataEntryValueCopy(datum.Value); val.data.Add(datum.Key, value); } return val; } private static DataEntryValue CreateDataEntryValueCopy(DataEntryValue original) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown if (original == null) { return null; } DataEntryValue val = (DataEntryValue)Activator.CreateInstance(((object)original).GetType()); FieldInfo[] fields = ((object)original).GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); FieldInfo[] array = fields; foreach (FieldInfo fieldInfo in array) { object value = fieldInfo.GetValue(original); if (value == null || value.GetType().IsValueType || value is string) { fieldInfo.SetValue(val, value); continue; } object value2 = CreateDeepCopyForObject(value); fieldInfo.SetValue(val, value2); } return val; } private static object CreateDeepCopyForObject(object obj) { //IL_00d2: Unknown result type (might be due to invalid IL or missing references) if (obj == null) { return null; } Type type = obj.GetType(); if (type == typeof(Dictionary<DataEntryKey, DataEntryValue>)) { Dictionary<DataEntryKey, DataEntryValue> dictionary = new Dictionary<DataEntryKey, DataEntryValue>(); foreach (object item in (dynamic)obj) { KeyValuePair<DataEntryKey, DataEntryValue> keyValuePair = (KeyValuePair<DataEntryKey, DataEntryValue>)(dynamic)item; dictionary.Add(keyValuePair.Key, CreateDataEntryValueCopy(keyValuePair.Value)); } return dictionary; } if (type.IsArray) { Array array = (Array)obj; Array array2 = Array.CreateInstance(type.GetElementType(), array.Length); for (int i = 0; i < array.Length; i++) { array2.SetValue(CreateDeepCopyForObject(array.GetValue(i)), i); } return array2; } if (type.IsValueType || type == typeof(string)) { return obj; } object obj2 = Activator.CreateInstance(type); FieldInfo[] fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); FieldInfo[] array3 = fields; foreach (FieldInfo fieldInfo in array3) { object value = fieldInfo.GetValue(obj); fieldInfo.SetValue(obj2, CreateDeepCopyForObject(value)); } return obj2; } } [HarmonyPatch] public static class Patch { [HarmonyPatch(typeof(OrbFogHandler))] public static class OrbFogHandlerrPatch { [HarmonyPatch("InitNewSphere")] [HarmonyPostfix] private static void InitNewSpherePatch(ref FogSphereOrigin newOrigin) { OrbFogHandler instance = Singleton<OrbFogHandler>.Instance; if ((Object)(object)instance == (Object)null) { Plugin.logger.LogError((object)"MountainProgressHandlerPatch: OrbFogHandler is null 实例未找到!"); return; } fogSize = newOrigin.size; Plugin.logger.LogInfo((object)$"MountainProgressHandlerPatch: 雾的初始大小为 fogsize= {fogSize}"); } } [HarmonyPatch(typeof(Campfire))] private static class CampfirePatch { private static float clearTimer; [HarmonyPatch("Light_Rpc")] private static void Postfix(Campfire __instance) { if (PhotonNetwork.IsMasterClient && Plugin.instance.recordItemsAtCampfire.Value) { ReviewHandler.Instance.allPlayerRecordedItems = PlayerInventoryHelper.GetAllItems(Plugin.instance.recordItemsAtCampfire.Value); } } [HarmonyPatch("Update")] [HarmonyPostfix] private static void UpdatePostfix(Campfire __instance) { //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_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Invalid comparison between Unknown and I4 //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Invalid comparison between Unknown and I4 //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Invalid comparison between Unknown and I4 //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Invalid comparison between Unknown and I4 //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Invalid comparison between Unknown and I4 clearTimer += Time.deltaTime; if (!Plugin.instance.campfireClearStatus.Value) { return; } Character localCharacter = Character.localCharacter; if (!((Object)(object)localCharacter != (Object)null) || !((Object)(object)((Component)localCharacter).transform != (Object)null) || localCharacter.data.dead || localCharacter.refs.afflictions.currentStatuses.Length == 0 || !(Vector3.Distance(((Component)__instance).transform.position, Character.localCharacter.Center) <= __instance.moraleBoostRadius)) { return; } int num = Enum.GetNames(typeof(STATUSTYPE)).Length; for (int i = 0; i < num; i++) { STATUSTYPE val = (STATUSTYPE)i; if ((int)val != 7 && (int)val != 4 && (int)val != 9 && (int)val != 5 && (int)val != 8 && clearTimer >= 3f) { localCharacter.refs.afflictions.SetStatus(val, 0f); clearTimer = 0f; } } } } [HarmonyPatch(typeof(MountainProgressHandler))] private static class PatchMountainProgressHandler { [HarmonyPatch("CheckAreaAchievement")] public static void Prefix(MountainProgressHandler __instance, ref ProgressPoint pointReached) { if (!(pointReached.title.ToLower() != "shore")) { ReviewHandler.Instance.ResetReviveTimes(); ReviewUI.ActivateDisplay(); gameStarted = true; } } } [HarmonyPatch(typeof(Character))] public static class CharacterPatch { [HarmonyPatch("RPCEndGame")] [HarmonyPostfix] private static void RPCEndGamePostfix(Character __instance) { ReviewUI.isActive = false; Plugin.logger.LogInfo((object)"复活次数已重置,篝火位置已清除"); gameStarted = false; } [HarmonyPatch("Update")] [HarmonyPostfix] private static void UpdatePostfix() { //IL_0026: 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) if (!PhotonNetwork.IsMasterClient || !gameStarted) { return; } if (Input.GetKeyUp(Plugin.instance.respawnHotkey.Value)) { ReviewHandler.Instance.RespawnAllAtCampfire(); } int currentSegment = Singleton<MapHandler>.Instance.currentSegment; ProgressPoint val = Singleton<MountainProgressHandler>.Instance.progressPoints[currentSegment]; if (Plugin.instance.recordItemsAtCampfire.Value && CampfireTracker.LastCampfirePosition.HasValue && val.title.ToLower() == "shore") { float num = Vector3.Distance(Character.localCharacter.Center, CampfireTracker.LastCampfirePosition.Value); if (num > 120f && ReviewHandler.Instance.allPlayerRecordedItems.Count == 0) { ReviewHandler.Instance.SetHeroTitle("已记录玩家物品!", " Items Recorded"); ReviewHandler.Instance.allPlayerRecordedItems = PlayerInventoryHelper.GetAllItems(Plugin.instance.recordItemsAtCampfire.Value); } } } [HarmonyPatch("FixedUpdate")] [HarmonyPostfix] private static void FixedUpdatePostfix(Character __instance) { if (AllPlayerDeadOrDown() && PhotonNetwork.IsMasterClient && CampfireTracker.LastCampfirePosition.HasValue) { ReviewHandler.Instance.RespawnAllAtCampfire(); } } private static bool AllPlayerDeadOrDown() { foreach (Character allCharacter in Character.AllCharacters) { if ((Object)(object)allCharacter != (Object)null && !allCharacter.data.dead && !allCharacter.data.fullyPassedOut) { return false; } } return true; } } [HarmonyPatch(typeof(GUIManager))] private static class GUIManagerPatch { [HarmonyPatch("Awake")] [HarmonyPostfix] private static void AwakePatch(GUIManager __instance) { InitUI(__instance); } private static void InitUI(GUIManager __instance) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_007c: 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_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) AscentUI componentInChildren = ((Component)__instance).GetComponentInChildren<AscentUI>(); if ((Object)(object)componentInChildren == (Object)null) { return; } Transform val = (Transform)(RectTransform)Object.Instantiate<Transform>(((Component)componentInChildren).transform, ((Component)componentInChildren).transform.parent); ((Object)val).name = "ReviewUI"; Object.Destroy((Object)(object)((Component)val).GetComponent<AscentUI>()); ((Component)val).gameObject.AddComponent<ReviewUI>(); RectTransform val2 = (RectTransform)(object)((val is RectTransform) ? val : null); if ((Object)(object)val2 != (Object)null) { val2.anchorMin = new Vector2(0.5f, 0f); val2.anchorMax = new Vector2(0.5f, 0f); val2.pivot = new Vector2(0.5f, 0f); val2.anchoredPosition = new Vector2(0f, 10f); val2.sizeDelta = new Vector2(400f, 120f); TMP_Text componentInChildren2 = ((Component)val2).GetComponentInChildren<TMP_Text>(); if ((Object)(object)componentInChildren2 != (Object)null) { componentInChildren2.alignment = (TextAlignmentOptions)257; componentInChildren2.fontSize = 40f; ((Graphic)componentInChildren2).color = Color.white; } } else { Plugin.logger.LogError((object)"ReviewUI必须挂载在RectTransform上"); } } } [HarmonyPatch(typeof(RunManager))] private static class RunManagerPatch { [HarmonyPatch("Awake")] [HarmonyPostfix] private static void AwakePostfix(RunManager __instance) { if ((Object)(object)((Component)__instance).gameObject.GetComponent<ReviewHandler>() == (Object)null) { ((Component)__instance).gameObject.AddComponent<ReviewHandler>(); Plugin.logger.LogInfo((object)"RunManager中添加了ReviewHandler组件"); } else { Plugin.logger.LogInfo((object)"RunManager中已存在ReviewHandler组件"); } } } [HarmonyPatch(typeof(CharacterItems))] private static class CharacterItemsPatch { [HarmonyPatch("DropItemFromSlotRPC")] [HarmonyPrefix] private static bool DropItemFromSlotRPCPatch(CharacterItems __instance, ref byte slotID, ref Vector3 spawnPosition) { //IL_013d: 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_0063: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) Plugin.logger.LogInfo((object)("正在尝试清空物品栏: " + slotID)); ItemSlot itemSlot = __instance.character.player.GetItemSlot(slotID); if (!itemSlot.IsEmpty()) { if (PhotonNetwork.IsMasterClient) { GameObject val = PhotonNetwork.Instantiate("0_Items/" + itemSlot.GetPrefabName(), spawnPosition, Quaternion.identity, (byte)0, (object[])null); PhotonView component = val.GetComponent<PhotonView>(); component.RPC("SetItemInstanceDataRPC", (RpcTarget)0, new object[1] { itemSlot.data }); component.RPC("SetKinematicRPC", (RpcTarget)0, new object[3] { false, ((Component)component).transform.position, ((Component)component).transform.rotation }); Item component2 = val.GetComponent<Item>(); if (Object.op_Implicit((Object)(object)component2)) { ((MonoBehaviourPun)component2).photonView.RPC("RPC_SetThrownData", (RpcTarget)0, new object[2] { ((MonoBehaviourPun)__instance.character).photonView.ViewID, 1.1f }); } } __instance.character.player.EmptySlot(Optionable<byte>.Some(slotID)); } __instance.character.refs.afflictions.UpdateWeight(); return false; } } public static float fogSize = 300f; public static bool gameStarted = false; } public class ReviewUI : MonoBehaviourPun { private float displayTimer = 0f; public TMP_Text text; public static bool isActive; public float timer = 0f; public static ReviewUI instance; private void Awake() { instance = this; text = ((Component)this).GetComponentInChildren<TMP_Text>(); text.richText = true; } private void Update() { if (isActive) { text.text = $"<color=red><size=45>♥</color></size>{Plugin.instance.respawnMaxTimes.Value - ReviewHandler.Instance.reviveTimes}"; displayTimer -= Time.deltaTime; if (displayTimer <= 0f) { isActive = false; } } else { text.text = " "; } } public static void ActivateDisplay() { isActive = true; instance.displayTimer = 10f; } } public class ReviewHandler : MonoBehaviourPun { [CompilerGenerated] private sealed class <>c__DisplayClass12_0 { public Item item; internal bool <RespawnAllItem>b__0() { return (Object)(object)((MonoBehaviourPun)item).photonView != (Object)null && ((MonoBehaviourPun)item).photonView.ViewID != 0; } } [CompilerGenerated] private sealed class <IERestLava>d__18 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public ReviewHandler <>4__this; private LavaRising <lava>5__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <IERestLava>d__18(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <lava>5__1 = null; <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <lava>5__1 = Singleton<LavaRising>.Instance; if ((Object)(object)<lava>5__1 != (Object)null) { <lava>5__1.started = true; <lava>5__1.ended = false; <lava>5__1.timeTraveled = 0f; <lava>5__1.secondsWaitedToStart = 0f; <>2__current = null; <>1__state = 1; return true; } goto IL_00c7; case 1: <>1__state = -1; <lava>5__1.started = false; <lava>5__1.shownLavaRisingMessage = false; <lava>5__1.syncTime = 14f; goto IL_00c7; case 2: { <>1__state = -1; return false; } IL_00c7: <>2__current = null; <>1__state = 2; return true; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <RespawnAllItem>d__12 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public ReviewHandler <>4__this; private List<Backpack> <backpacks>5__1; private List<PlayerInventoryHelper.RecordedItem>.Enumerator <>s__2; private PlayerInventoryHelper.RecordedItem <recordedItem>5__3; private int <num>5__4; private <>c__DisplayClass12_0 <>8__5; private Character <player>5__6; private List<Backpack>.Enumerator <>s__7; private Backpack <backpack>5__8; private Vector3 <pos>5__9; private List<Item> <items>5__10; private List<Item>.Enumerator <>s__11; private Item <item>5__12; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <RespawnAllItem>d__12(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { int num = <>1__state; if (num == -3 || (uint)(num - 2) <= 1u) { try { } finally { <>m__Finally1(); } } <backpacks>5__1 = null; <>s__2 = default(List<PlayerInventoryHelper.RecordedItem>.Enumerator); <recordedItem>5__3 = null; <>8__5 = null; <player>5__6 = null; <>s__7 = default(List<Backpack>.Enumerator); <backpack>5__8 = null; <items>5__10 = null; <>s__11 = default(List<Item>.Enumerator); <item>5__12 = null; <>1__state = -2; } private bool MoveNext() { //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Expected O, but got Unknown //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Expected O, but got Unknown //IL_0321: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Expected O, but got Unknown //IL_0350: Unknown result type (might be due to invalid IL or missing references) //IL_0355: Unknown result type (might be due to invalid IL or missing references) //IL_037d: Unknown result type (might be due to invalid IL or missing references) //IL_038a: Unknown result type (might be due to invalid IL or missing references) //IL_044d: Unknown result type (might be due to invalid IL or missing references) //IL_0453: Invalid comparison between Unknown and I4 try { switch (<>1__state) { default: return false; case 0: <>1__state = -1; if (!Plugin.instance.recordItemsAtCampfire.Value) { <>4__this.allPlayerRecordedItems = PlayerInventoryHelper.GetAllItems(Plugin.instance.recordItemsAtCampfire.Value); } goto IL_009c; case 1: <>1__state = -1; goto IL_009c; case 2: <>1__state = -3; ((MonoBehaviourPun)<>8__5.item).photonView.RPC("SetItemInstanceDataRPC", (RpcTarget)0, new object[1] { <recordedItem>5__3.data }); break; case 3: { <>1__state = -3; <>8__5.item.RequestPickup(((MonoBehaviourPun)<player>5__6).photonView); Plugin.logger.LogInfo((object)("已将物品:" + <recordedItem>5__3.itemName + "返还给了" + ((Object)<player>5__6.player).name)); <>8__5 = null; <player>5__6 = null; goto IL_02b6; } IL_009c: if (<>4__this.AllPlayerDeadOrDown()) { <>2__current = (object)new WaitForSeconds(0.5f); <>1__state = 1; return true; } Plugin.logger.LogInfo((object)"开始恢复所有物品...."); <>s__2 = <>4__this.allPlayerRecordedItems.GetEnumerator(); <>1__state = -3; goto IL_02be; IL_02b6: <recordedItem>5__3 = null; goto IL_02be; IL_02be: do { if (<>s__2.MoveNext()) { <recordedItem>5__3 = <>s__2.Current; <num>5__4 = Random.Range(0, 100); continue; } <>m__Finally1(); <>s__2 = default(List<PlayerInventoryHelper.RecordedItem>.Enumerator); <backpacks>5__1 = Object.FindObjectsByType<Backpack>((FindObjectsSortMode)0).ToList(); <>s__7 = <backpacks>5__1.GetEnumerator(); try { while (<>s__7.MoveNext()) { <backpack>5__8 = <>s__7.Current; if ((int)((Item)<backpack>5__8).itemState == 0 && !((Object)(object)((Item)<backpack>5__8).lastThrownCharacter == (Object)null)) { <pos>5__9 = ((Item)<backpack>5__8).lastThrownCharacter.Center; ((MonoBehaviourPun)<backpack>5__8).photonView.RPC("SetKinematicRPC", (RpcTarget)3, new object[3] { false, <pos>5__9, Quaternion.identity }); Plugin.logger.LogInfo((object)"已将背包返还."); <backpack>5__8 = null; } } } finally { ((IDisposable)<>s__7).Dispose(); } <>s__7 = default(List<Backpack>.Enumerator); if (Plugin.instance.recordItemsAtCampfire.Value) { <items>5__10 = Object.FindObjectsByType<Item>((FindObjectsSortMode)0).ToList(); <>s__11 = <items>5__10.GetEnumerator(); try { while (<>s__11.MoveNext()) { <item>5__12 = <>s__11.Current; if ((Object)(object)<item>5__12.lastThrownCharacter != (Object)null && (int)<item>5__12.itemState == 0) { Plugin.logger.LogInfo((object)("正在清除遗留物品:" + ((Object)<item>5__12).name)); Object.Destroy((Object)(object)((Component)<item>5__12).gameObject); } <item>5__12 = null; } } finally { ((IDisposable)<>s__11).Dispose(); } <>s__11 = default(List<Item>.Enumerator); <items>5__10 = null; } <>4__this.allPlayerRecordedItems.Clear(); return false; } while (<num>5__4 >= Plugin.instance.respawnItemChance.Value); if ((Object)(object)<recordedItem>5__3.player != (Object)null && !<recordedItem>5__3.player.data.dead) { <>8__5 = new <>c__DisplayClass12_0(); <player>5__6 = <recordedItem>5__3.player; <>8__5.item = <recordedItem>5__3.item ?? PhotonNetwork.InstantiateItem(<recordedItem>5__3.itemName, <player>5__6.Center, Quaternion.identity).GetComponent<Item>(); if (<recordedItem>5__3.data != null) { <>2__current = (object)new WaitUntil((Func<bool>)(() => (Object)(object)((MonoBehaviourPun)<>8__5.item).photonView != (Object)null && ((MonoBehaviourPun)<>8__5.item).photonView.ViewID != 0)); <>1__state = 2; return true; } break; } goto IL_02b6; } <>2__current = (object)new WaitForSeconds(0.5f); <>1__state = 3; return true; } catch { //try-fault ((IDisposable)this).Dispose(); throw; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } private void <>m__Finally1() { <>1__state = -1; ((IDisposable)<>s__2).Dispose(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private static float lastRespawnTime; public List<PlayerInventoryHelper.RecordedItem> allPlayerRecordedItems = new List<PlayerInventoryHelper.RecordedItem>(); public int reviveTimes; public static ReviewHandler Instance { get; private set; } private void Awake() { Instance = this; } public void AddReviveTimes() { reviveTimes++; if (reviveTimes >= Plugin.instance.respawnMaxTimes.Value) { ReviewUI.isActive = false; } else { ReviewUI.ActivateDisplay(); } ((MonoBehaviourPun)this).photonView.RPC("RPCA_SetReviveTimes", (RpcTarget)0, new object[1] { reviveTimes }); } public void ResetReviveTimes() { lastRespawnTime = 0f; reviveTimes = 0; ((MonoBehaviourPun)this).photonView.RPC("RPCA_SetReviveTimes", (RpcTarget)0, new object[1] { reviveTimes }); } [PunRPC] public void RPCA_SetReviveTimes(int times) { reviveTimes = times; } public void RespawnAllAtCampfire() { //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) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: 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) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) if (!CampfireTracker.LastCampfirePosition.HasValue || !PhotonNetwork.IsMasterClient || Time.time - lastRespawnTime < 5f || Instance.reviveTimes >= Plugin.instance.respawnMaxTimes.Value) { return; } lastRespawnTime = Time.time; ResetFog(); ResetLava(); float num = Random.Range(-3f, 3f); float num2 = Random.Range(-3f, 3f); Vector3 value = CampfireTracker.LastCampfirePosition.Value; ((Vector3)(ref value))..ctor(value.x + num, value.y + 1f, value.z + num2); Plugin.logger.LogInfo((object)$"在篝火位置复活所有玩家: {CampfireTracker.LastCampfirePosition.Value}"); foreach (Character allCharacter in Character.AllCharacters) { if ((Object)(object)allCharacter != (Object)null) { if (allCharacter.data.dead) { ((MonoBehaviourPun)allCharacter).photonView.RPC("RPCA_ReviveAtPosition", (RpcTarget)3, new object[2] { value, Plugin.instance.reviveAddCurse.Value }); } else { allCharacter.WarpPlayer(CampfireTracker.LastCampfirePosition.Value, true); } allCharacter.refs.afflictions.ClearAllStatus(true); } } SetHeroTitle("继续加油", "Nice Try"); Instance.AddReviveTimes(); ((MonoBehaviour)this).StartCoroutine(RespawnAllItem()); } [IteratorStateMachine(typeof(<RespawnAllItem>d__12))] public IEnumerator RespawnAllItem() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <RespawnAllItem>d__12(0) { <>4__this = this }; } private bool AllPlayerDeadOrDown() { foreach (Character allCharacter in Character.AllCharacters) { if ((Object)(object)allCharacter != (Object)null && !allCharacter.data.dead && !allCharacter.data.fullyPassedOut) { return false; } } return true; } public void SetHeroTitle(string CNtitle, string ENtitle) { ((MonoBehaviourPun)this).photonView.RPC("RpcSetHeroTitle", (RpcTarget)0, new object[2] { CNtitle, ENtitle }); } [PunRPC] private void RpcSetHeroTitle(string CNtitle, string ENtitle) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Invalid comparison between Unknown and I4 int currentSegment = Singleton<MapHandler>.Instance.currentSegment; ProgressPoint val = Singleton<MountainProgressHandler>.Instance.progressPoints[currentSegment]; if ((int)LocalizedText.CURRENT_LANGUAGE == 9) { GUIManager.instance.SetHeroTitle(CNtitle, val.clip); } else { GUIManager.instance.SetHeroTitle(ENtitle, val.clip); } } public static void ResetFog() { OrbFogHandler instance = Singleton<OrbFogHandler>.Instance; if ((Object)(object)instance != (Object)null) { instance.currentSize = Patch.fogSize; instance.photonView.RPC("RPCA_SyncFog", (RpcTarget)0, new object[2] { Patch.fogSize, instance.isMoving }); } } public void ResetLava() { ((MonoBehaviour)this).StartCoroutine(IERestLava()); } [IteratorStateMachine(typeof(<IERestLava>d__18))] private IEnumerator IERestLava() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <IERestLava>d__18(0) { <>4__this = this }; } }