Exemplo n.º 1
0
        public static void GetThoseDats()
        {
            var path = @"C:\Program Files (x86)\Grinding Gear Games\Path of Exile\Content.ggpk";

            //var file = @"C:\ggpk2\Metadata\StatDescriptions\stat_descriptions.txt";

            var ggpk = new GgpkFileSystem(path);

            var datIndex = new DatFileIndex(ggpk,
                                            DetSpecificationIndex.Default);

            var stats = new StatsDatLoader().Load(datIndex);
            var mods  = new ModifiersDatLoader(stats).Load(datIndex);

            var we = mods.SelectMany(c => c.Value.SpawnWeights.Select(e => e.TagId)).Distinct().ToList();

            Console.WriteLine("First 10 mods:");
            int i = 0;

            foreach (var row in datIndex["Mods.dat"])
            {
                Console.WriteLine(row["Name"]);
                if (++i == 10)
                {
                    break;
                }
            }
        }
Exemplo n.º 2
0
        public IReadOnlyDictionary <string, Stat> Load(DatFileIndex source)
        {
            var statsDat = source["Stats.dat"];
            var stats    = new Dictionary <string, Stat>(statsDat.Count);

            foreach (var s in statsDat)
            {
                var id            = s["Id"].Value.ToString();
                var isLocal       = ((bool)s["IsLocal"].Value);
                var mainHandAlias = ((DatRow)s["MainHandAlias_StatsKey"].Value)?["Id"]?.ToString();
                var offHandAlias  = ((DatRow)s["OffHandAlias_StatsKey"].Value)?["Id"]?.ToString();

                stats.Add(id, new Stat(id, isLocal, mainHandAlias, offHandAlias));
            }
            return(stats);
        }
Exemplo n.º 3
0
        private static void Translations()
        {
            var ggpk = new GgpkFileSystem(GgpkPath);

            var file = ggpk.Directories
                       .First(c => c.Name == "Metadata").Directories
                       .First(c => c.Name == "StatDescriptions").Files
                       .First(c => c.Name == "stat_descriptions.txt")
                       .GetStream();

            var datIndex = new DatFileIndex(ggpk,
                                            DetSpecificationIndex.Default);

            var stats = new StatsDatLoader().Load(datIndex);
            var mods  = new ModifiersDatLoader(stats).Load(datIndex);

            var transLoader = new TranslationsLoader(stats);
            var transIndex  = transLoader.Load(file);

            var passiveSkills = datIndex.Where(c => c.Key.ToLower().Contains("tree")).ToList();
        }
Exemplo n.º 4
0
        private static void PsgExtract()
        {
            var sw = Stopwatch.StartNew();

            Console.WriteLine("Reading PassiveSkillGraph.psg...");

            var psgFile       = new DiskFile(@"C:\ggpk3\Metadata\PassiveSkillGraph.psg");
            var diskDirectory = new DiskDirectory(@"C:\ggpk3\Data\");
            var datIndex      = new DatFileIndex(diskDirectory, DetSpecificationIndex.Default);

            var stats       = new StatsDatLoader().Load(datIndex);
            var mods        = new ModifiersDatLoader(stats).Load(datIndex);
            var passiveTree = new SkillTreeLoader(stats, datIndex);

            var psg    = new PsgFile(psgFile);
            var result = passiveTree.Load(psg);

            sw.Stop();

            Console.WriteLine($"Parsed Passive Skill Graph in {sw.ElapsedMilliseconds}ms.\r\n");
            Console.WriteLine($"{psg.Groups.Count} groups, with {psg.Groups.Sum(c => c.Count)} nodes in total");
        }
Exemplo n.º 5
0
        public IReadOnlyDictionary <string, Modifier> Load(DatFileIndex source)
        {
            var modsDat = source["Mods.dat"];
            var numMods = modsDat.Count;

            var dict = new Dictionary <string, Modifier>(numMods);

            for (int i = 0; i < numMods; i++)
            {
                var m = modsDat[i];

                var id            = m["Id"].ToString();
                var name          = m["Name"].ToString();
                var genType       = (GenerationType)m["GenerationType"].Value;
                var domain        = (Domain)m["Domain"].Value;
                var isEssenceOnly = (bool)m["IsEssenceOnlyModifier"].Value;
                var group         = m["CorrectGroup"].Value.ToString();
                var requiredLevel = (int)m["Level"].Value;

                var addsTags = ((List <DatRow>)m["TagsKeys"].Value)
                               .Select(c => c["Id"].Value.ToString()).ToList();

                var statRanges = Enumerable.Range(1, 5)
                                 .Select(x =>
                {
                    var key = ((DatRow)m[$"StatsKey{x}"].Value)?["Id"].Value.ToString();
                    if (key == null)
                    {
                        return(null);
                    }

                    var stat = _stats[key];
                    var min  = (int)m[$"Stat{x}Min"].Value;
                    var max  = (int)m[$"Stat{x}Max"].Value;

                    // Can't recall what this was for. Pending deletion.
                    // var statData = (List<object>)m[$"Data{x}"].Value;

                    return(new ModifierStatValueRange(stat, min, max));
                })
                                 .Where(c => c != null)
                                 .ToList();


                var spawnWeightTags = ((List <DatRow>)m["SpawnWeight_TagsKeys"].Value)
                                      .Select(c => c["Id"].Value.ToString()).ToList();
                var spawnWeightValues = ((List <object>)m["SpawnWeight_Values"].Value)
                                        .Cast <uint>().ToList();

                var spawnWeights = spawnWeightTags
                                   .Zip(spawnWeightValues, (s, v) => new TagWeight(s, (int)v))
                                   .ToList();

                var generationWeightTags = ((List <DatRow>)m["GenerationWeight_TagsKeys"].Value)
                                           .Select(c => c["Id"].Value.ToString()).ToList();
                var generationWeightValues = ((List <object>)m["GenerationWeight_Values"].Value)
                                             .Cast <int>().ToList();

                var generationWeights = generationWeightTags
                                        .Zip(generationWeightValues, (s, v) => new TagWeight(s, (int)v))
                                        .ToList();

                var mod = new Modifier(id, name, domain, genType, isEssenceOnly, group,
                                       requiredLevel, statRanges, addsTags, spawnWeights, generationWeights);

                dict.Add(id, mod);
            }

            return(dict);
        }
Exemplo n.º 6
0
 public SkillTreeLoader(IReadOnlyDictionary <string, Stat> stats,
                        DatFileIndex datIndex)
 {
     _stats    = stats;
     _datIndex = datIndex;
 }
Exemplo n.º 7
0
 public DatJsonTests(ITestOutputHelper output, DatFixture fixture)
 {
     _output       = output;
     _specIndex    = fixture.SpecIndex;
     _datFileIndex = fixture.DatFileIndex;
 }
Exemplo n.º 8
0
 public DatFixture()
 {
     DatFileIndex = new DatFileIndex(
         new DiskDirectory(@"Dats"), SpecIndex);
 }