diff --git a/README.md b/README.md index b6157755..6a41158c 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,7 @@ This means that plugins that do binary code analysis (Orpheu for example) probab | mp_team_flash | 1 | -1 | 1 | Sets the behaviour for Flashbangs on teammates.
`-1` Don't affect teammates neither flash owner
`0` Don't affect teammates
`1` Affects teammates | | mp_fadetoblack | 0 | 0 | 2 | Observer's screen will fade to black on kill event or permanent.
`0` No fade.
`1` Fade to black and won't be able to watch anybody.
`2` fade to black only on kill moment. | | mp_falldamage | 1 | 0 | 1 | Damage from falling.
`0` disabled
`1` enabled | -| sv_allchat | 1 | 0 | 1 | Players can receive all other players text chat, team restrictions apply
`0` disabled
`1` enabled | +| sv_allchat | 1 | 0 | 1 | Players can receive all other players text chat, team restrictions apply
`0` disabled
`1` enabled
`2` enabled, but only dead player can see spectator's message | | sv_autobunnyhopping | 0 | 0 | 1 | Players automatically re-jump while holding jump button.
`0` disabled
`1` enabled | | sv_enablebunnyhopping | 0 | 0 | 1 | Allow player speed to exceed maximum running speed.
`0` disabled
`1` enabled | | mp_plant_c4_anywhere | 0 | 0 | 1 | When set, players can plant anywhere, not only in bombsites.
`0` disabled
`1` enabled | @@ -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. | | mp_scoreboard_fix | 0 | 0 | 1 | Enable ReGameDLL scoreboard bug fix(Dead players could see the bomb or defuse kit).
`0` disabled
`1` enabled
`NOTE`: Absolutely cannot fix it in "CNCS😂" | diff --git a/dist/game.cfg b/dist/game.cfg index 468bc669..e5db27cf 100644 --- a/dist/game.cfg +++ b/dist/game.cfg @@ -485,6 +485,7 @@ mp_team_flash "1" // Players can receive all other players text chat, team restrictions apply. // 0 - disabled (default behaviour) // 1 - enabled +// 2 - enabled, but only dead player can see spectator'smessage // // Default value: "0" sv_allchat "0" @@ -588,6 +589,24 @@ 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" + // Enable ReGameDLL scoreboard bug fix(Dead players could see the bomb or defuse kit) // 0 - disable // 1 - enabled diff --git a/regamedll/dlls/ammo.cpp b/regamedll/dlls/ammo.cpp index bfef8749..1df3622c 100644 --- a/regamedll/dlls/ammo.cpp +++ b/regamedll/dlls/ammo.cpp @@ -10,7 +10,11 @@ void CBasePlayerAmmo::Spawn() SetTouch(&CBasePlayerAmmo::DefaultTouch); - if (g_pGameRules->IsMultiplayer()) + if (g_pGameRules->IsMultiplayer() +#ifdef REGAMEDLL_FIXES + && g_pGameRules->AmmoShouldRespawn(this) == GR_AMMO_RESPAWN_NO +#endif + ) { SetThink(&CBaseEntity::SUB_Remove); pev->nextthink = gpGlobals->time + 2.0f; diff --git a/regamedll/dlls/client.cpp b/regamedll/dlls/client.cpp index 7d3fb659..96117564 100644 --- a/regamedll/dlls/client.cpp +++ b/regamedll/dlls/client.cpp @@ -1010,6 +1010,17 @@ void Host_Say(edict_t *pEntity, BOOL teamonly) continue; } + // when allchat is 2,only dead player can see spectator's message + if ( +#ifdef REGAMEDLL_ADD + allchat.value == 2.0f && +#endif + (pPlayer->m_iTeam == UNASSIGNED || pPlayer->m_iTeam == SPECTATOR) + ) { + if (pReceiver->pev->deadflag == DEAD_NO) + continue; + } + if ((pReceiver->m_iIgnoreGlobalChat == IGNOREMSG_ENEMY && pReceiver->m_iTeam == pPlayer->m_iTeam) || pReceiver->m_iIgnoreGlobalChat == IGNOREMSG_NONE) { diff --git a/regamedll/dlls/game.cpp b/regamedll/dlls/game.cpp index 6d09e3bc..964286ea 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 }; + cvar_t scoreboard_fix = { "mp_scoreboard_fix", "0", FCVAR_SERVER, 0.0f, nullptr }; void GameDLL_Version_f() @@ -448,7 +452,11 @@ void EXT_FUNC GameDLLInit() CVAR_REGISTER(&location_area_info); CVAR_REGISTER(&chat_loc_fallback); - CVAR_REGISTER(&scoreboard_fix); + CVAR_REGISTER(&item_respawn_time); + CVAR_REGISTER(&weapon_respawn_time); + CVAR_REGISTER(&ammo_respawn_time); + + CVAR_REGISTER(&scoreboard_fix); // print version CONSOLE_ECHO("ReGameDLL version: " APP_VERSION "\n"); diff --git a/regamedll/dlls/game.h b/regamedll/dlls/game.h index 92d8eb1d..843f12fd 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; + extern cvar_t scoreboard_fix; #endif diff --git a/regamedll/dlls/multiplay_gamerules.cpp b/regamedll/dlls/multiplay_gamerules.cpp index 7caa946b..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) { - return gpGlobals->time + 20.0f; +#ifdef REGAMEDLL_ADD + return gpGlobals->time + ammo_respawn_time.value; +#else + return gpGlobals->time + AMMO_RESPAWN_TIME; +#endif } Vector CHalfLifeMultiplay::VecAmmoRespawnSpot(CBasePlayerAmmo *pAmmo) diff --git a/regamedll/dlls/weapons.cpp b/regamedll/dlls/weapons.cpp index 454b96f0..9f176541 100644 --- a/regamedll/dlls/weapons.cpp +++ b/regamedll/dlls/weapons.cpp @@ -518,7 +518,11 @@ void CBasePlayerItem::Materialize() UTIL_SetOrigin(pev, pev->origin); SetTouch(&CBasePlayerItem::DefaultTouch); - if (g_pGameRules->IsMultiplayer()) + if (g_pGameRules->IsMultiplayer() +#ifdef REGAMEDLL_FIXES + && g_pGameRules->WeaponShouldRespawn(this) == GR_WEAPON_RESPAWN_NO +#endif + ) { if (!CanDrop()) { @@ -555,8 +559,12 @@ void CBasePlayerItem::CheckRespawn() { switch (g_pGameRules->WeaponShouldRespawn(this)) { - case GR_WEAPON_RESPAWN_YES: + case GR_WEAPON_RESPAWN_YES: { +#ifdef REGAMEDLL_FIXES + Respawn(); +#endif return; + } case GR_WEAPON_RESPAWN_NO: return; } @@ -575,6 +583,10 @@ CBaseEntity *CBasePlayerItem::Respawn() // invisible for now pNewWeapon->pev->effects |= EF_NODRAW; +#ifdef REGAMEDLL_ADD + pNewWeapon->pev->spawnflags &= ~SF_NORESPAWN; +#endif + // no touch pNewWeapon->SetTouch(nullptr); pNewWeapon->SetThink(&CBasePlayerItem::AttemptToMaterialize);