private static string ReplaceToken(LocalizedStringFile table, Match match) { var idText = match.Groups["id"].Value; uint id; if (uint.TryParse(idText, out id) == false) { throw new InvalidOperationException(); } return(table.Get(id)); }
private static string Decode(LocalizedStringFile table, uint id) { return(Decode(table, table.Get(id))); }
private static void Dump(Dumping.Dumper dumper, Dictionary <Guid, Dumping.PartitionMap.PartitionInfo> partitionMap, string outputPath) { var itemTypes = new Dictionary <string, ItemInfo>(); Logger.Info("Loading globalmaster..."); var globalMaster = new LocalizedStringFile(); using (var input = dumper.LoadResource("game/localization/config/texttable/en/game/globalmaster", "localizedstringresource")) { globalMaster.Deserialize(input); } Logger.Info("Loading masteritemlist..."); var masterItemListReader = dumper.LoadEbx("game/items/masteritemlist"); if (masterItemListReader == null) { Logger.Fatal("Failed to load masteritemlist."); return; } using (masterItemListReader) { var masterItemList = masterItemListReader.GetObjectsOfSpecificType("MasterItemList").First(); foreach (var itemAsset in masterItemList.ItemAssets) { Dumping.PartitionMap.PartitionInfo partitionInfo; if (partitionMap.TryGetValue(itemAsset.PartitionId, out partitionInfo) == false) { Logger.Warn("Failed to find partition info for {0}!", itemAsset.PartitionId); continue; } dumper.MountSuperbundle(partitionInfo.Superbundles.First()); Logger.Info("Loading item '{0}'...", partitionInfo.Name); var itemDataReader = dumper.LoadEbx(partitionInfo.Name, typeof(ItemType)); if (itemDataReader == null) { Logger.Warn("Failed to load item data '{0}'!", partitionInfo.Name); continue; } using (itemDataReader) { var itemData = itemDataReader.GetObject(itemAsset.InstanceId); var type = (ItemType)itemData.ItemType; int tier = itemData.HasMember("TierValue") == false || itemData.TierValue == null ? -1 : itemData.TierValue.ConstValue; var itemInfo = new ItemInfo() { Type = type, ItemHash = itemData.ItemHash, Name = globalMaster.Get((uint)itemData.DisplayName.StringId), Tier = tier, IsHidden = itemData.HideInInventory, }; itemTypes[partitionInfo.Name] = itemInfo; } } } using (var textWriter = new StreamWriter(outputPath, false, Encoding.UTF8)) using (var writer = new JsonTextWriter(textWriter)) { writer.Formatting = Formatting.Indented; writer.IndentChar = ' '; writer.Indentation = 2; writer.WriteStartObject(); foreach (var kv in itemTypes.OrderBy(kv => kv.Key)) { var info = kv.Value; writer.WritePropertyName(kv.Key); writer.WriteStartObject(); writer.WritePropertyName("type"); writer.WriteValue(info.Type.ToString()); writer.WritePropertyName("item_hash"); writer.WriteValue(info.ItemHash); if (string.IsNullOrEmpty(info.Name) == false) { writer.WritePropertyName("name"); writer.WriteValue(Decode(globalMaster, info.Name)); } if (info.Tier >= 0) { writer.WritePropertyName("tier"); writer.WriteValue(info.Tier); } if (info.IsHidden == true) { writer.WritePropertyName("is_hidden"); writer.WriteValue(true); } writer.WriteEndObject(); } writer.WriteEndObject(); } }