entity frag_attacker = M_ARGV(1, entity);
entity frag_target = M_ARGV(2, entity);
float frag_damage = M_ARGV(7, float);
- float damage_take = M_ARGV(4, float);
- float damage_save = M_ARGV(5, float);
+ float damage_take = bound(0, M_ARGV(4, float), GetResourceAmount(frag_target, RESOURCE_HEALTH));
+ float damage_save = bound(0, M_ARGV(5, float), GetResourceAmount(frag_target, RESOURCE_ARMOR));
float excess = max(0, frag_damage - damage_take - damage_save);
- if (frag_target != frag_attacker && IS_PLAYER(frag_attacker))
+ if (frag_target != frag_attacker && IS_PLAYER(frag_attacker) && !SAME_TEAM(frag_target, frag_attacker))
GameRules_scoring_add_team(frag_attacker, SCORE, (frag_damage - excess) * autocvar_g_ca_damage2score_multiplier);
}
if (this != attacker) {
float realdmg = damage - excess;
- if (IS_PLAYER(attacker)) {
+ if (IS_PLAYER(attacker) && !SAME_TEAM(attacker, this)) {
GameRules_scoring_add(attacker, DMG, realdmg);
}
if (IS_PLAYER(this)) {