]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/mutators/mutator/vampire/sv_vampire.qc
Merge branch 'master' into Mario/status_effects_extended
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / mutators / mutator / vampire / sv_vampire.qc
index 92c5943c3d75455f7bc3d41b6f95184df7ba8555..6e7f3adf9b48eb3856a003c9b43e37e39e080c43 100644 (file)
@@ -1,18 +1,24 @@
 #include "sv_vampire.qh"
 
-REGISTER_MUTATOR(vampire, cvar("g_vampire") && !cvar("g_instagib"));
+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)
 {
+       // NOTE: vampire buff PlayerDamage_SplitHealthArmor code is similar
        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_DEAD(frag_target))
+       if (!StatusEffects_active(STATUSEFFECT_SpawnShield, frag_target) && frag_target != frag_attacker
+               && IS_PLAYER(frag_attacker) && !IS_DEAD(frag_target) && !STAT(FROZEN, frag_target))
        {
-               GivePlayerHealth(frag_attacker, bound(0, damage_take, frag_target.health));
+               GiveResource(frag_attacker, RES_HEALTH, autocvar_g_vampire_factor * damage_take);
        }
 }