API ReferenceGE Extensionsgameplaysites
Sites Manager
Extension that manages loading, caching, and lifecycle of `*.sites.json` files across all levels. Provides utility functions for finding sites files and best parking spots.
Extension that manages loading, caching, and lifecycle of *.sites.json files across all levels. Provides utility functions for finding sites files and best parking spots.
Public API
| Function | Signature | Returns | Description |
|---|---|---|---|
getAllLevelSites | () | nil | Scan all levels for *.sites.json files |
loadSites | (filepath, force, ignoreCache) | sites? | Load and cache a sites file |
getSitesFilesByLevel | () | table | Map of level → sites file paths |
getCurrentLevelSitesFiles | () | table | Sites files for current level |
getCurrentLevelSitesFileByName | (name) | string? | Find sites file by name prefix |
getBestParkingSpotForVehicleFromList | (vehId, spots) | spot | Best fitting unoccupied spot |
Extension Hooks
| Hook | Purpose |
|---|---|
onModManagerReady | Scan all levels for sites files |
onClientStartMission | Record current level |
onClientEndMission | Clear sites cache |
onSerialize | Save cache state for hot-reload |
onDeserialized | Restore cache from hot-reload data |
M.getAllLevelSites | () |
M.getBestParkingSpotForVehicleFromList | (vehId, parkingSpots) |
M.getCurrentLevelSitesFileByName | (name) |
M.getCurrentLevelSitesFiles | (name) |
M.getSitesFilesByLevel | () |
M.loadSites | (filepath, force, ignoreCache) |
M.onClientEndMission | () |
M.onClientStartMission | () |
M.onDeserialized | (data) |
M.onModManagerReady | () |
M.onSerialize | () |
Internals
sitesCache: Map offilepath → Sitesobject (cached after first load)sitesByLevel: Map oflevelName → array of sites file pathscurrentLevel: Current level identifier
How It Works
onModManagerReadyscans all levels viacore_levels.getList()for*.sites.jsonfilesloadSitesreads a file, deserializes into aSitesobject, callsfinalizeSites(), and caches it- Cache is cleared on mission end to free memory
- Serialization/deserialization support enables hot-reload without re-scanning
-- Load sites for a specific file
local sites = gameplay_sites_sitesManager.loadSites("/levels/west_coast_usa/main.sites.json")
-- Find by name
local filepath = gameplay_sites_sitesManager.getCurrentLevelSitesFileByName("main")
local sites = gameplay_sites_sitesManager.loadSites(filepath)
-- Find best parking spot
local spots = sites.parkingSpots.sorted
local best = gameplay_sites_sitesManager.getBestParkingSpotForVehicleFromList(vehId, spots)
best:moveResetVehicleTo(vehId)Dependencies
gameplay/sites/sites- Sites container classcore_levels- level listing and paths
Notes
loadSiteswithforce=truebypasses cache;ignoreCache=trueloads without storing in cachegetBestParkingSpotForVehicleFromListchecksvehicleFitsandhasAnyVehicles, falls back to last spot- Sites file naming convention:
<name>.sites.json
See Also
- Sites Custom Fields - Related reference
- Sites Location - Related reference
- Sites Parking Spot - Related reference
- Gameplay Systems Guide - Guide
Sites Container
Class that holds all site data for a level: locations, zones, and parking spots. Provides spatial queries via KD-trees and manages relationships between zones and their contained objects.
Sites Zone
Class representing a 2D polygon zone with optional top/bottom bounding planes. Used for defining areas (parking zones, restricted areas, etc.) within the sites system.