-
-
Save BOHverkill/1110f709c4960e7ba1cce4416e1c5911 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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