X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_player.qc;h=a542e6431345095828ccd90dc87dd9ecc081406e;hb=b7d363a108963ca13647ee25b58c5a531366cf49;hp=42a301eaf8a14a696ee9166b45b4879be2c17d2b;hpb=9c0758425f32e8b07e1d44d59a7264d535b78844;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/cl_player.qc b/qcsrc/server/cl_player.qc index 42a301eaf..a542e6431 100644 --- a/qcsrc/server/cl_player.qc +++ b/qcsrc/server/cl_player.qc @@ -1,6 +1,6 @@ #include "cl_player.qh" -#include "bot/bot.qh" +#include "bot/api.qh" #include "cheats.qh" #include "g_damage.qh" #include "g_subs.qh" @@ -91,7 +91,8 @@ void CopyBody(entity this, float keepvelocity) clone.modelindex = this.modelindex; clone.skin = this.skin; clone.species = this.species; - clone.movetype = this.movetype; + clone.move_qcphysics = false; // don't run gamecode logic on clones, too many + set_movetype(clone, this.move_movetype); clone.solid = this.solid; clone.ballistics_density = this.ballistics_density; clone.takedamage = this.takedamage; @@ -126,15 +127,15 @@ void CopyBody(entity this, float keepvelocity) animdecide_setframes(clone, false, frame, frame1time, frame2, frame2time); } -void player_setupanimsformodel() -{SELFPARAM(); +void player_setupanimsformodel(entity this) +{ // load animation info - animdecide_load_if_needed(self); - animdecide_setstate(self, 0, false); + animdecide_load_if_needed(this); + animdecide_setstate(this, 0, false); } -void player_anim () -{SELFPARAM(); +void player_anim(entity this) +{ int deadbits = (this.anim_state & (ANIMSTATE_DEAD1 | ANIMSTATE_DEAD2)); if(IS_DEAD(this)) { if (!deadbits) { @@ -151,7 +152,7 @@ void player_anim () int animbits = deadbits; if(STAT(FROZEN, this)) animbits |= ANIMSTATE_FROZEN; - if(this.movetype == MOVETYPE_FOLLOW) + if(this.move_movetype == MOVETYPE_FOLLOW) animbits |= ANIMSTATE_FOLLOW; if(this.crouch) animbits |= ANIMSTATE_DUCK; @@ -384,10 +385,9 @@ void PlayerDamage(entity this, entity inflictor, entity attacker, float damage, save = v.y; } - frag_damage = damage; - MUTATOR_CALLHOOK(PlayerDamage_SplitHealthArmor, inflictor, attacker, this, force, take, save); - take = bound(0, damage_take, this.health); - save = bound(0, damage_save, this.armorvalue); + MUTATOR_CALLHOOK(PlayerDamage_SplitHealthArmor, inflictor, attacker, this, force, take, save, deathtype, damage); + take = bound(0, M_ARGV(4, float), this.health); + save = bound(0, M_ARGV(5, float), this.armorvalue); excess = max(0, damage - take - save); if(sound_allowed(MSG_BROADCAST, attacker)) @@ -437,15 +437,15 @@ void PlayerDamage(entity this, entity inflictor, entity attacker, float damage, // exclude pain sounds for laserjumps as long as you aren't REALLY low on health and would die of the next two { if(deathtype == DEATH_FALL.m_id) - PlayerSound(this, playersound_fall, CH_PAIN, VOICETYPE_PLAYERSOUND); + PlayerSound(this, playersound_fall, CH_PAIN, VOL_BASE, VOICETYPE_PLAYERSOUND); else if(this.health > 75) - PlayerSound(this, playersound_pain100, CH_PAIN, VOICETYPE_PLAYERSOUND); + PlayerSound(this, playersound_pain100, CH_PAIN, VOL_BASE, VOICETYPE_PLAYERSOUND); else if(this.health > 50) - PlayerSound(this, playersound_pain75, CH_PAIN, VOICETYPE_PLAYERSOUND); + PlayerSound(this, playersound_pain75, CH_PAIN, VOL_BASE, VOICETYPE_PLAYERSOUND); else if(this.health > 25) - PlayerSound(this, playersound_pain50, CH_PAIN, VOICETYPE_PLAYERSOUND); + PlayerSound(this, playersound_pain50, CH_PAIN, VOL_BASE, VOICETYPE_PLAYERSOUND); else - PlayerSound(this, playersound_pain25, CH_PAIN, VOICETYPE_PLAYERSOUND); + PlayerSound(this, playersound_pain25, CH_PAIN, VOL_BASE, VOICETYPE_PLAYERSOUND); } } } @@ -495,11 +495,14 @@ void PlayerDamage(entity this, entity inflictor, entity attacker, float damage, valid_damage_for_weaponstats = 1; } + dh = dh - max(this.health, 0); + da = da - max(this.armorvalue, 0); if(valid_damage_for_weaponstats) { - dh = dh - max(this.health, 0); - da = da - max(this.armorvalue, 0); WeaponStats_LogDamage(awep.m_id, abot, PS(this).m_weapon.m_id, vbot, dh + da); + } + if (dh + da) + { MUTATOR_CALLHOOK(PlayerDamaged, attacker, this, dh, da, hitloc, deathtype); } @@ -521,16 +524,16 @@ void PlayerDamage(entity this, entity inflictor, entity attacker, float damage, if(sound_allowed(MSG_BROADCAST, attacker)) { if(deathtype == DEATH_DROWN.m_id) - PlayerSound(this, playersound_drown, CH_PAIN, VOICETYPE_PLAYERSOUND); + PlayerSound(this, playersound_drown, CH_PAIN, VOL_BASE, VOICETYPE_PLAYERSOUND); else - PlayerSound(this, playersound_death, CH_PAIN, VOICETYPE_PLAYERSOUND); + PlayerSound(this, playersound_death, CH_PAIN, VOL_BASE, VOICETYPE_PLAYERSOUND); } // get rid of kill indicator if(this.killindicator) { - remove(this.killindicator); - this.killindicator = world; + delete(this.killindicator); + this.killindicator = NULL; if(this.killindicator_teamchange) defer_ClientKill_Now_TeamChange = true; @@ -552,11 +555,11 @@ void PlayerDamage(entity this, entity inflictor, entity attacker, float damage, if(accuracy_isgooddamage(attacker, this)) attacker.accuracy.(accuracy_frags[w.m_id-1]) += 1; - MUTATOR_CALLHOOK(PlayerDies, inflictor, attacker, this, deathtype); - excess = frag_damage; + MUTATOR_CALLHOOK(PlayerDies, inflictor, attacker, this, deathtype, damage); + excess = M_ARGV(4, float); Weapon wep = PS(this).m_weapon; - WITHSELF(this, wep.wr_playerdeath(wep, this)); + wep.wr_playerdeath(wep, this); RemoveGrapplingHook(this); @@ -592,7 +595,7 @@ void PlayerDamage(entity this, entity inflictor, entity attacker, float damage, // view from the floor this.view_ofs = '0 0 -8'; // toss the corpse - this.movetype = MOVETYPE_TOSS; + set_movetype(this, MOVETYPE_TOSS); // shootable corpse this.solid = SOLID_CORPSE; this.ballistics_density = autocvar_g_ballistics_density_corpse; @@ -637,7 +640,7 @@ void PlayerDamage(entity this, entity inflictor, entity attacker, float damage, // reset fields the weapons may use just in case FOREACH(Weapons, it != WEP_Null, LAMBDA( - WITHSELF(this, it.wr_resetplayer(it, this)); + it.wr_resetplayer(it, this); for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot) { ATTACK_FINISHED_FOR(this, it.m_id, slot) = 0; @@ -675,7 +678,7 @@ int Say(entity source, int teamsay, entity privatesay, string msgin, bool floodc if (!teamsay && !privatesay) if (substring(msgin, 0, 1) == " ") msgin = substring(msgin, 1, -1); // work around DP say bug (say_team does not have this!) - msgin = formatmessage(msgin); + msgin = formatmessage(source, msgin); string colorstr; if (!IS_PLAYER(source)) @@ -705,7 +708,7 @@ int Say(entity source, int teamsay, entity privatesay, string msgin, bool floodc // for now, just give "say" back and only handle say_team if(!teamsay) { - clientcommand(self, strcat("say ", msgin)); + clientcommand(source, strcat("say ", msgin)); return; } */