@open-core/framework 1.0.1-beta.1

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 (275) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +350 -0
  3. package/dist/client/client-bootstrap.d.ts +1 -0
  4. package/dist/client/client-bootstrap.js +53 -0
  5. package/dist/client/client-container.d.ts +2 -0
  6. package/dist/client/client-container.js +6 -0
  7. package/dist/client/client-core.d.ts +18 -0
  8. package/dist/client/client-core.js +52 -0
  9. package/dist/client/decorators/controller.d.ts +3 -0
  10. package/dist/client/decorators/controller.js +14 -0
  11. package/dist/client/decorators/export.d.ts +7 -0
  12. package/dist/client/decorators/export.js +15 -0
  13. package/dist/client/decorators/gameEvent.d.ts +47 -0
  14. package/dist/client/decorators/gameEvent.js +54 -0
  15. package/dist/client/decorators/index.d.ts +10 -0
  16. package/dist/client/decorators/index.js +26 -0
  17. package/dist/client/decorators/interval.d.ts +7 -0
  18. package/dist/client/decorators/interval.js +15 -0
  19. package/dist/client/decorators/key.d.ts +2 -0
  20. package/dist/client/decorators/key.js +10 -0
  21. package/dist/client/decorators/localEvent.d.ts +7 -0
  22. package/dist/client/decorators/localEvent.js +15 -0
  23. package/dist/client/decorators/nui.d.ts +1 -0
  24. package/dist/client/decorators/nui.js +9 -0
  25. package/dist/client/decorators/onNet.d.ts +1 -0
  26. package/dist/client/decorators/onNet.js +9 -0
  27. package/dist/client/decorators/resourceLifecycle.d.ts +11 -0
  28. package/dist/client/decorators/resourceLifecycle.js +24 -0
  29. package/dist/client/decorators/tick.d.ts +1 -0
  30. package/dist/client/decorators/tick.js +9 -0
  31. package/dist/client/index.d.ts +6 -0
  32. package/dist/client/index.js +22 -0
  33. package/dist/client/loaders/exports.loader.d.ts +1 -0
  34. package/dist/client/loaders/exports.loader.js +13 -0
  35. package/dist/client/player/player.d.ts +262 -0
  36. package/dist/client/player/player.js +480 -0
  37. package/dist/client/player/player.loader.d.ts +1 -0
  38. package/dist/client/player/player.loader.js +22 -0
  39. package/dist/client/services/core/index.d.ts +1 -0
  40. package/dist/client/services/core/index.js +17 -0
  41. package/dist/client/services/core/spawn.service.d.ts +20 -0
  42. package/dist/client/services/core/spawn.service.js +143 -0
  43. package/dist/client/services/index.d.ts +4 -0
  44. package/dist/client/services/index.js +24 -0
  45. package/dist/client/services/streaming/index.d.ts +1 -0
  46. package/dist/client/services/streaming/index.js +17 -0
  47. package/dist/client/services/streaming/streaming.service.d.ts +165 -0
  48. package/dist/client/services/streaming/streaming.service.js +341 -0
  49. package/dist/client/services/ui/index.d.ts +3 -0
  50. package/dist/client/services/ui/index.js +19 -0
  51. package/dist/client/services/ui/notification.service.d.ts +76 -0
  52. package/dist/client/services/ui/notification.service.js +111 -0
  53. package/dist/client/services/ui/progress.service.d.ts +82 -0
  54. package/dist/client/services/ui/progress.service.js +210 -0
  55. package/dist/client/services/ui/textui.service.d.ts +82 -0
  56. package/dist/client/services/ui/textui.service.js +156 -0
  57. package/dist/client/services/world/blip.service.d.ts +112 -0
  58. package/dist/client/services/world/blip.service.js +215 -0
  59. package/dist/client/services/world/index.d.ts +4 -0
  60. package/dist/client/services/world/index.js +20 -0
  61. package/dist/client/services/world/marker.service.d.ts +94 -0
  62. package/dist/client/services/world/marker.service.js +153 -0
  63. package/dist/client/services/world/ped.service.d.ts +182 -0
  64. package/dist/client/services/world/ped.service.js +302 -0
  65. package/dist/client/services/world/vehicle.service.d.ts +168 -0
  66. package/dist/client/services/world/vehicle.service.js +296 -0
  67. package/dist/client/system/metadata-client.keys.d.ts +13 -0
  68. package/dist/client/system/metadata-client.keys.js +16 -0
  69. package/dist/client/system/processors/export.processor.d.ts +7 -0
  70. package/dist/client/system/processors/export.processor.js +39 -0
  71. package/dist/client/system/processors/gameEvent.processor.d.ts +10 -0
  72. package/dist/client/system/processors/gameEvent.processor.js +58 -0
  73. package/dist/client/system/processors/interval.processor.d.ts +7 -0
  74. package/dist/client/system/processors/interval.processor.js +43 -0
  75. package/dist/client/system/processors/key.processor.d.ts +8 -0
  76. package/dist/client/system/processors/key.processor.js +27 -0
  77. package/dist/client/system/processors/localEvent.processor.d.ts +7 -0
  78. package/dist/client/system/processors/localEvent.processor.js +38 -0
  79. package/dist/client/system/processors/netEvent.processor.d.ts +7 -0
  80. package/dist/client/system/processors/netEvent.processor.js +38 -0
  81. package/dist/client/system/processors/nui.processor.d.ts +7 -0
  82. package/dist/client/system/processors/nui.processor.js +40 -0
  83. package/dist/client/system/processors/resourceLifecycle.processor.d.ts +9 -0
  84. package/dist/client/system/processors/resourceLifecycle.processor.js +69 -0
  85. package/dist/client/system/processors/tick.processor.d.ts +5 -0
  86. package/dist/client/system/processors/tick.processor.js +37 -0
  87. package/dist/client/system/processors.register.d.ts +1 -0
  88. package/dist/client/system/processors.register.js +27 -0
  89. package/dist/client/types/game-events.d.ts +126 -0
  90. package/dist/client/types/game-events.js +83 -0
  91. package/dist/client/types/index.d.ts +1 -0
  92. package/dist/client/types/index.js +17 -0
  93. package/dist/client/ui-bridge.d.ts +116 -0
  94. package/dist/client/ui-bridge.js +201 -0
  95. package/dist/index.d.ts +7 -0
  96. package/dist/index.js +46 -0
  97. package/dist/server/bootstrap.d.ts +16 -0
  98. package/dist/server/bootstrap.js +57 -0
  99. package/dist/server/bus/core-event-bus.d.ts +6 -0
  100. package/dist/server/bus/core-event-bus.js +31 -0
  101. package/dist/server/configs/api.config.d.ts +71 -0
  102. package/dist/server/configs/api.config.js +81 -0
  103. package/dist/server/configs/config.base.d.ts +63 -0
  104. package/dist/server/configs/config.base.js +64 -0
  105. package/dist/server/configs/index.d.ts +2 -0
  106. package/dist/server/configs/index.js +18 -0
  107. package/dist/server/container.d.ts +2 -0
  108. package/dist/server/container.js +6 -0
  109. package/dist/server/controllers/chat.controller.d.ts +10 -0
  110. package/dist/server/controllers/chat.controller.js +50 -0
  111. package/dist/server/controllers/command.controller.d.ts +7 -0
  112. package/dist/server/controllers/command.controller.js +47 -0
  113. package/dist/server/core.d.ts +1 -0
  114. package/dist/server/core.js +7 -0
  115. package/dist/server/database/adapters/oxmysql.adapter.d.ts +89 -0
  116. package/dist/server/database/adapters/oxmysql.adapter.js +149 -0
  117. package/dist/server/database/database.contract.d.ts +128 -0
  118. package/dist/server/database/database.contract.js +29 -0
  119. package/dist/server/database/database.service.d.ts +216 -0
  120. package/dist/server/database/database.service.js +301 -0
  121. package/dist/server/database/index.d.ts +53 -0
  122. package/dist/server/database/index.js +70 -0
  123. package/dist/server/database/types.d.ts +67 -0
  124. package/dist/server/database/types.js +7 -0
  125. package/dist/server/database.d.ts +7 -0
  126. package/dist/server/database.js +23 -0
  127. package/dist/server/decorators/bind.d.ts +2 -0
  128. package/dist/server/decorators/bind.js +15 -0
  129. package/dist/server/decorators/command.d.ts +19 -0
  130. package/dist/server/decorators/command.js +18 -0
  131. package/dist/server/decorators/controller.d.ts +3 -0
  132. package/dist/server/decorators/controller.js +14 -0
  133. package/dist/server/decorators/coreEvent.d.ts +2 -0
  134. package/dist/server/decorators/coreEvent.js +9 -0
  135. package/dist/server/decorators/export.d.ts +1 -0
  136. package/dist/server/decorators/export.js +9 -0
  137. package/dist/server/decorators/guard.d.ts +5 -0
  138. package/dist/server/decorators/guard.js +39 -0
  139. package/dist/server/decorators/index.d.ts +10 -0
  140. package/dist/server/decorators/index.js +26 -0
  141. package/dist/server/decorators/netEvent.d.ts +36 -0
  142. package/dist/server/decorators/netEvent.js +40 -0
  143. package/dist/server/decorators/onTick.d.ts +1 -0
  144. package/dist/server/decorators/onTick.js +9 -0
  145. package/dist/server/decorators/public.d.ts +16 -0
  146. package/dist/server/decorators/public.js +25 -0
  147. package/dist/server/decorators/requiresState.d.ts +55 -0
  148. package/dist/server/decorators/requiresState.js +62 -0
  149. package/dist/server/decorators/throttle.d.ts +9 -0
  150. package/dist/server/decorators/throttle.js +36 -0
  151. package/dist/server/decorators/utils.d.ts +7 -0
  152. package/dist/server/decorators/utils.js +13 -0
  153. package/dist/server/entities/index.d.ts +1 -0
  154. package/dist/server/entities/index.js +17 -0
  155. package/dist/server/entities/player.d.ts +157 -0
  156. package/dist/server/entities/player.js +217 -0
  157. package/dist/server/error-handler.d.ts +2 -0
  158. package/dist/server/error-handler.js +43 -0
  159. package/dist/server/index.d.ts +10 -0
  160. package/dist/server/index.js +29 -0
  161. package/dist/server/loaders/exports.loader.d.ts +0 -0
  162. package/dist/server/loaders/exports.loader.js +23 -0
  163. package/dist/server/loaders/playerSession.loader.d.ts +1 -0
  164. package/dist/server/loaders/playerSession.loader.js +42 -0
  165. package/dist/server/services/access-control.service.d.ts +56 -0
  166. package/dist/server/services/access-control.service.js +99 -0
  167. package/dist/server/services/chat.service.d.ts +7 -0
  168. package/dist/server/services/chat.service.js +31 -0
  169. package/dist/server/services/command.service.d.ts +15 -0
  170. package/dist/server/services/command.service.js +74 -0
  171. package/dist/server/services/config.service.d.ts +75 -0
  172. package/dist/server/services/config.service.js +116 -0
  173. package/dist/server/services/default/default-security.handler.d.ts +6 -0
  174. package/dist/server/services/default/default-security.handler.js +26 -0
  175. package/dist/server/services/http/http.service.d.ts +50 -0
  176. package/dist/server/services/http/http.service.js +126 -0
  177. package/dist/server/services/index.d.ts +10 -0
  178. package/dist/server/services/index.js +26 -0
  179. package/dist/server/services/parallel/index.d.ts +49 -0
  180. package/dist/server/services/parallel/index.js +67 -0
  181. package/dist/server/services/parallel/parallel-compute.service.d.ts +132 -0
  182. package/dist/server/services/parallel/parallel-compute.service.js +449 -0
  183. package/dist/server/services/parallel/types.d.ts +188 -0
  184. package/dist/server/services/parallel/types.js +7 -0
  185. package/dist/server/services/parallel/worker-pool.d.ts +83 -0
  186. package/dist/server/services/parallel/worker-pool.js +350 -0
  187. package/dist/server/services/parallel/worker.d.ts +19 -0
  188. package/dist/server/services/parallel/worker.js +49 -0
  189. package/dist/server/services/persistence.service.d.ts +59 -0
  190. package/dist/server/services/persistence.service.js +166 -0
  191. package/dist/server/services/player.service.d.ts +96 -0
  192. package/dist/server/services/player.service.js +132 -0
  193. package/dist/server/services/rate-limiter.service.d.ts +5 -0
  194. package/dist/server/services/rate-limiter.service.js +39 -0
  195. package/dist/server/services/registers.d.ts +1 -0
  196. package/dist/server/services/registers.js +18 -0
  197. package/dist/server/setup.d.ts +9 -0
  198. package/dist/server/setup.js +28 -0
  199. package/dist/server/system/metadata-server.keys.d.ts +9 -0
  200. package/dist/server/system/metadata-server.keys.js +12 -0
  201. package/dist/server/system/processors/command.processor.d.ts +9 -0
  202. package/dist/server/system/processors/command.processor.js +31 -0
  203. package/dist/server/system/processors/coreEvent.processor.d.ts +7 -0
  204. package/dist/server/system/processors/coreEvent.processor.js +38 -0
  205. package/dist/server/system/processors/export.processor.d.ts +7 -0
  206. package/dist/server/system/processors/export.processor.js +26 -0
  207. package/dist/server/system/processors/netEvent.processor.d.ts +11 -0
  208. package/dist/server/system/processors/netEvent.processor.js +100 -0
  209. package/dist/server/system/processors/tick.processor.d.ts +5 -0
  210. package/dist/server/system/processors/tick.processor.js +36 -0
  211. package/dist/server/system/processors.register.d.ts +1 -0
  212. package/dist/server/system/processors.register.js +21 -0
  213. package/dist/server/templates/admin/admin.controller-template.d.ts +10 -0
  214. package/dist/server/templates/admin/admin.controller-template.js +2 -0
  215. package/dist/server/templates/auth/auth-provider.contract.d.ts +58 -0
  216. package/dist/server/templates/auth/auth-provider.contract.js +23 -0
  217. package/dist/server/templates/index.d.ts +8 -0
  218. package/dist/server/templates/index.js +21 -0
  219. package/dist/server/templates/persistence/index.d.ts +30 -0
  220. package/dist/server/templates/persistence/index.js +34 -0
  221. package/dist/server/templates/persistence/player-persistence.contract.d.ts +86 -0
  222. package/dist/server/templates/persistence/player-persistence.contract.js +52 -0
  223. package/dist/server/templates/repository/index.d.ts +57 -0
  224. package/dist/server/templates/repository/index.js +61 -0
  225. package/dist/server/templates/repository/repository.contract.d.ts +224 -0
  226. package/dist/server/templates/repository/repository.contract.js +342 -0
  227. package/dist/server/templates/repository/repository.types.d.ts +51 -0
  228. package/dist/server/templates/repository/repository.types.js +7 -0
  229. package/dist/server/templates/security/permission.types.d.ts +32 -0
  230. package/dist/server/templates/security/permission.types.js +2 -0
  231. package/dist/server/templates/security/principal-provider.contract.d.ts +43 -0
  232. package/dist/server/templates/security/principal-provider.contract.js +19 -0
  233. package/dist/server/templates/security/security-handler.contract.d.ts +5 -0
  234. package/dist/server/templates/security/security-handler.contract.js +6 -0
  235. package/dist/server/types/core-events.d.ts +17 -0
  236. package/dist/server/types/core-events.js +2 -0
  237. package/dist/server/types/security.types.d.ts +7 -0
  238. package/dist/server/types/security.types.js +2 -0
  239. package/dist/shared/index.d.ts +1 -0
  240. package/dist/shared/index.js +17 -0
  241. package/dist/shared/logger/core-logger.d.ts +35 -0
  242. package/dist/shared/logger/core-logger.js +52 -0
  243. package/dist/shared/logger/index.d.ts +11 -0
  244. package/dist/shared/logger/index.js +26 -0
  245. package/dist/shared/logger/logger.config.d.ts +47 -0
  246. package/dist/shared/logger/logger.config.js +33 -0
  247. package/dist/shared/logger/logger.service.d.ts +161 -0
  248. package/dist/shared/logger/logger.service.js +279 -0
  249. package/dist/shared/logger/logger.types.d.ts +85 -0
  250. package/dist/shared/logger/logger.types.js +74 -0
  251. package/dist/shared/logger/transports/buffered.transport.d.ts +88 -0
  252. package/dist/shared/logger/transports/buffered.transport.js +174 -0
  253. package/dist/shared/logger/transports/console.transport.d.ts +37 -0
  254. package/dist/shared/logger/transports/console.transport.js +134 -0
  255. package/dist/shared/logger/transports/index.d.ts +3 -0
  256. package/dist/shared/logger/transports/index.js +19 -0
  257. package/dist/shared/logger/transports/transport.interface.d.ts +40 -0
  258. package/dist/shared/logger/transports/transport.interface.js +2 -0
  259. package/dist/system/class-constructor.d.ts +1 -0
  260. package/dist/system/class-constructor.js +2 -0
  261. package/dist/system/decorator-processor.d.ts +4 -0
  262. package/dist/system/decorator-processor.js +2 -0
  263. package/dist/system/metadata.scanner.d.ts +7 -0
  264. package/dist/system/metadata.scanner.js +45 -0
  265. package/dist/utils/errors.d.ts +14 -0
  266. package/dist/utils/errors.js +25 -0
  267. package/dist/utils/index.d.ts +4 -0
  268. package/dist/utils/index.js +20 -0
  269. package/dist/utils/result.d.ts +12 -0
  270. package/dist/utils/result.js +10 -0
  271. package/dist/utils/rgb.d.ts +5 -0
  272. package/dist/utils/rgb.js +2 -0
  273. package/dist/utils/vector3.d.ts +13 -0
  274. package/dist/utils/vector3.js +27 -0
  275. package/package.json +70 -0
@@ -0,0 +1,296 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.VehicleService = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ /**
12
+ * Service for vehicle operations and management.
13
+ */
14
+ let VehicleService = class VehicleService {
15
+ /**
16
+ * Spawn a vehicle at a position.
17
+ *
18
+ * @param options - Spawn options
19
+ * @returns The vehicle handle
20
+ */
21
+ async spawn(options) {
22
+ const { model, position, heading = 0, placeOnGround = true, warpIntoVehicle = false, seatIndex = -1, primaryColor, secondaryColor, plate, networked = true, } = options;
23
+ const modelHash = GetHashKey(model);
24
+ // Load the model
25
+ if (!IsModelInCdimage(modelHash) || !IsModelAVehicle(modelHash)) {
26
+ throw new Error(`Invalid vehicle model: ${model}`);
27
+ }
28
+ RequestModel(modelHash);
29
+ while (!HasModelLoaded(modelHash)) {
30
+ await new Promise((r) => setTimeout(r, 0));
31
+ }
32
+ // Create the vehicle
33
+ const vehicle = CreateVehicle(modelHash, position.x, position.y, position.z, heading, networked, false);
34
+ SetModelAsNoLongerNeeded(modelHash);
35
+ if (!vehicle || vehicle === 0) {
36
+ throw new Error('Failed to create vehicle');
37
+ }
38
+ // Place on ground
39
+ if (placeOnGround) {
40
+ SetVehicleOnGroundProperly(vehicle);
41
+ }
42
+ // Set colors
43
+ if (primaryColor !== undefined || secondaryColor !== undefined) {
44
+ const [currentPrimary, currentSecondary] = GetVehicleColours(vehicle);
45
+ SetVehicleColours(vehicle, primaryColor !== null && primaryColor !== void 0 ? primaryColor : currentPrimary, secondaryColor !== null && secondaryColor !== void 0 ? secondaryColor : currentSecondary);
46
+ }
47
+ // Set plate
48
+ if (plate) {
49
+ SetVehicleNumberPlateText(vehicle, plate);
50
+ }
51
+ // Warp player into vehicle
52
+ if (warpIntoVehicle) {
53
+ TaskWarpPedIntoVehicle(PlayerPedId(), vehicle, seatIndex);
54
+ }
55
+ return vehicle;
56
+ }
57
+ /**
58
+ * Delete a vehicle.
59
+ *
60
+ * @param vehicle - Vehicle handle
61
+ */
62
+ delete(vehicle) {
63
+ if (DoesEntityExist(vehicle)) {
64
+ SetEntityAsMissionEntity(vehicle, true, true);
65
+ DeleteVehicle(vehicle);
66
+ }
67
+ }
68
+ /**
69
+ * Delete the vehicle the player is currently in.
70
+ */
71
+ deleteCurrentVehicle() {
72
+ const vehicle = this.getCurrentVehicle();
73
+ if (vehicle) {
74
+ TaskLeaveVehicle(PlayerPedId(), vehicle, 16);
75
+ setTimeout(() => this.delete(vehicle), 1000);
76
+ }
77
+ }
78
+ /**
79
+ * Repair a vehicle completely.
80
+ *
81
+ * @param vehicle - Vehicle handle
82
+ */
83
+ repair(vehicle) {
84
+ if (!DoesEntityExist(vehicle))
85
+ return;
86
+ SetVehicleFixed(vehicle);
87
+ SetVehicleDeformationFixed(vehicle);
88
+ SetVehicleUndriveable(vehicle, false);
89
+ SetVehicleEngineOn(vehicle, true, true, false);
90
+ SetVehicleEngineHealth(vehicle, 1000.0);
91
+ SetVehiclePetrolTankHealth(vehicle, 1000.0);
92
+ }
93
+ /**
94
+ * Set vehicle fuel level.
95
+ *
96
+ * @param vehicle - Vehicle handle
97
+ * @param level - Fuel level (0.0-1.0)
98
+ */
99
+ setFuel(vehicle, level) {
100
+ if (!DoesEntityExist(vehicle))
101
+ return;
102
+ SetVehicleFuelLevel(vehicle, Math.max(0, Math.min(100, level * 100)));
103
+ }
104
+ /**
105
+ * Get vehicle fuel level.
106
+ *
107
+ * @param vehicle - Vehicle handle
108
+ * @returns Fuel level (0.0-1.0)
109
+ */
110
+ getFuel(vehicle) {
111
+ if (!DoesEntityExist(vehicle))
112
+ return 0;
113
+ return GetVehicleFuelLevel(vehicle) / 100;
114
+ }
115
+ /**
116
+ * Get the closest vehicle to the player.
117
+ *
118
+ * @param radius - Search radius
119
+ * @returns Vehicle handle or null
120
+ */
121
+ getClosest(radius = 10.0) {
122
+ const playerPed = PlayerPedId();
123
+ const [px, py, pz] = GetEntityCoords(playerPed, true);
124
+ const vehicle = GetClosestVehicle(px, py, pz, radius, 0, 71);
125
+ return vehicle !== 0 ? vehicle : null;
126
+ }
127
+ /**
128
+ * Check if the player is in a vehicle.
129
+ */
130
+ isPlayerInVehicle() {
131
+ return IsPedInAnyVehicle(PlayerPedId(), false);
132
+ }
133
+ /**
134
+ * Get the vehicle the player is currently in.
135
+ *
136
+ * @returns Vehicle handle or null
137
+ */
138
+ getCurrentVehicle() {
139
+ const ped = PlayerPedId();
140
+ if (!IsPedInAnyVehicle(ped, false))
141
+ return null;
142
+ return GetVehiclePedIsIn(ped, false);
143
+ }
144
+ /**
145
+ * Get the last vehicle the player was in.
146
+ *
147
+ * @returns Vehicle handle or null
148
+ */
149
+ getLastVehicle() {
150
+ const vehicle = GetVehiclePedIsIn(PlayerPedId(), true);
151
+ return vehicle !== 0 ? vehicle : null;
152
+ }
153
+ /**
154
+ * Check if player is the driver of their current vehicle.
155
+ */
156
+ isPlayerDriver() {
157
+ const vehicle = this.getCurrentVehicle();
158
+ if (!vehicle)
159
+ return false;
160
+ return GetPedInVehicleSeat(vehicle, -1) === PlayerPedId();
161
+ }
162
+ /**
163
+ * Apply modifications to a vehicle.
164
+ *
165
+ * @param vehicle - Vehicle handle
166
+ * @param mods - Modifications to apply
167
+ */
168
+ setMods(vehicle, mods) {
169
+ if (!DoesEntityExist(vehicle))
170
+ return;
171
+ SetVehicleModKit(vehicle, 0);
172
+ if (mods.spoiler !== undefined)
173
+ SetVehicleMod(vehicle, 0, mods.spoiler, false);
174
+ if (mods.frontBumper !== undefined)
175
+ SetVehicleMod(vehicle, 1, mods.frontBumper, false);
176
+ if (mods.rearBumper !== undefined)
177
+ SetVehicleMod(vehicle, 2, mods.rearBumper, false);
178
+ if (mods.sideSkirt !== undefined)
179
+ SetVehicleMod(vehicle, 3, mods.sideSkirt, false);
180
+ if (mods.exhaust !== undefined)
181
+ SetVehicleMod(vehicle, 4, mods.exhaust, false);
182
+ if (mods.frame !== undefined)
183
+ SetVehicleMod(vehicle, 5, mods.frame, false);
184
+ if (mods.grille !== undefined)
185
+ SetVehicleMod(vehicle, 6, mods.grille, false);
186
+ if (mods.hood !== undefined)
187
+ SetVehicleMod(vehicle, 7, mods.hood, false);
188
+ if (mods.fender !== undefined)
189
+ SetVehicleMod(vehicle, 8, mods.fender, false);
190
+ if (mods.rightFender !== undefined)
191
+ SetVehicleMod(vehicle, 9, mods.rightFender, false);
192
+ if (mods.roof !== undefined)
193
+ SetVehicleMod(vehicle, 10, mods.roof, false);
194
+ if (mods.engine !== undefined)
195
+ SetVehicleMod(vehicle, 11, mods.engine, false);
196
+ if (mods.brakes !== undefined)
197
+ SetVehicleMod(vehicle, 12, mods.brakes, false);
198
+ if (mods.transmission !== undefined)
199
+ SetVehicleMod(vehicle, 13, mods.transmission, false);
200
+ if (mods.horns !== undefined)
201
+ SetVehicleMod(vehicle, 14, mods.horns, false);
202
+ if (mods.suspension !== undefined)
203
+ SetVehicleMod(vehicle, 15, mods.suspension, false);
204
+ if (mods.armor !== undefined)
205
+ SetVehicleMod(vehicle, 16, mods.armor, false);
206
+ if (mods.turbo !== undefined)
207
+ ToggleVehicleMod(vehicle, 18, mods.turbo);
208
+ if (mods.xenon !== undefined)
209
+ ToggleVehicleMod(vehicle, 22, mods.xenon);
210
+ if (mods.wheelType !== undefined)
211
+ SetVehicleWheelType(vehicle, mods.wheelType);
212
+ if (mods.wheels !== undefined)
213
+ SetVehicleMod(vehicle, 23, mods.wheels, false);
214
+ if (mods.windowTint !== undefined)
215
+ SetVehicleWindowTint(vehicle, mods.windowTint);
216
+ if (mods.livery !== undefined)
217
+ SetVehicleLivery(vehicle, mods.livery);
218
+ if (mods.plateStyle !== undefined)
219
+ SetVehicleNumberPlateTextIndex(vehicle, mods.plateStyle);
220
+ }
221
+ /**
222
+ * Set vehicle doors locked state.
223
+ *
224
+ * @param vehicle - Vehicle handle
225
+ * @param locked - Whether doors should be locked
226
+ */
227
+ setDoorsLocked(vehicle, locked) {
228
+ if (!DoesEntityExist(vehicle))
229
+ return;
230
+ SetVehicleDoorsLocked(vehicle, locked ? 2 : 0);
231
+ }
232
+ /**
233
+ * Set vehicle engine state.
234
+ *
235
+ * @param vehicle - Vehicle handle
236
+ * @param running - Whether engine should be running
237
+ * @param instant - Whether to start instantly
238
+ */
239
+ setEngineRunning(vehicle, running, instant = false) {
240
+ if (!DoesEntityExist(vehicle))
241
+ return;
242
+ SetVehicleEngineOn(vehicle, running, instant, true);
243
+ }
244
+ /**
245
+ * Set vehicle invincibility.
246
+ *
247
+ * @param vehicle - Vehicle handle
248
+ * @param invincible - Whether vehicle should be invincible
249
+ */
250
+ setInvincible(vehicle, invincible) {
251
+ if (!DoesEntityExist(vehicle))
252
+ return;
253
+ SetEntityInvincible(vehicle, invincible);
254
+ }
255
+ /**
256
+ * Get vehicle speed in km/h.
257
+ *
258
+ * @param vehicle - Vehicle handle
259
+ */
260
+ getSpeed(vehicle) {
261
+ if (!DoesEntityExist(vehicle))
262
+ return 0;
263
+ return GetEntitySpeed(vehicle) * 3.6; // Convert m/s to km/h
264
+ }
265
+ /**
266
+ * Set vehicle heading/rotation.
267
+ *
268
+ * @param vehicle - Vehicle handle
269
+ * @param heading - Heading in degrees
270
+ */
271
+ setHeading(vehicle, heading) {
272
+ if (!DoesEntityExist(vehicle))
273
+ return;
274
+ SetEntityHeading(vehicle, heading);
275
+ }
276
+ /**
277
+ * Teleport a vehicle to a position.
278
+ *
279
+ * @param vehicle - Vehicle handle
280
+ * @param position - Target position
281
+ * @param heading - Optional heading
282
+ */
283
+ teleport(vehicle, position, heading) {
284
+ if (!DoesEntityExist(vehicle))
285
+ return;
286
+ SetEntityCoords(vehicle, position.x, position.y, position.z, false, false, false, true);
287
+ if (heading !== undefined) {
288
+ SetEntityHeading(vehicle, heading);
289
+ }
290
+ SetVehicleOnGroundProperly(vehicle);
291
+ }
292
+ };
293
+ exports.VehicleService = VehicleService;
294
+ exports.VehicleService = VehicleService = __decorate([
295
+ (0, tsyringe_1.injectable)()
296
+ ], VehicleService);
@@ -0,0 +1,13 @@
1
+ export declare const METADATA_KEYS: {
2
+ CONTROLLER: string;
3
+ KEY: string;
4
+ NUI: string;
5
+ NET_EVENT: string;
6
+ TICK: string;
7
+ LOCAL_EVENT: string;
8
+ INTERVAL: string;
9
+ EXPORT: string;
10
+ RESOURCE_START: string;
11
+ RESOURCE_STOP: string;
12
+ GAME_EVENT: string;
13
+ };
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.METADATA_KEYS = void 0;
4
+ exports.METADATA_KEYS = {
5
+ CONTROLLER: 'core:meta:controller',
6
+ KEY: 'core:meta:key',
7
+ NUI: 'core:meta:nui',
8
+ NET_EVENT: 'core:meta:onNet',
9
+ TICK: 'core:meta:tick',
10
+ LOCAL_EVENT: 'core:meta:localEvent',
11
+ INTERVAL: 'core:meta:interval',
12
+ EXPORT: 'core:meta:export',
13
+ RESOURCE_START: 'core:meta:resourceStart',
14
+ RESOURCE_STOP: 'core:meta:resourceStop',
15
+ GAME_EVENT: 'core:meta:gameEvent',
16
+ };
@@ -0,0 +1,7 @@
1
+ import { DecoratorProcessor } from '../../../system/decorator-processor';
2
+ export declare class ClientExportProcessor implements DecoratorProcessor {
3
+ readonly metadataKey: string;
4
+ process(target: any, methodName: string, metadata: {
5
+ exportName: string;
6
+ }): void;
7
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ClientExportProcessor = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const metadata_client_keys_1 = require("../metadata-client.keys");
12
+ const logger_1 = require("../../../shared/logger");
13
+ const clientExport = logger_1.coreLogger.child('Export', logger_1.LogDomain.CLIENT);
14
+ let ClientExportProcessor = class ClientExportProcessor {
15
+ constructor() {
16
+ this.metadataKey = metadata_client_keys_1.METADATA_KEYS.EXPORT;
17
+ }
18
+ process(target, methodName, metadata) {
19
+ const handler = target[methodName].bind(target);
20
+ const handlerName = `${target.constructor.name}.${methodName}`;
21
+ exports(metadata.exportName, async (...args) => {
22
+ try {
23
+ return await handler(...args);
24
+ }
25
+ catch (error) {
26
+ clientExport.error(`Export handler error`, {
27
+ export: metadata.exportName,
28
+ handler: handlerName,
29
+ }, error);
30
+ throw error;
31
+ }
32
+ });
33
+ clientExport.debug(`Registered export: ${metadata.exportName} -> ${handlerName}`);
34
+ }
35
+ };
36
+ exports.ClientExportProcessor = ClientExportProcessor;
37
+ exports.ClientExportProcessor = ClientExportProcessor = __decorate([
38
+ (0, tsyringe_1.injectable)()
39
+ ], ClientExportProcessor);
@@ -0,0 +1,10 @@
1
+ import { DecoratorProcessor } from '../../../system/decorator-processor';
2
+ interface GameEventMetadata {
3
+ eventName: string;
4
+ autoParse: boolean;
5
+ }
6
+ export declare class GameEventProcessor implements DecoratorProcessor {
7
+ readonly metadataKey: string;
8
+ process(target: any, methodName: string, metadata: GameEventMetadata): void;
9
+ }
10
+ export {};
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.GameEventProcessor = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const metadata_client_keys_1 = require("../metadata-client.keys");
12
+ const logger_1 = require("../../../shared/logger");
13
+ const game_events_1 = require("../../types/game-events");
14
+ const clientGameEvent = logger_1.coreLogger.child('GameEvent', logger_1.LogDomain.CLIENT);
15
+ // Map of event names to their parser functions
16
+ const parserMap = {
17
+ CEventNetworkEntityDamage: game_events_1.GameEventParsers.parseEntityDamage,
18
+ CEventNetworkPlayerEnteredVehicle: game_events_1.GameEventParsers.parsePlayerEnteredVehicle,
19
+ CEventNetworkPlayerLeftVehicle: game_events_1.GameEventParsers.parsePlayerLeftVehicle,
20
+ CEventShockingSeenPedKilled: game_events_1.GameEventParsers.parseSeenPedKilled,
21
+ CEventNetworkVehicleUndrivable: game_events_1.GameEventParsers.parseVehicleUndrivable,
22
+ CEventGunShot: game_events_1.GameEventParsers.parseGunShot,
23
+ };
24
+ let GameEventProcessor = class GameEventProcessor {
25
+ constructor() {
26
+ this.metadataKey = metadata_client_keys_1.METADATA_KEYS.GAME_EVENT;
27
+ }
28
+ process(target, methodName, metadata) {
29
+ const handler = target[methodName].bind(target);
30
+ const handlerName = `${target.constructor.name}.${methodName}`;
31
+ const { eventName, autoParse } = metadata;
32
+ on('gameEventTriggered', async (name, args) => {
33
+ if (name !== eventName)
34
+ return;
35
+ try {
36
+ // Auto-parse if enabled and parser exists
37
+ if (autoParse && parserMap[eventName]) {
38
+ const parsed = parserMap[eventName](args);
39
+ await handler(parsed);
40
+ }
41
+ else {
42
+ await handler(args);
43
+ }
44
+ }
45
+ catch (error) {
46
+ clientGameEvent.error(`Game event handler error`, {
47
+ event: eventName,
48
+ handler: handlerName,
49
+ }, error);
50
+ }
51
+ });
52
+ clientGameEvent.debug(`Registered game event: ${eventName} -> ${handlerName}`);
53
+ }
54
+ };
55
+ exports.GameEventProcessor = GameEventProcessor;
56
+ exports.GameEventProcessor = GameEventProcessor = __decorate([
57
+ (0, tsyringe_1.injectable)()
58
+ ], GameEventProcessor);
@@ -0,0 +1,7 @@
1
+ import { DecoratorProcessor } from '../../../system/decorator-processor';
2
+ export declare class IntervalProcessor implements DecoratorProcessor {
3
+ readonly metadataKey: string;
4
+ process(target: any, methodName: string, metadata: {
5
+ interval: number;
6
+ }): void;
7
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.IntervalProcessor = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const metadata_client_keys_1 = require("../metadata-client.keys");
12
+ const logger_1 = require("../../../shared/logger");
13
+ const clientInterval = logger_1.coreLogger.child('Interval', logger_1.LogDomain.CLIENT);
14
+ let IntervalProcessor = class IntervalProcessor {
15
+ constructor() {
16
+ this.metadataKey = metadata_client_keys_1.METADATA_KEYS.INTERVAL;
17
+ }
18
+ process(target, methodName, metadata) {
19
+ const handler = target[methodName].bind(target);
20
+ const handlerName = `${target.constructor.name}.${methodName}`;
21
+ let lastRun = 0;
22
+ setTick(async () => {
23
+ const now = GetGameTimer();
24
+ if (now - lastRun < metadata.interval)
25
+ return;
26
+ lastRun = now;
27
+ try {
28
+ await handler();
29
+ }
30
+ catch (error) {
31
+ clientInterval.error(`Interval handler error`, {
32
+ handler: handlerName,
33
+ interval: metadata.interval,
34
+ }, error);
35
+ }
36
+ });
37
+ clientInterval.debug(`Registered: ${handlerName} (every ${metadata.interval}ms)`);
38
+ }
39
+ };
40
+ exports.IntervalProcessor = IntervalProcessor;
41
+ exports.IntervalProcessor = IntervalProcessor = __decorate([
42
+ (0, tsyringe_1.injectable)()
43
+ ], IntervalProcessor);
@@ -0,0 +1,8 @@
1
+ import { DecoratorProcessor } from '../../../system/decorator-processor';
2
+ export declare class KeyMappingProcessor implements DecoratorProcessor {
3
+ readonly metadataKey: string;
4
+ process(target: any, methodName: string, metadata: {
5
+ key: string;
6
+ description: string;
7
+ }): void;
8
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.KeyMappingProcessor = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const metadata_client_keys_1 = require("../metadata-client.keys");
12
+ let KeyMappingProcessor = class KeyMappingProcessor {
13
+ constructor() {
14
+ this.metadataKey = metadata_client_keys_1.METADATA_KEYS.KEY;
15
+ }
16
+ process(target, methodName, metadata) {
17
+ const handler = target[methodName].bind(target);
18
+ const commandName = `+${methodName}`;
19
+ RegisterCommand(commandName, handler, false);
20
+ RegisterKeyMapping(commandName, metadata.description, 'keyboard', metadata.key);
21
+ RegisterCommand(`-${methodName}`, () => { }, false);
22
+ }
23
+ };
24
+ exports.KeyMappingProcessor = KeyMappingProcessor;
25
+ exports.KeyMappingProcessor = KeyMappingProcessor = __decorate([
26
+ (0, tsyringe_1.injectable)()
27
+ ], KeyMappingProcessor);
@@ -0,0 +1,7 @@
1
+ import { DecoratorProcessor } from '../../../system/decorator-processor';
2
+ export declare class LocalEventProcessor implements DecoratorProcessor {
3
+ readonly metadataKey: string;
4
+ process(target: any, methodName: string, metadata: {
5
+ eventName: string;
6
+ }): void;
7
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.LocalEventProcessor = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const metadata_client_keys_1 = require("../metadata-client.keys");
12
+ const logger_1 = require("../../../shared/logger");
13
+ const clientLocalEvent = logger_1.coreLogger.child('LocalEvent', logger_1.LogDomain.CLIENT);
14
+ let LocalEventProcessor = class LocalEventProcessor {
15
+ constructor() {
16
+ this.metadataKey = metadata_client_keys_1.METADATA_KEYS.LOCAL_EVENT;
17
+ }
18
+ process(target, methodName, metadata) {
19
+ const handler = target[methodName].bind(target);
20
+ const handlerName = `${target.constructor.name}.${methodName}`;
21
+ on(metadata.eventName, async (...args) => {
22
+ try {
23
+ await handler(...args);
24
+ }
25
+ catch (error) {
26
+ clientLocalEvent.error(`Handler error in local event`, {
27
+ event: metadata.eventName,
28
+ handler: handlerName,
29
+ }, error);
30
+ }
31
+ });
32
+ clientLocalEvent.debug(`Registered: ${metadata.eventName} -> ${handlerName}`);
33
+ }
34
+ };
35
+ exports.LocalEventProcessor = LocalEventProcessor;
36
+ exports.LocalEventProcessor = LocalEventProcessor = __decorate([
37
+ (0, tsyringe_1.injectable)()
38
+ ], LocalEventProcessor);
@@ -0,0 +1,7 @@
1
+ import { DecoratorProcessor } from '../../../system/decorator-processor';
2
+ export declare class ClientNetEventProcessor implements DecoratorProcessor {
3
+ readonly metadataKey: string;
4
+ process(target: any, methodName: string, metadata: {
5
+ eventName: string;
6
+ }): void;
7
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ClientNetEventProcessor = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const metadata_client_keys_1 = require("../metadata-client.keys");
12
+ const logger_1 = require("../../../shared/logger");
13
+ const clientNetEvent = logger_1.coreLogger.child('NetEvent', logger_1.LogDomain.CLIENT);
14
+ let ClientNetEventProcessor = class ClientNetEventProcessor {
15
+ constructor() {
16
+ this.metadataKey = metadata_client_keys_1.METADATA_KEYS.NET_EVENT;
17
+ }
18
+ process(target, methodName, metadata) {
19
+ const handler = target[methodName].bind(target);
20
+ const handlerName = `${target.constructor.name}.${methodName}`;
21
+ onNet(metadata.eventName, async (...args) => {
22
+ try {
23
+ await handler(...args);
24
+ }
25
+ catch (error) {
26
+ clientNetEvent.error(`Handler error in event`, {
27
+ event: metadata.eventName,
28
+ handler: handlerName,
29
+ }, error);
30
+ }
31
+ });
32
+ clientNetEvent.debug(`Registered: ${metadata.eventName} -> ${handlerName}`);
33
+ }
34
+ };
35
+ exports.ClientNetEventProcessor = ClientNetEventProcessor;
36
+ exports.ClientNetEventProcessor = ClientNetEventProcessor = __decorate([
37
+ (0, tsyringe_1.injectable)()
38
+ ], ClientNetEventProcessor);
@@ -0,0 +1,7 @@
1
+ import { DecoratorProcessor } from '../../../system/decorator-processor';
2
+ export declare class NuiProcessor implements DecoratorProcessor {
3
+ readonly metadataKey: string;
4
+ process(target: any, methodName: string, metadata: {
5
+ eventName: string;
6
+ }): void;
7
+ }