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>()); }
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 }); }
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); }
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); }
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); }
public void Add(PlayerItem item) { Add(TransferStashService.Map(item)); }