Added bomb-defusing
Added progressbar on bomb defusing Added seperators on the timer and the ammo display Fixed some USE bugs related to doors and other ents +use (+button6) is now something that can be toggled, whereas before it was a one-time thing Added various sounds when buying things Added various messages when trying to buy things you already have Added proper radio sounds to the bombing mission type More work done on the equipment
This commit is contained in:
parent
dc95dd3c12
commit
f8a1902187
24 changed files with 455 additions and 123 deletions
|
@ -28,7 +28,6 @@ Init all the cmds in one place
|
|||
void CSQC_ConsoleCommand_Init( void ) {
|
||||
registercommand( "buy" );
|
||||
registercommand( "chooseteam" );
|
||||
registercommand( "use" );
|
||||
registercommand( "testobt" );
|
||||
registercommand( "+showscores" );
|
||||
registercommand( "-showscores" );
|
||||
|
@ -55,14 +54,6 @@ float CSQC_ConsoleCommand( string sCMD ) {
|
|||
fVGUI_Display = VGUI_TEAMSELECT;
|
||||
return TRUE;
|
||||
break;
|
||||
case "use":
|
||||
sendevent( "PlayerUse", "" );
|
||||
return TRUE;
|
||||
break;
|
||||
case "testobt":
|
||||
HUD_AddOrbituaries( player_localnum, TEAM_T, player_localnum, TEAM_CT, getstatf( STAT_ACTIVEWEAPON ), FALSE );
|
||||
return TRUE;
|
||||
break;
|
||||
case "+showscores":
|
||||
iShowScores = TRUE;
|
||||
return TRUE;
|
||||
|
|
|
@ -107,7 +107,6 @@ void HUD_DrawHealth( void ) {
|
|||
fHealthAlpha = HUD_ALPHA;
|
||||
}
|
||||
|
||||
// Health
|
||||
vector vHealthPos = [ 16, vVideoResolution_y - 42 ];
|
||||
drawsubpic( vHealthPos, '24 24 0', HUD_NUMFILE_LAYER, [ NUMSIZE_X * 2, NUMSIZE_Y], [ NUMSIZE_X, NUMSIZE_X ], VGUI_WINDOW_FGCOLOR, HUD_ALPHA, DRAWFLAG_ADDITIVE );
|
||||
HUD_DrawNums( getstatf( STAT_HEALTH ), vHealthPos + '72 0', HUD_ALPHA, VGUI_WINDOW_FGCOLOR );
|
||||
|
@ -133,6 +132,7 @@ void HUD_DrawArmor( void ) {
|
|||
} else {
|
||||
fArmorAlpha = HUD_ALPHA;
|
||||
}
|
||||
|
||||
vector vArmorPos = [ 112, vVideoResolution_y - 42 ];
|
||||
drawsubpic( vArmorPos, '24 24 0', HUD_NUMFILE_LAYER, [ 0, NUMSIZE_Y], [ NUMSIZE_X, NUMSIZE_X ], VGUI_WINDOW_FGCOLOR, fArmorAlpha, DRAWFLAG_ADDITIVE );
|
||||
HUD_DrawNums( getstatf( STAT_ARMOR ), vArmorPos + '72 0', fArmorAlpha, VGUI_WINDOW_FGCOLOR);
|
||||
|
@ -170,8 +170,6 @@ void HUD_DrawIcons( void ) {
|
|||
} else {
|
||||
drawsubpic( vBIconPos, '32 32 0', HUD_NUMFILE_LAYER, [ 0, 0.125 * 5 - 0.046875], [ 0.125, 0.125 ], '0 1 0', 1, DRAWFLAG_ADDITIVE );
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -186,7 +184,7 @@ int iOldUnits;
|
|||
float fTimerAlpha;
|
||||
void HUD_DrawTimer( void ) {
|
||||
int iMinutes, iSeconds, iTens, iUnits;
|
||||
vector vTimePos = [ ( vVideoResolution_x / 2 ) - 60, vVideoResolution_y - 42 ];
|
||||
vector vTimePos = [ ( vVideoResolution_x / 2 ) - 62, vVideoResolution_y - 42 ];
|
||||
|
||||
if( serverkey( "timelimit" ) ) {
|
||||
float fTimeLeft = ( stof(serverkey( "timelimit" )) * 60 ) - getstatf( STAT_GAMETIME );
|
||||
|
@ -217,11 +215,17 @@ void HUD_DrawTimer( void ) {
|
|||
}
|
||||
|
||||
HUD_DrawNumber( iMinutes, vTimePos + '48 0 0', fAlpha, '1 0 0' );
|
||||
HUD_DrawNumber( iTens, vTimePos + '70 0 0', fAlpha, '1 0 0' );
|
||||
HUD_DrawNumber( iUnits, vTimePos + '94 0 0',fAlpha, '1 0 0' );
|
||||
HUD_DrawNumber( iTens, vTimePos + '75 0 0', fAlpha, '1 0 0' );
|
||||
HUD_DrawNumber( iUnits, vTimePos + '99 0 0',fAlpha, '1 0 0' );
|
||||
HUD_DrawNumber( iMinutes, vTimePos + '48 0 0', 1 - fAlpha, VGUI_WINDOW_FGCOLOR );
|
||||
HUD_DrawNumber( iTens, vTimePos + '70 0 0', 1 - fAlpha, VGUI_WINDOW_FGCOLOR );
|
||||
HUD_DrawNumber( iUnits, vTimePos + '94 0 0',1 - fAlpha, VGUI_WINDOW_FGCOLOR );
|
||||
HUD_DrawNumber( iTens, vTimePos + '75 0 0', 1 - fAlpha, VGUI_WINDOW_FGCOLOR );
|
||||
HUD_DrawNumber( iUnits, vTimePos + '99 0 0',1 - fAlpha, VGUI_WINDOW_FGCOLOR );
|
||||
|
||||
// : symbol
|
||||
drawsubpic( vTimePos + '70 6 0', '3 3 0', HUD_NUMFILE_LAYER, [0.9375, 0], [ 0.01171875, 0.01171875 ], '1 0 0', fAlpha, DRAWFLAG_ADDITIVE );
|
||||
drawsubpic( vTimePos + '70 16 0', '3 3 0', HUD_NUMFILE_LAYER, [0.9375, 0], [ 0.01171875, 0.01171875 ], '1 0 0', fAlpha, DRAWFLAG_ADDITIVE );
|
||||
drawsubpic( vTimePos + '70 6 0', '3 3 0', HUD_NUMFILE_LAYER, [0.9375, 0], [ 0.01171875, 0.01171875 ], VGUI_WINDOW_FGCOLOR, 1 - fAlpha, DRAWFLAG_ADDITIVE );
|
||||
drawsubpic( vTimePos + '70 16 0', '3 3 0', HUD_NUMFILE_LAYER, [0.9375, 0], [ 0.01171875, 0.01171875 ], VGUI_WINDOW_FGCOLOR, 1 - fAlpha, DRAWFLAG_ADDITIVE );
|
||||
|
||||
drawsubpic( vTimePos, '24 25 0', HUD_NUMFILE_LAYER, [ NUMSIZE_X * 6, NUMSIZE_Y * 3], [ NUMSIZE_X, NUMSIZE_Y ], '1 0 0', fAlpha, DRAWFLAG_ADDITIVE );
|
||||
drawsubpic( vTimePos, '24 25 0', HUD_NUMFILE_LAYER, [ NUMSIZE_X * 6, NUMSIZE_Y * 3], [ NUMSIZE_X, NUMSIZE_Y ], VGUI_WINDOW_FGCOLOR, 1 - fAlpha, DRAWFLAG_ADDITIVE );
|
||||
|
@ -236,8 +240,12 @@ void HUD_DrawTimer( void ) {
|
|||
fTimerAlpha = HUD_ALPHA;
|
||||
}
|
||||
HUD_DrawNumber( iMinutes, vTimePos + '48 0 0', fTimerAlpha, VGUI_WINDOW_FGCOLOR );
|
||||
HUD_DrawNumber( iTens, vTimePos + '70 0 0', fTimerAlpha, VGUI_WINDOW_FGCOLOR );
|
||||
HUD_DrawNumber( iUnits, vTimePos + '94 0 0', fTimerAlpha, VGUI_WINDOW_FGCOLOR );
|
||||
HUD_DrawNumber( iTens, vTimePos + '75 0 0', fTimerAlpha, VGUI_WINDOW_FGCOLOR );
|
||||
HUD_DrawNumber( iUnits, vTimePos + '99 0 0', fTimerAlpha, VGUI_WINDOW_FGCOLOR );
|
||||
|
||||
drawsubpic( vTimePos + '70 6 0', '3 3 0', HUD_NUMFILE_LAYER, [0.9375, 0], [ 0.01171875, 0.01171875 ], VGUI_WINDOW_FGCOLOR, fTimerAlpha, DRAWFLAG_ADDITIVE );
|
||||
drawsubpic( vTimePos + '70 16 0', '3 3 0', HUD_NUMFILE_LAYER, [0.9375, 0], [ 0.01171875, 0.01171875 ], VGUI_WINDOW_FGCOLOR, fTimerAlpha, DRAWFLAG_ADDITIVE );
|
||||
|
||||
drawsubpic( vTimePos, '24 25 0', HUD_NUMFILE_LAYER, [ NUMSIZE_X * 6, NUMSIZE_Y * 3], [ NUMSIZE_X, NUMSIZE_Y ], VGUI_WINDOW_FGCOLOR, fTimerAlpha, DRAWFLAG_ADDITIVE );
|
||||
iOldUnits = iUnits;
|
||||
}
|
||||
|
@ -253,28 +261,45 @@ Draws the amount of money (0-16000) with an icon to the screen
|
|||
float fOldMoneyValue;
|
||||
float fMoneyAlphaEffect;
|
||||
vector vMoneyColorEffect;
|
||||
float fMoneyDifference;
|
||||
void HUD_DrawMoney( void ) {
|
||||
// If the money differs from last frame, paint it appropriately
|
||||
if ( getstatf( STAT_MONEY ) > fOldMoneyValue ) {
|
||||
// Make it green for a short time
|
||||
vMoneyColorEffect = '0 1 0';
|
||||
fMoneyAlphaEffect = 1.0;
|
||||
fMoneyDifference = fOldMoneyValue - getstatf( STAT_MONEY );
|
||||
} else if ( getstatf( STAT_MONEY ) < fOldMoneyValue ) {
|
||||
// Make it red
|
||||
vMoneyColorEffect = '1 0 0';
|
||||
fMoneyAlphaEffect = 1.0;
|
||||
fMoneyDifference = fOldMoneyValue - getstatf( STAT_MONEY );
|
||||
}
|
||||
|
||||
vector vMoneyPos = [ vVideoResolution_x - 160, vVideoResolution_y - 72 ];
|
||||
|
||||
// If the alpha/color effect is active, draw the money twice in their varying alphas/colors
|
||||
if ( fMoneyAlphaEffect > 0 ) {
|
||||
fMoneyAlphaEffect -= frametime * 0.5;
|
||||
drawsubpic( vMoneyPos, '18 25 0', HUD_NUMFILE_LAYER, [ NUMSIZE_X * 8, NUMSIZE_Y * 1], [ NUMSIZE_X * 0.75, NUMSIZE_Y ], vMoneyColorEffect, fMoneyAlphaEffect, DRAWFLAG_ADDITIVE );
|
||||
drawsubpic( vMoneyPos, '18 25 0', HUD_NUMFILE_LAYER, [ NUMSIZE_X * 8, NUMSIZE_Y * 1], [ NUMSIZE_X * 0.75, NUMSIZE_Y ], VGUI_WINDOW_FGCOLOR, HUD_ALPHA - ( fMoneyAlphaEffect * 0.5 ), DRAWFLAG_ADDITIVE );
|
||||
|
||||
// Draw the +/- symbols depending on whether or not we made or lost money
|
||||
if ( fMoneyDifference < 0 ) {
|
||||
drawsubpic( vMoneyPos + '0 -32 0', '18 23 0', HUD_NUMFILE_LAYER, [ 0.8671875, 0.09765625], [ 0.0703125, 0.08984375 ], vMoneyColorEffect, fMoneyAlphaEffect, DRAWFLAG_ADDITIVE );
|
||||
} else {
|
||||
drawsubpic( vMoneyPos + '0 -32 0', '13 23 0', HUD_NUMFILE_LAYER, [ 0.8203125, 0.09765625], [ 0.05078125, 0.08984375 ], vMoneyColorEffect, fMoneyAlphaEffect, DRAWFLAG_ADDITIVE );
|
||||
}
|
||||
|
||||
// Shift the numbers for reverse drawing
|
||||
vMoneyPos_x += ( 24 * 5 );
|
||||
|
||||
// Draw the regular numbers at their normal positions
|
||||
HUD_DrawNums( getstatf( STAT_MONEY ), vMoneyPos, fMoneyAlphaEffect, vMoneyColorEffect );
|
||||
HUD_DrawNums( getstatf( STAT_MONEY ), vMoneyPos, HUD_ALPHA - ( fMoneyAlphaEffect * 0.5 ), VGUI_WINDOW_FGCOLOR );
|
||||
|
||||
// Draw above how much money we've gotten from all this
|
||||
HUD_DrawNums( fabs( fMoneyDifference ), vMoneyPos + '0 -32 0', fMoneyAlphaEffect, vMoneyColorEffect );
|
||||
} else {
|
||||
drawsubpic( vMoneyPos, '18 25 0', HUD_NUMFILE_LAYER, [ NUMSIZE_X * 8, NUMSIZE_Y * 1], [ NUMSIZE_X * 0.75, NUMSIZE_Y ], VGUI_WINDOW_FGCOLOR, HUD_ALPHA, DRAWFLAG_ADDITIVE );
|
||||
vMoneyPos_x += ( 24 * 5 );
|
||||
|
@ -308,8 +333,11 @@ void HUD_DrawAmmo( void ) {
|
|||
fAmmoAlpha = HUD_ALPHA;
|
||||
}
|
||||
|
||||
vector vAmmoClipPos = [ vVideoResolution_x - 136, vVideoResolution_y - 42 ];
|
||||
vector vAmmoClipPos = [ vVideoResolution_x - 142, vVideoResolution_y - 42 ];
|
||||
HUD_DrawNums( getstatf( STAT_CURRENT_CLIP ), vAmmoClipPos, fAmmoAlpha, VGUI_WINDOW_FGCOLOR );
|
||||
|
||||
drawsubpic( [vVideoResolution_x - 118, vVideoResolution_y - 42], '3 25 0', HUD_NUMFILE_LAYER, [0.9375, 0], [ 0.01171875, 0.09765625 ], VGUI_WINDOW_FGCOLOR, fAmmoAlpha, DRAWFLAG_ADDITIVE );
|
||||
|
||||
vector vAmmoCalPos = [ vVideoResolution_x - 64, vVideoResolution_y - 42 ];
|
||||
HUD_DrawNums( getstatf( STAT_CURRENT_CALIBER ), vAmmoCalPos, fAmmoAlpha, VGUI_WINDOW_FGCOLOR );
|
||||
|
||||
|
@ -319,6 +347,37 @@ void HUD_DrawAmmo( void ) {
|
|||
fOldCal = getstatf( STAT_CURRENT_CALIBER );
|
||||
}
|
||||
|
||||
void HUD_DrawProgressBar( void ) {
|
||||
vector vSize = '540 16';
|
||||
vector vMainPos;
|
||||
vector v1, v2, v3;
|
||||
|
||||
if ( getstatf( STAT_PROGRESS ) > 0 ) {
|
||||
vMainPos_x = ( vVideoResolution_x / 2 ) - (vSize_x / 2);
|
||||
vMainPos_y = ( vVideoResolution_y / 2 ) - (vSize_y / 2);
|
||||
|
||||
// Draw the background
|
||||
vector vBar = vSize;
|
||||
vBar_x = 536 * getstatf( STAT_PROGRESS );
|
||||
vBar_y = 13;
|
||||
drawfill( vMainPos + '1 1 0', vBar, VGUI_WINDOW_FGCOLOR, 1, DRAWFLAG_ADDITIVE );
|
||||
|
||||
// Draw the outline START
|
||||
v1_x = vMainPos_x + vSize_x;
|
||||
v1_y = vMainPos_y;
|
||||
drawline( 1.0, vMainPos - '1 0 0', v1, VGUI_WINDOW_FGCOLOR, 1, DRAWFLAG_ADDITIVE );
|
||||
|
||||
v2_x = vMainPos_x;
|
||||
v2_y = vMainPos_y + vSize_y;
|
||||
drawline( 1.0, vMainPos, v2, VGUI_WINDOW_FGCOLOR, 1, DRAWFLAG_ADDITIVE );
|
||||
|
||||
v3 = vMainPos + vSize;
|
||||
drawline( 1.0, v1, v3, VGUI_WINDOW_FGCOLOR, 1, DRAWFLAG_ADDITIVE );
|
||||
drawline( 1.0, v2, v3, VGUI_WINDOW_FGCOLOR, 1, DRAWFLAG_ADDITIVE );
|
||||
// Draw the outline END
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
HUD_Draw
|
||||
|
@ -340,4 +399,5 @@ void HUD_Draw( void ) {
|
|||
HUD_DrawMoney();
|
||||
HUD_DrawAmmo();
|
||||
HUD_DrawOrbituaries();
|
||||
HUD_DrawProgressBar();
|
||||
}
|
||||
|
|
|
@ -52,4 +52,10 @@ typedef struct {
|
|||
typedef struct {
|
||||
string sName;
|
||||
string sImage;
|
||||
} vguiweapon_t;
|
||||
} vguiweaponobject_t;
|
||||
|
||||
typedef struct {
|
||||
float fID;
|
||||
string sName;
|
||||
string sImage;
|
||||
} vguiequipobject_t;
|
||||
|
|
|
@ -20,7 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
|
||||
#include "VGUI.h"
|
||||
|
||||
vguiweapon_t vguiWeaponTable[ CS_WEAPON_COUNT ] = {
|
||||
vguiweaponobject_t vguiWeaponTable[ CS_WEAPON_COUNT ] = {
|
||||
{ "None", "" },
|
||||
{ "Knife", "" },
|
||||
{ "H&K USP .45 Tactical", "gfx/vgui/640_usp" },
|
||||
|
@ -47,6 +47,16 @@ vguiweapon_t vguiWeaponTable[ CS_WEAPON_COUNT ] = {
|
|||
{ "FN M249 Para", "gfx/vgui/640_m249" }
|
||||
};
|
||||
|
||||
vguiequipobject_t vguiEquipmentTable[ 7 ] = {
|
||||
{ EQUIPMENT_KEVLAR, "Kevlar", "gfx/vgui/kevlar" },
|
||||
{ EQUIPMENT_HELMET, "Kevlar & Helmet", "gfx/vgui/kevlar_helmet" },
|
||||
{ EQUIPMENT_FLASHBANG, "Flashband", "gfx/vgui/640_flashbang" },
|
||||
{ EQUIPMENT_HEGRENADE, "HE Grenade", "gfx/vgui/640_hegrenade" },
|
||||
{ EQUIPMENT_SMOKEGRENADE, "Smoke Grenade", "gfx/vgui/640_smokegrenade" },
|
||||
{ EQUIPMENT_DEFUSALKIT, "Defusal Kit", "gfx/vgui/defuser" },
|
||||
{ EQUIPMENT_NIGHTVISION, "NightVision", "gfx/vgui/nightvision" },
|
||||
};
|
||||
|
||||
// TODO: Clean this up
|
||||
void VGUI_BuyMenu_Main( vector vPos ) {
|
||||
static void BuyMenu_Main_1( void ) {
|
||||
|
@ -106,27 +116,37 @@ This is kinda ugly, but it will work for now
|
|||
float iLastSelected;
|
||||
void VGUI_BuyMenu_BuyWeapon( void ) {
|
||||
if( iLastSelected ) {
|
||||
sendevent( "GamePlayerBuy", "f", iLastSelected );
|
||||
sendevent( "PlayerBuyWeapon", "f", iLastSelected );
|
||||
fVGUI_Display = VGUI_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
====================
|
||||
VGUI_BuyMenu_Button
|
||||
VGUI_BuyMenu_BuyEquipment
|
||||
====================
|
||||
*/
|
||||
void VGUI_BuyMenu_BuyEquipment( void ) {
|
||||
sendevent( "PlayerBuyEquipment", "f", iLastSelected );
|
||||
fVGUI_Display = VGUI_NONE;
|
||||
}
|
||||
|
||||
/*
|
||||
====================
|
||||
VGUI_BuyMenu_WeaponButton
|
||||
|
||||
Draws a button that displays whether or not you can purchase said weapon etc.
|
||||
====================
|
||||
*/
|
||||
void VGUI_BuyMenu_Button( float fWeapon ) {
|
||||
void VGUI_BuyMenu_WeaponButton( float fWeapon ) {
|
||||
iLastSelected = fWeapon;
|
||||
|
||||
if ( wptTable[ fWeapon ].iPrice <= getstatf( STAT_MONEY ) ) {
|
||||
if ( VGUI_Button( vguiWeaponTable[ fWeapon ].sName, VGUI_BuyMenu_BuyWeapon, vVGUIButtonPos, '180 24 0' ) == TRUE ) {
|
||||
drawpic( vVGUIWindowPos + '290 116', vguiWeaponTable[ fWeapon ].sImage, '256 64', '1 1 1', 1 );
|
||||
VGUI_Text( sprintf( "Price: %d", (float)wptTable[ fWeapon ].iPrice ) , vVGUIWindowPos + '256 250', '8 8 0' );
|
||||
VGUI_Text( sprintf( "Caliber: %d", (float)wptTable[ fWeapon ].iCaliber ) , vVGUIWindowPos + '256 260', '8 8 0' );
|
||||
VGUI_Text( sprintf( "Rounds Per Minute: %d", ( wptTable[ fWeapon ].fAttackFinished) * 3600 ) , vVGUIWindowPos + '256 270', '8 8 0' );
|
||||
VGUI_Text( sprintf( "Price: %i", wptTable[ fWeapon ].iPrice ), vVGUIWindowPos + '256 250', '8 8 0' );
|
||||
VGUI_Text( sprintf( "Caliber: %i", wptTable[ fWeapon ].iCaliber ), vVGUIWindowPos + '256 260', '8 8 0' );
|
||||
VGUI_Text( sprintf( "Rounds Per Minute: %d", ( wptTable[ fWeapon ].fAttackFinished) * 3600 ), vVGUIWindowPos + '256 270', '8 8 0' );
|
||||
}
|
||||
} else {
|
||||
VGUI_FakeButton( vguiWeaponTable[ fWeapon ].sName, vVGUIButtonPos, '180 24 0' );
|
||||
|
@ -135,6 +155,28 @@ void VGUI_BuyMenu_Button( float fWeapon ) {
|
|||
vVGUIButtonPos_y += 32;
|
||||
}
|
||||
|
||||
/*
|
||||
====================
|
||||
VGUI_BuyMenu_EquipmentButton
|
||||
|
||||
Draws a button that displays whether or not you can purchase said equipment
|
||||
====================
|
||||
*/
|
||||
void VGUI_BuyMenu_EquipmentButton( float fID ) {
|
||||
iLastSelected = fID;
|
||||
|
||||
if ( eqptTable[ fID ].iPrice <= getstatf( STAT_MONEY ) ) {
|
||||
if ( VGUI_Button( vguiEquipmentTable[ fID ].sName, VGUI_BuyMenu_BuyEquipment, vVGUIButtonPos, '180 24 0' ) == TRUE ) {
|
||||
drawpic( vVGUIWindowPos + '290 116', vguiEquipmentTable[ fID ].sImage, '256 64', '1 1 1', 1 );
|
||||
VGUI_Text( sprintf( "Price: %i", eqptTable[ fID ].iPrice ) , vVGUIWindowPos + '256 250', '8 8 0' );
|
||||
}
|
||||
} else {
|
||||
VGUI_FakeButton( vguiEquipmentTable[ fID ].sName, vVGUIButtonPos, '180 24 0' );
|
||||
}
|
||||
|
||||
vVGUIButtonPos_y += 32;
|
||||
}
|
||||
|
||||
/*
|
||||
====================
|
||||
VGUI_BuyMenu_Handguns
|
||||
|
@ -143,20 +185,19 @@ VGUI_BuyMenu_Handguns
|
|||
void VGUI_BuyMenu_Handguns( vector vPos ) {
|
||||
vVGUIButtonPos = vPos + '16 116 0';
|
||||
|
||||
VGUI_BuyMenu_Button( WEAPON_USP45 );
|
||||
VGUI_BuyMenu_Button( WEAPON_GLOCK18 );
|
||||
VGUI_BuyMenu_Button( WEAPON_DEAGLE );
|
||||
VGUI_BuyMenu_Button( WEAPON_P228 );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_USP45 );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_GLOCK18 );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_DEAGLE );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_P228 );
|
||||
|
||||
vVGUIButtonPos_y += 32;
|
||||
|
||||
if ( stof( getplayerkeyvalue( player_localnum, "*team" ) ) == TEAM_T ) {
|
||||
VGUI_BuyMenu_Button( WEAPON_ELITES );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_ELITES );
|
||||
} else if ( stof( getplayerkeyvalue( player_localnum, "*team" ) ) == TEAM_CT ) {
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_FIVESEVEN );
|
||||
}
|
||||
|
||||
if ( stof( getplayerkeyvalue( player_localnum, "*team" ) ) == TEAM_CT ) {
|
||||
VGUI_BuyMenu_Button( WEAPON_FIVESEVEN );
|
||||
}
|
||||
VGUI_Button( "Back", VGUI_BuyMenu_Back, vPos + '16 440 0', '180 24 0' );
|
||||
}
|
||||
|
||||
|
@ -168,8 +209,8 @@ VGUI_BuyMenu_Shotguns
|
|||
void VGUI_BuyMenu_Shotguns( vector vPos ) {
|
||||
vVGUIButtonPos = vPos + '16 116 0';
|
||||
|
||||
VGUI_BuyMenu_Button( WEAPON_M3 );
|
||||
VGUI_BuyMenu_Button( WEAPON_XM1014 );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_M3 );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_XM1014 );
|
||||
|
||||
VGUI_Button( "Back", VGUI_BuyMenu_Back, vPos + '16 440 0', '180 24 0' );
|
||||
}
|
||||
|
@ -183,18 +224,16 @@ void VGUI_BuyMenu_SMGs( vector vPos ) {
|
|||
vVGUIButtonPos = vPos + '16 116 0';
|
||||
|
||||
|
||||
VGUI_BuyMenu_Button( WEAPON_MP5 );
|
||||
VGUI_BuyMenu_Button( WEAPON_P90 );
|
||||
VGUI_BuyMenu_Button( WEAPON_UMP45 );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_MP5 );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_P90 );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_UMP45 );
|
||||
|
||||
vVGUIButtonPos_y += 32;
|
||||
|
||||
if ( stof( getplayerkeyvalue( player_localnum, "*team" ) ) == TEAM_T ) {
|
||||
VGUI_BuyMenu_Button( WEAPON_MAC10 );
|
||||
}
|
||||
|
||||
if ( stof( getplayerkeyvalue( player_localnum, "*team" ) ) == TEAM_CT ) {
|
||||
VGUI_BuyMenu_Button( WEAPON_TMP );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_MAC10 );
|
||||
} else if ( stof( getplayerkeyvalue( player_localnum, "*team" ) ) == TEAM_CT ) {
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_TMP );
|
||||
}
|
||||
|
||||
VGUI_Button( "Back", VGUI_BuyMenu_Back, vPos + '16 440 0', '180 24 0' );
|
||||
|
@ -209,23 +248,23 @@ void VGUI_BuyMenu_Rifles( vector vPos ) {
|
|||
vVGUIButtonPos = vPos + '16 116 0';
|
||||
|
||||
if ( getstati( STAT_TEAM ) == TEAM_T ) {
|
||||
VGUI_BuyMenu_Button( WEAPON_AK47 );
|
||||
VGUI_BuyMenu_Button( WEAPON_SG552 );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_AK47 );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_SG552 );
|
||||
|
||||
VGUI_BuyMenu_Button( WEAPON_SCOUT );
|
||||
VGUI_BuyMenu_Button( WEAPON_AWP );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_SCOUT );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_AWP );
|
||||
|
||||
VGUI_BuyMenu_Button( WEAPON_G3SG1 );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_G3SG1 );
|
||||
}
|
||||
|
||||
if ( getstati( STAT_TEAM ) == TEAM_CT ) {
|
||||
VGUI_BuyMenu_Button( WEAPON_M4A1 );
|
||||
VGUI_BuyMenu_Button( WEAPON_AUG );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_M4A1 );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_AUG );
|
||||
|
||||
VGUI_BuyMenu_Button( WEAPON_SCOUT );
|
||||
VGUI_BuyMenu_Button( WEAPON_AWP );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_SCOUT );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_AWP );
|
||||
|
||||
VGUI_BuyMenu_Button( WEAPON_SG550 );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_SG550 );
|
||||
}
|
||||
|
||||
VGUI_Button( "Back", VGUI_BuyMenu_Back, vPos + '16 440 0', '180 24 0' );
|
||||
|
@ -239,7 +278,7 @@ VGUI_BuyMenu_Machineguns
|
|||
void VGUI_BuyMenu_Machineguns( vector vPos ) {
|
||||
vVGUIButtonPos = vPos + '16 116 0';
|
||||
|
||||
VGUI_BuyMenu_Button( WEAPON_PARA );
|
||||
VGUI_BuyMenu_WeaponButton( WEAPON_PARA );
|
||||
|
||||
VGUI_Button( "Back", VGUI_BuyMenu_Back, vPos + '16 440 0', '180 24 0' );
|
||||
}
|
||||
|
@ -250,17 +289,19 @@ VGUI_BuyMenu_Equipment
|
|||
====================
|
||||
*/
|
||||
void VGUI_BuyMenu_Equipment( vector vPos ) {
|
||||
vVGUIButtonPos = vPos + '16 116 0';
|
||||
|
||||
/*VGUI_BuyMenu_Button( "Kevlar Vest", "", BuyMenu_Equipment_1, vPos + '16 116 0', '180 24 0' );
|
||||
VGUI_BuyMenu_Button( "Kevlar Vest & Helmet", "", BuyMenu_Equipment_1, vPos + '16 148 0', '180 24 0' );
|
||||
VGUI_BuyMenu_Button( "Flashbang", "gfx/vgui/640_flashbang", BuyMenu_Equipment_1, vPos + '16 180 0', '180 24 0' );
|
||||
VGUI_BuyMenu_Button( "HE Grenade", "gfx/vgui/640_hegrenade", BuyMenu_Equipment_1, vPos + '16 212 0', '180 24 0' );
|
||||
VGUI_BuyMenu_Button( "Smoke Grenade", "gfx/vgui/640_smokegrenade", BuyMenu_Equipment_1, vPos + '16 244 0', '180 24 0' );
|
||||
VGUI_BuyMenu_Button( "NightVision Goggles", "", BuyMenu_Equipment_1, vPos + '16 276 0', '180 24 0' );*/
|
||||
|
||||
if ( getplayerkeyvalue( player_localnum, "team" ) == "ct" ) {
|
||||
//VGUI_BuyMenu_Button( "Defuse Kit", "", BuyMenu_Equipment_1, vPos + '16 308 0', '180 24 0' );
|
||||
VGUI_BuyMenu_EquipmentButton( 0 );
|
||||
VGUI_BuyMenu_EquipmentButton( 1 );
|
||||
VGUI_BuyMenu_EquipmentButton( 2 );
|
||||
VGUI_BuyMenu_EquipmentButton( 3 );
|
||||
VGUI_BuyMenu_EquipmentButton( 4 );
|
||||
|
||||
if ( stof( getplayerkeyvalue( player_localnum, "*team" ) ) == TEAM_CT ) {
|
||||
VGUI_BuyMenu_EquipmentButton( 5 );
|
||||
}
|
||||
|
||||
VGUI_BuyMenu_EquipmentButton( 6 );
|
||||
|
||||
VGUI_Button( "Back", VGUI_BuyMenu_Back, vPos + '16 440 0', '180 24 0' );
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@ Defs.h
|
|||
../Shared/Weapons.c
|
||||
../Shared/Effects.c
|
||||
../Shared/Radio.c
|
||||
../Shared/Equipment.c
|
||||
|
||||
../Server/AmbientSound.c
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@ enum {
|
|||
STAT_SLOT_GRENADE,
|
||||
STAT_CURRENT_CLIP,
|
||||
STAT_CURRENT_CALIBER,
|
||||
STAT_PROGRESS,
|
||||
STAT_TEAM,
|
||||
STAT_WON_T,
|
||||
STAT_WON_CT
|
||||
|
@ -85,6 +86,15 @@ enum {
|
|||
WEAPON_C4BOMB
|
||||
};
|
||||
|
||||
#define CS_EQUIPMENT_COUNT 7
|
||||
#define EQUIPMENT_KEVLAR 1
|
||||
#define EQUIPMENT_HELMET 2
|
||||
#define EQUIPMENT_FLASHBANG 4
|
||||
#define EQUIPMENT_HEGRENADE 8
|
||||
#define EQUIPMENT_SMOKEGRENADE 16
|
||||
#define EQUIPMENT_DEFUSALKIT 32
|
||||
#define EQUIPMENT_NIGHTVISION 64
|
||||
|
||||
enum {
|
||||
CALIBER_50AE = 1,
|
||||
CALIBER_762MM,
|
||||
|
@ -152,6 +162,11 @@ typedef struct {
|
|||
float fMaxInaccuracy;
|
||||
} weaponinfo_t;
|
||||
|
||||
typedef struct {
|
||||
int iID;
|
||||
int iPrice;
|
||||
} equipmentinfo_t;
|
||||
|
||||
typedef struct {
|
||||
int iSize;
|
||||
int iMaxAmount;
|
||||
|
|
9
Source/Menu/progs.src
Normal file
9
Source/Menu/progs.src
Normal file
|
@ -0,0 +1,9 @@
|
|||
#pragma target fte
|
||||
|
||||
#pragma progs_dat "../../opencs/menu.dat"
|
||||
|
||||
#includelist
|
||||
../Builtins.h
|
||||
../Globals.h
|
||||
../Math.h
|
||||
#endlist
|
|
@ -65,6 +65,7 @@ void Ammo_BuySecondary( void ) {
|
|||
|
||||
self.(wptTable[ self.iSlotSecondary ].iCaliberfld) += ammoTable[ wptTable[ self.iSlotSecondary ].iCaliber ].iSize;
|
||||
Money_AddMoney( self, -ammoTable[ wptTable[ self.iSlotSecondary ].iCaliber ].iPrice );
|
||||
sound( self, CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_IDLE );
|
||||
|
||||
if ( self.(wptTable[ self.iSlotSecondary ].iCaliberfld) > ammoTable[ wptTable[ self.iSlotSecondary ].iCaliber ].iMaxAmount ) {
|
||||
self.(wptTable[ self.iSlotSecondary ].iCaliberfld) = ammoTable[ wptTable[ self.iSlotSecondary ].iCaliber ].iMaxAmount;
|
||||
|
@ -83,8 +84,6 @@ void CSEv_GamePlayerBuyAmmo_f( float fType ) {
|
|||
Ammo_BuySecondary();
|
||||
}
|
||||
|
||||
sound( self, CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM );
|
||||
Weapon_UpdateCurrents();
|
||||
self.fAttackFinished = time + 1.0;
|
||||
}
|
||||
|
||||
|
|
|
@ -85,11 +85,8 @@ void Damage_Radius( vector vOrigin, entity eAttacker, float fDamage, float fRadi
|
|||
float fDiff = vlen( vOrigin - eDChain.origin );
|
||||
|
||||
fDiff = ( fRadius - fDiff ) / fRadius;
|
||||
|
||||
fDamage = fDamage * fDiff;
|
||||
|
||||
bprint( sprintf("[DEBUG] EXPLOSION! Hit Radius: %d, Damage Multiplier: %f\n", vlen( vOrigin - eDChain.origin ), fDiff ) );
|
||||
|
||||
|
||||
if ( fDiff > 0 ) {
|
||||
Damage_Apply( eDChain, eAttacker, fDamage, eDChain.origin );
|
||||
}
|
||||
|
|
|
@ -43,6 +43,11 @@ float EFFECT_BLOOD;
|
|||
.int iCrouchAttempt;
|
||||
.int iHasBomb;
|
||||
.float fDeaths;
|
||||
.int iEquipment;
|
||||
.float armor;
|
||||
.float fProgressBar;
|
||||
|
||||
#define FL_USERELEASED 8192
|
||||
|
||||
// Match specific fields
|
||||
int iWon_T;
|
||||
|
@ -77,6 +82,7 @@ int iBombPlanted;
|
|||
.void() vPain;
|
||||
.void() vDeath;
|
||||
.float fRespawns;
|
||||
.entity eUser;
|
||||
|
||||
// All about +use
|
||||
entity eActivator;
|
||||
|
@ -101,7 +107,7 @@ string sCSPlayers[9] = {
|
|||
"models/player/gign/gign.mdl"
|
||||
};
|
||||
|
||||
void Rules_RoundOver( int iTeamWon, int iMoneyReward );
|
||||
void Rules_RoundOver( int iTeamWon, int iMoneyReward, float fSilent );
|
||||
float Rules_BuyingPossible( void );
|
||||
void Timer_Begin( float fTime, float fMode);
|
||||
void Spawn_RespawnClient( float fTeam );
|
||||
|
|
|
@ -18,7 +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.
|
||||
*/
|
||||
|
||||
.entity eUser;
|
||||
.entity eTargetPoint;
|
||||
.entity eLastCreated;
|
||||
.int iHasBeenUsed;
|
||||
|
|
|
@ -80,8 +80,10 @@ void env_sprite( void ) {
|
|||
}
|
||||
|
||||
precache_model( self.model );
|
||||
setmodel( self, self.model );
|
||||
setorigin( self, self.origin );
|
||||
Entities_RenderSetup();
|
||||
self.pvsflags = PVSF_NOREMOVE | PVSF_IGNOREPVS;
|
||||
self.SendEntity = env_sprite_send;
|
||||
self.vUse = env_sprite_use;
|
||||
}
|
||||
|
|
|
@ -146,6 +146,11 @@ brush_rotate_trigger - What happens when you +use the brush or trigger it
|
|||
=================
|
||||
*/
|
||||
void FuncDoorRotate_Trigger( void ) {
|
||||
if ( self.fAttackFinished > time ) {
|
||||
return;
|
||||
}
|
||||
self.fAttackFinished = self.ltime + self.wait;
|
||||
|
||||
if ( ( self.state == STATE_UP ) || ( self.state == STATE_RAISED ) ) {
|
||||
FuncDoorRotate_RotateBack();
|
||||
return;
|
||||
|
@ -167,6 +172,7 @@ FuncDoorRotate_Touch
|
|||
*/
|
||||
void FuncDoorRotate_Touch( void ) {
|
||||
if ( other.classname == "player" ) {
|
||||
eActivator = other;
|
||||
FuncDoorRotate_Trigger();
|
||||
|
||||
if( !( self.spawnflags & SF_ROT_USE ) ) {
|
||||
|
@ -218,6 +224,10 @@ void func_door_rotating( void ) {
|
|||
if ( !self.speed ) {
|
||||
self.speed = 100;
|
||||
}
|
||||
|
||||
if( self.wait == 0 ) {
|
||||
self.wait = 4;
|
||||
}
|
||||
|
||||
self.pos1 = self.angles;
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ void func_hostage_rescue_touch( void ) {
|
|||
|
||||
if ( iHostagesRescued >= iHostagesMax ) {
|
||||
// TODO: Broadcast_Print: All Hostages have been rescued!
|
||||
Rules_RoundOver( TEAM_CT, 0 );
|
||||
Rules_RoundOver( TEAM_CT, 0, FALSE );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ func_vip_safetyzone_touch
|
|||
*/
|
||||
void func_vip_safetyzone_touch( void ) {
|
||||
if ( ( other.classname == "player" ) && ( other.team == TEAM_VIP ) ) {
|
||||
Rules_RoundOver( TEAM_CT, 2500 );
|
||||
Rules_RoundOver( TEAM_CT, 2500, FALSE );
|
||||
|
||||
entity eOld = self;
|
||||
self = other;
|
||||
|
|
|
@ -44,27 +44,11 @@ void Input_Handle( void ) {
|
|||
Weapon_SecondaryAttack( self.weapon );
|
||||
}
|
||||
|
||||
if ( self.button6 ) {
|
||||
Player_UseDown();
|
||||
} else {
|
||||
Player_UseUp();
|
||||
}
|
||||
|
||||
self.impulse = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
====================
|
||||
CSEv_PlayerUse
|
||||
====================
|
||||
*/
|
||||
void CSEv_PlayerUse( void ) {
|
||||
vector vSource;
|
||||
entity eOriginalSelf;
|
||||
|
||||
makevectors(self.v_angle);
|
||||
vSource = self.origin + self.view_ofs;
|
||||
traceline ( vSource, vSource + ( v_forward * 64 ), FALSE, self);
|
||||
|
||||
if ( trace_ent.iUsable ) {
|
||||
eActivator = self;
|
||||
eOriginalSelf = self;
|
||||
self = trace_ent;
|
||||
self.vUse();
|
||||
self = eOriginalSelf;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -90,6 +90,10 @@ void worldspawn( void ) {
|
|||
precache_sound( "player/pl_step4.wav" );
|
||||
|
||||
precache_sound( "items/9mmclip1.wav" );
|
||||
precache_sound( "items/tr_kevlar.wav" );
|
||||
precache_sound( "items/gunpickup2.wav" );
|
||||
precache_sound( "common/wpn_select.wav" );
|
||||
precache_sound( "common/wpn_denyselect.wav" );
|
||||
|
||||
precache_sound( "weapons/ak47-1.wav" );
|
||||
precache_sound( "weapons/ak47-2.wav" );
|
||||
|
@ -267,6 +271,7 @@ void worldspawn( void ) {
|
|||
clientstat( STAT_HOSTAGEZONE, EV_FLOAT, fInHostageZone );
|
||||
clientstat( STAT_BOMBZONE, EV_FLOAT, fInBombZone );
|
||||
|
||||
clientstat( 4, EV_FLOAT, armor );
|
||||
clientstat( STAT_MONEY, EV_FLOAT, fMoney );
|
||||
clientstat( STAT_SLOT_MELEE, EV_INTEGER, iSlotMelee );
|
||||
clientstat( STAT_SLOT_PRIMARY, EV_INTEGER, iSlotPrimary );
|
||||
|
@ -275,6 +280,7 @@ void worldspawn( void ) {
|
|||
clientstat( STAT_CURRENT_CLIP, EV_INTEGER, iCurrentClip );
|
||||
clientstat( STAT_CURRENT_CALIBER, EV_INTEGER, iCurrentCaliber );
|
||||
clientstat( STAT_TEAM, EV_INTEGER, team );
|
||||
clientstat( STAT_PROGRESS, EV_FLOAT, fProgressBar );
|
||||
pointerstat( STAT_GAMETIME, EV_FLOAT, &fGameTime );
|
||||
pointerstat( STAT_WON_T, EV_INTEGER, &iWon_T );
|
||||
pointerstat( STAT_WON_CT, EV_INTEGER, &iWon_CT );
|
||||
|
|
|
@ -43,17 +43,17 @@ void Player_Death( void ) {
|
|||
|
||||
// If the bomb has been planted, T deaths don't matter anymore
|
||||
if ( iAlivePlayers_T == 0 && iBombPlanted == FALSE ) {
|
||||
Rules_RoundOver( TEAM_CT, 3600 );
|
||||
Rules_RoundOver( TEAM_CT, 3600, FALSE );
|
||||
}
|
||||
} else if ( self.team == TEAM_CT ) {
|
||||
iAlivePlayers_CT--;
|
||||
|
||||
if ( iAlivePlayers_CT == 0 ) {
|
||||
Rules_RoundOver( TEAM_T, 3600 );
|
||||
Rules_RoundOver( TEAM_T, 3600, FALSE );
|
||||
}
|
||||
} else if ( self.team == TEAM_VIP ) {
|
||||
iAlivePlayers_CT--; // For consistency
|
||||
Rules_RoundOver( TEAM_T, 2500 );
|
||||
Rules_RoundOver( TEAM_T, 2500, FALSE );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -116,7 +116,7 @@ void Player_CrouchUp( void ) {
|
|||
return;
|
||||
}
|
||||
|
||||
if ( self.iCrouching && ( !self.velocity_z ) && (Player_CrouchCheck( self ) ) ) {
|
||||
if ( self.iCrouching && ( !self.velocity_z ) && ( Player_CrouchCheck( self ) ) ) {
|
||||
setsize (self, VEC_HULL_MIN, VEC_HULL_MAX);
|
||||
|
||||
setorigin( self, self.origin + '0 0 18');
|
||||
|
@ -130,3 +130,49 @@ void Player_CrouchUp( void ) {
|
|||
|
||||
self.iCrouchAttempt = TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
====================
|
||||
Player_UseDown
|
||||
====================
|
||||
*/
|
||||
void Player_UseDown( void ) {
|
||||
if ( !( self.flags & FL_USERELEASED ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
vector vSource;
|
||||
entity eOriginalSelf;
|
||||
|
||||
makevectors(self.v_angle);
|
||||
vSource = self.origin + self.view_ofs;
|
||||
traceline ( vSource, vSource + ( v_forward * 64 ), FALSE, self);
|
||||
|
||||
if ( trace_ent.iUsable ) {
|
||||
sound( self, CHAN_WEAPON, "common/wpn_select.wav", 0.25, ATTN_IDLE );
|
||||
if ( trace_ent.classname != "c4bomb" ) {
|
||||
self.flags = ( self.flags - FL_USERELEASED );
|
||||
}
|
||||
|
||||
eActivator = self;
|
||||
eOriginalSelf = self;
|
||||
self = trace_ent;
|
||||
self.vUse();
|
||||
self = eOriginalSelf;
|
||||
} else {
|
||||
sound( self, CHAN_WEAPON, "common/wpn_denyselect.wav", 0.25, ATTN_IDLE );
|
||||
self.flags = ( self.flags - FL_USERELEASED );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
====================
|
||||
Player_UseUp
|
||||
====================
|
||||
*/
|
||||
void Player_UseUp( void ) {
|
||||
if ( !( self.frags & FL_USERELEASED ) ) {
|
||||
self.flags = self.flags | FL_USERELEASED;
|
||||
self.fProgressBar = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -92,6 +92,7 @@ void Rules_Restart( void ) {
|
|||
if ( iPickT == iRandomT ) {
|
||||
self = eFind;
|
||||
Weapon_AddItem( WEAPON_C4BOMB );
|
||||
centerprint( self, "You have the bomb!\nFind the target zone or DROP\nthe bomb for another Terrorist." );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -109,6 +110,7 @@ void Rules_Restart( void ) {
|
|||
self = eFind;
|
||||
self.team = TEAM_VIP;
|
||||
Spawn_RespawnClient( self.team );
|
||||
centerprint( self, "You are the VIP\nMake your way to the safety zones!" );
|
||||
forceinfokey( self, "*dead", "2" );
|
||||
}
|
||||
}
|
||||
|
@ -130,20 +132,26 @@ void Rules_Restart( void ) {
|
|||
}
|
||||
|
||||
// This can happen whenever an objective is complete or time is up
|
||||
void Rules_RoundOver( int iTeamWon, int iMoneyReward ) {
|
||||
void Rules_RoundOver( int iTeamWon, int iMoneyReward, float fSilent ) {
|
||||
|
||||
if ( fGameState != GAME_ACTIVE ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( iTeamWon == TEAM_T ) {
|
||||
Radio_BroadcastMessage( RADIO_TERWIN );
|
||||
if ( fSilent == TRUE ) {
|
||||
Radio_BroadcastMessage( RADIO_TERWIN );
|
||||
}
|
||||
iWon_T++;
|
||||
} else if ( iTeamWon == TEAM_CT ) {
|
||||
Radio_BroadcastMessage( RADIO_CTWIN );
|
||||
if ( fSilent == TRUE ) {
|
||||
Radio_BroadcastMessage( RADIO_CTWIN );
|
||||
}
|
||||
iWon_CT++;
|
||||
} else {
|
||||
Radio_BroadcastMessage( RADIO_ROUNDDRAW );
|
||||
if ( fSilent == TRUE ) {
|
||||
Radio_BroadcastMessage( RADIO_ROUNDDRAW );
|
||||
}
|
||||
}
|
||||
Money_QueTeamReward( iTeamWon, iMoneyReward );
|
||||
Timer_Begin( 5, GAME_END); // Round is over, 5 seconds til a new round starts
|
||||
|
@ -152,14 +160,14 @@ void Rules_RoundOver( int iTeamWon, int iMoneyReward ) {
|
|||
// Whenever mp_roundtime was being counted down to 0
|
||||
void Rules_TimeOver( void ) {
|
||||
if ( iVIPZones > 0 ) {
|
||||
Rules_RoundOver( TEAM_T, 3250 );
|
||||
Rules_RoundOver( TEAM_T, 3250, FALSE );
|
||||
} else if ( iBombZones > 0 ) {
|
||||
Rules_RoundOver( TEAM_CT, 3250 );
|
||||
Rules_RoundOver( TEAM_CT, 3250, FALSE );
|
||||
} else if ( iHostagesMax > 0 ) {
|
||||
// TODO: Broadcast_Print: Hostages have not been rescued!
|
||||
Rules_RoundOver( TEAM_T, 3250 );
|
||||
Rules_RoundOver( TEAM_T, 3250, FALSE );
|
||||
} else {
|
||||
Rules_RoundOver( 0, 0 );
|
||||
Rules_RoundOver( 0, 0, FALSE );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
../Math.h
|
||||
Defs.h
|
||||
|
||||
Money.c
|
||||
|
||||
../Shared/Radio.c
|
||||
../Shared/WeaponAK47.c
|
||||
../Shared/WeaponAUG.c
|
||||
|
@ -36,8 +38,8 @@ Defs.h
|
|||
../Shared/WeaponBase.c
|
||||
../Shared/Weapons.c
|
||||
../Shared/Effects.c
|
||||
../Shared/Equipment.c
|
||||
|
||||
Money.c
|
||||
Ammo.c
|
||||
Damage.c
|
||||
TraceAttack.c
|
||||
|
|
87
Source/Shared/Equipment.c
Normal file
87
Source/Shared/Equipment.c
Normal file
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
OpenCS Project
|
||||
Copyright (C) 2015 Marco "eukara" Hladik
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
equipmentinfo_t eqptTable [ CS_EQUIPMENT_COUNT ] = {
|
||||
{ EQUIPMENT_KEVLAR, 650 },
|
||||
{ EQUIPMENT_HELMET, 1000 },
|
||||
{ EQUIPMENT_FLASHBANG, 300 },
|
||||
{ EQUIPMENT_HEGRENADE, 300 },
|
||||
{ EQUIPMENT_SMOKEGRENADE, 300 },
|
||||
{ EQUIPMENT_DEFUSALKIT, 200 },
|
||||
{ EQUIPMENT_NIGHTVISION, 1250 },
|
||||
};
|
||||
|
||||
#ifdef SSQC
|
||||
void CSEv_PlayerBuyEquipment_f( float fID ) {
|
||||
if ( Rules_BuyingPossible() == FALSE ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ( self.fMoney - eqptTable[ fID ].iPrice ) >= 0 ) {
|
||||
if ( eqptTable[ fID ].iID == EQUIPMENT_KEVLAR ) {
|
||||
if ( self.armor == 100 ) {
|
||||
// You already own armor etc.
|
||||
centerprint( self, "You already have kevlar!" );
|
||||
} else {
|
||||
self.armor = 100;
|
||||
Money_AddMoney( self, -650 );
|
||||
}
|
||||
|
||||
sound( self, CHAN_ITEM, "items/tr_kevlar.wav", 1, ATTN_IDLE );
|
||||
self.fAttackFinished = time + 1.0;
|
||||
return;
|
||||
} else if ( eqptTable[ fID ].iID == EQUIPMENT_HELMET ) {
|
||||
if ( self.armor == 100 ) {
|
||||
if ( self.iEquipment & EQUIPMENT_HELMET ) {
|
||||
// You already have full armor and a helmet
|
||||
centerprint( self, "You already have kevlar and a helmet!" );
|
||||
} else {
|
||||
// You have full armor, but no helmet
|
||||
centerprint( self, "You already have some kevlar,\nand now you've bought a helmet!" );
|
||||
Money_AddMoney( self, -350 );
|
||||
sound( self, CHAN_ITEM, "items/tr_kevlar.wav", 1, ATTN_IDLE );
|
||||
}
|
||||
} else {
|
||||
if ( self.iEquipment & EQUIPMENT_HELMET ) {
|
||||
// Only get armor
|
||||
centerprint( self, "You already have a helmet,\nand now you're bought some kevlar!" );
|
||||
self.armor = 100;
|
||||
Money_AddMoney( self, -650 );
|
||||
sound( self, CHAN_ITEM, "items/tr_kevlar.wav", 1, ATTN_IDLE );
|
||||
} else {
|
||||
// Get both
|
||||
self.armor = 100;
|
||||
self.iEquipment = self.iEquipment | EQUIPMENT_HELMET;
|
||||
Money_AddMoney( self, -1000 );
|
||||
sound( self, CHAN_ITEM, "items/tr_kevlar.wav", 1, ATTN_IDLE );
|
||||
}
|
||||
}
|
||||
|
||||
self.fAttackFinished = time + 1.0;
|
||||
return;
|
||||
}
|
||||
|
||||
self.iEquipment = self.iEquipment | ( eqptTable[ fID ].iID );
|
||||
Money_AddMoney( self, -eqptTable[ fID ].iPrice );
|
||||
}
|
||||
|
||||
self.fAttackFinished = time + 1.0;
|
||||
}
|
||||
#endif
|
|
@ -74,6 +74,7 @@ float OpenCSGunBase_PrimaryFire( void ) {
|
|||
self.fAttackFinished = time + wptTable[ self.weapon ].fAttackFinished;
|
||||
|
||||
Client_SendEvent( self, EV_WEAPON_PRIMARYATTACK );
|
||||
self.effects = self.effects | EF_MUZZLEFLASH;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
@ -57,10 +57,20 @@ enum {
|
|||
|
||||
#ifdef SSQC
|
||||
void WeaponC4BOMB_Drop( vector vBombPos ) {
|
||||
static void c4bomb_think( void ) {
|
||||
static float fBeepTime; // Used for the beeping sounds that last 1.5 seconds
|
||||
static float fDefuseProgress; // Used to track... the progress
|
||||
|
||||
static void C4BombThink( void ) {
|
||||
// If the guy who started using us stopped using us, reset the defuser counter
|
||||
if ( ( self.eUser != world ) && ( self.eUser.button6 == FALSE ) ) {
|
||||
self.eUser.fProgressBar = 0;
|
||||
self.eUser = world;
|
||||
fDefuseProgress = 0;
|
||||
}
|
||||
|
||||
// If our time has passed, explode
|
||||
if ( self.fAttackFinished < time ) {
|
||||
Rules_RoundOver( TEAM_T, 3500 );
|
||||
// EXPLODE!
|
||||
Rules_RoundOver( TEAM_T, 3500, FALSE );
|
||||
sound( self, CHAN_VOICE, "weapons/c4_explode1.wav", 1.0, ATTN_NONE );
|
||||
Damage_Radius( self.origin, self.owner, 500, 1024 );
|
||||
remove( self );
|
||||
|
@ -68,7 +78,15 @@ void WeaponC4BOMB_Drop( vector vBombPos ) {
|
|||
return;
|
||||
}
|
||||
|
||||
if ( self.fAttackFinished - time < 5 ) {
|
||||
// Only play sounds every once in a while
|
||||
if ( fBeepTime > time ) {
|
||||
return;
|
||||
}
|
||||
fBeepTime = time + 1.5;
|
||||
|
||||
if ( self.fAttackFinished - time < 2 ) {
|
||||
sound( self, CHAN_VOICE, "weapons/c4_beep5.wav", 1.0, ATTN_NONE );
|
||||
} else if ( self.fAttackFinished - time < 5 ) {
|
||||
sound( self, CHAN_VOICE, "weapons/c4_beep5.wav", 1.0, ATTN_NORM );
|
||||
} else if ( self.fAttackFinished - time < 10 ) {
|
||||
sound( self, CHAN_VOICE, "weapons/c4_beep4.wav", 1.0, ATTN_NORM );
|
||||
|
@ -79,19 +97,59 @@ void WeaponC4BOMB_Drop( vector vBombPos ) {
|
|||
} else {
|
||||
sound( self, CHAN_VOICE, "weapons/c4_beep1.wav", 1.0, ATTN_NORM );
|
||||
}
|
||||
self.nextthink = time + 1.5;
|
||||
}
|
||||
static void C4BombUse( void ) {
|
||||
/*if ( eActivator.team != TEAM_CT ) {
|
||||
return;
|
||||
}*/
|
||||
|
||||
// On first use, play defusing sound
|
||||
if ( self.eUser == world ) {
|
||||
sound( self, CHAN_VOICE, "weapons/c4_disarm.wav", 1.0, ATTN_NORM );
|
||||
}
|
||||
|
||||
// Takes 10 seconds to defuse that thing!
|
||||
if ( fDefuseProgress > 10 ) {
|
||||
sound( self, CHAN_VOICE, "weapons/c4_disarmed.wav", 1.0, ATTN_NORM );
|
||||
Rules_RoundOver( TEAM_CT, 3500, TRUE );
|
||||
Radio_BroadcastMessage( RADIO_BOMBDEF );
|
||||
eActivator.fProgressBar = 0;
|
||||
iBombPlanted = FALSE;
|
||||
remove( self );
|
||||
return;
|
||||
}
|
||||
|
||||
// If the user has for the right equipment, make 10 seconds pass twice as fast
|
||||
if ( eActivator.iEquipment & EQUIPMENT_DEFUSALKIT ) {
|
||||
fDefuseProgress += ( frametime * 2 );
|
||||
} else {
|
||||
fDefuseProgress += frametime;
|
||||
}
|
||||
|
||||
eActivator.fProgressBar = (fDefuseProgress * 0.1);
|
||||
|
||||
// Makesure C4BombThink knows who the user is
|
||||
self.eUser = eActivator;
|
||||
}
|
||||
|
||||
// Do all the dirty entspawning stuff
|
||||
entity eBomb = spawn();
|
||||
eBomb.classname = "c4bomb";
|
||||
setorigin( eBomb, vBombPos );
|
||||
setmodel( eBomb, "models/w_c4.mdl" );
|
||||
eBomb.think = c4bomb_think;
|
||||
eBomb.nextthink = time + 1.5;
|
||||
eBomb.solid = SOLID_BBOX;
|
||||
eBomb.customphysics = C4BombThink;
|
||||
eBomb.fAttackFinished = time + cvar( "mp_c4timer" );
|
||||
eBomb.vUse = C4BombUse;
|
||||
eBomb.iUsable = TRUE;
|
||||
|
||||
sound( eBomb, CHAN_WEAPON, "weapons/c4_plant.wav", 1.0, ATTN_IDLE );
|
||||
|
||||
// Broadcast the bomb state
|
||||
Radio_BroadcastMessage( RADIO_BOMBPL );
|
||||
iBombPlanted = TRUE;
|
||||
|
||||
// Tell the bomb-planter to get rid of the weapon!
|
||||
self.iSlotGrenade = self.iSlotGrenade - WEAPON_C4BOMB;
|
||||
Weapon_SwitchBest();
|
||||
}
|
||||
|
@ -119,6 +177,7 @@ void WeaponC4BOMB_PrimaryFire( void ) {
|
|||
makevectors( self.v_angle );
|
||||
traceline( self.origin + self.view_ofs, self.origin + self.view_ofs + ( v_forward * 64 ), FALSE, self );
|
||||
|
||||
// If we aren't aiming at a place or look in the wrong location... stop it
|
||||
if ( trace_fraction == 1 || self.fInBombZone == FALSE ) {
|
||||
WeaponC4BOMB_Release();
|
||||
self.fAttackFinished = time + 1.0;
|
||||
|
|
|
@ -129,6 +129,7 @@ void Weapon_UpdateCurrents( void ) {
|
|||
}
|
||||
|
||||
// We get a weapon for the first time essentially
|
||||
// TODO: Drop the current slot weapon upon buying a new one
|
||||
void Weapon_AddItem( float fWeapon ) {
|
||||
|
||||
// Add the gun to the appropriate slot
|
||||
|
@ -164,15 +165,17 @@ void Weapon_SwitchBest( void ) {
|
|||
}
|
||||
}
|
||||
|
||||
void CSEv_GamePlayerBuy_f( float fWeapon ) {
|
||||
void CSEv_PlayerBuyWeapon_f( float fWeapon ) {
|
||||
if ( Rules_BuyingPossible() == FALSE ) {
|
||||
return;
|
||||
}
|
||||
|
||||
Weapon_AddItem( fWeapon );
|
||||
Weapon_Draw( fWeapon );
|
||||
|
||||
self.fMoney -= wptTable[ fWeapon ].iPrice;
|
||||
if ( ( self.fMoney - wptTable[ fWeapon ].iPrice ) >= 0 ) {
|
||||
Weapon_AddItem( fWeapon );
|
||||
Weapon_Draw( fWeapon );
|
||||
Money_AddMoney( self, -wptTable[ fWeapon ].iPrice );
|
||||
sound( self, CHAN_ITEM, "items/gunpickup2.wav", 1, ATTN_IDLE );
|
||||
}
|
||||
self.fAttackFinished = time + 1.0;
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue