diff --git a/core/AdminCache.cpp b/core/AdminCache.cpp index 3f2f9b42..aa1ec086 100644 --- a/core/AdminCache.cpp +++ b/core/AdminCache.cpp @@ -831,6 +831,7 @@ void AdminCache::DumpAdminCache(AdminCachePart part, bool rebuild) m_pCacheFwd->PushCell(AdminCache_Admins); m_pCacheFwd->Execute(&result); } + g_Players.RecheckAnyAdmins(); } } diff --git a/core/PlayerManager.cpp b/core/PlayerManager.cpp index d11ab7b2..f64488cf 100644 --- a/core/PlayerManager.cpp +++ b/core/PlayerManager.cpp @@ -708,6 +708,18 @@ const char *PlayerManager::GetPassInfoVar() return m_PassInfoVar.c_str(); } +void PlayerManager::RecheckAnyAdmins() +{ + for (int i=1; i<=m_maxClients; i++) + { + if (m_Players[i].IsInGame() && m_Players[i].IsAuthorized()) + { + m_Players[i].DoBasicAdminChecks(); + } + } +} + + /******************* *** PLAYER CODE *** *******************/ diff --git a/core/PlayerManager.h b/core/PlayerManager.h index 60756c55..4ec8772b 100644 --- a/core/PlayerManager.h +++ b/core/PlayerManager.h @@ -116,6 +116,7 @@ public: bool CheckSetAdmin(int index, CPlayer *pPlayer, AdminId id); bool CheckSetAdminName(int index, CPlayer *pPlayer, AdminId id); const char *GetPassInfoVar(); + void RecheckAnyAdmins(); private: void OnServerActivate(edict_t *pEdictList, int edictCount, int clientMax); private: diff --git a/plugins/basecommands.sp b/plugins/basecommands.sp index fdc3cdc0..fd75b241 100644 --- a/plugins/basecommands.sp +++ b/plugins/basecommands.sp @@ -51,12 +51,25 @@ public OnPluginStart() RegAdminCmd("sm_unban", Command_Unban, ADMFLAG_UNBAN, "sm_unban <steamid>"); RegAdminCmd("sm_addban", Command_AddBan, ADMFLAG_RCON, "sm_addban <time> <steamid> [reason]"); RegAdminCmd("sm_banip", Command_BanIp, ADMFLAG_RCON, "sm_banip <time> <ip> [reason]"); + RegAdminCmd("sm_reloadadmins", Command_ReloadAdmins, ADMFLAG_BAN, "sm_reloadadmins"); hBanForward = CreateGlobalForward("OnClientBanned", ET_Hook, Param_Cell, Param_Cell, Param_Cell, Param_String); hAddBanForward = CreateGlobalForward("OnBanAdded", ET_Hook, Param_Cell, Param_String, Param_Cell, Param_String); hBanRemoved = CreateGlobalForward("OnBanRemoved", ET_Hook, Param_Cell, Param_String); } +public Action:Command_ReloadAdmins(client, args) +{ + /* Dump it all! */ + DumpAdminCache(AdminCache_Groups, true); + DumpAdminCache(AdminCache_Overrides, true); + + LogMessage("\"%L\" refreshed the admin cache.", client); + ReplyToCommand(client, "[SM] %t", "Admin cache refreshed"); + + return Plugin_Handled; +} + public Action:Command_BanIp(client, args) { if (args < 2)