private void ApplyStatsToDbItems(List <PlayerHeldItem> items, StatFetch type) { var records = GetRecordsForItems(items); Dictionary <string, List <DBSTatRow> > statMap = _databaseItemStatDao.GetStats(records, type); foreach (PlayerHeldItem phi in items) { List <DBSTatRow> stats = new List <DBSTatRow>(); if (statMap.ContainsKey(phi.BaseRecord)) { stats.AddRange(Filter(statMap[phi.BaseRecord])); } var statsWithText = Filter(stats.Where(m => !string.IsNullOrEmpty(m.TextValue))); List <DBSTatRow> statsWithNumerics = stats.Where(m => string.IsNullOrEmpty(m.TextValue)) .GroupBy(r => r.Stat) .Select(g => new DBSTatRow { Record = g.FirstOrDefault()?.Record, TextValue = g.FirstOrDefault()?.TextValue, Stat = g.FirstOrDefault()?.Stat, Value = g.Sum(v => v.Value) }) .ToList(); statsWithNumerics.AddRange(statsWithText); phi.Tags = new HashSet <DBSTatRow>(statsWithNumerics); } Logger.Debug($"Applied stats to {items.Count()} items"); }
public void UpdateState() { using (ISession session = SessionCreator.OpenSession()) { using (ITransaction transaction = session.BeginTransaction()) { Populate(session); IList <AugmentationItem> items = session.CreateCriteria <AugmentationItem>().List <AugmentationItem>(); var stats = _databaseItemStatDao.GetStats(session, StatFetch.AugmentItems); foreach (var item in items) { var rarity = ItemOperationsUtility.GetRarityForRecord(stats, item.BaseRecord); var minimumLevel = ItemOperationsUtility.GetMinimumLevelForRecord(stats, item.BaseRecord); var name = ItemOperationsUtility.GetItemName(session, stats, item); item.Rarity = rarity; item.MinimumLevel = minimumLevel; item.Name = name; session.Update(item); } transaction.Commit(); } } }
public void UpdatePetRecords(ISession session, List <BuddyItem> items) { using (ITransaction transaction = session.BeginTransaction()) { // Now that we have base stats, we can calculate pet records as well var stats = _databaseItemStatDao.GetStats(session, StatFetch.BuddyItems); for (int i = 0; i < items.Count; i++) { UpdatePetRecords(session, items.ElementAt(i), stats); } transaction.Commit(); } }
/// <summary> /// Update internal item stats /// May take a lifetime and a half /// </summary> public void UpdateAllItemStats(IList <PlayerItem> items, Action <int> progress) { // A lame workaround for PlayerItemRecord not being available the first run.. using (ISession session = SessionCreator.OpenSession()) { using (ITransaction transaction = session.BeginTransaction()) { session.CreateQuery("DELETE FROM PlayerItemRecord") .ExecuteUpdate(); // Get the base records stored for (int i = 0; i < items.Count; i++) { UpdateRecords(session, items.ElementAt(i)); } transaction.Commit(); } using (ITransaction transaction = session.BeginTransaction()) { // Now that we have base stats, we can calculate pet records as well var stats = _databaseItemStatDao.GetStats(session, StatFetch.PlayerItems); for (int i = 0; i < items.Count; i++) { UpdatePetRecords(session, items.ElementAt(i), stats); } foreach (PlayerItem item in items) { UpdateItemDetails(session, item, stats); progress(1); } transaction.Commit(); } } }
public Dictionary <string, List <DBSTatRow> > GetStats(IEnumerable <string> records, StatFetch fetchMode) { return(ThreadExecuter.Execute( () => repo.GetStats(records, fetchMode) )); }