X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=sv_main.c;h=832b3b245042eef4c78d6ff53dd8e3b5ad280231;hb=52bb3f7e43667d443f017bacdeaa5d99a2619e49;hp=ac6368249cca465938f4f9b4cb49f219079259cc;hpb=af0b7a1fa11c2ceedeb9f66ca950f6c0bff8ad8f;p=xonotic%2Fdarkplaces.git diff --git a/sv_main.c b/sv_main.c index ac636824..832b3b24 100644 --- a/sv_main.c +++ b/sv_main.c @@ -21,8 +21,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "quakedef.h" -static cvar_t sv_cullentities_pvs = {0, "sv_cullentities_pvs", "0"}; // fast but loose -static cvar_t sv_cullentities_trace = {0, "sv_cullentities_trace", "1"}; // tends to get false negatives, uses a timeout to keep entities visible a short time after becoming hidden +static cvar_t sv_cullentities_pvs = {0, "sv_cullentities_pvs", "1"}; // fast but loose +static cvar_t sv_cullentities_trace = {0, "sv_cullentities_trace", "0"}; // tends to get false negatives, uses a timeout to keep entities visible a short time after becoming hidden static cvar_t sv_cullentities_stats = {0, "sv_cullentities_stats", "0"}; static cvar_t sv_entpatch = {0, "sv_entpatch", "1"}; @@ -37,6 +37,7 @@ mempool_t *sv_edicts_mempool = NULL; extern void SV_Phys_Init (void); extern void SV_World_Init (void); +static void SV_SaveEntFile_f(void); /* =============== @@ -47,6 +48,7 @@ void SV_Init (void) { int i; + Cmd_AddCommand("sv_saveentfile", SV_SaveEntFile_f); Cvar_RegisterVariable (&sv_maxvelocity); Cvar_RegisterVariable (&sv_gravity); Cvar_RegisterVariable (&sv_friction); @@ -72,6 +74,18 @@ void SV_Init (void) sv_edicts_mempool = Mem_AllocPool("server edicts"); } +static void SV_SaveEntFile_f(void) +{ + char basename[MAX_QPATH]; + if (!sv.active || !sv.worldmodel) + { + Con_Printf("Not running a server\n"); + return; + } + FS_StripExtension(sv.worldmodel->name, basename, sizeof(basename)); + FS_WriteFile(va("%s.ent", basename), sv.worldmodel->brush.entities, strlen(sv.worldmodel->brush.entities)); +} + /* ============================================================================= @@ -254,7 +268,7 @@ void SV_SendServerinfo (client_t *client) client->entitydatabase4 = EntityFrame4_AllocDatabase(sv_clients_mempool); MSG_WriteByte (&client->message, svc_print); - sprintf (message, "\002\nServer: %s build %s (progs %i crc)", gamename, buildstring, pr_crc); + snprintf (message, sizeof (message), "\002\nServer: %s build %s (progs %i crc)", gamename, buildstring, pr_crc); MSG_WriteString (&client->message,message); MSG_WriteByte (&client->message, svc_serverinfo); @@ -505,14 +519,14 @@ void SV_WriteEntitiesToClient (client_t *client, edict_t *clent, sizebuf_t *msg) } // don't try to cull embedded brush models with this, they're sometimes huge (spanning several rooms) - if (sv_cullentities_trace.integer && (model == NULL || model->brush.TraceBox == NULL || model->name[0] != '*')) + if (sv_cullentities_trace.integer && (model == NULL || model->name[0] != '*')) { // LordHavoc: test random offsets, to maximize chance of detection testorigin[0] = lhrandom(entmins[0], entmaxs[0]); testorigin[1] = lhrandom(entmins[1], entmaxs[1]); testorigin[2] = lhrandom(entmins[2], entmaxs[2]); - sv.worldmodel->brush.TraceBox(sv.worldmodel, &trace, testeye, testeye, testorigin, testorigin, SUPERCONTENTS_SOLID); + sv.worldmodel->TraceBox(sv.worldmodel, 0, &trace, testeye, testeye, testorigin, testorigin, SUPERCONTENTS_SOLID); if (trace.fraction == 1) client->visibletime[e] = realtime + 1; else @@ -522,7 +536,7 @@ void SV_WriteEntitiesToClient (client_t *client, edict_t *clent, sizebuf_t *msg) testorigin[1] = bound(entmins[1], testeye[1], entmaxs[1]); testorigin[2] = bound(entmins[2], testeye[2], entmaxs[2]); - sv.worldmodel->brush.TraceBox(sv.worldmodel, &trace, testeye, testeye, testorigin, testorigin, SUPERCONTENTS_SOLID); + sv.worldmodel->TraceBox(sv.worldmodel, 0, &trace, testeye, testeye, testorigin, testorigin, SUPERCONTENTS_SOLID); if (trace.fraction == 1) client->visibletime[e] = realtime + 1; else if (realtime > client->visibletime[e]) @@ -929,7 +943,7 @@ void SV_MarkWriteEntityStateToClient(entity_state_t *s) testorigin[0] = (entmins[0] + entmaxs[0]) * 0.5f; testorigin[1] = (entmins[1] + entmaxs[1]) * 0.5f; testorigin[2] = (entmins[2] + entmaxs[2]) * 0.5f; - sv.worldmodel->brush.TraceBox(sv.worldmodel, &trace, sv_writeentitiestoclient_testeye, sv_writeentitiestoclient_testeye, testorigin, testorigin, SUPERCONTENTS_SOLID); + sv.worldmodel->TraceBox(sv.worldmodel, 0, &trace, sv_writeentitiestoclient_testeye, sv_writeentitiestoclient_testeye, testorigin, testorigin, SUPERCONTENTS_SOLID); if (trace.fraction == 1 || BoxesOverlap(trace.endpos, trace.endpos, entmins, entmaxs)) sv_writeentitiestoclient_client->visibletime[s->number] = realtime + 1; else @@ -938,7 +952,7 @@ void SV_MarkWriteEntityStateToClient(entity_state_t *s) testorigin[0] = lhrandom(entmins[0], entmaxs[0]); testorigin[1] = lhrandom(entmins[1], entmaxs[1]); testorigin[2] = lhrandom(entmins[2], entmaxs[2]); - sv.worldmodel->brush.TraceBox(sv.worldmodel, &trace, sv_writeentitiestoclient_testeye, sv_writeentitiestoclient_testeye, testorigin, testorigin, SUPERCONTENTS_SOLID); + sv.worldmodel->TraceBox(sv.worldmodel, 0, &trace, sv_writeentitiestoclient_testeye, sv_writeentitiestoclient_testeye, testorigin, testorigin, SUPERCONTENTS_SOLID); if (trace.fraction == 1 || BoxesOverlap(trace.endpos, trace.endpos, entmins, entmaxs)) sv_writeentitiestoclient_client->visibletime[s->number] = realtime + 1; else @@ -949,7 +963,7 @@ void SV_MarkWriteEntityStateToClient(entity_state_t *s) testorigin[0] = lhrandom(lightmins[0], lightmaxs[0]); testorigin[1] = lhrandom(lightmins[1], lightmaxs[1]); testorigin[2] = lhrandom(lightmins[2], lightmaxs[2]); - sv.worldmodel->brush.TraceBox(sv.worldmodel, &trace, sv_writeentitiestoclient_testeye, sv_writeentitiestoclient_testeye, testorigin, testorigin, SUPERCONTENTS_SOLID); + sv.worldmodel->TraceBox(sv.worldmodel, 0, &trace, sv_writeentitiestoclient_testeye, sv_writeentitiestoclient_testeye, testorigin, testorigin, SUPERCONTENTS_SOLID); if (trace.fraction == 1 || BoxesOverlap(trace.endpos, trace.endpos, entmins, entmaxs)) sv_writeentitiestoclient_client->visibletime[s->number] = realtime + 1; } @@ -1775,7 +1789,7 @@ void SV_SpawnServer (const char *server) memset (&sv, 0, sizeof(sv)); - strcpy (sv.name, server); + strlcpy (sv.name, server, sizeof (sv.name)); // load progs to get entity field count PR_LoadProgs (); @@ -1824,8 +1838,8 @@ void SV_SpawnServer (const char *server) Mod_ClearUsed(); - strcpy (sv.name, server); - sprintf (sv.modelname,"maps/%s.bsp", server); + strlcpy (sv.name, server, sizeof (sv.name)); + snprintf (sv.modelname, sizeof (sv.modelname), "maps/%s.bsp", server); sv.worldmodel = Mod_ForName(sv.modelname, false, true, true); if (!sv.worldmodel) {