X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_player.qc;h=951d99d2e8b5d8a76944b8e9b831a4ea99ff1b57;hb=2edeb8354bb93aae319d75077a44c0fd0b4f6ca2;hp=326d13615f12f76253f01f150bce685f3a1366ac;hpb=ca387f77b7b8044475a7c359e22d2e6d4ebf513d;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/cl_player.qc b/qcsrc/server/cl_player.qc index 326d13615..951d99d2e 100644 --- a/qcsrc/server/cl_player.qc +++ b/qcsrc/server/cl_player.qc @@ -123,6 +123,7 @@ void WeaponStats_LogKill(float awep, float abot, float vwep, float vbot) .entity pusher; .float pushltime; +.float istypefrag; .float CopyBody_nextthink; .void(void) CopyBody_think; @@ -151,6 +152,7 @@ void CopyBody(float keepvelocity) self.lip = oldself.lip; self.colormap = oldself.colormap; self.iscreature = oldself.iscreature; + self.teleportable = oldself.teleportable; self.damagedbycontents = oldself.damagedbycontents; self.angles = oldself.angles; self.avelocity = oldself.avelocity; @@ -271,7 +273,9 @@ void player_anim (void) if (!self.animstate_override) { - if (!(self.flags & FL_ONGROUND) || self.BUTTON_JUMP) + if (self.freezetag_frozen) + setanim(self, self.anim_idle, TRUE, FALSE, FALSE); + else if (!(self.flags & FL_ONGROUND) || self.BUTTON_JUMP) { if (self.crouch) { @@ -351,16 +355,12 @@ void player_anim (void) void SpawnThrownWeapon (vector org, float w) { - if(g_minstagib) - if(self.ammo_cells <= 0) - return; - if(g_pinata) { float j; for(j = WEP_FIRST; j <= WEP_LAST; ++j) { - if(self.weapons & W_WeaponBit(j)) + if(WEPSET_CONTAINS_EW(self, j)) if(W_IsWeaponThrowable(j)) W_ThrowNewWeapon(self, j, FALSE, org, randomvec() * 175 + '0 0 325'); } @@ -422,6 +422,7 @@ void PlayerCorpseDamage (entity inflictor, entity attacker, float damage, float self.alpha = -1; self.solid = SOLID_NOT; // restore later self.takedamage = DAMAGE_NO; // restore later + self.damagedbycontents = FALSE; } } @@ -435,7 +436,7 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht float valid_damage_for_weaponstats; float excess; - if((g_arena && numspawned < 2) || (g_ca && !ca_teams_ok) && !inWarmupStage) + if((g_arena && numspawned < 2) || (g_ca && allowed_to_spawn) && !inWarmupStage) return; dh = max(self.health, 0); @@ -479,16 +480,33 @@ 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_minstagib) + + v = healtharmor_applydamage(self.armorvalue, autocvar_g_balance_armor_blockpercent, damage); + take = v_x; + save = v_y; + + if(attacker == self) { - v = healtharmor_applydamage(self.armorvalue, autocvar_g_balance_armor_blockpercent, damage); - take = v_x; - save = v_y; + // don't reset pushltime for self damage as it may be an attempt to + // escape a lava pit or similar + //self.pushltime = 0; + self.istypefrag = 0; + } + else if(attacker.classname == "player") + { + self.pusher = attacker; + self.pushltime = time + autocvar_g_maxpushtime; + self.istypefrag = self.BUTTON_CHAT; + } + else if(time < self.pushltime) + { + attacker = self.pusher; + self.pushltime = max(self.pushltime, time + 0.6); } else { - save = 0; - take = damage; + self.pushltime = 0; + self.istypefrag = 0; } frag_inflictor = inflictor; @@ -575,30 +593,16 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht self.dmg_take = self.dmg_take + take;//max(take - 10, 0); self.dmg_inflictor = inflictor; - if(attacker == self) - { - // don't reset pushltime for self damage as it may be an attempt to - // escape a lava pit or similar - //self.pushltime = 0; - } - else if(attacker.classname == "player") - { - self.pusher = attacker; - self.pushltime = time + autocvar_g_maxpushtime; - } - else if(time < self.pushltime) - { - attacker = self.pusher; - self.pushltime = max(self.pushltime, time + 0.6); - } - else - self.pushltime = 0; + if(g_ca && self != attacker && attacker.classname == "player") + PlayerScore_Add(attacker, SP_SCORE, (damage - excess) * autocvar_g_ca_damage2score_multiplier); float abot, vbot, awep; abot = (clienttype(attacker) == CLIENTTYPE_BOT); vbot = (clienttype(self) == CLIENTTYPE_BOT); valid_damage_for_weaponstats = 0; + awep = 0; + if(vbot || clienttype(self) == CLIENTTYPE_REAL) if(abot || clienttype(attacker) == CLIENTTYPE_REAL) if(attacker && self != attacker) @@ -693,17 +697,6 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht RemoveGrapplingHook(self); - if(self.flagcarried) - { - if(attacker.classname != "player") - DropFlag(self.flagcarried, self, attacker); // penalty for flag loss by suicide - else if(attacker.team == self.team) - DropFlag(self.flagcarried, attacker, attacker); // penalty for flag loss by suicide/teamkill - else - DropFlag(self.flagcarried, world, attacker); - } - if(self.ballcarried && g_nexball) - DropBall(self.ballcarried, self.origin, self.velocity); Portal_ClearAllLater(self); if(clienttype(self) == CLIENTTYPE_REAL) @@ -807,14 +800,12 @@ float Say(entity source, float teamsay, entity privatesay, string msgin, float f // 0 = reject // -1 = fake accept { - string msgstr, colorstr, cmsgstr, namestr, fullmsgstr, sourcemsgstr, fullcmsgstr, sourcecmsgstr, privatemsgprefix; - float flood, privatemsgprefixlen; + string msgstr, colorstr, cmsgstr, namestr, fullmsgstr, sourcemsgstr, fullcmsgstr, sourcecmsgstr; + float flood; var .float flood_field; entity head; float ret; - - if(Ban_MaybeEnforceBan(source)) - return 0; + string privatemsgprefix = string_null; float privatemsgprefixlen = 0; if(!teamsay && !privatesay) if(substring(msgin, 0, 1) == " ") @@ -827,7 +818,10 @@ float Say(entity source, float teamsay, entity privatesay, string msgin, float f else if(teamplay) colorstr = Team_ColorCode(source.team); else + { + colorstr = ""; teamsay = FALSE; + } if(intermission_running) teamsay = FALSE; @@ -886,6 +880,7 @@ float Say(entity source, float teamsay, entity privatesay, string msgin, float f // FLOOD CONTROL flood = 0; + flood_field = floodcontrol_chat; if(floodcontrol) { float flood_spl; @@ -981,7 +976,7 @@ float Say(entity source, float teamsay, entity privatesay, string msgin, float f if(source.classname != "player") { if not(intermission_running) - if(teamsay || (autocvar_g_chat_nospectators == 1) || (autocvar_g_chat_nospectators == 2 && !inWarmupStage)) + if(teamsay || (autocvar_g_chat_nospectators == 1) || (autocvar_g_chat_nospectators == 2 && !(inWarmupStage || gameover))) teamsay = -1; // spectators }