Godot 4 · GDScript
Guardado en la nube
El guardado en la nube permite que el jugador conserve su progreso entre dispositivos. Cada guardado vive en una ranura numerada (1-10) y es un objeto de datos libre validado contra el esquema que defines en el panel.
Configuracion en el Panel
En el panel, habilita el guardado en la nube y define el esquema de guardado: los campos que tu objeto de guardado puede contener y sus tipos. La cantidad de ranuras y el limite de tamano dependen de tu plan.
Los guardados se validan contra este esquema en el servidor: un campo que no este en el esquema, o un tipo incorrecto, se rechaza.
Guardar en una Ranura
Escribe (o sobrescribe) una ranura con tus datos de guardado. Escucha 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("Guardado en ranura %d (%d bytes)" % [slot, meta.size_bytes])
else: print("Fallo al guardar: %s" % error_code)error_code puede ser plan (el guardado en la nube no esta en tu plan), too_large, storage_full o validation (los datos no coinciden con el esquema).
Cargar una Ranura
Lee de vuelta una ranura. Una ranura vacia no es un error: found simplemente es 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 Ranuras
Lista que ranuras estan ocupadas, con su tamano y la hora de la ultima actualizacion (sin los datos). Util para un menu de ranuras de guardado. Llega por la senal saves_listed.
Gamdato.saves_listed.connect(_on_saves)
Gamdato.list_saves()
func _on_saves(saves: Array) -> void:
for s in saves:
print("Ranura %d - actualizada %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).Borrar una Ranura
Elimina una ranura. Borrar una ranura vacia es inofensivo (igual informa exito).
Gamdato.save_deleted.connect(_on_deleted)
Gamdato.delete_save(1)
func _on_deleted(ok: bool, slot: int, error_code: String) -> void:
if ok: print("Ranura %d vaciada" % slot)