1 /* 2 * Empire - A multi-player, client/server Internet based war game. 3 * Copyright (C) 1986-2021, Dave Pare, Jeff Bailey, Thomas Ruschak, 4 * Ken Stevens, Steve McClure, Markus Armbruster 5 * 6 * Empire is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program. If not, see <http://www.gnu.org/licenses/>. 18 * 19 * --- 20 * 21 * See files README, COPYING and CREDITS in the root of the source 22 * tree for related information and legal notices. It is expected 23 * that future projects/authors will amend these files as needed. 24 * 25 * --- 26 * 27 * player.h: Definitions for player information (threads) 28 * 29 * Known contributors to this file: 30 * Dave Pare, 1994 31 * Doug Hay, 1998 32 * Markus Armbruster, 2005-2014 33 */ 34 35 #ifndef PLAYER_H 36 #define PLAYER_H 37 38 #include <time.h> 39 #include "empthread.h" 40 #include "misc.h" 41 #include "queue.h" 42 #include "types.h" 43 44 /* player command capabilities */ 45 #define NONVIS bit(0) /* can execute common commands (visitors can't) */ 46 #define SANCT bit(1) /* can execute commands available in sanctuary */ 47 #define NORM bit(2) /* can execute active player commands */ 48 #define GOD bit(3) /* can execute deity commands */ 49 #define TESTING bit(4) /* can execute commands meant for test suite */ 50 #define EXEC bit(5) /* can execute the execute command */ 51 #define CAP bit(6) /* has capital */ 52 #define MONEY bit(7) /* isn't broke */ 53 54 enum player_sleep { 55 PLAYER_SLEEP_NEVER, PLAYER_SLEEP_ON_INPUT, PLAYER_SLEEP_FREELY 56 }; 57 58 struct player { 59 struct emp_qelem queue; 60 empth_t *proc; 61 char hostaddr[46]; 62 char client[128]; /* may be empty */ 63 char userid[32]; /* may be empty */ 64 int authenticated; 65 natid cnum; 66 int state; 67 int flags; 68 struct cmndstr *command; /* currently executing command */ 69 struct iop *iop; 70 char combuf[1024]; /* command input buffer, UTF-8 */ 71 char argbuf[1024]; /* argument buffer, ASCII */ 72 char *argp[128]; /* arguments, ASCII, valid if command */ 73 char *condarg; /* conditional, ASCII, valid if command */ 74 char *comtail[128]; /* start of args in combuf[] */ 75 time_t lasttime; /* when nat_timeused was last updated */ 76 int btused; 77 int god; 78 int owner; 79 int nstat; /* command capabilities */ 80 int simulation; /* e.g. budget command */ 81 double dolcost; 82 time_t curup; /* when last input was received */ 83 enum player_sleep may_sleep; /* when may thread sleep? */ 84 int aborted; /* command aborted? */ 85 int got_ctld; /* EOF cookie received? */ 86 int recvfail; /* #recvclient() failures */ 87 int curid; /* for pr, cur. line's ID, -1 none */ 88 char *map; /* pointer to in-mem map */ 89 char *bmap; /* pointer to in-mem bmap */ 90 }; 91 92 #define PS_INIT 0 93 #define PS_PLAYING 1 94 #define PS_SHUTDOWN 2 95 96 /* player flags */ 97 enum { 98 PF_UTF8 = bit(0), /* client wants UTF-8 */ 99 PF_DOWN = bit(1), /* told player game is down */ 100 PF_HOURS = bit(2) /* told player hours restriction is on */ 101 }; 102 103 #endif 104