@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,111 @@
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.NotificationService = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ /**
12
+ * Service for displaying native GTA V notifications.
13
+ */
14
+ let NotificationService = class NotificationService {
15
+ /**
16
+ * Show a simple notification on screen.
17
+ *
18
+ * @param message - The message to display
19
+ * @param blink - Whether the notification should blink
20
+ */
21
+ show(message, blink = false) {
22
+ SetNotificationTextEntry('STRING');
23
+ AddTextComponentString(message);
24
+ DrawNotification(blink, true);
25
+ }
26
+ /**
27
+ * Show a notification with a type indicator using throbber icons.
28
+ *
29
+ * @param message - The message to display
30
+ * @param type - The notification type
31
+ */
32
+ showWithType(message, type = 'info') {
33
+ const iconMap = {
34
+ info: 1,
35
+ success: 2,
36
+ warning: 3,
37
+ error: 4,
38
+ };
39
+ BeginTextCommandThefeedPost('STRING');
40
+ AddTextComponentString(message);
41
+ EndTextCommandThefeedPostMessagetext('CHAR_SOCIAL_CLUB', 'CHAR_SOCIAL_CLUB', true, iconMap[type], '', message);
42
+ }
43
+ /**
44
+ * Show an advanced notification with picture/icon.
45
+ *
46
+ * @param options - Advanced notification options
47
+ */
48
+ showAdvanced(options) {
49
+ const { title, subtitle = '', message, textureDict = 'CHAR_HUMANDEFAULT', textureName = 'CHAR_HUMANDEFAULT', iconType = 1, flash = false, saveToBrief = true, backgroundColor, } = options;
50
+ SetNotificationTextEntry('STRING');
51
+ AddTextComponentString(message);
52
+ if (backgroundColor !== undefined) {
53
+ SetNotificationBackgroundColor(backgroundColor);
54
+ }
55
+ SetNotificationMessage(textureDict, textureName, flash, iconType, title, subtitle);
56
+ DrawNotification(flash, saveToBrief);
57
+ }
58
+ /**
59
+ * Show a help notification (appears at top-left).
60
+ *
61
+ * @param message - The help message
62
+ * @param duration - How long to show in milliseconds (-1 for indefinite)
63
+ * @param beep - Play a beep sound
64
+ * @param looped - Keep showing until cleared
65
+ */
66
+ showHelp(message, duration = 5000, beep = true, looped = false) {
67
+ BeginTextCommandDisplayHelp('STRING');
68
+ AddTextComponentSubstringPlayerName(message);
69
+ EndTextCommandDisplayHelp(0, looped, beep, duration);
70
+ }
71
+ /**
72
+ * Clear all help messages.
73
+ */
74
+ clearHelp() {
75
+ ClearAllHelpMessages();
76
+ }
77
+ /**
78
+ * Show a subtitle (centered at bottom of screen).
79
+ *
80
+ * @param message - The subtitle text
81
+ * @param duration - Duration in milliseconds
82
+ */
83
+ showSubtitle(message, duration = 2500) {
84
+ BeginTextCommandPrint('STRING');
85
+ AddTextComponentSubstringPlayerName(message);
86
+ EndTextCommandPrint(duration, true);
87
+ }
88
+ /**
89
+ * Clear the current subtitle.
90
+ */
91
+ clearSubtitle() {
92
+ ClearPrints();
93
+ }
94
+ /**
95
+ * Show a floating help text above the player's head.
96
+ *
97
+ * @param message - The message to display
98
+ */
99
+ showFloatingHelp(message) {
100
+ const [x, y, z] = GetEntityCoords(PlayerPedId(), true);
101
+ SetFloatingHelpTextWorldPosition(1, x, y, z);
102
+ SetFloatingHelpTextStyle(1, 1, 2, -1, 3, 0);
103
+ BeginTextCommandDisplayHelp('STRING');
104
+ AddTextComponentSubstringPlayerName(message);
105
+ EndTextCommandDisplayHelp(2, false, false, -1);
106
+ }
107
+ };
108
+ exports.NotificationService = NotificationService;
109
+ exports.NotificationService = NotificationService = __decorate([
110
+ (0, tsyringe_1.injectable)()
111
+ ], NotificationService);
@@ -0,0 +1,182 @@
1
+ import type { Vector3 } from '../../utils';
2
+ export interface PedSpawnOptions {
3
+ /** Model name or hash */
4
+ model: string;
5
+ /** Spawn position */
6
+ position: Vector3;
7
+ /** Heading/rotation */
8
+ heading?: number;
9
+ /** Network the ped */
10
+ networked?: boolean;
11
+ /** Make the ped a mission entity */
12
+ missionEntity?: boolean;
13
+ /** Relationship group */
14
+ relationshipGroup?: string;
15
+ /** Whether to block non-temporary events */
16
+ blockEvents?: boolean;
17
+ }
18
+ export interface PedAnimationOptions {
19
+ /** Animation dictionary */
20
+ dict: string;
21
+ /** Animation name */
22
+ anim: string;
23
+ /** Blend in speed */
24
+ blendInSpeed?: number;
25
+ /** Blend out speed */
26
+ blendOutSpeed?: number;
27
+ /** Duration (-1 for looped) */
28
+ duration?: number;
29
+ /** Animation flags */
30
+ flags?: number;
31
+ /** Playback rate */
32
+ playbackRate?: number;
33
+ }
34
+ export interface ManagedPed {
35
+ id: string;
36
+ handle: number;
37
+ model: string;
38
+ position: Vector3;
39
+ }
40
+ /**
41
+ * Service for ped (NPC) operations and management.
42
+ */
43
+ export declare class PedService {
44
+ private peds;
45
+ private idCounter;
46
+ /**
47
+ * Spawn a ped at a position.
48
+ *
49
+ * @param options - Spawn options
50
+ * @returns The ped ID and handle
51
+ */
52
+ spawn(options: PedSpawnOptions): Promise<{
53
+ id: string;
54
+ handle: number;
55
+ }>;
56
+ /**
57
+ * Delete a ped by ID.
58
+ *
59
+ * @param id - The ped ID
60
+ */
61
+ delete(id: string): boolean;
62
+ /**
63
+ * Delete a ped by handle.
64
+ *
65
+ * @param handle - The ped handle
66
+ */
67
+ deleteByHandle(handle: number): void;
68
+ /**
69
+ * Delete all managed peds.
70
+ */
71
+ deleteAll(): void;
72
+ /**
73
+ * Play an animation on a ped.
74
+ *
75
+ * @param handle - Ped handle
76
+ * @param options - Animation options
77
+ */
78
+ playAnimation(handle: number, options: PedAnimationOptions): Promise<void>;
79
+ /**
80
+ * Stop all animations on a ped.
81
+ *
82
+ * @param handle - Ped handle
83
+ */
84
+ stopAnimation(handle: number): void;
85
+ /**
86
+ * Stop animation immediately on a ped.
87
+ *
88
+ * @param handle - Ped handle
89
+ */
90
+ stopAnimationImmediately(handle: number): void;
91
+ /**
92
+ * Freeze a ped in place.
93
+ *
94
+ * @param handle - Ped handle
95
+ * @param freeze - Whether to freeze
96
+ */
97
+ freeze(handle: number, freeze: boolean): void;
98
+ /**
99
+ * Set ped invincibility.
100
+ *
101
+ * @param handle - Ped handle
102
+ * @param invincible - Whether invincible
103
+ */
104
+ setInvincible(handle: number, invincible: boolean): void;
105
+ /**
106
+ * Give a weapon to a ped.
107
+ *
108
+ * @param handle - Ped handle
109
+ * @param weapon - Weapon name/hash
110
+ * @param ammo - Ammo count
111
+ * @param hidden - Whether to hide the weapon
112
+ * @param forceInHand - Whether to force weapon in hand
113
+ */
114
+ giveWeapon(handle: number, weapon: string, ammo?: number, hidden?: boolean, forceInHand?: boolean): void;
115
+ /**
116
+ * Remove all weapons from a ped.
117
+ *
118
+ * @param handle - Ped handle
119
+ */
120
+ removeAllWeapons(handle: number): void;
121
+ /**
122
+ * Get the closest ped to the player.
123
+ *
124
+ * @param radius - Search radius
125
+ * @param excludePlayer - Exclude the player ped
126
+ * @returns Ped handle or null
127
+ */
128
+ getClosest(radius?: number, excludePlayer?: boolean): number | null;
129
+ /**
130
+ * Get all peds in a radius.
131
+ *
132
+ * @param position - Center position
133
+ * @param radius - Search radius
134
+ * @param excludePlayer - Exclude the player ped
135
+ * @returns Array of ped handles
136
+ */
137
+ getNearby(position: Vector3, radius: number, excludePlayer?: boolean): number[];
138
+ /**
139
+ * Make ped look at entity.
140
+ *
141
+ * @param handle - Ped handle
142
+ * @param entity - Entity to look at
143
+ * @param duration - Duration in ms (-1 for infinite)
144
+ */
145
+ lookAtEntity(handle: number, entity: number, duration?: number): void;
146
+ /**
147
+ * Make ped look at position.
148
+ *
149
+ * @param handle - Ped handle
150
+ * @param position - Position to look at
151
+ * @param duration - Duration in ms (-1 for infinite)
152
+ */
153
+ lookAtCoords(handle: number, position: Vector3, duration?: number): void;
154
+ /**
155
+ * Make ped walk to position.
156
+ *
157
+ * @param handle - Ped handle
158
+ * @param position - Target position
159
+ * @param speed - Walking speed (1.0 = walk, 2.0 = run)
160
+ */
161
+ walkTo(handle: number, position: Vector3, speed?: number): void;
162
+ /**
163
+ * Set ped combat attributes.
164
+ *
165
+ * @param handle - Ped handle
166
+ * @param canFight - Whether the ped can fight
167
+ * @param canUseCover - Whether the ped can use cover
168
+ */
169
+ setCombatAttributes(handle: number, canFight: boolean, canUseCover?: boolean): void;
170
+ /**
171
+ * Get a managed ped by ID.
172
+ */
173
+ get(id: string): ManagedPed | undefined;
174
+ /**
175
+ * Get all managed peds.
176
+ */
177
+ getAll(): ManagedPed[];
178
+ /**
179
+ * Check if a managed ped still exists.
180
+ */
181
+ exists(id: string): boolean;
182
+ }
@@ -0,0 +1,302 @@
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.PedService = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ /**
12
+ * Service for ped (NPC) operations and management.
13
+ */
14
+ let PedService = class PedService {
15
+ constructor() {
16
+ this.peds = new Map();
17
+ this.idCounter = 0;
18
+ }
19
+ /**
20
+ * Spawn a ped at a position.
21
+ *
22
+ * @param options - Spawn options
23
+ * @returns The ped ID and handle
24
+ */
25
+ async spawn(options) {
26
+ const { model, position, heading = 0, networked = false, missionEntity = true, blockEvents = true, } = options;
27
+ const modelHash = GetHashKey(model);
28
+ // Load the model
29
+ if (!IsModelInCdimage(modelHash) || !IsModelValid(modelHash)) {
30
+ throw new Error(`Invalid ped model: ${model}`);
31
+ }
32
+ RequestModel(modelHash);
33
+ while (!HasModelLoaded(modelHash)) {
34
+ await new Promise((r) => setTimeout(r, 0));
35
+ }
36
+ // Create the ped
37
+ const ped = CreatePed(4, modelHash, position.x, position.y, position.z, heading, networked, true);
38
+ SetModelAsNoLongerNeeded(modelHash);
39
+ if (!ped || ped === 0) {
40
+ throw new Error('Failed to create ped');
41
+ }
42
+ // Configure the ped
43
+ if (missionEntity) {
44
+ SetEntityAsMissionEntity(ped, true, true);
45
+ }
46
+ if (blockEvents) {
47
+ SetBlockingOfNonTemporaryEvents(ped, true);
48
+ }
49
+ // Set default relationship (neutral)
50
+ SetPedRelationshipGroupHash(ped, GetHashKey('CIVMALE'));
51
+ // Register in our map
52
+ const id = `ped_${++this.idCounter}`;
53
+ this.peds.set(id, { id, handle: ped, model, position });
54
+ return { id, handle: ped };
55
+ }
56
+ /**
57
+ * Delete a ped by ID.
58
+ *
59
+ * @param id - The ped ID
60
+ */
61
+ delete(id) {
62
+ const ped = this.peds.get(id);
63
+ if (!ped)
64
+ return false;
65
+ if (DoesEntityExist(ped.handle)) {
66
+ SetEntityAsMissionEntity(ped.handle, true, true);
67
+ DeletePed(ped.handle);
68
+ }
69
+ this.peds.delete(id);
70
+ return true;
71
+ }
72
+ /**
73
+ * Delete a ped by handle.
74
+ *
75
+ * @param handle - The ped handle
76
+ */
77
+ deleteByHandle(handle) {
78
+ if (DoesEntityExist(handle)) {
79
+ SetEntityAsMissionEntity(handle, true, true);
80
+ DeletePed(handle);
81
+ }
82
+ // Remove from our map if tracked
83
+ for (const [id, ped] of this.peds) {
84
+ if (ped.handle === handle) {
85
+ this.peds.delete(id);
86
+ break;
87
+ }
88
+ }
89
+ }
90
+ /**
91
+ * Delete all managed peds.
92
+ */
93
+ deleteAll() {
94
+ for (const ped of this.peds.values()) {
95
+ if (DoesEntityExist(ped.handle)) {
96
+ SetEntityAsMissionEntity(ped.handle, true, true);
97
+ DeletePed(ped.handle);
98
+ }
99
+ }
100
+ this.peds.clear();
101
+ }
102
+ /**
103
+ * Play an animation on a ped.
104
+ *
105
+ * @param handle - Ped handle
106
+ * @param options - Animation options
107
+ */
108
+ async playAnimation(handle, options) {
109
+ const { dict, anim, blendInSpeed = 8.0, blendOutSpeed = -8.0, duration = -1, flags = 1, playbackRate = 0.0, } = options;
110
+ if (!DoesEntityExist(handle))
111
+ return;
112
+ // Load anim dict
113
+ RequestAnimDict(dict);
114
+ while (!HasAnimDictLoaded(dict)) {
115
+ await new Promise((r) => setTimeout(r, 0));
116
+ }
117
+ TaskPlayAnim(handle, dict, anim, blendInSpeed, blendOutSpeed, duration, flags, playbackRate, false, false, false);
118
+ }
119
+ /**
120
+ * Stop all animations on a ped.
121
+ *
122
+ * @param handle - Ped handle
123
+ */
124
+ stopAnimation(handle) {
125
+ if (!DoesEntityExist(handle))
126
+ return;
127
+ ClearPedTasks(handle);
128
+ }
129
+ /**
130
+ * Stop animation immediately on a ped.
131
+ *
132
+ * @param handle - Ped handle
133
+ */
134
+ stopAnimationImmediately(handle) {
135
+ if (!DoesEntityExist(handle))
136
+ return;
137
+ ClearPedTasksImmediately(handle);
138
+ }
139
+ /**
140
+ * Freeze a ped in place.
141
+ *
142
+ * @param handle - Ped handle
143
+ * @param freeze - Whether to freeze
144
+ */
145
+ freeze(handle, freeze) {
146
+ if (!DoesEntityExist(handle))
147
+ return;
148
+ FreezeEntityPosition(handle, freeze);
149
+ }
150
+ /**
151
+ * Set ped invincibility.
152
+ *
153
+ * @param handle - Ped handle
154
+ * @param invincible - Whether invincible
155
+ */
156
+ setInvincible(handle, invincible) {
157
+ if (!DoesEntityExist(handle))
158
+ return;
159
+ SetEntityInvincible(handle, invincible);
160
+ }
161
+ /**
162
+ * Give a weapon to a ped.
163
+ *
164
+ * @param handle - Ped handle
165
+ * @param weapon - Weapon name/hash
166
+ * @param ammo - Ammo count
167
+ * @param hidden - Whether to hide the weapon
168
+ * @param forceInHand - Whether to force weapon in hand
169
+ */
170
+ giveWeapon(handle, weapon, ammo = 100, hidden = false, forceInHand = true) {
171
+ if (!DoesEntityExist(handle))
172
+ return;
173
+ const weaponHash = GetHashKey(weapon);
174
+ GiveWeaponToPed(handle, weaponHash, ammo, hidden, forceInHand);
175
+ }
176
+ /**
177
+ * Remove all weapons from a ped.
178
+ *
179
+ * @param handle - Ped handle
180
+ */
181
+ removeAllWeapons(handle) {
182
+ if (!DoesEntityExist(handle))
183
+ return;
184
+ RemoveAllPedWeapons(handle, true);
185
+ }
186
+ /**
187
+ * Get the closest ped to the player.
188
+ *
189
+ * @param radius - Search radius
190
+ * @param excludePlayer - Exclude the player ped
191
+ * @returns Ped handle or null
192
+ */
193
+ getClosest(radius = 10.0, excludePlayer = true) {
194
+ const playerPed = PlayerPedId();
195
+ const [px, py, pz] = GetEntityCoords(playerPed, true);
196
+ const [found, handle] = GetClosestPed(px, py, pz, radius, true, true, true, false, -1);
197
+ if (!found || handle === 0)
198
+ return null;
199
+ if (excludePlayer && handle === playerPed)
200
+ return null;
201
+ return handle;
202
+ }
203
+ /**
204
+ * Get all peds in a radius.
205
+ *
206
+ * @param position - Center position
207
+ * @param radius - Search radius
208
+ * @param excludePlayer - Exclude the player ped
209
+ * @returns Array of ped handles
210
+ */
211
+ getNearby(position, radius, excludePlayer = true) {
212
+ const peds = [];
213
+ const playerPed = PlayerPedId();
214
+ const [handle, _] = FindFirstPed(0);
215
+ let ped = handle;
216
+ do {
217
+ if (!DoesEntityExist(ped))
218
+ continue;
219
+ if (excludePlayer && ped === playerPed)
220
+ continue;
221
+ const [ex, ey, ez] = GetEntityCoords(ped, true);
222
+ const dist = Math.sqrt(Math.pow(ex - position.x, 2) + Math.pow(ey - position.y, 2) + Math.pow(ez - position.z, 2));
223
+ if (dist <= radius) {
224
+ peds.push(ped);
225
+ }
226
+ } while (FindNextPed(handle, ped));
227
+ EndFindPed(handle);
228
+ return peds;
229
+ }
230
+ /**
231
+ * Make ped look at entity.
232
+ *
233
+ * @param handle - Ped handle
234
+ * @param entity - Entity to look at
235
+ * @param duration - Duration in ms (-1 for infinite)
236
+ */
237
+ lookAtEntity(handle, entity, duration = -1) {
238
+ if (!DoesEntityExist(handle))
239
+ return;
240
+ TaskLookAtEntity(handle, entity, duration, 2048, 3);
241
+ }
242
+ /**
243
+ * Make ped look at position.
244
+ *
245
+ * @param handle - Ped handle
246
+ * @param position - Position to look at
247
+ * @param duration - Duration in ms (-1 for infinite)
248
+ */
249
+ lookAtCoords(handle, position, duration = -1) {
250
+ if (!DoesEntityExist(handle))
251
+ return;
252
+ TaskLookAtCoord(handle, position.x, position.y, position.z, duration, 2048, 3);
253
+ }
254
+ /**
255
+ * Make ped walk to position.
256
+ *
257
+ * @param handle - Ped handle
258
+ * @param position - Target position
259
+ * @param speed - Walking speed (1.0 = walk, 2.0 = run)
260
+ */
261
+ walkTo(handle, position, speed = 1.0) {
262
+ if (!DoesEntityExist(handle))
263
+ return;
264
+ TaskGoStraightToCoord(handle, position.x, position.y, position.z, speed, -1, 0.0, 0.0);
265
+ }
266
+ /**
267
+ * Set ped combat attributes.
268
+ *
269
+ * @param handle - Ped handle
270
+ * @param canFight - Whether the ped can fight
271
+ * @param canUseCover - Whether the ped can use cover
272
+ */
273
+ setCombatAttributes(handle, canFight, canUseCover = true) {
274
+ if (!DoesEntityExist(handle))
275
+ return;
276
+ SetPedCombatAttributes(handle, 46, canFight); // Can fight
277
+ SetPedCombatAttributes(handle, 0, canUseCover); // Can use cover
278
+ }
279
+ /**
280
+ * Get a managed ped by ID.
281
+ */
282
+ get(id) {
283
+ return this.peds.get(id);
284
+ }
285
+ /**
286
+ * Get all managed peds.
287
+ */
288
+ getAll() {
289
+ return Array.from(this.peds.values());
290
+ }
291
+ /**
292
+ * Check if a managed ped still exists.
293
+ */
294
+ exists(id) {
295
+ const ped = this.peds.get(id);
296
+ return ped ? DoesEntityExist(ped.handle) : false;
297
+ }
298
+ };
299
+ exports.PedService = PedService;
300
+ exports.PedService = PedService = __decorate([
301
+ (0, tsyringe_1.injectable)()
302
+ ], PedService);
@@ -0,0 +1,82 @@
1
+ export interface ProgressOptions {
2
+ /** Progress label/title */
3
+ label: string;
4
+ /** Duration in milliseconds */
5
+ duration: number;
6
+ /** Whether to use a circular indicator */
7
+ useCircular?: boolean;
8
+ /** Whether the player can cancel (usually with a key) */
9
+ canCancel?: boolean;
10
+ /** Disable player controls during progress */
11
+ disableControls?: boolean;
12
+ /** Disable player movement */
13
+ disableMovement?: boolean;
14
+ /** Disable combat actions */
15
+ disableCombat?: boolean;
16
+ /** Animation to play during progress */
17
+ animation?: {
18
+ dict: string;
19
+ anim: string;
20
+ flags?: number;
21
+ };
22
+ /** Prop to attach during progress */
23
+ prop?: {
24
+ model: string;
25
+ bone: number;
26
+ offset: {
27
+ x: number;
28
+ y: number;
29
+ z: number;
30
+ };
31
+ rotation: {
32
+ x: number;
33
+ y: number;
34
+ z: number;
35
+ };
36
+ };
37
+ }
38
+ export interface ProgressState {
39
+ active: boolean;
40
+ progress: number;
41
+ label: string;
42
+ startTime: number;
43
+ duration: number;
44
+ options: ProgressOptions;
45
+ }
46
+ /**
47
+ * Service for displaying progress bars/indicators.
48
+ */
49
+ export declare class ProgressService {
50
+ private state;
51
+ private tickHandle;
52
+ private callback;
53
+ private propHandle;
54
+ /**
55
+ * Start a progress action.
56
+ *
57
+ * @param options - Progress options
58
+ * @returns Promise that resolves with true if completed, false if cancelled
59
+ */
60
+ start(options: ProgressOptions): Promise<boolean>;
61
+ /**
62
+ * Cancel the current progress.
63
+ */
64
+ cancel(): void;
65
+ /**
66
+ * Check if a progress is currently active.
67
+ */
68
+ isActive(): boolean;
69
+ /**
70
+ * Get current progress percentage (0-100).
71
+ */
72
+ getProgress(): number;
73
+ /**
74
+ * Get current progress state.
75
+ */
76
+ getState(): ProgressState | null;
77
+ private startProgress;
78
+ private drawProgressBar;
79
+ private cleanup;
80
+ private loadAnimDict;
81
+ private loadModel;
82
+ }