diff --git a/Source/Client/Defs.h b/Source/Client/Defs.h
index 6a5d3440..61b7491c 100755
--- a/Source/Client/Defs.h
+++ b/Source/Client/Defs.h
@@ -33,8 +33,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
var float FONT_16;
// Clientside cvars
-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_con_color = '255 170 0'; // autocvar of "con_color"
+var vector autocvar_vgui_color = '255 170 0'; // autocvar of "vgui_color"
var vector autocvar_cross_color = '0 255 0'; // autocvar of "cross_color"
var float autocvar_cl_bob = 0.01;
var float autocvar_cl_bobcycle = 0.8;
@@ -88,6 +88,7 @@ vector vPlayerOriginOld;
vector vPlayerVelocity;
void View_PlayAnimation( int iSequence );
+string HUD_GetChatColorHEX( float fTeam );
// This actually belongs in Builtins.h since its an undocumented global
vector pmove_vel;
diff --git a/Source/Client/Draw.c b/Source/Client/Draw.c
index 4bf8e93d..8a57fe28 100755
--- a/Source/Client/Draw.c
+++ b/Source/Client/Draw.c
@@ -18,10 +18,12 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#define CHAT_LINES 5
-#define CHAT_TIME 4
-int iLineScroll;
+#define CHAT_LINES 5
+#define CHAT_TIME 10
+var int iLineScroll = 0;
+
float fChatTime;
+float fChatAlpha;
string sMSGBuffer[ CHAT_LINES ];
/*
@@ -32,6 +34,11 @@ Receives a message and sorts it into the chat messagebuffer
=================
*/
void CSQC_Parse_Print(string sMessage, float fLevel ) {
+ // This gives messages other than chat an orange tint
+ if ( fLevel != PRINT_CHAT ) {
+ sMessage = sprintf( "^xF80%s", sMessage );
+ }
+
if ( iLineScroll < ( CHAT_LINES - 1 ) ) {
sMSGBuffer[ iLineScroll + 1 ] = sMessage;
iLineScroll++;
@@ -43,6 +50,10 @@ void CSQC_Parse_Print(string sMessage, float fLevel ) {
}
fChatTime = time + CHAT_TIME;
+ fChatAlpha = 1.0f;
+
+ // Log to console
+ localcmd( sprintf( "echo \"%s\"\n", sMessage ) );
}
/*
@@ -56,16 +67,18 @@ void CSQC_DrawChat( void ) {
vector vChatPos = [ 16, vVideoResolution_y - 128 ];
// Remove messages after a fChatTime has passed
- if ( fChatTime < time && iLineScroll >= 0 ) {
- sMSGBuffer[ iLineScroll ] = "";
- iLineScroll--;
- fChatTime = time + CHAT_TIME;
+ if ( fChatTime < time ) {
+ fChatAlpha -= frametime;
+ } else {
+ fChatAlpha = 1.0f;
}
- for ( int i = 0; i < CHAT_LINES; i++ ) {
- drawstring( vChatPos + '1 1', sMSGBuffer[ i ], '8 8', '0 0 0', VGUI_WINDOW_FGALPHA, 0 );
- drawstring( vChatPos, sMSGBuffer[ i ], '8 8', vHUDColor, 1, DRAWFLAG_ADDITIVE );
- vChatPos_y += 12;
+ if ( fChatAlpha > 0.0f ) {
+ for ( int i = 0; i < CHAT_LINES; i++ ) {
+ drawstring( vChatPos + '1 1', sMSGBuffer[ i ], '8 8', '0 0 0', fChatAlpha, 0 );
+ drawstring( vChatPos, sMSGBuffer[ i ], '8 8', '1 1 1', fChatAlpha, 0 );
+ vChatPos_y += 12;
+ }
}
}
@@ -102,7 +115,7 @@ void CSQC_DrawCenterprint( void ) {
for ( int i = 0; i < ( fCenterPrintLines ); i++ ) {
vCenterPrintPos_x = ( vVideoResolution_x / 2 ) - ( stringwidth( sCenterPrintBuffer[ i ], FALSE ) / 2 );
drawstring( vCenterPrintPos + '1 1', sCenterPrintBuffer[ i ], '8 8', '0 0 0', fCenterPrintAlpha, 0 );
- drawstring( vCenterPrintPos, sCenterPrintBuffer[ i ], '8 8', vHUDColor, fCenterPrintAlpha, DRAWFLAG_ADDITIVE );
+ drawstring( vCenterPrintPos, sCenterPrintBuffer[ i ], '8 8', '1 1 1', fCenterPrintAlpha, 0 );
vCenterPrintPos_y += 8;
}
}
@@ -117,11 +130,10 @@ Keep in mind that newlines need to be tokenized
=================
*/
float CSQC_Parse_CenterPrint( string sMessage ) {
-
fCenterPrintLines = tokenizebyseparator( sMessage, "\n" );
for( int i = 0; i < ( fCenterPrintLines ); i++ ) {
- sCenterPrintBuffer[ i ] = argv( i );
+ sCenterPrintBuffer[ i ] = sprintf( "^xF80%s", argv( i ) );
}
fCenterPrintAlpha = 1;
diff --git a/Source/Client/Event.c b/Source/Client/Event.c
index 286cab39..aac419cd 100755
--- a/Source/Client/Event.c
+++ b/Source/Client/Event.c
@@ -490,6 +490,18 @@ void CSQC_Parse_Event( void ) {
vSparkAngle_z = readcoord();
Effect_CreateSpark( vSparkPos, vSparkAngle );
+ } else if ( fHeader == EV_CHAT ) {
+ float fSender = readbyte();
+ float fTeam = readbyte();
+ string sMessage = readstring();
+
+ CSQC_Parse_Print( sprintf( "%s%s^xF80: %s", HUD_GetChatColorHEX( fTeam ), getplayerkeyvalue( fSender, "name" ), sMessage ), PRINT_CHAT );
+ } else if ( fHeader == EV_CHAT_TEAM ) {
+ float fSender2 = readbyte();
+ float fTeam2 = readbyte();
+ string sMessage2 = readstring();
+
+ CSQC_Parse_Print( sprintf( "%s%s^xF80: %s", HUD_GetChatColorHEXTeam( fTeam2 ), getplayerkeyvalue( fSender2, "name" ), sMessage2 ), PRINT_CHAT );
}
}
diff --git a/Source/Client/HUD.c b/Source/Client/HUD.c
index 0a5f23a9..8de86c4e 100755
--- a/Source/Client/HUD.c
+++ b/Source/Client/HUD.c
@@ -25,7 +25,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define NUMSIZE_X 0.09375
#define NUMSIZE_Y 0.09765625
-#define HUD_ALPHA 0.6
+#define HUD_ALPHA 0.5
// Instead of calculating them on demand, just read the offsets here
float vHUDNumPos[10] = {
diff --git a/Source/Client/HUDWeaponSelect.c b/Source/Client/HUDWeaponSelect.c
index b3fb11f6..49fbe577 100755
--- a/Source/Client/HUDWeaponSelect.c
+++ b/Source/Client/HUDWeaponSelect.c
@@ -93,6 +93,11 @@ float HUD_DrawWeaponSelect_NextItem( float fSlot ) {
iHUDGrenades = 0;
// Keep this order in order for the selection to work
+ if ( getstatf( STAT_SLOT_GRENADE ) ) {
+ iHUDGrenadesSelected = getstatf( STAT_SLOT_GRENADE );
+ iHUDGrenades++;
+ }
+
if ( getstati_punf( STAT_ITEM_SMOKEGRENADE ) ) {
iHUDGrenadesSelected = WEAPON_SMOKEGRENADE;
iHUDGrenades++;
@@ -117,17 +122,28 @@ float HUD_DrawWeaponSelect_NextItem( float fSlot ) {
// If we're in the grenade slot, go down
if ( iHUDGrenadesSelected == WEAPON_HEGRENADE ) {
// Do we have a flash bang? If yes, select that thing
- if ( getstatf( STAT_ITEM_FLASHBANG ) ) {
+ if ( getstati_punf( STAT_ITEM_FLASHBANG ) ) {
iHUDGrenadesSelected = WEAPON_FLASHBANG;
return SLOT_GRENADE;
- } else if ( getstatf( STAT_ITEM_SMOKEGRENADE ) ) {
+ } else if ( getstati_punf( STAT_ITEM_SMOKEGRENADE ) ) {
iHUDGrenadesSelected = WEAPON_SMOKEGRENADE;
return SLOT_GRENADE;
+ } else if ( getstatf( STAT_SLOT_GRENADE ) ) {
+ iHUDGrenadesSelected = getstatf( STAT_SLOT_GRENADE );
+ return SLOT_GRENADE;
}
} else if ( iHUDGrenadesSelected == WEAPON_FLASHBANG ) {
- if ( getstatf( STAT_ITEM_SMOKEGRENADE ) ) {
+ if ( getstati_punf( STAT_ITEM_SMOKEGRENADE ) ) {
iHUDGrenadesSelected = WEAPON_SMOKEGRENADE;
return SLOT_GRENADE;
+ } else if ( getstatf( STAT_SLOT_GRENADE ) ) {
+ iHUDGrenadesSelected = getstatf( STAT_SLOT_GRENADE );
+ return SLOT_GRENADE;
+ }
+ } else if ( iHUDGrenadesSelected == WEAPON_SMOKEGRENADE ) {
+ if ( getstatf( STAT_SLOT_GRENADE ) ) {
+ iHUDGrenadesSelected = getstatf( STAT_SLOT_GRENADE );
+ return SLOT_GRENADE;
}
}
@@ -163,6 +179,10 @@ float HUD_DrawWeaponSelect_PreviousItem( float fSlot ) {
iHUDGrenadesSelected = WEAPON_SMOKEGRENADE;
iHUDGrenades++;
}
+ if ( getstatf( STAT_SLOT_GRENADE ) ) {
+ iHUDGrenadesSelected = getstatf( STAT_SLOT_GRENADE );
+ iHUDGrenades++;
+ }
if ( iHUDGrenades ) {
return SLOT_GRENADE;
@@ -182,16 +202,28 @@ float HUD_DrawWeaponSelect_PreviousItem( float fSlot ) {
return HUD_DrawWeaponSelect_PreviousItem( SLOT_SECONDARY );
}
} else {
- if ( iHUDGrenadesSelected == WEAPON_SMOKEGRENADE ) {
- if ( getstatf( STAT_ITEM_FLASHBANG ) ) {
+ if ( iHUDGrenadesSelected == getstatf( STAT_SLOT_GRENADE ) ) {
+ if ( getstati_punf( STAT_ITEM_SMOKEGRENADE ) ) {
+ iHUDGrenadesSelected = WEAPON_SMOKEGRENADE;
+ return SLOT_GRENADE;
+ } else if ( getstati_punf( STAT_ITEM_FLASHBANG ) ) {
iHUDGrenadesSelected = WEAPON_FLASHBANG;
return SLOT_GRENADE;
- } else if ( getstatf( STAT_ITEM_HEGRENADE ) ) {
+ } else if ( getstati_punf( STAT_ITEM_HEGRENADE ) ) {
+ iHUDGrenadesSelected = WEAPON_HEGRENADE;
+ return SLOT_GRENADE;
+ }
+ }
+ if ( iHUDGrenadesSelected == WEAPON_SMOKEGRENADE ) {
+ if ( getstati_punf( STAT_ITEM_FLASHBANG ) ) {
+ iHUDGrenadesSelected = WEAPON_FLASHBANG;
+ return SLOT_GRENADE;
+ } else if ( getstati_punf( STAT_ITEM_HEGRENADE ) ) {
iHUDGrenadesSelected = WEAPON_HEGRENADE;
return SLOT_GRENADE;
}
} else if ( iHUDGrenadesSelected == WEAPON_FLASHBANG ) {
- if ( getstatf( STAT_ITEM_HEGRENADE ) ) {
+ if ( getstati_punf( STAT_ITEM_HEGRENADE ) ) {
iHUDGrenadesSelected = WEAPON_HEGRENADE;
return SLOT_GRENADE;
}
@@ -304,23 +336,46 @@ void HUD_DrawWeaponSelect( void ) {
// Again, grenades are treated seperately
if ( i == SLOT_GRENADE ) {
if ( wptTable[ fHUDWeaponSelected ].iSlot == SLOT_GRENADE ) {
- if ( iHUDGrenadesSelected == WEAPON_HEGRENADE ) {
+ vSelectPos_y -= 45;
+ if ( getstati_punf( STAT_ITEM_HEGRENADE ) ) {
+ vSelectPos_y += 45;
drawsubpic( vSelectPos + '0 20', '170 45', wpSymbolTable[ WEAPON_HEGRENADE ].sSprite, wpSymbolTable[ WEAPON_HEGRENADE ].vOrigin, [ 0.6640625, 0.17578125 ], vHUDColor, 1, DRAWFLAG_ADDITIVE );
}
- vSelectPos_y += 45;
+ if ( iHUDGrenadesSelected == WEAPON_HEGRENADE ) {
+ drawsubpic( vSelectPos + '0 20', '170 45', "sprites/640hud3.spr_0.tga", '0 0.703125', [ 0.6640625, 0.17578125 ], vHUDColor, 1, DRAWFLAG_ADDITIVE );
+ }
- if ( iHUDGrenadesSelected == WEAPON_FLASHBANG ) {
+ if ( getstati_punf( STAT_ITEM_FLASHBANG ) ) {
+ vSelectPos_y += 45;
drawsubpic( vSelectPos + '0 20', '170 45', wpSymbolTable[ WEAPON_FLASHBANG ].sSprite, wpSymbolTable[ WEAPON_FLASHBANG ].vOrigin, [ 0.6640625, 0.17578125 ], vHUDColor, 1, DRAWFLAG_ADDITIVE );
}
- vSelectPos_y += 45;
+ if ( iHUDGrenadesSelected == WEAPON_FLASHBANG ) {
+ drawsubpic( vSelectPos + '0 20', '170 45', "sprites/640hud3.spr_0.tga", '0 0.703125', [ 0.6640625, 0.17578125 ], vHUDColor, 1, DRAWFLAG_ADDITIVE );
+ }
+
- if ( iHUDGrenadesSelected == WEAPON_SMOKEGRENADE ) {
+ if ( getstati_punf( STAT_ITEM_SMOKEGRENADE ) ) {
+ vSelectPos_y += 45;
drawsubpic( vSelectPos + '0 20', '170 45', wpSymbolTable[ WEAPON_SMOKEGRENADE ].sSprite, wpSymbolTable[ WEAPON_SMOKEGRENADE ].vOrigin, [ 0.6640625, 0.17578125 ], vHUDColor, 1, DRAWFLAG_ADDITIVE );
+
+ }
+ if ( iHUDGrenadesSelected == WEAPON_SMOKEGRENADE ) {
+ drawsubpic( vSelectPos + '0 20', '170 45', "sprites/640hud3.spr_0.tga", '0 0.703125', [ 0.6640625, 0.17578125 ], vHUDColor, 1, DRAWFLAG_ADDITIVE );
+ }
+
+ if ( getstatf( STAT_SLOT_GRENADE ) ) {
+ vSelectPos_y += 45;
+ drawsubpic( vSelectPos + '0 20', '170 45', wpSymbolTable[ getstatf( STAT_SLOT_GRENADE ) ].sSprite, wpSymbolTable[ getstatf( STAT_SLOT_GRENADE ) ].vOrigin, [ 0.6640625, 0.17578125 ], vHUDColor, 1, DRAWFLAG_ADDITIVE );
+ }
+ if ( iHUDGrenadesSelected == getstatf( STAT_SLOT_GRENADE ) ) {
+ drawsubpic( vSelectPos + '0 20', '170 45', "sprites/640hud3.spr_0.tga", '0 0.703125', [ 0.6640625, 0.17578125 ], vHUDColor, 1, DRAWFLAG_ADDITIVE );
}
}
} else {
+
if ( wptTable[ fHUDWeaponSelected ].iSlot == i ) {
drawsubpic( vSelectPos + '0 20', '170 45', wpSymbolTable[ fHUDWeaponSelected ].sSprite, wpSymbolTable[ fHUDWeaponSelected ].vOrigin, [ 0.6640625, 0.17578125 ], vHUDColor, 1, DRAWFLAG_ADDITIVE );
+ drawsubpic( vSelectPos + '0 20', '170 45', "sprites/640hud3.spr_0.tga", '0 0.703125', [ 0.6640625, 0.17578125 ], vHUDColor, 1, DRAWFLAG_ADDITIVE );
vSelectPos_x += 170;
} else {
vSelectPos_x += 20;
diff --git a/Source/Client/VGUIObjects.c b/Source/Client/VGUIObjects.c
index 5dded12c..d2b6b33a 100755
--- a/Source/Client/VGUIObjects.c
+++ b/Source/Client/VGUIObjects.c
@@ -30,6 +30,26 @@ vector HUD_GetChatColor( float fTeam ) {
}
}
+string HUD_GetChatColorHEX( float fTeam ) {
+ if ( fTeam == TEAM_CT ) {
+ return "^x7AC";
+ } else if ( fTeam == TEAM_T ) {
+ return "^xC33";
+ } else {
+ return "^xCCC";
+ }
+}
+
+string HUD_GetChatColorHEXTeam( float fTeam ) {
+ if ( fTeam == TEAM_CT ) {
+ return "^x7AC(Counter-Terrorist) ";
+ } else if ( fTeam == TEAM_T ) {
+ return "^xC33(Terrorist) ";
+ } else {
+ return "^xCCC(Spectator) ";
+ }
+}
+
// Returns whether or not our mouse cursor hovers over a region
float VGUI_CheckMouse( vector vPos, vector vReg ) {
vector vSMins, vSMaxs;
diff --git a/Source/FreeCS-CE.prj b/Source/FreeCS-CE.prj
index f7d6c372..d167604d 100755
--- a/Source/FreeCS-CE.prj
+++ b/Source/FreeCS-CE.prj
@@ -25,7 +25,7 @@
-
+
@@ -71,7 +71,7 @@
-
+
@@ -113,7 +113,18 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/Globals.h b/Source/Globals.h
index 0e2b41f1..0ec95ed1 100755
--- a/Source/Globals.h
+++ b/Source/Globals.h
@@ -226,7 +226,9 @@ enum {
EV_CAMERATRIGGER,
EV_RADIOMSG,
EV_RADIOMSG2,
- EV_ORBITUARY
+ EV_ORBITUARY,
+ EV_CHAT,
+ EV_CHAT_TEAM
};
// Submodel materials
diff --git a/Source/Server/FuncDoor.c b/Source/Server/FuncDoor.c
index fa22f629..e76a1f01 100755
--- a/Source/Server/FuncDoor.c
+++ b/Source/Server/FuncDoor.c
@@ -202,12 +202,12 @@ FuncDoor_Touch
====================
*/
void FuncDoor_Touch( void ) {
+ if ( self.spawnflags & SF_MOV_TOGGLE ) {
+ return;
+ }
+
if ( other.classname == "player" ) {
FuncDoor_Trigger();
-
- if ( ( self.spawnflags & SF_MOV_USE ) ) {
- self.touch = __NULL__;
- }
}
}
@@ -262,12 +262,12 @@ void func_door( void ) {
if ( !self.dmg ) {
self.dmg = 2;
}
-
- if ( ( self.spawnflags & SF_MOV_USE ) ) {
+
+ if ( self.spawnflags & SF_MOV_USE ) {
+ self.iUsable = TRUE;
+ } else {
self.touch = FuncDoor_Touch;
}
-
- self.iUsable = TRUE;
self.pos1 = self.origin;
diff --git a/Source/Server/FuncDoorRotating.c b/Source/Server/FuncDoorRotating.c
index 9ba4d3cc..48ccfa88 100755
--- a/Source/Server/FuncDoorRotating.c
+++ b/Source/Server/FuncDoorRotating.c
@@ -151,7 +151,7 @@ void FuncDoorRotate_Trigger( void ) {
if ( self.fAttackFinished > time ) {
return;
}
- self.fAttackFinished = self.ltime + self.wait;
+ self.fAttackFinished = time + self.wait;
if ( ( self.state == STATE_UP ) || ( self.state == STATE_RAISED ) ) {
FuncDoorRotate_RotateBack();
@@ -173,13 +173,13 @@ FuncDoorRotate_Touch
=================
*/
void FuncDoorRotate_Touch( void ) {
+ if ( self.spawnflags & SF_ROT_TOGGLE ) {
+ return;
+ }
+
if ( other.classname == "player" ) {
eActivator = other;
FuncDoorRotate_Trigger();
-
- if ( !( self.spawnflags & SF_ROT_USE ) ) {
- self.touch = __NULL__;
- }
}
}
@@ -221,8 +221,11 @@ void func_door_rotating( void ) {
self.blocked = FuncDoorRotate_Blocked;
self.vUse = FuncDoorRotate_Trigger;
- self.touch = FuncDoorRotate_Touch;
- self.iUsable = TRUE;
+ if ( self.spawnflags & SF_ROT_USE ) {
+ self.iUsable = TRUE;
+ } else {
+ self.touch = FuncDoorRotate_Touch;
+ }
if ( !self.speed ) {
self.speed = 100;
@@ -246,9 +249,9 @@ void func_door_rotating( void ) {
}
- // ...only do X by default?
+ // only do Y by default
if ( !( self.spawnflags & SF_ROT_YAXIS ) && !( self.spawnflags & SF_ROT_XAXIS ) ) {
- self.pos2_x = self.pos1_x + self.distance;
+ self.pos2_y = self.pos1_y + self.distance;
}
if ( self.spawnflags & SF_ROT_OPEN ) {
diff --git a/Source/Server/FuncLadder.c b/Source/Server/FuncLadder.c
index ead2ce50..9d56e784 100755
--- a/Source/Server/FuncLadder.c
+++ b/Source/Server/FuncLadder.c
@@ -39,18 +39,8 @@ void func_ladder_sound( entity target ) {
float fForce = vStep;
float fDelay = clamp( 0.1, 1 / ( fForce / 90 ), 1 );
- float fRandom = random();
-
- if ( fRandom <= 0.25 ) {
- sound( target, CHAN_BODY, "player/pl_ladder1.wav", 0.5, ATTN_IDLE );
- } else if ( fRandom <= 0.50 ) {
- sound( target, CHAN_BODY, "player/pl_ladder2.wav", 0.5, ATTN_IDLE );
- } else if ( fRandom <= 0.75 ) {
- sound( target, CHAN_BODY, "player/pl_ladder3.wav", 0.5, ATTN_IDLE );
- } else {
- sound( target, CHAN_BODY, "player/pl_ladder4.wav", 0.5, ATTN_IDLE );
- }
-
+
+ sound( target, CHAN_BODY, sprintf( "player/pl_ladder%d.wav", floor( random() * 4 ) + 1 ), 0.5, ATTN_IDLE );
target.fStepTime = ( time + fDelay );
}
diff --git a/Source/Server/Main.c b/Source/Server/Main.c
index 0b8d271e..3bfc6102 100755
--- a/Source/Server/Main.c
+++ b/Source/Server/Main.c
@@ -20,9 +20,58 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
void main( void ) {}
void SetNewParms( void ) {}
-
void SetChangeParms( void ) {}
+void SV_SendChat( entity eSender, string sMessage, entity eEnt, float fType ) {
+ WriteByte( MSG_MULTICAST, SVC_CGAMEPACKET );
+ WriteByte( MSG_MULTICAST, fType == 0 ? EV_CHAT:EV_CHAT_TEAM );
+ WriteByte( MSG_MULTICAST, num_for_edict( eSender ) - 1 );
+ WriteByte( MSG_MULTICAST, eSender.team );
+ WriteString( MSG_MULTICAST, sMessage );
+ msg_entity = eEnt;
+ multicast( '0 0 0', MULTICAST_ONE );
+}
+
+/*
+=================
+SV_ParseClientCommand
+
+Intercepts 'cmd' calls. We use it to intercept
+chat messages and handle distribution ourselves.
+=================
+*/
+void SV_ParseClientCommand( string sCommand ) {
+ tokenize( sCommand );
+
+ // Players talk to players, spectators to spectators.
+ if ( self.health ) {
+ if ( argv( 0 ) == "say" ) {
+ for ( entity eFind = world; ( eFind = find( eFind, classname, "player" ) ); ) {
+ SV_SendChat( self, argv( 1 ), eFind, 0 );
+ }
+ return;
+ } else if ( argv( 0 ) == "say_team" ) {
+ for ( entity eFind = world; ( eFind = find( eFind, classname, "player" ) ); ) {
+ if ( eFind.team == self.team ) {
+ SV_SendChat( self, argv( 1 ), eFind, 1 );
+ }
+ }
+ return;
+ }
+ } else {
+ if ( argv( 0 ) == "say" ) {
+ for ( entity eFind = world; ( eFind = find( eFind, classname, "spectator" ) ); ) {
+ SV_SendChat( self, argv( 1 ), eFind, 1 );
+ }
+ return;
+ } else if ( argv( 0 ) == "say_team" ) {
+ return;
+ }
+ }
+
+ clientcommand( self, sCommand );
+}
+
void SV_PausedTic( float fDuration ) {
}
diff --git a/Source/Shared/Radio.c b/Source/Shared/Radio.c
index b666442e..a6ca5576 100755
--- a/Source/Shared/Radio.c
+++ b/Source/Shared/Radio.c
@@ -179,7 +179,7 @@ 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 );
+ CSQC_Parse_Print( sprintf( "^2[RADIO]^xF80: %s\n", sRadioChat[ fMessage ] ), PRINT_CHAT );
}
/*
@@ -191,7 +191,7 @@ 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 );
+ CSQC_Parse_Print( sprintf( "^2[RADIO] %s%s^xF80: %s\n", HUD_GetChatColorHEX( stof( getplayerkeyvalue( fPlayerNum, "*team" ) ) ), getplayerkeyvalue( fPlayerNum, "name" ), sRadioChat[ fMessage ] ), PRINT_CHAT );
}
#endif
diff --git a/freecs/csprogs.dat b/freecs/csprogs.dat
index 5f2213c9..612d4fe2 100644
Binary files a/freecs/csprogs.dat and b/freecs/csprogs.dat differ
diff --git a/freecs/default.cfg b/freecs/default.cfg
index 848e206a..ba90a01a 100755
--- a/freecs/default.cfg
+++ b/freecs/default.cfg
@@ -52,8 +52,8 @@ seta cl_bobup 0.5
seta r_particledesc default
seta pm_bunnyspeedcap 1
-seta con_color 255 128 0
-seta vgui_color 255 128 0
+seta con_color "255 170 0"
+seta vgui_color "255 170 0"
seta cross_color 0 255 0
hostname "FreeCS Server"
@@ -72,4 +72,5 @@ seta r_shadow_realtime_world_shadows "0"
seta r_shadow_realtime_dlight_shadows "0"
seta r_imageexensions "tga bmp pcx"
seta vid_conautoscale "1"
-seta scr_conalpha "1"
\ No newline at end of file
+seta scr_conalpha "1"
+seta con_notifylines "0"
\ No newline at end of file
diff --git a/freecs/progs.dat b/freecs/progs.dat
index 1a459853..8e7e3cff 100644
Binary files a/freecs/progs.dat and b/freecs/progs.dat differ