@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,480 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClientPlayer = void 0;
4
+ /**
5
+ * Client-side player representation with convenient accessors and methods.
6
+ */
7
+ class Player {
8
+ constructor() {
9
+ this.meta = {};
10
+ }
11
+ // ─────────────────────────────────────────────────────────────────────────────
12
+ // Core Getters
13
+ // ─────────────────────────────────────────────────────────────────────────────
14
+ /** Get the player's ped handle */
15
+ get ped() {
16
+ return PlayerPedId();
17
+ }
18
+ /** Get the player ID */
19
+ get id() {
20
+ return PlayerId();
21
+ }
22
+ /** Get the server ID (source) */
23
+ get serverId() {
24
+ return GetPlayerServerId(this.id);
25
+ }
26
+ /** Get the player's current coordinates */
27
+ get coords() {
28
+ const [x, y, z] = GetEntityCoords(this.ped, false);
29
+ return { x, y, z };
30
+ }
31
+ /** Get the player's current heading (rotation) */
32
+ get heading() {
33
+ return GetEntityHeading(this.ped);
34
+ }
35
+ // ─────────────────────────────────────────────────────────────────────────────
36
+ // Health & Status
37
+ // ─────────────────────────────────────────────────────────────────────────────
38
+ /** Get current health (0-200, 100 = dead) */
39
+ get health() {
40
+ return GetEntityHealth(this.ped);
41
+ }
42
+ /** Get max health */
43
+ get maxHealth() {
44
+ return GetEntityMaxHealth(this.ped);
45
+ }
46
+ /** Get current armor (0-100) */
47
+ get armor() {
48
+ return GetPedArmour(this.ped);
49
+ }
50
+ /** Check if the player is dead */
51
+ get isDead() {
52
+ return IsEntityDead(this.ped);
53
+ }
54
+ /** Check if player is in water */
55
+ get isInWater() {
56
+ return IsEntityInWater(this.ped);
57
+ }
58
+ /** Check if player is swimming */
59
+ get isSwimming() {
60
+ return IsPedSwimming(this.ped);
61
+ }
62
+ /** Check if player is falling */
63
+ get isFalling() {
64
+ return IsPedFalling(this.ped);
65
+ }
66
+ /** Check if player is climbing */
67
+ get isClimbing() {
68
+ return IsPedClimbing(this.ped);
69
+ }
70
+ /** Check if player is ragdolling */
71
+ get isRagdoll() {
72
+ return IsPedRagdoll(this.ped);
73
+ }
74
+ /** Check if player is parachuting */
75
+ get isParachuting() {
76
+ return IsPedInParachuteFreeFall(this.ped);
77
+ }
78
+ // ─────────────────────────────────────────────────────────────────────────────
79
+ // Vehicle State
80
+ // ─────────────────────────────────────────────────────────────────────────────
81
+ /** Check if player is in any vehicle */
82
+ get isInVehicle() {
83
+ return IsPedInAnyVehicle(this.ped, false);
84
+ }
85
+ /** Get current vehicle handle (or null if not in vehicle) */
86
+ get currentVehicle() {
87
+ if (!this.isInVehicle)
88
+ return null;
89
+ return GetVehiclePedIsIn(this.ped, false);
90
+ }
91
+ /** Get last vehicle the player was in */
92
+ get lastVehicle() {
93
+ const vehicle = GetVehiclePedIsIn(this.ped, true);
94
+ return vehicle !== 0 ? vehicle : null;
95
+ }
96
+ /** Check if player is the driver of current vehicle */
97
+ get isDriver() {
98
+ const vehicle = this.currentVehicle;
99
+ if (!vehicle)
100
+ return false;
101
+ return GetPedInVehicleSeat(vehicle, -1) === this.ped;
102
+ }
103
+ /** Get current vehicle seat index (-1 = driver, 0+ = passengers) */
104
+ get vehicleSeat() {
105
+ const vehicle = this.currentVehicle;
106
+ if (!vehicle)
107
+ return null;
108
+ for (let seat = -1; seat < GetVehicleMaxNumberOfPassengers(vehicle); seat++) {
109
+ if (GetPedInVehicleSeat(vehicle, seat) === this.ped) {
110
+ return seat;
111
+ }
112
+ }
113
+ return null;
114
+ }
115
+ // ─────────────────────────────────────────────────────────────────────────────
116
+ // Combat State
117
+ // ─────────────────────────────────────────────────────────────────────────────
118
+ /** Check if player is shooting */
119
+ get isShooting() {
120
+ return IsPedShooting(this.ped);
121
+ }
122
+ /** Check if player is aiming */
123
+ get isAiming() {
124
+ return IsPlayerFreeAiming(this.id);
125
+ }
126
+ /** Check if player is reloading */
127
+ get isReloading() {
128
+ return IsPedReloading(this.ped);
129
+ }
130
+ /** Check if player is in cover */
131
+ get isInCover() {
132
+ return IsPedInCover(this.ped, false);
133
+ }
134
+ /** Check if player is in melee combat */
135
+ get isInMeleeCombat() {
136
+ return IsPedInMeleeCombat(this.ped);
137
+ }
138
+ /** Get currently equipped weapon hash */
139
+ get currentWeapon() {
140
+ const [_, weaponHash] = GetCurrentPedWeapon(this.ped, true);
141
+ return weaponHash;
142
+ }
143
+ /** Get ammo count for current weapon */
144
+ get currentWeaponAmmo() {
145
+ return GetAmmoInPedWeapon(this.ped, this.currentWeapon);
146
+ }
147
+ // ─────────────────────────────────────────────────────────────────────────────
148
+ // Movement State
149
+ // ─────────────────────────────────────────────────────────────────────────────
150
+ /** Check if player is walking */
151
+ get isWalking() {
152
+ return IsPedWalking(this.ped);
153
+ }
154
+ /** Check if player is running */
155
+ get isRunning() {
156
+ return IsPedRunning(this.ped);
157
+ }
158
+ /** Check if player is sprinting */
159
+ get isSprinting() {
160
+ return IsPedSprinting(this.ped);
161
+ }
162
+ /** Check if player is on foot */
163
+ get isOnFoot() {
164
+ return IsPedOnFoot(this.ped);
165
+ }
166
+ /** Check if player is stationary */
167
+ get isStill() {
168
+ return IsPedStill(this.ped);
169
+ }
170
+ /** Get movement speed in m/s */
171
+ get speed() {
172
+ return GetEntitySpeed(this.ped);
173
+ }
174
+ // ─────────────────────────────────────────────────────────────────────────────
175
+ // Health & Armor Setters
176
+ // ─────────────────────────────────────────────────────────────────────────────
177
+ /**
178
+ * Set player health.
179
+ * @param value - Health value (100 = dead, 200 = full)
180
+ */
181
+ setHealth(value) {
182
+ SetEntityHealth(this.ped, value);
183
+ }
184
+ /**
185
+ * Set player armor.
186
+ * @param value - Armor value (0-100)
187
+ */
188
+ setArmor(value) {
189
+ SetPedArmour(this.ped, Math.max(0, Math.min(100, value)));
190
+ }
191
+ /**
192
+ * Heal the player to full health and armor.
193
+ */
194
+ heal() {
195
+ this.setHealth(this.maxHealth);
196
+ this.setArmor(100);
197
+ }
198
+ /**
199
+ * Revive the player at current position.
200
+ */
201
+ revive() {
202
+ const coords = this.coords;
203
+ NetworkResurrectLocalPlayer(coords.x, coords.y, coords.z, this.heading, 1, false);
204
+ this.heal();
205
+ }
206
+ // ─────────────────────────────────────────────────────────────────────────────
207
+ // Position & Movement
208
+ // ─────────────────────────────────────────────────────────────────────────────
209
+ /**
210
+ * Set player coordinates.
211
+ * @param vector3 - Target position
212
+ * @param heading - Optional heading
213
+ */
214
+ setCoords(vector3, heading) {
215
+ SetEntityCoordsNoOffset(this.ped, vector3.x, vector3.y, vector3.z, false, false, false);
216
+ if (heading !== undefined) {
217
+ SetEntityHeading(this.ped, heading);
218
+ }
219
+ }
220
+ /**
221
+ * Set player heading/rotation.
222
+ * @param heading - Heading in degrees
223
+ */
224
+ setHeading(heading) {
225
+ SetEntityHeading(this.ped, heading);
226
+ }
227
+ /**
228
+ * Freeze/unfreeze the player in place.
229
+ * @param freeze - Whether to freeze
230
+ */
231
+ freeze(freeze) {
232
+ FreezeEntityPosition(this.ped, freeze);
233
+ }
234
+ /**
235
+ * Set player invincibility.
236
+ * @param invincible - Whether invincible
237
+ */
238
+ setInvincible(invincible) {
239
+ SetEntityInvincible(this.ped, invincible);
240
+ }
241
+ /**
242
+ * Set player visibility.
243
+ * @param visible - Whether visible
244
+ */
245
+ setVisible(visible) {
246
+ SetEntityVisible(this.ped, visible, false);
247
+ }
248
+ /**
249
+ * Set player alpha/transparency.
250
+ * @param alpha - Alpha value (0-255)
251
+ */
252
+ setAlpha(alpha) {
253
+ SetEntityAlpha(this.ped, alpha, false);
254
+ }
255
+ // ─────────────────────────────────────────────────────────────────────────────
256
+ // Weapons
257
+ // ─────────────────────────────────────────────────────────────────────────────
258
+ /**
259
+ * Give a weapon to the player.
260
+ * @param weapon - Weapon name (e.g., 'WEAPON_PISTOL')
261
+ * @param ammo - Ammo count
262
+ * @param equipNow - Whether to equip immediately
263
+ */
264
+ giveWeapon(weapon, ammo = 100, equipNow = true) {
265
+ const weaponHash = GetHashKey(weapon);
266
+ GiveWeaponToPed(this.ped, weaponHash, ammo, false, equipNow);
267
+ }
268
+ /**
269
+ * Remove a weapon from the player.
270
+ * @param weapon - Weapon name
271
+ */
272
+ removeWeapon(weapon) {
273
+ const weaponHash = GetHashKey(weapon);
274
+ RemoveWeaponFromPed(this.ped, weaponHash);
275
+ }
276
+ /**
277
+ * Remove all weapons from the player.
278
+ */
279
+ removeAllWeapons() {
280
+ RemoveAllPedWeapons(this.ped, true);
281
+ }
282
+ /**
283
+ * Set current weapon ammo.
284
+ * @param weapon - Weapon name
285
+ * @param ammo - Ammo count
286
+ */
287
+ setWeaponAmmo(weapon, ammo) {
288
+ const weaponHash = GetHashKey(weapon);
289
+ SetPedAmmo(this.ped, weaponHash, ammo);
290
+ }
291
+ /**
292
+ * Check if player has a specific weapon.
293
+ * @param weapon - Weapon name
294
+ */
295
+ hasWeapon(weapon) {
296
+ const weaponHash = GetHashKey(weapon);
297
+ return HasPedGotWeapon(this.ped, weaponHash, false);
298
+ }
299
+ // ─────────────────────────────────────────────────────────────────────────────
300
+ // Animations & Tasks
301
+ // ─────────────────────────────────────────────────────────────────────────────
302
+ /**
303
+ * Play an animation on the player.
304
+ * @param dict - Animation dictionary
305
+ * @param name - Animation name
306
+ * @param duration - Duration (-1 for looped)
307
+ * @param flags - Animation flags
308
+ */
309
+ async playAnimation(dict, name, duration = -1, flags = 1) {
310
+ RequestAnimDict(dict);
311
+ while (!HasAnimDictLoaded(dict)) {
312
+ await new Promise((r) => setTimeout(r, 0));
313
+ }
314
+ TaskPlayAnim(this.ped, dict, name, 8.0, -8.0, duration, flags, 0.0, false, false, false);
315
+ }
316
+ /**
317
+ * Stop current animation.
318
+ */
319
+ stopAnimation() {
320
+ ClearPedTasks(this.ped);
321
+ }
322
+ /**
323
+ * Stop animation immediately.
324
+ */
325
+ stopAnimationImmediately() {
326
+ ClearPedTasksImmediately(this.ped);
327
+ }
328
+ /**
329
+ * Check if player is playing a specific animation.
330
+ * @param dict - Animation dictionary
331
+ * @param name - Animation name
332
+ */
333
+ isPlayingAnimation(dict, name) {
334
+ return IsEntityPlayingAnim(this.ped, dict, name, 3);
335
+ }
336
+ // ─────────────────────────────────────────────────────────────────────────────
337
+ // Vehicle Interaction
338
+ // ─────────────────────────────────────────────────────────────────────────────
339
+ /**
340
+ * Warp player into a vehicle.
341
+ * @param vehicle - Vehicle handle
342
+ * @param seat - Seat index (-1 = driver)
343
+ */
344
+ warpIntoVehicle(vehicle, seat = -1) {
345
+ TaskWarpPedIntoVehicle(this.ped, vehicle, seat);
346
+ }
347
+ /**
348
+ * Task player to exit current vehicle.
349
+ * @param flags - Exit flags (0 = normal, 16 = immediately)
350
+ */
351
+ exitVehicle(flags = 0) {
352
+ const vehicle = this.currentVehicle;
353
+ if (vehicle) {
354
+ TaskLeaveVehicle(this.ped, vehicle, flags);
355
+ }
356
+ }
357
+ // ─────────────────────────────────────────────────────────────────────────────
358
+ // Ped Flags & Properties
359
+ // ─────────────────────────────────────────────────────────────────────────────
360
+ /**
361
+ * Set can ragdoll.
362
+ * @param canRagdoll - Whether player can ragdoll
363
+ */
364
+ setCanRagdoll(canRagdoll) {
365
+ SetPedCanRagdoll(this.ped, canRagdoll);
366
+ }
367
+ /**
368
+ * Set ped config flag.
369
+ * @param flag - Flag ID
370
+ * @param value - Flag value
371
+ */
372
+ setConfigFlag(flag, value) {
373
+ SetPedConfigFlag(this.ped, flag, value);
374
+ }
375
+ /**
376
+ * Get ped config flag.
377
+ * @param flag - Flag ID
378
+ */
379
+ getConfigFlag(flag) {
380
+ return GetPedConfigFlag(this.ped, flag, true);
381
+ }
382
+ // ─────────────────────────────────────────────────────────────────────────────
383
+ // Meta Storage
384
+ // ─────────────────────────────────────────────────────────────────────────────
385
+ /**
386
+ * Set a metadata value.
387
+ * @param key - Meta key
388
+ * @param value - Meta value
389
+ */
390
+ setMeta(key, value) {
391
+ this.meta[key] = value;
392
+ }
393
+ /**
394
+ * Get a metadata value.
395
+ * @param key - Meta key
396
+ */
397
+ getMeta(key) {
398
+ return this.meta[key];
399
+ }
400
+ /**
401
+ * Delete a metadata value.
402
+ * @param key - Meta key
403
+ */
404
+ deleteMeta(key) {
405
+ delete this.meta[key];
406
+ }
407
+ /**
408
+ * Get all metadata.
409
+ */
410
+ getAllMeta() {
411
+ return Object.assign({}, this.meta);
412
+ }
413
+ /**
414
+ * Clear all metadata.
415
+ */
416
+ clearMeta() {
417
+ this.meta = {};
418
+ }
419
+ // ─────────────────────────────────────────────────────────────────────────────
420
+ // Utility Methods
421
+ // ─────────────────────────────────────────────────────────────────────────────
422
+ /**
423
+ * Get distance to a position.
424
+ * @param position - Target position
425
+ */
426
+ distanceTo(position) {
427
+ const coords = this.coords;
428
+ return Math.sqrt(Math.pow(coords.x - position.x, 2) +
429
+ Math.pow(coords.y - position.y, 2) +
430
+ Math.pow(coords.z - position.z, 2));
431
+ }
432
+ /**
433
+ * Check if player is within range of a position.
434
+ * @param position - Target position
435
+ * @param range - Maximum range
436
+ */
437
+ isNearPosition(position, range) {
438
+ return this.distanceTo(position) <= range;
439
+ }
440
+ /**
441
+ * Get the entity the player is looking at.
442
+ * @param maxDistance - Maximum detection distance
443
+ */
444
+ getEntityLookingAt(maxDistance = 10.0) {
445
+ const [hit, entity] = GetEntityPlayerIsFreeAimingAt(this.id);
446
+ if (!hit || !entity || entity === 0)
447
+ return null;
448
+ const coords = this.coords;
449
+ const entityCoords = GetEntityCoords(entity, true);
450
+ const distance = Math.sqrt(Math.pow(coords.x - entityCoords[0], 2) +
451
+ Math.pow(coords.y - entityCoords[1], 2) +
452
+ Math.pow(coords.z - entityCoords[2], 2));
453
+ return distance <= maxDistance ? entity : null;
454
+ }
455
+ /**
456
+ * Disable a control action.
457
+ * @param control - Control ID
458
+ * @param padIndex - Pad index (usually 0)
459
+ */
460
+ disableControl(control, padIndex = 0) {
461
+ DisableControlAction(padIndex, control, true);
462
+ }
463
+ /**
464
+ * Check if a control is pressed.
465
+ * @param control - Control ID
466
+ * @param padIndex - Pad index (usually 0)
467
+ */
468
+ isControlPressed(control, padIndex = 0) {
469
+ return IsControlPressed(padIndex, control);
470
+ }
471
+ /**
472
+ * Check if a control was just pressed.
473
+ * @param control - Control ID
474
+ * @param padIndex - Pad index (usually 0)
475
+ */
476
+ isControlJustPressed(control, padIndex = 0) {
477
+ return IsControlJustPressed(padIndex, control);
478
+ }
479
+ }
480
+ exports.ClientPlayer = new Player();
@@ -0,0 +1 @@
1
+ export declare const playerClientLoader: () => void;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.playerClientLoader = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const player_1 = require("./player");
6
+ const logger_1 = require("../../shared/logger");
7
+ const clientSession = logger_1.coreLogger.child('Session', logger_1.LogDomain.CLIENT);
8
+ const playerClientLoader = () => {
9
+ on('onClientResourceStart', (resourceName) => {
10
+ if (resourceName !== GetCurrentResourceName())
11
+ return;
12
+ clientSession.debug('Client player loader initialized');
13
+ });
14
+ onNet('core:playerSessionInit', (data) => {
15
+ player_1.ClientPlayer.setMeta('playerId', data.playerId);
16
+ clientSession.info('Player session initialized', { playerId: data.playerId });
17
+ });
18
+ onNet('core:teleportTo', (x, y, z, heading) => {
19
+ player_1.ClientPlayer.setCoords(utils_1.Vec3.create(x, y, z), heading);
20
+ });
21
+ };
22
+ exports.playerClientLoader = playerClientLoader;
@@ -0,0 +1,6 @@
1
+ import { PlayerAppearance } from '../interfaces/appearance.interface';
2
+ export declare class AppearanceService {
3
+ applyAppearance(ped: number, appearance: PlayerAppearance): Promise<void>;
4
+ getAppearance(ped: number): Promise<PlayerAppearance>;
5
+ validateAppearance(appearance: Partial<PlayerAppearance>): boolean;
6
+ }
@@ -0,0 +1,89 @@
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.AppearanceService = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ let AppearanceService = class AppearanceService {
12
+ async applyAppearance(ped, appearance) {
13
+ if (appearance.components) {
14
+ for (const [componentId, data] of Object.entries(appearance.components)) {
15
+ SetPedComponentVariation(ped, parseInt(componentId), data.drawable, data.texture, 2);
16
+ }
17
+ }
18
+ if (appearance.props) {
19
+ for (const [propId, data] of Object.entries(appearance.props)) {
20
+ if (data.drawable === -1) {
21
+ ClearPedProp(ped, parseInt(propId));
22
+ }
23
+ else {
24
+ SetPedPropIndex(ped, parseInt(propId), data.drawable, data.texture, true);
25
+ }
26
+ }
27
+ }
28
+ if (appearance.faceFeatures) {
29
+ for (const [index, value] of Object.entries(appearance.faceFeatures)) {
30
+ SetPedFaceFeature(ped, parseInt(index), value);
31
+ }
32
+ }
33
+ if (appearance.headBlend) {
34
+ const { shapeFirst, shapeSecond, shapeMix, skinFirst, skinSecond, skinMix } = appearance.headBlend;
35
+ SetPedHeadBlendData(ped, shapeFirst, shapeSecond, 0, skinFirst, skinSecond, 0, shapeMix, skinMix, 0, false);
36
+ }
37
+ }
38
+ async getAppearance(ped) {
39
+ const appearance = {
40
+ components: {},
41
+ props: {},
42
+ faceFeatures: {},
43
+ };
44
+ // Components (0–11)
45
+ for (let i = 0; i <= 11; i++) {
46
+ const drawable = GetPedDrawableVariation(ped, i);
47
+ const texture = GetPedTextureVariation(ped, i);
48
+ if (drawable !== -1) {
49
+ appearance.components[i] = { drawable, texture };
50
+ }
51
+ }
52
+ // Props (0–7)
53
+ for (let i = 0; i <= 7; i++) {
54
+ const drawable = GetPedPropIndex(ped, i);
55
+ const texture = GetPedPropTextureIndex(ped, i);
56
+ if (drawable !== -1) {
57
+ appearance.props[i] = { drawable, texture };
58
+ }
59
+ }
60
+ return appearance;
61
+ }
62
+ validateAppearance(appearance) {
63
+ if (!appearance)
64
+ return false;
65
+ if (appearance.components) {
66
+ for (const [id, data] of Object.entries(appearance.components)) {
67
+ const componentId = parseInt(id);
68
+ if (isNaN(componentId) || componentId < 0 || componentId > 11)
69
+ return false;
70
+ if (data.drawable === undefined || data.texture === undefined)
71
+ return false;
72
+ }
73
+ }
74
+ if (appearance.props) {
75
+ for (const [id, data] of Object.entries(appearance.props)) {
76
+ const propId = parseInt(id);
77
+ if (isNaN(propId) || propId < 0 || propId > 7)
78
+ return false;
79
+ if (data.drawable === undefined || data.texture === undefined)
80
+ return false;
81
+ }
82
+ }
83
+ return true;
84
+ }
85
+ };
86
+ exports.AppearanceService = AppearanceService;
87
+ exports.AppearanceService = AppearanceService = __decorate([
88
+ (0, tsyringe_1.injectable)()
89
+ ], AppearanceService);