void CityHallZoneComponent::destroyObjectFromWorld(SceneObject* sceneObject, bool sendSelfDestroy) const {
	ZoneServer* zoneServer = sceneObject->getZoneServer();

	if (zoneServer == NULL || zoneServer->isServerShuttingDown()) {
		ZoneComponent::destroyObjectFromWorld(sceneObject, sendSelfDestroy);
		return;
	}

	ManagedReference<CityRegion*> cityRegion = sceneObject->getCityRegion().get();

	if (cityRegion != NULL ) {
		Locker clocker(cityRegion, sceneObject);

		if (cityRegion->getCityHall() == sceneObject) {
			cityRegion->setCityHall(NULL);
		}

		clocker.release();

		CityManager* cityManager = zoneServer->getCityManager();

		cityManager->destroyCity(cityRegion);
	}

	ZoneComponent::destroyObjectFromWorld(sceneObject, sendSelfDestroy);
}
Пример #2
0
void ScreenPlayTask::run() {
	ZoneServer* zoneServer = ServerCore::getZoneServer();

	if (zoneServer == NULL || zoneServer->isServerShuttingDown())
		return;

	if (zoneServer->isServerLoading()) {
		schedule(10000);

		return;
	}

	ManagedReference<SceneObject*> obj = this->obj.get();

	if (obj != NULL) {
		Locker locker(obj);

		DirectorManager::instance()->activateEvent(this);
	} else {
		DirectorManager::instance()->activateEvent(this);
	}

	setTaskName(String("ScreenPlayTask " + screenPlay + ":" + taskKey + ":" + args).toCharArray());
}