示例#1
0
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));
}
示例#2
0
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);
}
示例#3
0
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();
}