@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.
- package/LICENSE +373 -0
- package/README.md +360 -0
- package/dist/client/client-bootstrap.d.ts +1 -0
- package/dist/client/client-bootstrap.js +50 -0
- package/dist/client/client-container.d.ts +2 -0
- package/dist/client/client-container.js +6 -0
- package/dist/client/client-core.d.ts +1 -0
- package/dist/client/client-core.js +7 -0
- package/dist/client/controllers/spawner.controller.d.ts +12 -0
- package/dist/client/controllers/spawner.controller.js +51 -0
- package/dist/client/decorators/controller.d.ts +3 -0
- package/dist/client/decorators/controller.js +14 -0
- package/dist/client/decorators/export.d.ts +7 -0
- package/dist/client/decorators/export.js +15 -0
- package/dist/client/decorators/gameEvent.d.ts +47 -0
- package/dist/client/decorators/gameEvent.js +54 -0
- package/dist/client/decorators/index.d.ts +10 -0
- package/dist/client/decorators/index.js +26 -0
- package/dist/client/decorators/interval.d.ts +7 -0
- package/dist/client/decorators/interval.js +15 -0
- package/dist/client/decorators/key.d.ts +2 -0
- package/dist/client/decorators/key.js +10 -0
- package/dist/client/decorators/localEvent.d.ts +7 -0
- package/dist/client/decorators/localEvent.js +15 -0
- package/dist/client/decorators/nui.d.ts +1 -0
- package/dist/client/decorators/nui.js +9 -0
- package/dist/client/decorators/onNet.d.ts +1 -0
- package/dist/client/decorators/onNet.js +9 -0
- package/dist/client/decorators/resourceLifecycle.d.ts +11 -0
- package/dist/client/decorators/resourceLifecycle.js +24 -0
- package/dist/client/decorators/tick.d.ts +1 -0
- package/dist/client/decorators/tick.js +9 -0
- package/dist/client/index.d.ts +7 -0
- package/dist/client/index.js +23 -0
- package/dist/client/interfaces/appearance.interface.d.ts +19 -0
- package/dist/client/interfaces/appearance.interface.js +2 -0
- package/dist/client/player/player.d.ts +262 -0
- package/dist/client/player/player.js +480 -0
- package/dist/client/player/player.loader.d.ts +1 -0
- package/dist/client/player/player.loader.js +22 -0
- package/dist/client/services/appearance.service.d.ts +6 -0
- package/dist/client/services/appearance.service.js +89 -0
- package/dist/client/services/blip.service.d.ts +112 -0
- package/dist/client/services/blip.service.js +215 -0
- package/dist/client/services/index.d.ts +9 -0
- package/dist/client/services/index.js +25 -0
- package/dist/client/services/marker.service.d.ts +94 -0
- package/dist/client/services/marker.service.js +153 -0
- package/dist/client/services/notification.service.d.ts +76 -0
- package/dist/client/services/notification.service.js +111 -0
- package/dist/client/services/ped.service.d.ts +182 -0
- package/dist/client/services/ped.service.js +302 -0
- package/dist/client/services/progress.service.d.ts +82 -0
- package/dist/client/services/progress.service.js +210 -0
- package/dist/client/services/spawn.service.d.ts +73 -0
- package/dist/client/services/spawn.service.js +261 -0
- package/dist/client/services/streaming.service.d.ts +165 -0
- package/dist/client/services/streaming.service.js +341 -0
- package/dist/client/services/textui.service.d.ts +82 -0
- package/dist/client/services/textui.service.js +156 -0
- package/dist/client/services/vehicle.service.d.ts +168 -0
- package/dist/client/services/vehicle.service.js +296 -0
- package/dist/client/system/metadata-client.keys.d.ts +13 -0
- package/dist/client/system/metadata-client.keys.js +16 -0
- package/dist/client/system/processors/export.processor.d.ts +7 -0
- package/dist/client/system/processors/export.processor.js +39 -0
- package/dist/client/system/processors/gameEvent.processor.d.ts +10 -0
- package/dist/client/system/processors/gameEvent.processor.js +58 -0
- package/dist/client/system/processors/interval.processor.d.ts +7 -0
- package/dist/client/system/processors/interval.processor.js +43 -0
- package/dist/client/system/processors/key.processor.d.ts +8 -0
- package/dist/client/system/processors/key.processor.js +27 -0
- package/dist/client/system/processors/localEvent.processor.d.ts +7 -0
- package/dist/client/system/processors/localEvent.processor.js +38 -0
- package/dist/client/system/processors/netEvent.processor.d.ts +7 -0
- package/dist/client/system/processors/netEvent.processor.js +38 -0
- package/dist/client/system/processors/nui.processor.d.ts +7 -0
- package/dist/client/system/processors/nui.processor.js +40 -0
- package/dist/client/system/processors/resourceLifecycle.processor.d.ts +9 -0
- package/dist/client/system/processors/resourceLifecycle.processor.js +69 -0
- package/dist/client/system/processors/tick.processor.d.ts +5 -0
- package/dist/client/system/processors/tick.processor.js +37 -0
- package/dist/client/system/processors.register.d.ts +1 -0
- package/dist/client/system/processors.register.js +27 -0
- package/dist/client/types/game-events.d.ts +126 -0
- package/dist/client/types/game-events.js +83 -0
- package/dist/client/types/index.d.ts +1 -0
- package/dist/client/types/index.js +17 -0
- package/dist/client/ui-bridge.d.ts +116 -0
- package/dist/client/ui-bridge.js +201 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +41 -0
- package/dist/server/bootstrap.d.ts +16 -0
- package/dist/server/bootstrap.js +57 -0
- package/dist/server/bus/core-event-bus.d.ts +6 -0
- package/dist/server/bus/core-event-bus.js +31 -0
- package/dist/server/configs/api.config.d.ts +71 -0
- package/dist/server/configs/api.config.js +81 -0
- package/dist/server/configs/config.base.d.ts +63 -0
- package/dist/server/configs/config.base.js +64 -0
- package/dist/server/configs/index.d.ts +2 -0
- package/dist/server/configs/index.js +18 -0
- package/dist/server/container.d.ts +2 -0
- package/dist/server/container.js +6 -0
- package/dist/server/controllers/chat.controller.d.ts +10 -0
- package/dist/server/controllers/chat.controller.js +50 -0
- package/dist/server/controllers/command.controller.d.ts +7 -0
- package/dist/server/controllers/command.controller.js +47 -0
- package/dist/server/controllers/session.controller.d.ts +9 -0
- package/dist/server/controllers/session.controller.js +70 -0
- package/dist/server/core.d.ts +1 -0
- package/dist/server/core.js +7 -0
- package/dist/server/database/adapters/oxmysql.adapter.d.ts +89 -0
- package/dist/server/database/adapters/oxmysql.adapter.js +149 -0
- package/dist/server/database/database.contract.d.ts +128 -0
- package/dist/server/database/database.contract.js +29 -0
- package/dist/server/database/database.service.d.ts +216 -0
- package/dist/server/database/database.service.js +301 -0
- package/dist/server/database/index.d.ts +53 -0
- package/dist/server/database/index.js +70 -0
- package/dist/server/database/types.d.ts +67 -0
- package/dist/server/database/types.js +7 -0
- package/dist/server/database.d.ts +7 -0
- package/dist/server/database.js +23 -0
- package/dist/server/decorators/bind.d.ts +2 -0
- package/dist/server/decorators/bind.js +15 -0
- package/dist/server/decorators/command.d.ts +49 -0
- package/dist/server/decorators/command.js +23 -0
- package/dist/server/decorators/controller.d.ts +25 -0
- package/dist/server/decorators/controller.js +36 -0
- package/dist/server/decorators/export.d.ts +39 -0
- package/dist/server/decorators/export.js +47 -0
- package/dist/server/decorators/guard.d.ts +56 -0
- package/dist/server/decorators/guard.js +82 -0
- package/dist/server/decorators/index.d.ts +10 -0
- package/dist/server/decorators/index.js +29 -0
- package/dist/server/decorators/onFiveMEvent.d.ts +6 -0
- package/dist/server/decorators/onFiveMEvent.js +14 -0
- package/dist/server/decorators/onFrameworkEvent.d.ts +22 -0
- package/dist/server/decorators/onFrameworkEvent.js +29 -0
- package/dist/server/decorators/onNet.d.ts +58 -0
- package/dist/server/decorators/onNet.js +57 -0
- package/dist/server/decorators/onTick.d.ts +32 -0
- package/dist/server/decorators/onTick.js +40 -0
- package/dist/server/decorators/public.d.ts +27 -0
- package/dist/server/decorators/public.js +36 -0
- package/dist/server/decorators/requiresState.d.ts +56 -0
- package/dist/server/decorators/requiresState.js +63 -0
- package/dist/server/decorators/throttle.d.ts +48 -0
- package/dist/server/decorators/throttle.js +63 -0
- package/dist/server/decorators/utils.d.ts +57 -0
- package/dist/server/decorators/utils.js +63 -0
- package/dist/server/entities/index.d.ts +1 -0
- package/dist/server/entities/index.js +17 -0
- package/dist/server/entities/player.d.ts +157 -0
- package/dist/server/entities/player.js +217 -0
- package/dist/server/error-handler.d.ts +2 -0
- package/dist/server/error-handler.js +43 -0
- package/dist/server/helpers/resolve-method.d.ts +5 -0
- package/dist/server/helpers/resolve-method.js +18 -0
- package/dist/server/index.d.ts +10 -0
- package/dist/server/index.js +31 -0
- package/dist/server/loaders/exports.loader.d.ts +0 -0
- package/dist/server/loaders/exports.loader.js +23 -0
- package/dist/server/loaders/playerSession.loader.d.ts +1 -0
- package/dist/server/loaders/playerSession.loader.js +51 -0
- package/dist/server/services/access-control.service.d.ts +56 -0
- package/dist/server/services/access-control.service.js +99 -0
- package/dist/server/services/chat.service.d.ts +7 -0
- package/dist/server/services/chat.service.js +31 -0
- package/dist/server/services/command.service.d.ts +15 -0
- package/dist/server/services/command.service.js +77 -0
- package/dist/server/services/config.service.d.ts +75 -0
- package/dist/server/services/config.service.js +116 -0
- package/dist/server/services/default/default-security.handler.d.ts +6 -0
- package/dist/server/services/default/default-security.handler.js +26 -0
- package/dist/server/services/http/http.service.d.ts +50 -0
- package/dist/server/services/http/http.service.js +126 -0
- package/dist/server/services/index.d.ts +10 -0
- package/dist/server/services/index.js +26 -0
- package/dist/server/services/parallel/index.d.ts +49 -0
- package/dist/server/services/parallel/index.js +67 -0
- package/dist/server/services/parallel/parallel-compute.service.d.ts +132 -0
- package/dist/server/services/parallel/parallel-compute.service.js +449 -0
- package/dist/server/services/parallel/types.d.ts +188 -0
- package/dist/server/services/parallel/types.js +7 -0
- package/dist/server/services/parallel/worker-pool.d.ts +83 -0
- package/dist/server/services/parallel/worker-pool.js +350 -0
- package/dist/server/services/parallel/worker.d.ts +19 -0
- package/dist/server/services/parallel/worker.js +49 -0
- package/dist/server/services/persistence.service.d.ts +59 -0
- package/dist/server/services/persistence.service.js +166 -0
- package/dist/server/services/player.service.d.ts +96 -0
- package/dist/server/services/player.service.js +132 -0
- package/dist/server/services/rate-limiter.service.d.ts +5 -0
- package/dist/server/services/rate-limiter.service.js +39 -0
- package/dist/server/services/registers.d.ts +1 -0
- package/dist/server/services/registers.js +18 -0
- package/dist/server/setup.d.ts +9 -0
- package/dist/server/setup.js +28 -0
- package/dist/server/system/metadata-server.keys.d.ts +10 -0
- package/dist/server/system/metadata-server.keys.js +13 -0
- package/dist/server/system/processors/command.processor.d.ts +9 -0
- package/dist/server/system/processors/command.processor.js +30 -0
- package/dist/server/system/processors/coreEvent.processor.d.ts +7 -0
- package/dist/server/system/processors/coreEvent.processor.js +41 -0
- package/dist/server/system/processors/export.processor.d.ts +7 -0
- package/dist/server/system/processors/export.processor.js +30 -0
- package/dist/server/system/processors/fivemEvent.processor.d.ts +7 -0
- package/dist/server/system/processors/fivemEvent.processor.js +40 -0
- package/dist/server/system/processors/netEvent.processor.d.ts +11 -0
- package/dist/server/system/processors/netEvent.processor.js +103 -0
- package/dist/server/system/processors/tick.processor.d.ts +5 -0
- package/dist/server/system/processors/tick.processor.js +36 -0
- package/dist/server/system/processors.register.d.ts +1 -0
- package/dist/server/system/processors.register.js +23 -0
- package/dist/server/system/schema-generator.d.ts +2 -0
- package/dist/server/system/schema-generator.js +34 -0
- package/dist/server/templates/admin/admin.controller-template.d.ts +12 -0
- package/dist/server/templates/admin/admin.controller-template.js +2 -0
- package/dist/server/templates/auth/auth-provider.contract.d.ts +58 -0
- package/dist/server/templates/auth/auth-provider.contract.js +23 -0
- package/dist/server/templates/index.d.ts +8 -0
- package/dist/server/templates/index.js +21 -0
- package/dist/server/templates/persistence/index.d.ts +30 -0
- package/dist/server/templates/persistence/index.js +34 -0
- package/dist/server/templates/persistence/player-persistence.contract.d.ts +86 -0
- package/dist/server/templates/persistence/player-persistence.contract.js +52 -0
- package/dist/server/templates/repository/index.d.ts +57 -0
- package/dist/server/templates/repository/index.js +61 -0
- package/dist/server/templates/repository/repository.contract.d.ts +224 -0
- package/dist/server/templates/repository/repository.contract.js +342 -0
- package/dist/server/templates/repository/repository.types.d.ts +51 -0
- package/dist/server/templates/repository/repository.types.js +7 -0
- package/dist/server/templates/security/permission.types.d.ts +32 -0
- package/dist/server/templates/security/permission.types.js +2 -0
- package/dist/server/templates/security/principal-provider.contract.d.ts +43 -0
- package/dist/server/templates/security/principal-provider.contract.js +19 -0
- package/dist/server/templates/security/security-handler.contract.d.ts +5 -0
- package/dist/server/templates/security/security-handler.contract.js +6 -0
- package/dist/server/types/core-events.d.ts +22 -0
- package/dist/server/types/core-events.js +2 -0
- package/dist/server/types/security.types.d.ts +7 -0
- package/dist/server/types/security.types.js +2 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +17 -0
- package/dist/shared/logger/core-logger.d.ts +35 -0
- package/dist/shared/logger/core-logger.js +52 -0
- package/dist/shared/logger/index.d.ts +11 -0
- package/dist/shared/logger/index.js +26 -0
- package/dist/shared/logger/logger.config.d.ts +47 -0
- package/dist/shared/logger/logger.config.js +33 -0
- package/dist/shared/logger/logger.service.d.ts +161 -0
- package/dist/shared/logger/logger.service.js +279 -0
- package/dist/shared/logger/logger.types.d.ts +85 -0
- package/dist/shared/logger/logger.types.js +74 -0
- package/dist/shared/logger/transports/buffered.transport.d.ts +88 -0
- package/dist/shared/logger/transports/buffered.transport.js +174 -0
- package/dist/shared/logger/transports/console.transport.d.ts +37 -0
- package/dist/shared/logger/transports/console.transport.js +134 -0
- package/dist/shared/logger/transports/index.d.ts +3 -0
- package/dist/shared/logger/transports/index.js +19 -0
- package/dist/shared/logger/transports/transport.interface.d.ts +40 -0
- package/dist/shared/logger/transports/transport.interface.js +2 -0
- package/dist/system/class-constructor.d.ts +1 -0
- package/dist/system/class-constructor.js +2 -0
- package/dist/system/decorator-processor.d.ts +4 -0
- package/dist/system/decorator-processor.js +2 -0
- package/dist/system/metadata.scanner.d.ts +7 -0
- package/dist/system/metadata.scanner.js +45 -0
- package/dist/utils/errors.d.ts +14 -0
- package/dist/utils/errors.js +25 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +20 -0
- package/dist/utils/result.d.ts +12 -0
- package/dist/utils/result.js +10 -0
- package/dist/utils/rgb.d.ts +5 -0
- package/dist/utils/rgb.js +2 -0
- package/dist/utils/vector3.d.ts +13 -0
- package/dist/utils/vector3.js +27 -0
- 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);
|