From: Mario Date: Tue, 15 Jun 2021 23:28:43 +0000 (+1000) Subject: Merge branch 'master' into Mario/status_effects_extended X-Git-Tag: xonotic-v0.8.5~393^2~6 X-Git-Url: http://git.xonotic.org/?a=commitdiff_plain;h=79012b90e96396059bcc310a8a95ae38918993a4;p=xonotic%2Fxonotic-data.pk3dir.git Merge branch 'master' into Mario/status_effects_extended --- 79012b90e96396059bcc310a8a95ae38918993a4 diff --cc qcsrc/common/mutators/mutator/buffs/sv_buffs.qc index c2eb01618,a176e512f..11176f48f --- a/qcsrc/common/mutators/mutator/buffs/sv_buffs.qc +++ b/qcsrc/common/mutators/mutator/buffs/sv_buffs.qc @@@ -749,13 -570,10 +750,10 @@@ MUTATOR_HOOKFUNCTION(buffs, PlayerDamag return; float health_take = bound(0, M_ARGV(4, float), GetResource(frag_target, RES_HEALTH)); - if(!StatusEffects_active(STATUSEFFECT_SpawnShield, frag_target) && - frag_target != frag_attacker && - IS_PLAYER(frag_attacker) && - !IS_DEAD(frag_target) && !STAT(FROZEN, frag_target)) - if (time >= frag_target.spawnshieldtime && frag_target != frag_attacker ++ if (!StatusEffects_active(STATUSEFFECT_SpawnShield, frag_target) && frag_target != frag_attacker + && IS_PLAYER(frag_attacker) && !IS_DEAD(frag_target) && !STAT(FROZEN, frag_target)) { - GiveResource(frag_attacker, RES_HEALTH, - autocvar_g_buffs_vampire_damage_steal * health_take); + GiveResource(frag_attacker, RES_HEALTH, autocvar_g_buffs_vampire_damage_steal * health_take); } } diff --cc qcsrc/common/mutators/mutator/vampire/sv_vampire.qc index e8d1b5977,5b4c33e7b..6e7f3adf9 --- a/qcsrc/common/mutators/mutator/vampire/sv_vampire.qc +++ b/qcsrc/common/mutators/mutator/vampire/sv_vampire.qc @@@ -11,16 -12,13 +12,13 @@@ MUTATOR_HOOKFUNCTION(vampire, PlayerDam entity frag_attacker = M_ARGV(1, entity); entity frag_target = M_ARGV(2, entity); 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; + 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(!StatusEffects_active(STATUSEFFECT_SpawnShield, frag_target) && - frag_target != frag_attacker && - IS_PLAYER(frag_attacker) && - !IS_DEAD(frag_target) && !STAT(FROZEN, frag_target)) - if (time >= frag_target.spawnshieldtime && frag_target != frag_attacker ++ if (!StatusEffects_active(STATUSEFFECT_SpawnShield, frag_target) && frag_target != frag_attacker + && IS_PLAYER(frag_attacker) && !IS_DEAD(frag_target) && !STAT(FROZEN, frag_target)) { - GiveResource(frag_attacker, RES_HEALTH, - autocvar_g_vampire_factor * damage_take); + GiveResource(frag_attacker, RES_HEALTH, autocvar_g_vampire_factor * damage_take); } } diff --cc qcsrc/server/damage.qc index 560f3e490,7ce674f51..d480c229b --- a/qcsrc/server/damage.qc +++ b/qcsrc/server/damage.qc @@@ -609,9 -613,12 +609,12 @@@ void Damage(entity targ, entity inflict // These are ALWAYS lethal // No damage modification here // Instead, prepare the victim for his death... - SetResourceExplicit(targ, RES_ARMOR, 0); + if(deathtype == DEATH_TEAMCHANGE.m_id || deathtype == DEATH_AUTOTEAMCHANGE.m_id) + { + SetResourceExplicit(targ, RES_ARMOR, 0); + SetResourceExplicit(targ, RES_HEALTH, 0.9); // this is < 1 + } - targ.spawnshieldtime = 0; + StatusEffects_remove(STATUSEFFECT_SpawnShield, targ, STATUSEFFECT_REMOVE_CLEAR); - SetResourceExplicit(targ, RES_HEALTH, 0.9); // this is < 1 targ.flags -= targ.flags & FL_GODMODE; damage = 100000; } diff --cc qcsrc/server/player.qc index c1ca497ca,916aa8a28..ad3ba94e4 --- a/qcsrc/server/player.qc +++ b/qcsrc/server/player.qc @@@ -249,8 -248,8 +249,8 @@@ void PlayerDamage(entity this, entity i if (!ITEM_DAMAGE_NEEDKILL(deathtype)) damage = 0; } - else if (time < this.spawnshieldtime && autocvar_g_spawnshield_blockdamage < 1) + else if (StatusEffects_active(STATUSEFFECT_SpawnShield, this) && autocvar_g_spawnshield_blockdamage < 1) - damage *= 1 - max(0, autocvar_g_spawnshield_blockdamage); + damage *= 1 - bound(0, autocvar_g_spawnshield_blockdamage, 1); if(deathtype & HITTYPE_SOUND) // sound based attacks cause bleeding from the ears {