openmohaa/code/gamespy/Peer/peerPlayers.h
2023-02-04 21:00:01 +01:00

92 lines
3.4 KiB
C

/*
GameSpy Peer SDK
Dan "Mr. Pants" Schoenblum
dan@gamespy.com
Copyright 1999-2007 GameSpy Industries, Inc
devsupport@gamespy.com
*/
#ifndef _PEERPLAYERS_H_
#define _PEERPLAYERS_H_
/*************
** INCLUDES **
*************/
#include "peerMain.h"
#ifdef __cplusplus
extern "C" {
#endif
/************
** DEFINES **
************/
#define PI_PING_HISTORY_LEN 4
/**********
** TYPES **
**********/
typedef struct piPlayer
{
char nick[PI_NICK_MAX_LEN]; // this has to be first
PEERBool inRoom[NumRooms]; // true if in the room
PEERBool local; // true for the local player
unsigned int IP; // the IP in network byte order
int profileID; // gp profile id
PEERBool gotIPAndProfileID; // true if we have the IP and profile ID
int flags[NumRooms]; // player's room flags
// Ping stuff
unsigned long lastPingSend; // last time a ping was sent
unsigned long lastPingRecv; // last time a ping was received
unsigned long lastXping; // last time a xping was sent
PEERBool waitingForPing; // if true we're waiting for a ping to return
int pingsReturned; // number of pings returned
int pingsLostConsecutive; // number of pings lost in a row
int pingAverage; // the average ping time
int pingHistory[PI_PING_HISTORY_LEN]; // history of pings
int pingHistoryNum; // the number of pings in the ping history
int numPings; // number of pings for this player
PEERBool xpingSent; // if true, we already sent a xping with the current average
PEERBool inPingRoom; // true if the player is in a room getting pinged
PEERBool inXpingRoom; // true if the player is in a room getting xpinged
PEERBool mustPing; // if true, ping this player as soon as possible
PEERBool pingOnce; // a one-time ping has been triggered with peerPingPlayer
} piPlayer;
/**************
** FUNCTIONS **
**************/
PEERBool piPlayersInit(PEER peer);
void piPlayersCleanup(PEER peer);
piPlayer * piPlayerJoinedRoom(PEER peer, const char * nick, RoomType roomType, int mode);
void piPlayerLeftRoom(PEER peer, const char * nick, RoomType roomType);
void piPlayerChangedNick(PEER peer, const char * oldNick, const char * newNick);
void piClearRoomPlayers(PEER peer, RoomType roomType);
piPlayer * piGetPlayer(PEER peer, const char * nick);
typedef void (* piEnumRoomPlayersCallback)(PEER peer, RoomType roomType, piPlayer * player, int index, void * param);
void piEnumRoomPlayers(PEER peer, RoomType roomType, piEnumRoomPlayersCallback callback, void * param);
piPlayer * piFindPlayerByIP(PEER peer, unsigned int IP);
void piSetPlayerIPAndProfileID(PEER peer, const char * nick, unsigned int IP, int profileID);
int piParseFlags(const char * flags);
void piSetPlayerRoomFlags(PEER peer, const char * nick, RoomType roomType, const char * flags);
void piSetPlayerModeFlags(PEER peer, const char * nick, RoomType roomType, int mode);
PEERBool piIsPlayerVIP(piPlayer * player, RoomType roomType);
PEERBool piIsPlayerHost(piPlayer * player);
PEERBool piIsPlayerOp(piPlayer * player);
piPlayer * piFindPlayerByIndex(PEER peer, RoomType roomType, int index);
piPlayer * piFindRoomHost(PEER peer, RoomType roomType);
piPlayer * piFindRoomOp(PEER peer, RoomType roomType);
int piCountRoomOps(PEER peer, RoomType roomType, const char * exclude);
#ifdef __cplusplus
}
#endif
#endif