From b87f20e2dcb4e6423c5fbeea6831ca4109931409 Mon Sep 17 00:00:00 2001 From: Gent Date: Mon, 12 Oct 2020 19:29:00 -0400 Subject: [PATCH] Make instance missions reset upon warping out --- src/NPCManager.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/NPCManager.cpp b/src/NPCManager.cpp index 2af6426..cbd1eaa 100644 --- a/src/NPCManager.cpp +++ b/src/NPCManager.cpp @@ -2,6 +2,7 @@ #include "ItemManager.hpp" #include "settings.hpp" #include "MobManager.hpp" +#include "MissionManager.hpp" #include #include @@ -588,6 +589,21 @@ void NPCManager::handleWarp(CNSocket* sock, int32_t warpId) { if (Warps.find(warpId) == Warps.end()) return; + // loop through all tasks; if the required instance is being left, "fail" the task + for (int taskNum : plrv.plr->tasks) { + if (MissionManager::Tasks.find(taskNum) == MissionManager::Tasks.end()) + continue; // sanity check + + TaskData* task = MissionManager::Tasks[taskNum]; + if ((plrv.plr->instanceID & 0xffffffff) == (int)(task->task["m_iRequireInstanceID"])) { // instance ID matches + int failTaskID = task->task["m_iFOutgoingTask"]; + if (failTaskID != 0) { + MissionManager::quitTask(sock, taskNum); + // TODO: start fail task + } + } + } + // std::cerr << "Warped to Map Num:" << Warps[warpId].instanceID << " NPC ID " << Warps[warpId].npcID << std::endl; if (Warps[warpId].isInstance) {