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 BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HQoL.Network;
using HQoL.Patches;
using HQoL.Util;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using OreoM.HQoL.73.NetcodePatcher;
using TMPro;
using Unity.Collections;
using Unity.Netcode;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")]
[assembly: AssemblyCompany("OreoM.HQoL.73")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.7.0")]
[assembly: AssemblyInformationalVersion("1.0.7")]
[assembly: AssemblyProduct("HQoL")]
[assembly: AssemblyTitle("OreoM.HQoL.73")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.7.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: NetcodePatchedAssembly]
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 HQoL
{
[BepInPlugin("OreoM.HQoL.73", "HQoL", "1.0.7")]
public class HQoL : BaseUnityPlugin
{
internal static SellModule sellModule;
internal static HQoLConfig modConfig;
private const string UnityVersion = "2022.3.62";
public static HQoL Instance { get; private set; }
internal static ManualLogSource Logger { get; private set; }
internal static Harmony? Harmony { get; set; }
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
Instance = this;
if (!Application.unityVersion.StartsWith("2022.3.62", StringComparison.OrdinalIgnoreCase))
{
Logger.LogInfo((object)"Skipping OreoM.HQoL.73, no patches will be loaded.");
return;
}
sellModule = new SellModule();
modConfig = new HQoLConfig(((BaseUnityPlugin)this).Config);
Patch();
NetcodePatch();
Logger.LogInfo((object)"OreoM.HQoL.73 v1.0.7 has loaded!");
}
internal static void NetcodePatch()
{
Type[] types = Assembly.GetExecutingAssembly().GetTypes();
Type[] array = types;
foreach (Type type in array)
{
MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
MethodInfo[] array2 = methods;
foreach (MethodInfo methodInfo in array2)
{
object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false);
if (customAttributes.Length != 0)
{
try
{
methodInfo.Invoke(null, null);
}
catch (Exception arg)
{
Logger.LogWarning((object)$"Netcode patch failed, but it's likely intended: {arg}");
}
}
}
}
}
internal static void Patch()
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Expected O, but got Unknown
if (Harmony == null)
{
Harmony = new Harmony("OreoM.HQoL.73");
}
Logger.LogDebug((object)"Patching...");
Harmony.PatchAll();
Logger.LogDebug((object)"Finished patching!");
}
internal static void Unpatch()
{
Logger.LogDebug((object)"Unpatching...");
Harmony? harmony = Harmony;
if (harmony != null)
{
harmony.UnpatchSelf();
}
Logger.LogDebug((object)"Finished unpatching!");
}
}
public class HQoLConfig
{
public HashSet<string> storageException;
public readonly ConfigEntry<string> storageExceptionConfig;
public HQoLConfig(ConfigFile cfg)
{
cfg.SaveOnConfigSet = false;
storageExceptionConfig = cfg.Bind<string>("General", "Dont store list", "Shotgun, Knife, GiftBox", "What items should not be stored automatically");
ClearOrphanedEntries(cfg);
cfg.Save();
cfg.SaveOnConfigSet = true;
storageException = new HashSet<string>(from s in storageExceptionConfig.Value.Split(new char[1] { ',' }, StringSplitOptions.RemoveEmptyEntries)
select s.Trim().ToLower());
}
private static void ClearOrphanedEntries(ConfigFile cfg)
{
PropertyInfo propertyInfo = AccessTools.Property(typeof(ConfigFile), "OrphanedEntries");
Dictionary<ConfigDefinition, string> dictionary = (Dictionary<ConfigDefinition, string>)propertyInfo.GetValue(cfg);
dictionary.Clear();
}
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "OreoM.HQoL.73";
public const string PLUGIN_NAME = "HQoL";
public const string PLUGIN_VERSION = "1.0.7";
}
}
namespace HQoL.Util
{
internal class SellModule
{
public int sellValue;
public List<int> itemReferenceIndexToSell;
public Dictionary<string, int> itemTypesToSell;
public SellModule()
{
itemTypesToSell = new Dictionary<string, int>();
itemReferenceIndexToSell = new List<int>();
}
public bool FindItemsWithTotalValue(int value, bool useOvertime)
{
int num = value;
int num2 = 0;
int num3 = 10 * value;
int profitQuota = TimeOfDay.Instance.profitQuota;
int num4 = ((TimeOfDay.Instance.daysUntilDeadline == 0) ? (-1) : TimeOfDay.Instance.daysUntilDeadline);
float companyBuyingRate = StartOfRound.Instance.companyBuyingRate;
while (useOvertime)
{
int num5 = num;
num = (num2 + num3) / 2;
int num6 = Math.Max(((int)((float)num * companyBuyingRate) - profitQuota) / 5 + 15 * num4, 0);
if ((int)((float)num * companyBuyingRate) + num6 >= value)
{
num3 = num;
}
else
{
num2 = num;
}
if ((int)((float)num * companyBuyingRate) + num6 == value)
{
break;
}
if (num5 == num)
{
num++;
break;
}
}
int num7 = num;
int num8 = 0;
foreach (ItemReference item in HQoLNetwork.Instance.netStorage)
{
num8 += item.value;
}
if (num7 > num8)
{
return FindAllItems();
}
if (num7 < 1)
{
return false;
}
bool[,] array = new bool[num8 + 1, HQoLNetwork.Instance.netStorage.Count + 1];
for (int i = 0; i < num8 + 1; i++)
{
for (int j = 0; j < HQoLNetwork.Instance.netStorage.Count + 1; j++)
{
array[i, j] = false;
}
}
array[0, 0] = true;
for (int k = 0; k < num8 + 1; k++)
{
for (int l = 0; l < HQoLNetwork.Instance.netStorage.Count; l++)
{
if (k >= HQoLNetwork.Instance.netStorage[l].value)
{
array[k, l + 1] = array[k, l] || array[k - HQoLNetwork.Instance.netStorage[l].value, l];
}
else
{
array[k, l + 1] = array[k, l];
}
if (k >= num7 && array[k, HQoLNetwork.Instance.netStorage.Count])
{
goto end_IL_020b;
}
}
continue;
end_IL_020b:
break;
}
itemReferenceIndexToSell.Clear();
itemTypesToSell.Clear();
int m = num7;
int num9;
for (num9 = HQoLNetwork.Instance.netStorage.Count; !array[m, num9]; m++)
{
}
sellValue = m;
while (m != 0)
{
while (array[m, num9 - 1])
{
num9--;
}
num9--;
m -= HQoLNetwork.Instance.netStorage[num9].value;
itemReferenceIndexToSell.Add(num9);
Dictionary<string, int> dictionary = itemTypesToSell;
ItemReference itemReference = HQoLNetwork.Instance.netStorage[num9];
if (dictionary.ContainsKey(((object)(FixedString32Bytes)(ref itemReference.itemName)).ToString()))
{
Dictionary<string, int> dictionary2 = itemTypesToSell;
itemReference = HQoLNetwork.Instance.netStorage[num9];
dictionary2[((object)(FixedString32Bytes)(ref itemReference.itemName)).ToString()]++;
}
else
{
Dictionary<string, int> dictionary3 = itemTypesToSell;
itemReference = HQoLNetwork.Instance.netStorage[num9];
dictionary3[((object)(FixedString32Bytes)(ref itemReference.itemName)).ToString()] = 1;
}
}
return true;
}
public bool FindAllItems()
{
sellValue = HQoLNetwork.Instance.totalStorageValue.Value;
itemReferenceIndexToSell.Clear();
itemTypesToSell.Clear();
for (int i = 0; i < HQoLNetwork.Instance.netStorage.Count; i++)
{
itemReferenceIndexToSell.Add(i);
Dictionary<string, int> dictionary = itemTypesToSell;
ItemReference itemReference = HQoLNetwork.Instance.netStorage[i];
if (dictionary.ContainsKey(((object)(FixedString32Bytes)(ref itemReference.itemName)).ToString()))
{
Dictionary<string, int> dictionary2 = itemTypesToSell;
itemReference = HQoLNetwork.Instance.netStorage[i];
dictionary2[((object)(FixedString32Bytes)(ref itemReference.itemName)).ToString()]++;
}
else
{
Dictionary<string, int> dictionary3 = itemTypesToSell;
itemReference = HQoLNetwork.Instance.netStorage[i];
dictionary3[((object)(FixedString32Bytes)(ref itemReference.itemName)).ToString()] = 1;
}
}
return true;
}
public void ClearSellModule()
{
sellValue = 0;
itemTypesToSell.Clear();
itemReferenceIndexToSell.Clear();
}
}
public struct ItemReference : INetworkSerializable, IEquatable<ItemReference>
{
public FixedString32Bytes itemName;
public int value;
public unsafe void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
((BufferSerializer<FixedString32Bytes>*)(&serializer))->SerializeValue<FixedString32Bytes>(ref itemName, default(ForFixedStrings));
((BufferSerializer<int>*)(&serializer))->SerializeValue<int>(ref value, default(ForPrimitives));
}
public bool Equals(ItemReference other)
{
if ((ref itemName) == (ref other.itemName))
{
return value == other.value;
}
return false;
}
}
}
namespace HQoL.Patches
{
[HarmonyPatch(typeof(GameNetworkManager))]
internal class GameNetworkManagerPatches
{
[HarmonyPatch("Start")]
[HarmonyPostfix]
private static void PostStart(GameNetworkManager __instance)
{
HQoLNetwork.CreateAndRegisterPrefab();
}
[HarmonyPatch("Disconnect")]
[HarmonyPrefix]
private static void PreDisconnect(GameNetworkManager __instance)
{
bool flag = false;
if (StartOfRoundPatches.hasChallengeFile)
{
flag = StartOfRoundPatches.isChallengeFileRef.Invoke(StartOfRound.Instance);
}
if (HQoLNetwork.Instance.storageHasBeenModified && __instance.isHostingGame && StartOfRound.Instance.inShipPhase && !flag)
{
try
{
List<ItemReference> list = new List<ItemReference>();
foreach (ItemReference item in HQoLNetwork.Instance.netStorage)
{
list.Add(item);
}
ES3.Save<List<ItemReference>>("HQoL.ScrapList", list, GameNetworkManager.Instance.currentSaveFileName);
HQoLNetwork.Instance.storageHasBeenModified = false;
}
catch (Exception arg)
{
HQoL.Logger.LogError((object)$"Error while trying to save game values when disconnecting as host: {arg}");
}
}
HQoLNetwork.DespawnNetworkHandler();
}
[HarmonyPatch("SaveItemsInShip")]
[HarmonyTranspiler]
private static IEnumerable<CodeInstruction> TranspileSaveItemsInShip(IEnumerable<CodeInstruction> codes)
{
//IL_0002: 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
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Expected O, but got Unknown
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Expected O, but got Unknown
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Expected O, but got Unknown
CodeMatcher val = new CodeMatcher(codes, (ILGenerator)null).MatchForward(false, (CodeMatch[])(object)new CodeMatch[4]
{
new CodeMatch((OpCode?)OpCodes.Ldloc_1, (object)null, (string)null),
new CodeMatch((OpCode?)OpCodes.Callvirt, (object)AccessTools.PropertyGetter(typeof(List<int>), "Count"), (string)null),
new CodeMatch((OpCode?)OpCodes.Ldc_I4_0, (object)null, (string)null),
new CodeMatch((OpCode?)OpCodes.Bgt, (object)null, (string)null)
});
List<Label> labels = val.Labels;
return val.RemoveInstructions(7).AddLabels((IEnumerable<Label>)labels).InstructionEnumeration();
}
}
[HarmonyPatch(typeof(ItemDropship))]
internal class ItemDropshipPatches
{
private static FieldRef<ItemDropship, int> refPreOrderedVehicle = null;
private static bool hasCruiser = false;
private static int preOrderedVehicle = -1;
private static int preOrderedItemCount = 0;
[HarmonyPatch("Start")]
[HarmonyPostfix]
private static void PostStart(ItemDropship __instance)
{
FieldInfo fieldInfo = AccessTools.Field(typeof(ItemDropship), "orderedVehicleFromTerminal");
if (fieldInfo != null)
{
refPreOrderedVehicle = AccessTools.FieldRefAccess<ItemDropship, int>(fieldInfo);
hasCruiser = true;
}
__instance.shipAnimator.speed = 1f;
if (StartOfRound.Instance.currentLevelID == 3)
{
__instance.playersFirstOrder = false;
}
}
[HarmonyPatch("LandShipClientRpc")]
[HarmonyPrefix]
private static void PreLandShipClientRpc(ItemDropship __instance)
{
if (StartOfRound.Instance.currentLevelID == 3)
{
__instance.shipAnimator.speed = 5f;
}
}
[HarmonyPatch("OpenShipDoorsOnServer")]
[HarmonyPostfix]
private static void PostOpenShipDoorsOnServer(ItemDropship __instance)
{
if (StartOfRound.Instance.currentLevelID == 3)
{
__instance.ShipLeaveClientRpc();
}
}
[HarmonyPatch("Update")]
[HarmonyPostfix]
private static void PostUpdate(ItemDropship __instance)
{
if (StartOfRound.Instance.currentLevelID == 3)
{
int num = -1;
if (hasCruiser)
{
num = refPreOrderedVehicle.Invoke(__instance);
}
if (!__instance.deliveringOrder && (preOrderedItemCount != __instance.terminalScript.numberOfItemsInDropship || preOrderedVehicle < num))
{
__instance.shipTimer = 34f;
}
preOrderedItemCount = __instance.terminalScript.numberOfItemsInDropship;
preOrderedVehicle = num;
}
}
}
[HarmonyPatch(typeof(ItemDropship))]
internal class ItemDropshipLandVehiclePatch
{
private static MethodBase refDeliverVehicleClientRpc;
private static bool Prepare()
{
refDeliverVehicleClientRpc = AccessTools.Method(typeof(ItemDropship), "DeliverVehicleClientRpc", (Type[])null, (Type[])null);
if (refDeliverVehicleClientRpc == null)
{
HQoL.Logger.LogInfo((object)"Method DeliverVehicleClientRpc in ItemDropship not found, skipping...");
return false;
}
return true;
}
private static MethodBase TargetMethod()
{
return refDeliverVehicleClientRpc;
}
private static void Prefix(ItemDropship __instance)
{
if (StartOfRound.Instance.currentLevelID == 3)
{
__instance.shipAnimator.speed = 1f;
}
}
}
[HarmonyPatch(typeof(RoundManager))]
internal class RoundManagerPatches
{
[HarmonyPatch("DespawnPropsAtEndOfRound")]
[HarmonyPostfix]
private static void PostDespawnPropsAtEndOfRound(RoundManager __instance)
{
if (StartOfRound.Instance.allPlayersDead && ((NetworkBehaviour)__instance).IsServer)
{
HQoLNetwork.Instance.ClearItems();
}
}
}
[HarmonyPatch]
internal class ShotgunItemPatches
{
private static PropertyInfo transformInfo;
private static MethodBase refLoadItemSaveData;
private static bool Prepare()
{
Type type = AccessTools.TypeByName("ShotgunItem");
if (type == null)
{
HQoL.Logger.LogInfo((object)"Class ShotgunItem not found, skipping...");
return false;
}
transformInfo = AccessTools.Property(type, "transform");
refLoadItemSaveData = AccessTools.Method(type, "LoadItemSaveData", (Type[])null, (Type[])null);
if (refLoadItemSaveData == null)
{
HQoL.Logger.LogInfo((object)"Method LoadItemSaveData in ShotgunItem not found, skipping...");
return false;
}
return true;
}
private static MethodBase TargetMethod()
{
return refLoadItemSaveData;
}
private static void Prefix(object __instance, int saveData)
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Expected O, but got Unknown
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
Transform val = (Transform)transformInfo.GetValue(__instance);
Vector3 position = val.position;
position += new Vector3(1f - (float)saveData / 2f, 0f, 0f);
val.position = position;
}
}
[HarmonyPatch]
internal class SprayPaintItemPatches
{
private static PropertyInfo transformInfo;
private static FieldInfo isWeedKillerSprayBottleInfo;
private static MethodBase refLoadItemSaveData;
private static bool Prepare()
{
Type type = AccessTools.TypeByName("SprayPaintItem");
if (type == null)
{
HQoL.Logger.LogInfo((object)"Class SprayPaintItem not found, skipping...");
return false;
}
transformInfo = AccessTools.Property(type, "transform");
isWeedKillerSprayBottleInfo = AccessTools.Field(type, "isWeedKillerSprayBottle");
if (isWeedKillerSprayBottleInfo == null)
{
HQoL.Logger.LogInfo((object)"Property isWeedKillerSprayBottleInfo in SprayPaintItem not found, skipping...");
return false;
}
refLoadItemSaveData = AccessTools.Method(type, "LoadItemSaveData", (Type[])null, (Type[])null);
if (refLoadItemSaveData == null)
{
HQoL.Logger.LogInfo((object)"Method LoadItemSaveData in SprayPaintItem not found, skipping...");
return false;
}
return true;
}
private static MethodBase TargetMethod()
{
return refLoadItemSaveData;
}
private static void Prefix(object __instance, int saveData)
{
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Expected O, but got Unknown
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
bool flag = (bool)isWeedKillerSprayBottleInfo.GetValue(__instance);
Transform val = (Transform)transformInfo.GetValue(__instance);
if (flag)
{
Vector3 position = val.position;
position += new Vector3(-3f - (float)saveData / 50f, 0f, -2f);
val.position = position;
}
}
}
[HarmonyPatch(typeof(StartOfRound))]
internal class StartOfRoundPatches
{
public static FieldRef<StartOfRound, bool> isChallengeFileRef;
public static bool hasChallengeFile;
[HarmonyPatch("Awake")]
[HarmonyPrefix]
private static void PreAwake(StartOfRound __instance)
{
HQoLNetwork.SpawnNetworkHandler();
}
[HarmonyPatch("Start")]
[HarmonyPostfix]
private static void PostStart(StartOfRound __instance)
{
FieldInfo fieldInfo = AccessTools.Field(typeof(StartOfRound), "isChallengeFile");
if (fieldInfo != null)
{
isChallengeFileRef = AccessTools.FieldRefAccess<StartOfRound, bool>(fieldInfo);
hasChallengeFile = true;
}
else
{
hasChallengeFile = false;
HQoL.Logger.LogInfo((object)"Variable isChallengeFile not found, skipping...");
}
}
[HarmonyPatch("SetTimeAndPlanetToSavedSettings")]
[HarmonyPostfix]
private static void PostSetTimeAndPlanetToSavedSettings(StartOfRound __instance)
{
List<ItemReference> itemRefs = ES3.Load<List<ItemReference>>("HQoL.ScrapList", GameNetworkManager.Instance.currentSaveFileName, new List<ItemReference>());
HQoLNetwork.Instance.AddItems(itemRefs);
}
[HarmonyPatch("PlayFirstDayShipAnimation")]
[HarmonyPrefix]
private static void PrePlayFirstDayShipAnimation(StartOfRound __instance)
{
__instance.shipIntroSpeechSFX = __instance.disableSpeakerSFX;
}
[HarmonyPatch("PassTimeToNextDay")]
[HarmonyPostfix]
private static void PostPassTimeToNextDay(StartOfRound __instance)
{
bool flag = false;
if (hasChallengeFile)
{
_ = ref isChallengeFileRef.Invoke(__instance);
}
if (!GameNetworkManager.Instance.isHostingGame || flag)
{
return;
}
if (TimeOfDay.Instance.daysUntilDeadline == 0 && (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer))
{
List<GrabbableObject> list = new List<GrabbableObject>(Object.FindObjectsByType<GrabbableObject>((FindObjectsSortMode)0));
list.RemoveAll((GrabbableObject scrapObj) => scrapObj.isHeld || !scrapObj.itemProperties.isScrap || HQoL.modConfig.storageException.Contains(((Object)scrapObj).name.ToLower()) || HQoL.modConfig.storageException.Contains(((Object)scrapObj.itemProperties).name.ToLower()) || HQoL.modConfig.storageException.Contains(((Component)scrapObj).gameObject.GetComponentInChildren<ScanNodeProperties>().headerText.ToLower()));
HQoLNetwork.Instance.AddItems(list.ToArray());
list.ForEach(delegate(GrabbableObject scrapObj)
{
((NetworkBehaviour)scrapObj).NetworkObject.Despawn(true);
});
}
if (!HQoLNetwork.Instance.storageHasBeenModified)
{
return;
}
try
{
List<ItemReference> list2 = new List<ItemReference>();
foreach (ItemReference item in HQoLNetwork.Instance.netStorage)
{
list2.Add(item);
}
ES3.Save<List<ItemReference>>("HQoL.ScrapList", list2, GameNetworkManager.Instance.currentSaveFileName);
HQoLNetwork.Instance.storageHasBeenModified = false;
}
catch (Exception arg)
{
HQoL.Logger.LogError((object)$"Error while trying to save game values when disconnecting as host: {arg}");
}
}
[HarmonyPatch("LoadShipGrabbableItems")]
[HarmonyTranspiler]
private static IEnumerable<CodeInstruction> TranspileLoadShipGrabbableItems(IEnumerable<CodeInstruction> codes)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Expected O, but got Unknown
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Expected O, but got Unknown
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Expected O, but got Unknown
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Expected O, but got Unknown
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Expected O, but got Unknown
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Expected O, but got Unknown
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Expected O, but got Unknown
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Expected O, but got Unknown
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Expected O, but got Unknown
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00ca: Expected O, but got Unknown
//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ff: Expected O, but got Unknown
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_0126: Expected O, but got Unknown
//IL_0147: Unknown result type (might be due to invalid IL or missing references)
//IL_014d: Expected O, but got Unknown
//IL_015b: Unknown result type (might be due to invalid IL or missing references)
//IL_0161: Expected O, but got Unknown
CodeInstruction[] array = (CodeInstruction[])(object)new CodeInstruction[8]
{
new CodeInstruction(OpCodes.Ldarg_0, (object)null),
new CodeInstruction(OpCodes.Ldloc_1, (object)null),
new CodeInstruction(OpCodes.Ldloc_S, (object)9),
new CodeInstruction(OpCodes.Ldelem_I4, (object)null),
new CodeInstruction(OpCodes.Ldloc_2, (object)null),
new CodeInstruction(OpCodes.Ldloc_S, (object)9),
new CodeInstruction(OpCodes.Ldelema, (object)typeof(Vector3)),
new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(StartOfRoundHelper), "MoveItemsToSpecialStartPosition", (Type[])null, (Type[])null))
};
CodeMatcher val = new CodeMatcher(codes, (ILGenerator)null);
val.End().MatchBack(false, (CodeMatch[])(object)new CodeMatch[1]
{
new CodeMatch((OpCode?)OpCodes.Ldloc_2, (object)null, (string)null)
}).Advance(-9);
int pos = val.Pos;
val.Start().MatchForward(false, (CodeMatch[])(object)new CodeMatch[4]
{
new CodeMatch((OpCode?)OpCodes.Ldarg_0, (object)null, (string)null),
new CodeMatch((OpCode?)OpCodes.Ldfld, (object)AccessTools.Field(typeof(StartOfRound), "shipBounds"), (string)null),
new CodeMatch((OpCode?)OpCodes.Callvirt, (object)AccessTools.PropertyGetter(typeof(Collider), "bounds"), (string)null),
new CodeMatch((OpCode?)OpCodes.Stloc_S, (object)null, (string)null)
});
int pos2 = val.Pos;
return val.RemoveInstructionsInRange(pos2, pos).Insert(array).InstructionEnumeration();
}
}
public static class StartOfRoundHelper
{
public const int jetpackID = 4;
public const int keyID = 5;
public const int shovelID = 10;
public const int shotgunID = 59;
public const int knifeID = 68;
public static void MoveItemsToSpecialStartPosition(StartOfRound instance, int currItemID, ref Vector3 currItemPosition)
{
//IL_0018: 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_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
//IL_0176: Unknown result type (might be due to invalid IL or missing references)
//IL_017b: Unknown result type (might be due to invalid IL or missing references)
//IL_014c: Unknown result type (might be due to invalid IL or missing references)
switch (currItemID)
{
case 4:
currItemPosition.x = 5f;
currItemPosition.y = instance.playerSpawnPositions[1].position.y + 0.5f;
currItemPosition.z = -16.5f;
return;
case 5:
currItemPosition.x = -4f;
currItemPosition.y = instance.playerSpawnPositions[1].position.y + 0.5f;
currItemPosition.z = -13f;
return;
case 10:
currItemPosition.x = 3.5f;
currItemPosition.y = instance.playerSpawnPositions[1].position.y + 0.5f;
currItemPosition.z = -14.5f;
return;
case 59:
currItemPosition.x = 0f;
currItemPosition.y = instance.playerSpawnPositions[1].position.y + 0.5f;
currItemPosition.z = -13f;
return;
case 68:
currItemPosition.x = -1f;
currItemPosition.y = instance.playerSpawnPositions[1].position.y + 0.5f;
currItemPosition.z = -13f;
return;
}
if (instance.allItemsList.itemsList[currItemID].isScrap)
{
currItemPosition.x = -4.5f;
currItemPosition.y = instance.playerSpawnPositions[1].position.y + 0.5f;
currItemPosition.z = -15f;
}
else
{
currItemPosition = instance.playerSpawnPositions[1].position;
currItemPosition.x += (float)currItemID / 15f;
currItemPosition.z += 2f;
currItemPosition.y += 0.5f;
}
}
}
[HarmonyPatch(typeof(Terminal))]
internal class TerminalPatches
{
[HarmonyPatch("ParsePlayerSentence")]
[HarmonyPrefix]
private static void ParsePlayerSentencePrePatch(Terminal __instance)
{
TerminalHelper.terminalInput = __instance.screenText.text.Substring(__instance.screenText.text.Length - __instance.textAdded).ToLower();
}
[HarmonyPatch("Start")]
[HarmonyPostfix]
private static void PostStart(Terminal __instance)
{
TerminalHelper.terminal = Object.FindAnyObjectByType<Terminal>();
((TMP_Text)__instance.topRightText).enableAutoSizing = true;
if (!TerminalHelper.internalStateInitialized)
{
TerminalHelper.TerminalNodes.InitializeNodes();
TerminalHelper.TerminalKeywords.InitializeKeywords();
TerminalHelper.TerminalKeywords.defaultVerb.compatibleNouns[0].result = TerminalHelper.TerminalNodes.sellCommand;
TerminalHelper.TerminalKeywords.defaultVerb.compatibleNouns[1].result = TerminalHelper.TerminalNodes.depositCommand;
TerminalHelper.TerminalKeywords.defaultVerb.compatibleNouns[2].result = TerminalHelper.TerminalNodes.checkScrap;
TerminalHelper.TerminalKeywords.defaultVerb.compatibleNouns[3].result = TerminalHelper.TerminalNodes.confirmOvertime;
TerminalHelper.internalStateInitialized = true;
}
if (!TerminalHelper.addedCustomKeywords)
{
TerminalHelper.TerminalKeywords.sellWord.defaultVerb = TerminalHelper.TerminalKeywords.defaultVerb;
TerminalHelper.TerminalKeywords.depositWord.defaultVerb = TerminalHelper.TerminalKeywords.defaultVerb;
TerminalHelper.TerminalKeywords.checkScrapWord.defaultVerb = TerminalHelper.TerminalKeywords.defaultVerb;
TerminalHelper.TerminalKeywords.overtimeWord.defaultVerb = TerminalHelper.TerminalKeywords.defaultVerb;
int num = __instance.terminalNodes.allKeywords.Count();
List<TerminalKeyword> list = new List<TerminalKeyword>(__instance.terminalNodes.allKeywords);
list.Add(TerminalHelper.TerminalKeywords.sellWord);
list.Add(TerminalHelper.TerminalKeywords.depositWord);
list.Add(TerminalHelper.TerminalKeywords.checkScrapWord);
list.Add(TerminalHelper.TerminalKeywords.overtimeWord);
list.Add(TerminalHelper.TerminalKeywords.defaultVerb);
__instance.terminalNodes.allKeywords = list.ToArray();
TerminalHelper.addedCustomKeywords = true;
}
}
[HarmonyPatch("Update")]
[HarmonyPostfix]
private static void PostUpdate(Terminal __instance)
{
if (__instance.terminalInUse)
{
TextMeshProUGUI topRightText = __instance.topRightText;
((TMP_Text)topRightText).text = ((TMP_Text)topRightText).text + $"\n<color=#09DBB5>${HQoLNetwork.Instance.totalStorageValue.Value}";
}
}
[HarmonyPatch("LoadNewNode")]
[HarmonyPostfix]
private static void PostLoadNewNode(Terminal __instance)
{
if (!TerminalHelper.isSellValid && (Object)(object)__instance.currentNode == (Object)(object)TerminalHelper.TerminalNodes.sellCommand)
{
__instance.currentNode = TerminalHelper.TerminalNodes.sellDeny;
}
else if (!TerminalHelper.isDepositValid && (Object)(object)__instance.currentNode == (Object)(object)TerminalHelper.TerminalNodes.depositCommand)
{
__instance.currentNode = TerminalHelper.TerminalNodes.depositDeny;
}
}
[HarmonyPatch("TextPostProcess")]
[HarmonyPrefix]
private static void PreTextPostProcess(Terminal __instance, ref string modifiedDisplayText)
{
if (modifiedDisplayText.Contains("[sellConfirm]"))
{
modifiedDisplayText = modifiedDisplayText.Replace("[sellConfirm]", TerminalHelper.SellItems());
}
else if (modifiedDisplayText.Contains("[sell]"))
{
modifiedDisplayText = modifiedDisplayText.Replace("[sell]", TerminalHelper.FindItemsToSell());
}
else if (modifiedDisplayText.Contains("[depositConfirm]"))
{
modifiedDisplayText = modifiedDisplayText.Replace("[depositConfirm]", TerminalHelper.DepositItems());
}
else if (modifiedDisplayText.Contains("[deposit]"))
{
modifiedDisplayText = modifiedDisplayText.Replace("[deposit]", TerminalHelper.FindItemsToDeposit());
}
else if (modifiedDisplayText.Contains("[confirmOvertime]"))
{
modifiedDisplayText = modifiedDisplayText.Replace("[confirmOvertime]", TerminalHelper.ConfirmOvertime());
}
else if (modifiedDisplayText.Contains("[checkScrap]"))
{
modifiedDisplayText = modifiedDisplayText.Replace("[checkScrap]", TerminalHelper.CheckItems());
}
}
}
internal static class TerminalHelper
{
public class TerminalNodes
{
public static TerminalNode sellDeny;
public static TerminalNode sellConfirm;
public static TerminalNode sellCommand;
public static TerminalNode confirmOvertime;
public static TerminalNode depositDeny;
public static TerminalNode depositConfirm;
public static TerminalNode depositCommand;
public static TerminalNode checkScrap;
public static void InitializeNodes()
{
//IL_03b7: Unknown result type (might be due to invalid IL or missing references)
//IL_03bc: Unknown result type (might be due to invalid IL or missing references)
//IL_03d3: Unknown result type (might be due to invalid IL or missing references)
//IL_03df: Expected O, but got Unknown
//IL_03e1: Unknown result type (might be due to invalid IL or missing references)
//IL_03e6: Unknown result type (might be due to invalid IL or missing references)
//IL_03fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0409: Expected O, but got Unknown
//IL_0903: Unknown result type (might be due to invalid IL or missing references)
//IL_0908: Unknown result type (might be due to invalid IL or missing references)
//IL_091f: Unknown result type (might be due to invalid IL or missing references)
//IL_092b: Expected O, but got Unknown
//IL_092d: Unknown result type (might be due to invalid IL or missing references)
//IL_0932: Unknown result type (might be due to invalid IL or missing references)
//IL_0949: Unknown result type (might be due to invalid IL or missing references)
//IL_0955: Expected O, but got Unknown
sellDeny = ScriptableObject.CreateInstance<TerminalNode>();
sellDeny.acceptAnything = false;
sellDeny.buyItemIndex = -1;
sellDeny.buyRerouteToMoon = -1;
sellDeny.buyUnlockable = false;
sellDeny.clearPreviousText = false;
sellDeny.creatureFileID = -1;
sellDeny.creatureName = "";
sellDeny.displayPlanetInfo = -1;
sellDeny.displayText = "\nSell canceled.\n\n";
sellDeny.displayTexture = null;
sellDeny.displayVideo = null;
((Object)sellDeny).hideFlags = (HideFlags)0;
sellDeny.isConfirmationNode = false;
sellDeny.itemCost = 0;
sellDeny.loadImageSlowly = false;
sellDeny.maxCharactersToType = 35;
((Object)sellDeny).name = "sellDeny";
sellDeny.overrideOptions = false;
sellDeny.persistentImage = false;
sellDeny.playClip = null;
sellDeny.playSyncedClip = -1;
sellDeny.returnFromStorage = false;
sellDeny.shipUnlockableID = -1;
sellDeny.storyLogFileID = -1;
sellDeny.terminalEvent = "";
sellDeny.terminalOptions = (CompatibleNoun[])(object)new CompatibleNoun[0];
sellConfirm = ScriptableObject.CreateInstance<TerminalNode>();
sellConfirm.acceptAnything = false;
sellConfirm.buyItemIndex = -1;
sellConfirm.buyRerouteToMoon = -1;
sellConfirm.buyUnlockable = false;
sellConfirm.clearPreviousText = false;
sellConfirm.creatureFileID = -1;
sellConfirm.creatureName = "";
sellConfirm.displayPlanetInfo = -1;
sellConfirm.displayText = "[sellConfirm]";
sellConfirm.displayTexture = null;
sellConfirm.displayVideo = null;
((Object)sellConfirm).hideFlags = (HideFlags)0;
sellConfirm.isConfirmationNode = false;
sellConfirm.itemCost = 0;
sellConfirm.loadImageSlowly = false;
sellConfirm.maxCharactersToType = 35;
((Object)sellConfirm).name = "sellConfirm";
sellConfirm.overrideOptions = false;
sellConfirm.persistentImage = false;
sellConfirm.playClip = null;
sellConfirm.playSyncedClip = 0;
sellConfirm.returnFromStorage = false;
sellConfirm.shipUnlockableID = -1;
sellConfirm.storyLogFileID = -1;
sellConfirm.terminalEvent = "";
sellConfirm.terminalOptions = (CompatibleNoun[])(object)new CompatibleNoun[0];
sellCommand = ScriptableObject.CreateInstance<TerminalNode>();
sellCommand.acceptAnything = false;
sellCommand.buyItemIndex = -1;
sellCommand.buyRerouteToMoon = -1;
sellCommand.buyUnlockable = false;
sellCommand.clearPreviousText = true;
sellCommand.creatureFileID = -1;
sellCommand.creatureName = "";
sellCommand.displayPlanetInfo = -1;
sellCommand.displayText = "[sell]";
sellCommand.displayTexture = null;
sellCommand.displayVideo = null;
((Object)sellCommand).hideFlags = (HideFlags)0;
sellCommand.isConfirmationNode = true;
sellCommand.itemCost = 0;
sellCommand.loadImageSlowly = false;
sellCommand.maxCharactersToType = 35;
((Object)sellCommand).name = "sellCommand";
sellCommand.overrideOptions = true;
sellCommand.persistentImage = false;
sellCommand.playClip = null;
sellCommand.playSyncedClip = -1;
sellCommand.returnFromStorage = false;
sellCommand.shipUnlockableID = -1;
sellCommand.storyLogFileID = -1;
sellCommand.terminalEvent = "";
sellCommand.terminalOptions = (CompatibleNoun[])(object)new CompatibleNoun[2]
{
new CompatibleNoun
{
noun = terminal.terminalNodes.allKeywords[3],
result = sellConfirm
},
new CompatibleNoun
{
noun = terminal.terminalNodes.allKeywords[4],
result = sellDeny
}
};
confirmOvertime = ScriptableObject.CreateInstance<TerminalNode>();
confirmOvertime.acceptAnything = false;
confirmOvertime.buyItemIndex = -1;
confirmOvertime.buyRerouteToMoon = -1;
confirmOvertime.buyUnlockable = false;
confirmOvertime.clearPreviousText = true;
confirmOvertime.creatureFileID = -1;
confirmOvertime.creatureName = "";
confirmOvertime.displayPlanetInfo = -1;
confirmOvertime.displayText = "[confirmOvertime]";
confirmOvertime.displayTexture = null;
confirmOvertime.displayVideo = null;
((Object)confirmOvertime).hideFlags = (HideFlags)0;
confirmOvertime.isConfirmationNode = false;
confirmOvertime.itemCost = 0;
confirmOvertime.loadImageSlowly = false;
confirmOvertime.maxCharactersToType = 35;
((Object)confirmOvertime).name = "confirmOvertime";
confirmOvertime.overrideOptions = false;
confirmOvertime.persistentImage = false;
confirmOvertime.playClip = null;
confirmOvertime.playSyncedClip = -1;
confirmOvertime.returnFromStorage = false;
confirmOvertime.shipUnlockableID = -1;
confirmOvertime.storyLogFileID = -1;
confirmOvertime.terminalEvent = "";
confirmOvertime.terminalOptions = (CompatibleNoun[])(object)new CompatibleNoun[0];
depositDeny = ScriptableObject.CreateInstance<TerminalNode>();
depositDeny.acceptAnything = false;
depositDeny.buyItemIndex = -1;
depositDeny.buyRerouteToMoon = -1;
depositDeny.buyUnlockable = false;
depositDeny.clearPreviousText = false;
depositDeny.creatureFileID = -1;
depositDeny.creatureName = "";
depositDeny.displayPlanetInfo = -1;
depositDeny.displayText = "\nItem storing canceled.\n\n";
depositDeny.displayTexture = null;
depositDeny.displayVideo = null;
((Object)depositDeny).hideFlags = (HideFlags)0;
depositDeny.isConfirmationNode = false;
depositDeny.itemCost = 0;
depositDeny.loadImageSlowly = false;
depositDeny.maxCharactersToType = 35;
((Object)depositDeny).name = "depositDeny";
depositDeny.overrideOptions = false;
depositDeny.persistentImage = false;
depositDeny.playClip = null;
depositDeny.playSyncedClip = -1;
depositDeny.returnFromStorage = false;
depositDeny.shipUnlockableID = -1;
depositDeny.storyLogFileID = -1;
depositDeny.terminalEvent = "";
depositDeny.terminalOptions = (CompatibleNoun[])(object)new CompatibleNoun[0];
depositConfirm = ScriptableObject.CreateInstance<TerminalNode>();
depositConfirm.acceptAnything = false;
depositConfirm.buyItemIndex = -1;
depositConfirm.buyRerouteToMoon = -1;
depositConfirm.buyUnlockable = false;
depositConfirm.clearPreviousText = false;
depositConfirm.creatureFileID = -1;
depositConfirm.creatureName = "";
depositConfirm.displayPlanetInfo = -1;
depositConfirm.displayText = "[depositConfirm]";
depositConfirm.displayTexture = null;
depositConfirm.displayVideo = null;
((Object)depositConfirm).hideFlags = (HideFlags)0;
depositConfirm.isConfirmationNode = false;
depositConfirm.itemCost = 0;
depositConfirm.loadImageSlowly = false;
depositConfirm.maxCharactersToType = 35;
((Object)depositConfirm).name = "depositConfirm";
depositConfirm.overrideOptions = false;
depositConfirm.persistentImage = false;
depositConfirm.playClip = null;
depositConfirm.playSyncedClip = -1;
depositConfirm.returnFromStorage = false;
depositConfirm.shipUnlockableID = -1;
depositConfirm.storyLogFileID = -1;
depositConfirm.terminalEvent = "";
depositConfirm.terminalOptions = (CompatibleNoun[])(object)new CompatibleNoun[0];
depositCommand = ScriptableObject.CreateInstance<TerminalNode>();
depositCommand.acceptAnything = false;
depositCommand.buyItemIndex = -1;
depositCommand.buyRerouteToMoon = -1;
depositCommand.buyUnlockable = false;
depositCommand.clearPreviousText = true;
depositCommand.creatureFileID = -1;
depositCommand.creatureName = "";
depositCommand.displayPlanetInfo = -1;
depositCommand.displayText = "[deposit]";
depositCommand.displayTexture = null;
depositCommand.displayVideo = null;
((Object)depositCommand).hideFlags = (HideFlags)0;
depositCommand.isConfirmationNode = true;
depositCommand.itemCost = 0;
depositCommand.loadImageSlowly = false;
depositCommand.maxCharactersToType = 35;
((Object)depositCommand).name = "depositCommand";
depositCommand.overrideOptions = true;
depositCommand.persistentImage = false;
depositCommand.playClip = null;
depositCommand.playSyncedClip = -1;
depositCommand.returnFromStorage = false;
depositCommand.shipUnlockableID = -1;
depositCommand.storyLogFileID = -1;
depositCommand.terminalEvent = "";
depositCommand.terminalOptions = (CompatibleNoun[])(object)new CompatibleNoun[2]
{
new CompatibleNoun
{
noun = terminal.terminalNodes.allKeywords[3],
result = depositConfirm
},
new CompatibleNoun
{
noun = terminal.terminalNodes.allKeywords[4],
result = depositDeny
}
};
checkScrap = ScriptableObject.CreateInstance<TerminalNode>();
checkScrap.acceptAnything = false;
checkScrap.buyItemIndex = -1;
checkScrap.buyRerouteToMoon = -1;
checkScrap.buyUnlockable = false;
checkScrap.clearPreviousText = true;
checkScrap.creatureFileID = -1;
checkScrap.creatureName = "";
checkScrap.displayPlanetInfo = -1;
checkScrap.displayText = "[checkScrap]";
checkScrap.displayTexture = null;
checkScrap.displayVideo = null;
((Object)checkScrap).hideFlags = (HideFlags)0;
checkScrap.isConfirmationNode = false;
checkScrap.itemCost = 0;
checkScrap.loadImageSlowly = false;
checkScrap.maxCharactersToType = 35;
((Object)checkScrap).name = "checkScrap";
checkScrap.overrideOptions = false;
checkScrap.persistentImage = false;
checkScrap.playClip = null;
checkScrap.playSyncedClip = -1;
checkScrap.returnFromStorage = false;
checkScrap.shipUnlockableID = -1;
checkScrap.storyLogFileID = -1;
checkScrap.terminalEvent = "";
checkScrap.terminalOptions = (CompatibleNoun[])(object)new CompatibleNoun[0];
}
}
public class TerminalKeywords
{
public static TerminalKeyword sellWord;
public static TerminalKeyword depositWord;
public static TerminalKeyword overtimeWord;
public static TerminalKeyword checkScrapWord;
public static TerminalKeyword defaultVerb;
public static void InitializeKeywords()
{
//IL_01de: Unknown result type (might be due to invalid IL or missing references)
//IL_01e3: Unknown result type (might be due to invalid IL or missing references)
//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
//IL_01fa: Expected O, but got Unknown
//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0201: Unknown result type (might be due to invalid IL or missing references)
//IL_020c: Unknown result type (might be due to invalid IL or missing references)
//IL_0218: Expected O, but got Unknown
//IL_021a: Unknown result type (might be due to invalid IL or missing references)
//IL_021f: Unknown result type (might be due to invalid IL or missing references)
//IL_022a: Unknown result type (might be due to invalid IL or missing references)
//IL_0236: Expected O, but got Unknown
//IL_0238: Unknown result type (might be due to invalid IL or missing references)
//IL_023d: Unknown result type (might be due to invalid IL or missing references)
//IL_0248: Unknown result type (might be due to invalid IL or missing references)
//IL_0254: Expected O, but got Unknown
sellWord = ScriptableObject.CreateInstance<TerminalKeyword>();
sellWord.accessTerminalObjects = false;
sellWord.compatibleNouns = (CompatibleNoun[])(object)new CompatibleNoun[0];
sellWord.defaultVerb = null;
((Object)sellWord).hideFlags = (HideFlags)0;
sellWord.isVerb = false;
((Object)sellWord).name = "SellWord";
sellWord.specialKeywordResult = null;
sellWord.word = "sell";
depositWord = ScriptableObject.CreateInstance<TerminalKeyword>();
depositWord.accessTerminalObjects = false;
depositWord.compatibleNouns = (CompatibleNoun[])(object)new CompatibleNoun[0];
depositWord.defaultVerb = null;
((Object)depositWord).hideFlags = (HideFlags)0;
depositWord.isVerb = false;
((Object)depositWord).name = "DepositWord";
depositWord.specialKeywordResult = null;
depositWord.word = "deposit";
overtimeWord = ScriptableObject.CreateInstance<TerminalKeyword>();
overtimeWord.accessTerminalObjects = false;
overtimeWord.compatibleNouns = (CompatibleNoun[])(object)new CompatibleNoun[0];
overtimeWord.defaultVerb = null;
((Object)overtimeWord).hideFlags = (HideFlags)0;
overtimeWord.isVerb = false;
((Object)overtimeWord).name = "OvertimeWord";
overtimeWord.specialKeywordResult = null;
overtimeWord.word = "overtime";
checkScrapWord = ScriptableObject.CreateInstance<TerminalKeyword>();
checkScrapWord.accessTerminalObjects = false;
checkScrapWord.compatibleNouns = (CompatibleNoun[])(object)new CompatibleNoun[0];
checkScrapWord.defaultVerb = null;
((Object)checkScrapWord).hideFlags = (HideFlags)0;
checkScrapWord.isVerb = false;
((Object)checkScrapWord).name = "CheckScrapWord";
checkScrapWord.specialKeywordResult = null;
checkScrapWord.word = "check";
defaultVerb = ScriptableObject.CreateInstance<TerminalKeyword>();
defaultVerb.accessTerminalObjects = false;
defaultVerb.compatibleNouns = (CompatibleNoun[])(object)new CompatibleNoun[4]
{
new CompatibleNoun
{
noun = sellWord,
result = TerminalNodes.sellCommand
},
new CompatibleNoun
{
noun = depositWord,
result = TerminalNodes.depositCommand
},
new CompatibleNoun
{
noun = checkScrapWord,
result = TerminalNodes.checkScrap
},
new CompatibleNoun
{
noun = overtimeWord,
result = TerminalNodes.confirmOvertime
}
};
defaultVerb.defaultVerb = null;
((Object)defaultVerb).hideFlags = (HideFlags)0;
defaultVerb.isVerb = true;
((Object)defaultVerb).name = "DefaultVerb";
defaultVerb.specialKeywordResult = null;
defaultVerb.word = "_";
}
}
public const string sellConfirmString = "[sellConfirm]";
public const string sellCommandString = "[sell]";
public const string confirmOvertimeString = "[confirmOvertime]";
public const string depositConfirmString = "[depositConfirm]";
public const string depositCommandString = "[deposit]";
public const string checkScrapString = "[checkScrap]";
public static Terminal terminal = null;
public static string terminalInput = null;
public static bool addedCustomKeywords = false;
public static bool internalStateInitialized = false;
public static bool isSellValid = false;
public static bool isDepositValid = false;
private static string itemNameToDeposit = "";
public static string FindItemsToSell()
{
if (StartOfRound.Instance.inShipPhase)
{
isSellValid = false;
return "Cannot sell while in orbit.\n\n";
}
if ((Object)(object)Object.FindAnyObjectByType<DepositItemsDesk>() == (Object)null)
{
isSellValid = false;
return "Current moon does not have a sell counter.\n\n";
}
string[] array = terminalInput.Split(new char[1] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
bool useOvertime = terminalInput.Contains("-o");
if (array.Count() < 2 || (!int.TryParse(array[1], out var result) && !array[1].Equals("all", StringComparison.OrdinalIgnoreCase) && !array[1].Equals("quota", StringComparison.OrdinalIgnoreCase)))
{
isSellValid = false;
terminal.currentNode = TerminalNodes.sellDeny;
return "Invalid sell command.\n\n";
}
if (array[1] == "all")
{
HQoL.sellModule.FindAllItems();
}
else if (array[1] == "quota")
{
HQoL.sellModule.FindItemsWithTotalValue(TimeOfDay.Instance.profitQuota, useOvertime: false);
}
else
{
HQoL.sellModule.FindItemsWithTotalValue(result, useOvertime);
}
result = HQoL.sellModule.sellValue;
string text = $"Found value to sell: ${result}\n";
int num = ((TimeOfDay.Instance.daysUntilDeadline == 0) ? (-1) : TimeOfDay.Instance.daysUntilDeadline);
int num2 = Math.Max(((int)((float)result * StartOfRound.Instance.companyBuyingRate) - TimeOfDay.Instance.profitQuota) / 5 + 15 * num, 0);
text += $"Overtime: ${num2} (Total: ${(int)((float)result * StartOfRound.Instance.companyBuyingRate) + num2})\n\n";
foreach (KeyValuePair<string, int> item in HQoL.sellModule.itemTypesToSell)
{
text += $"{item.Key} (x{item.Value})\n";
}
text += "\nConfirm sell?\n\n";
isSellValid = true;
return text;
}
public static string SellItems()
{
if (!isSellValid)
{
return "Items could not be sold.\n\n";
}
int creditsEarned = (int)((float)HQoL.sellModule.sellValue * StartOfRound.Instance.companyBuyingRate);
HQoLNetwork.Instance.SellItemsServerRpc(creditsEarned, HQoL.sellModule.itemReferenceIndexToSell.ToArray());
HQoL.sellModule.ClearSellModule();
isSellValid = false;
return "Selling...\n\n";
}
public static string FindItemsToDeposit()
{
if (!StartOfRound.Instance.inShipPhase && StartOfRound.Instance.currentLevelID != 3)
{
isDepositValid = false;
return "Can only deposit items while the ship is in orbit or at company.\n\n";
}
string text = terminalInput.Replace("deposit ", string.Empty);
if (text.Length < 1)
{
isDepositValid = false;
return "Deposit command needs an item name.\n\n";
}
GrabbableObject[] array = Object.FindObjectsByType<GrabbableObject>((FindObjectsSortMode)0);
if (text == "all")
{
Dictionary<string, int> dictionary = new Dictionary<string, int>();
GrabbableObject[] array2 = array;
foreach (GrabbableObject val in array2)
{
if (val.itemProperties.isScrap)
{
if (dictionary.ContainsKey(((Component)val).gameObject.GetComponentInChildren<ScanNodeProperties>().headerText))
{
dictionary[((Component)val).gameObject.GetComponentInChildren<ScanNodeProperties>().headerText]++;
}
else
{
dictionary[((Component)val).gameObject.GetComponentInChildren<ScanNodeProperties>().headerText] = 1;
}
}
}
string text2 = "";
int num = 0;
foreach (KeyValuePair<string, int> item2 in dictionary)
{
num += item2.Value;
text2 += $"{item2.Key} (x{item2.Value})\n";
}
if (num == 0)
{
isDepositValid = false;
return "No items to deposit.\n\n";
}
itemNameToDeposit = "all";
isDepositValid = true;
return $"Found {num} items to deposit.\n\n" + text2 + "\nConfirm?\n\n";
}
HashSet<string> hashSet = new HashSet<string>();
GrabbableObject[] array3 = array;
foreach (GrabbableObject val2 in array3)
{
if (val2.itemProperties.isScrap)
{
string item = ((Object)val2).name + "#" + ((Object)val2.itemProperties).name + "#" + ((Component)val2).gameObject.GetComponentInChildren<ScanNodeProperties>().headerText;
hashSet.Add(item);
}
}
bool flag = false;
foreach (string item3 in hashSet)
{
if (!flag && item3.ToLower().Contains(text))
{
itemNameToDeposit = item3.Split(new char[1] { '#' }, StringSplitOptions.RemoveEmptyEntries)[2];
flag = true;
}
}
if (!flag)
{
isDepositValid = false;
return "Could not find " + text + " to deposit.\n\n";
}
int num2 = 0;
GrabbableObject[] array4 = array;
foreach (GrabbableObject val3 in array4)
{
if (val3.itemProperties.isScrap && itemNameToDeposit == ((Component)val3).gameObject.GetComponentInChildren<ScanNodeProperties>().headerText && !val3.isHeld)
{
num2++;
}
}
isDepositValid = true;
return $"Found {itemNameToDeposit} (x{num2}).\n\nConfirm?\n\n";
}
public static string DepositItems()
{
if (!isDepositValid)
{
return "Items could not be deposited.\n\n";
}
HQoLNetwork.Instance.DepositItemsServerRpc(itemNameToDeposit);
return "Depositing...\n\n";
}
public static string ConfirmOvertime()
{
int num = ((TimeOfDay.Instance.daysUntilDeadline == 0) ? (-1) : TimeOfDay.Instance.daysUntilDeadline);
int num2 = Math.Max((TimeOfDay.Instance.quotaFulfilled - TimeOfDay.Instance.profitQuota) / 5 + 15 * num, 0);
string text = $"Value sold: ${TimeOfDay.Instance.quotaFulfilled}\n";
text += $"Overtime: ${num2}\n";
text += $"Quota: ${TimeOfDay.Instance.profitQuota}\n";
return text + $"Total: ${terminal.groupCredits + num2}\n\n";
}
public static string CheckItems()
{
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_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_00d0: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: 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)
int num = 0;
Dictionary<string, int> dictionary = new Dictionary<string, int>();
Dictionary<string, int> dictionary2 = new Dictionary<string, int>();
foreach (ItemReference item in HQoLNetwork.Instance.netStorage)
{
FixedString32Bytes itemName = item.itemName;
if (dictionary.ContainsKey(((object)(FixedString32Bytes)(ref itemName)).ToString()))
{
itemName = item.itemName;
dictionary[((object)(FixedString32Bytes)(ref itemName)).ToString()]++;
Dictionary<string, int> dictionary3 = dictionary2;
itemName = item.itemName;
dictionary3[((object)(FixedString32Bytes)(ref itemName)).ToString()] += item.value;
}
else
{
itemName = item.itemName;
dictionary[((object)(FixedString32Bytes)(ref itemName)).ToString()] = 1;
itemName = item.itemName;
dictionary2[((object)(FixedString32Bytes)(ref itemName)).ToString()] = item.value;
}
num++;
}
string text = $"{num} scrap in storage.\n\n";
foreach (string key in dictionary.Keys)
{
text += $"{key} (x{dictionary[key]}: ${dictionary2[key]})\n";
}
return text + "\n";
}
}
}
namespace HQoL.Network
{
internal class HQoLNetwork : NetworkBehaviour
{
private static GameObject prefab;
public NetworkList<ItemReference> netStorage = new NetworkList<ItemReference>();
public NetworkVariable<int> totalStorageValue = new NetworkVariable<int>(0, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0);
public bool storageHasBeenModified;
public static HQoLNetwork Instance { get; private set; }
public static void CreateAndRegisterPrefab()
{
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Expected O, but got Unknown
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)prefab != (Object)null))
{
prefab = new GameObject("OreoM.HQoL.73 Prefab");
GameObject obj = prefab;
((Object)obj).hideFlags = (HideFlags)(((Object)obj).hideFlags | 0x3D);
NetworkObject val = prefab.AddComponent<NetworkObject>();
val.GlobalObjectIdHash = XXHash.Hash32(((Object)prefab).name);
prefab.AddComponent<HQoLNetwork>();
NetworkManager.Singleton.AddNetworkPrefab(prefab);
HQoL.Logger.LogInfo((object)"Network prefab created and registered");
}
}
public static void SpawnNetworkHandler()
{
if (NetworkManager.Singleton.IsServer || NetworkManager.Singleton.IsHost)
{
Object.Instantiate<GameObject>(prefab).GetComponent<NetworkObject>().Spawn(false);
HQoL.Logger.LogInfo((object)"Network handler spawned");
}
}
public static void DespawnNetworkHandler()
{
if ((Object)(object)Instance != (Object)null && ((Component)Instance).gameObject.GetComponent<NetworkObject>().IsSpawned && (NetworkManager.Singleton.IsServer || NetworkManager.Singleton.IsHost))
{
((Component)Instance).gameObject.GetComponent<NetworkObject>().Despawn(true);
HQoL.Logger.LogInfo((object)"Network handler despawned");
}
}
private void Awake()
{
Instance = this;
}
public void AddItem(GrabbableObject item)
{
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
netStorage.Add(new ItemReference
{
itemName = FixedString32Bytes.op_Implicit(((Component)item).gameObject.GetComponentInChildren<ScanNodeProperties>().headerText),
value = item.scrapValue
});
NetworkVariable<int> obj = totalStorageValue;
obj.Value += item.scrapValue;
storageHasBeenModified = true;
}
public void AddItems(GrabbableObject[] items)
{
foreach (GrabbableObject item in items)
{
AddItem(item);
}
}
public void AddItems(List<ItemReference> itemRefs)
{
foreach (ItemReference itemRef in itemRefs)
{
netStorage.Add(itemRef);
NetworkVariable<int> obj = totalStorageValue;
obj.Value += itemRef.value;
}
}
public void ClearItems()
{
netStorage.Clear();
totalStorageValue.Value = 0;
}
[ServerRpc(RequireOwnership = false)]
public void SellItemsServerRpc(int creditsEarned, int[] indicesToSell)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
//IL_00ee: Invalid comparison between Unknown and I4
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: 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)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: 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_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager == null || !networkManager.IsListening)
{
return;
}
if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
{
ServerRpcParams val = default(ServerRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3273020359u, val, (RpcDelivery)0);
BytePacker.WriteValueBitPacked(val2, creditsEarned);
bool flag = indicesToSell != null;
((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
if (flag)
{
((FastBufferWriter)(ref val2)).WriteValueSafe<int>(indicesToSell, default(ForPrimitives));
}
((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3273020359u, val, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsServer && !networkManager.IsHost))
{
return;
}
base.__rpc_exec_stage = (__RpcExecStage)0;
List<int> list = (from i in new List<int>(indicesToSell).Distinct()
orderby i descending
select i).ToList();
foreach (int item in list)
{
NetworkVariable<int> obj = totalStorageValue;
obj.Value -= netStorage[item].value;
netStorage.RemoveAt(item);
storageHasBeenModified = true;
}
UpdateQuotaAndDisplayCreditsEarningClientRpc(creditsEarned);
}
[ClientRpc]
public void UpdateQuotaAndDisplayCreditsEarningClientRpc(int creditsEarned)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Invalid comparison between Unknown and I4
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: 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)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams val = default(ClientRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2706010165u, val, (RpcDelivery)0);
BytePacker.WriteValueBitPacked(val2, creditsEarned);
((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2706010165u, val, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost))
{
base.__rpc_exec_stage = (__RpcExecStage)0;
Terminal terminal = TerminalHelper.terminal;
terminal.groupCredits += creditsEarned;
TimeOfDay instance = TimeOfDay.Instance;
instance.quotaFulfilled += creditsEarned;
TimeOfDay.Instance.UpdateProfitQuotaCurrentTime();
((TMP_Text)HUDManager.Instance.moneyRewardsListText).text = "";
((TMP_Text)HUDManager.Instance.moneyRewardsTotalText).text = $"TOTAL: ${creditsEarned}";
HUDManager.Instance.moneyRewardsAnimator.SetTrigger("showRewards");
HUDManager.Instance.rewardsScrollbar.value = 1f;
}
}
}
[ServerRpc(RequireOwnership = false)]
public void DepositItemsServerRpc(string itemName)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
//IL_00d4: Invalid comparison between Unknown and I4
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager == null || !networkManager.IsListening)
{
return;
}
if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
{
ServerRpcParams val = default(ServerRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1385542601u, val, (RpcDelivery)0);
bool flag = itemName != null;
((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
if (flag)
{
((FastBufferWriter)(ref val2)).WriteValueSafe(itemName, false);
}
((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1385542601u, val, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsServer && !networkManager.IsHost))
{
return;
}
base.__rpc_exec_stage = (__RpcExecStage)0;
string itemName2 = itemName;
List<GrabbableObject> list = new List<GrabbableObject>(Object.FindObjectsByType<GrabbableObject>((FindObjectsSortMode)0));
if (itemName2 == "all")
{
list.RemoveAll(delegate(GrabbableObject scrapObj)
{
//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_00a2: Unknown result type (might be due to invalid IL or missing references)
if (!scrapObj.isHeld && scrapObj.itemProperties.isScrap && !HQoL.modConfig.storageException.Contains(((Object)scrapObj).name.ToLower()) && !HQoL.modConfig.storageException.Contains(((Object)scrapObj.itemProperties).name.ToLower()) && !HQoL.modConfig.storageException.Contains(((Component)scrapObj).gameObject.GetComponentInChildren<ScanNodeProperties>().headerText.ToLower()))
{
if (TimeOfDay.Instance.daysUntilDeadline != 0)
{
Bounds bounds2 = StartOfRound.Instance.shipInnerRoomBounds.bounds;
return !((Bounds)(ref bounds2)).Contains(((Component)scrapObj).transform.position);
}
return false;
}
return true;
});
}
else
{
list.RemoveAll(delegate(GrabbableObject scrapObj)
{
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
if (!scrapObj.isHeld && scrapObj.itemProperties.isScrap && !(((Component)scrapObj).gameObject.GetComponentInChildren<ScanNodeProperties>().headerText != itemName2))
{
if (TimeOfDay.Instance.daysUntilDeadline != 0)
{
Bounds bounds = StartOfRound.Instance.shipInnerRoomBounds.bounds;
return !((Bounds)(ref bounds)).Contains(((Component)scrapObj).transform.position);
}
return false;
}
return true;
});
}
AddItems(list.ToArray());
list.ForEach(delegate(GrabbableObject scrapObj)
{
((NetworkBehaviour)scrapObj).NetworkObject.Despawn(true);
});
storageHasBeenModified = true;
}
protected override void __initializeVariables()
{
if (netStorage == null)
{
throw new Exception("HQoLNetwork.netStorage cannot be null. All NetworkVariableBase instances must be initialized.");
}
((NetworkVariableBase)netStorage).Initialize((NetworkBehaviour)(object)this);
((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)netStorage, "netStorage");
base.NetworkVariableFields.Add((NetworkVariableBase)(object)netStorage);
if (totalStorageValue == null)
{
throw new Exception("HQoLNetwork.totalStorageValue cannot be null. All NetworkVariableBase instances must be initialized.");
}
((NetworkVariableBase)totalStorageValue).Initialize((NetworkBehaviour)(object)this);
((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)totalStorageValue, "totalStorageValue");
base.NetworkVariableFields.Add((NetworkVariableBase)(object)totalStorageValue);
((NetworkBehaviour)this).__initializeVariables();
}
protected override void __initializeRpcs()
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Expected O, but got Unknown
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Expected O, but got Unknown
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Expected O, but got Unknown
((NetworkBehaviour)this).__registerRpc(3273020359u, new RpcReceiveHandler(__rpc_handler_3273020359), "SellItemsServerRpc");
((NetworkBehaviour)this).__registerRpc(2706010165u, new RpcReceiveHandler(__rpc_handler_2706010165), "UpdateQuotaAndDisplayCreditsEarningClientRpc");
((NetworkBehaviour)this).__registerRpc(1385542601u, new RpcReceiveHandler(__rpc_handler_1385542601), "DepositItemsServerRpc");
((NetworkBehaviour)this).__initializeRpcs();
}
private static void __rpc_handler_3273020359(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: 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_0099: 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_006b: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = target.NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
int creditsEarned = default(int);
ByteUnpacker.ReadValueBitPacked(reader, ref creditsEarned);
bool flag = default(bool);
((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
int[] indicesToSell = null;
if (flag)
{
((FastBufferReader)(ref reader)).ReadValueSafe<int>(ref indicesToSell, default(ForPrimitives));
}
target.__rpc_exec_stage = (__RpcExecStage)1;
((HQoLNetwork)(object)target).SellItemsServerRpc(creditsEarned, indicesToSell);
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
private static void __rpc_handler_2706010165(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: 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)
NetworkManager networkManager = target.NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
int creditsEarned = default(int);
ByteUnpacker.ReadValueBitPacked(reader, ref creditsEarned);
target.__rpc_exec_stage = (__RpcExecStage)1;
((HQoLNetwork)(object)target).UpdateQuotaAndDisplayCreditsEarningClientRpc(creditsEarned);
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
private static void __rpc_handler_1385542601(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: 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)
NetworkManager networkManager = target.NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
bool flag = default(bool);
((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
string itemName = null;
if (flag)
{
((FastBufferReader)(ref reader)).ReadValueSafe(ref itemName, false);
}
target.__rpc_exec_stage = (__RpcExecStage)1;
((HQoLNetwork)(object)target).DepositItemsServerRpc(itemName);
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
protected internal override string __getTypeName()
{
return "HQoLNetwork";
}
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
public IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}
namespace __GEN
{
internal class NetworkVariableSerializationHelper
{
[RuntimeInitializeOnLoadMethod]
internal static void InitializeSerialization()
{
NetworkVariableSerializationTypes.InitializeSerializer_UnmanagedINetworkSerializable<ItemReference>();
NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedIEquatable<ItemReference>();
}
}
}
namespace OreoM.HQoL.73.NetcodePatcher
{
[AttributeUsage(AttributeTargets.Module)]
internal class NetcodePatchedAssemblyAttribute : Attribute
{
}
}