diff --git a/sql/base/world_database.sql b/sql/base/world_database.sql index 120e47ae6..d75ba0333 100644 --- a/sql/base/world_database.sql +++ b/sql/base/world_database.sql @@ -27752,6 +27752,8 @@ INSERT INTO `trinity_string` (`entry`,`content_default`,`content_loc1`,`content_ (1331, 'The Frostwolf General is Dead!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), (1332, 'The Stormpike General is Dead!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), (1333, 'The Battle for Alterac Valley begins in 2 minutes.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), +(1134, 'Sending tickets is allowed.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), +(1135, 'Sending tickets is not allowed.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), (2000, '|cff00ff00New ticket from|r|cffff00ff %s.|r |cff00ff00Ticket entry:|r|cffff00ff %d.|r', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), (2001, '|cff00ff00Character|r|cffff00ff %s |r|cff00ff00edited his/her ticket:|r|cffff00ff %d.|r', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), (2002, '|cff00ff00Character|r|cffff00ff %s |r|cff00ff00abandoned ticket entry:|r|cffff00ff %d.|r', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), diff --git a/sql/updates/10431_world_trinity_string.sql b/sql/updates/10431_world_trinity_string.sql new file mode 100644 index 000000000..227fb43fd --- /dev/null +++ b/sql/updates/10431_world_trinity_string.sql @@ -0,0 +1,4 @@ +DELETE FROM `trinity_string` WHERE `entry` IN (1134, 1135); +INSERT INTO `trinity_string` (`entry`, `content_default`) VALUES +(1134, 'Sending tickets is allowed.'), +(1135, 'Sending tickets is not allowed.'); diff --git a/src/server/game/Chat/Commands/TicketCommands.cpp b/src/server/game/Chat/Commands/TicketCommands.cpp index 81b4a475a..018e4da0a 100755 --- a/src/server/game/Chat/Commands/TicketCommands.cpp +++ b/src/server/game/Chat/Commands/TicketCommands.cpp @@ -436,6 +436,11 @@ bool ChatHandler::HandleGMTicketReloadCommand(const char* /* args */) bool ChatHandler::HandleToggleGMTicketSystem(const char* /* args */) { sTicketMgr.SetStatus(!sTicketMgr.GetStatus()); + if(sTicketMgr.GetStatus()) + PSendSysMessage(LANG_ALLOW_TICKETS); + else + PSendSysMessage(LANG_DISALLOW_TICKETS); + return true; } diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 876cef6cf..12e5bff8d 100755 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -797,7 +797,9 @@ enum TrinityStrings LANG_BANLIST_MATCHINGCHARACTER = 1131, LANG_BANLIST_CHARACTERS = 1132, LANG_BANLIST_CHARACTERS_HEADER = 1133, - // Room for more level 3 1134-1199 not used + LANG_ALLOW_TICKETS = 1134, + LANG_DISALLOW_TICKETS = 1135, + // Room for more level 3 1136-1199 not used // Debug commands LANG_CINEMATIC_NOT_EXIST = 1200, diff --git a/src/server/game/Server/Protocol/Handlers/TicketHandler.cpp b/src/server/game/Server/Protocol/Handlers/TicketHandler.cpp index 8a42be87f..2e05078f5 100755 --- a/src/server/game/Server/Protocol/Handlers/TicketHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/TicketHandler.cpp @@ -28,6 +28,10 @@ void WorldSession::HandleGMTicketCreateOpcode(WorldPacket & recv_data) { + // Don't accept tickets if the ticket queue is disabled. (Ticket UI is greyed out but not fully dependable) + if (sTicketMgr.GetStatus() == GMTICKET_QUEUE_STATUS_DISABLED) + return; + if (GetPlayer()->getLevel() < sWorld.getIntConfig(CONFIG_TICKET_LEVEL_REQ)) { SendNotification(GetTrinityString(LANG_TICKET_REQ), sWorld.getIntConfig(CONFIG_TICKET_LEVEL_REQ)); @@ -144,6 +148,7 @@ void WorldSession::HandleGMTicketGetTicketOpcode(WorldPacket & /*recv_data*/) void WorldSession::HandleGMTicketSystemStatusOpcode(WorldPacket & /*recv_data*/) { WorldPacket data(SMSG_GMTICKET_SYSTEMSTATUS, 4); + // Note: This only disables the ticket UI at client side and is not fully reliable // are we sure this is a uint32? Should ask Zor data << uint32(sTicketMgr.GetStatus() ? GMTICKET_QUEUE_STATUS_ENABLED : GMTICKET_QUEUE_STATUS_DISABLED); SendPacket(&data); diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h index e91c0763a..9ff32616d 100755 --- a/src/server/game/Tickets/TicketMgr.h +++ b/src/server/game/Tickets/TicketMgr.h @@ -28,7 +28,7 @@ // from blizzard lua enum GMTicketSystemStatus { - GMTICKET_QUEUE_STATUS_DISABLED = -1, + GMTICKET_QUEUE_STATUS_DISABLED = 0, GMTICKET_QUEUE_STATUS_ENABLED = 1, }; @@ -134,6 +134,11 @@ public: uint64 GetOpenTicketCount() { return m_openTickets; } uint64 GetNextSurveyID() { return ++m_GMSurveyID; } + void Initialize() + { + SetStatus(sWorld.getBoolConfig(CONFIG_ALLOW_TICKETS)); + } + GM_Ticket *GetOldestOpenGMTicket() { for (GmTicketList::const_iterator i = m_GMTicketList.begin(); i != m_GMTicketList.end(); ++i) diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 30fd869de..a0199a4d2 100755 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -400,6 +400,9 @@ void World::LoadConfigSettings(bool reload) SetPlayerAmountLimit(sConfig.GetIntDefault("PlayerLimit", 100)); SetMotd(sConfig.GetStringDefault("Motd", "Welcome to a Trinity Core Server.")); + ///- Read ticket system setting from the config file + m_bool_configs[CONFIG_ALLOW_TICKETS] = sConfig.GetBoolDefault("AllowTickets", true); + ///- Get string for new logins (newly created characters) SetNewCharString(sConfig.GetStringDefault("PlayerStart.String", "")); @@ -1670,6 +1673,8 @@ void World::SetInitialWorldSettings() sLog.outString("Starting Arena Season..."); sGameEventMgr.StartArenaSeason(); + sTicketMgr.Initialize(); + sLog.outString("Loading World States..."); // must be loaded before battleground and outdoor PvP LoadWorldStates(); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 92e53e7ef..d442ad184 100755 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -161,6 +161,7 @@ enum WorldBoolConfigs CONFIG_CHATLOG_BGROUND, CONFIG_DUNGEON_FINDER_ENABLE, CONFIG_AUTOBROADCAST, + CONFIG_ALLOW_TICKETS, BOOL_CONFIG_VALUE_COUNT }; diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 3f6f6d756..814e7073d 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -957,6 +957,11 @@ ChatLogTimestamp = 0 # The maximum number of results a .lookup command can return # Default: 0 - unlimited # +# AllowTickets +# Allow/disallow sending new tickets. +# Default: 1 (true) +# 0 (false) +# ############################################################################### GameType = 0 @@ -1020,6 +1025,7 @@ BeepAtStart = 1 Motd = "Welcome to a Trinity Core server." Server.LoginInfo = 0 Command.LookupMaxResults = 0 +AllowTickets = 1 ############################################################################### # PLAYER INTERACTION