"NEWPING" might as well be the only ping
This commit is contained in:
parent
d62674c184
commit
29a5999a44
|
@ -83,11 +83,9 @@ tic_t jointimeout = (10*TICRATE);
|
||||||
static boolean sendingsavegame[MAXNETNODES]; // Are we sending the savegame?
|
static boolean sendingsavegame[MAXNETNODES]; // Are we sending the savegame?
|
||||||
static tic_t freezetimeout[MAXNETNODES]; // Until when can this node freeze the server before getting a timeout?
|
static tic_t freezetimeout[MAXNETNODES]; // Until when can this node freeze the server before getting a timeout?
|
||||||
|
|
||||||
#ifdef NEWPING
|
|
||||||
UINT16 pingmeasurecount = 1;
|
UINT16 pingmeasurecount = 1;
|
||||||
UINT32 realpingtable[MAXPLAYERS]; //the base table of ping where an average will be sent to everyone.
|
UINT32 realpingtable[MAXPLAYERS]; //the base table of ping where an average will be sent to everyone.
|
||||||
UINT32 playerpingtable[MAXPLAYERS]; //table of player latency values.
|
UINT32 playerpingtable[MAXPLAYERS]; //table of player latency values.
|
||||||
#endif
|
|
||||||
SINT8 nodetoplayer[MAXNETNODES];
|
SINT8 nodetoplayer[MAXNETNODES];
|
||||||
SINT8 nodetoplayer2[MAXNETNODES]; // say the numplayer for this node if any (splitscreen)
|
SINT8 nodetoplayer2[MAXNETNODES]; // say the numplayer for this node if any (splitscreen)
|
||||||
UINT8 playerpernode[MAXNETNODES]; // used specialy for scplitscreen
|
UINT8 playerpernode[MAXNETNODES]; // used specialy for scplitscreen
|
||||||
|
@ -2883,12 +2881,10 @@ static void Got_KickCmd(UINT8 **p, INT32 playernum)
|
||||||
HU_AddChatText(va("\x82*%s has been kicked (Go away)", player_names[pnum]), false);
|
HU_AddChatText(va("\x82*%s has been kicked (Go away)", player_names[pnum]), false);
|
||||||
kickreason = KR_KICK;
|
kickreason = KR_KICK;
|
||||||
break;
|
break;
|
||||||
#ifdef NEWPING
|
|
||||||
case KICK_MSG_PING_HIGH:
|
case KICK_MSG_PING_HIGH:
|
||||||
HU_AddChatText(va("\x82*%s left the game (Broke ping limit)", player_names[pnum]), false);
|
HU_AddChatText(va("\x82*%s left the game (Broke ping limit)", player_names[pnum]), false);
|
||||||
kickreason = KR_PINGLIMIT;
|
kickreason = KR_PINGLIMIT;
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
case KICK_MSG_CON_FAIL:
|
case KICK_MSG_CON_FAIL:
|
||||||
HU_AddChatText(va("\x82*%s left the game (Synch Failure)", player_names[pnum]), false);
|
HU_AddChatText(va("\x82*%s left the game (Synch Failure)", player_names[pnum]), false);
|
||||||
kickreason = KR_SYNCH;
|
kickreason = KR_SYNCH;
|
||||||
|
@ -2961,10 +2957,8 @@ static void Got_KickCmd(UINT8 **p, INT32 playernum)
|
||||||
D_StartTitle();
|
D_StartTitle();
|
||||||
if (msg == KICK_MSG_CON_FAIL)
|
if (msg == KICK_MSG_CON_FAIL)
|
||||||
M_StartMessage(M_GetText("Server closed connection\n(synch failure)\nPress ESC\n"), NULL, MM_NOTHING);
|
M_StartMessage(M_GetText("Server closed connection\n(synch failure)\nPress ESC\n"), NULL, MM_NOTHING);
|
||||||
#ifdef NEWPING
|
|
||||||
else if (msg == KICK_MSG_PING_HIGH)
|
else if (msg == KICK_MSG_PING_HIGH)
|
||||||
M_StartMessage(M_GetText("Server closed connection\n(Broke ping limit)\nPress ESC\n"), NULL, MM_NOTHING);
|
M_StartMessage(M_GetText("Server closed connection\n(Broke ping limit)\nPress ESC\n"), NULL, MM_NOTHING);
|
||||||
#endif
|
|
||||||
else if (msg == KICK_MSG_BANNED)
|
else if (msg == KICK_MSG_BANNED)
|
||||||
M_StartMessage(M_GetText("You have been banned by the server\n\nPress ESC\n"), NULL, MM_NOTHING);
|
M_StartMessage(M_GetText("You have been banned by the server\n\nPress ESC\n"), NULL, MM_NOTHING);
|
||||||
else if (msg == KICK_MSG_CUSTOM_KICK)
|
else if (msg == KICK_MSG_CUSTOM_KICK)
|
||||||
|
@ -4188,7 +4182,6 @@ static void HandlePacketFromPlayer(SINT8 node)
|
||||||
resynch_local_inprogress = true;
|
resynch_local_inprogress = true;
|
||||||
CL_AcknowledgeResynch(&netbuffer->u.resynchpak);
|
CL_AcknowledgeResynch(&netbuffer->u.resynchpak);
|
||||||
break;
|
break;
|
||||||
#ifdef NEWPING
|
|
||||||
case PT_PING:
|
case PT_PING:
|
||||||
// Only accept PT_PING from the server.
|
// Only accept PT_PING from the server.
|
||||||
if (node != servernode)
|
if (node != servernode)
|
||||||
|
@ -4216,7 +4209,6 @@ static void HandlePacketFromPlayer(SINT8 node)
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
case PT_SERVERCFG:
|
case PT_SERVERCFG:
|
||||||
break;
|
break;
|
||||||
case PT_FILEFRAGMENT:
|
case PT_FILEFRAGMENT:
|
||||||
|
@ -4730,7 +4722,6 @@ void TryRunTics(tic_t realtics)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NEWPING
|
|
||||||
static inline void PingUpdate(void)
|
static inline void PingUpdate(void)
|
||||||
{
|
{
|
||||||
INT32 i;
|
INT32 i;
|
||||||
|
@ -4788,7 +4779,6 @@ static inline void PingUpdate(void)
|
||||||
|
|
||||||
pingmeasurecount = 1; //Reset count
|
pingmeasurecount = 1; //Reset count
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
void NetUpdate(void)
|
void NetUpdate(void)
|
||||||
{
|
{
|
||||||
|
@ -4813,7 +4803,6 @@ void NetUpdate(void)
|
||||||
|
|
||||||
gametime = nowtime;
|
gametime = nowtime;
|
||||||
|
|
||||||
#ifdef NEWPING
|
|
||||||
if (server)
|
if (server)
|
||||||
{
|
{
|
||||||
if (netgame && !(gametime % 255))
|
if (netgame && !(gametime % 255))
|
||||||
|
@ -4824,7 +4813,6 @@ void NetUpdate(void)
|
||||||
realpingtable[i] += G_TicsToMilliseconds(GetLag(playernode[i]));
|
realpingtable[i] += G_TicsToMilliseconds(GetLag(playernode[i]));
|
||||||
pingmeasurecount++;
|
pingmeasurecount++;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
if (client)
|
if (client)
|
||||||
maketic = neededtic;
|
maketic = neededtic;
|
||||||
|
|
|
@ -73,9 +73,7 @@ typedef enum
|
||||||
|
|
||||||
PT_LOGIN, // Login attempt from the client.
|
PT_LOGIN, // Login attempt from the client.
|
||||||
|
|
||||||
#ifdef NEWPING
|
|
||||||
PT_PING, // Packet sent to tell clients the other client's latency to server.
|
PT_PING, // Packet sent to tell clients the other client's latency to server.
|
||||||
#endif
|
|
||||||
NUMPACKETTYPE
|
NUMPACKETTYPE
|
||||||
} packettype_t;
|
} packettype_t;
|
||||||
|
|
||||||
|
@ -425,9 +423,7 @@ typedef struct
|
||||||
msaskinfo_pak msaskinfo; // 22 bytes
|
msaskinfo_pak msaskinfo; // 22 bytes
|
||||||
plrinfo playerinfo[MAXPLAYERS]; // 1152 bytes (I'd say 36~38)
|
plrinfo playerinfo[MAXPLAYERS]; // 1152 bytes (I'd say 36~38)
|
||||||
plrconfig playerconfig[MAXPLAYERS]; // (up to) 896 bytes (welp they ARE)
|
plrconfig playerconfig[MAXPLAYERS]; // (up to) 896 bytes (welp they ARE)
|
||||||
#ifdef NEWPING
|
|
||||||
UINT32 pingtable[MAXPLAYERS]; // 128 bytes
|
UINT32 pingtable[MAXPLAYERS]; // 128 bytes
|
||||||
#endif
|
|
||||||
} u; // This is needed to pack diff packet types data together
|
} u; // This is needed to pack diff packet types data together
|
||||||
} ATTRPACK doomdata_t;
|
} ATTRPACK doomdata_t;
|
||||||
|
|
||||||
|
@ -461,9 +457,7 @@ extern consvar_t cv_playbackspeed;
|
||||||
#define KICK_MSG_PLAYER_QUIT 3
|
#define KICK_MSG_PLAYER_QUIT 3
|
||||||
#define KICK_MSG_TIMEOUT 4
|
#define KICK_MSG_TIMEOUT 4
|
||||||
#define KICK_MSG_BANNED 5
|
#define KICK_MSG_BANNED 5
|
||||||
#ifdef NEWPING
|
|
||||||
#define KICK_MSG_PING_HIGH 6
|
#define KICK_MSG_PING_HIGH 6
|
||||||
#endif
|
|
||||||
#define KICK_MSG_CUSTOM_KICK 7
|
#define KICK_MSG_CUSTOM_KICK 7
|
||||||
#define KICK_MSG_CUSTOM_BAN 8
|
#define KICK_MSG_CUSTOM_BAN 8
|
||||||
|
|
||||||
|
@ -488,11 +482,9 @@ extern SINT8 servernode;
|
||||||
void Command_Ping_f(void);
|
void Command_Ping_f(void);
|
||||||
extern tic_t connectiontimeout;
|
extern tic_t connectiontimeout;
|
||||||
extern tic_t jointimeout;
|
extern tic_t jointimeout;
|
||||||
#ifdef NEWPING
|
|
||||||
extern UINT16 pingmeasurecount;
|
extern UINT16 pingmeasurecount;
|
||||||
extern UINT32 realpingtable[MAXPLAYERS];
|
extern UINT32 realpingtable[MAXPLAYERS];
|
||||||
extern UINT32 playerpingtable[MAXPLAYERS];
|
extern UINT32 playerpingtable[MAXPLAYERS];
|
||||||
#endif
|
|
||||||
|
|
||||||
extern consvar_t cv_joinnextround, cv_allownewplayer, cv_maxplayers, cv_resynchattempts, cv_blamecfail, cv_maxsend, cv_noticedownload, cv_downloadspeed;
|
extern consvar_t cv_joinnextround, cv_allownewplayer, cv_maxplayers, cv_resynchattempts, cv_blamecfail, cv_maxsend, cv_noticedownload, cv_downloadspeed;
|
||||||
|
|
||||||
|
|
66
src/d_net.c
66
src/d_net.c
|
@ -185,22 +185,10 @@ typedef struct
|
||||||
UINT8 nextacknum;
|
UINT8 nextacknum;
|
||||||
|
|
||||||
UINT8 flags;
|
UINT8 flags;
|
||||||
#ifndef NEWPING
|
|
||||||
// jacobson tcp timeout evaluation algorithm (Karn variation)
|
|
||||||
fixed_t ping;
|
|
||||||
fixed_t varping;
|
|
||||||
INT32 timeout; // computed with ping and varping
|
|
||||||
#endif
|
|
||||||
} node_t;
|
} node_t;
|
||||||
|
|
||||||
static node_t nodes[MAXNETNODES];
|
static node_t nodes[MAXNETNODES];
|
||||||
#ifndef NEWPING
|
#define NODETIMEOUT 14
|
||||||
#define PINGDEFAULT ((200*TICRATE*FRACUNIT)/1000)
|
|
||||||
#define VARPINGDEFAULT ((50*TICRATE*FRACUNIT)/1000)
|
|
||||||
#define TIMEOUT(p,v) (p+4*v+FRACUNIT/2)>>FRACBITS;
|
|
||||||
#else
|
|
||||||
#define NODETIMEOUT 14 //What the above boiled down to...
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef NONET
|
#ifndef NONET
|
||||||
// return <0 if a < b (mod 256)
|
// return <0 if a < b (mod 256)
|
||||||
|
@ -320,19 +308,7 @@ static UINT8 GetAcktosend(INT32 node)
|
||||||
static void RemoveAck(INT32 i)
|
static void RemoveAck(INT32 i)
|
||||||
{
|
{
|
||||||
INT32 node = ackpak[i].destinationnode;
|
INT32 node = ackpak[i].destinationnode;
|
||||||
#ifndef NEWPING
|
|
||||||
fixed_t trueping = (I_GetTime() - ackpak[i].senttime)<<FRACBITS;
|
|
||||||
if (ackpak[i].resentnum)
|
|
||||||
{
|
|
||||||
// +FRACUNIT/2 for round
|
|
||||||
nodes[node].ping = (nodes[node].ping*7 + trueping)/8;
|
|
||||||
nodes[node].varping = (nodes[node].varping*7 + abs(nodes[node].ping-trueping))/8;
|
|
||||||
nodes[node].timeout = TIMEOUT(nodes[node].ping,nodes[node].varping);
|
|
||||||
}
|
|
||||||
DEBFILE(va("Remove ack %d trueping %d ping %f var %f timeout %d\n",ackpak[i].acknum,trueping>>FRACBITS,(double)FIXED_TO_FLOAT(nodes[node].ping),(double)FIXED_TO_FLOAT(nodes[node].varping),nodes[node].timeout));
|
|
||||||
#else
|
|
||||||
DEBFILE(va("Remove ack %d\n",ackpak[i].acknum));
|
DEBFILE(va("Remove ack %d\n",ackpak[i].acknum));
|
||||||
#endif
|
|
||||||
ackpak[i].acknum = 0;
|
ackpak[i].acknum = 0;
|
||||||
if (nodes[node].flags & NF_CLOSE)
|
if (nodes[node].flags & NF_CLOSE)
|
||||||
Net_CloseConnection(node);
|
Net_CloseConnection(node);
|
||||||
|
@ -519,11 +495,7 @@ void Net_AckTicker(void)
|
||||||
{
|
{
|
||||||
const INT32 nodei = ackpak[i].destinationnode;
|
const INT32 nodei = ackpak[i].destinationnode;
|
||||||
node_t *node = &nodes[nodei];
|
node_t *node = &nodes[nodei];
|
||||||
#ifdef NEWPING
|
|
||||||
if (ackpak[i].acknum && ackpak[i].senttime + NODETIMEOUT < I_GetTime())
|
if (ackpak[i].acknum && ackpak[i].senttime + NODETIMEOUT < I_GetTime())
|
||||||
#else
|
|
||||||
if (ackpak[i].acknum && ackpak[i].senttime + node->timeout < I_GetTime())
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
if (ackpak[i].resentnum > 10 && (node->flags & NF_CLOSE))
|
if (ackpak[i].resentnum > 10 && (node->flags & NF_CLOSE))
|
||||||
{
|
{
|
||||||
|
@ -534,13 +506,8 @@ void Net_AckTicker(void)
|
||||||
ackpak[i].acknum = 0;
|
ackpak[i].acknum = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
#ifdef NEWPING
|
|
||||||
DEBFILE(va("Resend ack %d, %u<%d at %u\n", ackpak[i].acknum, ackpak[i].senttime,
|
DEBFILE(va("Resend ack %d, %u<%d at %u\n", ackpak[i].acknum, ackpak[i].senttime,
|
||||||
NODETIMEOUT, I_GetTime()));
|
NODETIMEOUT, I_GetTime()));
|
||||||
#else
|
|
||||||
DEBFILE(va("Resend ack %d, %u<%d at %u\n", ackpak[i].acknum, ackpak[i].senttime,
|
|
||||||
node->timeout, I_GetTime()));
|
|
||||||
#endif
|
|
||||||
M_Memcpy(netbuffer, ackpak[i].pak.raw, ackpak[i].length);
|
M_Memcpy(netbuffer, ackpak[i].pak.raw, ackpak[i].length);
|
||||||
ackpak[i].senttime = I_GetTime();
|
ackpak[i].senttime = I_GetTime();
|
||||||
ackpak[i].resentnum++;
|
ackpak[i].resentnum++;
|
||||||
|
@ -658,11 +625,6 @@ void Net_WaitAllAckReceived(UINT32 timeout)
|
||||||
static void InitNode(node_t *node)
|
static void InitNode(node_t *node)
|
||||||
{
|
{
|
||||||
node->acktosend_head = node->acktosend_tail = 0;
|
node->acktosend_head = node->acktosend_tail = 0;
|
||||||
#ifndef NEWPING
|
|
||||||
node->ping = PINGDEFAULT;
|
|
||||||
node->varping = VARPINGDEFAULT;
|
|
||||||
node->timeout = TIMEOUT(node->ping, node->varping);
|
|
||||||
#endif
|
|
||||||
node->firstacktosend = 0;
|
node->firstacktosend = 0;
|
||||||
node->nextacknum = 1;
|
node->nextacknum = 1;
|
||||||
node->remotefirstack = 0;
|
node->remotefirstack = 0;
|
||||||
|
@ -843,9 +805,7 @@ static const char *packettypename[NUMPACKETTYPE] =
|
||||||
"CLIENTJOIN",
|
"CLIENTJOIN",
|
||||||
"NODETIMEOUT",
|
"NODETIMEOUT",
|
||||||
"RESYNCHING",
|
"RESYNCHING",
|
||||||
#ifdef NEWPING
|
|
||||||
"PING"
|
"PING"
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void DebugPrintpacket(const char *header)
|
static void DebugPrintpacket(const char *header)
|
||||||
|
@ -1386,28 +1346,12 @@ boolean D_CheckNetGame(void)
|
||||||
|
|
||||||
void Command_Ping_f(void)
|
void Command_Ping_f(void)
|
||||||
{
|
{
|
||||||
#ifndef NEWPING
|
INT32 i;
|
||||||
if(server)
|
for (i = 0; i < MAXPLAYERS;i++)
|
||||||
{
|
{
|
||||||
#endif
|
if (playeringame[i] && i != 0)
|
||||||
INT32 i;
|
CONS_Printf(M_GetText("%.2d : %s\n %d ms\n"), i, player_names[i], playerpingtable[i]);
|
||||||
for (i = 0; i < MAXPLAYERS;i++)
|
|
||||||
{
|
|
||||||
#ifndef NEWPING
|
|
||||||
const INT32 node = playernode[i];
|
|
||||||
if (playeringame[i] && node != 0)
|
|
||||||
CONS_Printf(M_GetText("%.2d : %s\n %d tics, %d ms.\n"), i, player_names[i],
|
|
||||||
GetLag(node), G_TicsToMilliseconds(GetLag(node)));
|
|
||||||
#else
|
|
||||||
if (playeringame[i] && i != 0)
|
|
||||||
CONS_Printf(M_GetText("%.2d : %s\n %d ms\n"), i, player_names[i], playerpingtable[i]);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#ifndef NEWPING
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
CONS_Printf(M_GetText("Only the server can use this.\n"));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void D_CloseConnection(void)
|
void D_CloseConnection(void)
|
||||||
|
|
|
@ -340,9 +340,7 @@ static CV_PossibleValue_t nettimeout_cons_t[] = {{TICRATE/7, "MIN"}, {60*TICRATE
|
||||||
consvar_t cv_nettimeout = {"nettimeout", "350", CV_CALL|CV_SAVE, nettimeout_cons_t, NetTimeout_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_nettimeout = {"nettimeout", "350", CV_CALL|CV_SAVE, nettimeout_cons_t, NetTimeout_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
||||||
static CV_PossibleValue_t jointimeout_cons_t[] = {{5*TICRATE, "MIN"}, {60*TICRATE, "MAX"}, {0, NULL}};
|
static CV_PossibleValue_t jointimeout_cons_t[] = {{5*TICRATE, "MIN"}, {60*TICRATE, "MAX"}, {0, NULL}};
|
||||||
consvar_t cv_jointimeout = {"jointimeout", "350", CV_CALL|CV_SAVE, jointimeout_cons_t, JoinTimeout_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_jointimeout = {"jointimeout", "350", CV_CALL|CV_SAVE, jointimeout_cons_t, JoinTimeout_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
||||||
#ifdef NEWPING
|
|
||||||
consvar_t cv_maxping = {"maxping", "0", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_maxping = {"maxping", "0", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
#endif
|
|
||||||
// Intermission time Tails 04-19-2002
|
// Intermission time Tails 04-19-2002
|
||||||
static CV_PossibleValue_t inttime_cons_t[] = {{0, "MIN"}, {3600, "MAX"}, {0, NULL}};
|
static CV_PossibleValue_t inttime_cons_t[] = {{0, "MIN"}, {3600, "MAX"}, {0, NULL}};
|
||||||
consvar_t cv_inttime = {"inttime", "10", CV_NETVAR, inttime_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_inttime = {"inttime", "10", CV_NETVAR, inttime_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
@ -573,9 +571,7 @@ void D_RegisterServerCommands(void)
|
||||||
|
|
||||||
CV_RegisterVar(&cv_skipmapcheck);
|
CV_RegisterVar(&cv_skipmapcheck);
|
||||||
CV_RegisterVar(&cv_sleep);
|
CV_RegisterVar(&cv_sleep);
|
||||||
#ifdef NEWPING
|
|
||||||
CV_RegisterVar(&cv_maxping);
|
CV_RegisterVar(&cv_maxping);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef SEENAMES
|
#ifdef SEENAMES
|
||||||
CV_RegisterVar(&cv_allowseenames);
|
CV_RegisterVar(&cv_allowseenames);
|
||||||
|
|
|
@ -107,9 +107,7 @@ extern consvar_t cv_ringslinger, cv_soundtest;
|
||||||
|
|
||||||
extern consvar_t cv_specialrings, cv_powerstones, cv_matchboxes, cv_competitionboxes;
|
extern consvar_t cv_specialrings, cv_powerstones, cv_matchboxes, cv_competitionboxes;
|
||||||
|
|
||||||
#ifdef NEWPING
|
|
||||||
extern consvar_t cv_maxping;
|
extern consvar_t cv_maxping;
|
||||||
#endif
|
|
||||||
|
|
||||||
extern consvar_t cv_skipmapcheck;
|
extern consvar_t cv_skipmapcheck;
|
||||||
|
|
||||||
|
|
|
@ -561,9 +561,6 @@ extern const char *compdate, *comptime, *comprevision, *compbranch;
|
||||||
/// Polyobject fake flat code
|
/// Polyobject fake flat code
|
||||||
#define POLYOBJECTS_PLANES
|
#define POLYOBJECTS_PLANES
|
||||||
|
|
||||||
/// Improved way of dealing with ping values and a ping limit.
|
|
||||||
#define NEWPING
|
|
||||||
|
|
||||||
/// See name of player in your crosshair
|
/// See name of player in your crosshair
|
||||||
#define SEENAMES
|
#define SEENAMES
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue