public static JSONPkg GenerateJSONPkg(ulong key, Dictionary <ulong, Record> map, CASCHandler handler) { if (!map.ContainsKey(key)) { return(new JSONPkg { Name = null }); } STUD stud = new STUD(Util.OpenFile(map[key], handler)); if (stud.Instances == null) { return(new JSONPkg { Name = null }); } if (stud.Instances[0] == null) { return(new JSONPkg { Name = null }); } IInventorySTUDInstance instance = stud.Instances[0] as IInventorySTUDInstance; if (instance == null) { return(new JSONPkg { Name = null }); } JSONPkg pkg = new JSONPkg { }; pkg.Name = Util.GetString(instance.Header.name, map, handler); pkg.Description = ListInventory.GetDescription(instance, map, handler); pkg.Subline = Util.GetString(instance.Header.available_in, map, handler); pkg.Key = key; pkg.Rarity = instance.Header.rarity.ToString(); if (instance is CreditItem) { pkg.Description = $"{(instance as CreditItem).Data.value} Credits"; } else if (instance is PortraitItem) { PortraitItem portrait = instance as PortraitItem; string s = "s"; if (portrait.Data.star == 1) { s = ""; } pkg.Description = $"Tier {portrait.Data.tier} - At least level {(portrait.Data.bracket - 11) * 10 + 1} - {portrait.Data.star} star{s}"; } pkg.Type = instance.Name.ToUpperInvariant(); return(pkg); }
public static void Extract(STUD itemStud, string output, string heroName, string itemName, string itemGroup, Dictionary <ushort, List <ulong> > track, Dictionary <ulong, Record> map, CASCHandler handler, bool quiet, OverToolFlags flags) { string path = string.Format("{0}{1}{2}{1}{3}{1}{5}{1}{4}", output, Path.DirectorySeparatorChar, Util.Strip(Util.SanitizePath(heroName)), Util.SanitizePath(itemStud.Instances[0].Name), Util.SanitizePath(itemName), Util.SanitizePath(itemGroup)); if (itemStud.Instances == null) { return; } PortraitItem item = (PortraitItem)itemStud.Instances[0]; if (item == null) { return; } if (!map.ContainsKey(item.Data.portrait.key)) { return; } if (!File.Exists($"{path} ({item.Data.bracket}).dds")) { Save(item.Data.portrait.key, $"{path} ({item.Data.bracket}).dds", map, quiet, handler); } if (!File.Exists($"{path} Star {item.Data.star}.dds")) { Save(item.Data.portrait2.key, $"{path} Star {item.Data.star}.dds", map, quiet, handler); } }
public void Parse(Dictionary <ushort, List <ulong> > track, Dictionary <ulong, Record> map, CASCHandler handler, bool quiet, OverToolFlags flags) { Dictionary <ulong, JSONPkg> dict = new Dictionary <ulong, JSONPkg>(); foreach (ulong key in track[0xA5]) { if (!map.ContainsKey(key)) { continue; } using (Stream input = Util.OpenFile(map[key], handler)) { if (input == null) { continue; } STUD stud = new STUD(input); if (stud.Instances == null || stud.Instances[0] == null) { continue; } PortraitItem master = stud.Instances[0] as PortraitItem; if (master == null) { continue; } dict[key] = new JSONPkg { LevelModifier = master.Data.bracket, Tier = master.Data.tier, Stars = master.Data.star, MinimumLevel = (master.Data.bracket - 11) * 10 + 1 }; } } if (Path.GetDirectoryName(flags.Positionals[2]).Trim().Length > 0 && !Directory.Exists(Path.GetDirectoryName(flags.Positionals[2]))) { Directory.CreateDirectory(Path.GetDirectoryName(flags.Positionals[2])); } using (Stream file = File.OpenWrite(flags.Positionals[2])) { using (TextWriter writer = new StreamWriter(file)) { writer.Write(JsonConvert.SerializeObject(dict, Formatting.Indented)); } } }
public void Parse(Dictionary <ushort, List <ulong> > track, Dictionary <ulong, Record> map, CASCHandler handler, bool quiet, OverToolFlags flags) { string output = flags.Positionals[2]; foreach (ulong key in track[0x54]) { if (!map.ContainsKey(key)) { continue; } Dictionary <OWRecord, string> items = new Dictionary <OWRecord, string>(); using (Stream input = Util.OpenFile(map[key], handler)) { if (input == null) { continue; } STUD stud = new STUD(input); if (stud.Instances == null || stud.Instances[0] == null) { continue; } GlobalInventoryMaster master = stud.Instances[0] as GlobalInventoryMaster; if (master == null) { continue; } foreach (OWRecord record in master.StandardItems) { items[record] = "ACHIEVEMENT"; } for (int i = 0; i < master.Generic.Length; ++i) { string name = $"STANDARD_{ItemEvents.GetInstance().GetEvent(master.Generic[i].@event)}"; for (int j = 0; j < master.GenericItems[i].Length; ++j) { items[master.GenericItems[i][j]] = name; } } for (int i = 0; i < master.Categories.Length; ++i) { string name = ItemEvents.GetInstance().GetEvent(master.Categories[i].@event); for (int j = 0; j < master.CategoryItems[i].Length; ++j) { items[master.CategoryItems[i][j]] = name; } } for (int i = 0; i < master.ExclusiveOffsets.Length; ++i) { string name = $"LOOTBOX_EXCLUSIVE_{i:X}"; for (int j = 0; j < master.LootboxExclusive[i].Length; ++j) { items[master.LootboxExclusive[i][j].item] = name; } } } foreach (KeyValuePair <OWRecord, string> recordname in items) { OWRecord record = recordname.Key; string itemGroup = recordname.Value; if (!map.ContainsKey(record.key)) { continue; } STUD stud = new STUD(Util.OpenFile(map[record.key], handler)); if (stud.Instances == null) { continue; } IInventorySTUDInstance instance = (IInventorySTUDInstance)stud.Instances[0]; string name = Util.GetString(instance.Header.name.key, map, handler); if (name == null) { name = $"{GUID.LongKey(key):X12}"; } switch (instance.Name) { case "Spray": Console.Out.WriteLine("Extracting spray {0}...", name); ExtractLogic.Spray.Extract(stud, output, "Generic", name, itemGroup, track, map, handler, quiet, flags); break; case "Icon": Console.Out.WriteLine("Extracting icon {0}...", name); ExtractLogic.Icon.Extract(stud, output, "Generic", name, itemGroup, track, map, handler, quiet, flags); break; case "Portrait": PortraitItem portrait = instance as PortraitItem; ExtractLogic.Portrait.Extract(stud, output, "Generic", $"Tier {portrait.Data.tier}", itemGroup, track, map, handler, quiet, flags); break; default: continue; } } } }