X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fg_damage.qc;h=52f756ea7386810a84aaf30fa670caf7bbc0cc35;hb=162a91bc68d7b8e58c92cb0af873871129e386a9;hp=460c608dcf357d944829978620b3e21247f61724;hpb=5764a546c4ad8680e37f49ea1f53943f2cf0d187;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/g_damage.qc b/qcsrc/server/g_damage.qc index 460c608dc..52f756ea7 100644 --- a/qcsrc/server/g_damage.qc +++ b/qcsrc/server/g_damage.qc @@ -120,12 +120,14 @@ void GiveFrags (entity attacker, entity targ, float f) { // teamkill PlayerScore_Add(attacker, SP_KILLS, -1); // or maybe add a teamkills field? + PlayerStats_Event(attacker, PLAYERSTATS_KILLS, -1); } } else { // regular frag PlayerScore_Add(attacker, SP_KILLS, 1); + PlayerStats_Event(attacker, PLAYERSTATS_KILLS, 1); } PlayerScore_Add(targ, SP_DEATHS, 1); @@ -623,7 +625,17 @@ 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; + frag_deathtype = deathtype; + MUTATOR_CALLHOOK(PlayerDamage_Calculate); + damage = frag_damage; + force = frag_force; + // apply strength multiplier if ((attacker.items & IT_STRENGTH) && !g_minstagib) { @@ -844,19 +856,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,18 +874,10 @@ float RadiusDamage (entity inflictor, entity attacker, float coredamage, float e float tfloorforce; float stat_damagedone; - float stat_maxdamage; if(RadiusDamage_running) { - string save; - print("RadiusDamage called recursively!\n"); - print("Expect stuff to go HORRIBLY wrong.\n"); - print("Causing a stack trace...\n"); - save = cvar_string("prvm_backtraceforwarnings"); - cvar_set("prvm_backtraceforwarnings", "1"); - fclose(-1); // calls VM_Warning - cvar_set("prvm_backtraceforwarnings", save); + backtrace("RadiusDamage called recursively! Expect stuff to go HORRIBLY wrong."); return 0; } @@ -913,7 +904,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 +1021,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 +1038,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 +1142,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 +1156,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 +1192,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) {