Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified QuickStack.dll
Binary file not shown.
8 changes: 8 additions & 0 deletions Source/Patches.cs
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,14 @@ public static void Postfix(bool _success, string _errorMsg, ReadOnlySpan<ILockTa
else if (QuickStack.stackInProgress == StackType.QuickRestock)
QuickStack.DoQuickRestock(_targets);
}
else
{
// The server rejects the whole batch if any requested container is already
// locked (e.g. another player has it open nearby). DoQuickStack/DoQuickRestock,
// which normally reset stackInProgress via UnlockRequestLocal, never run in that
// case, so it has to be cleared here to avoid getting stuck forever.
QuickStack.stackInProgress = StackType.None;
}
}
catch (Exception e)
{
Expand Down
34 changes: 22 additions & 12 deletions Source/QuickStack.cs
Original file line number Diff line number Diff line change
Expand Up @@ -150,13 +150,18 @@ public static void DoQuickStack(ReadOnlySpan<ILockTarget> containers)
{
XUiM_LootContainer.EItemMoveKind moveKind = GetMoveKind(StackType.QuickStack);

foreach (TEFeatureStorage container in containers)
try
{
foreach (TEFeatureStorage container in containers)
{
XUiM_LootContainer.StashItems(backpackWindow, backpackWindow.backpackGrid, container, 0, backpackWindow.standardControls.LockedSlots, moveKind, backpackWindow.standardControls.MoveStartBottomRight);
container.SetModified();
}
}
finally
{
XUiM_LootContainer.StashItems(backpackWindow, backpackWindow.backpackGrid, container, 0, backpackWindow.standardControls.LockedSlots, moveKind, backpackWindow.standardControls.MoveStartBottomRight);
container.SetModified();
LockManager.Instance.UnlockRequestLocal();
}

LockManager.Instance.UnlockRequestLocal();
}

public static void DoQuickRestock(ReadOnlySpan<ILockTarget> containers)
Expand All @@ -168,15 +173,20 @@ public static void DoQuickRestock(ReadOnlySpan<ILockTarget> containers)
ITileEntityLootable previousTileEntity = lootWindow.te;
string previousName = lootWindow.lootContainerName;

foreach (TEFeatureStorage container in containers)
try
{
foreach (TEFeatureStorage container in containers)
{
lootWindow.SetTileEntityChest("QuickRestock", container);
XUiM_LootContainer.StashItems(backpackWindow, lootWindow.lootContainer, localPlayerUI.mXUi.PlayerInventory, 0, lootWindow.standardControls.LockedSlots, moveKind, lootWindow.standardControls.MoveStartBottomRight);
container.SetModified();
}
}
finally
{
lootWindow.SetTileEntityChest("QuickRestock", container);
XUiM_LootContainer.StashItems(backpackWindow, lootWindow.lootContainer, localPlayerUI.mXUi.PlayerInventory, 0, lootWindow.standardControls.LockedSlots, moveKind, lootWindow.standardControls.MoveStartBottomRight);
container.SetModified();
lootWindow.SetTileEntityChest(previousName, previousTileEntity);
LockManager.Instance.UnlockRequestLocal();
}

lootWindow.SetTileEntityChest(previousName, previousTileEntity);
LockManager.Instance.UnlockRequestLocal();
}

public static void InitializeQuickLock(XUiC_ItemStackGrid grid, XUiC_ContainerStandardControls controls)
Expand Down