diff --git a/src/g_ai.c b/src/g_ai.c index 00b7063..cf3ef42 100644 --- a/src/g_ai.c +++ b/src/g_ai.c @@ -473,7 +473,11 @@ HuntTarget(edict_t *self) self->monsterinfo.run(self); } - VectorSubtract(self->enemy->s.origin, self->s.origin, vec); + if(visible(self, self->enemy)) + { + VectorSubtract(self->enemy->s.origin, self->s.origin, vec); + } + self->ideal_yaw = vectoyaw(vec); /* wait a while before first attack */ @@ -486,7 +490,7 @@ HuntTarget(edict_t *self) void FoundTarget(edict_t *self) { - if (!self) + if (!self|| !self->enemy || !self->enemy->inuse) { return; } @@ -824,7 +828,7 @@ M_CheckAttack(edict_t *self) float chance; trace_t tr; - if (!self) + if (!self || !self->enemy || !self->enemy->inuse) { return false; } @@ -1158,8 +1162,10 @@ ai_checkattack(edict_t *self, float dist) qboolean hesDeadJim; qboolean retval; - if (!self) + if (!self || !self->enemy || !self->enemy->inuse) { + enemy_vis = false; + return false; } @@ -1300,10 +1306,14 @@ ai_checkattack(edict_t *self, float dist) } } - enemy_infront = infront(self, self->enemy); - enemy_range = range(self, self->enemy); - VectorSubtract(self->enemy->s.origin, self->s.origin, temp); - enemy_yaw = vectoyaw(temp); + if (self->enemy) + { + enemy_infront = infront(self, self->enemy); + enemy_range = range(self, self->enemy); + VectorSubtract(self->enemy->s.origin, self->s.origin, temp); + enemy_yaw = vectoyaw(temp); + } + retval = self->monsterinfo.checkattack(self); if (retval) @@ -1360,7 +1370,7 @@ ai_run(edict_t *self, float dist) qboolean gotcha = false; edict_t *realEnemy; - if (!self) + if (!self || !self->enemy || !self->enemy->inuse) { return; }