Exemple #1
0
        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));
        }
Exemple #2
0
 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();
                }
        }