X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2FMain.qc;h=6d90e1080363324f89edd644f2f4d20ad1c1ebee;hp=a89b4f45ad36277fe538c1e3fff47c871a6a0302;hb=44effb3a66f8b44d05106ff361ef5fc126fef03b;hpb=f9fd9f8f4c871196227eb94481226551eade0d19 diff --git a/qcsrc/client/Main.qc b/qcsrc/client/Main.qc index a89b4f45ad..6d90e10803 100644 --- a/qcsrc/client/Main.qc +++ b/qcsrc/client/Main.qc @@ -47,7 +47,7 @@ void WaypointSprite_Load(); void CSQC_Init(void) { prvm_language = cvar_string("prvm_language"); - + #ifdef USE_FTE #pragma target ID __engine_check = checkextension("DP_SV_WRITEPICTURE"); @@ -139,6 +139,9 @@ void CSQC_Init(void) GibSplash_Precache(); Casings_Precache(); DamageInfo_Precache(); + Vehicles_Precache(); + turrets_precache(); + if(autocvar_cl_announcer != cl_announcer_prev) { Announcer_Precache(); if(cl_announcer_prev) @@ -654,17 +657,38 @@ float CSQC_InputEvent(float bInputType, float nPrimary, float nSecondary) // -------------------------------------------------------------------------- // BEGIN OPTIONAL CSQC FUNCTIONS +void Ent_RemoveEntCS() +{ + entcs_receiver[self.sv_entnum] = world; +} void Ent_ReadEntCS() { + float sf; InterpolateOrigin_Undo(); self.classname = "entcs_receiver"; - self.sv_entnum = ReadByte() - 1; - self.origin_x = ReadShort(); - self.origin_y = ReadShort(); - self.origin_z = ReadShort(); - self.angles_y = ReadByte() * 360.0 / 256; - self.origin_z = self.angles_x = self.angles_z = 0; + sf = ReadByte(); + + if(sf & 1) + self.sv_entnum = ReadByte(); + if(sf & 2) + { + self.origin_x = ReadShort(); + self.origin_y = ReadShort(); + self.origin_z = ReadShort(); + } + if(sf & 4) + { + self.angles_y = ReadByte() * 360.0 / 256; + self.angles_x = self.angles_z = 0; + } + if(sf & 8) + self.healthvalue = ReadByte() * 10; + if(sf & 16) + self.armorvalue = ReadByte() * 10; + + entcs_receiver[self.sv_entnum] = self; + self.entremove = Ent_RemoveEntCS; InterpolateOrigin_Note(); } @@ -803,8 +827,6 @@ void Ent_ClientData() if(newspectatee_status != spectatee_status) { - float i; - // clear race stuff race_laptime = 0; race_checkpointtime = 0; @@ -827,6 +849,13 @@ void Ent_Nagger() nags = ReadByte(); + if(!(nags & 4)) + { + if(vote_called_vote) + strunzone(vote_called_vote); + vote_called_vote = string_null; + } + if(nags & 128) { if(vote_called_vote) @@ -874,7 +903,7 @@ void Ent_ReadAccuracy(void) weapon_accuracy[w] = -1; return; } - + for(w = 0, f = 1; w <= WEP_LAST - WEP_FIRST; ++w, f *= 2) { if(sf & f) @@ -890,44 +919,6 @@ void Ent_ReadAccuracy(void) } } -void Ent_ShowNames() -{ - float sf; - - // entity init, TODO can this be done only once somehow? - self.the_entnum = ReadByte(); // TODO: fixme to only send once somehow - self.draw2d = Draw_ShowNames; - InterpolateOrigin_Undo(); - - //self.movetype = MOVETYPE_FLY; // movetype needed so we can traceline? - self.mins = '-20 -20 -24'; - self.maxs = '20 20 45'; - self.classname = "shownames_tag"; - - sf = ReadByte(); - - if(sf & 1) - { - self.origin_x = ReadShort(); - self.origin_y = ReadShort(); - self.origin_z = ReadShort(); - } - if(sf & 2) - { - self.healthvalue = ReadByte(); - } - if(sf & 4) - { - self.armorvalue = ReadByte(); - } - - if(sf & 128) // same team - self.sameteam = TRUE; - else - self.sameteam = FALSE; - InterpolateOrigin_Note(); -} - // CSQC_Ent_Update : Called every frame that the server has indicated an update to the SSQC / CSQC entity has occured. // The only parameter reflects if the entity is "new" to the client, meaning it just came into the client's PVS. void Ent_RadarLink(); @@ -994,7 +985,8 @@ void(float bIsNewEntity) CSQC_Ent_Update = case ENT_CLIENT_LGBEAM: Ent_ReadHook(bIsNewEntity, ENT_CLIENT_LGBEAM); break; case ENT_CLIENT_GAUNTLET: Ent_ReadHook(bIsNewEntity, ENT_CLIENT_GAUNTLET); break; case ENT_CLIENT_ACCURACY: Ent_ReadAccuracy(); break; - case ENT_CLIENT_SHOWNAMES: Ent_ShowNames(); break; + case ENT_CLIENT_AUXILIARYXHAIR: Net_AuXair2(bIsNewEntity); break; + case ENT_CLIENT_TURRET: ent_turret(); break; default: //error(strcat(_("unknown entity type in CSQC_Ent_Update: %d\n"), self.enttype)); error(sprintf(_("Unknown entity type in CSQC_Ent_Update (enttype: %d, edict: %d, classname: %s)\n"), self.enttype, num_for_edict(self), self.classname)); @@ -1113,7 +1105,7 @@ void Ent_Init() g_balance_electro_secondary_bouncestop = ReadCoord(); nex_scope = !ReadByte(); - sniperrifle_scope = !ReadByte(); + rifle_scope = !ReadByte(); serverflags = ReadByte(); @@ -1336,6 +1328,17 @@ void Net_Notify() { { HUD_Centerprint(ReadString(), ReadString(), ReadShort(), ReadByte()); } + else if(type == CSQC_CENTERPRINT_GENERIC) + { + float id; + string s; + id = ReadByte(); + s = ReadString(); + if (id != 0 && s != "") + centerprint_generic(id, s, ReadByte(), ReadByte()); + else + centerprint_generic(id, s, 0, 0); + } } void Net_WeaponComplain() { @@ -1421,6 +1424,10 @@ float CSQC_Parse_TempEntity() Net_WeaponComplain(); bHandled = true; break; + case TE_CSQC_VEHICLESETUP: + Net_VehicleSetup(); + bHandled = true; + break; default: // No special logic for this temporary entity; return 0 so the engine can handle it bHandled = false;