Weapon selection now cares about the grenade slot again.

Overhauled chat handling and display
HUD and VGUI colors now reflect 1.5 more closely
Fixes to func_door
Fixes to func_door_rotating
Overhauled radio message handling and diplay to match chat
This commit is contained in:
Marco Cawthorne 2017-07-01 20:31:35 +02:00
parent d25eb3850f
commit 06d1cf7a3c
16 changed files with 225 additions and 69 deletions

View file

@ -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;

View file

@ -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;

View file

@ -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 );
}
}

View file

@ -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] = {

View file

@ -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;

View file

@ -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;

View file

@ -25,7 +25,7 @@
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\VGUITeamSelect.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\View.c" />
</category>
<category name="Server" expanded="no">
<category name="Server" expanded="yes">
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\AmbientSound.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\Ammo.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\ArmouryEntity.c" />
@ -71,7 +71,7 @@
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Objects.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\progs.src" />
</category>
<category name="Shared" expanded="no">
<category name="Shared" expanded="yes">
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\Animations.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\BaseMelee.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\Effects.c" />
@ -113,7 +113,18 @@
</project>
<workspace version="Crimson Editor 3.60">
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\HUDCrosshair.c" linenum="28" placement="0:1:-1:-1:-4:-23:132:132:980:597" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\HUD.c" linenum="411" placement="2:3:-1:-1:-4:-23:154:154:1006:623" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\Event.c" linenum="498" placement="0:1:-1:-1:-4:-23:44:44:892:509" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\Main.c" linenum="81" placement="0:1:-1:-1:-4:-23:66:66:918:535" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\Draw.c" linenum="31" placement="0:1:-1:-1:-4:-23:88:88:940:557" />
<localfile path="C:\Users\eukara\Dropbox\The Wastes Build\SDK\Source\Client\Defs.h" linenum="26" placement="0:1:-1:-1:-4:-23:110:110:962:579" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Builtins.h" linenum="873" placement="0:1:-1:-1:-4:-23:154:154:1006:623" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\VGUIScoreboard.c" linenum="49" placement="0:1:-1:-1:-4:-23:176:176:1028:645" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\VGUIObjects.c" linenum="39" placement="0:1:-1:-1:-4:-23:198:198:1050:667" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponAK47.c" linenum="1" placement="0:1:-1:-1:-4:-23:220:220:1072:689" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\Radio.c" linenum="182" placement="0:1:-1:-1:-4:-23:0:0:852:469" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\Spawn.c" linenum="300" placement="0:1:-1:-1:-4:-23:22:22:874:491" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\Defs.h" linenum="93" placement="0:1:-1:-1:-4:-23:220:220:1072:689" />
<localfile path="C:\Users\eukara\Dropbox\The Wastes Build\SDK\Source\Client\Draw.c" linenum="65" placement="0:1:-1:-1:-4:-23:0:0:852:469" />
<localfile path="C:\Program Files (x86)\Winamp\Plugins\AudioScrobbler.log.txt" linenum="1" placement="2:3:-1:-1:-4:-23:22:22:874:491" />
</workspace>

View file

@ -226,7 +226,9 @@ enum {
EV_CAMERATRIGGER,
EV_RADIOMSG,
EV_RADIOMSG2,
EV_ORBITUARY
EV_ORBITUARY,
EV_CHAT,
EV_CHAT_TEAM
};
// Submodel materials

View file

@ -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;

View file

@ -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 ) {

View file

@ -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 );
}

View file

@ -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 ) {
}

View file

@ -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

Binary file not shown.

View file

@ -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"
seta scr_conalpha "1"
seta con_notifylines "0"

Binary file not shown.