mirror of
https://github.com/wolfswolke/DeathGarden_API_Rebirth.git
synced 2026-03-21 17:54:09 -05:00
231 lines
9.7 KiB
Python
231 lines
9.7 KiB
Python
import os
|
|
import json
|
|
import re
|
|
|
|
base_template = {
|
|
"Result": []
|
|
}
|
|
def normalize_data(json_data, prev_guid, next_guid, is_weapon, character_class):
|
|
normalized_data_list = []
|
|
for item_data in json_data:
|
|
normalized_data = {
|
|
"Id": item_data.get("Properties", {}).get("Guid"),
|
|
"DisplayName": item_data.get("Properties", {}).get("DisplayName", {}).get("Key"),
|
|
"Purchasable": True,
|
|
"Consumable": False,
|
|
"IsWeapon": is_weapon,
|
|
"InitialQuantity": 1,
|
|
"CustomizationGameplayTagByFaction": {
|
|
character_class: {
|
|
"tagName": f"Class.{character_class}"
|
|
}
|
|
},
|
|
"DefaultCost": item_data.get("Properties", {}).get("DefaultCost"),
|
|
"MetaData": {
|
|
"GameplayTags": [],
|
|
"MinPlayerLevel": 1,
|
|
"MinCharacterLevel": 1,
|
|
"Origin": "Event",
|
|
"PrerequisiteItem": prev_guid,
|
|
"FollowingItem": next_guid,
|
|
},
|
|
"Faction": "",
|
|
"GameplayTagContainer": {},
|
|
"Gender": item_data.get("Properties", {}).get("Gender")
|
|
}
|
|
normalized_data["MetaData"]["GameplayTags"] = []
|
|
for tag in item_data.get("Properties", {}).get("TagContainer", []):
|
|
normalized_data["MetaData"]["GameplayTags"].append({"TagName": tag})
|
|
if item_data.get("Properties", {}).get("TagContainer"):
|
|
try:
|
|
normalized_data["GameplayTagContainer"] = {"GameplayTags": [{"TagName": item_data.get("Properties", {}).get("TagContainer")[0]}],"ParentTags": [{"TagName": item_data.get("Properties", {}).get("TagContainer")[1]}]}
|
|
except IndexError:
|
|
normalized_data["GameplayTagContainer"] = {"ParentTags": [{"TagName": item_data.get("Properties", {}).get("TagContainer")[0]}]}
|
|
# normalized_data.pop("GameplayTagContainer")
|
|
tag_query = item_data.get("Properties", {}).get("TagQuery", {})
|
|
char_tag = item_data.get("Properties", {}).get("GameplayTags", {})
|
|
|
|
if not item_data.get("IsWeapon"):
|
|
normalized_data["IsWeapon"] = False
|
|
|
|
if normalized_data["MetaData"]["FollowingItem"] == "":
|
|
normalized_data["MetaData"].pop("FollowingItem")
|
|
if normalized_data["MetaData"]["PrerequisiteItem"] == "":
|
|
normalized_data["MetaData"].pop("PrerequisiteItem")
|
|
if not normalized_data["DefaultCost"]:
|
|
normalized_data.pop("DefaultCost")
|
|
else:
|
|
for item in normalized_data["DefaultCost"]:
|
|
# {'CurrencyId': 'EGMCurrency::CurrencyB', 'Price': 310}
|
|
item["CurrencyId"] = item["CurrencyId"].replace("EGMCurrency::", "")
|
|
|
|
faction = has_class_runner(tag_query)
|
|
if normalized_data["Gender"]:
|
|
normalized_data["Gender"] = normalized_data["Gender"].replace("EGender::", "")
|
|
else:
|
|
normalized_data["Gender"] = "None"
|
|
|
|
if not normalized_data["Gender"]:
|
|
normalized_data.pop("Gender")
|
|
|
|
if faction:
|
|
normalized_data["Faction"] = faction
|
|
else:
|
|
char_tag = has_class_runner(char_tag)
|
|
if char_tag:
|
|
normalized_data["Faction"] = char_tag
|
|
else:
|
|
# normalized_data.pop("Faction")
|
|
normalized_data["Faction"] = character_class
|
|
if normalized_data["DisplayName"]:
|
|
if re.match("(?!.*(?:Name|Title|NAME)).*", normalized_data["DisplayName"]):
|
|
try:
|
|
normalized_data["DisplayName"] = item_data.get("Properties", {}).get("DisplayName", {}).get(
|
|
"SourceString")
|
|
except AttributeError:
|
|
normalized_data = None
|
|
return normalized_data
|
|
if not normalized_data["Id"] or not normalized_data["DisplayName"]:
|
|
normalized_data = None
|
|
return normalized_data
|
|
if normalized_data:
|
|
normalized_data_list.append(normalized_data)
|
|
return normalized_data_list
|
|
|
|
|
|
def has_class_runner(tag_query):
|
|
if "TagQuery" in tag_query:
|
|
tag_dictionary = tag_query["TagQuery"].get("TagDictionary", [])
|
|
for tag in tag_dictionary:
|
|
if "TagName" in tag and tag["TagName"] == "Class.Runner":
|
|
return "Runner"
|
|
elif "TagQuery" in tag and tag["TagName"] == "Class.Hunter":
|
|
if has_class_runner(tag["TagQuery"]):
|
|
return "Hunter"
|
|
else:
|
|
return None
|
|
else:
|
|
for item in tag_query:
|
|
if item == "Class.Runner":
|
|
return "Runner"
|
|
elif item == "Class.Hunter":
|
|
return "Hunter"
|
|
return False
|
|
|
|
|
|
def get_guid(json_data):
|
|
try:
|
|
return json_data.get("Properties", {}).get("Guid")
|
|
except AttributeError:
|
|
for item in json_data:
|
|
if item.get("Properties", {}).get("Guid"):
|
|
return item.get("Properties", {}).get("Guid")
|
|
else:
|
|
return ""
|
|
#data = json_data[2]
|
|
# return data.get("Properties", {}).get("Guid")
|
|
|
|
|
|
def get_next_and_prev_guid(file_path, file_name):
|
|
print(f"Entered get_next_and_prev_guid with file_path: {file_path} and file_name: {file_name}")
|
|
if "_001.json" in file_name:
|
|
with open(file_path.replace("_001.json", "_002.json"), 'r') as json_file:
|
|
next_json_data = json.load(json_file)
|
|
next_guid = get_guid(next_json_data)
|
|
return "", next_guid
|
|
elif "_Item.json" in file_name:
|
|
with open(file_path.replace("_Item.json", "_002.json"), 'r') as json_file:
|
|
next_json_data = json.load(json_file)
|
|
next_guid = get_guid(next_json_data)
|
|
return "", next_guid
|
|
|
|
elif "_010.json" in file_name:
|
|
with open(file_path.replace("_010.json", "_009.json"), 'r') as json_file:
|
|
prev_json_data = json.load(json_file)
|
|
prev_guid = get_guid(prev_json_data)
|
|
next_guid = ""
|
|
return prev_guid, next_guid
|
|
elif "_009.json" in file_name:
|
|
with open(file_path.replace("_009.json", "_008.json"), 'r') as json_file:
|
|
prev_json_data = json.load(json_file)
|
|
prev_guid = get_guid(prev_json_data)
|
|
with open(file_path.replace("_009.json", "_010.json"), 'r') as json_file:
|
|
next_json_data = json.load(json_file)
|
|
next_guid = get_guid(next_json_data)
|
|
return prev_guid, next_guid
|
|
else:
|
|
try:
|
|
current_num = file_name[-6:]
|
|
current_num = int(current_num[0])
|
|
except ValueError:
|
|
return "", ""
|
|
with open(file_path.replace(f"_00{current_num}.json", f"_00{current_num+1}.json"), 'r') as json_file:
|
|
next_json_data = json.load(json_file)
|
|
next_guid = get_guid(next_json_data)
|
|
try:
|
|
print("File found")
|
|
with open(file_path.replace(f"_00{current_num}.json", f"_00{current_num-1}.json"), 'r') as json_file:
|
|
prev_json_data = json.load(json_file)
|
|
prev_guid = get_guid(prev_json_data)
|
|
except FileNotFoundError:
|
|
print("File not found")
|
|
with open(file_path.replace(f"_00{current_num}.json", f"_Item.json"), 'r') as json_file:
|
|
prev_json_data = json.load(json_file)
|
|
prev_guid = get_guid(prev_json_data)
|
|
|
|
return prev_guid, next_guid
|
|
|
|
|
|
def process_folder(folder_path):
|
|
print("Processing folder: " + folder_path)
|
|
catalog_data = []
|
|
|
|
for root, _, files in os.walk(folder_path):
|
|
for file_name in files:
|
|
if file_name.endswith('.json'):
|
|
print("Processing file: " + file_name)
|
|
file_path = os.path.join(root, file_name)
|
|
with open(file_path, 'r') as json_file:
|
|
json_data = json.load(json_file)
|
|
print(f"Current PATH: {file_path}")
|
|
if file_path.startswith("./Items\Runners\Character\Items_Released\Perks") or file_path.startswith("./Items\Hunters\Character\Items_Released\Perks") or file_path.startswith("./Items\Hunters\Character\Items_Released\Powers"):
|
|
try:
|
|
prev_guid, next_guid = get_next_and_prev_guid(file_path, file_name)
|
|
except FileNotFoundError:
|
|
continue
|
|
else:
|
|
prev_guid = ""
|
|
next_guid = ""
|
|
if file_path.startswith("./Items\Runners\Character\Items_Released\Weapons") or file_path.startswith("./Items\Hunters\Character\Items_Released\Weapons"):
|
|
is_weapon = True
|
|
else:
|
|
is_weapon = False
|
|
if file_path.startswith("./Items\Runners"):
|
|
character_class = "Runner"
|
|
elif file_path.startswith("./Items\Hunters"):
|
|
character_class = "Hunter"
|
|
|
|
normalized_data = normalize_data(json_data, prev_guid, next_guid, is_weapon, character_class)
|
|
if normalized_data:
|
|
catalog_data.append(normalized_data)
|
|
else:
|
|
print(f"Skipping file: {file_name}")
|
|
|
|
return catalog_data
|
|
|
|
main_folder = './Items'
|
|
runner_folder = os.path.join(main_folder, 'Runners')
|
|
hunter_folder = os.path.join(main_folder, 'Hunters')
|
|
|
|
runner_catalog_data = process_folder(runner_folder)
|
|
hunter_catalog_data = process_folder(hunter_folder)
|
|
|
|
catalog_data = runner_catalog_data + hunter_catalog_data
|
|
|
|
catalog_file_path = 'catalog.json'
|
|
with open(catalog_file_path, 'w') as catalog_file:
|
|
base_template["Result"] = catalog_data
|
|
json.dump(base_template, catalog_file, indent=4)
|
|
|
|
print("Catalog JSON file created successfully.")
|