• Из-за обновления 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) последний раз были обновлены:

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

Nikita3421

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

mippoosedev

Гуру
2 Мар 2021
294
139
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)
 

Nikita3421

Участник портала
Автор темы
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
103
91
21
Знакомая ситуация, знакомый код, знакомые люди :D
 

mippoosedev

Гуру
2 Мар 2021
294
139
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
103
91
21
Можно, вопрос нужно ли, тк там кастомный обработчик сообщений стоит, что крайне странный выбор, но да ладно. Найди в своем коде этот отрезок и замени на то, что я скину ниже

Код:
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 = '';
       
    }
ждём всем селом ваш код!
 

Nikita3421

Участник портала
Автор темы
30 Сен 2023
34
1
10
я считаю стример должен извиниться
 

Mat Parker

Специалист
media
18 Мар 2021
66
103
91
21
  • Like
Реакции: Deja-vu

Mat Parker

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

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

Гуру
2 Мар 2021
294
139
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
103
91
21
Есть chat-api рейджа, если ты с сефа будешь стучать в этот апи - он всё сделает за тебя. И ты будешь работать с евентами playerMessage/playerCommand на клиенте и сервере как и с обычным чатом. Выше описал эти евенты(отправляются через mp.invoke("command", args) и mp.invoke("chatMessage", args)
Неужели в этой жизни кто-то что-то сделает за меня? Звучит девственно. Но попробуем, не закрывайте пока тему
 

mippoosedev

Гуру
2 Мар 2021
294
139
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;
}
 
  • Like
Реакции: Deja-vu и Mat Parker

Mat Parker

Специалист
media
18 Мар 2021
66
103
91
21
Кстати 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;
}
спасибо, запилю видос в течении недели, чтобы донести истину до масс!
 
  • Like
Реакции: Deja-vu