This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

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

Nikita3421

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

mippoosedev

Гуру
2 Мар 2021
294
139
100
Если отправка сообщений работает, то и команды там лежат рядом) Ниже привожу пример от 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
22
Знакомая ситуация, знакомый код, знакомые люди
 

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 евентов
 

Mat Parker

Специалист
media
18 Мар 2021
66
103
91
22
ждём всем селом ваш код!
 

Nikita3421

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

Mat Parker

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

Mat Parker

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

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

Mat Parker

Специалист
media
18 Мар 2021
66
103
91
22
Неужели в этой жизни кто-то что-то сделает за меня? Звучит девственно. Но попробуем, не закрывайте пока тему
 

mippoosedev

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

Mat Parker

Специалист
media
18 Мар 2021
66
103
91
22
спасибо, запилю видос в течении недели, чтобы донести истину до масс!
 
Реакции: Deja-vu