This seems to stop the server from crashing horribly with origional q3 mods. You still need to get the latest q3 patch if you want to use fte+q3.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@1490 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2005-10-16 04:02:10 +00:00
parent c407b987ee
commit a5d7e99940
1 changed files with 20 additions and 17 deletions

View File

@ -278,6 +278,7 @@ char *mapentspointer;
typedef struct {
link_t area;
qboolean linked;
int areanum;
int areanum2;
int headnode;
@ -286,24 +287,31 @@ typedef struct {
} q3serverEntity_t;
q3serverEntity_t *q3_sentities;
void Q3G_UnlinkEntity(q3sharedEntity_t *ent)
{
q3serverEntity_t *sent;
if(!ent->r.linked)
return; // not linked in anywhere
ent->r.linked = false;
sent = SENTITY_FOR_GENTITY(ent);
if (sent->area.next)
RemoveLink(&sent->area);
if(!sent->linked)
{
return; // not linked in anywhere
}
if (sent->area.prev == NULL || sent->area.next == NULL)
SV_Error("Null entity links in linked entity\n");
RemoveLink(&sent->area);
sent->area.prev = sent->area.next = NULL;
ent->r.linked = false;
sent->linked = false;
}
#define MAX_TOTAL_ENT_LEAFS 256
void Q3G_LinkEntity(q3sharedEntity_t *ent)
{
areanode_t *node;
@ -317,14 +325,14 @@ void Q3G_LinkEntity(q3sharedEntity_t *ent)
const float *origin;
const float *angles;
if(ent->r.linked)
sent = SENTITY_FOR_GENTITY(ent);
if(sent->linked)
Q3G_UnlinkEntity(ent); // unlink from old position
// encode the size into the entity_state for client prediction
if(ent->r.bmodel)
{
ent->s.solid = Q3SOLID_BMODEL;
}
else if(ent->r.contents & (Q3CONTENTS_BODY|Q3CONTENTS_SOLID))
{
// assume that x/y are equal and symetric
@ -344,10 +352,7 @@ void Q3G_LinkEntity(q3sharedEntity_t *ent)
else
ent->s.solid = 0;
//origin = (ent->r.svFlags & SVF_USE_CURRENT_ORIGIN) ? ent->r.currentOrigin : ent->s.origin;
//angles = (ent->r.svFlags & SVF_USE_CURRENT_ORIGIN) ? ent->r.currentAngles : ent->s.angles;
// FIXME - always use currentOrigin?
// always use currentOrigin
origin = ent->r.currentOrigin;
angles = ent->r.currentAngles;
@ -390,8 +395,6 @@ void Q3G_LinkEntity(q3sharedEntity_t *ent)
ent->r.absmax[1] += 1;
ent->r.absmax[2] += 1;
sent = SENTITY_FOR_GENTITY(ent);
// link to PVS leafs
sent->num_clusters = 0;
sent->areanum = -1;
@ -461,6 +464,7 @@ void Q3G_LinkEntity(q3sharedEntity_t *ent)
ent->r.linkcount++;
ent->r.linked = true;
sent->linked = true;
// find the first node that the ent's box crosses
node = sv_areanodes;
@ -477,10 +481,9 @@ void Q3G_LinkEntity(q3sharedEntity_t *ent)
break; // crosses the node
}
// link it in
InsertLinkBefore((link_t *)sent, &node->solid_edicts);
InsertLinkBefore((link_t *)&sent->area, &node->solid_edicts);
}
int SVQ3_EntitiesInBoxNode(areanode_t *node, vec3_t mins, vec3_t maxs, int *list, int maxcount)
{
link_t *l, *next;