X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_player.qc;h=8e84f4863a9e3b2b7373a05f0d680831e4d1d86f;hp=46d1b2cbd0ba08c81b08d4ce4a606fc8309d01d6;hb=1c758278958da8f2baf1f39cd0f298d5bda097a2;hpb=919c48e2ad5873bf1efb041be2e23e2e60903baf diff --git a/qcsrc/server/cl_player.qc b/qcsrc/server/cl_player.qc index 46d1b2cbd0..8e84f4863a 100644 --- a/qcsrc/server/cl_player.qc +++ b/qcsrc/server/cl_player.qc @@ -9,7 +9,6 @@ #include "miscfunctions.qh" #include "portals.qh" #include "teamplay.qh" -#include "waypointsprites.qh" #include "weapons/throwing.qh" #include "command/common.qh" #include "../common/animdecide.qh" @@ -26,7 +25,7 @@ #include "../common/animdecide.qh" void CopyBody_Think(void) -{ +{SELFPARAM(); if(self.CopyBody_nextthink && time > self.CopyBody_nextthink) { self.CopyBody_think(); @@ -36,90 +35,88 @@ void CopyBody_Think(void) self.CopyBody_think = self.think; self.think = CopyBody_Think; } - CSQCMODEL_AUTOUPDATE(); + CSQCMODEL_AUTOUPDATE(self); self.nextthink = time; } void CopyBody(float keepvelocity) -{ - entity oldself; +{SELFPARAM(); if (self.effects & EF_NODRAW) return; - oldself = self; - self = spawn(); - self.enemy = oldself; - 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.v_angle = oldself.v_angle; - self.avelocity = oldself.avelocity; + setself(spawn()); + self.enemy = this; + self.lip = this.lip; + self.colormap = this.colormap; + self.iscreature = this.iscreature; + self.teleportable = this.teleportable; + self.damagedbycontents = this.damagedbycontents; + self.angles = this.angles; + self.v_angle = this.v_angle; + self.avelocity = this.avelocity; self.classname = "body"; - self.damageforcescale = oldself.damageforcescale; - self.effects = oldself.effects; - self.glowmod = oldself.glowmod; - self.event_damage = oldself.event_damage; - 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.pain_finished = oldself.pain_finished; - self.health = oldself.health; - self.armorvalue = oldself.armorvalue; - self.armortype = oldself.armortype; - self.model = oldself.model; - self.modelindex = oldself.modelindex; - self.skin = oldself.skin; - self.species = oldself.species; - self.movetype = oldself.movetype; - self.solid = oldself.solid; - self.ballistics_density = oldself.ballistics_density; - self.takedamage = oldself.takedamage; - self.customizeentityforclient = oldself.customizeentityforclient; - self.uncustomizeentityforclient = oldself.uncustomizeentityforclient; - self.uncustomizeentityforclient_set = oldself.uncustomizeentityforclient_set; + self.damageforcescale = this.damageforcescale; + self.effects = this.effects; + self.glowmod = this.glowmod; + self.event_damage = this.event_damage; + self.anim_state = this.anim_state; + self.anim_time = this.anim_time; + self.anim_lower_action = this.anim_lower_action; + self.anim_lower_time = this.anim_lower_time; + self.anim_upper_action = this.anim_upper_action; + self.anim_upper_time = this.anim_upper_time; + self.anim_implicit_state = this.anim_implicit_state; + self.anim_implicit_time = this.anim_implicit_time; + self.anim_lower_implicit_action = this.anim_lower_implicit_action; + self.anim_lower_implicit_time = this.anim_lower_implicit_time; + self.anim_upper_implicit_action = this.anim_upper_implicit_action; + self.anim_upper_implicit_time = this.anim_upper_implicit_time; + self.dphitcontentsmask = this.dphitcontentsmask; + self.death_time = this.death_time; + self.pain_finished = this.pain_finished; + self.health = this.health; + self.armorvalue = this.armorvalue; + self.armortype = this.armortype; + self.model = this.model; + self.modelindex = this.modelindex; + self.skin = this.skin; + self.species = this.species; + self.movetype = this.movetype; + self.solid = this.solid; + self.ballistics_density = this.ballistics_density; + self.takedamage = this.takedamage; + self.customizeentityforclient = this.customizeentityforclient; + self.uncustomizeentityforclient = this.uncustomizeentityforclient; + self.uncustomizeentityforclient_set = this.uncustomizeentityforclient_set; if (keepvelocity == 1) - self.velocity = oldself.velocity; + self.velocity = this.velocity; self.oldvelocity = self.velocity; - self.alpha = oldself.alpha; - self.fade_time = oldself.fade_time; - self.fade_rate = oldself.fade_rate; - //self.weapon = oldself.weapon; - setorigin(self, oldself.origin); - setsize(self, oldself.mins, oldself.maxs); - self.prevorigin = oldself.origin; + self.alpha = this.alpha; + self.fade_time = this.fade_time; + self.fade_rate = this.fade_rate; + //self.weapon = this.weapon; + setorigin(self, this.origin); + setsize(self, this.mins, this.maxs); + self.prevorigin = this.origin; self.reset = SUB_Remove; - Drag_MoveDrag(oldself, self); + Drag_MoveDrag(this, self); if(self.colormap <= maxclients && self.colormap > 0) - self.colormap = 1024 + oldself.clientcolors; + self.colormap = 1024 + this.clientcolors; - CSQCMODEL_AUTOINIT(); - self.CopyBody_nextthink = oldself.nextthink; - self.CopyBody_think = oldself.think; + CSQCMODEL_AUTOINIT(self); + self.CopyBody_nextthink = this.nextthink; + self.CopyBody_think = this.think; self.nextthink = time; self.think = CopyBody_Think; // "bake" the current animation frame for clones (they don't get clientside animation) animdecide_load_if_needed(self); animdecide_setframes(self, false, frame, frame1time, frame2, frame2time); - self = oldself; + setself(this); } float player_getspecies() -{ +{SELFPARAM(); float s; get_model_parameters(self.model, self.skin); s = get_model_parameters_species; @@ -130,14 +127,14 @@ float player_getspecies() } void player_setupanimsformodel() -{ +{SELFPARAM(); // load animation info animdecide_load_if_needed(self); animdecide_setstate(self, 0, false); } void player_anim (void) -{ +{SELFPARAM(); int deadbits = (self.anim_state & (ANIMSTATE_DEAD1 | ANIMSTATE_DEAD2)); if(self.deadflag) { if (!deadbits) { @@ -154,6 +151,8 @@ void player_anim (void) int animbits = deadbits; if(self.frozen) animbits |= ANIMSTATE_FROZEN; + if(self.movetype == MOVETYPE_FOLLOW) + animbits |= ANIMSTATE_FOLLOW; if(self.crouch) animbits |= ANIMSTATE_DUCK; animdecide_setstate(self, animbits, false); @@ -168,7 +167,7 @@ void player_anim (void) } void PlayerCorpseDamage (entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) -{ +{SELFPARAM(); float take, save; vector v; Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, self, attacker); @@ -220,7 +219,7 @@ void PlayerCorpseDamage (entity inflictor, entity attacker, float damage, int de } void calculate_player_respawn_time() -{ +{SELFPARAM(); if(g_ca) return; @@ -307,7 +306,7 @@ void calculate_player_respawn_time() } void PlayerDamage (entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) -{ +{SELFPARAM(); float take, save, dh, da; int j; vector v; @@ -532,7 +531,7 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, int deathtyp if(deathtype == DEATH_KILL) { // for the lemmings fans, a small harmless explosion - Send_Effect("rocket_explode", self.origin, '0 0 0', 1); + Send_Effect(EFFECT_ROCKET_EXPLODE, self.origin, '0 0 0', 1); } } @@ -547,6 +546,7 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, int deathtyp attacker.accuracy.(accuracy_frags[w-1]) += 1; MUTATOR_CALLHOOK(PlayerDies, inflictor, attacker, self, deathtype); + excess = frag_damage; WEP_ACTION(self.weapon, WR_PLAYERDEATH); @@ -708,12 +708,28 @@ float Say(entity source, float teamsay, entity privatesay, string msgin, float f } else if(teamsay) { - msgstr = strcat("\{1}\{13}", colorstr, "(", colorprefix, namestr, colorstr, ") ^7", msgin); + if(strstrofs(msgin, "/me", 0) >= 0) + { + //msgin = strreplace("/me", "", msgin); + //msgin = substring(msgin, 3, strlen(msgin)); + msgin = strreplace("/me", strcat(colorstr, "(", colorprefix, namestr, colorstr, ")^7"), msgin); + msgstr = strcat("\{1}\{13}^4* ", "^7", msgin); + } + else + msgstr = strcat("\{1}\{13}", colorstr, "(", colorprefix, namestr, colorstr, ") ^7", msgin); cmsgstr = strcat(colorstr, "(", colorprefix, namestr, colorstr, ")\n^7", msgin); } else { - msgstr = strcat("\{1}", colorprefix, namestr, "^7: ", msgin); + if(strstrofs(msgin, "/me", 0) >= 0) + { + //msgin = strreplace("/me", "", msgin); + //msgin = substring(msgin, 3, strlen(msgin)); + msgin = strreplace("/me", strcat(colorprefix, namestr), msgin); + msgstr = strcat("\{1}^4* ", "^7", msgin); + } + else + msgstr = strcat("\{1}", colorprefix, namestr, "^7: ", msgin); cmsgstr = ""; } msgstr = strcat(strreplace("\n", " ", msgstr), "\n"); // newlines only are good for centerprint @@ -829,7 +845,7 @@ float Say(entity source, float teamsay, entity privatesay, string msgin, float f } if(flood) - print("NOTE: ", playername(source), "^7 is flooding.\n"); + LOG_INFO("NOTE: ", playername(source), "^7 is flooding.\n"); // build sourcemsgstr by cutting off a prefix and replacing it by the other one if(privatesay) @@ -979,7 +995,7 @@ void PrecachePlayerSounds(string f) { if(tokenize_console(s) != 3) { - dprint("Invalid sound info line: ", s, "\n"); + LOG_TRACE("Invalid sound info line: ", s, "\n"); continue; } PrecacheGlobalSound(strcat(argv(1), " ", argv(2))); @@ -996,7 +1012,7 @@ void PrecachePlayerSounds(string f) } void ClearPlayerSounds() -{ +{SELFPARAM(); #define _VOICEMSG(m) if(self.playersound_##m) { strunzone(self.playersound_##m); self.playersound_##m = string_null; } ALLPLAYERSOUNDS ALLVOICEMSGS @@ -1004,14 +1020,14 @@ void ClearPlayerSounds() } float LoadPlayerSounds(string f, float first) -{ +{SELFPARAM(); float fh; string s; var .string field; fh = fopen(f, FILE_READ); if(fh < 0) { - dprint("Player sound file not found: ", f, "\n"); + LOG_TRACE("Player sound file not found: ", f, "\n"); return 0; } while((s = fgets(fh))) @@ -1032,7 +1048,7 @@ float LoadPlayerSounds(string f, float first) } void UpdatePlayerSounds() -{ +{SELFPARAM(); if(self.modelindex == self.modelindex_for_playersound) if(self.skin == self.skin_for_playersound) return; @@ -1046,7 +1062,7 @@ void UpdatePlayerSounds() } void FakeGlobalSound(string sample, float chan, float voicetype) -{ +{SELFPARAM(); float n; float tauntrand; @@ -1121,7 +1137,7 @@ void FakeGlobalSound(string sample, float chan, float voicetype) } void GlobalSound(string sample, float chan, float voicetype) -{ +{SELFPARAM(); float n; float tauntrand; @@ -1219,12 +1235,12 @@ void GlobalSound(string sample, float chan, float voicetype) } void PlayerSound(.string samplefield, float chan, float voicetype) -{ +{SELFPARAM(); GlobalSound(self.(samplefield), chan, voicetype); } void VoiceMessage(string type, string msg) -{ +{SELFPARAM(); var .string sample; float voicetype, ownteam; float flood;