|
|
@@ -2,6 +2,7 @@
|
|
|
using GadgetCore.API;
|
|
|
using HarmonyLib;
|
|
|
using QuickStack.ConfigEnums;
|
|
|
+using QuickStack.DataConnection;
|
|
|
using System;
|
|
|
using System.Collections;
|
|
|
using System.Reflection;
|
|
|
@@ -15,9 +16,17 @@ namespace QuickStack.Patches
|
|
|
[HarmonyGadget("QuickStack")]
|
|
|
public static class Patch_GameScript_Update
|
|
|
{
|
|
|
+ private static IStorageData storageData;
|
|
|
+
|
|
|
[HarmonyPrefix]
|
|
|
public static void Prefix(GameScript __instance, Item[] ___inventory, ref Item[] ___storage, int ___storageLevel, int ___curStoragePage)
|
|
|
{
|
|
|
+
|
|
|
+ if (Gadgets.GetGadget("StorageExpansion")?.Enabled ?? false)
|
|
|
+ storageData = new StorageExtentionStorageData();
|
|
|
+ else
|
|
|
+ storageData = new VanillaStorageData();
|
|
|
+
|
|
|
try
|
|
|
{
|
|
|
if (MenuScript.player)
|
|
|
@@ -30,17 +39,17 @@ namespace QuickStack.Patches
|
|
|
{
|
|
|
if (hit.transform.gameObject.name.StartsWith("button_quick_stack"))
|
|
|
{
|
|
|
- for (int slot = 0; slot < 36; slot++)
|
|
|
+ for (int slot = 0; slot < 6 * 6; slot++)
|
|
|
{
|
|
|
bool updateSlot = false;
|
|
|
int startPage = Core.settingStackRange == StackRangeEnum.OpenPage ? ___curStoragePage : 0;
|
|
|
- int endPage = Core.settingStackRange == StackRangeEnum.OpenPage ? ___curStoragePage + 1 : ___storageLevel + 1;
|
|
|
+ int endPage = Core.settingStackRange == StackRangeEnum.OpenPage ? ___curStoragePage + 1 : Math.Min(___storageLevel + 1, storageData.pages);
|
|
|
for (int page = startPage; page < endPage; page++)
|
|
|
{
|
|
|
bool contains = false;
|
|
|
Item item = ___inventory[slot];
|
|
|
- for (int slotPage = 0; slotPage < 30; slotPage++)
|
|
|
- if (___storage[page * 30 + slotPage].id == item.id)
|
|
|
+ for (int slotPage = 0; slotPage < storageData.slotsActual; slotPage++)
|
|
|
+ if (___storage[page * storageData.slots + slotPage].id == item.id)
|
|
|
contains = true;
|
|
|
|
|
|
bool potion = item.id >= 60 && item.id <= 73;
|
|
|
@@ -66,12 +75,12 @@ namespace QuickStack.Patches
|
|
|
ItemType slotItemType = slotInfo != null ? (slotInfo.Type & (ItemType.EQUIP_MASK | ItemType.TYPE_MASK)) : ItemRegistry.GetDefaultTypeByID(item.id);
|
|
|
if ((slotItemType & ItemType.NONSTACKING) == ItemType.STACKING)
|
|
|
{
|
|
|
- for (int slotPage = 0; slotPage < 30; slotPage++)
|
|
|
- if (GadgetCoreAPI.CanItemsStack(___storage[page * 30 + slotPage], item))
|
|
|
+ for (int slotPage = 0; slotPage < storageData.slotsActual; slotPage++)
|
|
|
+ if (GadgetCoreAPI.CanItemsStack(___storage[page * storageData.slots + slotPage], item))
|
|
|
{
|
|
|
- while (___storage[page * 30 + slotPage].q < 9999 && item.q > 0)
|
|
|
+ while (___storage[page * storageData.slots + slotPage].q < 9999 && item.q > 0)
|
|
|
{
|
|
|
- ___storage[page * 30 + slotPage].q++;
|
|
|
+ ___storage[page * storageData.slots + slotPage].q++;
|
|
|
item.q--;
|
|
|
updateSlot = true;
|
|
|
}
|
|
|
@@ -80,10 +89,10 @@ namespace QuickStack.Patches
|
|
|
___inventory[slot] = new Item(0, 0, 0, 0, 0, new int[3], new int[3]);
|
|
|
else if (Core.settingStackMode != ConfigEnums.StackModeEnum.StackingOnly)
|
|
|
{
|
|
|
- for (int slotPage = 0; slotPage < 30; slotPage++)
|
|
|
- if (___storage[page * 30 + slotPage].id == 0)
|
|
|
+ for (int slotPage = 0; slotPage < storageData.slotsActual; slotPage++)
|
|
|
+ if (___storage[page * storageData.slots + slotPage].id == 0)
|
|
|
{
|
|
|
- ___storage[page * 30 + slotPage] = item;
|
|
|
+ ___storage[page * storageData.slots + slotPage] = item;
|
|
|
___inventory[slot] = new Item(0, 0, 0, 0, 0, new int[3], new int[3]);
|
|
|
updateSlot = true;
|
|
|
break;
|
|
|
@@ -92,10 +101,10 @@ namespace QuickStack.Patches
|
|
|
}
|
|
|
else if (Core.settingStackMode != ConfigEnums.StackModeEnum.StackingOnly)
|
|
|
{
|
|
|
- for (int slotPage = 0; slotPage < 30; slotPage++)
|
|
|
- if (___storage[page * 30 + slotPage].id == 0)
|
|
|
+ for (int slotPage = 0; slotPage < storageData.slotsActual; slotPage++)
|
|
|
+ if (___storage[page * storageData.slots + slotPage].id == 0)
|
|
|
{
|
|
|
- ___storage[page * 30 + slotPage] = item;
|
|
|
+ ___storage[page * storageData.slots + slotPage] = item;
|
|
|
___inventory[slot] = new Item(0, 0, 0, 0, 0, new int[3], new int[3]);
|
|
|
updateSlot = true;
|
|
|
break;
|