X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_player.qc;h=765c7802d2a10707f29bff7b672ae99673e635ae;hp=7e73ea345bda2ef874b5baaaf88b752250d743cc;hb=7eb1015823c7b86bd36ad10be79701239e695dec;hpb=21cd0bef7a9329d0201610bccedf8a29048b0291 diff --git a/qcsrc/server/cl_player.qc b/qcsrc/server/cl_player.qc index 7e73ea345b..765c7802d2 100644 --- a/qcsrc/server/cl_player.qc +++ b/qcsrc/server/cl_player.qc @@ -111,6 +111,7 @@ void CopyBody(float keepvelocity) self.enemy = oldself; self.lip = oldself.lip; self.colormap = oldself.colormap; + self.glowmod = oldself.glowmod; self.iscreature = oldself.iscreature; self.angles = oldself.angles; self.avelocity = oldself.avelocity; @@ -142,6 +143,7 @@ void CopyBody(float keepvelocity) self.movetype = oldself.movetype; self.nextthink = oldself.nextthink; self.solid = oldself.solid; + self.ballistics_density = oldself.ballistics_density; self.takedamage = oldself.takedamage; self.think = oldself.think; self.customizeentityforclient = oldself.customizeentityforclient; @@ -432,7 +434,7 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht else Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, self, attacker); - if((g_arena && numspawned < 2) || (g_ca && player_cnt < 2) && !inWarmupStage) + if((g_arena && numspawned < 2) || (g_ca && ca_players < required_ca_players) && !inWarmupStage) return; if (!g_minstagib) @@ -447,6 +449,16 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht take = damage; } + frag_inflictor = inflictor; + frag_attacker = attacker; + frag_target = self; + damage_take = take; + damage_save = save; + damage_force = force; + MUTATOR_CALLHOOK(PlayerDamage_SplitHealthArmor); + take = bound(0, damage_take, self.health); + save = bound(0, damage_save, self.armorvalue); + if(sound_allowed(MSG_BROADCAST, attacker)) { if (save > 10) @@ -486,15 +498,18 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht if(sound_allowed(MSG_BROADCAST, attacker)) if(!DEATH_ISWEAPON(deathtype, WEP_LASER) || attacker != self || self.health < 2 * cvar("g_balance_laser_primary_damage") * cvar("g_balance_selfdamagepercent") + 1) + if(self.health > 1) // exclude pain sounds for laserjumps as long as you aren't REALLY low on health and would die of the next two { - if(self.health > 75) // TODO make a "gentle" version? + if(deathtype == DEATH_FALL) + PlayerSound(playersound_fall, CHAN_PAIN, VOICETYPE_PLAYERSOUND); + else if(self.health > 75) // TODO make a "gentle" version? PlayerSound(playersound_pain100, CHAN_PAIN, VOICETYPE_PLAYERSOUND); else if(self.health > 50) PlayerSound(playersound_pain75, CHAN_PAIN, VOICETYPE_PLAYERSOUND); else if(self.health > 25) PlayerSound(playersound_pain50, CHAN_PAIN, VOICETYPE_PLAYERSOUND); - else if(self.health > 1) + else PlayerSound(playersound_pain25, CHAN_PAIN, VOICETYPE_PLAYERSOUND); } } @@ -605,7 +620,7 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht else DropFlag(self.flagcarried, world, attacker); } - if(self.ballcarried) + if(self.ballcarried && g_nexball) DropBall(self.ballcarried, self.origin, self.velocity); Portal_ClearAllLater(self); // clear waypoints @@ -621,6 +636,7 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht self.movetype = MOVETYPE_TOSS; // shootable corpse self.solid = SOLID_CORPSE; + self.ballistics_density = cvar("g_ballistics_density_corpse"); // don't stick to the floor self.flags &~= FL_ONGROUND; // dying animation @@ -657,12 +673,7 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht // call the corpse damage function just in case it wants to gib self.event_damage(inflictor, attacker, 0, deathtype, hitloc, force); // set up to fade out later - SUB_SetFade (self, time + 12 + random () * 4, 1); - - // remove laserdot - if(self.weaponentity) - if(self.weaponentity.lasertarget) - remove(self.weaponentity.lasertarget); + SUB_SetFade (self, time + 6 + random (), 1); if(clienttype(self) == CLIENTTYPE_REAL) { @@ -852,6 +863,7 @@ float Say(entity source, float teamsay, entity privatesay, string msgin, float f { string msgstr, colorstr, cmsgstr, namestr, fullmsgstr, sourcemsgstr, fullcmsgstr, sourcecmsgstr, privatemsgprefix; float flood, privatemsgprefixlen; + var .float flood_field; entity head; float ret; @@ -933,7 +945,6 @@ float Say(entity source, float teamsay, entity privatesay, string msgin, float f float flood_spl; float flood_burst; float flood_lmax; - var .float flood_field; float lines; if(privatesay) { @@ -995,10 +1006,10 @@ float Say(entity source, float teamsay, entity privatesay, string msgin, float f else flood = 1; } - } - if (timeoutStatus == 2) //when game is paused, no flood protection - source.flood_field = flood = 0; + if (timeoutStatus == 2) //when game is paused, no flood protection + source.flood_field = flood = 0; + } if(flood == 2) // cannot happen for empty msgstr {