- Changed mp_fillweapons to fcs_fillweapons to reflect its origin

- fcs_fillweapons will basically act as a switch for CS:S ammo behaviour
- Some default.cfg and ftesrv.cfg changes
This commit is contained in:
Marco Cawthorne 2018-12-05 17:02:49 +01:00
parent c7dbc3a2b9
commit efeaa2822d
13 changed files with 119 additions and 88 deletions

View file

@ -45,26 +45,24 @@ Ammo_BuyPrimary
Buy ammo for the primary weapon you're equipped with
=================
*/
void Ammo_BuyPrimary( float fFree ) {
void Ammo_BuyPrimary(void) {
if ( !self.fSlotPrimary ) {
return;
}
int iRequiredAmmo = ( ammoTable[ wptTable[ self.fSlotPrimary ].iCaliber ].iMaxAmount - self.(wptTable[ self.fSlotPrimary ].iCaliberfld));
float fNew = ceil( ( (float)iRequiredAmmo / (float)ammoTable[ wptTable[ self.fSlotPrimary ].iCaliber ].iSize ) );
for ( int i = 0; i < fNew; i++ ) {
if ( self.fMoney - ammoTable[ wptTable[ self.fSlotPrimary ].iCaliber ].iPrice >= 0 ) {
self.(wptTable[ self.fSlotPrimary ].iCaliberfld) += ammoTable[ wptTable[ self.fSlotPrimary ].iCaliber ].iSize;
Money_AddMoney( self, -ammoTable[ wptTable[ self.fSlotPrimary ].iCaliber ].iPrice );
sound( self, CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_IDLE );
if ( self.(wptTable[ self.fSlotPrimary ].iCaliberfld) > ammoTable[ wptTable[ self.fSlotPrimary ].iCaliber ].iMaxAmount ) {
self.(wptTable[ self.fSlotPrimary ].iCaliberfld) = ammoTable[ wptTable[ self.fSlotPrimary ].iCaliber ].iMaxAmount;
}
} else {
if ( self.fMoney - ammoTable[ wptTable[ self.fSlotPrimary ].iCaliber ].iPrice < 0 ) {
break;
}
Money_AddMoney( self, -ammoTable[ wptTable[ self.fSlotPrimary ].iCaliber ].iPrice );
sound( self, CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_IDLE );
self.(wptTable[ self.fSlotPrimary ].iCaliberfld) += ammoTable[ wptTable[ self.fSlotPrimary ].iCaliber ].iSize;
if ( self.(wptTable[ self.fSlotPrimary ].iCaliberfld) > ammoTable[ wptTable[ self.fSlotPrimary ].iCaliber ].iMaxAmount ) {
self.(wptTable[ self.fSlotPrimary ].iCaliberfld) = ammoTable[ wptTable[ self.fSlotPrimary ].iCaliber ].iMaxAmount;
}
}
}
@ -75,7 +73,7 @@ Ammo_BuySecondary
Buy ammo for the secondary weapon you're equipped with
=================
*/
void Ammo_BuySecondary( float fFree ) {
void Ammo_BuySecondary(void) {
if ( !self.fSlotSecondary ) {
return;
}
@ -84,22 +82,47 @@ void Ammo_BuySecondary( float fFree ) {
float fNew = ceil( ( (float)iRequiredAmmo / (float)ammoTable[ wptTable[ self.fSlotSecondary ].iCaliber ].iSize ) );
for ( int i = 0; i < fNew; i++ ) {
if ( fFree == FALSE ) {
if ( self.fMoney - ammoTable[ wptTable[ self.fSlotSecondary ].iCaliber ].iPrice < 0 ) {
break;
}
Money_AddMoney( self, -ammoTable[ wptTable[ self.fSlotSecondary ].iCaliber ].iPrice );
if ( self.fMoney - ammoTable[ wptTable[ self.fSlotSecondary ].iCaliber ].iPrice < 0 ) {
break;
}
self.(wptTable[ self.fSlotSecondary ].iCaliberfld) += ammoTable[ wptTable[ self.fSlotSecondary ].iCaliber ].iSize;
Money_AddMoney( self, -ammoTable[ wptTable[ self.fSlotSecondary ].iCaliber ].iPrice );
sound( self, CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_IDLE );
self.(wptTable[ self.fSlotSecondary ].iCaliberfld) += ammoTable[ wptTable[ self.fSlotSecondary ].iCaliber ].iSize;
if ( self.(wptTable[ self.fSlotSecondary ].iCaliberfld) > ammoTable[ wptTable[ self.fSlotSecondary ].iCaliber ].iMaxAmount ) {
self.(wptTable[ self.fSlotSecondary ].iCaliberfld) = ammoTable[ wptTable[ self.fSlotSecondary ].iCaliber ].iMaxAmount;
}
}
}
void Ammo_AutoFill(float fWeapon)
{
if (autocvar_fcs_fillweapons == FALSE) {
return;
}
if (Weapon_AlreadyExists(fWeapon)) {
self.(wptTable[fWeapon].iMagfld) = wptTable[fWeapon].iMagSize;
self.(wptTable[fWeapon].iCaliberfld) = ammoTable[wptTable[fWeapon].iCaliber].iMaxAmount;
Weapon_UpdateCurrents();
}
}
void Ammo_Clear(void)
{
// Clear all the ammo stuff
for ( int i = 0; i < CS_WEAPON_COUNT; i++ ) {
self.(wptTable[ i ].iMagfld) = 0;
self.(wptTable[ i ].iCaliberfld) = 0;
}
self.fSlotMelee = 0;
self.fSlotPrimary = 0;
self.fSlotSecondary = 0;
self.fSlotGrenade = 0;
self.iEquipment = 0;
}
/*
=================
CSEv_GamePlayerBuyAmmo_f
@ -113,10 +136,10 @@ void CSEv_GamePlayerBuyAmmo_f( float fType ) {
}
if ( fType == 0 ) {
Ammo_BuyPrimary( FALSE );
Ammo_BuyPrimary();
} else {
Ammo_BuySecondary( FALSE );
Ammo_BuySecondary();
}
Weapon_UpdateCurrents();
}

View file

@ -38,13 +38,8 @@ var float autocvar_mp_roundtime = 5;
var float autocvar_mp_timelimit = 60;
var string autocvar_motdfile = "motd.txt";
var int autocvar_mp_friendlyfire = FALSE;
var int autocvar_sv_voxannounce = FALSE;
// Casual, or later CS variables
var int autocvar_mp_fillweapons = FALSE; // This will automatically get ammo for the weapon you buy
var int autocvar_mp_autoreload = FALSE; // When pressing fire and the gun is empty, it will reload instead
// New, FreeCS exclusive variables
var int autocvar_fcs_knifeonly = FALSE; // Disallows buying and spawning with weps
var int autocvar_fcs_swapteams = FALSE; // Swaps spawnpoints
@ -53,6 +48,8 @@ var int autocvar_fcs_reward_kill = 300;
var int autocvar_fcs_penalty_pain = -150;
var int autocvar_fcs_penalty_kill = -1500;
var int autocvar_fcs_maxmoney = 16000;
var int autocvar_fcs_fillweapons = FALSE; // This will automatically get ammo for the weapon you buy
var int autocvar_fcs_autoreload = FALSE; // When pressing fire and the gun is empty, it will reload instead
// Mapcycle features
var string autocvar_mapcyclefile = "mapcycle.txt";
@ -136,6 +133,7 @@ int iBombPlanted;
entity eActivator;
.void() vUse;
.int iUsable;
.int iNull;
// GoldSrc-Rendermode Fields
.vector rendercolor;
@ -181,8 +179,9 @@ void Entities_UseTargets( void );
void Entities_InitRespawnable( void() vRespawnFunc );
void Entities_Respawn( void );
void Ammo_BuyPrimary( float fFree );
void Ammo_BuySecondary( float fFree );
void Ammo_AutoFill(float fWeapon);
void Ammo_BuyPrimary(void);
void Ammo_BuySecondary(void);
void Input_Handle( void );

View file

@ -130,7 +130,7 @@ Called whenever a player just needs his basic properties to be reset
*/
void Spawn_RespawnClient( float fTeam ) {
entity eSpawn;
forceinfokey( self, "*spec", "0" ); // Make sure we are known as a spectator
forceinfokey( self, "*spec", "0" );
eSpawn = Spawn_FindSpawnPoint( self.team );
self.classname = "player";
@ -161,9 +161,12 @@ void Spawn_RespawnClient( float fTeam ) {
self.view_ofs = VEC_PLAYER_VIEWPOS;
self.velocity = '0 0 0';
self.frame = 1; // Idle frame
self.fBombProgress = 0;
Ammo_AutoFill(self.fSlotPrimary);
Ammo_AutoFill(self.fSlotSecondary);
}
/*
@ -182,7 +185,6 @@ void Spawn_CreateClient( float fCharModel ) {
} else if( fCharModel < 5 ) {
forceinfokey( self, "*team", "0" );
self.team = TEAM_T;
Rules_CountPlayers();
Weapon_AddItem( WEAPON_KNIFE );
if ( autocvar_fcs_knifeonly == FALSE ) {
@ -194,7 +196,6 @@ void Spawn_CreateClient( float fCharModel ) {
}
} else {
self.team = TEAM_CT;
Rules_CountPlayers();
Weapon_AddItem( WEAPON_KNIFE );
if ( autocvar_fcs_knifeonly == FALSE ) {
@ -205,11 +206,11 @@ void Spawn_CreateClient( float fCharModel ) {
Weapon_Draw( WEAPON_KNIFE );
}
}
if( self.iInGame == FALSE ) {
self.iInGame = TRUE;
}
forceinfokey( self, "*team", ftos( self.team ) );
Spawn_RespawnClient( self.team );
self.fAttackFinished = time + 1;
@ -224,7 +225,7 @@ Called on connect and whenever a player dies
*/
void Spawn_MakeSpectator( void ) {
self.classname = "spectator";
self.health = 0;
self.armor = 0;
self.takedamage = DAMAGE_NO;
@ -240,12 +241,8 @@ void Spawn_MakeSpectator( void ) {
self.view_ofs = self.velocity = '0 0 0';
forceinfokey( self, "*spec", "2" ); // Make sure we are known as a spectator
// Clear all the ammo stuff
for ( int i = 0; i < CS_WEAPON_COUNT; i++ ) {
self.(wptTable[ i ].iMagfld) = 0;
self.(wptTable[ i ].iCaliberfld) = 0;
}
Ammo_Clear();
// Clear the inventory
self.fSlotMelee = self.fSlotPrimary = self.fSlotSecondary = self.fSlotGrenade = self.iEquipment = 0;
}
@ -264,26 +261,23 @@ void CSEv_GamePlayerSpawn_f( float fChar ) {
self.fAttackFinished = time + 1.0;
return;
}
// Hey, we are alive and are trying to switch teams, so subtract us from the Alive_Team counter.
if ( self.health > 0 ) {
self.health = 0;
Rules_CountPlayers();
Rules_DeathCheck();
Player_Death(0);
}
self.fSlotMelee = 0;
self.fSlotPrimary = 0;
self.fSlotSecondary = 0;
self.fSlotGrenade = 0;
self.iEquipment = 0;
Ammo_Clear();
// Spawn the players immediately when its in the freeze state
switch ( fGameState ) {
case GAME_FREEZE:
self.fCharModel = fChar;
Spawn_CreateClient( fChar );
if ( ( self.team == TEAM_T ) && ( iAlivePlayers_T == 1 ) ) {
if ( iBombZones > 0 ) {
Rules_MakeBomber();
@ -293,7 +287,7 @@ void CSEv_GamePlayerSpawn_f( float fChar ) {
Rules_MakeVIP();
}
}
break;
default:
if ( fChar == 0 ) {
@ -304,7 +298,7 @@ void CSEv_GamePlayerSpawn_f( float fChar ) {
} else {
self.team = TEAM_CT;
}
Spawn_MakeSpectator();
self.classname = "player";
self.fCharModel = fChar;
@ -317,7 +311,7 @@ void CSEv_GamePlayerSpawn_f( float fChar ) {
self.frags = 0;
self.fDeaths = 0;
forceinfokey( self, "*deaths", "0" );
// Split up for readability and expandability?
if ( ( self.team == TEAM_T ) && ( iAlivePlayers_T == 0 ) ) {
Rules_RoundOver( FALSE, 0, FALSE );

View file

@ -141,7 +141,7 @@ Returns whether or not to play an animation
float BaseGun_PrimaryFire( void ) {
// Nothing in the clip anymore? Don't even attempt
if ( ( self.(wptTable[ self.weapon ].iMagfld) - 1 ) < 0 ) {
if ( autocvar_mp_autoreload == TRUE ) {
if ( autocvar_fcs_autoreload == TRUE ) {
Weapon_Reload( self.weapon );
}
return FALSE;
@ -172,7 +172,7 @@ float BaseGun_Reload( void ) {
static void BaseGun_FinishReload( void ) {
int iNeed = wptTable[ self.weapon ].iMagSize - self.(wptTable[ self.weapon ].iMagfld);
int iHave = self.(wptTable[ self.weapon ].iCaliberfld);
if ( iNeed > iHave ) {
self.(wptTable[ self.weapon ].iMagfld) += iHave;
self.(wptTable[ self.weapon ].iCaliberfld) = 0;
@ -180,7 +180,7 @@ float BaseGun_Reload( void ) {
self.(wptTable[ self.weapon ].iMagfld) += iNeed;
self.(wptTable[ self.weapon ].iCaliberfld) -= iNeed;
}
Weapon_UpdateCurrents();
}

View file

@ -46,15 +46,15 @@ weaponinfo_t wptC4BOMB = {
TYPE_AUTO,
0.0, // Attack-Delay
0.0, // Reload-Delay
iAmmo_9MM, // Caliber Pointer
iAmmo_9MM, // Clip Pointer
iNull, // Caliber Pointer
iNull, // Clip Pointer
1, // Accuracy Divisor
1, // Accuracy Offset
1, // Max Inaccuracy
8, // Minimum Crosshair Distance
4, // Crosshair Movement Delta
1.0, // Armor penetration ratio
ATYPE_C4, // Animation Type
ATYPE_C4, // Animation Type
FALSE
};

View file

@ -47,7 +47,7 @@ weaponinfo_t wptFLASHBANG = {
TYPE_SEMI, // Firing Type
1.0, // Attack-Delay
1.0, // Reload-Delay
iAmmo_9MM, // Caliber Pointer
iNull, // Caliber Pointer
iAmmo_FLASHBANG, // Clip Pointer
1, // Accuracy Divisor
1.0, // Accuracy Offset

View file

@ -46,7 +46,7 @@ weaponinfo_t wptHEGRENADE = {
TYPE_SEMI, // Firing Type
1.0, // Attack-Delay
1.0, // Reload-Delay
iAmmo_9MM, // Caliber Pointer
iNull, // Caliber Pointer
iAmmo_HEGRENADE, // Clip Pointer
1, // Accuracy Divisor
1.0, // Accuracy Offset

View file

@ -40,8 +40,8 @@ weaponinfo_t wptKNIFE = {
TYPE_SEMI, // Firing Type
0.7, // Attack-Delay
1.0, // Reload-Delay
iAmmo_9MM, // Caliber Pointer
iMag_GLOCK18, // Clip Pointer
iNull, // Caliber Pointer
iNull, // Clip Pointer
1, // Accuracy Divisor
1.0, // Accuracy Offset
1.0, // Max Inaccuracy

View file

@ -47,7 +47,7 @@ weaponinfo_t wptSMOKEGRENADE = {
TYPE_SEMI, // Firing Type
1.0, // Attack-Delay
1.0, // Reload-Delay
iAmmo_9MM, // Caliber Pointer
iNull, // Caliber Pointer
iAmmo_SMOKEGRENADE, // Clip Pointer
1, // Accuracy Divisor
1.0, // Accuracy Offset

View file

@ -528,17 +528,9 @@ void CSEv_PlayerBuyWeapon_f( float fWeapon ) {
}
if ( ( self.fMoney - wptTable[ fWeapon ].iPrice ) >= 0 ) {
Weapon_AddItem( fWeapon );
// Automatically fill weapons with ammo when you buy them (for free) like in CS:S
if ( autocvar_mp_fillweapons == 1 ) {
if ( wptTable[ fWeapon ].iSlot == SLOT_PRIMARY ) {
Ammo_BuyPrimary( TRUE );
} else if ( wptTable[ fWeapon ].iSlot == SLOT_SECONDARY ) {
Ammo_BuySecondary( TRUE );
}
}
Weapon_AddItem(fWeapon);
Ammo_AutoFill(fWeapon);
Weapon_Draw( fWeapon );
Money_AddMoney( self, -wptTable[ fWeapon ].iPrice );

View file

@ -41,18 +41,29 @@ bind b buy
bind m chooseteam
bind ESC togglemenu
// Game variables
seta maxplayers 8
seta mp_startmoney "800"
seta mp_buytime 90
seta mp_freezetime 6
seta mp_c4timer 45
seta mp_roundtime 5
seta fcs_knifeonly 0
seta fcs_swapteams 0
seta fcs_nopickups 0
seta fcs_reward_kill 300
seta fcs_penalty_pain -150
seta fcs_penalty_kill -1500
seta fcs_maxmoney 16000
seta fcs_fillweapons 0
seta fcs_autoreload 0
// Movement Variables
seta sv_maxspeed 240
seta cl_forwardspeed 240
seta cl_sidespeed 240
seta cl_backspeed 240
seta cl_movespeedkey 0.5
seta mp_startmoney "800"
seta mp_buytime 90
seta mp_freezetime 6
seta mp_c4timer 45
seta mp_roundtime 5
seta mp_fillweapons 0
seta cl_bob 0
seta v_bobcycle 0.8
seta v_bob 0.01
@ -68,7 +79,6 @@ seta cross_color 0 255 0
hostname "FreeCS Server"
seta vid_conautoscale "1"
seta snd_device "sdl"
seta r_polygonoffset_submodel_offset "0"
seta r_polygonoffset_submodel_factor "0"
@ -93,5 +103,5 @@ seta gl_overbright "0"
seta maxpitch "89"
seta minpitch "-89"
seta net_masterextra1 "www.vera-visions.com"
seta net_masterextra2 "dpmaster.deathmask.net:27950 107.161.23.68:27950 [2604:180::4ac:98c1]:27950"
seta net_masterextra3 "dpmaster.tchr.no:27950 92.62.40.73:27950"
seta net_masterextra2 "dpmaster.deathmask.net:27950"
seta net_masterextra3 "dpmaster.tchr.no:27950"

View file

@ -1,5 +1,9 @@
// The publically advertised server name
hostname "FreeCS Server"
seta sv_public 1
seta net_masterextra1 "www.vera-visions.com"
seta net_masterextra2 "dpmaster.deathmask.net:27950"
seta net_masterextra3 "dpmaster.tchr.no:27950"
// Game variables
seta maxplayers 8
@ -8,7 +12,16 @@ seta mp_buytime 90
seta mp_freezetime 6
seta mp_c4timer 45
seta mp_roundtime 5
seta mp_fillweapons 0
seta fcs_knifeonly 0
seta fcs_swapteams 0
seta fcs_nopickups 0
seta fcs_reward_kill 300
seta fcs_penalty_pain -150
seta fcs_penalty_kill -1500
seta fcs_maxmoney 16000
seta fcs_fillweapons 0
seta fcs_autoreload 0
// Physics
seta pm_bunnyspeedcap "1"
@ -23,4 +36,4 @@ seta allow_download_maps "0"
seta allow_download_models "0"
seta allow_download_sounds "0"
alias startmap_dm "map cs_assault"
alias startmap_dm "map cs_assault"

Binary file not shown.