Godot 4 · GDScript
Logros
Logros que defines en el panel y desbloqueas desde el juego. Cada uno tiene una clave; los ocultos permanecen enmascarados hasta que el jugador los desbloquea.
Configuracion en el Panel
En el panel, crea tus logros: nombre, descripcion, icono, puntos y si cada uno es oculto. Cada uno recibe una clave que usas desde el codigo.
Guarda la clave de cada logro: es el identificador que pasas a unlock_achievement() y check_achievement().
Listar con Progreso
Obtiene todos los logros activos con el estado de desbloqueo de este jugador (los ocultos que siguen bloqueados se omiten). Llega por la senal achievements_loaded.
Gamdato.achievements_loaded.connect(_on_achievements)
Gamdato.list_achievements()
func _on_achievements(list: Array) -> void:
for a in list:
var mark := "[x]" if a.unlocked else "[ ]"
print("%s %s (%d pts)" % [mark, a.name, a.points])# achievements_loaded -> achievements: Array, each:
{
"achievement_key": String,
"name": String,
"description": String,
"icon_url": String,
"points": int,
"is_hidden": bool,
"sort_order": int,
"unlocked": bool,
"unlocked_at": String # null while locked
}Desbloquear un Logro
Desbloquea uno para el jugador actual. Es seguro llamarlo repetidamente: nunca lo otorga dos veces (en su lugar informa already_unlocked).
Gamdato.achievement_unlocked.connect(_on_unlocked)
Gamdato.unlock_achievement("first_win")
func _on_unlocked(ok: bool, key: String, already: bool) -> void:
if ok and not already:
print("Logro desbloqueado: %s" % key)# achievement_unlocked(success: bool, achievement_key: String, already_unlocked: bool)
# already_unlocked = true when it was unlocked before (safe to re-call)
# achievement_checked(achievement_key: String, unlocked: bool, unlocked_at: String)
# unlocked_at is empty/null while still lockedDesbloquear un logro inactivo falla (success=false). Las claves desconocidas tambien fallan.
Consultar o Inspeccionar Uno
Pregunta si un logro concreto esta desbloqueado, u obtiene sus detalles completos (nombre, icono, puntos) junto con el estado del jugador.
Gamdato.achievement_checked.connect(_on_checked)
Gamdato.check_achievement("first_win")
Gamdato.achievement_info_loaded.connect(_on_ach_info)
Gamdato.get_achievement_info("first_win")
func _on_checked(key: String, unlocked: bool, unlocked_at: String) -> void:
print("%s desbloqueado: %s" % [key, unlocked])