X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fplayer.qc;h=ad3ba94e4a21d18c9aa7c293a1c68cfa9a04edeb;hb=dd714ffac6b09917fcff8a0f449ea4e347e01ec0;hp=bd1bc6d684f2636951cd313ca00cbacdc611fb06;hpb=c8411b61c6dd7b1bd1204a2d090308d38da058df;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/player.qc b/qcsrc/server/player.qc index bd1bc6d68..ad3ba94e4 100644 --- a/qcsrc/server/player.qc +++ b/qcsrc/server/player.qc @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -248,7 +249,7 @@ void PlayerDamage(entity this, entity inflictor, entity attacker, float damage, 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 - bound(0, autocvar_g_spawnshield_blockdamage, 1); if(deathtype & HITTYPE_SOUND) // sound based attacks cause bleeding from the ears @@ -333,7 +334,7 @@ void PlayerDamage(entity this, entity inflictor, entity attacker, float damage, if (take > 100) Violence_GibSplash_At(hitloc, force * -0.2, 3, 1, this, attacker); - if (time >= this.spawnshieldtime || autocvar_g_spawnshield_blockdamage < 1) + if (!StatusEffects_active(STATUSEFFECT_SpawnShield, this) || autocvar_g_spawnshield_blockdamage < 1) { if (!(this.flags & FL_GODMODE)) { @@ -387,21 +388,6 @@ void PlayerDamage(entity this, entity inflictor, entity attacker, float damage, this.v_angle_y = this.v_angle.y + (random() * 2 - 1) * shake; this.v_angle_x = bound(-90, this.v_angle.x, 90); } - - float realdmg = damage - excess; - if ((this != attacker || deathtype == DEATH_KILL.m_id) && realdmg && !STAT(FROZEN, this) - && (!(round_handler_IsActive() && !round_handler_IsRoundStarted()) && time >= game_starttime)) - { - if (IS_PLAYER(attacker) && DIFF_TEAM(attacker, this) && deathtype != DEATH_KILL.m_id) { - GameRules_scoring_add(attacker, DMG, realdmg); - } - // don't count DEATH_KILL damage in game modes where suicide is for respawning - // TODO mutator hook? - if (deathtype != DEATH_KILL.m_id || !(IS_GAMETYPE(RACE) || IS_GAMETYPE(CTS))) - if (IS_PLAYER(this)) { - GameRules_scoring_add(this, DMGTAKEN, realdmg); - } - } } else this.max_armorvalue += (save + take); @@ -436,7 +422,20 @@ void PlayerDamage(entity this, entity inflictor, entity attacker, float damage, WeaponStats_LogDamage(awep.m_id, abot, this.(weaponentity).m_weapon.m_id, vbot, dh + da); } - MUTATOR_CALLHOOK(PlayerDamaged, attacker, this, dh, da, hitloc, deathtype, damage); + bool forbid_logging_damage = MUTATOR_CALLHOOK(PlayerDamaged, attacker, this, dh, da, hitloc, deathtype, damage); + + if ((dh || da) && !forbid_logging_damage) + { + float realdmg = damage - excess; + if ((this != attacker || deathtype == DEATH_KILL.m_id) && realdmg && !STAT(FROZEN, this) + && (!(round_handler_IsActive() && !round_handler_IsRoundStarted()) && time >= game_starttime)) + { + if (IS_PLAYER(attacker) && DIFF_TEAM(attacker, this) && deathtype != DEATH_KILL.m_id) + GameRules_scoring_add(attacker, DMG, realdmg); + if (IS_PLAYER(this)) + GameRules_scoring_add(this, DMGTAKEN, realdmg); + } + } if (GetResource(this, RES_HEALTH) < 1) { @@ -560,13 +559,8 @@ void PlayerDamage(entity this, entity inflictor, entity attacker, float damage, // don't play teleportation sounds this.teleportable = TELEPORT_SIMPLE; - STAT(STRENGTH_FINISHED, this) = 0; - STAT(INVINCIBLE_FINISHED, this) = 0; - STAT(SUPERWEAPONS_FINISHED, this) = 0; STAT(AIR_FINISHED, this) = 0; - STAT(MOVEVARS_SPECIALCOMMAND, this) = false; // sweet release - this.death_time = time; if (random() < 0.5) animdecide_setstate(this, this.anim_state | ANIMSTATE_DEAD1, true);