X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fg_damage.qc;h=39188027c4b934df1723249b6e198d99e24047c0;hp=460c608dcf357d944829978620b3e21247f61724;hb=7eb1015823c7b86bd36ad10be79701239e695dec;hpb=d822e9e15e991a67e09e68f50a61cff487502328 diff --git a/qcsrc/server/g_damage.qc b/qcsrc/server/g_damage.qc index 460c608dcf..39188027c4 100644 --- a/qcsrc/server/g_damage.qc +++ b/qcsrc/server/g_damage.qc @@ -623,7 +623,16 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float force = force * g_weaponforcefactor; mirrorforce *= g_weaponforcefactor; } - + + // should this be changed at all? If so, in what way? + frag_attacker = attacker; + frag_target = targ; + frag_damage = damage; + frag_force = force; + MUTATOR_CALLHOOK(PlayerDamage_Calculate); + damage = frag_damage; + force = frag_force; + // apply strength multiplier if ((attacker.items & IT_STRENGTH) && !g_minstagib) { @@ -844,19 +853,6 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float } } -void Damage_RecordDamage(entity attacker, float deathtype, float damage) -{ - float weaponid; - weaponid = DEATH_WEAPONOF(deathtype); - - if not(inWarmupStage) - if (weaponid) - if ((clienttype(attacker) == CLIENTTYPE_REAL) | (clienttype(attacker) == CLIENTTYPE_BOT)) { - attacker.stats_hit[weaponid - 1] += damage; - attacker.stat_hit = weaponid + 64 * floor(attacker.stats_hit[weaponid - 1]); - } -} - float RadiusDamage_running; float RadiusDamage (entity inflictor, entity attacker, float coredamage, float edgedamage, float rad, entity ignore, float forceintensity, float deathtype, entity directhitentity) // Returns total damage applies to creatures @@ -875,7 +871,6 @@ float RadiusDamage (entity inflictor, entity attacker, float coredamage, float e float tfloorforce; float stat_damagedone; - float stat_maxdamage; if(RadiusDamage_running) { @@ -913,7 +908,6 @@ float RadiusDamage (entity inflictor, entity attacker, float coredamage, float e } stat_damagedone = 0; - stat_maxdamage = 0; targ = WarpZone_FindRadius (blastorigin, rad, FALSE); while (targ) @@ -1031,14 +1025,8 @@ float RadiusDamage (entity inflictor, entity attacker, float coredamage, float e { total_damage_to_creatures += finaldmg; - if(targ.flags & FL_CLIENT) - if(targ.deadflag == DEAD_NO) - if(targ != attacker) - if(!teamplay || targ.team != attacker.team) - { + if(accuracy_isgooddamage(attacker, targ)) stat_damagedone += finaldmg; - stat_maxdamage += coredamage; - } } if(targ == directhitentity || DEATH_ISSPECIAL(deathtype)) @@ -1054,7 +1042,8 @@ float RadiusDamage (entity inflictor, entity attacker, float coredamage, float e RadiusDamage_running = 0; - Damage_RecordDamage(attacker, deathtype, min(stat_maxdamage, stat_damagedone)); + if(!DEATH_ISSPECIAL(deathtype)) + accuracy_add(attacker, DEATH_WEAPONOFWEAPONDEATH(deathtype), 0, min(coredamage, stat_damagedone)); return total_damage_to_creatures; } @@ -1157,6 +1146,8 @@ float Fire_AddDamage(entity e, entity o, float d, float t, float dt) e.fire_hitsound = FALSE; } } + if(accuracy_isgooddamage(o, e)) + accuracy_add(o, DEATH_WEAPONOFWEAPONDEATH(dt), 0, max(0, totaldamage - mindamage)); return max(0, totaldamage - mindamage); // can never be negative, but to make sure } else @@ -1169,6 +1160,8 @@ float Fire_AddDamage(entity e, entity o, float d, float t, float dt) e.fire_deathtype = dt; e.fire_owner = o; e.fire_hitsound = FALSE; + if(accuracy_isgooddamage(o, e)) + accuracy_add(o, DEATH_WEAPONOFWEAPONDEATH(dt), 0, d); return d; } } @@ -1203,8 +1196,6 @@ void Fire_ApplyDamage(entity e) } e.fire_hitsound = TRUE; - Damage_RecordDamage(e.fire_owner, e.fire_deathtype, d); - if not(IS_INDEPENDENT_PLAYER(e)) FOR_EACH_PLAYER(other) if(e != other) {