Exemple #1
0
Unit* MoonScriptCreatureAI::ForceCreatureFind(uint32 pCreatureId, float pX, float pY, float pZ, bool pCurrentPosition)
{
	Unit *pUnit = NULL;
	MapMgr *pMapMgr = _unit->GetMapMgr();
	if (pMapMgr == NULL)
		return pUnit;

	if (pCurrentPosition)
		pUnit = pMapMgr->GetInterface()->GetCreatureNearestCoords(_unit->GetPositionX(), _unit->GetPositionY(), _unit->GetPositionZ(), pCreatureId);
	else
		pUnit = pMapMgr->GetInterface()->GetCreatureNearestCoords(pX, pY, pZ, pCreatureId);

	if (pUnit == NULL)
	{
		for (int i = 0; i != pMapMgr->m_CreatureHighGuid; ++i)
		{
			if (pMapMgr->m_CreatureStorage[i] != NULL)
			{ 
				pUnit = pMapMgr->m_CreatureStorage[i];
				if (pUnit->GetEntry() == pCreatureId)
					return pUnit;

				pUnit = NULL;
			}
		}
	}

	return pUnit;
}
Exemple #2
0
Unit* AscentScriptCreatureAI::ForceCreatureFind( uint32 pCreatureId, float pX, float pY, float pZ )
{
	Unit* UnitPtr = NULL; 
	MapMgr* Mgr = _unit->GetMapMgr();
	if ( Mgr == NULL )
		return UnitPtr;

	UnitPtr = Mgr->GetInterface()->GetCreatureNearestCoords( pX, pY, pZ, pCreatureId );
	if ( UnitPtr == NULL )
	{
		UnitArray Array;
		for ( uint32 i = 0; i != Mgr->m_CreatureHighGuid; ++i )
		{
			UnitPtr = Mgr->m_CreatureStorage[ i ];
			if ( UnitPtr != NULL )
			{ 
				if ( UnitPtr->GetEntry() == pCreatureId && UnitPtr != _unit )
					Array.push_back( UnitPtr );
			};
		};

		if ( Array.size() == 1 )
			return Array[ 0 ];

		UnitPtr = NULL;
		float Distance, NearestDistance = 99999;
		for ( UnitArray::iterator UnitIter = Array.begin(); UnitIter != Array.end(); ++UnitIter )
		{
			Distance = _unit->CalcDistance( pX, pY, pZ, ( *UnitIter )->GetPositionX(), ( *UnitIter )->GetPositionY(), ( *UnitIter )->GetPositionZ() );
			if ( Distance < NearestDistance )
			{
				NearestDistance = Distance;
				UnitPtr = ( *UnitIter );
			};
		};
	};

	return UnitPtr;
};