]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - sv_main.c
changed DNS name cache expiration time to 12 hours
[xonotic/darkplaces.git] / sv_main.c
index 73ddd1ef3b8ed7e14b8eb2a48be9f6723fdd9f57..ac4d6df35da4fcacac2aacaa60e23ad7d7320ba0 100644 (file)
--- a/sv_main.c
+++ b/sv_main.c
@@ -34,8 +34,6 @@ static cvar_t sv_cullentities_trace = {0, "sv_cullentities_trace", "0"}; // tend
 static cvar_t sv_cullentities_stats = {0, "sv_cullentities_stats", "0"};
 static cvar_t sv_entpatch = {0, "sv_entpatch", "1"};
 
-extern cvar_t sys_ticrate;
-
 cvar_t sv_gameplayfix_grenadebouncedownslopes = {0, "sv_gameplayfix_grenadebouncedownslopes", "1"};
 cvar_t sv_gameplayfix_noairborncorpse = {0, "sv_gameplayfix_noairborncorpse", "1"};
 cvar_t sv_gameplayfix_stepdown = {0, "sv_gameplayfix_stepdown", "1"};
@@ -211,19 +209,19 @@ void SV_StartSound (prvm_edict_t *entity, int channel, const char *sample, int v
 
        if (volume < 0 || volume > 255)
        {
-               Con_Printf ("SV_StartSound: volume = %i", volume);
+               Con_Printf ("SV_StartSound: volume = %i\n", volume);
                return;
        }
 
        if (attenuation < 0 || attenuation > 4)
        {
-               Con_Printf ("SV_StartSound: attenuation = %f", attenuation);
+               Con_Printf ("SV_StartSound: attenuation = %f\n", attenuation);
                return;
        }
 
        if (channel < 0 || channel > 7)
        {
-               Con_Printf ("SV_StartSound: channel = %i", channel);
+               Con_Printf ("SV_StartSound: channel = %i\n", channel);
                return;
        }
 
@@ -465,7 +463,7 @@ crosses a waterline.
 */
 
 int sv_writeentitiestoclient_pvsbytes;
-qbyte sv_writeentitiestoclient_pvs[MAX_MAP_LEAFS/8];
+unsigned char sv_writeentitiestoclient_pvs[MAX_MAP_LEAFS/8];
 
 static int numsendentities;
 static entity_state_t sendentities[MAX_EDICTS];
@@ -509,7 +507,7 @@ void SV_PrepareEntitiesForSending(void)
 
                flags = 0;
                i = (int)(PRVM_GETEDICTFIELDVALUE(ent, eval_glow_size)->_float * 0.25f);
-               glowsize = (qbyte)bound(0, i, 255);
+               glowsize = (unsigned char)bound(0, i, 255);
                if (PRVM_GETEDICTFIELDVALUE(ent, eval_glow_trail)->_float)
                        flags |= RENDER_GLOWTRAIL;
 
@@ -521,8 +519,8 @@ void SV_PrepareEntitiesForSending(void)
                light[2] = (unsigned short)bound(0, f, 65535);
                f = PRVM_GETEDICTFIELDVALUE(ent, eval_light_lev)->_float;
                light[3] = (unsigned short)bound(0, f, 65535);
-               lightstyle = (qbyte)PRVM_GETEDICTFIELDVALUE(ent, eval_style)->_float;
-               lightpflags = (qbyte)PRVM_GETEDICTFIELDVALUE(ent, eval_pflags)->_float;
+               lightstyle = (unsigned char)PRVM_GETEDICTFIELDVALUE(ent, eval_style)->_float;
+               lightpflags = (unsigned char)PRVM_GETEDICTFIELDVALUE(ent, eval_pflags)->_float;
 
                if (gamemode == GAME_TENEBRAE)
                {
@@ -589,7 +587,7 @@ void SV_PrepareEntitiesForSending(void)
                cs.nodrawtoclient = PRVM_GETEDICTFIELDVALUE(ent, eval_nodrawtoclient)->edict;
                cs.drawonlytoclient = PRVM_GETEDICTFIELDVALUE(ent, eval_drawonlytoclient)->edict;
                cs.tagentity = PRVM_GETEDICTFIELDVALUE(ent, eval_tag_entity)->edict;
-               cs.tagindex = (qbyte)PRVM_GETEDICTFIELDVALUE(ent, eval_tag_index)->_float;
+               cs.tagindex = (unsigned char)PRVM_GETEDICTFIELDVALUE(ent, eval_tag_index)->_float;
                cs.glowsize = glowsize;
 
                // don't need to init cs.colormod because the defaultstate did that for us
@@ -609,14 +607,14 @@ void SV_PrepareEntitiesForSending(void)
                if (f)
                {
                        i = (int)f;
-                       cs.alpha = (qbyte)bound(0, i, 255);
+                       cs.alpha = (unsigned char)bound(0, i, 255);
                }
                // halflife
                f = (PRVM_GETEDICTFIELDVALUE(ent, eval_renderamt)->_float);
                if (f)
                {
                        i = (int)f;
-                       cs.alpha = (qbyte)bound(0, i, 255);
+                       cs.alpha = (unsigned char)bound(0, i, 255);
                }
 
                cs.scale = 16;
@@ -624,7 +622,7 @@ void SV_PrepareEntitiesForSending(void)
                if (f)
                {
                        i = (int)f;
-                       cs.scale = (qbyte)bound(0, i, 255);
+                       cs.scale = (unsigned char)bound(0, i, 255);
                }
 
                cs.glowcolor = 254;
@@ -929,8 +927,8 @@ void SV_WriteClientdataToMessage (client_t *client, prvm_edict_t *ent, sizebuf_t
        int             items;
        prvm_eval_t     *val;
        vec3_t  punchvector;
-       qbyte   viewzoom;
-       int             weaponmodelindex;
+       unsigned char   viewzoom;
+       const char *s;
 
 //
 // send a damage message
@@ -974,7 +972,14 @@ void SV_WriteClientdataToMessage (client_t *client, prvm_edict_t *ent, sizebuf_t
        if ((val = PRVM_GETEDICTFIELDVALUE(ent, eval_punchvector)))
                VectorCopy(val->vector, punchvector);
 
-       weaponmodelindex = SV_ModelIndex(PRVM_GetString(ent->fields.server->weaponmodel), 1);
+       // FIXME: cache weapon model name and index in client struct to save time
+       // (this search can be almost 1% of cpu time!)
+       s = PRVM_GetString(ent->fields.server->weaponmodel);
+       if (strcmp(s, client->weaponmodel))
+       {
+               strlcpy(client->weaponmodel, s, sizeof(client->weaponmodel));
+               client->weaponmodelindex = SV_ModelIndex(s, 1);
+       }
 
        viewzoom = 255;
        if ((val = PRVM_GETEDICTFIELDVALUE(ent, eval_viewzoom)))
@@ -1007,7 +1012,7 @@ void SV_WriteClientdataToMessage (client_t *client, prvm_edict_t *ent, sizebuf_t
        stats[STAT_ITEMS] = items;
        stats[STAT_WEAPONFRAME] = ent->fields.server->weaponframe;
        stats[STAT_ARMOR] = ent->fields.server->armorvalue;
-       stats[STAT_WEAPON] = weaponmodelindex;
+       stats[STAT_WEAPON] = client->weaponmodelindex;
        stats[STAT_HEALTH] = ent->fields.server->health;
        stats[STAT_AMMO] = ent->fields.server->currentammo;
        stats[STAT_SHELLS] = ent->fields.server->ammo_shells;
@@ -1139,7 +1144,7 @@ void SV_WriteClientdataToMessage (client_t *client, prvm_edict_t *ent, sizebuf_t
 SV_SendClientDatagram
 =======================
 */
-static qbyte sv_sendclientdatagram_buf[NET_MAXMESSAGE]; // FIXME?
+static unsigned char sv_sendclientdatagram_buf[NET_MAXMESSAGE]; // FIXME?
 qboolean SV_SendClientDatagram (client_t *client)
 {
        int rate, maxrate, maxsize, maxsize2;
@@ -1305,7 +1310,7 @@ message buffer
 void SV_SendNop (client_t *client)
 {
        sizebuf_t       msg;
-       qbyte           buf[4];
+       unsigned char           buf[4];
 
        msg.data = buf;
        msg.maxsize = sizeof(buf);
@@ -1583,7 +1588,11 @@ Tell all the clients that the server is changing levels
 */
 void SV_SendReconnect (void)
 {
-       qbyte data[128];
+#if 1
+       MSG_WriteByte(&sv.reliable_datagram, svc_stufftext);
+       MSG_WriteString(&sv.reliable_datagram, "reconnect\n");
+#else
+       unsigned char data[128];
        sizebuf_t msg;
 
        msg.data = data;
@@ -1596,6 +1605,7 @@ void SV_SendReconnect (void)
 
        if (cls.state != ca_dedicated)
                Cmd_ExecuteString ("reconnect\n", src_command);
+#endif
 }
 
 
@@ -1657,8 +1667,8 @@ void SV_IncreaseEdicts(void)
 
        for (i = 0, ent = prog->edicts;i < prog->max_edicts;i++, ent++)
        {
-               ent->priv.vp = (qbyte*) prog->edictprivate + i * prog->edictprivate_size;
-               ent->fields.server = (void *)((qbyte *)prog->edictsfields + i * prog->edict_size);
+               ent->priv.vp = (unsigned char*) prog->edictprivate + i * prog->edictprivate_size;
+               ent->fields.server = (void *)((unsigned char *)prog->edictsfields + i * prog->edict_size);
                // link every entity except world
                if (!ent->priv.server->free)
                        SV_LinkEdict(ent, false);
@@ -1717,8 +1727,7 @@ void SV_SpawnServer (const char *server)
        }
        else
        {
-               // make sure cvars have been checked before opening the ports
-               NetConn_ServerFrame();
+               // open server port
                NetConn_OpenServerPorts(true);
        }
 
@@ -1775,8 +1784,8 @@ void SV_SpawnServer (const char *server)
        /*for (i = 0;i < prog->max_edicts;i++)
        {
                ent = prog->edicts + i;
-               ent->priv.vp = (qbyte*) prog->edictprivate + i * prog->edictprivate_size;
-               ent->fields.server = (void *)((qbyte *)prog->edictsfields + i * prog->edict_size);
+               ent->priv.vp = (unsigned char*) prog->edictprivate + i * prog->edictprivate_size;
+               ent->fields.server = (void *)((unsigned char *)prog->edictsfields + i * prog->edict_size);
        }*/
 
        // fix up client->edict pointers for returning clients right away...
@@ -1852,7 +1861,7 @@ void SV_SpawnServer (const char *server)
        // load replacement entity file if found
        entities = NULL;
        if (sv_entpatch.integer)
-               entities = (char *)FS_LoadFile(va("maps/%s.ent", sv.name), tempmempool, true);
+               entities = (char *)FS_LoadFile(va("maps/%s.ent", sv.name), tempmempool, true, NULL);
        if (entities)
        {
                Con_Printf("Loaded maps/%s.ent\n", sv.name);