mirror of
https://github.com/nzp-team/fteqw.git
synced 2024-11-23 12:22:42 +00:00
b749d8356a
server: my attempt at mvd recording fixes. there's a couple of other issues, at least with nq mods. client: properly support recording .dems mid-map for 15+666 client: server browser now queries nq servers for players+rules. renderer: add support for single-image dual-layer skies that some other engines use. qcc: add #merge, along with __wrap + __weak keywords. fix a symboldata issue revealed by this. qcc: added a flag to write the sourcecode into the .dat (zip format compatible with any zip program that can deal with 'self extractors'). qccgui: can be told to open a .dat file instead of .src, showing/using any embedded sourcecode. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5017 fc73d0e0-1445-4013-8a0c-d673dee63da5
231 lines
4.8 KiB
C
231 lines
4.8 KiB
C
|
|
#define SS_PROTOCOLMASK 0xf
|
|
#define SS_UNKNOWN 0
|
|
#define SS_QUAKEWORLD 1
|
|
#define SS_NETQUAKE 2
|
|
#define SS_DARKPLACES 3
|
|
#define SS_QUAKE2 4
|
|
#define SS_QUAKE3 5
|
|
//#define SS_UNUSED 6
|
|
//#define SS_UNUSED 7
|
|
|
|
#define SS_LOCAL (1<<3u) //local servers are ones we detected without being listed on a master server (masters will report public ips, so these may appear as dupes if they're also public)
|
|
#define SS_FTESERVER (1<<4u) //hehehe...
|
|
#define SS_FAVORITE (1<<5u) //filter all others.
|
|
#define SS_KEEPINFO (1<<6u)
|
|
#define SS_PROXY (1<<7u)
|
|
|
|
|
|
//despite not supporting nq or q2, we still load them. We just filter them. This is to make sure we properly write the listing files.
|
|
enum mastertype_e
|
|
{
|
|
MT_BAD, //this would be an error
|
|
MT_MASTERHTTPJSON,
|
|
MT_MASTERHTTP,
|
|
MT_MASTERUDP,
|
|
MT_BCAST,
|
|
MT_SINGLE,
|
|
};
|
|
enum masterprotocol_e
|
|
{
|
|
MP_UNSPECIFIED,
|
|
MP_QUAKEWORLD,
|
|
MP_QUAKE2,
|
|
MP_QUAKE3,
|
|
MP_NETQUAKE,
|
|
MP_DPMASTER
|
|
};
|
|
|
|
|
|
typedef enum
|
|
{
|
|
SLKEY_PING,
|
|
SLKEY_MAP,
|
|
SLKEY_NAME,
|
|
SLKEY_ADDRESS,
|
|
SLKEY_NUMPLAYERS,
|
|
SLKEY_MAXPLAYERS,
|
|
SLKEY_GAMEDIR,
|
|
|
|
SLKEY_FREEPLAYERS,
|
|
SLKEY_BASEGAME,
|
|
SLKEY_FLAGS,
|
|
SLKEY_TIMELIMIT,
|
|
SLKEY_FRAGLIMIT,
|
|
|
|
SLKEY_MOD,
|
|
SLKEY_PROTOCOL,
|
|
SLKEY_NUMBOTS, //uninteresting bots that will presumably get kicked if people join.
|
|
SLKEY_NUMSPECTATORS,//spectators
|
|
SLKEY_NUMHUMANS, //actual players
|
|
SLKEY_QCSTATUS,
|
|
// SLKEY_PLAYERS, //eep!
|
|
SLKEY_ISFAVORITE,//eep!
|
|
SLKEY_ISLOCAL,
|
|
SLKEY_ISPROXY,
|
|
SLKEY_SERVERINFO,
|
|
|
|
|
|
SLKEY_TOOMANY,
|
|
SLKEY_PLAYER0,
|
|
SLKEY_CUSTOM = SLKEY_PLAYER0+MAX_CLIENTS
|
|
} hostcachekey_t;
|
|
|
|
typedef enum
|
|
{
|
|
SLIST_TEST_CONTAINS,
|
|
SLIST_TEST_NOTCONTAIN,
|
|
SLIST_TEST_LESSEQUAL,
|
|
SLIST_TEST_LESS,
|
|
SLIST_TEST_EQUAL,
|
|
SLIST_TEST_GREATER,
|
|
SLIST_TEST_GREATEREQUAL,
|
|
SLIST_TEST_NOTEQUAL,
|
|
SLIST_TEST_STARTSWITH,
|
|
SLIST_TEST_NOTSTARTSWITH
|
|
} slist_test_t;
|
|
|
|
|
|
//contains info about a server in greater detail. Could be too mem intensive.
|
|
typedef struct serverdetailedinfo_s
|
|
{
|
|
char info[MAX_SERVERINFO_STRING];
|
|
|
|
int numplayers;
|
|
|
|
struct serverdetailedplayerinfo_s
|
|
{
|
|
int userid;
|
|
int frags;
|
|
float time;
|
|
int ping;
|
|
char name[64];
|
|
char skin[16]; //is this even useful?
|
|
char team[16];
|
|
char topc;
|
|
char botc;
|
|
qbyte isspec;
|
|
} players[MAX_CLIENTS];
|
|
} serverdetailedinfo_t;
|
|
|
|
//hold minimum info.
|
|
typedef struct serverinfo_s
|
|
{
|
|
char name[64]; //hostname.
|
|
netadr_t adr;
|
|
|
|
short special; //flags
|
|
short protocol;
|
|
|
|
qbyte players;
|
|
qbyte maxplayers;
|
|
qbyte sends;
|
|
qbyte status; //1=alive, 2=displayed
|
|
|
|
qbyte numspectators;
|
|
qbyte numhumans;
|
|
qbyte numbots;
|
|
qbyte freeslots;
|
|
|
|
char modname[8+1];
|
|
char qcstatus[8+1];
|
|
|
|
char gamedir[8+1];
|
|
char map[16];
|
|
|
|
unsigned short gameversion;
|
|
unsigned short ping;
|
|
|
|
short tl;
|
|
short fl;
|
|
|
|
float refreshtime;
|
|
|
|
serverdetailedinfo_t *moreinfo;
|
|
|
|
struct serverinfo_s *prevpeer;
|
|
unsigned short cost;
|
|
unsigned short numpeers;
|
|
struct peers_s
|
|
{
|
|
struct serverinfo_s *peer;
|
|
unsigned short ping;
|
|
} *peers;
|
|
|
|
struct serverinfo_s *next;
|
|
} serverinfo_t;
|
|
|
|
typedef struct master_s
|
|
{
|
|
struct master_s *next;
|
|
netadr_t adr;
|
|
char *address; //text based address (http servers)
|
|
struct dl_download *dl;
|
|
qbyte nosave;
|
|
qbyte mastertype;
|
|
qbyte protocoltype;
|
|
int sends; /*needs to resend?*/
|
|
char name[1];
|
|
} master_t;
|
|
|
|
extern struct selectedserver_s
|
|
{
|
|
qboolean inuse;
|
|
netadr_t adr;
|
|
float refreshtime;
|
|
int lastplayer;
|
|
char lastrule[64];
|
|
|
|
serverdetailedinfo_t *detail;
|
|
|
|
int linenum;
|
|
} selectedserver;
|
|
|
|
typedef struct player_s
|
|
{
|
|
char name[16];
|
|
int frags;
|
|
int colour;
|
|
char skin[8];
|
|
char team[8];
|
|
netadr_t adr;
|
|
|
|
struct player_s *next;
|
|
} player_t;
|
|
|
|
void SListOptionChanged(serverinfo_t *newserver);
|
|
|
|
extern serverinfo_t *firstserver;
|
|
extern master_t *master;
|
|
extern player_t *mplayers;
|
|
|
|
void Master_SetupSockets(void);
|
|
qboolean CL_QueryServers(void);
|
|
int Master_CheckPollSockets(void);
|
|
void MasterInfo_Shutdown(void);
|
|
void MasterInfo_Request(master_t *mast);
|
|
serverinfo_t *Master_InfoForServer (netadr_t *addr);
|
|
serverinfo_t *Master_InfoForNum (int num);
|
|
unsigned int Master_TotalCount(void);
|
|
unsigned int Master_NumPolled(void); //progress indicator
|
|
unsigned int Master_NumAlive(void);
|
|
void Master_SetupSockets(void);
|
|
void MasterInfo_Refresh(void);
|
|
void Master_QueryServer(serverinfo_t *server);
|
|
void MasterInfo_WriteServers(void);
|
|
|
|
int Master_KeyForName(const char *keyname);
|
|
float Master_ReadKeyFloat(serverinfo_t *server, int keynum);
|
|
char *Master_ReadKeyString(serverinfo_t *server, int keynum);
|
|
|
|
void Master_SortServers(void);
|
|
void Master_SetSortField(hostcachekey_t field, qboolean descending);
|
|
hostcachekey_t Master_GetSortField(void);
|
|
qboolean Master_GetSortDescending(void);
|
|
|
|
int Master_NumSorted(void);
|
|
void Master_ClearMasks(void);
|
|
serverinfo_t *Master_SortedServer(int idx);
|
|
void Master_SetMaskString(qboolean or, hostcachekey_t field, const char *param, slist_test_t testop);
|
|
void Master_SetMaskInteger(qboolean or, hostcachekey_t field, int param, slist_test_t testop);
|
|
serverinfo_t *Master_FindRoute(netadr_t target);
|