mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2024-11-15 01:01:43 +00:00
Multiple admins
# Conflicts: # src/d_netcmd.c # src/d_netcmd.h
This commit is contained in:
parent
36e020c366
commit
b8ce51bff2
12 changed files with 157 additions and 71 deletions
|
@ -1220,7 +1220,7 @@ static void Got_NetVar(UINT8 **p, INT32 playernum)
|
||||||
char *svalue;
|
char *svalue;
|
||||||
UINT8 stealth = false;
|
UINT8 stealth = false;
|
||||||
|
|
||||||
if (playernum != serverplayer && playernum != adminplayer && !serverloading)
|
if (playernum != serverplayer && !IsPlayerAdmin(playernum) && !serverloading)
|
||||||
{
|
{
|
||||||
// not from server or remote admin, must be hacked/buggy client
|
// not from server or remote admin, must be hacked/buggy client
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Illegal netvar command received from %s\n"), player_names[playernum]);
|
CONS_Alert(CONS_WARNING, M_GetText("Illegal netvar command received from %s\n"), player_names[playernum]);
|
||||||
|
@ -1349,7 +1349,7 @@ static void CV_SetCVar(consvar_t *var, const char *value, boolean stealth)
|
||||||
// send the value of the variable
|
// send the value of the variable
|
||||||
XBOXSTATIC UINT8 buf[128];
|
XBOXSTATIC UINT8 buf[128];
|
||||||
UINT8 *p = buf;
|
UINT8 *p = buf;
|
||||||
if (!(server || (adminplayer == consoleplayer)))
|
if (!(server || (IsPlayerAdmin(consoleplayer))))
|
||||||
{
|
{
|
||||||
CONS_Printf(M_GetText("Only the server or admin can change: %s %s\n"), var->name, var->string);
|
CONS_Printf(M_GetText("Only the server or admin can change: %s %s\n"), var->name, var->string);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1365,15 +1365,19 @@ static boolean SV_SendServerConfig(INT32 node)
|
||||||
netbuffer->u.servercfg.gamestate = (UINT8)gamestate;
|
netbuffer->u.servercfg.gamestate = (UINT8)gamestate;
|
||||||
netbuffer->u.servercfg.gametype = (UINT8)gametype;
|
netbuffer->u.servercfg.gametype = (UINT8)gametype;
|
||||||
netbuffer->u.servercfg.modifiedgame = (UINT8)modifiedgame;
|
netbuffer->u.servercfg.modifiedgame = (UINT8)modifiedgame;
|
||||||
netbuffer->u.servercfg.adminplayer = (SINT8)adminplayer;
|
|
||||||
|
|
||||||
// we fill these structs with FFs so that any players not in game get sent as 0xFFFF
|
// we fill these structs with FFs so that any players not in game get sent as 0xFFFF
|
||||||
// which is nice and easy for us to detect
|
// which is nice and easy for us to detect
|
||||||
memset(netbuffer->u.servercfg.playerskins, 0xFF, sizeof(netbuffer->u.servercfg.playerskins));
|
memset(netbuffer->u.servercfg.playerskins, 0xFF, sizeof(netbuffer->u.servercfg.playerskins));
|
||||||
memset(netbuffer->u.servercfg.playercolor, 0xFF, sizeof(netbuffer->u.servercfg.playercolor));
|
memset(netbuffer->u.servercfg.playercolor, 0xFF, sizeof(netbuffer->u.servercfg.playercolor));
|
||||||
|
|
||||||
|
memset(netbuffer->u.servercfg.adminplayers, -1, sizeof(netbuffer->u.servercfg.adminplayers));
|
||||||
|
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
{
|
{
|
||||||
|
if (i < 4)
|
||||||
|
netbuffer->u.servercfg.adminplayers[i] = (SINT8)adminplayers[i];
|
||||||
|
|
||||||
if (!playeringame[i])
|
if (!playeringame[i])
|
||||||
continue;
|
continue;
|
||||||
netbuffer->u.servercfg.playerskins[i] = (UINT8)players[i].skin;
|
netbuffer->u.servercfg.playerskins[i] = (UINT8)players[i].skin;
|
||||||
|
@ -2042,7 +2046,7 @@ static void CL_ConnectToServer(boolean viams)
|
||||||
G_SetGamestate(GS_WAITINGPLAYERS);
|
G_SetGamestate(GS_WAITINGPLAYERS);
|
||||||
wipegamestate = GS_WAITINGPLAYERS;
|
wipegamestate = GS_WAITINGPLAYERS;
|
||||||
|
|
||||||
adminplayer = -1;
|
ClearAdminPlayers();
|
||||||
pnumnodes = 1;
|
pnumnodes = 1;
|
||||||
oldtic = I_GetTime() - 1;
|
oldtic = I_GetTime() - 1;
|
||||||
#ifndef NONET
|
#ifndef NONET
|
||||||
|
@ -2421,8 +2425,10 @@ static void CL_RemovePlayer(INT32 playernum)
|
||||||
// Reset the name
|
// Reset the name
|
||||||
sprintf(player_names[playernum], "Player %d", playernum+1);
|
sprintf(player_names[playernum], "Player %d", playernum+1);
|
||||||
|
|
||||||
if (playernum == adminplayer)
|
if (IsPlayerAdmin(playernum))
|
||||||
adminplayer = -1; // don't stay admin after you're gone
|
{
|
||||||
|
RemoveAdminPlayer(playernum); // don't stay admin after you're gone
|
||||||
|
}
|
||||||
|
|
||||||
if (playernum == displayplayer)
|
if (playernum == displayplayer)
|
||||||
displayplayer = consoleplayer; // don't look through someone's view who isn't there
|
displayplayer = consoleplayer; // don't look through someone's view who isn't there
|
||||||
|
@ -2540,7 +2546,7 @@ static void Command_Nodes(void)
|
||||||
if (I_GetNodeAddress && (address = I_GetNodeAddress(playernode[i])) != NULL)
|
if (I_GetNodeAddress && (address = I_GetNodeAddress(playernode[i])) != NULL)
|
||||||
CONS_Printf(" - %s", address);
|
CONS_Printf(" - %s", address);
|
||||||
|
|
||||||
if (i == adminplayer)
|
if (IsPlayerAdmin(i))
|
||||||
CONS_Printf(M_GetText(" (verified admin)"));
|
CONS_Printf(M_GetText(" (verified admin)"));
|
||||||
|
|
||||||
if (players[i].spectator)
|
if (players[i].spectator)
|
||||||
|
@ -2565,7 +2571,7 @@ static void Command_Ban(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (server || adminplayer == consoleplayer)
|
if (server || IsPlayerAdmin(consoleplayer))
|
||||||
{
|
{
|
||||||
XBOXSTATIC UINT8 buf[3 + MAX_REASONLENGTH];
|
XBOXSTATIC UINT8 buf[3 + MAX_REASONLENGTH];
|
||||||
UINT8 *p = buf;
|
UINT8 *p = buf;
|
||||||
|
@ -2631,7 +2637,7 @@ static void Command_Kick(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (server || adminplayer == consoleplayer)
|
if (server || IsPlayerAdmin(consoleplayer))
|
||||||
{
|
{
|
||||||
XBOXSTATIC UINT8 buf[3 + MAX_REASONLENGTH];
|
XBOXSTATIC UINT8 buf[3 + MAX_REASONLENGTH];
|
||||||
UINT8 *p = buf;
|
UINT8 *p = buf;
|
||||||
|
@ -2688,7 +2694,7 @@ static void Got_KickCmd(UINT8 **p, INT32 playernum)
|
||||||
pnum = READUINT8(*p);
|
pnum = READUINT8(*p);
|
||||||
msg = READUINT8(*p);
|
msg = READUINT8(*p);
|
||||||
|
|
||||||
if (pnum == serverplayer && playernum == adminplayer)
|
if (pnum == serverplayer && IsPlayerAdmin(playernum))
|
||||||
{
|
{
|
||||||
CONS_Printf(M_GetText("Server is being shut down remotely. Goodbye!\n"));
|
CONS_Printf(M_GetText("Server is being shut down remotely. Goodbye!\n"));
|
||||||
|
|
||||||
|
@ -2699,7 +2705,7 @@ static void Got_KickCmd(UINT8 **p, INT32 playernum)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Is playernum authorized to make this kick?
|
// Is playernum authorized to make this kick?
|
||||||
if (playernum != serverplayer && playernum != adminplayer
|
if (playernum != serverplayer && !IsPlayerAdmin(playernum)
|
||||||
&& !(playerpernode[playernode[playernum]] == 2
|
&& !(playerpernode[playernode[playernum]] == 2
|
||||||
&& nodetoplayer2[playernode[playernum]] == pnum))
|
&& nodetoplayer2[playernode[playernum]] == pnum))
|
||||||
{
|
{
|
||||||
|
@ -3036,7 +3042,7 @@ void D_QuitNetGame(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
D_CloseConnection();
|
D_CloseConnection();
|
||||||
adminplayer = -1;
|
ClearAdminPlayers();
|
||||||
|
|
||||||
DEBFILE("===========================================================================\n"
|
DEBFILE("===========================================================================\n"
|
||||||
" Log finish\n"
|
" Log finish\n"
|
||||||
|
@ -3067,7 +3073,7 @@ static void Got_AddPlayer(UINT8 **p, INT32 playernum)
|
||||||
INT16 node, newplayernum;
|
INT16 node, newplayernum;
|
||||||
boolean splitscreenplayer;
|
boolean splitscreenplayer;
|
||||||
|
|
||||||
if (playernum != serverplayer && playernum != adminplayer)
|
if (playernum != serverplayer && !IsPlayerAdmin(playernum))
|
||||||
{
|
{
|
||||||
// protect against hacked/buggy client
|
// protect against hacked/buggy client
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Illegal add player command received from %s\n"), player_names[playernum]);
|
CONS_Alert(CONS_WARNING, M_GetText("Illegal add player command received from %s\n"), player_names[playernum]);
|
||||||
|
@ -3592,7 +3598,9 @@ static void HandlePacketFromAwayNode(SINT8 node)
|
||||||
maketic = gametic = neededtic = (tic_t)LONG(netbuffer->u.servercfg.gametic);
|
maketic = gametic = neededtic = (tic_t)LONG(netbuffer->u.servercfg.gametic);
|
||||||
gametype = netbuffer->u.servercfg.gametype;
|
gametype = netbuffer->u.servercfg.gametype;
|
||||||
modifiedgame = netbuffer->u.servercfg.modifiedgame;
|
modifiedgame = netbuffer->u.servercfg.modifiedgame;
|
||||||
adminplayer = netbuffer->u.servercfg.adminplayer;
|
for (j = 0; j < 4; j++)
|
||||||
|
adminplayers[j] = netbuffer->u.servercfg.adminplayers[j];
|
||||||
|
j = 0;
|
||||||
memcpy(server_context, netbuffer->u.servercfg.server_context, 8);
|
memcpy(server_context, netbuffer->u.servercfg.server_context, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -282,7 +282,7 @@ typedef struct
|
||||||
|
|
||||||
UINT8 gametype;
|
UINT8 gametype;
|
||||||
UINT8 modifiedgame;
|
UINT8 modifiedgame;
|
||||||
SINT8 adminplayer; // Needs to be signed
|
SINT8 adminplayers[4]; // Needs to be signed
|
||||||
|
|
||||||
char server_context[8]; // Unique context id, generated at server startup.
|
char server_context[8]; // Unique context id, generated at server startup.
|
||||||
|
|
||||||
|
@ -321,7 +321,7 @@ typedef struct
|
||||||
UINT8 cheatsenabled;
|
UINT8 cheatsenabled;
|
||||||
UINT8 isdedicated;
|
UINT8 isdedicated;
|
||||||
UINT8 fileneedednum;
|
UINT8 fileneedednum;
|
||||||
SINT8 adminplayer;
|
SINT8 adminplayers[4];
|
||||||
tic_t time;
|
tic_t time;
|
||||||
tic_t leveltime;
|
tic_t leveltime;
|
||||||
char servername[MAXSERVERNAME];
|
char servername[MAXSERVERNAME];
|
||||||
|
|
117
src/d_netcmd.c
117
src/d_netcmd.c
|
@ -317,6 +317,7 @@ consvar_t cv_overtime = {"overtime", "Yes", CV_NETVAR, CV_YesNo, NULL, 0, NULL,
|
||||||
consvar_t cv_rollingdemos = {"rollingdemos", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_rollingdemos = {"rollingdemos", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
|
||||||
consvar_t cv_timetic = {"timerres", "Normal", CV_SAVE, timetic_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // use tics in display
|
consvar_t cv_timetic = {"timerres", "Normal", CV_SAVE, timetic_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // use tics in display
|
||||||
|
consvar_t cv_resetmusic = {"resetmusic", "No", CV_SAVE, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
|
||||||
static CV_PossibleValue_t pointlimit_cons_t[] = {{0, "MIN"}, {999999990, "MAX"}, {0, NULL}};
|
static CV_PossibleValue_t pointlimit_cons_t[] = {{0, "MIN"}, {999999990, "MAX"}, {0, NULL}};
|
||||||
consvar_t cv_pointlimit = {"pointlimit", "0", CV_NETVAR|CV_CALL|CV_NOINIT, pointlimit_cons_t,
|
consvar_t cv_pointlimit = {"pointlimit", "0", CV_NETVAR|CV_CALL|CV_NOINIT, pointlimit_cons_t,
|
||||||
|
@ -365,7 +366,7 @@ consvar_t cv_sleep = {"cpusleep", "-1", CV_SAVE, sleeping_cons_t, NULL, -1, NULL
|
||||||
INT16 gametype = GT_COOP;
|
INT16 gametype = GT_COOP;
|
||||||
boolean splitscreen = false;
|
boolean splitscreen = false;
|
||||||
boolean circuitmap = false;
|
boolean circuitmap = false;
|
||||||
INT32 adminplayer = -1;
|
INT32 adminplayers[] = { -1, -1, -1, -1 }; // Hardcoded to four admins for now.
|
||||||
|
|
||||||
/// \warning Keep this up-to-date if you add/remove/rename net text commands
|
/// \warning Keep this up-to-date if you add/remove/rename net text commands
|
||||||
const char *netxcmdnames[MAXNETXCMD - 1] =
|
const char *netxcmdnames[MAXNETXCMD - 1] =
|
||||||
|
@ -665,6 +666,8 @@ void D_RegisterClientCommands(void)
|
||||||
CV_RegisterVar(&cv_ghost_guest);
|
CV_RegisterVar(&cv_ghost_guest);
|
||||||
|
|
||||||
COM_AddCommand("displayplayer", Command_Displayplayer_f);
|
COM_AddCommand("displayplayer", Command_Displayplayer_f);
|
||||||
|
COM_AddCommand("tunes", Command_Tunes_f);
|
||||||
|
CV_RegisterVar(&cv_resetmusic);
|
||||||
|
|
||||||
// FIXME: not to be here.. but needs be done for config loading
|
// FIXME: not to be here.. but needs be done for config loading
|
||||||
CV_RegisterVar(&cv_usegamma);
|
CV_RegisterVar(&cv_usegamma);
|
||||||
|
@ -1005,7 +1008,7 @@ UINT8 CanChangeSkin(INT32 playernum)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Force skin in effect.
|
// Force skin in effect.
|
||||||
if (client && (cv_forceskin.value != -1) && !(adminplayer == playernum && serverplayer == -1))
|
if (client && (cv_forceskin.value != -1) && !(IsPlayerAdmin(playernum) && serverplayer == -1))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Can change skin in intermission and whatnot.
|
// Can change skin in intermission and whatnot.
|
||||||
|
@ -1156,7 +1159,7 @@ static void SendNameAndColor(void)
|
||||||
snacpending++;
|
snacpending++;
|
||||||
|
|
||||||
// Don't change name if muted
|
// Don't change name if muted
|
||||||
if (cv_mute.value && !(server || adminplayer == consoleplayer))
|
if (cv_mute.value && !(server || IsPlayerAdmin(consoleplayer)))
|
||||||
CV_StealthSet(&cv_playername, player_names[consoleplayer]);
|
CV_StealthSet(&cv_playername, player_names[consoleplayer]);
|
||||||
else // Cleanup name if changing it
|
else // Cleanup name if changing it
|
||||||
CleanupPlayerName(consoleplayer, cv_playername.zstring);
|
CleanupPlayerName(consoleplayer, cv_playername.zstring);
|
||||||
|
@ -1563,7 +1566,7 @@ void D_MapChange(INT32 mapnum, INT32 newgametype, boolean pultmode, boolean rese
|
||||||
mapchangepending = 0;
|
mapchangepending = 0;
|
||||||
// spawn the server if needed
|
// spawn the server if needed
|
||||||
// reset players if there is a new one
|
// reset players if there is a new one
|
||||||
if (!(adminplayer == consoleplayer))
|
if (!IsPlayerAdmin(consoleplayer))
|
||||||
{
|
{
|
||||||
if (SV_SpawnServer())
|
if (SV_SpawnServer())
|
||||||
buf[0] &= ~(1<<1);
|
buf[0] &= ~(1<<1);
|
||||||
|
@ -1621,7 +1624,7 @@ static void Command_Map_f(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (client && !(adminplayer == consoleplayer))
|
if (client && !IsPlayerAdmin(consoleplayer))
|
||||||
{
|
{
|
||||||
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
|
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
|
||||||
return;
|
return;
|
||||||
|
@ -1750,7 +1753,7 @@ static void Got_Mapcmd(UINT8 **cp, INT32 playernum)
|
||||||
INT32 resetplayer = 1, lastgametype;
|
INT32 resetplayer = 1, lastgametype;
|
||||||
UINT8 skipprecutscene, FLS;
|
UINT8 skipprecutscene, FLS;
|
||||||
|
|
||||||
if (playernum != serverplayer && playernum != adminplayer)
|
if (playernum != serverplayer && !IsPlayerAdmin(playernum))
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Illegal map change received from %s\n"), player_names[playernum]);
|
CONS_Alert(CONS_WARNING, M_GetText("Illegal map change received from %s\n"), player_names[playernum]);
|
||||||
if (server)
|
if (server)
|
||||||
|
@ -1848,7 +1851,7 @@ static void Command_Pause(void)
|
||||||
else
|
else
|
||||||
WRITEUINT8(cp, 0);
|
WRITEUINT8(cp, 0);
|
||||||
|
|
||||||
if (cv_pause.value || server || (adminplayer == consoleplayer))
|
if (cv_pause.value || server || (IsPlayerAdmin(consoleplayer)))
|
||||||
{
|
{
|
||||||
if (modeattacking || !(gamestate == GS_LEVEL || gamestate == GS_INTERMISSION))
|
if (modeattacking || !(gamestate == GS_LEVEL || gamestate == GS_INTERMISSION))
|
||||||
{
|
{
|
||||||
|
@ -1866,7 +1869,7 @@ static void Got_Pause(UINT8 **cp, INT32 playernum)
|
||||||
UINT8 dedicatedpause = false;
|
UINT8 dedicatedpause = false;
|
||||||
const char *playername;
|
const char *playername;
|
||||||
|
|
||||||
if (netgame && !cv_pause.value && playernum != serverplayer && playernum != adminplayer)
|
if (netgame && !cv_pause.value && playernum != serverplayer && !IsPlayerAdmin(playernum))
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Illegal pause command received from %s\n"), player_names[playernum]);
|
CONS_Alert(CONS_WARNING, M_GetText("Illegal pause command received from %s\n"), player_names[playernum]);
|
||||||
if (server)
|
if (server)
|
||||||
|
@ -1995,7 +1998,7 @@ static void Got_RandomSeed(UINT8 **cp, INT32 playernum)
|
||||||
*/
|
*/
|
||||||
static void Command_Clearscores_f(void)
|
static void Command_Clearscores_f(void)
|
||||||
{
|
{
|
||||||
if (!(server || (adminplayer == consoleplayer)))
|
if (!(server || (IsPlayerAdmin(consoleplayer))))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
SendNetXCmd(XD_CLEARSCORES, NULL, 1);
|
SendNetXCmd(XD_CLEARSCORES, NULL, 1);
|
||||||
|
@ -2015,7 +2018,7 @@ static void Got_Clearscores(UINT8 **cp, INT32 playernum)
|
||||||
INT32 i;
|
INT32 i;
|
||||||
|
|
||||||
(void)cp;
|
(void)cp;
|
||||||
if (playernum != serverplayer && playernum != adminplayer)
|
if (playernum != serverplayer && !IsPlayerAdmin(playernum))
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Illegal clear scores command received from %s\n"), player_names[playernum]);
|
CONS_Alert(CONS_WARNING, M_GetText("Illegal clear scores command received from %s\n"), player_names[playernum]);
|
||||||
if (server)
|
if (server)
|
||||||
|
@ -2236,7 +2239,7 @@ static void Command_ServerTeamChange_f(void)
|
||||||
UINT16 usvalue;
|
UINT16 usvalue;
|
||||||
NetPacket.value.l = NetPacket.value.b = 0;
|
NetPacket.value.l = NetPacket.value.b = 0;
|
||||||
|
|
||||||
if (!(server || (adminplayer == consoleplayer)))
|
if (!(server || (IsPlayerAdmin(consoleplayer))))
|
||||||
{
|
{
|
||||||
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
|
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
|
||||||
return;
|
return;
|
||||||
|
@ -2383,7 +2386,7 @@ static void Got_Teamchange(UINT8 **cp, INT32 playernum)
|
||||||
|
|
||||||
if (NetPacket.packet.verification) // Special marker that the server sent the request
|
if (NetPacket.packet.verification) // Special marker that the server sent the request
|
||||||
{
|
{
|
||||||
if (playernum != serverplayer && (playernum != adminplayer))
|
if (playernum != serverplayer && (!IsPlayerAdmin(playernum)))
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Illegal team change received from player %s\n"), player_names[playernum]);
|
CONS_Alert(CONS_WARNING, M_GetText("Illegal team change received from player %s\n"), player_names[playernum]);
|
||||||
if (server)
|
if (server)
|
||||||
|
@ -2422,7 +2425,7 @@ static void Got_Teamchange(UINT8 **cp, INT32 playernum)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (playernum != serverplayer && (playernum != adminplayer))
|
if (playernum != serverplayer && (!IsPlayerAdmin(playernum)))
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Illegal team change received from player %s\n"), player_names[playernum]);
|
CONS_Alert(CONS_WARNING, M_GetText("Illegal team change received from player %s\n"), player_names[playernum]);
|
||||||
if (server)
|
if (server)
|
||||||
|
@ -2746,6 +2749,53 @@ static void Got_Login(UINT8 **cp, INT32 playernum)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean IsPlayerAdmin(INT32 playernum)
|
||||||
|
{
|
||||||
|
INT32 i;
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
if (playernum == adminplayers[i])
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetAdminPlayer(INT32 playernum)
|
||||||
|
{
|
||||||
|
INT32 i;
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
if (playernum == adminplayers[i])
|
||||||
|
return; // Player is already admin
|
||||||
|
|
||||||
|
if (adminplayers[i] == -1)
|
||||||
|
{
|
||||||
|
adminplayers[i] = playernum; // Set the player to a free spot
|
||||||
|
break; // End the loop now. If it keeps going, the same player might get assigned to two slots.
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == 3 && adminplayers[i] != -1) // End of the loop and all slots are full
|
||||||
|
{
|
||||||
|
adminplayers[0] = playernum; // Overwrite the first slot
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClearAdminPlayers(void)
|
||||||
|
{
|
||||||
|
INT32 i;
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
adminplayers[i] = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RemoveAdminPlayer(INT32 playernum)
|
||||||
|
{
|
||||||
|
INT32 i;
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
if (playernum == adminplayers[i])
|
||||||
|
adminplayers[i] = -1;
|
||||||
|
}
|
||||||
|
|
||||||
static void Command_Verify_f(void)
|
static void Command_Verify_f(void)
|
||||||
{
|
{
|
||||||
XBOXSTATIC char buf[8]; // Should be plenty
|
XBOXSTATIC char buf[8]; // Should be plenty
|
||||||
|
@ -2794,7 +2844,7 @@ static void Got_Verification(UINT8 **cp, INT32 playernum)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
adminplayer = num;
|
SetAdminPlayer(num);
|
||||||
|
|
||||||
if (num != consoleplayer)
|
if (num != consoleplayer)
|
||||||
return;
|
return;
|
||||||
|
@ -2813,7 +2863,7 @@ static void Command_MotD_f(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(server || (adminplayer == consoleplayer)))
|
if (!(server || (IsPlayerAdmin(consoleplayer))))
|
||||||
{
|
{
|
||||||
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
|
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
|
||||||
return;
|
return;
|
||||||
|
@ -2860,7 +2910,7 @@ static void Got_MotD_f(UINT8 **cp, INT32 playernum)
|
||||||
if (!isprint(mymotd[i]) || mymotd[i] == ';')
|
if (!isprint(mymotd[i]) || mymotd[i] == ';')
|
||||||
kick = true;
|
kick = true;
|
||||||
|
|
||||||
if ((playernum != serverplayer && playernum != adminplayer) || kick)
|
if ((playernum != serverplayer && !IsPlayerAdmin(playernum)) || kick)
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Illegal motd change received from %s\n"), player_names[playernum]);
|
CONS_Alert(CONS_WARNING, M_GetText("Illegal motd change received from %s\n"), player_names[playernum]);
|
||||||
if (server)
|
if (server)
|
||||||
|
@ -2897,7 +2947,7 @@ static void Command_RunSOC(void)
|
||||||
else
|
else
|
||||||
fn = COM_Argv(1);
|
fn = COM_Argv(1);
|
||||||
|
|
||||||
if (netgame && !(server || consoleplayer == adminplayer))
|
if (netgame && !(server || IsPlayerAdmin(consoleplayer)))
|
||||||
{
|
{
|
||||||
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
|
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
|
||||||
return;
|
return;
|
||||||
|
@ -2923,7 +2973,7 @@ static void Got_RunSOCcmd(UINT8 **cp, INT32 playernum)
|
||||||
char filename[256];
|
char filename[256];
|
||||||
filestatus_t ncs = FS_NOTFOUND;
|
filestatus_t ncs = FS_NOTFOUND;
|
||||||
|
|
||||||
if (playernum != serverplayer && playernum != adminplayer)
|
if (playernum != serverplayer && !IsPlayerAdmin(playernum))
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Illegal runsoc command received from %s\n"), player_names[playernum]);
|
CONS_Alert(CONS_WARNING, M_GetText("Illegal runsoc command received from %s\n"), player_names[playernum]);
|
||||||
if (server)
|
if (server)
|
||||||
|
@ -2994,7 +3044,7 @@ static void Command_Addfile(void)
|
||||||
if (!musiconly)
|
if (!musiconly)
|
||||||
{
|
{
|
||||||
// ... But only so long as they contain nothing more then music and sprites.
|
// ... But only so long as they contain nothing more then music and sprites.
|
||||||
if (netgame && !(server || adminplayer == consoleplayer))
|
if (netgame && !(server || IsPlayerAdmin(consoleplayer)))
|
||||||
{
|
{
|
||||||
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
|
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
|
||||||
return;
|
return;
|
||||||
|
@ -3069,7 +3119,7 @@ static void Command_Addfile(void)
|
||||||
WRITEMEM(buf_p, md5sum, 16);
|
WRITEMEM(buf_p, md5sum, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (adminplayer == consoleplayer) // Request to add file
|
if (IsPlayerAdmin(consoleplayer)) // Request to add file
|
||||||
SendNetXCmd(XD_REQADDFILE, buf, buf_p - buf);
|
SendNetXCmd(XD_REQADDFILE, buf, buf_p - buf);
|
||||||
else
|
else
|
||||||
SendNetXCmd(XD_ADDFILE, buf, buf_p - buf);
|
SendNetXCmd(XD_ADDFILE, buf, buf_p - buf);
|
||||||
|
@ -3118,7 +3168,7 @@ static void Got_RequestAddfilecmd(UINT8 **cp, INT32 playernum)
|
||||||
UINT8 md5sum[16];
|
UINT8 md5sum[16];
|
||||||
boolean kick = false;
|
boolean kick = false;
|
||||||
boolean toomany = false;
|
boolean toomany = false;
|
||||||
INT32 i;
|
INT32 i,j;
|
||||||
size_t packetsize = 0;
|
size_t packetsize = 0;
|
||||||
serverinfo_pak *dummycheck = NULL;
|
serverinfo_pak *dummycheck = NULL;
|
||||||
|
|
||||||
|
@ -3137,7 +3187,7 @@ static void Got_RequestAddfilecmd(UINT8 **cp, INT32 playernum)
|
||||||
if (!isprint(filename[i]) || filename[i] == ';')
|
if (!isprint(filename[i]) || filename[i] == ';')
|
||||||
kick = true;
|
kick = true;
|
||||||
|
|
||||||
if ((playernum != serverplayer && playernum != adminplayer) || kick)
|
if ((playernum != serverplayer && !IsPlayerAdmin(playernum)) || kick)
|
||||||
{
|
{
|
||||||
XBOXSTATIC UINT8 buf[2];
|
XBOXSTATIC UINT8 buf[2];
|
||||||
|
|
||||||
|
@ -3176,8 +3226,9 @@ static void Got_RequestAddfilecmd(UINT8 **cp, INT32 playernum)
|
||||||
|
|
||||||
CONS_Printf("%s",message);
|
CONS_Printf("%s",message);
|
||||||
|
|
||||||
if (adminplayer)
|
for (j = 0; j < 4; j++)
|
||||||
COM_BufAddText(va("sayto %d %s", adminplayer, message));
|
if (adminplayers[j])
|
||||||
|
COM_BufAddText(va("sayto %d %s", adminplayers[j], message));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -3571,7 +3622,7 @@ void D_GameTypeChanged(INT32 lastgametype)
|
||||||
if (playeringame[i])
|
if (playeringame[i])
|
||||||
players[i].ctfteam = 0;
|
players[i].ctfteam = 0;
|
||||||
|
|
||||||
if (server || (adminplayer == consoleplayer))
|
if (server || (IsPlayerAdmin(consoleplayer)))
|
||||||
{
|
{
|
||||||
CV_StealthSetValue(&cv_teamscramble, 0);
|
CV_StealthSetValue(&cv_teamscramble, 0);
|
||||||
teamscramble = 0;
|
teamscramble = 0;
|
||||||
|
@ -3654,7 +3705,7 @@ static void TeamScramble_OnChange(void)
|
||||||
if (!cv_teamscramble.value)
|
if (!cv_teamscramble.value)
|
||||||
teamscramble = 0;
|
teamscramble = 0;
|
||||||
|
|
||||||
if (!G_GametypeHasTeams() && (server || consoleplayer == adminplayer))
|
if (!G_GametypeHasTeams() && (server || IsPlayerAdmin(consoleplayer)))
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_NOTICE, M_GetText("This command cannot be used in this gametype.\n"));
|
CONS_Alert(CONS_NOTICE, M_GetText("This command cannot be used in this gametype.\n"));
|
||||||
CV_StealthSetValue(&cv_teamscramble, 0);
|
CV_StealthSetValue(&cv_teamscramble, 0);
|
||||||
|
@ -3833,7 +3884,7 @@ static void Command_ExitLevel_f(void)
|
||||||
{
|
{
|
||||||
if (!(netgame || (multiplayer && gametype != GT_COOP)) && !cv_debug)
|
if (!(netgame || (multiplayer && gametype != GT_COOP)) && !cv_debug)
|
||||||
CONS_Printf(M_GetText("This only works in a netgame.\n"));
|
CONS_Printf(M_GetText("This only works in a netgame.\n"));
|
||||||
else if (!(server || (adminplayer == consoleplayer)))
|
else if (!(server || (IsPlayerAdmin(consoleplayer))))
|
||||||
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
|
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
|
||||||
else if (gamestate != GS_LEVEL || demoplayback)
|
else if (gamestate != GS_LEVEL || demoplayback)
|
||||||
CONS_Printf(M_GetText("You must be in a level to use this.\n"));
|
CONS_Printf(M_GetText("You must be in a level to use this.\n"));
|
||||||
|
@ -3849,7 +3900,7 @@ static void Got_ExitLevelcmd(UINT8 **cp, INT32 playernum)
|
||||||
if (gameaction == ga_completed)
|
if (gameaction == ga_completed)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (playernum != serverplayer && playernum != adminplayer)
|
if (playernum != serverplayer && !IsPlayerAdmin(playernum))
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Illegal exitlevel command received from %s\n"), player_names[playernum]);
|
CONS_Alert(CONS_WARNING, M_GetText("Illegal exitlevel command received from %s\n"), player_names[playernum]);
|
||||||
if (server)
|
if (server)
|
||||||
|
@ -3954,7 +4005,7 @@ static void Command_Cheats_f(void)
|
||||||
{
|
{
|
||||||
if (COM_CheckParm("off"))
|
if (COM_CheckParm("off"))
|
||||||
{
|
{
|
||||||
if (!(server || (adminplayer == consoleplayer)))
|
if (!(server || (IsPlayerAdmin(consoleplayer))))
|
||||||
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
|
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
|
||||||
else
|
else
|
||||||
CV_ResetCheatNetVars();
|
CV_ResetCheatNetVars();
|
||||||
|
@ -3964,7 +4015,7 @@ static void Command_Cheats_f(void)
|
||||||
if (CV_CheatsEnabled())
|
if (CV_CheatsEnabled())
|
||||||
{
|
{
|
||||||
CONS_Printf(M_GetText("At least one CHEAT-marked variable has been changed -- Cheats are enabled.\n"));
|
CONS_Printf(M_GetText("At least one CHEAT-marked variable has been changed -- Cheats are enabled.\n"));
|
||||||
if (server || (adminplayer == consoleplayer))
|
if (server || (IsPlayerAdmin(consoleplayer)))
|
||||||
CONS_Printf(M_GetText("Type CHEATS OFF to reset all cheat variables to default.\n"));
|
CONS_Printf(M_GetText("Type CHEATS OFF to reset all cheat variables to default.\n"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -4033,7 +4084,7 @@ static void Command_Archivetest_f(void)
|
||||||
*/
|
*/
|
||||||
static void ForceSkin_OnChange(void)
|
static void ForceSkin_OnChange(void)
|
||||||
{
|
{
|
||||||
if ((server || adminplayer == consoleplayer) && (cv_forceskin.value < -1 || cv_forceskin.value >= numskins))
|
if ((server || IsPlayerAdmin(consoleplayer)) && (cv_forceskin.value < -1 || cv_forceskin.value >= numskins))
|
||||||
{
|
{
|
||||||
if (cv_forceskin.value == -2)
|
if (cv_forceskin.value == -2)
|
||||||
CV_SetValue(&cv_forceskin, numskins-1);
|
CV_SetValue(&cv_forceskin, numskins-1);
|
||||||
|
@ -4063,7 +4114,7 @@ static void ForceSkin_OnChange(void)
|
||||||
//Allows the player's name to be changed if cv_mute is off.
|
//Allows the player's name to be changed if cv_mute is off.
|
||||||
static void Name_OnChange(void)
|
static void Name_OnChange(void)
|
||||||
{
|
{
|
||||||
if (cv_mute.value && !(server || adminplayer == consoleplayer))
|
if (cv_mute.value && !(server || IsPlayerAdmin(consoleplayer)))
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_NOTICE, M_GetText("You may not change your name when chat is muted.\n"));
|
CONS_Alert(CONS_NOTICE, M_GetText("You may not change your name when chat is muted.\n"));
|
||||||
CV_StealthSet(&cv_playername, player_names[consoleplayer]);
|
CV_StealthSet(&cv_playername, player_names[consoleplayer]);
|
||||||
|
@ -4186,7 +4237,7 @@ static void Color2_OnChange(void)
|
||||||
*/
|
*/
|
||||||
static void Mute_OnChange(void)
|
static void Mute_OnChange(void)
|
||||||
{
|
{
|
||||||
if (server || (adminplayer == consoleplayer))
|
if (server || (IsPlayerAdmin(consoleplayer)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (cv_mute.value)
|
if (cv_mute.value)
|
||||||
|
|
|
@ -38,6 +38,7 @@ extern consvar_t cv_joyport2;
|
||||||
#endif
|
#endif
|
||||||
extern consvar_t cv_joyscale;
|
extern consvar_t cv_joyscale;
|
||||||
extern consvar_t cv_joyscale2;
|
extern consvar_t cv_joyscale2;
|
||||||
|
extern consvar_t cv_controlperkey;
|
||||||
|
|
||||||
// splitscreen with second mouse
|
// splitscreen with second mouse
|
||||||
extern consvar_t cv_mouse2port;
|
extern consvar_t cv_mouse2port;
|
||||||
|
@ -45,6 +46,11 @@ extern consvar_t cv_usemouse2;
|
||||||
#if (defined (__unix__) && !defined (MSDOS)) || defined (UNIXCOMMON)
|
#if (defined (__unix__) && !defined (MSDOS)) || defined (UNIXCOMMON)
|
||||||
extern consvar_t cv_mouse2opt;
|
extern consvar_t cv_mouse2opt;
|
||||||
#endif
|
#endif
|
||||||
|
extern consvar_t cv_invertmouse2;
|
||||||
|
extern consvar_t cv_alwaysfreelook2;
|
||||||
|
extern consvar_t cv_mousemove2;
|
||||||
|
extern consvar_t cv_mousesens2;
|
||||||
|
extern consvar_t cv_mouseysens2;
|
||||||
|
|
||||||
// normally in p_mobj but the .h is not read
|
// normally in p_mobj but the .h is not read
|
||||||
extern consvar_t cv_itemrespawntime;
|
extern consvar_t cv_itemrespawntime;
|
||||||
|
@ -70,6 +76,9 @@ extern consvar_t cv_autobalance;
|
||||||
extern consvar_t cv_teamscramble;
|
extern consvar_t cv_teamscramble;
|
||||||
extern consvar_t cv_scrambleonchange;
|
extern consvar_t cv_scrambleonchange;
|
||||||
|
|
||||||
|
extern consvar_t cv_useranalog, cv_useranalog2;
|
||||||
|
extern consvar_t cv_analog, cv_analog2;
|
||||||
|
|
||||||
extern consvar_t cv_netstat;
|
extern consvar_t cv_netstat;
|
||||||
#ifdef WALLSPLATS
|
#ifdef WALLSPLATS
|
||||||
extern consvar_t cv_splats;
|
extern consvar_t cv_splats;
|
||||||
|
@ -99,6 +108,8 @@ extern consvar_t cv_startinglives;
|
||||||
// for F_finale.c
|
// for F_finale.c
|
||||||
extern consvar_t cv_rollingdemos;
|
extern consvar_t cv_rollingdemos;
|
||||||
|
|
||||||
|
extern consvar_t cv_resetmusic;
|
||||||
|
|
||||||
extern consvar_t cv_ringslinger, cv_soundtest;
|
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;
|
||||||
|
@ -109,7 +120,17 @@ extern consvar_t cv_maxping;
|
||||||
|
|
||||||
extern consvar_t cv_skipmapcheck;
|
extern consvar_t cv_skipmapcheck;
|
||||||
|
|
||||||
extern consvar_t cv_sleep;
|
extern consvar_t cv_sleep, cv_screenshot_option, cv_screenshot_folder;
|
||||||
|
|
||||||
|
extern consvar_t cv_moviemode;
|
||||||
|
|
||||||
|
extern consvar_t cv_zlib_level, cv_zlib_memory, cv_zlib_strategy;
|
||||||
|
|
||||||
|
extern consvar_t cv_zlib_window_bits, cv_zlib_levela, cv_zlib_memorya;
|
||||||
|
|
||||||
|
extern consvar_t cv_zlib_strategya, cv_zlib_window_bitsa;
|
||||||
|
|
||||||
|
extern consvar_t cv_apng_delay;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
@ -190,6 +211,11 @@ void Command_ExitGame_f(void);
|
||||||
void Command_Retry_f(void);
|
void Command_Retry_f(void);
|
||||||
void D_GameTypeChanged(INT32 lastgametype); // not a real _OnChange function anymore
|
void D_GameTypeChanged(INT32 lastgametype); // not a real _OnChange function anymore
|
||||||
void D_MapChange(INT32 pmapnum, INT32 pgametype, boolean pultmode, boolean presetplayers, INT32 pdelay, boolean pskipprecutscene, boolean pfromlevelselect);
|
void D_MapChange(INT32 pmapnum, INT32 pgametype, boolean pultmode, boolean presetplayers, INT32 pdelay, boolean pskipprecutscene, boolean pfromlevelselect);
|
||||||
|
void ObjectPlace_OnChange(void);
|
||||||
|
boolean IsPlayerAdmin(INT32 playernum);
|
||||||
|
void SetAdminPlayer(INT32 playernum);
|
||||||
|
void ClearAdminPlayers(void);
|
||||||
|
void RemoveAdminPlayer(INT32 playernum);
|
||||||
void ItemFinder_OnChange(void);
|
void ItemFinder_OnChange(void);
|
||||||
void D_SetPassword(const char *pw);
|
void D_SetPassword(const char *pw);
|
||||||
|
|
||||||
|
|
|
@ -8270,9 +8270,9 @@ static inline int lib_getenum(lua_State *L)
|
||||||
LUA_PushUserdata(L, &players[serverplayer], META_PLAYER);
|
LUA_PushUserdata(L, &players[serverplayer], META_PLAYER);
|
||||||
return 1;
|
return 1;
|
||||||
} else if (fastcmp(word,"admin")) {
|
} else if (fastcmp(word,"admin")) {
|
||||||
if (!playeringame[adminplayer] || adminplayer == serverplayer)
|
//if (!playeringame[adminplayer] || IsPlayerAdmin(serverplayer))
|
||||||
return 0;
|
//return 0;
|
||||||
LUA_PushUserdata(L, &players[adminplayer], META_PLAYER);
|
//LUA_PushUserdata(L, &players[adminplayer], META_PLAYER);
|
||||||
return 1;
|
return 1;
|
||||||
} else if (fastcmp(word,"emeralds")) {
|
} else if (fastcmp(word,"emeralds")) {
|
||||||
lua_pushinteger(L, emeralds);
|
lua_pushinteger(L, emeralds);
|
||||||
|
|
|
@ -476,7 +476,8 @@ extern consvar_t cv_timetic; // display high resolution timer
|
||||||
extern consvar_t cv_forceskin; // force clients to use the server's skin
|
extern consvar_t cv_forceskin; // force clients to use the server's skin
|
||||||
extern consvar_t cv_downloading; // allow clients to downloading WADs.
|
extern consvar_t cv_downloading; // allow clients to downloading WADs.
|
||||||
extern ticcmd_t netcmds[BACKUPTICS][MAXPLAYERS];
|
extern ticcmd_t netcmds[BACKUPTICS][MAXPLAYERS];
|
||||||
extern INT32 adminplayer, serverplayer;
|
extern INT32 serverplayer;
|
||||||
|
extern INT32 adminplayers[4];
|
||||||
|
|
||||||
/// \note put these in d_clisrv outright?
|
/// \note put these in d_clisrv outright?
|
||||||
|
|
||||||
|
|
|
@ -1848,7 +1848,7 @@ void F_CutsceneTicker(void)
|
||||||
|
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
{
|
{
|
||||||
if (netgame && i != serverplayer && i != adminplayer)
|
if (netgame && i != serverplayer && !IsPlayerAdmin(i))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (players[i].cmd.buttons & BT_USE)
|
if (players[i].cmd.buttons & BT_USE)
|
||||||
|
|
|
@ -347,14 +347,14 @@ static void DoSayCommand(SINT8 target, size_t usedargs, UINT8 flags)
|
||||||
numwords = COM_Argc() - usedargs;
|
numwords = COM_Argc() - usedargs;
|
||||||
I_Assert(numwords > 0);
|
I_Assert(numwords > 0);
|
||||||
|
|
||||||
if (cv_mute.value && !(server || adminplayer == consoleplayer))
|
if (cv_mute.value && !(server || IsPlayerAdmin(consoleplayer)))
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_NOTICE, M_GetText("The chat is muted. You can't say anything at the moment.\n"));
|
CONS_Alert(CONS_NOTICE, M_GetText("The chat is muted. You can't say anything at the moment.\n"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only servers/admins can CSAY.
|
// Only servers/admins can CSAY.
|
||||||
if(!server && adminplayer != consoleplayer)
|
if(!server && IsPlayerAdmin(consoleplayer))
|
||||||
flags &= ~HU_CSAY;
|
flags &= ~HU_CSAY;
|
||||||
|
|
||||||
// We handle HU_SERVER_SAY, not the caller.
|
// We handle HU_SERVER_SAY, not the caller.
|
||||||
|
@ -448,7 +448,7 @@ static void Command_CSay_f(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!server && adminplayer != consoleplayer)
|
if(!server && !IsPlayerAdmin(consoleplayer))
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_NOTICE, M_GetText("Only servers and admins can use csay.\n"));
|
CONS_Alert(CONS_NOTICE, M_GetText("Only servers and admins can use csay.\n"));
|
||||||
return;
|
return;
|
||||||
|
@ -477,7 +477,7 @@ static void Got_Saycmd(UINT8 **p, INT32 playernum)
|
||||||
msg = (char *)*p;
|
msg = (char *)*p;
|
||||||
SKIPSTRING(*p);
|
SKIPSTRING(*p);
|
||||||
|
|
||||||
if ((cv_mute.value || flags & (HU_CSAY|HU_SERVER_SAY)) && playernum != serverplayer && playernum != adminplayer)
|
if ((cv_mute.value || flags & (HU_CSAY|HU_SERVER_SAY)) && playernum != serverplayer && !IsPlayerAdmin(playernum))
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_WARNING, cv_mute.value ?
|
CONS_Alert(CONS_WARNING, cv_mute.value ?
|
||||||
M_GetText("Illegal say command received from %s while muted\n") : M_GetText("Illegal csay command received from non-admin %s\n"),
|
M_GetText("Illegal say command received from %s while muted\n") : M_GetText("Illegal csay command received from non-admin %s\n"),
|
||||||
|
@ -575,7 +575,7 @@ static void Got_Saycmd(UINT8 **p, INT32 playernum)
|
||||||
// Give admins and remote admins their symbols.
|
// Give admins and remote admins their symbols.
|
||||||
if (playernum == serverplayer)
|
if (playernum == serverplayer)
|
||||||
tempchar = (char *)Z_Calloc(strlen(cstart) + strlen(adminchar) + 1, PU_STATIC, NULL);
|
tempchar = (char *)Z_Calloc(strlen(cstart) + strlen(adminchar) + 1, PU_STATIC, NULL);
|
||||||
else if (playernum == adminplayer)
|
else if (IsPlayerAdmin(playernum))
|
||||||
tempchar = (char *)Z_Calloc(strlen(cstart) + strlen(remotechar) + 1, PU_STATIC, NULL);
|
tempchar = (char *)Z_Calloc(strlen(cstart) + strlen(remotechar) + 1, PU_STATIC, NULL);
|
||||||
if (tempchar)
|
if (tempchar)
|
||||||
{
|
{
|
||||||
|
@ -710,7 +710,7 @@ static void HU_queueChatChar(char c)
|
||||||
} while (c);
|
} while (c);
|
||||||
|
|
||||||
// last minute mute check
|
// last minute mute check
|
||||||
if (cv_mute.value && !(server || adminplayer == consoleplayer))
|
if (cv_mute.value && !(server || IsPlayerAdmin(consoleplayer)))
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_NOTICE, M_GetText("The chat is muted. You can't say anything at the moment.\n"));
|
CONS_Alert(CONS_NOTICE, M_GetText("The chat is muted. You can't say anything at the moment.\n"));
|
||||||
return;
|
return;
|
||||||
|
@ -768,9 +768,9 @@ boolean HU_Responder(event_t *ev)
|
||||||
{
|
{
|
||||||
// enter chat mode
|
// enter chat mode
|
||||||
if ((ev->data1 == gamecontrol[gc_talkkey][0] || ev->data1 == gamecontrol[gc_talkkey][1])
|
if ((ev->data1 == gamecontrol[gc_talkkey][0] || ev->data1 == gamecontrol[gc_talkkey][1])
|
||||||
&& netgame && (!cv_mute.value || server || (adminplayer == consoleplayer)))
|
&& netgame && (!cv_mute.value || server || IsPlayerAdmin(consoleplayer)))
|
||||||
{
|
{
|
||||||
if (cv_mute.value && !(server || adminplayer == consoleplayer))
|
if (cv_mute.value && !(server || IsPlayerAdmin(consoleplayer)))
|
||||||
return false;
|
return false;
|
||||||
chat_on = true;
|
chat_on = true;
|
||||||
w_chat[0] = 0;
|
w_chat[0] = 0;
|
||||||
|
@ -778,9 +778,9 @@ boolean HU_Responder(event_t *ev)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if ((ev->data1 == gamecontrol[gc_teamkey][0] || ev->data1 == gamecontrol[gc_teamkey][1])
|
if ((ev->data1 == gamecontrol[gc_teamkey][0] || ev->data1 == gamecontrol[gc_teamkey][1])
|
||||||
&& netgame && (!cv_mute.value || server || (adminplayer == consoleplayer)))
|
&& netgame && (!cv_mute.value || server || (IsPlayerAdmin(consoleplayer))))
|
||||||
{
|
{
|
||||||
if (cv_mute.value && !(server || adminplayer == consoleplayer))
|
if (cv_mute.value && !(server || IsPlayerAdmin(consoleplayer)))
|
||||||
return false;
|
return false;
|
||||||
chat_on = true;
|
chat_on = true;
|
||||||
w_chat[0] = 0;
|
w_chat[0] = 0;
|
||||||
|
|
|
@ -55,7 +55,7 @@ void Got_Luacmd(UINT8 **cp, INT32 playernum)
|
||||||
lua_pop(gL, 1); // pop flags
|
lua_pop(gL, 1); // pop flags
|
||||||
|
|
||||||
// requires server/admin and the player is not one of them
|
// requires server/admin and the player is not one of them
|
||||||
if ((flags & 1) && playernum != serverplayer && playernum != adminplayer)
|
if ((flags & 1) && playernum != serverplayer && !IsPlayerAdmin(playernum))
|
||||||
goto deny;
|
goto deny;
|
||||||
|
|
||||||
lua_rawgeti(gL, -1, 1); // push function from command info table
|
lua_rawgeti(gL, -1, 1); // push function from command info table
|
||||||
|
@ -133,7 +133,7 @@ void COM_Lua_f(void)
|
||||||
UINT8 argc;
|
UINT8 argc;
|
||||||
lua_pop(gL, 1); // pop command info table
|
lua_pop(gL, 1); // pop command info table
|
||||||
|
|
||||||
if (flags & 1 && !server && adminplayer != playernum) // flag 1: only server/admin can use this command.
|
if (flags & 1 && !server && !IsPlayerAdmin(playernum)) // flag 1: only server/admin can use this command.
|
||||||
{
|
{
|
||||||
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
|
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -2576,7 +2576,7 @@ void M_StartControlPanel(void)
|
||||||
MPauseMenu[mpause_switchteam].status = IT_DISABLED;
|
MPauseMenu[mpause_switchteam].status = IT_DISABLED;
|
||||||
MPauseMenu[mpause_psetup].status = IT_DISABLED;
|
MPauseMenu[mpause_psetup].status = IT_DISABLED;
|
||||||
|
|
||||||
if ((server || adminplayer == consoleplayer))
|
if ((server || IsPlayerAdmin(consoleplayer)))
|
||||||
{
|
{
|
||||||
MPauseMenu[mpause_switchmap].status = IT_STRING | IT_CALL;
|
MPauseMenu[mpause_switchmap].status = IT_STRING | IT_CALL;
|
||||||
if (G_GametypeHasTeams())
|
if (G_GametypeHasTeams())
|
||||||
|
@ -3917,7 +3917,7 @@ static void M_Options(INT32 choice)
|
||||||
(void)choice;
|
(void)choice;
|
||||||
|
|
||||||
// if the player is not admin or server, disable server options
|
// if the player is not admin or server, disable server options
|
||||||
OP_MainMenu[5].status = (Playing() && !(server || adminplayer == consoleplayer)) ? (IT_GRAYEDOUT) : (IT_STRING|IT_SUBMENU);
|
OP_MainMenu[5].status = (Playing() && !(server || IsPlayerAdmin(consoleplayer))) ? (IT_GRAYEDOUT) : (IT_STRING|IT_SUBMENU);
|
||||||
|
|
||||||
// if the player is playing _at all_, disable the erase data options
|
// if the player is playing _at all_, disable the erase data options
|
||||||
OP_DataOptionsMenu[1].status = (Playing()) ? (IT_GRAYEDOUT) : (IT_STRING|IT_SUBMENU);
|
OP_DataOptionsMenu[1].status = (Playing()) ? (IT_GRAYEDOUT) : (IT_STRING|IT_SUBMENU);
|
||||||
|
|
|
@ -2441,7 +2441,7 @@ void SetPlayerSkin(INT32 playernum, const char *skinname)
|
||||||
|
|
||||||
if (P_IsLocalPlayer(player))
|
if (P_IsLocalPlayer(player))
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Skin '%s' not found.\n"), skinname);
|
CONS_Alert(CONS_WARNING, M_GetText("Skin '%s' not found.\n"), skinname);
|
||||||
else if(server || adminplayer == consoleplayer)
|
else if(server || IsPlayerAdmin(consoleplayer))
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Player %d (%s) skin '%s' not found\n"), playernum, player_names[playernum], skinname);
|
CONS_Alert(CONS_WARNING, M_GetText("Player %d (%s) skin '%s' not found\n"), playernum, player_names[playernum], skinname);
|
||||||
|
|
||||||
SetPlayerSkinByNum(playernum, 0);
|
SetPlayerSkinByNum(playernum, 0);
|
||||||
|
@ -2499,7 +2499,7 @@ void SetPlayerSkinByNum(INT32 playernum, INT32 skinnum)
|
||||||
|
|
||||||
if (P_IsLocalPlayer(player))
|
if (P_IsLocalPlayer(player))
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Skin %d not found\n"), skinnum);
|
CONS_Alert(CONS_WARNING, M_GetText("Skin %d not found\n"), skinnum);
|
||||||
else if(server || adminplayer == consoleplayer)
|
else if(server || IsPlayerAdmin(consoleplayer))
|
||||||
CONS_Alert(CONS_WARNING, "Player %d (%s) skin %d not found\n", playernum, player_names[playernum], skinnum);
|
CONS_Alert(CONS_WARNING, "Player %d (%s) skin %d not found\n", playernum, player_names[playernum], skinnum);
|
||||||
SetPlayerSkinByNum(playernum, 0); // not found put the sonic skin
|
SetPlayerSkinByNum(playernum, 0); // not found put the sonic skin
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue