void DestroyMissionObjectiveImplementation::abort() { MissionObjectiveImplementation::abort(); if (hasObservers()) { ManagedReference<MissionObserver*> observer = getObserver(0); ManagedReference<CreatureObject*> player = getPlayerOwner(); ManagedReference<LairObject*> lair = lairObject; if (lair != NULL) { Locker locker(lair); lair->dropObserver(ObserverEventType::OBJECTDESTRUCTION, observer); lair->destroyObjectFromWorld(true); lair = NULL; dropObserver(observer, true); } //spawnActiveArea->destroyObjectFromDatabase(true); } ManagedReference<MissionSpawnActiveArea* > spawnActiveArea = this->spawnActiveArea; if (spawnActiveArea != NULL) { Locker locker(spawnActiveArea); spawnActiveArea->destroyObjectFromWorld(true); } }
void BountyMissionObjectiveImplementation::abort() { Locker locker(&syncMutex); ManagedReference<CreatureObject*> owner = getPlayerOwner(); ManagedReference<MissionObject*> strongRef = mission.get(); MissionObjectiveImplementation::abort(); cancelAllTasks(); if (strongRef == NULL || owner == NULL) return; owner->getZoneServer()->getMissionManager()->removeBountyHunterFromPlayerBounty(strongRef->getTargetObjectId(), owner->getObjectID()); removeFromBountyLock(true); WaypointObject* waypoint = strongRef->getWaypointToMission(); if (waypoint != NULL && waypoint->isActive()) { Locker wplocker(waypoint); waypoint->setActive(false); } //Remove observers if (hasObservers()) { if (isPlayerTarget()) { removePlayerTargetObservers(); } else { removeNpcTargetObservers(); } } }
void ChildListMutationAccumulator::enqueueMutationRecord() { ASSERT(hasObservers()); ASSERT(!isEmpty()); RefPtr<StaticNodeList> addedNodes = StaticNodeList::adopt(m_addedNodes); RefPtr<StaticNodeList> removedNodes = StaticNodeList::adopt(m_removedNodes); RefPtr<MutationRecord> record = MutationRecord::createChildList(m_target, addedNodes.release(), removedNodes.release(), m_previousSibling.release(), m_nextSibling.release()); m_observers->enqueueMutationRecord(record.release()); m_lastAdded = nullptr; ASSERT(isEmpty()); }
void SurveyMissionObjectiveImplementation::abort() { MissionObjectiveImplementation::abort(); if (!hasObservers()) return; ManagedReference<MissionObserver*> observer = getObserver(0); ManagedReference<CreatureObject*> player = getPlayerOwner(); if (player != NULL) { player->dropObserver(ObserverEventType::SURVEY, observer); dropObserver(observer, true); } }
void SurveyMissionObjectiveImplementation::activate() { MissionObjectiveImplementation::activate(); if (hasObservers()) { return; } ManagedReference<CreatureObject*> player = getPlayerOwner(); if (player != NULL) { ManagedReference<MissionObserver*> observer = new MissionObserver(_this.getReferenceUnsafeStaticCast()); addObserver(observer, true); player->registerObserver(ObserverEventType::SURVEY, observer); } }
void HuntingMissionObjectiveImplementation::activate() { MissionObjectiveImplementation::activate(); if (hasObservers()) return; targetsKilled = 15 * getMissionObject().get()->getDifficultyLevel(); ManagedReference<CreatureObject*> player = getPlayerOwner(); ManagedReference<MissionObserver*> observer = new MissionObserver(_this.getReferenceUnsafeStaticCast()); addObserver(observer, true); Locker locker(player); player->registerObserver(ObserverEventType::KILLEDCREATURE, observer); }
void ChildListMutationAccumulator::childAdded(PassRefPtr<Node> prpChild) { ASSERT(hasObservers()); RefPtr<Node> child = prpChild; if (!isAddedNodeInOrder(child.get())) enqueueMutationRecord(); if (isEmpty()) { m_previousSibling = child->previousSibling(); m_nextSibling = child->nextSibling(); } m_lastAdded = child.get(); m_addedNodes.append(child.release()); }
void ChildListMutationAccumulator::childAdded(Node& childRef) { ASSERT(hasObservers()); Ref<Node> child(childRef); if (!isAddedNodeInOrder(child.get())) enqueueMutationRecord(); if (isEmpty()) { m_previousSibling = child->previousSibling(); m_nextSibling = child->nextSibling(); } m_lastAdded = &child.get(); m_addedNodes.append(child.get()); }
void DestroyMissionObjectiveImplementation::activate() { MissionObjectiveImplementation::activate(); ManagedReference<MissionObject* > mission = this->mission.get(); if ((hasObservers() && lairObject != NULL) || mission == NULL) { return; } if (spawnActiveArea == NULL) { spawnActiveArea = ( Core::lookupObject<ZoneServer>("ZoneServer")->createObject(String("object/mission_spawn_area.iff").hashCode(), 1)).castTo<MissionSpawnActiveArea*>(); Locker alocker(spawnActiveArea); spawnActiveArea->setMissionObjective(_this.get()); } if (spawnActiveArea->getZone() == NULL) { String planetName = mission->getStartPlanet(); Zone* zone = Core::lookupObject<ZoneServer>("ZoneServer")->getZone(planetName); if (zone == NULL) { abort(); return; } Locker alocker(spawnActiveArea); spawnActiveArea->initializePosition(mission->getStartPositionX(), 0, mission->getStartPositionY()); spawnActiveArea->setRadius(128.f); zone->transferObject(spawnActiveArea, -1, false); //info("inserting to zone " + zone->getPlanetName(), true); } WaypointObject* waypoint = mission->getWaypointToMission(); if (waypoint == NULL) waypoint = mission->createWaypoint(); waypoint->setPlanetCRC(mission->getStartPlanet().hashCode()); waypoint->setPosition(mission->getStartPositionX(), 0, mission->getStartPositionY()); waypoint->setActive(true); mission->updateMissionLocation(); }
void EntertainerMissionObjectiveImplementation::activate() { Locker _lock(_this.getReferenceUnsafeStaticCast()); ManagedReference<MissionObject* > mission = this->mission.get(); MissionObjectiveImplementation::activate(); if (hasObservers()) { return; } if (mission == NULL) return; ManagedReference<ZoneServer*> zoneServer = Core::lookupObject<ZoneServer>("ZoneServer"); if (locationActiveArea == NULL) { locationActiveArea = ( zoneServer->createObject(STRING_HASHCODE("object/active_area.iff"), 1)).castTo<ActiveArea*>(); } if (!locationActiveArea->isInQuadTree()) { String planetName = mission->getStartPlanet(); Zone* zone = zoneServer->getZone(planetName); Locker locker(locationActiveArea); locationActiveArea->initializePosition(mission->getStartPositionX(), 0, mission->getStartPositionY()); locationActiveArea->setRadius(32.f); if (zone != NULL) { zone->transferObject(locationActiveArea, -1, true); } else { error("Failed to insert entertainer location to zone."); abort(); return; } } Locker locationLocker(locationActiveArea); ManagedReference<MissionObserver*> observer1 = new MissionObserver(_this.getReferenceUnsafeStaticCast()); addObserver(observer1, true); locationActiveArea->registerObserver(ObserverEventType::ENTEREDAREA, observer1); ManagedReference<MissionObserver*> observer2 = new MissionObserver(_this.getReferenceUnsafeStaticCast()); addObserver(observer2, true); locationActiveArea->registerObserver(ObserverEventType::EXITEDAREA, observer2); locationLocker.release(); WaypointObject* waypoint = mission->getWaypointToMission(); if (waypoint == NULL) { Locker mlocker(mission); waypoint = mission->createWaypoint(); } Locker wplocker(waypoint); waypoint->setPlanetCRC(mission->getStartPlanetCRC()); waypoint->setPosition(mission->getStartPositionX(), 0, mission->getStartPositionY()); waypoint->setActive(true); mission->updateMissionLocation(); }