Godot 4 · GDScript
Saves na nuvem
Os saves na nuvem permitem que um jogador mantenha o progresso entre dispositivos. Cada save fica em um slot numerado (1-10) e é um objeto de dados de formato livre validado contra o esquema que você define no painel.
Configuração do Painel
No painel, habilite o salvamento na nuvem e defina o esquema do save: os campos que seu objeto de save pode conter e seus tipos. O número de slots e o limite de tamanho dependem do seu plano.
Os saves são validados contra esse esquema no servidor: um campo que não está no esquema, ou um tipo incorreto, é rejeitado.
Salvar em um Slot
Escreva (ou sobrescreva) um slot com os seus dados de save. Escute save_completed.
Gamdato.save_completed.connect(_on_saved)
Gamdato.save_game(1, {"level": 5, "coins": 120, "unlocked": ["sword"]})
func _on_saved(ok: bool, slot: int, meta: Dictionary, error_code: String) -> void:
if ok: print("Slot %d salvo (%d bytes)" % [slot, meta.size_bytes])
else: print("Falha ao salvar: %s" % error_code)error_code pode ser plan (saves na nuvem não estão no seu plano), too_large, storage_full ou validation (os dados não correspondem ao esquema).
Carregar um Slot
Leia um slot de volta. Um slot vazio não é um erro: found é simplesmente false.
Gamdato.save_loaded.connect(_on_loaded)
Gamdato.load_game(1)
func _on_loaded(slot: int, found: bool, data: Dictionary, error_code: String) -> void:
if found:
_apply_save(data)
else:
_new_game()# save_loaded(slot: int, found: bool, data: Dictionary, error_code: String)
# found = false for an empty slot (not an error)
# data = the Dictionary you saved, verbatim:
{ "level": 5, "coins": 120 }Listar Slots
Liste quais slots estão em uso, com seu tamanho e a hora da última atualização (sem dados). Útil para um menu de slots de save. Chega pelo sinal saves_listed.
Gamdato.saves_listed.connect(_on_saves)
Gamdato.list_saves()
func _on_saves(saves: Array) -> void:
for s in saves:
print("Slot %d - atualizado %s" % [s.slot, s.updated_at])# saves: Array, each used slot (metadata only, no data):
{
"slot": int,
"size_bytes": int,
"updated_at": String
}
# save_completed -> meta has the same shape (slot, size_bytes, updated_at).Apagar um Slot
Remova um slot. Apagar um slot vazio é inofensivo (ele ainda reporta sucesso).
Gamdato.save_deleted.connect(_on_deleted)
Gamdato.delete_save(1)
func _on_deleted(ok: bool, slot: int, error_code: String) -> void:
if ok: print("Slot %d limpo" % slot)