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

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

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

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

Поправить плагин от рекламы

, !
hammm
сообщение 11.3.2014, 14:56
Сообщение #1
Стаж: 12 лет

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

Здравствуйте есть у меня плагин от рекламы от intercs ,проблема в том что у меня стоит HLTV с рекламой моей группы данный плагин меняет ник этому хлтв ,как исправить? так же я заходил с другого ника через say писал ип сервера (рекламу) она поидеи должна блокироваться ,но не там то было ,3 раза поспамил чат не заблокировался .Помогите исправить Спасибо
#include <amxmodx>
#include <fakemeta>
#include <regex>

#define TIME_GAG_CHAT 120.0 // Длительность блокировки чата за спам или мат (в секундах).
#define CHANGE_NAME "[RR]" // Имя которое будет присваивается игроку, если он заходит с ником содержащим мат или спам.

#pragma semicolon 1

#define MAX_PLAYERS 32
#define MSG_SAY_TEXT 76
#define MSG_SEND_AUDIO 100

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

new Array:g_aWhileList, g_iSizeWhileList;
new Array:g_aBlockName, g_iSizeBlockName;
new Array:g_aBlockChat, g_iSizeBlockChat;

new Regex:g_iPattern, iError;
new g_iBitClientAccess, g_iBitClientConnected, g_iWarning[MAX_PLAYERS + 1];

public plugin_init()
{
register_plugin("Spam & Mat Control", "0.2", "Freedo.m");
register_clcmd("say", "HookMessage");
register_clcmd("say_team", "HookMessage");
register_forward(FM_ClientUserInfoChanged, "ClientUserInfoChanged_Pre", 0);
g_aWhileList = ArrayCreate(32);
g_aBlockName = ArrayCreate(32);
g_aBlockChat = ArrayCreate(32);
new szError[32];
g_iPattern = regex_compile("(?:\w{2,}\.[A-z]{2,4}\b|(?:\d+\W+){3})", iError, szError, charsmax(szError), "i");
if(g_iPattern != REGEX_OK) log_amx("Regex error: %s (%d)", szError, iError);
}

public plugin_cfg()
{
new szDirName[64], szFileName[128];
get_localinfo("amxx_configsdir", szDirName, charsmax(szDirName));
formatex(szFileName, charsmax(szFileName), "%s/sm_control/while_list.ini", szDirName);
switch(file_exists(szFileName))
{
case 0: log_amx("File ^"%s^" not found", szFileName);
case 1: ReadFile(szFileName, g_aWhileList);
}
formatex(szFileName, charsmax(szFileName), "%s/sm_control/block_name.ini", szDirName);
switch(file_exists(szFileName))
{
case 0: log_amx("File ^"%s^" not found", szFileName);
case 1: ReadFile(szFileName, g_aBlockName);
}
formatex(szFileName, charsmax(szFileName), "%s/sm_control/block_msg.ini", szDirName);
switch(file_exists(szFileName))
{
case 0: log_amx("File ^"%s^" not found", szFileName);
case 1: ReadFile(szFileName, g_aBlockChat);
}
g_iSizeWhileList = ArraySize(g_aWhileList);
g_iSizeBlockName = ArraySize(g_aBlockName);
g_iSizeBlockChat = ArraySize(g_aBlockChat);
}

ReadFile(szFileName[], Array:iData)
{
new szBuffer[32], szFile = fopen(szFileName, "rt");
while(!feof(szFile))
{
fgets(szFile, szBuffer, charsmax(szBuffer));
trim(szBuffer);
if(!szBuffer[0] || szBuffer[0] == '/' && szBuffer[1] == '/') continue;
ArrayPushString(iData, szBuffer);
}
fclose(szFile);
}

public client_putinserver(id)
{
BIT_ADD(g_iBitClientConnected, id);
set_task(5.0, "client_access_add", id);
}
public client_access_add(id) BIT_ADD(g_iBitClientAccess, id);
public client_disconnect(id)
{
g_iWarning[id] = 0;
BIT_SUB(g_iBitClientAccess, id);
BIT_SUB(g_iBitClientConnected, id);
if(task_exists(id)) remove_task(id);
}

public ClientUserInfoChanged_Pre(id, szBuffer)
{
static szNewName[32], szOldName[32];
if(BIT_VALID(g_iBitClientConnected, id)) get_user_name(id, szOldName, charsmax(szOldName));
else szOldName = CHANGE_NAME;
engfunc(EngFunc_InfoKeyValue, szBuffer, "name", szNewName, charsmax(szNewName));
if(CheckWhite(szNewName)) return FMRES_IGNORED;
new iMatch = regex_match_c(szNewName, g_iPattern, iError);
if(iMatch > 0 || CheckName(szNewName))
{
engfunc(EngFunc_SetClientKeyValue, id, szBuffer, "name", szOldName);
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}

bool:CheckName(szBuffer[])
{
static szBlockLine[32];
for(new i; i < g_iSizeBlockName; i++)
{
ArrayGetString(g_aBlockName, i, szBlockLine, charsmax(szBlockLine));
if(contain(szBuffer, szBlockLine) != -1) return true;
}
return false;
}

public HookMessage(id)
{
if(BIT_NOT_VALID(g_iBitClientAccess, id)) return PLUGIN_HANDLED;
static szMessage[192];
read_args(szMessage, charsmax(szMessage));
remove_quotes(szMessage);
strtolower(szMessage);
if(CheckWhite(szMessage)) return PLUGIN_CONTINUE;
static iMatch; iMatch = regex_match_c(szMessage, g_iPattern, iError);
if(iMatch > 0 || CheckMessage(szMessage))
{
if(++g_iWarning[id] < 3)
{
SendAudio(id, "events/tutor_msg.wav");
PrintChat(id, "!g[Анти-спам/мат]!y Сервер предупреждает Вас о запрете спама/мата: !g%i/3", g_iWarning[id]);
}
else
{
BIT_SUB(g_iBitClientAccess, id);
SendAudio(id, "events/friend_died.wav");
PrintChat(id, "!y Сервер заблокировал Вам чат на !g%i секунд!y.", floatround(TIME_GAG_CHAT));
set_task(TIME_GAG_CHAT, "GagExpired", id);
}
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}

bool:CheckMessage(szBuffer[])
{
static szBlockLine[32];
for(new i; i < g_iSizeBlockChat; i++)
{
ArrayGetString(g_aBlockChat, i, szBlockLine, charsmax(szBlockLine));
if(contain(szBuffer, szBlockLine) != -1) return true;
}
return false;
}

bool:CheckWhite(szBuffer[])
{
static szBlockLine[32];
for(new i; i < g_iSizeWhileList; i++)
{
ArrayGetString(g_aWhileList, i, szBlockLine, charsmax(szBlockLine));
if(contain(szBuffer, szBlockLine) != -1) return true;
}
return false;
}

public GagExpired(id)
{
BIT_ADD(g_iBitClientAccess, id);
g_iWarning[id] = 0;
SendAudio(id, "events/task_complete.wav");
PrintChat(id, "!y Сервер разблокировал Вам чат! Cпам/мат ЗАПРЕЩЕН!!!");
}

public plugin_end()
{
regex_free(g_iPattern);
}

stock SendAudio(id, szDirSound[])
{
message_begin(MSG_ONE_UNRELIABLE, MSG_SEND_AUDIO, _, id);
write_byte(id);
write_string(szDirSound);
write_short(100);
message_end();
}

stock PrintChat(const id, const szMessage[], any:...)
{
if(!is_user_connected(id)) return;
new szBuffer[190];
vformat(szBuffer, charsmax(szBuffer), szMessage, 3);
while(replace(szBuffer, charsmax(szBuffer), "!y", "^1")) {}
while(replace(szBuffer, charsmax(szBuffer), "!t", "^3")) {}
while(replace(szBuffer, charsmax(szBuffer), "!g", "^4")) {}
message_begin(MSG_ONE, MSG_SAY_TEXT, _, id);
write_byte(id);
write_string(szBuffer);
message_end();
}

!
Предупреждение:
Спойлер где?!


Отредактировал: XyLiGaN, - 11.3.2014, 15:16
Прикрепленные файлы:
Прикрепленный файл  sm_control.sma ( 6,3 килобайт ) Кол-во скачиваний: 7
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Bloo
сообщение 11.3.2014, 15:02
Сообщение #2


Стаж: 12 лет

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

hammm, bb коды [spoiler и [pawn, не? Не слышал?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
hammm
сообщение 11.3.2014, 15:28
Сообщение #3
Стаж: 12 лет

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

Цитата(Bloo @ 12.3.2014, 2:02) *
hammm, bb коды [spoiler и [pawn, не? Не слышал?

а что такое спойлер?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 11.3.2014, 15:38
Сообщение #4


Стаж: 12 лет

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

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
hammm
сообщение 13.3.2014, 16:59
Сообщение #5
Стаж: 12 лет

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

Цитата(Bloo @ 12.3.2014, 2:38) *

Код:
#include <amxmodx>
#include <fakemeta>
#include <regex>

#define TIME_GAG_CHAT 120.0 // Длительность блокировки чата за спам или мат (в секундах).
#define CHANGE_NAME "[RR
" // Имя которое будет присваивается игроку, если он заходит с ником содержащим мат или спам.

#pragma semicolon 1

#define MAX_PLAYERS 32
#define MSG_SAY_TEXT 76
#define MSG_SEND_AUDIO 100

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

new Array:g_aWhileList, g_iSizeWhileList;
new Array:g_aBlockName, g_iSizeBlockName;
new Array:g_aBlockChat, g_iSizeBlockChat;

new Regex:g_iPattern, iError;
new g_iBitClientAccess, g_iBitClientConnected, g_iWarning[MAX_PLAYERS + 1];

public plugin_init()
{
register_plugin("Spam & Mat Control", "0.2", "Freedo.m");
register_clcmd("say", "HookMessage");
register_clcmd("say_team", "HookMessage");
register_forward(FM_ClientUserInfoChanged, "ClientUserInfoChanged_Pre", 0);
g_aWhileList = ArrayCreate(32);
g_aBlockName = ArrayCreate(32);
g_aBlockChat = ArrayCreate(32);
new szError[32];
g_iPattern = regex_compile("(?:\w{2,}\.[A-z]{2,4}\b|(?:\d+\W+){3})", iError, szError, charsmax(szError), "i");
if(g_iPattern != REGEX_OK) log_amx("Regex error: %s (%d)", szError, iError);
}

public plugin_cfg()
{
new szDirName[64], szFileName[128];
get_localinfo("amxx_configsdir", szDirName, charsmax(szDirName));
formatex(szFileName, charsmax(szFileName), "%s/sm_control/while_list.ini", szDirName);
switch(file_exists(szFileName))
{
case 0: log_amx("File ^"%s^" not found", szFileName);
case 1: ReadFile(szFileName, g_aWhileList);
}
formatex(szFileName, charsmax(szFileName), "%s/sm_control/block_name.ini", szDirName);
switch(file_exists(szFileName))
{
case 0: log_amx("File ^"%s^" not found", szFileName);
case 1: ReadFile(szFileName, g_aBlockName);
}
formatex(szFileName, charsmax(szFileName), "%s/sm_control/block_msg.ini", szDirName);
switch(file_exists(szFileName))
{
case 0: log_amx("File ^"%s^" not found", szFileName);
case 1: ReadFile(szFileName, g_aBlockChat);
}
g_iSizeWhileList = ArraySize(g_aWhileList);
g_iSizeBlockName = ArraySize(g_aBlockName);
g_iSizeBlockChat = ArraySize(g_aBlockChat);
}

ReadFile(szFileName[], Array:iData)
{
new szBuffer[32], szFile = fopen(szFileName, "rt");
while(!feof(szFile))
{
fgets(szFile, szBuffer, charsmax(szBuffer));
trim(szBuffer);
if(!szBuffer[0] || szBuffer[0] == '/' && szBuffer[1] == '/') continue;
ArrayPushString(iData, szBuffer);
}
fclose(szFile);
}

public client_putinserver(id)
{
BIT_ADD(g_iBitClientConnected, id);
set_task(5.0, "client_access_add", id);
}
public client_access_add(id) BIT_ADD(g_iBitClientAccess, id);
public client_disconnect(id)
{
g_iWarning[id] = 0;
BIT_SUB(g_iBitClientAccess, id);
BIT_SUB(g_iBitClientConnected, id);
if(task_exists(id)) remove_task(id);
}

public ClientUserInfoChanged_Pre(id, szBuffer)
{
static szNewName[32], szOldName[32];
if(BIT_VALID(g_iBitClientConnected, id)) get_user_name(id, szOldName, charsmax(szOldName));
else szOldName = CHANGE_NAME;
engfunc(EngFunc_InfoKeyValue, szBuffer, "name", szNewName, charsmax(szNewName));
if(CheckWhite(szNewName)) return FMRES_IGNORED;
new iMatch = regex_match_c(szNewName, g_iPattern, iError);
if(iMatch > 0 || CheckName(szNewName))
{
engfunc(EngFunc_SetClientKeyValue, id, szBuffer, "name", szOldName);
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}

bool:CheckName(szBuffer[])
{
static szBlockLine[32];
for(new i; i < g_iSizeBlockName; i++)
{
ArrayGetString(g_aBlockName, i, szBlockLine, charsmax(szBlockLine));
if(contain(szBuffer, szBlockLine) != -1) return true;
}
return false;
}

public HookMessage(id)
{
if(BIT_NOT_VALID(g_iBitClientAccess, id)) return PLUGIN_HANDLED;
static szMessage[192];
read_args(szMessage, charsmax(szMessage));
remove_quotes(szMessage);
strtolower(szMessage);
if(CheckWhite(szMessage)) return PLUGIN_CONTINUE;
static iMatch; iMatch = regex_match_c(szMessage, g_iPattern, iError);
if(iMatch > 0 || CheckMessage(szMessage))
{
if(++g_iWarning[id] < 3)
{
SendAudio(id, "events/tutor_msg.wav");
PrintChat(id, "!g[Анти-спам/мат]!y Сервер предупреждает Вас о запрете спама/мата: !g%i/3", g_iWarning[id]);
}
else
{
BIT_SUB(g_iBitClientAccess, id);
SendAudio(id, "events/friend_died.wav");
PrintChat(id, "!y Сервер заблокировал Вам чат на !g%i секунд!y.", floatround(TIME_GAG_CHAT));
set_task(TIME_GAG_CHAT, "GagExpired", id);
}
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}

bool:CheckMessage(szBuffer[])
{
static szBlockLine[32];
for(new i; i < g_iSizeBlockChat; i++)
{
ArrayGetString(g_aBlockChat, i, szBlockLine, charsmax(szBlockLine));
if(contain(szBuffer, szBlockLine) != -1) return true;
}
return false;
}

bool:CheckWhite(szBuffer[])
{
static szBlockLine[32];
for(new i; i < g_iSizeWhileList; i++)
{
ArrayGetString(g_aWhileList, i, szBlockLine, charsmax(szBlockLine));
if(contain(szBuffer, szBlockLine) != -1) return true;
}
return false;
}

public GagExpired(id)
{
BIT_ADD(g_iBitClientAccess, id);
g_iWarning[id] = 0;
SendAudio(id, "events/task_complete.wav");
PrintChat(id, "!y Сервер разблокировал Вам чат! Cпам/мат ЗАПРЕЩЕН!!!");
}

public plugin_end()
{
regex_free(g_iPattern);
}

stock SendAudio(id, szDirSound[])
{
message_begin(MSG_ONE_UNRELIABLE, MSG_SEND_AUDIO, _, id);
write_byte(id);
write_string(szDirSound);
write_short(100);
message_end();
}

stock PrintChat(const id, const szMessage[], any:...)
{
if(!is_user_connected(id)) return;
new szBuffer[190];
vformat(szBuffer, charsmax(szBuffer), szMessage, 3);
while(replace(szBuffer, charsmax(szBuffer), "!y", "^1")) {}
while(replace(szBuffer, charsmax(szBuffer), "!t", "^3")) {}
while(replace(szBuffer, charsmax(szBuffer), "!g", "^4")) {}
message_begin(MSG_ONE, MSG_SAY_TEXT, _, id);
write_byte(id);
write_string(szBuffer);
message_end();
}


Отредактировал: hammm, - 13.3.2014, 17:00
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 13.3.2014, 17:15
Сообщение #6


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

Стаж: 16 лет

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

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

а что разметку внутри плагина кривая?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 13.3.2014, 18:42
Сообщение #7


Стаж: 12 лет

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

Legenda, ну наверное код скопирован с первого поста :)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: