SortedVector<ManagedReference<SceneObject*> > ZoneImplementation::getPlanetaryObjectList(const String& mapObjectLocationType) { SortedVector<ManagedReference<SceneObject*> > retVector; retVector.setNoDuplicateInsertPlan(); #ifndef WITH_STM mapLocations->rlock(); #endif try { SortedVector<MapLocationEntry>& entryVector = mapLocations->getLocation(mapObjectLocationType); for (int i = 0; i < entryVector.size(); ++i) { MapLocationEntry entry = entryVector.get(i); retVector.put(entry.getObject()); } } catch (...) { } #ifndef WITH_STM mapLocations->runlock(); #endif return retVector; }
void PlanetManagerImplementation::loadPerformanceLocations() { info("loading performance locations...", true); SortedVector<ManagedReference<SceneObject*> > planetaryLocs; planetaryLocs.setNoDuplicateInsertPlan(); // get hotels planetaryLocs = zone->getPlanetaryObjectList("hotel"); for (int j = 0; j < planetaryLocs.size(); j++) { SceneObject* obj = planetaryLocs.get(j); addPerformanceLocation(obj); } // get theaters planetaryLocs = zone->getPlanetaryObjectList("guild_theater"); for (int j = 0; j < planetaryLocs.size(); j++) { SceneObject* obj = planetaryLocs.get(j); addPerformanceLocation(obj); } // get cantinas planetaryLocs.removeAll(); planetaryLocs = zone->getPlanetaryObjectList("cantina"); for (int j = 0; j < planetaryLocs.size(); j++) { SceneObject* obj = planetaryLocs.get(j); addPerformanceLocation(obj); } }
ManagedWeakReference<SceneObject*> SceneObjectImplementation::getRootParent() { ManagedReference<SceneObject*> grandParent = getParent(); ManagedReference<SceneObject*> tempParent = NULL; if (grandParent == NULL) return NULL; #ifdef DEBUG_GETROOT_PARENT SortedVector<ManagedReference<SceneObject*> > parents; parents.setNoDuplicateInsertPlan(); #endif while ((tempParent = grandParent->getParent()) != NULL && grandParent != asSceneObject()) { grandParent = tempParent; #ifdef DEBUG_GETROOT_PARENT if (parents.contains(grandParent)) return NULL; else parents.put(grandParent); #endif } if (grandParent == asSceneObject()) return NULL; ManagedWeakReference<SceneObject*> weak = grandParent.get(); return weak; }
void SceneObjectImplementation::destroyObjectFromDatabase(bool destroyContainedObjects) { //info("deleting from database", true); if (isPlayerCreature()) { assert(0 && "attempting to delete a player creature from database"); } if(dataObjectComponent != NULL) { dataObjectComponent->notifyObjectDestroyingFromDatabase(); } ZoneServer* server = getZoneServer(); server->destroyObjectFromDatabase(getObjectID()); asSceneObject()->setPersistent(0); if (!destroyContainedObjects) return; SortedVector<ManagedReference<SceneObject*> > destroyedObjects; destroyedObjects.setNoDuplicateInsertPlan(); for (int i = 0; i < getSlottedObjectsSize(); ++i) { ManagedReference<SceneObject*> object = getSlottedObject(i); if (destroyedObjects.put(object) != -1) { Locker locker(object); object->destroyObjectFromDatabase(true); } } for (int j = 0; j < getContainerObjectsSize(); ++j) { ManagedReference<SceneObject*> object = getContainerObject(j); if (destroyedObjects.put(object) != -1) { Locker locker(object); object->destroyObjectFromDatabase(true); } } //Remove all child objects from database for (int i = 0; i < childObjects.size(); ++i) { ManagedReference<SceneObject*> child = childObjects.get(i); if (child == NULL) continue; Locker locker(child); child->destroyObjectFromDatabase(true); } }
void CityRegionImplementation::cleanupCitizens() { Locker slocker(&structureListMutex); SortedVector<uint64> ownerIds; ownerIds.setNoDuplicateInsertPlan(); for (int i = 0; i < completeStructureList.size(); ++i) { uint64 oid = completeStructureList.get(i); ManagedReference<BuildingObject*> building = Core::getObjectBroker()->lookUp(oid).castTo<BuildingObject*>(); if (building != NULL) { if (building->isResidence()) { uint64 owner = building->getOwnerObjectID(); ownerIds.put(owner); } } } SortedVector<uint64> removeIds; removeIds.setNoDuplicateInsertPlan(); for (int i = 0; i < citizenList.size(); ++i) { uint64 id = citizenList.get(i); if (!ownerIds.contains(id)) removeIds.put(id); else if (isBanned(id)) removeBannedPlayer(id); } for (int i = 0; i < removeIds.size(); ++i) { removeCitizen(removeIds.get(i)); } if(getMayorID() != 0 && !isCitizen(getMayorID())) addCitizen(getMayorID()); }