mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 17:51:28 +00:00
Update more functions
This commit is contained in:
parent
51baccc10f
commit
0c899b2caa
156
zone/tasks.cpp
156
zone/tasks.cpp
@ -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) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user