Godot 4 · GDScript
Classements globaux
Creer des Classements
Dans le tableau de bord, ouvrez la section Classements et creez une table en fournissant un nom. Configurez l'ordre, le nombre de scores et les champs de donnees supplementaires.
Parametres du Classement
Une fois cree, configurez :
- Ordre : descendant ou ascendant.
- Scores a afficher : nombre de lignes retournees.
- Score min/max : limites optionnelles ; les envois hors limites sont rejetes.
- Champs personnalises : donnees supplementaires par score (niveau, pays, etc.), jusqu'a 20 selon votre plan.
- Scores temporels : classements quotidien/hebdomadaire/mensuel. Desactive = table historique uniquement ; un envoi qui ne depasse pas le meilleur score n'enregistre rien.
Conservez la cle de chaque table : vous l'utiliserez dans set_leaderboard.
Plusieurs Tables et Index
Declarez toutes vos tables ensemble. L'ordre definit l'index que vous utiliserez toujours (1, 2, 3...).
Gamdato.set_leaderboard(["cle_1", "cle_2", "cle_3"])
# cle_1 -> table 1, cle_2 -> table 2, cle_3 -> table 3Envoyer des Scores
Envoyez le score d'un joueur a une table par son index, avec des donnees personnalisees optionnelles :
# Recommande : reessaie hors ligne et survit aux fermetures de l'app.
Gamdato.submit_with_retry(1, score, {"niveau" : niveau_atteint})# submit_completed(success: bool, table_index: int, server_score: int)
# submit_effect(table_index: int, effect: String, periods_enabled: bool)
# effect = "updated" the historic (all-time) score was written
# "periods_only" only the daily/weekly/monthly buckets improved
# "not_improved" nothing was stored (doesn't beat your best)
Gamdato.submit_effect.connect(func(table, effect, periods_enabled):
match effect:
"updated": print("new historic best!")
"periods_only": print("improved a daily/weekly/monthly board")
"not_improved": print("kept your previous best"))submit_with_retry ne remplace un score en file que si le nouveau est superieur. Utilisez submit() pour un envoi simple sans reessai. Le signal submit_effect rapporte l'effet exact : "updated" (score historique ecrit), "periods_only" (seuls les classements quotidien/hebdomadaire/mensuel ont progresse) ou "not_improved" (rien n'a ete enregistre). Sur les tables avec scores temporels desactives, un score qui ne depasse pas votre meilleur en cache n'est meme pas envoye (l'appel retourne false), consultez get_table_config(table).
Lire les Scores
Ces fonctions renvoient instantanement les dernieres donnees chargees, sans attente reseau :
- get_table_data(table) : Le haut de la table avec les donnees supplementaires.
- get_best_score(table) / get_player_pos(table) : Votre meilleur score et votre rang.
for ligne in Gamdato.get_table_data(1):
print("#%d %s %d" % [ligne.rank, ligne.player_name, ligne.score])
print("Votre meilleur : %d (rang %d)" % [Gamdato.get_best_score(1), Gamdato.get_player_pos(1)])# get_table_data(table) -> Array, each row:
{
"rank": int,
"player_key": String,
"player_name": String,
"score": int,
"custom_data": Dictionary
}
# custom_data holds the extra fields you defined for the table in the panel, e.g.:
{
"level": 2,
"country": "Mexico"
}Vues : Periodes et Amis
Demandez des vues filtrees (quotidienne, hebdomadaire, mensuelle ou amis uniquement) et ecoutez view_loaded :
Gamdato.view_loaded.connect(_on_view)
Gamdato.load_leaderboard_view(1, "weekly") # top hebdomadaire
Gamdato.load_leaderboard_view(1, "all", {"friends_only" : true}) # amis uniquement
func _on_view(table, periode, amis_seulement, scores, mon_score) -> void:
for ligne in scores:
print("#%d %s %d" % [ligne.rank, ligne.player_name, ligne.score])# scores: Array, each row:
{
"rank": int,
"player_key": String,
"player_name": String,
"score": int,
"custom_data": Dictionary,
"date": String
}
# player_score: Dictionary (your own row), or null if you have no score:
{
"rank": int,
"score": int,
"custom_data": Dictionary,
"date": String # period bucket the score belongs to
}
# custom_data keys are the extra fields you defined for the table in the panel.
# The response also carries the table's dashboard config:
# "leaderboard": { "name": String, "sort_order": "asc" | "desc", "periods_enabled": bool }
# Period views (daily/weekly/monthly) additionally include "period" and "period_key".Rechercher et Voir des Joueurs
Recherchez par nom ou consultez le profil d'un autre joueur :
Gamdato.search_players(1, "texte") # -> players_search_completed
Gamdato.load_player_info(player_key) # -> player_info_loaded# players_search_completed -> results: Array, each:
{
"rank": int,
"player_key": String,
"player_name": String,
"score": int
}
# player_info_loaded -> player: Dictionary
{
"player_key": String,
"player_name": String,
"is_invitable": bool,
"created_at": String
}
# ...plus scores: Array, one per leaderboard the player appears on:
{
"leaderboard": {
"table_key": String,
"name": String,
"sort_order": String # "asc" | "desc"
},
"rank": int,
"score": int,
"custom_data": Dictionary,
"date": String,
"updated_at": String
}