From 0600b6834a9c7114cfd1c58f09c4eeb09d26e4d4 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Thu, 5 Jul 2018 14:58:01 -0400 Subject: [PATCH] Update IsTaskActivityCompleted, GetTaskActivityDoneCount, GetTaskActivityState --- zone/client.h | 6 ++--- zone/tasks.cpp | 66 ++++++++++++++++++++++++++++++++++++++------------ zone/tasks.h | 6 ++--- 3 files changed, 57 insertions(+), 21 deletions(-) diff --git a/zone/client.h b/zone/client.h index cb4dbb1ba..50282b5c3 100644 --- a/zone/client.h +++ b/zone/client.h @@ -1011,7 +1011,7 @@ public: inline bool IsTaskStateLoaded() { return taskstate != nullptr; } inline bool IsTaskActive(int TaskID) { return (taskstate ? taskstate->IsTaskActive(TaskID) : false); } inline bool IsTaskActivityActive(int TaskID, int ActivityID) { return (taskstate ? taskstate->IsTaskActivityActive(TaskID, ActivityID) : false); } - inline ActivityState GetTaskActivityState(int index, int ActivityID) { return (taskstate ? taskstate->GetTaskActivityState(index, ActivityID) : ActivityHidden); } + inline ActivityState GetTaskActivityState(TaskType type, int index, int ActivityID) { return (taskstate ? taskstate->GetTaskActivityState(type, index, ActivityID) : ActivityHidden); } inline void UpdateTaskActivity(int TaskID, int ActivityID, int Count, bool ignore_quest_update = false) { if (taskstate) taskstate->UpdateTaskActivity(this, TaskID, ActivityID, Count, ignore_quest_update); } inline void ResetTaskActivity(int TaskID, int ActivityID) { if(taskstate) taskstate->ResetTaskActivity(this, TaskID, ActivityID); } inline void UpdateTasksOnKill(int NPCTypeID) { if(taskstate) taskstate->UpdateTasksOnKill(this, NPCTypeID); } @@ -1037,8 +1037,8 @@ public: inline int GetActiveTaskCount() { return (taskstate ? taskstate->GetActiveTaskCount() : 0); } inline int GetActiveTaskID(int index) { return (taskstate ? taskstate->GetActiveTaskID(index) : -1); } inline int GetTaskStartTime(int index) { return (taskstate ? taskstate->GetTaskStartTime(index) : -1); } - inline bool IsTaskActivityCompleted(int index, int ActivityID) { return (taskstate ? taskstate->IsTaskActivityCompleted(index, ActivityID) : false); } - inline int GetTaskActivityDoneCount(int ClientTaskIndex, int ActivityID) { return (taskstate ? taskstate->GetTaskActivityDoneCount(ClientTaskIndex, ActivityID) :0); } + inline bool IsTaskActivityCompleted(TaskType type, int index, int ActivityID) { return (taskstate ? taskstate->IsTaskActivityCompleted(type, index, ActivityID) : false); } + inline int GetTaskActivityDoneCount(TaskType type, int ClientTaskIndex, int ActivityID) { return (taskstate ? taskstate->GetTaskActivityDoneCount(type, ClientTaskIndex, ActivityID) :0); } inline int GetTaskActivityDoneCountFromTaskID(int TaskID, int ActivityID) { return (taskstate ? taskstate->GetTaskActivityDoneCountFromTaskID(TaskID, ActivityID) :0); } inline int ActiveTasksInSet(int TaskSet) { return (taskstate ? taskstate->ActiveTasksInSet(TaskSet) :0); } inline int CompletedTasksInSet(int TaskSet) { return (taskstate ? taskstate->CompletedTasksInSet(TaskSet) :0); } diff --git a/zone/tasks.cpp b/zone/tasks.cpp index 40e03bac3..6dca0c7e9 100644 --- a/zone/tasks.cpp +++ b/zone/tasks.cpp @@ -2648,10 +2648,10 @@ void TaskManager::SendTaskActivityLong(Client *c, int TaskID, int ActivityID, in buf.WriteString(Tasks[TaskID]->Activity[ActivityID].desc_override); if(Tasks[TaskID]->Activity[ActivityID].Type != ActivityGiveCash) - buf.WriteUInt32(c->GetTaskActivityDoneCount(ClientTaskIndex, ActivityID)); + buf.WriteUInt32(c->GetTaskActivityDoneCount(Tasks[TaskID]->type, ClientTaskIndex, ActivityID)); else // For internal activity types, DoneCount is either 1 if the activity is complete, 0 otherwise. - buf.WriteUInt32((c->GetTaskActivityDoneCount(ClientTaskIndex, ActivityID) >= Tasks[TaskID]->Activity[ActivityID].GoalCount)); + buf.WriteUInt32((c->GetTaskActivityDoneCount(Tasks[TaskID]->type, ClientTaskIndex, ActivityID) >= Tasks[TaskID]->Activity[ActivityID].GoalCount)); buf.WriteUInt32(1); // unknown @@ -2706,10 +2706,10 @@ void TaskManager::SendTaskActivityNew(Client *c, int TaskID, int ActivityID, int buf.WriteString(Tasks[TaskID]->Activity[ActivityID].desc_override); // description override if(Tasks[TaskID]->Activity[ActivityID].Type != ActivityGiveCash) - buf.WriteUInt32(c->GetTaskActivityDoneCount(ClientTaskIndex, ActivityID)); // DoneCount + buf.WriteUInt32(c->GetTaskActivityDoneCount(Tasks[TaskID]->type, ClientTaskIndex, ActivityID)); // DoneCount else // For internal activity types, DoneCount is either 1 if the activity is complete, 0 otherwise. - buf.WriteUInt32((c->GetTaskActivityDoneCount(ClientTaskIndex, ActivityID) >= Tasks[TaskID]->Activity[ActivityID].GoalCount)); + buf.WriteUInt32((c->GetTaskActivityDoneCount(Tasks[TaskID]->type, ClientTaskIndex, ActivityID) >= Tasks[TaskID]->Activity[ActivityID].GoalCount)); buf.WriteUInt8(1); // unknown9 @@ -2738,7 +2738,7 @@ void TaskManager::SendActiveTasksToClient(Client *c, bool TaskComplete) int Sequence = 0; for(int Activity=0; ActivityGetTaskActivityState(TaskIndex, Activity) != ActivityHidden) { + if(c->GetTaskActivityState(Tasks[TaskID]->type, TaskIndex, Activity) != ActivityHidden) { Log(Logs::General, Logs::Tasks, "[UPDATE] Long: %i, %i, %i Complete=%i", TaskID, Activity, TaskIndex, TaskComplete); if(Activity==GetActivityCount(TaskID)-1) SendTaskActivityLong(c, TaskID, Activity, TaskIndex, @@ -2886,21 +2886,57 @@ void TaskManager::SendActiveTaskDescription(Client *c, int TaskID, ClientTaskInf safe_delete(outapp); } -bool ClientTaskState::IsTaskActivityCompleted(int index, int ActivityID) { +bool ClientTaskState::IsTaskActivityCompleted(TaskType type, int index, int ActivityID) +{ + switch (type) { + case TaskType::Task: + if (index != 0) + return false; + return ActiveTask.Activity[ActivityID].State == ActivityCompleted; + case TaskType::Shared: + return false; // TODO: shared tasks + case TaskType::Quest: + if (index < MAXACTIVEQUESTS) + return ActiveQuests[index].Activity[ActivityID].State == ActivityCompleted; + default: + return false; + } - return (ActiveQuests[index].Activity[ActivityID].State == ActivityCompleted); } -ActivityState ClientTaskState::GetTaskActivityState(int index, int ActivityID) { - - - return ActiveQuests[index].Activity[ActivityID].State; +// should we be defaulting to hidden? +ActivityState ClientTaskState::GetTaskActivityState(TaskType type, int index, int ActivityID) +{ + switch (type) { + case TaskType::Task: + if (index != 0) + return ActivityHidden; + return ActiveTask.Activity[ActivityID].State; + case TaskType::Shared: + return ActivityHidden; // TODO: shared tasks + case TaskType::Quest: + if (index < MAXACTIVEQUESTS) + return ActiveQuests[index].Activity[ActivityID].State; + default: + return ActivityHidden; + } } -int ClientTaskState::GetTaskActivityDoneCount(int index, int ActivityID) { - - return ActiveQuests[index].Activity[ActivityID].DoneCount; - +int ClientTaskState::GetTaskActivityDoneCount(TaskType type, int index, int ActivityID) +{ + switch (type) { + case TaskType::Task: + if (index != 0) + return 0; + return ActiveTask.Activity[ActivityID].DoneCount; + case TaskType::Shared: + return 0; // TODO: shared tasks + case TaskType::Quest: + if (index < MAXACTIVEQUESTS) + return ActiveQuests[index].Activity[ActivityID].DoneCount; + default: + return 0; + } } int ClientTaskState::GetTaskActivityDoneCountFromTaskID(int TaskID, int ActivityID){ diff --git a/zone/tasks.h b/zone/tasks.h index 0208bcb28..32acbc23b 100644 --- a/zone/tasks.h +++ b/zone/tasks.h @@ -196,8 +196,8 @@ public: void ShowClientTasks(Client *c); inline int GetActiveTaskCount() { return ActiveTaskCount; } int GetActiveTaskID(int index); - bool IsTaskActivityCompleted(int index, int ActivityID); - int GetTaskActivityDoneCount(int index, int ActivityID); + bool IsTaskActivityCompleted(TaskType type, int index, int ActivityID); + int GetTaskActivityDoneCount(TaskType type, int index, int ActivityID); int GetTaskActivityDoneCountFromTaskID(int TaskID, int ActivityID); int GetTaskStartTime(int index); void AcceptNewTask(Client *c, int TaskID, int NPCID, bool enforce_level_requirement = false); @@ -206,7 +206,7 @@ public: int IsTaskCompleted(int TaskID); bool IsTaskActive(int TaskID); bool IsTaskActivityActive(int TaskID, int ActivityID); - ActivityState GetTaskActivityState(int index, int ActivityID); + ActivityState GetTaskActivityState(TaskType type, int index, int ActivityID); void UpdateTaskActivity(Client *c, int TaskID, int ActivityID, int Count, bool ignore_quest_update = false); void ResetTaskActivity(Client *c, int TaskID, int ActivityID); void CancelTask(Client *c, int SequenceNumber, TaskType type, bool RemoveFromDB = true);