Files
YabosRageMPCore/packages/core/index.js
T
Hopeless YABO af039b0504 Server Files
2026-03-31 19:36:44 +02:00

66 lines
2.0 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const { Rpc } = require('@entityseven/rage-fw-rpc');
const rpc = new Rpc();
let settings;
try {
const settingsPath = path.resolve(__dirname, '../../settings.json');
const data = fs.readFileSync(settingsPath, 'utf8');
settings = JSON.parse(data);
console.log('[Core] Loaded settings.json successfully.');
} catch (e) {
console.error('[Core] Failed to load settings.json:', e);
settings = { cef: 'dev', debugger: true };
}
mp.events.add('playerReady', (player) => {
console.log(`[Core] Player ${player.name} joined. Initializing CEF via Rpc...`);
// Determine the CEF URL based on settings
const isDev = settings.cef === 'dev';
const cefUrl = isDev ? 'http://localhost:3000' : 'package://cef/index.html';
// Give the client a tiny bit of time to fully load scripts before calling
setTimeout(() => {
if (!mp.players.exists(player)) return;
player.call('client:initCef', [cefUrl, !!settings.debugger]);
console.log(`[Core] CEF initialization event sent to ${player.name}`);
}, 500);
});
// Custom Chat Backend
rpc.register('server:chat:receive', (player, msg) => {
if (msg.startsWith('/')) {
console.log(`[Command] ${player.name}: ${msg}`);
// Command execution logic can be wired here later
rpc.callClient(player, 'chat:push:custom', [{
type: 'error',
text: 'Commands are not fully implemented in the custom chat yet.'
}]).catch(() => {});
return true;
}
// Broadcast structured message to all players
const chatData = {
type: 'player',
name: player.name,
id: player.id,
text: msg,
timestamp: Date.now()
};
mp.players.forEach((p) => {
rpc.callClient(p, 'chat:push:custom', [chatData]).catch(() => {});
});
return true;
});
// Example RPC handler
rpc.register('server:test', (player, msg) => {
console.log(`[RPC] Received from ${player.name}: ${msg}`);
return `Server received: ${msg}`;
});