• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в RAGE Multiplayer.

    ERROR: Your game version is not supported by RAGE Multiplayer.

    Данная ошибка говорит о том, что GTA V обновилась до новой версии (GTA Online тоже). Вам необходимо обновить саму игру в главном меню вашего приложения (Steam / Epic Games / Rockstar Games).
    Если после этого RAGE:MP все равно не работает - вам нужно дождаться выхода патча для самого мультиплеера (обычно это занимает от нескольких часов до нескольких дней).

    Новости и апдейты Rockstar Games - https://www.rockstargames.com/ru/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


    Grand Theft Auto 5 (+ GTA Online) последний раз были обновлены:

Урок Консольные команды для сервера Rage MP (console commands)

Консольные команды для сервера Rage MP полезные или вред

  • да

  • нет


Результаты будут видны только после голосования.

nettkom

Специалист
Автор темы
14 Сен 2020
58
42
82

Консольные команды для сервера Rage MP (console commands)
Opera Снимок_2021-05-23_142209_rage-script.ru.png

По умолчанию в консоль сервера нельзя ничего ввести. И сам api Rage Multiplayer не дает возможности объявлять свои консольные команды.
Но поскольку сервер использует node js, то мы можем воспользоваться некоторыми его встроенными библиотеками чтобы реализовать это.



Так как команды консольные, то весь код будет серверный. Вначале мы подключим модуль readline.
JavaScript:
const readline = require('readline');

Далее инициализируем интерфейс для работы с консолью.

JavaScript:
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

Теперь мы можем построчно читать текст, которые вводится в консоль сервера.

JavaScript:
rl.on('line', (input) => {
  console.log(`Введен текст: ${input}`);
});

rage-mp1.png

Отлично! Это то, что мне нужно. Теперь нужно реализовать обработку введенных команд. Для своего удобства я сделаю так, чтобы команды начинались со слеша. И при обработки введенного текста мы могли точно определить что пользователь ввел какую-то команду.

JavaScript:
rl.on('line', (input) => {

    if(input.charAt(0) == '/'){
        console.log(`Введена команда: ${input}`);
    }
 
});

rage-mp2.png


Пришло время добавить нашу первую команду. Чтобы код команд был более читаемым и не завязанным на обработчике line - я буду объявлять каждую команду отдельным событием. Но название события будет иметь определенный формат - "console:Команда". И в обработчике line я зная название команды просто буду вызывать этот event.

JavaScript:
rl.on('line', (input) => {

    if(input.charAt(0) == '/'){
        const commandName = input.substr(1); // Получаем название команды без слеша
        mp.events.call(`console:${commandName}`);
    }
});

Например, сделаем простенькую команду /help

JavaScript:
mp.events.add("console:help", () => {
    console.log('Привет - это команда /help');
});

rage-mp3.png

Теперь сделаем что-нибудь более полезное. Например, команду которая выведет в консоль список игроков онлайн. Тоже все просто.

JavaScript:
mp.events.add("console:players", () => {
    let count = 0;
    console.log('Игроки онлайн:');
    mp.players.forEach((player) => {
        console.log(`${player.name} (ID: ${player.id})`);
        count++;
    });
    console.log(`Всего игроков: ${count}`);
});
rage-mp4.png


Дальше логично добавить какие-то админ команды. Например, круто было бы иметь возможность не заходя на сервер кикнуть какого-то игрока прямо из консоли. Но здесь нам нужно будет передать в команду ID игрока.
Пока что наш обработчик не умеет в аргументы. Давайте немного улучшим его :) Вначале мы будем разбивать наш input в массив по пробелам. Первый элемент массива будет нашей командой, а остальные уже аргументы. Массив аргументов мы просто передадим в обработчик самой команды и там где они нужны - они будут обрабатываться уже на уровне самой команды.

JavaScript:
rl.on('line', (input) => {

    if(input.charAt(0) == '/'){
        const data = input.substr(1).split(' '); // убираем слеш и преобразовываем строку в массив разделяя по пробелам
        const commandName = data[0];
        const args = data.slice(1); // из data убираем первый элемент - название команды и получаем массив только аргументов args
        mp.events.call(`console:${commandName}`, args); // передаем args в обработчик команды
    }
});
Теперь можно легко реализовать команду /kick playerID

JavaScript:
mp.events.add("console:kick", (args) => {
    const playerId = args[0]; // id игрока у нас должен быть в первом элементе массива args
    if(!playerId || isNaN(playerId)) return console.log("Неверно указан Id игрока. Команда: /kick playerID");
 
    const player = mp.players.at(playerId);
    if(!player) return console.log(`Игрок с id ${playerId} оффлайн`); // Проверяем чтобы игрок был онлайн

    player.kick();
});
Еще крутая возможность при работе с readline - это возможность делать простые диалоги и получать ответы. Например, я хочу сделать команду /shutdown. Но чтобы при ее вводе у меня в консоли спрашивало подтверждение, чтобы я случайно не отключил сервер.
Для этого у объекта rl есть метод question. Первый аргумент - это текст, который выведет в консоль. Второй - функция-обработчик, куда будет передан ответ пользователя.

JavaScript:
mp.events.add("console:shutdown", () => {
    rl.question("Вы уверены что хотите выключить сервер? (Да/Нет)", (answer) => {
        if(answer == 'Да'){
            console.log(`Выключаем сервер...`);
            rl.close();
            process.exit(0);
        }
    });
});
rage-mp5.png


В данном случае мы обрабатываем только ответ 'Да', т. к. при любом другом вводе мы не будем выключать сервер.

Как видите консольные команды позволяют нам сделать много интересных вещей. В rage:mp мы легко можем пользоваться ими, например так, как я показал в этом уроке. Обработчик можно и дальше улучшать, но многие базовые вещи он позволит решить.

Полезные ссылки: Readline | Node.js v16.0.0 Documentation

Автор: Lev Angel
 
Последнее редактирование модератором:
  • Like
Реакции: pro100prohojiy и MRX

Dobri

Участник портала
30 Сен 2022
3
0
23
Файл где можно найти со всеми командами сервера ?