diff --git a/sql/base/world_database.sql b/sql/base/world_database.sql index 120e47ae6d..d75ba03330 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 0000000000..227fb43fd4 --- /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 81b4a475ab..018e4da0ad 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 876cef6cfb..12e5bff8d4 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 8a42be87f4..2e05078f51 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 e91c0763ae..9ff32616dc 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 30fd869def..a0199a4d2d 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 92e53e7ef8..d442ad1844 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 3f6f6d7563..814e7073de 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