detailed-cod-tracker/beautify_data.py

298 lines
14 KiB
Python
Raw Normal View History

2023-10-03 01:50:06 -04:00
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."""
2023-10-03 01:50:06 -04:00
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
2023-10-03 01:50:06 -04:00
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
2023-10-03 01:50:06 -04:00
}
file_path = "stats.json"
replace_and_sort_keys_in_json(file_path, replacements)
print(f"Keys sorted and replaced in {file_path}!")