Update more functions

This commit is contained in:
Michael Cook (mackal) 2018-07-08 00:29:46 -04:00
parent 51baccc10f
commit 0c899b2caa

View File

@ -1889,7 +1889,7 @@ void ClientTaskState::IncrementDoneCount(Client *c, TaskInformation *Task, int T
// and by the 'Task Stage Completed' message // and by the 'Task Stage Completed' message
c->SendTaskActivityComplete(info->TaskID, ActivityID, TaskIndex, Task->type); c->SendTaskActivityComplete(info->TaskID, ActivityID, TaskIndex, Task->type);
// Send the updated task/activity list to the client // Send the updated task/activity list to the client
taskmanager->SendSingleActiveTaskToClient(c, ActiveQuests[TaskIndex], TaskComplete, false); taskmanager->SendSingleActiveTaskToClient(c, *info, TaskComplete, false);
// Inform the client the task has been updated, both by a chat message // Inform the client the task has been updated, both by a chat message
c->Message(0, "Your task '%s' has been updated.", Task->Title.c_str()); c->Message(0, "Your task '%s' has been updated.", Task->Title.c_str());
@ -1934,11 +1934,11 @@ void ClientTaskState::IncrementDoneCount(Client *c, TaskInformation *Task, int T
} }
} } else {
else
// Send an update packet for this single activity // Send an update packet for this single activity
taskmanager->SendTaskActivityLong(c, ActiveQuests[TaskIndex].TaskID, ActivityID, taskmanager->SendTaskActivityLong(c, info->TaskID, ActivityID, TaskIndex,
TaskIndex, Task->Activity[ActivityID].Optional); Task->Activity[ActivityID].Optional);
}
} }
void ClientTaskState::RewardTask(Client *c, TaskInformation *Task) { void ClientTaskState::RewardTask(Client *c, TaskInformation *Task) {
@ -2049,6 +2049,9 @@ void ClientTaskState::RewardTask(Client *c, TaskInformation *Task) {
bool ClientTaskState::IsTaskActive(int TaskID) bool ClientTaskState::IsTaskActive(int TaskID)
{ {
if (ActiveTask.TaskID == TaskID)
return true;
if (ActiveTaskCount == 0 || TaskID == 0) if (ActiveTaskCount == 0 || TaskID == 0)
return false; return false;
@ -2057,9 +2060,6 @@ bool ClientTaskState::IsTaskActive(int TaskID)
return true; return true;
} }
if (ActiveTask.TaskID == TaskID)
return true;
return false; return false;
} }
@ -2089,116 +2089,166 @@ void ClientTaskState::FailTask(Client *c, int TaskID)
} }
} }
// TODO: tasks // TODO: Shared tasks
bool ClientTaskState::IsTaskActivityActive(int TaskID, int ActivityID) { bool ClientTaskState::IsTaskActivityActive(int TaskID, int ActivityID)
{
Log(Logs::General, Logs::Tasks, "[UPDATE] ClientTaskState IsTaskActivityActive(%i, %i).", TaskID, ActivityID); Log(Logs::General, Logs::Tasks, "[UPDATE] ClientTaskState IsTaskActivityActive(%i, %i).", TaskID, ActivityID);
// Quick sanity check // Quick sanity check
if(ActivityID<0) return false; if (ActivityID < 0)
if(ActiveTaskCount == 0) return false; return false;
if (ActiveTaskCount == 0 && ActiveTask.TaskID == TASKSLOTEMPTY)
return false;
int ActiveTaskIndex = -1; int ActiveTaskIndex = -1;
auto type = TaskType::Task;
for(int i=0; i<MAXACTIVEQUESTS; i++) { if (ActiveTask.TaskID == TaskID)
if(ActiveQuests[i].TaskID==TaskID) { ActiveTaskIndex = 0;
ActiveTaskIndex = i;
break; if (ActiveTaskIndex == -1) {
for (int i = 0; i < MAXACTIVEQUESTS; i++) {
if (ActiveQuests[i].TaskID == TaskID) {
ActiveTaskIndex = i;
type = TaskType::Quest;
break;
}
} }
} }
// The client does not have this task // The client does not have this task
if(ActiveTaskIndex == -1) return false; if (ActiveTaskIndex == -1)
return false;
TaskInformation* Task = taskmanager->Tasks[ActiveQuests[ActiveTaskIndex].TaskID]; auto info = GetClientTaskInfo(type, ActiveTaskIndex);
if (info == nullptr)
return false;
TaskInformation *Task = taskmanager->Tasks[info->TaskID];
// The task is invalid // The task is invalid
if(Task==nullptr) return false; if (Task == nullptr)
return false;
// The ActivityID is out of range // The ActivityID is out of range
if(ActivityID >= Task->ActivityCount) return false; if (ActivityID >= Task->ActivityCount)
return false;
Log(Logs::General, Logs::Tasks, "[UPDATE] ClientTaskState IsTaskActivityActive(%i, %i). State is %i ", TaskID, ActivityID, Log(Logs::General, Logs::Tasks, "[UPDATE] ClientTaskState IsTaskActivityActive(%i, %i). State is %i ", TaskID,
ActiveQuests[ActiveTaskIndex].Activity[ActivityID].State); ActivityID, info->Activity[ActivityID].State);
return (ActiveQuests[ActiveTaskIndex].Activity[ActivityID].State == ActivityActive);
return (info->Activity[ActivityID].State == ActivityActive);
} }
void ClientTaskState::UpdateTaskActivity(Client *c, int TaskID, int ActivityID, int Count, bool ignore_quest_update /*= false*/) void ClientTaskState::UpdateTaskActivity(Client *c, int TaskID, int ActivityID, int Count, bool ignore_quest_update /*= false*/)
{ {
Log(Logs::General, Logs::Tasks, "[UPDATE] ClientTaskState UpdateTaskActivity(%i, %i, %i).", TaskID, ActivityID, Count); Log(Logs::General, Logs::Tasks, "[UPDATE] ClientTaskState UpdateTaskActivity(%i, %i, %i).", TaskID, ActivityID,
Count);
// Quick sanity check // Quick sanity check
if((ActivityID<0) || (ActiveTaskCount==0)) return; if (ActivityID < 0 || (ActiveTaskCount == 0 && ActiveTask.TaskID == TASKSLOTEMPTY))
return;
int ActiveTaskIndex = -1; int ActiveTaskIndex = -1;
auto type = TaskType::Task;
for (int i = 0; i < MAXACTIVEQUESTS; i++) { if (ActiveTask.TaskID == TaskID)
if (ActiveQuests[i].TaskID == TaskID) { ActiveTaskIndex = 0;
ActiveTaskIndex = i;
break; if (ActiveTaskIndex == -1) {
for (int i = 0; i < MAXACTIVEQUESTS; i++) {
if (ActiveQuests[i].TaskID == TaskID) {
ActiveTaskIndex = i;
type = TaskType::Quest;
break;
}
} }
} }
// The client does not have this task // The client does not have this task
if(ActiveTaskIndex == -1) return; if (ActiveTaskIndex == -1)
return;
TaskInformation* Task = taskmanager->Tasks[ActiveQuests[ActiveTaskIndex].TaskID]; auto info = GetClientTaskInfo(type, ActiveTaskIndex);
if (info == nullptr)
return;
TaskInformation *Task = taskmanager->Tasks[info->TaskID];
// The task is invalid // The task is invalid
if(Task==nullptr) return; if (Task == nullptr)
return;
// The ActivityID is out of range // The ActivityID is out of range
if(ActivityID >= Task->ActivityCount) return; if (ActivityID >= Task->ActivityCount)
return;
// The Activity is not currently active // The Activity is not currently active
if(ActiveQuests[ActiveTaskIndex].Activity[ActivityID].State != ActivityActive) return; if (info->Activity[ActivityID].State != ActivityActive)
return;
Log(Logs::General, Logs::Tasks, "[UPDATE] Increment done count on UpdateTaskActivity"); Log(Logs::General, Logs::Tasks, "[UPDATE] Increment done count on UpdateTaskActivity");
IncrementDoneCount(c, Task, ActiveTaskIndex, ActivityID, Count, ignore_quest_update); IncrementDoneCount(c, Task, ActiveTaskIndex, ActivityID, Count, ignore_quest_update);
} }
void ClientTaskState::ResetTaskActivity(Client *c, int TaskID, int ActivityID) { void ClientTaskState::ResetTaskActivity(Client *c, int TaskID, int ActivityID)
{
Log(Logs::General, Logs::Tasks, "[UPDATE] ClientTaskState UpdateTaskActivity(%i, %i, 0).", TaskID, ActivityID); Log(Logs::General, Logs::Tasks, "[UPDATE] ClientTaskState UpdateTaskActivity(%i, %i, 0).", TaskID, ActivityID);
// Quick sanity check // Quick sanity check
if((ActivityID<0) || (ActiveTaskCount==0)) return; if (ActivityID < 0 || (ActiveTaskCount == 0 && ActiveTask.TaskID == TASKSLOTEMPTY))
return;
int ActiveTaskIndex = -1; int ActiveTaskIndex = -1;
auto type = TaskType::Task;
for(int i=0; i<MAXACTIVEQUESTS; i++) { if (ActiveTask.TaskID == TaskID)
if(ActiveQuests[i].TaskID==TaskID) { ActiveTaskIndex = 0;
ActiveTaskIndex = i;
break; if (ActiveTaskIndex == -1) {
for (int i = 0; i < MAXACTIVEQUESTS; i++) {
if (ActiveQuests[i].TaskID == TaskID) {
ActiveTaskIndex = i;
type = TaskType::Quest;
break;
}
} }
} }
// The client does not have this task // The client does not have this task
if(ActiveTaskIndex == -1) return; if (ActiveTaskIndex == -1)
return;
TaskInformation* Task = taskmanager->Tasks[ActiveQuests[ActiveTaskIndex].TaskID]; auto info = GetClientTaskInfo(type, ActiveTaskIndex);
if (info == nullptr)
return;
TaskInformation *Task = taskmanager->Tasks[info->TaskID];
// The task is invalid // The task is invalid
if(Task==nullptr) return; if (Task == nullptr)
return;
// The ActivityID is out of range // The ActivityID is out of range
if(ActivityID >= Task->ActivityCount) return; if (ActivityID >= Task->ActivityCount)
return;
// The Activity is not currently active // The Activity is not currently active
if(ActiveQuests[ActiveTaskIndex].Activity[ActivityID].State != ActivityActive) return; if (info->Activity[ActivityID].State != ActivityActive)
return;
Log(Logs::General, Logs::Tasks, "[UPDATE] ResetTaskActivityCount"); Log(Logs::General, Logs::Tasks, "[UPDATE] ResetTaskActivityCount");
ActiveQuests[ActiveTaskIndex].Activity[ActivityID].DoneCount = 0; info->Activity[ActivityID].DoneCount = 0;
ActiveQuests[ActiveTaskIndex].Activity[ActivityID].Updated=true; info->Activity[ActivityID].Updated = true;
// Send an update packet for this single activity // Send an update packet for this single activity
taskmanager->SendTaskActivityLong(c, ActiveQuests[ActiveTaskIndex].TaskID, ActivityID, taskmanager->SendTaskActivityLong(c, info->TaskID, ActivityID, ActiveTaskIndex,
ActiveTaskIndex, Task->Activity[ActivityID].Optional); Task->Activity[ActivityID].Optional);
} }
void ClientTaskState::ShowClientTasks(Client *c) { void ClientTaskState::ShowClientTasks(Client *c) {