コード例 #1
0
ファイル: Base.cpp プロジェクト: Ballwinkle/Ascent_NG
Unit* AscentScriptCreatureAI::GetBestUnitTarget( TargetFilter pTargetFilter, float pMinRange, float pMaxRange )
{
	//Build potential target list
	UnitArray TargetArray;
	if ( pTargetFilter & TargetFilter_Friendly )
	{
		for ( unordered_set< Object* >::iterator ObjectIter = _unit->GetInRangeSetBegin(); ObjectIter != _unit->GetInRangeSetEnd(); ++ObjectIter )
		{
			if ( IsValidUnitTarget( *ObjectIter, pTargetFilter, pMinRange, pMaxRange ) )
				TargetArray.push_back( TO_UNIT( *ObjectIter ) );
		};

		if ( IsValidUnitTarget( _unit, pTargetFilter ) )
			TargetArray.push_back( _unit );	//Also add self as possible friendly target
	}
	else
	{
		for ( unordered_set< Object* >::iterator ObjectIter = _unit->GetInRangeOppFactsSetBegin(); ObjectIter != _unit->GetInRangeOppFactsSetEnd(); ++ObjectIter )
		{
			if ( IsValidUnitTarget( *ObjectIter, pTargetFilter, pMinRange, pMaxRange ) )
				TargetArray.push_back( TO_UNIT( *ObjectIter ) );
		};
	};

	return ChooseBestTargetInArray( TargetArray, pTargetFilter );
};
コード例 #2
0
ファイル: Base.cpp プロジェクト: Refuge89/Hearthstone
Unit *MoonScriptCreatureAI::GetBestUnitTarget( TargetFilters pTargetFilter, float pMinRange, float pMaxRange)
{
	//Build potential target list
	UnitArray TargetArray;
	if ( pTargetFilter & TargetFilter_Friendly )
	{
		for ( unordered_set< Object *>::iterator ObjectIter = _unit->GetInRangeSetBegin(); ObjectIter != _unit->GetInRangeSetEnd(); ++ObjectIter )
		{
			// Trololololo.......
			if( IsValidUnitTarget(*ObjectIter, pTargetFilter, pMinRange, pMaxRange) )
			{
				if(pTargetFilter & TargetFilter_ManaClass)
				{
					if(TO_UNIT(*ObjectIter)->GetPowerType() == POWER_TYPE_MANA)
						TargetArray.push_back( TO_UNIT( *ObjectIter ) );
				}
				else
					TargetArray.push_back( TO_UNIT( *ObjectIter ) );
			}
		};

		if ( IsValidUnitTarget( _unit, pTargetFilter ) )
			TargetArray.push_back( _unit );	//Also add self as possible friendly target
	}
	else
	{
		for ( unordered_set< Object *>::iterator ObjectIter = _unit->GetInRangeOppFactsSetBegin(); ObjectIter != _unit->GetInRangeOppFactsSetEnd(); ++ObjectIter )
		{
			// Problem, Dylan?
			if( IsValidUnitTarget(*ObjectIter, pTargetFilter, pMinRange, pMaxRange) )
			{
				if(pTargetFilter & TargetFilter_ManaClass)
				{
					if(TO_UNIT(*ObjectIter)->GetPowerType() == POWER_TYPE_MANA)
						TargetArray.push_back( TO_UNIT( *ObjectIter ) );
				}
				else
					TargetArray.push_back( TO_UNIT( *ObjectIter ) );
			}
		};
	};

	return ChooseBestTargetInArray( TargetArray, pTargetFilter );
};
コード例 #3
0
Unit *AIInterface::GetBestUnitTarget( uint32 pTargetFilter, float pMinRange, float pMaxRange)
{
	//Build potential target list
	set<Unit*> TargetSet;
	if ( pTargetFilter & TargetFilter_Friendly )
	{
		for ( Object::InRangeSet::iterator ObjectIter = m_Unit->GetInRangeSetBegin(); ObjectIter != m_Unit->GetInRangeSetEnd(); ++ObjectIter )
		{
			if( IsValidUnitTarget(*ObjectIter, pTargetFilter, pMinRange, pMaxRange) )
			{
				if(pTargetFilter & TargetFilter_ManaClass)
				{
					if(TO_UNIT(*ObjectIter)->GetPowerType() == POWER_TYPE_MANA)
						TargetSet.insert( TO_UNIT( *ObjectIter ) );
				}
				else
					TargetSet.insert( TO_UNIT( *ObjectIter ) );
			}
		}

		if ( IsValidUnitTarget( m_Unit, pTargetFilter ) )
			TargetSet.insert( m_Unit );	//Also add self as possible friendly target
	}
	else
	{
		for ( Object::InRangeSet::iterator ObjectIter = m_Unit->GetInRangeOppFactsSetBegin(); ObjectIter != m_Unit->GetInRangeOppFactsSetEnd(); ++ObjectIter )
		{
			if( IsValidUnitTarget(*ObjectIter, pTargetFilter, pMinRange, pMaxRange) )
			{
				if(pTargetFilter & TargetFilter_ManaClass)
				{
					if(TO_UNIT(*ObjectIter)->GetPowerType() == POWER_TYPE_MANA)
						TargetSet.insert( TO_UNIT( *ObjectIter ) );
				}
				else
					TargetSet.insert( TO_UNIT( *ObjectIter ) );
			}
		}
	}

	return ChooseBestTargetInSet( TargetSet, pTargetFilter );
}
コード例 #4
0
ファイル: Base.cpp プロジェクト: AegisEmu/AegisEmu
Unit* ArcScriptCreatureAI::GetBestPlayerTarget(TargetFilter pFilter)
{
	//Build potential target list
	UnitArray TargetArray;
	for( set<Player*>::iterator PlayerIter = _unit->GetInRangePlayerSetBegin(); PlayerIter != _unit->GetInRangePlayerSetEnd(); ++PlayerIter ) 
	{ 
		if( IsValidUnitTarget(*PlayerIter, pFilter) ) TargetArray.push_back(static_cast<Unit*>(*PlayerIter));
	}

	return ChooseBestTargetInArray(TargetArray, pFilter);
}
コード例 #5
0
ファイル: Base.cpp プロジェクト: Refuge89/Hearthstone
Unit *MoonScriptCreatureAI::GetBestPlayerTarget( TargetFilters pTargetFilter, float pMinRange, float pMaxRange)
{
	//Build potential target list
	UnitArray TargetArray;
	for ( unordered_set< Player *>::iterator PlayerIter = _unit->GetInRangePlayerSetBegin(); PlayerIter != _unit->GetInRangePlayerSetEnd(); ++PlayerIter ) 
	{
		if ( IsValidUnitTarget( *PlayerIter, pTargetFilter, pMinRange, pMaxRange ) )
			TargetArray.push_back( TO_UNIT( *PlayerIter ) );
	};

	return ChooseBestTargetInArray( TargetArray, pTargetFilter );
};
コード例 #6
0
Unit *AIInterface::GetBestPlayerTarget( uint32 pTargetFilter, float pMinRange, float pMaxRange)
{
	//Build potential target list
	set<Unit*> TargetSet;
	for ( PlayerSet::iterator PlayerIter = m_Unit->GetInRangePlayerSetBegin(); PlayerIter != m_Unit->GetInRangePlayerSetEnd(); PlayerIter++ ) 
	{
		if ( IsValidUnitTarget( *PlayerIter, pTargetFilter, pMinRange, pMaxRange ) )
			TargetSet.insert( TO_UNIT( *PlayerIter ) );
	}

	return ChooseBestTargetInSet( TargetSet, pTargetFilter );
}
コード例 #7
0
ファイル: Base.cpp プロジェクト: AegisEmu/AegisEmu
Unit* ArcScriptCreatureAI::GetBestUnitTarget(TargetFilter pFilter)
{
	//Build potential target list
	UnitArray TargetArray;
	if( pFilter & TargetFilter_Friendly )
	{
		for( std::set<Object*>::iterator ObjectIter = _unit->GetInRangeSetBegin(); ObjectIter != _unit->GetInRangeSetEnd(); ++ObjectIter )
		{
			if( IsValidUnitTarget(*ObjectIter, pFilter) ) TargetArray.push_back(static_cast<Unit*>(*ObjectIter));
		}
		if( IsValidUnitTarget(_unit, pFilter) ) TargetArray.push_back(_unit);	//Also add self as possible friendly target
	}
	else
	{
		for( std::set<Object*>::iterator ObjectIter = _unit->GetInRangeOppFactsSetBegin(); ObjectIter != _unit->GetInRangeOppFactsSetEnd(); ++ObjectIter )
		{
			if( IsValidUnitTarget(*ObjectIter, pFilter) ) TargetArray.push_back(static_cast<Unit*>(*ObjectIter));
		}
	}

	return ChooseBestTargetInArray(TargetArray, pFilter);
}
コード例 #8
0
ファイル: Raid_GruulsLair.cpp プロジェクト: Bootz/arcticdev
	UnitArray GetInRangePlayers()
	{
		UnitArray TargetArray;
		for (unordered_set<Player*>::iterator itr = _unit->GetInRangePlayerSetBegin(); itr != _unit->GetInRangePlayerSetEnd(); itr++) 
		{ 
			if (IsValidUnitTarget(*itr, TargetFilter_None))
			{
				TargetArray.push_back(TO_UNIT(*itr));
			}
		}

		return TargetArray;
	}
コード例 #9
0
        UnitArray GetInRangePlayers()
        {
            UnitArray TargetArray;
            for (set< Object* >::iterator itr = _unit->GetInRangePlayerSetBegin(); itr != _unit->GetInRangePlayerSetEnd(); ++itr)
            {
                if (IsValidUnitTarget(*itr, TargetFilter_None))
                {
                    TargetArray.push_back(TO< Unit* >(*itr));
                }
            }

            return TargetArray;
        }
コード例 #10
0
Unit *AIInterface::GetTargetForSpell( AI_Spell* pSpell )
{
	if(pSpell == NULL)
		return NULLUNIT;

	//Check if run-to-target cache and return it if its valid
	if ( m_nextTarget && IsValidUnitTarget( m_nextTarget, pSpell->TargetFilter, pSpell->mindist2cast, pSpell->maxdist2cast ) )
		return m_nextTarget;

	// Find a suitable target for the described situation :)
	switch( pSpell->TargetType )
	{
	case TargetGen_Self:
		{
			if ( !m_Unit->isAlive() )
				return NULLUNIT;
			if ( ( pSpell->TargetFilter & TargetFilter_Wounded ) && m_Unit->GetHealthPct() >= 99 )
				return NULLUNIT;
			if(pSpell->mPredefinedTarget != NULL)
				return pSpell->mPredefinedTarget;
			return m_Unit;
		}break;
	case TargetGen_SecondMostHated:
		{
			Unit* m_Result = GetSecondHated(pSpell);
			if(m_Result == NULLUNIT)
				m_Result = GetMostHated(pSpell);
			return m_Result;
		}break;
	case TargetGen_Current:
	case TargetGen_Destination:
		return m_nextTarget;
	case TargetGen_Predefined:
		return pSpell->mPredefinedTarget;
	case TargetGen_RandomPlayer:
	case TargetGen_RandomPlayerApplyAura:
	case TargetGen_RandomPlayerDestination:
		return GetBestPlayerTarget( pSpell->TargetFilter, pSpell->mindist2cast, pSpell->maxdist2cast );
	case TargetGen_RandomUnit:
	case TargetGen_RandomUnitApplyAura:
	case TargetGen_RandomUnitDestination:
	case TargetGen_ManaClass:
		return GetBestUnitTarget( pSpell->TargetFilter, pSpell->mindist2cast, pSpell->maxdist2cast );
	default:
		sLog.outDebug("MoonScriptCreatureAI::GetTargetForSpell() : Invalid target type!\n");
		return NULLUNIT;
	}
}
コード例 #11
0
ファイル: Base.cpp プロジェクト: Refuge89/Hearthstone
Unit *MoonScriptCreatureAI::GetTargetForSpell( SpellDesc* pSpell )
{
	//Check if run-to-target cache and return it if its valid
	if ( mRunToTargetCache && mRunToTargetSpellCache == pSpell && IsValidUnitTarget( mRunToTargetCache, TargetFilter_None ) )
		return mRunToTargetCache;

	//Find a suitable target for the described situation :)
	switch( pSpell->mTargetType.mTargetGenerator )
	{
	case TargetGen_Self:
		if ( !IsAlive() )
			return NULLUNIT;
		if ( ( pSpell->mTargetType.mTargetFilter & TargetFilter_Wounded ) && _unit->GetHealthPct() >= 99 )
			return NULLUNIT;

		return _unit;
	case TargetGen_SecondMostHated:
		return _unit->GetAIInterface()->GetSecondHated();
	case TargetGen_Current:
	case TargetGen_Destination:
		return _unit->GetAIInterface()->GetNextTarget();
	case TargetGen_Predefined:
		return pSpell->mPredefinedTarget;
	case TargetGen_RandomPlayer:
	case TargetGen_RandomPlayerApplyAura:
	case TargetGen_RandomPlayerDestination:
		return GetBestPlayerTarget( pSpell->mTargetType.mTargetFilter, pSpell->mMinRange, pSpell->mMaxRange );
	case TargetGen_RandomUnit:
	case TargetGen_RandomUnitApplyAura:
	case TargetGen_RandomUnitDestination:
	case TargetGen_ManaClass:
		return GetBestUnitTarget( pSpell->mTargetType.mTargetFilter, pSpell->mMinRange, pSpell->mMaxRange );
	default:
		sLog.outDebug("MoonScriptCreatureAI::GetTargetForSpell() : Invalid target type!\n");
		return NULLUNIT;
	};
};
コード例 #12
0
ファイル: Base.cpp プロジェクト: AegisEmu/AegisEmu
Unit* ArcScriptCreatureAI::GetTargetForSpell(SpellDesc* pSpell)
{
	//Check if run-to-target cache and return it if its valid
	if( mRunToTargetCache && mRunToTargetSpellCache == pSpell && IsValidUnitTarget(mRunToTargetCache, TargetFilter_None) )
	{
		return mRunToTargetCache;
	}

	//Find a suitable target for the described situation :)
	switch( pSpell->mTargetType )
	{
		case Target_Self:
			return _unit;

		case Target_SecondMostHated:
			return GetBestPlayerTarget(TargetFilter_SecondMostHated);

		case Target_Current:
		case Target_Destination:
			return _unit->GetAIInterface()->GetNextTarget();

		case Target_Predefined:
			return pSpell->mPredefinedTarget;

		case Target_RandomPlayer:
		case Target_RandomDestination:
		case Target_RandomPlayerApplyAura:
			return GetBestPlayerTarget();

		case Target_RandomPlayerNotCurrent:
			return GetBestPlayerTarget(TargetFilter_NotCurrent);

		case Target_RandomUnit:
			return GetBestUnitTarget();

		case Target_RandomUnitNotCurrent:
			return GetBestUnitTarget(TargetFilter_NotCurrent);

		case Target_RandomFriendly:
			return GetBestUnitTarget(TargetFilter_Friendly);

		case Target_WoundedPlayer:
			return GetBestPlayerTarget(TargetFilter_Wounded);

		case Target_WoundedUnit:
			return GetBestUnitTarget(TargetFilter_Wounded);

		case Target_WoundedFriendly:
			return GetBestUnitTarget(TargetFilter(TargetFilter_Wounded | TargetFilter_Friendly));

		case Target_ClosestPlayer:
			return GetBestPlayerTarget(TargetFilter_Closest);

		case Target_ClosestPlayerNotCurrent:
			return GetBestPlayerTarget(TargetFilter(TargetFilter_Closest | TargetFilter_NotCurrent));

		case Target_ClosestUnit:
			return GetBestUnitTarget(TargetFilter_Closest);

		case Target_ClosestUnitNotCurrent:
			return GetBestUnitTarget(TargetFilter(TargetFilter_Closest | TargetFilter_NotCurrent));

		case Target_ClosestFriendly:
			return GetBestUnitTarget(TargetFilter(TargetFilter_Closest | TargetFilter_Friendly));

		default:
			sLog.outDebug("ArcScriptCreatureAI::GetTargetForSpell() : Invalid target type!\n");
			return NULL;
	}
}