Godot 4 · GDScript
Достижения
Достижения, которые вы определяете в панели и разблокируете из игры. У каждого есть ключ; скрытые остаются замаскированными, пока игрок их не разблокирует.
Настройка панели
В панели создайте свои достижения: название, описание, иконку, очки и то, является ли каждое из них скрытым. Каждое получает ключ, который вы используете из кода.
Сохраните ключ каждого достижения: это идентификатор, который вы передаёте в unlock_achievement() и check_achievement().
Список с прогрессом
Получите все активные достижения с состоянием разблокировки этого игрока (скрытые, ещё не разблокированные, опускаются). Приходит через 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
}Разблокировка достижения
Разблокируйте достижение для текущего игрока. Безопасно вызывать повторно: оно никогда не выдаётся дважды (вместо этого сообщает 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("Achievement unlocked: %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 lockedРазблокировка неактивного достижения завершается неудачей (success=false). Неизвестные ключи также завершаются неудачей.
Проверка или просмотр одного
Спросите, разблокировано ли одно достижение, или получите его полные данные (название, иконку, очки) вместе с состоянием игрока.
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 unlocked: %s" % [key, unlocked])