add initial script
This commit is contained in:
commit
ed9edede05
152
gen-stats.rb
Executable file
152
gen-stats.rb
Executable file
@ -0,0 +1,152 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
require "json"
|
||||
require "set"
|
||||
|
||||
ADVENTURE_BIOMES = [
|
||||
"Beach",
|
||||
"Birch Forest",
|
||||
"Birch Forest Hills",
|
||||
"Cold Beach",
|
||||
"Cold Taiga",
|
||||
"Cold Taiga Hills",
|
||||
"Deep Ocean",
|
||||
"Desert",
|
||||
"Desert Hills",
|
||||
"Extreme Hills",
|
||||
"Extreme Hills+",
|
||||
"Forest",
|
||||
"ForestHills",
|
||||
"FrozenRiver",
|
||||
"Ice Mountains",
|
||||
"Ice Plains",
|
||||
"Jungle",
|
||||
"Jungle Edge",
|
||||
"Jungle Hills",
|
||||
"Mega Taiga",
|
||||
"Mega Taiga Hills",
|
||||
"Mesa",
|
||||
"Mesa Plateau",
|
||||
"Mesa Plateau F",
|
||||
"Mushroom Island",
|
||||
"MushroomIslandShore",
|
||||
"Ocean",
|
||||
"Plains",
|
||||
"River",
|
||||
"Roofed Forest",
|
||||
"Savanna",
|
||||
"Savanna Plateau",
|
||||
"Stone Beach",
|
||||
"Swampland",
|
||||
"Taiga",
|
||||
"Taiga Hills",
|
||||
]
|
||||
|
||||
class GenStats
|
||||
def initialize
|
||||
@all_explored_biomes = []
|
||||
end
|
||||
|
||||
def run
|
||||
user_cache = JSON.load(File.read("usercache.json"))
|
||||
@users_by_uuid = user_cache.reduce({}) do |result, user|
|
||||
result[user["uuid"]] = user
|
||||
result
|
||||
end
|
||||
|
||||
@all_stats = {
|
||||
"Achievements" => {},
|
||||
"Unexplored Biomes" => {},
|
||||
"Mob Kills" => {},
|
||||
"Deaths" => {},
|
||||
"Killed" => {},
|
||||
"Killed By" => {},
|
||||
}
|
||||
Dir["world/stats/*.json"].each do |stats_fname|
|
||||
load_stats(stats_fname)
|
||||
end
|
||||
|
||||
print_stats
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def load_stats(stats_fname)
|
||||
File.basename(stats_fname) =~ /^(.*)\.json/
|
||||
user_name =
|
||||
if @users_by_uuid[$1]
|
||||
@users_by_uuid[$1]["name"]
|
||||
else
|
||||
$1
|
||||
end
|
||||
stats = JSON.load(File.read(stats_fname))
|
||||
|
||||
@all_stats["Achievements"][user_name] =
|
||||
stats.find_all do |stat_name, stat_value|
|
||||
stat_name.start_with?("achievement.") and (stat_value.is_a?(Integer) or (stat_value.is_a?(Hash) and stat_value["value"] and stat_value["value"] > 0))
|
||||
end.size
|
||||
|
||||
@all_stats["Unexplored Biomes"][user_name] =
|
||||
if stats["achievement.exploreAllBiomes"]
|
||||
explored_biomes = stats["achievement.exploreAllBiomes"]["progress"]
|
||||
unexplored_biomes = ADVENTURE_BIOMES - explored_biomes
|
||||
@all_explored_biomes += explored_biomes
|
||||
unexplored_biomes.sort.join(", ")
|
||||
end
|
||||
|
||||
@all_stats["Mob Kills"][user_name] = stats["stat.mobKills"]
|
||||
|
||||
@all_stats["Deaths"][user_name] = stats["stat.deaths"]
|
||||
|
||||
@all_stats["Killed"][user_name] =
|
||||
stats.reduce({}) do |result, (stat_name, stat_value)|
|
||||
if stat_name =~ /^stat\.killEntity\.(\w+)$/
|
||||
result[$1] = stat_value
|
||||
end
|
||||
result
|
||||
end
|
||||
|
||||
@all_stats["Killed By"][user_name] =
|
||||
stats.reduce({}) do |result, (stat_name, stat_value)|
|
||||
if stat_name =~ /^stat\.entityKilledBy\.(\w+)$/
|
||||
result[$1] = stat_value
|
||||
end
|
||||
result
|
||||
end
|
||||
end
|
||||
|
||||
def print_stats
|
||||
@all_stats.each do |stat_name, stats|
|
||||
next if stats.empty?
|
||||
|
||||
puts "= #{stat_name} ="
|
||||
|
||||
if stats.first.last.is_a?(Hash)
|
||||
keys = stats.reduce([]) do |result, (player_name, stat_value)|
|
||||
result + stat_value.keys
|
||||
end.uniq.sort
|
||||
puts "|= Player |= #{keys.join(" |= ")}"
|
||||
stats.sort.each do |player_name, stat_value|
|
||||
values = keys.map do |key|
|
||||
stat_value[key]
|
||||
end
|
||||
puts "| #{player_name} | #{values.join(" | ")}"
|
||||
end
|
||||
else
|
||||
puts "|= Player |= Value"
|
||||
stats.sort.each do |player_name, stat_value|
|
||||
puts "| #{player_name} | #{stat_value}"
|
||||
end
|
||||
end
|
||||
|
||||
puts
|
||||
|
||||
if stat_name == "Unexplored Biomes"
|
||||
puts("Common Unexplored Biomes: " + (ADVENTURE_BIOMES - @all_explored_biomes).sort.join(", "))
|
||||
puts
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
GenStats.new.run
|
Loading…
x
Reference in New Issue
Block a user