private static void Go(Engine engine) { var ozPlayerFlagDefinitionClass = engine.GetClass("WillowGame.OzPlayerFlagDefinition"); if (ozPlayerFlagDefinitionClass == null) { throw new InvalidOperationException(); } var ozPlayerFlagDefinitions = engine.Objects .Where(o => o.IsA(ozPlayerFlagDefinitionClass) && o.GetName().StartsWith("Default__") == false) .OrderBy(o => o.GetPath()); using (var writer = Dataminer.NewDump("Player Flags.json")) { writer.WriteStartObject(); foreach (dynamic ozPlayerFlagDefinition in ozPlayerFlagDefinitions) { writer.WritePropertyName(ozPlayerFlagDefinition.GetPath()); writer.WriteValue((int)ozPlayerFlagDefinition.HashValue); } writer.WriteEndObject(); writer.Flush(); } }
private static void Go(Engine engine) { var creditsGfxDefinitionClass = engine.GetClass("WillowGame.CreditsGFxDefinition"); if (creditsGfxDefinitionClass == null) { throw new InvalidOperationException(); } dynamic creditsGfxDefinition = engine.Objects.FirstOrDefault( o => o.IsA(creditsGfxDefinitionClass) && o.GetName().StartsWith("Default__") == false); if (creditsGfxDefinition == null) { Console.WriteLine("Credits object is missing."); return; } using (var writer = Dataminer.NewDump("Credits.json")) { writer.WriteStartArray(); foreach (var line in creditsGfxDefinition.CreditData) { writer.WriteValue(line.Text); } writer.WriteEndArray(); writer.Flush(); } }
private static void Go(Engine engine) { var currencyPresentationClass = engine.GetClass("WillowGame.CurrencyListDefinition.CurrencyPresentation"); if (currencyPresentationClass == null) { throw new InvalidOperationException(); } var currencyPresentations = engine.Objects .Where(o => o.IsA(currencyPresentationClass) && o.GetName().StartsWith("Default__") == false) .OrderBy(o => o.GetPath()); using (var writer = Dataminer.NewDump("Currencies.json")) { writer.WriteStartObject(); foreach (dynamic currencyPresentation in currencyPresentations) { writer.WritePropertyName(currencyPresentation.GetPath()); writer.WriteStartObject(); writer.WritePropertyName("type"); writer.WriteValue(currencyPresentation.Type); writer.WritePropertyName("widget_frame"); writer.WriteValue(currencyPresentation.WidgetFrame); writer.WriteEndObject(); } writer.WriteEndObject(); } }
private static void Go(Engine engine) { var missionDefinitionClass = engine.GetClass("WillowGame.MissionDefinition"); if (missionDefinitionClass == null) { throw new InvalidOperationException(); } using (var writer = Dataminer.NewDump("Missions.json")) { writer.WriteStartObject(); var missionDefinitions = engine.Objects .Where(o => o.IsA(missionDefinitionClass) && o.GetName().StartsWith("Default__") == false) .OrderBy(o => o.GetPath()); foreach (dynamic missionDefinition in missionDefinitions) { writer.WritePropertyName(missionDefinition.GetPath()); writer.WriteStartObject(); writer.WritePropertyName("number"); writer.WriteValue(missionDefinition.MissionNumber); string missionName = missionDefinition.MissionName; if (string.IsNullOrEmpty(missionName) == false) { writer.WritePropertyName("name"); writer.WriteValue(missionName); } string missionDescription = missionDefinition.MissionDescription; if (string.IsNullOrEmpty(missionDescription) == false) { writer.WritePropertyName("description"); writer.WriteValue(missionDescription); } writer.WritePropertyName("is_plot_critical"); writer.WriteValue(missionDefinition.bPlotCritical); writer.WritePropertyName("can_be_failed"); writer.WriteValue(missionDefinition.bCanBeFailed); // TODO: objective info writer.WriteEndObject(); } writer.WriteEndObject(); writer.Flush(); } }
private static void Go(Engine engine) { var playerClassDefinitionClass = engine.GetClass("WillowGame.PlayerClassDefinition"); if (playerClassDefinitionClass == null) { throw new InvalidOperationException(); } var playerClassIdentifierDefinitionClass = engine.GetClass("WillowGame.PlayerClassIdentifierDefinition"); if (playerClassIdentifierDefinitionClass == null) { throw new InvalidOperationException(); } using (var writer = Dataminer.NewDump("Player Classes.json")) { writer.WriteStartObject(); var playerClassDefinitionClasses = engine.Objects .Where(o => o.IsA(playerClassDefinitionClass) && o.GetName().StartsWith("Default__") == false) .OrderBy(o => o.GetPath()); foreach (dynamic playerClassDefinition in playerClassDefinitionClasses) { writer.WritePropertyName(playerClassDefinition.GetPath()); writer.WriteStartObject(); var characterNameId = playerClassDefinition.CharacterNameId; if (characterNameId == null) { throw new InvalidOperationException(); } var characterClassId = characterNameId.CharacterClassId; if (characterClassId == null) { throw new InvalidOperationException(); } writer.WritePropertyName("name"); writer.WriteValue(characterNameId.LocalizedCharacterName); writer.WritePropertyName("class"); writer.WriteValue(characterClassId.LocalizedClassNameNonCaps); writer.WritePropertyName("sort_order"); writer.WriteValue(characterNameId.UISortOrder); if (characterClassId.DlcCharacterDef != null) { writer.WritePropertyName("dlc"); writer.WriteValue(characterClassId.DlcCharacterDef.GetPath()); } //DumpDefaultSaveGame(writer, playerClassDefinition.CharacterNameId.DefaultSaveGame); writer.WriteEndObject(); } writer.WriteEndObject(); writer.Flush(); } }
private static void Go(Engine engine) { var inventoryBalanceClass = engine.GetClass("WillowGame.InventoryBalanceDefinition"); var weaponBalanceClass = engine.GetClass("WillowGame.WeaponBalanceDefinition"); var missionWeaponBalanceClass = engine.GetClass("WillowGame.MissionWeaponBalanceDefinition"); var itemBalanceClass = engine.GetClass("WillowGame.ItemBalanceDefinition"); var classModBalanceClass = engine.GetClass("WillowGame.ClassModBalanceDefinition"); var itemClass = engine.GetClass("WillowGame.ItemDefinition"); if (inventoryBalanceClass == null || weaponBalanceClass == null || missionWeaponBalanceClass == null || itemBalanceClass == null || classModBalanceClass == null || itemClass == null) { throw new InvalidOperationException(); } var weaponBalancePartLists = new List <KeyValuePair <string, dynamic> >(); using (var writer = Dataminer.NewDump("Weapon Balance.json")) { writer.WriteStartObject(); var balances = engine.Objects .Where(o => (o.IsA(inventoryBalanceClass) || o.IsA(weaponBalanceClass)) && o.GetName().StartsWith("Default__") == false) .OrderBy(o => o.GetPath()); foreach (dynamic balance in balances) { var type = GetBalanceType(balance); if (type == null) { throw new InvalidOperationException(); } var typeClassPath = type.GetClass().Path; if (typeClassPath == "WillowGame.UsableItemDefinition" || typeClassPath == "WillowGame.ArtifactDefinition" || typeClassPath == "WillowGame.UsableCustomizationItemDefinition" || typeClassPath == "WillowGame.ClassModDefinition" || typeClassPath == "WillowGame.GrenadeModDefinition" || typeClassPath == "WillowGame.ShieldDefinition" || typeClassPath == "WillowGame.MissionItemDefinition" || typeClassPath == "WillowGame.CrossDLCClassModDefinition") { continue; } if (typeClassPath != "WillowGame.WeaponTypeDefinition") { throw new InvalidOperationException(); } var balancePath = (string)balance.GetPath(); writer.WritePropertyName(balancePath); writer.WriteStartObject(); var baseBalance = balance.BaseDefinition; if (baseBalance != null) { writer.WritePropertyName("base"); writer.WriteValue(baseBalance.GetPath()); } var typePath = (string)balance.InventoryDefinition?.GetPath(); var baseTypePath = (string)balance.BaseDefinition?.InventoryDefinition?.GetPath(); if (typePath != null && (baseTypePath == null || typePath != baseTypePath)) { writer.WritePropertyName("weapon_type"); writer.WriteValue(typePath); } var manufacturers = balance.Manufacturers; if (manufacturers != null && manufacturers.Length > 0) { writer.WritePropertyName("manufacturers"); writer.WriteStartArray(); foreach (var manufacturer in ((IEnumerable <dynamic>)manufacturers) .Where(imbd => imbd.Manufacturer != null) .OrderBy(imbd => imbd.Manufacturer.GetPath())) { writer.WriteValue(manufacturer.Manufacturer.GetPath()); } writer.WriteEndArray(); } if (balance.PartListCollection != null) { throw new NotSupportedException(); } if (balance.GetClass() != weaponBalanceClass) { goto after; } var weaponPartList = balance.WeaponPartListCollection; if (weaponPartList == null) { throw new InvalidOperationException(); } var runtimePartList = balance.RuntimePartListCollection; if (runtimePartList == null) { throw new InvalidOperationException(); } var weaponPartListPath = (string)weaponPartList.GetPath(); weaponBalancePartLists.Add(new KeyValuePair <string, dynamic>(weaponPartListPath, balance)); writer.WritePropertyName("parts"); writer.WriteValue(weaponPartListPath); after: writer.WriteEndObject(); } writer.WriteEndObject(); } using (var writer = Dataminer.NewDump("Weapon Balance Part Lists.json")) { writer.WriteStartObject(); foreach (var kv in weaponBalancePartLists) { var partListPath = kv.Key; var balance = kv.Value; var partList = balance.RuntimePartListCollection; var baseBalance = balance.BaseDefinition; var basePartList = baseBalance == null ? null : baseBalance.RuntimePartListCollection; PartReplacementMode?mode = null; var bodyPartData = BuildPartList(partList.BodyPartData, basePartList?.BodyPartData, ref mode); var gripPartData = BuildPartList(partList.GripPartData, basePartList?.GripPartData, ref mode); var barrelPartData = BuildPartList(partList.BarrelPartData, basePartList?.BarrelPartData, ref mode); var sightPartData = BuildPartList(partList.SightPartData, basePartList?.SightPartData, ref mode); var stockPartData = BuildPartList(partList.StockPartData, basePartList?.StockPartData, ref mode); var elementalPartData = BuildPartList(partList.ElementalPartData, basePartList?.ElementalPartData, ref mode); var accessory1PartData = BuildPartList(partList.Accessory1PartData, basePartList?.Accessory1PartData, ref mode); var accessory2PartData = BuildPartList(partList.Accessory2PartData, basePartList?.Accessory2PartData, ref mode); var materialPartData = BuildPartList(partList.MaterialPartData, basePartList?.MaterialPartData, ref mode); if (mode == null) { throw new InvalidOperationException(); } writer.WritePropertyName(partListPath); writer.WriteStartObject(); writer.WritePropertyName("mode"); writer.WriteValue(mode.ToString()); var associatedWeaponTypePath = (string)partList.AssociatedWeaponType?.GetPath(); var baseAssociatedWeaponTypePath = (string)basePartList?.AssociatedWeaponType?.GetPath(); if (associatedWeaponTypePath != null && (baseAssociatedWeaponTypePath == null || associatedWeaponTypePath != baseAssociatedWeaponTypePath)) { writer.WritePropertyName("weapon_type"); writer.WriteValue(associatedWeaponTypePath); } WriteStrings(writer, "body", bodyPartData); WriteStrings(writer, "grip", gripPartData); WriteStrings(writer, "barrel", barrelPartData); WriteStrings(writer, "sight", sightPartData); WriteStrings(writer, "stock", stockPartData); WriteStrings(writer, "elemental", elementalPartData); WriteStrings(writer, "accessory1", accessory1PartData); WriteStrings(writer, "accessory2", accessory2PartData); WriteStrings(writer, "material", materialPartData); writer.WriteEndObject(); } writer.WriteEndObject(); } var itemBalancePartLists = new List <KeyValuePair <string, dynamic> >(); using (var writer = Dataminer.NewDump("Item Balance.json")) { writer.WriteStartObject(); var balances = engine.Objects .Where(o => (o.IsA(inventoryBalanceClass) == true || o.IsA(itemBalanceClass) == true || o.IsA(classModBalanceClass) == true) && o.GetName().StartsWith("Default__") == false) .OrderBy(o => o.GetPath()); foreach (dynamic balance in balances) { var balanceClass = balance.GetClass(); if (balanceClass == inventoryBalanceClass) { var type = GetBalanceType(balance); if (type == null) { throw new InvalidOperationException(); } var typeClassPath = type.GetClass().Path; if (typeClassPath == "WillowGame.WeaponTypeDefinition") { continue; } } var balancePath = (string)balance.GetPath(); writer.WritePropertyName(balancePath); writer.WriteStartObject(); var baseBalance = balance.BaseDefinition; if (baseBalance != null) { writer.WritePropertyName("base"); writer.WriteValue(baseBalance.GetPath()); } var itemPath = (string)balance.InventoryDefinition?.GetPath(); var baseItemPath = (string)balance.BaseDefinition?.InventoryDefinition?.GetPath(); if (itemPath != null && (baseItemPath == null || itemPath != baseItemPath)) { writer.WritePropertyName("item"); writer.WriteValue(itemPath); } if (balanceClass == classModBalanceClass && balance.ClassModDefinitions.Length > 0) { dynamic[] classMods = balance.ClassModDefinitions; writer.WritePropertyName("items"); writer.WriteStartArray(); foreach (var classMod in classMods.OrderBy(cmd => cmd.GetPath())) { writer.WriteValue(classMod.GetPath()); } writer.WriteEndArray(); } var manufacturers = balance.Manufacturers; if (manufacturers != null && manufacturers.Length > 0) { writer.WritePropertyName("manufacturers"); writer.WriteStartArray(); foreach (var manufacturer in ((IEnumerable <dynamic>)manufacturers) .Where(imbd => imbd.Manufacturer != null) .OrderBy(imbd => imbd.Manufacturer.GetPath())) { writer.WriteValue(manufacturer.Manufacturer.GetPath()); } writer.WriteEndArray(); } dynamic itemPartList; string itemPartListPath = null; if (balanceClass == inventoryBalanceClass) { itemPartList = balance.PartListCollection; if (itemPartList != null) { itemPartListPath = (string)itemPartList.GetPath(); } } else { if (balance.PartListCollection != null) { throw new InvalidOperationException(); } if (balance.ItemPartListCollection == null) { throw new InvalidOperationException(); } itemPartList = balance.RuntimePartListCollection; if (itemPartList == null) { throw new InvalidOperationException(); } itemPartListPath = (string)balance.ItemPartListCollection.GetPath(); } if (itemPartList != null) { itemBalancePartLists.Add(new KeyValuePair <string, dynamic>(itemPartListPath, balance)); writer.WritePropertyName("parts"); writer.WriteValue(itemPartListPath); } writer.WriteEndObject(); } writer.WriteEndObject(); } using (var writer = Dataminer.NewDump("Item Balance Part Lists.json")) { writer.WriteStartObject(); foreach (var kv in itemBalancePartLists) { var partListPath = kv.Key; var balance = kv.Value; var balanceClass = balance.GetClass(); var baseBalance = balance.BaseDefinition; PartReplacementMode?mode; dynamic partList; if (balanceClass == inventoryBalanceClass) { partList = balance.PartListCollection; if (partList == null) { throw new InvalidOperationException(); } mode = (PartReplacementMode)partList.PartReplacementMode; } else { if (balance.PartListCollection != null) { throw new InvalidOperationException(); } if (balance.ItemPartListCollection == null) { throw new InvalidOperationException(); } partList = balance.RuntimePartListCollection; if (partList == null) { throw new InvalidOperationException(); } mode = (PartReplacementMode)partList.PartReplacementMode; } if (partList.GetClass().Path != "WillowGame.ItemPartListCollectionDefinition") { throw new InvalidOperationException(); } var basePartList = baseBalance == null || baseBalance.GetClass() == inventoryBalanceClass ? null : baseBalance.RuntimePartListCollection; List <string> alphaPartData, betaPartData, gammaPartData, deltaPartData, epsilonPartData, zetaPartData, etaPartData, thetaPartData, materialPartData; if (basePartList == null) { var associatedItem = partList.AssociatedItem; alphaPartData = BuildPartList(partList.AlphaPartData, associatedItem?.AlphaParts, ref mode); betaPartData = BuildPartList(partList.BetaPartData, associatedItem?.BetaParts, ref mode); gammaPartData = BuildPartList(partList.GammaPartData, associatedItem?.GammaParts, ref mode); deltaPartData = BuildPartList(partList.DeltaPartData, associatedItem?.DeltaParts, ref mode); epsilonPartData = BuildPartList(partList.EpsilonPartData, associatedItem?.EpsilonParts, ref mode); zetaPartData = BuildPartList(partList.ZetaPartData, associatedItem?.ZetaParts, ref mode); etaPartData = BuildPartList(partList.EtaPartData, associatedItem?.EtaParts, ref mode); thetaPartData = BuildPartList(partList.ThetaPartData, associatedItem?.ThetaParts, ref mode); materialPartData = BuildPartList(partList.MaterialPartData, associatedItem?.MaterialParts, ref mode); } else { alphaPartData = BuildPartList(partList.AlphaPartData, basePartList?.AlphaPartData, ref mode); betaPartData = BuildPartList(partList.BetaPartData, basePartList?.BetaPartData, ref mode); gammaPartData = BuildPartList(partList.GammaPartData, basePartList?.GammaPartData, ref mode); deltaPartData = BuildPartList(partList.DeltaPartData, basePartList?.DeltaPartData, ref mode); epsilonPartData = BuildPartList(partList.EpsilonPartData, basePartList?.EpsilonPartData, ref mode); zetaPartData = BuildPartList(partList.ZetaPartData, basePartList?.ZetaPartData, ref mode); etaPartData = BuildPartList(partList.EtaPartData, basePartList?.EtaPartData, ref mode); thetaPartData = BuildPartList(partList.ThetaPartData, basePartList?.ThetaPartData, ref mode); materialPartData = BuildPartList(partList.MaterialPartData, basePartList?.MaterialPartData, ref mode); } if (mode == null) { mode = PartReplacementMode.Additive; } writer.WritePropertyName(partListPath); writer.WriteStartObject(); writer.WritePropertyName("mode"); writer.WriteValue(mode.ToString()); var associatedItemPath = (string)partList.AssociatedItem?.GetPath(); var baseAssociatedItemPath = (string)basePartList?.AssociatedItem?.GetPath(); if (associatedItemPath != null && (baseAssociatedItemPath == null || associatedItemPath != baseAssociatedItemPath)) { writer.WritePropertyName("item"); writer.WriteValue(associatedItemPath); } WriteStrings(writer, "alpha", alphaPartData); WriteStrings(writer, "beta", betaPartData); WriteStrings(writer, "gamma", gammaPartData); WriteStrings(writer, "delta", deltaPartData); WriteStrings(writer, "epsilon", epsilonPartData); WriteStrings(writer, "zeta", zetaPartData); WriteStrings(writer, "eta", etaPartData); WriteStrings(writer, "theta", thetaPartData); WriteStrings(writer, "material", materialPartData); writer.WriteEndObject(); } writer.WriteEndObject(); } }
private static void Go(Engine engine) { var developerPerksDefinitionClass = engine.GetClass("WillowGame.DeveloperPerksDefinition"); if (developerPerksDefinitionClass == null) { throw new InvalidOperationException(); } dynamic developerPerks = engine.Objects .FirstOrDefault(o => o.IsA(developerPerksDefinitionClass) && o.GetName().StartsWith("Default__") == false); if (developerPerks == null) { throw new InvalidOperationException(); } using (var writer = Dataminer.NewDump("Developer Perks.json")) { writer.WriteStartObject(); writer.WritePropertyName("developers"); writer.WriteStartArray(); foreach (var developerInfo in developerPerks.DeveloperInfo) { writer.WriteStartObject(); writer.WritePropertyName("gamertag"); writer.WriteValue(developerInfo.Gamertag); writer.WritePropertyName("unique_id"); writer.WriteValue(developerInfo.UniqueId); writer.WritePropertyName("platform"); writer.WriteValue(((DeveloperPerksPlatforms)developerInfo.Platform).ToString()); if (developerInfo.UnlocksGamerpics != null && developerInfo.UnlocksGamerpics.Length > 0) { writer.WritePropertyName("unlock_gamerpics"); writer.WriteStartArray(); foreach (var b in developerInfo.UnlocksGamerpics) { writer.WriteValue((byte)b); } writer.WriteEnd(); } writer.WritePropertyName("eligible_for_gearbox_customizations"); writer.WriteValue(developerInfo.bEligibleForGearboxCustomizations); writer.WriteEndObject(); } writer.WriteEndArray(); writer.WritePropertyName("perks"); writer.WriteStartArray(); foreach (var perkInfo in developerPerks.PerkInfo) { writer.WriteStartObject(); writer.WritePropertyName("button_chain"); writer.WriteStartArray(); foreach (var button in perkInfo.ButtonChain) { writer.WriteValue(button); } writer.WriteEndArray(); writer.WritePropertyName("command"); writer.WriteValue(perkInfo.Command); writer.WritePropertyName("must_be_developer"); writer.WriteValue(perkInfo.bMustBeDeveloper); writer.WriteEndObject(); } writer.WriteEndArray(); writer.WritePropertyName("developer_customization_unlocks"); writer.WriteStartArray(); foreach (var developerCustomizationUnlock in developerPerks.DeveloperCustomizationUnlocks) { if (developerCustomizationUnlock != null) { writer.WriteValue(developerCustomizationUnlock.GetPath()); } } writer.WriteEndArray(); writer.WriteEndObject(); writer.Flush(); } }
private static void Go(Engine engine) { var managerClass = engine.GetClass("WillowGame.WillowDownloadableContentManager"); var packageClass = engine.GetClass("WillowGame.DownloadablePackageDefinition"); if (managerClass == null || packageClass == null) { throw new InvalidOperationException(); } var managers = engine.Objects .Where(o => o.IsA(managerClass) && o.GetName().StartsWith("Default__") == false) .OrderBy(o => o.GetPath()) .ToArray(); if (managers.Length != 1) { throw new InvalidOperationException(); } dynamic manager = managers.First(); using (var writer = Dataminer.NewDump("Downloadable Contents.json")) { writer.WriteStartObject(); var allContent = manager.AllContent; foreach (var content in ((IEnumerable <dynamic>)allContent) .OrderBy(c => c.PackageDef.PackageId) .ThenBy(c => c.ContentId)) { writer.WritePropertyName(content.GetPath()); writer.WriteStartObject(); UnrealClass uclass = content.GetClass(); if (uclass.Path != "WillowGame.DownloadableExpansionDefinition" && uclass.Path != "WillowGame.DownloadableCustomizationSetDefinition" && uclass.Path != "WillowGame.DownloadableItemSetDefinition" && uclass.Path != "WillowGame.DownloadableVehicleDefinition" && uclass.Path != "WillowGame.DownloadableCharacterDefinition" && uclass.Path != "WillowGame.DownloadableBalanceModifierDefinition") { throw new NotSupportedException(); } writer.WritePropertyName("id"); writer.WriteValue(content.ContentId); writer.WritePropertyName("name"); writer.WriteValue(content.ContentDisplayName); if (content.PackageDef == null) { throw new InvalidOperationException(); } writer.WritePropertyName("package"); writer.WriteValue(content.PackageDef.GetPath()); writer.WritePropertyName("type"); writer.WriteValue(_ContentTypeMapping[uclass.Path]); writer.WriteEndObject(); } writer.WriteEndObject(); writer.Flush(); } using (var writer = Dataminer.NewDump("Downloadable Packages.json")) { writer.WriteStartObject(); var packages = engine.Objects .Where(o => o.IsA(packageClass) && o.GetName().StartsWith("Default__") == false) .Cast <dynamic>() .OrderBy(o => o.PackageId); foreach (dynamic package in packages) { writer.WritePropertyName(package.GetPath()); writer.WriteStartObject(); writer.WritePropertyName("id"); writer.WriteValue(package.PackageId); writer.WritePropertyName("dlc_name"); writer.WriteValue(package.DLCName); writer.WritePropertyName("display_name"); writer.WriteValue(package.PackageDisplayName); writer.WriteEndObject(); } writer.WriteEndObject(); writer.Flush(); } }
private static void Go(Engine engine) { var customizationDefinitionClass = engine.GetClass("WillowGame.CustomizationDefinition"); if (customizationDefinitionClass == null) { throw new InvalidOperationException(); } using (var writer = Dataminer.NewDump("Customizations.json")) { writer.WriteStartObject(); var customizationDefinitions = engine.Objects .Where(o => o.IsA(customizationDefinitionClass) && o.GetName().StartsWith("Default__") == false) .OrderBy(o => o.GetPath()); foreach (dynamic customizationDefinition in customizationDefinitions) { writer.WritePropertyName(customizationDefinition.GetPath()); writer.WriteStartObject(); string customizationName = customizationDefinition.CustomizationName; if (customizationName == null) { throw new InvalidOperationException(); } writer.WritePropertyName("name"); writer.WriteValue(customizationName); UnrealClass customizationType = customizationDefinition.CustomizationType; if (customizationType == null) { throw new InvalidOperationException(); } if (_TypeMapping.ContainsKey(customizationType.Path) == false) { throw new NotSupportedException(); } writer.WritePropertyName("type"); writer.WriteValue(_TypeMapping[customizationType.Path]); var usageFlags = ((IEnumerable <UnrealClass>)customizationDefinition.UsageFlags).ToArray(); if (usageFlags.Length > 0) { writer.WritePropertyName("usage"); writer.WriteStartArray(); foreach (var usageFlag in usageFlags.OrderBy(uf => uf.Path)) { if (_UsageFlagMapping.ContainsKey(usageFlag.Path) == false) { throw new NotSupportedException(); } writer.WriteValue(_UsageFlagMapping[usageFlag.Path]); } writer.WriteEndArray(); } var otherUsageFlags = customizationDefinition.OtherUsageFlags; if (otherUsageFlags.Length > 0) { throw new NotSupportedException(); } string customizationDataName = customizationDefinition.CustomizationDataName; if (customizationDataName == null) { throw new InvalidOperationException(); } writer.WritePropertyName("data_name"); writer.WriteValue(customizationDataName); var primarySort = (byte)customizationDefinition.PrimarySort; writer.WritePropertyName("primary_sort"); writer.WriteValue(primarySort); var secondarySort = (byte)customizationDefinition.SecondarySort; writer.WritePropertyName("secondary_sort"); writer.WriteValue(secondarySort); var dlcCustomizationSet = customizationDefinition.DlcCustomizationSetDef; if (dlcCustomizationSet != null) { writer.WritePropertyName("dlc"); writer.WriteValue(dlcCustomizationSet.GetPath()); } writer.WriteEndObject(); } writer.WriteEndObject(); writer.Flush(); } }
private static void Go(Engine engine) { var skillDefinitionClass = engine.GetClass("WillowGame.SkillDefinition"); if (skillDefinitionClass == null) { throw new InvalidOperationException(); } var skillDefinitions = engine.Objects .Where(o => o.IsA(skillDefinitionClass) && o.GetName().StartsWith("Default__") == false) .OrderBy(o => o.GetPath()); using (var writer = Dataminer.NewDump("Skills.json")) { writer.WriteStartObject(); foreach (dynamic skillDefinition in skillDefinitions) { writer.WritePropertyName(skillDefinition.GetPath()); writer.WriteStartObject(); if (string.IsNullOrEmpty(skillDefinition.SkillName) == false) { writer.WritePropertyName("name"); writer.WriteValue(skillDefinition.SkillName); } if (string.IsNullOrEmpty(skillDefinition.SkillDescription) == false) { writer.WritePropertyName("description"); writer.WriteValue(skillDefinition.SkillDescription); } /* * if (skillDefinition.SkillClass != null) * { * writer.WritePropertyName("class"); * writer.WriteValue(skillDefinition.SkillClass.Path); * } */ writer.WritePropertyName("default_starting_grade"); writer.WriteValue(skillDefinition.DefaultStartingGrade); writer.WritePropertyName("max_grade"); writer.WriteValue(skillDefinition.MaxGrade); writer.WritePropertyName("player_level_requirement"); writer.WriteValue(skillDefinition.PlayerLevelRequirement); if (string.IsNullOrEmpty(skillDefinition.SkillIconTextureName) == false) { writer.WritePropertyName("icon_texture_name"); writer.WriteValue(skillDefinition.SkillIconTextureName); } writer.WriteEndObject(); } writer.WriteEndObject(); writer.Flush(); } }
private static void Go(Engine engine) { var weaponPartDefinitionClass = engine.GetClass("WillowGame.WeaponPartDefinition"); var itemPartDefinitionClass = engine.GetClass("WillowGame.ItemPartDefinition"); var artifactPartDefinitionClass = engine.GetClass("WillowGame.ArtifactPartDefinition"); var classModPartDefinitionClass = engine.GetClass("WillowGame.ClassModPartDefinition"); var equipableItemPartDefinitionClass = engine.GetClass("WillowGame.EquipableItemPartDefinition"); var grenadeModPartDefinitionClass = engine.GetClass("WillowGame.GrenadeModPartDefinition"); var missionItemPartDefinitionClass = engine.GetClass("WillowGame.MissionItemPartDefinition"); var shieldPartDefinitionClass = engine.GetClass("WillowGame.ShieldPartDefinition"); var usableItemPartDefinitionClass = engine.GetClass("WillowGame.UsableItemPartDefinition"); if (weaponPartDefinitionClass == null || itemPartDefinitionClass == null || artifactPartDefinitionClass == null || classModPartDefinitionClass == null || equipableItemPartDefinitionClass == null || grenadeModPartDefinitionClass == null || missionItemPartDefinitionClass == null || shieldPartDefinitionClass == null || usableItemPartDefinitionClass == null) { throw new InvalidOperationException(); } var weaponNamePartDefinitionClass = engine.GetClass("WillowGame.WeaponNamePartDefinition"); var itemNamePartDefinitionClass = engine.GetClass("WillowGame.ItemNamePartDefinition"); if (weaponNamePartDefinitionClass == null || itemNamePartDefinitionClass == null) { throw new InvalidOperationException(); } var weaponParts = engine.Objects .Where(o => o.IsA(weaponPartDefinitionClass) == true && o.GetName().StartsWith("Default__") == false) .Distinct() .OrderBy(o => o.GetPath()); using (var writer = Dataminer.NewDump("Weapon Parts.json")) { writer.WriteStartObject(); foreach (dynamic weaponPart in weaponParts) { UnrealClass uclass = weaponPart.GetClass(); if (uclass != weaponPartDefinitionClass) { throw new InvalidOperationException(); } writer.WritePropertyName(weaponPart.GetPath()); writer.WriteStartObject(); if (weaponPart.TitleList != null && weaponPart.TitleList.Length > 0) { writer.WritePropertyName("titles"); writer.WriteStartArray(); IEnumerable <dynamic> titleList = weaponPart.TitleList; foreach (var title in titleList .Where(tp => tp != null) .OrderBy(tp => tp.GetPath())) { writer.WriteValue(title.GetPath()); } writer.WriteEndArray(); } if (weaponPart.PrefixList != null && weaponPart.PrefixList.Length > 0) { writer.WritePropertyName("prefixes"); writer.WriteStartArray(); IEnumerable <dynamic> prefixList = weaponPart.PrefixList; foreach (var prefix in prefixList .Where(pp => pp != null) .OrderBy(pp => pp.GetPath())) { writer.WriteValue(prefix.GetPath()); } writer.WriteEndArray(); } var partType = (WeaponPartType)weaponPart.PartType; writer.WritePropertyName("type"); if (partType != WeaponPartType.Invalid11) { writer.WriteValue(partType.ToString()); } else { writer.WriteValue("Invalid"); } writer.WriteEndObject(); } writer.WriteEndObject(); } var weaponNameParts = engine.Objects .Where(o => o.IsA(weaponNamePartDefinitionClass) == true && o.GetName().StartsWith("Default__") == false) .Distinct() .OrderBy(o => o.GetPath()); using (var writer = Dataminer.NewDump("Weapon Name Parts.json")) { writer.WriteStartObject(); foreach (dynamic weaponNamePart in weaponNameParts) { UnrealClass uclass = weaponNamePart.GetClass(); if (uclass != weaponNamePartDefinitionClass) { throw new InvalidOperationException(); } writer.WritePropertyName(weaponNamePart.GetPath()); writer.WriteStartObject(); if (weaponNamePart.AttributeSlotEffects != null && weaponNamePart.AttributeSlotEffects.Length > 0) { throw new InvalidOperationException(); } if (weaponNamePart.AttributeSlotUpgrades != null && weaponNamePart.AttributeSlotUpgrades.Length > 0) { throw new InvalidOperationException(); } if (weaponNamePart.ExternalAttributeEffects != null && weaponNamePart.ExternalAttributeEffects.Length > 0) { IEnumerable <dynamic> externalAttributeEffects = weaponNamePart.ExternalAttributeEffects; foreach (var externalAttributeEffect in externalAttributeEffects) { if (externalAttributeEffect.AttributeToModify != null) { var attributeToModifyPath = externalAttributeEffect.AttributeToModify.GetPath(); if (attributeToModifyPath != "GD_Shields.Attributes.Attr_LawEquipped") { throw new InvalidOperationException(); } } } } if (weaponNamePart.WeaponAttributeEffects != null && weaponNamePart.WeaponAttributeEffects.Length > 0) { throw new InvalidOperationException(); } if (weaponNamePart.ZoomExternalAttributeEffects != null && weaponNamePart.ZoomExternalAttributeEffects.Length > 0) { throw new InvalidOperationException(); } if (weaponNamePart.ZoomWeaponAttributeEffects != null && weaponNamePart.ZoomWeaponAttributeEffects.Length > 0) { throw new InvalidOperationException(); } if (weaponNamePart.WeaponCardAttributes != null && weaponNamePart.WeaponCardAttributes.Length > 0) { throw new InvalidOperationException(); } if (weaponNamePart.CustomPresentations != null && weaponNamePart.CustomPresentations.Length > 0) { IEnumerable <dynamic> customPresentations = weaponNamePart.CustomPresentations; foreach (var customPresentation in customPresentations) { if (string.IsNullOrEmpty((string)customPresentation.Suffix) == false) { throw new InvalidOperationException(); } if (string.IsNullOrEmpty((string)customPresentation.Prefix) == false) { throw new InvalidOperationException(); } } } if (weaponNamePart.TitleList != null && weaponNamePart.TitleList.Length > 0) { throw new InvalidOperationException(); } if (weaponNamePart.PrefixList != null && weaponNamePart.PrefixList.Length > 0) { throw new InvalidOperationException(); } var type = (WeaponPartType)weaponNamePart.PartType; if (type != WeaponPartType.Body) { throw new InvalidOperationException(); } if ((bool)weaponNamePart.bNameIsUnique != false) { writer.WritePropertyName("unique"); writer.WriteValue((bool)weaponNamePart.bNameIsUnique); } string partName = weaponNamePart.PartName; if (string.IsNullOrEmpty(partName) == false) { writer.WritePropertyName("name"); writer.WriteValue(partName); } if (weaponNamePart.Expressions != null && weaponNamePart.Expressions.Length > 0) { /* * writer.WritePropertyName("expressions"); * writer.WriteStartArray(); * * foreach (var expression in weaponNamePart.Expressions) * { * writer.WriteStartObject(); * * if (expression.AttributeOperand1 != null) * { * writer.WritePropertyName("operand1_attribute"); * writer.WriteValue(expression.AttributeOperand1.GetPath()); * } * * var comparisonOperator = (ComparisonOperator)expression.ComparisonOperator; * writer.WritePropertyName("comparison_operator"); * writer.WriteValue(comparisonOperator.ToString()); * * var operand2Usage = (OperandUsage)expression.Operand2Usage; * writer.WritePropertyName("operand2_usage"); * writer.WriteValue(operand2Usage.ToString()); * * if (expression.AttributeOperand2 != null) * { * writer.WritePropertyName("operand2_attribute"); * writer.WriteValue(expression.AttributeOperand2.GetPath()); * } * * float constantOperand2 = expression.ConstantOperand2; * if (constantOperand2.Equals(0.0f) == false) * { * writer.WritePropertyName("operand2_constant"); * writer.WriteValue(constantOperand2); * } * * writer.WriteEndObject(); * } * * writer.WriteEndArray(); */ } if (weaponNamePart.MinExpLevelRequirement != 1) { /* * writer.WritePropertyName("min_exp_level_required"); * writer.WriteValue(weaponNamePart.MinExpLevelRequirement); */ } if (weaponNamePart.MaxExpLevelRequirement != 100) { /* * writer.WritePropertyName("max_exp_level_required"); * writer.WriteValue(weaponNamePart.MaxExpLevelRequirement); */ } /* * writer.WritePropertyName("priority"); * writer.WriteValue(weaponNamePart.Priority); */ writer.WriteEndObject(); } writer.WriteEndObject(); } var itemParts = engine.Objects .Where(o => (o.IsA(itemPartDefinitionClass) == true || o.IsA(artifactPartDefinitionClass) == true || o.IsA(classModPartDefinitionClass) == true || o.IsA(equipableItemPartDefinitionClass) == true || o.IsA(grenadeModPartDefinitionClass) == true || o.IsA(missionItemPartDefinitionClass) == true || o.IsA(shieldPartDefinitionClass) == true || o.IsA(usableItemPartDefinitionClass) == true) && o.GetName().StartsWith("Default__") == false) .Distinct() .OrderBy(o => o.GetPath()); using (var writer = Dataminer.NewDump("Item Parts.json")) { writer.WriteStartObject(); foreach (dynamic itemPart in itemParts) { UnrealClass uclass = itemPart.GetClass(); if (uclass != artifactPartDefinitionClass && uclass != classModPartDefinitionClass && uclass != grenadeModPartDefinitionClass && uclass != shieldPartDefinitionClass && uclass != usableItemPartDefinitionClass) { throw new InvalidOperationException(); } writer.WritePropertyName(itemPart.GetPath()); writer.WriteStartObject(); writer.WritePropertyName("type"); writer.WriteValue(((ItemPartType)itemPart.PartType).ToString()); if (itemPart.TitleList != null && itemPart.TitleList.Length > 0) { writer.WritePropertyName("titles"); writer.WriteStartArray(); IEnumerable <dynamic> titleList = itemPart.TitleList; foreach (var title in titleList .Where(tp => tp != null) .OrderBy(tp => tp.GetPath())) { writer.WriteValue(title.GetPath()); } writer.WriteEndArray(); } if (itemPart.PrefixList != null && itemPart.PrefixList.Length > 0) { writer.WritePropertyName("prefixes"); writer.WriteStartArray(); IEnumerable <dynamic> prefixList = itemPart.PrefixList; foreach (var prefix in prefixList .Where(pp => pp != null) .OrderBy(pp => pp.GetPath())) { writer.WriteValue(prefix.GetPath()); } writer.WriteEndArray(); } writer.WriteEndObject(); } writer.WriteEndObject(); } var itemNameParts = engine.Objects .Where(o => o.IsA(itemNamePartDefinitionClass) == true && o.GetName().StartsWith("Default__") == false) .Distinct() .OrderBy(o => o.GetPath()); using (var writer = Dataminer.NewDump("Item Name Parts.json")) { writer.WriteStartObject(); foreach (dynamic itemNamePart in itemNameParts) { UnrealClass uclass = itemNamePart.GetClass(); if (uclass != itemNamePartDefinitionClass) { throw new InvalidOperationException(); } writer.WritePropertyName(itemNamePart.GetPath()); writer.WriteStartObject(); if (itemNamePart.AttributeSlotEffects != null && itemNamePart.AttributeSlotEffects.Length > 0) { throw new InvalidOperationException(); } if (itemNamePart.AttributeSlotUpgrades != null && itemNamePart.AttributeSlotUpgrades.Length > 0) { throw new InvalidOperationException(); } if (itemNamePart.ExternalAttributeEffects != null && itemNamePart.ExternalAttributeEffects.Length > 0) { IEnumerable <dynamic> externalAttributeEffects = itemNamePart.ExternalAttributeEffects; foreach (var externalAttributeEffect in externalAttributeEffects) { if (externalAttributeEffect.AttributeToModify != null && externalAttributeEffect.AttributeToModify.GetPath() != "GD_Shields.Attributes.Attr_LawEquipped") { throw new InvalidOperationException(); } } } if (itemNamePart.ItemAttributeEffects != null && itemNamePart.ItemAttributeEffects.Length > 0) { throw new InvalidOperationException(); } if (itemNamePart.ItemCardAttributes != null && itemNamePart.ItemCardAttributes.Length > 0) { throw new InvalidOperationException(); } if (itemNamePart.CustomPresentations != null && itemNamePart.CustomPresentations.Length > 0) { IEnumerable <dynamic> customPresentations = itemNamePart.CustomPresentations; foreach (var customPresentation in customPresentations) { if (string.IsNullOrEmpty((string)customPresentation.Suffix) == false) { throw new InvalidOperationException(); } if (string.IsNullOrEmpty((string)customPresentation.Prefix) == false) { throw new InvalidOperationException(); } } } if (itemNamePart.TitleList != null && itemNamePart.TitleList.Length > 0) { throw new InvalidOperationException(); } if (itemNamePart.PrefixList != null && itemNamePart.PrefixList.Length > 0) { throw new InvalidOperationException(); } var type = (ItemPartType)itemNamePart.PartType; if (type != ItemPartType.Alpha) { throw new InvalidOperationException(); } if ((bool)itemNamePart.bNameIsUnique != false) { writer.WritePropertyName("unique"); writer.WriteValue((bool)itemNamePart.bNameIsUnique); } string partName = itemNamePart.PartName; if (string.IsNullOrEmpty(partName) == false) { writer.WritePropertyName("name"); writer.WriteValue(partName); } if (itemNamePart.Expressions != null && itemNamePart.Expressions.Length > 0) { /* * writer.WritePropertyName("expressions"); * writer.WriteStartArray(); * * foreach (var expression in itemNamePart.Expressions) * { * writer.WriteStartObject(); * * if (expression.AttributeOperand1 != null) * { * writer.WritePropertyName("operand1_attribute"); * writer.WriteValue(expression.AttributeOperand1.GetPath()); * } * * var comparisonOperator = (ComparisonOperator)expression.ComparisonOperator; * writer.WritePropertyName("comparison_operator"); * writer.WriteValue(comparisonOperator.ToString()); * * var operand2Usage = (OperandUsage)expression.Operand2Usage; * writer.WritePropertyName("operand2_usage"); * writer.WriteValue(operand2Usage.ToString()); * * if (expression.AttributeOperand2 != null) * { * writer.WritePropertyName("operand2_attribute"); * writer.WriteValue(expression.AttributeOperand2.GetPath()); * } * * float constantOperand2 = expression.ConstantOperand2; * if (constantOperand2.Equals(0.0f) == false) * { * writer.WritePropertyName("operand2_constant"); * writer.WriteValue(constantOperand2); * } * * writer.WriteEndObject(); * } * * writer.WriteEndArray(); */ } if (itemNamePart.MinExpLevelRequirement != 1) { /* * writer.WritePropertyName("min_exp_level_required"); * writer.WriteValue(itemNamePart.MinExpLevelRequirement); */ } if (itemNamePart.MaxExpLevelRequirement != 100) { /* * writer.WritePropertyName("max_exp_level_required"); * writer.WriteValue(itemNamePart.MaxExpLevelRequirement); */ } /* * writer.WritePropertyName("priority"); * writer.WriteValue(itemNamePart.Priority); */ writer.WriteEndObject(); } writer.WriteEndObject(); } }
private static void Go(Engine engine) { var weaponBalanceClass = engine.GetClass("WillowGame.WeaponBalanceDefinition"); var missionWeaponBalanceClass = engine.GetClass("WillowGame.MissionWeaponBalanceDefinition"); var inventoryBalanceClass = engine.GetClass("WillowGame.InventoryBalanceDefinition"); var itemBalanceClass = engine.GetClass("WillowGame.ItemBalanceDefinition"); var classModBalanceClass = engine.GetClass("WillowGame.ClassModBalanceDefinition"); if (weaponBalanceClass == null || missionWeaponBalanceClass == null || inventoryBalanceClass == null || itemBalanceClass == null || classModBalanceClass == null) { throw new InvalidOperationException(); } var weaponTypes = new List <dynamic>(); { var balances = engine.Objects .Where(o => (o.IsA(inventoryBalanceClass) || o.IsA(weaponBalanceClass)) && o.GetName().StartsWith("Default__") == false) .OrderBy(o => o.GetPath()); foreach (dynamic balance in balances) { if (balance.InventoryDefinition != null && balance.InventoryDefinition.GetClass().Path == "WillowGame.WeaponTypeDefinition") { weaponTypes.Add(balance.InventoryDefinition); } if (balance.GetClass() == weaponBalanceClass) { if (balance.PartListCollection != null) { throw new NotSupportedException(); } var partListCollection = balance.WeaponPartListCollection; if (partListCollection == null) { throw new InvalidOperationException(); } if (partListCollection != null) { if (partListCollection.AssociatedWeaponType != null) { weaponTypes.Add(partListCollection.AssociatedWeaponType); } } } } } var weaponPartLists = new List <dynamic>(); using (var writer = Dataminer.NewDump("Weapon Types.json")) { writer.WriteStartObject(); foreach (var weaponType in weaponTypes.Distinct().OrderBy(wp => wp.GetPath())) { writer.WritePropertyName(weaponType.GetPath()); writer.WriteStartObject(); UnrealClass weaponPartClass = weaponType.GetClass(); if (weaponPartClass.Path != "WillowGame.WeaponTypeDefinition") { throw new InvalidOperationException(); } writer.WritePropertyName("type"); writer.WriteValue(((WeaponType)weaponType.WeaponType).ToString()); if (weaponType.TitleList != null && weaponType.TitleList.Length > 0) { writer.WritePropertyName("titles"); writer.WriteStartArray(); IEnumerable <dynamic> titleList = weaponType.TitleList; foreach (var title in titleList .Where(tp => tp != null) .OrderBy(tp => tp.GetPath())) { writer.WriteValue(title.GetPath()); } writer.WriteEndArray(); } if (weaponType.PrefixList != null && weaponType.PrefixList.Length > 0) { writer.WritePropertyName("prefixes"); writer.WriteStartArray(); IEnumerable <dynamic> prefixList = weaponType.PrefixList; foreach (var prefix in prefixList .Where(pp => pp != null) .OrderBy(pp => pp.GetPath())) { writer.WriteValue(prefix.GetPath()); } writer.WriteEndArray(); } WritePartListReference(writer, "body_parts", weaponType.BodyParts, weaponPartLists); WritePartListReference(writer, "grip_parts", weaponType.GripParts, weaponPartLists); WritePartListReference(writer, "barrel_parts", weaponType.BarrelParts, weaponPartLists); WritePartListReference(writer, "sight_parts", weaponType.SightParts, weaponPartLists); WritePartListReference(writer, "stock_parts", weaponType.StockParts, weaponPartLists); WritePartListReference(writer, "elemental_parts", weaponType.ElementalParts, weaponPartLists); WritePartListReference(writer, "accessory1_parts", weaponType.Accessory1Parts, weaponPartLists); WritePartListReference(writer, "accessory2_parts", weaponType.Accessory2Parts, weaponPartLists); WritePartListReference(writer, "material_parts", weaponType.MaterialParts, weaponPartLists); writer.WriteEndObject(); } writer.WriteEndObject(); } using (var writer = Dataminer.NewDump("Weapon Part Lists.json")) { writer.WriteStartObject(); foreach (var partList in weaponPartLists.Distinct().OrderBy(wp => wp.GetPath())) { WritePartList(writer, partList.GetPath(), partList); } writer.WriteEndObject(); } var items = new List <dynamic>(); { var balances = engine.Objects .Where(o => (o.IsA(inventoryBalanceClass) || o.IsA(itemBalanceClass) || o.IsA(classModBalanceClass)) && o.GetName().StartsWith("Default__") == false) .OrderBy(o => o.GetPath()); foreach (dynamic balance in balances) { var balanceClass = balance.GetClass(); if (balanceClass != inventoryBalanceClass && balanceClass != itemBalanceClass && balanceClass != classModBalanceClass) { throw new NotSupportedException(); } if (balanceClass == classModBalanceClass && balance.ClassModDefinitions.Length > 0) { IEnumerable <dynamic> classMods = balance.ClassModDefinitions; items.AddRange(classMods.Where(cmd => cmd != null)); } if (balance.InventoryDefinition != null && balance.InventoryDefinition.GetClass().Path != "WillowGame.WeaponTypeDefinition") { items.Add(balance.InventoryDefinition); } var partListCollection = balanceClass == classModBalanceClass ? balance.ItemPartListCollection : balance.PartListCollection; if (partListCollection != null) { if (partListCollection.GetClass().Path != "WillowGame.ItemPartListCollectionDefinition") { throw new InvalidOperationException(); } if (partListCollection.AssociatedItem != null) { items.Add(partListCollection.AssociatedItem); } } } } var itemPartLists = new List <dynamic>(); using (var writer = Dataminer.NewDump("Items.json")) { writer.WriteStartObject(); foreach (var item in items.Distinct().OrderBy(wp => wp.GetPath())) { UnrealClass itemClass = item.GetClass(); if (itemClass.Path != "WillowGame.UsableItemDefinition" && itemClass.Path != "WillowGame.ArtifactDefinition" && itemClass.Path != "WillowGame.UsableCustomizationItemDefinition" && itemClass.Path != "WillowGame.ClassModDefinition" && itemClass.Path != "WillowGame.GrenadeModDefinition" && itemClass.Path != "WillowGame.ShieldDefinition" && itemClass.Path != "WillowGame.MissionItemDefinition" && itemClass.Path != "WillowGame.CrossDLCClassModDefinition") { throw new InvalidOperationException(); } writer.WritePropertyName(item.GetPath()); writer.WriteStartObject(); var itemName = (string)item.ItemName; if (string.IsNullOrEmpty(itemName) == false && itemName != "None") { writer.WritePropertyName("name"); writer.WriteValue(itemName); } else if (itemClass.Path == "WillowGame.UsableCustomizationItemDefinition") { var customizationDef = item.CustomizationDef; if (string.IsNullOrEmpty((string)customizationDef.CustomizationName) == false) { writer.WritePropertyName("name"); writer.WriteValue(customizationDef.CustomizationName); } } if ((bool)item.bItemNameIsFullName == true) { writer.WritePropertyName("has_full_name"); writer.WriteValue(item.bItemNameIsFullName); } writer.WritePropertyName("type"); writer.WriteValue(_ItemTypeMapping[itemClass.Path]); if (item.TitleList != null && item.TitleList.Length > 0) { writer.WritePropertyName("titles"); writer.WriteStartArray(); IEnumerable <dynamic> titleList = item.TitleList; foreach (var title in titleList .Where(tp => tp != null) .OrderBy(tp => tp.GetPath())) { writer.WriteValue(title.GetPath()); } writer.WriteEndArray(); } if (item.PrefixList != null && item.PrefixList.Length > 0) { writer.WritePropertyName("prefixes"); writer.WriteStartArray(); IEnumerable <dynamic> prefixList = item.PrefixList; foreach (var prefix in prefixList .Where(pp => pp != null) .OrderBy(pp => pp.GetPath())) { writer.WriteValue(prefix.GetPath()); } writer.WriteEndArray(); } WritePartListReference(writer, "alpha_parts", item.AlphaParts, itemPartLists); WritePartListReference(writer, "beta_parts", item.BetaParts, itemPartLists); WritePartListReference(writer, "gamma_parts", item.GammaParts, itemPartLists); WritePartListReference(writer, "delta_parts", item.DeltaParts, itemPartLists); WritePartListReference(writer, "epsilon_parts", item.EpsilonParts, itemPartLists); WritePartListReference(writer, "zeta_parts", item.ZetaParts, itemPartLists); WritePartListReference(writer, "eta_parts", item.EtaParts, itemPartLists); WritePartListReference(writer, "theta_parts", item.ThetaParts, itemPartLists); WritePartListReference(writer, "material_parts", item.MaterialParts, itemPartLists); writer.WriteEndObject(); } writer.WriteEndObject(); } using (var writer = Dataminer.NewDump("Item Part Lists.json")) { writer.WriteStartObject(); foreach (var partList in itemPartLists.Distinct().OrderBy(wp => wp.GetPath())) { WritePartList(writer, partList.GetPath(), partList); } writer.WriteEndObject(); } }
private static void Go(Engine engine) { var globalsClass = engine.GetClass("WillowGame.WillowGlobals"); if (globalsClass == null) { throw new InvalidOperationException(); } dynamic globals = engine.Objects.FirstOrDefault( o => o.IsA(globalsClass) && o.GetName().StartsWith("Default__") == false); if (globals == null) { throw new InvalidOperationException(); } dynamic assLibMan = globals.AssLibMan; if (assLibMan == null) { throw new InvalidOperationException(); } using (var writer = Dataminer.NewDump("Asset Library Manager.json")) { writer.WriteStartObject(); writer.WritePropertyName("version"); writer.WriteValue(10); writer.WritePropertyName("configs"); writer.WriteStartObject(); foreach (dynamic libraryConfig in assLibMan.LibraryConfigs) { writer.WritePropertyName(((string)libraryConfig.Desc).Replace(" ", "")); writer.WriteStartObject(); writer.WritePropertyName("sublibrary_bits"); writer.WriteValue(libraryConfig.SublibraryBits); writer.WritePropertyName("asset_bits"); writer.WriteValue(libraryConfig.AssetBits); writer.WritePropertyName("type"); writer.WriteValue(((UnrealClass)libraryConfig.LibraryType).Path); writer.WriteEndObject(); } writer.WriteEndObject(); writer.WritePropertyName("sets"); writer.WriteStartArray(); foreach (dynamic assetLibrarySet in ((IEnumerable <dynamic>)assLibMan.RuntimeAssetLibraries) .OrderBy(ral => ral.Id)) { writer.WriteStartObject(); writer.WritePropertyName("id"); writer.WriteValue(assetLibrarySet.Id); writer.WritePropertyName("libraries"); writer.WriteStartObject(); int libraryIndex = 0; foreach (dynamic library in assetLibrarySet.Libraries) { if (library == null) { libraryIndex++; continue; } string desc = assLibMan.LibraryConfigs[libraryIndex].Desc; writer.WritePropertyName(desc.Replace(" ", "")); writer.WriteStartObject(); if (library.LibraryType != null) { writer.WritePropertyName("type"); writer.WriteValue(((UnrealClass)library.LibraryType).Path); } writer.WritePropertyName("sublibraries"); writer.WriteStartArray(); /* * if (library.Sublibraries.Length != library.SublibraryLinks.Length) * { * throw new InvalidOperationException(); * } */ var sublibraryCount = (int)library.Sublibraries.Length; for (int sublibraryIndex = 0; sublibraryIndex < sublibraryCount; sublibraryIndex++) { var sublibraryPath = (string)library.Sublibraries[sublibraryIndex]; dynamic sublibrary = sublibraryIndex < library.SublibraryLinks.Length ? library.SublibraryLinks[sublibraryIndex] : engine.GetObject(sublibraryPath); writer.WriteStartObject(); writer.WritePropertyName("description"); writer.WriteValue(sublibraryPath); if (sublibrary != null) { var cachedPackageName = (string)sublibrary.CachedPackageName; if (cachedPackageName != "None") { writer.WritePropertyName("package"); writer.WriteValue(cachedPackageName); } if (_Blacklist.Contains(sublibraryPath) == false) { writer.WritePropertyName("assets"); writer.WriteStartArray(); var assets = sublibrary.Assets; if (assets.Length != 0) { throw new NotSupportedException(); } var assetPaths = sublibrary.AssetPaths; foreach (var assetPath in assetPaths) { var parts = new List <string>(); foreach (var pathComponentName in ((IEnumerable <string>)assetPath.PathComponentNames) .Reverse()) { if (pathComponentName == "None") { break; } parts.Add(pathComponentName); } parts.Reverse(); var path = string.Join(".", parts.ToArray()); writer.WriteValue(path); } writer.WriteEndArray(); } } writer.WriteEndObject(); } writer.WriteEndArray(); writer.WriteEndObject(); libraryIndex++; } writer.WriteEndObject(); writer.WriteEndObject(); } writer.WriteEndArray(); writer.WriteEndObject(); } }
private static void Go(Engine engine) { var travelStationDefinitionClass = engine.GetClass("WillowGame.TravelStationDefinition"); var fastTravelStationDefinitionClass = engine.GetClass("WillowGame.FastTravelStationDefinition"); var levelTravelStationDefinitionClass = engine.GetClass("WillowGame.LevelTravelStationDefinition"); var fastTravelStationsListOrderClass = engine.GetClass("WillowGame.FastTravelStationsListOrder"); if (travelStationDefinitionClass == null || fastTravelStationDefinitionClass == null || levelTravelStationDefinitionClass == null || fastTravelStationsListOrderClass == null) { throw new InvalidOperationException(); } using (var writer = Dataminer.NewDump("Travel Stations.json")) { writer.WriteStartObject(); var travelStationDefinitions = engine.Objects .Where(o => (o.IsA(travelStationDefinitionClass) == true || o.IsA(fastTravelStationDefinitionClass) == true || o.IsA(levelTravelStationDefinitionClass) == true) && o.GetName().StartsWith("Default__") == false) .OrderBy(o => o.GetPath()); foreach (dynamic travelStationDefinition in travelStationDefinitions) { UnrealClass uclass = travelStationDefinition.GetClass(); if (uclass.Path != "WillowGame.FastTravelStationDefinition" && uclass.Path != "WillowGame.LevelTravelStationDefinition") { throw new InvalidOperationException(); } writer.WritePropertyName(travelStationDefinition.GetPath()); writer.WriteStartObject(); if (uclass.Path != "WillowGame.TravelStationDefinition") { writer.WritePropertyName("$type"); writer.WriteValue(uclass.Name); } writer.WritePropertyName("resource_name"); writer.WriteValue(travelStationDefinition.GetName()); string stationLevelName = travelStationDefinition.StationLevelName; if (string.IsNullOrEmpty(stationLevelName) == false) { writer.WritePropertyName("level_name"); writer.WriteValue(stationLevelName); } var dlcExpansion = travelStationDefinition.DlcExpansion; if (dlcExpansion != null) { writer.WritePropertyName("dlc_expansion"); writer.WriteValue(dlcExpansion.GetPath()); } if (travelStationDefinition.PreviousStation != null) { writer.WritePropertyName("previous_station"); writer.WriteValue(travelStationDefinition.PreviousStation.GetPath()); } string stationDisplayName = travelStationDefinition.StationDisplayName; if (string.IsNullOrEmpty(stationDisplayName) == false) { writer.WritePropertyName("station_display_name"); writer.WriteValue(stationDisplayName); } var missionDependencies = ((IEnumerable <dynamic>)travelStationDefinition.MissionDependencies) .Where(md => md.MissionDefinition != null) .OrderBy(md => md.MissionDefinition.GetPath()) .ToArray(); if (missionDependencies.Length > 0) { writer.WritePropertyName("mission_dependencies"); writer.WriteStartArray(); foreach (var missionDependency in missionDependencies) { writer.WriteStartObject(); writer.WritePropertyName("mission_definition"); writer.WriteValue(missionDependency.MissionDefinition.GetPath()); writer.WritePropertyName("mission_status"); writer.WriteValue(((MissionStatus)missionDependency.MissionStatus).ToString()); if ((bool)missionDependency.bIsObjectiveSpecific == true) { writer.WritePropertyName("is_objective_specific"); writer.WriteValue(true); if (missionDependency.MissionObjective != null) { writer.WritePropertyName("objective_definition"); writer.WriteValue(missionDependency.MissionObjective.GetPath()); } writer.WritePropertyName("objective_status"); writer.WriteValue( ((ObjectiveDependencyStatus)missionDependency.ObjectiveStatus).ToString()); } writer.WriteEndObject(); } writer.WriteEndArray(); } if (uclass == fastTravelStationDefinitionClass) { writer.WritePropertyName("initially_active"); writer.WriteValue((bool)travelStationDefinition.bInitiallyActive); writer.WritePropertyName("send_only"); writer.WriteValue((bool)travelStationDefinition.bSendOnly); string stationDescription = travelStationDefinition.StationDescription; if (string.IsNullOrEmpty(stationDescription) == false && stationDescription != "No Description" && stationDescription != stationDisplayName) { writer.WritePropertyName("description"); writer.WriteValue(stationDescription); } string stationSign = travelStationDefinition.StationSign; if (string.IsNullOrEmpty(stationSign) == false && stationSign != stationDisplayName) { writer.WritePropertyName("sign"); writer.WriteValue(stationSign); } if (travelStationDefinition.InaccessibleObjective != null) { writer.WritePropertyName("inaccessible_objective"); writer.WriteValue(travelStationDefinition.InaccessibleObjective.GetPath()); } if (travelStationDefinition.AccessibleObjective != null) { writer.WritePropertyName("accessible_objective"); writer.WriteValue(travelStationDefinition.AccessibleObjective.GetPath()); } } else if (uclass == levelTravelStationDefinitionClass) { if (travelStationDefinition.DestinationStationDefinition != null) { writer.WritePropertyName("destination_station"); writer.WriteValue(travelStationDefinition.DestinationStationDefinition.GetPath()); } } writer.WriteEndObject(); } writer.WriteEndObject(); writer.Flush(); } var fastTravelStationsListOrders = engine.Objects .Where(o => (o.IsA(fastTravelStationsListOrderClass) == true) && o.GetName().StartsWith("Default__") == false) .OrderBy(o => o.GetPath()); using (var writer = Dataminer.NewDump("Fast Travel Station Ordering.json")) { writer.WriteStartObject(); foreach (dynamic fastTravelStationsListOrder in fastTravelStationsListOrders) { writer.WritePropertyName(fastTravelStationsListOrder.GetPath()); writer.WriteStartObject(); writer.WritePropertyName("stations"); writer.WriteStartArray(); foreach (var fastTravelStationDefinition in fastTravelStationsListOrder.FastTravelStationOrderList) { writer.WriteValue(fastTravelStationDefinition.GetPath()); } writer.WriteEndArray(); var dlcExpansion = fastTravelStationsListOrder.DlcExpansion; if (dlcExpansion != null) { writer.WritePropertyName("dlc_expansion"); writer.WriteValue(dlcExpansion.GetPath()); } writer.WriteEndObject(); } writer.WriteEndObject(); } }