Встроенные сообщения чата CS:GO

oblakoFFF

Участник
Сообщения
2
Реакции
0
Хотел отловить встроенные сообщения CS:GO, и попытаться изменить их.

PHP:
#pragma semicolon 1
#include <sourcemod>
#pragma newdecls required

public void OnPluginStart(){
    HookUserMessage(GetUserMessageId("TextMsg"), Event_TextMsg, true);
}

public Action Event_TextMsg(UserMsg msg_id, Handle pb, const int[] players,int playersNum, bool reliable, bool init){
    char text[64];
    PbReadString(pb, "params", text, sizeof(text), 0);
    if (StrEqual(text, "#SFUI_Notice_Match_Will_Start_Chat", false)){
        for(int i = 1; i < playersNum; ++i) PrintToChat(players[i], "Test"); // Это не работает
        PrintToChatAll("Test"); // Компилируется, но не срабатывает. Ошибка: Exception reported: Invalid memory access
        PrintToServer("Test"); // Это единственное
        return Plugin_Handled;
    }
    return Plugin_Continue;
}

Может быть кто-нибудь работал в этом направлении? Просто странно, по идее должно работать...
 

DeeperSpy

Гений, миллиардер, плейбой, филантроп, майнкрафтер
Сообщения
588
Реакции
362
Хотел отловить встроенные сообщения CS:GO, и попытаться изменить их.

PHP:
#pragma semicolon 1
#include <sourcemod>
#pragma newdecls required

public void OnPluginStart(){
    HookUserMessage(GetUserMessageId("TextMsg"), Event_TextMsg, true);
}

public Action Event_TextMsg(UserMsg msg_id, Handle pb, const int[] players,int playersNum, bool reliable, bool init){
    char text[64];
    PbReadString(pb, "params", text, sizeof(text), 0);
    if (StrEqual(text, "#SFUI_Notice_Match_Will_Start_Chat", false)){
        for(int i = 1; i < playersNum; ++i) PrintToChat(players[i], "Test"); // Это не работает
        PrintToChatAll("Test"); // Компилируется, но не срабатывает. Ошибка: Exception reported: Invalid memory access
        PrintToServer("Test"); // Это единственное
        return Plugin_Handled;
    }
    return Plugin_Continue;
}

Может быть кто-нибудь работал в этом направлении? Просто странно, по идее должно работать...
Программирование / Скриптинг
 

DeeperSpy

Гений, миллиардер, плейбой, филантроп, майнкрафтер
Сообщения
588
Реакции
362
Этот вопрос относиться может относиться к двум темам, но тут именно CS:GO.
Вы правы, это раздел CS:GO, только он предназначен для настройки серверов
upload_2018-6-19_16-33-28.png
 

Вложения

  • upload_2018-6-19_16-33-12.png
    upload_2018-6-19_16-33-12.png
    6.4 КБ · Просмотры: 4

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #6
Тема перемещена в соответствующий раздел.

@oblakoFFF, ответ у Вас в коде.
PrintToChatAll() / PrintToChat() - тот же UserMessage. Пытаться отправить UserMessage, когда есть другой обрабатываемый - нельзя.

Сделайте так:
PHP:
#pragma semicolon 1
#include <sourcemod>
#pragma newdecls required

public void OnPluginStart(){
    HookUserMessage(GetUserMessageId("TextMsg"), Event_TextMsg, true);
}

public Action Event_TextMsg(UserMsg msg_id, Handle pb, const int[] players,int playersNum, bool reliable, bool init){
    char text[64];
    PbReadString(pb, "params", text, sizeof(text), 0);
    if (StrEqual(text, "#SFUI_Notice_Match_Will_Start_Chat", false)){
        RequestFrame(OnEventDebug, 0);
        PrintToServer("Test"); // Это единственное
        return Plugin_Handled;
    }
    return Plugin_Continue;
}

public void OnEventDebug(any data) {
    PrintToChatAll("Test");
}
 
Сверху Снизу