1
0
Fork 0
forked from fte/fteqw
fteqw/engine/client/cl_master.h
Spoike 410db5d6b0 in_forceseat will not break clientcmds any more.
tweak drawtextfield to understand fonts. now available to menuqc too.
provide player and full server info to qc server browsers.
allow qc to actually use cfg_save. I've been issuing that on quit for a while now and not noticed that it was getting denied.
fix some focus issues with cwindows.
tweak splitscreens to display centerprints+scoreboards in more suitable places. harder to glitch out.
path command can now displays hashes (in tooltips), which can be useful for creating fmf files.
fix q3game crash.
fix some qcc issues with hexenc and -O0.
fix some qccgui unicode issues, now preserves encoding when saving.
provide easy upgrade path for qccx syntax to fteqcc: string[%1] -> string+1 (which is still potentially unsafe (tempstrings), and thus generates a compiler warning).
rework xmpp plugin to use cwindows for chats and the buddylist. this should make it more intuitive and thus more userfriendly.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4865 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-04-27 06:19:33 +00:00

211 lines
4.2 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,
SLKEY_NUMHUMANS,
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
{
int userid;
int frags;
float time;
int ping;
char name[64];
char skin[64];
char topc;
char botc;
} players[MAX_CLIENTS];
} serverdetailedinfo_t;
//hold minimum info.
typedef struct serverinfo_s
{
char name[64]; //hostname.
netadr_t adr;
unsigned char players;
unsigned char maxplayers;
qbyte special; //flags
qbyte sends;
qbyte insortedlist;
qbyte numhumans;
qbyte numbots;
qbyte freeslots;
qbyte protocol;
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 *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;
serverdetailedinfo_t *detail;
int linenum;
} selectedserver;
typedef struct player_s
{
char name[16];
int frags;
int colour;
char skin[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);
void 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);
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);