@open-core/framework 1.0.5-beta.2 → 1.0.6
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/README.md +2 -8
- package/dist/adapters/contracts/IEngineEvents.d.ts +3 -3
- package/dist/adapters/contracts/IExports.d.ts +2 -2
- package/dist/adapters/contracts/client/IClientLocalPlayerBridge.d.ts +21 -0
- package/dist/adapters/contracts/client/IClientLocalPlayerBridge.js +6 -0
- package/dist/adapters/contracts/client/IClientRuntimeBridge.d.ts +5 -5
- package/dist/adapters/contracts/client/camera/IClientCameraPort.d.ts +107 -0
- package/dist/adapters/contracts/client/camera/IClientCameraPort.js +8 -0
- package/dist/adapters/contracts/client/camera/index.d.ts +1 -0
- package/dist/adapters/contracts/client/camera/index.js +1 -0
- package/dist/adapters/contracts/client/index.d.ts +4 -0
- package/dist/adapters/contracts/client/index.js +4 -0
- package/dist/adapters/contracts/client/ped/IClientPedPort.d.ts +62 -0
- package/dist/adapters/contracts/client/ped/IClientPedPort.js +5 -0
- package/dist/adapters/contracts/client/ped/index.d.ts +1 -0
- package/dist/adapters/contracts/client/ped/index.js +1 -0
- package/dist/adapters/contracts/client/progress/IClientProgressPort.d.ts +53 -0
- package/dist/adapters/contracts/client/progress/IClientProgressPort.js +8 -0
- package/dist/adapters/contracts/client/progress/index.d.ts +1 -0
- package/dist/adapters/contracts/client/progress/index.js +1 -0
- package/dist/adapters/contracts/client/spawn/IClientSpawnBridge.d.ts +5 -6
- package/dist/adapters/contracts/client/spawn/IClientSpawnBridge.js +5 -1
- package/dist/adapters/contracts/client/spawn/IClientSpawnPort.d.ts +19 -0
- package/dist/adapters/contracts/client/spawn/IClientSpawnPort.js +2 -0
- package/dist/adapters/contracts/client/spawn/index.d.ts +2 -0
- package/dist/adapters/contracts/client/spawn/index.js +2 -0
- package/dist/adapters/contracts/client/spawn/types.d.ts +3 -0
- package/dist/adapters/contracts/client/ui/webview/IClientWebViewBridge.d.ts +1 -0
- package/dist/adapters/contracts/client/ui/webview/types.d.ts +2 -0
- package/dist/adapters/contracts/client/vehicle/IClientVehiclePort.d.ts +166 -0
- package/dist/adapters/contracts/client/vehicle/IClientVehiclePort.js +8 -0
- package/dist/adapters/contracts/client/vehicle/index.d.ts +1 -0
- package/dist/adapters/contracts/client/vehicle/index.js +1 -0
- package/dist/adapters/contracts/transport/events.api.d.ts +3 -3
- package/dist/adapters/contracts/transport/index.d.ts +1 -0
- package/dist/adapters/contracts/transport/index.js +1 -0
- package/dist/adapters/contracts/transport/rpc-error.d.ts +17 -0
- package/dist/adapters/contracts/transport/rpc-error.js +28 -0
- package/dist/adapters/contracts/transport/rpc.api.d.ts +3 -3
- package/dist/adapters/node/transport/node.events.d.ts +4 -4
- package/dist/adapters/node/transport/node.rpc.d.ts +3 -3
- package/dist/adapters/node/transport/node.rpc.js +1 -1
- package/dist/contracts.d.ts +1 -0
- package/dist/contracts.js +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/kernel/logger/client-log-console.js +8 -8
- package/dist/kernel/logger/index.d.ts +1 -1
- package/dist/kernel/logger/index.js +1 -1
- package/dist/kernel/logger/logger.types.d.ts +1 -0
- package/dist/kernel/logger/logger.types.js +35 -0
- package/dist/kernel/logger/transports/buffered.transport.js +4 -4
- package/dist/kernel/logger/transports/console.transport.js +2 -2
- package/dist/kernel/logger/transports/simple-console.transport.js +2 -2
- package/dist/runtime/client/adapter/index.d.ts +5 -0
- package/dist/runtime/client/adapter/index.js +5 -0
- package/dist/runtime/client/adapter/node-camera-port.d.ts +19 -0
- package/dist/runtime/client/adapter/node-camera-port.js +31 -0
- package/dist/runtime/client/adapter/node-client-adapter.js +15 -1
- package/dist/runtime/client/adapter/node-local-player-bridge.d.ts +3 -0
- package/dist/runtime/client/adapter/node-local-player-bridge.js +9 -0
- package/dist/runtime/client/adapter/node-log-console.js +8 -8
- package/dist/runtime/client/adapter/node-ped-port.d.ts +20 -0
- package/dist/runtime/client/adapter/node-ped-port.js +38 -0
- package/dist/runtime/client/adapter/node-progress-port.d.ts +8 -0
- package/dist/runtime/client/adapter/node-progress-port.js +27 -0
- package/dist/runtime/client/adapter/node-runtime-bridge.d.ts +2 -4
- package/dist/runtime/client/adapter/node-spawn-bridge.d.ts +5 -5
- package/dist/runtime/client/adapter/node-spawn-bridge.js +8 -4
- package/dist/runtime/client/adapter/node-vehicle-port.d.ts +31 -0
- package/dist/runtime/client/adapter/node-vehicle-port.js +73 -0
- package/dist/runtime/client/adapter/node-webview-bridge.d.ts +1 -0
- package/dist/runtime/client/adapter/node-webview-bridge.js +2 -0
- package/dist/runtime/client/controllers/appearance.controller.d.ts +3 -3
- package/dist/runtime/client/controllers/appearance.controller.js +11 -10
- package/dist/runtime/client/controllers/spawner.controller.js +4 -3
- package/dist/runtime/client/services/camera.d.ts +4 -26
- package/dist/runtime/client/services/camera.js +21 -27
- package/dist/runtime/client/services/notification.service.d.ts +3 -3
- package/dist/runtime/client/services/notification.service.js +7 -7
- package/dist/runtime/client/services/ped.service.d.ts +6 -21
- package/dist/runtime/client/services/ped.service.js +31 -78
- package/dist/runtime/client/services/progress.service.d.ts +4 -50
- package/dist/runtime/client/services/progress.service.js +11 -143
- package/dist/runtime/client/services/session-bridge.service.js +3 -2
- package/dist/runtime/client/services/spawn.service.d.ts +3 -5
- package/dist/runtime/client/services/spawn.service.js +12 -17
- package/dist/runtime/client/services/vehicle-client.service.d.ts +3 -3
- package/dist/runtime/client/services/vehicle-client.service.js +43 -143
- package/dist/runtime/client/services/vehicle.service.d.ts +4 -41
- package/dist/runtime/client/services/vehicle.service.js +24 -130
- package/dist/runtime/client/webview-bridge.d.ts +3 -0
- package/dist/runtime/client/webview-bridge.js +6 -0
- package/dist/runtime/client/webview.service.d.ts +1 -0
- package/dist/runtime/client/webview.service.js +5 -0
- package/dist/runtime/server/adapter/node-player-appearance-lifecycle-server.js +3 -2
- package/dist/runtime/server/adapter/node-player-lifecycle-server.js +4 -3
- package/dist/runtime/server/adapter/node-vehicle-lifecycle-server.js +2 -1
- package/dist/runtime/server/apis/chat.api.js +6 -5
- package/dist/runtime/server/apis/npcs.api.js +2 -1
- package/dist/runtime/server/apis/parallel-compute.api.js +1 -0
- package/dist/runtime/server/apis/vehicle-modification.api.js +6 -4
- package/dist/runtime/server/apis/vehicles.api.js +7 -4
- package/dist/runtime/server/bootstrap.js +13 -12
- package/dist/runtime/server/controllers/command-export.controller.js +4 -2
- package/dist/runtime/server/controllers/remote-command-execution.controller.js +2 -1
- package/dist/runtime/server/controllers/vehicle.controller.js +6 -5
- package/dist/runtime/server/decorators/command.d.ts +2 -0
- package/dist/runtime/server/decorators/command.js +3 -1
- package/dist/runtime/server/entities/npc.d.ts +1 -1
- package/dist/runtime/server/entities/player.d.ts +1 -1
- package/dist/runtime/server/entities/player.js +10 -3
- package/dist/runtime/server/helpers/command-validation.helper.js +20 -7
- package/dist/runtime/server/helpers/function-helper.d.ts +1 -0
- package/dist/runtime/server/helpers/function-helper.js +15 -8
- package/dist/runtime/server/implementations/local/channel.local.d.ts +1 -1
- package/dist/runtime/server/implementations/local/channel.local.js +3 -2
- package/dist/runtime/server/ports/channel.api-port.d.ts +1 -1
- package/dist/runtime/server/services/parallel/worker-pool.d.ts +1 -1
- package/dist/runtime/server/services/parallel/worker-pool.js +38 -6
- package/dist/runtime/server/services/parallel/worker.js +1 -0
- package/dist/runtime/server/system/processors/onRpc.processor.js +14 -3
- package/dist/runtime/server/system/schema-generator.d.ts +1 -1
- package/dist/runtime/server/system/schema-generator.js +6 -3
- package/dist/runtime/shared/helpers/process-tuple-schema.js +3 -0
- package/dist/runtime/shared/types/system-types.d.ts +55 -0
- package/dist/runtime/shared/types/system-types.js +54 -0
- package/package.json +21 -11
|
@@ -11,183 +11,77 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
11
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
12
|
};
|
|
13
13
|
import { inject, injectable } from 'tsyringe';
|
|
14
|
-
import {
|
|
14
|
+
import { IClientVehiclePort, } from '../../../adapters/contracts/client/vehicle/IClientVehiclePort';
|
|
15
15
|
let VehicleService = class VehicleService {
|
|
16
|
-
|
|
17
|
-
constructor(
|
|
18
|
-
this.
|
|
16
|
+
vehicles;
|
|
17
|
+
constructor(vehicles) {
|
|
18
|
+
this.vehicles = vehicles;
|
|
19
19
|
}
|
|
20
20
|
async spawn(options) {
|
|
21
|
-
|
|
22
|
-
const modelHash = this.platform.getHashKey(model);
|
|
23
|
-
if (!this.platform.isModelInCdimage(modelHash) || !this.platform.isModelAVehicle(modelHash)) {
|
|
24
|
-
throw new Error(`Invalid vehicle model: ${model}`);
|
|
25
|
-
}
|
|
26
|
-
this.platform.requestModel(modelHash);
|
|
27
|
-
while (!this.platform.hasModelLoaded(modelHash)) {
|
|
28
|
-
await new Promise((r) => setTimeout(r, 0));
|
|
29
|
-
}
|
|
30
|
-
const vehicle = this.platform.createVehicle(modelHash, position, heading, networked, false);
|
|
31
|
-
this.platform.setModelAsNoLongerNeeded(modelHash);
|
|
32
|
-
if (!vehicle || vehicle === 0)
|
|
33
|
-
throw new Error('Failed to create vehicle');
|
|
34
|
-
if (placeOnGround)
|
|
35
|
-
this.platform.setVehicleOnGroundProperly(vehicle);
|
|
36
|
-
if (primaryColor !== undefined || secondaryColor !== undefined) {
|
|
37
|
-
const [currentPrimary, currentSecondary] = this.platform.getVehicleColours(vehicle);
|
|
38
|
-
this.platform.setVehicleColours(vehicle, primaryColor ?? currentPrimary, secondaryColor ?? currentSecondary);
|
|
39
|
-
}
|
|
40
|
-
if (plate)
|
|
41
|
-
this.platform.setVehicleNumberPlateText(vehicle, plate);
|
|
42
|
-
if (warpIntoVehicle)
|
|
43
|
-
this.platform.taskWarpPedIntoVehicle(this.platform.getLocalPlayerPed(), vehicle, seatIndex);
|
|
44
|
-
return vehicle;
|
|
21
|
+
return this.vehicles.spawn(options);
|
|
45
22
|
}
|
|
46
23
|
delete(vehicle) {
|
|
47
|
-
|
|
48
|
-
this.platform.setEntityAsMissionEntity(vehicle, true, true);
|
|
49
|
-
this.platform.deleteVehicle(vehicle);
|
|
50
|
-
}
|
|
24
|
+
this.vehicles.delete(vehicle);
|
|
51
25
|
}
|
|
52
26
|
deleteCurrentVehicle() {
|
|
53
27
|
const vehicle = this.getCurrentVehicle();
|
|
54
28
|
if (vehicle) {
|
|
55
|
-
this.
|
|
29
|
+
this.vehicles.leaveLocalPlayerVehicle(vehicle, 16);
|
|
56
30
|
setTimeout(() => this.delete(vehicle), 1000);
|
|
57
31
|
}
|
|
58
32
|
}
|
|
59
33
|
repair(vehicle) {
|
|
60
|
-
|
|
61
|
-
return;
|
|
62
|
-
this.platform.setVehicleFixed(vehicle);
|
|
63
|
-
this.platform.setVehicleDeformationFixed(vehicle);
|
|
64
|
-
this.platform.setVehicleUndriveable(vehicle, false);
|
|
65
|
-
this.platform.setVehicleEngineOn(vehicle, true, true, false);
|
|
66
|
-
this.platform.setVehicleEngineHealth(vehicle, 1000.0);
|
|
67
|
-
this.platform.setVehiclePetrolTankHealth(vehicle, 1000.0);
|
|
34
|
+
this.vehicles.repair(vehicle);
|
|
68
35
|
}
|
|
69
36
|
setFuel(vehicle, level) {
|
|
70
|
-
|
|
71
|
-
return;
|
|
72
|
-
this.platform.setVehicleFuelLevel(vehicle, Math.max(0, Math.min(100, level * 100)));
|
|
37
|
+
this.vehicles.setFuel(vehicle, level);
|
|
73
38
|
}
|
|
74
39
|
getFuel(vehicle) {
|
|
75
|
-
|
|
76
|
-
return 0;
|
|
77
|
-
return this.platform.getVehicleFuelLevel(vehicle) / 100;
|
|
40
|
+
return this.vehicles.getFuel(vehicle);
|
|
78
41
|
}
|
|
79
42
|
getClosest(radius = 10.0) {
|
|
80
|
-
|
|
81
|
-
return this.platform.getClosestVehicle(this.platform.getEntityCoords(playerPed), radius);
|
|
43
|
+
return this.vehicles.getClosest(radius);
|
|
82
44
|
}
|
|
83
45
|
isPlayerInVehicle() {
|
|
84
|
-
return this.
|
|
46
|
+
return this.vehicles.isLocalPlayerInVehicle();
|
|
85
47
|
}
|
|
86
48
|
getCurrentVehicle() {
|
|
87
|
-
|
|
88
|
-
if (!this.platform.isPedInAnyVehicle(ped))
|
|
89
|
-
return null;
|
|
90
|
-
return this.platform.getVehiclePedIsIn(ped, false);
|
|
49
|
+
return this.vehicles.getCurrentForLocalPlayer();
|
|
91
50
|
}
|
|
92
51
|
getLastVehicle() {
|
|
93
|
-
return this.
|
|
52
|
+
return this.vehicles.getLastForLocalPlayer();
|
|
94
53
|
}
|
|
95
54
|
isPlayerDriver() {
|
|
96
55
|
const vehicle = this.getCurrentVehicle();
|
|
97
56
|
if (!vehicle)
|
|
98
57
|
return false;
|
|
99
|
-
return this.
|
|
58
|
+
return this.vehicles.isLocalPlayerDriver(vehicle);
|
|
100
59
|
}
|
|
101
60
|
setMods(vehicle, mods) {
|
|
102
|
-
|
|
103
|
-
return;
|
|
104
|
-
this.platform.setVehicleModKit(vehicle, 0);
|
|
105
|
-
if (mods.spoiler !== undefined)
|
|
106
|
-
this.platform.setVehicleMod(vehicle, 0, mods.spoiler, false);
|
|
107
|
-
if (mods.frontBumper !== undefined)
|
|
108
|
-
this.platform.setVehicleMod(vehicle, 1, mods.frontBumper, false);
|
|
109
|
-
if (mods.rearBumper !== undefined)
|
|
110
|
-
this.platform.setVehicleMod(vehicle, 2, mods.rearBumper, false);
|
|
111
|
-
if (mods.sideSkirt !== undefined)
|
|
112
|
-
this.platform.setVehicleMod(vehicle, 3, mods.sideSkirt, false);
|
|
113
|
-
if (mods.exhaust !== undefined)
|
|
114
|
-
this.platform.setVehicleMod(vehicle, 4, mods.exhaust, false);
|
|
115
|
-
if (mods.frame !== undefined)
|
|
116
|
-
this.platform.setVehicleMod(vehicle, 5, mods.frame, false);
|
|
117
|
-
if (mods.grille !== undefined)
|
|
118
|
-
this.platform.setVehicleMod(vehicle, 6, mods.grille, false);
|
|
119
|
-
if (mods.hood !== undefined)
|
|
120
|
-
this.platform.setVehicleMod(vehicle, 7, mods.hood, false);
|
|
121
|
-
if (mods.fender !== undefined)
|
|
122
|
-
this.platform.setVehicleMod(vehicle, 8, mods.fender, false);
|
|
123
|
-
if (mods.rightFender !== undefined)
|
|
124
|
-
this.platform.setVehicleMod(vehicle, 9, mods.rightFender, false);
|
|
125
|
-
if (mods.roof !== undefined)
|
|
126
|
-
this.platform.setVehicleMod(vehicle, 10, mods.roof, false);
|
|
127
|
-
if (mods.engine !== undefined)
|
|
128
|
-
this.platform.setVehicleMod(vehicle, 11, mods.engine, false);
|
|
129
|
-
if (mods.brakes !== undefined)
|
|
130
|
-
this.platform.setVehicleMod(vehicle, 12, mods.brakes, false);
|
|
131
|
-
if (mods.transmission !== undefined)
|
|
132
|
-
this.platform.setVehicleMod(vehicle, 13, mods.transmission, false);
|
|
133
|
-
if (mods.horns !== undefined)
|
|
134
|
-
this.platform.setVehicleMod(vehicle, 14, mods.horns, false);
|
|
135
|
-
if (mods.suspension !== undefined)
|
|
136
|
-
this.platform.setVehicleMod(vehicle, 15, mods.suspension, false);
|
|
137
|
-
if (mods.armor !== undefined)
|
|
138
|
-
this.platform.setVehicleMod(vehicle, 16, mods.armor, false);
|
|
139
|
-
if (mods.turbo !== undefined)
|
|
140
|
-
this.platform.toggleVehicleMod(vehicle, 18, mods.turbo);
|
|
141
|
-
if (mods.xenon !== undefined)
|
|
142
|
-
this.platform.toggleVehicleMod(vehicle, 22, mods.xenon);
|
|
143
|
-
if (mods.wheelType !== undefined)
|
|
144
|
-
this.platform.setVehicleWheelType(vehicle, mods.wheelType);
|
|
145
|
-
if (mods.wheels !== undefined)
|
|
146
|
-
this.platform.setVehicleMod(vehicle, 23, mods.wheels, false);
|
|
147
|
-
if (mods.windowTint !== undefined)
|
|
148
|
-
this.platform.setVehicleWindowTint(vehicle, mods.windowTint);
|
|
149
|
-
if (mods.livery !== undefined)
|
|
150
|
-
this.platform.setVehicleLivery(vehicle, mods.livery);
|
|
151
|
-
if (mods.plateStyle !== undefined)
|
|
152
|
-
this.platform.setVehicleNumberPlateTextIndex(vehicle, mods.plateStyle);
|
|
61
|
+
this.vehicles.applyMods(vehicle, mods);
|
|
153
62
|
}
|
|
154
63
|
setDoorsLocked(vehicle, locked) {
|
|
155
|
-
|
|
156
|
-
return;
|
|
157
|
-
this.platform.setVehicleDoorsLocked(vehicle, locked ? 2 : 0);
|
|
64
|
+
this.vehicles.setDoorsLocked(vehicle, locked);
|
|
158
65
|
}
|
|
159
66
|
setEngineRunning(vehicle, running, instant = false) {
|
|
160
|
-
|
|
161
|
-
return;
|
|
162
|
-
this.platform.setVehicleEngineOn(vehicle, running, instant, true);
|
|
67
|
+
this.vehicles.setEngineRunning(vehicle, running, instant);
|
|
163
68
|
}
|
|
164
69
|
setInvincible(vehicle, invincible) {
|
|
165
|
-
|
|
166
|
-
return;
|
|
167
|
-
this.platform.setEntityInvincible(vehicle, invincible);
|
|
70
|
+
this.vehicles.setInvincible(vehicle, invincible);
|
|
168
71
|
}
|
|
169
72
|
getSpeed(vehicle) {
|
|
170
|
-
|
|
171
|
-
return 0;
|
|
172
|
-
return this.platform.getEntitySpeed(vehicle) * 3.6;
|
|
73
|
+
return this.vehicles.getSpeed(vehicle) * 3.6;
|
|
173
74
|
}
|
|
174
75
|
setHeading(vehicle, heading) {
|
|
175
|
-
|
|
176
|
-
return;
|
|
177
|
-
this.platform.setEntityHeading(vehicle, heading);
|
|
76
|
+
this.vehicles.setHeading(vehicle, heading);
|
|
178
77
|
}
|
|
179
78
|
teleport(vehicle, position, heading) {
|
|
180
|
-
|
|
181
|
-
return;
|
|
182
|
-
this.platform.setEntityCoords(vehicle, position);
|
|
183
|
-
if (heading !== undefined)
|
|
184
|
-
this.platform.setEntityHeading(vehicle, heading);
|
|
185
|
-
this.platform.setVehicleOnGroundProperly(vehicle);
|
|
79
|
+
this.vehicles.teleport(vehicle, position, heading);
|
|
186
80
|
}
|
|
187
81
|
};
|
|
188
82
|
VehicleService = __decorate([
|
|
189
83
|
injectable(),
|
|
190
|
-
__param(0, inject(
|
|
191
|
-
__metadata("design:paramtypes", [
|
|
84
|
+
__param(0, inject(IClientVehiclePort)),
|
|
85
|
+
__metadata("design:paramtypes", [IClientVehiclePort])
|
|
192
86
|
], VehicleService);
|
|
193
87
|
export { VehicleService };
|
|
@@ -9,15 +9,18 @@ export declare class WebViewBridge<TSend extends Record<string, any> = Record<st
|
|
|
9
9
|
focused?: boolean;
|
|
10
10
|
cursor?: boolean;
|
|
11
11
|
inputPassthrough?: boolean;
|
|
12
|
+
chatMode?: boolean;
|
|
12
13
|
}): void;
|
|
13
14
|
destroy(): void;
|
|
14
15
|
exists(): boolean;
|
|
16
|
+
getCapabilities(): import("../../contracts/client").WebViewCapabilities;
|
|
15
17
|
send<K extends keyof TSend & string>(action: K, data: TSend[K]): void;
|
|
16
18
|
sendRaw(action: string, data: unknown): void;
|
|
17
19
|
on<K extends keyof TReceive & string>(action: K, handler: (data: TReceive[K]) => void | Promise<void>): () => void;
|
|
18
20
|
onWithResponse<K extends keyof TReceive & string, R = unknown>(action: K, handler: (data: TReceive[K]) => R | Promise<R>): () => void;
|
|
19
21
|
focus(hasFocus: boolean, hasCursor?: boolean): void;
|
|
20
22
|
blur(): void;
|
|
23
|
+
markAsChat(): void;
|
|
21
24
|
setVisible(visible: boolean): void;
|
|
22
25
|
show(withFocus?: boolean, withCursor?: boolean): void;
|
|
23
26
|
hide(): void;
|
|
@@ -31,6 +31,9 @@ let WebViewBridge = class WebViewBridge {
|
|
|
31
31
|
exists() {
|
|
32
32
|
return this.service.exists(this.viewId);
|
|
33
33
|
}
|
|
34
|
+
getCapabilities() {
|
|
35
|
+
return this.service.getCapabilities();
|
|
36
|
+
}
|
|
34
37
|
send(action, data) {
|
|
35
38
|
this.service.send(this.viewId, action, data);
|
|
36
39
|
}
|
|
@@ -58,6 +61,9 @@ let WebViewBridge = class WebViewBridge {
|
|
|
58
61
|
blur() {
|
|
59
62
|
this.service.blur(this.viewId);
|
|
60
63
|
}
|
|
64
|
+
markAsChat() {
|
|
65
|
+
this.service.markAsChat(this.viewId);
|
|
66
|
+
}
|
|
61
67
|
setVisible(visible) {
|
|
62
68
|
visible ? this.service.show(this.viewId) : this.service.hide(this.viewId);
|
|
63
69
|
}
|
|
@@ -9,6 +9,7 @@ export declare class WebViewService {
|
|
|
9
9
|
hide(viewId: string): void;
|
|
10
10
|
focus(viewId: string, options?: WebViewFocusOptions): void;
|
|
11
11
|
blur(viewId: string): void;
|
|
12
|
+
markAsChat(viewId: string): void;
|
|
12
13
|
send(viewId: string, event: string, payload: unknown): void;
|
|
13
14
|
onMessage(handler: (message: WebViewMessage) => void | Promise<void>): () => void;
|
|
14
15
|
}
|
|
@@ -17,6 +17,7 @@ const FALLBACK_CAPABILITIES = {
|
|
|
17
17
|
supportsBidirectionalMessaging: true,
|
|
18
18
|
supportsExecute: false,
|
|
19
19
|
supportsHeadless: false,
|
|
20
|
+
supportsChatMode: false,
|
|
20
21
|
};
|
|
21
22
|
function createFallbackBridge() {
|
|
22
23
|
const runtime = di.resolve(IClientRuntimeBridge);
|
|
@@ -34,6 +35,7 @@ function createFallbackBridge() {
|
|
|
34
35
|
runtime.setWebViewInputPassthrough(options?.inputPassthrough ?? false);
|
|
35
36
|
},
|
|
36
37
|
blur: () => runtime.setWebViewFocus(false, false),
|
|
38
|
+
markAsChat: () => { },
|
|
37
39
|
send: (viewId, event, payload) => {
|
|
38
40
|
runtime.sendWebViewMessage(JSON.stringify({ __opencoreWebView: true, viewId, action: event, data: payload }));
|
|
39
41
|
},
|
|
@@ -85,6 +87,9 @@ let WebViewService = class WebViewService {
|
|
|
85
87
|
blur(viewId) {
|
|
86
88
|
this.bridge.blur(viewId);
|
|
87
89
|
}
|
|
90
|
+
markAsChat(viewId) {
|
|
91
|
+
this.bridge.markAsChat(viewId);
|
|
92
|
+
}
|
|
88
93
|
send(viewId, event, payload) {
|
|
89
94
|
this.bridge.send(viewId, event, payload);
|
|
90
95
|
}
|
|
@@ -16,6 +16,7 @@ import { IPedAppearanceServer } from '../../../adapters/contracts/server/IPedApp
|
|
|
16
16
|
import { IPlayerAppearanceLifecycleServer } from '../../../adapters/contracts/server/player-appearance/IPlayerAppearanceLifecycleServer';
|
|
17
17
|
import { IPlayerServer } from '../../../adapters/contracts/server/IPlayerServer';
|
|
18
18
|
import { Players } from '../ports/players.api-port';
|
|
19
|
+
import { SYSTEM_EVENTS } from '../../shared/types/system-types';
|
|
19
20
|
let NodePlayerAppearanceLifecycleServer = class NodePlayerAppearanceLifecycleServer extends IPlayerAppearanceLifecycleServer {
|
|
20
21
|
pedAdapter;
|
|
21
22
|
playerServer;
|
|
@@ -38,7 +39,7 @@ let NodePlayerAppearanceLifecycleServer = class NodePlayerAppearanceLifecycleSer
|
|
|
38
39
|
if (!target) {
|
|
39
40
|
return { success: false, errors: ['Player not found'] };
|
|
40
41
|
}
|
|
41
|
-
this.events.emit(
|
|
42
|
+
this.events.emit(SYSTEM_EVENTS.appearance.apply, target, appearance);
|
|
42
43
|
return { success: true, appearance };
|
|
43
44
|
}
|
|
44
45
|
applyClothing(playerSrc, appearance) {
|
|
@@ -56,7 +57,7 @@ let NodePlayerAppearanceLifecycleServer = class NodePlayerAppearanceLifecycleSer
|
|
|
56
57
|
const target = this.resolveTarget(playerSrc);
|
|
57
58
|
if (!target)
|
|
58
59
|
return false;
|
|
59
|
-
this.events.emit(
|
|
60
|
+
this.events.emit(SYSTEM_EVENTS.appearance.reset, target);
|
|
60
61
|
return true;
|
|
61
62
|
}
|
|
62
63
|
resolveTarget(playerSrc) {
|
|
@@ -13,6 +13,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
13
13
|
import { inject, injectable } from 'tsyringe';
|
|
14
14
|
import { EventsAPI } from '../../../adapters/contracts/transport/events.api';
|
|
15
15
|
import { IPlayerLifecycleServer } from '../../../adapters/contracts/server/player-lifecycle/IPlayerLifecycleServer';
|
|
16
|
+
import { SYSTEM_EVENTS } from '../../shared/types/system-types';
|
|
16
17
|
let NodePlayerLifecycleServer = class NodePlayerLifecycleServer extends IPlayerLifecycleServer {
|
|
17
18
|
events;
|
|
18
19
|
constructor(events) {
|
|
@@ -23,7 +24,7 @@ let NodePlayerLifecycleServer = class NodePlayerLifecycleServer extends IPlayerL
|
|
|
23
24
|
const target = this.resolveTarget(playerSrc);
|
|
24
25
|
if (!target)
|
|
25
26
|
return;
|
|
26
|
-
this.events.emit(
|
|
27
|
+
this.events.emit(SYSTEM_EVENTS.spawner.spawn, target, {
|
|
27
28
|
position: request.position,
|
|
28
29
|
model: request.model,
|
|
29
30
|
heading: request.heading,
|
|
@@ -34,13 +35,13 @@ let NodePlayerLifecycleServer = class NodePlayerLifecycleServer extends IPlayerL
|
|
|
34
35
|
const target = this.resolveTarget(playerSrc);
|
|
35
36
|
if (!target)
|
|
36
37
|
return;
|
|
37
|
-
this.events.emit(
|
|
38
|
+
this.events.emit(SYSTEM_EVENTS.spawner.teleport, target, request.position, request.heading);
|
|
38
39
|
}
|
|
39
40
|
respawn(playerSrc, request) {
|
|
40
41
|
const target = this.resolveTarget(playerSrc);
|
|
41
42
|
if (!target)
|
|
42
43
|
return;
|
|
43
|
-
this.events.emit(
|
|
44
|
+
this.events.emit(SYSTEM_EVENTS.spawner.respawn, target, request.position, request.heading);
|
|
44
45
|
}
|
|
45
46
|
resolveTarget(playerSrc) {
|
|
46
47
|
const clientId = Number(playerSrc);
|
|
@@ -15,6 +15,7 @@ import { IVehicleLifecycleServer } from '../../../adapters/contracts/server/vehi
|
|
|
15
15
|
import { IPlatformContext } from '../../../adapters/contracts/IPlatformContext';
|
|
16
16
|
import { IVehicleServer } from '../../../adapters/contracts/server/IVehicleServer';
|
|
17
17
|
import { EventsAPI } from '../../../adapters/contracts/transport/events.api';
|
|
18
|
+
import { SYSTEM_EVENTS } from '../../shared/types/system-types';
|
|
18
19
|
let NodeVehicleLifecycleServer = class NodeVehicleLifecycleServer extends IVehicleLifecycleServer {
|
|
19
20
|
vehicleServer;
|
|
20
21
|
platformContext;
|
|
@@ -42,7 +43,7 @@ let NodeVehicleLifecycleServer = class NodeVehicleLifecycleServer extends IVehic
|
|
|
42
43
|
const clientId = Number(request.playerSrc);
|
|
43
44
|
if (Number.isNaN(clientId))
|
|
44
45
|
return;
|
|
45
|
-
this.events.emit(
|
|
46
|
+
this.events.emit(SYSTEM_EVENTS.vehicle.warpInto, clientId, request.networkId, request.seatIndex);
|
|
46
47
|
}
|
|
47
48
|
};
|
|
48
49
|
NodeVehicleLifecycleServer = __decorate([
|
|
@@ -12,6 +12,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
12
|
};
|
|
13
13
|
import { inject, injectable } from 'tsyringe';
|
|
14
14
|
import { EventsAPI } from '../../../adapters/contracts/transport/events.api';
|
|
15
|
+
import { SYSTEM_EVENTS } from '../../shared/types/system-types';
|
|
15
16
|
import { Players } from '../ports/players.api-port';
|
|
16
17
|
/**
|
|
17
18
|
* Service for sending chat messages to players.
|
|
@@ -35,7 +36,7 @@ let Chat = class Chat {
|
|
|
35
36
|
* @param color - Message color (RGB). Defaults to white.
|
|
36
37
|
*/
|
|
37
38
|
broadcast(message, author = 'SYSTEM', color = { r: 255, g: 255, b: 255 }) {
|
|
38
|
-
this.events.emit(
|
|
39
|
+
this.events.emit(SYSTEM_EVENTS.chat.message, 'all', {
|
|
39
40
|
args: [author, message],
|
|
40
41
|
color: color,
|
|
41
42
|
});
|
|
@@ -49,7 +50,7 @@ let Chat = class Chat {
|
|
|
49
50
|
* @param color - Message color (RGB).
|
|
50
51
|
*/
|
|
51
52
|
sendPrivate(player, message, author = 'Private', color = { r: 200, g: 200, b: 200 }) {
|
|
52
|
-
this.events.emit(
|
|
53
|
+
this.events.emit(SYSTEM_EVENTS.chat.addMessage, player.clientID, {
|
|
53
54
|
args: [author, message],
|
|
54
55
|
color: color,
|
|
55
56
|
});
|
|
@@ -60,7 +61,7 @@ let Chat = class Chat {
|
|
|
60
61
|
* @param player - Target player.
|
|
61
62
|
*/
|
|
62
63
|
clearChat(player) {
|
|
63
|
-
this.events.emit(
|
|
64
|
+
this.events.emit(SYSTEM_EVENTS.chat.clear, player.clientID);
|
|
64
65
|
}
|
|
65
66
|
/**
|
|
66
67
|
* Send a chat message to multiple players.
|
|
@@ -72,7 +73,7 @@ let Chat = class Chat {
|
|
|
72
73
|
*/
|
|
73
74
|
sendMany(players, message, author = 'SYSTEM', color = { r: 255, g: 255, b: 255 }) {
|
|
74
75
|
const targetIds = players.map((p) => (typeof p === 'number' ? p : p.clientID));
|
|
75
|
-
this.events.emit(
|
|
76
|
+
this.events.emit(SYSTEM_EVENTS.chat.addMessage, targetIds, {
|
|
76
77
|
args: [author, message],
|
|
77
78
|
color: color,
|
|
78
79
|
});
|
|
@@ -116,7 +117,7 @@ let Chat = class Chat {
|
|
|
116
117
|
* Clear chat for all connected players.
|
|
117
118
|
*/
|
|
118
119
|
clearChatAll() {
|
|
119
|
-
this.events.emit(
|
|
120
|
+
this.events.emit(SYSTEM_EVENTS.chat.clear, 'all');
|
|
120
121
|
}
|
|
121
122
|
};
|
|
122
123
|
Chat = __decorate([
|
|
@@ -19,6 +19,7 @@ import { INpcLifecycleServer } from '../../../adapters/contracts/server/npc-life
|
|
|
19
19
|
import { IPedServer } from '../../../adapters/contracts/server/IPedServer';
|
|
20
20
|
import { coreLogger } from '../../../kernel/logger';
|
|
21
21
|
import { WorldContext } from '../../core/world';
|
|
22
|
+
import { SYSTEM_EVENTS } from '../../shared/types/system-types';
|
|
22
23
|
import { NPC } from '../entities/npc';
|
|
23
24
|
/**
|
|
24
25
|
* Server-side API responsible for the full NPC (ped) lifecycle:
|
|
@@ -311,7 +312,7 @@ let Npcs = class Npcs {
|
|
|
311
312
|
netId: npc.netId,
|
|
312
313
|
remainingNpcs: this.npcById.size,
|
|
313
314
|
});
|
|
314
|
-
this.events.emit(
|
|
315
|
+
this.events.emit(SYSTEM_EVENTS.npc.deleted, 'all', npc.npcId);
|
|
315
316
|
return true;
|
|
316
317
|
}
|
|
317
318
|
/**
|
|
@@ -4,6 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
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;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
+
import { performance } from 'node:perf_hooks';
|
|
7
8
|
import { injectable } from 'tsyringe';
|
|
8
9
|
import { v4 as uuid } from 'uuid';
|
|
9
10
|
import { WorkerPool } from '../services/parallel/worker-pool';
|
|
@@ -10,9 +10,11 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
12
|
};
|
|
13
|
-
import { inject
|
|
13
|
+
import { inject } from 'tsyringe';
|
|
14
14
|
import { EventsAPI } from '../../../adapters/contracts/transport/events.api';
|
|
15
15
|
import { coreLogger } from '../../../kernel/logger';
|
|
16
|
+
import { SYSTEM_EVENTS } from '../../shared/types/system-types';
|
|
17
|
+
import { Bind } from '../decorators/bind';
|
|
16
18
|
import { Vehicles } from './vehicles.api';
|
|
17
19
|
/**
|
|
18
20
|
* Service for handling vehicle modifications with validation.
|
|
@@ -73,7 +75,7 @@ let VehicleModification = class VehicleModification {
|
|
|
73
75
|
requestedBy,
|
|
74
76
|
mods: Object.keys(validatedMods),
|
|
75
77
|
});
|
|
76
|
-
this.events.emit(
|
|
78
|
+
this.events.emit(SYSTEM_EVENTS.vehicle.modified, 'all', {
|
|
77
79
|
networkId,
|
|
78
80
|
mods: validatedMods,
|
|
79
81
|
});
|
|
@@ -200,7 +202,7 @@ let VehicleModification = class VehicleModification {
|
|
|
200
202
|
windowTint: 0,
|
|
201
203
|
};
|
|
202
204
|
coreLogger.info('Vehicle modifications reset', { networkId, requestedBy });
|
|
203
|
-
this.events.emit(
|
|
205
|
+
this.events.emit(SYSTEM_EVENTS.vehicle.modified, 'all', {
|
|
204
206
|
networkId,
|
|
205
207
|
mods: defaultMods,
|
|
206
208
|
});
|
|
@@ -304,7 +306,7 @@ let VehicleModification = class VehicleModification {
|
|
|
304
306
|
}
|
|
305
307
|
};
|
|
306
308
|
VehicleModification = __decorate([
|
|
307
|
-
|
|
309
|
+
Bind('singleton'),
|
|
308
310
|
__param(0, inject(Vehicles)),
|
|
309
311
|
__param(1, inject(EventsAPI)),
|
|
310
312
|
__metadata("design:paramtypes", [Vehicles,
|
|
@@ -10,15 +10,17 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
12
|
};
|
|
13
|
-
import { inject
|
|
13
|
+
import { inject } from 'tsyringe';
|
|
14
14
|
import { IHasher } from '../../../adapters/contracts/IHasher';
|
|
15
15
|
import { EventsAPI } from '../../../adapters/contracts/transport/events.api';
|
|
16
16
|
import { IEntityServer } from '../../../adapters/contracts/server/IEntityServer';
|
|
17
17
|
import { IVehicleLifecycleServer } from '../../../adapters/contracts/server/vehicle-lifecycle/IVehicleLifecycleServer';
|
|
18
18
|
import { IVehicleServer } from '../../../adapters/contracts/server/IVehicleServer';
|
|
19
19
|
import { coreLogger } from '../../../kernel/logger';
|
|
20
|
+
import { SYSTEM_EVENTS } from '../../shared/types/system-types';
|
|
20
21
|
import { Vehicle } from '../entities/vehicle';
|
|
21
22
|
import { Players } from '../ports/players.api-port';
|
|
23
|
+
import { Bind } from '../decorators/bind';
|
|
22
24
|
const DEFAULT_PLAYER_VEHICLE_OFFSET = { x: 0, y: 3, z: 0 };
|
|
23
25
|
/**
|
|
24
26
|
* Server-side service for managing vehicle entities.
|
|
@@ -130,7 +132,7 @@ let Vehicles = class Vehicles {
|
|
|
130
132
|
persistent,
|
|
131
133
|
totalVehicles: this.vehiclesByNetworkId.size,
|
|
132
134
|
});
|
|
133
|
-
this.events.emit(
|
|
135
|
+
this.events.emit(SYSTEM_EVENTS.vehicle.created, 'all', vehicle.serialize());
|
|
134
136
|
return {
|
|
135
137
|
networkId,
|
|
136
138
|
handle,
|
|
@@ -178,6 +180,7 @@ let Vehicles = class Vehicles {
|
|
|
178
180
|
...options,
|
|
179
181
|
position: spawnPosition,
|
|
180
182
|
heading: spawnHeading,
|
|
183
|
+
plate: ownership.type === 'player' ? player.name : 'anom',
|
|
181
184
|
ownership,
|
|
182
185
|
});
|
|
183
186
|
if (result.success) {
|
|
@@ -289,7 +292,7 @@ let Vehicles = class Vehicles {
|
|
|
289
292
|
networkId,
|
|
290
293
|
totalVehicles: this.vehiclesByNetworkId.size,
|
|
291
294
|
});
|
|
292
|
-
this.events.emit(
|
|
295
|
+
this.events.emit(SYSTEM_EVENTS.vehicle.deleted, 'all', networkId);
|
|
293
296
|
return true;
|
|
294
297
|
}
|
|
295
298
|
/**
|
|
@@ -381,7 +384,7 @@ let Vehicles = class Vehicles {
|
|
|
381
384
|
}
|
|
382
385
|
};
|
|
383
386
|
Vehicles = __decorate([
|
|
384
|
-
|
|
387
|
+
Bind('singleton'),
|
|
385
388
|
__param(0, inject(Players)),
|
|
386
389
|
__param(1, inject(IEntityServer)),
|
|
387
390
|
__param(2, inject(IVehicleServer)),
|
|
@@ -12,6 +12,7 @@ import { getFrameworkModeScope, setRuntimeContext, validateRuntimeOptions, } fro
|
|
|
12
12
|
import { BinaryProcessManager } from './system/managers/binary-process.manager';
|
|
13
13
|
import { SessionRecoveryService } from './services/session-recovery.local';
|
|
14
14
|
import { registerServicesServer } from './services/services.register';
|
|
15
|
+
import { SYSTEM_EVENTS } from '../shared/types/system-types';
|
|
15
16
|
import { METADATA_KEYS } from './system/metadata-server.keys';
|
|
16
17
|
import { registerSystemServer } from './system/processors.register';
|
|
17
18
|
const CORE_WAIT_TIMEOUT = 10000;
|
|
@@ -163,13 +164,13 @@ export async function initServer(options, plugins) {
|
|
|
163
164
|
const engineEvents = GLOBAL_CONTAINER.resolve(IEngineEvents);
|
|
164
165
|
const events = GLOBAL_CONTAINER.resolve(EventsAPI);
|
|
165
166
|
// 1. Broadast to resources already running
|
|
166
|
-
engineEvents.emit(
|
|
167
|
-
events.emit(
|
|
168
|
-
// 2. Listen for '
|
|
169
|
-
engineEvents.on(
|
|
170
|
-
engineEvents.emit(
|
|
167
|
+
engineEvents.emit(SYSTEM_EVENTS.core.ready);
|
|
168
|
+
events.emit(SYSTEM_EVENTS.core.ready, 'all');
|
|
169
|
+
// 2. Listen for '_systemcore:request-ready' for resources starting late (hot-reload)
|
|
170
|
+
engineEvents.on(SYSTEM_EVENTS.core.requestReady, () => {
|
|
171
|
+
engineEvents.emit(SYSTEM_EVENTS.core.ready);
|
|
171
172
|
});
|
|
172
|
-
loggers.bootstrap.info(`'core
|
|
173
|
+
loggers.bootstrap.info(`'${SYSTEM_EVENTS.core.ready}' logic initialized and broadcasted`);
|
|
173
174
|
}
|
|
174
175
|
const logLevelLabel = LogLevelLabels[getLogLevel()];
|
|
175
176
|
loggers.bootstrap.info(`LogLevel Setted: ${logLevelLabel}`);
|
|
@@ -192,13 +193,13 @@ function createCoreDependency(coreName) {
|
|
|
192
193
|
const exportsService = GLOBAL_CONTAINER.resolve(IExports);
|
|
193
194
|
const onReady = () => {
|
|
194
195
|
if (!resolved) {
|
|
195
|
-
loggers.bootstrap.debug(`Core '${coreName}' detected via 'core
|
|
196
|
+
loggers.bootstrap.debug(`Core '${coreName}' detected via '${SYSTEM_EVENTS.core.ready}' event!`);
|
|
196
197
|
cleanup();
|
|
197
198
|
resolve();
|
|
198
199
|
}
|
|
199
200
|
};
|
|
200
|
-
engineEvents.on(
|
|
201
|
-
loggers.bootstrap.debug(`Listening for 'core
|
|
201
|
+
engineEvents.on(SYSTEM_EVENTS.core.ready, onReady);
|
|
202
|
+
loggers.bootstrap.debug(`Listening for '${SYSTEM_EVENTS.core.ready}' event from Core`);
|
|
202
203
|
// 2. Check if already ready via export (Polling)
|
|
203
204
|
const checkReady = () => {
|
|
204
205
|
if (resolved)
|
|
@@ -223,15 +224,15 @@ function createCoreDependency(coreName) {
|
|
|
223
224
|
// 3. Request status (for hot-reload cases where Core is already up)
|
|
224
225
|
// This is sent AFTER registering the listener so we can receive the response
|
|
225
226
|
if (!resolved) {
|
|
226
|
-
loggers.bootstrap.debug(`Requesting Core status via 'core
|
|
227
|
-
engineEvents.emit(
|
|
227
|
+
loggers.bootstrap.debug(`Requesting Core status via '${SYSTEM_EVENTS.core.requestReady}' event`);
|
|
228
|
+
engineEvents.emit(SYSTEM_EVENTS.core.requestReady);
|
|
228
229
|
}
|
|
229
230
|
// 4. Timeout protection
|
|
230
231
|
timeout = setTimeout(() => {
|
|
231
232
|
if (!resolved) {
|
|
232
233
|
loggers.bootstrap.warn(`Timeout waiting for Core '${coreName}' after ${CORE_WAIT_TIMEOUT}ms`);
|
|
233
234
|
cleanup();
|
|
234
|
-
reject(new Error(`[OpenCore] Timeout waiting for CORE '${coreName}'. The Core did not emit 'core
|
|
235
|
+
reject(new Error(`[OpenCore] Timeout waiting for CORE '${coreName}'. The Core did not emit '${SYSTEM_EVENTS.core.ready}' or expose 'isCoreReady' within ${CORE_WAIT_TIMEOUT}ms.`));
|
|
235
236
|
}
|
|
236
237
|
}, CORE_WAIT_TIMEOUT);
|
|
237
238
|
});
|
|
@@ -11,9 +11,11 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
11
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
12
|
};
|
|
13
13
|
import { inject } from 'tsyringe';
|
|
14
|
+
import { z } from 'zod';
|
|
14
15
|
import { IEngineEvents } from '../../../adapters/contracts/IEngineEvents';
|
|
15
16
|
import { AppError, SecurityError } from '../../../kernel/error';
|
|
16
17
|
import { loggers } from '../../../kernel/logger';
|
|
18
|
+
import { buildRemoteCommandExecuteEventName, SYSTEM_EVENTS } from '../../shared/types/system-types';
|
|
17
19
|
import { CommandErrorObserverContract } from '../contracts/security/command-error-observer.contract';
|
|
18
20
|
import { Controller, Export, Public } from '../decorators';
|
|
19
21
|
import { OnNet } from '../decorators/onNet';
|
|
@@ -211,7 +213,7 @@ let CommandExportController = class CommandExportController {
|
|
|
211
213
|
// Validate security BEFORE delegating to resource
|
|
212
214
|
await this.validateSecurity(player, commandName, remoteEntry.metadata.security);
|
|
213
215
|
// Delegate to resource via local event (server-to-server, not network)
|
|
214
|
-
const eventName =
|
|
216
|
+
const eventName = buildRemoteCommandExecuteEventName(remoteEntry.resourceName);
|
|
215
217
|
this.engineEvents.emit(eventName, clientID, commandName, args);
|
|
216
218
|
loggers.command.debug(`Delegated remote command execution to ${remoteEntry.resourceName}`, {
|
|
217
219
|
command: commandName,
|
|
@@ -294,7 +296,7 @@ let CommandExportController = class CommandExportController {
|
|
|
294
296
|
};
|
|
295
297
|
__decorate([
|
|
296
298
|
Public(),
|
|
297
|
-
OnNet(
|
|
299
|
+
OnNet(SYSTEM_EVENTS.command.execute, z.tuple([z.string().min(1), z.array(z.string())])),
|
|
298
300
|
__metadata("design:type", Function),
|
|
299
301
|
__metadata("design:paramtypes", [Player, String, Array]),
|
|
300
302
|
__metadata("design:returntype", Promise)
|
|
@@ -14,6 +14,7 @@ import { inject } from 'tsyringe';
|
|
|
14
14
|
import { IEngineEvents } from '../../../adapters/contracts/IEngineEvents';
|
|
15
15
|
import { IResourceInfo } from '../../../adapters/contracts/IResourceInfo';
|
|
16
16
|
import { loggers } from '../../../kernel/logger';
|
|
17
|
+
import { buildRemoteCommandExecuteEventName } from '../../shared/types/system-types';
|
|
17
18
|
import { CommandErrorObserverContract } from '../contracts/security/command-error-observer.contract';
|
|
18
19
|
import { Controller } from '../decorators';
|
|
19
20
|
import { normalizeToAppError } from '../helpers/normalize-app-error';
|
|
@@ -73,7 +74,7 @@ let RemoteCommandExecutionController = class RemoteCommandExecutionController {
|
|
|
73
74
|
*/
|
|
74
75
|
registerEventHandler() {
|
|
75
76
|
const resourceName = this.resourceInfo.getCurrentResourceName();
|
|
76
|
-
const eventName =
|
|
77
|
+
const eventName = buildRemoteCommandExecuteEventName(resourceName);
|
|
77
78
|
this.engineEvents.on(eventName, async (clientID, commandName, args) => {
|
|
78
79
|
await this.handleCommandExecution(clientID, commandName, args);
|
|
79
80
|
});
|