From 66dda2f107af678e7941973f7f40ccf7e2dcfc20 Mon Sep 17 00:00:00 2001 From: Barathos <169070864+Barathos@users.noreply.github.com> Date: Fri, 13 Jun 2025 14:31:35 -0700 Subject: [PATCH] Add quest::uncompletetask to quest API --- CMakeSettings.json | 15 +++++++++++++++ zone/embparser_api.cpp | 6 ++++++ zone/lua_general.cpp | 5 +++++ zone/questmgr.cpp | 16 ++++++++++++++++ zone/questmgr.h | 1 + 5 files changed, 43 insertions(+) create mode 100644 CMakeSettings.json diff --git a/CMakeSettings.json b/CMakeSettings.json new file mode 100644 index 000000000..ad712438e --- /dev/null +++ b/CMakeSettings.json @@ -0,0 +1,15 @@ +{ + "configurations": [ + { + "name": "x64-Debug", + "generator": "Visual Studio 17 2022", + "configurationType": "Debug", + "inheritEnvironments": [ "msvc_x64_x64" ], + "buildRoot": "${projectDir}\\out\\build\\${name}", + "installRoot": "${projectDir}\\out\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "" + } + ] +} \ No newline at end of file diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 91e194a31..9885d9d77 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -1271,6 +1271,11 @@ void Perl__failtask(int task_id) quest_manager.failtask(task_id); } +void Perl__uncompletetask(int task_id) +{ + quest_manager.uncompletetask(task_id); +} + int Perl__tasktimeleft(int task_id) { return quest_manager.tasktimeleft(task_id); @@ -6628,6 +6633,7 @@ void perl_register_quest() package.add("faction", (void(*)(int, int, int))&Perl__faction); package.add("factionvalue", &Perl__FactionValue); package.add("failtask", &Perl__failtask); + package.add("uncompletetask", &Perl__uncompletetask); package.add("firsttaskinset", &Perl__firsttaskinset); package.add("follow", (void(*)(int))&Perl__follow); package.add("follow", (void(*)(int, int))&Perl__follow); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 8a2e2f21d..91aa77722 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -722,6 +722,10 @@ void lua_fail_task(int task_id) { quest_manager.failtask(task_id); } +void lua_uncomplete_task(int task_id) { + quest_manager.uncompletetask(task_id); +} + int lua_task_time_left(int task_id) { return quest_manager.tasktimeleft(task_id); } @@ -5970,6 +5974,7 @@ luabind::scope lua_register_general() { luabind::def("reset_task_activity", &lua_reset_task_activity), luabind::def("assign_task", &lua_assign_task), luabind::def("fail_task", &lua_fail_task), + luabind::def("uncomplete_task", &lua_uncomplete_task), luabind::def("task_time_left", &lua_task_time_left), luabind::def("is_task_completed", &lua_is_task_completed), luabind::def("enabled_task_count", &lua_enabled_task_count), diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index b9807703e..db74610e8 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -40,6 +40,7 @@ #include "dialogue_window.h" #include "../common/repositories/account_repository.h" +#include "../common/repositories/completed_tasks_repository.h" #include "../common/repositories/tradeskill_recipe_repository.h" #include "../common/repositories/instance_list_repository.h" #include "../common/repositories/grid_entries_repository.h" @@ -2958,6 +2959,21 @@ void QuestManager::failtask(int taskid) { initiator->FailTask(taskid); } +void QuestManager::uncompletetask(int task_id) { + QuestManagerCurrentQuestVars(); + + if (RuleB(TaskSystem, EnableTaskSystem) && initiator) { + CompletedTasksRepository::DeleteWhere( + database, + fmt::format( + "charid = {} AND taskid = {}", + initiator->CharacterID(), + task_id + ) + ); + } +} + int QuestManager::tasktimeleft(int taskid) { QuestManagerCurrentQuestVars(); diff --git a/zone/questmgr.h b/zone/questmgr.h index 5148b44f5..e94d4bf34 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -224,6 +224,7 @@ public: void resettaskactivity(int task, int activity); void assigntask(int taskid, bool enforce_level_requirement = false); void failtask(int taskid); + void uncompletetask(int task_id); int tasktimeleft(int taskid); bool istaskcompleted(int task_id); bool aretaskscompleted(const std::vector& task_ids);