@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,165 @@
|
|
|
1
|
+
export interface StreamingRequest {
|
|
2
|
+
type: 'model' | 'animDict' | 'ptfx' | 'texture' | 'audio';
|
|
3
|
+
asset: string;
|
|
4
|
+
loaded: boolean;
|
|
5
|
+
hash?: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Service for managing asset streaming (models, animations, particles, etc.).
|
|
9
|
+
*/
|
|
10
|
+
export declare class StreamingService {
|
|
11
|
+
private loadedAssets;
|
|
12
|
+
/**
|
|
13
|
+
* Request and load a model.
|
|
14
|
+
*
|
|
15
|
+
* @param model - Model name or hash
|
|
16
|
+
* @param timeout - Maximum wait time in ms
|
|
17
|
+
* @returns Whether the model was loaded successfully
|
|
18
|
+
*/
|
|
19
|
+
requestModel(model: string | number, timeout?: number): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Check if a model is loaded.
|
|
22
|
+
*
|
|
23
|
+
* @param model - Model name or hash
|
|
24
|
+
*/
|
|
25
|
+
isModelLoaded(model: string | number): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Release a loaded model.
|
|
28
|
+
*
|
|
29
|
+
* @param model - Model name or hash
|
|
30
|
+
*/
|
|
31
|
+
releaseModel(model: string | number): void;
|
|
32
|
+
/**
|
|
33
|
+
* Check if a model is valid and exists in the game files.
|
|
34
|
+
*
|
|
35
|
+
* @param model - Model name or hash
|
|
36
|
+
*/
|
|
37
|
+
isModelValid(model: string | number): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Check if a model is a vehicle.
|
|
40
|
+
*
|
|
41
|
+
* @param model - Model name or hash
|
|
42
|
+
*/
|
|
43
|
+
isModelVehicle(model: string | number): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Check if a model is a ped.
|
|
46
|
+
*
|
|
47
|
+
* @param model - Model name or hash
|
|
48
|
+
*/
|
|
49
|
+
isModelPed(model: string | number): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Request and load an animation dictionary.
|
|
52
|
+
*
|
|
53
|
+
* @param dict - Animation dictionary name
|
|
54
|
+
* @param timeout - Maximum wait time in ms
|
|
55
|
+
* @returns Whether the dictionary was loaded successfully
|
|
56
|
+
*/
|
|
57
|
+
requestAnimDict(dict: string, timeout?: number): Promise<boolean>;
|
|
58
|
+
/**
|
|
59
|
+
* Check if an animation dictionary is loaded.
|
|
60
|
+
*
|
|
61
|
+
* @param dict - Animation dictionary name
|
|
62
|
+
*/
|
|
63
|
+
isAnimDictLoaded(dict: string): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Release a loaded animation dictionary.
|
|
66
|
+
*
|
|
67
|
+
* @param dict - Animation dictionary name
|
|
68
|
+
*/
|
|
69
|
+
releaseAnimDict(dict: string): void;
|
|
70
|
+
/**
|
|
71
|
+
* Request and load a particle effect asset.
|
|
72
|
+
*
|
|
73
|
+
* @param asset - PTFX asset name
|
|
74
|
+
* @param timeout - Maximum wait time in ms
|
|
75
|
+
* @returns Whether the asset was loaded successfully
|
|
76
|
+
*/
|
|
77
|
+
requestPtfxAsset(asset: string, timeout?: number): Promise<boolean>;
|
|
78
|
+
/**
|
|
79
|
+
* Check if a PTFX asset is loaded.
|
|
80
|
+
*
|
|
81
|
+
* @param asset - PTFX asset name
|
|
82
|
+
*/
|
|
83
|
+
isPtfxAssetLoaded(asset: string): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Release a loaded PTFX asset.
|
|
86
|
+
*
|
|
87
|
+
* @param asset - PTFX asset name
|
|
88
|
+
*/
|
|
89
|
+
releasePtfxAsset(asset: string): void;
|
|
90
|
+
/**
|
|
91
|
+
* Start a particle effect at a position.
|
|
92
|
+
*
|
|
93
|
+
* @param asset - PTFX asset name
|
|
94
|
+
* @param effectName - Effect name within the asset
|
|
95
|
+
* @param position - World position
|
|
96
|
+
* @param rotation - Rotation
|
|
97
|
+
* @param scale - Scale
|
|
98
|
+
* @param looped - Whether to loop
|
|
99
|
+
* @returns The particle effect handle
|
|
100
|
+
*/
|
|
101
|
+
startParticleEffect(asset: string, effectName: string, position: {
|
|
102
|
+
x: number;
|
|
103
|
+
y: number;
|
|
104
|
+
z: number;
|
|
105
|
+
}, rotation?: {
|
|
106
|
+
x: number;
|
|
107
|
+
y: number;
|
|
108
|
+
z: number;
|
|
109
|
+
}, scale?: number, looped?: boolean): Promise<number>;
|
|
110
|
+
/**
|
|
111
|
+
* Stop a looped particle effect.
|
|
112
|
+
*
|
|
113
|
+
* @param handle - Particle effect handle
|
|
114
|
+
*/
|
|
115
|
+
stopParticleEffect(handle: number): void;
|
|
116
|
+
/**
|
|
117
|
+
* Request and load a texture dictionary.
|
|
118
|
+
*
|
|
119
|
+
* @param dict - Texture dictionary name
|
|
120
|
+
* @param timeout - Maximum wait time in ms
|
|
121
|
+
* @returns Whether the dictionary was loaded successfully
|
|
122
|
+
*/
|
|
123
|
+
requestTextureDict(dict: string, timeout?: number): Promise<boolean>;
|
|
124
|
+
/**
|
|
125
|
+
* Check if a texture dictionary is loaded.
|
|
126
|
+
*
|
|
127
|
+
* @param dict - Texture dictionary name
|
|
128
|
+
*/
|
|
129
|
+
isTextureDictLoaded(dict: string): boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Release a loaded texture dictionary.
|
|
132
|
+
*
|
|
133
|
+
* @param dict - Texture dictionary name
|
|
134
|
+
*/
|
|
135
|
+
releaseTextureDict(dict: string): void;
|
|
136
|
+
/**
|
|
137
|
+
* Request and load a script audio bank.
|
|
138
|
+
*
|
|
139
|
+
* @param audioBank - Audio bank name
|
|
140
|
+
* @param networked - Whether the audio should be networked
|
|
141
|
+
* @param timeout - Maximum wait time in ms
|
|
142
|
+
* @returns Whether the audio bank was loaded successfully
|
|
143
|
+
*/
|
|
144
|
+
requestAudioBank(audioBank: string, networked?: boolean, _timeout?: number): Promise<boolean>;
|
|
145
|
+
/**
|
|
146
|
+
* Release a loaded audio bank.
|
|
147
|
+
*
|
|
148
|
+
* @param audioBank - Audio bank name
|
|
149
|
+
*/
|
|
150
|
+
releaseAudioBank(audioBank: string): void;
|
|
151
|
+
/**
|
|
152
|
+
* Get all currently loaded assets.
|
|
153
|
+
*/
|
|
154
|
+
getLoadedAssets(): StreamingRequest[];
|
|
155
|
+
/**
|
|
156
|
+
* Release all loaded assets.
|
|
157
|
+
*/
|
|
158
|
+
releaseAll(): void;
|
|
159
|
+
/**
|
|
160
|
+
* Get hash key for a string.
|
|
161
|
+
*
|
|
162
|
+
* @param str - String to hash
|
|
163
|
+
*/
|
|
164
|
+
getHash(str: string): number;
|
|
165
|
+
}
|
|
@@ -0,0 +1,341 @@
|
|
|
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.StreamingService = void 0;
|
|
10
|
+
const tsyringe_1 = require("tsyringe");
|
|
11
|
+
/**
|
|
12
|
+
* Service for managing asset streaming (models, animations, particles, etc.).
|
|
13
|
+
*/
|
|
14
|
+
let StreamingService = class StreamingService {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.loadedAssets = new Map();
|
|
17
|
+
}
|
|
18
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
19
|
+
// Model Loading
|
|
20
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
21
|
+
/**
|
|
22
|
+
* Request and load a model.
|
|
23
|
+
*
|
|
24
|
+
* @param model - Model name or hash
|
|
25
|
+
* @param timeout - Maximum wait time in ms
|
|
26
|
+
* @returns Whether the model was loaded successfully
|
|
27
|
+
*/
|
|
28
|
+
async requestModel(model, timeout = 10000) {
|
|
29
|
+
var _a;
|
|
30
|
+
const hash = typeof model === 'string' ? GetHashKey(model) : model;
|
|
31
|
+
const key = `model:${hash}`;
|
|
32
|
+
// Already loaded
|
|
33
|
+
if ((_a = this.loadedAssets.get(key)) === null || _a === void 0 ? void 0 : _a.loaded) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
// Check if valid
|
|
37
|
+
if (!IsModelInCdimage(hash) || !IsModelValid(hash)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
RequestModel(hash);
|
|
41
|
+
const startTime = GetGameTimer();
|
|
42
|
+
while (!HasModelLoaded(hash)) {
|
|
43
|
+
if (GetGameTimer() - startTime > timeout) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
await new Promise((r) => setTimeout(r, 0));
|
|
47
|
+
}
|
|
48
|
+
this.loadedAssets.set(key, { type: 'model', asset: String(model), loaded: true, hash });
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Check if a model is loaded.
|
|
53
|
+
*
|
|
54
|
+
* @param model - Model name or hash
|
|
55
|
+
*/
|
|
56
|
+
isModelLoaded(model) {
|
|
57
|
+
const hash = typeof model === 'string' ? GetHashKey(model) : model;
|
|
58
|
+
return HasModelLoaded(hash);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Release a loaded model.
|
|
62
|
+
*
|
|
63
|
+
* @param model - Model name or hash
|
|
64
|
+
*/
|
|
65
|
+
releaseModel(model) {
|
|
66
|
+
const hash = typeof model === 'string' ? GetHashKey(model) : model;
|
|
67
|
+
SetModelAsNoLongerNeeded(hash);
|
|
68
|
+
this.loadedAssets.delete(`model:${hash}`);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Check if a model is valid and exists in the game files.
|
|
72
|
+
*
|
|
73
|
+
* @param model - Model name or hash
|
|
74
|
+
*/
|
|
75
|
+
isModelValid(model) {
|
|
76
|
+
const hash = typeof model === 'string' ? GetHashKey(model) : model;
|
|
77
|
+
return IsModelInCdimage(hash) && IsModelValid(hash);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Check if a model is a vehicle.
|
|
81
|
+
*
|
|
82
|
+
* @param model - Model name or hash
|
|
83
|
+
*/
|
|
84
|
+
isModelVehicle(model) {
|
|
85
|
+
const hash = typeof model === 'string' ? GetHashKey(model) : model;
|
|
86
|
+
return IsModelAVehicle(hash);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Check if a model is a ped.
|
|
90
|
+
*
|
|
91
|
+
* @param model - Model name or hash
|
|
92
|
+
*/
|
|
93
|
+
isModelPed(model) {
|
|
94
|
+
const hash = typeof model === 'string' ? GetHashKey(model) : model;
|
|
95
|
+
return IsModelAPed(hash);
|
|
96
|
+
}
|
|
97
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
98
|
+
// Animation Dictionary Loading
|
|
99
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
100
|
+
/**
|
|
101
|
+
* Request and load an animation dictionary.
|
|
102
|
+
*
|
|
103
|
+
* @param dict - Animation dictionary name
|
|
104
|
+
* @param timeout - Maximum wait time in ms
|
|
105
|
+
* @returns Whether the dictionary was loaded successfully
|
|
106
|
+
*/
|
|
107
|
+
async requestAnimDict(dict, timeout = 10000) {
|
|
108
|
+
var _a;
|
|
109
|
+
const key = `anim:${dict}`;
|
|
110
|
+
// Already loaded
|
|
111
|
+
if ((_a = this.loadedAssets.get(key)) === null || _a === void 0 ? void 0 : _a.loaded) {
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
RequestAnimDict(dict);
|
|
115
|
+
const startTime = GetGameTimer();
|
|
116
|
+
while (!HasAnimDictLoaded(dict)) {
|
|
117
|
+
if (GetGameTimer() - startTime > timeout) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
await new Promise((r) => setTimeout(r, 0));
|
|
121
|
+
}
|
|
122
|
+
this.loadedAssets.set(key, { type: 'animDict', asset: dict, loaded: true });
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Check if an animation dictionary is loaded.
|
|
127
|
+
*
|
|
128
|
+
* @param dict - Animation dictionary name
|
|
129
|
+
*/
|
|
130
|
+
isAnimDictLoaded(dict) {
|
|
131
|
+
return HasAnimDictLoaded(dict);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Release a loaded animation dictionary.
|
|
135
|
+
*
|
|
136
|
+
* @param dict - Animation dictionary name
|
|
137
|
+
*/
|
|
138
|
+
releaseAnimDict(dict) {
|
|
139
|
+
RemoveAnimDict(dict);
|
|
140
|
+
this.loadedAssets.delete(`anim:${dict}`);
|
|
141
|
+
}
|
|
142
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
143
|
+
// Particle Effects (PTFX) Loading
|
|
144
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
145
|
+
/**
|
|
146
|
+
* Request and load a particle effect asset.
|
|
147
|
+
*
|
|
148
|
+
* @param asset - PTFX asset name
|
|
149
|
+
* @param timeout - Maximum wait time in ms
|
|
150
|
+
* @returns Whether the asset was loaded successfully
|
|
151
|
+
*/
|
|
152
|
+
async requestPtfxAsset(asset, timeout = 10000) {
|
|
153
|
+
var _a;
|
|
154
|
+
const key = `ptfx:${asset}`;
|
|
155
|
+
// Already loaded
|
|
156
|
+
if ((_a = this.loadedAssets.get(key)) === null || _a === void 0 ? void 0 : _a.loaded) {
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
RequestNamedPtfxAsset(asset);
|
|
160
|
+
const startTime = GetGameTimer();
|
|
161
|
+
while (!HasNamedPtfxAssetLoaded(asset)) {
|
|
162
|
+
if (GetGameTimer() - startTime > timeout) {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
await new Promise((r) => setTimeout(r, 0));
|
|
166
|
+
}
|
|
167
|
+
this.loadedAssets.set(key, { type: 'ptfx', asset, loaded: true });
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Check if a PTFX asset is loaded.
|
|
172
|
+
*
|
|
173
|
+
* @param asset - PTFX asset name
|
|
174
|
+
*/
|
|
175
|
+
isPtfxAssetLoaded(asset) {
|
|
176
|
+
return HasNamedPtfxAssetLoaded(asset);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Release a loaded PTFX asset.
|
|
180
|
+
*
|
|
181
|
+
* @param asset - PTFX asset name
|
|
182
|
+
*/
|
|
183
|
+
releasePtfxAsset(asset) {
|
|
184
|
+
RemoveNamedPtfxAsset(asset);
|
|
185
|
+
this.loadedAssets.delete(`ptfx:${asset}`);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Start a particle effect at a position.
|
|
189
|
+
*
|
|
190
|
+
* @param asset - PTFX asset name
|
|
191
|
+
* @param effectName - Effect name within the asset
|
|
192
|
+
* @param position - World position
|
|
193
|
+
* @param rotation - Rotation
|
|
194
|
+
* @param scale - Scale
|
|
195
|
+
* @param looped - Whether to loop
|
|
196
|
+
* @returns The particle effect handle
|
|
197
|
+
*/
|
|
198
|
+
async startParticleEffect(asset, effectName, position, rotation = { x: 0, y: 0, z: 0 }, scale = 1.0, looped = false) {
|
|
199
|
+
await this.requestPtfxAsset(asset);
|
|
200
|
+
UseParticleFxAssetNextCall(asset);
|
|
201
|
+
if (looped) {
|
|
202
|
+
return StartParticleFxLoopedAtCoord(effectName, position.x, position.y, position.z, rotation.x, rotation.y, rotation.z, scale, false, false, false, false);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
return StartParticleFxNonLoopedAtCoord(effectName, position.x, position.y, position.z, rotation.x, rotation.y, rotation.z, scale, false, false, false);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Stop a looped particle effect.
|
|
210
|
+
*
|
|
211
|
+
* @param handle - Particle effect handle
|
|
212
|
+
*/
|
|
213
|
+
stopParticleEffect(handle) {
|
|
214
|
+
StopParticleFxLooped(handle, false);
|
|
215
|
+
}
|
|
216
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
217
|
+
// Texture Dictionary Loading
|
|
218
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
219
|
+
/**
|
|
220
|
+
* Request and load a texture dictionary.
|
|
221
|
+
*
|
|
222
|
+
* @param dict - Texture dictionary name
|
|
223
|
+
* @param timeout - Maximum wait time in ms
|
|
224
|
+
* @returns Whether the dictionary was loaded successfully
|
|
225
|
+
*/
|
|
226
|
+
async requestTextureDict(dict, timeout = 10000) {
|
|
227
|
+
var _a;
|
|
228
|
+
const key = `texture:${dict}`;
|
|
229
|
+
// Already loaded
|
|
230
|
+
if ((_a = this.loadedAssets.get(key)) === null || _a === void 0 ? void 0 : _a.loaded) {
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
RequestStreamedTextureDict(dict, true);
|
|
234
|
+
const startTime = GetGameTimer();
|
|
235
|
+
while (!HasStreamedTextureDictLoaded(dict)) {
|
|
236
|
+
if (GetGameTimer() - startTime > timeout) {
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
await new Promise((r) => setTimeout(r, 0));
|
|
240
|
+
}
|
|
241
|
+
this.loadedAssets.set(key, { type: 'texture', asset: dict, loaded: true });
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Check if a texture dictionary is loaded.
|
|
246
|
+
*
|
|
247
|
+
* @param dict - Texture dictionary name
|
|
248
|
+
*/
|
|
249
|
+
isTextureDictLoaded(dict) {
|
|
250
|
+
return HasStreamedTextureDictLoaded(dict);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Release a loaded texture dictionary.
|
|
254
|
+
*
|
|
255
|
+
* @param dict - Texture dictionary name
|
|
256
|
+
*/
|
|
257
|
+
releaseTextureDict(dict) {
|
|
258
|
+
SetStreamedTextureDictAsNoLongerNeeded(dict);
|
|
259
|
+
this.loadedAssets.delete(`texture:${dict}`);
|
|
260
|
+
}
|
|
261
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
262
|
+
// Audio Loading
|
|
263
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
264
|
+
/**
|
|
265
|
+
* Request and load a script audio bank.
|
|
266
|
+
*
|
|
267
|
+
* @param audioBank - Audio bank name
|
|
268
|
+
* @param networked - Whether the audio should be networked
|
|
269
|
+
* @param timeout - Maximum wait time in ms
|
|
270
|
+
* @returns Whether the audio bank was loaded successfully
|
|
271
|
+
*/
|
|
272
|
+
async requestAudioBank(audioBank, networked = false, _timeout = 10000) {
|
|
273
|
+
var _a;
|
|
274
|
+
const key = `audio:${audioBank}`;
|
|
275
|
+
// Already loaded
|
|
276
|
+
if ((_a = this.loadedAssets.get(key)) === null || _a === void 0 ? void 0 : _a.loaded) {
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
const success = RequestScriptAudioBank(audioBank, networked);
|
|
280
|
+
if (!success)
|
|
281
|
+
return false;
|
|
282
|
+
this.loadedAssets.set(key, { type: 'audio', asset: audioBank, loaded: true });
|
|
283
|
+
return true;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Release a loaded audio bank.
|
|
287
|
+
*
|
|
288
|
+
* @param audioBank - Audio bank name
|
|
289
|
+
*/
|
|
290
|
+
releaseAudioBank(audioBank) {
|
|
291
|
+
ReleaseScriptAudioBank();
|
|
292
|
+
this.loadedAssets.delete(`audio:${audioBank}`);
|
|
293
|
+
}
|
|
294
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
295
|
+
// Utility Methods
|
|
296
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
297
|
+
/**
|
|
298
|
+
* Get all currently loaded assets.
|
|
299
|
+
*/
|
|
300
|
+
getLoadedAssets() {
|
|
301
|
+
return Array.from(this.loadedAssets.values());
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Release all loaded assets.
|
|
305
|
+
*/
|
|
306
|
+
releaseAll() {
|
|
307
|
+
for (const asset of this.loadedAssets.values()) {
|
|
308
|
+
switch (asset.type) {
|
|
309
|
+
case 'model':
|
|
310
|
+
if (asset.hash)
|
|
311
|
+
SetModelAsNoLongerNeeded(asset.hash);
|
|
312
|
+
break;
|
|
313
|
+
case 'animDict':
|
|
314
|
+
RemoveAnimDict(asset.asset);
|
|
315
|
+
break;
|
|
316
|
+
case 'ptfx':
|
|
317
|
+
RemoveNamedPtfxAsset(asset.asset);
|
|
318
|
+
break;
|
|
319
|
+
case 'texture':
|
|
320
|
+
SetStreamedTextureDictAsNoLongerNeeded(asset.asset);
|
|
321
|
+
break;
|
|
322
|
+
case 'audio':
|
|
323
|
+
ReleaseScriptAudioBank();
|
|
324
|
+
break;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
this.loadedAssets.clear();
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Get hash key for a string.
|
|
331
|
+
*
|
|
332
|
+
* @param str - String to hash
|
|
333
|
+
*/
|
|
334
|
+
getHash(str) {
|
|
335
|
+
return GetHashKey(str);
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
exports.StreamingService = StreamingService;
|
|
339
|
+
exports.StreamingService = StreamingService = __decorate([
|
|
340
|
+
(0, tsyringe_1.injectable)()
|
|
341
|
+
], StreamingService);
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { Vector3 } from '../../utils';
|
|
2
|
+
export interface TextUIOptions {
|
|
3
|
+
/** Font (0-8) */
|
|
4
|
+
font?: number;
|
|
5
|
+
/** Scale (0.0-1.0+) */
|
|
6
|
+
scale?: number;
|
|
7
|
+
/** Color */
|
|
8
|
+
color?: {
|
|
9
|
+
r: number;
|
|
10
|
+
g: number;
|
|
11
|
+
b: number;
|
|
12
|
+
a: number;
|
|
13
|
+
};
|
|
14
|
+
/** Text alignment (0=center, 1=left, 2=right) */
|
|
15
|
+
alignment?: number;
|
|
16
|
+
/** Drop shadow */
|
|
17
|
+
dropShadow?: boolean;
|
|
18
|
+
/** Text outline */
|
|
19
|
+
outline?: boolean;
|
|
20
|
+
/** Word wrap width (0 = no wrap) */
|
|
21
|
+
wrapWidth?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface Text3DOptions extends TextUIOptions {
|
|
24
|
+
/** Whether to draw a background behind text */
|
|
25
|
+
background?: boolean;
|
|
26
|
+
/** Background color */
|
|
27
|
+
backgroundColor?: {
|
|
28
|
+
r: number;
|
|
29
|
+
g: number;
|
|
30
|
+
b: number;
|
|
31
|
+
a: number;
|
|
32
|
+
};
|
|
33
|
+
/** Background padding */
|
|
34
|
+
backgroundPadding?: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Service for rendering text UI elements on screen and in 3D world.
|
|
38
|
+
*/
|
|
39
|
+
export declare class TextUIService {
|
|
40
|
+
private activeTextUI;
|
|
41
|
+
private tickHandle;
|
|
42
|
+
/**
|
|
43
|
+
* Show persistent text UI at the bottom-right of the screen.
|
|
44
|
+
*
|
|
45
|
+
* @param text - The text to display
|
|
46
|
+
* @param options - Text options
|
|
47
|
+
*/
|
|
48
|
+
show(text: string, options?: TextUIOptions): void;
|
|
49
|
+
/**
|
|
50
|
+
* Hide the persistent text UI.
|
|
51
|
+
*/
|
|
52
|
+
hide(): void;
|
|
53
|
+
/**
|
|
54
|
+
* Check if text UI is currently visible.
|
|
55
|
+
*/
|
|
56
|
+
isVisible(): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Draw text on screen for one frame.
|
|
59
|
+
* Call this every frame for persistent display.
|
|
60
|
+
*
|
|
61
|
+
* @param text - The text to draw
|
|
62
|
+
* @param x - Screen X position (0.0-1.0)
|
|
63
|
+
* @param y - Screen Y position (0.0-1.0)
|
|
64
|
+
* @param options - Text options
|
|
65
|
+
*/
|
|
66
|
+
drawText(text: string, x: number, y: number, options?: TextUIOptions): void;
|
|
67
|
+
/**
|
|
68
|
+
* Draw 3D text in the game world.
|
|
69
|
+
*
|
|
70
|
+
* @param position - World position
|
|
71
|
+
* @param text - The text to draw
|
|
72
|
+
* @param options - Text options
|
|
73
|
+
*/
|
|
74
|
+
drawText3D(position: Vector3, text: string, options?: Text3DOptions): void;
|
|
75
|
+
/**
|
|
76
|
+
* Get text width for layout calculations.
|
|
77
|
+
* Note: This is an approximation based on character count and scale.
|
|
78
|
+
*/
|
|
79
|
+
getTextWidth(text: string, _font: number, scale: number): number;
|
|
80
|
+
private ensureTickRunning;
|
|
81
|
+
private stopTick;
|
|
82
|
+
}
|