mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 09:31:30 +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)
|
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user