From: Morosophos <morosophos@teichisma.info>
Date: Wed, 10 Jul 2019 17:58:34 +0000 (+0300)
Subject: Vampire mutator: fix console tracebacks when damage is done by non-players. Add two... 
X-Git-Tag: xonotic-v0.8.5~1466^2~1
X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=96586abdc3c3cfc37a225935aa4063a6bca73fa4;p=xonotic%2Fxonotic-data.pk3dir.git

Vampire mutator: fix console tracebacks when damage is done by non-players. Add two cvars: g_vampire_factor and g_vampire_use_total_damage
---

diff --git a/mutators.cfg b/mutators.cfg
index 7e1c03583..01e3a120a 100644
--- a/mutators.cfg
+++ b/mutators.cfg
@@ -69,6 +69,8 @@ set g_overkill_filter_armormega 0
 //  vampire
 // =========
 set g_vampire 0 "set to 1 to enable the vampire mode, where the damage done to your opponent gets added to your own health"
+set g_vampire_factor 1.0 "Multiply damage done by this factor before adding it to the player's health"
+set g_vampire_use_total_damage 0 "If 1 then add combined damage (health + armor) to attackers health. If 0 add only health damage."
 
 
 // ========
diff --git a/qcsrc/common/mutators/mutator/vampire/sv_vampire.qc b/qcsrc/common/mutators/mutator/vampire/sv_vampire.qc
index 57df1b02b..08ced8074 100644
--- a/qcsrc/common/mutators/mutator/vampire/sv_vampire.qc
+++ b/qcsrc/common/mutators/mutator/vampire/sv_vampire.qc
@@ -1,20 +1,25 @@
 #include "sv_vampire.qh"
 
 string autocvar_g_vampire;
+float autocvar_g_vampire_factor = 1.0;
+bool autocvar_g_vampire_use_total_damage = false;
+
 REGISTER_MUTATOR(vampire, expr_evaluate(autocvar_g_vampire) && !MUTATOR_IS_ENABLED(mutator_instagib));
 
 MUTATOR_HOOKFUNCTION(vampire, PlayerDamage_SplitHealthArmor)
 {
 	entity frag_attacker = M_ARGV(1, entity);
 	entity frag_target = M_ARGV(2, entity);
-	float damage_take = M_ARGV(4, float);
+	float health_take = bound(0, M_ARGV(4, float), GetResource(frag_target, RES_HEALTH));
+        float armor_take = bound(0, M_ARGV(5, float), GetResource(frag_target, RES_ARMOR));
+        float damage_take = (autocvar_g_vampire_use_total_damage) ? health_take + armor_take : health_take;
 
 	if(time >= frag_target.spawnshieldtime)
 	if(frag_target != frag_attacker)
+        if(IS_PLAYER(frag_attacker))
 	if(!IS_DEAD(frag_target))
 	{
-		GiveResource(frag_attacker, RES_HEALTH,
-			bound(0, damage_take, GetResource(frag_target, RES_HEALTH)));
+		GiveResource(frag_attacker, RES_HEALTH, autocvar_g_vampire_factor * damage_take);
 	}
 }