Revert "Shared task kill update fix"

This reverts commit 91c451b6c588338357e86b85f003401b336dcca6.
This commit is contained in:
Akkadius 2021-10-01 18:42:36 -05:00
parent 91c451b6c5
commit 859751f74d

View File

@ -2739,128 +2739,110 @@ void ClientTaskState::SyncSharedTaskZoneClientDoneCountState(
void ClientTaskState::HandleUpdateTasksOnKill(Client *client, uint32 npc_type_id) void ClientTaskState::HandleUpdateTasksOnKill(Client *client, uint32 npc_type_id)
{ {
if (!HasActiveTasks()) {
// get clients to update return;
std::vector<Client *> clients_to_update = {};
// raid
Raid *raid = entity_list.GetRaidByClient(client);
if (raid) {
for (auto &e : raid->members) {
if (e.member && e.member->IsClient()) {
clients_to_update.push_back(e.member->CastToClient());
}
}
} }
// group // loop over the union of tasks and quests
if (!clients_to_update.empty()) { for (auto &active_task : m_active_tasks) {
Group *group = entity_list.GetGroupByClient(client); auto current_task = &active_task;
if (group) { if (current_task->task_id == TASKSLOTEMPTY) {
for (auto &m : group->members) {
if (m && m->IsClient()) {
clients_to_update.push_back(m->CastToClient());
}
}
}
}
// solo
if (!clients_to_update.empty()) {
clients_to_update.push_back(client);
}
for (auto &c: clients_to_update) {
if (c->ClientDataLoaded()) {
continue; continue;
} }
LogTasksDetail("[HandleUpdateTasksOnKill] Looping through client [{}]", c->GetCleanName()); // Check if there are any active kill activities for this p_task_data
auto p_task_data = task_manager->m_task_data[current_task->task_id];
if (p_task_data == nullptr) {
return;
}
// loop over the union of tasks and quests for (int activity_id = 0; activity_id < p_task_data->activity_count; activity_id++) {
for (auto &active_task : c->GetTaskState()->m_active_tasks) { ClientActivityInformation *client_activity = &current_task->activity[activity_id];
auto current_task = &active_task; ActivityInformation *activity_info = &p_task_data->activity_information[activity_id];
if (current_task->task_id == TASKSLOTEMPTY) {
// We are not interested in completed or hidden activities
if (client_activity->activity_state != ActivityActive) {
continue; continue;
} }
// Check if there are any active kill activities for this p_task_data // We are only interested in Kill activities
auto p_task_data = task_manager->m_task_data[current_task->task_id]; if (activity_info->activity_type != TaskActivityType::Kill) {
if (p_task_data == nullptr) { continue;
return;
} }
for (int activity_id = 0; activity_id < p_task_data->activity_count; activity_id++) { // Is there a zone restriction on the activity_information ?
ClientActivityInformation *client_activity = &current_task->activity[activity_id]; if (!activity_info->CheckZone(zone->GetZoneID())) {
ActivityInformation *activity_info = &p_task_data->activity_information[activity_id]; LogTasks(
"[HandleUpdateTasksOnKill] character [{}] task_id [{}] activity_id [{}] activity_type [{}] for NPC [{}] failed zone check",
// We are not interested in completed or hidden activities client->GetName(),
if (client_activity->activity_state != ActivityActive) { current_task->task_id,
continue; activity_id,
} static_cast<int32_t>(TaskActivityType::Kill),
npc_type_id
// We are only interested in Kill activities );
if (activity_info->activity_type != TaskActivityType::Kill) { continue;
continue; }
} // Is the activity_information to kill this type of NPC ?
switch (activity_info->goal_method) {
// Is there a zone restriction on the activity_information ? case METHODSINGLEID:
if (!activity_info->CheckZone(zone->GetZoneID())) { if (activity_info->goal_id != npc_type_id) {
LogTasks( LogTasksDetail("[HandleUpdateTasksOnKill] Matched single goal");
"[HandleUpdateTasksOnKill] character [{}] task_id [{}] activity_id [{}] activity_type [{}] for NPC [{}] failed zone check",
client->GetName(),
current_task->task_id,
activity_id,
static_cast<int32_t>(TaskActivityType::Kill),
npc_type_id
);
continue;
}
// Is the activity_information to kill this type of NPC ?
switch (activity_info->goal_method) {
case METHODSINGLEID:
if (activity_info->goal_id != npc_type_id) {
LogTasksDetail("[HandleUpdateTasksOnKill] Matched single goal");
continue;
}
break;
case METHODLIST:
if (!task_manager->m_goal_list_manager.IsInList(
activity_info->goal_id,
(int) npc_type_id
)) {
LogTasksDetail("[HandleUpdateTasksOnKill] Matched list goal");
continue;
}
break;
default:
// If METHODQUEST, don't updated the activity_information here
continue; continue;
} }
break;
LogTasksDetail("[HandleUpdateTasksOnKill] passed checks"); case METHODLIST:
if (!task_manager->m_goal_list_manager.IsInList(
activity_info->goal_id,
(int) npc_type_id
)) {
LogTasksDetail("[HandleUpdateTasksOnKill] Matched list goal");
continue;
}
break;
// handle actual update default:
// legacy eqemu task update logic loops through group on kill of npc to update a single task // If METHODQUEST, don't updated the activity_information here
if (p_task_data->type != TaskType::Shared) { continue;
LogTasksDetail("[HandleUpdateTasksOnKill] Non-Shared Update"); }
IncrementDoneCount(c, p_task_data, current_task->slot, activity_id);
LogTasksDetail("[HandleUpdateTasksOnKill] passed checks");
// handle actual update
// legacy eqemu task update logic loops through group on kill of npc to update a single task
if (p_task_data->type != TaskType::Shared) {
LogTasksDetail("[HandleUpdateTasksOnKill] Non-Shared Update");
Raid *raid = entity_list.GetRaidByClient(client);
if (raid) {
for (auto &e : raid->members) {
if (e.member && e.member->IsClient()) {
Client *c = e.member->CastToClient();
c->UpdateTasksOnKill(npc_type_id);
}
}
return; return;
} }
LogTasksDetail("[HandleUpdateTasksOnKill] Shared update"); Group *group = entity_list.GetGroupByClient(client);
if (group) {
// shared tasks only require one client to receive an update to propagate for (auto &m : group->members) {
if (c == client) { if (m && m->IsClient()) {
IncrementDoneCount(c, p_task_data, current_task->slot, activity_id); Client *c = m->CastToClient();
c->UpdateTasksOnKill(npc_type_id);
}
}
return;
} }
} }
LogTasksDetail("[HandleUpdateTasksOnKill] Shared update");
// shared tasks only require one client to receive an update to propagate
client->UpdateTasksOnKill(npc_type_id);
} }
} }
} }
bool ClientTaskState::HasActiveTasks() bool ClientTaskState::HasActiveTasks()
{ {
if (!task_manager) { if (!task_manager) {