core/smn_admin.cpp
author Borja Ferrer <faluco@alliedmods.net>
Sun Feb 04 22:41:44 2007 +0000 (2007-02-04)
changeset 430 ed37e9767ed4
parent 370 d3a484f98f6d
child 433 d699e31199ad
permissions -rw-r--r--
Optimized forwards, now paused functions are stored in a temp list so we dont have to check if they're runnable on each function execution.
     1 /**
     2  * ===============================================================
     3  * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
     4  * ===============================================================
     5  *
     6  * This file is not open source and may not be copied without explicit
     7  * written permission of AlliedModders LLC.  This file may not be redistributed 
     8  * in whole or significant part.
     9  * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
    10  *
    11  * Version: $Id$
    12  */
    13 
    14 #include "sm_globals.h"
    15 #include "AdminCache.h"
    16 #include "ForwardSys.h"
    17 
    18 static cell_t DumpAdminCache(IPluginContext *pContext, const cell_t *params)
    19 {
    20 	g_Admins.DumpAdminCache(params[1], (params[2] == 1) ? true : false);
    21 	return 1;
    22 }
    23 
    24 static cell_t AddCommandOverride(IPluginContext *pContext, const cell_t *params)
    25 {
    26 	char *str;
    27 
    28 	pContext->LocalToString(params[1], &str);
    29 	g_Admins.AddCommandOverride(str, (OverrideType)params[2], (AdminFlag)params[3]);
    30 
    31 	return 1;
    32 }
    33 
    34 static cell_t GetCommandOverride(IPluginContext *pContext, const cell_t *params)
    35 {
    36 	char *cmd;
    37 	AdminFlag flag;
    38 
    39 	pContext->LocalToString(params[1], &cmd);
    40 
    41 	if (!g_Admins.GetCommandOverride(cmd, (OverrideType)params[2], &flag))
    42 	{
    43 		return 0;
    44 	}
    45 
    46 	cell_t *addr;
    47 	pContext->LocalToPhysAddr(params[3], &addr);
    48 
    49 	*addr = (cell_t)flag;
    50 
    51 	return 1;
    52 }
    53 
    54 static cell_t UnsetCommandOverride(IPluginContext *pContext, const cell_t *params)
    55 {
    56 	char *cmd;
    57 
    58 	pContext->LocalToString(params[1], &cmd);
    59 
    60 	g_Admins.UnsetCommandOverride(cmd, (OverrideType)params[2]);
    61 
    62 	return 1;
    63 }
    64 
    65 static cell_t CreateAdmGroup(IPluginContext *pContext, const cell_t *params)
    66 {
    67 	char *str;
    68 
    69 	pContext->LocalToString(params[1], &str);
    70 
    71 	return g_Admins.AddGroup(str);
    72 }
    73 
    74 static cell_t FindAdmGroup(IPluginContext *pContext, const cell_t *params)
    75 {
    76 	char *str;
    77 
    78 	pContext->LocalToString(params[1], &str);
    79 
    80 	return g_Admins.FindGroupByName(str);
    81 }
    82 
    83 static cell_t SetAdmGroupAddFlag(IPluginContext *pContext, const cell_t *params)
    84 {
    85 	GroupId id = (GroupId)params[1];
    86 	AdminFlag flag = (AdminFlag)params[2];
    87 	bool enabled = params[3] ? 1 : 0;
    88 
    89 	g_Admins.SetGroupAddFlag(id, flag, enabled);
    90 
    91 	return 1;
    92 }
    93 
    94 static cell_t GetAdmGroupAddFlag(IPluginContext *pContext, const cell_t *params)
    95 {
    96 	GroupId id = (GroupId)params[1];
    97 	AdminFlag flag = (AdminFlag)params[2];
    98 	
    99 	return g_Admins.GetGroupAddFlag(id, flag) ? 1 : 0;
   100 }
   101 
   102 static cell_t SetAdmGroupImmunity(IPluginContext *pContext, const cell_t *params)
   103 {
   104 	GroupId id = (GroupId)params[1];
   105 	ImmunityType type = (ImmunityType)params[2];
   106 	bool enabled = params[3] ? 1 : 0;
   107 
   108 	g_Admins.SetGroupGenericImmunity(id, type, enabled);
   109 
   110 	return 1;
   111 }
   112 
   113 static cell_t GetAdmGroupImmunity(IPluginContext *pContext, const cell_t *params)
   114 {
   115 	GroupId id = (GroupId)params[1];
   116 	ImmunityType type = (ImmunityType)params[2];
   117 
   118 	return g_Admins.GetGroupGenericImmunity(id, type) ? 1 : 0;
   119 }
   120 
   121 static cell_t SetAdmGroupImmuneFrom(IPluginContext *pContext, const cell_t *params)
   122 {
   123 	GroupId id = (GroupId)params[1];
   124 	GroupId other_id = (GroupId)params[2];
   125 
   126 	g_Admins.AddGroupImmunity(id, other_id);
   127 
   128 	return 1;
   129 }
   130 
   131 static cell_t GetAdmGroupImmuneCount(IPluginContext *pContext, const cell_t *params)
   132 {
   133 	GroupId id = (GroupId)params[1];
   134 
   135 	return g_Admins.GetGroupImmunityCount(id);
   136 }
   137 
   138 static cell_t GetAdmGroupImmuneFrom(IPluginContext *pContext, const cell_t *params)
   139 {
   140 	GroupId id = (GroupId)params[1];
   141 
   142 	return g_Admins.GetGroupImmunity(id, params[2]);
   143 }
   144 
   145 static cell_t AddAdmGroupCmdOverride(IPluginContext *pContext, const cell_t *params)
   146 {
   147 	GroupId id = (GroupId)params[1];
   148 	OverrideType type = (OverrideType)params[3];
   149 	OverrideRule rule = (OverrideRule)params[4];
   150 	char *cmd;
   151 
   152 	pContext->LocalToString(params[2], &cmd);
   153 
   154 	g_Admins.AddGroupCommandOverride(id, cmd, type, rule);
   155 
   156 	return 1;
   157 }
   158 
   159 static cell_t GetAdmGroupCmdOverride(IPluginContext *pContext, const cell_t *params)
   160 {
   161 	GroupId id = (GroupId)params[1];
   162 	OverrideType type = (OverrideType)params[3];
   163 	OverrideRule rule;
   164 	char *cmd;
   165 
   166 	pContext->LocalToString(params[2], &cmd);
   167 
   168 	if (!g_Admins.GetGroupCommandOverride(id, cmd, type, &rule))
   169 	{
   170 		return 0;
   171 	}
   172 
   173 	cell_t *addr;
   174 	pContext->LocalToPhysAddr(params[4], &addr);
   175 	*addr = (cell_t)rule;
   176 
   177 	return 1;
   178 }
   179 
   180 static cell_t GetAdmGroupAddFlagBits(IPluginContext *pContext, const cell_t *params)
   181 {
   182 	GroupId id = (GroupId)params[1];
   183 	bool flags[AdminFlags_TOTAL];
   184 	unsigned int num = g_Admins.GetGroupAddFlagBits(id, flags, AdminFlags_TOTAL);
   185 	unsigned int i;
   186 
   187 	cell_t *addr;
   188 	pContext->LocalToPhysAddr(params[2], &addr);
   189 
   190 	for (i=0;
   191 		i < num && i < (unsigned int)params[3];
   192 		i++)
   193 	{
   194 		addr[i] = flags[i] ? 1 : 0;
   195 	}
   196 
   197 	return i;
   198 }
   199 
   200 REGISTER_NATIVES(adminNatives)
   201 {
   202 	{"DumpAdminCache",			DumpAdminCache},
   203 	{"AddCommandOverride",		AddCommandOverride},
   204 	{"GetCommandOverride",		GetCommandOverride},
   205 	{"UnsetCommandOverride",	UnsetCommandOverride},
   206 	{"CreateAdmGroup",			CreateAdmGroup},
   207 	{"FindAdmGroup",			FindAdmGroup},
   208 	{"SetAdmGroupAddFlag",		SetAdmGroupAddFlag},
   209 	{"GetAdmGroupAddFlag",		GetAdmGroupAddFlag},
   210 	{"SetAdmGroupImmunity",		SetAdmGroupImmunity},
   211 	{"GetAdmGroupImmunity",		GetAdmGroupImmunity},
   212 	{"SetAdmGroupImmuneFrom",	SetAdmGroupImmuneFrom},
   213 	{"GetAdmGroupImmuneFrom",	GetAdmGroupImmuneFrom},
   214 	{"GetAdmGroupImmuneCount",	GetAdmGroupImmuneCount},
   215 	{"AddAdmGroupCmdOverride",	AddAdmGroupCmdOverride},
   216 	{"GetAdmGroupCmdOverride",	GetAdmGroupCmdOverride},
   217 	{"GetAdmGroupAddFlagBits",	GetAdmGroupAddFlagBits},
   218 	{NULL,						NULL},
   219 };