@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,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,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
+ }