@open-core/framework 0.1.0-alpha.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 (281) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +360 -0
  3. package/dist/client/client-bootstrap.d.ts +1 -0
  4. package/dist/client/client-bootstrap.js +50 -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 +1 -0
  8. package/dist/client/client-core.js +7 -0
  9. package/dist/client/controllers/spawner.controller.d.ts +12 -0
  10. package/dist/client/controllers/spawner.controller.js +51 -0
  11. package/dist/client/decorators/controller.d.ts +3 -0
  12. package/dist/client/decorators/controller.js +14 -0
  13. package/dist/client/decorators/export.d.ts +7 -0
  14. package/dist/client/decorators/export.js +15 -0
  15. package/dist/client/decorators/gameEvent.d.ts +47 -0
  16. package/dist/client/decorators/gameEvent.js +54 -0
  17. package/dist/client/decorators/index.d.ts +10 -0
  18. package/dist/client/decorators/index.js +26 -0
  19. package/dist/client/decorators/interval.d.ts +7 -0
  20. package/dist/client/decorators/interval.js +15 -0
  21. package/dist/client/decorators/key.d.ts +2 -0
  22. package/dist/client/decorators/key.js +10 -0
  23. package/dist/client/decorators/localEvent.d.ts +7 -0
  24. package/dist/client/decorators/localEvent.js +15 -0
  25. package/dist/client/decorators/nui.d.ts +1 -0
  26. package/dist/client/decorators/nui.js +9 -0
  27. package/dist/client/decorators/onNet.d.ts +1 -0
  28. package/dist/client/decorators/onNet.js +9 -0
  29. package/dist/client/decorators/resourceLifecycle.d.ts +11 -0
  30. package/dist/client/decorators/resourceLifecycle.js +24 -0
  31. package/dist/client/decorators/tick.d.ts +1 -0
  32. package/dist/client/decorators/tick.js +9 -0
  33. package/dist/client/index.d.ts +7 -0
  34. package/dist/client/index.js +23 -0
  35. package/dist/client/interfaces/appearance.interface.d.ts +19 -0
  36. package/dist/client/interfaces/appearance.interface.js +2 -0
  37. package/dist/client/player/player.d.ts +262 -0
  38. package/dist/client/player/player.js +480 -0
  39. package/dist/client/player/player.loader.d.ts +1 -0
  40. package/dist/client/player/player.loader.js +22 -0
  41. package/dist/client/services/appearance.service.d.ts +6 -0
  42. package/dist/client/services/appearance.service.js +89 -0
  43. package/dist/client/services/blip.service.d.ts +112 -0
  44. package/dist/client/services/blip.service.js +215 -0
  45. package/dist/client/services/index.d.ts +9 -0
  46. package/dist/client/services/index.js +25 -0
  47. package/dist/client/services/marker.service.d.ts +94 -0
  48. package/dist/client/services/marker.service.js +153 -0
  49. package/dist/client/services/notification.service.d.ts +76 -0
  50. package/dist/client/services/notification.service.js +111 -0
  51. package/dist/client/services/ped.service.d.ts +182 -0
  52. package/dist/client/services/ped.service.js +302 -0
  53. package/dist/client/services/progress.service.d.ts +82 -0
  54. package/dist/client/services/progress.service.js +210 -0
  55. package/dist/client/services/spawn.service.d.ts +73 -0
  56. package/dist/client/services/spawn.service.js +261 -0
  57. package/dist/client/services/streaming.service.d.ts +165 -0
  58. package/dist/client/services/streaming.service.js +341 -0
  59. package/dist/client/services/textui.service.d.ts +82 -0
  60. package/dist/client/services/textui.service.js +156 -0
  61. package/dist/client/services/vehicle.service.d.ts +168 -0
  62. package/dist/client/services/vehicle.service.js +296 -0
  63. package/dist/client/system/metadata-client.keys.d.ts +13 -0
  64. package/dist/client/system/metadata-client.keys.js +16 -0
  65. package/dist/client/system/processors/export.processor.d.ts +7 -0
  66. package/dist/client/system/processors/export.processor.js +39 -0
  67. package/dist/client/system/processors/gameEvent.processor.d.ts +10 -0
  68. package/dist/client/system/processors/gameEvent.processor.js +58 -0
  69. package/dist/client/system/processors/interval.processor.d.ts +7 -0
  70. package/dist/client/system/processors/interval.processor.js +43 -0
  71. package/dist/client/system/processors/key.processor.d.ts +8 -0
  72. package/dist/client/system/processors/key.processor.js +27 -0
  73. package/dist/client/system/processors/localEvent.processor.d.ts +7 -0
  74. package/dist/client/system/processors/localEvent.processor.js +38 -0
  75. package/dist/client/system/processors/netEvent.processor.d.ts +7 -0
  76. package/dist/client/system/processors/netEvent.processor.js +38 -0
  77. package/dist/client/system/processors/nui.processor.d.ts +7 -0
  78. package/dist/client/system/processors/nui.processor.js +40 -0
  79. package/dist/client/system/processors/resourceLifecycle.processor.d.ts +9 -0
  80. package/dist/client/system/processors/resourceLifecycle.processor.js +69 -0
  81. package/dist/client/system/processors/tick.processor.d.ts +5 -0
  82. package/dist/client/system/processors/tick.processor.js +37 -0
  83. package/dist/client/system/processors.register.d.ts +1 -0
  84. package/dist/client/system/processors.register.js +27 -0
  85. package/dist/client/types/game-events.d.ts +126 -0
  86. package/dist/client/types/game-events.js +83 -0
  87. package/dist/client/types/index.d.ts +1 -0
  88. package/dist/client/types/index.js +17 -0
  89. package/dist/client/ui-bridge.d.ts +116 -0
  90. package/dist/client/ui-bridge.js +201 -0
  91. package/dist/index.d.ts +5 -0
  92. package/dist/index.js +41 -0
  93. package/dist/server/bootstrap.d.ts +16 -0
  94. package/dist/server/bootstrap.js +57 -0
  95. package/dist/server/bus/core-event-bus.d.ts +6 -0
  96. package/dist/server/bus/core-event-bus.js +31 -0
  97. package/dist/server/configs/api.config.d.ts +71 -0
  98. package/dist/server/configs/api.config.js +81 -0
  99. package/dist/server/configs/config.base.d.ts +63 -0
  100. package/dist/server/configs/config.base.js +64 -0
  101. package/dist/server/configs/index.d.ts +2 -0
  102. package/dist/server/configs/index.js +18 -0
  103. package/dist/server/container.d.ts +2 -0
  104. package/dist/server/container.js +6 -0
  105. package/dist/server/controllers/chat.controller.d.ts +10 -0
  106. package/dist/server/controllers/chat.controller.js +50 -0
  107. package/dist/server/controllers/command.controller.d.ts +7 -0
  108. package/dist/server/controllers/command.controller.js +47 -0
  109. package/dist/server/controllers/session.controller.d.ts +9 -0
  110. package/dist/server/controllers/session.controller.js +70 -0
  111. package/dist/server/core.d.ts +1 -0
  112. package/dist/server/core.js +7 -0
  113. package/dist/server/database/adapters/oxmysql.adapter.d.ts +89 -0
  114. package/dist/server/database/adapters/oxmysql.adapter.js +149 -0
  115. package/dist/server/database/database.contract.d.ts +128 -0
  116. package/dist/server/database/database.contract.js +29 -0
  117. package/dist/server/database/database.service.d.ts +216 -0
  118. package/dist/server/database/database.service.js +301 -0
  119. package/dist/server/database/index.d.ts +53 -0
  120. package/dist/server/database/index.js +70 -0
  121. package/dist/server/database/types.d.ts +67 -0
  122. package/dist/server/database/types.js +7 -0
  123. package/dist/server/database.d.ts +7 -0
  124. package/dist/server/database.js +23 -0
  125. package/dist/server/decorators/bind.d.ts +2 -0
  126. package/dist/server/decorators/bind.js +15 -0
  127. package/dist/server/decorators/command.d.ts +49 -0
  128. package/dist/server/decorators/command.js +23 -0
  129. package/dist/server/decorators/controller.d.ts +25 -0
  130. package/dist/server/decorators/controller.js +36 -0
  131. package/dist/server/decorators/export.d.ts +39 -0
  132. package/dist/server/decorators/export.js +47 -0
  133. package/dist/server/decorators/guard.d.ts +56 -0
  134. package/dist/server/decorators/guard.js +82 -0
  135. package/dist/server/decorators/index.d.ts +10 -0
  136. package/dist/server/decorators/index.js +29 -0
  137. package/dist/server/decorators/onFiveMEvent.d.ts +6 -0
  138. package/dist/server/decorators/onFiveMEvent.js +14 -0
  139. package/dist/server/decorators/onFrameworkEvent.d.ts +22 -0
  140. package/dist/server/decorators/onFrameworkEvent.js +29 -0
  141. package/dist/server/decorators/onNet.d.ts +58 -0
  142. package/dist/server/decorators/onNet.js +57 -0
  143. package/dist/server/decorators/onTick.d.ts +32 -0
  144. package/dist/server/decorators/onTick.js +40 -0
  145. package/dist/server/decorators/public.d.ts +27 -0
  146. package/dist/server/decorators/public.js +36 -0
  147. package/dist/server/decorators/requiresState.d.ts +56 -0
  148. package/dist/server/decorators/requiresState.js +63 -0
  149. package/dist/server/decorators/throttle.d.ts +48 -0
  150. package/dist/server/decorators/throttle.js +63 -0
  151. package/dist/server/decorators/utils.d.ts +57 -0
  152. package/dist/server/decorators/utils.js +63 -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/helpers/resolve-method.d.ts +5 -0
  160. package/dist/server/helpers/resolve-method.js +18 -0
  161. package/dist/server/index.d.ts +10 -0
  162. package/dist/server/index.js +31 -0
  163. package/dist/server/loaders/exports.loader.d.ts +0 -0
  164. package/dist/server/loaders/exports.loader.js +23 -0
  165. package/dist/server/loaders/playerSession.loader.d.ts +1 -0
  166. package/dist/server/loaders/playerSession.loader.js +51 -0
  167. package/dist/server/services/access-control.service.d.ts +56 -0
  168. package/dist/server/services/access-control.service.js +99 -0
  169. package/dist/server/services/chat.service.d.ts +7 -0
  170. package/dist/server/services/chat.service.js +31 -0
  171. package/dist/server/services/command.service.d.ts +15 -0
  172. package/dist/server/services/command.service.js +77 -0
  173. package/dist/server/services/config.service.d.ts +75 -0
  174. package/dist/server/services/config.service.js +116 -0
  175. package/dist/server/services/default/default-security.handler.d.ts +6 -0
  176. package/dist/server/services/default/default-security.handler.js +26 -0
  177. package/dist/server/services/http/http.service.d.ts +50 -0
  178. package/dist/server/services/http/http.service.js +126 -0
  179. package/dist/server/services/index.d.ts +10 -0
  180. package/dist/server/services/index.js +26 -0
  181. package/dist/server/services/parallel/index.d.ts +49 -0
  182. package/dist/server/services/parallel/index.js +67 -0
  183. package/dist/server/services/parallel/parallel-compute.service.d.ts +132 -0
  184. package/dist/server/services/parallel/parallel-compute.service.js +449 -0
  185. package/dist/server/services/parallel/types.d.ts +188 -0
  186. package/dist/server/services/parallel/types.js +7 -0
  187. package/dist/server/services/parallel/worker-pool.d.ts +83 -0
  188. package/dist/server/services/parallel/worker-pool.js +350 -0
  189. package/dist/server/services/parallel/worker.d.ts +19 -0
  190. package/dist/server/services/parallel/worker.js +49 -0
  191. package/dist/server/services/persistence.service.d.ts +59 -0
  192. package/dist/server/services/persistence.service.js +166 -0
  193. package/dist/server/services/player.service.d.ts +96 -0
  194. package/dist/server/services/player.service.js +132 -0
  195. package/dist/server/services/rate-limiter.service.d.ts +5 -0
  196. package/dist/server/services/rate-limiter.service.js +39 -0
  197. package/dist/server/services/registers.d.ts +1 -0
  198. package/dist/server/services/registers.js +18 -0
  199. package/dist/server/setup.d.ts +9 -0
  200. package/dist/server/setup.js +28 -0
  201. package/dist/server/system/metadata-server.keys.d.ts +10 -0
  202. package/dist/server/system/metadata-server.keys.js +13 -0
  203. package/dist/server/system/processors/command.processor.d.ts +9 -0
  204. package/dist/server/system/processors/command.processor.js +30 -0
  205. package/dist/server/system/processors/coreEvent.processor.d.ts +7 -0
  206. package/dist/server/system/processors/coreEvent.processor.js +41 -0
  207. package/dist/server/system/processors/export.processor.d.ts +7 -0
  208. package/dist/server/system/processors/export.processor.js +30 -0
  209. package/dist/server/system/processors/fivemEvent.processor.d.ts +7 -0
  210. package/dist/server/system/processors/fivemEvent.processor.js +40 -0
  211. package/dist/server/system/processors/netEvent.processor.d.ts +11 -0
  212. package/dist/server/system/processors/netEvent.processor.js +103 -0
  213. package/dist/server/system/processors/tick.processor.d.ts +5 -0
  214. package/dist/server/system/processors/tick.processor.js +36 -0
  215. package/dist/server/system/processors.register.d.ts +1 -0
  216. package/dist/server/system/processors.register.js +23 -0
  217. package/dist/server/system/schema-generator.d.ts +2 -0
  218. package/dist/server/system/schema-generator.js +34 -0
  219. package/dist/server/templates/admin/admin.controller-template.d.ts +12 -0
  220. package/dist/server/templates/admin/admin.controller-template.js +2 -0
  221. package/dist/server/templates/auth/auth-provider.contract.d.ts +58 -0
  222. package/dist/server/templates/auth/auth-provider.contract.js +23 -0
  223. package/dist/server/templates/index.d.ts +8 -0
  224. package/dist/server/templates/index.js +21 -0
  225. package/dist/server/templates/persistence/index.d.ts +30 -0
  226. package/dist/server/templates/persistence/index.js +34 -0
  227. package/dist/server/templates/persistence/player-persistence.contract.d.ts +86 -0
  228. package/dist/server/templates/persistence/player-persistence.contract.js +52 -0
  229. package/dist/server/templates/repository/index.d.ts +57 -0
  230. package/dist/server/templates/repository/index.js +61 -0
  231. package/dist/server/templates/repository/repository.contract.d.ts +224 -0
  232. package/dist/server/templates/repository/repository.contract.js +342 -0
  233. package/dist/server/templates/repository/repository.types.d.ts +51 -0
  234. package/dist/server/templates/repository/repository.types.js +7 -0
  235. package/dist/server/templates/security/permission.types.d.ts +32 -0
  236. package/dist/server/templates/security/permission.types.js +2 -0
  237. package/dist/server/templates/security/principal-provider.contract.d.ts +43 -0
  238. package/dist/server/templates/security/principal-provider.contract.js +19 -0
  239. package/dist/server/templates/security/security-handler.contract.d.ts +5 -0
  240. package/dist/server/templates/security/security-handler.contract.js +6 -0
  241. package/dist/server/types/core-events.d.ts +22 -0
  242. package/dist/server/types/core-events.js +2 -0
  243. package/dist/server/types/security.types.d.ts +7 -0
  244. package/dist/server/types/security.types.js +2 -0
  245. package/dist/shared/index.d.ts +1 -0
  246. package/dist/shared/index.js +17 -0
  247. package/dist/shared/logger/core-logger.d.ts +35 -0
  248. package/dist/shared/logger/core-logger.js +52 -0
  249. package/dist/shared/logger/index.d.ts +11 -0
  250. package/dist/shared/logger/index.js +26 -0
  251. package/dist/shared/logger/logger.config.d.ts +47 -0
  252. package/dist/shared/logger/logger.config.js +33 -0
  253. package/dist/shared/logger/logger.service.d.ts +161 -0
  254. package/dist/shared/logger/logger.service.js +279 -0
  255. package/dist/shared/logger/logger.types.d.ts +85 -0
  256. package/dist/shared/logger/logger.types.js +74 -0
  257. package/dist/shared/logger/transports/buffered.transport.d.ts +88 -0
  258. package/dist/shared/logger/transports/buffered.transport.js +174 -0
  259. package/dist/shared/logger/transports/console.transport.d.ts +37 -0
  260. package/dist/shared/logger/transports/console.transport.js +134 -0
  261. package/dist/shared/logger/transports/index.d.ts +3 -0
  262. package/dist/shared/logger/transports/index.js +19 -0
  263. package/dist/shared/logger/transports/transport.interface.d.ts +40 -0
  264. package/dist/shared/logger/transports/transport.interface.js +2 -0
  265. package/dist/system/class-constructor.d.ts +1 -0
  266. package/dist/system/class-constructor.js +2 -0
  267. package/dist/system/decorator-processor.d.ts +4 -0
  268. package/dist/system/decorator-processor.js +2 -0
  269. package/dist/system/metadata.scanner.d.ts +7 -0
  270. package/dist/system/metadata.scanner.js +45 -0
  271. package/dist/utils/errors.d.ts +14 -0
  272. package/dist/utils/errors.js +25 -0
  273. package/dist/utils/index.d.ts +4 -0
  274. package/dist/utils/index.js +20 -0
  275. package/dist/utils/result.d.ts +12 -0
  276. package/dist/utils/result.js +10 -0
  277. package/dist/utils/rgb.d.ts +5 -0
  278. package/dist/utils/rgb.js +2 -0
  279. package/dist/utils/vector3.d.ts +13 -0
  280. package/dist/utils/vector3.js +27 -0
  281. package/package.json +98 -0
@@ -0,0 +1,156 @@
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.TextUIService = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const DEFAULT_OPTIONS = {
12
+ font: 4,
13
+ scale: 0.35,
14
+ color: { r: 255, g: 255, b: 255, a: 255 },
15
+ alignment: 0,
16
+ dropShadow: true,
17
+ outline: false,
18
+ wrapWidth: 0,
19
+ };
20
+ const DEFAULT_3D_OPTIONS = Object.assign(Object.assign({}, DEFAULT_OPTIONS), { scale: 0.25, background: false, backgroundColor: { r: 0, g: 0, b: 0, a: 150 }, backgroundPadding: 0.002 });
21
+ /**
22
+ * Service for rendering text UI elements on screen and in 3D world.
23
+ */
24
+ let TextUIService = class TextUIService {
25
+ constructor() {
26
+ this.activeTextUI = null;
27
+ this.tickHandle = null;
28
+ }
29
+ /**
30
+ * Show persistent text UI at the bottom-right of the screen.
31
+ *
32
+ * @param text - The text to display
33
+ * @param options - Text options
34
+ */
35
+ show(text, options = {}) {
36
+ this.activeTextUI = {
37
+ text,
38
+ options: Object.assign(Object.assign({}, DEFAULT_OPTIONS), options),
39
+ };
40
+ this.ensureTickRunning();
41
+ }
42
+ /**
43
+ * Hide the persistent text UI.
44
+ */
45
+ hide() {
46
+ this.activeTextUI = null;
47
+ this.stopTick();
48
+ }
49
+ /**
50
+ * Check if text UI is currently visible.
51
+ */
52
+ isVisible() {
53
+ return this.activeTextUI !== null;
54
+ }
55
+ /**
56
+ * Draw text on screen for one frame.
57
+ * Call this every frame for persistent display.
58
+ *
59
+ * @param text - The text to draw
60
+ * @param x - Screen X position (0.0-1.0)
61
+ * @param y - Screen Y position (0.0-1.0)
62
+ * @param options - Text options
63
+ */
64
+ drawText(text, x, y, options = {}) {
65
+ const opts = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);
66
+ SetTextFont(opts.font);
67
+ SetTextScale(opts.scale, opts.scale);
68
+ SetTextColour(opts.color.r, opts.color.g, opts.color.b, opts.color.a);
69
+ SetTextJustification(opts.alignment);
70
+ if (opts.dropShadow) {
71
+ SetTextDropshadow(0, 0, 0, 0, 255);
72
+ SetTextDropShadow();
73
+ }
74
+ if (opts.outline) {
75
+ SetTextOutline();
76
+ }
77
+ if (opts.wrapWidth > 0) {
78
+ SetTextWrap(x, x + opts.wrapWidth);
79
+ }
80
+ if (opts.alignment === 2) {
81
+ SetTextRightJustify(true);
82
+ SetTextWrap(0.0, x);
83
+ }
84
+ BeginTextCommandDisplayText('STRING');
85
+ AddTextComponentString(text);
86
+ EndTextCommandDisplayText(x, y);
87
+ }
88
+ /**
89
+ * Draw 3D text in the game world.
90
+ *
91
+ * @param position - World position
92
+ * @param text - The text to draw
93
+ * @param options - Text options
94
+ */
95
+ drawText3D(position, text, options = {}) {
96
+ const opts = Object.assign(Object.assign({}, DEFAULT_3D_OPTIONS), options);
97
+ const [onScreen, screenX, screenY] = World3dToScreen2d(position.x, position.y, position.z);
98
+ if (!onScreen)
99
+ return;
100
+ // Calculate distance-based scale
101
+ const camCoords = GetGameplayCamCoords();
102
+ const distance = GetDistanceBetweenCoords(camCoords[0], camCoords[1], camCoords[2], position.x, position.y, position.z, true);
103
+ const scale = opts.scale * (1 / distance) * 2;
104
+ const scaledScale = Math.max(scale, 0.15);
105
+ // Draw background if enabled
106
+ if (opts.background) {
107
+ const factor = text.length / 300;
108
+ DrawRect(screenX, screenY + opts.backgroundPadding, factor + opts.backgroundPadding * 2, 0.03 + opts.backgroundPadding * 2, opts.backgroundColor.r, opts.backgroundColor.g, opts.backgroundColor.b, opts.backgroundColor.a);
109
+ }
110
+ // Draw text
111
+ SetTextScale(scaledScale, scaledScale);
112
+ SetTextFont(opts.font);
113
+ SetTextColour(opts.color.r, opts.color.g, opts.color.b, opts.color.a);
114
+ SetTextCentre(true);
115
+ if (opts.dropShadow) {
116
+ SetTextDropshadow(0, 0, 0, 0, 255);
117
+ SetTextDropShadow();
118
+ }
119
+ if (opts.outline) {
120
+ SetTextOutline();
121
+ }
122
+ BeginTextCommandDisplayText('STRING');
123
+ AddTextComponentString(text);
124
+ EndTextCommandDisplayText(screenX, screenY);
125
+ }
126
+ /**
127
+ * Get text width for layout calculations.
128
+ * Note: This is an approximation based on character count and scale.
129
+ */
130
+ getTextWidth(text, _font, scale) {
131
+ // Approximate text width based on character count and scale
132
+ // Average character width at scale 1.0 is approximately 0.01
133
+ return text.length * 0.01 * scale;
134
+ }
135
+ ensureTickRunning() {
136
+ if (this.tickHandle !== null)
137
+ return;
138
+ this.tickHandle = setTick(() => {
139
+ if (!this.activeTextUI)
140
+ return;
141
+ const { text, options } = this.activeTextUI;
142
+ // Draw at bottom-right
143
+ this.drawText(text, 0.985, 0.93, Object.assign(Object.assign({}, options), { alignment: 2 }));
144
+ });
145
+ }
146
+ stopTick() {
147
+ if (this.tickHandle !== null) {
148
+ clearTick(this.tickHandle);
149
+ this.tickHandle = null;
150
+ }
151
+ }
152
+ };
153
+ exports.TextUIService = TextUIService;
154
+ exports.TextUIService = TextUIService = __decorate([
155
+ (0, tsyringe_1.injectable)()
156
+ ], TextUIService);
@@ -0,0 +1,168 @@
1
+ import type { Vector3 } from '../../utils';
2
+ export interface VehicleSpawnOptions {
3
+ /** Model name or hash */
4
+ model: string;
5
+ /** Spawn position */
6
+ position: Vector3;
7
+ /** Heading/rotation */
8
+ heading?: number;
9
+ /** Whether to place on ground */
10
+ placeOnGround?: boolean;
11
+ /** Whether to warp the player into the vehicle */
12
+ warpIntoVehicle?: boolean;
13
+ /** Seat index to warp into (-1 = driver) */
14
+ seatIndex?: number;
15
+ /** Primary color */
16
+ primaryColor?: number;
17
+ /** Secondary color */
18
+ secondaryColor?: number;
19
+ /** License plate text */
20
+ plate?: string;
21
+ /** Network the vehicle */
22
+ networked?: boolean;
23
+ }
24
+ export interface VehicleMods {
25
+ spoiler?: number;
26
+ frontBumper?: number;
27
+ rearBumper?: number;
28
+ sideSkirt?: number;
29
+ exhaust?: number;
30
+ frame?: number;
31
+ grille?: number;
32
+ hood?: number;
33
+ fender?: number;
34
+ rightFender?: number;
35
+ roof?: number;
36
+ engine?: number;
37
+ brakes?: number;
38
+ transmission?: number;
39
+ horns?: number;
40
+ suspension?: number;
41
+ armor?: number;
42
+ turbo?: boolean;
43
+ xenon?: boolean;
44
+ wheelType?: number;
45
+ wheels?: number;
46
+ windowTint?: number;
47
+ livery?: number;
48
+ plateStyle?: number;
49
+ }
50
+ /**
51
+ * Service for vehicle operations and management.
52
+ */
53
+ export declare class VehicleService {
54
+ /**
55
+ * Spawn a vehicle at a position.
56
+ *
57
+ * @param options - Spawn options
58
+ * @returns The vehicle handle
59
+ */
60
+ spawn(options: VehicleSpawnOptions): Promise<number>;
61
+ /**
62
+ * Delete a vehicle.
63
+ *
64
+ * @param vehicle - Vehicle handle
65
+ */
66
+ delete(vehicle: number): void;
67
+ /**
68
+ * Delete the vehicle the player is currently in.
69
+ */
70
+ deleteCurrentVehicle(): void;
71
+ /**
72
+ * Repair a vehicle completely.
73
+ *
74
+ * @param vehicle - Vehicle handle
75
+ */
76
+ repair(vehicle: number): void;
77
+ /**
78
+ * Set vehicle fuel level.
79
+ *
80
+ * @param vehicle - Vehicle handle
81
+ * @param level - Fuel level (0.0-1.0)
82
+ */
83
+ setFuel(vehicle: number, level: number): void;
84
+ /**
85
+ * Get vehicle fuel level.
86
+ *
87
+ * @param vehicle - Vehicle handle
88
+ * @returns Fuel level (0.0-1.0)
89
+ */
90
+ getFuel(vehicle: number): number;
91
+ /**
92
+ * Get the closest vehicle to the player.
93
+ *
94
+ * @param radius - Search radius
95
+ * @returns Vehicle handle or null
96
+ */
97
+ getClosest(radius?: number): number | null;
98
+ /**
99
+ * Check if the player is in a vehicle.
100
+ */
101
+ isPlayerInVehicle(): boolean;
102
+ /**
103
+ * Get the vehicle the player is currently in.
104
+ *
105
+ * @returns Vehicle handle or null
106
+ */
107
+ getCurrentVehicle(): number | null;
108
+ /**
109
+ * Get the last vehicle the player was in.
110
+ *
111
+ * @returns Vehicle handle or null
112
+ */
113
+ getLastVehicle(): number | null;
114
+ /**
115
+ * Check if player is the driver of their current vehicle.
116
+ */
117
+ isPlayerDriver(): boolean;
118
+ /**
119
+ * Apply modifications to a vehicle.
120
+ *
121
+ * @param vehicle - Vehicle handle
122
+ * @param mods - Modifications to apply
123
+ */
124
+ setMods(vehicle: number, mods: VehicleMods): void;
125
+ /**
126
+ * Set vehicle doors locked state.
127
+ *
128
+ * @param vehicle - Vehicle handle
129
+ * @param locked - Whether doors should be locked
130
+ */
131
+ setDoorsLocked(vehicle: number, locked: boolean): void;
132
+ /**
133
+ * Set vehicle engine state.
134
+ *
135
+ * @param vehicle - Vehicle handle
136
+ * @param running - Whether engine should be running
137
+ * @param instant - Whether to start instantly
138
+ */
139
+ setEngineRunning(vehicle: number, running: boolean, instant?: boolean): void;
140
+ /**
141
+ * Set vehicle invincibility.
142
+ *
143
+ * @param vehicle - Vehicle handle
144
+ * @param invincible - Whether vehicle should be invincible
145
+ */
146
+ setInvincible(vehicle: number, invincible: boolean): void;
147
+ /**
148
+ * Get vehicle speed in km/h.
149
+ *
150
+ * @param vehicle - Vehicle handle
151
+ */
152
+ getSpeed(vehicle: number): number;
153
+ /**
154
+ * Set vehicle heading/rotation.
155
+ *
156
+ * @param vehicle - Vehicle handle
157
+ * @param heading - Heading in degrees
158
+ */
159
+ setHeading(vehicle: number, heading: number): void;
160
+ /**
161
+ * Teleport a vehicle to a position.
162
+ *
163
+ * @param vehicle - Vehicle handle
164
+ * @param position - Target position
165
+ * @param heading - Optional heading
166
+ */
167
+ teleport(vehicle: number, position: Vector3, heading?: number): void;
168
+ }
@@ -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
+ globalThis.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);