Code:
#include <amxmodx>
#include <amxmisc>
new const gc_admin_file[] = "addons/EntMod/DF_admins.txt"
new const gc_entlog_dir[] = "addons/EntMod/log/"
new const gc_entlog_fileformat[] = "addons/EntMod/log/%s.txt"
new const gc_entlog_cmds_file[] = "addons/EntMod/log/commands.cfg"
new g_entlog_file[64]
new bool:gb_client_has_ent[33]
new cvar_entlog
new cvar_showactivity
public plugin_init()
{
register_plugin("EntMod Manager", "2.0", "Mini_soldier/stupok69")
register_concmd("ent_adduser", "giveent", ADMIN_RCON, "<name> <pass>")
register_concmd("ent_removeuser", "removeent", ADMIN_RCON, "<name>")
register_concmd("es_delete", "delete_save", ADMIN_RCON, "<filename> as shown in es_list")
cvar_showactivity = register_cvar("entlog_showactivity", "1")
cvar_entlog = register_cvar("entlog", "1")
initiate_log()
}
public initiate_log()
{
if(!dir_exists(gc_entlog_dir)) mkdir(gc_entlog_dir)
if(!file_exists(gc_entlog_cmds_file)) write_file(gc_entlog_cmds_file, ";Add EntMod commands you want to log here")
new fh = fopen(gc_entlog_cmds_file, "rt")
if(fh)
{
new buffer[32]
while(!feof(fh))
{
fgets(fh, buffer, 31)
if(buffer[0] != ';' && buffer[0])
{
register_clcmd(buffer, "log_ent_command")
}
}
}
fclose(fh)
new CurrentDate[16]
get_time("%m%d%y", CurrentDate, 15)
format(g_entlog_file, 63, gc_entlog_fileformat, CurrentDate)
new CurrentTime[64]
get_time("%m/%d/%Y - %H:%M:%S * * * Server Started * * *", CurrentTime, 63)
write_file(g_entlog_file, CurrentTime, -1)
}
public delete_save(id, level, cid)
{
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED
new entsavename[32], currentmap[32], entsavefile[96]
read_argv(1, entsavename, 31)
get_mapname(currentmap, 31)
format(entsavefile, 95, "addons/EntMod/entsave/%s_%s.txt", currentmap, entsavename)
if(!file_exists(entsavefile))
{
console_print(id, "%s does not exist!", entsavename)
}
else
{
delete_file(entsavefile)
console_print(id, "%s successfully deleted.", entsavename)
}
return PLUGIN_HANDLED
}
public client_putinserver(id)
{
gb_client_has_ent[id] = false
set_task(10.0, "login_entmod", id)
}
public login_entmod(id)
{
new fh = fopen(gc_admin_file, "rt")
if(fh)
{
new authid[32], buffer[64], buffer2[64]
get_user_authid(id, authid, 31)
while(!feof(fh))
{
fgets(fh, buffer, 63)
strtok(buffer, buffer, 63, buffer2, 63, ';')
if(equal(buffer, authid))
{
strtok(buffer2, buffer, 63, buffer2, 63, ';')
client_cmd(id, "setinfo _entpass %s", buffer)
gb_client_has_ent[id] = true
new hostname[64]
get_user_name(0, hostname, 63)
client_print(id, print_chat, "[Ent Give] Welcome to %s, you have been logged in to EntMod with pass (%s).", hostname, buffer)
}
}
}
fclose(fh)
}
public giveent(id, level, cid)
{
if(!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED
new arg1[32]
new arg2[32]
read_argv(1, arg1, 31)
read_argv(2, arg2, 31)
new player = cmd_target(id, arg1, 10)
if(player)
{
if(!gb_client_has_ent[player])
{
new name[32], authid[32]
get_user_name(player, name, 31)
get_user_authid(player, authid, 31)
if(!arg2[0])
{
console_print(id, "[Ent Give] You must enter a password!")
return PLUGIN_HANDLED
}
new buffer[128]
format(buffer, 127, "%s;%s;1 ; %s", authid, arg2, name)
write_file(gc_admin_file, buffer, -1)
client_cmd(player, "setinfo _entpass %s", arg2)
gb_client_has_ent[player] = true
set_hudmessage(0, 0, 255, -1.0, -1.0, 0, 6.0, 12.0)
show_hudmessage(0, "[Ent Give] Player: %s now has EntMod access", name)
client_print(player, print_chat, "[Ent Give] Your password: %s", arg2)
client_print(player, print_chat, "[Ent Give] You have been logged in to EntMod, so there is no need to type setinfo _entpass ^"%s^".", arg2)
}
else
{
client_print(id, print_console, "This client already has EntMod access.")
}
}
else
{
client_print(id, print_console, "Client not found.")
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public removeent(id, level, cid)
{
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED
new arg1[32]
read_argv(1, arg1, 31)
new player = cmd_target(id, arg1, 10)
if(player)
{
if(gb_client_has_ent[player])
{
new name[32], authid[32]
get_user_name(player, name, 31)
get_user_authid(player, authid, 31)
new fh = fopen(gc_admin_file, "rt")
if(fh)
{
new buffer[32]
new counter
while(!feof(fh))
{
fgets(fh, buffer, 31)
if(contain(buffer, authid) != -1)
{
gb_client_has_ent[player] = false
write_file(gc_admin_file, "", counter)
client_print(0, print_chat, "[Ent Remover] Removed EntMod access from %s (%s).", name, authid)
client_print(id, print_console, "[Ent Remover] Removed EntMod access from %s (%s).", name, authid)
}
counter++
}
}
fclose(fh)
}
else
{
client_print(id, print_console, "This client does not have EntMod access.")
return PLUGIN_HANDLED
}
}
else
{
client_print(id, print_console, "Client not found.")
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public log_ent_command(id)
{
if(get_pcvar_num(cvar_entlog) && gb_client_has_ent[id])
{
new args[96]
new cmd[32]
new text[256]
new name[32]
new authid[32]
read_args(args, 63)
read_argv(0, cmd, 31)
get_user_name(id, name, 31)
get_user_authid(id, authid, 31)
format(text, 127, "%32s %32s %32s %s", authid, name, cmd, args)
write_file(g_entlog_file, text)
if(get_pcvar_num(cvar_showactivity))
{
set_hudmessage(100, 100, 100, 0.0, 0.7, 0, 0.1, 3.0, 0.1, 0.1, -1)
show_hudmessage(0, "[Ent Log] %s: %s %s", name, cmd, args)
client_print(0, print_console, "[Ent Log] %s did cmd: %s",name, cmd, args)
}
}
}