Revamped radio system
Added keybinds for a ton of radio commands Revamped the start-message stuff
This commit is contained in:
parent
3d219d7fdb
commit
ce7a2243cc
10 changed files with 439 additions and 31 deletions
|
@ -24,6 +24,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#define DRAWFLAG_MODULATE 2
|
#define DRAWFLAG_MODULATE 2
|
||||||
#define DRAWFLAG_2XMODULATE 3
|
#define DRAWFLAG_2XMODULATE 3
|
||||||
|
|
||||||
|
// Undocumented printcall types
|
||||||
|
#define PRINT_LOW 0
|
||||||
|
#define PRINT_MEDIUM 1
|
||||||
|
#define PRINT_HIGH 2
|
||||||
|
#define PRINT_CHAT 3
|
||||||
|
|
||||||
// Clientside cvars
|
// Clientside cvars
|
||||||
var vector autocvar_con_color = '255 128 0'; // autocvar of "con_color"
|
var vector autocvar_con_color = '255 128 0'; // autocvar of "con_color"
|
||||||
var vector autocvar_vgui_color = '255 128 0'; // autocvar of "vgui_color"
|
var vector autocvar_vgui_color = '255 128 0'; // autocvar of "vgui_color"
|
||||||
|
|
|
@ -18,11 +18,6 @@ along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PRINT_LOW 0
|
|
||||||
#define PRINT_MEDIUM 1
|
|
||||||
#define PRINT_HIGH 2
|
|
||||||
#define PRINT_CHAT 3
|
|
||||||
|
|
||||||
#define CHAT_LINES 5
|
#define CHAT_LINES 5
|
||||||
#define CHAT_TIME 4
|
#define CHAT_TIME 4
|
||||||
int iLineScroll;
|
int iLineScroll;
|
||||||
|
|
|
@ -33,6 +33,63 @@ void CSQC_ConsoleCommand_Init( void ) {
|
||||||
registercommand( "+showscores" );
|
registercommand( "+showscores" );
|
||||||
registercommand( "-showscores" );
|
registercommand( "-showscores" );
|
||||||
registercommand( "nightvision" );
|
registercommand( "nightvision" );
|
||||||
|
|
||||||
|
registercommand( "glock" );
|
||||||
|
registercommand( "usp" );
|
||||||
|
registercommand( "p228" );
|
||||||
|
registercommand( "deagle" );
|
||||||
|
registercommand( "fn57" );
|
||||||
|
registercommand( "elites" );
|
||||||
|
registercommand( "m3" );
|
||||||
|
registercommand( "xm1014" );
|
||||||
|
registercommand( "tmp" );
|
||||||
|
registercommand( "mac10" );
|
||||||
|
registercommand( "mp5" );
|
||||||
|
registercommand( "ump45" );
|
||||||
|
registercommand( "p90" );
|
||||||
|
registercommand( "ak47" );
|
||||||
|
registercommand( "m4a1" );
|
||||||
|
registercommand( "sg552" );
|
||||||
|
registercommand( "aug" );
|
||||||
|
registercommand( "scout" );
|
||||||
|
registercommand( "sg550" );
|
||||||
|
registercommand( "awp" );
|
||||||
|
registercommand( "g3sg1" );
|
||||||
|
registercommand( "m249" );
|
||||||
|
|
||||||
|
registercommand( "primammo" );
|
||||||
|
registercommand( "secammo" );
|
||||||
|
|
||||||
|
registercommand( "vest" );
|
||||||
|
registercommand( "vesthelm" );
|
||||||
|
registercommand( "flash" );
|
||||||
|
registercommand( "hegren" );
|
||||||
|
registercommand( "vsgren" );
|
||||||
|
registercommand( "defuser" );
|
||||||
|
registercommand( "nvg" );
|
||||||
|
|
||||||
|
registercommand( "coverme" );
|
||||||
|
registercommand( "takepoint" );
|
||||||
|
registercommand( "regroup" );
|
||||||
|
registercommand( "followme" );
|
||||||
|
registercommand( "takingfire" );
|
||||||
|
|
||||||
|
registercommand( "go" );
|
||||||
|
registercommand( "fallback" );
|
||||||
|
registercommand( "sticktog" );
|
||||||
|
registercommand( "getinpos" );
|
||||||
|
registercommand( "stormfront" );
|
||||||
|
registercommand( "report" );
|
||||||
|
|
||||||
|
registercommand( "roger" );
|
||||||
|
registercommand( "enemyspot" );
|
||||||
|
registercommand( "needbackup" );
|
||||||
|
registercommand( "sectorclear" );
|
||||||
|
registercommand( "inposition" );
|
||||||
|
registercommand( "reportingin" );
|
||||||
|
registercommand( "getout" );
|
||||||
|
registercommand( "negative" );
|
||||||
|
registercommand( "enemydown" );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -75,6 +132,179 @@ float CSQC_ConsoleCommand( string sCMD ) {
|
||||||
Nightvision_Toggle();
|
Nightvision_Toggle();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
break;
|
break;
|
||||||
|
case "glock":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "usp":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "p228":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "deagle":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "fn57":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "elites":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "m3":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "xm1014":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "tmp":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "mac10":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "mp5":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "ump45":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "p90":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "ak47":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "m4a1":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "sg552":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "aug":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "scout":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "sg550":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "awp":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "g3sg1":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "m249":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "primammo":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "secammo":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "vest":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "vesthelm":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "flash":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "hegren":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "vsgren":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "defuser":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "nvg":
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "coverme":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_CT_COVERME );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "takepoint":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_CT_POINT );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "regroup":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_REGROUP );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "followme":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_FOLLOWME );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "takingfire":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_FIREASSIS );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "go":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_GO );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "fallback":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_FALLBACK );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "sticktog":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_STICKTOG );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "getinpos":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_COM_GETINPOS );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "stormfront":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_STORMFRONT );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "report":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_COM_REPORTIN );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "roger":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_ROGER );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "enemyspot":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_CT_ENEMYS );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "needbackup":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_CT_BACKUP );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "sectorclear":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_CLEAR );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "inposition":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_CT_INPOS );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "reportingin":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_CT_REPORTINGIN );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "getout":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_GETOUT );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "negative":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_NEGATIVE );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case "enemydown":
|
||||||
|
sendevent( "RadioMessage", "f", RADIO_ENEMYDOWN );
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -121,7 +351,9 @@ void CSQC_Parse_Event( void ) {
|
||||||
|
|
||||||
fCameraTime = time + readfloat();
|
fCameraTime = time + readfloat();
|
||||||
} else if ( fHeader == EV_RADIOMSG ) {
|
} else if ( fHeader == EV_RADIOMSG ) {
|
||||||
Radio_BroadcastMessage( readbyte() );
|
Radio_PlayMessage( readbyte() );
|
||||||
|
} else if ( fHeader == EV_RADIOMSG2 ) {
|
||||||
|
Radio_PlayPlayerMessage( readbyte(), readbyte() );
|
||||||
} else if ( fHeader == EV_ORBITUARY ) {
|
} else if ( fHeader == EV_ORBITUARY ) {
|
||||||
HUD_AddOrbituaries( readbyte(), readbyte(), readbyte(), readbyte(), readbyte(), readbyte());
|
HUD_AddOrbituaries( readbyte(), readbyte(), readbyte(), readbyte(), readbyte(), readbyte());
|
||||||
} else if ( fHeader == EV_IMPACT ) {
|
} else if ( fHeader == EV_IMPACT ) {
|
||||||
|
|
|
@ -216,6 +216,7 @@ enum {
|
||||||
EV_MODELGIB,
|
EV_MODELGIB,
|
||||||
EV_CAMERATRIGGER,
|
EV_CAMERATRIGGER,
|
||||||
EV_RADIOMSG,
|
EV_RADIOMSG,
|
||||||
|
EV_RADIOMSG2,
|
||||||
EV_ORBITUARY
|
EV_ORBITUARY
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -75,6 +75,7 @@ float fGameTime;
|
||||||
.int iCurrentCaliber;
|
.int iCurrentCaliber;
|
||||||
.float fSlotMelee, fSlotPrimary, fSlotSecondary, fSlotGrenade;
|
.float fSlotMelee, fSlotPrimary, fSlotSecondary, fSlotGrenade;
|
||||||
.float fAttackFinished;
|
.float fAttackFinished;
|
||||||
|
.float fRadioFinished;
|
||||||
.float fAccuracy;
|
.float fAccuracy;
|
||||||
.float fFallVelocity;
|
.float fFallVelocity;
|
||||||
|
|
||||||
|
@ -84,6 +85,7 @@ int iBombZones;
|
||||||
int iRescueZones;
|
int iRescueZones;
|
||||||
int iBuyZones;
|
int iBuyZones;
|
||||||
int iVIPZones;
|
int iVIPZones;
|
||||||
|
int iEscapeZones;
|
||||||
int iBuyRestriction; // For info_map_parameters
|
int iBuyRestriction; // For info_map_parameters
|
||||||
int iBombRadius; // For info_map_parameters
|
int iBombRadius; // For info_map_parameters
|
||||||
|
|
||||||
|
|
|
@ -67,4 +67,6 @@ void func_escapezone( void ) {
|
||||||
|
|
||||||
self.model = 0;
|
self.model = 0;
|
||||||
self.touch = func_escapezone_touch;
|
self.touch = func_escapezone_touch;
|
||||||
|
|
||||||
|
iEscapeZones++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,19 +18,14 @@ along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Detects the state of the game that we are in and cycles between them. INACTIVE > FREEZE > INGAME > ACTIVE
|
|
||||||
void Timer_Begin( float fTime, float fMode) {
|
void Timer_Begin( float fTime, float fMode) {
|
||||||
if ( fMode == GAME_FREEZE ) {
|
if ( fMode == GAME_FREEZE ) {
|
||||||
dprint( "[DEBUG] Game Freezetime\n" );
|
|
||||||
fGameState = GAME_FREEZE;
|
fGameState = GAME_FREEZE;
|
||||||
} else if ( fMode == GAME_ACTIVE ) {
|
} else if ( fMode == GAME_ACTIVE ) {
|
||||||
dprint( "[DEBUG] Game Active\n" );
|
|
||||||
fGameState = GAME_ACTIVE;
|
fGameState = GAME_ACTIVE;
|
||||||
} else if ( fMode == GAME_END ) {
|
} else if ( fMode == GAME_END ) {
|
||||||
dprint( "[DEBUG] Game Ended\n" );
|
|
||||||
fGameState = GAME_END;
|
fGameState = GAME_END;
|
||||||
} else if ( fMode == GAME_COMMENCING ) {
|
} else if ( fMode == GAME_COMMENCING ) {
|
||||||
dprint( "[DEBUG] Game Commencing\n" );
|
|
||||||
fGameState = GAME_COMMENCING;
|
fGameState = GAME_COMMENCING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,15 +53,7 @@ void Timer_Update( void ) {
|
||||||
Timer_Begin( 5, GAME_END); // Round is over, 5 seconds til a new round starts
|
Timer_Begin( 5, GAME_END); // Round is over, 5 seconds til a new round starts
|
||||||
} else {
|
} else {
|
||||||
Timer_Begin( autocvar_mp_roundtime * 60, GAME_ACTIVE ); // Unfreeze
|
Timer_Begin( autocvar_mp_roundtime * 60, GAME_ACTIVE ); // Unfreeze
|
||||||
|
Radio_StartMessage();
|
||||||
float fRand = floor( random( 1, 4 ) );
|
|
||||||
if ( fRand == 1 ) {
|
|
||||||
Radio_BroadcastMessage( RADIO_MOVEOUT );
|
|
||||||
} else if ( fRand == 2 ) {
|
|
||||||
Radio_BroadcastMessage( RADIO_LOCKNLOAD );
|
|
||||||
} else {
|
|
||||||
Radio_BroadcastMessage( RADIO_LETSGO );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,12 +18,6 @@ along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
enum {
|
|
||||||
RADIO_MODE_ALL = 0,
|
|
||||||
RADIO_MODE_T,
|
|
||||||
RADIO_MODE_CT
|
|
||||||
};
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
RADIO_BLOW,
|
RADIO_BLOW,
|
||||||
RADIO_BOMBDEF,
|
RADIO_BOMBDEF,
|
||||||
|
@ -117,22 +111,211 @@ string sRadioSamples[43] = {
|
||||||
"radio/vip.wav"
|
"radio/vip.wav"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
string sRadioChat[43] = {
|
||||||
|
"Get out of there, it's gonna blow!",
|
||||||
|
"The bomb has been defused.",
|
||||||
|
"The bomb has been planted.",
|
||||||
|
"Circle around back!",
|
||||||
|
"Sector clear.",
|
||||||
|
"Okay team, follow my command!",
|
||||||
|
"Get in position and wait for my go!",
|
||||||
|
"Go, go, go!",
|
||||||
|
"Report in, team!",
|
||||||
|
"Affirmative.",
|
||||||
|
"Need backup!",
|
||||||
|
"Cover me!",
|
||||||
|
"Enemy spotted.",
|
||||||
|
"Fire in the hole!",
|
||||||
|
"I'm hit!",
|
||||||
|
"I'm in position.",
|
||||||
|
"I'll take the point.",
|
||||||
|
"Reporting in.",
|
||||||
|
"Counter-Terrorists win!",
|
||||||
|
"Enemy down!",
|
||||||
|
"Team, fall back!",
|
||||||
|
"Taking fire, need assistance!",
|
||||||
|
"Follow me!",
|
||||||
|
"Team, let's get out of here!",
|
||||||
|
"Okay, let's go.",
|
||||||
|
"I'm hit! Need assistance!",
|
||||||
|
"Hostage down.",
|
||||||
|
"Okay, let's go.",
|
||||||
|
"Lock 'n load.",
|
||||||
|
"Teammate down.",
|
||||||
|
"Meet at the rendezvous point.",
|
||||||
|
"Alright, let's move out.",
|
||||||
|
"Negative.",
|
||||||
|
"Hold this position!",
|
||||||
|
"Regroup, team!",
|
||||||
|
"A hostage has been rescued.",
|
||||||
|
"Roger that.",
|
||||||
|
"Round draw!",
|
||||||
|
"Stick together, team!",
|
||||||
|
"Storm the front!",
|
||||||
|
"You take the point!",
|
||||||
|
"Terrorists win!",
|
||||||
|
"Protect the VIP, team!"
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
=================
|
||||||
|
Radio_InitSounds
|
||||||
|
|
||||||
|
Who doesn't love precaching sounds
|
||||||
|
=================
|
||||||
|
*/
|
||||||
void Radio_InitSounds( void ) {
|
void Radio_InitSounds( void ) {
|
||||||
for ( int i = 0; i < 43; i++ ) {
|
for ( int i = 0; i < 43; i++ ) {
|
||||||
precache_sound( sRadioSamples[ i ] );
|
precache_sound( sRadioSamples[ i ] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
=================
|
||||||
|
Radio_PlayMessage
|
||||||
|
|
||||||
|
Play a radio message that doesn't come from a player
|
||||||
|
=================
|
||||||
|
*/
|
||||||
|
void Radio_PlayMessage( float fMessage ) {
|
||||||
|
sound( world, CHAN_VOICE, sRadioSamples[ fMessage ], 1, ATTN_NONE, 0, SOUNDFLAG_NOSPACIALISE );
|
||||||
|
CSQC_Parse_Print( sprintf( "[RADIO]: %s\n", sRadioChat[ fMessage ] ), PRINT_CHAT );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
=================
|
||||||
|
Radio_PlayPlayerMessage
|
||||||
|
|
||||||
|
This radio message does come from a player
|
||||||
|
=================
|
||||||
|
*/
|
||||||
|
void Radio_PlayPlayerMessage( float fPlayerNum, float fMessage ) {
|
||||||
|
sound( world, CHAN_VOICE, sRadioSamples[ fMessage ], 1, ATTN_NONE, 0, SOUNDFLAG_NOSPACIALISE );
|
||||||
|
CSQC_Parse_Print( sprintf( "[RADIO] %s: %s\n", getplayerkeyvalue( fPlayerNum, "name" ), sRadioChat[ fMessage ] ), PRINT_CHAT );
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void Radio_BroadcastMessage( float fMessage ) {
|
|
||||||
#ifdef SSQC
|
#ifdef SSQC
|
||||||
|
/*
|
||||||
|
=================
|
||||||
|
Radio_BroadcastMessage
|
||||||
|
|
||||||
|
A global radio message for all players
|
||||||
|
=================
|
||||||
|
*/
|
||||||
|
void Radio_BroadcastMessage( float fMessage ) {
|
||||||
WriteByte( MSG_MULTICAST, SVC_CGAMEPACKET );
|
WriteByte( MSG_MULTICAST, SVC_CGAMEPACKET );
|
||||||
WriteByte( MSG_MULTICAST, EV_RADIOMSG );
|
WriteByte( MSG_MULTICAST, EV_RADIOMSG );
|
||||||
WriteByte( MSG_MULTICAST, fMessage );
|
WriteByte( MSG_MULTICAST, fMessage );
|
||||||
|
|
||||||
msg_entity = self;
|
msg_entity = self;
|
||||||
multicast( '0 0 0', MSG_BROADCAST );
|
multicast( '0 0 0', MSG_BROADCAST );
|
||||||
#else
|
|
||||||
sound( world, CHAN_VOICE, sRadioSamples[ fMessage ], 1, ATTN_NONE, 0, SOUNDFLAG_NOSPACIALISE );
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
=================
|
||||||
|
Radio_TeamMessage
|
||||||
|
|
||||||
|
A radio message targetted at members of a specific team
|
||||||
|
=================
|
||||||
|
*/
|
||||||
|
void Radio_TeamMessage( float fMessage, float fTeam ) {
|
||||||
|
static void Radio_TeamMessage_Send( float fMessage, entity eEnt ) {
|
||||||
|
WriteByte( MSG_MULTICAST, SVC_CGAMEPACKET );
|
||||||
|
WriteByte( MSG_MULTICAST, EV_RADIOMSG );
|
||||||
|
WriteByte( MSG_MULTICAST, fMessage );
|
||||||
|
msg_entity = eEnt;
|
||||||
|
multicast( '0 0 0', MULTICAST_ONE );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( entity eFind = world; ( eFind = find( eFind, classname, "player" ) ); ) {
|
||||||
|
if ( eFind.team == fTeam ) {
|
||||||
|
Radio_TeamMessage_Send( fMessage, eFind );
|
||||||
|
} else if ( eFind.team == TEAM_VIP && fTeam == TEAM_CT ) {
|
||||||
|
Radio_TeamMessage_Send( fMessage, eFind );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
=================
|
||||||
|
Radio_DefaultStart
|
||||||
|
|
||||||
|
Pick a generic, random radio string for global start messages
|
||||||
|
=================
|
||||||
|
*/
|
||||||
|
float Radio_DefaultStart( void ) {
|
||||||
|
float fRand = floor( random( 1, 4 ) );
|
||||||
|
|
||||||
|
if ( fRand == 1 ) {
|
||||||
|
return RADIO_MOVEOUT;
|
||||||
|
} else if ( fRand == 2 ) {
|
||||||
|
return RADIO_LOCKNLOAD;
|
||||||
|
} else {
|
||||||
|
return RADIO_LETSGO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
=================
|
||||||
|
Radio_StartMessage
|
||||||
|
|
||||||
|
Decide which startmessage to play at the beginning of each round
|
||||||
|
=================
|
||||||
|
*/
|
||||||
|
void Radio_StartMessage( void ) {
|
||||||
|
if ( iVIPZones > 0 ) {
|
||||||
|
Radio_TeamMessage( RADIO_VIP, TEAM_CT );
|
||||||
|
Radio_TeamMessage( Radio_DefaultStart(), TEAM_T );
|
||||||
|
} else if ( iEscapeZones > 0 ) {
|
||||||
|
Radio_TeamMessage( RADIO_GETOUT, TEAM_T );
|
||||||
|
Radio_TeamMessage( Radio_DefaultStart(), TEAM_CT );
|
||||||
|
} else {
|
||||||
|
Radio_BroadcastMessage( Radio_DefaultStart() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
=================
|
||||||
|
CSEv_RadioMessage_f
|
||||||
|
|
||||||
|
Triggered by clients, plays a message to members of the same team
|
||||||
|
=================
|
||||||
|
*/
|
||||||
|
void CSEv_RadioMessage_f( float fMessage ) {
|
||||||
|
static void CSEv_RadioMessage_Send( float fMessage, entity eEnt ) {
|
||||||
|
WriteByte( MSG_MULTICAST, SVC_CGAMEPACKET );
|
||||||
|
WriteByte( MSG_MULTICAST, EV_RADIOMSG2 );
|
||||||
|
WriteByte( MSG_MULTICAST, num_for_edict( eEnt ) - 1 );
|
||||||
|
WriteByte( MSG_MULTICAST, fMessage );
|
||||||
|
msg_entity = eEnt;
|
||||||
|
multicast( '0 0 0', MULTICAST_ONE );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't allow spamming
|
||||||
|
if ( self.fRadioFinished > time ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// When dead, don't talk
|
||||||
|
if ( self.health <= 0 ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure that VIPs and CTs get eachother
|
||||||
|
float fTargetTeam = self.team;
|
||||||
|
if ( fTargetTeam == TEAM_VIP ) {
|
||||||
|
fTargetTeam = TEAM_CT;
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( entity eFind = world; ( eFind = find( eFind, classname, "player" ) ); ) {
|
||||||
|
if ( eFind.team == fTargetTeam ) {
|
||||||
|
CSEv_RadioMessage_Send( fMessage, eFind );
|
||||||
|
} else if ( eFind.team == TEAM_VIP && fTargetTeam == TEAM_CT ) {
|
||||||
|
CSEv_RadioMessage_Send( fMessage, eFind );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.fRadioFinished = time + 3.0f;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
Binary file not shown.
BIN
opencs/progs.dat
BIN
opencs/progs.dat
Binary file not shown.
Loading…
Reference in a new issue