extern cvar_t sv_cullentities_trace_eyejitter;
extern cvar_t sv_cullentities_trace_expand;
extern cvar_t sv_cullentities_trace_delay_players;
+extern cvar_t sv_cullentities_trace_spectators;
/*
=============================================================================
}
else
MSG_WriteShort (dest, (ent<<3) | channel);
- if ((field_mask & SND_LARGESOUND) || sv.protocol == PROTOCOL_NEHAHRABJP2)
+ if ((field_mask & SND_LARGESOUND) || sv.protocol == PROTOCOL_NEHAHRABJP2 || sv.protocol == PROTOCOL_NEHAHRABJP3)
MSG_WriteShort (dest, sound_num);
else
MSG_WriteByte (dest, sound_num);
memset(sv.sendentitiesindex, 0, prog->num_edicts * sizeof(*sv.sendentitiesindex));
for (e = 1, ent = PRVM_NEXT_EDICT(prog->edicts);e < prog->num_edicts;e++, ent = PRVM_NEXT_EDICT(ent))
{
- if (!ent->priv.server->free && SV_PrepareEntityForSending(ent, sv.sendentities + sv.numsendentities, e))
+ if (!ent->free && SV_PrepareEntityForSending(ent, sv.sendentities + sv.numsendentities, e))
{
sv.sendentitiesindex[e] = sv.sendentities + sv.numsendentities;
sv.numsendentities++;
return false;
}
-void SV_MarkWriteEntityStateToClient(entity_state_t *s)
+void SV_MarkWriteEntityStateToClient(entity_state_t *s, client_t *client)
{
prvm_prog_t *prog = SVVM_prog;
int isbmodel;
// tag attached entities simply check their parent
if (!sv.sendentitiesindex[s->tagentity])
return;
- SV_MarkWriteEntityStateToClient(sv.sendentitiesindex[s->tagentity]);
+ SV_MarkWriteEntityStateToClient(sv.sendentitiesindex[s->tagentity], client);
if (sv.sententities[s->tagentity] != sv.sententitiesmark)
return;
}
}
// or not seen by random tracelines
- if (sv_cullentities_trace.integer && !isbmodel && sv.worldmodel && sv.worldmodel->brush.TraceLineOfSight && !r_trippy.integer)
+ if (sv_cullentities_trace.integer && !isbmodel && sv.worldmodel && sv.worldmodel->brush.TraceLineOfSight && !r_trippy.integer && (client->frags != -666 || sv_cullentities_trace_spectators.integer))
{
int samples =
s->number <= svs.maxclients
// check line of sight to portal entities and add them to PVS
for (e = 1, ed = PRVM_NEXT_EDICT(prog->edicts);e < prog->num_edicts;e++, ed = PRVM_NEXT_EDICT(ed))
{
- if (!ed->priv.server->free)
+ if (!ed->free)
{
if(PRVM_serveredictfunction(ed, camera_transform))
{
if (clientcamera > 0)
{
int oldclientcamera = host_client->clientcamera;
- if (clientcamera >= prog->max_edicts || PRVM_EDICT_NUM(clientcamera)->priv.required->free)
+ if (clientcamera >= prog->max_edicts || PRVM_EDICT_NUM(clientcamera)->free)
clientcamera = PRVM_NUM_FOR_EDICT(host_client->edict);
host_client->clientcamera = clientcamera;
if (host_client->netconnection->message.overflowed)
{
- SV_DropClient (true); // if the message couldn't send, kick off
+ SV_DropClient (true, "Buffer overflow in net message"); // if the message couldn't send, kick off
continue;
}