[Tasks] Let task completion event block task rewards (#2511)

Returning non-zero from EVENT_TASK_COMPLETE will prevent task rewards
and completion emote. This is necessary for a DoN mission which scripts
a mission failure but still gives the lockout.
This commit is contained in:
hg 2022-10-29 20:46:00 -04:00 committed by GitHub
parent 9e836a9780
commit 43ec9dc815
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 5 deletions

View File

@ -908,7 +908,7 @@ int ClientTaskState::IncrementDoneCount(
AddReplayTimer(client, *info, *task_data);
}
DispatchEventTaskComplete(client, *info, activity_id);
int event_res = DispatchEventTaskComplete(client, *info, activity_id);
/* QS: PlayerLogTaskUpdates :: Complete */
if (RuleB(QueryServ, PlayerLogTaskUpdates)) {
@ -925,7 +925,11 @@ int ClientTaskState::IncrementDoneCount(
client->SendTaskActivityComplete(info->task_id, 0, task_index, task_data->type, 0);
// If Experience and/or cash rewards are set, reward them from the task even if reward_method is METHODQUEST
// do not reward client if EVENT_TASK_COMPLETE returns non-zero
if (event_res == 0)
{
RewardTask(client, task_data, *info);
}
//RemoveTask(c, TaskIndex);
// shared tasks linger at the completion step and do not get removed from the task window unlike quests/task
@ -951,7 +955,7 @@ int ClientTaskState::IncrementDoneCount(
return count;
}
void 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(
"{} {} {}",
@ -959,7 +963,7 @@ void ClientTaskState::DispatchEventTaskComplete(Client* client, ClientTaskInform
info.activity[activity_id].activity_id,
info.task_id
);
parse->EventPlayer(EVENT_TASK_COMPLETE, client, export_string, 0);
return parse->EventPlayer(EVENT_TASK_COMPLETE, client, export_string, 0);
}
void ClientTaskState::RewardTask(Client *c, const TaskInformation *ti, ClientTaskInformation& client_task)

View File

@ -106,7 +106,7 @@ private:
void AddReplayTimer(Client *client, ClientTaskInformation& client_task, const TaskInformation& task);
bool CanUpdate(Client* client, const TaskUpdateFilter& filter, int task_id,
const ActivityInformation& activity, const ClientActivityInformation& client_activity) const;
void DispatchEventTaskComplete(Client* client, ClientTaskInformation& client_task, int activity_id);
int DispatchEventTaskComplete(Client* client, ClientTaskInformation& client_task, int activity_id);
std::pair<int, int> FindTask(Client* client, const TaskUpdateFilter& filter) const;
void RecordCompletedTask(uint32_t character_id, const TaskInformation& task, const ClientTaskInformation& client_task);
void UpdateTasksOnKill(Client* client, Client* exp_client, NPC* npc);