static bool HandleMmapTestArea(ChatHandler* handler, char const* /*args*/) { float radius = 40.0f; WorldObject* object = handler->GetSession()->GetPlayer(); // Get Creatures std::list<Creature*> creatureList; Trinity::AnyUnitInObjectRangeCheck go_check(object, radius); Trinity::CreatureListSearcher<Trinity::AnyUnitInObjectRangeCheck> go_search(object, creatureList, go_check); Cell::VisitGridObjects(object, go_search, radius); if (!creatureList.empty()) { handler->PSendSysMessage("Found %zu Creatures.", creatureList.size()); uint32 paths = 0; uint32 uStartTime = getMSTime(); float gx, gy, gz; object->GetPosition(gx, gy, gz); for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr) { PathGenerator path(*itr); path.CalculatePath(gx, gy, gz); ++paths; } uint32 uPathLoadTime = getMSTimeDiff(uStartTime, getMSTime()); handler->PSendSysMessage("Generated %i paths in %i ms", paths, uPathLoadTime); } else handler->PSendSysMessage("No creatures in %f yard range.", radius); return true; }
static bool HandleMmapTestArea(ChatHandler* handler, const char* args) { float radius = 40.0f; WorldObject* object = handler->GetSession()->GetPlayer(); CellCoord pair(Trinity::ComputeCellCoord(object->GetPositionX(), object->GetPositionY()) ); Cell cell(pair); cell.SetNoCreate(); std::list<Creature*> creatureList; Trinity::AnyUnitInObjectRangeCheck go_check(object, radius); Trinity::CreatureListSearcher<Trinity::AnyUnitInObjectRangeCheck> go_search(object, creatureList, go_check); TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AnyUnitInObjectRangeCheck>, GridTypeMapContainer> go_visit(go_search); // Get Creatures cell.Visit(pair, go_visit, *(object->GetMap()), *object, radius); if (!creatureList.empty()) { handler->PSendSysMessage("Found %i Creatures.", creatureList.size()); uint32 paths = 0; uint32 uStartTime = getMSTime(); float gx, gy, gz; object->GetPosition(gx, gy, gz); for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr) { PathGenerator path(*itr); path.CalculatePath(gx, gy, gz); ++paths; } uint32 uPathLoadTime = getMSTimeDiff(uStartTime, getMSTime()); handler->PSendSysMessage("Generated %i paths in %i ms", paths, uPathLoadTime); } else handler->PSendSysMessage("No creatures in %f yard range.", radius); return true; }
// Update the global position of a passenger void TransportBase::UpdateGlobalPositionOf(ObjectGuid const& passengerGuid, Position const& pos) const { WorldObject* passenger = GetOwner()->GetMap()->GetWorldObject(passengerGuid); if (!passenger) return; //Position g = CalculateGlobalPositionOf(pos); WorldLocation globalPos = GetOwner()->GetPosition(); globalPos.SetTransportPosition(pos); if (globalPos == passenger->GetPosition()) return; switch(passenger->GetTypeId()) { case TYPEID_GAMEOBJECT: case TYPEID_DYNAMICOBJECT: m_owner->GetMap()->Relocation((GameObject*)passenger, globalPos); break; case TYPEID_UNIT: m_owner->GetMap()->Relocation((Creature*)passenger, globalPos); // If passenger is vehicle if (((Unit*)passenger)->IsVehicle()) ((Unit*)passenger)->GetVehicleKit()->UpdateGlobalPositions(true); break; case TYPEID_PLAYER: m_owner->GetMap()->Relocation((Player*)passenger, globalPos); // If passenger is vehicle if (((Unit*)passenger)->IsVehicle()) ((Unit*)passenger)->GetVehicleKit()->UpdateGlobalPositions(true); break; case TYPEID_CORPSE: // TODO - add corpse relocation default: break; } }