From 9d9c2de1ff66bca773bfb37f7214676b1f3d959d Mon Sep 17 00:00:00 2001 From: Sergey Shorokhov Date: Sat, 3 Aug 2024 20:17:52 +0300 Subject: [PATCH] Feature: ConVars for `weapon`/`item`/`ammo` respawn time (#983) * `CBasePlayerAmmo`: check spawnflags on `Spawn()` * `CBasePlayerItem`: check spawnflags on `Materialize()` * `CBasePlayerItem`: Add `Respawn()` item when hasn't specific spawnflags * `CBasePlayerItem`: remove `SF_NORESPAWN` flag on `Respawn()` * Use forgotten `AMMO_RESPAWN_TIME` * new ConVars: `mp_item_respawn_time`, `mp_weapon_respawn_time`, `mp_ammo_respawn_time` --- README.md | 3 +++ dist/game.cfg | 18 ++++++++++++++++++ regamedll/dlls/game.cpp | 8 ++++++++ regamedll/dlls/game.h | 4 ++++ regamedll/dlls/multiplay_gamerules.cpp | 12 ++++++++++++ 5 files changed, 45 insertions(+) diff --git a/README.md b/README.md index e5b55c0c..0ad6361a 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,9 @@ This means that plugins that do binary code analysis (Orpheu for example) probab | mp_freezetime_jump | 1 | 0 | 1 | Allow players to jump during freezetime.
`0` disabled
`1` enabled | | mp_defuser_allocation | 0 | 0 | 2 | Give defuser on player spawn.
`0` disabled
`1` Random players.
`2` All players. | | mp_location_area_info | 0 | 0 | 3 | Enable location area info.
`0` disabled
`1` show location below HUD radar.
`2` show location in HUD chat. `NOT RECOMMENDED!` [:speech_balloon:](## "Not all client builds are compatible")
`3` both displayed. `NOT RECOMMENDED!` [:speech_balloon:](## "Not all client builds are compatible")

`NOTE`: Navigation `maps/.nav` file required and should contain place names
`NOTE`: If option `2` or `3` is enabled, be sure to enable `mp_chat_loc_fallback 1` | +| mp_item_respawn_time | 30 | 0.0 | - | The respawn time for items (such as health packs, armor, etc.). | +| mp_weapon_respawn_time | 20 | 0.0 | - | The respawn time for weapons. | +| mp_ammo_respawn_time | 20 | 0.0 | - | The respawn time for ammunition. | ## How to install zBot for CS 1.6? diff --git a/dist/game.cfg b/dist/game.cfg index e6510f34..96e313aa 100644 --- a/dist/game.cfg +++ b/dist/game.cfg @@ -587,3 +587,21 @@ mp_defuser_allocation "0" // // Default value: "0" mp_location_area_info "0" + +// The respawn time for items (such as health packs, armor, etc.). +// 0 - disable delay +// +// Default value: "30" +mp_item_respawn_time "30" + +// The respawn time for weapons. +// 0 - disable delay +// +// Default value: "20" +mp_weapon_respawn_time "20" + +// The respawn time for ammunition. +// 0 - disable delay +// +// Default value: "20" +mp_ammo_respawn_time "20" diff --git a/regamedll/dlls/game.cpp b/regamedll/dlls/game.cpp index 8d781724..c4e303c5 100644 --- a/regamedll/dlls/game.cpp +++ b/regamedll/dlls/game.cpp @@ -181,6 +181,10 @@ cvar_t defuser_allocation = { "mp_defuser_allocation", "0", 0, 0.0f, nullpt cvar_t location_area_info = { "mp_location_area_info", "0", 0, 0.0f, nullptr }; cvar_t chat_loc_fallback = { "mp_chat_loc_fallback", "1", 1, 0.0f, nullptr }; +cvar_t item_respawn_time = { "mp_item_respawn_time", "30", FCVAR_SERVER, 30.0f, nullptr }; +cvar_t weapon_respawn_time = { "mp_weapon_respawn_time", "20", FCVAR_SERVER, 20.0f, nullptr }; +cvar_t ammo_respawn_time = { "mp_ammo_respawn_time", "20", FCVAR_SERVER, 20.0f, nullptr }; + void GameDLL_Version_f() { if (Q_stricmp(CMD_ARGV(1), "version") != 0) @@ -446,6 +450,10 @@ void EXT_FUNC GameDLLInit() CVAR_REGISTER(&location_area_info); CVAR_REGISTER(&chat_loc_fallback); + CVAR_REGISTER(&item_respawn_time); + CVAR_REGISTER(&weapon_respawn_time); + CVAR_REGISTER(&ammo_respawn_time); + // print version CONSOLE_ECHO("ReGameDLL version: " APP_VERSION "\n"); diff --git a/regamedll/dlls/game.h b/regamedll/dlls/game.h index dcd712f5..d0924d3a 100644 --- a/regamedll/dlls/game.h +++ b/regamedll/dlls/game.h @@ -204,6 +204,10 @@ extern cvar_t defuser_allocation; extern cvar_t location_area_info; extern cvar_t chat_loc_fallback; +extern cvar_t item_respawn_time; +extern cvar_t weapon_respawn_time; +extern cvar_t ammo_respawn_time; + #endif extern cvar_t scoreboard_showmoney; diff --git a/regamedll/dlls/multiplay_gamerules.cpp b/regamedll/dlls/multiplay_gamerules.cpp index 1ff0a14b..e1b8a7e4 100644 --- a/regamedll/dlls/multiplay_gamerules.cpp +++ b/regamedll/dlls/multiplay_gamerules.cpp @@ -4221,7 +4221,11 @@ void EXT_FUNC CHalfLifeMultiplay::__API_HOOK(PlayerGotWeapon)(CBasePlayer *pPlay // What is the time in the future at which this weapon may spawn? float CHalfLifeMultiplay::FlWeaponRespawnTime(CBasePlayerItem *pWeapon) { +#ifdef REGAMEDLL_ADD + return gpGlobals->time + weapon_respawn_time.value; +#else return gpGlobals->time + WEAPON_RESPAWN_TIME; +#endif } // Returns 0 if the weapon can respawn now, @@ -4289,7 +4293,11 @@ int CHalfLifeMultiplay::ItemShouldRespawn(CItem *pItem) // At what time in the future may this Item respawn? float CHalfLifeMultiplay::FlItemRespawnTime(CItem *pItem) { +#ifdef REGAMEDLL_ADD; + return gpGlobals->time + item_respawn_time.value; +#else return gpGlobals->time + ITEM_RESPAWN_TIME; +#endif } // Where should this item respawn? @@ -4321,7 +4329,11 @@ int CHalfLifeMultiplay::AmmoShouldRespawn(CBasePlayerAmmo *pAmmo) float CHalfLifeMultiplay::FlAmmoRespawnTime(CBasePlayerAmmo *pAmmo) { +#ifdef REGAMEDLL_ADD + return gpGlobals->time + ammo_respawn_time.value; +#else return gpGlobals->time + AMMO_RESPAWN_TIME; +#endif } Vector CHalfLifeMultiplay::VecAmmoRespawnSpot(CBasePlayerAmmo *pAmmo)