У меня есть верстка кастомного чата, сделал отправку сообщений и тд. Мне нужно что бы чат реагировал на комманды, слышал что то про 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; }