detailed-cod-tracker/beautify_data.py
Ahrimdon 6c3fc6e9d6 Added sorting
Sort Game Modes by 'timePlayed' in descending order
Sort Weapons by 'kills' in descending order
Sort Field Upgrades by 'uses' in descending order
Sort Lethal and Tactical equipment by 'uses' in descending order
Sort Lethal and Support Scorestreaks by 'awardedCount' in descending order
Sort Accolades in descending order
2023-10-03 05:22:41 -04:00

298 lines
14 KiB
Python

import json
def replace_and_sort_keys_in_json(file_path, replacements):
"""Replace keys in the JSON file based on the replacements dictionary and sort Accolades."""
with open(file_path, 'r') as file:
data = json.load(file)
def recursive_key_replace(obj, replacements):
if isinstance(obj, dict):
new_obj = {}
for key, value in obj.items():
new_key = replacements.get(key, key)
new_obj[new_key] = recursive_key_replace(value, replacements)
if new_key == "mode": # Sort Game Modes by 'timePlayed' in descending order
sorted_modes = dict(sorted(new_obj[new_key].items(), key=lambda item: item[1]['properties']['timePlayed'], reverse=True))
new_obj[new_key] = sorted_modes
if new_key in ["Assault Rifles", "Shotguns", "Marksman Rifles", "Snipers", "LMGs", "Launchers", "Pistols", "SMGs", "Melee"]: # Sort Weapons by 'kills' in descending order
sorted_weapons = dict(sorted(new_obj[new_key].items(), key=lambda item: item[1]['properties']['kills'], reverse=True))
new_obj[new_key] = sorted_weapons
if new_key in ["Field Upgrades"]: # Sort Field Upgrades by 'uses' in descending order
sorted_fieldupgrades = dict(sorted(new_obj[new_key].items(), key=lambda item: item[1]['properties']['uses'], reverse=True))
new_obj[new_key] = sorted_fieldupgrades
if new_key in ["Tactical Equipment", "Lethal Equipment"]: # Sort Lethal and Tactical equipment by 'uses' in descending order
sorted_equipment = dict(sorted(new_obj[new_key].items(), key=lambda item: item[1]['properties']['uses'], reverse=True))
new_obj[new_key] = sorted_equipment
if new_key == "Scorestreaks": # Sort Lethal and Support Scorestreaks by 'awardedCount' in descending order
for subcategory, scorestreaks in new_obj[new_key].items():
sorted_scorestreaks = dict(sorted(scorestreaks.items(), key=lambda item: item[1]['properties']['awardedCount'], reverse=True))
new_obj[new_key][subcategory] = sorted_scorestreaks
# Sort Accolades in descending order
if new_key == "Accolades":
sorted_accolades = dict(sorted(new_obj[new_key]['properties'].items(), key=lambda item: item[1], reverse=True))
new_obj[new_key]['properties'] = sorted_accolades
return new_obj
elif isinstance(obj, list):
for index, value in enumerate(obj):
obj[index] = recursive_key_replace(value, replacements)
return obj
data = recursive_key_replace(data, replacements)
with open(file_path, 'w') as file:
json.dump(data, file, indent=4)
if __name__ == "__main__":
# Define the keys to be replaced and their replacements
replacements = {
# Gamemodes
"dom": "Domination",
"hc_dom": "Hardcore Domination",
"war": "Team Deathmatch",
"hc_war": "Hardcore Team Deathmatch",
"hq": "Headquarters",
"hc_hq": "Hardcore Headquarters",
"conf": "Kill Confirmed",
"hc_conf": "Hardcore Kill Confirmed",
"koth": "Hardpoint",
"koth_hc": "Hardcore Hardpoint",
"sd": "Search and Destroy",
"hc_sd": "Hardcore Search and Destroy",
"cyber": "Cyber Attack",
"hc_cyber": "Hardcore Cyber Attack",
"grnd": "Grind",
"arm": "Ground War",
"infect": "Infected",
"gun": "Gun Game",
"arena": "Gunfight",
"br": "Battle Royale (Warzone)",
"br_dmz": "Plunder",
"br_all": "Battle Royale (Warzone & Plunder)",
# Weapons
"weapon_assault_rifle": "Assault Rifles",
"weapon_shotgun": "Shotguns",
"weapon_marksman": "Marksman Rifles",
"weapon_sniper": "Snipers",
"tacticals": "Tactical Equipment",
"lethals": "Lethal Equipment",
"weapon_lmg": "LMGs",
"weapon_launcher": "Launchers",
"supers": "Field Upgrades",
"weapon_pistol": "Pistols",
"weapon_other": "Primary Melee",
"weapon_smg": "SMGs",
"weapon_melee": "Melee",
"scorestreakData": "Scorestreaks",
"lethalScorestreakData": "Lethal Scorestreaks",
"supportScorestreakData": "Support Scorestreaks",
# Guns
## Assault Rifles
"iw8_ar_tango21": "RAM-7",
"iw8_ar_mike4": "M4A1",
"iw8_ar_valpha": "AS VAL",
"iw8_ar_falpha": "FR 5.56",
"iw8_ar_mcharlie": "M13",
"iw8_ar_akilo47": "AK-47",
"iw8_ar_asierra12": "Oden",
"iw8_ar_galima": "CR-56 AMAX",
"iw8_ar_sierra552": "Grau 5.56",
"iw8_ar_falima": "FAL",
"iw8_ar_anovember94": "AN-94",
"iw8_ar_kilo433": "Kilo 141",
"iw8_ar_scharlie": "FN Scar 17",
"iw8_sh_mike26": "VLK Rogue",
## Shotguns
"iw8_sh_charlie725": "725",
"iw8_sh_oscar12": "Origin 12 Shotgun",
"iw8_sh_aalpha12": "JAK-12",
"iw8_sh_romeo870": "Model 680",
"iw8_sh_dpapa12": "R9-0 Shotgun",
## Marksman Rifles
"iw8_sn_sbeta": "MK2 Carbine",
"iw8_sn_crossbow": "Crossbow",
"iw8_sn_romeo700": "SP-R 208",
"iw8_sn_kilo98": "Kar98k",
"iw8_sn_mike14": "EBR-14",
"iw8_sn_sksierra": "SKS",
## Sniper Rifles
"iw8_sn_alpha50": "AX-50",
"iw8_sn_hdromeo": "HDR",
"iw8_sn_delta": "Dragunov",
"iw8_sn_xmike109": "Rytec AMR",
## Tactical Equipment
"equip_gas_grenade": "Gas Grenade",
"equip_snapshot_grenade": "Snapshot Grenade",
"equip_decoy": "Decoy Grenade",
"equip_smoke": "Smoke Grenade",
"equip_concussion": "Concussion Grenade",
"equip_hb_sensor": "Heartbeat Sensor",
"equip_flash": "Flash Grenade",
"equip_adrenaline": "Stim",
## Lethal Equipment
"equip_frag": "Frag Grenade",
"equip_thermite": "Thermite",
"equip_semtex": "Semtex",
"equip_claymore": "Claymore",
"equip_c4": "C4",
"equip_at_mine": "Proximity Mine",
"equip_throwing_knife": "Throwing Knife",
"equip_molotov": "Mototov Cocktail",
## LMGs
"iw8_lm_kilo121": "M91",
"iw8_lm_mkilo3": "Bruen Mk9",
"iw8_lm_mgolf34": "MG34",
"iw8_lm_lima86": "SA87",
"iw8_lm_pkilo": "PKM",
"iw8_lm_sierrax": "FiNN LMG",
"iw8_lm_mgolf36": "Holger-26",
# "": "", ### RAAL LMG not implemented
## Launchers
"iw8_la_gromeo": "PILA",
"iw8_la_rpapa7": "RPG-7",
"iw8_la_juliet": "JOKR",
"iw8_la_kgolf": "Strela-P",
# "": "", ### Unknown Launcher
## Field Upgrades
"super_emp_drone": "EMP Drone",
"super_trophy": "Trophy System",
"super_ammo_drop": "Munitions Box",
"super_weapon_drop": "Weapon Drop",
"super_fulton": "Cash Deposit Balloon",
"super_armor_drop": "Armor Box",
"super_select": "Field Upgrade Pro (Any)",
"super_tac_insert": "Tactical Insertion",
"super_recon_drone": "Recon Drone",
"super_deadsilence": "Dead Silence",
"super_supply_drop": "Loadout Drop", ### Unsure if this is Loadout Drop
"super_tac_cover": "Deployable Cover",
"super_support_box": "Stopping Power Rounds",
## Pistols
"iw8_pi_cpapa": ".357",
"iw8_pi_mike9": "Renetti",
"iw8_pi_mike1911": "1911",
"iw8_pi_golf21": "X16",
"iw8_pi_decho": ".50 GS",
"iw8_pi_papa320": "M19",
# "": "", ### Sykov not implemented
## Primary Melee
"iw8_me_riotshield": "Riot Shield",
## SMGs
"iw8_sm_mpapa7": "MP7",
"iw8_sm_augolf": "AUG",
"iw8_sm_papa90": "P90",
"iw8_sm_charlie9": "ISO",
"iw8_sm_mpapa5": "MP5",
"iw8_sm_smgolf45": "Striker 45",
"iw8_sm_beta": "PP19 Bizon",
"iw8_sm_victor": "Fennec",
"iw8_sm_uzulu": "Uzi",
# "": "", ### CX9 not implemented
## Melee
"iw8_me_akimboblunt": "Kali Sticks",
"iw8_me_akimboblades": "Dual Kodachis",
"iw8_knife": "Knife",
# Scorestreaks
"precision_airstrike": "Precision Airstrike",
"cruise_predator": "Cruise Missile",
"manual_turret": "Shield Turret",
"white_phosphorus": "White Phosphorus",
"hover_jet": "VTOL Jet",
"chopper_gunner": "Chopper Gunner",
"gunship": "Gunship",
"sentry_gun": "Sentry Gun",
"toma_strike": "Cluster Strike",
"nuke": "Nuke",
"juggernaut": "Juggernaut",
"pac_sentry": "Wheelson",
"chopper_support": "Support Helo",
"bradley": "Infantry Assault Vehicle",
"airdrop": "Care Package",
"radar_drone_overwatch": "Personal Radar",
"scrambler_drone_guard": "Counter UAV",
"uav": "UAV",
"airdrop_multiple": "Emergency Airdrop",
"directional_uav": "Advanced UAV",
# Accolades
"accoladeData": "Accolades",
"classChanges": "Most classes changed (Evolver)",
"highestAvgAltitude": "Highest average altitude (High Command)",
"killsFromBehind": "Most kills from behind (Flanker)",
"lmgDeaths": "Most LMG deaths (Target Practice)",
"riotShieldDamageAbsorbed": "Most damage absorbed with Riot Shield (Guardian)",
"flashbangHits": "Most Flashbang hits (Blinder)",
"meleeKills": "Most Melee kills (Brawler)",
"tagsLargestBank": "Largest bank (Bank Account)",
"shotgunKills": "Most Shotgun kills (Buckshot)",
"sniperDeaths": "Most Sniper deaths (Zeroed In)",
"timeProne": "Most time spent Prone (Grassy Knoll)",
"killstreakWhitePhosphorousKillsAssists": "Most kills and assists with White Phosphorus (Burnout)",
"shortestLife": "Shortest life (Terminal)",
"deathsFromBehind": "Most deaths from behind (Blindsided)",
"higherRankedKills": "Most kills on higher ranked scoreboard players (Upriser)",
"mostAssists": "Most assists (Wingman)",
"leastKills": "Fewest kills (The Fearful)",
"tagsDenied": "Denied the most tags (Denied)",
"killstreakWheelsonKills": "Most Wheelson kills",
"sniperHeadshots": "Most Sniper headshots (Dead Aim)",
"killstreakJuggernautKills": "Most Juggernaut kills (Heavy Metal)",
"smokesUsed": "Most Smoke Grenades used (Chimney)",
"avengerKills": "Most avenger kills (Avenger)",
"decoyHits": "Most Decoy Grenade hits (Made You Look)",
"killstreakCarePackageUsed": "Most Care Packages called in (Helping Hand)",
"molotovKills": "Most Molotov kills (Arsonist)",
"gasHits": "Most Gas Grenade hits (Gaseous)",
"comebackKills": "Most comebacks (Rally)",
"lmgHeadshots": "Most LMG headshots (LMG Expert)",
"smgDeaths": "Most SMG deaths (Run and Gunned)",
"carrierKills": "Most kills as carrier (Carrier)",
"deployableCoverUsed": "Most Deployable Covers used (Combat Engineer)",
"thermiteKills": "Most Thermite kills (Red Iron)",
"arKills": "Most assault rifle kills (AR Specialist)",
"c4Kills": "Most C4 kills (Handle With Care)",
"suicides": "Most suicides (Accident Prone)",
"clutch": "Most kills as the last alive (Clutched)",
"survivorKills": "Most kills as survivor (Survivalist)",
"killstreakGunshipKills": "Most Gunship kills (Death From Above)",
"timeSpentAsPassenger": "Most time spent as a passenger (Navigator)",
"returns": "Most flags returned (Flag Returner)",
"smgHeadshots": "Most SMG headshots (SMG Expert)",
"launcherDeaths": "Most launcher deaths (Fubar)",
"oneShotOneKills": "Most one shot kills (One Shot Kill)",
"ammoBoxUsed": "Most Munitions Boxes used (Provider)",
#"spawnSelectSquad": "",
"weaponPickups": "Most picked up weapons (Loaner)",
"pointBlankKills": "Most point blank kills (Personal Space)",
"tagsCaptured": "Collected the most tags (Confirmed Kills)",
"killstreakGroundKills": "Most ground based killstreak kills (Ground Control)",
"distanceTraveledInVehicle": "Longest distance travelled in a vehicle (Cross Country)",
"longestLife": "Longest life (Lifer)",
"stunHits": "Most Stun Grenade hits (Stunner)",
"spawnSelectFlag": "Most FOB Spawns (Objective Focused)", # Unsure
"shotgunHeadshots": "Most Shotgun headshots (Boomstick)",
"bombDefused": "Most defuses (Defuser)",
"snapshotHits": "Most Snapshot Grenade hits (Photographer)",
"noKillsWithDeath": "No kills with at least 1 death (Participant)",
"killstreakAUAVAssists": "Most Advanced UAV assists (Target Rich Environment)",
"killstreakPersonalUAVKills": "Most kills with a Personal Radar active (Nothing Personal)",
"tacticalInsertionSpawns": "Most Tactical Insertions used (Revenant)",
"launcherKills": "Most Launcher kills (Explosive)",
"spawnSelectVehicle": "Most vehicle spawns (Oscar Mike)",
"mostKillsLeastDeaths": "Most kills and fewest deaths (MVP)",
"mostKills": "Most kills (The Feared)",
"defends": "Most defend kills (Defense)",
"timeSpentAsDriver": "Most time spent driving (Driver)",
"": "" # WIP - Still adding more
}
file_path = "stats.json"
replace_and_sort_keys_in_json(file_path, replacements)
print(f"Keys sorted and replaced in {file_path}!")