У меня есть верстка кастомного чата, сделал отправку сообщений и тд. Мне нужно что бы чат реагировал на комманды, слышал что то про chat api но так ничего и не нашел
Если отправка сообщений работает, то и команды там лежат рядом) Ниже привожу пример от chat api с отправкой командыУ меня есть верстка кастомного чата, сделал отправку сообщений и тд. Мне нужно что бы чат реагировал на комманды, слышал что то про chat api но так ничего и не нашел
if (message[0] == "/") {
if (message.length < 2) {
activate(false)
return
}
mp.invoke("command", message.substr(1))
}
mp.invoke("chatMessage", message)
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")
}
});
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);
}
Ахахах, твои подписчики со стрима)))Знакомая ситуация, знакомый код, знакомые люди
Стример аферистАхахах, твои подписчики со стрима)))
Можно, вопрос нужно ли, тк там кастомный обработчик сообщений стоит, что крайне странный выбор, но да ладно. Найди в своем коде этот отрезок и замени на то, что я скину нижеМожно ли его переделать?
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 = '';
}
ждём всем селом ваш код!Можно, вопрос нужно ли, тк там кастомный обработчик сообщений стоит, что крайне странный выбор, но да ладно. Найди в своем коде этот отрезок и замени на то, что я скину ниже
Код: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 = ''; }
за что? за то что в стриме написал "Пробуем кастомный чат"?я считаю стример должен извиниться
Так я же уже скинул....ждём всем селом ваш код!
раз уже зашла тема про кастомный чатТак я же уже скинул....
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]);
}
}
Есть chat-api рейджа, если ты с сефа будешь стучать в этот апи - он всё сделает за тебя. И ты будешь работать с евентами playerMessage/playerCommand на клиенте и сервере как и с обычным чатом. Выше описал эти евенты(отправляются через mp.invoke("command", args) и mp.invoke("chatMessage", args)раз уже зашла тема про кастомный чат
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)
Кстати activate и show это разные вещи. Show - это в целом показывать/не показывать чат, а активейт - это включить режим ввода. В этот момент необходимо включить курсор и поставить флаг, что человек пишет в чат(этот флаг блокирует все игровые инпуты, т.е например игрок не будет бегать). Пример кода с моего проектараз уже зашла тема про кастомный чат
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) должен автоматом встроить в кастомный чат сообщение для всех игроков?
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;
}
спасибо, запилю видос в течении недели, чтобы донести истину до масс!Кстати 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; }