public static async Task <bool> ExitRetainer(bool exitList = false) { if (RetainerTasks.IsInventoryOpen()) { RetainerTasks.CloseInventory(); await Coroutine.Wait(3000, () => RetainerTasks.IsOpen); } if (RetainerTasks.IsOpen) { RetainerTasks.CloseTasks(); await Coroutine.Wait(3000, () => Talk.DialogOpen); } if (Talk.DialogOpen) { Talk.Next(); await Coroutine.Wait(3000, () => RetainerList.Instance.IsOpen); } if (!exitList) { return(RetainerList.Instance.IsOpen); } if (!RetainerList.Instance.IsOpen) { return(true); } await RetainerRoutine.CloseRetainers(); await Coroutine.Wait(3000, () => !RetainerList.Instance.IsOpen); return(!RetainerList.Instance.IsOpen); }
private static async Task SortLoop(int index) { LogDebug($"We're gonna go try to sort {ItemSortStatus.GetByIndex(index).Name}!"); if (index < ItemSortStatus.PlayerInventoryIndex) { LogCritical($"Tried to sort index of #{index.ToString()} but that's out of range..."); return; } if (index < ItemSortStatus.SaddlebagInventoryIndex) { LogCritical($"Tried to sort the player's inventory, but we can't do anything with that alone..."); return; } if (InventoryManager.FreeSlots == 0 && ItemSortStatus.GetByIndex(index).FreeSlots == 0) { LogCritical($"Both our player inventory and {ItemSortStatus.GetByIndex(index).Name} are completely full! Can't move anything around like this."); return; } bool openingSaddlebag = index == ItemSortStatus.SaddlebagInventoryIndex; await GeneralFunctions.ExitRetainer(openingSaddlebag); if (openingSaddlebag) { await InventoryBuddy.Instance.Open(); if (!InventoryBuddy.Instance.IsOpen) { LogCritical($"We were unable to open the saddlebag!"); return; } } else { await RetainerRoutine.SelectRetainer(index); RetainerTasks.OpenInventory(); await Coroutine.Wait(3000, RetainerTasks.IsInventoryOpen); if (!RetainerTasks.IsInventoryOpen()) { LogCritical($"We were unable to open Retainer #{index.ToString()}!"); return; } } await Coroutine.Sleep(200); await CombineStacks(GeneralFunctions.MainBagsFilledSlots()); await CombineStacks(InventoryManager.GetBagsByInventoryBagId(BagIdsByIndex(index)).SelectMany(x => x.FilledSlots)); while (ShouldSortLoop(index)) { bool depositResult = await DepositLoop(index); UpdatePlayerInventory(); UpdateOpenedInventory(index); bool retrieveResult = await RetrieveLoop(index); UpdatePlayerInventory(); UpdateOpenedInventory(index); await Coroutine.Sleep(250); if (!depositResult || !retrieveResult) { break; } } if (openingSaddlebag) { InventoryBuddy.Instance.Close(); } else { await GeneralFunctions.ExitRetainer(); } await Coroutine.Sleep(250); }