Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Важная информация

Перед тем как создать тему или задать вопрос, ознакомьтесь с данной темой, там собраны наиболее распространенные уязвимости и способы устранения.
Так же не поленитесь воспользоваться поиском, вполне возможно, что ваш вопрос уже поднимался на форуме.
При создании новой темы уделите внимание ее названию, оно должно кратко описывать суть вашего вопроса/проблемы. Все вновь созданные темы с названиями "Помогите", "Объясните", "Подскажите" и т.д. будут удалены, а их авторы наказаны.
413 страниц V  « 140 141 142 ... 411 412 »

Защита Counter Strike Сервера

, Методы защиты от различных уязвимостей игровых серверов
Статус пользователя PREDATOREX
сообщение 15.8.2014, 17:02
Сообщение #2801


Стаж: 17 лет

Сообщений: 828
Благодарностей: 611
Полезность: 674

serveroc.com.ua
Цитата(CSer4you @ 15.8.2014, 17:00) *
В общем,подытожу: как я понял, то для меня, как пользователя колоред транслит, надо поставить метаплагин сайлента, последний фикс от [WPMG]PRoSToTeM@ и фикс колортранслита %s?


Нет, только chatfix_mm_i386.so и будет достаточно.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
csgamer
сообщение 15.8.2014, 17:02
Сообщение #2802
Стаж: 12 лет

Сообщений: 398
Благодарностей: 16
Полезность: 0

Цитата([WPMG]PRoSToTeM@ @ 15.8.2014, 19:48) *

Этот пост ты написал после выпуска обновы:


Новая версия отличается только строчкой
trim(szBufferName);
если не секрет что она делает?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя [WPMG]PRoSToTeM@
сообщение 15.8.2014, 17:03
Сообщение #2803
Стаж: 13 лет

Сообщений: 1514
Благодарностей: 1025
Полезность: 725

csgamer, пробелы в начале и конце строки режет.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя followX
сообщение 15.8.2014, 17:10
Сообщение #2804


Стаж: 12 лет

Сообщений: 523
Благодарностей: 164
Полезность: 526

cshost.com.ua
напомните актуальный линк .so файла пожалуйста.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AlikCrain
сообщение 15.8.2014, 17:21
Сообщение #2805
Стаж: 12 лет

Сообщений: 22
Благодарностей: 5
Полезность: 173

Фикс против фей банит 127.0.0.1 помогите!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 15.8.2014, 17:28
Сообщение #2806


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Цитата(AlikCrain @ 15.8.2014, 19:21) *
Фикс против фей банит 127.0.0.1 помогите!

а почему эльфов не банит? или гномов?
феи что ли особенные?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя [WPMG]PRoSToTeM@
сообщение 15.8.2014, 17:38
Сообщение #2807
Стаж: 13 лет

Сообщений: 1514
Благодарностей: 1025
Полезность: 725

AlikCrain, наркоман? Каких фей?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя ex3m777
сообщение 15.8.2014, 17:39
Сообщение #2808


Стаж: 13 лет
Город: Москва

Сообщений: 2037
Благодарностей: 1135
Полезность: 968

Меценат Меценат

может он имеет ввиду, что с локалки банит игроков


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
shel
сообщение 15.8.2014, 18:22
Сообщение #2809
Стаж: 12 лет

Сообщений: 79
Благодарностей: 7
Полезность: 0

А кто сказал что куевый фикс не будет банить все подряд?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AlikCrain
сообщение 15.8.2014, 19:06
Сообщение #2810
Стаж: 12 лет

Сообщений: 22
Благодарностей: 5
Полезность: 173

Где-то наверху написали же "Августовские Феи" crazy.gif psych.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 15.8.2014, 19:09
Сообщение #2811
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(AlikCrain @ 15.8.2014, 19:21) *
Фикс против фей банит 127.0.0.1 помогите!

Всё верно, в заголовке:
Цитата(Safety1st @ 7.8.2014, 19:54) *
BanIP Fakes - защита от августовских фей

AlikCrain, белый список включите и внесите туда IP. Ну или так:
Код
#define WHITELIST_SIZE   1    // EXACTLY as rows quantity below; uncomment to enable whitelist

#if defined WHITELIST_SIZE
new const gszWhiteList[WHITELIST_SIZE][] = {
    "127.0.0.0/8"     // loopback interface (usually assigned IP is 127.0.0.1)
}
#endif

В плагине я не стал делать проверку на ботов и HLTV, их адреса нужно внести явно.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя s1lent
сообщение 15.8.2014, 19:18
Сообщение #2812
Стаж: 16 лет

Сообщений: 440
Благодарности: выкл.

1.5

добавил удалениие # из меню.

src
Код
#include "extdll.h"
#include "meta_api.h"

#undef C_DLLEXPORT

#ifdef __linux__
    #include <sys/mman.h>
    #define C_DLLEXPORT extern "C" __attribute__((visibility("default")))
#else
    #define C_DLLEXPORT extern "C" __declspec(dllexport)
#endif

#define HUD_PRINTRADIO 5

enum {
    PF_messageBegin,
    PF_messageByte,
    PF_messageString,
    PF_messageEnd,
    PF_Last
};

typedef struct message_s {

    BOOL doneSay;
    BOOL doneText;
    BOOL doneMenu;

    char *str[5];

    int argNum;
    int sayTextId;
    int textMsgId;
    int showMenuId;
} message_t;

typedef struct hooks_s {
    void *address;
    void *handler;
    unsigned char patchBytes[5];
    unsigned char originalBytes[5];

} hooks_t;

hooks_t hookMessage[PF_Last];
message_t eventMessage;

plugin_info_t Plugin_info = {

    META_INTERFACE_VERSION,
    "ChatMenuFix",
    "1.5",
    "10/08/14",
    "s1lent",
    "http://www.aghl.ru/",
    "ChatMenuFix",
    PT_STARTUP,
    PT_NEVER,
};

DLL_FUNCTIONS gpFunctionTable;

enginefuncs_t g_engfuncs;
enginefuncs_t g_engfuncs_post;

meta_globals_t *gpMetaGlobals;
gamedll_funcs_t *gpGamedllFuncs;
mutil_funcs_t *gpMetaUtilFuncs;

globalvars_t *gpGlobals;
META_FUNCTIONS gMetaFunctionTable;

C_DLLEXPORT int Meta_Query(char *,plugin_info_t **pPlugInfo,mutil_funcs_t *pMetaUtilFuncs) {
    *pPlugInfo = &Plugin_info;
    gpMetaUtilFuncs = pMetaUtilFuncs;
    return TRUE;
}
BOOL allowMemoryPatch(void *ptr) {
#ifdef __linux__
    void *addr = (void *)((long)ptr & ~(4096 - 1));
    return !mprotect(addr,sysconf(_SC_PAGESIZE),(PROT_READ|PROT_WRITE|PROT_EXEC));
#else
    static DWORD oldProtection;
    return VirtualProtect(ptr,5,PAGE_EXECUTE_READWRITE,&oldProtection);
#endif
}
BOOL doPatch(hooks_t *a) {
    if(allowMemoryPatch(a->address)) {
        memcpy(a->address,a->patchBytes,5);
    }
    return TRUE;
}
BOOL undoPatch(hooks_t *a) {
    if(allowMemoryPatch(a->address)) {
        memcpy(a->address,a->originalBytes,5);
    }
    return TRUE;
}
inline void T_MESSAGE_BEGIN(int msg_dest,int msg_type,const float *pOrigin = NULL,edict_t *ed = NULL) {
    hooks_t *a = &hookMessage[PF_messageBegin];
    if(undoPatch(a)) {
        reinterpret_cast<void (*)(int,int,const float *,edict_t *)>(a->address)(msg_dest,msg_type,pOrigin,ed);
        doPatch(a);
    }
}
inline void T_WRITE_BYTE(int iValue) {
    hooks_t *a = &hookMessage[PF_messageByte];
    if(undoPatch(a)) {
        reinterpret_cast<void (*)(int)>(a->address)(iValue);
        doPatch(a);
    }
}
inline void T_WRITE_STRING(const char *szString) {
    hooks_t *a = &hookMessage[PF_messageString];
    if(undoPatch(a)) {
        reinterpret_cast<void (*)(const char *)>(a->address)(szString);
        doPatch(a);
    }
}
inline void T_MESSAGE_END() {
    hooks_t *a = &hookMessage[PF_messageEnd];
    if(undoPatch(a)) {
        reinterpret_cast<void (*)()>(a->address)();
        doPatch(a);
    }
}
void MessageBegin(int msg_dest,int msg_type,const float *pOrigin,edict_t *ed) {

    message_t *p = &eventMessage;
    if(p->sayTextId == msg_type) {

        for(unsigned int i = 0; i < (sizeof(p->str) / sizeof(p->str[0]) - 1); i++) {
            *(p->str[i]) = '\0';
        }

        p->argNum = 0;
        p->doneSay = TRUE;
    }
    else if(p->textMsgId == msg_type) {
        
        for(unsigned int i = 0; i < (sizeof(p->str) / sizeof(p->str[0]) - 1); i++) {
            *(p->str[i]) = '\0';
        }

        p->argNum = 0;
        p->doneText = TRUE;
    }
    else if(p->showMenuId == msg_type) {
        p->doneMenu = TRUE;
    }
    T_MESSAGE_BEGIN(msg_dest,msg_type,pOrigin,ed);
};
void WriteByte(int iValue) {

    message_t *p = &eventMessage;
    if(p->doneText) {
        if(iValue != HUD_PRINTTALK && iValue != HUD_PRINTRADIO) {
            p->doneText = FALSE;
        }
    }
    T_WRITE_BYTE(iValue);
};
void WriteString(const char *szString) {

    message_t *p = &eventMessage;
    if(p->doneSay || p->doneText) {
        if(!p->argNum && *(szString) == '#') {
            if(p->doneSay) {
                p->doneSay = FALSE;
            }
            if(p->doneText) {
                p->doneText = FALSE;
            }
            T_WRITE_STRING(szString);
            return;
        }
        strcpy(p->str[p->argNum],szString);
        *(p->str[p->argNum++] + 186) = '\0';
        return;
    }
    else if(p->doneMenu) {

        if(*(szString) == '\0' || *(szString) == '#') {
            T_WRITE_STRING(szString);
            return;
        }

        int i = 0;
        char *str = const_cast<char *>(szString);
        char *phaystack = new char[512];

        for(;*str; *(str++), i++) {
            if(*(str) == '#') {
                *(str) = 0x20;
            }
            *(phaystack + i) = *str;
        }

        *(phaystack + i) = '\0';
        T_WRITE_STRING((const char *)phaystack);
        delete[] phaystack;
        return;
    }
    T_WRITE_STRING(szString);
};
void MessageEnd() {
    message_t *p = &eventMessage;    
    if(p->argNum) {
        if(p->doneSay) {
            switch(p->argNum) {
                case 1: {
                    T_WRITE_STRING("%s");
                    T_WRITE_STRING((const char *)p->str[0]);
                    break;
                }
                case 2: {
                    T_WRITE_STRING((const char *)p->str[0]);
                    T_WRITE_STRING((const char *)p->str[1]);
                    break;
                }
                case 3: {
                    T_WRITE_STRING((const char *)p->str[0]);
                    T_WRITE_STRING((const char *)p->str[1]);
                    T_WRITE_STRING((const char *)p->str[2]);
                    break;
                }
                default: {
                    break;
                }
            }
            p->doneSay = FALSE;
        }
        else if(p->doneText) {
            switch(p->argNum) {
                case 1: {

                    char *str = const_cast<char *>(p->str[0]);

                    if(!str) {
                        break;
                    }

                    int i = 0;

                    BOOL bHashLocaliz = FALSE;
                    BOOL bBottomLine = FALSE;

                    char *phaystack = new char[187];
                    for(;*str; *(str++), i++) {

                        if(!bHashLocaliz && (*str == '#')) {
                            bHashLocaliz = TRUE;
                        }
                        else if(bHashLocaliz) {

                            if(bBottomLine && (*str == 0x20)) {
                                bHashLocaliz = FALSE;
                                bBottomLine = FALSE;

                                *(phaystack + (i++)) = 0xA0;
                            }
                            else if(!bBottomLine && (*str == 0x5F)) {
                                bBottomLine = TRUE;
                            }
                        }
                        *(phaystack + i) = *str;
                    }

                    *(phaystack + i) = *(phaystack + 186) = '\0';
                    T_WRITE_STRING((const char *)phaystack);

                    delete[] phaystack;
                    break;
                }
                case 2: {
                    T_WRITE_STRING((const char *)p->str[0]);
                    T_WRITE_STRING((const char *)p->str[1]);
                    break;
                }
                case 3: {
                    T_WRITE_STRING((const char *)p->str[0]);
                    T_WRITE_STRING((const char *)p->str[1]);
                    T_WRITE_STRING((const char *)p->str[2]);
                    break;
                }
                case 4: {
                    T_WRITE_STRING((const char *)p->str[0]);
                    T_WRITE_STRING((const char *)p->str[1]);
                    T_WRITE_STRING((const char *)p->str[2]);
                    T_WRITE_STRING((const char *)p->str[3]);
                    break;
                }
                case 5: {
                    T_WRITE_STRING((const char *)p->str[0]);
                    T_WRITE_STRING((const char *)p->str[1]);
                    T_WRITE_STRING((const char *)p->str[2]);
                    T_WRITE_STRING((const char *)p->str[3]);
                    T_WRITE_STRING((const char *)p->str[4]);
                    break;
                }
                default: {
                    break;
                }
            }
            p->doneText = FALSE;
        }
    }
    T_MESSAGE_END();
    if(p->doneMenu) {
        p->doneMenu = FALSE;
    }
}
int RegUserMsg_Post(const char *szName,int)
{
    message_t *p = &eventMessage;
    if(!strcmp(szName,"SayText")) {
        p->sayTextId = META_RESULT_ORIG_RET(int);
    }
    else if(!strcmp(szName,"TextMsg")) {
        p->textMsgId = META_RESULT_ORIG_RET(int);
    }
    else if(!strcmp(szName,"ShowMenu")) {
        p->showMenuId = META_RESULT_ORIG_RET(int);
    }
    RETURN_META_VALUE(MRES_IGNORED,0);
}
C_DLLEXPORT int GetEngineFunctions_Post(enginefuncs_t *pengfuncsFromEngine,int *interfaceVersion) {
    memset(&g_engfuncs_post,0,sizeof(enginefuncs_t));
    g_engfuncs_post.pfnRegUserMsg = RegUserMsg_Post;
    memcpy(pengfuncsFromEngine,&g_engfuncs_post,sizeof(enginefuncs_t));
    return TRUE;
}
C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now,META_FUNCTIONS *pFunctionTable,meta_globals_t *pMGlobals,gamedll_funcs_t *pGamedllFuncs) {
    if(!pMGlobals) {
        return FALSE;
    }
    gpMetaGlobals = pMGlobals;
    if(!pFunctionTable) {
        return FALSE;
    }
    gpGamedllFuncs = pGamedllFuncs;

    void *r[] = {

        (void *)(*g_engfuncs.pfnMessageBegin), (void *)MessageBegin,
        (void *)(*g_engfuncs.pfnWriteByte), (void *)WriteByte,
        (void *)(*g_engfuncs.pfnWriteString), (void *)WriteString,
        (void *)(*g_engfuncs.pfnMessageEnd), (void *)MessageEnd
    };

    message_t *p = &eventMessage;
    for(unsigned int i = 0; i < (sizeof(p->str) / sizeof(p->str[0]) - 1); i++) {
        p->str[i] = new char[187];
    }

    hooks_t *a = NULL;
    for(int j = 0; j < PF_Last * 2; j += 2) {
        a = &hookMessage[j / 2];

        a->address = r[j];
        a->handler = r[j + 1];
        a->patchBytes[0] = 0xE9;

        // hooks of jump
        *((unsigned long *)(&a->patchBytes[1])) = (unsigned long)a->handler - (unsigned long)a->address - 5;

        memcpy(a->originalBytes,(void *)a->address,5);

        if(allowMemoryPatch(a->address)) {
            memcpy(a->address,a->patchBytes,5);
        }
    }
    gMetaFunctionTable.pfnGetEngineFunctions_Post = GetEngineFunctions_Post;
    memcpy(pFunctionTable,&gMetaFunctionTable,sizeof(META_FUNCTIONS));
    return TRUE;
}
C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now,PL_UNLOAD_REASON reason) {
    return FALSE;
}
#ifdef __linux__
    C_DLLEXPORT void GiveFnptrsToDll(enginefuncs_t *pengfuncsFromEngine,globalvars_t *pGlobals) {
#else
    #ifdef _MSC_VER
    C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll(enginefuncs_t *pengfuncsFromEngine,globalvars_t *pGlobals) {
        __asm {
            push ebp
            mov ebp,esp
            sub esp,__LOCAL_SIZE
            push ebx
            push esi
            push edi
        }
    #else    // _MSC_VER
        #ifdef __GNUC__
            C_DLLEXPORT void __stdcall GiveFnptrsToDll(enginefuncs_t *pengfuncsFromEngine,globalvars_t *pGlobals) {
        #else
            #error There is no support (yet) for your compiler. Please use MSVC or GCC compilers.
        #endif
    #endif // _MSC_VER
#endif // __linux__
        memcpy(&g_engfuncs,pengfuncsFromEngine,sizeof(enginefuncs_t));
        gpGlobals = pGlobals;
        #ifdef _MSC_VER
        if(sizeof(int *) == 8) {
            __asm {
                pop edi
                pop esi
                pop ebx
                mov esp,ebp
                pop ebp
                ret 16
            }
        }
        else {
            __asm {
                pop edi
                pop esi
                pop ebx
                mov esp,ebp
                pop ebp
                ret 8
            }
        }
    #endif // #ifdef _MSC_VER
}


ps.gif толком не тестил.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя [WPMG]PRoSToTeM@
сообщение 15.8.2014, 19:25
Сообщение #2813
Стаж: 13 лет

Сообщений: 1514
Благодарностей: 1025
Полезность: 725

s1lent, меню же посылается фрагментами, надо проверять на # только в первом фрагменте (или же только если посылается без фрагментов).
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя PREDATOREX
сообщение 15.8.2014, 20:28
Сообщение #2814


Стаж: 17 лет

Сообщений: 828
Благодарностей: 611
Полезность: 674

serveroc.com.ua
Цитата(s1lent @ 15.8.2014, 19:18) *
1.5

добавил удалениие # из меню.

src
Код
#include "extdll.h"
#include "meta_api.h"

#undef C_DLLEXPORT

#ifdef __linux__
    #include <sys/mman.h>
    #define C_DLLEXPORT extern "C" __attribute__((visibility("default")))
#else
    #define C_DLLEXPORT extern "C" __declspec(dllexport)
#endif

#define HUD_PRINTRADIO 5

enum {
    PF_messageBegin,
    PF_messageByte,
    PF_messageString,
    PF_messageEnd,
    PF_Last
};

typedef struct message_s {

    BOOL doneSay;
    BOOL doneText;
    BOOL doneMenu;

    char *str[5];

    int argNum;
    int sayTextId;
    int textMsgId;
    int showMenuId;
} message_t;

typedef struct hooks_s {
    void *address;
    void *handler;
    unsigned char patchBytes[5];
    unsigned char originalBytes[5];

} hooks_t;

hooks_t hookMessage[PF_Last];
message_t eventMessage;

plugin_info_t Plugin_info = {

    META_INTERFACE_VERSION,
    "ChatMenuFix",
    "1.5",
    "10/08/14",
    "s1lent",
    "http://www.aghl.ru/",
    "ChatMenuFix",
    PT_STARTUP,
    PT_NEVER,
};

DLL_FUNCTIONS gpFunctionTable;

enginefuncs_t g_engfuncs;
enginefuncs_t g_engfuncs_post;

meta_globals_t *gpMetaGlobals;
gamedll_funcs_t *gpGamedllFuncs;
mutil_funcs_t *gpMetaUtilFuncs;

globalvars_t *gpGlobals;
META_FUNCTIONS gMetaFunctionTable;

C_DLLEXPORT int Meta_Query(char *,plugin_info_t **pPlugInfo,mutil_funcs_t *pMetaUtilFuncs) {
    *pPlugInfo = &Plugin_info;
    gpMetaUtilFuncs = pMetaUtilFuncs;
    return TRUE;
}
BOOL allowMemoryPatch(void *ptr) {
#ifdef __linux__
    void *addr = (void *)((long)ptr & ~(4096 - 1));
    return !mprotect(addr,sysconf(_SC_PAGESIZE),(PROT_READ|PROT_WRITE|PROT_EXEC));
#else
    static DWORD oldProtection;
    return VirtualProtect(ptr,5,PAGE_EXECUTE_READWRITE,&oldProtection);
#endif
}
BOOL doPatch(hooks_t *a) {
    if(allowMemoryPatch(a->address)) {
        memcpy(a->address,a->patchBytes,5);
    }
    return TRUE;
}
BOOL undoPatch(hooks_t *a) {
    if(allowMemoryPatch(a->address)) {
        memcpy(a->address,a->originalBytes,5);
    }
    return TRUE;
}
inline void T_MESSAGE_BEGIN(int msg_dest,int msg_type,const float *pOrigin = NULL,edict_t *ed = NULL) {
    hooks_t *a = &hookMessage[PF_messageBegin];
    if(undoPatch(a)) {
        reinterpret_cast<void (*)(int,int,const float *,edict_t *)>(a->address)(msg_dest,msg_type,pOrigin,ed);
        doPatch(a);
    }
}
inline void T_WRITE_BYTE(int iValue) {
    hooks_t *a = &hookMessage[PF_messageByte];
    if(undoPatch(a)) {
        reinterpret_cast<void (*)(int)>(a->address)(iValue);
        doPatch(a);
    }
}
inline void T_WRITE_STRING(const char *szString) {
    hooks_t *a = &hookMessage[PF_messageString];
    if(undoPatch(a)) {
        reinterpret_cast<void (*)(const char *)>(a->address)(szString);
        doPatch(a);
    }
}
inline void T_MESSAGE_END() {
    hooks_t *a = &hookMessage[PF_messageEnd];
    if(undoPatch(a)) {
        reinterpret_cast<void (*)()>(a->address)();
        doPatch(a);
    }
}
void MessageBegin(int msg_dest,int msg_type,const float *pOrigin,edict_t *ed) {

    message_t *p = &eventMessage;
    if(p->sayTextId == msg_type) {

        for(unsigned int i = 0; i < (sizeof(p->str) / sizeof(p->str[0]) - 1); i++) {
            *(p->str[i]) = '\0';
        }

        p->argNum = 0;
        p->doneSay = TRUE;
    }
    else if(p->textMsgId == msg_type) {
        
        for(unsigned int i = 0; i < (sizeof(p->str) / sizeof(p->str[0]) - 1); i++) {
            *(p->str[i]) = '\0';
        }

        p->argNum = 0;
        p->doneText = TRUE;
    }
    else if(p->showMenuId == msg_type) {
        p->doneMenu = TRUE;
    }
    T_MESSAGE_BEGIN(msg_dest,msg_type,pOrigin,ed);
};
void WriteByte(int iValue) {

    message_t *p = &eventMessage;
    if(p->doneText) {
        if(iValue != HUD_PRINTTALK && iValue != HUD_PRINTRADIO) {
            p->doneText = FALSE;
        }
    }
    T_WRITE_BYTE(iValue);
};
void WriteString(const char *szString) {

    message_t *p = &eventMessage;
    if(p->doneSay || p->doneText) {
        if(!p->argNum && *(szString) == '#') {
            if(p->doneSay) {
                p->doneSay = FALSE;
            }
            if(p->doneText) {
                p->doneText = FALSE;
            }
            T_WRITE_STRING(szString);
            return;
        }
        strcpy(p->str[p->argNum],szString);
        *(p->str[p->argNum++] + 186) = '\0';
        return;
    }
    else if(p->doneMenu) {

        if(*(szString) == '\0' || *(szString) == '#') {
            T_WRITE_STRING(szString);
            return;
        }

        int i = 0;
        char *str = const_cast<char *>(szString);
        char *phaystack = new char[512];

        for(;*str; *(str++), i++) {
            if(*(str) == '#') {
                *(str) = 0x20;
            }
            *(phaystack + i) = *str;
        }

        *(phaystack + i) = '\0';
        T_WRITE_STRING((const char *)phaystack);
        delete[] phaystack;
        return;
    }
    T_WRITE_STRING(szString);
};
void MessageEnd() {
    message_t *p = &eventMessage;    
    if(p->argNum) {
        if(p->doneSay) {
            switch(p->argNum) {
                case 1: {
                    T_WRITE_STRING("%s");
                    T_WRITE_STRING((const char *)p->str[0]);
                    break;
                }
                case 2: {
                    T_WRITE_STRING((const char *)p->str[0]);
                    T_WRITE_STRING((const char *)p->str[1]);
                    break;
                }
                case 3: {
                    T_WRITE_STRING((const char *)p->str[0]);
                    T_WRITE_STRING((const char *)p->str[1]);
                    T_WRITE_STRING((const char *)p->str[2]);
                    break;
                }
                default: {
                    break;
                }
            }
            p->doneSay = FALSE;
        }
        else if(p->doneText) {
            switch(p->argNum) {
                case 1: {

                    char *str = const_cast<char *>(p->str[0]);

                    if(!str) {
                        break;
                    }

                    int i = 0;

                    BOOL bHashLocaliz = FALSE;
                    BOOL bBottomLine = FALSE;

                    char *phaystack = new char[187];
                    for(;*str; *(str++), i++) {

                        if(!bHashLocaliz && (*str == '#')) {
                            bHashLocaliz = TRUE;
                        }
                        else if(bHashLocaliz) {

                            if(bBottomLine && (*str == 0x20)) {
                                bHashLocaliz = FALSE;
                                bBottomLine = FALSE;

                                *(phaystack + (i++)) = 0xA0;
                            }
                            else if(!bBottomLine && (*str == 0x5F)) {
                                bBottomLine = TRUE;
                            }
                        }
                        *(phaystack + i) = *str;
                    }

                    *(phaystack + i) = *(phaystack + 186) = '\0';
                    T_WRITE_STRING((const char *)phaystack);

                    delete[] phaystack;
                    break;
                }
                case 2: {
                    T_WRITE_STRING((const char *)p->str[0]);
                    T_WRITE_STRING((const char *)p->str[1]);
                    break;
                }
                case 3: {
                    T_WRITE_STRING((const char *)p->str[0]);
                    T_WRITE_STRING((const char *)p->str[1]);
                    T_WRITE_STRING((const char *)p->str[2]);
                    break;
                }
                case 4: {
                    T_WRITE_STRING((const char *)p->str[0]);
                    T_WRITE_STRING((const char *)p->str[1]);
                    T_WRITE_STRING((const char *)p->str[2]);
                    T_WRITE_STRING((const char *)p->str[3]);
                    break;
                }
                case 5: {
                    T_WRITE_STRING((const char *)p->str[0]);
                    T_WRITE_STRING((const char *)p->str[1]);
                    T_WRITE_STRING((const char *)p->str[2]);
                    T_WRITE_STRING((const char *)p->str[3]);
                    T_WRITE_STRING((const char *)p->str[4]);
                    break;
                }
                default: {
                    break;
                }
            }
            p->doneText = FALSE;
        }
    }
    T_MESSAGE_END();
    if(p->doneMenu) {
        p->doneMenu = FALSE;
    }
}
int RegUserMsg_Post(const char *szName,int)
{
    message_t *p = &eventMessage;
    if(!strcmp(szName,"SayText")) {
        p->sayTextId = META_RESULT_ORIG_RET(int);
    }
    else if(!strcmp(szName,"TextMsg")) {
        p->textMsgId = META_RESULT_ORIG_RET(int);
    }
    else if(!strcmp(szName,"ShowMenu")) {
        p->showMenuId = META_RESULT_ORIG_RET(int);
    }
    RETURN_META_VALUE(MRES_IGNORED,0);
}
C_DLLEXPORT int GetEngineFunctions_Post(enginefuncs_t *pengfuncsFromEngine,int *interfaceVersion) {
    memset(&g_engfuncs_post,0,sizeof(enginefuncs_t));
    g_engfuncs_post.pfnRegUserMsg = RegUserMsg_Post;
    memcpy(pengfuncsFromEngine,&g_engfuncs_post,sizeof(enginefuncs_t));
    return TRUE;
}
C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now,META_FUNCTIONS *pFunctionTable,meta_globals_t *pMGlobals,gamedll_funcs_t *pGamedllFuncs) {
    if(!pMGlobals) {
        return FALSE;
    }
    gpMetaGlobals = pMGlobals;
    if(!pFunctionTable) {
        return FALSE;
    }
    gpGamedllFuncs = pGamedllFuncs;

    void *r[] = {

        (void *)(*g_engfuncs.pfnMessageBegin), (void *)MessageBegin,
        (void *)(*g_engfuncs.pfnWriteByte), (void *)WriteByte,
        (void *)(*g_engfuncs.pfnWriteString), (void *)WriteString,
        (void *)(*g_engfuncs.pfnMessageEnd), (void *)MessageEnd
    };

    message_t *p = &eventMessage;
    for(unsigned int i = 0; i < (sizeof(p->str) / sizeof(p->str[0]) - 1); i++) {
        p->str[i] = new char[187];
    }

    hooks_t *a = NULL;
    for(int j = 0; j < PF_Last * 2; j += 2) {
        a = &hookMessage[j / 2];

        a->address = r[j];
        a->handler = r[j + 1];
        a->patchBytes[0] = 0xE9;

        // hooks of jump
        *((unsigned long *)(&a->patchBytes[1])) = (unsigned long)a->handler - (unsigned long)a->address - 5;

        memcpy(a->originalBytes,(void *)a->address,5);

        if(allowMemoryPatch(a->address)) {
            memcpy(a->address,a->patchBytes,5);
        }
    }
    gMetaFunctionTable.pfnGetEngineFunctions_Post = GetEngineFunctions_Post;
    memcpy(pFunctionTable,&gMetaFunctionTable,sizeof(META_FUNCTIONS));
    return TRUE;
}
C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now,PL_UNLOAD_REASON reason) {
    return FALSE;
}
#ifdef __linux__
    C_DLLEXPORT void GiveFnptrsToDll(enginefuncs_t *pengfuncsFromEngine,globalvars_t *pGlobals) {
#else
    #ifdef _MSC_VER
    C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll(enginefuncs_t *pengfuncsFromEngine,globalvars_t *pGlobals) {
        __asm {
            push ebp
            mov ebp,esp
            sub esp,__LOCAL_SIZE
            push ebx
            push esi
            push edi
        }
    #else    // _MSC_VER
        #ifdef __GNUC__
            C_DLLEXPORT void __stdcall GiveFnptrsToDll(enginefuncs_t *pengfuncsFromEngine,globalvars_t *pGlobals) {
        #else
            #error There is no support (yet) for your compiler. Please use MSVC or GCC compilers.
        #endif
    #endif // _MSC_VER
#endif // __linux__
        memcpy(&g_engfuncs,pengfuncsFromEngine,sizeof(enginefuncs_t));
        gpGlobals = pGlobals;
        #ifdef _MSC_VER
        if(sizeof(int *) == 8) {
            __asm {
                pop edi
                pop esi
                pop ebx
                mov esp,ebp
                pop ebp
                ret 16
            }
        }
        else {
            __asm {
                pop edi
                pop esi
                pop ebx
                mov esp,ebp
                pop ebp
                ret 8
            }
        }
    #endif // #ifdef _MSC_VER
}


ps.gif толком не тестил.


Протестил. Полёт нормальный и с # и с меню.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя firante
сообщение 15.8.2014, 21:01
Сообщение #2815


Стаж: 12 лет

Сообщений: 409
Благодарностей: 41
Полезность: < 0

Цитата(s1lent @ 15.8.2014, 19:18) *
1.5

добавил удалениие # из меню.

src
Код
#include "extdll.h"
#include "meta_api.h"

#undef C_DLLEXPORT

#ifdef __linux__
    #include <sys/mman.h>
    #define C_DLLEXPORT extern "C" __attribute__((visibility("default")))
#else
    #define C_DLLEXPORT extern "C" __declspec(dllexport)
#endif

#define HUD_PRINTRADIO 5

enum {
    PF_messageBegin,
    PF_messageByte,
    PF_messageString,
    PF_messageEnd,
    PF_Last
};

typedef struct message_s {

    BOOL doneSay;
    BOOL doneText;
    BOOL doneMenu;

    char *str[5];

    int argNum;
    int sayTextId;
    int textMsgId;
    int showMenuId;
} message_t;

typedef struct hooks_s {
    void *address;
    void *handler;
    unsigned char patchBytes[5];
    unsigned char originalBytes[5];

} hooks_t;

hooks_t hookMessage[PF_Last];
message_t eventMessage;

plugin_info_t Plugin_info = {

    META_INTERFACE_VERSION,
    "ChatMenuFix",
    "1.5",
    "10/08/14",
    "s1lent",
    "http://www.aghl.ru/",
    "ChatMenuFix",
    PT_STARTUP,
    PT_NEVER,
};

DLL_FUNCTIONS gpFunctionTable;

enginefuncs_t g_engfuncs;
enginefuncs_t g_engfuncs_post;

meta_globals_t *gpMetaGlobals;
gamedll_funcs_t *gpGamedllFuncs;
mutil_funcs_t *gpMetaUtilFuncs;

globalvars_t *gpGlobals;
META_FUNCTIONS gMetaFunctionTable;

C_DLLEXPORT int Meta_Query(char *,plugin_info_t **pPlugInfo,mutil_funcs_t *pMetaUtilFuncs) {
    *pPlugInfo = &Plugin_info;
    gpMetaUtilFuncs = pMetaUtilFuncs;
    return TRUE;
}
BOOL allowMemoryPatch(void *ptr) {
#ifdef __linux__
    void *addr = (void *)((long)ptr & ~(4096 - 1));
    return !mprotect(addr,sysconf(_SC_PAGESIZE),(PROT_READ|PROT_WRITE|PROT_EXEC));
#else
    static DWORD oldProtection;
    return VirtualProtect(ptr,5,PAGE_EXECUTE_READWRITE,&oldProtection);
#endif
}
BOOL doPatch(hooks_t *a) {
    if(allowMemoryPatch(a->address)) {
        memcpy(a->address,a->patchBytes,5);
    }
    return TRUE;
}
BOOL undoPatch(hooks_t *a) {
    if(allowMemoryPatch(a->address)) {
        memcpy(a->address,a->originalBytes,5);
    }
    return TRUE;
}
inline void T_MESSAGE_BEGIN(int msg_dest,int msg_type,const float *pOrigin = NULL,edict_t *ed = NULL) {
    hooks_t *a = &hookMessage[PF_messageBegin];
    if(undoPatch(a)) {
        reinterpret_cast<void (*)(int,int,const float *,edict_t *)>(a->address)(msg_dest,msg_type,pOrigin,ed);
        doPatch(a);
    }
}
inline void T_WRITE_BYTE(int iValue) {
    hooks_t *a = &hookMessage[PF_messageByte];
    if(undoPatch(a)) {
        reinterpret_cast<void (*)(int)>(a->address)(iValue);
        doPatch(a);
    }
}
inline void T_WRITE_STRING(const char *szString) {
    hooks_t *a = &hookMessage[PF_messageString];
    if(undoPatch(a)) {
        reinterpret_cast<void (*)(const char *)>(a->address)(szString);
        doPatch(a);
    }
}
inline void T_MESSAGE_END() {
    hooks_t *a = &hookMessage[PF_messageEnd];
    if(undoPatch(a)) {
        reinterpret_cast<void (*)()>(a->address)();
        doPatch(a);
    }
}
void MessageBegin(int msg_dest,int msg_type,const float *pOrigin,edict_t *ed) {

    message_t *p = &eventMessage;
    if(p->sayTextId == msg_type) {

        for(unsigned int i = 0; i < (sizeof(p->str) / sizeof(p->str[0]) - 1); i++) {
            *(p->str[i]) = '\0';
        }

        p->argNum = 0;
        p->doneSay = TRUE;
    }
    else if(p->textMsgId == msg_type) {
        
        for(unsigned int i = 0; i < (sizeof(p->str) / sizeof(p->str[0]) - 1); i++) {
            *(p->str[i]) = '\0';
        }

        p->argNum = 0;
        p->doneText = TRUE;
    }
    else if(p->showMenuId == msg_type) {
        p->doneMenu = TRUE;
    }
    T_MESSAGE_BEGIN(msg_dest,msg_type,pOrigin,ed);
};
void WriteByte(int iValue) {

    message_t *p = &eventMessage;
    if(p->doneText) {
        if(iValue != HUD_PRINTTALK && iValue != HUD_PRINTRADIO) {
            p->doneText = FALSE;
        }
    }
    T_WRITE_BYTE(iValue);
};
void WriteString(const char *szString) {

    message_t *p = &eventMessage;
    if(p->doneSay || p->doneText) {
        if(!p->argNum && *(szString) == '#') {
            if(p->doneSay) {
                p->doneSay = FALSE;
            }
            if(p->doneText) {
                p->doneText = FALSE;
            }
            T_WRITE_STRING(szString);
            return;
        }
        strcpy(p->str[p->argNum],szString);
        *(p->str[p->argNum++] + 186) = '\0';
        return;
    }
    else if(p->doneMenu) {

        if(*(szString) == '\0' || *(szString) == '#') {
            T_WRITE_STRING(szString);
            return;
        }

        int i = 0;
        char *str = const_cast<char *>(szString);
        char *phaystack = new char[512];

        for(;*str; *(str++), i++) {
            if(*(str) == '#') {
                *(str) = 0x20;
            }
            *(phaystack + i) = *str;
        }

        *(phaystack + i) = '\0';
        T_WRITE_STRING((const char *)phaystack);
        delete[] phaystack;
        return;
    }
    T_WRITE_STRING(szString);
};
void MessageEnd() {
    message_t *p = &eventMessage;    
    if(p->argNum) {
        if(p->doneSay) {
            switch(p->argNum) {
                case 1: {
                    T_WRITE_STRING("%s");
                    T_WRITE_STRING((const char *)p->str[0]);
                    break;
                }
                case 2: {
                    T_WRITE_STRING((const char *)p->str[0]);
                    T_WRITE_STRING((const char *)p->str[1]);
                    break;
                }
                case 3: {
                    T_WRITE_STRING((const char *)p->str[0]);
                    T_WRITE_STRING((const char *)p->str[1]);
                    T_WRITE_STRING((const char *)p->str[2]);
                    break;
                }
                default: {
                    break;
                }
            }
            p->doneSay = FALSE;
        }
        else if(p->doneText) {
            switch(p->argNum) {
                case 1: {

                    char *str = const_cast<char *>(p->str[0]);

                    if(!str) {
                        break;
                    }

                    int i = 0;

                    BOOL bHashLocaliz = FALSE;
                    BOOL bBottomLine = FALSE;

                    char *phaystack = new char[187];
                    for(;*str; *(str++), i++) {

                        if(!bHashLocaliz && (*str == '#')) {
                            bHashLocaliz = TRUE;
                        }
                        else if(bHashLocaliz) {

                            if(bBottomLine && (*str == 0x20)) {
                                bHashLocaliz = FALSE;
                                bBottomLine = FALSE;

                                *(phaystack + (i++)) = 0xA0;
                            }
                            else if(!bBottomLine && (*str == 0x5F)) {
                                bBottomLine = TRUE;
                            }
                        }
                        *(phaystack + i) = *str;
                    }

                    *(phaystack + i) = *(phaystack + 186) = '\0';
                    T_WRITE_STRING((const char *)phaystack);

                    delete[] phaystack;
                    break;
                }
                case 2: {
                    T_WRITE_STRING((const char *)p->str[0]);
                    T_WRITE_STRING((const char *)p->str[1]);
                    break;
                }
                case 3: {
                    T_WRITE_STRING((const char *)p->str[0]);
                    T_WRITE_STRING((const char *)p->str[1]);
                    T_WRITE_STRING((const char *)p->str[2]);
                    break;
                }
                case 4: {
                    T_WRITE_STRING((const char *)p->str[0]);
                    T_WRITE_STRING((const char *)p->str[1]);
                    T_WRITE_STRING((const char *)p->str[2]);
                    T_WRITE_STRING((const char *)p->str[3]);
                    break;
                }
                case 5: {
                    T_WRITE_STRING((const char *)p->str[0]);
                    T_WRITE_STRING((const char *)p->str[1]);
                    T_WRITE_STRING((const char *)p->str[2]);
                    T_WRITE_STRING((const char *)p->str[3]);
                    T_WRITE_STRING((const char *)p->str[4]);
                    break;
                }
                default: {
                    break;
                }
            }
            p->doneText = FALSE;
        }
    }
    T_MESSAGE_END();
    if(p->doneMenu) {
        p->doneMenu = FALSE;
    }
}
int RegUserMsg_Post(const char *szName,int)
{
    message_t *p = &eventMessage;
    if(!strcmp(szName,"SayText")) {
        p->sayTextId = META_RESULT_ORIG_RET(int);
    }
    else if(!strcmp(szName,"TextMsg")) {
        p->textMsgId = META_RESULT_ORIG_RET(int);
    }
    else if(!strcmp(szName,"ShowMenu")) {
        p->showMenuId = META_RESULT_ORIG_RET(int);
    }
    RETURN_META_VALUE(MRES_IGNORED,0);
}
C_DLLEXPORT int GetEngineFunctions_Post(enginefuncs_t *pengfuncsFromEngine,int *interfaceVersion) {
    memset(&g_engfuncs_post,0,sizeof(enginefuncs_t));
    g_engfuncs_post.pfnRegUserMsg = RegUserMsg_Post;
    memcpy(pengfuncsFromEngine,&g_engfuncs_post,sizeof(enginefuncs_t));
    return TRUE;
}
C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now,META_FUNCTIONS *pFunctionTable,meta_globals_t *pMGlobals,gamedll_funcs_t *pGamedllFuncs) {
    if(!pMGlobals) {
        return FALSE;
    }
    gpMetaGlobals = pMGlobals;
    if(!pFunctionTable) {
        return FALSE;
    }
    gpGamedllFuncs = pGamedllFuncs;

    void *r[] = {

        (void *)(*g_engfuncs.pfnMessageBegin), (void *)MessageBegin,
        (void *)(*g_engfuncs.pfnWriteByte), (void *)WriteByte,
        (void *)(*g_engfuncs.pfnWriteString), (void *)WriteString,
        (void *)(*g_engfuncs.pfnMessageEnd), (void *)MessageEnd
    };

    message_t *p = &eventMessage;
    for(unsigned int i = 0; i < (sizeof(p->str) / sizeof(p->str[0]) - 1); i++) {
        p->str[i] = new char[187];
    }

    hooks_t *a = NULL;
    for(int j = 0; j < PF_Last * 2; j += 2) {
        a = &hookMessage[j / 2];

        a->address = r[j];
        a->handler = r[j + 1];
        a->patchBytes[0] = 0xE9;

        // hooks of jump
        *((unsigned long *)(&a->patchBytes[1])) = (unsigned long)a->handler - (unsigned long)a->address - 5;

        memcpy(a->originalBytes,(void *)a->address,5);

        if(allowMemoryPatch(a->address)) {
            memcpy(a->address,a->patchBytes,5);
        }
    }
    gMetaFunctionTable.pfnGetEngineFunctions_Post = GetEngineFunctions_Post;
    memcpy(pFunctionTable,&gMetaFunctionTable,sizeof(META_FUNCTIONS));
    return TRUE;
}
C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now,PL_UNLOAD_REASON reason) {
    return FALSE;
}
#ifdef __linux__
    C_DLLEXPORT void GiveFnptrsToDll(enginefuncs_t *pengfuncsFromEngine,globalvars_t *pGlobals) {
#else
    #ifdef _MSC_VER
    C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll(enginefuncs_t *pengfuncsFromEngine,globalvars_t *pGlobals) {
        __asm {
            push ebp
            mov ebp,esp
            sub esp,__LOCAL_SIZE
            push ebx
            push esi
            push edi
        }
    #else    // _MSC_VER
        #ifdef __GNUC__
            C_DLLEXPORT void __stdcall GiveFnptrsToDll(enginefuncs_t *pengfuncsFromEngine,globalvars_t *pGlobals) {
        #else
            #error There is no support (yet) for your compiler. Please use MSVC or GCC compilers.
        #endif
    #endif // _MSC_VER
#endif // __linux__
        memcpy(&g_engfuncs,pengfuncsFromEngine,sizeof(enginefuncs_t));
        gpGlobals = pGlobals;
        #ifdef _MSC_VER
        if(sizeof(int *) == 8) {
            __asm {
                pop edi
                pop esi
                pop ebx
                mov esp,ebp
                pop ebp
                ret 16
            }
        }
        else {
            __asm {
                pop edi
                pop esi
                pop ebx
                mov esp,ebp
                pop ebp
                ret 8
            }
        }
    #endif // #ifdef _MSC_VER
}


ps.gif толком не тестил.

Это отдельный модуль для менюшек? или просто название другое?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 15.8.2014, 21:03
Сообщение #2816


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Цитата(firante @ 15.8.2014, 23:01) *
Это отдельный модуль для менюшек? или просто название другое?

второе
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя [WPMG]PRoSToTeM@
сообщение 15.8.2014, 21:05
Сообщение #2817
Стаж: 13 лет

Сообщений: 1514
Благодарностей: 1025
Полезность: 725

Цитата(firante @ 15.8.2014, 23:01) *
Это отдельный модуль для менюшек? или просто название другое?

По названию определить не можешь что он фиксит?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
csgamer
сообщение 15.8.2014, 21:17
Сообщение #2818
Стаж: 12 лет

Сообщений: 398
Благодарностей: 16
Полезность: 0

Цитата([WPMG]PRoSToTeM@ @ 16.8.2014, 0:05) *

По названию определить не можешь что он фиксит?


Не все такие умные, я тоже не могу понять по названию.
Неужели так сложно написать 3 строчки, чем потом объяснять на 10 страницах форума что он фиксит.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Templar
сообщение 15.8.2014, 22:46
Сообщение #2819
Иконка группы

Стаж: 18 лет

Сообщений: 2680
Благодарностей: 978
Полезность: 860

Меценат Меценат

Почитал все что происходило сегодня, что-то понял, но не совсем.. Щас стоит плагин от Сафетыча fast_fix_hashsign.amxx , как я понимаю он больше не нужен? Что тогда конкретно ставить для полной защиты?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя PREDATOREX
сообщение 15.8.2014, 22:57
Сообщение #2820


Стаж: 17 лет

Сообщений: 828
Благодарностей: 611
Полезность: 674

serveroc.com.ua
Цитата(Templar @ 15.8.2014, 22:46) *
Почитал все что происходило сегодня, что-то понял, но не совсем.. Щас стоит плагин от Сафетыча fast_fix_hashsign.amxx , как я понимаю он больше не нужен? Что тогда конкретно ставить для полной защиты?



Да, это можешь отключать он не нужен fast_fix_hashsign.amxx


А это ставь https://c-s.net.ua/forum/ipb.html?s=&sh...st&p=643027
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
413 страниц V  « 140 141 142 ... 411 412 »
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 5 гостей читают эту тему: