X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fg_damage.qc;h=31512fbff0675330ade9ec6cf3a18763989e20df;hb=334f8247b82a5aba3fe56cbabd59f77bcf0e3d03;hp=d77d614759e00944a15474e8bd4097785f39bbf4;hpb=802a0058147171be24c302c65b3b963312f1d6ab;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/g_damage.qc b/qcsrc/server/g_damage.qc index d77d61475..31512fbff 100644 --- a/qcsrc/server/g_damage.qc +++ b/qcsrc/server/g_damage.qc @@ -47,8 +47,6 @@ float checkrules_firstblood; float yoda; float damage_goodhits; float damage_gooddamage; -float headshot; -float damage_headshotbonus; // bonus multiplier for head shots, set to 0 after use .float dmg_team; .float teamkill_complain; @@ -86,15 +84,6 @@ float IsFlying(entity a) return 1; } -vector GetHeadshotMins(entity targ) -{ - return '-0.5 0 0' * PL_HEAD_x + '0 -0.5 0' * PL_HEAD_y + '0 0 1' * (targ.maxs_z - PL_HEAD_z); -} -vector GetHeadshotMaxs(entity targ) -{ - return '0.5 0 0' * PL_HEAD_x + '0 0.5 0' * PL_HEAD_y + '0 0 1' * targ.maxs_z; -} - void UpdateFrags(entity player, float f) { PlayerTeamScore_AddScore(player, f); @@ -219,11 +208,6 @@ void GiveFrags (entity attacker, entity targ, float f, float deathtype) } f = 0; } - else if(g_ctf) - { - if(g_ctf_ignore_frags) - f = 0; - } } attacker.totalfrags += f; @@ -315,13 +299,13 @@ void LogDeath(string mode, float deathtype, entity killer, entity killed) void Send_KillNotification (string s1, string s2, string s3, float msg, float type) { - WriteByte(MSG_ALL, SVC_TEMPENTITY); - WriteByte(MSG_ALL, TE_CSQC_KILLNOTIFY); - WriteString(MSG_ALL, s1); - WriteString(MSG_ALL, s2); - WriteString(MSG_ALL, s3); - WriteShort(MSG_ALL, msg); - WriteByte(MSG_ALL, type); + WriteByte(MSG_BROADCAST, SVC_TEMPENTITY); + WriteByte(MSG_BROADCAST, TE_CSQC_KILLNOTIFY); + WriteString(MSG_BROADCAST, s1); + WriteString(MSG_BROADCAST, s2); + WriteString(MSG_BROADCAST, s3); + WriteShort(MSG_BROADCAST, msg); + WriteByte(MSG_BROADCAST, type); } // Function is used to send a generic centerprint whose content CSQC gets to decide (gentle version or not in the below cases) @@ -344,7 +328,7 @@ void Send_CSQC_KillCenterprint(entity e, string s1, string s2, float msg, float void Obituary (entity attacker, entity inflictor, entity targ, float deathtype) { string s, a, msg; - float w, type; + float type; if (targ.classname == "player") { @@ -378,7 +362,7 @@ void Obituary (entity attacker, entity inflictor, entity targ, float deathtype) deathtype = KILL_TEAM_BLUE; } - Send_KillNotification(s, msg, ftos(w), deathtype, MSG_SUICIDE); + Send_KillNotification(s, msg, "", deathtype, MSG_SUICIDE); } else if (attacker.classname == "player") { @@ -443,14 +427,7 @@ void Obituary (entity attacker, entity inflictor, entity targ, float deathtype) Send_KillNotification(a, s, msg, deathtype, MSG_KILL); - if(g_ctf && targ.flagcarried) - { - UpdateFrags(attacker, ctf_score_value("score_kill")); - PlayerScore_Add(attacker, SP_CTF_FCKILLS, 1); - GiveFrags(attacker, targ, 0, deathtype); // for logging - } - else - GiveFrags(attacker, targ, 1, deathtype); + GiveFrags(attacker, targ, 1, deathtype); if (targ.killcount > 2) { Send_KillNotification(s, ftos(targ.killcount), a, KILL_END_SPREE, MSG_SPREE); @@ -458,10 +435,7 @@ void Obituary (entity attacker, entity inflictor, entity targ, float deathtype) attacker.killcount = attacker.killcount + 1; - if (attacker.killcount > 2) { - Send_KillNotification(a, ftos(attacker.killcount), "", KILL_SPREE, MSG_SPREE); - } - else if (attacker.killcount == 3) + if (attacker.killcount == 3) { Send_KillNotification(a, "", "", KILL_SPREE_3, MSG_SPREE); AnnounceTo(attacker, "03kills"); @@ -503,6 +477,9 @@ void Obituary (entity attacker, entity inflictor, entity targ, float deathtype) AnnounceTo(attacker, "30kills"); PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_30, 1); } + else if (attacker.killcount > 2) { + Send_KillNotification(a, ftos(attacker.killcount), "", KILL_SPREE, MSG_SPREE); + } LogDeath("frag", deathtype, attacker, targ); } } @@ -652,7 +629,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float attacker.dmg_take += v_x; attacker.dmg_save += v_y; attacker.dmg_inflictor = inflictor; - mirrordamage = 0; + mirrordamage = v_z; // = 0, to make fteqcc stfu mirrorforce = 0; } @@ -764,15 +741,6 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float damage = damage * autocvar_g_balance_selfdamagepercent; // Partial damage if the attacker hits himself } - // CTF: reduce damage/force - if(g_ctf) - if(targ == attacker) - if(targ.flagcarried) - { - damage = damage * autocvar_g_ctf_flagcarrier_selfdamage; - force = force * autocvar_g_ctf_flagcarrier_selfforce; - } - if(g_runematch) { // apply strength rune @@ -813,31 +781,6 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float if(targ.takedamage == DAMAGE_AIM) if(targ != attacker) { - if(damage_headshotbonus) - { - if(targ.classname == "player") - { - // HEAD SHOT: - // find height of hit on player axis - // if above view_ofs and below maxs, and also in the middle half of the bbox, it is head shot - vector headmins, headmaxs, org; - org = antilag_takebackorigin(targ, time - ANTILAG_LATENCY(attacker)); - headmins = org + GetHeadshotMins(targ); - headmaxs = org + GetHeadshotMaxs(targ); - if(trace_hits_box(railgun_start, railgun_end, headmins, headmaxs)) - { - deathtype |= HITTYPE_HEADSHOT; - } - } - else if(targ.classname == "turret_head") - { - deathtype |= HITTYPE_HEADSHOT; - } - if(deathtype & HITTYPE_HEADSHOT) - if(damage_headshotbonus > 0) - damage *= 1 + damage_headshotbonus; - } - entity victim; if((targ.vehicle_flags & VHF_ISVEHICLE) && targ.owner) victim = targ.owner; @@ -871,12 +814,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float if(g_minstagib) if(victim.items & IT_STRENGTH) yoda = 1; - - if(deathtype & HITTYPE_HEADSHOT) - headshot = 1; } - if(g_ca) - PlayerScore_Add(attacker, SP_SCORE, damage * autocvar_g_ca_damage2score_multiplier); } } else @@ -1069,10 +1007,7 @@ float RadiusDamage (entity inflictor, entity attacker, float coredamage, float e myblastorigin = WarpZone_TransformOrigin(targ, blastorigin); // if it's a player, use the view origin as reference - if (targ.classname == "player") - center = targ.origin + targ.view_ofs; - else - center = targ.origin + (targ.mins + targ.maxs) * 0.5; + center = CENTER_OR_VIEWOFS(targ); force = normalize(center - myblastorigin); force = force * (finaldmg / coredamage) * forceintensity;