Try to fix monsters getting stuck by waiting forever for their enemy.

44472722e added some sanity checks to the AI code. The checks in
ai_run() are likely wrong because the enemy entity might be already
NULL if we arrive their. By aborting early the code is unable to
determine a new enemy or return the monster to idle state, so the
monster will wait forever for an enemy that'll never come.

This happens only in monster vs. monster fights. Never in monster vs.
player, that game ends if the player dies.

In theory this change should be harmless, because if the enemy entity is
gone it won't generate sound targets now be visible. If the game crashes
by self->enemy being NULL we've got a problem elsewere.

This was reported by @BjossiAlfreds in #483. He also suggested the fix.
This commit is contained in:
Yamagi Burmeister 2019-08-31 10:56:50 +02:00
parent 5c17eb0132
commit 5136ceb123

View file

@ -1131,7 +1131,7 @@ ai_run(edict_t *self, float dist)
float left, center, right; float left, center, right;
vec3_t left_target, right_target; vec3_t left_target, right_target;
if (!self || !self->enemy || !self->enemy->inuse) if (!self)
{ {
return; return;
} }
@ -1149,8 +1149,7 @@ ai_run(edict_t *self, float dist)
if (VectorLength(v) < 64) if (VectorLength(v) < 64)
{ {
self->monsterinfo.aiflags |= self->monsterinfo.aiflags |= (AI_STAND_GROUND | AI_TEMP_STAND_GROUND);
(AI_STAND_GROUND | AI_TEMP_STAND_GROUND);
self->monsterinfo.stand(self); self->monsterinfo.stand(self);
return; return;
} }