@open-core/framework 1.0.5-beta.2 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/README.md +2 -8
  2. package/dist/adapters/contracts/IEngineEvents.d.ts +3 -3
  3. package/dist/adapters/contracts/IExports.d.ts +2 -2
  4. package/dist/adapters/contracts/client/IClientLocalPlayerBridge.d.ts +21 -0
  5. package/dist/adapters/contracts/client/IClientLocalPlayerBridge.js +6 -0
  6. package/dist/adapters/contracts/client/IClientRuntimeBridge.d.ts +5 -5
  7. package/dist/adapters/contracts/client/camera/IClientCameraPort.d.ts +107 -0
  8. package/dist/adapters/contracts/client/camera/IClientCameraPort.js +8 -0
  9. package/dist/adapters/contracts/client/camera/index.d.ts +1 -0
  10. package/dist/adapters/contracts/client/camera/index.js +1 -0
  11. package/dist/adapters/contracts/client/index.d.ts +4 -0
  12. package/dist/adapters/contracts/client/index.js +4 -0
  13. package/dist/adapters/contracts/client/ped/IClientPedPort.d.ts +62 -0
  14. package/dist/adapters/contracts/client/ped/IClientPedPort.js +5 -0
  15. package/dist/adapters/contracts/client/ped/index.d.ts +1 -0
  16. package/dist/adapters/contracts/client/ped/index.js +1 -0
  17. package/dist/adapters/contracts/client/progress/IClientProgressPort.d.ts +53 -0
  18. package/dist/adapters/contracts/client/progress/IClientProgressPort.js +8 -0
  19. package/dist/adapters/contracts/client/progress/index.d.ts +1 -0
  20. package/dist/adapters/contracts/client/progress/index.js +1 -0
  21. package/dist/adapters/contracts/client/spawn/IClientSpawnBridge.d.ts +5 -6
  22. package/dist/adapters/contracts/client/spawn/IClientSpawnBridge.js +5 -1
  23. package/dist/adapters/contracts/client/spawn/IClientSpawnPort.d.ts +19 -0
  24. package/dist/adapters/contracts/client/spawn/IClientSpawnPort.js +2 -0
  25. package/dist/adapters/contracts/client/spawn/index.d.ts +2 -0
  26. package/dist/adapters/contracts/client/spawn/index.js +2 -0
  27. package/dist/adapters/contracts/client/spawn/types.d.ts +3 -0
  28. package/dist/adapters/contracts/client/ui/webview/IClientWebViewBridge.d.ts +1 -0
  29. package/dist/adapters/contracts/client/ui/webview/types.d.ts +2 -0
  30. package/dist/adapters/contracts/client/vehicle/IClientVehiclePort.d.ts +166 -0
  31. package/dist/adapters/contracts/client/vehicle/IClientVehiclePort.js +8 -0
  32. package/dist/adapters/contracts/client/vehicle/index.d.ts +1 -0
  33. package/dist/adapters/contracts/client/vehicle/index.js +1 -0
  34. package/dist/adapters/contracts/transport/events.api.d.ts +3 -3
  35. package/dist/adapters/contracts/transport/index.d.ts +1 -0
  36. package/dist/adapters/contracts/transport/index.js +1 -0
  37. package/dist/adapters/contracts/transport/rpc-error.d.ts +17 -0
  38. package/dist/adapters/contracts/transport/rpc-error.js +28 -0
  39. package/dist/adapters/contracts/transport/rpc.api.d.ts +3 -3
  40. package/dist/adapters/node/transport/node.events.d.ts +4 -4
  41. package/dist/adapters/node/transport/node.rpc.d.ts +3 -3
  42. package/dist/adapters/node/transport/node.rpc.js +1 -1
  43. package/dist/contracts.d.ts +1 -0
  44. package/dist/contracts.js +1 -0
  45. package/dist/index.d.ts +1 -0
  46. package/dist/index.js +1 -0
  47. package/dist/kernel/logger/client-log-console.js +8 -8
  48. package/dist/kernel/logger/index.d.ts +1 -1
  49. package/dist/kernel/logger/index.js +1 -1
  50. package/dist/kernel/logger/logger.types.d.ts +1 -0
  51. package/dist/kernel/logger/logger.types.js +35 -0
  52. package/dist/kernel/logger/transports/buffered.transport.js +4 -4
  53. package/dist/kernel/logger/transports/console.transport.js +2 -2
  54. package/dist/kernel/logger/transports/simple-console.transport.js +2 -2
  55. package/dist/runtime/client/adapter/index.d.ts +5 -0
  56. package/dist/runtime/client/adapter/index.js +5 -0
  57. package/dist/runtime/client/adapter/node-camera-port.d.ts +19 -0
  58. package/dist/runtime/client/adapter/node-camera-port.js +31 -0
  59. package/dist/runtime/client/adapter/node-client-adapter.js +15 -1
  60. package/dist/runtime/client/adapter/node-local-player-bridge.d.ts +3 -0
  61. package/dist/runtime/client/adapter/node-local-player-bridge.js +9 -0
  62. package/dist/runtime/client/adapter/node-log-console.js +8 -8
  63. package/dist/runtime/client/adapter/node-ped-port.d.ts +20 -0
  64. package/dist/runtime/client/adapter/node-ped-port.js +38 -0
  65. package/dist/runtime/client/adapter/node-progress-port.d.ts +8 -0
  66. package/dist/runtime/client/adapter/node-progress-port.js +27 -0
  67. package/dist/runtime/client/adapter/node-runtime-bridge.d.ts +2 -4
  68. package/dist/runtime/client/adapter/node-spawn-bridge.d.ts +5 -5
  69. package/dist/runtime/client/adapter/node-spawn-bridge.js +8 -4
  70. package/dist/runtime/client/adapter/node-vehicle-port.d.ts +31 -0
  71. package/dist/runtime/client/adapter/node-vehicle-port.js +73 -0
  72. package/dist/runtime/client/adapter/node-webview-bridge.d.ts +1 -0
  73. package/dist/runtime/client/adapter/node-webview-bridge.js +2 -0
  74. package/dist/runtime/client/controllers/appearance.controller.d.ts +3 -3
  75. package/dist/runtime/client/controllers/appearance.controller.js +11 -10
  76. package/dist/runtime/client/controllers/spawner.controller.js +4 -3
  77. package/dist/runtime/client/services/camera.d.ts +4 -26
  78. package/dist/runtime/client/services/camera.js +21 -27
  79. package/dist/runtime/client/services/notification.service.d.ts +3 -3
  80. package/dist/runtime/client/services/notification.service.js +7 -7
  81. package/dist/runtime/client/services/ped.service.d.ts +6 -21
  82. package/dist/runtime/client/services/ped.service.js +31 -78
  83. package/dist/runtime/client/services/progress.service.d.ts +4 -50
  84. package/dist/runtime/client/services/progress.service.js +11 -143
  85. package/dist/runtime/client/services/session-bridge.service.js +3 -2
  86. package/dist/runtime/client/services/spawn.service.d.ts +3 -5
  87. package/dist/runtime/client/services/spawn.service.js +12 -17
  88. package/dist/runtime/client/services/vehicle-client.service.d.ts +3 -3
  89. package/dist/runtime/client/services/vehicle-client.service.js +43 -143
  90. package/dist/runtime/client/services/vehicle.service.d.ts +4 -41
  91. package/dist/runtime/client/services/vehicle.service.js +24 -130
  92. package/dist/runtime/client/webview-bridge.d.ts +3 -0
  93. package/dist/runtime/client/webview-bridge.js +6 -0
  94. package/dist/runtime/client/webview.service.d.ts +1 -0
  95. package/dist/runtime/client/webview.service.js +5 -0
  96. package/dist/runtime/server/adapter/node-player-appearance-lifecycle-server.js +3 -2
  97. package/dist/runtime/server/adapter/node-player-lifecycle-server.js +4 -3
  98. package/dist/runtime/server/adapter/node-vehicle-lifecycle-server.js +2 -1
  99. package/dist/runtime/server/apis/chat.api.js +6 -5
  100. package/dist/runtime/server/apis/npcs.api.js +2 -1
  101. package/dist/runtime/server/apis/parallel-compute.api.js +1 -0
  102. package/dist/runtime/server/apis/vehicle-modification.api.js +6 -4
  103. package/dist/runtime/server/apis/vehicles.api.js +7 -4
  104. package/dist/runtime/server/bootstrap.js +13 -12
  105. package/dist/runtime/server/controllers/command-export.controller.js +4 -2
  106. package/dist/runtime/server/controllers/remote-command-execution.controller.js +2 -1
  107. package/dist/runtime/server/controllers/vehicle.controller.js +6 -5
  108. package/dist/runtime/server/decorators/command.d.ts +2 -0
  109. package/dist/runtime/server/decorators/command.js +3 -1
  110. package/dist/runtime/server/entities/npc.d.ts +1 -1
  111. package/dist/runtime/server/entities/player.d.ts +1 -1
  112. package/dist/runtime/server/entities/player.js +10 -3
  113. package/dist/runtime/server/helpers/command-validation.helper.js +20 -7
  114. package/dist/runtime/server/helpers/function-helper.d.ts +1 -0
  115. package/dist/runtime/server/helpers/function-helper.js +15 -8
  116. package/dist/runtime/server/implementations/local/channel.local.d.ts +1 -1
  117. package/dist/runtime/server/implementations/local/channel.local.js +3 -2
  118. package/dist/runtime/server/ports/channel.api-port.d.ts +1 -1
  119. package/dist/runtime/server/services/parallel/worker-pool.d.ts +1 -1
  120. package/dist/runtime/server/services/parallel/worker-pool.js +38 -6
  121. package/dist/runtime/server/services/parallel/worker.js +1 -0
  122. package/dist/runtime/server/system/processors/onRpc.processor.js +14 -3
  123. package/dist/runtime/server/system/schema-generator.d.ts +1 -1
  124. package/dist/runtime/server/system/schema-generator.js +6 -3
  125. package/dist/runtime/shared/helpers/process-tuple-schema.js +3 -0
  126. package/dist/runtime/shared/types/system-types.d.ts +55 -0
  127. package/dist/runtime/shared/types/system-types.js +54 -0
  128. package/package.json +21 -11
@@ -1,18 +1,16 @@
1
1
  import { PlayerAppearance } from '../../../kernel';
2
2
  import { Vector3 } from '../../../kernel/utils/vector3';
3
- import { IClientPlatformBridge } from '../adapter/platform-bridge';
4
3
  import { AppearanceService } from './appearance.service';
5
- import { IClientSpawnBridge } from '../../../adapters/contracts/client/spawn/IClientSpawnBridge';
4
+ import { IClientSpawnPort } from '../../../adapters/contracts/client/spawn/IClientSpawnPort';
6
5
  interface SpawnOptions {
7
6
  appearance?: PlayerAppearance;
8
7
  }
9
8
  export declare class SpawnService {
10
9
  private readonly appearanceService;
11
- private readonly spawnBridge;
12
- private readonly platform;
10
+ private readonly spawnPort;
13
11
  private spawned;
14
12
  private spawning;
15
- constructor(appearanceService: AppearanceService, spawnBridge: IClientSpawnBridge, platform: IClientPlatformBridge);
13
+ constructor(appearanceService: AppearanceService, spawnPort: IClientSpawnPort);
16
14
  init(): Promise<void>;
17
15
  spawn(position: Vector3, model: string, heading?: number, options?: SpawnOptions): Promise<void>;
18
16
  teleportTo(position: Vector3, heading?: number): Promise<void>;
@@ -12,19 +12,16 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
12
  };
13
13
  import { inject, injectable } from 'tsyringe';
14
14
  import { loggers } from '../../../kernel';
15
- import { IClientPlatformBridge } from '../adapter/platform-bridge';
16
15
  import { AppearanceService } from './appearance.service';
17
- import { IClientSpawnBridge } from '../../../adapters/contracts/client/spawn/IClientSpawnBridge';
16
+ import { IClientSpawnPort } from '../../../adapters/contracts/client/spawn/IClientSpawnPort';
18
17
  let SpawnService = class SpawnService {
19
18
  appearanceService;
20
- spawnBridge;
21
- platform;
19
+ spawnPort;
22
20
  spawned = false;
23
21
  spawning = false;
24
- constructor(appearanceService, spawnBridge, platform) {
22
+ constructor(appearanceService, spawnPort) {
25
23
  this.appearanceService = appearanceService;
26
- this.spawnBridge = spawnBridge;
27
- this.platform = platform;
24
+ this.spawnPort = spawnPort;
28
25
  }
29
26
  async init() {
30
27
  loggers.spawn.debug('SpawnService initialized');
@@ -37,10 +34,10 @@ let SpawnService = class SpawnService {
37
34
  this.spawning = true;
38
35
  try {
39
36
  loggers.spawn.debug('Waiting for spawn bridge readiness');
40
- await this.spawnBridge.waitUntilReady();
37
+ await this.spawnPort.waitUntilReady();
41
38
  loggers.spawn.debug('Spawn bridge ready, executing spawn', { position, model, heading });
42
- await this.spawnBridge.spawn({ position, model, heading });
43
- const ped = this.platform.getLocalPlayerPed();
39
+ const outcome = await this.spawnPort.spawn({ position, model, heading });
40
+ const ped = outcome.localPlayerHandle ?? 0;
44
41
  if (ped !== 0) {
45
42
  if (options?.appearance) {
46
43
  loggers.spawn.debug('Applying post-spawn appearance', { ped });
@@ -67,11 +64,11 @@ let SpawnService = class SpawnService {
67
64
  }
68
65
  }
69
66
  async teleportTo(position, heading) {
70
- await this.spawnBridge.teleport({ position, heading });
67
+ await this.spawnPort.teleport({ position, heading });
71
68
  }
72
69
  async respawn(position, heading = 0.0) {
73
- await this.spawnBridge.waitUntilReady();
74
- await this.spawnBridge.respawn({ position, heading });
70
+ await this.spawnPort.waitUntilReady();
71
+ await this.spawnPort.respawn({ position, heading });
75
72
  this.spawned = true;
76
73
  loggers.spawn.info('Player respawned', {
77
74
  position: { x: position.x, y: position.y, z: position.z },
@@ -89,10 +86,8 @@ let SpawnService = class SpawnService {
89
86
  };
90
87
  SpawnService = __decorate([
91
88
  injectable(),
92
- __param(1, inject(IClientSpawnBridge)),
93
- __param(2, inject(IClientPlatformBridge)),
89
+ __param(1, inject(IClientSpawnPort)),
94
90
  __metadata("design:paramtypes", [AppearanceService,
95
- IClientSpawnBridge,
96
- IClientPlatformBridge])
91
+ IClientSpawnPort])
97
92
  ], SpawnService);
98
93
  export { SpawnService };
@@ -1,11 +1,11 @@
1
+ import { IClientVehiclePort } from '../../../adapters/contracts/client/vehicle/IClientVehiclePort';
1
2
  import { EventsAPI } from '../../../adapters/contracts/transport/events.api';
2
3
  import { Vector3 } from '../../../kernel/utils/vector3';
3
- import { IClientPlatformBridge } from '../adapter/platform-bridge';
4
4
  import { IClientRuntimeBridge } from '../adapter/runtime-bridge';
5
5
  import { SerializedVehicleData, VehicleCreateOptions, VehicleSpawnResult } from '../../server/types/vehicle.types';
6
6
  export declare class VehicleClientService {
7
7
  private readonly events;
8
- private readonly platform;
8
+ private readonly vehicles;
9
9
  private readonly runtime;
10
10
  private pendingCreations;
11
11
  private pendingDeletes;
@@ -13,7 +13,7 @@ export declare class VehicleClientService {
13
13
  private pendingData;
14
14
  private pendingPlayerVehicles;
15
15
  private requestIdCounter;
16
- constructor(events: EventsAPI<'client'>, platform: IClientPlatformBridge, runtime: IClientRuntimeBridge);
16
+ constructor(events: EventsAPI<'client'>, vehicles: IClientVehiclePort, runtime: IClientRuntimeBridge);
17
17
  createVehicle(options: Omit<VehicleCreateOptions, 'ownership'>): Promise<VehicleSpawnResult>;
18
18
  deleteVehicle(networkId: number): Promise<boolean>;
19
19
  repairVehicle(networkId: number): Promise<boolean>;
@@ -11,12 +11,13 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
11
  return function (target, key) { decorator(target, key, paramIndex); }
12
12
  };
13
13
  import { inject, injectable } from 'tsyringe';
14
+ import { IClientVehiclePort } from '../../../adapters/contracts/client/vehicle/IClientVehiclePort';
14
15
  import { EventsAPI } from '../../../adapters/contracts/transport/events.api';
15
- import { IClientPlatformBridge } from '../adapter/platform-bridge';
16
+ import { SYSTEM_EVENTS } from '../../shared/types/system-types';
16
17
  import { IClientRuntimeBridge } from '../adapter/runtime-bridge';
17
18
  let VehicleClientService = class VehicleClientService {
18
19
  events;
19
- platform;
20
+ vehicles;
20
21
  runtime;
21
22
  pendingCreations = new Map();
22
23
  pendingDeletes = new Map();
@@ -24,9 +25,9 @@ let VehicleClientService = class VehicleClientService {
24
25
  pendingData = new Map();
25
26
  pendingPlayerVehicles = null;
26
27
  requestIdCounter = 0;
27
- constructor(events, platform, runtime) {
28
+ constructor(events, vehicles, runtime) {
28
29
  this.events = events;
29
- this.platform = platform;
30
+ this.vehicles = vehicles;
30
31
  this.runtime = runtime;
31
32
  this.registerEventHandlers();
32
33
  }
@@ -34,7 +35,7 @@ let VehicleClientService = class VehicleClientService {
34
35
  return new Promise((resolve) => {
35
36
  const requestId = this.requestIdCounter++;
36
37
  this.pendingCreations.set(requestId, resolve);
37
- this.events.emit('opencore:vehicle:create', { ...options, _requestId: requestId });
38
+ this.events.emit(SYSTEM_EVENTS.vehicle.create, { ...options, _requestId: requestId });
38
39
  setTimeout(() => {
39
40
  if (!this.pendingCreations.has(requestId))
40
41
  return;
@@ -46,7 +47,7 @@ let VehicleClientService = class VehicleClientService {
46
47
  async deleteVehicle(networkId) {
47
48
  return new Promise((resolve) => {
48
49
  this.pendingDeletes.set(networkId, resolve);
49
- this.events.emit('opencore:vehicle:delete', networkId);
50
+ this.events.emit(SYSTEM_EVENTS.vehicle.delete, networkId);
50
51
  setTimeout(() => {
51
52
  if (!this.pendingDeletes.has(networkId))
52
53
  return;
@@ -58,7 +59,7 @@ let VehicleClientService = class VehicleClientService {
58
59
  async repairVehicle(networkId) {
59
60
  return new Promise((resolve) => {
60
61
  this.pendingRepairs.set(networkId, resolve);
61
- this.events.emit('opencore:vehicle:repair', networkId);
62
+ this.events.emit(SYSTEM_EVENTS.vehicle.repair, networkId);
62
63
  setTimeout(() => {
63
64
  if (!this.pendingRepairs.has(networkId))
64
65
  return;
@@ -68,54 +69,42 @@ let VehicleClientService = class VehicleClientService {
68
69
  });
69
70
  }
70
71
  getClosestVehicle(radius = 10.0) {
71
- const playerPed = this.platform.getLocalPlayerPed();
72
- return this.platform.getClosestVehicle(this.platform.getEntityCoords(playerPed), radius);
72
+ return this.vehicles.getClosest(radius);
73
73
  }
74
74
  isPlayerInVehicle() {
75
- return this.platform.isPedInAnyVehicle(this.platform.getLocalPlayerPed());
75
+ return this.vehicles.isLocalPlayerInVehicle();
76
76
  }
77
77
  getCurrentVehicle() {
78
- const ped = this.platform.getLocalPlayerPed();
79
- if (!this.platform.isPedInAnyVehicle(ped))
80
- return null;
81
- return this.platform.getVehiclePedIsIn(ped, false);
78
+ return this.vehicles.getCurrentForLocalPlayer();
82
79
  }
83
80
  getLastVehicle() {
84
- return this.platform.getVehiclePedIsIn(this.platform.getLocalPlayerPed(), true);
81
+ return this.vehicles.getLastForLocalPlayer();
85
82
  }
86
83
  isPlayerDriver() {
87
84
  const vehicle = this.getCurrentVehicle();
88
85
  if (!vehicle)
89
86
  return false;
90
- return this.platform.getPedInVehicleSeat(vehicle, -1) === this.platform.getLocalPlayerPed();
87
+ return this.vehicles.isLocalPlayerDriver(vehicle);
91
88
  }
92
89
  getSpeed(vehicle) {
93
- if (!this.platform.doesEntityExist(vehicle))
94
- return 0;
95
- return this.platform.getEntitySpeed(vehicle) * 3.6;
90
+ return this.vehicles.getSpeed(vehicle) * 3.6;
96
91
  }
97
92
  getNetworkId(vehicle) {
98
- if (!this.platform.doesEntityExist(vehicle))
99
- return 0;
100
- return this.platform.networkGetNetworkIdFromEntity(vehicle);
93
+ return this.vehicles.getNetworkId(vehicle);
101
94
  }
102
95
  getVehicleFromNetworkId(networkId) {
103
- if (!this.platform.networkDoesEntityExistWithNetworkId(networkId))
104
- return 0;
105
- return this.platform.networkGetEntityFromNetworkId(networkId);
96
+ return this.vehicles.getFromNetworkId(networkId);
106
97
  }
107
98
  getVehicleState(vehicle, key) {
108
- if (!this.platform.doesEntityExist(vehicle))
109
- return undefined;
110
- return this.platform.getEntityState(vehicle, key);
99
+ return this.vehicles.getState(vehicle, key);
111
100
  }
112
101
  setDoorsLocked(networkId, locked) {
113
- this.events.emit('opencore:vehicle:setLocked', networkId, locked);
102
+ this.events.emit(SYSTEM_EVENTS.vehicle.setLocked, networkId, locked);
114
103
  }
115
104
  async getVehicleData(networkId) {
116
105
  return new Promise((resolve) => {
117
106
  this.pendingData.set(networkId, resolve);
118
- this.events.emit('opencore:vehicle:getData', networkId);
107
+ this.events.emit(SYSTEM_EVENTS.vehicle.getData, networkId);
119
108
  setTimeout(() => {
120
109
  if (!this.pendingData.has(networkId))
121
110
  return;
@@ -127,7 +116,7 @@ let VehicleClientService = class VehicleClientService {
127
116
  async getPlayerVehicles() {
128
117
  return new Promise((resolve) => {
129
118
  this.pendingPlayerVehicles = resolve;
130
- this.events.emit('opencore:vehicle:getPlayerVehicles');
119
+ this.events.emit(SYSTEM_EVENTS.vehicle.getPlayerVehicles);
131
120
  setTimeout(() => {
132
121
  if (!this.pendingPlayerVehicles)
133
122
  return;
@@ -137,123 +126,34 @@ let VehicleClientService = class VehicleClientService {
137
126
  });
138
127
  }
139
128
  warpIntoVehicle(vehicle, seatIndex = -1) {
140
- if (!this.platform.doesEntityExist(vehicle))
141
- return;
142
- this.platform.taskWarpPedIntoVehicle(this.platform.getLocalPlayerPed(), vehicle, seatIndex);
129
+ this.vehicles.warpLocalPlayerInto(vehicle, seatIndex);
143
130
  }
144
131
  setHeading(vehicle, heading) {
145
- if (!this.platform.doesEntityExist(vehicle))
146
- return;
147
- this.platform.setEntityHeading(vehicle, heading);
132
+ this.vehicles.setHeading(vehicle, heading);
148
133
  }
149
134
  getPosition(vehicle) {
150
- if (!this.platform.doesEntityExist(vehicle))
151
- return null;
152
- return this.platform.getEntityCoords(vehicle);
135
+ return this.vehicles.getPosition(vehicle);
153
136
  }
154
137
  getHeading(vehicle) {
155
- if (!this.platform.doesEntityExist(vehicle))
156
- return 0;
157
- return this.platform.getEntityHeading(vehicle);
138
+ return this.vehicles.getHeading(vehicle);
158
139
  }
159
140
  getModel(vehicle) {
160
- if (!this.platform.doesEntityExist(vehicle))
161
- return 0;
162
- return this.platform.getEntityModel(vehicle);
141
+ return this.vehicles.getModel(vehicle);
163
142
  }
164
143
  getPlate(vehicle) {
165
- if (!this.platform.doesEntityExist(vehicle))
166
- return '';
167
- return this.platform.getVehicleNumberPlateText(vehicle);
144
+ return this.vehicles.getPlate(vehicle);
168
145
  }
169
146
  applyMods(vehicle, mods) {
170
- if (!this.platform.doesEntityExist(vehicle))
171
- return;
172
- this.platform.setVehicleModKit(vehicle, 0);
173
- if (mods.spoiler !== undefined)
174
- this.platform.setVehicleMod(vehicle, 0, mods.spoiler, false);
175
- if (mods.frontBumper !== undefined)
176
- this.platform.setVehicleMod(vehicle, 1, mods.frontBumper, false);
177
- if (mods.rearBumper !== undefined)
178
- this.platform.setVehicleMod(vehicle, 2, mods.rearBumper, false);
179
- if (mods.sideSkirt !== undefined)
180
- this.platform.setVehicleMod(vehicle, 3, mods.sideSkirt, false);
181
- if (mods.exhaust !== undefined)
182
- this.platform.setVehicleMod(vehicle, 4, mods.exhaust, false);
183
- if (mods.frame !== undefined)
184
- this.platform.setVehicleMod(vehicle, 5, mods.frame, false);
185
- if (mods.grille !== undefined)
186
- this.platform.setVehicleMod(vehicle, 6, mods.grille, false);
187
- if (mods.hood !== undefined)
188
- this.platform.setVehicleMod(vehicle, 7, mods.hood, false);
189
- if (mods.fender !== undefined)
190
- this.platform.setVehicleMod(vehicle, 8, mods.fender, false);
191
- if (mods.rightFender !== undefined)
192
- this.platform.setVehicleMod(vehicle, 9, mods.rightFender, false);
193
- if (mods.roof !== undefined)
194
- this.platform.setVehicleMod(vehicle, 10, mods.roof, false);
195
- if (mods.engine !== undefined)
196
- this.platform.setVehicleMod(vehicle, 11, mods.engine, false);
197
- if (mods.brakes !== undefined)
198
- this.platform.setVehicleMod(vehicle, 12, mods.brakes, false);
199
- if (mods.transmission !== undefined)
200
- this.platform.setVehicleMod(vehicle, 13, mods.transmission, false);
201
- if (mods.horns !== undefined)
202
- this.platform.setVehicleMod(vehicle, 14, mods.horns, false);
203
- if (mods.suspension !== undefined)
204
- this.platform.setVehicleMod(vehicle, 15, mods.suspension, false);
205
- if (mods.armor !== undefined)
206
- this.platform.setVehicleMod(vehicle, 16, mods.armor, false);
207
- if (mods.turbo !== undefined)
208
- this.platform.toggleVehicleMod(vehicle, 18, mods.turbo);
209
- if (mods.xenon !== undefined)
210
- this.platform.toggleVehicleMod(vehicle, 22, mods.xenon);
211
- if (mods.wheelType !== undefined)
212
- this.platform.setVehicleWheelType(vehicle, mods.wheelType);
213
- if (mods.wheels !== undefined)
214
- this.platform.setVehicleMod(vehicle, 23, mods.wheels, false);
215
- if (mods.windowTint !== undefined)
216
- this.platform.setVehicleWindowTint(vehicle, mods.windowTint);
217
- if (mods.livery !== undefined)
218
- this.platform.setVehicleLivery(vehicle, mods.livery);
219
- if (mods.plateStyle !== undefined)
220
- this.platform.setVehicleNumberPlateTextIndex(vehicle, mods.plateStyle);
221
- if (mods.neonEnabled !== undefined) {
222
- this.platform.setVehicleNeonLightEnabled(vehicle, 0, mods.neonEnabled[0]);
223
- this.platform.setVehicleNeonLightEnabled(vehicle, 1, mods.neonEnabled[1]);
224
- this.platform.setVehicleNeonLightEnabled(vehicle, 2, mods.neonEnabled[2]);
225
- this.platform.setVehicleNeonLightEnabled(vehicle, 3, mods.neonEnabled[3]);
226
- }
227
- if (mods.neonColor !== undefined) {
228
- this.platform.setVehicleNeonLightsColour(vehicle, mods.neonColor[0], mods.neonColor[1], mods.neonColor[2]);
229
- }
230
- if (mods.extras) {
231
- for (const [extraId, enabled] of Object.entries(mods.extras)) {
232
- this.platform.setVehicleExtra(vehicle, Number(extraId), !enabled);
233
- }
234
- }
235
- if (mods.pearlescentColor !== undefined || mods.wheelColor !== undefined) {
236
- const [currentPearl, currentWheel] = this.platform.getVehicleExtraColours(vehicle);
237
- this.platform.setVehicleExtraColours(vehicle, mods.pearlescentColor ?? currentPearl, mods.wheelColor ?? currentWheel);
238
- }
147
+ this.vehicles.applyMods(vehicle, mods);
239
148
  }
240
149
  repair(vehicle) {
241
- if (!this.platform.doesEntityExist(vehicle))
242
- return;
243
- this.platform.setVehicleFixed(vehicle);
244
- this.platform.setVehicleDeformationFixed(vehicle);
245
- this.platform.setVehicleUndriveable(vehicle, false);
246
- this.platform.setVehicleEngineOn(vehicle, true, true, false);
247
- this.platform.setVehicleEngineHealth(vehicle, 1000.0);
248
- this.platform.setVehiclePetrolTankHealth(vehicle, 1000.0);
150
+ this.vehicles.repair(vehicle);
249
151
  }
250
152
  setFuel(vehicle, level) {
251
- if (!this.platform.doesEntityExist(vehicle))
252
- return;
253
- this.platform.setVehicleFuelLevel(vehicle, Math.max(0, Math.min(100, level)));
153
+ this.vehicles.setFuel(vehicle, level);
254
154
  }
255
155
  registerEventHandlers() {
256
- this.events.on('opencore:vehicle:createResult', (_ctx, result) => {
156
+ this.events.on(SYSTEM_EVENTS.vehicle.createResult, (_ctx, result) => {
257
157
  if (result._requestId === undefined)
258
158
  return;
259
159
  const callback = this.pendingCreations.get(result._requestId);
@@ -262,21 +162,21 @@ let VehicleClientService = class VehicleClientService {
262
162
  callback(result);
263
163
  this.pendingCreations.delete(result._requestId);
264
164
  });
265
- this.events.on('opencore:vehicle:deleteResult', (_ctx, result) => {
165
+ this.events.on(SYSTEM_EVENTS.vehicle.deleteResult, (_ctx, result) => {
266
166
  const callback = this.pendingDeletes.get(result.networkId);
267
167
  if (!callback)
268
168
  return;
269
169
  callback(result.success);
270
170
  this.pendingDeletes.delete(result.networkId);
271
171
  });
272
- this.events.on('opencore:vehicle:repairResult', (_ctx, result) => {
172
+ this.events.on(SYSTEM_EVENTS.vehicle.repairResult, (_ctx, result) => {
273
173
  const callback = this.pendingRepairs.get(result.networkId);
274
174
  if (!callback)
275
175
  return;
276
176
  callback(result.success);
277
177
  this.pendingRepairs.delete(result.networkId);
278
178
  });
279
- this.events.on('opencore:vehicle:dataResult', (_ctx, data) => {
179
+ this.events.on(SYSTEM_EVENTS.vehicle.dataResult, (_ctx, data) => {
280
180
  if (!data)
281
181
  return;
282
182
  const callback = this.pendingData.get(data.networkId);
@@ -285,11 +185,11 @@ let VehicleClientService = class VehicleClientService {
285
185
  callback(data);
286
186
  this.pendingData.delete(data.networkId);
287
187
  });
288
- this.events.on('opencore:vehicle:playerVehiclesResult', (_ctx, vehicles) => {
188
+ this.events.on(SYSTEM_EVENTS.vehicle.playerVehiclesResult, (_ctx, vehicles) => {
289
189
  this.pendingPlayerVehicles?.(vehicles);
290
190
  this.pendingPlayerVehicles = null;
291
191
  });
292
- this.events.on('opencore:vehicle:created', async (_ctx, data) => {
192
+ this.events.on(SYSTEM_EVENTS.vehicle.created, async (_ctx, data) => {
293
193
  const veh = await this.waitForVehicle(data.networkId);
294
194
  if (!veh)
295
195
  return;
@@ -298,17 +198,17 @@ let VehicleClientService = class VehicleClientService {
298
198
  if (data.metadata?.fuel !== undefined)
299
199
  this.setFuel(veh, data.metadata.fuel);
300
200
  });
301
- this.events.on('opencore:vehicle:modified', (_ctx, data) => {
201
+ this.events.on(SYSTEM_EVENTS.vehicle.modified, (_ctx, data) => {
302
202
  const veh = this.getVehicleFromNetworkId(data.networkId);
303
- if (veh && this.platform.doesEntityExist(veh))
203
+ if (veh && this.vehicles.exists(veh))
304
204
  this.applyMods(veh, data.mods);
305
205
  });
306
- this.events.on('opencore:vehicle:repaired', (_ctx, networkId) => {
206
+ this.events.on(SYSTEM_EVENTS.vehicle.repaired, (_ctx, networkId) => {
307
207
  const veh = this.getVehicleFromNetworkId(networkId);
308
- if (veh && this.platform.doesEntityExist(veh))
208
+ if (veh && this.vehicles.exists(veh))
309
209
  this.repair(veh);
310
210
  });
311
- this.events.on('opencore:vehicle:warpInto', async (_ctx, networkId, seatIndex = -1) => {
211
+ this.events.on(SYSTEM_EVENTS.vehicle.warpInto, async (_ctx, networkId, seatIndex = -1) => {
312
212
  const veh = await this.waitForVehicle(networkId);
313
213
  if (veh)
314
214
  this.warpIntoVehicle(veh, seatIndex);
@@ -318,7 +218,7 @@ let VehicleClientService = class VehicleClientService {
318
218
  const started = this.runtime.getGameTimer();
319
219
  while (this.runtime.getGameTimer() - started < 5000) {
320
220
  const veh = this.getVehicleFromNetworkId(networkId);
321
- if (veh && this.platform.doesEntityExist(veh))
221
+ if (veh && this.vehicles.exists(veh))
322
222
  return veh;
323
223
  await new Promise((r) => setTimeout(r, 0));
324
224
  }
@@ -328,10 +228,10 @@ let VehicleClientService = class VehicleClientService {
328
228
  VehicleClientService = __decorate([
329
229
  injectable(),
330
230
  __param(0, inject(EventsAPI)),
331
- __param(1, inject(IClientPlatformBridge)),
231
+ __param(1, inject(IClientVehiclePort)),
332
232
  __param(2, inject(IClientRuntimeBridge)),
333
233
  __metadata("design:paramtypes", [EventsAPI,
334
- IClientPlatformBridge,
234
+ IClientVehiclePort,
335
235
  IClientRuntimeBridge])
336
236
  ], VehicleClientService);
337
237
  export { VehicleClientService };
@@ -1,46 +1,9 @@
1
1
  import { Vector3 } from '../../../kernel/utils/vector3';
2
- import { IClientPlatformBridge } from '../adapter/platform-bridge';
3
- export interface VehicleSpawnOptions {
4
- model: string;
5
- position: Vector3;
6
- heading?: number;
7
- placeOnGround?: boolean;
8
- warpIntoVehicle?: boolean;
9
- seatIndex?: number;
10
- primaryColor?: number;
11
- secondaryColor?: number;
12
- plate?: string;
13
- networked?: boolean;
14
- }
15
- export interface VehicleMods {
16
- spoiler?: number;
17
- frontBumper?: number;
18
- rearBumper?: number;
19
- sideSkirt?: number;
20
- exhaust?: number;
21
- frame?: number;
22
- grille?: number;
23
- hood?: number;
24
- fender?: number;
25
- rightFender?: number;
26
- roof?: number;
27
- engine?: number;
28
- brakes?: number;
29
- transmission?: number;
30
- horns?: number;
31
- suspension?: number;
32
- armor?: number;
33
- turbo?: boolean;
34
- xenon?: boolean;
35
- wheelType?: number;
36
- wheels?: number;
37
- windowTint?: number;
38
- livery?: number;
39
- plateStyle?: number;
40
- }
2
+ import { type ClientVehicleMods as VehicleMods, type ClientVehicleSpawnOptions as VehicleSpawnOptions, IClientVehiclePort } from '../../../adapters/contracts/client/vehicle/IClientVehiclePort';
3
+ export type { VehicleSpawnOptions, VehicleMods };
41
4
  export declare class VehicleService {
42
- private readonly platform;
43
- constructor(platform: IClientPlatformBridge);
5
+ private readonly vehicles;
6
+ constructor(vehicles: IClientVehiclePort);
44
7
  spawn(options: VehicleSpawnOptions): Promise<number>;
45
8
  delete(vehicle: number): void;
46
9
  deleteCurrentVehicle(): void;