From dcb4b90785446c57d908213499e21b27b00c941a Mon Sep 17 00:00:00 2001 From: Night Owl Date: Mon, 23 Apr 2018 23:02:27 +0500 Subject: [PATCH] Add mp_instagib cvar for instagib gamemode. --- dlls/dmc/quake_player.cpp | 61 ++++++++++++++++++++++----------------- dlls/game.cpp | 2 ++ 2 files changed, 37 insertions(+), 26 deletions(-) diff --git a/dlls/dmc/quake_player.cpp b/dlls/dmc/quake_player.cpp index 82d5a49f..82dced6d 100644 --- a/dlls/dmc/quake_player.cpp +++ b/dlls/dmc/quake_player.cpp @@ -24,6 +24,7 @@ #include "util.h" #include "cbase.h" #include "player.h" +#include "game.h" #include "gamerules.h" #include "hltv.h" @@ -101,6 +102,8 @@ void CBasePlayer::UpdateStatusBar() //----------------------------------------------------------------------------- int CBasePlayer::TakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType ) { + float flTake; + if ( (pev->takedamage == DAMAGE_NO) || (IsAlive() == FALSE) ) return 0; @@ -150,39 +153,46 @@ int CBasePlayer::TakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, fl // Teamplay 2 you can still hurt teammates } - // check for quad damage powerup on the attacker - if (pAttacker->IsPlayer()) + if( instagib.value ) { - if ( ((CBasePlayer*)pAttacker)->m_flSuperDamageFinished > gpGlobals->time ) + flTake = 900.0; + } + else + { + // check for quad damage powerup on the attacker + if (pAttacker->IsPlayer()) { - if (gpGlobals->deathmatch == 4) - flDamage *= 8; - else - flDamage *= 4; + if ( ((CBasePlayer*)pAttacker)->m_flSuperDamageFinished > gpGlobals->time ) + { + if (gpGlobals->deathmatch == 4) + flDamage *= 8; + else + flDamage *= 4; + } + + if( ( (CBasePlayer*)pAttacker )->m_iRuneStatus == ITEM_RUNE2_FLAG ) + { + flDamage *= 2; + } } - if( ( (CBasePlayer*)pAttacker )->m_iRuneStatus == ITEM_RUNE2_FLAG ) + if( m_iRuneStatus == ITEM_RUNE1_FLAG ) { - flDamage *= 2; + flDamage /= 2; + EMIT_SOUND( ENT( pev ), CHAN_ITEM, "rune/rune1.wav", 1, ATTN_NORM ); } - } - - if( m_iRuneStatus == ITEM_RUNE1_FLAG ) - { - flDamage /= 2; - EMIT_SOUND( ENT( pev ), CHAN_ITEM, "rune/rune1.wav", 1, ATTN_NORM ); - } - // save damage based on the target's armor level - float flSave = ceil(pev->armortype * flDamage); - if (flSave >= pev->armorvalue) - { - flSave = pev->armorvalue; - pev->armortype = 0; // lost all armor - m_iQuakeItems &= ~(IT_ARMOR1 | IT_ARMOR2 | IT_ARMOR3); + // save damage based on the target's armor level + float flSave = ceil(pev->armortype * flDamage); + if (flSave >= pev->armorvalue) + { + flSave = pev->armorvalue; + pev->armortype = 0; // lost all armor + m_iQuakeItems &= ~(IT_ARMOR1 | IT_ARMOR2 | IT_ARMOR3); + } + pev->armorvalue -= flSave; + flTake = ceil(flDamage - flSave); } - pev->armorvalue -= flSave; - float flTake = ceil(flDamage - flSave); // add to the damage total for clients, which will be sent as a single message at the end of the frame pev->dmg_take = pev->dmg_take + flTake; @@ -203,7 +213,6 @@ int CBasePlayer::TakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, fl // this global is still used for glass and other non-monster killables, along with decals. g_vecAttackDir = vecTemp.Normalize(); - // figure momentum add if ( (pevInflictor) && (pev->movetype == MOVETYPE_WALK) && !( FBitSet (bitsDamageType, DMG_BURN) ) && !( FBitSet (bitsDamageType, DMG_ACID) ) ) { diff --git a/dlls/game.cpp b/dlls/game.cpp index 1790c818..c7ff5ea3 100644 --- a/dlls/game.cpp +++ b/dlls/game.cpp @@ -46,6 +46,7 @@ cvar_t defaultteam = { "mp_defaultteam","0" }; cvar_t allowmonsters = { "mp_allowmonsters","0", FCVAR_SERVER }; cvar_t bhopcap = { "mp_bhopcap", "1", FCVAR_SERVER }; cvar_t allowhook = { "mp_allow_hook", "1", FCVAR_SERVER }; +cvar_t instagib = { "mp_instagib", "0", FCVAR_SERVER }; cvar_t allow_spectators = { "allow_spectators", "0", FCVAR_SERVER }; // 0 prevents players from being spectators @@ -487,6 +488,7 @@ void GameDLLInit( void ) CVAR_REGISTER( &allowmonsters ); CVAR_REGISTER( &bhopcap ); CVAR_REGISTER( &allowhook ); + CVAR_REGISTER( &instagib ); CVAR_REGISTER( &mp_chattime );