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

    Ошибка: Ваша версия Grand Theft Auto V не поддерживается 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/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


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

Вопрос Кастомный чат

30 Сен 2023
34
-1
10
У меня есть верстка кастомного чата, сделал отправку сообщений и тд. Мне нужно что бы чат реагировал на комманды, слышал что то про chat api но так ничего и не нашел
 

mippoosedev

Гуру
BackEnd developer
2 Мар 2021
292
127
100
У меня есть верстка кастомного чата, сделал отправку сообщений и тд. Мне нужно что бы чат реагировал на комманды, слышал что то про chat api но так ничего и не нашел
Если отправка сообщений работает, то и команды там лежат рядом) Ниже привожу пример от chat api с отправкой команды

JavaScript:
if (message[0] == "/") {
    if (message.length < 2) {
      activate(false)
      return
    }
    mp.invoke("command", message.substr(1))
  }

Ну и сама отправка любого сообщения через рейджовый чат:

JavaScript:
mp.invoke("chatMessage", message)
 
30 Сен 2023
34
-1
10
У меня есть такой код на js, я пытался в нем что то переделать но ничего не выходило.

Код:
let messageCount = 0;
const chatContainer = document.getElementById('chat-container');
const chatMessages = document.getElementById('chat-messages');
const chatInput = document.getElementById('chat-input');

function checkTime(i) {
  if (i < 10) {
    i = "0" + i;
  }
  return i;
}


const tbuttonenter = () => {
    document.getElementById('chat-input').style.display = 'block';
    document.getElementById("chat-input").focus();
}
document.addEventListener('tbuttonenter', tbuttonenter)
function pushNewMessage(senderName, static, message) {
    if(message === "") {
        return;
    } else {
        var today = new Date();
        var h = today.getHours();
        var m = today.getMinutes();
        m = checkTime(m);
        var time = h + ":" + m
        const messageElement = document.createElement('p');
        
        messageElement.innerHTML = time + " "  + senderName + " " + "[" + static + "]" + " " + message;
        chatMessages.appendChild(messageElement);
        chatContainer.scrollTop = chatContainer.scrollHeight;
        messageCount++;
        if (messageCount > 20) {
            chatMessages.removeChild(chatMessages.firstChild);
            messageCount--;
        }
    }
    
}

chatInput.addEventListener('keydown', (event) => {
    if (event.key === 'Enter') {
        document.getElementById('chat-input').style.display = 'none';
        const message = chatInput.value;
        mp.trigger("CEF:CLIENT::CHAT", message)
        chatInput.value = '';
        
    }
    if (event.key === 'Escape') {
        document.getElementById('chat-input').style.display = 'none';
        mp.trigger("CEF:CLIENT::CLOSE_CHAT")
    }
});
И вот что на клиенте:
C#:
Events.Add("CEF:CLIENT::CHAT", OnCefChat);
        Events.Add("CEF:CLIENT::CLOSE_CHAT", OnCefCloseChat);
        
    }
    private void OnCefChat(object[] args)
    {
        string message = args[0].ToString();
        
        Main.chatWindow.ExecuteJs($"pushNewMessage('Shilla', '432', '{message}')");
        Cursor.ShowCursor(false, false);
        
    }
    private void OnCefCloseChat(object[] args)
    {
        Cursor.ShowCursor(false, false);
    }
 

Mat Parker

Гуру
media
18 Мар 2021
66
100
91
23
Знакомая ситуация, знакомый код, знакомые люди :D
 

mippoosedev

Гуру
BackEnd developer
2 Мар 2021
292
127
100
Можно ли его переделать?
Можно, вопрос нужно ли, тк там кастомный обработчик сообщений стоит, что крайне странный выбор, но да ладно. Найди в своем коде этот отрезок и замени на то, что я скину ниже

Код:
if (event.key === 'Enter') {
        document.getElementById('chat-input').style.display = 'none';
        const message = chatInput.value;
        if (message[0] == "/") {
            if (message.length < 2) return;
            mp.invoke("command", message.substr(1));
            return;
        }
        mp.trigger("CEF:CLIENT::CHAT", message)
        chatInput.value = '';
       
    }


P.S Лучше напиши новый чат или возьми с просторов rage.mp. Тк в этом чате даже нет обработки дефолтных рейджовых chat-api евентов
1697215012165.png
 

Mat Parker

Гуру
media
18 Мар 2021
66
100
91
23
Можно, вопрос нужно ли, тк там кастомный обработчик сообщений стоит, что крайне странный выбор, но да ладно. Найди в своем коде этот отрезок и замени на то, что я скину ниже

Код:
if (event.key === 'Enter') {
        document.getElementById('chat-input').style.display = 'none';
        const message = chatInput.value;
        if (message[0] == "/") {
            if (message.length < 2) return;
            mp.invoke("command", message.substr(1));
            return;
        }
        mp.trigger("CEF:CLIENT::CHAT", message)
        chatInput.value = '';
       
    }
ждём всем селом ваш код!
 

Mat Parker

Гуру
media
18 Мар 2021
66
100
91
23
Реакции: m0v1l3

Mat Parker

Гуру
media
18 Мар 2021
66
100
91
23
Так я же уже скинул....
раз уже зашла тема про кастомный чат

JavaScript:
if (mp.events) {
            let api = {
                "chat:push": addMessage,
                "chat:clear": clearChat,
                "chat:activate": setChatVisible,
                "chat:show": setChatVisible };

            for (let fn in api) {
                mp.events.add(fn, api[fn]);
            }
        }

допустим я добавил ивенты и обрабатываю входящие сообщения. Самый главный вопрос как их правильно отсылать? Я к тому, что мне с CEF передаётся на SERVER сообщение от игрока и после этого он (SERVER) должен автоматом встроить в кастомный чат сообщение для всех игроков?
 

mippoosedev

Гуру
BackEnd developer
2 Мар 2021
292
127
100
раз уже зашла тема про кастомный чат

JavaScript:
if (mp.events) {
            let api = {
                "chat:push": addMessage,
                "chat:clear": clearChat,
                "chat:activate": setChatVisible,
                "chat:show": setChatVisible };

            for (let fn in api) {
                mp.events.add(fn, api[fn]);
            }
        }

допустим я добавил ивенты и обрабатываю входящие сообщения. Самый главный вопрос как их правильно отсылать? Я к тому, что мне с CEF передаётся на SERVER сообщение от игрока и после этого он (SERVER) должен автоматом встроить в кастомный чат сообщение для всех игроков?
Есть chat-api рейджа, если ты с сефа будешь стучать в этот апи - он всё сделает за тебя. И ты будешь работать с евентами playerMessage/playerCommand на клиенте и сервере как и с обычным чатом. Выше описал эти евенты(отправляются через mp.invoke("command", args) и mp.invoke("chatMessage", args)
 

Mat Parker

Гуру
media
18 Мар 2021
66
100
91
23
Есть chat-api рейджа, если ты с сефа будешь стучать в этот апи - он всё сделает за тебя. И ты будешь работать с евентами playerMessage/playerCommand на клиенте и сервере как и с обычным чатом. Выше описал эти евенты(отправляются через mp.invoke("command", args) и mp.invoke("chatMessage", args)
Неужели в этой жизни кто-то что-то сделает за меня? Звучит девственно. Но попробуем, не закрывайте пока тему
 

mippoosedev

Гуру
BackEnd developer
2 Мар 2021
292
127
100
раз уже зашла тема про кастомный чат

JavaScript:
if (mp.events) {
            let api = {
                "chat:push": addMessage,
                "chat:clear": clearChat,
                "chat:activate": setChatVisible,
                "chat:show": setChatVisible };

            for (let fn in api) {
                mp.events.add(fn, api[fn]);
            }
        }

допустим я добавил ивенты и обрабатываю входящие сообщения. Самый главный вопрос как их правильно отсылать? Я к тому, что мне с CEF передаётся на SERVER сообщение от игрока и после этого он (SERVER) должен автоматом встроить в кастомный чат сообщение для всех игроков?
Кстати activate и show это разные вещи. Show - это в целом показывать/не показывать чат, а активейт - это включить режим ввода. В этот момент необходимо включить курсор и поставить флаг, что человек пишет в чат(этот флаг блокирует все игровые инпуты, т.е например игрок не будет бегать). Пример кода с моего проекта

JavaScript:
function activate(toggle) {
  store.chatState.active = toggle
  currentMessage = ''
  historyIndex = -1;
  mp.invoke("focus", toggle);
  mp.invoke("setTypingInChatState", toggle);
  if (store.chatState.active) {
    nextTick(() => {
      chatInput.focus();
    });
  }
}

function show(toggle) {
  store.huds.chat = toggle;
}
 
Реакции: m0v1l3 и Mat Parker

Mat Parker

Гуру
media
18 Мар 2021
66
100
91
23
Кстати activate и show это разные вещи. Show - это в целом показывать/не показывать чат, а активейт - это включить режим ввода. В этот момент необходимо включить курсор и поставить флаг, что человек пишет в чат(этот флаг блокирует все игровые инпуты, т.е например игрок не будет бегать). Пример кода с моего проекта

JavaScript:
function activate(toggle) {
  store.chatState.active = toggle
  currentMessage = ''
  historyIndex = -1;
  mp.invoke("focus", toggle);
  mp.invoke("setTypingInChatState", toggle);
  if (store.chatState.active) {
    nextTick(() => {
      chatInput.focus();
    });
  }
}

function show(toggle) {
  store.huds.chat = toggle;
}
спасибо, запилю видос в течении недели, чтобы донести истину до масс!
 
Реакции: m0v1l3