@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,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.enableRageMPNativeChat = enableRageMPNativeChat;
4
+ const nativeChatGlobal = globalThis;
5
+ const CHAT_TYPE_COLORS = {
6
+ chat: { r: 255, g: 255, b: 255 },
7
+ error: { r: 224, g: 62, b: 62 },
8
+ success: { r: 88, g: 196, b: 110 },
9
+ warning: { r: 232, g: 181, b: 55 },
10
+ };
11
+ function toHex(color) {
12
+ const part = (value) => Math.max(0, Math.min(255, value)).toString(16).padStart(2, '0');
13
+ return `${part(color.r)}${part(color.g)}${part(color.b)}`;
14
+ }
15
+ function pushNativeChatLine(text, color) {
16
+ try {
17
+ mp.gui.chat.activate(true);
18
+ mp.gui.chat.show(true);
19
+ mp.gui.chat.push(`!{${toHex(color)}}${text}`);
20
+ }
21
+ catch {
22
+ // Ignore chat output when RageMP chat runtime is not ready yet.
23
+ }
24
+ }
25
+ function formatPayload(payload) {
26
+ const [author, message] = payload.args ?? ['SYSTEM', ''];
27
+ return {
28
+ text: author ? `${author}: ${message}` : String(message),
29
+ color: payload.color ?? CHAT_TYPE_COLORS.chat,
30
+ };
31
+ }
32
+ function enableRageMPNativeChat(events) {
33
+ if (nativeChatGlobal.__OPENCORE_RAGEMP_NATIVE_CHAT_ENABLED__)
34
+ return;
35
+ nativeChatGlobal.__OPENCORE_RAGEMP_NATIVE_CHAT_ENABLED__ = true;
36
+ events.on('core:chat:addMessage', (_ctx, payload) => {
37
+ const { text, color } = formatPayload(payload);
38
+ pushNativeChatLine(text, color);
39
+ });
40
+ events.on('core:chat:message', (_ctx, payload) => {
41
+ const { text, color } = formatPayload(payload);
42
+ pushNativeChatLine(text, color);
43
+ });
44
+ events.on('core:chat:send', (_ctx, message, type = 'chat') => {
45
+ pushNativeChatLine(message, CHAT_TYPE_COLORS[type] ?? CHAT_TYPE_COLORS.chat);
46
+ });
47
+ events.on('core:chat:clear', () => {
48
+ // RageMP native chat has no public clear API.
49
+ });
50
+ }
@@ -0,0 +1,12 @@
1
+ import { IClientBlipBridge, type ClientBlipDefinition } from '@open-core/framework/contracts/client';
2
+ export declare class RageMPClientBlipBridge extends IClientBlipBridge {
3
+ private readonly blips;
4
+ private readonly definitions;
5
+ create(id: string, definition: ClientBlipDefinition): void;
6
+ update(id: string, patch: Partial<ClientBlipDefinition>): boolean;
7
+ exists(id: string): boolean;
8
+ remove(id: string): boolean;
9
+ clear(): void;
10
+ private createRef;
11
+ private apply;
12
+ }
@@ -0,0 +1,139 @@
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.RageMPClientBlipBridge = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const client_1 = require("@open-core/framework/contracts/client");
12
+ function toVector3(position) {
13
+ return new mp.Vector3(position.x, position.y, position.z);
14
+ }
15
+ let RageMPClientBlipBridge = class RageMPClientBlipBridge extends client_1.IClientBlipBridge {
16
+ constructor() {
17
+ super(...arguments);
18
+ this.blips = new Map();
19
+ this.definitions = new Map();
20
+ }
21
+ create(id, definition) {
22
+ this.remove(id);
23
+ const ref = this.createRef(definition);
24
+ if (!ref)
25
+ return;
26
+ this.blips.set(id, ref);
27
+ this.definitions.set(id, { ...definition });
28
+ this.apply(id, definition);
29
+ }
30
+ update(id, patch) {
31
+ const current = this.definitions.get(id);
32
+ if (!current)
33
+ return false;
34
+ const next = { ...current, ...patch };
35
+ const changedAnchor = patch.position !== undefined || patch.entity !== undefined || patch.radius !== undefined;
36
+ if (changedAnchor) {
37
+ this.create(id, next);
38
+ return this.exists(id);
39
+ }
40
+ this.definitions.set(id, next);
41
+ this.apply(id, next);
42
+ return true;
43
+ }
44
+ exists(id) {
45
+ return this.blips.has(id);
46
+ }
47
+ remove(id) {
48
+ const ref = this.blips.get(id);
49
+ if (!ref)
50
+ return false;
51
+ if (ref.kind === 'mp')
52
+ ref.blip.destroy();
53
+ else
54
+ mp.game.ui.removeBlip(ref.handle);
55
+ this.blips.delete(id);
56
+ this.definitions.delete(id);
57
+ return true;
58
+ }
59
+ clear() {
60
+ for (const id of this.blips.keys())
61
+ this.remove(id);
62
+ }
63
+ createRef(definition) {
64
+ if (definition.entity !== undefined) {
65
+ return { kind: 'native', handle: mp.game.ui.addBlipForEntity(definition.entity) };
66
+ }
67
+ if (definition.radius !== undefined && definition.position) {
68
+ return {
69
+ kind: 'native',
70
+ handle: mp.game.ui.addBlipForRadius(definition.position.x, definition.position.y, definition.position.z, definition.radius),
71
+ };
72
+ }
73
+ if (!definition.position)
74
+ return null;
75
+ return {
76
+ kind: 'mp',
77
+ blip: mp.blips.new(definition.icon ?? 1, toVector3(definition.position), {
78
+ color: definition.color,
79
+ scale: definition.scale,
80
+ shortRange: definition.shortRange,
81
+ name: definition.label,
82
+ alpha: definition.alpha,
83
+ }),
84
+ };
85
+ }
86
+ apply(id, definition) {
87
+ const ref = this.blips.get(id);
88
+ if (!ref)
89
+ return;
90
+ if (ref.kind === 'mp') {
91
+ if (definition.position)
92
+ ref.blip.setCoords(toVector3(definition.position));
93
+ if (definition.icon !== undefined)
94
+ ref.blip.setSprite(definition.icon);
95
+ if (definition.color !== undefined)
96
+ ref.blip.setColour(definition.color);
97
+ if (definition.scale !== undefined)
98
+ ref.blip.setScale(definition.scale);
99
+ if (definition.shortRange !== undefined)
100
+ ref.blip.setAsShortRange(definition.shortRange);
101
+ if (definition.route !== undefined)
102
+ ref.blip.setRoute(definition.route);
103
+ if (definition.routeColor !== undefined)
104
+ ref.blip.setRouteColour(definition.routeColor);
105
+ if (definition.alpha !== undefined)
106
+ ref.blip.setAlpha(definition.alpha);
107
+ if (definition.visible !== undefined)
108
+ ref.blip.setDisplay(definition.visible ? 4 : 0);
109
+ if (definition.label) {
110
+ ;
111
+ ref.blip.name = definition.label;
112
+ }
113
+ return;
114
+ }
115
+ const handle = ref.handle;
116
+ if (definition.position)
117
+ mp.game.ui.setBlipCoords(handle, definition.position.x, definition.position.y, definition.position.z);
118
+ if (definition.icon !== undefined)
119
+ mp.game.ui.setBlipSprite(handle, definition.icon);
120
+ if (definition.color !== undefined)
121
+ mp.game.ui.setBlipColour(handle, definition.color);
122
+ if (definition.scale !== undefined)
123
+ mp.game.ui.setBlipScale(handle, definition.scale);
124
+ if (definition.shortRange !== undefined)
125
+ mp.game.ui.setBlipAsShortRange(handle, definition.shortRange);
126
+ if (definition.route !== undefined)
127
+ mp.game.ui.setBlipRoute(handle, definition.route);
128
+ if (definition.routeColor !== undefined)
129
+ mp.game.ui.setBlipRouteColour(handle, definition.routeColor);
130
+ if (definition.alpha !== undefined)
131
+ mp.game.ui.setBlipAlpha(handle, definition.alpha);
132
+ if (definition.visible !== undefined)
133
+ mp.game.ui.setBlipDisplay(handle, definition.visible ? 4 : 0);
134
+ }
135
+ };
136
+ exports.RageMPClientBlipBridge = RageMPClientBlipBridge;
137
+ exports.RageMPClientBlipBridge = RageMPClientBlipBridge = __decorate([
138
+ (0, tsyringe_1.injectable)()
139
+ ], RageMPClientBlipBridge);
@@ -0,0 +1,4 @@
1
+ import { IHasher } from '@open-core/framework/contracts';
2
+ export declare class RageMPClientHasher extends IHasher {
3
+ getHashKey(str: string): number;
4
+ }
@@ -0,0 +1,20 @@
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.RageMPClientHasher = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const contracts_1 = require("@open-core/framework/contracts");
12
+ let RageMPClientHasher = class RageMPClientHasher extends contracts_1.IHasher {
13
+ getHashKey(str) {
14
+ return mp.game.joaat(str);
15
+ }
16
+ };
17
+ exports.RageMPClientHasher = RageMPClientHasher;
18
+ exports.RageMPClientHasher = RageMPClientHasher = __decorate([
19
+ (0, tsyringe_1.injectable)()
20
+ ], RageMPClientHasher);
@@ -0,0 +1,8 @@
1
+ import { IClientLocalPlayerBridge } from '@open-core/framework/contracts/client';
2
+ import type { Vector3 } from '@open-core/framework/kernel';
3
+ /**
4
+ * RAGE Multiplayer implementation of local player movement helpers.
5
+ */
6
+ export declare class RageMPLocalPlayerBridge extends IClientLocalPlayerBridge {
7
+ setPosition(position: Vector3, heading?: number): void;
8
+ }
@@ -0,0 +1,26 @@
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.RageMPLocalPlayerBridge = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const client_1 = require("@open-core/framework/contracts/client");
12
+ /**
13
+ * RAGE Multiplayer implementation of local player movement helpers.
14
+ */
15
+ let RageMPLocalPlayerBridge = class RageMPLocalPlayerBridge extends client_1.IClientLocalPlayerBridge {
16
+ setPosition(position, heading) {
17
+ mp.players.local.position = new mp.Vector3(position.x, position.y, position.z);
18
+ if (typeof heading === 'number') {
19
+ mp.players.local.heading = heading;
20
+ }
21
+ }
22
+ };
23
+ exports.RageMPLocalPlayerBridge = RageMPLocalPlayerBridge;
24
+ exports.RageMPLocalPlayerBridge = RageMPLocalPlayerBridge = __decorate([
25
+ (0, tsyringe_1.injectable)()
26
+ ], RageMPLocalPlayerBridge);
@@ -0,0 +1,11 @@
1
+ import { IClientLogConsole, type ClientLogConsoleCapabilities } from '@open-core/framework/contracts/client';
2
+ export declare class RageMPClientLogConsole extends IClientLogConsole {
3
+ getCapabilities(): ClientLogConsoleCapabilities;
4
+ trace(message: string, details?: unknown): void;
5
+ debug(message: string, details?: unknown): void;
6
+ info(message: string, details?: unknown): void;
7
+ warn(message: string, details?: unknown): void;
8
+ error(message: string, details?: unknown): void;
9
+ private write;
10
+ }
11
+ export declare function installRageMPClientLogConsole(logConsole: IClientLogConsole): void;
@@ -0,0 +1,75 @@
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.RageMPClientLogConsole = void 0;
10
+ exports.installRageMPClientLogConsole = installRageMPClientLogConsole;
11
+ const tsyringe_1 = require("tsyringe");
12
+ const client_1 = require("@open-core/framework/contracts/client");
13
+ const kernel_1 = require("@open-core/framework/kernel");
14
+ const RAGEMP_CLIENT_LOG_CAPABILITIES = {
15
+ supportsColors: false,
16
+ supportsStructuredData: false,
17
+ supportsRichFormatting: false,
18
+ };
19
+ function stringifyDetails(details) {
20
+ if (details === undefined)
21
+ return '';
22
+ if (typeof details === 'string')
23
+ return details;
24
+ try {
25
+ return JSON.stringify(details);
26
+ }
27
+ catch {
28
+ return String(details);
29
+ }
30
+ }
31
+ let RageMPClientLogConsole = class RageMPClientLogConsole extends client_1.IClientLogConsole {
32
+ getCapabilities() {
33
+ return RAGEMP_CLIENT_LOG_CAPABILITIES;
34
+ }
35
+ trace(message, details) {
36
+ this.write('logInfo', `[TRACE] ${message}`, details);
37
+ }
38
+ debug(message, details) {
39
+ this.write('logInfo', `[DEBUG] ${message}`, details);
40
+ }
41
+ info(message, details) {
42
+ this.write('logInfo', message, details);
43
+ }
44
+ warn(message, details) {
45
+ this.write('logWarning', message, details);
46
+ }
47
+ error(message, details) {
48
+ this.write('logError', message, details);
49
+ }
50
+ write(method, message, details) {
51
+ const suffix = stringifyDetails(details);
52
+ const output = suffix ? `${message} ${suffix}` : message;
53
+ try {
54
+ mp.console[method](output);
55
+ }
56
+ catch {
57
+ if (method === 'logError') {
58
+ console.error(output);
59
+ }
60
+ else if (method === 'logWarning') {
61
+ console.warn(output);
62
+ }
63
+ else {
64
+ console.info(output);
65
+ }
66
+ }
67
+ }
68
+ };
69
+ exports.RageMPClientLogConsole = RageMPClientLogConsole;
70
+ exports.RageMPClientLogConsole = RageMPClientLogConsole = __decorate([
71
+ (0, tsyringe_1.injectable)()
72
+ ], RageMPClientLogConsole);
73
+ function installRageMPClientLogConsole(logConsole) {
74
+ (0, kernel_1.setClientLogConsole)(logConsole);
75
+ }
@@ -0,0 +1,11 @@
1
+ import { IClientMarkerBridge, type ClientMarkerDefinition } from '@open-core/framework/contracts/client';
2
+ export declare class RageMPClientMarkerBridge extends IClientMarkerBridge {
3
+ private readonly markers;
4
+ constructor();
5
+ create(id: string, definition: ClientMarkerDefinition): void;
6
+ update(id: string, patch: Partial<ClientMarkerDefinition>): boolean;
7
+ remove(id: string): boolean;
8
+ exists(id: string): boolean;
9
+ clear(): void;
10
+ draw(definition: ClientMarkerDefinition): void;
11
+ }
@@ -0,0 +1,57 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RageMPClientMarkerBridge = void 0;
13
+ const tsyringe_1 = require("tsyringe");
14
+ const client_1 = require("@open-core/framework/contracts/client");
15
+ let RageMPClientMarkerBridge = class RageMPClientMarkerBridge extends client_1.IClientMarkerBridge {
16
+ constructor() {
17
+ super();
18
+ this.markers = new Map();
19
+ mp.events.add('render', () => {
20
+ for (const marker of this.markers.values()) {
21
+ if (marker.visible === false)
22
+ continue;
23
+ this.draw(marker);
24
+ }
25
+ });
26
+ }
27
+ create(id, definition) {
28
+ this.markers.set(id, { ...definition });
29
+ }
30
+ update(id, patch) {
31
+ const current = this.markers.get(id);
32
+ if (!current)
33
+ return false;
34
+ this.markers.set(id, { ...current, ...patch });
35
+ return true;
36
+ }
37
+ remove(id) {
38
+ return this.markers.delete(id);
39
+ }
40
+ exists(id) {
41
+ return this.markers.has(id);
42
+ }
43
+ clear() {
44
+ this.markers.clear();
45
+ }
46
+ draw(definition) {
47
+ const rotation = definition.rotation ?? { x: 0, y: 0, z: 0 };
48
+ const size = definition.size ?? definition.scale ?? { x: 1, y: 1, z: 1 };
49
+ const color = definition.color ?? { r: 255, g: 0, b: 0, a: 200 };
50
+ mp.game.graphics.drawMarker(definition.variant ?? definition.type ?? 1, definition.position.x, definition.position.y, definition.position.z, 0, 0, 0, rotation.x, rotation.y, rotation.z, size.x, size.y, size.z, color.r, color.g, color.b, color.a, definition.bob ?? definition.bobUpAndDown ?? false, definition.faceCamera ?? false, 2, definition.rotate ?? false, null, null, definition.drawOnEnts ?? false);
51
+ }
52
+ };
53
+ exports.RageMPClientMarkerBridge = RageMPClientMarkerBridge;
54
+ exports.RageMPClientMarkerBridge = RageMPClientMarkerBridge = __decorate([
55
+ (0, tsyringe_1.injectable)(),
56
+ __metadata("design:paramtypes", [])
57
+ ], RageMPClientMarkerBridge);
@@ -0,0 +1,5 @@
1
+ import { IClientNotificationBridge, type ClientNotificationDefinition } from '@open-core/framework/contracts/client';
2
+ export declare class RageMPClientNotificationBridge extends IClientNotificationBridge {
3
+ show(definition: ClientNotificationDefinition): void;
4
+ clear(scope?: 'help' | 'subtitle' | 'all'): void;
5
+ }
@@ -0,0 +1,70 @@
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.RageMPClientNotificationBridge = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const client_1 = require("@open-core/framework/contracts/client");
12
+ const ICON_MAP = {
13
+ info: 1,
14
+ success: 2,
15
+ warning: 3,
16
+ error: 4,
17
+ };
18
+ let RageMPClientNotificationBridge = class RageMPClientNotificationBridge extends client_1.IClientNotificationBridge {
19
+ show(definition) {
20
+ switch (definition.kind) {
21
+ case 'feed':
22
+ mp.game.ui.setNotificationTextEntry('STRING');
23
+ mp.game.ui.addTextComponentSubstringPlayerName(definition.message);
24
+ mp.game.ui.drawNotification(definition.blink ?? false, definition.saveToBrief ?? true);
25
+ return;
26
+ case 'typed':
27
+ mp.game.ui.beginTextCommandThefeedPost('STRING');
28
+ mp.game.ui.addTextComponentSubstringPlayerName(definition.message);
29
+ mp.game.ui.endTextCommandThefeedPostMessagetext('CHAR_SOCIAL_CLUB', 'CHAR_SOCIAL_CLUB', true, ICON_MAP[definition.type ?? 'info'], '', definition.message);
30
+ return;
31
+ case 'advanced':
32
+ mp.game.ui.setNotificationTextEntry('STRING');
33
+ mp.game.ui.addTextComponentSubstringPlayerName(definition.message);
34
+ mp.game.ui.setNotificationMessage('CHAR_HUMANDEFAULT', 'CHAR_HUMANDEFAULT', definition.flash ?? false, ICON_MAP[definition.type ?? 'info'], definition.title ?? '', definition.subtitle ?? '');
35
+ mp.game.ui.drawNotification(definition.flash ?? false, definition.saveToBrief ?? true);
36
+ return;
37
+ case 'help':
38
+ mp.game.ui.beginTextCommandDisplayHelp('STRING');
39
+ mp.game.ui.addTextComponentSubstringPlayerName(definition.message);
40
+ mp.game.ui.endTextCommandDisplayHelp(0, definition.looped ?? false, definition.beep ?? true, definition.duration ?? 5000);
41
+ return;
42
+ case 'subtitle':
43
+ mp.game.ui.beginTextCommandPrint('STRING');
44
+ mp.game.ui.addTextComponentSubstringPlayerName(definition.message);
45
+ mp.game.ui.endTextCommandPrint(definition.duration ?? 2500, true);
46
+ return;
47
+ case 'floating':
48
+ if (!definition.worldPosition)
49
+ return;
50
+ mp.game.ui.setFloatingHelpTextWorldPosition(1, definition.worldPosition.x, definition.worldPosition.y, definition.worldPosition.z);
51
+ mp.game.ui.setFloatingHelpTextStyle(1, 1, 2, -1, 3, 0);
52
+ mp.game.ui.beginTextCommandDisplayHelp('STRING');
53
+ mp.game.ui.addTextComponentSubstringPlayerName(definition.message);
54
+ mp.game.ui.endTextCommandDisplayHelp(2, false, false, -1);
55
+ return;
56
+ }
57
+ }
58
+ clear(scope) {
59
+ if (!scope || scope === 'all' || scope === 'help') {
60
+ mp.game.ui.clearAllHelpMessages();
61
+ }
62
+ if (!scope || scope === 'all' || scope === 'subtitle') {
63
+ mp.game.ui.clearPrints();
64
+ }
65
+ }
66
+ };
67
+ exports.RageMPClientNotificationBridge = RageMPClientNotificationBridge;
68
+ exports.RageMPClientNotificationBridge = RageMPClientNotificationBridge = __decorate([
69
+ (0, tsyringe_1.injectable)()
70
+ ], RageMPClientNotificationBridge);
@@ -0,0 +1,141 @@
1
+ import { IClientPlatformBridge, IGtaPedAppearanceBridge } from '@open-core/framework/contracts/client';
2
+ import type { Vector3 as CoreVector3 } from '@open-core/framework/kernel';
3
+ import type { HeadBlendData } from '@open-core/framework/kernel';
4
+ export declare class RageMPPedAppearanceClient extends IGtaPedAppearanceBridge {
5
+ setComponentVariation(ped: number, componentId: number, drawableId: number, textureId: number): void;
6
+ setPropIndex(ped: number, propId: number, drawableId: number, textureId: number): void;
7
+ clearProp(ped: number, propId: number): void;
8
+ setDefaultComponentVariation(ped: number): void;
9
+ setHeadBlendData(ped: number, data: HeadBlendData): void;
10
+ setFaceFeature(ped: number, index: number, scale: number): void;
11
+ setHeadOverlay(ped: number, overlayId: number, index: number, opacity: number): void;
12
+ setHeadOverlayColor(ped: number, overlayId: number, colorType: number, colorId: number, secondColorId: number): void;
13
+ setHairColor(ped: number, colorId: number, highlightColorId: number): void;
14
+ setEyeColor(ped: number, colorId: number): void;
15
+ addDecoration(ped: number, collectionHash: number, overlayHash: number): void;
16
+ clearDecorations(ped: number): void;
17
+ getDrawableVariation(ped: number, componentId: number): number;
18
+ getTextureVariation(ped: number, componentId: number): number;
19
+ getPropIndex(ped: number, propId: number): number;
20
+ getPropTextureIndex(ped: number, propId: number): number;
21
+ getNumDrawableVariations(ped: number, componentId: number): number;
22
+ getNumTextureVariations(ped: number, componentId: number, drawableId: number): number;
23
+ getNumPropDrawableVariations(ped: number, propId: number): number;
24
+ getNumPropTextureVariations(ped: number, propId: number, drawableId: number): number;
25
+ getNumOverlayValues(overlayId: number): number;
26
+ getNumHairColors(): number;
27
+ getNumMakeupColors(): number;
28
+ }
29
+ export declare class RageMPPlatformBridge extends IClientPlatformBridge {
30
+ private playerReady;
31
+ constructor();
32
+ getHashKey(value: string): number;
33
+ getLocalPlayerPed(): number;
34
+ getEntityCoords(entity: number): CoreVector3;
35
+ getWorldPositionOfEntityBone(entity: number, bone: number): CoreVector3;
36
+ getGameplayCamCoords(): CoreVector3;
37
+ worldToScreen(position: CoreVector3): {
38
+ onScreen: boolean;
39
+ x: number;
40
+ y: number;
41
+ };
42
+ isModelInCdimage(hash: number): boolean;
43
+ isModelValid(hash: number): boolean;
44
+ isModelAVehicle(hash: number): boolean;
45
+ isModelAPed(hash: number): boolean;
46
+ requestModel(hash: number): void;
47
+ hasModelLoaded(hash: number): boolean;
48
+ setModelAsNoLongerNeeded(hash: number): void;
49
+ requestAnimDict(dict: string): void;
50
+ hasAnimDictLoaded(dict: string): boolean;
51
+ removeAnimDict(dict: string): void;
52
+ doesEntityExist(entity: number): boolean;
53
+ setEntityAsMissionEntity(entity: number, mission: boolean, scriptHostObject: boolean): void;
54
+ setBlockingOfNonTemporaryEvents(ped: number, toggle: boolean): void;
55
+ setPedRelationshipGroupHash(ped: number, groupHash: number): void;
56
+ createPed(pedType: number, modelHash: number, position: CoreVector3, heading: number, networked: boolean, scriptHostPed: boolean): number;
57
+ deletePed(ped: number): void;
58
+ createObject(modelHash: number, position: CoreVector3, networked: boolean, dynamic: boolean, _placeOnGround: boolean): number;
59
+ deleteEntity(entity: number): void;
60
+ attachEntityToEntity(entity: number, target: number, boneIndex: number, offset: CoreVector3, rotation: CoreVector3): void;
61
+ getPedBoneIndex(ped: number, bone: number): number;
62
+ taskPlayAnim(ped: number, dict: string, anim: string, blendInSpeed: number, blendOutSpeed: number, duration: number, flags: number, playbackRate: number): void;
63
+ stopAnimTask(ped: number, dict: string, anim: string, blendOutSpeed: number): void;
64
+ clearPedTasks(ped: number): void;
65
+ clearPedTasksImmediately(ped: number): void;
66
+ freezeEntityPosition(entity: number, toggle: boolean): void;
67
+ setEntityInvincible(entity: number, toggle: boolean): void;
68
+ giveWeaponToPed(ped: number, weaponHash: number, ammoCount: number, _hidden: boolean, forceInHand: boolean): void;
69
+ removeAllPedWeapons(ped: number, _includeCurrentWeapon: boolean): void;
70
+ getClosestPed(position: CoreVector3, radius: number): number | null;
71
+ getNearbyPeds(position: CoreVector3, radius: number, excludeEntity?: number): number[];
72
+ taskLookAtEntity(ped: number, entity: number, duration: number): void;
73
+ taskLookAtCoord(ped: number, position: CoreVector3, duration: number): void;
74
+ taskGoStraightToCoord(ped: number, position: CoreVector3, speed: number): void;
75
+ setPedCombatAttributes(): void;
76
+ createVehicle(modelHash: number, position: CoreVector3, heading: number, networked: boolean, scriptHostVehicle: boolean): number;
77
+ deleteVehicle(vehicle: number): void;
78
+ setVehicleOnGroundProperly(vehicle: number): void;
79
+ getVehicleColours(vehicle: number): [number, number];
80
+ setVehicleColours(vehicle: number, primary: number, secondary: number): void;
81
+ setVehicleNumberPlateText(vehicle: number, plateText: string): void;
82
+ taskWarpPedIntoVehicle(ped: number, vehicle: number, seatIndex: number): void;
83
+ taskLeaveVehicle(ped: number, vehicle: number, flags: number): void;
84
+ getClosestVehicle(position: CoreVector3, radius: number): number | null;
85
+ isPedInAnyVehicle(ped: number): boolean;
86
+ getVehiclePedIsIn(ped: number, lastVehicle: boolean): number | null;
87
+ getPedInVehicleSeat(vehicle: number, seatIndex: number): number | null;
88
+ getEntitySpeed(entity: number): number;
89
+ networkGetNetworkIdFromEntity(entity: number): number;
90
+ networkDoesEntityExistWithNetworkId(networkId: number): boolean;
91
+ networkGetEntityFromNetworkId(networkId: number): number;
92
+ getEntityHeading(entity: number): number;
93
+ getEntityModel(entity: number): number;
94
+ setVehicleModKit(vehicle: number, kit: number): void;
95
+ setVehicleMod(vehicle: number, modType: number, modIndex: number, customTires: boolean): void;
96
+ toggleVehicleMod(vehicle: number, modType: number, toggle: boolean): void;
97
+ setVehicleWheelType(vehicle: number, wheelType: number): void;
98
+ setVehicleWindowTint(vehicle: number, tint: number): void;
99
+ setVehicleLivery(vehicle: number, livery: number): void;
100
+ setVehicleNumberPlateTextIndex(vehicle: number, index: number): void;
101
+ setVehicleNeonLightEnabled(vehicle: number, index: number, enabled: boolean): void;
102
+ setVehicleNeonLightsColour(vehicle: number, r: number, g: number, b: number): void;
103
+ setVehicleExtra(vehicle: number, extraId: number, disable: boolean): void;
104
+ getVehicleExtraColours(vehicle: number): [number, number];
105
+ setVehicleExtraColours(vehicle: number, pearl: number, wheel: number): void;
106
+ setVehicleFixed(vehicle: number): void;
107
+ setVehicleDeformationFixed(vehicle: number): void;
108
+ setVehicleUndriveable(vehicle: number, toggle: boolean): void;
109
+ setVehicleEngineOn(vehicle: number, value: boolean, instantly: boolean, disableAutoStart: boolean): void;
110
+ setVehicleEngineHealth(vehicle: number, health: number): void;
111
+ setVehiclePetrolTankHealth(vehicle: number, health: number): void;
112
+ setVehicleFuelLevel(_vehicle: number, _level: number): void;
113
+ getVehicleFuelLevel(_vehicle: number): number;
114
+ setVehicleDoorsLocked(vehicle: number, doorLockStatus: number): void;
115
+ setEntityHeading(entity: number, heading: number): void;
116
+ setEntityCoords(entity: number, position: CoreVector3): void;
117
+ setEntityCoordsNoOffset(entity: number, position: CoreVector3): void;
118
+ setEntityHealth(entity: number, health: number): void;
119
+ getEntityMaxHealth(entity: number): number;
120
+ setPedArmour(ped: number, armour: number): void;
121
+ networkIsSessionStarted(): boolean;
122
+ isScreenFadedOut(): boolean;
123
+ isScreenFadingOut(): boolean;
124
+ doScreenFadeOut(ms: number): void;
125
+ isScreenFadedIn(): boolean;
126
+ isScreenFadingIn(): boolean;
127
+ doScreenFadeIn(ms: number): void;
128
+ networkResurrectLocalPlayer(position: CoreVector3, heading: number): void;
129
+ playerId(): number;
130
+ setPlayerModel(_playerId: number, modelHash: number): void;
131
+ requestCollisionAtCoord(position: CoreVector3): void;
132
+ shutdownLoadingScreen(): void;
133
+ shutdownLoadingScreenNui(): void;
134
+ hasCollisionLoadedAroundEntity(_entity: number): boolean;
135
+ resetEntityAlpha(entity: number): void;
136
+ setEntityAlpha(entity: number, alphaLevel: number): void;
137
+ setEntityVisible(entity: number, toggle: boolean): void;
138
+ setEntityCollision(entity: number, toggle: boolean): void;
139
+ getVehicleNumberPlateText(vehicle: number): string;
140
+ requestScriptAudioBank(_bank: string, _networked: boolean): boolean;
141
+ }