mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 21:01:29 +00:00
[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:
parent
4f0e9945c6
commit
c79fbb99aa
@ -2196,58 +2196,26 @@ void ClientTaskState::RemoveTask(Client *client, int sequence_number, TaskType t
|
||||
|
||||
void ClientTaskState::RemoveTaskByTaskID(Client *client, uint32 task_id)
|
||||
{
|
||||
auto task_type = 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) {
|
||||
switch (task_manager->GetTaskType(task_id)) {
|
||||
case TaskType::Task: {
|
||||
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);
|
||||
client->QueuePacket(outapp);
|
||||
safe_delete(outapp);
|
||||
m_active_task.task_id = TASKSLOTEMPTY;
|
||||
CancelTask(client, TASKSLOTTASK, TaskType::Task, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TaskType::Shared: {
|
||||
if (m_active_shared_task.task_id == task_id) {
|
||||
auto outapp = new EQApplicationPacket(OP_CancelTask, sizeof(CancelTask_Struct));
|
||||
CancelTask_Struct *cts = (CancelTask_Struct *) outapp->pBuffer;
|
||||
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;
|
||||
LogTasks("[UPDATE] RemoveTaskByTaskID found Shared Task [{}]", task_id);
|
||||
CancelTask(client, TASKSLOTSHAREDTASK, TaskType::Shared, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TaskType::Quest: {
|
||||
for (int active_quest = 0; active_quest < MAXACTIVEQUESTS; active_quest++) {
|
||||
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);
|
||||
if (m_active_quests[active_quest].task_id == task_id) {
|
||||
LogTasks("[UPDATE] RemoveTaskByTaskID found Quest [{}] at index [{}]", task_id, active_quest);
|
||||
m_active_quests[active_quest].task_id = TASKSLOTEMPTY;
|
||||
m_active_task_count--;
|
||||
client->QueuePacket(outapp);
|
||||
safe_delete(outapp);
|
||||
CancelTask(client, active_quest, TaskType::Quest, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user