X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_client.qc;h=e9d9900ac28b5041326d7406f5e3cf4dba61e129;hb=5174b0f43d421554519d485b94893249cb095963;hp=0ec16a9a3db6de3c40590be7c3a179e62d798e12;hpb=ce357a573fec4e54069e480a25bb3e2216be378a;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 0ec16a9a3..e9d9900ac 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -398,8 +398,15 @@ Checks if the argument string can be a valid playermodel. Returns a valid one in doubt. ============= */ -string FallbackPlayerModel = "models/player/marine.zym"; +string FallbackPlayerModel; string CheckPlayerModel(string plyermodel) { + if(FallbackPlayerModel != cvar_defstring("_cl_playermodel")) + { + // note: we cannot summon Don Strunzone here, some player may + // still have the model string set. In case anyone manages how + // to change a cvar default, we'll have a small leak here. + FallbackPlayerModel = strzone(cvar_defstring("_cl_playermodel")); + } if(strlen(plyermodel) < 4) return FallbackPlayerModel; if( substring(plyermodel,0,14) != "models/player/") @@ -508,7 +515,6 @@ float Client_customizeentityforclient() return TRUE; } -void UpdatePlayerSounds(); void setmodel_lod(entity e, string modelname) { string s; @@ -1059,7 +1065,6 @@ float ClientInit_SendEntity(entity to, float sf) WriteCoord(MSG_ENTITY, hook_shotorigin_x); WriteCoord(MSG_ENTITY, hook_shotorigin_y); WriteCoord(MSG_ENTITY, hook_shotorigin_z); - if(sv_foginterval && world.fog != "") WriteString(MSG_ENTITY, world.fog); else @@ -1100,10 +1105,11 @@ void ClientInit_Spawn() { entity o; entity e; + e = spawn(); e.classname = "clientinit"; e.think = ClientInit_CheckUpdate; - e.nextthink = time; Net_LinkEntity(e, FALSE, 0, ClientInit_SendEntity); + o = self; self = e; ClientInit_CheckUpdate(); @@ -1387,6 +1393,10 @@ void ClientConnect (void) DecodeLevelParms(); +#ifdef WATERMARK + sprint(self, strcat("^4SVQC Build information: ", WATERMARK(), "\n")); +#endif + self.classname = "player_joining"; self.flags = FL_CLIENT; @@ -2837,6 +2847,18 @@ Called every frame for each client after the physics are run ============= */ .float idlekick_lasttimeleft; +.entity showheadshotbbox; +void showheadshotbbox_think() +{ + if(self.owner.showheadshotbbox != self) + { + remove(self); + return; + } + self.nextthink = time; + setorigin(self, self.owner.origin); + setsize(self, GetHeadshotMins(self.owner), GetHeadshotMaxs(self.owner)); +} void PlayerPostThink (void) { // Savage: Check for nameless players @@ -2938,6 +2960,26 @@ void PlayerPostThink (void) if(self.waypointsprite_attachedforcarrier) WaypointSprite_UpdateHealth(self.waypointsprite_attachedforcarrier, '1 0 0' * healtharmor_maxdamage(self.health, self.armorvalue, cvar("g_balance_armor_blockpercent"))); + if(self.classname == "player" && self.deadflag == DEAD_NO && cvar("r_showbboxes")) + { + if(!self.showheadshotbbox) + { + self.showheadshotbbox = spawn(); + self.showheadshotbbox.classname = "headshotbbox"; + self.showheadshotbbox.owner = self; + self.showheadshotbbox.think = showheadshotbbox_think; + self.showheadshotbbox.nextthink = time; + self = self.showheadshotbbox; + self.think(); + self = self.owner; + } + } + else + { + if(self.showheadshotbbox) + remove(self.showheadshotbbox); + } + playerdemo_write(); /*