X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_player.qc;h=4a5c8a00d2d4866e27f44f598ef3ba9e9942ae0b;hb=5b6514ad570d0210590f6fb10b6abd26df38cbd8;hp=1791bfeef8a8efa902df9e8db586a6a1cfbba091;hpb=39ff79e42e1d5cdc4b119f15ba8387bf23fa9fda;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/cl_player.qc b/qcsrc/server/cl_player.qc index 1791bfeef..4a5c8a00d 100644 --- a/qcsrc/server/cl_player.qc +++ b/qcsrc/server/cl_player.qc @@ -26,7 +26,7 @@ void WeaponStats_ready(entity fh, entity pass, float status) url_fputs(fh, "#begin statsfile\n"); url_fputs(fh, strcat("#date ", strftime(TRUE, "%a %b %e %H:%M:%S %Z %Y"), "\n")); #ifdef WATERMARK - url_fputs(fh, strcat("#version ", WATERMARK(), "\n")); + url_fputs(fh, strcat("#version ", WATERMARK, "\n")); #endif url_fputs(fh, strcat("#config ", ftos(crc16(FALSE, cvar_purechanges)), "\n")); url_fputs(fh, strcat("#cvar_purechanges ", ftos(cvar_purechanges_count), "\n")); @@ -161,16 +161,20 @@ void CopyBody(float keepvelocity) self.effects = oldself.effects; self.glowmod = oldself.glowmod; self.event_damage = oldself.event_damage; - self.animstate_startframe = oldself.animstate_startframe; - self.animstate_numframes = oldself.animstate_numframes; - self.animstate_framerate = oldself.animstate_framerate; - self.animstate_starttime = oldself.animstate_starttime; - self.animstate_endtime = oldself.animstate_endtime; - self.animstate_override = oldself.animstate_override; - self.animstate_looping = oldself.animstate_looping; + self.anim_state = oldself.anim_state; + self.anim_time = oldself.anim_time; + self.anim_lower_action = oldself.anim_lower_action; + self.anim_lower_time = oldself.anim_lower_time; + self.anim_upper_action = oldself.anim_upper_action; + self.anim_upper_time = oldself.anim_upper_time; + self.anim_implicit_state = oldself.anim_implicit_state; + self.anim_implicit_time = oldself.anim_implicit_time; + self.anim_lower_implicit_action = oldself.anim_lower_implicit_action; + self.anim_lower_implicit_time = oldself.anim_lower_implicit_time; + self.anim_upper_implicit_action = oldself.anim_upper_implicit_action; + self.anim_upper_implicit_time = oldself.anim_upper_implicit_time; self.dphitcontentsmask = oldself.dphitcontentsmask; self.death_time = oldself.death_time; - self.frame = oldself.frame; self.pain_finished = oldself.pain_finished; self.health = oldself.health; self.armorvalue = oldself.armorvalue; @@ -208,6 +212,8 @@ void CopyBody(float keepvelocity) self.CopyBody_think = oldself.think; self.nextthink = time; self.think = CopyBody_Think; + // "bake" the current animation frame for clones (they don't get clientside animation) + animdecide_setframes(self, FALSE, frame, frame1time, frame2, frame2time); self = oldself; } @@ -244,8 +250,7 @@ void player_anim (void) if(self.crouch) animbits |= ANIMSTATE_DUCK; animdecide_setstate(self, animbits, FALSE); - - animdecide_setframes(self, FALSE); + animdecide_setimplicitstate(self, (self.flags & FL_ONGROUND)); if (self.weaponentity) { @@ -257,10 +262,6 @@ void player_anim (void) void SpawnThrownWeapon (vector org, float w) { - if(g_minstagib) - if(self.ammo_cells <= 0) - return; - if(g_pinata) { float j; @@ -386,16 +387,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) + { + // 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") { - v = healtharmor_applydamage(self.armorvalue, autocvar_g_balance_armor_blockpercent, damage); - take = v_x; - save = v_y; + 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; @@ -438,7 +456,7 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht { self.pain_finished = time + 0.5; //Supajoe - if(sv_gentle < 1) { + if(autocvar_sv_gentle < 1) { if(self.classname != "body") // pain anim is BORKED on our ZYMs, FIXME remove this once we have good models { if (!self.animstate_override) @@ -482,29 +500,8 @@ 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; - 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 - { - self.pushltime = 0; - self.istypefrag = 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); @@ -546,7 +543,7 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht if(valid_damage_for_weaponstats) WeaponStats_LogKill(awep, abot, self.weapon, vbot); - if(sv_gentle < 1) // TODO make a "gentle" version? + if(autocvar_sv_gentle < 1) // TODO make a "gentle" version? if(sound_allowed(MSG_BROADCAST, attacker)) { if(deathtype == DEATH_DROWN) @@ -582,7 +579,6 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht // print an obituary message Obituary (attacker, inflictor, self, deathtype); race_PreDie(); - DropAllRunes(self); // increment frag counter for used weapon type float w; @@ -611,7 +607,6 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht if(clienttype(self) == CLIENTTYPE_REAL) { - stuffcmd(self, "-zoom\n"); self.fixangle = TRUE; //msg_entity = self; //WriteByte (MSG_ONE, SVC_SETANGLE); @@ -688,7 +683,7 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht // set up to fade out later SUB_SetFade (self, time + 6 + random (), 1); - if(sv_gentle > 0 || autocvar_ekg) { + if(autocvar_sv_gentle > 0 || autocvar_ekg) { // remove corpse PlayerCorpseDamage (inflictor, attacker, autocvar_sv_gibhealth+1.0, deathtype, hitloc, force); } @@ -925,17 +920,18 @@ float Say(entity source, float teamsay, entity privatesay, string msgin, float f if(sourcecmsgstr != "" && !privatesay) centerprint(source, sourcecmsgstr); } - else if(privatesay) // private message, between 2 people only, not sent to server console + else if(privatesay) // private message, between 2 people only { sprint(source, sourcemsgstr); sprint(privatesay, msgstr); + if not(autocvar_g_chat_tellprivacy) { dedicated_print(msgstr); } // send to server console too if "tellprivacy" is disabled if(cmsgstr != "") centerprint(privatesay, cmsgstr); } else if(teamsay > 0) // team message, only sent to team mates { sprint(source, sourcemsgstr); - //print(msgstr); // send to server console too + dedicated_print(msgstr); // send to server console too if(sourcecmsgstr != "") centerprint(source, sourcecmsgstr); FOR_EACH_REALPLAYER(head) if(head.team == source.team) @@ -949,7 +945,7 @@ float Say(entity source, float teamsay, entity privatesay, string msgin, float f else if(teamsay < 0) // spectator message, only sent to spectators { sprint(source, sourcemsgstr); - //print(msgstr); // send to server console too + dedicated_print(msgstr); // send to server console too FOR_EACH_REALCLIENT(head) if(head.classname != "player") if(head != source) sprint(head, msgstr); @@ -957,7 +953,7 @@ float Say(entity source, float teamsay, entity privatesay, string msgin, float f else if(sourcemsgstr != msgstr) // trimmed/server fixed message, sent to all players { sprint(source, sourcemsgstr); - //print(msgstr); // send to server console too + dedicated_print(msgstr); // send to server console too FOR_EACH_REALCLIENT(head) if(head != source) sprint(head, msgstr); @@ -1139,7 +1135,7 @@ void FakeGlobalSound(string sample, float chan, float voicetype) break; if(!sv_taunt) break; - if(sv_gentle) + if(autocvar_sv_gentle) break; tauntrand = random(); msg_entity = self; @@ -1157,7 +1153,7 @@ void FakeGlobalSound(string sample, float chan, float voicetype) animdecide_setaction(self, ANIMACTION_TAUNT, TRUE); if(!sv_taunt) break; - if(sv_gentle) + if(autocvar_sv_gentle) break; msg_entity = self; if (msg_entity.cvar_cl_voice_directional >= 1) @@ -1236,7 +1232,7 @@ void GlobalSound(string sample, float chan, float voicetype) break; if(!sv_taunt) break; - if(sv_gentle) + if(autocvar_sv_gentle) break; tauntrand = random(); FOR_EACH_REALCLIENT(msg_entity) @@ -1254,7 +1250,7 @@ void GlobalSound(string sample, float chan, float voicetype) animdecide_setaction(self, ANIMACTION_TAUNT, TRUE); if(!sv_taunt) break; - if(sv_gentle) + if(autocvar_sv_gentle) break; FOR_EACH_REALCLIENT(msg_entity) { @@ -1302,14 +1298,8 @@ void VoiceMessage(string type, string msg) FakeGlobalSound(self.sample, CH_VOICE, voicetype); } -void MoveToTeam(entity client, float team_colour, float type, float show_message) +void MoveToTeam(entity client, float team_colour, float type) { -// show_message -// 0 (00) automove centerprint, admin message -// 1 (01) automove centerprint, no admin message -// 2 (10) no centerprint, admin message -// 3 (11) no centerprint, no admin message - float lockteams_backup; lockteams_backup = lockteams; // backup any team lock @@ -1318,14 +1308,9 @@ void MoveToTeam(entity client, float team_colour, float type, float show_message TeamchangeFrags(client); // move the players frags SetPlayerColors(client, team_colour - 1); // set the players colour - Damage(client, client, client, 100000, ((show_message & 2) ? DEATH_QUIET : DEATH_AUTOTEAMCHANGE), client.origin, '0 0 0'); // kill the player + Damage(client, client, client, 100000, DEATH_AUTOTEAMCHANGE, client.origin, '0 0 0'); // kill the player lockteams = lockteams_backup; // restore the team lock LogTeamchange(client.playerid, client.team, type); - - if not(show_message & 1) // admin message - sprint(client, strcat("\{1}\{13}^3", admin_name(), "^7: You have been moved to the ", Team_ColorNameLowerCase(team_colour), " team\n")); // send a chat message - - bprint(strcat(client.netname, " joined the ", ColoredTeamName(client.team), "\n")); }