Metadata
Varion metadata разделена по visibility и authority. Server-side код владеет реплицируемой metadata; client-side local metadata не является security boundary.
Полный список server-JS функций — в Server API, client-side чтение/запись — в Client JS API.
Scopes
Каждая network entity (player, vehicle, object, ...) и глобальный объект varion держат раздельные хранилища. getMeta и getSyncedMeta — это РАЗНЫЕ scope, а не синонимы: getMeta читает локальное (не реплицируемое) хранилище, getSyncedMeta читает реплицируемое.
| Scope | Кто видит значение | Server JS | Event |
|---|---|---|---|
| Server-only | только сервер, не отправляется | setMeta (entity) / varion.setMeta | metaChange / globalMetaChange |
| Local | только клиент этого игрока | (C# SetLocalMetaData) | localMetaChange |
| Synced | все клиенты | setSyncedMeta / varion.setSyncedMeta | syncedMetaChange / globalSyncedMetaChange |
| Stream-synced | клиенты, которые стримят entity | setStreamSyncedMeta | streamSyncedMetaChange |
setSyncedMeta* и setStreamSyncedMeta* имеют ...Data-суффиксные алиасы (setSyncedMetaData, getSyncedMetaData, getStreamSyncedMetaDataKeys, ...) — это те же самые функции.
Server JavaScript
// Server-only: не отправляется клиентам (событие metaChange)
player.setMeta('accountId', 42);
const id = player.getMeta('accountId');
player.deleteMeta('accountId');
// Synced: реплицируется всем клиентам (событие syncedMetaChange)
vehicle.setSyncedMeta('fuel', 75);
const fuel = vehicle.getSyncedMeta('fuel'); // === getSyncedMetaData('fuel')
vehicle.deleteSyncedMeta('fuel');
// Stream-synced: только клиентам, у которых entity streamed in
entity.setStreamSyncedMeta('label', 'shop');Global metadata
Объект varion держит серверные глобальные хранилища:
| Server JS (varion) | Кто видит значение | Event |
|---|---|---|
varion.setMeta / getMeta / hasMeta / deleteMeta | только сервер, не реплицируется | globalMetaChange |
varion.setSyncedMeta / getSyncedMeta / ... | все клиенты | globalSyncedMetaChange |
varion.setGlobalMeta / getGlobalMeta / ... | все клиенты (то же хранилище) | globalSyncedMetaChange |
varion.setSyncedMeta и varion.setGlobalMeta пишут в ОДНО реплицируемое хранилище и оба поднимают globalSyncedMetaChange — это синонимы. Отдельное (серверное, не реплицируемое) хранилище только у varion.setMeta.
C# (server SDK)
IPlayer держит server-only data — обычный серверный словарь, ничего не реплицируется и события не поднимаются:
player.SetData("accountId", accountId);
var id = player.GetData<int>("accountId");
player.DeleteData("accountId");Local metadata доставляется ТОЛЬКО клиенту этого игрока (не другим), где читается через varion.getLocalMeta:
player.SetLocalMetaData("hudTheme", "dark");
var theme = player.GetLocalMetaData<string>("hudTheme");Synced / stream-synced доступны на любой entity (IVehicle, ServerEntity, VirtualEntity, IPlayer) и реплицируются нативным bridge:
vehicle.SetSyncedMetaData("fuel", 75);
var fuel = vehicle.GetSyncedMetaData<int>("fuel");
vehicle.DeleteSyncedMetaData("fuel");
entity.SetStreamSyncedMetaData("label", "shop");
entity.DeleteStreamSyncedMetaData("label");Server-side событие изменения metadata: Varion.OnMetaChange.
Client JavaScript
Client читает synced metadata, выставленную сервером, и владеет собственной client-local metadata (client-local не реплицируется обратно на сервер):
// Читать synced / stream-synced entity metadata (источник — сервер)
const fuel = entity.getSyncedMeta('fuel'); // === getSyncedMetaData
const label = entity.getStreamSyncedMeta('label');
// Client-local metadata локального игрока (событие localMetaChange)
varion.setLocalMeta('hudTheme', 'dark');
const theme = varion.getLocalMeta('hudTheme');
// Читать глобальную synced metadata, выставленную сервером (read-only)
const round = varion.getSyncedMeta('round');На клиенте entity.getMeta читает ЛОКАЛЬНОЕ (client-side) хранилище entity, а не synced — для server-выставленных значений используйте getSyncedMeta / getStreamSyncedMeta.
Change events
Client bootstrap и server host поднимают локальные события:
metaChange— server-only metadata entitysyncedMetaChange— synced metadata entitystreamSyncedMetaChange— stream-synced metadata entitylocalMetaChange— client-local metadata локального игрокаglobalMetaChange— глобальная server-only metadataglobalSyncedMetaChange— глобальная synced metadata (сервер → клиент)
Source backing
Страница основана на sdk/Varion.SDK/IPlayer.cs, sdk/Varion.SDK/Player.cs, sdk/Varion.SDK/Vehicle.cs, sdk/Varion.SDK/ServerEntity.cs, sdk/Varion.SDK/VirtualEntity.cs, серверном host server/host/varion-host.cjs, контракте server/src/CServer.cpp и client runtime sdk/client-js-runtime/injected/entities-bootstrap.js (+ events-bootstrap.js).