X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2FMain.qc;h=43cb8cb2f39be47827e0503fa49c9a107a57651d;hb=d19c9797a71064a657bde66f40f29cd06cc2480b;hp=8facbf500ff9a8e2b28567b7b96bd85c88c85ebf;hpb=8b553f0dc135151cf76e0277739a2118e4a31b0c;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/Main.qc b/qcsrc/client/Main.qc index 8facbf500..43cb8cb2f 100644 --- a/qcsrc/client/Main.qc +++ b/qcsrc/client/Main.qc @@ -2,6 +2,19 @@ // BEGIN REQUIRED CSQC FUNCTIONS //include "main.qh" +entity clearentity_ent; +void clearentity(entity e) +{ + if not(clearentity_ent) + { + clearentity_ent = spawn(); + clearentity_ent.classname = "clearentity"; + } + float n = e.entnum; + copyentity(clearentity_ent, e); + e.entnum = n; +} + #define DP_CSQC_ENTITY_REMOVE_IS_B0RKED void menu_show_error() { @@ -74,7 +87,6 @@ void ConsoleCommand_macro_init(); void CSQC_Init(void) { prvm_language = cvar_string("prvm_language"); - #ifdef USE_FTE #pragma target ID __engine_check = checkextension("DP_SV_WRITEPICTURE"); @@ -105,7 +117,7 @@ void CSQC_Init(void) ClientProgsDB = db_load("client.db"); compressShortVector_init(); - drawfont = FONT_USER+1; + draw_endBoldFont(); menu_visible = FALSE; menu_show = menu_show_error; menu_action = menu_sub_null; @@ -165,7 +177,7 @@ void CSQC_Init(void) DamageInfo_Precache(); Vehicles_Precache(); turrets_precache(); - Announcer_Precache(); + Announcer_Precache(); Tuba_Precache(); if(autocvar_cl_reticle) @@ -706,6 +718,7 @@ void CSQC_Ent_Update(float bIsNewEntity) //print(_("A CSQC entity changed its type!\n")); print(sprintf(_("A CSQC entity changed its type! (edict: %d, server: %d, type: %d -> %d)\n"), num_for_edict(self), self.entnum, self.enttype, t)); Ent_Remove(); + clearentity(self); bIsNewEntity = 1; } } @@ -752,7 +765,9 @@ void CSQC_Ent_Update(float bIsNewEntity) case ENT_CLIENT_ACCURACY: Ent_ReadAccuracy(); break; case ENT_CLIENT_AUXILIARYXHAIR: Net_AuXair2(bIsNewEntity); break; case ENT_CLIENT_TURRET: ent_turret(); break; - case ENT_CLIENT_MODEL: CSQCModel_Read(bIsNewEntity); break; + case ENT_CLIENT_MODEL: CSQCModel_Read(bIsNewEntity); break; + case ENT_CLIENT_ITEM: ItemRead(bIsNewEntity); break; + case ENT_CLIENT_BUMBLE_RAYGUN: bumble_raygun_read(bIsNewEntity); 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)); @@ -778,6 +793,11 @@ void Ent_Remove() // CSQC_Ent_Remove : Called when the server requests a SSQC / CSQC entity to be removed. Essentially call remove(self) as well. void CSQC_Ent_Remove() { + if(wasfreed(self)) + { + print("WARNING: CSQC_Ent_Remove called for already removed entity. Packet loss?\n"); + return; + } if(self.enttype) Ent_Remove(); remove(self); @@ -787,7 +807,8 @@ void Gamemode_Init() { if not(isdemo()) { - localcmd("\n_cl_hook_gamestart ", MapInfo_Type_ToString(gametype), "\n"); + if(!(calledhooks & HOOK_START)) + localcmd("\n_cl_hook_gamestart ", MapInfo_Type_ToString(gametype), "\n"); calledhooks |= HOOK_START; } } @@ -880,6 +901,7 @@ void Ent_Init() hagar_maxrockets = ReadByte(); g_trueaim_minrange = ReadCoord(); + g_balance_porto_secondary = ReadByte(); if(!postinit) PostInit(); @@ -1160,6 +1182,14 @@ float CSQC_Parse_TempEntity() Net_VehicleSetup(); bHandled = true; break; + case TE_CSQC_SVNOTICE: + cl_notice_read(); + bHandled = true; + break; + case TE_CSQC_NOTIFICATION: + Read_Notification(); + bHandled = true; + break; default: // No special logic for this temporary entity; return 0 so the engine can handle it bHandled = false;