Код:
//////////////////////////////////
// Название: Stop Chat Ad
// Версия : 2.0.0
// Автор плагина: MastaMan
// Доступные языки: RU, UA, EN
//
// Источник: http://amx-server.blogspot.com
//////////////////////////////////
#include <amxmodx>
#include <amxmisc>
#include <colorchat>
#define PLUGIN "Stop Chat Ad"
#define VERSION "2.0.0"
#define AUTHOR "MastaMan"
#define MAX_BAD_WORDS 256
#define MAX_PLAYERS 32 + 1
#define MAX_CHAT_LENGH 190
#define MAX_WORD_LENGH 100
#define TASK_ID 850
#define MENU_KEY (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<9)
#define MOTD_DESIGN0 "<style>body{background:#000;color:#FFB500;margin:5px;font-family:Tahoma;font-size:13px} .c1{color:#0000FF} .c2{color:#FF0000} table{bfont-size:10px;} td{padding:3px;} th{text-align:left;padding:3px;} .tr{} div{ padding:5px;}</style>"
#define MOTD_DESIGN1 "<style>body{background:#112233;color:#000000;margin:20px;font-family:Tahoma;font-size:11px} .c1{color:#009CFF} .c2{color:#B54239} table{background:#EFEFCE;border:0;font-size:11px;} td{padding:3px;border-bottom:0;} th{background:#558866;color:#FFF;height:35px;text-align:left;padding:3px;} .tr{background:#E7E7BD} div{background:#EFEFCE; padding:5px;}</style>"
#define MOTD_DESIGN2 "<style>body{background:#FFF;color:#399C4A;margin:20px;font-family:Arial;font-size:12px} .c1{color:#737373} .c2{color:#FF0000} table{background:#FFF;border:0;font-size:12px;} td{padding:3px;border-bottom:1px solid #F1F1D5;} th{background:#525252;color:#FFF;height:40px;text-align:left;padding:3px;} .tr{background:#F7F7E7} div{background:#F7F7E7; padding:5px;}</style>"
#define MOTD_DESIGN3 "<style>body{background:#E7E7E7;color:#313131;margin:10px;font-family:Georgia;font-size:10px} .c1{color:#CE8C00} .c2{color:#10CE00} table{background:#F7F7F7;border:3px solid #DEDEDE;font-size:10px;} td{padding:3px;border-bottom:0px;} th{background:#F7F7F7;color:#A50000;height:35px;text-align:left;padding:3px;} .tr{background:#E7E7E7} div{background:#FFF; padding:5px;}</style>"
#define MOTD_DESIGN4 "<style>body{background:#EFEFF7;color:#000;margin:3px;font-family:Tahoma;font-size:11px} .c1{color:#009CFF} .c2{color:#B54239} table{background:#CECECE;border:0px;font-size:11px;} td{background:#EFEFF7;padding:3px;border-bottom:0px;} th{background:#EFEFF7;color:#0000CE;height:30px;text-align:left;padding:3px;} .tr{} div{background:#FFF; padding:5px;}</style>"
#define MOTD_DESIGN5 "<style>body{background:#555555;color:#FFF;margin:15px;font-family:Tahoma;font-size:11px} .c1{color:#00EE33} .c2{color:#BB4433} table{background:#333333;border:0px;font-size:11px;} td{padding:3px;border-bottom:0px;} th{background:#333333;color:#FFF;height:30px;text-align:left;padding:3px; border-top:1px solid #AAAAAA; border-left:1px solid #AAAAAA;} .tr{background:#FF9900;} div{background:#555555; padding:5px;}</style>"
#define MOTD_DESIGN6 "<style>body{background:#FFF;color:#212121;margin:20px;font-family:Arial;font-size:12px} .c1{color:#FF9418} .c2{color:#D62129} table{background:#EFF7F7;border:1px solid #CECECE;font-size:12px;} td{padding:3px;} th{background:#31394A;color:#FFF;height:30px;text-align:left;padding:3px;} .tr{background:#EFEFEF;} div{background:#FFF; padding:5px;}</style>"
#define MOTD_DESIGN7 "<style>body{background:#FFF;color:#313131;margin:20px;font-family:Arial;font-size:12px} .c1{color:#9C9C9C} .c2{color:#F00} table{background:#FFF;border:1px solid #CECECE;font-size:12px;} td{padding:3px;} th{background:#292929;color:#FFF;height:30px;text-align:left;padding:3px;} .tr{background:#F7F7F7;} div{background:#F7F7F7; padding:5px;}</style>"
#define MOTD_DESIGN8 "<style>body{background:#212121;color:#FFF;margin:20px;font-family:Arial;font-size:10px} .c1{color:#9C9C00} .c2{color:#9CCE00} table{background:#4A4A42;border:0; font-size:10px;} td{padding:3px;} th{background:#293131;color:#BDB55A;height:15px;text-align:left;padding:3px;} .tr{background:#393931;} div{background:#393931; padding:5px;}</style>"
#define MOTD_DESIGN9 "<style>body{background:#FFF;color:#00639C;margin:20px;font-family:Arial;font-size:12px} .c1{color:#00639C} .c2{color:#F79C18} table{background:#FFF;border:2px solid #00639C; font-size:12px;} td{padding:3px;} th{background:#006B9C;color:#FFF;height:30px;text-align:left;padding:3px; border-top:4px solid #3984AD;} .tr{background:#EFEFEF} div{background:#FFF; padding:5px;}</style>"
#define MOTD_DESIGN10 "<style>body{background:#4A5A42;color:#9CC684;margin:10px;font-family:Tahoma;font-size:13px} .c1{color:#9CC684} .c2{color:#6B9CCE} table{background:#424242;border:0; font-size:12px;} td{padding:3px;} th{background:#181818;color:#FFF;height:30px;text-align:left;padding:3px;} .tr{background:#313131} div{background:#424242; padding:5px;}</style>"
#define MOTD_DESIGN11 "<style>body{background:#FFF;color:##113377;margin:10px;font-family:Tahoma;font-size:11px} .c1{color:#55DD44} .c2{color:#CC0000} table{background:#FFF;border:1px solid #BBBBBB; font-size:11px;} td{padding:3px; border-top:1px solid #BDBDBD;} th{background:#115588;color:#FFF;height:40px;text-align:left;padding:3px;} .tr{background:#EFEFEF;} div{background:#FFF; padding:5px;}</style>"
#define MOTD_DESIGN12 "<style>body{background:#283136;color:#023353;margin:30px;font-family:Verdana;font-size:12px} .c1{color:#A5CE00} .c2{color:#CE3900} table{background:#EFF7F7;border:2px solid #525A63;font-size:12px;} td{padding:3px;border-bottom:1px solid #DEDEDE;} th{background:#313942;color:#6BD6FF;height:30px;text-align:left;padding:3px;} .tr{} div{background:#FFF; padding:5px;}</style>"
#define MOTD_DESIGN13 "<style>body{background:#210000;color:#000;margin:15px;font-family:Verdana;font-size:10px} .c1{color:#181818} .c2{color:#A50000} table{background:#FFF;border:2px solid #7B1010; font-size:10px;} td{padding:3px;} th{background:#390808;color:#FFF;height:20px;text-align:left;padding:3px;} .tr{background:#F7F7F7;color:#7B0000} div{background:#FFF; padding:5px;}</style>"
new g_szBadWords[MAX_BAD_WORDS][MAX_WORD_LENGH]
new g_iPunishType[MAX_BAD_WORDS]
new g_iMaxBadWords
new g_szWordMask[MAX_BAD_WORDS][MAX_WORD_LENGH]
new g_szWordReplace[MAX_BAD_WORDS][MAX_WORD_LENGH]
new g_iBlockedToday
new iWarningCount[MAX_PLAYERS]
new szAdMsg[MAX_PLAYERS][MAX_CHAT_LENGH]
new bool:bPlayerFade[MAX_PLAYERS] = {false, ...}
new bool:bPlayerGag[MAX_PLAYERS] = {false, ...}
new bool:bPrintMsg[MAX_PLAYERS] = {false, ...}
new PlayerShake[MAX_PLAYERS]
new _tmpMotdDesign
new c_iNotify
new c_iImmunity
new c_szImmunityFlags[32]
new c_iWarnCount
new c_iPrintType
new c_iPunishType
new c_iStatusType
new c_iMotdDesign
new c_iLog
new c_iPunishSet0
new c_iPunishSet1
new c_iPunishSet4
new c_szPunishSet7[128]
new c_szPunishSet8[128]
new szCacheDir[128]
new l_MSG[3][] =
{
"MSG1",
"MSG2",
"MSG3"
}
new l_TIMES[3][] =
{
"TIMES1",
"TIMES2",
"TIMES3"
}
new l_PUNISH[9][] =
{
"MSG_PUNISH0",
"MSG_PUNISH1",
"MSG_PUNISH2",
"MSG_PUNISH3",
"MSG_PUNISH4",
"MSG_PUNISH5",
"MSG_PUNISH6",
"MSG_PUNISH7",
"MSG_PUNISH8"
}
new pcvar_notify, pcvar_immunity, pcvar_immunity_flags, pcvar_warn_count, pcvar_print, pcvar_punish, pcvar_status, pcvar_motd_design, pcvar_log,
pcvar_punish_0_set, pcvar_punish_1_set, pcvar_punish_4_set, pcvar_punish_7_set, pcvar_punish_8_set
public client_putinserver(id)
{
iWarningCount[id] = 0
PlayerShake[id] = 0
bPlayerGag[id] = false
copy(szAdMsg[id], MAX_CHAT_LENGH - 1, "")
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_dictionary("stop_chat_ad.txt")
register_cvar("sca_ver", VERSION, FCVAR_SPONLY | FCVAR_SERVER)
register_clcmd("say", "FUNC_STOP_AD")
register_clcmd("say_team", "FUNC_STOP_AD")
pcvar_notify = register_cvar("sca_notify", "1")
pcvar_immunity = register_cvar("sca_immunity", "1")
pcvar_immunity_flags = register_cvar("sca_immunity_flag", "b")
pcvar_warn_count = register_cvar("sca_warn_count", "6")
pcvar_print = register_cvar("sca_print", "2")
pcvar_punish = register_cvar("sca_punish", "0")
pcvar_status = register_cvar("sca_stat", "2")
pcvar_motd_design = register_cvar("sca_motd_design", "1")
pcvar_log = register_cvar("sca_log", "2")
pcvar_punish_0_set = register_cvar("sca_punish_gag", "1")
pcvar_punish_1_set = register_cvar("sca_punish_shake", "30")
pcvar_punish_4_set = register_cvar("sca_punish_slap", "30")
pcvar_punish_7_set = register_cvar("sca_punish_ban", "amx_addban '%ip%' '120' 'Spamer'")
pcvar_punish_8_set = register_cvar("sca_punish_custom", "amx_nick '%name%' 'I`am Spamer'")
register_event("ScreenFade", "FUNC_BLACKFADE", "be", "4=255", "5=255", "6=255")
register_logevent("FUNC_RESET", 2, "1=Round_Start")
register_clcmd("say /spam", "FUNC_SPAMERS")
register_clcmd("spam", "FUNC_SPAMERS")
register_clcmd("sca_reload", "FUNC_LOAD_CFG", ADMIN_KICK, "Reload SCA configs")
register_concmd("sca_reload", "FUNC_LOAD_CFG", ADMIN_KICK, "Reload SCA configs")
register_menucmd(register_menuid("spamers"), MENU_KEY, "FUNC_SPAMERS_HANDLE")
}
public plugin_cfg()
{
FUNC_LOAD_CFG(0)
get_datadir(szCacheDir, sizeof(szCacheDir) - 1)
formatex(szCacheDir, sizeof(szCacheDir) - 1, "%s/_tmp_sca_day.ini", szCacheDir)
if(file_exists(szCacheDir))
{
new szText[32], iLen
read_file(szCacheDir, 1, szText, sizeof(szText) - 1, iLen)
g_iBlockedToday = str_to_num(szText)
}
}
public client_disconnect(id)
{
if(task_exists(id))
{
remove_task(id)
}
}
public plugin_end()
{
new szDate[10], szText[32]
new iLen, iSpamCount
format_time(szDate, sizeof(szDate) - 1, "%d")
if(!file_exists(szCacheDir))
{
write_file(szCacheDir, szDate, 0)
write_file(szCacheDir, "0", 1)
}
read_file(szCacheDir, 0, szText, sizeof(szText) - 1, iLen)
if(!equal(szText, szDate))
{
write_file(szCacheDir, szDate, 0)
write_file(szCacheDir, "0", 1)
}
for(new i = 0; i < MAX_PLAYERS; i++)
{
iSpamCount += iWarningCount[i]
}
read_file(szCacheDir, 1, szText, sizeof(szText) - 1, iLen)
new szMapSpamCount[10]
formatex(szMapSpamCount, sizeof(szMapSpamCount) - 1, "%d", str_to_num(szText) + iSpamCount)
write_file(szCacheDir, szMapSpamCount, 1)
}
public FUNC_STOP_AD(id)
{
if(bPrintMsg[id])
{
bPrintMsg[id] = false
return PLUGIN_CONTINUE
}
if((get_user_flags(id) & read_flags(c_szImmunityFlags)) && c_iImmunity)
{
return PLUGIN_CONTINUE
}
if(bPlayerGag[id])
{
FUNC_PLAYER_NOTIFY(id, 3, -1)
return PLUGIN_HANDLED
}
new szArg[MAX_CHAT_LENGH]
read_args(szArg, MAX_CHAT_LENGH - 1)
remove_quotes(szArg)
for(new i; i < g_iMaxBadWords; i++)
{
if(containi(szArg, g_szBadWords[i]) != -1)
{
switch(g_iPunishType[i])
{
case -5:
{
return PLUGIN_CONTINUE
}
case -4:
{
replace_all(szArg, sizeof(szArg) - 1, g_szBadWords[i], g_szWordReplace[i])
bPrintMsg[id] = true
}
case -3:
{
replace_all(szArg, sizeof(szArg) - 1, g_szBadWords[i], g_szWordMask[i])
bPrintMsg[id] = true
}
case -2:
{
if(equali(szArg, g_szBadWords[i]))
{
return PLUGIN_HANDLED
}
}
case -1:
{
iWarningCount[id]++
FUNC_DETECTED_WARN(id, szArg, i)
return PLUGIN_HANDLED
}
default:
{
iWarningCount[id]++
FUNC_DETECTED_PUNISH(id, szArg, i, g_iPunishType[i])
return PLUGIN_HANDLED
}
}
}
}
if(FUNC_IS_IP(szArg))
{
iWarningCount[id]++
FUNC_LOG(id, 1, szArg)
return PLUGIN_HANDLED
}
if(bPrintMsg[id] && szArg[0] != '/')
{
new szCmd[32]
read_argv(0, szCmd, sizeof(szCmd) - 1)
client_cmd(id, "%s ^"%s^"", szCmd, szArg)
//engclient_cmd(id, "say", szArg)
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
FUNC_DETECTED_PUNISH(id, szMsg[], iWord, iPunish)
{
FUNC_PLAYER_NOTIFY(id, 3, iPunish)
FUNC_PLAYER_PUNISH(id, iPunish)
FUNC_ADMIN_NOTIFY(id, "", 0, iWarningCount[id], 2)
FUNC_LOG(id, 1, szMsg)
if(c_iNotify)
{
FUNC_ADMIN_NOTIFY(id, szMsg, iWord, iWarningCount[id], 1)
}
}
FUNC_DETECTED_WARN(id, szMsg[], iWord)
{
new iPunish = c_iPunishType
if(c_iWarnCount && (iWarningCount[id] >= c_iWarnCount))
{
if(FUNC_COMPARE_MSG(id, szMsg))
{
FUNC_PLAYER_NOTIFY(id, 3, iPunish)
FUNC_PLAYER_PUNISH(id, iPunish)
FUNC_ADMIN_NOTIFY(id, "", 0, iWarningCount[id], 2)
FUNC_LOG(id, 1, szMsg)
}
else
{
FUNC_PLAYER_NOTIFY(id, 2, -1)
}
}
else
{
if((c_iWarnCount > iWarningCount[id] > c_iWarnCount / 1.5) && c_iWarnCount)
{
FUNC_PLAYER_NOTIFY(id, 2, -1)
}
else
{
FUNC_PLAYER_NOTIFY(id, 1, -1)
}
}
if(c_iNotify)
{
FUNC_ADMIN_NOTIFY(id, szMsg, iWord, iWarningCount[id], 1)
}
}
FUNC_COMPARE_MSG(id, szMsg[])
{
if(equal(szAdMsg[id], szMsg))
{
return 1
}
copy(szAdMsg[id], MAX_CHAT_LENGH - 1, szMsg)
return 0
}
FUNC_ADMIN_NOTIFY(id, szMsg[], iWord, iCount, iType)
{
new szPlayers[32], iNum
get_players(szPlayers, iNum)
new szName[33]
get_user_name(id, szName, sizeof(szName) - 1)
for(new i = 0; i < iNum; i++)
{
if((get_user_flags(szPlayers[i]) & ADMIN_KICK))
{
switch(iType)
{
case 1:
{
new szText[MAX_CHAT_LENGH]
formatex(szText, sizeof(szText) - 1, "%L [ %s ]", LANG_SERVER, "MSG_ADMIN", szName, iCount, LANG_SERVER, l_TIMES[FUNC_TIMES(iCount)], iWord != -1 ? g_szBadWords[iWord] : "IP")
ColorChat(szPlayers[i], GREY, szText)
ColorChat(szPlayers[i], GREY, szMsg)
}
case 2:
{
new szText[MAX_CHAT_LENGH]
formatex(szText, sizeof(szText) - 1, "%L %L %L.", LANG_SERVER, "MSG_ADMIN2", szName, LANG_SERVER, "MSG_BLOCKED", iCount, LANG_SERVER, l_MSG[FUNC_MSG(iCount)])
ColorChat(szPlayers[i], GREY, szText)
}
}
}
else
{
if(iType == 2 && szPlayers[i] != id)
{
new szText[MAX_CHAT_LENGH]
formatex(szText, sizeof(szText) - 1, "%L", LANG_SERVER, "MSG_ADMIN2", szName)
FUNC_NOTIFY_MSG(szPlayers[i], szText)
}
}
}
}
FUNC_PLAYER_NOTIFY(id, iType, iPunish)
{
new i = iWarningCount[id]
if(iPunish < 0 || iPunish > 8)
{
iPunish = c_iPunishType
}
new szMessage[MAX_CHAT_LENGH]
switch(iType)
{
case 1:
{
formatex(szMessage, MAX_CHAT_LENGH - 1, "%L ^n%L %L.", LANG_SERVER, "MSG_BLOCK", LANG_SERVER, "MSG_BLOCKED", i, LANG_SERVER, l_MSG[FUNC_MSG(i)])
FUNC_NOTIFY_MSG(id, szMessage)
}
case 2:
{
formatex(szMessage, MAX_CHAT_LENGH - 1, "%L %L. ^n%L", LANG_SERVER, "MSG_WARN", iWarningCount[id], LANG_SERVER, l_MSG[FUNC_MSG(i)], LANG_SERVER, "MSG_WARN2")
FUNC_NOTIFY_MSG(id, szMessage)
}
case 3:
{
formatex(szMessage, MAX_CHAT_LENGH - 1, "%L", LANG_SERVER, l_PUNISH[iPunish])
FUNC_NOTIFY_MSG(id, szMessage)
}
}
}
FUNC_NOTIFY_MSG(id, szText[])
{
if(c_iPrintType == 0 || c_iPrintType == 2)
{
ColorChat(id, RED, szText)
}
if(c_iPrintType == 1 || c_iPrintType == 2)
{
set_hudmessage(255, 0, 0, -1.0, 0.75, 1, 2.0, 12.0)
show_hudmessage(id, szText)
}
}
FUNC_PLAYER_PUNISH(id, iPunish)
{
if(iPunish < 0 || iPunish > 8)
{
iPunish = c_iPunishType
}
switch(iPunish)
{
case 0:
{
bPlayerGag[id] = true
}
case 1:
{
FUNC_SHAKE(id)
}
case 2:
{
FUNC_FOV(id)
}
case 3:
{
if(!bPlayerFade[id])
{
bPlayerFade[id] = true
FUNC_BLACKFADE(id, 1)
}
}
case 4:
{
user_slap(id, c_iPunishSet4, 1)
}
case 5:
{
user_kill(id, 0)
}
case 6:
{
set_task(3.0, "FUNC_KICK", TASK_ID + id)
}
case 7:
{
set_task(3.0, "FUNC_BAN", TASK_ID + id)
}
case 8:
{
set_task(3.0, "FUNC_CUSTOM", TASK_ID + id)
}
}
}
public FUNC_CUSTOM(id)
{
id = id - TASK_ID
new szName[35]
get_user_name(id, szName, sizeof(szName) - 1)
new szIP[35]
get_user_ip(id, szIP, sizeof(szIP) - 1, 1)
new szUserID[35]
formatex(szUserID, sizeof(szUserID) - 1, "%d", get_user_userid(id))
new szText[200]
formatex(szText, sizeof(szText) - 1, "%s", c_szPunishSet8)
replace_all(szText, sizeof(szText) - 1, "'", "^"")
replace_all(szText, sizeof(szText) - 1, "%ip%", szIP)
replace_all(szText, sizeof(szText) - 1, "%name%", szName)
replace_all(szText, sizeof(szText) - 1, "%userid%", szUserID)
server_cmd(szText)
}
public FUNC_BAN(id)
{
id = id - TASK_ID
new szName[35]
get_user_name(id, szName, sizeof(szName) - 1)
new szIP[35]
get_user_ip(id, szIP, sizeof(szIP) - 1, 1)
new szUserID[35]
formatex(szUserID, sizeof(szUserID) - 1, "%d", get_user_userid(id))
new szText[200]
formatex(szText, sizeof(szText) - 1, "%s", c_szPunishSet7)
replace_all(szText, sizeof(szText) - 1, "'", "^"")
replace_all(szText, sizeof(szText) - 1, "%ip%", szIP)
replace_all(szText, sizeof(szText) - 1, "%name%", szName)
replace_all(szText, sizeof(szText) - 1, "%userid%", szUserID)
server_cmd(szText)
}
public FUNC_KICK(id)
{
id = id - TASK_ID
new szText[64]
formatex(szText, sizeof(szText) - 1, "%L", LANG_SERVER, "MSG_KICK")
if(is_user_connected(id))
{
message_begin(MSG_ONE, 2, {0, 0, 0}, id)
write_string(szText)
message_end()
}
}
public FUNC_BLACKFADE(id, iType)
{
if(is_user_connected(id) && iWarningCount[id] >= c_iWarnCount && bPlayerFade[id])
{
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, id)
write_short(1<<12)
write_short(1<<12)
write_short(FUNC_BLACKFADE_TYPE(id, iType))
write_byte(0)
write_byte(0)
write_byte(0)
write_byte(255)
message_end()
}
}
FUNC_BLACKFADE_TYPE(id, iType)
{
if(iType == 1)
{
set_task(1.0, "FUNC_BLACKFADE", id)
return 1
}
return 4
}
FUNC_FOV(id)
{
message_begin(MSG_ONE, get_user_msgid("SetFOV"), _, id)
write_byte(180)
message_end()
}
public FUNC_SHAKE(id)
{
if(is_user_connected(id))
{
message_begin(MSG_ONE, get_user_msgid("ScreenShake"), _, id)
write_short(12<<12)
write_short(12<<12)
write_short(12<<12)
message_end()
if(PlayerShake[id] < c_iPunishSet1)
{
set_task(3.0, "FUNC_SHAKE", id)
PlayerShake[id] = PlayerShake[id] + 3
}
else
{
PlayerShake[id] = 0
}
}
}
public FUNC_LOAD_CFG(id)
{
if(id && !(get_user_flags(id) & ADMIN_KICK))
{
return PLUGIN_HANDLED
}
new Time[9]
get_time("%H:%M:%S",Time,8)
new szCfgDir[128]
new bool:b_ErrorState = false
server_print(" ")
server_print("###########################################################################
####")
server_print("^tTitle : %s", PLUGIN)
server_print("^tVersion: %s", VERSION)
server_print("^tAuthor : %s", AUTHOR)
server_print("^tSite : http://amx-server.blogspot.com")
server_print(" ")
server_print("------------------------------------------------------------------------------")
server_print(" ")
get_configsdir(szCfgDir, sizeof(szCfgDir) - 1)
formatex(szCfgDir, sizeof (szCfgDir) -1 , "%s/stop_chat_ad/config.ini", szCfgDir)
if(file_exists(szCfgDir))
{
server_print("[%s] > Load settings from: stop_chat_ad/config.ini", Time)
server_print(" ")
new szConsoleMsg[70], iError
new szText[MAX_WORD_LENGH], iLenLine, i, iLine, iLen
while(read_file(szCfgDir, i, szText, sizeof(szText) - 1, iLenLine))
{
if(iLenLine > 1 && (szText[0] != '/') && szText[0] != ';' && MAX_BAD_WORDS > (iLine - 1))
{
new param1[64], param2[64]
parse(szText, param1, sizeof(param1), param2, sizeof(param2))
if(contain(param1, "sca_") != -1)
{
iLen = formatex(szConsoleMsg, sizeof(szConsoleMsg) - 1, "[%s] > Read cvar ^"%s^" ^"%s^" ", Time,param1, param2)
server_print("%s%s%s", szConsoleMsg, FUNC_SPACE_COUNT(sizeof(szConsoleMsg), iLen), " [OK]")
server_cmd("%s ^"%s^"", param1, param2)
iLine++
}
else
{
iLen = formatex(szConsoleMsg, sizeof(szConsoleMsg) - 1, "[%s] > Unknown cvar ^"%s^" ", Time, param1)
server_print("%s%s%s", szConsoleMsg, FUNC_SPACE_COUNT(sizeof(szConsoleMsg), iLen), " [ERROR]")
FUNC_LOG(id, 2, "Не известная переменная ^"%s^". Проверьте stop_chat_ad/config.ini на наличие ошибок...", param1)
b_ErrorState = true
iError++
}
}
i++
}
if(!b_ErrorState)
{
server_print(" ")
server_print("[OK] Loaded %d cvar's...", iLine)
}
else
{
server_print(" ")
server_print("[ERROR] Found %d errors...", iError)
FUNC_LOG(id, 2, "При загрузке конфигурации найдено %d ошибок.", iError)
}
}
else
{
server_print("[%s] > [ERROR] Not found stop_chat_ad/config.ini", Time)
b_ErrorState = true
FUNC_LOG(id, 2, "Не найден stop_chat_ad/config.ini!")
}
get_configsdir(szCfgDir, sizeof(szCfgDir) - 1)
formatex(szCfgDir, sizeof (szCfgDir) -1 , "%s/stop_chat_ad/badwords.ini", szCfgDir)
if(file_exists(szCfgDir))
{
server_print(" ")
server_print("------------------------------------------------------------------------------")
server_print(" ")
server_print("[%s] > Load settings from: stop_chat_ad/badwords.ini", Time)
server_print(" ")
server_print("[%s] > Read badwords ", Time)
server_print(" ")
new szText[MAX_WORD_LENGH], iLen, i, iLine, iType
while(read_file(szCfgDir, i, szText, sizeof(szText) - 1, iLen))
{
if(iLen > 1 && szText[0] != ';' && MAX_BAD_WORDS > (iLine - 1))
{
if(contain(szText, "[DEFAULT]") != -1)
{
iType = -1
server_print(" ")
server_print("[DEFAULT]")
}
else if(contain(szText, "[SPAM]") != -1)
{
iType = -2
server_print(" ")
server_print("[SPAM]")
}
else if(contain(szText, "[MASK WORD]") != -1)
{
iType = -3
server_print(" ")
server_print("[MASK WORD]")
}
else if(contain(szText, "[REPLACE WORD]") != -1)
{
iType = -4
server_print(" ")
server_print("[REPLACE WORD]")
}
else if(contain(szText, "[GOOD WORD]") != -1)
{
iType = -5
server_print(" ")
server_print("[GOOD WORD]")
}
else if(contain(szText, "[CUSTOM]") != -1)
{
iType = 8
server_print(" ")
server_print("[CUSTOM]")
}
else if(contain(szText, "[BAN]") != -1)
{
iType = 7
server_print(" ")
server_print("[BAN]")
}
else if(contain(szText, "[KICK]") != -1)
{
iType = 6
server_print(" ")
server_print("[KICK]")
}
else if(contain(szText, "[KILL]") != -1)
{
iType = 5
server_print(" ")
server_print("[KILL]")
}
else if(contain(szText, "[SLAP]") != -1)
{
iType = 4
server_print(" ")
server_print("[SLAP]")
}
else if(contain(szText, "[BLIND]") != -1)
{
iType = 3
server_print(" ")
server_print("[BLIND]")
}
else if(contain(szText, "[SPOIL VIEW]") != -1)
{
iType = 2
server_print(" ")
server_print("[SPOIL VIEW]")
}
else if(contain(szText, "[SHAKE]") != -1)
{
iType = 1
server_print(" ")
server_print("[SHAKE]")
}
else if(contain(szText, "[GAG]") != -1)
{
iType = 0
server_print(" ")
server_print("[GAG]")
}
else
{
g_szBadWords[iLine] = szText
g_iPunishType[iLine] = iType
server_print(" > ^"%s^"", g_szBadWords[iLine])
switch(iType)
{
case -4:
{
new szLeft[MAX_WORD_LENGH], szRight[MAX_WORD_LENGH]
strtok(szText, szLeft, sizeof(szLeft) - 1, szRight, sizeof(szRight) - 1, '=')
trim(szLeft)
trim(szRight)
g_szBadWords[iLine] = szLeft
g_szWordReplace[iLine] = szRight
}
case -3:
{
g_szWordMask[iLine] = FUNC_MASK_WORD(szText)
}
}
iLine++
}
}
i++
}
g_iMaxBadWords = iLine
server_print(" ")
server_print("[OK] Found %d badwords...", iLine)
}
else
{
server_print("[%s] > [ERROR] Not found stop_chat_ad/badwords.ini", Time)
b_ErrorState = true
FUNC_LOG(id, 2, "Не найден stop_chat_ad/badwords.ini!")
}
if(b_ErrorState)
{
server_print(" ")
server_print("------------------------------------------------------------------------------")
server_print(" ")
server_print("[%s] > [!] WARNING: Read some cvar's from configuration failure!", Time)
server_print("> Please check [ERROR] messages above...")
server_print(" ")
server_print("> Visit www.amx-server.blogspot.com for check new version and more info...")
}
else
{
server_print(" ")
server_print("------------------------------------------------------------------------------")
server_print(" ")
server_print("[%s] > [OK] All settings load success!", Time)
}
server_print(" ")
server_print("###########################################################################
####")
server_print(" ")
server_print(" ")
set_task(1.0, "FUNC_LOAD_CVAR")
if(id)
{
FUNC_LOG(id, 2, "Конфигурация загружена вручную администратором !NAME!.")
}
return PLUGIN_HANDLED
}
public FUNC_LOAD_CVAR()
{
c_iNotify = get_pcvar_num(pcvar_notify)
c_iImmunity = get_pcvar_num(pcvar_immunity)
get_pcvar_string(pcvar_immunity_flags, c_szImmunityFlags, sizeof(c_szImmunityFlags) - 1)
c_iWarnCount = get_pcvar_num(pcvar_warn_count)
c_iPrintType = get_pcvar_num(pcvar_print)
c_iPunishType = get_pcvar_num(pcvar_punish)
c_iStatusType = get_pcvar_num(pcvar_status)
c_iMotdDesign = get_pcvar_num(pcvar_motd_design)
c_iLog = get_pcvar_num(pcvar_log)
c_iPunishSet0 = get_pcvar_num(pcvar_punish_0_set)
c_iPunishSet1 = get_pcvar_num(pcvar_punish_1_set)
c_iPunishSet4 = get_pcvar_num(pcvar_punish_4_set)
get_pcvar_string(pcvar_punish_7_set, c_szPunishSet7, sizeof(c_szPunishSet7) - 1)
get_pcvar_string(pcvar_punish_8_set, c_szPunishSet8, sizeof(c_szPunishSet8) - 1)
_tmpMotdDesign = c_iMotdDesign
if(c_iMotdDesign == 15)
{
_tmpMotdDesign = random_num(1, 13)
}
}
public FUNC_SPAMERS(id)
{
new szContent[2000]
new iSpamCount
for(new i = 0; i < MAX_PLAYERS; i++)
{
iSpamCount += iWarningCount[i]
}
switch(c_iStatusType)
{
case 1:
{
new iLen = formatex(szContent, sizeof(szContent) - 1, "")
new szPlayers[32], iNum
get_players(szPlayers, iNum)
new szName[64]
for(new i = 0; i < iNum; i++)
{
new iSpamMsg = iWarningCount[szPlayers[i]]
if(iSpamMsg)
{
get_user_name(szPlayers[i], szName, sizeof(szName) - 1)
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "\y%d)\w %s [ %s%d %L\w ]^n", i + 1, szName, iSpamMsg > c_iWarnCount ? "\r" : "\y" , iSpamMsg, LANG_SERVER, l_MSG[FUNC_MSG(iSpamMsg)])
}
}
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "^n^n\r%L %d %L", LANG_SERVER, "MOTD_TOTAL", iSpamCount, LANG_SERVER, l_MSG[FUNC_MSG(iSpamCount)])
show_menu(id, MENU_KEY, szContent, 20, "spamers")
}
case 2:
{
new iLen = formatex(szContent, sizeof(szContent) - 1, "<meta charset=UTF-8>")
if(c_iMotdDesign == 14)
{
_tmpMotdDesign = random_num(1, 13)
}
switch(_tmpMotdDesign)
{
case 1:
{
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "%s", MOTD_DESIGN1)
}
case 2:
{
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "%s", MOTD_DESIGN2)
}
case 3:
{
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "%s", MOTD_DESIGN3)
}
case 4:
{
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "%s", MOTD_DESIGN4)
}
case 5:
{
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "%s", MOTD_DESIGN5)
}
case 6:
{
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "%s", MOTD_DESIGN6)
}
case 7:
{
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "%s", MOTD_DESIGN7)
}
case 8:
{
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "%s", MOTD_DESIGN8)
}
case 9:
{
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "%s", MOTD_DESIGN9)
}
case 10:
{
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "%s", MOTD_DESIGN10)
}
case 11:
{
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "%s", MOTD_DESIGN11)
}
case 12:
{
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "%s", MOTD_DESIGN12)
}
case 13:
{
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "%s", MOTD_DESIGN13)
}
default:
{
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "%s", MOTD_DESIGN0)
}
}
new bool:bTR
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "<body>")
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "<table width=100%% align=center cellpadding=1 cellspacing=1>")
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "<tr valign=middle>")
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "<th width=20>#")
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "<th>%L", LANG_SERVER, "MOTD_TH1")
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "<th>%L", LANG_SERVER, "MOTD_TH2")
new szPlayers[32], iNum
get_players(szPlayers, iNum)
new szName[80]
for(new i = 0; i < iNum; i++)
{
new iSpamMsg = iWarningCount[szPlayers[i]]
if(iSpamMsg)
{
if(bTR)
{
bTR = false
}
else
{
bTR = true
}
get_user_name(szPlayers[i], szName, sizeof(szName) - 1)
replace_all(szName, sizeof(szName) - 1, "<", "<")
replace_all(szName, sizeof(szName) - 1, ">", ">")
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "<tr %s>", bTR ? "class=tr" : "")
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "<td>%d", i + 1)
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "<td>%s", szName)
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "<td><span class=%s>%d</span>", iSpamMsg > c_iWarnCount ? "c2" : "c1", iSpamMsg)
}
}
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "<tr><td colspan=3>%L: <b>%d</b>", LANG_SERVER, "MOTD_TOTAL", iSpamCount)
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "<br>%L: <b>%d</b></table>", LANG_SERVER, "MOTD_TOTAL_TODAY", g_iBlockedToday + iSpamCount)
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "<br>")
if(c_iWarnCount)
{
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "<div><span class=c1>#%L1</span> %L", LANG_SERVER, "MOTD_COLOR", LANG_SERVER, "MOTD_TIP1")
iLen += formatex(szContent[iLen], sizeof(szContent) - 1, "<br><span class=c2>#%L2</span> %L</div>", LANG_SERVER, "MOTD_COLOR", LANG_SERVER, "MOTD_TIP2")
}
new szMotdTitle[64]
formatex(szMotdTitle, sizeof(szMotdTitle) - 1, "%L", LANG_SERVER, "MOTD_TITLE")
show_motd(id, szContent, szMotdTitle)
}
default:
{
new szPlayers[32], iNum
get_players(szPlayers, iNum)
new szName[64]
client_print(id, print_console,"========================================")
client_print(id, print_console,"# | %L | %L", LANG_SERVER, "MOTD_TH1", LANG_SERVER, "MOTD_TH2")
client_print(id, print_console,"____________________________________________________")
for(new i = 0; i < iNum; i++)
{
new iSpamMsg = iWarningCount[szPlayers[i]]
get_user_name(szPlayers[i], szName, sizeof(szName) - 1)
if(iSpamMsg)
{
client_print(id, print_console,"%d) %s [ %d %L ]", i + 1, szName, iSpamMsg, LANG_SERVER, l_MSG[FUNC_MSG(iSpamMsg)])
}
client_print(id, print_console," ")
client_print(id, print_console,"%L %d %L", LANG_SERVER, "MOTD_TOTAL", iSpamCount, LANG_SERVER, l_MSG[FUNC_MSG(iSpamCount)])
client_print(id, print_console," ")
client_print(id, print_console,"========================================")
}
}
}
return PLUGIN_HANDLED
}
public FUNC_SPAMERS_HANDLE(id)
{
}
FUNC_MSG(i)
{
new iNum = (i / 10) * 10
if(iNum == i || 10 <= i <= 20)
{
return 2
}
else if((1 + iNum) < i < (5 + iNum))
{
return 1
}
else if(i >= (5 + iNum))
{
return 2
}
return 0
}
FUNC_TIMES(i)
{
if(i == 1)
{
return 2
}
else if(1 < i < 5)
{
return 1
}
return 0
}
public FUNC_RESET()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
bPlayerFade[i] = false
if(!c_iPunishSet0)
{
bPlayerGag[i] = false
}
}
}
FUNC_SPACE_COUNT(iLen1, iLen2)
{
new iSpaceCount = iLen1 - iLen2
new szSpace[70]
for(new k = 1; k < iSpaceCount; k ++)
{
add(szSpace, sizeof(szSpace) - 1, ".")
}
return szSpace
}
FUNC_IS_IP(szText[])
{
new iDotCount, iNumCount
new iLen = strlen(szText)
if(iLen < 9)
{
return 0
}
for(new i; i < iLen; i++)
{
switch(szText[i])
{
case '.':
{
iDotCount++
}
case '0' .. '9':
{
iNumCount++
}
}
}
if(iDotCount > 2 && iNumCount > 6)
{
return 1
}
return 0
}
FUNC_MASK_WORD(szText[])
{
new iLen = strlen(szText)
if(iLen > 2)
{
for(new i = 1; i < (iLen - 1); i++)
{
szText[i] = '*'
}
}
new _tmp[MAX_WORD_LENGH]
copy(_tmp, sizeof(_tmp) - 1, szText)
return _tmp
}
FUNC_LOG(id, iType, szText[], any:...)
{
if(!c_iLog)
{
return PLUGIN_CONTINUE
}
if(iType)
{
new szDate[32], szTime[32], szTmpLogMsg[512], szLogMsg[512]
format_time(szDate, sizeof(szDate) - 1, "%d-%m-%Y")
new szLogDir[128]
get_localinfo("amxx_logs", szLogDir, sizeof(szLogDir) - 1)
formatex(szLogDir, sizeof(szLogDir) - 1, "%s/stop_chat_ad(%s).txt", szLogDir, szDate)
format_args(szTmpLogMsg, sizeof(szTmpLogMsg) - 1, 2)
format_time(szDate, sizeof(szDate) - 1, "%d.%m.%Y")
format_time(szTime, sizeof(szTime) - 1, "%H:%M:%S")
switch(iType)
{
case 1:
{
new szName[33]
get_user_name(id, szName, sizeof(szName) - 1)
new szIP[33]
get_user_ip(id, szIP, sizeof(szIP) - 1, 1)
new szSteamID[33]
get_user_authid(id, szSteamID, sizeof(szSteamID) - 1)
formatex(szLogMsg, sizeof(szLogMsg) - 1, "Дата: %s / %s | Имя: %s | IP: %s | SteamID: %s | Заблокировано: %d | Сообщение: %s", szDate, szTime, szName, szIP, szSteamID, iWarningCount[id], szTmpLogMsg)
}
case 2:
{
new szName[33]
get_user_name(id, szName, sizeof(szName) - 1)
replace_all(szTmpLogMsg, sizeof(szTmpLogMsg) - 1, "!NAME!", szName)
formatex(szLogMsg, sizeof(szLogMsg) - 1, "[!] [ВНИМАНИЕ!] | Дата: %s / %s | %s", szDate, szTime, szTmpLogMsg)
}
}
formatex(szTmpLogMsg, sizeof(szTmpLogMsg) - 1, "Файл сгенерирован %s. Последнее обновление лога %s / %s", PLUGIN, szDate, szTime)
write_file(szLogDir, szTmpLogMsg, 0)
write_file(szLogDir, "---------------------------------------------------------------------------------------------------------------------------------------------------------", 1)
write_file(szLogDir, szLogMsg, -1)
}
if (!szText[0])
{
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}
Цитата(XyLiGaN @ 1.3.2014, 14:28)

tyne,Удали вообще плагины
stop_chat_ad и evil_fucker из-за ненадобностью.
evil_fucker, можешь заменить на
это или
это(по лучше будет.)
Но ещё раз скажу, что подобные плагины это детский сад.
А по поводу
[AMXX] Displaying debug trace (plugin "stop_chat_ad.amxx")
[AMXX] Run time error 10: native error (native "write_file")
[AMXX] [0] stop_chat_ad.sma::plugin_end (line 204)
выложил бы исходник
Удалил я этот evil_fucker^_^ Писал ведь выше.
Исходник я выкладывал.
Отредактировал: tyne, - 1.3.2014, 13:38