Shark bbox fix and added inuse check after entity thinking

This commit is contained in:
BjossiAlfreds 2021-04-18 01:19:32 +00:00
parent 09d5857687
commit 8f6c53e76f
2 changed files with 17 additions and 2 deletions

View file

@ -828,6 +828,10 @@ void SV_Physics_Toss (edict_t *ent)
// regular thinking // regular thinking
SV_RunThink (ent); SV_RunThink (ent);
/* entities are very often freed during thinking */
if (!ent->inuse)
return;
// if not a team captain, so movement will be handled elsewhere // if not a team captain, so movement will be handled elsewhere
if ( ent->flags & FL_TEAMSLAVE) if ( ent->flags & FL_TEAMSLAVE)
return; return;

View file

@ -276,13 +276,24 @@ void flipper_pain (edict_t *self, edict_t *other, float kick, int damage)
void flipper_dead (edict_t *self) void flipper_dead (edict_t *self)
{ {
vec3_t p;
trace_t tr;
if (!self) if (!self)
{ {
return; return;
} }
VectorSet (self->mins, -16, -16, -24); /* original dead bbox was wrong - and make sure the bbox adjustment stays in solidity */
VectorSet (self->maxs, 16, 16, -8);
p[0] = self->s.origin[0];
p[1] = self->s.origin[1];
p[2] = self->s.origin[2] - 8;
tr = gi.trace(self->s.origin, self->mins, self->maxs, p, self, self->clipmask);
self->mins[2] = tr.endpos[2] - self->s.origin[2];
self->movetype = MOVETYPE_TOSS; self->movetype = MOVETYPE_TOSS;
self->svflags |= SVF_DEADMONSTER; self->svflags |= SVF_DEADMONSTER;
self->nextthink = 0; self->nextthink = 0;