예제 #1
0
        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>());
        }
예제 #2
0
        /// <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);
                    }
                }
            }
        }