крашит сервер после неоднократной смены карты

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
8
Реакции
0
Ошибка
----------------------------------------------
CRASH: Wed Jul 26 23:24:32 MSK 2023
Start Line: ./hlds_linux -debug -game cstrike -master -noipx -pingboost 3 -sys_ticrate 1200 -secure +ip 93.191.11.211 +port 27027 +map surf_ski_2 -maxplayers 20 +rcon_password +sv_password -pidfile hlds.19899.pid
[New LWP 19906]
[New LWP 19946]
[New LWP 19948]
[New LWP 19940]
[New LWP 19941]
[New LWP 19947]
[New LWP 19949]
[New LWP 20057]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `./hlds_linux -debug -game cstrike -master -noipx -pingboost 3 -sys_ticrate 1200'.
Program terminated with signal SIGABRT, Aborted.
#0 0xf778ec89 in __kernel_vsyscall ()
[Current thread is 1 (Thread 0xf7469940 (LWP 19906))]
#0 0xf778ec89 in __kernel_vsyscall ()
#1 0xf7500dd0 in raise () from /lib/i386-linux-gnu/libc.so.6
#2 0xf7502297 in abort () from /lib/i386-linux-gnu/libc.so.6
#3 0xf753c38f in ?? () from /lib/i386-linux-gnu/libc.so.6
#4 0xf7542fc7 in ?? () from /lib/i386-linux-gnu/libc.so.6
#5 0xf7543fd0 in ?? () from /lib/i386-linux-gnu/libc.so.6
#6 0xf2491dfd in my_free () from cstrike/addons/amxmodx/modules/mysql_amxx_i386.so
#7 0xf2476fa4 in mysql_free_result () from cstrike/addons/amxmodx/modules/mysql_amxx_i386.so
#8 0xf2473d28 in SourceMod::MysqlResultSet::~MysqlResultSet() () from cstrike/addons/amxmodx/modules/mysql_amxx_i386.so
#9 0x00000002 in ?? ()
#10 0x09269118 in ?? ()
#11 0xf347f000 in ?? () from /home/srv780656/./cstrike/addons/metamod/dlls/metamod.so
#12 0xf6df0f74 in Host_Changelevel_f() () from /home/srv780656/engine_i486.so
#13 0x00000000 in ?? ()
No symbol table info available.
From To Syms Read Shared Object Library
0xf76fd914 0xf7743c78 Yes ./libstdc++.so.6
0xf76aaa30 0xf76ab921 Yes (*) /lib/i386-linux-gnu/libdl.so.2
0xf76918c0 0xf769ef01 Yes (*) /lib/i386-linux-gnu/libpthread.so.0
0xf74ec800 0xf761a01f Yes (*) /lib/i386-linux-gnu/libc.so.6
0xf74846e0 0xf74bbfcb Yes (*) /lib/i386-linux-gnu/libm.so.6
0xf7790860 0xf77a9f1d Yes (*) /lib/ld-linux.so.2
0xf746ce04 0xf747c490 Yes ./libgcc_s.so.1
0xf6d8b820 0xf6e7cfb0 Yes (*) /home/srv780656/engine_i486.so
0xf6d4f840 0xf6d52dfc Yes (*) /lib/i386-linux-gnu/librt.so.1
0xf6d3d5c0 0xf6d47d74 Yes (*) ./libsteam_api.so
0xf6d23a00 0xf6d301b8 Yes /home/srv780656/filesystem_stdio.so
0xf5e1ae80 0xf6902040 Yes (*) /rep/cs/6153/steamclient.so
0xf5c95670 0xf5d0b020 Yes (*) /rep/cs/6153/crashhandler.so
0xf342f3a0 0xf3472a90 Yes (*) /home/srv780656/./cstrike/addons/metamod/dlls/metamod.so
0xf31d86a0 0xf336fb90 Yes (*) /home/srv780656/cstrike/dlls/cs.so
0xf305a850 0xf307e550 Yes (*) /home/srv780656/cstrike/addons/reunion/dlls/reunion.so
0xf2e81a20 0xf2ee4db7 Yes (*) /home/srv780656/cstrike/addons/amxmodx/dlls/amxmodx.so
0xf2e53d50 0xf2e63460 Yes (*) cstrike/addons/amxmodx/modules/cstrike_amxx_i386.so
0xf2e3e8b0 0xf2e3f1d8 Yes (*) cstrike/addons/amxmodx/modules/csx_amxx_i386.so
0xf2dce020 0xf2e17180 Yes (*) cstrike/addons/amxmodx/modules/reapi_amxx_i386.so
0xf2c5cf70 0xf2d61030 Yes (*) /home/srv780656/cstrike/addons/revoice/dlls/revoice.so
0xf2ae5b60 0xf2b2d624 Yes (*) cstrike/addons/amxmodx/modules/hamsandwich_amxx_i386.so
0xf2a929d0 0xf2abed6c Yes (*) cstrike/addons/amxmodx/modules/fakemeta_amxx_i386.so
0xf246d790 0xf2505fc5 Yes (*) cstrike/addons/amxmodx/modules/mysql_amxx_i386.so
0xf28e1660 0xf28e5f84 Yes (*) cstrike/addons/amxmodx/modules/fun_amxx_i386.so
0xf28c6290 0xf28d280c Yes (*) cstrike/addons/amxmodx/modules/engine_amxx_i386.so
0xf28f8a80 0xf28fe8f0 Yes (*) /lib/i386-linux-gnu/libnss_files.so.2
0xef8d4200 0xf076d3c4 Yes (*) ./steamclient.so
0xf1f57670 0xf1fcd020 Yes (*) ./crashhandler.so
0xf28b3b50 0xf28b67d6 Yes (*) /lib/i386-linux-gnu/libnss_dns.so.2
0xf289d690 0xf28a9ba4 Yes (*) /lib/i386-linux-gnu/libresolv.so.2
(*): Shared library is missing debugging information.
Stack level 0, frame at 0xffbb5420:
eip = 0xf778ec89 in __kernel_vsyscall; saved eip = 0xf7500dd0
called by frame at 0xffbb5540
Arglist at 0xffbb5418, args:
Locals at 0xffbb5418, Previous frame's sp is 0xffbb5420
Saved registers:
ecx at 0xffbb5418, edx at 0xffbb5414, ebp at 0xffbb5410, eip at 0xffbb541c
End of crash report
----------------------------------------------
ОС
Linux
Amx Mod X
AMX Mod X 1.9.0.5294 (http://www.amxmodx.org)
Authors:
David "BAILOPAN" Anderson, Pavol "PM OnoTo" Marko
Felix "SniperBeamer" Geyer, Jonny "Got His Gun" Bergstrom
Lukasz "SidLuke" Wlasinski, Christian "Basic-Master" Hammacher
Borja "faluco" Ferrer, Scott "DS" Ehlert
Compiled: Dec 3 2021 15:54:56
Built from: https://github.com/alliedmodders/amxmodx/commit/363871a
Build ID: 5294:363871a
Core mode: JIT+ASM32
Билд
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.12.0.780-dev
Build date: 16:20:56 Sep 19 2022 (3082)
Build from: https://github.com/dreamstalker/rehlds/commit/d6ebe82
ReGamedll
ReGameDLL version: 5.21.0.556-dev
Build date: 08:50:42 Jul 22 2022
Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/1081301
Версия Metamod
Metamod-r v1.3.0.131, API (5:13)
Metamod-r build: 18:51:02 Jul 11 2022
Metamod-r from: https://github.com/theAsmodai/metamod-r/commit/adc9414
Список метамодулей
Currently loaded plugins:
description stat pend file vers src load unload
[ 1] Reunion RUN - reunion.so v0.1.0.137 ini Start Never
[ 2] AMX Mod X RUN - amxmodx.so v1.9.0.5294 ini Start ANY
[ 3] Revoice RUN - revoice.so v0.1.0.34 ini Start Never
[ 4] CStrike RUN - cstrike_amxx_i386.so v1.9.0.5294 pl2 ANY
[ 5] ReAPI RUN - reapi_amxx_i386.so v5.22.0.254-dev pl2 ANY Never
[ 6] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5294 pl2 ANY
[ 7] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5294 pl2 ANY
[ 8] MySQL RUN - mysql_amxx_i386.so v1.9.0.5294 pl2 ANY
[ 9] Fun RUN - fun_amxx_i386.so v1.9.0.5294 pl2 ANY
[10] Engine RUN - engine_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
10 plugins, 10 running
Список плагинов
aes_csstatsx_sql.amxx
admin_loader.amxx
fresh_bans.amxx
;menu.amxx debug
adminchat.amxx
admincmd.amxx
antiflood.amxx
cmdmenu.amxx
imessage.amxx
menufront.amxx
mapsmenu.amxx
plmenu.amxx
pluginmenu.amxx
restmenu.amxx
scrollmsg.amxx
adminvote.amxx
miscstats.amxx
stats_logging.amxx

mapmanager.amxx
mapmanager_subplugin.amxx
new_grab.amxx
JP_HOOK.amxx
no_kill_zones_remake.amxx
remove_entity.amxx
chat_manager.amxx debug
duels_surf.amxx
statscfg.amxx
rs_round_sound.amxx
jailremover.amxx
Крашит сервер после того как меняю карту +- 7 раз
Вроде как проблема пропадает как только выключаю чат менеджер, но какая в нём проблема?

Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <sqlx>

#define PLUGIN "Chat Manager"
#define VERSION "1.1.1-11"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#define ADMIN_FLAG ADMIN_CHAT

//Colors: DEFAULT, TEAM, GREEN
#define PRETEXT_COLOR            DEFAULT
#define PLAYER_CHAT_COLOR        DEFAULT
#define ADMIN_CHAT_COLOR        GREEN
#define PLAYER_NAME_COLOR        TEAM
#define ADMIN_NAME_COLOR        TEAM

#define FUNCTION_ALL_CHAT

#if defined FUNCTION_ALL_CHAT
//Flags: ALIVE_SEE_DEAD, DEAD_SEE_ALIVE, TEAM_SEE_TEAM
#define PLAYER_CHAT_FLAGS (ALIVE_SEE_DEAD|DEAD_SEE_ALIVE)
#define ADMIN_CHAT_FLAGS (ALIVE_SEE_DEAD|DEAD_SEE_ALIVE|TEAM_SEE_TEAM)
#endif

#define FUNCTION_PLAYER_PREFIX
//#define FUNCTION_ADD_TIME_CODE
#define FUNCTION_LOG_MESSAGES
#define FUNCTION_HIDE_SLASH
#define FUNCTION_TRANSLITE
#define FUNCTION_AES_TAGS
#define FUNCTION_BETA_SUPPORT

//#define FUNCTION_ADD_STEAM_PREFIX

#if defined FUNCTION_ADD_STEAM_PREFIX
new const STEAM_PREFIX[] = "^1[^4Steam^1] ";
#endif

#define PREFIX_MAX_LENGTH 32
#define AES_MAX_LENGTH 32

//DONT CHANGE!!!
#define COLOR_BUFFER 6
#define TEXT_LENGTH 128
#define MESSAGE_LENGTH 189

#if defined FUNCTION_AES_TAGS
native aes_get_player_stats(id,data[4]);
native aes_get_level_name(lvlnum,level[],len,idLang = 0);
new const AES_TAG_FORMAT[] = "^1[^4%s^1] ";
#endif

// SQL
new
    Handle:s_SqlTuple,
    szSqlError[512],
    ErrorCode;
    
new admin_chat_color[33];

const ALIVE_SEE_DEAD = (1 << 0);
const DEAD_SEE_ALIVE = (1 << 1);
const TEAM_SEE_TEAM = (1 << 2);

enum
{
    DEFAULT = 1,
    TEAM = 3,
    GREEN = 4
};

enum _:FLAG_PREFIX_INFO
{
    m_Flag,
    m_Prefix[PREFIX_MAX_LENGTH]
};

new const g_TextChannels[][] =
{
    "#Cstrike_Chat_All",
    "#Cstrike_Chat_AllDead",
    "#Cstrike_Chat_T",
    "#Cstrike_Chat_T_Dead",
    "#Cstrike_Chat_CT",
    "#Cstrike_Chat_CT_Dead",
    "#Cstrike_Chat_Spec",
    "#Cstrike_Chat_AllSpec"
};

new g_SayText;
new g_sMessage[MESSAGE_LENGTH];

#if defined FUNCTION_PLAYER_PREFIX
new const FILE_PREFIXES[] = "chatmanager_prefixes.ini";

new g_sGangPrefix[33][PREFIX_MAX_LENGTH];
new g_bCustomPrefix[33], g_sPlayerPrefix[33][PREFIX_MAX_LENGTH];
new Trie:g_tSteamPrefixes, g_iTrieSteamSize;
new Trie:g_tNamePrefixes, g_iTrieNameSize;
new Array:g_aFlagPrefixes, g_iArrayFlagSize;
#endif

#if defined FUNCTION_LOG_MESSAGES
new g_szLogFile[128];
#endif

#if defined FUNCTION_TRANSLITE
new g_bTranslite[33];
#endif

#if defined FUNCTION_ADD_STEAM_PREFIX
new g_bSteamPlayer[33];
#endif

enum Forwards
{
    SEND_MESSAGE
};

enum _:MessageReturn
{
    MESSAGE_IGNORED,
    MESSAGE_CHANGED,
    MESSAGE_BLOCKED
};

new g_iForwards[Forwards];
new g_sNewMessage[MESSAGE_LENGTH];

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    #if defined FUNCTION_PLAYER_PREFIX
    register_concmd("cm_set_prefix", "Command_SetPrefix", ADMIN_RCON, "<name or #userid> <prefix>");
    #endif
    
    register_concmd("cmd_check_chat_color", "check_chat_color", ADMIN_IMMUNITY);
    register_concmd("cmd_check_gang_prefix", "check_gang_prefix");
    
    #if defined FUNCTION_TRANSLITE
    register_clcmd("say /rus", "Command_LangChange");
    register_clcmd("say /eng", "Command_LangChange");
    #endif

    register_clcmd("say", "Command_SayHandler");
    register_clcmd("say_team", "Command_SayHandler");
    
    register_message((g_SayText = get_user_msgid("SayText")), "Message_SayText");

    // cm_player_send_message(id, message[], team_chat);
    g_iForwards[SEND_MESSAGE] = CreateMultiForward("cm_player_send_message", ET_STOP, FP_CELL, FP_STRING, FP_CELL);
    
    for(new id = 0; id <= get_maxplayers(); id++)
    {
        admin_chat_color[id] = false;
    }
}

public plugin_cfg()
{
    #if defined FUNCTION_LOG_MESSAGES
    new szDir[] = "addons/amxmodx/logs/chatmanager";
    if(!dir_exists(szDir))
    {
        mkdir(szDir);
    }
    new szDate[16]; get_time("%Y%m%d", szDate, charsmax(szDate));
    formatex(g_szLogFile, charsmax(g_szLogFile), "%s/chatlog_%s.html", szDir, szDate);
    if(!file_exists(g_szLogFile))
    {
        write_file(g_szLogFile, "<meta charset=utf-8><title>ChatManager Log</title>");
    }
    #endif
    
    #if defined FUNCTION_PLAYER_PREFIX
    LoadPlayersPrefixes();
    #endif
    
    #if defined FUNCTION_AES_TAGS
    register_dictionary("aes.txt");
    #endif
}
#if defined FUNCTION_PLAYER_PREFIX
LoadPlayersPrefixes()
{
    new szDir[128]; get_localinfo("amxx_configsdir", szDir, charsmax(szDir));
    new szFile[128]; formatex(szFile, charsmax(szFile), "%s/%s", szDir, FILE_PREFIXES);
    
    if(!file_exists(szFile))
    {
        log_amx("Prefixes file doesn't exist!");
        return;
    }
    
    g_tSteamPrefixes = TrieCreate();
    g_tNamePrefixes = TrieCreate();
    g_aFlagPrefixes = ArrayCreate(FLAG_PREFIX_INFO);
    
    new file = fopen(szFile, "rt");
    
    if(file)
    {
        new szText[128], szType[6], szAuth[32], szPrefix[PREFIX_MAX_LENGTH + COLOR_BUFFER], eFlagPrefix[FLAG_PREFIX_INFO];
        while(!feof(file))
        {
            fgets(file, szText, charsmax(szText));
            parse(szText, szType, charsmax(szType), szAuth, charsmax(szAuth), szPrefix, charsmax(szPrefix));
            
            if(!szType[0] || szType[0] == ';' || !szAuth[0] || !szPrefix[0]) continue;
            
            replace_color_tag(szPrefix);
            
            switch(szType[0])
            {
                case 's'://steam
                {
                    TrieSetString(g_tSteamPrefixes, szAuth, szPrefix);
                    g_iTrieSteamSize++;
                }
                case 'n'://name
                {
                    TrieSetString(g_tNamePrefixes, szAuth, szPrefix);
                    g_iTrieNameSize++;
                }
                case 'f'://flag
                {
                    eFlagPrefix[m_Flag] = read_flags(szAuth);
                    copy(eFlagPrefix[m_Prefix], charsmax(eFlagPrefix[m_Prefix]), szPrefix);
                    ArrayPushArray(g_aFlagPrefixes, eFlagPrefix);
                    g_iArrayFlagSize++;
                }
            }
        }
        fclose(file);
    }
}
#endif
public plugin_natives()
{
    register_native("cm_set_player_message", "native_set_player_message");
}
public native_set_player_message(plugin, params)
{
    enum { arg_new_message = 1 };
    get_string(arg_new_message, g_sNewMessage, charsmax(g_sNewMessage));
}
public client_putinserver(id)
{   
    #if defined FUNCTION_TRANSLITE
    g_bTranslite[id] = false;
    #endif
    
    g_sGangPrefix[id] = "";
    
    set_task(1.0, "check_gang_prefix", id);
    
    #if defined FUNCTION_PLAYER_PREFIX
    g_sPlayerPrefix[id] = "";
    g_bCustomPrefix[id] = false;
    
    new szSteam[32]; get_user_authid(id, szSteam, charsmax(szSteam));
    if(g_iTrieSteamSize && TrieKeyExists(g_tSteamPrefixes, szSteam))
    {
        g_bCustomPrefix[id] = true;
        TrieGetString(g_tSteamPrefixes, szSteam, g_sPlayerPrefix[id], charsmax(g_sPlayerPrefix[]));
    }
    #endif
    
    #if defined FUNCTION_ADD_STEAM_PREFIX
    g_bSteamPlayer[id] = is_user_steam(id);
    #endif
    
    if(get_user_flags(id) & ADMIN_IMMUNITY)
    {
        set_task(1.0, "check_chat_color", id);
    }
}

public check_gang_prefix(id)
{
    new Handle: SqlConnection = SQL_Connect(s_SqlTuple, ErrorCode, szSqlError, charsmax(szSqlError));
    new szSteamID[32]; get_user_authid(id, szSteamID,  charsmax(szSteamID));
    new Handle: Query = SQL_PrepareQuery(SqlConnection, "SELECT GangID FROM surf_gang_members WHERE SteamID = '%s';", szSteamID);
    SQL_Execute(Query);

    if(SQL_NumResults(Query) == 0)
    {
        g_sGangPrefix[id] = "";
        return PLUGIN_HANDLED;
    }
    
    new gID = SQL_ReadResult(Query, 0);
    
    Query = SQL_PrepareQuery(SqlConnection, "SELECT GChatPrefix FROM surf_gangs WHERE ID = '%d';", gID);
    SQL_Execute(Query);
    
    new query_result[5];
    SQL_ReadResult(Query, 0, query_result, 4);

    if(!equal(query_result, "none"))
    {
        format(g_sGangPrefix[id], 11, "^1[^3%s^1] ", query_result);
    }
    else
    {
        g_sGangPrefix[id] = "";
    }

    
    SQL_FreeHandle(Query);
    SQL_FreeHandle(SqlConnection);
    return PLUGIN_HANDLED;
}

public check_chat_color(id)
{
    if(get_user_flags(id) & ADMIN_IMMUNITY)
    {
        new szSteamID[32]; get_user_authid(id, szSteamID,  charsmax(szSteamID));   
        new Handle: SqlConnection = SQL_Connect(s_SqlTuple, ErrorCode, szSqlError, charsmax(szSqlError));
        new Handle: Query = SQL_PrepareQuery(SqlConnection, "SELECT chat_color FROM surf_bd WHERE steamid = '%s';", szSteamID);
        SQL_Execute(Query);

        if(SQL_NumResults(Query) > 0)
        {
            new name[32];
            get_user_name(id, name, 31);
            new sql_chat_color[33];
            SQL_ReadResult(Query, 0, sql_chat_color, 32);   
            
            if(equal(sql_chat_color, "green"))
            {
                admin_chat_color[id] = true;
            }
            else
            {
                admin_chat_color[id] = false;
            }
        }
        else
        {
            admin_chat_color[id] = true;
        }
        SQL_FreeHandle(Query);
        SQL_FreeHandle(SqlConnection);
    }   
}

#if defined FUNCTION_PLAYER_PREFIX
public Command_SetPrefix(id, level, cid)
{
    if(!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED;

    new szArg[32]; read_argv(1, szArg, charsmax(szArg));
    new player = cmd_target(id, szArg, CMDTARGET_ALLOW_SELF);
    
    if(!player) return PLUGIN_HANDLED;
    
    new szPrefix[PREFIX_MAX_LENGTH + COLOR_BUFFER]; read_argv(2, szPrefix, charsmax(szPrefix));
    replace_color_tag(szPrefix);
    
    console_print(id, "You changed player prefix from %s to %s.", g_sPlayerPrefix[player], szPrefix);
    
    copy(g_sPlayerPrefix[player], charsmax(g_sPlayerPrefix[]), szPrefix);
    g_bCustomPrefix[player] = true;
    
    return PLUGIN_HANDLED;
}
#endif
#if defined FUNCTION_TRANSLITE
public Command_LangChange(id)
{
    g_bTranslite[id] = !g_bTranslite[id];
    color_print(id, "^1[^4Реактивный полёт^1] Ты сменил язык чата на ^3%s^1.", g_bTranslite[id] ? "русский" : "английский");
    return PLUGIN_HANDLED;
}
#endif

// SQL

// подключение
public fbans_sql_connected(Handle:sqlTuple)
{
    if( s_SqlTuple == Empty_Handle )
    {
        Sql_Connect(sqlTuple);
    }
}

public Sql_Connect(Handle:sqlTuple)
{
    s_SqlTuple = sqlTuple;
}
// подключение

public Command_SayHandler(id)
{
    if (!is_user_connected(id)) return PLUGIN_HANDLED;
    
    new message[TEXT_LENGTH];
    
    read_argv(0, message, charsmax(message));
    new is_team_msg = (message[3] == '_');
    
    read_args(message, charsmax(message));
    remove_quotes(message);
    replace_wrong_simbols(message);
    trim(message);
    
    if(!message[0]) return PLUGIN_HANDLED;
    
    #if defined FUNCTION_HIDE_SLASH
    if(message[0] == '/') return PLUGIN_HANDLED_MAIN;
    #endif
    
    new flags = get_user_flags(id);
    
    new name[32]; get_user_name(id, name, charsmax(name));
    
    #if defined FUNCTION_PLAYER_PREFIX
    if(!g_bCustomPrefix[id])
    {
        if(g_iTrieNameSize && TrieKeyExists(g_tNamePrefixes, name))
        {
            TrieGetString(g_tNamePrefixes, name, g_sPlayerPrefix[id], charsmax(g_sPlayerPrefix[]));
        }
        else if(g_iArrayFlagSize)
        {
            new eFlagPrefix[FLAG_PREFIX_INFO], bFoundPrefix = false;
            for(new i; i < g_iArrayFlagSize; i++)
            {
                ArrayGetArray(g_aFlagPrefixes, i, eFlagPrefix);
                if(check_flags(flags, eFlagPrefix[m_Flag]))
                {
                    bFoundPrefix = true;
                    copy(g_sPlayerPrefix[id], charsmax(g_sPlayerPrefix[]), eFlagPrefix[m_Prefix]);
                    break;
                }
            }
            
            if(!bFoundPrefix)
            {
                g_sPlayerPrefix[id] = "";
            }
        }
    }
    #endif
    
    #if defined FUNCTION_TRANSLITE
    if(g_bTranslite[id])
    {
        if(message[0] == '/')
        {
            copy(message, charsmax(message), message[1]);
        }
        else
        {
            new szTranslitedText[TEXT_LENGTH];
            translite_string(szTranslitedText, charsmax(szTranslitedText), message);
            copy(message, charsmax(message), szTranslitedText);
        }
    }
    #endif
    
    new ret; ExecuteForward(g_iForwards[SEND_MESSAGE], ret, id, message, is_team_msg);

    if(ret)
    {
        if(ret == MESSAGE_BLOCKED)
        {
            return PLUGIN_HANDLED;
        }
        copy(message, charsmax(message), g_sNewMessage);
    }

    if(!message[0])
    {
        return PLUGIN_HANDLED;
    }

    new name_color = flags & ADMIN_FLAG ? ADMIN_NAME_COLOR : PLAYER_NAME_COLOR;
    new chat_color = flags & ADMIN_IMMUNITY ? admin_chat_color[id] ? ADMIN_CHAT_COLOR : PLAYER_CHAT_COLOR : flags & ADMIN_FLAG ? ADMIN_CHAT_COLOR : PLAYER_CHAT_COLOR; //= flags & ADMIN_FLAG ? ADMIN_CHAT_COLOR : PLAYER_CHAT_COLOR;
    
    new time_code[16]; get_time("[%H:%M:%S] ", time_code, charsmax(time_code));
    
    new is_sender_alive = is_user_alive(id);
    new CsTeams:sender_team = cs_get_user_team(id);
    
    new channel = get_user_text_channel(is_sender_alive, is_team_msg, sender_team);
    
    FormatMessage(id, sender_team, channel, name_color, chat_color, time_code, message);
    
    #if defined FUNCTION_ALL_CHAT
    new players[32], players_num; get_players(players, players_num, "ch");
    new player, is_player_alive, CsTeams:player_team, player_flags;
    
    for(new i; i < players_num; i++)
    {
        player = players[i];
        
        if(player == id) continue;
        
        is_player_alive = is_user_alive(player);
        player_team = cs_get_user_team(player);
        player_flags = get_user_flags(player) & ADMIN_FLAG ? ADMIN_CHAT_FLAGS : PLAYER_CHAT_FLAGS;
        
        if(player_flags & ALIVE_SEE_DEAD && !is_sender_alive && is_player_alive && (!is_team_msg || is_team_msg && sender_team == player_team) //flag ALIVE_SEE_DEAD
        || player_flags & DEAD_SEE_ALIVE && is_sender_alive && !is_player_alive && (!is_team_msg || is_team_msg && sender_team == player_team) //flag DEAD_SEE_ALIVE
        || player_flags & TEAM_SEE_TEAM && is_team_msg && sender_team != player_team) //flag TEAM_SEE_TEAM
        {
            emessage_begin(MSG_ONE, g_SayText, _, player);
            ewrite_byte(id);
            ewrite_string(g_TextChannels[channel]);
            ewrite_string("");
            ewrite_string("");
            emessage_end();
        }
    }
    #endif
    
    #if defined FUNCTION_LOG_MESSAGES
    static const szTeamColor[CsTeams][] = {"gray", "red", "blue", "gray"};
    new szLogMessage[256];
    formatex(szLogMessage, charsmax(szLogMessage), "<br><font color=black>%s %s %s <font color=%s><b>%s</b> </font>:</font><font color=%s> %s </font>", time_code, is_sender_alive ? "" : (_:sender_team == 1 || _:sender_team == 2 ? "*Мёртв*" : "*Наблюдатель*"), is_team_msg ? "(Командный)" : "", szTeamColor[sender_team], name, chat_color == GREEN ? "green" : "#FFB41E", message);
    write_file(g_szLogFile, szLogMessage);
    #endif
    
    return PLUGIN_CONTINUE;
}



public FormatMessage(sender, CsTeams:sender_team, channel, name_color, chat_color, time_code[], message[])
{
    static const szTeamNames[CsTeams][] = {"(Наблюдатели)", "(Террористы)", "(Контр-Терористы)", "(Наблюдатели)"};
    
    new szText[MESSAGE_LENGTH], len = 1;
    szText[0] = PRETEXT_COLOR;
    
    if(channel % 2)
    {
        len += formatex(szText[len], charsmax(szText) - len, "%s", channel != 7 ? "*Мёртв*" : "*Наблюдатель*");
    }
    
    if(channel > 1 && channel < 7)
    {
        len += formatex(szText[len], charsmax(szText) - len, "%s ", szTeamNames[sender_team]);
    }
    else if(channel)
    {
        len += formatex(szText[len], charsmax(szText) - len, " ");
    }
    
    #if defined FUNCTION_ADD_TIME_CODE
    len += formatex(szText[len], charsmax(szText) - len, "%s", time_code);
    #endif

    len += formatex(szText[len], charsmax(szText) - len, "%s", g_sGangPrefix[sender]);
    
    /*#if defined FUNCTION_ADD_STEAM_PREFIX
    if(g_bSteamPlayer[sender])
    {
        len += formatex(szText[len], charsmax(szText) - len, "%s", STEAM_PREFIX);
    }
    #endif*/
    
    #if defined FUNCTION_AES_TAGS
    new data[4], szAesTag[AES_MAX_LENGTH]; aes_get_player_stats(sender, data); aes_get_level_name(data[1], szAesTag, charsmax(szAesTag));
    len += formatex(szText[len], charsmax(szText) - len, AES_TAG_FORMAT, szAesTag);
    #endif
    
    #if defined FUNCTION_PLAYER_PREFIX
    len += formatex(szText[len], charsmax(szText) - len, "%s", g_sPlayerPrefix[sender]);
    #endif
    
    #if defined FUNCTION_BETA_SUPPORT
    new name[32]; get_user_name(sender, name, charsmax(name));
    len += formatex(szText[len], charsmax(szText) - len, "%c%s^1 :%c %s", name_color, name, chat_color, message);
    #else
    len += formatex(szText[len], charsmax(szText) - len, "%c%%s1^1 :%c %s", name_color, chat_color, message);
    #endif
    
    copy(g_sMessage, charsmax(g_sMessage), szText);
}

public Message_SayText(msgid, dest, receiver)
{
    if(get_msg_args() != 4) return PLUGIN_CONTINUE;
    
    new str2[22]; get_msg_arg_string(2, str2, charsmax(str2));
    
    new channel = get_msg_channel(str2);
    
    if(!channel) return PLUGIN_CONTINUE;
    
    new str3[2]; get_msg_arg_string(3, str3, charsmax(str3));
    
    if(str3[0]) return PLUGIN_CONTINUE;
    
    set_msg_arg_string(2, g_sMessage);
    set_msg_arg_string(4, "");
    
    return PLUGIN_CONTINUE;
}
get_msg_channel(str[])
{
    for(new i; i < sizeof(g_TextChannels); i++)
    {
        if(equal(str, g_TextChannels[i]))
        {
            return i + 1;
        }
    }
    return 0;
}
stock get_user_text_channel(is_sender_alive, is_team_msg, CsTeams:sender_team)
{
    if (is_team_msg)
    {
        switch(sender_team)
        {
            case CS_TEAM_T:
            {
                return is_sender_alive ? 2 : 3;
            }
            case CS_TEAM_CT:
            {
                return is_sender_alive ? 4 : 5;
            }
            default:
            {
                return 6;
            }
        }
    }
    return is_sender_alive ? 0 : (sender_team == CS_TEAM_SPECTATOR ? 7 : 1);
}
stock replace_wrong_simbols(string[])
{
    new len = 0;
    for(new i; string[i] != EOS; i++)
    {
        if(string[i] == '%' || string[i] == '#' || 0x01 <= string[i] <= 0x04) continue;
        string[len++] = string[i];
    }
    string[len] = EOS;
}
#if defined FUNCTION_PLAYER_PREFIX
replace_color_tag(string[])
{
    new len = 0;
    for (new i; string[i] != EOS; i++)
    {
        if (string[i] == '!')
        {
            switch (string[++i])
            {
                case 'd': string[len++] = 0x01;
                case 't': string[len++] = 0x03;
                case 'g': string[len++] = 0x04;
                case EOS: break;
                default: string[len++] = string[i];
            }
        }
        else
        {
            string[len++] = string[i];
        }
    }
    string[len] = EOS;
}
#endif
stock translite_string(string[], size, source[])
{
    static const table[][] =
    {
        "Э", "#", ";", "%", "?", "э", "(", ")", "*", "+", "б", "-", "ю", ".", "0", "1", "2", "3", "4",
        "5", "6", "7", "8", "9", "Ж", "ж", "Б", "=", "Ю", ",", "^"", "Ф", "И", "С", "В", "У", "А", "П",
        "Р", "Ш", "О", "Л", "Д", "Ь", "Т", "Щ", "З", "Й", "К", "Ы", "Е", "Г", "М", "Ц", "Ч", "Н", "Я",
        "х", "\", "ъ", ":", "_", "ё", "ф", "и", "с", "в", "у", "а", "п", "р", "ш", "о", "л", "д", "ь",
        "т", "щ", "з", "й", "к", "ы", "е", "г", "м", "ц", "ч", "н", "я", "Х", "/", "Ъ", "Ё"
    };
    
    new len = 0;
    for (new i = 0; source[i] != EOS && len < size; i++)
    {
        new ch = source[i];
        
        if ('"' <= ch <= '~')
        {
            ch -= '"';
            string[len++] = table[ch][0];
            if (table[ch][1] != EOS)
            {
                string[len++] = table[ch][1];
            }
        }
        else
        {
            string[len++] = ch;
        }
    }
    string[len] = EOS;
    
    return len;
}
stock color_print(id, text[], any:...)
{
    new formated[190]; vformat(formated, charsmax(formated), text, 3);
    message_begin(id ? MSG_ONE : MSG_ALL, g_SayText, _, id);
    write_byte(id);
    write_string(formated);
    message_end();
}
stock check_flags(flags, need_flags)
{
    return ((flags & need_flags) == need_flags) ? 1 : 0;
}
stock is_user_steam(id)
{
    static dp_pointer;
    if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider")))
    {
        server_cmd("dp_clientinfo %d", id); server_exec();
        return (get_pcvar_num(dp_pointer) == 2) ? true : false;
    }
    return false;
}
 

Вложения

Сообщения
265
Реакции
0
Предупреждения
2
Помог
5 раз(а)
35 строку за комментаруй
26 Июл 2023
Также попробуй обновиться до последней версии regamedll, rehlds.
 
Сообщения
365
Реакции
9
Помог
5 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Сообщения
3,023
Реакции
1,731
Помог
79 раз(а)
Заполняя каждое поле, внимательно читайте подсказки под ними. Игнорирование данных действий может повлечь закрытие Вашей темы и тогда Вам придется снова создавать тему согласно требованиям, которые Вы проигнорировали.
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу