rock-mod
Version:
Rock-Mod is a powerful framework designed for creating and managing mods for Grand Theft Auto (GTA) games.
55 lines (54 loc) • 2.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CCMPEventsManager = void 0;
const RockMod_1 = require("../../../RockMod");
class CCMPEventsManager {
onInternal(events) {
for (const eventName of Object.keys(events)) {
// @ts-expect-error mixed CCMP built-in + rm:: keys typing
ccmp.on(eventName, events[eventName]);
}
}
offInternal(eventName, listener) {
ccmp.off(eventName, listener);
}
emitInternal(eventName, ...args) {
ccmp.emit(eventName, ...args);
}
onClient(events) {
for (const eventName of Object.keys(events)) {
// @ts-expect-error generic event typing
const handler = events[eventName];
// Клиент шлёт variadic args упакованными в массив через
// `ccmp.emitServer(name, args)` (см. client CCMPEventsManager.emitServer).
// Разворачиваем массив обратно в позиционные аргументы. Скалярные/объектные
// payload'ы прокидываем как единственный аргумент.
ccmp.on(eventName, (player, data) => {
const rockModPlayer = this._getRockModPlayer(player);
const args = Array.isArray(data) ? data : [data];
handler(rockModPlayer, ...args);
});
}
}
offClient(eventName, listener) {
ccmp.off(eventName, listener);
}
emitClient(player, eventName, ...args) {
const ccmpPlayer = ccmp.players.getById(player.id);
if (!ccmpPlayer) {
throw new Error(`Player with id ${player.id} not found`);
}
ccmpPlayer.emit(eventName, args);
}
emitAllClients(eventName, ...args) {
ccmp.emitAllClients(eventName, args);
}
_getRockModPlayer(player) {
const playerId = player?.id;
if (typeof playerId !== "number") {
throw new Error("CCMPEventsManager.onClient: event sender does not contain numeric player id");
}
return RockMod_1.RockMod.instance.players.getByID(playerId);
}
}
exports.CCMPEventsManager = CCMPEventsManager;