aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/base/auth_database.sql3
-rw-r--r--sql/updates/auth/master/2019_07_16_00_auth.sql6
-rw-r--r--sql/updates/world/master/2021_12_16_03_world_2019_07_16_00_world.sql7
-rw-r--r--src/server/game/Accounts/RBAC.h3
-rw-r--r--src/server/game/World/World.h2
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp40
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();