Files
2026-04-30 17:13:04 +02:00

86 lines
3.2 KiB
GDScript

class_name ServerStatParser extends Node
@export var server_stat_getter: Node
var parsed:bool
var users_month:int
var users_all_time:int
var all_time_kills:int
var month_kills:int
var gamemodes_month:Dictionary
var gamemodes:Dictionary
var maps_month:Dictionary
var maps:Dictionary
var players_total:Array[PlayerInfo]
signal just_parsed
func _process(delta: float) -> void:
if !parsed:
if server_stat_getter.get("resulting_txt") != null:
var result:String = server_stat_getter.get("resulting_txt")
if result:
var json:Dictionary = JSON.parse_string(result)
if json is Dictionary:
parsed = true
for server:Dictionary in json.values():
#print(server)
var time:float = Time.get_unix_time_from_datetime_string(server["created"])
var current_time:float = Time.get_unix_time_from_system()
var diff:float = current_time - time
var this_month:bool = diff < 60*60*24*30
if server.has("gamemode"):
var previous:int = 0
if gamemodes.has(server["gamemode"]):
previous = gamemodes[server["gamemode"]]
gamemodes[server["gamemode"]] = previous + 1
if server.has("map"):
var previous:int = 0
if maps.has(server["map"]):
previous = maps[server["map"]]
maps[server["map"]] = previous + 1
if this_month:
if server.has("gamemode"):
var previous:int = 0
if gamemodes_month.has(server["gamemode"]):
previous = gamemodes_month[server["gamemode"]]
gamemodes_month[server["gamemode"]] = previous + 1
if server.has("map"):
var previous:int = 0
if maps_month.has(server["map"]):
previous = maps_month[server["map"]]
maps_month[server["map"]] = previous + 1
for player in server["players"]:
var exists_yet:bool = false
for found_player in players_total:
if found_player.uid == player:
exists_yet = true
found_player.times_played += 1
found_player.total_kills += int(server["players"][player]["kills"])
var classes = server["players"][player]["classes"]
if classes is Dictionary:
print(classes)
for player_class:Dictionary in classes.values():
if player_class.has("stats"):
if player_class["stats"].has("deaths"):
found_player.total_deaths += int(player_class["stats"]["deaths"])
break
if !exists_yet:
if this_month:
users_month += 1
#print(player)
var new_player:PlayerInfo = PlayerInfo.new()
new_player.uid = player
new_player.username = str(server["players"][player]["username"])
new_player.times_played = 1
new_player.total_kills += int(server["players"][player]["kills"])
var classes = server["players"][player]["classes"]
if classes is Dictionary:
print(classes)
for player_class:Dictionary in classes.values():
if player_class.has("stats"):
if player_class["stats"].has("deaths"):
new_player.total_deaths += int(player_class["stats"]["deaths"])
players_total.append(new_player)
var dict:Dictionary = server["players"]
if dict.has("kills"):
all_time_kills += dict["kills"]
just_parsed.emit()