@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,156 @@
|
|
|
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.TextUIService = void 0;
|
|
10
|
+
const tsyringe_1 = require("tsyringe");
|
|
11
|
+
const DEFAULT_OPTIONS = {
|
|
12
|
+
font: 4,
|
|
13
|
+
scale: 0.35,
|
|
14
|
+
color: { r: 255, g: 255, b: 255, a: 255 },
|
|
15
|
+
alignment: 0,
|
|
16
|
+
dropShadow: true,
|
|
17
|
+
outline: false,
|
|
18
|
+
wrapWidth: 0,
|
|
19
|
+
};
|
|
20
|
+
const DEFAULT_3D_OPTIONS = Object.assign(Object.assign({}, DEFAULT_OPTIONS), { scale: 0.25, background: false, backgroundColor: { r: 0, g: 0, b: 0, a: 150 }, backgroundPadding: 0.002 });
|
|
21
|
+
/**
|
|
22
|
+
* Service for rendering text UI elements on screen and in 3D world.
|
|
23
|
+
*/
|
|
24
|
+
let TextUIService = class TextUIService {
|
|
25
|
+
constructor() {
|
|
26
|
+
this.activeTextUI = null;
|
|
27
|
+
this.tickHandle = null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Show persistent text UI at the bottom-right of the screen.
|
|
31
|
+
*
|
|
32
|
+
* @param text - The text to display
|
|
33
|
+
* @param options - Text options
|
|
34
|
+
*/
|
|
35
|
+
show(text, options = {}) {
|
|
36
|
+
this.activeTextUI = {
|
|
37
|
+
text,
|
|
38
|
+
options: Object.assign(Object.assign({}, DEFAULT_OPTIONS), options),
|
|
39
|
+
};
|
|
40
|
+
this.ensureTickRunning();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Hide the persistent text UI.
|
|
44
|
+
*/
|
|
45
|
+
hide() {
|
|
46
|
+
this.activeTextUI = null;
|
|
47
|
+
this.stopTick();
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Check if text UI is currently visible.
|
|
51
|
+
*/
|
|
52
|
+
isVisible() {
|
|
53
|
+
return this.activeTextUI !== null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Draw text on screen for one frame.
|
|
57
|
+
* Call this every frame for persistent display.
|
|
58
|
+
*
|
|
59
|
+
* @param text - The text to draw
|
|
60
|
+
* @param x - Screen X position (0.0-1.0)
|
|
61
|
+
* @param y - Screen Y position (0.0-1.0)
|
|
62
|
+
* @param options - Text options
|
|
63
|
+
*/
|
|
64
|
+
drawText(text, x, y, options = {}) {
|
|
65
|
+
const opts = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);
|
|
66
|
+
SetTextFont(opts.font);
|
|
67
|
+
SetTextScale(opts.scale, opts.scale);
|
|
68
|
+
SetTextColour(opts.color.r, opts.color.g, opts.color.b, opts.color.a);
|
|
69
|
+
SetTextJustification(opts.alignment);
|
|
70
|
+
if (opts.dropShadow) {
|
|
71
|
+
SetTextDropshadow(0, 0, 0, 0, 255);
|
|
72
|
+
SetTextDropShadow();
|
|
73
|
+
}
|
|
74
|
+
if (opts.outline) {
|
|
75
|
+
SetTextOutline();
|
|
76
|
+
}
|
|
77
|
+
if (opts.wrapWidth > 0) {
|
|
78
|
+
SetTextWrap(x, x + opts.wrapWidth);
|
|
79
|
+
}
|
|
80
|
+
if (opts.alignment === 2) {
|
|
81
|
+
SetTextRightJustify(true);
|
|
82
|
+
SetTextWrap(0.0, x);
|
|
83
|
+
}
|
|
84
|
+
BeginTextCommandDisplayText('STRING');
|
|
85
|
+
AddTextComponentString(text);
|
|
86
|
+
EndTextCommandDisplayText(x, y);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Draw 3D text in the game world.
|
|
90
|
+
*
|
|
91
|
+
* @param position - World position
|
|
92
|
+
* @param text - The text to draw
|
|
93
|
+
* @param options - Text options
|
|
94
|
+
*/
|
|
95
|
+
drawText3D(position, text, options = {}) {
|
|
96
|
+
const opts = Object.assign(Object.assign({}, DEFAULT_3D_OPTIONS), options);
|
|
97
|
+
const [onScreen, screenX, screenY] = World3dToScreen2d(position.x, position.y, position.z);
|
|
98
|
+
if (!onScreen)
|
|
99
|
+
return;
|
|
100
|
+
// Calculate distance-based scale
|
|
101
|
+
const camCoords = GetGameplayCamCoords();
|
|
102
|
+
const distance = GetDistanceBetweenCoords(camCoords[0], camCoords[1], camCoords[2], position.x, position.y, position.z, true);
|
|
103
|
+
const scale = opts.scale * (1 / distance) * 2;
|
|
104
|
+
const scaledScale = Math.max(scale, 0.15);
|
|
105
|
+
// Draw background if enabled
|
|
106
|
+
if (opts.background) {
|
|
107
|
+
const factor = text.length / 300;
|
|
108
|
+
DrawRect(screenX, screenY + opts.backgroundPadding, factor + opts.backgroundPadding * 2, 0.03 + opts.backgroundPadding * 2, opts.backgroundColor.r, opts.backgroundColor.g, opts.backgroundColor.b, opts.backgroundColor.a);
|
|
109
|
+
}
|
|
110
|
+
// Draw text
|
|
111
|
+
SetTextScale(scaledScale, scaledScale);
|
|
112
|
+
SetTextFont(opts.font);
|
|
113
|
+
SetTextColour(opts.color.r, opts.color.g, opts.color.b, opts.color.a);
|
|
114
|
+
SetTextCentre(true);
|
|
115
|
+
if (opts.dropShadow) {
|
|
116
|
+
SetTextDropshadow(0, 0, 0, 0, 255);
|
|
117
|
+
SetTextDropShadow();
|
|
118
|
+
}
|
|
119
|
+
if (opts.outline) {
|
|
120
|
+
SetTextOutline();
|
|
121
|
+
}
|
|
122
|
+
BeginTextCommandDisplayText('STRING');
|
|
123
|
+
AddTextComponentString(text);
|
|
124
|
+
EndTextCommandDisplayText(screenX, screenY);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get text width for layout calculations.
|
|
128
|
+
* Note: This is an approximation based on character count and scale.
|
|
129
|
+
*/
|
|
130
|
+
getTextWidth(text, _font, scale) {
|
|
131
|
+
// Approximate text width based on character count and scale
|
|
132
|
+
// Average character width at scale 1.0 is approximately 0.01
|
|
133
|
+
return text.length * 0.01 * scale;
|
|
134
|
+
}
|
|
135
|
+
ensureTickRunning() {
|
|
136
|
+
if (this.tickHandle !== null)
|
|
137
|
+
return;
|
|
138
|
+
this.tickHandle = setTick(() => {
|
|
139
|
+
if (!this.activeTextUI)
|
|
140
|
+
return;
|
|
141
|
+
const { text, options } = this.activeTextUI;
|
|
142
|
+
// Draw at bottom-right
|
|
143
|
+
this.drawText(text, 0.985, 0.93, Object.assign(Object.assign({}, options), { alignment: 2 }));
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
stopTick() {
|
|
147
|
+
if (this.tickHandle !== null) {
|
|
148
|
+
clearTick(this.tickHandle);
|
|
149
|
+
this.tickHandle = null;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
exports.TextUIService = TextUIService;
|
|
154
|
+
exports.TextUIService = TextUIService = __decorate([
|
|
155
|
+
(0, tsyringe_1.injectable)()
|
|
156
|
+
], TextUIService);
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import type { Vector3 } from '../../utils';
|
|
2
|
+
export interface VehicleSpawnOptions {
|
|
3
|
+
/** Model name or hash */
|
|
4
|
+
model: string;
|
|
5
|
+
/** Spawn position */
|
|
6
|
+
position: Vector3;
|
|
7
|
+
/** Heading/rotation */
|
|
8
|
+
heading?: number;
|
|
9
|
+
/** Whether to place on ground */
|
|
10
|
+
placeOnGround?: boolean;
|
|
11
|
+
/** Whether to warp the player into the vehicle */
|
|
12
|
+
warpIntoVehicle?: boolean;
|
|
13
|
+
/** Seat index to warp into (-1 = driver) */
|
|
14
|
+
seatIndex?: number;
|
|
15
|
+
/** Primary color */
|
|
16
|
+
primaryColor?: number;
|
|
17
|
+
/** Secondary color */
|
|
18
|
+
secondaryColor?: number;
|
|
19
|
+
/** License plate text */
|
|
20
|
+
plate?: string;
|
|
21
|
+
/** Network the vehicle */
|
|
22
|
+
networked?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface VehicleMods {
|
|
25
|
+
spoiler?: number;
|
|
26
|
+
frontBumper?: number;
|
|
27
|
+
rearBumper?: number;
|
|
28
|
+
sideSkirt?: number;
|
|
29
|
+
exhaust?: number;
|
|
30
|
+
frame?: number;
|
|
31
|
+
grille?: number;
|
|
32
|
+
hood?: number;
|
|
33
|
+
fender?: number;
|
|
34
|
+
rightFender?: number;
|
|
35
|
+
roof?: number;
|
|
36
|
+
engine?: number;
|
|
37
|
+
brakes?: number;
|
|
38
|
+
transmission?: number;
|
|
39
|
+
horns?: number;
|
|
40
|
+
suspension?: number;
|
|
41
|
+
armor?: number;
|
|
42
|
+
turbo?: boolean;
|
|
43
|
+
xenon?: boolean;
|
|
44
|
+
wheelType?: number;
|
|
45
|
+
wheels?: number;
|
|
46
|
+
windowTint?: number;
|
|
47
|
+
livery?: number;
|
|
48
|
+
plateStyle?: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Service for vehicle operations and management.
|
|
52
|
+
*/
|
|
53
|
+
export declare class VehicleService {
|
|
54
|
+
/**
|
|
55
|
+
* Spawn a vehicle at a position.
|
|
56
|
+
*
|
|
57
|
+
* @param options - Spawn options
|
|
58
|
+
* @returns The vehicle handle
|
|
59
|
+
*/
|
|
60
|
+
spawn(options: VehicleSpawnOptions): Promise<number>;
|
|
61
|
+
/**
|
|
62
|
+
* Delete a vehicle.
|
|
63
|
+
*
|
|
64
|
+
* @param vehicle - Vehicle handle
|
|
65
|
+
*/
|
|
66
|
+
delete(vehicle: number): void;
|
|
67
|
+
/**
|
|
68
|
+
* Delete the vehicle the player is currently in.
|
|
69
|
+
*/
|
|
70
|
+
deleteCurrentVehicle(): void;
|
|
71
|
+
/**
|
|
72
|
+
* Repair a vehicle completely.
|
|
73
|
+
*
|
|
74
|
+
* @param vehicle - Vehicle handle
|
|
75
|
+
*/
|
|
76
|
+
repair(vehicle: number): void;
|
|
77
|
+
/**
|
|
78
|
+
* Set vehicle fuel level.
|
|
79
|
+
*
|
|
80
|
+
* @param vehicle - Vehicle handle
|
|
81
|
+
* @param level - Fuel level (0.0-1.0)
|
|
82
|
+
*/
|
|
83
|
+
setFuel(vehicle: number, level: number): void;
|
|
84
|
+
/**
|
|
85
|
+
* Get vehicle fuel level.
|
|
86
|
+
*
|
|
87
|
+
* @param vehicle - Vehicle handle
|
|
88
|
+
* @returns Fuel level (0.0-1.0)
|
|
89
|
+
*/
|
|
90
|
+
getFuel(vehicle: number): number;
|
|
91
|
+
/**
|
|
92
|
+
* Get the closest vehicle to the player.
|
|
93
|
+
*
|
|
94
|
+
* @param radius - Search radius
|
|
95
|
+
* @returns Vehicle handle or null
|
|
96
|
+
*/
|
|
97
|
+
getClosest(radius?: number): number | null;
|
|
98
|
+
/**
|
|
99
|
+
* Check if the player is in a vehicle.
|
|
100
|
+
*/
|
|
101
|
+
isPlayerInVehicle(): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Get the vehicle the player is currently in.
|
|
104
|
+
*
|
|
105
|
+
* @returns Vehicle handle or null
|
|
106
|
+
*/
|
|
107
|
+
getCurrentVehicle(): number | null;
|
|
108
|
+
/**
|
|
109
|
+
* Get the last vehicle the player was in.
|
|
110
|
+
*
|
|
111
|
+
* @returns Vehicle handle or null
|
|
112
|
+
*/
|
|
113
|
+
getLastVehicle(): number | null;
|
|
114
|
+
/**
|
|
115
|
+
* Check if player is the driver of their current vehicle.
|
|
116
|
+
*/
|
|
117
|
+
isPlayerDriver(): boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Apply modifications to a vehicle.
|
|
120
|
+
*
|
|
121
|
+
* @param vehicle - Vehicle handle
|
|
122
|
+
* @param mods - Modifications to apply
|
|
123
|
+
*/
|
|
124
|
+
setMods(vehicle: number, mods: VehicleMods): void;
|
|
125
|
+
/**
|
|
126
|
+
* Set vehicle doors locked state.
|
|
127
|
+
*
|
|
128
|
+
* @param vehicle - Vehicle handle
|
|
129
|
+
* @param locked - Whether doors should be locked
|
|
130
|
+
*/
|
|
131
|
+
setDoorsLocked(vehicle: number, locked: boolean): void;
|
|
132
|
+
/**
|
|
133
|
+
* Set vehicle engine state.
|
|
134
|
+
*
|
|
135
|
+
* @param vehicle - Vehicle handle
|
|
136
|
+
* @param running - Whether engine should be running
|
|
137
|
+
* @param instant - Whether to start instantly
|
|
138
|
+
*/
|
|
139
|
+
setEngineRunning(vehicle: number, running: boolean, instant?: boolean): void;
|
|
140
|
+
/**
|
|
141
|
+
* Set vehicle invincibility.
|
|
142
|
+
*
|
|
143
|
+
* @param vehicle - Vehicle handle
|
|
144
|
+
* @param invincible - Whether vehicle should be invincible
|
|
145
|
+
*/
|
|
146
|
+
setInvincible(vehicle: number, invincible: boolean): void;
|
|
147
|
+
/**
|
|
148
|
+
* Get vehicle speed in km/h.
|
|
149
|
+
*
|
|
150
|
+
* @param vehicle - Vehicle handle
|
|
151
|
+
*/
|
|
152
|
+
getSpeed(vehicle: number): number;
|
|
153
|
+
/**
|
|
154
|
+
* Set vehicle heading/rotation.
|
|
155
|
+
*
|
|
156
|
+
* @param vehicle - Vehicle handle
|
|
157
|
+
* @param heading - Heading in degrees
|
|
158
|
+
*/
|
|
159
|
+
setHeading(vehicle: number, heading: number): void;
|
|
160
|
+
/**
|
|
161
|
+
* Teleport a vehicle to a position.
|
|
162
|
+
*
|
|
163
|
+
* @param vehicle - Vehicle handle
|
|
164
|
+
* @param position - Target position
|
|
165
|
+
* @param heading - Optional heading
|
|
166
|
+
*/
|
|
167
|
+
teleport(vehicle: number, position: Vector3, heading?: number): void;
|
|
168
|
+
}
|
|
@@ -0,0 +1,296 @@
|
|
|
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.VehicleService = void 0;
|
|
10
|
+
const tsyringe_1 = require("tsyringe");
|
|
11
|
+
/**
|
|
12
|
+
* Service for vehicle operations and management.
|
|
13
|
+
*/
|
|
14
|
+
let VehicleService = class VehicleService {
|
|
15
|
+
/**
|
|
16
|
+
* Spawn a vehicle at a position.
|
|
17
|
+
*
|
|
18
|
+
* @param options - Spawn options
|
|
19
|
+
* @returns The vehicle handle
|
|
20
|
+
*/
|
|
21
|
+
async spawn(options) {
|
|
22
|
+
const { model, position, heading = 0, placeOnGround = true, warpIntoVehicle = false, seatIndex = -1, primaryColor, secondaryColor, plate, networked = true, } = options;
|
|
23
|
+
const modelHash = GetHashKey(model);
|
|
24
|
+
// Load the model
|
|
25
|
+
if (!IsModelInCdimage(modelHash) || !IsModelAVehicle(modelHash)) {
|
|
26
|
+
throw new Error(`Invalid vehicle model: ${model}`);
|
|
27
|
+
}
|
|
28
|
+
RequestModel(modelHash);
|
|
29
|
+
while (!HasModelLoaded(modelHash)) {
|
|
30
|
+
await new Promise((r) => setTimeout(r, 0));
|
|
31
|
+
}
|
|
32
|
+
// Create the vehicle
|
|
33
|
+
const vehicle = CreateVehicle(modelHash, position.x, position.y, position.z, heading, networked, false);
|
|
34
|
+
SetModelAsNoLongerNeeded(modelHash);
|
|
35
|
+
if (!vehicle || vehicle === 0) {
|
|
36
|
+
throw new Error('Failed to create vehicle');
|
|
37
|
+
}
|
|
38
|
+
// Place on ground
|
|
39
|
+
if (placeOnGround) {
|
|
40
|
+
SetVehicleOnGroundProperly(vehicle);
|
|
41
|
+
}
|
|
42
|
+
// Set colors
|
|
43
|
+
if (primaryColor !== undefined || secondaryColor !== undefined) {
|
|
44
|
+
const [currentPrimary, currentSecondary] = GetVehicleColours(vehicle);
|
|
45
|
+
SetVehicleColours(vehicle, primaryColor !== null && primaryColor !== void 0 ? primaryColor : currentPrimary, secondaryColor !== null && secondaryColor !== void 0 ? secondaryColor : currentSecondary);
|
|
46
|
+
}
|
|
47
|
+
// Set plate
|
|
48
|
+
if (plate) {
|
|
49
|
+
SetVehicleNumberPlateText(vehicle, plate);
|
|
50
|
+
}
|
|
51
|
+
// Warp player into vehicle
|
|
52
|
+
if (warpIntoVehicle) {
|
|
53
|
+
TaskWarpPedIntoVehicle(PlayerPedId(), vehicle, seatIndex);
|
|
54
|
+
}
|
|
55
|
+
return vehicle;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Delete a vehicle.
|
|
59
|
+
*
|
|
60
|
+
* @param vehicle - Vehicle handle
|
|
61
|
+
*/
|
|
62
|
+
delete(vehicle) {
|
|
63
|
+
if (DoesEntityExist(vehicle)) {
|
|
64
|
+
SetEntityAsMissionEntity(vehicle, true, true);
|
|
65
|
+
DeleteVehicle(vehicle);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Delete the vehicle the player is currently in.
|
|
70
|
+
*/
|
|
71
|
+
deleteCurrentVehicle() {
|
|
72
|
+
const vehicle = this.getCurrentVehicle();
|
|
73
|
+
if (vehicle) {
|
|
74
|
+
TaskLeaveVehicle(PlayerPedId(), vehicle, 16);
|
|
75
|
+
setTimeout(() => this.delete(vehicle), 1000);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Repair a vehicle completely.
|
|
80
|
+
*
|
|
81
|
+
* @param vehicle - Vehicle handle
|
|
82
|
+
*/
|
|
83
|
+
repair(vehicle) {
|
|
84
|
+
if (!DoesEntityExist(vehicle))
|
|
85
|
+
return;
|
|
86
|
+
SetVehicleFixed(vehicle);
|
|
87
|
+
SetVehicleDeformationFixed(vehicle);
|
|
88
|
+
SetVehicleUndriveable(vehicle, false);
|
|
89
|
+
SetVehicleEngineOn(vehicle, true, true, false);
|
|
90
|
+
SetVehicleEngineHealth(vehicle, 1000.0);
|
|
91
|
+
SetVehiclePetrolTankHealth(vehicle, 1000.0);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Set vehicle fuel level.
|
|
95
|
+
*
|
|
96
|
+
* @param vehicle - Vehicle handle
|
|
97
|
+
* @param level - Fuel level (0.0-1.0)
|
|
98
|
+
*/
|
|
99
|
+
setFuel(vehicle, level) {
|
|
100
|
+
if (!DoesEntityExist(vehicle))
|
|
101
|
+
return;
|
|
102
|
+
SetVehicleFuelLevel(vehicle, Math.max(0, Math.min(100, level * 100)));
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get vehicle fuel level.
|
|
106
|
+
*
|
|
107
|
+
* @param vehicle - Vehicle handle
|
|
108
|
+
* @returns Fuel level (0.0-1.0)
|
|
109
|
+
*/
|
|
110
|
+
getFuel(vehicle) {
|
|
111
|
+
if (!DoesEntityExist(vehicle))
|
|
112
|
+
return 0;
|
|
113
|
+
return GetVehicleFuelLevel(vehicle) / 100;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get the closest vehicle to the player.
|
|
117
|
+
*
|
|
118
|
+
* @param radius - Search radius
|
|
119
|
+
* @returns Vehicle handle or null
|
|
120
|
+
*/
|
|
121
|
+
getClosest(radius = 10.0) {
|
|
122
|
+
const playerPed = PlayerPedId();
|
|
123
|
+
const [px, py, pz] = GetEntityCoords(playerPed, true);
|
|
124
|
+
const vehicle = GetClosestVehicle(px, py, pz, radius, 0, 71);
|
|
125
|
+
return vehicle !== 0 ? vehicle : null;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Check if the player is in a vehicle.
|
|
129
|
+
*/
|
|
130
|
+
isPlayerInVehicle() {
|
|
131
|
+
return IsPedInAnyVehicle(PlayerPedId(), false);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get the vehicle the player is currently in.
|
|
135
|
+
*
|
|
136
|
+
* @returns Vehicle handle or null
|
|
137
|
+
*/
|
|
138
|
+
getCurrentVehicle() {
|
|
139
|
+
const ped = PlayerPedId();
|
|
140
|
+
if (!IsPedInAnyVehicle(ped, false))
|
|
141
|
+
return null;
|
|
142
|
+
return GetVehiclePedIsIn(ped, false);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Get the last vehicle the player was in.
|
|
146
|
+
*
|
|
147
|
+
* @returns Vehicle handle or null
|
|
148
|
+
*/
|
|
149
|
+
getLastVehicle() {
|
|
150
|
+
const vehicle = GetVehiclePedIsIn(PlayerPedId(), true);
|
|
151
|
+
return vehicle !== 0 ? vehicle : null;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Check if player is the driver of their current vehicle.
|
|
155
|
+
*/
|
|
156
|
+
isPlayerDriver() {
|
|
157
|
+
const vehicle = this.getCurrentVehicle();
|
|
158
|
+
if (!vehicle)
|
|
159
|
+
return false;
|
|
160
|
+
return GetPedInVehicleSeat(vehicle, -1) === PlayerPedId();
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Apply modifications to a vehicle.
|
|
164
|
+
*
|
|
165
|
+
* @param vehicle - Vehicle handle
|
|
166
|
+
* @param mods - Modifications to apply
|
|
167
|
+
*/
|
|
168
|
+
setMods(vehicle, mods) {
|
|
169
|
+
if (!DoesEntityExist(vehicle))
|
|
170
|
+
return;
|
|
171
|
+
SetVehicleModKit(vehicle, 0);
|
|
172
|
+
if (mods.spoiler !== undefined)
|
|
173
|
+
SetVehicleMod(vehicle, 0, mods.spoiler, false);
|
|
174
|
+
if (mods.frontBumper !== undefined)
|
|
175
|
+
SetVehicleMod(vehicle, 1, mods.frontBumper, false);
|
|
176
|
+
if (mods.rearBumper !== undefined)
|
|
177
|
+
SetVehicleMod(vehicle, 2, mods.rearBumper, false);
|
|
178
|
+
if (mods.sideSkirt !== undefined)
|
|
179
|
+
SetVehicleMod(vehicle, 3, mods.sideSkirt, false);
|
|
180
|
+
if (mods.exhaust !== undefined)
|
|
181
|
+
SetVehicleMod(vehicle, 4, mods.exhaust, false);
|
|
182
|
+
if (mods.frame !== undefined)
|
|
183
|
+
SetVehicleMod(vehicle, 5, mods.frame, false);
|
|
184
|
+
if (mods.grille !== undefined)
|
|
185
|
+
SetVehicleMod(vehicle, 6, mods.grille, false);
|
|
186
|
+
if (mods.hood !== undefined)
|
|
187
|
+
SetVehicleMod(vehicle, 7, mods.hood, false);
|
|
188
|
+
if (mods.fender !== undefined)
|
|
189
|
+
SetVehicleMod(vehicle, 8, mods.fender, false);
|
|
190
|
+
if (mods.rightFender !== undefined)
|
|
191
|
+
SetVehicleMod(vehicle, 9, mods.rightFender, false);
|
|
192
|
+
if (mods.roof !== undefined)
|
|
193
|
+
SetVehicleMod(vehicle, 10, mods.roof, false);
|
|
194
|
+
if (mods.engine !== undefined)
|
|
195
|
+
SetVehicleMod(vehicle, 11, mods.engine, false);
|
|
196
|
+
if (mods.brakes !== undefined)
|
|
197
|
+
SetVehicleMod(vehicle, 12, mods.brakes, false);
|
|
198
|
+
if (mods.transmission !== undefined)
|
|
199
|
+
SetVehicleMod(vehicle, 13, mods.transmission, false);
|
|
200
|
+
if (mods.horns !== undefined)
|
|
201
|
+
SetVehicleMod(vehicle, 14, mods.horns, false);
|
|
202
|
+
if (mods.suspension !== undefined)
|
|
203
|
+
SetVehicleMod(vehicle, 15, mods.suspension, false);
|
|
204
|
+
if (mods.armor !== undefined)
|
|
205
|
+
SetVehicleMod(vehicle, 16, mods.armor, false);
|
|
206
|
+
if (mods.turbo !== undefined)
|
|
207
|
+
ToggleVehicleMod(vehicle, 18, mods.turbo);
|
|
208
|
+
if (mods.xenon !== undefined)
|
|
209
|
+
ToggleVehicleMod(vehicle, 22, mods.xenon);
|
|
210
|
+
if (mods.wheelType !== undefined)
|
|
211
|
+
SetVehicleWheelType(vehicle, mods.wheelType);
|
|
212
|
+
if (mods.wheels !== undefined)
|
|
213
|
+
SetVehicleMod(vehicle, 23, mods.wheels, false);
|
|
214
|
+
if (mods.windowTint !== undefined)
|
|
215
|
+
SetVehicleWindowTint(vehicle, mods.windowTint);
|
|
216
|
+
if (mods.livery !== undefined)
|
|
217
|
+
SetVehicleLivery(vehicle, mods.livery);
|
|
218
|
+
if (mods.plateStyle !== undefined)
|
|
219
|
+
SetVehicleNumberPlateTextIndex(vehicle, mods.plateStyle);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Set vehicle doors locked state.
|
|
223
|
+
*
|
|
224
|
+
* @param vehicle - Vehicle handle
|
|
225
|
+
* @param locked - Whether doors should be locked
|
|
226
|
+
*/
|
|
227
|
+
setDoorsLocked(vehicle, locked) {
|
|
228
|
+
if (!DoesEntityExist(vehicle))
|
|
229
|
+
return;
|
|
230
|
+
SetVehicleDoorsLocked(vehicle, locked ? 2 : 0);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Set vehicle engine state.
|
|
234
|
+
*
|
|
235
|
+
* @param vehicle - Vehicle handle
|
|
236
|
+
* @param running - Whether engine should be running
|
|
237
|
+
* @param instant - Whether to start instantly
|
|
238
|
+
*/
|
|
239
|
+
setEngineRunning(vehicle, running, instant = false) {
|
|
240
|
+
if (!DoesEntityExist(vehicle))
|
|
241
|
+
return;
|
|
242
|
+
SetVehicleEngineOn(vehicle, running, instant, true);
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Set vehicle invincibility.
|
|
246
|
+
*
|
|
247
|
+
* @param vehicle - Vehicle handle
|
|
248
|
+
* @param invincible - Whether vehicle should be invincible
|
|
249
|
+
*/
|
|
250
|
+
setInvincible(vehicle, invincible) {
|
|
251
|
+
if (!DoesEntityExist(vehicle))
|
|
252
|
+
return;
|
|
253
|
+
SetEntityInvincible(vehicle, invincible);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Get vehicle speed in km/h.
|
|
257
|
+
*
|
|
258
|
+
* @param vehicle - Vehicle handle
|
|
259
|
+
*/
|
|
260
|
+
getSpeed(vehicle) {
|
|
261
|
+
if (!DoesEntityExist(vehicle))
|
|
262
|
+
return 0;
|
|
263
|
+
return GetEntitySpeed(vehicle) * 3.6; // Convert m/s to km/h
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Set vehicle heading/rotation.
|
|
267
|
+
*
|
|
268
|
+
* @param vehicle - Vehicle handle
|
|
269
|
+
* @param heading - Heading in degrees
|
|
270
|
+
*/
|
|
271
|
+
setHeading(vehicle, heading) {
|
|
272
|
+
if (!DoesEntityExist(vehicle))
|
|
273
|
+
return;
|
|
274
|
+
SetEntityHeading(vehicle, heading);
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Teleport a vehicle to a position.
|
|
278
|
+
*
|
|
279
|
+
* @param vehicle - Vehicle handle
|
|
280
|
+
* @param position - Target position
|
|
281
|
+
* @param heading - Optional heading
|
|
282
|
+
*/
|
|
283
|
+
teleport(vehicle, position, heading) {
|
|
284
|
+
if (!DoesEntityExist(vehicle))
|
|
285
|
+
return;
|
|
286
|
+
SetEntityCoords(vehicle, position.x, position.y, position.z, false, false, false, true);
|
|
287
|
+
if (heading !== undefined) {
|
|
288
|
+
SetEntityHeading(vehicle, heading);
|
|
289
|
+
}
|
|
290
|
+
SetVehicleOnGroundProperly(vehicle);
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
exports.VehicleService = VehicleService;
|
|
294
|
+
exports.VehicleService = VehicleService = __decorate([
|
|
295
|
+
(0, tsyringe_1.injectable)()
|
|
296
|
+
], VehicleService);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const METADATA_KEYS: {
|
|
2
|
+
CONTROLLER: string;
|
|
3
|
+
KEY: string;
|
|
4
|
+
NUI: string;
|
|
5
|
+
NET_EVENT: string;
|
|
6
|
+
TICK: string;
|
|
7
|
+
LOCAL_EVENT: string;
|
|
8
|
+
INTERVAL: string;
|
|
9
|
+
EXPORT: string;
|
|
10
|
+
RESOURCE_START: string;
|
|
11
|
+
RESOURCE_STOP: string;
|
|
12
|
+
GAME_EVENT: string;
|
|
13
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.METADATA_KEYS = void 0;
|
|
4
|
+
exports.METADATA_KEYS = {
|
|
5
|
+
CONTROLLER: 'core:meta:controller',
|
|
6
|
+
KEY: 'core:meta:key',
|
|
7
|
+
NUI: 'core:meta:nui',
|
|
8
|
+
NET_EVENT: 'core:meta:onNet',
|
|
9
|
+
TICK: 'core:meta:tick',
|
|
10
|
+
LOCAL_EVENT: 'core:meta:localEvent',
|
|
11
|
+
INTERVAL: 'core:meta:interval',
|
|
12
|
+
EXPORT: 'core:meta:export',
|
|
13
|
+
RESOURCE_START: 'core:meta:resourceStart',
|
|
14
|
+
RESOURCE_STOP: 'core:meta:resourceStop',
|
|
15
|
+
GAME_EVENT: 'core:meta:gameEvent',
|
|
16
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { DecoratorProcessor } from '../../../system/decorator-processor';
|
|
2
|
+
export declare class ClientExportProcessor implements DecoratorProcessor {
|
|
3
|
+
readonly metadataKey: string;
|
|
4
|
+
process(target: any, methodName: string, metadata: {
|
|
5
|
+
exportName: string;
|
|
6
|
+
}): void;
|
|
7
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
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.ClientExportProcessor = void 0;
|
|
10
|
+
const tsyringe_1 = require("tsyringe");
|
|
11
|
+
const metadata_client_keys_1 = require("../metadata-client.keys");
|
|
12
|
+
const logger_1 = require("../../../shared/logger");
|
|
13
|
+
const clientExport = logger_1.coreLogger.child('Export', logger_1.LogDomain.CLIENT);
|
|
14
|
+
let ClientExportProcessor = class ClientExportProcessor {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.metadataKey = metadata_client_keys_1.METADATA_KEYS.EXPORT;
|
|
17
|
+
}
|
|
18
|
+
process(target, methodName, metadata) {
|
|
19
|
+
const handler = target[methodName].bind(target);
|
|
20
|
+
const handlerName = `${target.constructor.name}.${methodName}`;
|
|
21
|
+
globalThis.exports(metadata.exportName, async (...args) => {
|
|
22
|
+
try {
|
|
23
|
+
return await handler(...args);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
clientExport.error(`Export handler error`, {
|
|
27
|
+
export: metadata.exportName,
|
|
28
|
+
handler: handlerName,
|
|
29
|
+
}, error);
|
|
30
|
+
throw error;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
clientExport.debug(`Registered export: ${metadata.exportName} -> ${handlerName}`);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.ClientExportProcessor = ClientExportProcessor;
|
|
37
|
+
exports.ClientExportProcessor = ClientExportProcessor = __decorate([
|
|
38
|
+
(0, tsyringe_1.injectable)()
|
|
39
|
+
], ClientExportProcessor);
|