mirror of
https://github.com/Ahrimdon/detailed-cod-tracker.git
synced 2024-11-03 16:46:44 -05:00
6c3fc6e9d6
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
298 lines
14 KiB
Python
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}!") |