[sma]
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "Temporary Admin"
#define VERSION "1.0"
#define AUTHOR "Alka"
new gTempAdminFile[64];
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
set_task(60.0, "cmdCheckAdmins", 1457790, "", 0, "b", 0);
}
public plugin_cfg()
{
new sConfigsDir[64];
get_configsdir(sConfigsDir, sizeof sConfigsDir - 1);
formatex(gTempAdminFile, sizeof gTempAdminFile - 1, "%s/temp_admin.ini", sConfigsDir);
if(!file_exists(gTempAdminFile))
write_file(gTempAdminFile, ";Temporary Admins File^n;Do not modify any existent line on this file^n;To add a comment line just begin it with an ^";^"", -1);
}
public cmdAddTempAdmin(id, level, cid)
{
if(!cmd_access(id, level, cid, 5))
return 1;
new sArg[32], sArg2[2], sArg3[32], sArg4[32];
read_argv(1, sArg, sizeof sArg - 1);
read_argv(2, sArg2, sizeof sArg2 - 1);
read_argv(3, sArg3, sizeof sArg3 - 1);
read_argv(4, sArg4, sizeof sArg4 - 1);
new iTarget = cmd_target(id, sArg, 8);
if(!iTarget)
return 1;
if(is_user_admin(iTarget))
{
client_print(id, print_console, "Player %d is already an admin, check ^"users.ini^" and modify his flags.", iTarget);
return 1;
}
new sTargetInfo[32];
if(is_steam_user(iTarget))
get_user_authid(iTarget, sTargetInfo, sizeof sTargetInfo - 1);
else
get_user_ip(iTarget, sTargetInfo, sizeof sTargetInfo - 1, 1);
new iTimeLength;
switch(sArg2[0])
{
case 'm' : { iTimeLength = str_to_num(sArg3) * 60; }
case 'h' : { iTimeLength = str_to_num(sArg3) * 3600; }
case 'd' : { iTimeLength = str_to_num(sArg3) * 86400; }
case 'y' : { iTimeLength = str_to_num(sArg3) * 31557600; }
default : return 1;
}
new iFile = fopen(gTempAdminFile, "at+");
new sBuffer[128];
formatex(sBuffer, sizeof sBuffer - 1, "^n%s;%s;%d", sTargetInfo, sArg4, get_systime() + iTimeLength);
fprintf(iFile, sBuffer);
fclose(iFile);
CheckAdmin(iTarget);
client_print(id, print_console, "Successfully added player %d to temp admin list.", iTarget);
return 1;
}
public client_authorized(id)
CheckAdmin(id);
public client_infochanged(id)
{
static sNewName[32], sOldName[32];
get_user_name(id, sOldName, sizeof sOldName - 1);
get_user_info(id, "name", sNewName, sizeof sNewName - 1);
if(!equali(sNewName, sOldName))
CheckAdmin(id);
}
public cmdCheckAdmins()
{
static sPlayers[32], iNum;
get_players(sPlayers, iNum, "ch");
for(new i = 0 ; i < iNum ; i++)
CheckAdmin(sPlayers[i]);
}
stock CheckAdmin(index)
{
static sUserInfo[32];
if(is_steam_user(index))
get_user_authid(index, sUserInfo, sizeof sUserInfo - 1);
else
get_user_ip(index, sUserInfo, sizeof sUserInfo - 1, 1);
static iFlags;
iFlags = get_user_flags(index);
static iFile;
iFile = fopen(gTempAdminFile, "rt");
static sBuffer[128], sTemp[3][32];
new iLine;
while(!feof(iFile))
{
fgets(iFile, sBuffer, sizeof sBuffer - 1);
if(sBuffer[0] == ';' || !sBuffer[0])
{
iLine++;
continue;
}
str_piece(sBuffer, sTemp, sizeof sTemp, sizeof sTemp[] - 1, ';');
if(equali(sUserInfo, sTemp[0]) && get_systime() > str_to_num(sTemp[2]))
{
if(iFlags == read_flags(sTemp[1]))
{
remove_user_flags(index, read_flags(sTemp[1]));
set_user_flags(index, read_flags("z"));
}
write_file(gTempAdminFile, ";Admin expired", iLine);
break;
}
if(equali(sUserInfo, sTemp[0]) && get_systime() <= str_to_num(sTemp[2]))
{
if(iFlags != read_flags(sTemp[1]))
{
remove_user_flags(index, read_flags("z"));
set_user_flags(index, read_flags(sTemp[1]));
}
break;
}
iLine++;
}
fclose(iFile);
}
stock bool:is_steam_user(index)
{
new Steamid[32];
get_user_authid(index, Steamid, sizeof Steamid - 1);
if(Steamid[7] == ':')
return true;
return false;
}
stock str_piece(const input[], output[][], outputsize, piecelen, token = '|')
{
new i = -1, pieces, len = -1 ;
while ( input[++i] != 0 )
{
if ( input[i] != token )
{
if ( ++len < piecelen )
output[pieces][len] = input[i] ;
}
else
{
output[pieces++][++len] = 0 ;
len = -1 ;
if ( pieces == outputsize )
return pieces ;
}
}
return pieces + 1;
}[/sma[