From 5d5400a9ac16359fe32e86fe53a5217d97bcb9e3 Mon Sep 17 00:00:00 2001 From: _KaszpiR_ Date: Sun, 27 Jun 2010 19:17:25 -0400 Subject: [PATCH] Added FindFlagChar native. (bug 3776, r=dvander) --- core/logic/intercom.h | 2 +- core/logic/smn_admin.cpp | 17 +++++++++++++++++ plugins/include/admin.inc | 9 +++++++++ public/IAdminSystem.h | 11 ++++++++++- 4 files changed, 37 insertions(+), 2 deletions(-) diff --git a/core/logic/intercom.h b/core/logic/intercom.h index b2f622c1..4af7e6de 100644 --- a/core/logic/intercom.h +++ b/core/logic/intercom.h @@ -42,7 +42,7 @@ using namespace SourceMod; * Add 1 to the RHS of this expression to bump the intercom file * This is to prevent mismatching core/logic binaries */ -#define SM_LOGIC_MAGIC (0x0F47C0DE - 14) +#define SM_LOGIC_MAGIC (0x0F47C0DE - 15) #if defined SM_LOGIC class IVEngineServer diff --git a/core/logic/smn_admin.cpp b/core/logic/smn_admin.cpp index b4121dc9..0d7d6ea4 100644 --- a/core/logic/smn_admin.cpp +++ b/core/logic/smn_admin.cpp @@ -507,6 +507,22 @@ static cell_t FindFlagByChar(IPluginContext *pContext, const cell_t *params) return 1; } +static cell_t FindFlagChar(IPluginContext *pContext, const cell_t *params) +{ + cell_t *addr; + pContext->LocalToPhysAddr(params[2], &addr); + + char flagchar; + if (!adminsys->FindFlagChar((AdminFlag)params[1], &flagchar)) + { + return 0; + } + + *addr = (cell_t)flagchar; + + return 1; +} + static cell_t ReadFlagString(IPluginContext *pContext, const cell_t *params) { char *flag; @@ -563,6 +579,7 @@ REGISTER_NATIVES(adminNatives) {"CreateAuthMethod", CreateAuthMethod}, {"FindFlagByName", FindFlagByName}, {"FindFlagByChar", FindFlagByChar}, + {"FindFlagChar", FindFlagChar}, {"ReadFlagString", ReadFlagString}, {"GetAdmGroupImmunityLevel",GetAdmGroupImmunityLevel}, {"SetAdmGroupImmunityLevel",SetAdmGroupImmunityLevel}, diff --git a/plugins/include/admin.inc b/plugins/include/admin.inc index 20ba921a..6afd5ba1 100644 --- a/plugins/include/admin.inc +++ b/plugins/include/admin.inc @@ -516,6 +516,15 @@ native bool:FindFlagByName(const String:name[], &AdminFlag:flag); */ native bool:FindFlagByChar(c, &AdminFlag:flag); +/** + * Finds a flag char by a gived admin flag. + * + * @param flag Flag to look up. + * @param c Variable to store flag char. + * @return True on success, false if not found. + */ +native bool:FindFlagChar(AdminFlag:flag, &c); + /** * Converts a string of flag characters to a bit string. * diff --git a/public/IAdminSystem.h b/public/IAdminSystem.h index 8aa8961e..c7fe8454 100644 --- a/public/IAdminSystem.h +++ b/public/IAdminSystem.h @@ -35,7 +35,7 @@ #include #define SMINTERFACE_ADMINSYS_NAME "IAdminSys" -#define SMINTERFACE_ADMINSYS_VERSION 5 +#define SMINTERFACE_ADMINSYS_VERSION 6 /** * @file IAdminSystem.h @@ -717,6 +717,15 @@ namespace SourceMod const char *cmd, FlagBits flags, bool override_only) =0; + + /** + * @brief Reads a flag as the corresponding character. + * + * @param flag Flag to look up. + * @param c Variable to store flag char. + * @return True on success, false if not found. + */ + virtual bool FindFlagChar(AdminFlag flag, char *c); }; }