diff options
author | Tim Angus <tim@ngus.net> | 2006-07-31 21:50:12 +0000 |
---|---|---|
committer | Tim Angus <tim@ngus.net> | 2006-07-31 21:50:12 +0000 |
commit | 68da0ee4bead3a36b5057471a30414f11cc01577 (patch) | |
tree | e2c647fc80d7559fd432ee4bf3edecb356c86ee1 /src/game/g_admin.h | |
parent | ae15fd3f111ba37c32a273e65b6a2ee35b579c86 (diff) |
* tjw's spiffy admin system (tjw, obviously)
Diffstat (limited to 'src/game/g_admin.h')
-rw-r--r-- | src/game/g_admin.h | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/src/game/g_admin.h b/src/game/g_admin.h new file mode 100644 index 00000000..0b5c6907 --- /dev/null +++ b/src/game/g_admin.h @@ -0,0 +1,174 @@ +/* +=========================================================================== +Copyright (C) 2004-2006 Tony J. White + +This file is part of Tremulous. + +Tremulous is free software; you can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation; either version 2 of the License, +or (at your option) any later version. + +Tremulous is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Tremulous; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +=========================================================================== +*/ + +#ifndef _G_ADMIN_H +#define _G_ADMIN_H + +#define AP(x) trap_SendServerCommand(-1, x) +#define CP(x) trap_SendServerCommand(ent-g_entities, x) +#define CPx(x, y) trap_SendServerCommand(x, y) +#define ADMP(x) G_admin_print(ent, x) +#define ADMBP(x) G_admin_buffer_print(ent, x) +#define ADMBP_begin() G_admin_buffer_begin() +#define ADMBP_end() G_admin_buffer_end(ent) + +#define MAX_ADMIN_LEVELS 32 +#define MAX_ADMIN_ADMINS 1024 +#define MAX_ADMIN_BANS 1024 +#define MAX_ADMIN_NAMELOGS 128 +#define MAX_ADMIN_NAMELOG_NAMES 5 +#define MAX_ADMIN_FLAGS 64 +#define MAX_ADMIN_COMMANDS 64 +#define MAX_ADMIN_CMD_LEN 20 +#define MAX_ADMIN_BAN_REASON 50 + +/* + * 1 - cannot be vote kicked, vote muted + * 2 - cannot be censored or flood protected TODO + * 3 - UNUSED + * 4 - can see team chat as a spectator + * 5 - can switch teams any time, regardless of balance + * 6 - does not need to specify a reason for a kick/ban + * 7 - can call a vote at any time (regardless of a vote being disabled or + * voting limitations) + * 8 - does not need to specify a duration for a ban + * 9 - can run commands from team chat + * 0 - inactivity rules do not apply to them + * ! - admin commands cannot be used on them + * @ - does not show up as an admin in !listplayers + */ +#define ADMF_IMMUNITY '1' +#define ADMF_NOCENSORFLOOD '2' /* TODO */ + +#define ADMF_SPEC_ALLCHAT '4' +#define ADMF_FORCETEAMCHANGE '5' +#define ADMF_UNACCOUNTABLE '6' +#define ADMF_NO_VOTE_LIMIT '7' +#define ADMF_CAN_PERM_BAN '8' +#define ADMF_TEAMFTCMD '9' +#define ADMF_ACTIVITY '0' + +#define ADMF_IMMUTABLE '!' +#define ADMF_INCOGNITO '@' + +#define MAX_ADMIN_LISTITEMS 20 +#define MAX_ADMIN_SHOWBANS 10 + +// important note: QVM does not seem to allow a single char to be a +// member of a struct at init time. flag has been converted to char* +typedef struct +{ + char *keyword; + qboolean ( * handler ) ( gentity_t *ent, int skiparg ); + char *flag; + char *function; // used for !help + char *syntax; // used for !help +} +g_admin_cmd_t; + +typedef struct g_admin_level +{ + int level; + char name[ MAX_NAME_LENGTH ]; + char flags[ MAX_ADMIN_FLAGS ]; +} +g_admin_level_t; + +typedef struct g_admin_admin +{ + char guid[ 33 ]; + char name[ MAX_NAME_LENGTH ]; + int level; + char flags[ MAX_ADMIN_FLAGS ]; +} +g_admin_admin_t; + +typedef struct g_admin_ban +{ + char name[ MAX_NAME_LENGTH ]; + char guid[ 33 ]; + char ip[ 18 ]; + char reason[ MAX_ADMIN_BAN_REASON ]; + char made[ 18 ]; // big enough for strftime() %c + int expires; + char banner[ MAX_NAME_LENGTH ]; +} +g_admin_ban_t; + +typedef struct g_admin_command +{ + char command[ MAX_ADMIN_CMD_LEN ]; + char exec[ MAX_QPATH ]; + char desc[ 50 ]; + int levels[ MAX_ADMIN_LEVELS + 1 ]; +} +g_admin_command_t; + +typedef struct g_admin_namelog +{ + char name[ MAX_ADMIN_NAMELOG_NAMES ][MAX_NAME_LENGTH ]; + char ip[ 16 ]; + char guid[ 33 ]; + int slot; +} +g_admin_namelog_t; + +qboolean G_admin_ban_check( char *userinfo, char *reason, int rlen ); +qboolean G_admin_cmd_check( gentity_t *ent, qboolean say ); +qboolean G_admin_readconfig( gentity_t *ent, int skiparg ); +qboolean G_admin_permission( gentity_t *ent, char flag ); +qboolean G_admin_name_check( gentity_t *ent, char *name, char *err, int len ); +void G_admin_namelog_update( gclient_t *ent, int clientNum ); +int G_admin_level( gentity_t *ent ); + +// ! command functions +qboolean G_admin_time( gentity_t *ent, int skiparg ); +qboolean G_admin_setlevel( gentity_t *ent, int skiparg ); +qboolean G_admin_kick( gentity_t *ent, int skiparg ); +qboolean G_admin_ban( gentity_t *ent, int skiparg ); +qboolean G_admin_unban( gentity_t *ent, int skiparg ); +qboolean G_admin_putteam( gentity_t *ent, int skiparg ); +qboolean G_admin_listadmins( gentity_t *ent, int skiparg ); +qboolean G_admin_listplayers( gentity_t *ent, int skiparg ); +qboolean G_admin_mute( gentity_t *ent, int skiparg ); +qboolean G_admin_showbans( gentity_t *ent, int skiparg ); +qboolean G_admin_help( gentity_t *ent, int skiparg ); +qboolean G_admin_admintest( gentity_t *ent, int skiparg ); +qboolean G_admin_allready( gentity_t *ent, int skiparg ); +qboolean G_admin_cancelvote( gentity_t *ent, int skiparg ); +qboolean G_admin_passvote( gentity_t *ent, int skiparg ); +qboolean G_admin_spec999( gentity_t *ent, int skiparg ); +qboolean G_admin_rename( gentity_t *ent, int skiparg ); +qboolean G_admin_restart( gentity_t *ent, int skiparg ); +qboolean G_admin_nextmap( gentity_t *ent, int skiparg ); +qboolean G_admin_namelog( gentity_t *ent, int skiparg ); + +void G_admin_print( gentity_t *ent, char *m ); +void G_admin_buffer_print( gentity_t *ent, char *m ); +void G_admin_buffer_begin( void ); +void G_admin_buffer_end( gentity_t *ent ); + +void G_admin_duration( int secs, char *duration, int dursize ); +void G_admin_cleanup( void ); +void G_admin_namelog_cleanup( void ); + +#endif /* ifndef _G_ADMIN_H */ |