From f1f0f6a00bdb939c4dd0eaa7cd2f536971dbca65 Mon Sep 17 00:00:00 2001 From: Ignacio Diez Date: Fri, 16 Dec 2022 15:05:51 -0500 Subject: [PATCH] Fix TANK morph vampire --- src/combat/common/g_combat.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/combat/common/g_combat.c b/src/combat/common/g_combat.c index faefa749..98a0ba2b 100644 --- a/src/combat/common/g_combat.c +++ b/src/combat/common/g_combat.c @@ -626,8 +626,8 @@ qboolean CanUseVampire (edict_t *targ, edict_t *attacker, int dflags, int mod) return false; // can't vamp from yourself - if (targ == attacker) - return false; + if (targ == attacker || targ == attacker->owner) + return false; // flag carrier can't use abilities in CTF mode if (ctf->value && ctf_enable_balanced_fc->value && vrx_has_flag(attacker)) @@ -724,17 +724,22 @@ void G_ApplyVampire(edict_t *attacker, float take) if (delta < 0) // players sometimes go over maximum health steal = 0; - if (attacker->mtype) // morphs don't use healthcache + // Strenx: Fix for tank VAMP + if (attacker->mtype || attacker->owner->mtype) {// morphs don't use healthcache or armor attacker->health += steal; - else + // Sync TANK health with owner + if(attacker->owner->mtype == P_TANK) { + attacker->owner->health = attacker->health; + } + } else { attacker->health_cache += steal; - - //Talent: Armor Vampire - if (*armor < MAX_ARMOR(attacker) && vrx_get_talent_level(attacker, TALENT_ARMOR_VAMP) > 0) - { - //16.6% per point of health stolen gives armor as a bonus. - float mult = 0.1666 * vrx_get_talent_level(attacker, TALENT_ARMOR_VAMP); - attacker->armor_cache += (int)(mult * (float)armorVampBase); + //Talent: Armor Vampire + if (*armor < MAX_ARMOR(attacker) && vrx_get_talent_level(attacker, TALENT_ARMOR_VAMP) > 0) + { + //16.6% per point of health stolen gives armor as a bonus. + float mult = 0.1666 * vrx_get_talent_level(attacker, TALENT_ARMOR_VAMP); + attacker->armor_cache += (int)(mult * (float)armorVampBase); + } } } @@ -1221,8 +1226,10 @@ int T_Damage (edict_t *targ, edict_t *inflictor, edict_t *attacker, } // vampire effect - if (CanUseVampire(targ, attacker, dflags, mod)) - G_ApplyVampire(attacker, take); + edict_t* real_attacker = attacker_has_pilot ? attacker->activator : attacker; + + if (CanUseVampire(targ, real_attacker, dflags, mod)) + G_ApplyVampire(real_attacker, take); //4.1 Players with fury might get their ability triggered ability = &attacker->myskills.abilities[FURY];