Member
|
03-15-2020
, 15:01
Re: is_user_admin(id) , does not check after map change
|
#5
|
Quote:
Originally Posted by Bugsy
Did you take someone else's plugin and change things? I see a bunch of things commented out.. you can't expect it to magically continue to work when doing this unless you know what you're doing. Key item being client_authorized(), I would use this over client_putinserver().
|
The main reason I've changed things is because the clean version of the plugin does not work as well. It saved data on name but it had the same issue.
Quote:
Originally Posted by DJBosma
The issue is that the user has to go thru the menu and select ‘receive flags’ after every change of map(when user stays connected).
|
So here is the clean version..
Code:
#include <amxmodx>
#include <amxmisc>
#include <fvault>
#include <colorchat>
#define PLUGIN "Become Admin"
#define VERSION "1.0"
#define AUTHOR "hackera457"
//#define CHECK_USER_BANNED
#define ADMIN_EXPIRED 2592000 /*30 days*/ /*Time in seconds*/
enum _:Settings
{
BADMIN_REQUIRE_TIME,
BADMIN_REQUIRE_KILLS,
BADMIN_ADMIN_FLAGS
};
new const g_szDataVault[] = "BecomeAdmin_USER_Data";
new const g_szAdminsVault[] = "BecomeAdmin_ADMIN_DB";
new g_szCommands[][]={
"say /ba","say_team /ba",
"say ba", "say_team ba"
};
new g_iKills[33], g_iPlayedTime[33];
new g_szFlags[32];
new g_pSettings[Settings];
#if defined CHECK_USER_BANNED
new Trie:g_tUserBansDB;
new bool:g_bIsUserNotBanned[33];
#endif
new bool:g_bHasUserReqTime[33];
new bool:g_bHasUserReqKills[33];
public plugin_init()
{
register_plugin(PLUGIN,VERSION,AUTHOR);
register_cvar("hackera457_becomeadmin",VERSION,FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED);
g_pSettings[BADMIN_REQUIRE_TIME] = register_cvar("becomeadmin_req_playtime","1500");
g_pSettings[BADMIN_REQUIRE_KILLS] = register_cvar("becomeadmin_req_kills","50");
g_pSettings[BADMIN_ADMIN_FLAGS] = register_cvar("becomeadmin_admin_flags","abcdeijo");
for(new i=0; i < 4; i++)
register_clcmd(g_szCommands[i],"ShowMenu");
get_pcvar_string(g_pSettings[BADMIN_ADMIN_FLAGS],g_szFlags, sizeof g_szFlags -1);
#if defined CHECK_USER_BANNED
g_tUserBansDB = TrieCreate();
LoadBansFromFile();
#endif
register_event("DeathMsg", "eDeath", "a");
register_event("HLTV", "event_new_round", "a", "1=0", "2=0");
}
public client_connect(id)
{
LoadUserData(id);
CheckUser(id);
}
public client_disconnect(id)
{
SaveUserData(id);
}
public client_putinserver(id)
{
LoadAdminInfo(id);
}
public event_new_round()
{
static iPlayers[32],iNum, iPlayer;
get_players(iPlayers,iNum,"ch");
for(new i=0; i < iNum; i++)
{
iPlayer = iPlayers[i];
if(!is_user_connected(iPlayer))
continue;
g_iPlayedTime[iPlayer] = g_iPlayedTime[iPlayer]+ (get_user_time(iPlayer) / 60);
}
}
public plugin_end()
{
#if defined CHECK_USER_BANNED
TrieDestroy(g_tUserBansDB);
#endif
}
public ShowMenu(id)
{
if(is_user_admin(id))
{
ColorChat(id,TEAM_COLOR,"^1[^4Become^3Admin^1] You have been already became an Admin!");
return PLUGIN_HANDLED;
}
CheckUser(id);
static szMenuItem[64], iMenu;
iMenu = menu_create("\rBecome an Admin:","handlerMenuAdmin");
#if defined CHECK_USER_BANNED
formatex(szMenuItem, sizeof szMenuItem -1,"\yYou were not banned. %s",(g_bIsUserNotBanned[id] ? "\r[CHECKED]" : ""));
#else
formatex(szMenuItem, sizeof szMenuItem -1,"\dYou were not banned.");
#endif
menu_additem(iMenu, szMenuItem,"1",_,menu_makecallback("DisableBanOption"));
formatex(szMenuItem, sizeof szMenuItem -1, "\yYou were played \d%i \yminutes. %s",get_pcvar_num(g_pSettings[BADMIN_REQUIRE_TIME]),(g_bHasUserReqTime[id] ? "\r[CHECKED]" : ""));
menu_additem(iMenu, szMenuItem,"2",_,menu_makecallback("DisableTimeOption"));
formatex(szMenuItem, sizeof szMenuItem -1,"\yYou were have \d%i \ykills. %s",get_pcvar_num(g_pSettings[BADMIN_REQUIRE_KILLS]),(g_bHasUserReqKills[id] ? "\r[CHECKED]" : ""));
menu_additem(iMenu, szMenuItem,"3",_,menu_makecallback("DisableKillOption"));
if(is_user_become_admin(id))
{
menu_additem(iMenu, "\rBecome Admin","4");
}
menu_setprop(iMenu, MPROP_EXITNAME, "\rExit");
menu_display(id,iMenu,0);
return PLUGIN_HANDLED;
}
public DisableBanOption(id,iMenu, iItem)
{
return ITEM_DISABLED;
}
public DisableTimeOption(id,iMenu, iItem)
{
return ITEM_DISABLED;
}
public DisableKillOption(id,iMenu, iItem)
{
return ITEM_DISABLED;
}
public handlerMenuAdmin(id,iMenu, iItem)
{
if(iItem == MENU_EXIT)
{
menu_destroy(iMenu);
return PLUGIN_HANDLED;
}
static szData[6],szName[64],iAccess, iCallback, iKey;
menu_item_getinfo(iMenu, iItem, iAccess, szData, sizeof szData -1, szName, sizeof szName -1, iCallback);
iKey = str_to_num(szData);
switch(iKey)
{
case 4:
{
#if defined CHECK_USER_BANNED
if(g_bIsUserNotBanned[id] && g_bHasUserReqTime[id] && g_bHasUserReqKills[id])
#else
if(g_bHasUserReqTime[id] && g_bHasUserReqKills[id])
#endif
{
BecomeAdmin(id,g_szFlags);
SaveAdminInfo(id,g_szFlags);
}
}
}
return PLUGIN_HANDLED;
}
public eDeath()
{
static iKiller, iVictim;
iKiller = read_data(1);
iVictim = read_data(2);
if(!is_user_connected(iKiller) || !is_user_connected(iVictim) || iKiller == iVictim)
return;
g_iKills[iKiller]++;
}
#if defined CHECK_USER_BANNED
LoadBansFromFile()
{
static iFilePointer, szData[512], szAddIp[32], szBanTime[40], szUserIp[32], iTotalBans, iStart;
iTotalBans = 0;
iFilePointer = fopen("listip.cfg","r");
if(!iFilePointer)
return;
while(!feof(iFilePointer))
{
fgets(iFilePointer,szData, sizeof szData -1);
trim(szData);
if(!szData[0] || szData[0] == ';' || (szData[0] == '/' && szData[1] == '/'))
continue;
iStart = containi(szData, "addip");
if(iStart < 0)
continue;
parse(szData[iStart], szAddIp, sizeof szAddIp -1, szBanTime, sizeof szBanTime -1, szUserIp, sizeof szUserIp -1);
TrieSetCell(g_tUserBansDB, szUserIp, iTotalBans);
iTotalBans++;
}
fclose(iFilePointer);
}
#endif
CheckUser(id)
{
if(!is_user_connected(id) || is_user_hltv(id) || is_user_bot(id))
return;
static iRequireTime, iRequireKills;
iRequireTime = get_pcvar_num(g_pSettings[BADMIN_REQUIRE_TIME]);
iRequireKills = get_pcvar_num(g_pSettings[BADMIN_REQUIRE_KILLS]);
#if defined CHECK_USER_BANNED
static szUserIp[30], iUserTotalBans;
get_user_ip(id,szUserIp, sizeof szUserIp -1,1);
TrieGetCell(g_tUserBansDB, szUserIp, iUserTotalBans);
if(iUserTotalBans <=0)
g_bIsUserNotBanned[id] = true;
#endif
if(g_iPlayedTime[id] >= iRequireTime)
g_bHasUserReqTime[id] = true;
if(g_iKills[id] >=iRequireKills)
g_bHasUserReqKills[id] = true;
}
BecomeAdmin(id, const szFlags[])
{
if(is_user_admin(id))
return;
if(is_user_become_admin(id))
{
remove_user_flags(id,read_flags("z"));
set_user_flags(id,read_flags(szFlags));
}
ColorChat(id,TEAM_COLOR,"^1[^4Become^3Admin^1] You became an ^4ADMIN^1! Your flags: ^4%s^1!",szFlags);
}
LoadUserData(id)
{
static szName[32], szData[512], szPlayedTime[60], szKills[32];
get_user_name(id,szName, sizeof szName -1);
if(fvault_get_data(g_szDataVault,szName, szData, sizeof szData -1))
{
replace_all(szData, sizeof szData -1,"#"," ");
parse(szData, szPlayedTime, sizeof szPlayedTime -1, szKills, sizeof szKills -1);
g_iKills[id] = str_to_num(szKills);
g_iPlayedTime[id] = str_to_num(szPlayedTime);
}
else
{
g_iKills[id] = 0;
g_iPlayedTime[id] = 0;
}
}
SaveUserData(id)
{
static szName[32], szVaultData[512];
get_user_name(id,szName, sizeof szName -1);
formatex(szVaultData, sizeof szVaultData -1, "%i#%i",g_iPlayedTime[id], g_iKills[id]);
fvault_set_data(g_szDataVault,szName,szVaultData);
g_iKills[id] = 0;
g_iPlayedTime[id] = 0;
}
LoadAdminInfo(id)
{
static szName[32], szData[512], szFlags[32], szExpire[60], iExpireTime;
get_user_name(id,szName, sizeof szName -1);
if(fvault_get_data(g_szAdminsVault,szName,szData, sizeof szData -1))
{
replace_all(szData, sizeof szData -1,"|", " ");
parse(szData,szFlags, sizeof szFlags -1,szExpire, sizeof szExpire -1);
iExpireTime = str_to_num(szExpire);
if(iExpireTime < time())
fvault_remove_key(g_szAdminsVault, szName);
else
BecomeAdmin(id,szFlags);
}
}
SaveAdminInfo(id, const sFlags[])
{
if(!is_user_become_admin(id))
return;
static szName[32], szData[512], szVaultData[512], iExpired;
get_user_name(id,szName, sizeof szName -1);
iExpired = time()+ ADMIN_EXPIRED;
if(!fvault_get_data(g_szAdminsVault,szName,szData, sizeof szData -1))
{
formatex(szVaultData, sizeof szVaultData -1, "%s|%i", sFlags,iExpired);
fvault_set_data(g_szAdminsVault,szName,szVaultData);
}
}
bool:is_user_become_admin(id)
{
#if defined CHECK_USER_BANNED
return (g_bIsUserNotBanned[id] && g_bHasUserReqTime[id] && g_bHasUserReqKills[id]) ? true : false;
#else
return (g_bHasUserReqTime[id] && g_bHasUserReqKills[id]) ? true: false;
#endif
}
Last edited by DJBosma; 03-15-2020 at 15:04.
|
|