コード例 #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(Classify(tab).Remaining);
                    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 => TransferStashService.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
        private ClassifiedItems Classify(StashTab tab)
        {
            var stacked = tab.Items.Where(item =>
                                          item.StackCount > 1 ||
                                          _cache.StackableRecords.Contains(item.BaseRecord) ||
                                          _cache.SpecialRecords.Contains(item.BaseRecord) // Special "single seed" items.
                                          ).ToList();

            var unknownItems = tab.Items.Where(item => !_cache.AllRecords.Contains(item.BaseRecord)).ToList();

            var duplicates = tab.Items
                             .SkipWhile(item => stacked.Contains(item))
                             .SkipWhile(item => unknownItems.Contains(item))
                             .Where(item => _playerItemDao.Exists(TransferStashService.Map(item, null, false))) // We don't care about mod/hardcore for dupe checking.
                             .ToList();

            var remaining = tab.Items
                            .SkipWhile(item => duplicates.Contains(item))
                            .SkipWhile(item => stacked.Contains(item))
                            .SkipWhile(item => unknownItems.Contains(item))
                            .ToList();

            return(new ClassifiedItems {
                Stacked = stacked,
                Duplicates = duplicates,
                Unknown = unknownItems,
                Remaining = remaining
            });
        }
コード例 #3
0
        public void Add(Item item)
        {
            // Dupe-check list

            bool stacked = item.StackCount > 1 ||
                           _cache.StackableRecords.Contains(item.BaseRecord) ||
                           _cache.SpecialRecords.Contains(item.BaseRecord); // Special "single seed" items.

            if (stacked)
            {
                Stacked.Add(item);
                All.Add(item);
                return;
            }

            // TODO: Detect slith rings etc


            // We don't have this record at all, unknown to IA. Probably need to parse DB.
            bool unknownItem = !_cache.AllRecords.Contains(item.BaseRecord);

            if (unknownItem)
            {
                if (item.BaseRecord.StartsWith("records/storyelements/rewards/"))
                {
                    Quest.Add(item);
                }
                else
                {
                    Unknown.Add(item);
                }

                All.Add(item);
                return;
            }

            // We already have this item..
            if (All.Any(m => m.Equals(item)))
            {
                Duplicates.Add(item);
                All.Add(item);
                return;
            }

            // We already have this item..
            if (_playerItemDao.Exists(TransferStashService.Map(item, null, false)))
            {
                Duplicates.Add(item);
                All.Add(item);
                return;
            }

            Remaining.Add(item);
            All.Add(item);
        }
コード例 #4
0
        private bool StoreItemsToDatabase(ICollection <Item> items, string mod, bool isHardcore)
        {
            // Convert the items
            var playerItems = items.Select(item => TransferStashService.Map(item, mod, isHardcore)).ToList();

            try {
                _playerItemDao.Save(playerItems);
            }
            catch (Exception ex) {
                Logger.Warn(ex.Message);
                Logger.Warn(ex.StackTrace);
                ExceptionReporter.ReportException(ex, "StoreItems");
                return(false);
            }

            return(true);
        }
コード例 #5
0
        private bool StoreItemsToDatabase(ICollection <Item> items, string mod, bool isHardcore)
        {
            // Convert the items
            var playerItems = items.Select(item => TransferStashService.Map(item, mod, isHardcore)).ToList();

            try {
                _playerItemDao.Save(playerItems);

                foreach (var item in playerItems)
                {
                    var hash = ItemReplicaService.GetHash(item);
                    _replicaItemDao.UpdatePlayerItemId(hash, item.Id);
                }
            }
            catch (Exception ex) {
                Logger.Warn(ex.Message);
                Logger.Warn(ex.StackTrace);
                return(false);
            }

            return(true);
        }
コード例 #6
0
 public void Add(PlayerItem item)
 {
     Add(TransferStashService.Map(item));
 }