[Shared Tasks] Cross Zone Remove Fix (#1740)

* [Shared Tasks] Cross Zone Remove Fix

Why:
	The cross_zone_remove_task quest methods were not removing from
	shared_task_members database table and were not clearing shared task
	cache.  This resulted in a situation where a character could not
	request other shared tasks.

What:
	Shamelessly copied shared task logic from ClientTaskState::CancelTask
	into ClientTaskState::RemoveTaskByTaskID

* What:

Instead of copying code from CancelTask into RemoveTaskByTaskID, it is better
for code maintenance to simply call CancelTask from RemoveTaskByTaskID.
This is cleaner.

Note:  I chose to be explicit with the remove_from_db parameter, despite true
being the default.  I tend to do this to protect from the default value
changing in the future.

* [Shared Tasks] RemoveTaskByTaskID Cleanup

Removed unused variables.
Distinguished log messages for Shared Tasks from regular Tasks.
This commit is contained in:
mmcgarvey 2021-12-23 15:20:15 -05:00 committed by GitHub
parent 4f0e9945c6
commit c79fbb99aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2196,58 +2196,26 @@ void ClientTaskState::RemoveTask(Client *client, int sequence_number, TaskType t
void ClientTaskState::RemoveTaskByTaskID(Client *client, uint32 task_id) void ClientTaskState::RemoveTaskByTaskID(Client *client, uint32 task_id)
{ {
auto task_type = task_manager->GetTaskType(task_id); switch (task_manager->GetTaskType(task_id)) {
int character_id = client->CharacterID();
CharacterActivitiesRepository::DeleteWhere(
database,
fmt::format("charid = {} AND taskid = {}", character_id, task_id)
);
CharacterTasksRepository::DeleteWhere(
database,
fmt::format("charid = {} AND taskid = {} AND type = {}", character_id, task_id, (int) task_type)
);
switch (task_type) {
case TaskType::Task: { case TaskType::Task: {
if (m_active_task.task_id == task_id) { if (m_active_task.task_id == task_id) {
auto outapp = new EQApplicationPacket(OP_CancelTask, sizeof(CancelTask_Struct));
CancelTask_Struct *cts = (CancelTask_Struct *) outapp->pBuffer;
cts->SequenceNumber = TASKSLOTTASK;
cts->type = static_cast<uint32>(task_type);
LogTasks("[UPDATE] RemoveTaskByTaskID found Task [{}]", task_id); LogTasks("[UPDATE] RemoveTaskByTaskID found Task [{}]", task_id);
client->QueuePacket(outapp); CancelTask(client, TASKSLOTTASK, TaskType::Task, true);
safe_delete(outapp);
m_active_task.task_id = TASKSLOTEMPTY;
} }
break; break;
} }
case TaskType::Shared: { case TaskType::Shared: {
if (m_active_shared_task.task_id == task_id) { if (m_active_shared_task.task_id == task_id) {
auto outapp = new EQApplicationPacket(OP_CancelTask, sizeof(CancelTask_Struct)); LogTasks("[UPDATE] RemoveTaskByTaskID found Shared Task [{}]", task_id);
CancelTask_Struct *cts = (CancelTask_Struct *) outapp->pBuffer; CancelTask(client, TASKSLOTSHAREDTASK, TaskType::Shared, true);
cts->SequenceNumber = TASKSLOTSHAREDTASK;
cts->type = static_cast<uint32>(task_type);
LogTasks("[UPDATE] RemoveTaskByTaskID found Task [{}]", task_id);
client->QueuePacket(outapp);
safe_delete(outapp);
m_active_shared_task.task_id = TASKSLOTEMPTY;
} }
break; break;
} }
case TaskType::Quest: { case TaskType::Quest: {
for (int active_quest = 0; active_quest < MAXACTIVEQUESTS; active_quest++) { for (int active_quest = 0; active_quest < MAXACTIVEQUESTS; active_quest++) {
if (m_active_quests[active_quest].task_id == task_id) { if (m_active_quests[active_quest].task_id == task_id) {
auto outapp = new EQApplicationPacket(OP_CancelTask, sizeof(CancelTask_Struct));
CancelTask_Struct *cts = (CancelTask_Struct *) outapp->pBuffer;
cts->SequenceNumber = active_quest;
cts->type = static_cast<uint32>(task_type);
LogTasks("[UPDATE] RemoveTaskByTaskID found Quest [{}] at index [{}]", task_id, active_quest); LogTasks("[UPDATE] RemoveTaskByTaskID found Quest [{}] at index [{}]", task_id, active_quest);
m_active_quests[active_quest].task_id = TASKSLOTEMPTY; CancelTask(client, active_quest, TaskType::Quest, true);
m_active_task_count--;
client->QueuePacket(outapp);
safe_delete(outapp);
} }
} }
} }