3 * =============================================================================
5 * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
6 * =============================================================================
8 * This program is free software; you can redistribute it and/or modify it under
9 * the terms of the GNU General Public License, version 3.0, as published by the
10 * Free Software Foundation.
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17 * You should have received a copy of the GNU General Public License along with
18 * this program. If not, see <http://www.gnu.org/licenses/>.
20 * As a special exception, AlliedModders LLC gives you permission to link the
21 * code of this program (as well as its derivative works) to "Half-Life 2," the
22 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
23 * by the Valve Corporation. You must obey the GNU General Public License in
24 * all respects for all other code used. Additionally, AlliedModders LLC grants
25 * this exception to all derivative works. AlliedModders LLC defines further
26 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
27 * or <http://www.sourcemod.net/license.php>.
32 #include "common_logic.h"
33 #include <IAdminSystem.h>
34 #include <IForwardSys.h>
36 using namespace SourceMod;
38 static cell_t DumpAdminCache(IPluginContext *pContext, const cell_t *params)
40 adminsys->DumpAdminCache((AdminCachePart)params[1], (params[2] == 1) ? true : false);
44 static cell_t AddCommandOverride(IPluginContext *pContext, const cell_t *params)
48 pContext->LocalToString(params[1], &str);
49 adminsys->AddCommandOverride(str, (OverrideType)params[2], (AdminFlag)params[3]);
54 static cell_t GetCommandOverride(IPluginContext *pContext, const cell_t *params)
59 pContext->LocalToString(params[1], &cmd);
61 if (!adminsys->GetCommandOverride(cmd, (OverrideType)params[2], &flags))
67 pContext->LocalToPhysAddr(params[3], &addr);
69 *addr = (cell_t)flags;
74 static cell_t UnsetCommandOverride(IPluginContext *pContext, const cell_t *params)
78 pContext->LocalToString(params[1], &cmd);
80 adminsys->UnsetCommandOverride(cmd, (OverrideType)params[2]);
85 static cell_t CreateAdmGroup(IPluginContext *pContext, const cell_t *params)
89 pContext->LocalToString(params[1], &str);
91 return adminsys->AddGroup(str);
94 static cell_t FindAdmGroup(IPluginContext *pContext, const cell_t *params)
98 pContext->LocalToString(params[1], &str);
100 return adminsys->FindGroupByName(str);
103 static cell_t SetAdmGroupAddFlag(IPluginContext *pContext, const cell_t *params)
105 GroupId id = (GroupId)params[1];
106 AdminFlag flag = (AdminFlag)params[2];
107 bool enabled = params[3] ? 1 : 0;
109 adminsys->SetGroupAddFlag(id, flag, enabled);
114 static cell_t GetAdmGroupAddFlag(IPluginContext *pContext, const cell_t *params)
116 GroupId id = (GroupId)params[1];
117 AdminFlag flag = (AdminFlag)params[2];
119 return adminsys->GetGroupAddFlag(id, flag) ? 1 : 0;
122 static cell_t SetAdmGroupImmunity(IPluginContext *pContext, const cell_t *params)
124 GroupId id = (GroupId)params[1];
125 ImmunityType type = (ImmunityType)params[2];
126 bool enabled = params[3] ? 1 : 0;
128 adminsys->SetGroupGenericImmunity(id, type, enabled);
133 static cell_t GetAdmGroupImmunity(IPluginContext *pContext, const cell_t *params)
135 GroupId id = (GroupId)params[1];
136 ImmunityType type = (ImmunityType)params[2];
138 return adminsys->GetGroupGenericImmunity(id, type) ? 1 : 0;
141 static cell_t SetAdmGroupImmuneFrom(IPluginContext *pContext, const cell_t *params)
143 GroupId id = (GroupId)params[1];
144 GroupId other_id = (GroupId)params[2];
146 adminsys->AddGroupImmunity(id, other_id);
151 static cell_t GetAdmGroupImmuneCount(IPluginContext *pContext, const cell_t *params)
153 GroupId id = (GroupId)params[1];
155 return adminsys->GetGroupImmunityCount(id);
158 static cell_t GetAdmGroupImmuneFrom(IPluginContext *pContext, const cell_t *params)
160 GroupId id = (GroupId)params[1];
162 return adminsys->GetGroupImmunity(id, params[2]);
165 static cell_t AddAdmGroupCmdOverride(IPluginContext *pContext, const cell_t *params)
167 GroupId id = (GroupId)params[1];
168 OverrideType type = (OverrideType)params[3];
169 OverrideRule rule = (OverrideRule)params[4];
172 pContext->LocalToString(params[2], &cmd);
174 adminsys->AddGroupCommandOverride(id, cmd, type, rule);
179 static cell_t GetAdmGroupCmdOverride(IPluginContext *pContext, const cell_t *params)
181 GroupId id = (GroupId)params[1];
182 OverrideType type = (OverrideType)params[3];
186 pContext->LocalToString(params[2], &cmd);
188 if (!adminsys->GetGroupCommandOverride(id, cmd, type, &rule))
194 pContext->LocalToPhysAddr(params[4], &addr);
195 *addr = (cell_t)rule;
200 static cell_t GetAdmGroupAddFlags(IPluginContext *pContext, const cell_t *params)
202 GroupId id = (GroupId)params[1];
203 return adminsys->GetGroupAddFlags(id);
206 static cell_t RegisterAuthIdentType(IPluginContext *pContext, const cell_t *params)
209 pContext->LocalToString(params[1], &type);
211 adminsys->RegisterAuthIdentType(type);
216 static cell_t CreateAdmin(IPluginContext *pContext, const cell_t *params)
219 pContext->LocalToString(params[1], &admin);
221 if (admin[0] == '\0')
226 return adminsys->CreateAdmin(admin);
229 static cell_t GetAdminUsername(IPluginContext *pContext, const cell_t *params)
231 AdminId id = params[1];
233 const char *name = adminsys->GetAdminName(id);
240 pContext->StringToLocalUTF8(params[2], params[3], name, &written);
245 static cell_t BindAdminIdentity(IPluginContext *pContext, const cell_t *params)
247 AdminId id = params[1];
250 pContext->LocalToString(params[2], &auth);
251 pContext->LocalToString(params[3], &ident);
253 return adminsys->BindAdminIdentity(id, auth, ident);
256 static cell_t SetAdminFlag(IPluginContext *pContext, const cell_t *params)
258 AdminId id = params[1];
259 AdminFlag flag = (AdminFlag)params[2];
260 bool enabled = params[3] ? true : false;
262 adminsys->SetAdminFlag(id, flag, enabled);
267 static cell_t GetAdminFlag(IPluginContext *pContext, const cell_t *params)
269 AdminId id = params[1];
270 AdminFlag flag = (AdminFlag)params[2];
271 AccessMode mode = (AccessMode)params[3];
273 return adminsys->GetAdminFlag(id, flag, mode);
276 static cell_t GetAdminFlags(IPluginContext *pContext, const cell_t *params)
278 AdminId id = params[1];
279 AccessMode mode = (AccessMode)params[2];
281 return adminsys->GetAdminFlags(id, mode);
284 static cell_t AdminInheritGroup(IPluginContext *pContext, const cell_t *params)
286 AdminId id = params[1];
287 GroupId gid = params[2];
289 return adminsys->AdminInheritGroup(id, gid);
292 static cell_t GetAdminGroupCount(IPluginContext *pContext, const cell_t *params)
294 AdminId id = params[1];
296 return adminsys->GetAdminGroupCount(id);
299 static cell_t GetAdminGroup(IPluginContext *pContext, const cell_t *params)
301 AdminId id = params[1];
302 unsigned int index = params[2];
306 if ((gid=adminsys->GetAdminGroup(id, index, &name)) == INVALID_GROUP_ID)
316 pContext->StringToLocalUTF8(params[3], params[4], name, NULL);
321 static cell_t SetAdminPassword(IPluginContext *pContext, const cell_t *params)
323 AdminId id = params[1];
326 pContext->LocalToString(params[2], &password);
328 adminsys->SetAdminPassword(id, password);
333 static cell_t GetAdminPassword(IPluginContext *pContext, const cell_t *params)
335 AdminId id = params[1];
336 const char *password = adminsys->GetAdminPassword(id);
343 pContext->StringToLocalUTF8(params[2], params[3], password, NULL);
348 static cell_t FindAdminByIdentity(IPluginContext *pContext, const cell_t *params)
352 pContext->LocalToString(params[1], &auth);
353 pContext->LocalToString(params[2], &ident);
355 return adminsys->FindAdminByIdentity(auth, ident);
358 static cell_t RemoveAdmin(IPluginContext *pContext, const cell_t *params)
360 AdminId id = params[1];
362 return adminsys->InvalidateAdmin(id);
365 static cell_t FlagBitsToBitArray(IPluginContext *pContext, const cell_t *params)
367 FlagBits bits = (FlagBits)params[1];
368 bool array[AdminFlags_TOTAL];
370 unsigned int numWr = adminsys->FlagBitsToBitArray(bits, array, AdminFlags_TOTAL);
372 pContext->LocalToPhysAddr(params[2], &addr);
375 for (i=0; i<numWr && i<(unsigned int)params[3]; i++)
377 addr[i] = array[i] ? 1 : 0;
383 static cell_t FlagBitArrayToBits(IPluginContext *pContext, const cell_t *params)
385 bool array[AdminFlags_TOTAL];
386 unsigned int num = ((unsigned int)params[2] > AdminFlags_TOTAL ? params[2] : AdminFlags_TOTAL);
389 pContext->LocalToPhysAddr(params[1], &addr);
391 for (unsigned int i=0; i<num; i++)
393 array[i] = addr[i] ? true : false;
396 return adminsys->FlagBitArrayToBits(array, num);
399 static cell_t FlagArrayToBits(IPluginContext *pContext, const cell_t *params)
402 pContext->LocalToPhysAddr(params[1], &addr);
404 if (sizeof(AdminFlag) == sizeof(cell_t))
406 return adminsys->FlagArrayToBits((const AdminFlag *)addr, params[2]);
408 AdminFlag flags[AdminFlags_TOTAL];
409 unsigned int num = ((unsigned)params[2] > AdminFlags_TOTAL ? AdminFlags_TOTAL : params[2]);
411 for (unsigned int i=0; i<num; i++)
413 flags[i] = (AdminFlag)addr[i];
415 return adminsys->FlagArrayToBits(flags, num);
419 static cell_t FlagBitsToArray(IPluginContext *pContext, const cell_t *params)
422 pContext->LocalToPhysAddr(params[2], &addr);
424 if (sizeof(AdminFlag) == sizeof(cell_t))
426 return adminsys->FlagBitsToArray(params[1], (AdminFlag *)addr, params[3]);
428 AdminFlag flags[AdminFlags_TOTAL];
429 unsigned int num = ((unsigned)params[2] > AdminFlags_TOTAL ? AdminFlags_TOTAL : params[2]);
430 num = adminsys->FlagBitsToArray(params[1], flags, num);
432 for (unsigned int i=0; i<num; i++)
441 static cell_t CanAdminTarget(IPluginContext *pContext, const cell_t *params)
443 return adminsys->CanAdminTarget(params[1], params[2]) ? 1 : 0;
446 static cell_t CreateAuthMethod(IPluginContext *pContext, const cell_t *params)
449 pContext->LocalToString(params[1], &name);
450 adminsys->RegisterAuthIdentType(name);
455 static cell_t SetAdmGroupImmunityLevel(IPluginContext *pContext, const cell_t *params)
457 return adminsys->SetGroupImmunityLevel(params[1], params[2]);
460 static cell_t GetAdmGroupImmunityLevel(IPluginContext *pContext, const cell_t *params)
462 return adminsys->GetGroupImmunityLevel(params[1]);
465 static cell_t SetAdminImmunityLevel(IPluginContext *pContext, const cell_t *params)
467 return adminsys->SetAdminImmunityLevel(params[1], params[2]);
470 static cell_t GetAdminImmunityLevel(IPluginContext *pContext, const cell_t *params)
472 return adminsys->GetAdminImmunityLevel(params[1]);
475 static cell_t FindFlagByName(IPluginContext *pContext, const cell_t *params)
478 pContext->LocalToString(params[1], &flag);
481 pContext->LocalToPhysAddr(params[2], &addr);
484 if (!adminsys->FindFlag(flag, &admflag))
489 *addr = (cell_t)admflag;
494 static cell_t FindFlagByChar(IPluginContext *pContext, const cell_t *params)
497 pContext->LocalToPhysAddr(params[2], &addr);
500 if (!adminsys->FindFlag((char)params[1], &admflag))
505 *addr = (cell_t)admflag;
510 static cell_t ReadFlagString(IPluginContext *pContext, const cell_t *params)
513 pContext->LocalToString(params[1], &flag);
516 pContext->LocalToPhysAddr(params[2], &addr);
518 const char *end = flag;
519 FlagBits bits = adminsys->ReadFlagString(flag, &end);
526 REGISTER_NATIVES(adminNatives)
528 {"DumpAdminCache", DumpAdminCache},
529 {"AddCommandOverride", AddCommandOverride},
530 {"GetCommandOverride", GetCommandOverride},
531 {"UnsetCommandOverride", UnsetCommandOverride},
532 {"CreateAdmGroup", CreateAdmGroup},
533 {"FindAdmGroup", FindAdmGroup},
534 {"SetAdmGroupAddFlag", SetAdmGroupAddFlag},
535 {"GetAdmGroupAddFlag", GetAdmGroupAddFlag},
536 {"SetAdmGroupImmunity", SetAdmGroupImmunity},
537 {"GetAdmGroupImmunity", GetAdmGroupImmunity},
538 {"SetAdmGroupImmuneFrom", SetAdmGroupImmuneFrom},
539 {"GetAdmGroupImmuneFrom", GetAdmGroupImmuneFrom},
540 {"GetAdmGroupImmuneCount", GetAdmGroupImmuneCount},
541 {"AddAdmGroupCmdOverride", AddAdmGroupCmdOverride},
542 {"GetAdmGroupCmdOverride", GetAdmGroupCmdOverride},
543 {"GetAdmGroupAddFlags", GetAdmGroupAddFlags},
544 {"RegisterAuthIdentType", RegisterAuthIdentType},
545 {"CreateAdmin", CreateAdmin},
546 {"GetAdminUsername", GetAdminUsername},
547 {"BindAdminIdentity", BindAdminIdentity},
548 {"SetAdminFlag", SetAdminFlag},
549 {"GetAdminFlag", GetAdminFlag},
550 {"GetAdminFlags", GetAdminFlags},
551 {"AdminInheritGroup", AdminInheritGroup},
552 {"GetAdminGroupCount", GetAdminGroupCount},
553 {"GetAdminGroup", GetAdminGroup},
554 {"SetAdminPassword", SetAdminPassword},
555 {"GetAdminPassword", GetAdminPassword},
556 {"FindAdminByIdentity", FindAdminByIdentity},
557 {"RemoveAdmin", RemoveAdmin},
558 {"FlagBitsToBitArray", FlagBitsToBitArray},
559 {"FlagBitArrayToBits", FlagBitArrayToBits},
560 {"FlagArrayToBits", FlagArrayToBits},
561 {"FlagBitsToArray", FlagBitsToArray},
562 {"CanAdminTarget", CanAdminTarget},
563 {"CreateAuthMethod", CreateAuthMethod},
564 {"FindFlagByName", FindFlagByName},
565 {"FindFlagByChar", FindFlagByChar},
566 {"ReadFlagString", ReadFlagString},
567 {"GetAdmGroupImmunityLevel",GetAdmGroupImmunityLevel},
568 {"SetAdmGroupImmunityLevel",SetAdmGroupImmunityLevel},
569 {"GetAdminImmunityLevel", GetAdminImmunityLevel},
570 {"SetAdminImmunityLevel", SetAdminImmunityLevel},
571 /* -------------------------------------------------- */