diff options
-rw-r--r-- | sql/base/auth_database.sql | 3 | ||||
-rw-r--r-- | sql/updates/auth/master/2019_07_16_00_auth.sql | 6 | ||||
-rw-r--r-- | sql/updates/world/master/2021_12_16_03_world_2019_07_16_00_world.sql | 7 | ||||
-rw-r--r-- | src/server/game/Accounts/RBAC.h | 3 | ||||
-rw-r--r-- | src/server/game/World/World.h | 2 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_debug.cpp | 40 |
6 files changed, 60 insertions, 1 deletions
diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql index 996dc059c59..bb643b79876 100644 --- a/sql/base/auth_database.sql +++ b/sql/base/auth_database.sql @@ -1250,6 +1250,7 @@ INSERT INTO `rbac_linked_permissions` VALUES (196,875), (196,876), (196,877), +(196,878), (196,881), (196,882), (197,232), @@ -2165,6 +2166,7 @@ INSERT INTO `rbac_permissions` VALUES (875,'Command: lookup map id'), (876,'Command: lookup item id'), (877,'Command: lookup quest id'), +(878,'Command: debug questreset'), (881,'Command: reload vehicle_template'), (882,'Command: reload spell_script_names'); /*!40000 ALTER TABLE `rbac_permissions` ENABLE KEYS */; @@ -2407,6 +2409,7 @@ INSERT INTO `updates` VALUES ('2019_06_21_00_auth.sql','C519239830204B68E710F698BC0C9E89B6D5FD24','ARCHIVED','2019-06-20 19:43:50',0), ('2019_07_14_00_auth.sql','94C2B877BD906538E1E008350BEA8D8B58E0A158','ARCHIVED','2019-07-14 19:22:08',0), ('2019_07_15_00_auth.sql','3649248104CFEC70553016273069A9AE744798E3','ARCHIVED','2019-07-15 19:22:08',0), +('2019_07_16_00_auth.sql','36CB53A9EBD64BFDCF7030083E36E534F1753773','ARCHIVED','2019-07-16 00:00:00',0), ('2019_07_26_00_auth.sql','DC9D0651602AE78B1243B40555A1A7B8447D01B2','ARCHIVED','2019-07-26 18:21:34',0), ('2019_08_11_00_auth.sql','04DCC2ABDA15BC7C015E8BFEA383C62A362B166F','ARCHIVED','2019-08-11 10:56:39',0), ('2019_08_18_00_auth.sql','0479A04B669A67D2E5A498CFB91507E742EFB34F','ARCHIVED','2019-08-17 11:51:02',0), diff --git a/sql/updates/auth/master/2019_07_16_00_auth.sql b/sql/updates/auth/master/2019_07_16_00_auth.sql new file mode 100644 index 00000000000..bbec0eb65aa --- /dev/null +++ b/sql/updates/auth/master/2019_07_16_00_auth.sql @@ -0,0 +1,6 @@ +-- +DELETE FROM `rbac_permissions` WHERE `id`=878; +INSERT INTO `rbac_permissions` (`id`,`name`) VALUES (878, 'Command: debug questreset'); + +DELETE FROM `rbac_linked_permissions` WHERE `linkedId`=878; +INSERT INTO `rbac_linked_permissions` (`id`,`linkedId`) VALUES (196,878); diff --git a/sql/updates/world/master/2021_12_16_03_world_2019_07_16_00_world.sql b/sql/updates/world/master/2021_12_16_03_world_2019_07_16_00_world.sql new file mode 100644 index 00000000000..e61738a3eaa --- /dev/null +++ b/sql/updates/world/master/2021_12_16_03_world_2019_07_16_00_world.sql @@ -0,0 +1,7 @@ +-- +DELETE FROM `command` WHERE `name`='debug questreset'; +INSERT INTO `command` (`name`,`permission`,`help`) VALUES +('debug questreset',878,'Syntax: .debug questreset <daily/weekly/monthly/all> + +Performs quest reset procedure for the specified type (or all types). +Quest pools will be re-generated, and quest completion status will be reset.'); diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index ddac66afd61..79c1446e5a7 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -783,7 +783,8 @@ enum RBACPermissions RBAC_PERM_COMMAND_LOOKUP_MAP_ID = 875, RBAC_PERM_COMMAND_LOOKUP_ITEM_ID = 876, RBAC_PERM_COMMAND_LOOKUP_QUEST_ID = 877, - // 878-879 previously used, do not reuse + RBAC_PERM_COMMAND_DEBUG_QUESTRESET = 878, + // 879 previously used, do not reuse RBAC_PERM_COMMAND_PDUMP_COPY = 880, RBAC_PERM_COMMAND_RELOAD_VEHICLE_TEMPLATE = 881, RBAC_PERM_COMMAND_RELOAD_SPELL_SCRIPT_NAMES = 882, diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 0c568b60e9c..b3f4b2f20b0 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -922,6 +922,8 @@ class TC_GAME_API World bool _guidAlert; uint32 _warnDiff; time_t _warnShutdownTime; + + friend class debug_commandscript; }; TC_GAME_API extern Realm realm; diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index 16819886ff0..6e58a7ef96c 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -32,6 +32,7 @@ EndScriptData */ #include "ChatPackets.h" #include "Conversation.h" #include "DB2Stores.h" +#include "GameTime.h" #include "GossipDef.h" #include "GridNotifiersImpl.h" #include "InstanceScript.h" @@ -55,6 +56,7 @@ EndScriptData */ #include <set> #include <sstream> +using namespace Trinity::ChatCommands; class debug_commandscript : public CommandScript { public: @@ -123,6 +125,7 @@ public: { "dummy", rbac::RBAC_PERM_COMMAND_DEBUG_DUMMY, false, &HandleDebugDummyCommand, "" }, { "asan", rbac::RBAC_PERM_COMMAND_DEBUG_ASAN, true, nullptr, "", debugAsanCommandTable }, { "guidlimits", rbac::RBAC_PERM_COMMAND_DEBUG, true, &HandleDebugGuidLimitsCommand, "" }, + { "questreset", rbac::RBAC_PERM_COMMAND_DEBUG_QUESTRESET, true, &HandleDebugQuestResetCommand, "" } }; static std::vector<ChatCommand> commandTable = { @@ -1462,6 +1465,43 @@ public: return true; } + static bool HandleDebugQuestResetCommand(ChatHandler* handler, std::string arg) + { + if (!Utf8ToUpperOnlyLatin(arg)) + return false; + + bool daily = false, weekly = false, monthly = false; + if (arg == "ALL") + daily = weekly = monthly = true; + else if (arg == "DAILY") + daily = true; + else if (arg == "WEEKLY") + weekly = true; + else if (arg == "MONTHLY") + monthly = true; + else + return false; + + time_t const now = GameTime::GetGameTime(); + if (daily) + { + sWorld->m_NextDailyQuestReset = now; + handler->SendSysMessage("Daily quest reset scheduled for next tick."); + } + if (weekly) + { + sWorld->m_NextWeeklyQuestReset = now; + handler->SendSysMessage("Weekly quest reset scheduled for next tick."); + } + if (monthly) + { + sWorld->m_NextMonthlyQuestReset = now; + handler->SendSysMessage("Monthly quest reset scheduled for next tick."); + } + + return true; + } + static bool HandleDebugNearGraveyard(ChatHandler* handler, char const* args) { Player* player = handler->GetSession()->GetPlayer(); |