API ReferenceGE Extensionscareer
Career Save System
Manages career save slots with rotating autosaves. Handles save/load, slot management, corruption detection, and async extension saving.
Manages career save slots with rotating autosaves. Handles save/load, slot management, corruption detection, and async extension saving.
Public API
| Function | Signature | Returns | Description |
|---|---|---|---|
M.setSaveSlot | (slotName, specificAutosave) | boolean | Sets active save slot (loads newest or specific autosave) |
M.removeSaveSlot | (slotName) | nil | Deletes a save slot directory |
M.renameSaveSlot | (slotName, newName) | boolean | Renames a save slot |
M.getCurrentSaveSlot | () | string, string | Returns slot name and save path |
M.saveCurrent | (vehiclesThumbnailUpdate) | nil | Saves current career state to oldest autosave |
M.getAllSaveSlots | () | table | Lists all save slot folder names |
M.getSaveRootDirectory | () | string | Returns "settings/cloud/saves/" |
M.getAutosave | (path, oldest) | string, string | Gets newest/oldest autosave path and date |
M.getAllAutosaves | (slotName) | table | All autosaves for a slot, sorted by date |
M.getSaveSystemVersion | () | number | Current save system version (61) |
M.getBackwardsCompVersion | () | number | Minimum compatible version (36) |
M.saveFailed | () | nil | Marks current save as failed |
M.registerAsyncSaveExtension | (extName) | nil | Registers an extension for async saving |
M.asyncSaveExtensionFinished | (extName) | nil | Signals async save completion |
M.jsonWriteFileSafe | (filename, obj, pretty, numberPrecision, tempFileName) | boolean | Atomic JSON write (temp file + rename) |
Hooks
| Hook | Purpose |
|---|---|
M.onExtensionLoaded | No-op placeholder |
M.onSerialize | Saves slot state for Lua reload |
M.onDeserialized | Restores slot state after Lua reload |
Save Architecture
- Root:
settings/cloud/saves/ - Slots: Named folders under root
- Autosaves: 3 rotating autosave folders per slot (
autosave1,autosave2,autosave3) - Each autosave has
info.jsonwithversion,date,creationDate,corrupted
Save Flow
- Find oldest autosave to overwrite
- Write
info.jsonwithcorrupted = true - Fire
onSaveCurrentSaveSlotAsyncStartandonSaveCurrentSaveSlothooks - Wait for all async extensions to finish
- Clear
corruptedflag and write finalinfo.json
Usage Examples
-- Save current career
career_saveSystem.saveCurrent()
-- Set active save slot
career_saveSystem.setSaveSlot("career_01")
-- Get current slot info
local slot, path = career_saveSystem.getCurrentSaveSlot()
-- Safe JSON write with atomic rename
career_saveSystem.jsonWriteFileSafe("path/to/file.json", myData, true)
-- List all save slots
local slots = career_saveSystem.getAllSaveSlots()Notes
- Saves are skipped during the linear tutorial
- Corrupted saves are detected via the
corruptedflag ininfo.json - Directory names are validated against illegal characters:
<>:"/\|?*