X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2FMain.qc;h=606123ad1c1d2c2ba4696b3f792bc8eb05a65e89;hb=5dd9b03eecb44879adc30de6f9a3f6a8417771a9;hp=03cbd528a2cf3cbf983ef500bc57edcaf3addee3;hpb=f87d67e5a9cfbbf50590ac28016b80d642eec1df;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/Main.qc b/qcsrc/client/Main.qc index 03cbd528a..606123ad1 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; @@ -825,7 +847,27 @@ void Ent_Nagger() { float nags, i, j, b, f; - nags = ReadByte(); + nags = ReadByte(); // NAGS NAGS NAGS NAGS NAGS NAGS NADZ NAGS NAGS NAGS + + if(!(nags & 4)) + { + if(vote_called_vote) + strunzone(vote_called_vote); + vote_called_vote = string_null; + vote_active = 0; + } + else + { + vote_active = 1; + } + + if(nags & 64) + { + vote_yescount = ReadByte(); + vote_nocount = ReadByte(); + vote_needed = ReadByte(); + vote_highlighted = ReadChar(); + } if(nags & 128) { @@ -874,7 +916,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,41 +932,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; - //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; -} - // 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(); @@ -991,7 +998,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)); @@ -1110,7 +1118,7 @@ void Ent_Init() g_balance_electro_secondary_bouncestop = ReadCoord(); nex_scope = !ReadByte(); - sniperrifle_scope = !ReadByte(); + rifle_scope = !ReadByte(); serverflags = ReadByte(); @@ -1305,36 +1313,6 @@ void Net_ReadPingPLReport() playerslots[e].ping_movementloss = ml / 255.0; } -void Net_VoteDialog(float highlight) { - if(highlight) { - vote_highlighted = ReadByte(); - return; - } - - vote_yescount = ReadByte(); - vote_nocount = ReadByte(); - vote_needed = ReadByte(); - vote_active = 1; -} - -void Net_VoteDialogReset() { - vote_active = 0; -} - -void Net_Notify() { - float type; - type = ReadByte(); - - if(type == CSQC_KILLNOTIFY) - { - HUD_KillNotify(ReadString(), ReadString(), ReadString(), ReadShort(), ReadByte()); - } - else if(type == CSQC_CENTERPRINT) - { - HUD_Centerprint(ReadString(), ReadString(), ReadShort(), ReadByte()); - } -} - void Net_WeaponComplain() { complain_weapon = ReadByte(); @@ -1390,14 +1368,6 @@ float CSQC_Parse_TempEntity() Net_TeamNagger(); bHandled = true; break; - case TE_CSQC_VOTE: - Net_VoteDialog(ReadByte()); - bHandled = true; - break; - case TE_CSQC_VOTERESET: - Net_VoteDialogReset(); - bHandled = true; - break; case TE_CSQC_LIGHTNINGARC: Net_ReadLightningarc(); bHandled = true; @@ -1410,14 +1380,33 @@ float CSQC_Parse_TempEntity() announce_snd = strzone(ReadString()); bHandled = true; break; - case TE_CSQC_NOTIFY: - Net_Notify(); + case TE_CSQC_KILLNOTIFY: + HUD_KillNotify(ReadString(), ReadString(), ReadString(), ReadShort(), ReadByte()); + bHandled = true; + break; + case TE_CSQC_KILLCENTERPRINT: + HUD_KillCenterprint(ReadString(), ReadString(), ReadShort(), ReadByte()); + bHandled = true; + break; + case TE_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); bHandled = true; break; case TE_CSQC_WEAPONCOMPLAIN: 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;