Транспорт
Создавайте сетевой транспорт на сервере. Manager возвращает null, если исчерпан max_vehicles.
vimp.on('playerConnected', (player) => {
const vehicle = vimp.vehicles.create(
vimp.hash('adder'),
94.5,
-1940.2,
20.7,
307,
{
primaryColor: 27,
secondaryColor: 111,
numberPlate: 'VIMP',
lockState: 1,
engineOn: true,
dimension: player.dimension,
},
)
if (vehicle) {
vehicle.setStreamSyncedMeta('ownerId', player.id)
player.putIntoVehicle(vehicle.id, -1)
}
})Изменяемые position, rotation, paint, plate, dirt, livery, lock state, health, engine state и dimension обновляют авторитетное состояние и отправляются клиентам, которые stream машину.
Ownership
VIMP не навязывает gameplay-модель владения. Компактный owner key можно хранить в stream-synced metadata для отображения, а авторитетную запись — в server application state или database.
Перед изменением проверяйте:
- имеет ли sender доступ к машине;
- существует ли entity;
- находится ли игрок достаточно близко и в том же dimension;
- разрешено ли запрошенное значение правилами gamemode.
Client vehicle содержит локальный id, nullable remoteId и GTA handle. Generic metadata API использует remoteId, natives — handle. Вне streaming range wrapper может существовать с handle === 0.
Явно удаляйте временный транспорт после завершения его gameplay scope.