X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=qcsrc%2Fcommon%2Fmutators%2Fmutator%2Fvampire%2Fsv_vampire.qc;h=12e4bdea43531a6fb1c8cbfc5154257f25fa9687;hb=772fb683d951a622cc8520827096ec34fdea4763;hp=1b07ecd669b5467d9307fc66b239086cf2602931;hpb=45ccf5629b069c240a72cdabae5bf1605733f29e;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/mutators/mutator/vampire/sv_vampire.qc b/qcsrc/common/mutators/mutator/vampire/sv_vampire.qc index 1b07ecd66..12e4bdea4 100644 --- a/qcsrc/common/mutators/mutator/vampire/sv_vampire.qc +++ b/qcsrc/common/mutators/mutator/vampire/sv_vampire.qc @@ -1,19 +1,26 @@ #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) { 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(time >= frag_target.spawnshieldtime && + frag_target != frag_attacker && + IS_PLAYER(frag_attacker) && + !IS_DEAD(frag_target)) { - GiveResource(frag_attacker, RESOURCE_HEALTH, - bound(0, damage_take, frag_target.health)); + GiveResource(frag_attacker, RES_HEALTH, + autocvar_g_vampire_factor * damage_take); } }