Skip to content

Instantly share code, notes, and snippets.

@BOHverkill
Last active July 10, 2016 18:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save BOHverkill/1110f709c4960e7ba1cce4416e1c5911 to your computer and use it in GitHub Desktop.
Save BOHverkill/1110f709c4960e7ba1cce4416e1c5911 to your computer and use it in GitHub Desktop.
# CSGO JSON Data Parser
# Version 0.5.3
# Calculates optimal picks for fantasy teams for specified day
# Requires properly formatted JSON data
# Shitty code by /u/fknsonikk and /u/BOHverkill
import json
from operator import itemgetter
from prettytable import PrettyTable
commando_list = []
clutch_king_list = []
eco_warrior_list = []
entry_fragger_list = []
sniper_list = []
optimal_candidates = []
optimal_combinations = []
stage_to_parse = "stage5"
input_file = "day6.json"
output_file = "day6points.txt"
def calculate_commando(player_name, player_kills, player_deaths):
global commando_list
points = 2 * player_kills
points -= player_deaths
plusminus = player_kills - player_deaths
if plusminus >= 0:
points += plusminus
commando_list.append([player_name, points, plusminus])
def calculate_clutchking(player_name, player_kills, player_deaths, player_clutch_kills):
global clutch_king_list
points = 2 * player_kills
points -= player_deaths
points += 4 * player_clutch_kills
clutch_king_list.append([player_name, points, player_clutch_kills])
def calculate_ecowarrior(player_name, player_kills, player_deaths, player_pistol_kills):
global eco_warrior_list
points = 2 * player_kills
points -= player_deaths
points += 2 * player_pistol_kills
eco_warrior_list.append([player_name, points, player_pistol_kills])
def calculate_entryfragger(player_name, player_kills, player_deaths, player_opening_kills):
global entry_fragger_list
points = 2 * player_kills
points -= player_deaths
points += 2 * player_opening_kills
entry_fragger_list.append([player_name, points, player_opening_kills])
def calculate_sniper(player_name, player_kills, player_deaths, player_sniper_kills):
global sniper_list
points = 2 * player_kills
points -= player_deaths
points += 2 * player_sniper_kills
sniper_list.append([player_name, points, player_sniper_kills])
def find_optimal():
global s_commando, s_clutch_king, s_eco_warrior, s_entry_fragger, s_sniper, optimal_candidates, optimal_combinations
for a in range(0, 4):
for b in range(0, 4):
for c in range(0, 4):
for d in range(0, 4):
for e in range(0, 4):
optimal_candidates.append(
[s_commando[a][0], s_clutch_king[b][0], s_eco_warrior[c][0], s_entry_fragger[d][0],
s_sniper[e][0],
s_commando[a][1] + s_clutch_king[b][1] + s_eco_warrior[c][1] + s_entry_fragger[d][1] +
s_sniper[e][1]]
)
for candidate in optimal_candidates:
unique_values = set(candidate)
if len(unique_values) == 6:
optimal_combinations.append(candidate)
def print_optimal(sorted_list, out_file):
out_file.write('Best lineups today:\n')
optimal = PrettyTable(["Commando", "Clutch King", "Eco Warrior", "Entry Fragger", "Sniper", "Total Points"])
optimal.align = "l"
optimal.align["Total Points"] = "r"
for entry in sorted_list:
optimal.add_row(entry)
str_optimal = optimal.get_string()
out_file.write(str_optimal)
def print_commando(sorted_list, out_file):
out_file.write('\n\nCommando: \n')
commando = PrettyTable(["Name", "Points", "Kills - Deaths"])
commando.align["Name"] = "l"
commando.align["Points"] = "r"
commando.align["Kills - Deaths"] = "r"
for entry in sorted_list:
commando.add_row(entry)
str_commando = commando.get_string()
out_file.write(str_commando)
def print_clutchking(sorted_list, out_file):
out_file.write('\n\nClutch King: \n')
clutch_king = PrettyTable(["Name", "Points", "Clutch Kills"])
clutch_king.align["Name"] = "l"
clutch_king.align["Points"] = "r"
clutch_king.align["Clutch Kills"] = "r"
for entry in sorted_list:
clutch_king.add_row(entry)
str_clutch_king = clutch_king.get_string()
out_file.write(str_clutch_king)
def print_ecowarrior(sorted_list, out_file):
out_file.write('\n\nEco Warrior: \n')
eco_warrior = PrettyTable(["Name", "Points", "Pistol Kills"])
eco_warrior.align["Name"] = "l"
eco_warrior.align["Points"] = "r"
eco_warrior.align["Pistol Kills"] = "r"
for entry in sorted_list:
eco_warrior.add_row(entry)
str_eco_warrior = eco_warrior.get_string()
out_file.write(str_eco_warrior)
def print_entryfragger(sorted_list, out_file):
out_file.write('\n\nEntry Fragger: \n')
entry_fragger = PrettyTable(["Name", "Points", "Opening Kills"])
entry_fragger.align["Name"] = "l"
entry_fragger.align["Points"] = "r"
entry_fragger.align["Opening Kills"] = "r"
for entry in sorted_list:
entry_fragger.add_row(entry)
str_entry_fragger = entry_fragger.get_string()
out_file.write(str_entry_fragger)
def print_sniper(sorted_list, out_file):
out_file.write('\n\nSniper: \n')
sniper = PrettyTable(["Name", "Points", "Sniper Kills"])
sniper.align["Name"] = "l"
sniper.align["Points"] = "r"
sniper.align["Sniper Kills"] = "r"
for entry in sorted_list:
sniper.add_row(entry)
str_sniper = sniper.get_string()
out_file.write(str_sniper)
with open(input_file) as inputfile:
data = json.load(inputfile)
for player in data['items_game_live']['pro_players'].values():
name = player['name']
if not stage_to_parse in player['events']['10']:
continue
thisStage = player['events']['10'][stage_to_parse]
kills = int(thisStage['enemy_kills'])
deaths = int(thisStage['deaths'])
clutch_kills = int(thisStage['clutch_kills'])
opening_kills = int(thisStage['opening_kills'])
pistol_kills = int(thisStage['pistol_kills'])
sniper_kills = int(thisStage['sniper_kills'])
calculate_commando(name, kills, deaths)
calculate_clutchking(name, kills, deaths, clutch_kills)
calculate_ecowarrior(name, kills, deaths, pistol_kills)
calculate_entryfragger(name, kills, deaths, opening_kills)
calculate_sniper(name, kills, deaths, sniper_kills)
s_commando = sorted(commando_list, key=itemgetter(1, 2), reverse=True)
s_clutch_king = sorted(clutch_king_list, key=itemgetter(1, 2), reverse=True)
s_eco_warrior = sorted(eco_warrior_list, key=itemgetter(1, 2), reverse=True)
s_entry_fragger = sorted(entry_fragger_list, key=itemgetter(1, 2), reverse=True)
s_sniper = sorted(sniper_list, key=itemgetter(1, 2), reverse=True)
find_optimal()
s_optimal_combinations = sorted(optimal_combinations, key=itemgetter(5), reverse=True)
with open(output_file, 'w') as outFile:
print_optimal(s_optimal_combinations, outFile)
print_commando(s_commando, outFile)
print_clutchking(s_clutch_king, outFile)
print_ecowarrior(s_eco_warrior, outFile)
print_entryfragger(s_entry_fragger, outFile)
print_sniper(s_sniper, outFile)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment