UNPKG

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
"use strict"; 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;