Update IsTaskActivityCompleted, GetTaskActivityDoneCount, GetTaskActivityState

This commit is contained in:
Michael Cook (mackal) 2018-07-05 14:58:01 -04:00
parent cf30056cf6
commit 0600b6834a
3 changed files with 57 additions and 21 deletions

View File

@ -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); }

View File

@ -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; Activity<GetActivityCount(TaskID); Activity++) {
if(c->GetTaskActivityState(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) {
return (ActiveQuests[index].Activity[ActivityID].State == ActivityCompleted);
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;
}
ActivityState ClientTaskState::GetTaskActivityState(int index, int ActivityID) {
}
// 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) {
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){

View File

@ -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);