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);
}
}
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);
}
}
// 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;
}
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
{