Скриптер
Проверенный
Пользователь
- Сообщения
- 3,566
- Реакции
- 1,560
- Помог
- 131 раз(а)
Ищу плагин, блокирующий name spam. ReSrDetector не подходит
Почему?ReSrDetector не подходит
"Block Advert", "1.4", "neygomon"
Я когда-то оставлял в его теме сообщения, неправильно детектит сх.Почему?
#include <amxmodx>
#include <reapi>
new g_BlockNickWarn[32+1];
new block_nick_delay;
public plugin_init()
{
register_plugin("BlockNick Spam", "1.0 [Re]", "R");
block_nick_delay = create_cvar("block_nick_delay", "15.0");
RegisterHookChain(RG_CBasePlayer_SetClientUserInfoName, "refwd_SetClientUserInfoName_Pre");
}
public client_disconnected(id)
g_BlockNickWarn[id] = 0;
public refwd_SetClientUserInfoName_Pre(id, szInfoBuffer[], szNewName[])
{
static const name[] = "name";
static szOldName[32], szNewName[32];
get_entvar(id, var_netname, szOldName, charsmax(szOldName));
if( szOldName[0] )
{
get_user_info(id, name, szNewName, charsmax(szNewName));
if( !equal(szOldName, szNewName) )
{
static Float:flCurrentTime;
static Float:flWaitName[MAX_PLAYERS + 1];
flCurrentTime = get_gametime();
if(flWaitName[id] > flCurrentTime)
{
flWaitName[id] = flCurrentTime + get_pcvar_float(block_nick_delay);
set_user_info(id, name, szOldName);
if(++g_BlockNickWarn[id] >= 3)
{
new userid = get_user_userid(id)
g_BlockNickWarn[id] = 0;
server_cmd("fb_ban 15 #%d NameSpam", userid);
}
SetHookChainReturn(ATYPE_INTEGER, false);
client_print_color(id, 0, "^1[^4WA^1]^3 Нельзя так часто менять ник ^1[^4%d^1/^4%d^1]^3!", g_BlockNickWarn[id], 3);
return HC_SUPERCEDE;
}
if(g_BlockNickWarn[id] > 0)
g_BlockNickWarn[id] = 0;
flWaitName[id] = flCurrentTime + get_pcvar_float(block_nick_delay);
}
}
return HC_CONTINUE;
}
Ну он вроде не просил вообще запрещать смену ника)Rias, от стимбуста вроде бы не спасает, при коннекте всеравно стимбуст бот меняет ник, а вот повторно сменить уже не сможет
static const name[] = "name";
static szOldName[32], szNewName[32];
get_entvar(id, var_netname, szOldName, charsmax(szOldName));
if( szOldName[0] )
{
get_user_info(id, name, szNewName, charsmax(szNewName));
if( !equal(szOldName, szNewName) )
{
set_user_info(id, name, szOldName);
SetHookChainReturn(ATYPE_INTEGER, false);
client_print_color(id, 0, "^1[^4WA^1]^3 На сервере ^4запрещена^3 смена ника!");
return HC_SUPERCEDE;
}
}
#include <amxmodx>
#include <reapi>
#pragma semicolon 1
#define MAC_MAXWARNINGS 3 // максимальное кол-во предупреждений перед киком
#define MAC_CHANGEDELAY 120 // время в секундах, по истечению которого ник вновь можно будет сменить
new Float:g_flTimeNextChangeName[MAX_PLAYERS +1], g_iWarnings[MAX_PLAYERS +1];
public plugin_init()
{
register_plugin("AntiFlood Change Name", "28.11.2018", "sergrib");
RegisterHookChain(RG_CBasePlayer_SetClientUserInfoName, "CBasePlayer_SetClientUserInfoName_Pre", .post = false);
}
public client_putinserver(iPlayer)
{
g_flTimeNextChangeName[iPlayer] = 0.0;
g_iWarnings[iPlayer] = 0;
}
public CBasePlayer_SetClientUserInfoName_Pre(const iPlayer, infobuffer[], szNewName[])
{
new Float:flCurrentTime = get_gametime();
if (g_flTimeNextChangeName[iPlayer] > flCurrentTime)
{
if (g_iWarnings[iPlayer] < MAC_MAXWARNINGS)
{
client_print_color(iPlayer, print_team_default, "^3Эй! Не так часто! ^1Ник можно будет сменить через ^4%0.f^1 сек. Предупреждение: ^4%i/%i",
g_flTimeNextChangeName[iPlayer] - flCurrentTime, g_iWarnings[iPlayer]+1, MAC_MAXWARNINGS);
}
else if (g_iWarnings[iPlayer] == MAC_MAXWARNINGS)
{
server_cmd("kick #%i ^"Name change flooding!^"", get_user_userid(iPlayer));
}
g_iWarnings[iPlayer]++;
SetHookChainReturn(ATYPE_INTEGER, false);
return HC_SUPERCEDE;
}
g_flTimeNextChangeName[iPlayer] = flCurrentTime + MAC_CHANGEDELAY.0;
g_iWarnings[iPlayer] = 0;
return HC_CONTINUE;
}
("block_nick_delay", "15.0");
Да, задержка перед повторной сменой никав варианте выложенным тобой?
Второй вариант должен помочь, т.к он вообще лишает возможности на смену ника.Rias, а от стимбуста что-то из этих вариантов поможет? не тестил? я помню перебрал все что было на форумах, в итоге остановился на block_advert от неугомона, но он иногда крашил серв %(