void MotionMaster::MoveChase(Unit* target, float dist, float angle, bool moveFurther) { // ignore movement request if target not exist if (!target) return; if (GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE) { if (m_owner->GetTypeId() == TYPEID_PLAYER) { auto gen = (ChaseMovementGenerator<Player>*)top(); gen->SetMovementParameters(dist, angle, moveFurther); gen->SetNewTarget(*target); } else { auto gen = (ChaseMovementGenerator<Creature>*)top(); gen->SetMovementParameters(dist, angle, moveFurther); gen->SetNewTarget(*target); } top()->Reset(*m_owner); return; } DEBUG_FILTER_LOG(LOG_FILTER_AI_AND_MOVEGENSS, "%s chase to %s", m_owner->GetGuidStr().c_str(), target->GetGuidStr().c_str()); if (m_owner->GetTypeId() == TYPEID_PLAYER) Mutate(new ChaseMovementGenerator<Player>(*target, dist, angle, moveFurther)); else Mutate(new ChaseMovementGenerator<Creature>(*target, dist, angle, moveFurther)); }
void Gabriel::UpdateSenses() { CServerDE* pServerDE = GetServerDE(); if (!pServerDE) return; CCharacterMgr* pCharMgr = CCharacterMgr::GetMgr(); if (!pCharMgr) return; // Until we've spotted a player, keep looking for one... if (!m_bSpottedPlayer) { HOBJECT hObj = pCharMgr->FindVisiblePlayer(this); if (hObj) { if (CheckAlignment(HATE, hObj)) { SetNewTarget(hObj); TargetObject(hObj); } SpotPlayer(hObj); } } if (m_hTarget) { UpdateTargetPos(); TargetObject(m_hTarget); } pServerDE->SetNextUpdate(m_hObject, 0.001f); }
void Gabriel::UpdateAggressive() { CServerDE* pServerDE = GetServerDE(); if (!pServerDE || !m_hObject || !m_hTarget) return; CBaseCharacter* pB = (CBaseCharacter*) pServerDE->HandleToObject(m_hTarget); if (!pB) return; if (pB->IsDead()) { // Stop coming after Sanjuro... SetNewTarget(DNULL); m_bSpottedPlayer = DFALSE; // Set to idle (after script)... SetState(IDLE); BuildTauntScript(); SetScript(); PlayDialogSound("Sounds\\MajorCharacter\\Gabriel\\sanjurodead.wav"); } // Try to shoot sanjuro..... if (SanjuroInRange()) { ShootTarget(); } // Always try to get a better shot... ApproachSanjuro(); }