public List <PlayerItem> EmptyStash(string filename) { Logger.InfoFormat("Looting {0}", filename); var pCrypto = new GDCryptoDataBuffer(DataBuffer.ReadBytesFromDisk(filename)); var items = new List <Item>(); var stash = new Stash(); if (stash.Read(pCrypto)) { var isHardcore = GlobalPaths.IsHardcore(filename); foreach (var tab in stash.Tabs) { // Grab the items and clear the tab items.AddRange(tab.Items); tab.Items.Clear(); } _stashWriter.SafelyWriteStash(filename, stash); // TODO: Ideally we should check if it worked. Logger.InfoFormat("Looted {0} items from stash", items.Count); return(items.Select(m => Map(m, stash.ModLabel, isHardcore)).ToList()); } Logger.Error("Could not load stash file."); Logger.Error("An update from the developer is most likely required."); return(new List <PlayerItem>()); }
/// <summary> /// Deposit the provided items to bank page Y /// The items deposited, caller responsibility to delete them from DB if stacksize is LE 0, and update if not /// </summary> public void Deposit(string filename, IList <PlayerItem> playerItems, out string error) { error = string.Empty; const int maxItemsInTab = 18 * 10; var stash = GetStash(filename); if (stash != null) { var depositToIndex = GetStashToDepositTo(stash); #if DEBUG while (stash.Tabs.Count < 5) { stash.Tabs.Add(new StashTab()); } #endif if (stash.Tabs.Count < 2) { Logger.WarnFormat("File \"{0}\" only contains {1} pages, must have at least 2 pages to function properly.", filename, stash.Tabs.Count); error = RuntimeSettings.Language.GetTag("iatag_purchase_stash"); } else if (stash.Tabs.Count < depositToIndex + 1) { Logger.Warn($"You have configured IA to deposit to stash {depositToIndex + 1} but you only have {stash.Tabs.Count} pages"); error = RuntimeSettings.Language.GetTag("iatag_invalid_deposit_stash_number", depositToIndex + 1, stash.Tabs.Count); } else if (stash.Tabs[depositToIndex].Items.Count < maxItemsInTab && playerItems.Count > 0) { var tab = stash.Tabs[depositToIndex]; var stashItems = ConvertToStashItems(playerItems, tab); tab.Items.AddRange(stashItems); foreach (var item in stashItems) { Logger.Debug($"Depositing: {item}"); } // Store to stash Logger.Debug($"Depositing {stashItems.Count} items to \"{filename}\", classification: {ClassifyStashfile(filename.ToLower())}"); if (!_stashWriter.SafelyWriteStash(filename, stash)) { Logger.Error("Could not deposit items"); throw new DepositException(); } var numItemsNotDeposited = playerItems.Sum(m => m.StackCount); if (numItemsNotDeposited > 0) { error = RuntimeSettings.Language.GetTag("iatag_stash_might_be_full", depositToIndex + 1); } } } }