[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
);
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; 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,14 +870,17 @@ 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].done_count,
info->activity[activity_id].activity_id, info->activity[activity_id].activity_id,
info->task_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) {
// live messages for each increment of non-shared tasks // live messages for each increment of non-shared tasks
@ -896,13 +915,16 @@ 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->task_id,
info->activity[activity_id].activity_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)) {
std::string event_desc = StringFormat( std::string event_desc = StringFormat(
@ -993,15 +1015,20 @@ 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].done_count,
info.activity[activity_id].activity_id, info.activity[activity_id].activity_id,
info.task_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)
{ {
if (!ti || !c || client_task.was_rewarded) { if (!ti || !c || client_task.was_rewarded) {
@ -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{
@ -2175,8 +2203,10 @@ void ClientTaskState::AcceptNewTask(
}; };
RecordPlayerEventLogWithClient(client, PlayerEvent::TASK_ACCEPT, e); RecordPlayerEventLogWithClient(client, PlayerEvent::TASK_ACCEPT, e);
} }
if (parse->PlayerHasQuestSub(EVENT_TASK_ACCEPTED)) {
parse->EventPlayer(EVENT_TASK_ACCEPTED, client, std::to_string(task_id), 0);
} }
parse->EventPlayer(EVENT_TASK_ACCEPTED, client, export_string, 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;