@open-core/ragemp-adapter 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +51 -0
  2. package/dist/.tsbuildinfo/client.tsbuildinfo +1 -0
  3. package/dist/.tsbuildinfo/root.tsbuildinfo +1 -0
  4. package/dist/.tsbuildinfo/server.tsbuildinfo +1 -0
  5. package/dist/.tsbuildinfo/shared.tsbuildinfo +1 -0
  6. package/dist/client/create-ragemp-client-adapter.d.ts +9 -0
  7. package/dist/client/create-ragemp-client-adapter.js +48 -0
  8. package/dist/client/index.d.ts +9 -0
  9. package/dist/client/index.js +25 -0
  10. package/dist/client/key-maps.d.ts +9 -0
  11. package/dist/client/key-maps.js +128 -0
  12. package/dist/client/native-chat.d.ts +2 -0
  13. package/dist/client/native-chat.js +50 -0
  14. package/dist/client/ragemp-blip-bridge.d.ts +12 -0
  15. package/dist/client/ragemp-blip-bridge.js +139 -0
  16. package/dist/client/ragemp-hasher.d.ts +4 -0
  17. package/dist/client/ragemp-hasher.js +20 -0
  18. package/dist/client/ragemp-local-player-bridge.d.ts +8 -0
  19. package/dist/client/ragemp-local-player-bridge.js +26 -0
  20. package/dist/client/ragemp-log-console.d.ts +11 -0
  21. package/dist/client/ragemp-log-console.js +75 -0
  22. package/dist/client/ragemp-marker-bridge.d.ts +11 -0
  23. package/dist/client/ragemp-marker-bridge.js +57 -0
  24. package/dist/client/ragemp-notification-bridge.d.ts +5 -0
  25. package/dist/client/ragemp-notification-bridge.js +70 -0
  26. package/dist/client/ragemp-platform-bridge.d.ts +141 -0
  27. package/dist/client/ragemp-platform-bridge.js +479 -0
  28. package/dist/client/ragemp-runtime-bridge.d.ts +30 -0
  29. package/dist/client/ragemp-runtime-bridge.js +119 -0
  30. package/dist/client/ragemp-runtime-globals.d.ts +5 -0
  31. package/dist/client/ragemp-runtime-globals.js +57 -0
  32. package/dist/client/ragemp-spawn-bridge.d.ts +15 -0
  33. package/dist/client/ragemp-spawn-bridge.js +107 -0
  34. package/dist/client/ragemp-webview-bridge.d.ts +22 -0
  35. package/dist/client/ragemp-webview-bridge.js +131 -0
  36. package/dist/index.d.ts +4 -0
  37. package/dist/index.js +20 -0
  38. package/dist/server/create-ragemp-server-adapter.d.ts +9 -0
  39. package/dist/server/create-ragemp-server-adapter.js +54 -0
  40. package/dist/server/index.d.ts +11 -0
  41. package/dist/server/index.js +27 -0
  42. package/dist/server/ragemp-capabilities.d.ts +14 -0
  43. package/dist/server/ragemp-capabilities.js +36 -0
  44. package/dist/server/ragemp-engine-events.d.ts +11 -0
  45. package/dist/server/ragemp-engine-events.js +72 -0
  46. package/dist/server/ragemp-entity-server.d.ts +29 -0
  47. package/dist/server/ragemp-entity-server.js +122 -0
  48. package/dist/server/ragemp-exports.d.ts +7 -0
  49. package/dist/server/ragemp-exports.js +36 -0
  50. package/dist/server/ragemp-hasher.d.ts +7 -0
  51. package/dist/server/ragemp-hasher.js +23 -0
  52. package/dist/server/ragemp-npc-lifecycle-server.d.ts +9 -0
  53. package/dist/server/ragemp-npc-lifecycle-server.js +51 -0
  54. package/dist/server/ragemp-ped-server.d.ts +8 -0
  55. package/dist/server/ragemp-ped-server.js +37 -0
  56. package/dist/server/ragemp-player-appearance-lifecycle-server.d.ts +19 -0
  57. package/dist/server/ragemp-player-appearance-lifecycle-server.js +66 -0
  58. package/dist/server/ragemp-player-lifecycle-server.d.ts +7 -0
  59. package/dist/server/ragemp-player-lifecycle-server.js +40 -0
  60. package/dist/server/ragemp-player-server.d.ts +20 -0
  61. package/dist/server/ragemp-player-server.js +89 -0
  62. package/dist/server/ragemp-player-state-sync-server.d.ts +7 -0
  63. package/dist/server/ragemp-player-state-sync-server.js +29 -0
  64. package/dist/server/ragemp-playerinfo.d.ts +6 -0
  65. package/dist/server/ragemp-playerinfo.js +19 -0
  66. package/dist/server/ragemp-resourceinfo.d.ts +5 -0
  67. package/dist/server/ragemp-resourceinfo.js +25 -0
  68. package/dist/server/ragemp-tick.d.ts +7 -0
  69. package/dist/server/ragemp-tick.js +24 -0
  70. package/dist/server/ragemp-vehicle-lifecycle-server.d.ts +10 -0
  71. package/dist/server/ragemp-vehicle-lifecycle-server.js +57 -0
  72. package/dist/server/ragemp-vehicle-server.d.ts +15 -0
  73. package/dist/server/ragemp-vehicle-server.js +59 -0
  74. package/dist/shared/exports-registry.d.ts +29 -0
  75. package/dist/shared/exports-registry.js +87 -0
  76. package/dist/shared/transport/adapter.d.ts +8 -0
  77. package/dist/shared/transport/adapter.js +18 -0
  78. package/dist/shared/transport/helpers.d.ts +24 -0
  79. package/dist/shared/transport/helpers.js +70 -0
  80. package/dist/shared/transport/ragemp.events.d.ts +10 -0
  81. package/dist/shared/transport/ragemp.events.js +45 -0
  82. package/dist/shared/transport/ragemp.rpc.d.ts +27 -0
  83. package/dist/shared/transport/ragemp.rpc.js +181 -0
  84. package/package.json +64 -0
@@ -0,0 +1,122 @@
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.RageMPEntityServer = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const server_1 = require("@open-core/framework/contracts/server");
12
+ /**
13
+ * RAGE Multiplayer implementation of server-side entity operations.
14
+ *
15
+ * The framework handle maps to the RageMP entity.id (server-side integer ID).
16
+ */
17
+ let RageMPEntityServer = class RageMPEntityServer extends server_1.IEntityServer {
18
+ doesExist(handle) {
19
+ return this.findEntity(handle) !== undefined;
20
+ }
21
+ getCoords(handle) {
22
+ const entity = this.findEntity(handle);
23
+ if (!entity)
24
+ return { x: 0, y: 0, z: 0 };
25
+ return { x: entity.position.x, y: entity.position.y, z: entity.position.z };
26
+ }
27
+ setPosition(handle, position, _options) {
28
+ // TODO: Handle options like keepAlive, clearArea, platformOpts and extract flags from platformOptions
29
+ const entity = this.findEntity(handle);
30
+ if (!entity)
31
+ return;
32
+ entity.position = new mp.Vector3(position.x, position.y, position.z);
33
+ }
34
+ /**
35
+ * @deprecated Use setPosition() for cross-platform compatibility.
36
+ */
37
+ setCoords(handle, x, y, z) {
38
+ this.setPosition(handle, { x, y, z });
39
+ }
40
+ getHeading(handle) {
41
+ const player = mp.players.at(handle);
42
+ return (player && mp.players.exists(player)) ? player.heading : 0;
43
+ }
44
+ setHeading(handle, heading) {
45
+ const player = mp.players.at(handle);
46
+ if (player && mp.players.exists(player)) {
47
+ player.heading = heading;
48
+ }
49
+ }
50
+ getModel(handle) {
51
+ return this.findEntity(handle)?.model ?? 0;
52
+ }
53
+ delete(handle) {
54
+ this.findEntity(handle)?.destroy();
55
+ }
56
+ setOrphanMode(_handle, _mode) {
57
+ // Not applicable in RageMP — entities are always managed by the server.
58
+ }
59
+ setDimension(handle, dimension) {
60
+ const entity = this.findEntity(handle);
61
+ if (entity)
62
+ entity.dimension = dimension;
63
+ }
64
+ getDimension(handle) {
65
+ return this.findEntity(handle)?.dimension ?? 0;
66
+ }
67
+ getStateBag(handle) {
68
+ const entity = this.findEntity(handle);
69
+ return {
70
+ set: (key, value) => {
71
+ entity?.setVariable(key, value);
72
+ },
73
+ get: (key) => {
74
+ return entity?.getVariable(key);
75
+ },
76
+ };
77
+ }
78
+ getHealth(handle) {
79
+ const player = mp.players.at(handle);
80
+ if (player && mp.players.exists(player))
81
+ return player.health;
82
+ return this.findEntity(handle)?.getVariable('health') ?? 200;
83
+ }
84
+ setHealth(handle, health) {
85
+ const player = mp.players.at(handle);
86
+ if (player && mp.players.exists(player)) {
87
+ player.health = health;
88
+ return;
89
+ }
90
+ this.findEntity(handle)?.setVariable('health', health);
91
+ }
92
+ getArmor(handle) {
93
+ const player = mp.players.at(handle);
94
+ if (player && mp.players.exists(player))
95
+ return player.armour;
96
+ return this.findEntity(handle)?.getVariable('armor') ?? 0;
97
+ }
98
+ setArmor(handle, armor) {
99
+ const player = mp.players.at(handle);
100
+ if (player && mp.players.exists(player)) {
101
+ player.armour = armor;
102
+ return;
103
+ }
104
+ this.findEntity(handle)?.setVariable('armor', armor);
105
+ }
106
+ findEntity(id) {
107
+ const player = mp.players.at(id);
108
+ if (player && mp.players.exists(player))
109
+ return player;
110
+ const vehicle = mp.vehicles.at(id);
111
+ if (vehicle && mp.vehicles.exists(vehicle))
112
+ return vehicle;
113
+ const ped = mp.peds.at(id);
114
+ if (ped && mp.peds.exists(ped))
115
+ return ped;
116
+ return undefined;
117
+ }
118
+ };
119
+ exports.RageMPEntityServer = RageMPEntityServer;
120
+ exports.RageMPEntityServer = RageMPEntityServer = __decorate([
121
+ (0, tsyringe_1.injectable)()
122
+ ], RageMPEntityServer);
@@ -0,0 +1,7 @@
1
+ import { IExports, IResourceInfo } from '@open-core/framework/contracts/server';
2
+ export declare class RageMPExports extends IExports {
3
+ private readonly resourceInfo;
4
+ constructor(resourceInfo: IResourceInfo);
5
+ register(exportName: string, handler: (...args: readonly unknown[]) => unknown): void;
6
+ getResource<T = unknown>(resourceName: string): T | undefined;
7
+ }
@@ -0,0 +1,36 @@
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
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.RageMPExports = void 0;
16
+ const tsyringe_1 = require("tsyringe");
17
+ const server_1 = require("@open-core/framework/contracts/server");
18
+ const exports_registry_1 = require("../shared/exports-registry");
19
+ let RageMPExports = class RageMPExports extends server_1.IExports {
20
+ constructor(resourceInfo) {
21
+ super();
22
+ this.resourceInfo = resourceInfo;
23
+ }
24
+ register(exportName, handler) {
25
+ exports_registry_1.exportsRegistry.register(this.resourceInfo.getCurrentResourceName(), exportName, handler);
26
+ }
27
+ getResource(resourceName) {
28
+ return exports_registry_1.exportsRegistry.resourceProxy(resourceName);
29
+ }
30
+ };
31
+ exports.RageMPExports = RageMPExports;
32
+ exports.RageMPExports = RageMPExports = __decorate([
33
+ (0, tsyringe_1.injectable)(),
34
+ __param(0, (0, tsyringe_1.inject)(server_1.IResourceInfo)),
35
+ __metadata("design:paramtypes", [server_1.IResourceInfo])
36
+ ], RageMPExports);
@@ -0,0 +1,7 @@
1
+ import { IHasher } from '@open-core/framework/contracts/server';
2
+ /**
3
+ * Rage Multiplayer implementation of hash utilities.
4
+ */
5
+ export declare class RageMPHasher extends IHasher {
6
+ getHashKey(str: string): number;
7
+ }
@@ -0,0 +1,23 @@
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.RageMPHasher = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const server_1 = require("@open-core/framework/contracts/server");
12
+ /**
13
+ * Rage Multiplayer implementation of hash utilities.
14
+ */
15
+ let RageMPHasher = class RageMPHasher extends server_1.IHasher {
16
+ getHashKey(str) {
17
+ return mp.joaat(str);
18
+ }
19
+ };
20
+ exports.RageMPHasher = RageMPHasher;
21
+ exports.RageMPHasher = RageMPHasher = __decorate([
22
+ (0, tsyringe_1.injectable)()
23
+ ], RageMPHasher);
@@ -0,0 +1,9 @@
1
+ import { IEntityServer, INpcLifecycleServer, IPedServer } from '@open-core/framework/contracts/server';
2
+ import type { CreateNpcServerRequest, CreateNpcServerResult, DeleteNpcServerRequest } from '@open-core/framework/contracts/server';
3
+ export declare class RageMPNpcLifecycleServer extends INpcLifecycleServer {
4
+ private readonly pedServer;
5
+ private readonly entityServer;
6
+ constructor(pedServer: IPedServer, entityServer: IEntityServer);
7
+ create(request: CreateNpcServerRequest): CreateNpcServerResult;
8
+ delete(request: DeleteNpcServerRequest): void;
9
+ }
@@ -0,0 +1,51 @@
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
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.RageMPNpcLifecycleServer = void 0;
16
+ const tsyringe_1 = require("tsyringe");
17
+ const server_1 = require("@open-core/framework/contracts/server");
18
+ let RageMPNpcLifecycleServer = class RageMPNpcLifecycleServer extends server_1.INpcLifecycleServer {
19
+ constructor(pedServer, entityServer) {
20
+ super();
21
+ this.pedServer = pedServer;
22
+ this.entityServer = entityServer;
23
+ }
24
+ create(request) {
25
+ const handle = this.pedServer.create(4, request.modelHash, request.position.x, request.position.y, request.position.z, request.heading, request.networked);
26
+ if (!Number.isFinite(handle) || handle < 0) {
27
+ throw new Error('Failed to create NPC ped entity');
28
+ }
29
+ if (request.routingBucket !== undefined) {
30
+ this.entityServer.setDimension(handle, request.routingBucket);
31
+ }
32
+ if (request.persistent) {
33
+ this.entityServer.setOrphanMode(handle, 2);
34
+ }
35
+ const netId = request.networked ? this.pedServer.getNetworkIdFromEntity(handle) : undefined;
36
+ return { handle, netId: netId && netId > 0 ? netId : undefined };
37
+ }
38
+ delete(request) {
39
+ if (!this.entityServer.doesExist(request.handle))
40
+ return;
41
+ this.pedServer.delete(request.handle);
42
+ }
43
+ };
44
+ exports.RageMPNpcLifecycleServer = RageMPNpcLifecycleServer;
45
+ exports.RageMPNpcLifecycleServer = RageMPNpcLifecycleServer = __decorate([
46
+ (0, tsyringe_1.injectable)(),
47
+ __param(0, (0, tsyringe_1.inject)(server_1.IPedServer)),
48
+ __param(1, (0, tsyringe_1.inject)(server_1.IEntityServer)),
49
+ __metadata("design:paramtypes", [server_1.IPedServer,
50
+ server_1.IEntityServer])
51
+ ], RageMPNpcLifecycleServer);
@@ -0,0 +1,8 @@
1
+ import { IPedServer } from '@open-core/framework/contracts/server';
2
+ export declare class RageMPPedServer extends IPedServer {
3
+ create(_pedType: number, modelHash: number, x: number, y: number, z: number, heading: number, _networked: boolean): number;
4
+ delete(handle: number): void;
5
+ getNetworkIdFromEntity(handle: number): number;
6
+ getEntityFromNetworkId(networkId: number): number;
7
+ networkIdExists(networkId: number): boolean;
8
+ }
@@ -0,0 +1,37 @@
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.RageMPPedServer = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const server_1 = require("@open-core/framework/contracts/server");
12
+ let RageMPPedServer = class RageMPPedServer extends server_1.IPedServer {
13
+ create(_pedType, modelHash, x, y, z, heading, _networked) {
14
+ const ped = mp.peds.new(modelHash, new mp.Vector3(x, y, z), { heading });
15
+ return ped.id;
16
+ }
17
+ delete(handle) {
18
+ mp.peds.at(handle).destroy();
19
+ }
20
+ getNetworkIdFromEntity(handle) {
21
+ if (!mp.peds.exists(handle))
22
+ return 0;
23
+ return mp.peds.at(handle).id;
24
+ }
25
+ getEntityFromNetworkId(networkId) {
26
+ if (!mp.peds.exists(networkId))
27
+ return 0;
28
+ return mp.peds.at(networkId).id;
29
+ }
30
+ networkIdExists(networkId) {
31
+ return mp.peds.exists(networkId);
32
+ }
33
+ };
34
+ exports.RageMPPedServer = RageMPPedServer;
35
+ exports.RageMPPedServer = RageMPPedServer = __decorate([
36
+ (0, tsyringe_1.injectable)()
37
+ ], RageMPPedServer);
@@ -0,0 +1,19 @@
1
+ import { EventsAPI } from '@open-core/framework/contracts';
2
+ import { Players } from '@open-core/framework/server';
3
+ import { IPlayerServer } from '@open-core/framework/contracts/server';
4
+ import { IPlayerAppearanceLifecycleServer } from '@open-core/framework/contracts/server';
5
+ import type { PlayerAppearance } from '@open-core/framework';
6
+ export declare class RageMPPlayerAppearanceLifecycleServer extends IPlayerAppearanceLifecycleServer {
7
+ private readonly events;
8
+ private readonly players;
9
+ private readonly playerServer;
10
+ constructor(events: EventsAPI<'server'>, players: Players, playerServer: IPlayerServer);
11
+ apply(playerSrc: string, appearance: PlayerAppearance): {
12
+ success: boolean;
13
+ appearance?: PlayerAppearance;
14
+ errors?: string[];
15
+ };
16
+ applyClothing(playerSrc: string, appearance: Pick<PlayerAppearance, 'components' | 'props'>): boolean;
17
+ reset(playerSrc: string): boolean;
18
+ private resolveTarget;
19
+ }
@@ -0,0 +1,66 @@
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
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.RageMPPlayerAppearanceLifecycleServer = void 0;
16
+ const tsyringe_1 = require("tsyringe");
17
+ const contracts_1 = require("@open-core/framework/contracts");
18
+ const server_1 = require("@open-core/framework/server");
19
+ const server_2 = require("@open-core/framework/contracts/server");
20
+ const server_3 = require("@open-core/framework/contracts/server");
21
+ let RageMPPlayerAppearanceLifecycleServer = class RageMPPlayerAppearanceLifecycleServer extends server_3.IPlayerAppearanceLifecycleServer {
22
+ constructor(events, players, playerServer) {
23
+ super();
24
+ this.events = events;
25
+ this.players = players;
26
+ this.playerServer = playerServer;
27
+ }
28
+ apply(playerSrc, appearance) {
29
+ const target = this.resolveTarget(playerSrc);
30
+ if (!target) {
31
+ return { success: false, errors: ['Player not found'] };
32
+ }
33
+ if (appearance.model) {
34
+ this.playerServer.setModel(playerSrc, appearance.model);
35
+ }
36
+ this.events.emit('opencore:appearance:apply', target, appearance);
37
+ return { success: true, appearance };
38
+ }
39
+ applyClothing(playerSrc, appearance) {
40
+ const target = this.resolveTarget(playerSrc);
41
+ if (!target)
42
+ return false;
43
+ this.events.emit('opencore:appearance:apply', target, appearance);
44
+ return true;
45
+ }
46
+ reset(playerSrc) {
47
+ const target = this.resolveTarget(playerSrc);
48
+ if (!target)
49
+ return false;
50
+ this.events.emit('opencore:appearance:reset', target);
51
+ return true;
52
+ }
53
+ resolveTarget(playerSrc) {
54
+ return this.players.getByClient(Number(playerSrc));
55
+ }
56
+ };
57
+ exports.RageMPPlayerAppearanceLifecycleServer = RageMPPlayerAppearanceLifecycleServer;
58
+ exports.RageMPPlayerAppearanceLifecycleServer = RageMPPlayerAppearanceLifecycleServer = __decorate([
59
+ (0, tsyringe_1.injectable)(),
60
+ __param(0, (0, tsyringe_1.inject)(contracts_1.EventsAPI)),
61
+ __param(1, (0, tsyringe_1.inject)(server_1.Players)),
62
+ __param(2, (0, tsyringe_1.inject)(server_2.IPlayerServer)),
63
+ __metadata("design:paramtypes", [contracts_1.EventsAPI,
64
+ server_1.Players,
65
+ server_2.IPlayerServer])
66
+ ], RageMPPlayerAppearanceLifecycleServer);
@@ -0,0 +1,7 @@
1
+ import { IPlayerLifecycleServer, type RespawnPlayerRequest, type SpawnPlayerRequest, type TeleportPlayerRequest } from '@open-core/framework/contracts/server';
2
+ export declare class RageMPPlayerLifecycleServer extends IPlayerLifecycleServer {
3
+ private player;
4
+ spawn(playerSrc: string, request: SpawnPlayerRequest): void;
5
+ teleport(playerSrc: string, request: TeleportPlayerRequest): void;
6
+ respawn(playerSrc: string, request: RespawnPlayerRequest): void;
7
+ }
@@ -0,0 +1,40 @@
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.RageMPPlayerLifecycleServer = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const server_1 = require("@open-core/framework/contracts/server");
12
+ let RageMPPlayerLifecycleServer = class RageMPPlayerLifecycleServer extends server_1.IPlayerLifecycleServer {
13
+ player(playerSrc) {
14
+ return mp.players.at(Number(playerSrc));
15
+ }
16
+ spawn(playerSrc, request) {
17
+ const player = this.player(playerSrc);
18
+ if (request.model) {
19
+ player.model = mp.joaat(request.model);
20
+ }
21
+ player.spawn(new mp.Vector3(request.position.x, request.position.y, request.position.z));
22
+ if (typeof request.heading === 'number') {
23
+ player.heading = request.heading;
24
+ }
25
+ }
26
+ teleport(playerSrc, request) {
27
+ const player = this.player(playerSrc);
28
+ player.position = new mp.Vector3(request.position.x, request.position.y, request.position.z);
29
+ if (typeof request.heading === 'number') {
30
+ player.heading = request.heading;
31
+ }
32
+ }
33
+ respawn(playerSrc, request) {
34
+ this.spawn(playerSrc, request);
35
+ }
36
+ };
37
+ exports.RageMPPlayerLifecycleServer = RageMPPlayerLifecycleServer;
38
+ exports.RageMPPlayerLifecycleServer = RageMPPlayerLifecycleServer = __decorate([
39
+ (0, tsyringe_1.injectable)()
40
+ ], RageMPPlayerLifecycleServer);
@@ -0,0 +1,20 @@
1
+ import { IPlayerServer } from '@open-core/framework/contracts/server';
2
+ import { type PlayerIdentifier } from '@open-core/framework/contracts';
3
+ /**
4
+ * Rage Multiplayer implementation of server-side player operations.
5
+ */
6
+ export declare class RageMPPlayerServer extends IPlayerServer {
7
+ private player;
8
+ getPed(playerSrc: string): number;
9
+ drop(playerSrc: string, reason: string): void;
10
+ setModel(playerSrc: string, model: string): void;
11
+ getIdentifier(playerSrc: string, identifierType: string): string | undefined;
12
+ getPlayerIdentifiers(playerSrc: string): PlayerIdentifier[];
13
+ getNumIdentifiers(playerSrc: string): number;
14
+ getName(playerSrc: string): string;
15
+ getPing(playerSrc: string): number;
16
+ getEndpoint(playerSrc: string): string;
17
+ setDimension(playerSrc: string, dimension: number): void;
18
+ getDimension(playerSrc: string): number;
19
+ getConnectedPlayers(): string[];
20
+ }
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.RageMPPlayerServer = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const server_1 = require("@open-core/framework/contracts/server");
12
+ const contracts_1 = require("@open-core/framework/contracts");
13
+ /**
14
+ * Rage Multiplayer implementation of server-side player operations.
15
+ */
16
+ let RageMPPlayerServer = class RageMPPlayerServer extends server_1.IPlayerServer {
17
+ player(playerSrc) {
18
+ return mp.players.at(Number(playerSrc));
19
+ }
20
+ getPed(playerSrc) {
21
+ return this.player(playerSrc).id;
22
+ }
23
+ drop(playerSrc, reason) {
24
+ this.player(playerSrc).kick(reason);
25
+ }
26
+ setModel(playerSrc, model) {
27
+ this.player(playerSrc).model = mp.joaat(model);
28
+ }
29
+ getIdentifier(playerSrc, identifierType) {
30
+ const player = this.player(playerSrc);
31
+ switch (identifierType) {
32
+ case contracts_1.IdentifierTypes.ROCKSTAR:
33
+ return player.rgscId ? `rockstar:${player.rgscId}` : undefined;
34
+ case contracts_1.IdentifierTypes.IP:
35
+ return player.ip ? `ip:${player.ip}` : undefined;
36
+ case contracts_1.IdentifierTypes.HWID:
37
+ return player.serial ? `hwid:${player.serial}` : undefined;
38
+ default:
39
+ return undefined;
40
+ }
41
+ }
42
+ getPlayerIdentifiers(playerSrc) {
43
+ const player = this.player(playerSrc);
44
+ const identifiers = [];
45
+ if (player.rgscId) {
46
+ identifiers.push({
47
+ type: contracts_1.IdentifierTypes.ROCKSTAR,
48
+ value: player.rgscId,
49
+ raw: `rockstar:${player.rgscId}`,
50
+ });
51
+ }
52
+ if (player.ip) {
53
+ identifiers.push({ type: contracts_1.IdentifierTypes.IP, value: player.ip, raw: `ip:${player.ip}` });
54
+ }
55
+ if (player.serial) {
56
+ identifiers.push({
57
+ type: contracts_1.IdentifierTypes.HWID,
58
+ value: player.serial,
59
+ raw: `hwid:${player.serial}`,
60
+ });
61
+ }
62
+ return identifiers;
63
+ }
64
+ getNumIdentifiers(playerSrc) {
65
+ return this.getPlayerIdentifiers(playerSrc).length;
66
+ }
67
+ getName(playerSrc) {
68
+ return this.player(playerSrc).name || 'Unknown';
69
+ }
70
+ getPing(playerSrc) {
71
+ return this.player(playerSrc).ping;
72
+ }
73
+ getEndpoint(playerSrc) {
74
+ return this.player(playerSrc).ip || '';
75
+ }
76
+ setDimension(playerSrc, dimension) {
77
+ this.player(playerSrc).dimension = dimension;
78
+ }
79
+ getDimension(playerSrc) {
80
+ return this.player(playerSrc).dimension;
81
+ }
82
+ getConnectedPlayers() {
83
+ return mp.players.toArray().map((p) => String(p.id));
84
+ }
85
+ };
86
+ exports.RageMPPlayerServer = RageMPPlayerServer;
87
+ exports.RageMPPlayerServer = RageMPPlayerServer = __decorate([
88
+ (0, tsyringe_1.injectable)()
89
+ ], RageMPPlayerServer);
@@ -0,0 +1,7 @@
1
+ import { IPlayerStateSyncServer } from '@open-core/framework/contracts/server';
2
+ export declare class RageMPPlayerStateSyncServer extends IPlayerStateSyncServer {
3
+ getHealth(playerSrc: string): number;
4
+ setHealth(playerSrc: string, health: number): void;
5
+ getArmor(playerSrc: string): number;
6
+ setArmor(playerSrc: string, armor: number): void;
7
+ }
@@ -0,0 +1,29 @@
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.RageMPPlayerStateSyncServer = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const server_1 = require("@open-core/framework/contracts/server");
12
+ let RageMPPlayerStateSyncServer = class RageMPPlayerStateSyncServer extends server_1.IPlayerStateSyncServer {
13
+ getHealth(playerSrc) {
14
+ return mp.players.at(Number(playerSrc)).health;
15
+ }
16
+ setHealth(playerSrc, health) {
17
+ mp.players.at(Number(playerSrc)).health = health;
18
+ }
19
+ getArmor(playerSrc) {
20
+ return mp.players.at(Number(playerSrc)).armour;
21
+ }
22
+ setArmor(playerSrc, armor) {
23
+ mp.players.at(Number(playerSrc)).armour = armor;
24
+ }
25
+ };
26
+ exports.RageMPPlayerStateSyncServer = RageMPPlayerStateSyncServer;
27
+ exports.RageMPPlayerStateSyncServer = RageMPPlayerStateSyncServer = __decorate([
28
+ (0, tsyringe_1.injectable)()
29
+ ], RageMPPlayerStateSyncServer);
@@ -0,0 +1,6 @@
1
+ import { IPlayerInfo } from '@open-core/framework/contracts/server';
2
+ import { Vector3 } from '@open-core/framework/kernel';
3
+ export declare class RageMPPlayerInfo implements IPlayerInfo {
4
+ getPlayerName(clientId: number): string | null;
5
+ getPlayerPosition(clientId: number): Vector3;
6
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RageMPPlayerInfo = void 0;
4
+ class RageMPPlayerInfo {
5
+ getPlayerName(clientId) {
6
+ const player = mp.players.at(clientId);
7
+ if (!player || !mp.players.exists(player))
8
+ return null;
9
+ return player.name ?? null;
10
+ }
11
+ getPlayerPosition(clientId) {
12
+ const player = mp.players.at(clientId);
13
+ if (!player || !mp.players.exists(player))
14
+ return { x: 0, y: 0, z: 0 };
15
+ const pos = player.position;
16
+ return { x: pos.x, y: pos.y, z: pos.z };
17
+ }
18
+ }
19
+ exports.RageMPPlayerInfo = RageMPPlayerInfo;
@@ -0,0 +1,5 @@
1
+ import { IResourceInfo } from '@open-core/framework/contracts/server';
2
+ export declare class RageMPResourceInfo extends IResourceInfo {
3
+ getCurrentResourceName(): string;
4
+ getCurrentResourcePath(): string;
5
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RageMPResourceInfo = void 0;
4
+ const server_1 = require("@open-core/framework/contracts/server");
5
+ class RageMPResourceInfo extends server_1.IResourceInfo {
6
+ getCurrentResourceName() {
7
+ if (typeof __dirname !== 'string')
8
+ return 'default';
9
+ const normalized = __dirname.replace(/\\/g, '/');
10
+ const parts = normalized.split('/');
11
+ // RageMP server scripts live under packages/<resourceName>/...
12
+ const packagesIndex = parts.lastIndexOf('packages');
13
+ if (packagesIndex !== -1 && parts[packagesIndex + 1]) {
14
+ return parts[packagesIndex + 1];
15
+ }
16
+ // fallback: last folder segment
17
+ return parts[parts.length - 1] || 'default';
18
+ }
19
+ getCurrentResourcePath() {
20
+ if (typeof __dirname === 'string')
21
+ return __dirname;
22
+ return process.cwd();
23
+ }
24
+ }
25
+ exports.RageMPResourceInfo = RageMPResourceInfo;