mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-24 11:02:48 +00:00
Playsound command
For scripted global sound cues for the entire server.
This commit is contained in:
parent
70c48fc0e9
commit
f571e559d4
3 changed files with 106 additions and 33 deletions
|
|
@ -539,41 +539,43 @@ INT32 adminplayers[MAXPLAYERS];
|
|||
/// \warning Keep this up-to-date if you add/remove/rename net text commands
|
||||
const char *netxcmdnames[MAXNETXCMD - 1] =
|
||||
{
|
||||
"NAMEANDCOLOR",
|
||||
"WEAPONPREF",
|
||||
"KICK",
|
||||
"NETVAR",
|
||||
"SAY",
|
||||
"MAP",
|
||||
"EXITLEVEL",
|
||||
"ADDFILE",
|
||||
"PAUSE",
|
||||
"ADDPLAYER",
|
||||
"TEAMCHANGE",
|
||||
"CLEARSCORES",
|
||||
"VERIFIED",
|
||||
"RANDOMSEED",
|
||||
"RUNSOC",
|
||||
"REQADDFILE",
|
||||
"SETMOTD",
|
||||
"RESPAWN",
|
||||
"DEMOTED",
|
||||
"LUACMD",
|
||||
"LUAVAR",
|
||||
"LUAFILE",
|
||||
"NAMEANDCOLOR", // XD_NAMEANDCOLOR
|
||||
"WEAPONPREF", // XD_WEAPONPREF
|
||||
"KICK", // XD_KICK
|
||||
"NETVAR", // XD_NETVAR
|
||||
"SAY", // XD_SAY
|
||||
"MAP", // XD_MAP
|
||||
"EXITLEVEL", // XD_EXITLEVEL
|
||||
"ADDFILE", // XD_ADDFILE
|
||||
"PAUSE", // XD_PAUSE
|
||||
"ADDPLAYER", // XD_ADDPLAYER
|
||||
"TEAMCHANGE", // XD_TEAMCHANGE
|
||||
"CLEARSCORES", // XD_CLEARSCORES
|
||||
"VERIFIED", // XD_VERIFIED
|
||||
"RANDOMSEED", // XD_RANDOMSEED
|
||||
"RUNSOC", // XD_RUNSOC
|
||||
"REQADDFILE", // XD_REQADDFILE
|
||||
"SETMOTD", // XD_SETMOTD
|
||||
"RESPAWN", // XD_RESPAWN
|
||||
"DEMOTED", // XD_DEMOTED
|
||||
"LUACMD", // XD_LUACMD
|
||||
"LUAVAR", // XD_LUAVAR
|
||||
"LUAFILE", // XD_LUAFILE
|
||||
|
||||
// SRB2Kart
|
||||
"SETUPVOTE",
|
||||
"MODIFYVOTE",
|
||||
"PICKVOTE",
|
||||
"REMOVEPLAYER",
|
||||
"POWERLEVEL",
|
||||
"PARTYINVITE",
|
||||
"ACCEPTPARTYINVITE",
|
||||
"LEAVEPARTY",
|
||||
"CANCELPARTYINVITE",
|
||||
"GIVEITEM",
|
||||
"ADDBOT"
|
||||
"SETUPVOTE", // XD_SETUPVOTE
|
||||
"MODIFYVOTE", // XD_MODIFYVOTE
|
||||
"PICKVOTE", // XD_PICKVOTE
|
||||
"REMOVEPLAYER", // XD_REMOVEPLAYER
|
||||
"POWERLEVEL", // XD_POWERLEVEL
|
||||
"PARTYINVITE", // XD_PARTYINVITE
|
||||
"ACCEPTPARTYINVITE", // XD_ACCEPTPARTYINVITE
|
||||
"LEAVEPARTY", // XD_LEAVEPARTY
|
||||
"CANCELPARTYINVITE", // XD_CANCELPARTYINVITE
|
||||
"GIVEITEM", // XD_GIVEITEM
|
||||
"ADDBOT", // XD_ADDBOT
|
||||
"DISCORD", // XD_DISCORD
|
||||
"PLAYSOUND" // XD_PLAYSOUND
|
||||
};
|
||||
|
||||
// =========================================================================
|
||||
|
|
|
|||
|
|
@ -158,6 +158,7 @@ typedef enum
|
|||
XD_GIVEITEM, // 32
|
||||
XD_ADDBOT, // 33
|
||||
XD_DISCORD, // 34
|
||||
XD_PLAYSOUND, // 35
|
||||
|
||||
MAXNETXCMD
|
||||
} netxcmd_t;
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
#include "m_cond.h" // for conditionsets
|
||||
#include "lua_hook.h" // MusicChange hook
|
||||
#include "k_boss.h" // bossinfo
|
||||
#include "byteptr.h"
|
||||
|
||||
#ifdef HW3SOUND
|
||||
// 3D Sound Interface
|
||||
|
|
@ -43,6 +44,8 @@ CV_PossibleValue_t soundvolume_cons_t[] = {{0, "MIN"}, {MAX_VOLUME, "MAX"}, {0,
|
|||
static void SetChannelsNum(void);
|
||||
static void Command_Tunes_f(void);
|
||||
static void Command_RestartAudio_f(void);
|
||||
static void Command_PlaySound(void);
|
||||
static void Got_PlaySound(UINT8 **p, INT32 playernum);
|
||||
|
||||
// Sound system toggles
|
||||
static void GameSounds_OnChange(void);
|
||||
|
|
@ -268,6 +271,8 @@ void S_RegisterSoundStuff(void)
|
|||
|
||||
COM_AddCommand("tunes", Command_Tunes_f);
|
||||
COM_AddCommand("restartaudio", Command_RestartAudio_f);
|
||||
COM_AddCommand("playsound", Command_PlaySound);
|
||||
RegisterNetXCmd(XD_PLAYSOUND, Got_PlaySound);
|
||||
}
|
||||
|
||||
static void SetChannelsNum(void)
|
||||
|
|
@ -2469,6 +2474,71 @@ static void Command_RestartAudio_f(void)
|
|||
S_ChangeMusicInternal("titles", looptitle);
|
||||
}
|
||||
|
||||
static void Command_PlaySound(void)
|
||||
{
|
||||
const char *sound;
|
||||
const size_t argc = COM_Argc();
|
||||
sfxenum_t sfx = NUMSFX;
|
||||
UINT8 buf[4];
|
||||
UINT8 *buf_p = buf;
|
||||
|
||||
if (argc < 2)
|
||||
{
|
||||
CONS_Printf("playsound <name/num>: Plays a sound effect for the entire server.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (client && !IsPlayerAdmin(consoleplayer))
|
||||
{
|
||||
CONS_Printf("This can only be used by the server host.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
sound = COM_Argv(1);
|
||||
if (*sound >= '0' && *sound <= '9')
|
||||
{
|
||||
sfx = atoi(sound);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (sfx = 0; sfx < NUMSFX; sfx++)
|
||||
{
|
||||
if (S_sfx[sfx].name && fasticmp(sound, S_sfx[sfx].name))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (sfx < 0 || sfx >= NUMSFX)
|
||||
{
|
||||
CONS_Printf("Could not find sound effect named \"sfx_%s\".\n", sound);
|
||||
return;
|
||||
}
|
||||
|
||||
WRITEINT32(buf_p, sfx);
|
||||
SendNetXCmd(XD_PLAYSOUND, buf, buf_p - buf);
|
||||
}
|
||||
|
||||
static void Got_PlaySound(UINT8 **cp, INT32 playernum)
|
||||
{
|
||||
INT32 sound_id = READINT32(*cp);
|
||||
|
||||
if (playernum != serverplayer && !IsPlayerAdmin(playernum)) // hacked client, or disasterous bug
|
||||
{
|
||||
CONS_Alert(CONS_WARNING, M_GetText("Illegal playsound received from %s (serverplayer is %s)\n"), player_names[playernum], player_names[serverplayer]);
|
||||
if (server)
|
||||
SendKick(playernum, KICK_MSG_CON_FAIL);
|
||||
return;
|
||||
}
|
||||
|
||||
if (sound_id < 0 || sound_id >= NUMSFX)
|
||||
{
|
||||
// bad sound effect, ignore
|
||||
return;
|
||||
}
|
||||
|
||||
S_StartSound(NULL, sound_id);
|
||||
}
|
||||
|
||||
void GameSounds_OnChange(void)
|
||||
{
|
||||
if (M_CheckParm("-nosound") || M_CheckParm("-noaudio"))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue