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

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

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

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

> Информационная доска

Данный раздел предназначен для обсуждения, а также решения технических проблем связанных с серверной частью. Обсуждения касательно игровых клиентов ведутся здесь.

1. Во время создания новой темы аккуратно оформляйте её, не допускайте грамматических ошибок.
2. Описывая проблему старайтесь, как можно больше рассказать о ней, а так же о действиях с сервером после которых она возникла, по возможности подкрепите информацию логами.
3. Если вопрос касается проблемы в работе сервера, то обязательно прикрепляйте список плагинов (введите в консоли сервера: meta list и amxx plugins), настройки server.cfg, логи. Так же указывайте операционную систему, версию HLDS (введите к консоли сервера: version) и где хостится сервер.

Длинную информацию скрывайте под спойлер.

начал падать сервер

, stop_chat_ad
Статус пользователя tyne
сообщение 1.3.2014, 12:57
Сообщение #1


Стаж: 13 лет

Сообщений: 544
Благодарностей: 137
Полезность: 91

Сервер падает из-за плагина stop_chat_ad
Код:
//////////////////////////////////
// Название: 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, "<", "&lt;")
replace_all(szName, sizeof(szName) - 1, ">", "&gt;")

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
}


Ошибки:
Лог
L 03/01/2014 - 00:19:21: [AMXX] Displaying debug trace (plugin "stop_chat_ad.amxx")
L 03/01/2014 - 00:19:21: [AMXX] Run time error 10: native error (native "write_file")
L 03/01/2014 - 00:19:21: [AMXX] [0] stop_chat_ad.sma::plugin_end (line 204)

ps.gif
Простите:с
Что-то натворил с темой, весь мой текст был удален, написал все заново, по быстрому. Не удивлюсь, если что-то потерял. Отпишитесь, если я допустил ошибку.


Отредактировал: tyne, - 1.3.2014, 13:33
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя offtop2012
сообщение 1.3.2014, 13:05
Сообщение #2


Стаж: 13 лет

Сообщений: 878
Благодарностей: 126
Полезность: 356

Удали плагин evil_fucker он же без исходника от него сервер падает! Зачем он вообще нужен ranting_w.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя tyne
сообщение 1.3.2014, 13:16
Сообщение #3


Стаж: 13 лет

Сообщений: 544
Благодарностей: 137
Полезность: 91


//////////////////////////////////
Evil fucker убрал. Ибо исходник не нашел.
/////////////////////////////////
Писал же я, ну^_^

Отредактировал: tyne, - 1.3.2014, 13:18
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 1.3.2014, 13:26
Сообщение #4


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

tyne, исходник поместите в bb-код pawn, думаю никто и рыться не будет без форматирования и подсветки.

Отредактировал: Bloo, - 1.3.2014, 13:27
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
XyLiGaN
сообщение 1.3.2014, 13:28
Сообщение #5
Стаж: 13 лет
Город: Югорск

Сообщений: 11668
Благодарностей: 6450
Полезность: 1052

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

tyne,
Удали вообще плагины stop_chat_ad и evil_fucker из-за ненадобностью.
evil_fucker, можешь заменить на это или это(по лучше будет.)
Но ещё раз скажу, что подобные плагины это детский сад.
А по поводу
stop_chat_ad.amxx
[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)
выложил бы исходник
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя tyne
сообщение 1.3.2014, 13:34
Сообщение #6


Стаж: 13 лет

Сообщений: 544
Благодарностей: 137
Полезность: 91

Код:
//////////////////////////////////
// Название: 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, "<", "&lt;")
replace_all(szName, sizeof(szName) - 1, ">", "&gt;")

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, можешь заменить на это или это(по лучше будет.)
Но ещё раз скажу, что подобные плагины это детский сад.
А по поводу
stop_chat_ad.amxx
[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
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: