core/logic/smn_admin.cpp
author David Anderson <dvander@alliedmods.net>
Thu Aug 08 22:02:42 2013 -0700 (2013-08-08)
changeset 3980 dc7dfcd855dc
parent 3055 4c81256cac43
permissions -rw-r--r--
More Windows build fix.
dvander@370
     1
/**
ds@653
     2
 * vim: set ts=4 :
ds@1330
     3
 * =============================================================================
dvander@1231
     4
 * SourceMod
ds@1947
     5
 * Copyright (C) 2004-2008 AlliedModders LLC.  All rights reserved.
ds@1330
     6
 * =============================================================================
dvander@370
     7
 *
ds@1330
     8
 * This program is free software; you can redistribute it and/or modify it under
ds@1330
     9
 * the terms of the GNU General Public License, version 3.0, as published by the
ds@1330
    10
 * Free Software Foundation.
dvander@1231
    11
 * 
ds@1330
    12
 * This program is distributed in the hope that it will be useful, but WITHOUT
ds@1330
    13
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
ds@1330
    14
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
ds@1330
    15
 * details.
dvander@1231
    16
 *
ds@1330
    17
 * You should have received a copy of the GNU General Public License along with
ds@1330
    18
 * this program.  If not, see <http://www.gnu.org/licenses/>.
dvander@1231
    19
 *
ds@1330
    20
 * As a special exception, AlliedModders LLC gives you permission to link the
ds@1330
    21
 * code of this program (as well as its derivative works) to "Half-Life 2," the
ds@1330
    22
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
ds@1330
    23
 * by the Valve Corporation.  You must obey the GNU General Public License in
ds@1330
    24
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
ds@1330
    25
 * this exception to all derivative works.  AlliedModders LLC defines further
ds@1330
    26
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
ds@1330
    27
 * or <http://www.sourcemod.net/license.php>.
dvander@370
    28
 *
dvander@370
    29
 * Version: $Id$
dvander@370
    30
 */
dvander@370
    31
dvander@3000
    32
#include "common_logic.h"
dvander@3000
    33
#include <IAdminSystem.h>
dvander@3000
    34
#include <IForwardSys.h>
dvander@3000
    35
dvander@3000
    36
using namespace SourceMod;
dvander@337
    37
dvander@337
    38
static cell_t DumpAdminCache(IPluginContext *pContext, const cell_t *params)
dvander@337
    39
{
dvander@3000
    40
	adminsys->DumpAdminCache((AdminCachePart)params[1], (params[2] == 1) ? true : false);
dvander@337
    41
	return 1;
dvander@337
    42
}
dvander@337
    43
dvander@337
    44
static cell_t AddCommandOverride(IPluginContext *pContext, const cell_t *params)
dvander@337
    45
{
dvander@337
    46
	char *str;
dvander@337
    47
dvander@337
    48
	pContext->LocalToString(params[1], &str);
dvander@3000
    49
	adminsys->AddCommandOverride(str, (OverrideType)params[2], (AdminFlag)params[3]);
dvander@337
    50
dvander@337
    51
	return 1;
dvander@337
    52
}
dvander@337
    53
dvander@337
    54
static cell_t GetCommandOverride(IPluginContext *pContext, const cell_t *params)
dvander@337
    55
{
dvander@337
    56
	char *cmd;
dvander@433
    57
	FlagBits flags;
dvander@337
    58
dvander@337
    59
	pContext->LocalToString(params[1], &cmd);
dvander@337
    60
dvander@3000
    61
	if (!adminsys->GetCommandOverride(cmd, (OverrideType)params[2], &flags))
dvander@337
    62
	{
dvander@337
    63
		return 0;
dvander@337
    64
	}
dvander@337
    65
dvander@337
    66
	cell_t *addr;
dvander@337
    67
	pContext->LocalToPhysAddr(params[3], &addr);
dvander@337
    68
dvander@433
    69
	*addr = (cell_t)flags;
dvander@337
    70
dvander@337
    71
	return 1;
dvander@337
    72
}
dvander@337
    73
dvander@337
    74
static cell_t UnsetCommandOverride(IPluginContext *pContext, const cell_t *params)
dvander@337
    75
{
dvander@337
    76
	char *cmd;
dvander@337
    77
dvander@337
    78
	pContext->LocalToString(params[1], &cmd);
dvander@337
    79
dvander@3000
    80
	adminsys->UnsetCommandOverride(cmd, (OverrideType)params[2]);
dvander@337
    81
dvander@337
    82
	return 1;
dvander@337
    83
}
dvander@337
    84
dvander@337
    85
static cell_t CreateAdmGroup(IPluginContext *pContext, const cell_t *params)
dvander@337
    86
{
dvander@337
    87
	char *str;
dvander@337
    88
dvander@337
    89
	pContext->LocalToString(params[1], &str);
dvander@337
    90
dvander@3000
    91
	return adminsys->AddGroup(str);
dvander@337
    92
}
dvander@337
    93
dvander@337
    94
static cell_t FindAdmGroup(IPluginContext *pContext, const cell_t *params)
dvander@337
    95
{
dvander@337
    96
	char *str;
dvander@337
    97
dvander@337
    98
	pContext->LocalToString(params[1], &str);
dvander@337
    99
dvander@3000
   100
	return adminsys->FindGroupByName(str);
dvander@337
   101
}
dvander@337
   102
dvander@337
   103
static cell_t SetAdmGroupAddFlag(IPluginContext *pContext, const cell_t *params)
dvander@337
   104
{
dvander@337
   105
	GroupId id = (GroupId)params[1];
dvander@337
   106
	AdminFlag flag = (AdminFlag)params[2];
dvander@337
   107
	bool enabled = params[3] ? 1 : 0;
dvander@337
   108
dvander@3000
   109
	adminsys->SetGroupAddFlag(id, flag, enabled);
dvander@337
   110
dvander@337
   111
	return 1;
dvander@337
   112
}
dvander@337
   113
dvander@337
   114
static cell_t GetAdmGroupAddFlag(IPluginContext *pContext, const cell_t *params)
dvander@337
   115
{
dvander@337
   116
	GroupId id = (GroupId)params[1];
dvander@337
   117
	AdminFlag flag = (AdminFlag)params[2];
dvander@337
   118
	
dvander@3000
   119
	return adminsys->GetGroupAddFlag(id, flag) ? 1 : 0;
dvander@337
   120
}
dvander@337
   121
dvander@337
   122
static cell_t SetAdmGroupImmunity(IPluginContext *pContext, const cell_t *params)
dvander@337
   123
{
dvander@337
   124
	GroupId id = (GroupId)params[1];
dvander@337
   125
	ImmunityType type = (ImmunityType)params[2];
dvander@337
   126
	bool enabled = params[3] ? 1 : 0;
dvander@337
   127
dvander@3000
   128
	adminsys->SetGroupGenericImmunity(id, type, enabled);
dvander@337
   129
dvander@337
   130
	return 1;
dvander@337
   131
}
dvander@337
   132
dvander@337
   133
static cell_t GetAdmGroupImmunity(IPluginContext *pContext, const cell_t *params)
dvander@337
   134
{
dvander@337
   135
	GroupId id = (GroupId)params[1];
dvander@337
   136
	ImmunityType type = (ImmunityType)params[2];
dvander@337
   137
dvander@3000
   138
	return adminsys->GetGroupGenericImmunity(id, type) ? 1 : 0;
dvander@337
   139
}
dvander@337
   140
dvander@337
   141
static cell_t SetAdmGroupImmuneFrom(IPluginContext *pContext, const cell_t *params)
dvander@337
   142
{
dvander@337
   143
	GroupId id = (GroupId)params[1];
dvander@337
   144
	GroupId other_id = (GroupId)params[2];
dvander@337
   145
dvander@3000
   146
	adminsys->AddGroupImmunity(id, other_id);
dvander@337
   147
dvander@337
   148
	return 1;
dvander@337
   149
}
dvander@337
   150
dvander@337
   151
static cell_t GetAdmGroupImmuneCount(IPluginContext *pContext, const cell_t *params)
dvander@337
   152
{
dvander@337
   153
	GroupId id = (GroupId)params[1];
dvander@337
   154
dvander@3000
   155
	return adminsys->GetGroupImmunityCount(id);
dvander@337
   156
}
dvander@337
   157
dvander@337
   158
static cell_t GetAdmGroupImmuneFrom(IPluginContext *pContext, const cell_t *params)
dvander@337
   159
{
dvander@337
   160
	GroupId id = (GroupId)params[1];
dvander@337
   161
dvander@3000
   162
	return adminsys->GetGroupImmunity(id, params[2]);
dvander@337
   163
}
dvander@337
   164
dvander@337
   165
static cell_t AddAdmGroupCmdOverride(IPluginContext *pContext, const cell_t *params)
dvander@337
   166
{
dvander@337
   167
	GroupId id = (GroupId)params[1];
dvander@337
   168
	OverrideType type = (OverrideType)params[3];
dvander@337
   169
	OverrideRule rule = (OverrideRule)params[4];
dvander@337
   170
	char *cmd;
dvander@337
   171
dvander@337
   172
	pContext->LocalToString(params[2], &cmd);
dvander@337
   173
dvander@3000
   174
	adminsys->AddGroupCommandOverride(id, cmd, type, rule);
dvander@337
   175
dvander@337
   176
	return 1;
dvander@337
   177
}
dvander@337
   178
dvander@337
   179
static cell_t GetAdmGroupCmdOverride(IPluginContext *pContext, const cell_t *params)
dvander@337
   180
{
dvander@337
   181
	GroupId id = (GroupId)params[1];
dvander@337
   182
	OverrideType type = (OverrideType)params[3];
dvander@337
   183
	OverrideRule rule;
dvander@337
   184
	char *cmd;
dvander@337
   185
dvander@337
   186
	pContext->LocalToString(params[2], &cmd);
dvander@337
   187
dvander@3000
   188
	if (!adminsys->GetGroupCommandOverride(id, cmd, type, &rule))
dvander@337
   189
	{
dvander@337
   190
		return 0;
dvander@337
   191
	}
dvander@337
   192
dvander@337
   193
	cell_t *addr;
dvander@337
   194
	pContext->LocalToPhysAddr(params[4], &addr);
dvander@337
   195
	*addr = (cell_t)rule;
dvander@337
   196
dvander@337
   197
	return 1;
dvander@337
   198
}
dvander@337
   199
dvander@433
   200
static cell_t GetAdmGroupAddFlags(IPluginContext *pContext, const cell_t *params)
dvander@337
   201
{
dvander@337
   202
	GroupId id = (GroupId)params[1];
dvander@3000
   203
	return adminsys->GetGroupAddFlags(id);
dvander@337
   204
}
dvander@337
   205
dvander@436
   206
static cell_t RegisterAuthIdentType(IPluginContext *pContext, const cell_t *params)
dvander@436
   207
{
dvander@436
   208
	char *type;
dvander@436
   209
	pContext->LocalToString(params[1], &type);
dvander@436
   210
dvander@3000
   211
	adminsys->RegisterAuthIdentType(type);
dvander@436
   212
dvander@436
   213
	return 1;
dvander@436
   214
}
dvander@436
   215
dvander@436
   216
static cell_t CreateAdmin(IPluginContext *pContext, const cell_t *params)
dvander@436
   217
{
dvander@436
   218
	char *admin;
dvander@436
   219
	pContext->LocalToString(params[1], &admin);
dvander@436
   220
dvander@436
   221
	if (admin[0] == '\0')
dvander@436
   222
	{
dvander@436
   223
		admin = NULL;
dvander@436
   224
	}
dvander@436
   225
dvander@3000
   226
	return adminsys->CreateAdmin(admin);
dvander@436
   227
}
dvander@436
   228
dvander@436
   229
static cell_t GetAdminUsername(IPluginContext *pContext, const cell_t *params)
dvander@436
   230
{
dvander@436
   231
	AdminId id = params[1];
dvander@436
   232
	size_t written;
dvander@3000
   233
	const char *name = adminsys->GetAdminName(id);
dvander@436
   234
dvander@436
   235
	if (!name)
dvander@436
   236
	{
dvander@436
   237
		return 0;
dvander@436
   238
	}
dvander@436
   239
dvander@436
   240
	pContext->StringToLocalUTF8(params[2], params[3], name, &written);
dvander@436
   241
dvander@436
   242
	return written;
dvander@436
   243
}
dvander@436
   244
dvander@436
   245
static cell_t BindAdminIdentity(IPluginContext *pContext, const cell_t *params)
dvander@436
   246
{
dvander@436
   247
	AdminId id = params[1];
dvander@436
   248
	char *auth, *ident;
dvander@436
   249
dvander@436
   250
	pContext->LocalToString(params[2], &auth);
dvander@436
   251
	pContext->LocalToString(params[3], &ident);
dvander@436
   252
dvander@3000
   253
	return adminsys->BindAdminIdentity(id, auth, ident);
dvander@436
   254
}
dvander@436
   255
dvander@436
   256
static cell_t SetAdminFlag(IPluginContext *pContext, const cell_t *params)
dvander@436
   257
{
dvander@436
   258
	AdminId id = params[1];
dvander@436
   259
	AdminFlag flag = (AdminFlag)params[2];
dvander@436
   260
	bool enabled = params[3] ? true : false;
dvander@436
   261
dvander@3000
   262
	adminsys->SetAdminFlag(id, flag, enabled);
dvander@436
   263
dvander@436
   264
	return 1;
dvander@436
   265
}
dvander@436
   266
dvander@436
   267
static cell_t GetAdminFlag(IPluginContext *pContext, const cell_t *params)
dvander@436
   268
{
dvander@436
   269
	AdminId id = params[1];
dvander@436
   270
	AdminFlag flag = (AdminFlag)params[2];
dvander@436
   271
	AccessMode mode = (AccessMode)params[3];
dvander@436
   272
dvander@3000
   273
	return adminsys->GetAdminFlag(id, flag, mode);
dvander@436
   274
}
dvander@436
   275
dvander@436
   276
static cell_t GetAdminFlags(IPluginContext *pContext, const cell_t *params)
dvander@436
   277
{
dvander@436
   278
	AdminId id = params[1];
dvander@436
   279
	AccessMode mode = (AccessMode)params[2];
dvander@436
   280
dvander@3000
   281
	return adminsys->GetAdminFlags(id, mode);
dvander@436
   282
}
dvander@436
   283
dvander@436
   284
static cell_t AdminInheritGroup(IPluginContext *pContext, const cell_t *params)
dvander@436
   285
{
dvander@436
   286
	AdminId id = params[1];
dvander@436
   287
	GroupId gid = params[2];
dvander@436
   288
dvander@3000
   289
	return adminsys->AdminInheritGroup(id, gid);
dvander@436
   290
}
dvander@436
   291
dvander@436
   292
static cell_t GetAdminGroupCount(IPluginContext *pContext, const cell_t *params)
dvander@436
   293
{
dvander@436
   294
	AdminId id = params[1];
dvander@436
   295
dvander@3000
   296
	return adminsys->GetAdminGroupCount(id);
dvander@436
   297
}
dvander@436
   298
dvander@436
   299
static cell_t GetAdminGroup(IPluginContext *pContext, const cell_t *params)
dvander@436
   300
{
dvander@436
   301
	AdminId id = params[1];
dvander@436
   302
	unsigned int index = params[2];
dvander@436
   303
	const char *name;
dvander@436
   304
	GroupId gid;
dvander@436
   305
dvander@3000
   306
	if ((gid=adminsys->GetAdminGroup(id, index, &name)) == INVALID_GROUP_ID)
dvander@436
   307
	{
dvander@436
   308
		return gid;
dvander@436
   309
	}
dvander@436
   310
dvander@436
   311
	if (name == NULL)
dvander@436
   312
	{
dvander@436
   313
		name = "";
dvander@436
   314
	}
dvander@436
   315
dvander@436
   316
	pContext->StringToLocalUTF8(params[3], params[4], name, NULL);
dvander@436
   317
dvander@436
   318
	return gid;
dvander@436
   319
}
dvander@436
   320
dvander@436
   321
static cell_t SetAdminPassword(IPluginContext *pContext, const cell_t *params)
dvander@436
   322
{
dvander@436
   323
	AdminId id = params[1];
dvander@436
   324
	char *password;
dvander@436
   325
dvander@436
   326
	pContext->LocalToString(params[2], &password);
dvander@436
   327
dvander@3000
   328
	adminsys->SetAdminPassword(id, password);
dvander@436
   329
dvander@436
   330
	return 1;
dvander@436
   331
}
dvander@436
   332
dvander@436
   333
static cell_t GetAdminPassword(IPluginContext *pContext, const cell_t *params)
dvander@436
   334
{
dvander@436
   335
	AdminId id = params[1];
dvander@3000
   336
	const char *password = adminsys->GetAdminPassword(id);
dvander@436
   337
dvander@436
   338
	if (!password)
dvander@436
   339
	{
dvander@436
   340
		return 0;
dvander@436
   341
	}
dvander@436
   342
dvander@436
   343
	pContext->StringToLocalUTF8(params[2], params[3], password, NULL);
dvander@436
   344
dvander@436
   345
	return 1;
dvander@436
   346
}
dvander@436
   347
dvander@436
   348
static cell_t FindAdminByIdentity(IPluginContext *pContext, const cell_t *params)
dvander@436
   349
{
dvander@436
   350
	char *auth, *ident;
dvander@436
   351
dvander@436
   352
	pContext->LocalToString(params[1], &auth);
dvander@436
   353
	pContext->LocalToString(params[2], &ident);
dvander@436
   354
dvander@3000
   355
	return adminsys->FindAdminByIdentity(auth, ident);
dvander@436
   356
}
dvander@436
   357
dvander@436
   358
static cell_t RemoveAdmin(IPluginContext *pContext, const cell_t *params)
dvander@436
   359
{
dvander@436
   360
	AdminId id = params[1];
dvander@436
   361
dvander@3000
   362
	return adminsys->InvalidateAdmin(id);
dvander@436
   363
}
dvander@436
   364
dvander@436
   365
static cell_t FlagBitsToBitArray(IPluginContext *pContext, const cell_t *params)
dvander@436
   366
{
dvander@436
   367
	FlagBits bits = (FlagBits)params[1];
dvander@436
   368
	bool array[AdminFlags_TOTAL];
dvander@436
   369
	cell_t *addr;
dvander@3000
   370
	unsigned int numWr = adminsys->FlagBitsToBitArray(bits, array, AdminFlags_TOTAL);
dvander@436
   371
dvander@436
   372
	pContext->LocalToPhysAddr(params[2], &addr);
dvander@436
   373
dvander@436
   374
	unsigned int i;
dvander@436
   375
	for (i=0; i<numWr && i<(unsigned int)params[3]; i++)
dvander@436
   376
	{
dvander@436
   377
		addr[i] = array[i] ? 1 : 0;
dvander@436
   378
	}
dvander@436
   379
dvander@436
   380
	return i;
dvander@436
   381
}
dvander@436
   382
dvander@436
   383
static cell_t FlagBitArrayToBits(IPluginContext *pContext, const cell_t *params)
dvander@436
   384
{
dvander@436
   385
	bool array[AdminFlags_TOTAL];
dvander@436
   386
	unsigned int num = ((unsigned int)params[2] > AdminFlags_TOTAL ? params[2] : AdminFlags_TOTAL);
dvander@436
   387
	cell_t *addr;
dvander@436
   388
dvander@436
   389
	pContext->LocalToPhysAddr(params[1], &addr);
dvander@436
   390
dvander@436
   391
	for (unsigned int i=0; i<num; i++)
dvander@436
   392
	{
dvander@436
   393
		array[i] = addr[i] ? true : false;
dvander@436
   394
	}
dvander@436
   395
dvander@3000
   396
	return adminsys->FlagBitArrayToBits(array, num);
dvander@436
   397
}
dvander@436
   398
dvander@436
   399
static cell_t FlagArrayToBits(IPluginContext *pContext, const cell_t *params)
dvander@436
   400
{
dvander@436
   401
	cell_t *addr;
dvander@436
   402
	pContext->LocalToPhysAddr(params[1], &addr);
dvander@436
   403
dvander@436
   404
	if (sizeof(AdminFlag) == sizeof(cell_t))
dvander@436
   405
	{
dvander@3000
   406
		return adminsys->FlagArrayToBits((const AdminFlag *)addr, params[2]);
dvander@436
   407
	} else {
dvander@436
   408
		AdminFlag flags[AdminFlags_TOTAL];
dvander@436
   409
		unsigned int num = ((unsigned)params[2] > AdminFlags_TOTAL ? AdminFlags_TOTAL : params[2]);
dvander@436
   410
dvander@436
   411
		for (unsigned int i=0; i<num; i++)
dvander@436
   412
		{
dvander@436
   413
			flags[i] = (AdminFlag)addr[i];
dvander@436
   414
		}
dvander@3000
   415
		return adminsys->FlagArrayToBits(flags, num);
dvander@436
   416
	}
dvander@436
   417
}
dvander@436
   418
dvander@436
   419
static cell_t FlagBitsToArray(IPluginContext *pContext, const cell_t *params)
dvander@436
   420
{
dvander@436
   421
	cell_t *addr;
dvander@436
   422
	pContext->LocalToPhysAddr(params[2], &addr);
dvander@436
   423
dvander@436
   424
	if (sizeof(AdminFlag) == sizeof(cell_t))
dvander@436
   425
	{
dvander@3000
   426
		return adminsys->FlagBitsToArray(params[1], (AdminFlag *)addr, params[3]);
dvander@436
   427
	} else {
dvander@436
   428
		AdminFlag flags[AdminFlags_TOTAL];
dvander@436
   429
		unsigned int num = ((unsigned)params[2] > AdminFlags_TOTAL ? AdminFlags_TOTAL : params[2]);
dvander@3000
   430
		num = adminsys->FlagBitsToArray(params[1], flags, num);
dvander@436
   431
dvander@436
   432
		for (unsigned int i=0; i<num; i++)
dvander@436
   433
		{
dvander@436
   434
			addr[i] = flags[i];
dvander@436
   435
		}
dvander@436
   436
dvander@436
   437
		return num;
dvander@436
   438
	}
dvander@436
   439
}
dvander@436
   440
dvander@540
   441
static cell_t CanAdminTarget(IPluginContext *pContext, const cell_t *params)
dvander@540
   442
{
dvander@3000
   443
	return adminsys->CanAdminTarget(params[1], params[2]) ? 1 : 0;
dvander@540
   444
}
dvander@540
   445
dvander@646
   446
static cell_t CreateAuthMethod(IPluginContext *pContext, const cell_t *params)
dvander@646
   447
{
dvander@646
   448
	char *name;
dvander@646
   449
	pContext->LocalToString(params[1], &name);
dvander@3000
   450
	adminsys->RegisterAuthIdentType(name);
dvander@646
   451
dvander@646
   452
	return 1;
dvander@646
   453
}
dvander@646
   454
dvander@1403
   455
static cell_t SetAdmGroupImmunityLevel(IPluginContext *pContext, const cell_t *params)
dvander@1403
   456
{
dvander@3000
   457
	return adminsys->SetGroupImmunityLevel(params[1], params[2]);
dvander@1403
   458
}
dvander@1403
   459
dvander@1403
   460
static cell_t GetAdmGroupImmunityLevel(IPluginContext *pContext, const cell_t *params)
dvander@1403
   461
{
dvander@3000
   462
	return adminsys->GetGroupImmunityLevel(params[1]);
dvander@1403
   463
}
dvander@1403
   464
dvander@1403
   465
static cell_t SetAdminImmunityLevel(IPluginContext *pContext, const cell_t *params)
dvander@1403
   466
{
dvander@3000
   467
	return adminsys->SetAdminImmunityLevel(params[1], params[2]);
dvander@1403
   468
}
dvander@1403
   469
dvander@1403
   470
static cell_t GetAdminImmunityLevel(IPluginContext *pContext, const cell_t *params)
dvander@1403
   471
{
dvander@3000
   472
	return adminsys->GetAdminImmunityLevel(params[1]);
dvander@1403
   473
}
dvander@1403
   474
dvander@1298
   475
static cell_t FindFlagByName(IPluginContext *pContext, const cell_t *params)
dvander@1298
   476
{
dvander@1298
   477
	char *flag;
dvander@1298
   478
	pContext->LocalToString(params[1], &flag);
dvander@1298
   479
dvander@1298
   480
	cell_t *addr;
dvander@1298
   481
	pContext->LocalToPhysAddr(params[2], &addr);
dvander@1298
   482
dvander@1298
   483
	AdminFlag admflag;
dvander@3000
   484
	if (!adminsys->FindFlag(flag, &admflag))
dvander@1298
   485
	{
dvander@1298
   486
		return 0;
dvander@1298
   487
	}
dvander@1298
   488
dvander@1298
   489
	*addr = (cell_t)admflag;
dvander@1298
   490
dvander@1298
   491
	return 1;
dvander@1298
   492
}
dvander@1298
   493
dvander@1298
   494
static cell_t FindFlagByChar(IPluginContext *pContext, const cell_t *params)
dvander@1298
   495
{
dvander@1298
   496
	cell_t *addr;
dvander@1298
   497
	pContext->LocalToPhysAddr(params[2], &addr);
dvander@1298
   498
dvander@1298
   499
	AdminFlag admflag;
dvander@3000
   500
	if (!adminsys->FindFlag((char)params[1], &admflag))
dvander@1298
   501
	{
dvander@1298
   502
		return 0;
dvander@1298
   503
	}
dvander@1298
   504
dvander@1298
   505
	*addr = (cell_t)admflag;
dvander@1298
   506
dvander@1298
   507
	return 1;
dvander@1298
   508
}
dvander@1298
   509
kaspars@3055
   510
static cell_t FindFlagChar(IPluginContext *pContext, const cell_t *params)
kaspars@3055
   511
{
kaspars@3055
   512
	cell_t *addr;
kaspars@3055
   513
	pContext->LocalToPhysAddr(params[2], &addr);
kaspars@3055
   514
kaspars@3055
   515
	char flagchar;
kaspars@3055
   516
	if (!adminsys->FindFlagChar((AdminFlag)params[1], &flagchar))
kaspars@3055
   517
	{
kaspars@3055
   518
		return 0;
kaspars@3055
   519
	}
kaspars@3055
   520
kaspars@3055
   521
	*addr = (cell_t)flagchar;
kaspars@3055
   522
kaspars@3055
   523
	return 1;
kaspars@3055
   524
}
kaspars@3055
   525
dvander@1298
   526
static cell_t ReadFlagString(IPluginContext *pContext, const cell_t *params)
dvander@1298
   527
{
dvander@1298
   528
	char *flag;
dvander@1298
   529
	pContext->LocalToString(params[1], &flag);
dvander@1298
   530
dvander@1298
   531
	cell_t *addr;
dvander@1298
   532
	pContext->LocalToPhysAddr(params[2], &addr);
dvander@1298
   533
dvander@1298
   534
	const char *end = flag;
dvander@3000
   535
	FlagBits bits = adminsys->ReadFlagString(flag, &end);
dvander@1298
   536
dvander@1298
   537
	*addr = end - flag;
dvander@1298
   538
dvander@1298
   539
	return bits;
dvander@1298
   540
}
dvander@1298
   541
dvander@337
   542
REGISTER_NATIVES(adminNatives)
dvander@337
   543
{
dvander@337
   544
	{"DumpAdminCache",			DumpAdminCache},
dvander@337
   545
	{"AddCommandOverride",		AddCommandOverride},
dvander@337
   546
	{"GetCommandOverride",		GetCommandOverride},
dvander@337
   547
	{"UnsetCommandOverride",	UnsetCommandOverride},
dvander@337
   548
	{"CreateAdmGroup",			CreateAdmGroup},
dvander@337
   549
	{"FindAdmGroup",			FindAdmGroup},
dvander@337
   550
	{"SetAdmGroupAddFlag",		SetAdmGroupAddFlag},
dvander@337
   551
	{"GetAdmGroupAddFlag",		GetAdmGroupAddFlag},
dvander@337
   552
	{"SetAdmGroupImmunity",		SetAdmGroupImmunity},
dvander@337
   553
	{"GetAdmGroupImmunity",		GetAdmGroupImmunity},
dvander@337
   554
	{"SetAdmGroupImmuneFrom",	SetAdmGroupImmuneFrom},
dvander@337
   555
	{"GetAdmGroupImmuneFrom",	GetAdmGroupImmuneFrom},
dvander@337
   556
	{"GetAdmGroupImmuneCount",	GetAdmGroupImmuneCount},
dvander@337
   557
	{"AddAdmGroupCmdOverride",	AddAdmGroupCmdOverride},
dvander@337
   558
	{"GetAdmGroupCmdOverride",	GetAdmGroupCmdOverride},
dvander@433
   559
	{"GetAdmGroupAddFlags",		GetAdmGroupAddFlags},
dvander@436
   560
	{"RegisterAuthIdentType",	RegisterAuthIdentType},
dvander@436
   561
	{"CreateAdmin",				CreateAdmin},
dvander@436
   562
	{"GetAdminUsername",		GetAdminUsername},
dvander@436
   563
	{"BindAdminIdentity",		BindAdminIdentity},
dvander@436
   564
	{"SetAdminFlag",			SetAdminFlag},
dvander@436
   565
	{"GetAdminFlag",			GetAdminFlag},
dvander@436
   566
	{"GetAdminFlags",			GetAdminFlags},
dvander@436
   567
	{"AdminInheritGroup",		AdminInheritGroup},
dvander@436
   568
	{"GetAdminGroupCount",		GetAdminGroupCount},
dvander@436
   569
	{"GetAdminGroup",			GetAdminGroup},
dvander@436
   570
	{"SetAdminPassword",		SetAdminPassword},
dvander@436
   571
	{"GetAdminPassword",		GetAdminPassword},
dvander@436
   572
	{"FindAdminByIdentity",		FindAdminByIdentity},
dvander@436
   573
	{"RemoveAdmin",				RemoveAdmin},
dvander@436
   574
	{"FlagBitsToBitArray",		FlagBitsToBitArray},
dvander@436
   575
	{"FlagBitArrayToBits",		FlagBitArrayToBits},
dvander@436
   576
	{"FlagArrayToBits",			FlagArrayToBits},
dvander@436
   577
	{"FlagBitsToArray",			FlagBitsToArray},
dvander@540
   578
	{"CanAdminTarget",			CanAdminTarget},
dvander@646
   579
	{"CreateAuthMethod",		CreateAuthMethod},
dvander@1298
   580
	{"FindFlagByName",			FindFlagByName},
dvander@1298
   581
	{"FindFlagByChar",			FindFlagByChar},
kaspars@3055
   582
	{"FindFlagChar",			FindFlagChar},
dvander@1298
   583
	{"ReadFlagString",			ReadFlagString},
dvander@1403
   584
	{"GetAdmGroupImmunityLevel",GetAdmGroupImmunityLevel},
dvander@1403
   585
	{"SetAdmGroupImmunityLevel",SetAdmGroupImmunityLevel},
dvander@1403
   586
	{"GetAdminImmunityLevel",	GetAdminImmunityLevel},
dvander@1403
   587
	{"SetAdminImmunityLevel",	SetAdminImmunityLevel},
dvander@436
   588
	/* -------------------------------------------------- */
dvander@337
   589
	{NULL,						NULL},
dvander@337
   590
};
dvander@1403
   591