Annotation of quakeworld/server/server.h, revision 1.1.1.1

1.1       root        1: /*
                      2: Copyright (C) 1996-1997 Id Software, Inc.
                      3: 
                      4: This program is free software; you can redistribute it and/or
                      5: modify it under the terms of the GNU General Public License
                      6: as published by the Free Software Foundation; either version 2
                      7: of the License, or (at your option) any later version.
                      8: 
                      9: This program is distributed in the hope that it will be useful,
                     10: but WITHOUT ANY WARRANTY; without even the implied warranty of
                     11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
                     12: 
                     13: See the GNU General Public License for more details.
                     14: 
                     15: You should have received a copy of the GNU General Public License
                     16: along with this program; if not, write to the Free Software
                     17: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
                     18: 
                     19: */
                     20: // server.h
                     21: 
                     22: #define        QW_SERVER
                     23: 
                     24: #define        MAX_MASTERS     8                               // max recipients for heartbeat packets
                     25: 
                     26: #define        MAX_SIGNON_BUFFERS      8
                     27: 
                     28: typedef enum {
                     29:        ss_dead,                        // no map loaded
                     30:        ss_loading,                     // spawning level edicts
                     31:        ss_active                       // actively running
                     32: } server_state_t;
                     33: // some qc commands are only valid before the server has finished
                     34: // initializing (precache commands, static sounds / objects, etc)
                     35: 
                     36: typedef struct
                     37: {
                     38:        qboolean        active;                         // false when server is going down
                     39:        server_state_t  state;                  // precache commands are only valid during load
                     40: 
                     41:        double          time;
                     42:        
                     43:        int                     lastcheck;                      // used by PF_checkclient
                     44:        double          lastchecktime;          // for monster ai 
                     45: 
                     46:        qboolean        paused;                         // are we paused?
                     47: 
                     48:        //check player/eyes models for hacks
                     49:        unsigned        model_player_checksum;
                     50:        unsigned        eyes_player_checksum;
                     51:        
                     52:        char            name[64];                       // map name
                     53:        char            modelname[MAX_QPATH];           // maps/<name>.bsp, for model_precache[0]
                     54:        struct model_s  *worldmodel;
                     55:        char            *model_precache[MAX_MODELS];    // NULL terminated
                     56:        char            *sound_precache[MAX_SOUNDS];    // NULL terminated
                     57:        char            *lightstyles[MAX_LIGHTSTYLES];
                     58:        struct model_s          *models[MAX_MODELS];
                     59: 
                     60:        int                     num_edicts;                     // increases towards MAX_EDICTS
                     61:        edict_t         *edicts;                        // can NOT be array indexed, because
                     62:                                                                        // edict_t is variable sized, but can
                     63:                                                                        // be used to reference the world ent
                     64: 
                     65:        byte            *pvs, *phs;                     // fully expanded and decompressed
                     66: 
                     67:        // added to every client's unreliable buffer each frame, then cleared
                     68:        sizebuf_t       datagram;
                     69:        byte            datagram_buf[MAX_DATAGRAM];
                     70: 
                     71:        // added to every client's reliable buffer each frame, then cleared
                     72:        sizebuf_t       reliable_datagram;
                     73:        byte            reliable_datagram_buf[MAX_MSGLEN];
                     74: 
                     75:        // the multicast buffer is used to send a message to a set of clients
                     76:        sizebuf_t       multicast;
                     77:        byte            multicast_buf[MAX_MSGLEN];
                     78: 
                     79:        // the master buffer is used for building log packets
                     80:        sizebuf_t       master;
                     81:        byte            master_buf[MAX_DATAGRAM];
                     82: 
                     83:        // the signon buffer will be sent to each client as they connect
                     84:        // includes the entity baselines, the static entities, etc
                     85:        // large levels will have >MAX_DATAGRAM sized signons, so 
                     86:        // multiple signon messages are kept
                     87:        sizebuf_t       signon;
                     88:        int                     num_signon_buffers;
                     89:        int                     signon_buffer_size[MAX_SIGNON_BUFFERS];
                     90:        byte            signon_buffers[MAX_SIGNON_BUFFERS][MAX_DATAGRAM];
                     91: } server_t;
                     92: 
                     93: 
                     94: #define        NUM_SPAWN_PARMS                 16
                     95: 
                     96: typedef enum
                     97: {
                     98:        cs_free,                // can be reused for a new connection
                     99:        cs_zombie,              // client has been disconnected, but don't reuse
                    100:                                        // connection for a couple seconds
                    101:        cs_connected,   // has been assigned to a client_t, but not in game yet
                    102:        cs_spawned              // client is fully in game
                    103: } client_state_t;
                    104: 
                    105: typedef struct
                    106: {
                    107:        // received from client
                    108: 
                    109:        // reply
                    110:        double                          senttime;
                    111:        float                           ping_time;
                    112:        packet_entities_t       entities;
                    113: } client_frame_t;
                    114: 
                    115: #define MAX_BACK_BUFFERS 4
                    116: 
                    117: typedef struct client_s
                    118: {
                    119:        client_state_t  state;
                    120: 
                    121:        int                             spectator;                      // non-interactive
                    122: 
                    123:        qboolean                sendinfo;                       // at end of frame, send info to all
                    124:                                                                                // this prevents malicious multiple broadcasts
                    125:        float                   lastnametime;           // time of last name change
                    126:        int                             lastnamecount;          // time of last name change
                    127:        unsigned                checksum;                       // checksum for calcs
                    128:        qboolean                drop;                           // lose this guy next opportunity
                    129:        int                             lossage;                        // loss percentage
                    130: 
                    131:        int                             userid;                                                 // identifying number
                    132:        char                    userinfo[MAX_INFO_STRING];              // infostring
                    133: 
                    134:        usercmd_t               lastcmd;                        // for filling in big drops and partial predictions
                    135:        double                  localtime;                      // of last message
                    136:        int                             oldbuttons;
                    137: 
                    138:        float                   maxspeed;                       // localized maxspeed
                    139:        float                   entgravity;                     // localized ent gravity
                    140: 
                    141:        edict_t                 *edict;                         // EDICT_NUM(clientnum+1)
                    142:        char                    name[32];                       // for printing to other people
                    143:                                                                                // extracted from userinfo
                    144:        int                             messagelevel;           // for filtering printed messages
                    145: 
                    146:        // the datagram is written to after every frame, but only cleared
                    147:        // when it is sent out to the client.  overflow is tolerated.
                    148:        sizebuf_t               datagram;
                    149:        byte                    datagram_buf[MAX_DATAGRAM];
                    150: 
                    151:        // back buffers for client reliable data
                    152:        sizebuf_t       backbuf;
                    153:        int                     num_backbuf;
                    154:        int                     backbuf_size[MAX_BACK_BUFFERS];
                    155:        byte            backbuf_data[MAX_BACK_BUFFERS][MAX_MSGLEN];
                    156: 
                    157:        double                  connection_started;     // or time of disconnect for zombies
                    158:        qboolean                send_message;           // set on frames a datagram arived on
                    159: 
                    160: // spawn parms are carried from level to level
                    161:        float                   spawn_parms[NUM_SPAWN_PARMS];
                    162: 
                    163: // client known data for deltas        
                    164:        int                             old_frags;
                    165:        
                    166:        int                             stats[MAX_CL_STATS];
                    167: 
                    168: 
                    169:        client_frame_t  frames[UPDATE_BACKUP];  // updates can be deltad from here
                    170: 
                    171:        FILE                    *download;                      // file being downloaded
                    172:        int                             downloadsize;           // total bytes
                    173:        int                             downloadcount;          // bytes sent
                    174: 
                    175:        int                             spec_track;                     // entnum of player tracking
                    176: 
                    177:        double                  whensaid[10];       // JACK: For floodprots
                    178:        int                     whensaidhead;       // Head value for floodprots
                    179:        double                  lockedtill;
                    180: 
                    181:        qboolean                upgradewarn;            // did we warn him?
                    182: 
                    183:        FILE                    *upload;
                    184:        char                    uploadfn[MAX_QPATH];
                    185:        netadr_t                snap_from;
                    186:        qboolean                remote_snap;
                    187:  
                    188: //===== NETWORK ============
                    189:        int                             chokecount;
                    190:        int                             delta_sequence;         // -1 = no compression
                    191:        netchan_t               netchan;
                    192: } client_t;
                    193: 
                    194: // a client can leave the server in one of four ways:
                    195: // dropping properly by quiting or disconnecting
                    196: // timing out if no valid messages are received for timeout.value seconds
                    197: // getting kicked off by the server operator
                    198: // a program error, like an overflowed reliable buffer
                    199: 
                    200: //=============================================================================
                    201: 
                    202: 
                    203: #define        STATFRAMES      100
                    204: typedef struct
                    205: {
                    206:        double  active;
                    207:        double  idle;
                    208:        int             count;
                    209:        int             packets;
                    210: 
                    211:        double  latched_active;
                    212:        double  latched_idle;
                    213:        int             latched_packets;
                    214: } svstats_t;
                    215: 
                    216: // MAX_CHALLENGES is made large to prevent a denial
                    217: // of service attack that could cycle all of them
                    218: // out before legitimate users connected
                    219: #define        MAX_CHALLENGES  1024
                    220: 
                    221: typedef struct
                    222: {
                    223:        netadr_t        adr;
                    224:        int                     challenge;
                    225:        int                     time;
                    226: } challenge_t;
                    227: 
                    228: typedef struct
                    229: {
                    230:        int                     spawncount;                     // number of servers spawned since start,
                    231:                                                                        // used to check late spawns
                    232:        client_t        clients[MAX_CLIENTS];
                    233:        int                     serverflags;            // episode completion information
                    234:        
                    235:        double          last_heartbeat;
                    236:        int                     heartbeat_sequence;
                    237:        svstats_t       stats;
                    238: 
                    239:        char            info[MAX_SERVERINFO_STRING];
                    240: 
                    241:        // log messages are used so that fraglog processes can get stats
                    242:        int                     logsequence;    // the message currently being filled
                    243:        double          logtime;                // time of last swap
                    244:        sizebuf_t       log[2];
                    245:        byte            log_buf[2][MAX_DATAGRAM];
                    246: 
                    247:        challenge_t     challenges[MAX_CHALLENGES];     // to prevent invalid IPs from connecting
                    248: } server_static_t;
                    249: 
                    250: //=============================================================================
                    251: 
                    252: // edict->movetype values
                    253: #define        MOVETYPE_NONE                   0               // never moves
                    254: #define        MOVETYPE_ANGLENOCLIP    1
                    255: #define        MOVETYPE_ANGLECLIP              2
                    256: #define        MOVETYPE_WALK                   3               // gravity
                    257: #define        MOVETYPE_STEP                   4               // gravity, special edge handling
                    258: #define        MOVETYPE_FLY                    5
                    259: #define        MOVETYPE_TOSS                   6               // gravity
                    260: #define        MOVETYPE_PUSH                   7               // no clip to world, push and crush
                    261: #define        MOVETYPE_NOCLIP                 8
                    262: #define        MOVETYPE_FLYMISSILE             9               // extra size to monsters
                    263: #define        MOVETYPE_BOUNCE                 10
                    264: 
                    265: // edict->solid values
                    266: #define        SOLID_NOT                               0               // no interaction with other objects
                    267: #define        SOLID_TRIGGER                   1               // touch on edge, but not blocking
                    268: #define        SOLID_BBOX                              2               // touch on edge, block
                    269: #define        SOLID_SLIDEBOX                  3               // touch on edge, but not an onground
                    270: #define        SOLID_BSP                               4               // bsp clip, touch on edge, block
                    271: 
                    272: // edict->deadflag values
                    273: #define        DEAD_NO                                 0
                    274: #define        DEAD_DYING                              1
                    275: #define        DEAD_DEAD                               2
                    276: 
                    277: #define        DAMAGE_NO                               0
                    278: #define        DAMAGE_YES                              1
                    279: #define        DAMAGE_AIM                              2
                    280: 
                    281: // edict->flags
                    282: #define        FL_FLY                                  1
                    283: #define        FL_SWIM                                 2
                    284: #define        FL_GLIMPSE                              4
                    285: #define        FL_CLIENT                               8
                    286: #define        FL_INWATER                              16
                    287: #define        FL_MONSTER                              32
                    288: #define        FL_GODMODE                              64
                    289: #define        FL_NOTARGET                             128
                    290: #define        FL_ITEM                                 256
                    291: #define        FL_ONGROUND                             512
                    292: #define        FL_PARTIALGROUND                1024    // not all corners are valid
                    293: #define        FL_WATERJUMP                    2048    // player jumping out of water
                    294: 
                    295: // entity effects
                    296: 
                    297: //define       EF_BRIGHTFIELD                  1
                    298: //define       EF_MUZZLEFLASH                  2
                    299: #define        EF_BRIGHTLIGHT                  4
                    300: #define        EF_DIMLIGHT                     8
                    301: 
                    302: 
                    303: #define        SPAWNFLAG_NOT_EASY                      256
                    304: #define        SPAWNFLAG_NOT_MEDIUM            512
                    305: #define        SPAWNFLAG_NOT_HARD                      1024
                    306: #define        SPAWNFLAG_NOT_DEATHMATCH        2048
                    307: 
                    308: #define        MULTICAST_ALL                   0
                    309: #define        MULTICAST_PHS                   1
                    310: #define        MULTICAST_PVS                   2
                    311: 
                    312: #define        MULTICAST_ALL_R                 3
                    313: #define        MULTICAST_PHS_R                 4
                    314: #define        MULTICAST_PVS_R                 5
                    315: 
                    316: //============================================================================
                    317: 
                    318: extern cvar_t  sv_mintic, sv_maxtic;
                    319: extern cvar_t  sv_maxspeed;
                    320: 
                    321: extern netadr_t        master_adr[MAX_MASTERS];        // address of the master server
                    322: 
                    323: extern cvar_t  spawn;
                    324: extern cvar_t  teamplay;
                    325: extern cvar_t  deathmatch;
                    326: extern cvar_t  fraglimit;
                    327: extern cvar_t  timelimit;
                    328: 
                    329: extern server_static_t svs;                            // persistant server info
                    330: extern server_t                sv;                                     // local server
                    331: 
                    332: extern client_t        *host_client;
                    333: 
                    334: extern edict_t         *sv_player;
                    335: 
                    336: extern char            localmodels[MAX_MODELS][5];     // inline model names for precache
                    337: 
                    338: extern char            localinfo[MAX_LOCALINFO_STRING+1];
                    339: 
                    340: extern int                     host_hunklevel;
                    341: extern FILE            *sv_logfile;
                    342: extern FILE            *sv_fraglogfile;
                    343: 
                    344: //===========================================================
                    345: 
                    346: //
                    347: // sv_main.c
                    348: //
                    349: void SV_Shutdown (void);
                    350: void SV_Frame (float time);
                    351: void SV_FinalMessage (char *message);
                    352: void SV_DropClient (client_t *drop);
                    353: 
                    354: int SV_CalcPing (client_t *cl);
                    355: void SV_FullClientUpdate (client_t *client, sizebuf_t *buf);
                    356: 
                    357: int SV_ModelIndex (char *name);
                    358: 
                    359: qboolean SV_CheckBottom (edict_t *ent);
                    360: qboolean SV_movestep (edict_t *ent, vec3_t move, qboolean relink);
                    361: 
                    362: void SV_WriteClientdataToMessage (client_t *client, sizebuf_t *msg);
                    363: 
                    364: void SV_MoveToGoal (void);
                    365: 
                    366: void SV_SaveSpawnparms (void);
                    367: 
                    368: void SV_Physics_Client (edict_t        *ent);
                    369: 
                    370: void SV_ExecuteUserCommand (char *s);
                    371: void SV_InitOperatorCommands (void);
                    372: 
                    373: void SV_SendServerinfo (client_t *client);
                    374: void SV_ExtractFromUserinfo (client_t *cl);
                    375: 
                    376: 
                    377: void Master_Heartbeat (void);
                    378: void Master_Packet (void);
                    379: 
                    380: //
                    381: // sv_init.c
                    382: //
                    383: void SV_SpawnServer (char *server);
                    384: void SV_FlushSignon (void);
                    385: 
                    386: 
                    387: //
                    388: // sv_phys.c
                    389: //
                    390: void SV_ProgStartFrame (void);
                    391: void SV_Physics (void);
                    392: void SV_CheckVelocity (edict_t *ent);
                    393: void SV_AddGravity (edict_t *ent, float scale);
                    394: qboolean SV_RunThink (edict_t *ent);
                    395: void SV_Physics_Toss (edict_t *ent);
                    396: void SV_RunNewmis (void);
                    397: void SV_Impact (edict_t *e1, edict_t *e2);
                    398: void SV_SetMoveVars(void);
                    399: 
                    400: //
                    401: // sv_send.c
                    402: //
                    403: void SV_SendClientMessages (void);
                    404: 
                    405: void SV_Multicast (vec3_t origin, int to);
                    406: void SV_StartSound (edict_t *entity, int channel, char *sample, int volume,
                    407:     float attenuation);
                    408: void SV_ClientPrintf (client_t *cl, int level, char *fmt, ...);
                    409: void SV_BroadcastPrintf (int level, char *fmt, ...);
                    410: void SV_BroadcastCommand (char *fmt, ...);
                    411: void SV_SendMessagesToAll (void);
                    412: void SV_FindModelNumbers (void);
                    413: 
                    414: //
                    415: // sv_user.c
                    416: //
                    417: void SV_ExecuteClientMessage (client_t *cl);
                    418: void SV_UserInit (void);
                    419: void SV_TogglePause (const char *msg);
                    420: 
                    421: 
                    422: //
                    423: // svonly.c
                    424: //
                    425: typedef enum {RD_NONE, RD_CLIENT, RD_PACKET} redirect_t;
                    426: void SV_BeginRedirect (redirect_t rd);
                    427: void SV_EndRedirect (void);
                    428: 
                    429: //
                    430: // sv_ccmds.c
                    431: //
                    432: void SV_Status_f (void);
                    433: 
                    434: //
                    435: // sv_ents.c
                    436: //
                    437: void SV_WriteEntitiesToClient (client_t *client, sizebuf_t *msg);
                    438: 
                    439: //
                    440: // sv_nchan.c
                    441: //
                    442: 
                    443: void ClientReliableCheckBlock(client_t *cl, int maxsize);
                    444: void ClientReliable_FinishWrite(client_t *cl);
                    445: void ClientReliableWrite_Begin(client_t *cl, int c, int maxsize);
                    446: void ClientReliableWrite_Angle(client_t *cl, float f);
                    447: void ClientReliableWrite_Angle16(client_t *cl, float f);
                    448: void ClientReliableWrite_Byte(client_t *cl, int c);
                    449: void ClientReliableWrite_Char(client_t *cl, int c);
                    450: void ClientReliableWrite_Float(client_t *cl, float f);
                    451: void ClientReliableWrite_Coord(client_t *cl, float f);
                    452: void ClientReliableWrite_Long(client_t *cl, int c);
                    453: void ClientReliableWrite_Short(client_t *cl, int c);
                    454: void ClientReliableWrite_String(client_t *cl, char *s);
                    455: void ClientReliableWrite_SZ(client_t *cl, void *data, int len);
                    456: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.