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; }
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; };