void BountyMissionObjectiveImplementation::activate() { Locker locker(&syncMutex); MissionObjectiveImplementation::activate(); bool failMission = false; //Start NPC task or add observers to player target. if (getObserverCount() == 2) { removeNpcTargetObservers(); startNpcTargetTask(); } else if (getObserverCount() != 6) { if (isPlayerTarget()) { failMission = !addPlayerTargetObservers(); } else { startNpcTargetTask(); } } if (failMission) { getPlayerOwner().get()->sendSystemMessage("@mission/mission_generic:failed"); // Mission failed abort(); removeMissionFromPlayer(); } }
void BountyMissionObjectiveImplementation::handleNpcTargetKilled(ManagedObject* arg1) { CreatureObject* attacker = NULL; attacker = cast<CreatureObject*>(arg1); ManagedReference<MissionObject* > mission = this->mission.get(); ManagedReference<CreatureObject*> owner = getPlayerOwner(); if (owner == NULL) return; if (attacker != NULL && attacker->getObjectID() == owner->getObjectID() && attacker->isPlayerCreature()) { //Target killed by player, complete mission. complete(); } else if (attacker != NULL && attacker->isPet()) { // Target killed by pet ManagedReference<CreatureObject*> petOwner = attacker->getLinkedCreature().get(); if (petOwner != NULL && petOwner->getObjectID() == owner->getObjectID()) { // Pet is owned by mission owner, complete mission. complete(); } } else { //Target killed by other player, fail mission. owner->sendSystemMessage("@mission/mission_generic:failed"); // Mission failed abort(); removeMissionFromPlayer(); } }
void BountyMissionObjectiveImplementation::handleNpcTargetKilled(Observable* observable) { CreatureObject* target = cast<CreatureObject*>(observable); ManagedReference<CreatureObject*> owner = getPlayerOwner(); if (owner == NULL || target == NULL) return; SceneObject* targetInventory = target->getSlottedObject("inventory"); if (targetInventory == NULL) return; uint64 lootOwnerID = targetInventory->getContainerPermissions()->getOwnerID(); GroupObject* group = owner->getGroup(); if (lootOwnerID == owner->getObjectID() || (group != NULL && lootOwnerID == group->getObjectID())) { //Target killed by player, complete mission. complete(); } else { //Target killed by other player, fail mission. owner->sendSystemMessage("@mission/mission_generic:failed"); // Mission failed abort(); removeMissionFromPlayer(); } }
void DeliverMissionObjectiveImplementation::activate() { if (activated) { return; } MissionObjectiveImplementation::activate(); if (!activateWithResult()) { //Send error message to player. ManagedReference<CreatureObject*> owner = getPlayerOwner(); if (owner == NULL) { return; } int randomNumber = System::random(4) + 1; StringIdChatParameter message("@mission/mission_generic:mission_incomplete_0" + String::valueOf(randomNumber)); owner->sendSystemMessage(message); removeMissionFromPlayer(); } }
void MissionObjectiveImplementation::fail() { abort(); removeMissionFromPlayer(); }