[Quest API] (Performance) Check task events exist before export and execute (#2883)

* [Quest API] Optionally parse task events

- Optionally parses these events instead of always doing so.

* Update task_client_state.cpp

* Cleanup

* Update task_client_state.cpp

* [Quest API] Optionally parse task events

- Optionally parses these events instead of always doing so.

* Update task_client_state.cpp

* Cleanup
This commit is contained in:
Alex King 2023-02-12 23:48:51 -05:00 committed by GitHub
parent 7099e17c7e
commit 3813162bac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 66 additions and 36 deletions

View File

@ -565,17 +565,33 @@ int ClientTaskState::UpdateTasks(Client* client, const TaskUpdateFilter& filter,
if (CanUpdate(client, filter, client_task.task_id, activity, client_activity)) if (CanUpdate(client, filter, client_task.task_id, activity, client_activity))
{ {
auto args = fmt::format("{} {} {}", count, client_activity.activity_id, client_task.task_id); if (parse->PlayerHasQuestSub(EVENT_TASK_BEFORE_UPDATE)) {
if (parse->EventPlayer(EVENT_TASK_BEFORE_UPDATE, client, args, 0) != 0) const auto& export_string = fmt::format(
{ "{} {} {}",
LogTasks("client [{}] task [{}]-[{}] update prevented by quest", count,
client->GetName(), client_task.task_id, client_activity.activity_id); client_activity.activity_id,
client_task.task_id
);
continue; if (parse->EventPlayer(EVENT_TASK_BEFORE_UPDATE, client, export_string, 0) != 0) {
LogTasks(
"client [{}] task [{}]-[{}] update prevented by quest",
client->GetName(),
client_task.task_id,
client_activity.activity_id
);
continue;
}
} }
LogTasks("client [{}] task [{}] activity [{}] increment [{}]", LogTasks(
client->GetName(), client_task.task_id, client_activity.activity_id, count); "client [{}] task [{}] activity [{}] increment [{}]",
client->GetName(),
client_task.task_id,
client_activity.activity_id,
count
);
int updated = IncrementDoneCount(client, task, client_task.slot, client_activity.activity_id, count); int updated = IncrementDoneCount(client, task, client_task.slot, client_activity.activity_id, count);
max_updated = std::max(max_updated, updated); max_updated = std::max(max_updated, updated);
@ -854,13 +870,16 @@ int ClientTaskState::IncrementDoneCount(
info->activity[activity_id].done_count += count; info->activity[activity_id].done_count += count;
if (!ignore_quest_update) { if (!ignore_quest_update) {
std::string export_string = fmt::format( if (parse->PlayerHasQuestSub(EVENT_TASK_UPDATE)) {
"{} {} {}", const auto& export_string = fmt::format(
info->activity[activity_id].done_count, "{} {} {}",
info->activity[activity_id].activity_id, info->activity[activity_id].done_count,
info->task_id info->activity[activity_id].activity_id,
); info->task_id
parse->EventPlayer(EVENT_TASK_UPDATE, client, export_string, 0); );
parse->EventPlayer(EVENT_TASK_UPDATE, client, export_string, 0);
}
} }
if (task_data->type != TaskType::Shared) { if (task_data->type != TaskType::Shared) {
@ -896,12 +915,15 @@ int ClientTaskState::IncrementDoneCount(
task_manager->SendSingleActiveTaskToClient(client, *info, task_complete, false); task_manager->SendSingleActiveTaskToClient(client, *info, task_complete, false);
if (!ignore_quest_update) { if (!ignore_quest_update) {
std::string export_string = fmt::format( if (parse->PlayerHasQuestSub(EVENT_TASK_STAGE_COMPLETE)) {
"{} {}", const auto& export_string = fmt::format(
info->task_id, "{} {}",
info->activity[activity_id].activity_id info->task_id,
); info->activity[activity_id].activity_id
parse->EventPlayer(EVENT_TASK_STAGE_COMPLETE, client, export_string, 0); );
parse->EventPlayer(EVENT_TASK_STAGE_COMPLETE, client, export_string, 0);
}
} }
/* QS: PlayerLogTaskUpdates :: Update */ /* QS: PlayerLogTaskUpdates :: Update */
if (RuleB(QueryServ, PlayerLogTaskUpdates)) { if (RuleB(QueryServ, PlayerLogTaskUpdates)) {
@ -993,13 +1015,18 @@ int ClientTaskState::IncrementDoneCount(
int ClientTaskState::DispatchEventTaskComplete(Client* client, ClientTaskInformation& info, int activity_id) int ClientTaskState::DispatchEventTaskComplete(Client* client, ClientTaskInformation& info, int activity_id)
{ {
std::string export_string = fmt::format( if (parse->PlayerHasQuestSub(EVENT_TASK_COMPLETE)) {
"{} {} {}", const auto& export_string = fmt::format(
info.activity[activity_id].done_count, "{} {} {}",
info.activity[activity_id].activity_id, info.activity[activity_id].done_count,
info.task_id info.activity[activity_id].activity_id,
); info.task_id
return parse->EventPlayer(EVENT_TASK_COMPLETE, client, export_string, 0); );
return parse->EventPlayer(EVENT_TASK_COMPLETE, client, export_string, 0);
}
return 0;
} }
void ClientTaskState::RewardTask(Client *c, const TaskInformation *ti, ClientTaskInformation& client_task) void ClientTaskState::RewardTask(Client *c, const TaskInformation *ti, ClientTaskInformation& client_task)
@ -2150,12 +2177,9 @@ void ClientTaskState::AcceptNewTask(
client->MessageString(Chat::DefaultText, YOU_ASSIGNED_TASK, task->title.c_str()); client->MessageString(Chat::DefaultText, YOU_ASSIGNED_TASK, task->title.c_str());
task_manager->SaveClientState(client, this); task_manager->SaveClientState(client, this);
std::string export_string = std::to_string(task_id);
NPC *npc = entity_list.GetID(npc_type_id)->CastToNPC(); NPC *npc = entity_list.GetID(npc_type_id)->CastToNPC();
if (npc) { if (npc) {
parse->EventNPC(EVENT_TASK_ACCEPTED, npc, client, export_string, 0);
if (player_event_logs.IsEventEnabled(PlayerEvent::TASK_ACCEPT)) { if (player_event_logs.IsEventEnabled(PlayerEvent::TASK_ACCEPT)) {
auto e = PlayerEvent::TaskAcceptEvent{ auto e = PlayerEvent::TaskAcceptEvent{
.npc_id = static_cast<uint32>(npc_type_id), .npc_id = static_cast<uint32>(npc_type_id),
@ -2165,6 +2189,10 @@ void ClientTaskState::AcceptNewTask(
}; };
RecordPlayerEventLogWithClient(client, PlayerEvent::TASK_ACCEPT, e); RecordPlayerEventLogWithClient(client, PlayerEvent::TASK_ACCEPT, e);
} }
if (parse->HasQuestSub(npc->GetNPCTypeID(), EVENT_TASK_ACCEPTED)) {
parse->EventNPC(EVENT_TASK_ACCEPTED, npc, client, std::to_string(task_id), 0);
}
} else { } else {
if (player_event_logs.IsEventEnabled(PlayerEvent::TASK_ACCEPT)) { if (player_event_logs.IsEventEnabled(PlayerEvent::TASK_ACCEPT)) {
auto e = PlayerEvent::TaskAcceptEvent{ auto e = PlayerEvent::TaskAcceptEvent{
@ -2174,9 +2202,11 @@ void ClientTaskState::AcceptNewTask(
.task_name = task_manager->GetTaskName(static_cast<uint32>(task_id)), .task_name = task_manager->GetTaskName(static_cast<uint32>(task_id)),
}; };
RecordPlayerEventLogWithClient(client, PlayerEvent::TASK_ACCEPT, e); RecordPlayerEventLogWithClient(client, PlayerEvent::TASK_ACCEPT, e);
}
} }
parse->EventPlayer(EVENT_TASK_ACCEPTED, client, export_string, 0);
if (parse->PlayerHasQuestSub(EVENT_TASK_ACCEPTED)) {
parse->EventPlayer(EVENT_TASK_ACCEPTED, client, std::to_string(task_id), 0);
}
} }
void ClientTaskState::ProcessTaskProximities(Client *client, float x, float y, float z) void ClientTaskState::ProcessTaskProximities(Client *client, float x, float y, float z)

View File

@ -96,9 +96,9 @@ void Client::SendTaskActivityComplete(
void Client::SendTaskFailed(int task_id, int task_index, TaskType task_type) void Client::SendTaskFailed(int task_id, int task_index, TaskType task_type)
{ {
// 0x54eb if (parse->PlayerHasQuestSub(EVENT_TASK_FAIL)) {
std::string export_string = fmt::format("{}", task_id); parse->EventPlayer(EVENT_TASK_FAIL, this, std::to_string(task_id), 0);
parse->EventPlayer(EVENT_TASK_FAIL, this, export_string, 0); }
TaskActivityComplete_Struct *task_activity_complete; TaskActivityComplete_Struct *task_activity_complete;