Не работает плагин (замена префикса [SM])

s777

Участник
Сообщения
449
Реакции
74
Операционная система
Linux
Список мета-модулей
[01] SourceMod (1.10.0.6459) by AlliedModders LLC
[02] BanId Fix (1.0) by Phoenix (˙·٠●Феникс●٠·˙)
[03] SDK Tools (1.10.0.6459) by AlliedModders LLC
[04] CS Tools (1.10.0.6459) by AlliedModders LLC
[05] SteamWorks Extension (1.2.3) by Kyle Sanderson
[06] SDK Hooks (1.10.0.6459) by AlliedModders LLC
[07] PTaH (1.1.1) by Phoenix (˙·٠●Феникс●٠·˙)
[08] SendProxy Manager (1.2) by Afronanny
[09] DHooks (2.2.0-detours9) by Dr!fter
Список расширений SM
[01] Automatic Updater (1.10.0.6459): Updates SourceMod gamedata files
[02] Webternet (1.10.0.6459): Extension for interacting with URLs
[03] Accelerator (2.5.0): SRCDS Crash Handler
[04] BanId Fix (1.0): Correcting 'Ghost players' error
[05] SDK Tools (1.10.0.6459): Source SDK Tools
[06] BinTools (1.10.0.6459): Low-level C/C++ Calling API
[07] CS Tools (1.10.0.6459): CS extended functionality
[08] SteamWorks Extension (1.2.3): Exposes SteamWorks functions to Developers
[09] Regex (1.10.0.6459): Provides regex natives for plugins
[10] SDK Hooks (1.10.0.6459): Source SDK Hooks
[11] Top Menus (1.10.0.6459): Creates sorted nested menus
[12] Client Preferences (1.10.0.6459): Saves client preference settings
[13] SQLite (1.10.0.6459): SQLite Driver
[14] PTaH (1.1.1): Additional CS:GO Hooks and Natives
[15] SendProxy Manager (1.2): Change stuff without actually changing stuff!
[16] TAU LIB (1.4):
[17] DHooks (2.2.0-detours9): Dynamic Hooks
[18] MySQL-DBI (1.10.0.6459): MySQL driver implementation for DBI
Вечер добрый. Проблема - не заменяется стандартный префикс [SM] в чате. Предоставляю 2 варианта плагина, ни один не работает. Ньюанс в том, что пару лет все работало прекрасно, до недавнего времени (позавчера перестало). Ошибок нет
C-подобный:
#include <sourcemod>

#include <csgo_colors>

#pragma semicolon 1



#define MAXTEXTCOLORS 100



// Plugin definitions

#define PLUGIN_VERSION "0.32"



public Plugin:myinfo =

{

    name = "Default SM Text Replacer",

    author = "Феня 228",

    description = "Расскрашивает теги SM",

    version = PLUGIN_VERSION,

    url = "hlmod.ru"

};

new Handle:cvar_randomcolor = INVALID_HANDLE;

new UseRandomColors = 0;

new CountColors = 0;



new String:TextColors[MAXTEXTCOLORS][256];



public OnPluginStart()

{

    cvar_randomcolor    =    CreateConVar( "sm_textcol_random", "1", "Рандомно цвета=1,По очереди 0.");

    AutoExecConfig(true, "sm_textreplacer");

    HookConVarChange(cvar_randomcolor, Event_CvarChange);

    CreateConVar("sm_textreplacer_version", PLUGIN_VERSION, "text replacer version", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY);

    RegAdminCmd("sm_reloadstc", Command_ReloadConfig, ADMFLAG_CONFIG, "Reloads Text color's config file");

    HookUserMessage(GetUserMessageId("TextMsg"), TextMsg, true);

}

public Action:Command_ReloadConfig(client, args) {



    RefreshConfig();

    LogAction(client, -1, "Reloaded [SM] Text replacer config file");

    ReplyToCommand(client, "[STC] Reloaded config file.");

    return Plugin_Handled;

}

public OnConfigsExecuted()

{

    RefreshConfig();

}



public Event_CvarChange(Handle:convar, const String:oldValue[], const String:newValue[])

{

    RefreshConfig();

}



stock RefreshConfig()

{

    UseRandomColors = GetConVarInt(cvar_randomcolor);

    for (new X = 0; X < MAXTEXTCOLORS; X++)

    {

        //Format(TextColors[X], sizeof(TextColors), "");

        TextColors[X] = "";

    }

    decl String:sPaths[PLATFORM_MAX_PATH];

    BuildPath(Path_SM, sPaths, sizeof(sPaths),"configs/sm_textcolors.cfg");

    new Handle:hFile = OpenFile(sPaths, "r");

    new String:sBuffer[256];

    //new len;

    CountColors = -1;

    while (ReadFileLine(hFile, sBuffer, sizeof(sBuffer)))

    {

        /*len = strlen(sBuffer);

        if (sBuffer[len-1] == '\n')

            sBuffer[--len] = '\0';*/



        TrimString(sBuffer);



        if(!StrEqual(sBuffer,"",false)){

      

            CGOReplaceColorSay(sBuffer, 256);

            CountColors++;

            Format(TextColors[CountColors], sizeof(TextColors), "%s", sBuffer);

            PrintToChatAll(" %s", sBuffer);

        }

    }

    CloseHandle(hFile);

}

public Action:TextMsg(UserMsg:msg_id, Handle:bf, const players[], playersNum, bool:reliable, bool:init)

{

    if(CountColors != -1)

    {

        if(reliable)

        {

            new String:buffer[PLATFORM_MAX_PATH];

            PbReadString(bf, "params", buffer, sizeof(buffer), 0);

            if(StrContains(buffer, "[SM]") == 0)

            {

                new Handle:pack;

                CreateDataTimer(0.0, timer_strip, pack);



                WritePackCell(pack, playersNum);

                for(new i = 0; i < playersNum; i++)

                {

                    WritePackCell(pack, players);

                }

                WritePackString(pack, buffer);

                ResetPack(pack);

                return Plugin_Handled;

            }

        }

    }

    return Plugin_Continue;

}



public Action:timer_strip(Handle:timer, Handle:pack)

{

    new playersNum = ReadPackCell(pack);

    new players[playersNum];

    new client, count;



    for(new i = 0; i < playersNum; i++)

    {

        client = ReadPackCell(pack);

        if(IsClientInGame(client))

        {

            players[count++] = client;

        }

    }



    if(count < 1) return;



    playersNum = count;



    new String:buffer[255];

    ReadPackString(pack, buffer, sizeof(buffer));

    new String:QuickFormat[255];

    new ColorChoose = 0;

    if(UseRandomColors == 1) ColorChoose = GetRandomInt(0, CountColors);

    Format(QuickFormat, sizeof(QuickFormat), " %s", TextColors[ColorChoose]);

    ReplaceStringEx(buffer, sizeof(buffer), "[SM]", QuickFormat);



    new Handle:Pb = StartMessage("SayText2", players, playersNum, USERMSG_RELIABLE|USERMSG_BLOCKHOOKS);

    PbSetInt(Pb, "ent_idx", -1);

    PbSetBool(Pb, "chat", true);

    PbSetString(Pb, "msg_name", buffer);

    PbAddString(Pb, "params", "");

    PbAddString(Pb, "params", "");

    PbAddString(Pb, "params", "");

    PbAddString(Pb, "params", "");

    EndMessage();

}
C-подобный:
new Handle:g_PrefixName  = INVALID_HANDLE;



public Plugin:myinfo = {

    name = "SM Prefix Change",

    author = "dkzinhoo",

    description = "Change SM PREFIX",

    version = "v7",

};



public OnPluginStart()

{

    if(GetUserMessageType() == UM_Protobuf)

    {

        HookUserMessage(GetUserMessageId("TextMsg"), TextMsg, true);

    }

    g_PrefixName = CreateConVar("sm_prefix_name", "[Battles]", "Set your prefix name.", FCVAR_PLUGIN);

}



public Action:TextMsg(UserMsg:msg_id, Handle:pb, players[], playersNum, bool:reliable, bool:init)

{

    if(!reliable || PbReadInt(pb, "msg_dst") != 3)

    {

        return Plugin_Continue;

    }



    new String:buffer[256];

    PbReadString(pb, "params", buffer, sizeof(buffer), 0);



    if(StrContains(buffer, "[SM] ") == 0)

    {

        new Handle:pack;

        CreateDataTimer(0.0, change_prefix, pack, TIMER_FLAG_NO_MAPCHANGE);

        WritePackCell(pack, playersNum);

        for(new i = 0; i < playersNum; i++)

        {

            WritePackCell(pack, players);

        }

        WritePackCell(pack, strlen(buffer));

        WritePackString(pack, buffer);

        ResetPack(pack);



        return Plugin_Handled;

    }



    return Plugin_Continue;

}



public Action:change_prefix(Handle:timer, Handle:pack)

{

    new playersNum = ReadPackCell(pack);

    new players[playersNum];

    new player, players_count;



    for(new i = 0; i < playersNum; i++)

    {

        player = ReadPackCell(pack);



        if(IsClientInGame(player))

        {

            players[players_count++] = player;

        }

    }



    playersNum = players_count;



    if(playersNum < 1)

    {

        return;

    }



    new Handle:pb = StartMessage("TextMsg", players, playersNum, USERMSG_BLOCKHOOKS);

    PbSetInt(pb, "msg_dst", 3);



    new buffer_size = ReadPackCell(pack)+15;

    new String:buffer[buffer_size];

    ReadPackString(pack, buffer, buffer_size);

    decl String:sBuffer[32];

    GetConVarString(g_PrefixName, sBuffer, sizeof(sBuffer));

    Format(buffer, buffer_size, " \x04%s\x01%s", sBuffer,buffer[4]);



    PbAddString(pb, "params", buffer);

    PbAddString(pb, "params", NULL_STRING);

    PbAddString(pb, "params", NULL_STRING);

    PbAddString(pb, "params", NULL_STRING);

    PbAddString(pb, "params", NULL_STRING);

    EndMessage();

}
C-подобный:
/* Colors available=>
\x01 = default
\x02 = darkred
\x03 = purple/teamcolor (idk)
\x04 = green
\x05 = lightgreen
\x06 = lime
\x07 = red
\x08 = grey
\x09 = yellow
\x0A = bluegrey
\x0B = blue
\x0C = darkblue
\x0D = grey2
\x0E = orchid
\x0F = lightred
\x10 = gold
*/
#include <sourcemod>

#pragma semicolon 1

#define MAXTEXTCOLORS 100

#define SERVER_TAG "[\x0CMy Server Tag\x01]"

// Plugin definitions
#define PLUGIN_VERSION "1.0"

public Plugin:myinfo =
{
    name = "Default SM Text Replacer",
    author = "Mitch/Bacardi/Cruze",
    description = "Replaces the '[SM]' text with more color!",
    version = PLUGIN_VERSION,
    url = ""
};



public OnPluginStart()
{
    HookUserMessage(GetUserMessageId("TextMsg"), TextMsg, true);
}
public Action:TextMsg(UserMsg:msg_id, Handle:bf, const players[], playersNum, bool:reliable, bool:init)
{
    if(reliable)
    {
        new String:buffer[256];
        PbReadString(bf, "params", buffer, sizeof(buffer), 0);
        if(StrContains(buffer, "[SM]") == 0)
        {
            new Handle:pack;
            CreateDataTimer(0.0, timer_strip, pack);

            WritePackCell(pack, playersNum);
            for(new i = 0; i < playersNum; i++) 
            {
                WritePackCell(pack, players[i]);
            }
            WritePackString(pack, buffer);
            ResetPack(pack);
            return Plugin_Handled;
        }
    }
    return Plugin_Continue;
}

public Action:timer_strip(Handle:timer, Handle:pack)
{
    new playersNum = ReadPackCell(pack);
    new players[playersNum];
    new client, count;

    for(new i = 0; i < playersNum; i++)
    {
        client = ReadPackCell(pack);
        if(IsClientInGame(client))
        {
            players[count++] = client;
        }
    }

    if(count < 1) return;
  
    playersNum = count;
  
    new String:buffer[255];
    ReadPackString(pack, buffer, sizeof(buffer));
    new String:QuickFormat[255];
    Format(QuickFormat, sizeof(QuickFormat), "%s", SERVER_TAG);
    ReplaceStringEx(buffer, sizeof(buffer), "[SM]", QuickFormat);
  
    new Handle:bf = StartMessage("SayText2", players, playersNum, USERMSG_RELIABLE|USERMSG_BLOCKHOOKS);
    //BfWriteString(bf, buffer);
    PbSetInt(bf, "ent_idx", -1);
    PbSetBool(bf, "chat", true);
    PbSetString(bf, "msg_name", buffer);
    PbAddString(bf, "params", "");
    PbAddString(bf, "params", "");
    PbAddString(bf, "params", "");
    PbAddString(bf, "params", "");
    EndMessage();
}

UPD: Проблема решилась сама по себе
 
Последнее редактирование:
Сверху Снизу