void DeliverMissionObjectiveImplementation::despawnNpcs() { ZoneServer* zoneServer = ServerCore::getZoneServer(); MissionManager* missionManager = zoneServer->getMissionManager(); if (targetSpawnPoint != NULL) missionManager->freeMissionNpc(targetSpawnPoint); if (destinationSpawnPoint != NULL) missionManager->freeMissionNpc(destinationSpawnPoint); }
void MissionObjectiveImplementation::removeMissionFromPlayer() { ManagedReference<CreatureObject*> player = getPlayerOwner(); ManagedReference<MissionObject* > mission = this->mission.get(); if (player != NULL) { ZoneServer* zoneServer = player->getZoneServer(); MissionManager* missionManager = zoneServer->getMissionManager(); missionManager->removeMission(mission, player); } }
bool DeliverMissionObjectiveImplementation::activateWithResult() { ManagedReference<CreatureObject*> owner = getPlayerOwner(); ManagedReference<MissionObject* > mission = this->mission.get(); if (owner == NULL || mission == NULL) { return false; } Zone* zone = owner->getZone(); if (zone == NULL) { return false; } CreatureManager* creatureManager = zone->getCreatureManager(); PlanetManager* planetManager = zone->getPlanetManager(); if (planetManager == NULL) { return false; } TerrainManager* terrainManager = planetManager->getTerrainManager(); if (terrainManager == NULL) { return false; } ZoneServer* zoneServer = owner->getZoneServer(); if (zoneServer == NULL) { return false; } MissionManager* missionManager = zoneServer->getMissionManager(); if (missionManager == NULL) { return false; } //Select spawn type. int spawnType = NpcSpawnPoint::NEUTRALSPAWN; switch (mission->getFaction()) { case FactionManager::FACTIONIMPERIAL: spawnType = NpcSpawnPoint::IMPERIALSPAWN; break; case FactionManager::FACTIONREBEL: spawnType = NpcSpawnPoint::REBELSPAWN; break; default: spawnType = NpcSpawnPoint::NEUTRALSPAWN; break; } //Spawn target and destination NPC's. //Target NPC //Find a free spawn point. targetSpawnPoint = missionManager->getFreeNpcSpawnPoint(mission->getStartPlanetCRC(), mission->getStartPositionX(), mission->getStartPositionY(), spawnType); if (targetSpawnPoint == NULL) { return false; } Vector3* targetPosition = targetSpawnPoint->getPosition(); if (targetPosition == NULL) { return false; } //Destination NPC. //Find a free spawn point. int retries = 10; destinationSpawnPoint = NULL; while (retries > 0 && (destinationSpawnPoint == NULL || destinationSpawnPoint == targetSpawnPoint)) { destinationSpawnPoint = missionManager->getFreeNpcSpawnPoint(mission->getEndPlanet().hashCode(), mission->getEndPositionX(), mission->getEndPositionY(), spawnType); retries--; } if (destinationSpawnPoint == NULL || destinationSpawnPoint == targetSpawnPoint) { return false; } missionManager->allocateMissionNpcs(targetSpawnPoint, destinationSpawnPoint, terrainManager, creatureManager); //Create waypoint and activate it. if (objectiveStatus == 0) { WaypointObject* waypoint = mission->getWaypointToMission(); Locker locker(waypoint); waypoint->setPlanetCRC(mission->getStartPlanetCRC()); waypoint->setPosition(targetPosition->getX(), 0, targetPosition->getY()); waypoint->setActive(true); mission->updateMissionLocation(); } else { updateMissionTarget(getPlayerOwner().get()); } return true; }