MSG_WriteString (&client->message,message);
MSG_WriteByte (&client->message, svc_serverinfo);
- MSG_WriteLong (&client->message, DPPROTOCOL_VERSION2);
+ MSG_WriteLong (&client->message, DPPROTOCOL_VERSION3);
MSG_WriteByte (&client->message, svs.maxclients);
if (!coop.integer && deathmatch.integer)
client->spawn_parms[i] = (&pr_global_struct->parm1)[i];
}
+#if NOROUTINGFIX
+ SV_SendServerinfo (client);
+#else
// send serverinfo on first nop
client->waitingforconnect = true;
client->sendsignon = true;
client->spawned = false; // need prespawn, spawn, etc
+#endif
}
client->visibletime[e] = realtime + 1;
else
{
- if (realtime > client->visibletime[e])
+ //test nearest point on bbox
+ testorigin[0] = bound(entmins[0], org[0], entmaxs[0]);
+ testorigin[1] = bound(entmins[1], org[1], entmaxs[1]);
+ testorigin[2] = bound(entmins[2], org[2], entmaxs[2]);
+
+ memset (&trace, 0, sizeof(trace_t));
+ trace.fraction = 1;
+ trace.allsolid = true;
+ VectorCopy(testorigin, trace.endpos);
+
+ VectorCopy(org, RecursiveHullCheckInfo.start);
+ VectorSubtract(testorigin, testeye, RecursiveHullCheckInfo.dist);
+ RecursiveHullCheckInfo.hull = sv.worldmodel->hulls;
+ RecursiveHullCheckInfo.trace = &trace;
+ SV_RecursiveHullCheck (sv.worldmodel->hulls->firstclipnode, 0, 1, testeye, testorigin);
+
+ if (trace.fraction == 1)
+ client->visibletime[e] = realtime + 1;
+ else if (realtime > client->visibletime[e])
{
culled_trace++;
continue;
VectorCopy(ent->v.origin, origin);
}
- // don't send an entity if it's coordinates would wrap around
- if (origin[0] < -32768 || origin[1] < -32768 || origin[2] < -32768 || origin[0] > 32767 || origin[1] > 32767 || origin[2] > 32767)
- continue;
-
// ent has survived every check so far, check if it is visible
// always send embedded brush models, they don't generate much traffic
if (ent != clent && ((flags & RENDER_VIEWMODEL) == 0) && (model == NULL || model->type != mod_brush || model->name[0] != '*'))
if (ent->v.movetype == MOVETYPE_STEP)
flags |= RENDER_STEP;
+ // don't send an entity if it's coordinates would wrap around
+ if ((effects & EF_LOWPRECISION) && origin[0] >= -32768 && origin[1] >= -32768 && origin[2] >= -32768 && origin[0] <= 32767 && origin[1] <= 32767 && origin[2] <= 32767)
+ flags |= RENDER_LOWPRECISION;
s = EntityFrame_NewEntity(&entityframe, e);
// if we run out of space, abort
MSG_WriteByte (&msg, svc_time);
MSG_WriteFloat (&msg, sv.time);
- if (!client->waitingforconnect)
+ if (client->spawned)
{
// add the client specific data to the datagram
SV_WriteClientdataToMessage (client->edict, &msg);
if (!host_client->active)
continue;
+#ifndef NOROUTINGFIX
if (host_client->sendserverinfo)
{
host_client->sendserverinfo = false;
SV_SendServerinfo (host_client);
}
+#endif
if (host_client->spawned)
{