public static Reward ReadReward(BdatCollection tables, int rewardSetId) { BTL_ChBtlRewardSet set = tables.BTL_ChBtlRewardSet[rewardSetId]; var reward = new Reward { Id = rewardSetId, MinGold = (int)set.GoldMin, MaxGold = (int)set.GoldMax, MinItems = set.ItemNumMin, MaxItems = set.ItemNumMax, AppointCount = set.AppointItemNum, AppointItem = ItemData.GetName(set.AppointItem, tables) }; int minValue = set.ItemValueMin; int maxValue = set.ItemValueMax; reward.Items = tables.BTL_ChBtlRewardItem.Where(x => x.ItemValue >= minValue && x.ItemValue <= maxValue) .Select(x => new Item { Id = x.ItemID, Prob = x.Param1 }).ToList(); foreach (Item item in reward.Items) { ItemTypeXb2 cat = ItemData.GetItemCategory(item.Id); if (cat == set._UpCategory1 || cat == set._UpCategory2) { item.Prob *= 2; } if (cat == set._DownCategory1 || cat == set._DownCategory2) { item.Prob /= 2; } if (item.Id == set.UpItemID1 || item.Id == set.UpItemID2 || item.Id == set.UpItemID3 || item.Id == set.UpItemID4) { item.Prob *= 2; } } int totalProb = reward.Items.Sum(x => x.Prob); foreach (Item item in reward.Items) { item.Name = ItemData.GetName(item.Id, tables); item.Percent = (float)item.Prob / totalProb; } return(reward); }
public static string GetName(int id, BdatCollection tables) { ItemTypeXb2 category = GetItemCategory(id); string tableName = GetCategoryTable(category); string name = tables[tableName].GetBdatItem(id).Read <Message>("_Name").name; if (category == ItemTypeXb2.PcEquip) { name += $" ({tables.ITM_PcEquip[id]._Rarity.name})"; } return(name); }
public static string GetCategoryTable(ItemTypeXb2 category) { switch (category) { case ItemTypeXb2.PcWpnChip: return("ITM_PcWpnChip"); case ItemTypeXb2.PcEquip: return("ITM_PcEquip"); case ItemTypeXb2.EquipOrb: return("ITM_OrbEquip"); case ItemTypeXb2.PcWpn: return("ITM_PcWpn"); case ItemTypeXb2.Salvage: return("ITM_SalvageList"); case ItemTypeXb2.Precious: return("ITM_PreciousList"); case ItemTypeXb2.Collection: return("ITM_CollectionList"); case ItemTypeXb2.Tresure: return("ITM_TresureList"); case ItemTypeXb2.EmptyOrb: return("ITM_Orb"); case ItemTypeXb2.Favorite: return("ITM_FavoriteList"); case ItemTypeXb2.Crystal: return("ITM_CrystalList"); case ItemTypeXb2.Booster: return("ITM_BoosterList"); case ItemTypeXb2.Info: return("ITM_InfoList"); case ItemTypeXb2.Event: return("ITM_EventList"); case ItemTypeXb2.HanaRole: return("ITM_HanaRole"); case ItemTypeXb2.HanaAtr: return("ITM_HanaAtr"); case ItemTypeXb2.HanaArtsEnh: return("ITM_HanaArtsEnh"); case ItemTypeXb2.HanaNArtsSet: return("ITM_HanaNArtsSet"); case ItemTypeXb2.HanaAssist: return("ITM_HanaAssist"); default: throw new ArgumentOutOfRangeException(nameof(category), category, null); } }