X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2FMain.qc;h=e433202562019c496e22e33eb22a318ff6a0f2df;hb=786db02b0c9aa618c581b7c3fe7392ad114797d8;hp=ecc2000d7ccae32447fa4e78e75460a26e8f1f5a;hpb=d598635bbc779b2d8e4f247f2b3c30e18d1b4d9f;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/Main.qc b/qcsrc/client/Main.qc index ecc2000d7..e43320256 100644 --- a/qcsrc/client/Main.qc +++ b/qcsrc/client/Main.qc @@ -5,7 +5,7 @@ entity clearentity_ent; void clearentity(entity e) { - if not(clearentity_ent) + if (!clearentity_ent) { clearentity_ent = spawn(); clearentity_ent.classname = "clearentity"; @@ -32,55 +32,6 @@ void menu_sub_null() float __engine_check; #endif -void precache_playermodel(string m) -{ - string f; - - if(substring(m, -9,5) == "_lod1") - return; - if(substring(m, -9,5) == "_lod2") - return; - precache_model(m); - f = strcat(substring(m, 0, -5), "_lod1", substring(m, -4, -1)); - if(fexists(f)) - precache_model(f); - f = strcat(substring(m, 0, -5), "_lod2", substring(m, -4, -1)); - if(fexists(f)) - precache_model(f); - - /* - float globhandle, i, n; - globhandle = search_begin(strcat(m, "_*.sounds"), TRUE, FALSE); - if (globhandle < 0) - return; - n = search_getsize(globhandle); - for (i = 0; i < n; ++i) - { - //print(search_getfilename(globhandle, i), "\n"); - f = search_getfilename(globhandle, i); - PrecachePlayerSounds(f); - } - search_end(globhandle); - */ -} -void precache_all_playermodels(string pattern) -{ - float globhandle, i, n; - string f; - - globhandle = search_begin(pattern, TRUE, FALSE); - if (globhandle < 0) - return; - n = search_getsize(globhandle); - for (i = 0; i < n; ++i) - { - //print(search_getfilename(globhandle, i), "\n"); - f = search_getfilename(globhandle, i); - precache_playermodel(f); - } - search_end(globhandle); -} - string forcefog; void WaypointSprite_Load(); void ConsoleCommand_macro_init(); @@ -156,21 +107,14 @@ void CSQC_Init(void) CALL_ACCUMULATED_FUNCTION(RegisterGametypes); CALL_ACCUMULATED_FUNCTION(RegisterNotifications); CALL_ACCUMULATED_FUNCTION(RegisterDeathtypes); - + CALL_ACCUMULATED_FUNCTION(RegisterHUD_Panels); + WaypointSprite_Load(); // precaches precache_model("null"); precache_sound("misc/hit.wav"); precache_sound("misc/typehit.wav"); - if (autocvar_cl_precacheplayermodels) - { - precache_all_playermodels("models/player/*.zym"); - precache_all_playermodels("models/player/*.dpm"); - precache_all_playermodels("models/player/*.md3"); - precache_all_playermodels("models/player/*.psk"); - precache_all_playermodels("models/player/*.iqm"); - } Projectile_Precache(); Hook_Precache(); @@ -210,7 +154,6 @@ void CSQC_Init(void) hud_skin_path = strzone(strcat("gfx/hud/", autocvar_hud_skin)); hud_configure_prev = -1; - tab_panel = -1; draw_currentSkin = strzone(strcat("gfx/menu/", cvar_string("menu_skin"))); } @@ -244,11 +187,11 @@ void Shutdown(void) if(autocvar_chase_active < 0) cvar_set("chase_active", "0"); - if not(isdemo()) + if (!isdemo()) { - if not(calledhooks & HOOK_START) + if (!(calledhooks & HOOK_START)) localcmd("\n_cl_hook_gamestart nop\n"); - if not(calledhooks & HOOK_END) + if (!(calledhooks & HOOK_END)) localcmd("\ncl_hook_gameend\n"); } } @@ -304,7 +247,7 @@ float SetTeam(entity o, float Team) } else { - if not(o.has_team) + if (!o.has_team) { o.team = Team; tm = GetTeam(Team, true); @@ -345,10 +288,10 @@ void Playerchecker_Think() } else { - if not(e.sort_prev) + if (!e.sort_prev) { // player connected - if not(e) + if (!e) playerslots[i] = e = spawn(); e.sv_entnum = i; e.ping = 0; @@ -480,8 +423,8 @@ void Ent_ReadPlayerScore() #ifdef DP_CSQC_ENTITY_REMOVE_IS_B0RKED if(!isNew && n != self.sv_entnum) { - //print(_("A CSQC entity changed its owner!\n")); - print(sprintf(_("A CSQC entity changed its owner! (edict: %d, classname: %s)\n"), num_for_edict(self), self.classname)); + //print("A CSQC entity changed its owner!\n"); + print(sprintf("A CSQC entity changed its owner! (edict: %d, classname: %s)\n", num_for_edict(self), self.classname)); isNew = true; Ent_Remove(); self.enttype = ENT_CLIENT_SCORES; @@ -490,13 +433,13 @@ void Ent_ReadPlayerScore() self.sv_entnum = n; - if not(playerslots[self.sv_entnum]) + if (!(playerslots[self.sv_entnum])) playerslots[self.sv_entnum] = spawn(); o = self.owner = playerslots[self.sv_entnum]; o.sv_entnum = self.sv_entnum; o.gotscores = 1; - //if not(o.sort_prev) + //if (!o.sort_prev) // RegisterPlayer(o); //playerchecker will do this for us later, if it has not already done so @@ -645,7 +588,7 @@ void Ent_Nagger() { f = ReadByte(); for(j = i-1, b = 1; b < 256; b *= 2, ++j) - if not(f & b) + if (!(f & b)) if(playerslots[j]) playerslots[j].ready = 0; } @@ -696,6 +639,108 @@ void Ent_ReadAccuracy(void) } } +void Spawn_Draw(void) +{ + pointparticles(self.cnt, self.origin + '0 0 28', '0 0 2', bound(0, frametime, 0.1)); +} + +void Ent_ReadSpawnPoint(float is_new) // entity for spawnpoint +{ + float teamnum = (ReadByte() - 1); + vector spn_origin; + spn_origin_x = ReadShort(); + spn_origin_y = ReadShort(); + spn_origin_z = ReadShort(); + + if(is_new) + { + self.origin = spn_origin; + setsize(self, PL_MIN, PL_MAX); + droptofloor(); + + /*if(autocvar_cl_spawn_point_model) // needs a model first + { + self.mdl = "models/spawnpoint.md3"; + self.colormod = Team_ColorRGB(teamnum); + precache_model(self.mdl); + setmodel(self, self.mdl); + self.drawmask = MASK_NORMAL; + //self.movetype = MOVETYPE_NOCLIP; + //self.draw = Spawn_Draw; + }*/ + if(autocvar_cl_spawn_point_particles) + { + if((serverflags & SERVERFLAG_TEAMPLAY)) + { + switch(teamnum) + { + case NUM_TEAM_1: self.cnt = particleeffectnum("spawn_point_red"); break; + case NUM_TEAM_2: self.cnt = particleeffectnum("spawn_point_blue"); break; + case NUM_TEAM_3: self.cnt = particleeffectnum("spawn_point_yellow"); break; + case NUM_TEAM_4: self.cnt = particleeffectnum("spawn_point_pink"); break; + default: self.cnt = particleeffectnum("spawn_point_neutral"); break; + } + } + else { self.cnt = particleeffectnum("spawn_point_neutral"); } + + self.draw = Spawn_Draw; + } + } + + //print(sprintf("Ent_ReadSpawnPoint(is_new = %d); origin = %s, team = %d, effect = %d\n", is_new, vtos(self.origin), teamnum, self.cnt)); +} + +void Ent_ReadSpawnEvent(float is_new) +{ + // If entnum is 0, ONLY do the local spawn actions + // this way the server can disable the sending of + // spawn origin or such to clients if wanted. + float entnum = ReadByte(); + + if(entnum) + { + self.origin_x = ReadShort(); + self.origin_y = ReadShort(); + self.origin_z = ReadShort(); + + if(is_new) + { + float teamnum = GetPlayerColor(entnum - 1); + + if(autocvar_cl_spawn_event_particles) + { + switch(teamnum) + { + case NUM_TEAM_1: pointparticles(particleeffectnum("spawn_event_red"), self.origin, '0 0 0', 1); break; + case NUM_TEAM_2: pointparticles(particleeffectnum("spawn_event_blue"), self.origin, '0 0 0', 1); break; + case NUM_TEAM_3: pointparticles(particleeffectnum("spawn_event_yellow"), self.origin, '0 0 0', 1); break; + case NUM_TEAM_4: pointparticles(particleeffectnum("spawn_event_pink"), self.origin, '0 0 0', 1); break; + default: pointparticles(particleeffectnum("spawn_event_neutral"), self.origin, '0 0 0', 1); break; + } + } + if(autocvar_cl_spawn_event_sound) + { + sound(self, CH_TRIGGER, "misc/spawn.wav", VOL_BASE, ATTEN_NORM); + } + } + } + + // local spawn actions + if(is_new && (!entnum || (entnum == player_localentnum))) + { + zoomin_effect = 1; + current_viewzoom = (1 / bound(1, autocvar_cl_spawnzoom_factor, 16)); + + if(autocvar_cl_unpress_zoom_on_spawn) + { + localcmd("-zoom\n"); + button_zoom = FALSE; + } + } + + //print(sprintf("Ent_ReadSpawnEvent(is_new = %d); origin = %s, entnum = %d, localentnum = %d\n", is_new, vtos(self.origin), entnum, player_localentnum)); +} + // 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(); @@ -728,8 +773,8 @@ void CSQC_Ent_Update(float bIsNewEntity) { if(t != self.enttype || 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)); + //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; @@ -739,7 +784,7 @@ void CSQC_Ent_Update(float bIsNewEntity) { if(!bIsNewEntity) { - print(sprintf(_("A CSQC entity appeared out of nowhere! (edict: %d, server: %d, type: %d)\n"), num_for_edict(self), self.entnum, t)); + print(sprintf("A CSQC entity appeared out of nowhere! (edict: %d, server: %d, type: %d)\n", num_for_edict(self), self.entnum, t)); bIsNewEntity = 1; } } @@ -781,7 +826,10 @@ void CSQC_Ent_Update(float bIsNewEntity) 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; + case ENT_CLIENT_SPAWNPOINT: Ent_ReadSpawnPoint(bIsNewEntity); break; + case ENT_CLIENT_SPAWNEVENT: Ent_ReadSpawnEvent(bIsNewEntity); break; case ENT_CLIENT_NOTIFICATION: Read_Notification(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)); @@ -834,7 +882,7 @@ void CSQC_Ent_Remove() void Gamemode_Init() { - if not(isdemo()) + if (!isdemo()) { if(!(calledhooks & HOOK_START)) localcmd("\n_cl_hook_gamestart ", MapInfo_Type_ToString(gametype), "\n"); @@ -922,8 +970,6 @@ void Ent_Init() armorblockpercent = ReadByte() / 255.0; - g_weaponswitchdelay = ReadByte() / 255.0; - g_balance_grenadelauncher_bouncefactor = ReadCoord(); g_balance_grenadelauncher_bouncestop = ReadCoord(); g_balance_electro_secondary_bouncefactor = ReadCoord(); @@ -1101,18 +1147,6 @@ void Net_ReadRace() } } -void Net_ReadSpawn() -{ - zoomin_effect = 1; - current_viewzoom = (1 / bound(1, autocvar_cl_spawnzoom_factor, 16)); - - if(autocvar_cl_unpress_zoom_on_spawn) - { - localcmd("-zoom\n"); - button_zoom = FALSE; - } -} - void Net_TeamNagger() { teamnagger = 1; @@ -1125,7 +1159,7 @@ void Net_ReadPingPLReport() pi = ReadShort(); pl = ReadByte(); ml = ReadByte(); - if not(playerslots[e]) + if (!(playerslots[e])) return; playerslots[e].ping = pi; playerslots[e].ping_packetloss = pl / 255.0; @@ -1182,10 +1216,6 @@ float CSQC_Parse_TempEntity() Net_ReadRace(); bHandled = true; break; - case TE_CSQC_SPAWN: - Net_ReadSpawn(); - bHandled = true; - break; case TE_CSQC_ZCURVEPARTICLES: Net_ReadZCurveParticles(); bHandled = true;