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