diff --git a/dlls/basemonster.h b/dlls/basemonster.h index d1cf041b..f9f49134 100644 --- a/dlls/basemonster.h +++ b/dlls/basemonster.h @@ -172,6 +172,7 @@ public: void ClearSchedule( void ); BOOL FScheduleDone( void ); void ChangeSchedule( Schedule_t *pNewSchedule ); + virtual void OnChangeSchedule( Schedule_t *pNewSchedule ) {} void NextScheduledTask( void ); Schedule_t *ScheduleInList( const char *pName, Schedule_t **pList, int listCount ); diff --git a/dlls/gearbox/fgrunt.cpp b/dlls/gearbox/fgrunt.cpp index 07ca8988..1270f30f 100644 --- a/dlls/gearbox/fgrunt.cpp +++ b/dlls/gearbox/fgrunt.cpp @@ -250,6 +250,7 @@ public: void StartTask( Task_t *pTask ); Schedule_t *GetSchedule ( void ); Schedule_t *GetScheduleOfType(int Type); + void OnChangeSchedule( Schedule_t *pNewSchedule ); void StopFollowing( BOOL clearSchedule ); void SetAnswerQuestion(CTalkMonster *pSpeaker); @@ -3623,12 +3624,16 @@ void CMedic::RunTask(Task_t *pTask) } } -Schedule_t *CMedic::GetSchedule() +void CMedic::OnChangeSchedule( Schedule_t *pNewSchedule ) { if (m_fHealing) { StopHealing(); } + CHFGrunt::OnChangeSchedule( pNewSchedule ); +} +Schedule_t *CMedic::GetSchedule() +{ Schedule_t* prioritizedSchedule = PrioritizedSchedule(); if (prioritizedSchedule) return prioritizedSchedule; @@ -3866,7 +3871,6 @@ void CMedic::StartFollowingHealTarget(CBaseEntity *pTarget) m_hTargetEnt = pTarget; ClearConditions( bits_COND_CLIENT_PUSH ); ClearSchedule(); - ChangeSchedule(GetScheduleOfType(SCHED_MEDIC_HEAL)); ALERT(at_aiconsole, "Medic started to follow injured %s\n", STRING(pTarget->pev->classname)); } diff --git a/dlls/schedule.cpp b/dlls/schedule.cpp index 4a5cefca..85f25ade 100644 --- a/dlls/schedule.cpp +++ b/dlls/schedule.cpp @@ -79,6 +79,8 @@ void CBaseMonster::ChangeSchedule( Schedule_t *pNewSchedule ) { ASSERT( pNewSchedule != NULL ); + OnChangeSchedule( pNewSchedule ); + m_pSchedule = pNewSchedule; m_iScheduleIndex = 0; m_iTaskStatus = TASKSTATUS_NEW;