#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <nvault>
new const FileName[] = "gag_words.ini";
new Float:GagTime[33], bool:SwearGag[33], bool:CmdGag[33], WordsFile[128], GagFile[128], Words[256][32], Admin[32],
Nume[33][32], Count, Len, CvarGagTime;
public plugin_init() {
register_plugin("Advanced Gag", "1.0", "Aragon*")
register_concmd("amx_gag", "Gag", ADMIN_KICK,"- <nume> <minute> - Da gag jucatorului");
register_concmd("amx_ungag", "UnGag", ADMIN_KICK, "- <nume> - Scoate gagul");
register_clcmd("say", "Verifica");
register_clcmd("say_team", "Verifica");
register_forward(FM_PlayerPreThink, "PlayerPreThink")
CvarGagTime = register_cvar("amx_gag_time", "1");
new DataDir[64]
get_datadir(DataDir, 63)
format(GagFile, 127, "%s/Gag.dat", DataDir)
}
public plugin_cfg() {
static dir[64];
get_localinfo("amxx_configsdir", dir, 63);
formatex(WordsFile , 127 , "%s/%s" , dir, FileName);
if(!file_exists(WordsFile))
write_file(WordsFile, "[Gag Words]", -1);
new Len;
while(Count < 256 && read_file(WordsFile, Count ,Words[Count][1], 30, Len)) {
Words[Count][0] = Len;
Count++;
}
}
public PlayerPreThink(id) {
if(GagTime[id] && !task_exists(id + 123)) {
set_task(1.0, "CheckTime", id + 123, _, _, "b");
}
}
public Gag(id, level, cid) {
if(cmd_access(id, level, cid, 2)) {
new Arg[32], Arg2[6], AdminName[32], PlayerName[32];
read_argv(1, Arg, 31)
new Player = cmd_target(id, Arg, 9)
if (Player)
read_argv(1, Arg, sizeof Arg - 1);
read_argv(2, Arg2, sizeof Arg2 - 1);
get_user_name(id, AdminName, 31);
copy(Admin, 31, AdminName);
new Target = cmd_target(id, Arg, CMDTARGET_OBEY_IMMUNITY);
if(CmdGag[Target] || SwearGag[Target])
console_print(id, "Jucatorul are deja gag!");
else {
get_user_name(Target, PlayerName, 31);
copy(Nume[Target], 31, PlayerName);
CmdGag[Target] = true;
GagTime[Target] = str_to_float(Arg2) * 60.0;
ColorChat(0, "!t%s!g Gag jucatorul!t %s!g pentru!t %d!g minut(e)",AdminName , PlayerName, str_to_num(Arg2));
set_task(1.0, "CheckTime", Target + 123, _, _, "b");
}
}
}
public UnGag(id,level, cid) {
if(cmd_access(id, level, cid, 2)) {
new Arg[32], AdminName[32];
read_argv(1, Arg, sizeof Arg - 1);
get_user_name(id, AdminName, sizeof AdminName - 1);
new Target = cmd_target(id, Arg, 11);
if(Target) {
new PlayerName[32];
get_user_name(Target, PlayerName, sizeof PlayerName - 1);
if(!CmdGag[Target] && !SwearGag[Target])
console_print(id, "Jucatorul %s nu are gag.", PlayerName);
else {
SwearGag[Target] = false;
CmdGag[Target] = false;
GagTime[Target] = 0.0;
remove_task(Target + 123);
ColorChat(0, "!t%s!g UnGag jucatorul!t %s",AdminName, PlayerName);
}
}
}
}
public Verifica(id) {
new Said[192];
read_args(Said, sizeof Said - 1);
if(!strlen(Said))
return PLUGIN_CONTINUE;
if(CmdGag[id]) {
new Minute = floatround(GagTime[id]) / 60
new Secunde = floatround(GagTime[id]) % 60
new Time[128];
if(GagTime[id] >= 60.0 && Secunde >= 1)
formatex(Time,sizeof(Time)-1,"%02d minut%s si %02d secund%s", Minute, Minute > 1 ? "e" : "" , Secunde, Secunde > 1 ? "e" : "a");
else if(GagTime[id] >= 60.0)
formatex(Time,sizeof(Time)-1,"%02d minut%s", Minute, Minute > 1 ? "e" : "");
else if(Secunde >= 1)
formatex(Time,sizeof(Time)-1,"%02d secund%s", Secunde, Secunde > 1 ? "e" : "a");
ColorChat(id, "!gAi gag de la!t %s!g. Au mai ramas!t %s" ,Admin, Time);
return PLUGIN_HANDLED;
}
if(SwearGag[id]) {
new Minute = floatround(GagTime[id]) / 60
new Secunde = floatround(GagTime[id]) % 60
new Time[128];
if(GagTime[id] >= 60.0 && Secunde >= 1)
formatex(Time,sizeof(Time)-1,"%02d minut%s si %02d secund%s", Minute, Minute > 1 ? "e" : "" , Secunde, Secunde > 1 ? "e" : "a");
else if(GagTime[id] >= 60.0)
formatex(Time,sizeof(Time)-1,"%02d minut%s", Minute, Minute > 1 ? "e" : "");
else if(Secunde >= 1)
formatex(Time,sizeof(Time)-1,"%02d secund%s", Secunde, Secunde > 1 ? "e" : "a");
ColorChat(id, "!gAi gag pentru limbaj vulgar sau reclama.")
ColorChat(id, "!gAu mai ramas!t %s", Time);
return PLUGIN_HANDLED;
}
else {
new bool:Sweared, Pos;
for(new i = 0; i < Count; ++i) {
if((Pos = containi(Said, Words[1])) != -1) {
Len = Words[0];
while(Len--)
Said[Pos++] = '*';
Sweared = true;
continue;
}
}
if(Sweared && !(get_user_flags(id) & ADMIN_IMMUNITY)) {
new Cmd[32], Name[32];
get_user_name(id, Name, sizeof Name - 1);
read_argv(0, Cmd, sizeof Cmd - 1);
copy(Nume[id], 31, Name);
engclient_cmd(id, Cmd, Said);
CmdGag[id] = false;
SwearGag[id] = true;
GagTime[id] = get_pcvar_float(CvarGagTime) * 60.0;
ColorChat(0, "!t%s!g a primit gag pentru limbaj vulgar sau reclama.", Name);
set_task(1.0, "CheckTime", id + 123, _, _, "b");
return PLUGIN_HANDLED;
}
}
return PLUGIN_CONTINUE;
}
public CheckTime(task) {
new id = task - 123;
if(!is_user_connected(id)) {
GagTime[id] = 0.0;
remove_task(id + 123);
}
else if(GagTime[id] <= 0.0) {
remove_task(id + 123);
ColorChat(id, "!gAi primit!t UnGag!g cu succes!");
GagTime[id] = 0.0;
CmdGag[id] = false;
SwearGag[id] = false;
}
else
GagTime[id] -= 1.0;
}
public client_putinserver(id) {
LoadGag(id)
if(GagTime[id]) {
SwearGag[id] = true;
set_task(1.0, "CheckTime", id + 123, _, _, "b");
}
else {
SwearGag[id] = false;
CmdGag[id] = false;
}
}
public client_disconnect(id)
SaveGag(id)
public LoadGag(id) {
new IP[32];
get_user_ip(id, IP, 31, 1);
new Line[128], IsPlayer = false, Arg1[32], Arg2[32];
new FileOpen = fopen(GagFile, "rt")
while(!feof(FileOpen)) {
fgets(FileOpen, Line, 127)
trim(Line)
parse(Line, Arg1, 31, Arg2, 31)
if (equali(Arg1, IP)) {
GagTime[id] = str_to_float(Arg2)
IsPlayer = true
break
}
}
fclose(FileOpen)
if (!IsPlayer) {
GagTime[id] = 0.0
}
}
public SaveGag(id) {
new IP[32];
get_user_ip(id, IP, 31, 1);
static Data[1024]
formatex(Data, sizeof(Data) - 1, "^"%f^"", GagTime[id])
new Save[512]
format(Save, 511, "^"%s^" %s", IP, Data)
new Line[128], Linie, IsPlayer = false, Arg1[32]
new FileOpen = fopen(GagFile, "rt")
while(!feof(FileOpen)) {
fgets(FileOpen, Line, 127)
trim(Line)
parse(Line, Arg1, 31)
if (equali(Arg1, IP)) {
write_file(GagFile, Save, Linie)
IsPlayer = true
break
}
Linie++
}
fclose(FileOpen)
if (!IsPlayer) {
write_file(GagFile, Save, -1)
}
}
stock ColorChat(const id, const input[], any:...) {
new count = 1, players[32];
static msg[191];
vformat(msg, 190, input, 3);
replace_all(msg, 190, "!g", "^4");
replace_all(msg, 190, "!y", "^1");
replace_all(msg, 190, "!t", "^3");
if(id) players[0] = id;
else get_players(players, count, "ch"); {
for(new i = 0; i < count; i++) {
if(is_user_connected(players)) {
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players);
write_byte(players);
write_string(msg);
message_end();
}
}
}
}