using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Photon.Pun;
using UnityEngine;
using Zorro.Core;
using Zorro.Core.Serizalization;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("com.github.hu1hu.BackpackCapacity")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.4.0")]
[assembly: AssemblyInformationalVersion("1.0.4")]
[assembly: AssemblyProduct("com.github.hu1hu.BackpackCapacity")]
[assembly: AssemblyTitle("BackpackCapacity")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.4.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace BepInEx
{
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
[Conditional("CodeGeneration")]
internal sealed class BepInAutoPluginAttribute : Attribute
{
public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null)
{
}
}
}
namespace BepInEx.Preloader.Core.Patching
{
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
[Conditional("CodeGeneration")]
internal sealed class PatcherAutoPluginAttribute : Attribute
{
public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null)
{
}
}
}
namespace BackpackCapacity
{
[BepInPlugin("com.github.hu1hu.BackpackCapacity", "BackpackCapacity", "1.0.4")]
public class BackpackCapacity : BaseUnityPlugin
{
private static Harmony? harmony;
public static ManualLogSource? Log;
private const string PLUGIN_GUID = "com.github.hu1hu.BackpackCapacity";
private const string PLUGIN_NAME = "BackpackCapacity";
private const string PLUGIN_VERSION = "1.0.4";
public static ConfigEntry<int>? capacityConfig;
public PhotonView? photonView;
private void Awake()
{
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Expected O, but got Unknown
capacityConfig = ((BaseUnityPlugin)this).Config.Bind<int>("General", "Capacity", 6, "Maximum number of backpack slots");
Log = ((BaseUnityPlugin)this).Logger;
photonView = ((Component)this).gameObject.AddComponent<PhotonView>();
harmony = new Harmony("com.github.hu1hu.BackpackCapacity");
harmony.PatchAll();
}
private void OnDestroy()
{
ManualLogSource? log = Log;
if (log != null)
{
log.LogInfo((object)"插件 BackpackCapacity 已卸载");
}
Harmony? obj = harmony;
if (obj != null)
{
obj.UnpatchSelf();
}
}
}
[HarmonyPatch(typeof(BackpackData))]
public class BackpackDataPatches
{
[HarmonyPatch("Init")]
[HarmonyPrefix]
public static void InitPrefix(BackpackData __instance)
{
int num = Mathf.Clamp(BackpackCapacity.capacityConfig.Value, 1, 100);
__instance.itemSlots = (ItemSlot[])(object)new ItemSlot[num];
}
[HarmonyPatch("DeserializeValue")]
[HarmonyPrefix]
public static bool DesserializeValuePrefix(BackpackData __instance, BinaryDeserializer deserializer)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Expected O, but got Unknown
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
InventorySyncData val = default(InventorySyncData);
((InventorySyncData)(ref val)).Deserialize(deserializer);
Item val2 = default(Item);
for (byte b = 0; b < __instance.itemSlots.Length; b++)
{
if (__instance.itemSlots[b] == null)
{
__instance.itemSlots[b] = new ItemSlot(b);
}
__instance.itemSlots[b].prefab = (ItemDatabase.TryGetItem(val.slots[b].ItemID, ref val2) ? val2 : null);
__instance.itemSlots[b].data = val.slots[b].Data;
Debug.Log((object)$"Sync Back Inventory is setting slot: {b} to {__instance.itemSlots[b]}");
}
return false;
}
}
[HarmonyPatch(typeof(BackpackWheel))]
public class BackpackWheelPatches
{
[HarmonyPatch("InitWheel")]
[HarmonyPrefix]
private static void InitWheelPrefix(BackpackWheel __instance, ref BackpackReference bp)
{
//IL_019d: Unknown result type (might be due to invalid IL or missing references)
//IL_01b8: Unknown result type (might be due to invalid IL or missing references)
//IL_020a: Unknown result type (might be due to invalid IL or missing references)
//IL_0234: Unknown result type (might be due to invalid IL or missing references)
//IL_010e: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: Expected O, but got Unknown
int num = Mathf.Clamp(BackpackCapacity.capacityConfig.Value, 1, 100);
int num2 = num + 1;
int num3 = __instance.slices.Length;
ItemSlot[] itemSlots = ((BackpackReference)(ref bp)).GetData().itemSlots;
if (num3 < num2)
{
BackpackWheelSlice val = __instance.slices[1];
BackpackWheelSlice[] slices = __instance.slices;
List<BackpackWheelSlice> list = new List<BackpackWheelSlice>(slices.Length);
list.AddRange(slices);
List<BackpackWheelSlice> list2 = list;
while (list2.Count < num2)
{
BackpackWheelSlice item = Object.Instantiate<BackpackWheelSlice>(val, ((Component)val).transform.parent);
list2.Add(item);
}
__instance.slices = list2.ToArray();
}
else if (num3 > num2)
{
for (int i = num2; i < num3; i++)
{
Object.Destroy((Object)(object)((Component)__instance.slices[i]).gameObject);
}
List<BackpackWheelSlice> list3 = new List<BackpackWheelSlice>();
list3.AddRange(__instance.slices.Take(num2));
__instance.slices = list3.ToArray();
}
if (itemSlots.Length < num)
{
ItemSlot[] array = (ItemSlot[])(object)new ItemSlot[num];
for (int j = 0; j < itemSlots.Length; j++)
{
array[j] = itemSlots[j];
}
for (int k = itemSlots.Length; k < num; k++)
{
array[k] = new ItemSlot((byte)k);
}
((BackpackReference)(ref bp)).GetData().itemSlots = array;
}
else if (itemSlots.Length > num)
{
BackpackData data = ((BackpackReference)(ref bp)).GetData();
List<ItemSlot> list4 = new List<ItemSlot>();
list4.AddRange(itemSlots.Take(num));
data.itemSlots = list4.ToArray();
}
int num4 = __instance.slices.Length;
float num5 = (num4 - 4) * 26;
Transform parent = ((Component)__instance.slices[0]).transform.parent;
parent.position = new Vector3((float)Screen.width / 2f, (float)Screen.height / 2f, 0f);
parent.rotation = Quaternion.Euler(0f, 0f, 0f);
for (int l = 0; l < num4; l++)
{
BackpackWheelSlice val2 = __instance.slices[l];
float num6 = 360f / (float)num4 * (float)l + 158f;
float num7 = (num6 + 112f) * (MathF.PI / 180f);
((Component)val2).transform.localRotation = Quaternion.Euler(0f, 0f, num6);
((Component)val2).transform.localPosition = new Vector3(Mathf.Cos(num7) * num5, Mathf.Sin(num7) * num5, 0f);
}
}
}
[HarmonyPatch(typeof(BackpackVisuals))]
public class BackpackVisualsPatches
{
[HarmonyPatch("RefreshVisuals")]
[HarmonyPrefix]
public static bool RefreshVisualsPrefix(BackpackVisuals __instance)
{
//IL_00bf: 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_00c4: 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_00d7: 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_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
//IL_0192: Unknown result type (might be due to invalid IL or missing references)
//IL_0197: Unknown result type (might be due to invalid IL or missing references)
BackpackData backpackData = __instance.GetBackpackData();
if (backpackData == null)
{
Debug.LogWarning((object)"BackpackData is null, cannot refresh visuals.");
return true;
}
int num = backpackData.itemSlots.Length;
if (__instance.backpackSlots.Length < num)
{
int num2 = Mathf.Max(__instance.backpackSlots.Length, num);
Transform[] backpackSlots = __instance.backpackSlots;
Transform[] array = (Transform[])(object)new Transform[num2];
for (int i = 0; i < backpackSlots.Length; i++)
{
array[i] = backpackSlots[i];
}
for (int j = backpackSlots.Length; j < num2; j++)
{
array[j] = array[j % 4];
}
__instance.backpackSlots = array;
}
for (byte b = 0; b < num; b++)
{
try
{
ItemSlot val = backpackData.itemSlots[b];
Optionable<ushort> val2 = (((Object)(object)val.prefab == (Object)null) ? Optionable<ushort>.None : Optionable<ushort>.Some(val.prefab.itemID));
(GameObject, ushort) value;
Optionable<ushort> val3 = (__instance.visualItems.TryGetValue(b, out value) ? Optionable<ushort>.Some(value.Item2) : Optionable<ushort>.None);
if (val2 != val3)
{
if (val2.IsSome && val3.IsSome)
{
ManualLogSource? log = BackpackCapacity.Log;
if (log != null)
{
log.LogError((object)$"Item Visuals Mismatch at slot {b}!");
}
}
else if (val2.IsSome && val3.IsNone)
{
Debug.Log((object)$"Spawning Backpack Visual for slot {b}, itemID {val2.Value}");
GameObject val4 = null;
try
{
val4 = PhotonNetwork.Instantiate("0_Items/" + val.GetPrefabName(), new Vector3(0f, -500f, 0f), Quaternion.identity, (byte)0, (object[])null);
__instance.PutItemInBackpack(val4, b);
val4.GetComponent<PhotonView>().RPC("SetItemInstanceDataRPC", (RpcTarget)0, new object[1] { val.data });
__instance.visualItems.Add(b, (val4, val2.Value));
}
catch (Exception arg)
{
ManualLogSource? log2 = BackpackCapacity.Log;
if (log2 != null)
{
log2.LogError((object)$"Failed to spawn visual for slot {b}: {arg}");
}
}
}
else if (val2.IsNone && val3.IsSome)
{
Debug.Log((object)$"Removing backpack visual for slot {b}, itemID {val3.Value}");
if (__instance.visualItems.TryGetValue(b, out (GameObject, ushort) value2) && (Object)(object)value2.Item1 != (Object)null)
{
try
{
PhotonNetwork.Destroy(value2.Item1.GetComponent<PhotonView>());
}
catch (Exception arg2)
{
ManualLogSource? log3 = BackpackCapacity.Log;
if (log3 != null)
{
log3.LogError((object)$"Failed to destroy visual for slot {b}: {arg2}");
}
}
__instance.visualItems.Remove(b);
}
else
{
Debug.LogWarning((object)$"No valid visual object to remove for slot {b}");
}
}
}
else if (val2.IsNone)
{
Debug.Log((object)$"Slot {b} is empty, no visual to spawn.");
}
}
catch (Exception arg3)
{
ManualLogSource? log4 = BackpackCapacity.Log;
if (log4 != null)
{
log4.LogError((object)$"Exception refreshing slot {b}: {arg3}");
}
}
}
return false;
}
}
public class CapacitySync : MonoBehaviour
{
public void Awake()
{
if (!PhotonNetwork.IsMasterClient)
{
return;
}
BackpackCapacity.capacityConfig.Value = Mathf.Clamp(BackpackCapacity.capacityConfig.Value, 1, 100);
foreach (Character allCharacter in Character.AllCharacters)
{
((MonoBehaviourPun)allCharacter).photonView.RPC("RPCA_SetCapacity", (RpcTarget)4, new object[1] { BackpackCapacity.capacityConfig.Value });
}
}
public void Update()
{
if (!Character.localCharacter.refs.afflictions.m_inAirport)
{
return;
}
if (Input.GetKeyDown((KeyCode)117))
{
BackpackCapacity.capacityConfig.Value = Mathf.Clamp(BackpackCapacity.capacityConfig.Value + 1, 1, 100);
if (PhotonNetwork.IsMasterClient)
{
foreach (Character allCharacter in Character.AllCharacters)
{
((MonoBehaviourPun)allCharacter).photonView.RPC("RPCA_SetCapacity", (RpcTarget)4, new object[1] { BackpackCapacity.capacityConfig.Value });
}
}
}
if (!Input.GetKeyUp((KeyCode)105))
{
return;
}
BackpackCapacity.capacityConfig.Value = Mathf.Clamp(BackpackCapacity.capacityConfig.Value - 1, 1, 100);
if (!PhotonNetwork.IsMasterClient)
{
return;
}
foreach (Character allCharacter2 in Character.AllCharacters)
{
((MonoBehaviourPun)allCharacter2).photonView.RPC("RPCA_SetCapacity", (RpcTarget)4, new object[1] { BackpackCapacity.capacityConfig.Value });
}
}
[PunRPC]
public void RPCA_SetCapacity(int newCapacity)
{
if (BackpackCapacity.capacityConfig != null)
{
BackpackCapacity.capacityConfig.Value = Mathf.Clamp(newCapacity, 1, 100);
}
}
}
[HarmonyPatch(typeof(Character), "Awake")]
public class CharacterAwakePatch
{
public static void Postfix(Character __instance)
{
if (((MonoBehaviourPun)__instance).photonView.IsMine && (Object)(object)((Component)__instance).gameObject.GetComponent<CapacitySync>() == (Object)null)
{
((Component)__instance).gameObject.AddComponent<CapacitySync>();
}
}
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
public IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}