#include <amxmodx>
#include <reapi>
#include <regex>
native get_user_stats(index, stats[STATSX_MAX_STATS], bodyhits[MAX_BODYHITS]);
native ALS_GetUserLevel(const id);
native ALS_GetLevelName(const levelid, rank[], ilen);
#define iPermission ADMIN_RESERVATION // U Say Okuma Yetkisi
new const g_szTag[] = "EOSM";
new g_msgid[2], iSpamTimer[MAX_CLIENTS+1];
public plugin_init()
{
register_plugin("Chat System", "0.1", "LyNcH");
register_clcmd("say", "clcmd_say");
register_clcmd("say_team", "clcmd_say_team");
g_msgid[0] = get_user_msgid("TeamInfo");
g_msgid[1] = get_user_msgid("SayText");
register_message(g_msgid[1], "avoid_duplicated");
}
/********* Say System ***********/
public avoid_duplicated(msgId, msgDest, receiver)
{
return PLUGIN_HANDLED;
}
public clcmd_say(const id)
{
if(!is_user_connected(id))
{
return PLUGIN_HANDLED;
}
new szArg[256];
read_args(szArg, charsmax(szArg));
remove_quotes(szArg);
if(szArg[0] == '@' || szArg[0] == '.' || szArg[0] == '/' || szArg[0] == '!')
{
return PLUGIN_HANDLED_MAIN;
}
if(szArg[0] == EOS)
{
client_print_color(id, id, "^3%s: ^4Mesajinizi bos birakamazsiniz.", g_szTag);
return PLUGIN_HANDLED;
}
if(strlen(szArg) > 80)
{
client_print_color(id, id, "^3%s: ^4Mesajiniz maksimum 80 karakter icerebilir.", g_szTag);
return PLUGIN_HANDLED;
}
if(get_systime() - iSpamTimer[id] < 0.4)
{
client_print_color(id, id, "^3%s: ^4Spam yapmayin.", g_szTag);
return PLUGIN_HANDLED;
}
new iRet, szError[128], iResult, Regex:iSayCheck;
iSayCheck = regex_compile("[0-9]", iRet, szError, charsmax(szError));
iResult = regex_match_all_c(szArg, iSayCheck, iRet);
regex_free(iSayCheck);
if(iResult > 5)
{
client_print_color(id, id, "^3%s: ^4Reklam yapmaya calistiginiz icin engellendiniz.", g_szTag);
return PLUGIN_HANDLED;
}
enum _:Datas
{
szAlive,
szTag,
szName,
szMessage,
szRank,
szTop15
};
new szDatas[Datas][MAX_FMT_LENGTH], iFlags = get_user_flags(id), iAlive = is_user_alive(id);
if(!(iAlive))
{
szDatas[szAlive] = "^1(x) ";
}
new PlayerRank[64];
ALS_GetLevelName(ALS_GetUserLevel(id), PlayerRank, 63);
szDatas[szRank] = fmt("^4[%s]", PlayerRank);
new Stats[8], BodyHits[8], iRank = get_user_stats(id, Stats, BodyHits);
szDatas[szTop15] = fmt("^4[TOP%i]", iRank);
szDatas[szName] = fmt("^3%n", id);
if(iFlags & ADMIN_RESERVATION)
{
if(iFlags & ADMIN_RCON)
{
szDatas[szTag] = fmt("^3[Server Sahibi]", szArg);
}
szDatas[szMessage] = fmt("^4%s", szArg);
}
else
{
szDatas[szMessage] = fmt("^1%s", szArg);
}
iSpamTimer[id] = get_systime();
for(new i = 1; i <= MaxClients; i++)
{
if(iAlive && is_user_alive(i) || !iAlive && !is_user_alive(i) || get_user_flags(i) & iPermission)
{
if(iFlags & ADMIN_KICK) client_print_color(i, id, "%s%s %s %s %s: %s", szDatas[szAlive], szDatas[szTag], szDatas[szRank], szDatas[szTop15], szDatas[szName], szDatas[szMessage]);
else client_print_color(i, id, "%s %s %s %s: %s", szDatas[szAlive], szDatas[szRank], szDatas[szTop15], szDatas[szName], szDatas[szMessage]);
}
}
return PLUGIN_CONTINUE;
}
public clcmd_say_team(const id)
{
if(!is_user_connected(id))
{
return PLUGIN_HANDLED;
}
new szArg[256];
read_args(szArg, charsmax(szArg));
remove_quotes(szArg);
if(szArg[0] == '@' || szArg[0] == '.' || szArg[0] == '/' || szArg[0] == '!')
{
return PLUGIN_HANDLED_MAIN;
}
if(szArg[0] == EOS)
{
client_print_color(id, id, "^3%s: ^4Mesajinizi bos birakamazsiniz.", g_szTag);
return PLUGIN_HANDLED;
}
if(strlen(szArg) > 80)
{
client_print_color(id, id, "^3%s: ^4Mesajiniz maksimum 80 karakter icerebilir.", g_szTag);
return PLUGIN_HANDLED;
}
if(get_systime() - iSpamTimer[id] < 0.4)
{
client_print_color(id, id, "^3%s: ^4Spam yapmayin.", g_szTag);
return PLUGIN_HANDLED;
}
new iRet, szError[128], iResult, Regex:iSayCheck;
iSayCheck = regex_compile("[0-9]", iRet, szError, charsmax(szError));
iResult = regex_match_all_c(szArg, iSayCheck, iRet);
regex_free(iSayCheck);
if(iResult > 5)
{
client_print_color(id, id, "^3%s: ^4Reklam yapmaya calistiginiz icin engellendiniz.", g_szTag);
return PLUGIN_HANDLED;
}
enum _:Datas
{
szAlive,
szTeam,
szTag,
szName,
szMessage,
szRank,
szTop15
};
new szDatas[Datas][MAX_FMT_LENGTH], iFlags = get_user_flags(id), iAlive = is_user_alive(id), TeamName:iTeam = get_member(id, m_iTeam);
new PlayerRank[64];
ALS_GetLevelName(ALS_GetUserLevel(id), PlayerRank, 63);
szDatas[szRank] = fmt("^4[%s]", PlayerRank);
new Stats[8], BodyHits[8], iRank = get_user_stats(id, Stats, BodyHits);
szDatas[szTop15] = fmt("^4[TOP%i]", iRank);
if(!(iAlive))
{
szDatas[szAlive] = "^1(x) ";
}
switch(iTeam)
{
case TEAM_TERRORIST:
{
szDatas[szTeam] = "^3(TE)";
}
case TEAM_CT:
{
szDatas[szTeam] = "^3(CT)";
}
case TEAM_SPECTATOR:
{
szDatas[szTeam] = "^3(SPEC)";
}
}
szDatas[szName] = fmt("^3%n", id);
if(iFlags & ADMIN_RESERVATION)
{
if(iFlags & ADMIN_KICK)
{
szDatas[szTag] = fmt("^3[Server Sahibi]", szArg);
}
szDatas[szMessage] = fmt("^4%s", szArg);
}
else
{
szDatas[szMessage] = fmt("^1%s", szArg);
}
iSpamTimer[id] = get_systime();
for(new i = 1; i <= MaxClients; i++)
{
if(get_user_team(i) == get_user_team(id) || get_user_flags(i) & iPermission)
{
if(iFlags & ADMIN_KICK) client_print_color(i, id, "%s%s %s %s %s %s: %s", szDatas[szAlive], szDatas[szTeam], szDatas[szTag], szDatas[szRank], szDatas[szTop15], szDatas[szName], szDatas[szMessage]);
else client_print_color(i, id, "%s%s %s %s %s: %s", szDatas[szAlive], szDatas[szTeam], szDatas[szRank], szDatas[szTop15], szDatas[szName], szDatas[szMessage]);
}
}
return PLUGIN_CONTINUE;
}