diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/AuctionHouseHandler.cpp | 6 | ||||
-rw-r--r-- | src/game/ChatHandler.cpp | 19 | ||||
-rw-r--r-- | src/game/Language.h | 13 | ||||
-rw-r--r-- | src/game/Mail.cpp | 19 | ||||
-rw-r--r-- | src/game/TicketHandler.cpp | 6 | ||||
-rw-r--r-- | src/game/TradeHandler.cpp | 12 | ||||
-rw-r--r-- | src/game/World.cpp | 8 | ||||
-rw-r--r-- | src/game/World.h | 6 | ||||
-rw-r--r-- | src/trinitycore/trinitycore.conf.dist | 34 |
9 files changed, 118 insertions, 5 deletions
diff --git a/src/game/AuctionHouseHandler.cpp b/src/game/AuctionHouseHandler.cpp index 268666c5399..603a0e2bc63 100644 --- a/src/game/AuctionHouseHandler.cpp +++ b/src/game/AuctionHouseHandler.cpp @@ -57,6 +57,12 @@ void WorldSession::HandleAuctionHelloOpcode(WorldPacket & recv_data) //this void causes that auction window is opened void WorldSession::SendAuctionHello(uint64 guid, Creature* unit) { + if (GetPlayer()->getLevel() < sWorld.getConfig(CONFIG_AUCTION_LEVEL_REQ)) + { + SendNotification(GetTrinityString(LANG_AUCTION_REQ), sWorld.getConfig(CONFIG_AUCTION_LEVEL_REQ)); + return; + } + AuctionHouseEntry const* ahEntry = AuctionHouseMgr::GetAuctionHouseEntry(unit->getFaction()); if (!ahEntry) return; diff --git a/src/game/ChatHandler.cpp b/src/game/ChatHandler.cpp index befe5ee3a09..a95eee32789 100644 --- a/src/game/ChatHandler.cpp +++ b/src/game/ChatHandler.cpp @@ -199,6 +199,12 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) if (ChatHandler(this).ParseCommands(msg.c_str()) > 0) break; + if (_player->getLevel() < sWorld.getConfig(CONFIG_CHAT_SAY_LEVEL_REQ)) + { + SendNotification(GetTrinityString(LANG_SAY_REQ), sWorld.getConfig(CONFIG_CHAT_SAY_LEVEL_REQ)); + return; + } + if (!processChatmessageFurtherAfterSecurityChecks(msg, lang)) return; @@ -219,6 +225,12 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) recv_data >> to; recv_data >> msg; + if (_player->getLevel() < sWorld.getConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ)) + { + SendNotification(GetTrinityString(LANG_WHISPER_REQ), sWorld.getConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ)); + return; + } + if (!processChatmessageFurtherAfterSecurityChecks(msg, lang)) return; @@ -519,8 +531,11 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) if (!processChatmessageFurtherAfterSecurityChecks(msg, lang)) return; - if (_player->getLevel() < sWorld.getConfig(CONFIG_CHAT_CHANNEL_LEVEL_REQ)) - return; + if (_player->getLevel() < sWorld.getConfig(CONFIG_CHAT_CHANNEL_LEVEL_REQ)) + { + SendNotification(GetTrinityString(LANG_CHANNEL_REQ), sWorld.getConfig(CONFIG_CHAT_CHANNEL_LEVEL_REQ)); + return; + } if(msg.empty()) break; diff --git a/src/game/Language.h b/src/game/Language.h index 4e5e3de4a9d..c4459c18c71 100644 --- a/src/game/Language.h +++ b/src/game/Language.h @@ -884,6 +884,19 @@ enum TrinityStrings LANG_GOINFO_DISPLAYID = 5026, LANG_GOINFO_NAME = 5027, // Room for more Trinity strings 5028-9999 + + // Level requirement notifications + LANG_SAY_REQ = 6604, + LANG_WHISPER_REQ = 6605, + LANG_CHANNEL_REQ = 6606, + LANG_AUCTION_REQ = 6607, + LANG_TICKET_REQ = 6608, + LANG_TRADE_REQ = 6609, + LANG_TRADE_OTHER_REQ = 6610, + LANG_MAIL_SENDER_REQ = 6611, + LANG_MAIL_RECEIVER_REQ = 6612, + + // Used for GM Announcements LANG_GM_BROADCAST = 6613, LANG_GM_NOTIFY = 6614, diff --git a/src/game/Mail.cpp b/src/game/Mail.cpp index 667b5ef19ec..b0d75eed9c9 100644 --- a/src/game/Mail.cpp +++ b/src/game/Mail.cpp @@ -92,6 +92,12 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data ) Player* pl = _player; + if (pl->getLevel() < sWorld.getConfig(CONFIG_MAIL_LEVEL_REQ)) + { + SendNotification(GetTrinityString(LANG_MAIL_SENDER_REQ), sWorld.getConfig(CONFIG_MAIL_LEVEL_REQ)); + return; + } + uint64 rc = 0; if (normalizePlayerName(receiver)) rc = objmgr.GetPlayerGUIDByName(receiver); @@ -126,11 +132,13 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data ) uint32 rc_team = 0; uint8 mails_count = 0; //do not allow to send to one player more than 100 mails + uint8 receiveLevel = 0; if (receive) { rc_team = receive->GetTeam(); mails_count = receive->GetMailSize(); + receiveLevel = receive->getLevel(); } else { @@ -140,6 +148,11 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data ) Field *fields = result->Fetch(); mails_count = fields[0].GetUInt32(); } + if (QueryResult_AutoPtr result = CharacterDatabase.PQuery("SELECT level FROM characters WHERE guid = '%u'", GUID_LOPART(rc))) + { + Field *fields = result->Fetch(); + receiveLevel = fields[0].GetUInt8(); + } } //do not allow to have more than 100 mails in mailbox.. mails count is in opcode uint8!!! - so max can be 255.. if (mails_count > 100) @@ -154,6 +167,12 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data ) return; } + if (receiveLevel < sWorld.getConfig(CONFIG_MAIL_LEVEL_REQ)) + { + SendNotification(GetTrinityString(LANG_MAIL_RECEIVER_REQ), sWorld.getConfig(CONFIG_MAIL_LEVEL_REQ)); + return; + } + uint32 rc_account = receive ? receive->GetSession()->GetAccountId() : objmgr.GetPlayerAccountIdByGUID(rc); diff --git a/src/game/TicketHandler.cpp b/src/game/TicketHandler.cpp index e766cb2763e..520c4f61bf9 100644 --- a/src/game/TicketHandler.cpp +++ b/src/game/TicketHandler.cpp @@ -27,6 +27,12 @@ void WorldSession::HandleGMTicketCreateOpcode( WorldPacket & recv_data ) { + if (GetPlayer()->getLevel() < sWorld.getConfig(CONFIG_TICKET_LEVEL_REQ)) + { + SendNotification(GetTrinityString(LANG_TICKET_REQ), sWorld.getConfig(CONFIG_TICKET_LEVEL_REQ)); + return; + } + if(GM_Ticket *ticket = objmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID())) { WorldPacket data( SMSG_GMTICKET_CREATE, 4 ); diff --git a/src/game/TradeHandler.cpp b/src/game/TradeHandler.cpp index eebbaf0c2a5..64c1d8e904c 100644 --- a/src/game/TradeHandler.cpp +++ b/src/game/TradeHandler.cpp @@ -495,6 +495,12 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket) return; } + if (GetPlayer()->getLevel() < sWorld.getConfig(CONFIG_TRADE_LEVEL_REQ)) + { + SendNotification(GetTrinityString(LANG_TRADE_REQ), sWorld.getConfig(CONFIG_TRADE_LEVEL_REQ)); + return; + } + recvPacket >> ID; Player* pOther = ObjectAccessor::FindPlayer( ID ); @@ -553,6 +559,12 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket) return; } + if (pOther->getLevel() < sWorld.getConfig(CONFIG_TRADE_LEVEL_REQ)) + { + SendNotification(GetTrinityString(LANG_TRADE_OTHER_REQ), sWorld.getConfig(CONFIG_TRADE_LEVEL_REQ)); + return; + } + // OK start trade _player->pTrader = pOther; pOther->pTrader =_player; diff --git a/src/game/World.cpp b/src/game/World.cpp index 6a0ec55a86e..689f35f4177 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -602,7 +602,13 @@ void World::LoadConfigSettings(bool reload) m_configs[CONFIG_COMPRESSION] = 1; } m_configs[CONFIG_ADDON_CHANNEL] = sConfig.GetBoolDefault("AddonChannel", true); - m_configs[CONFIG_CHAT_CHANNEL_LEVEL_REQ] = sConfig.GetIntDefault("ChannelLevelReq", 1); + m_configs[CONFIG_CHAT_CHANNEL_LEVEL_REQ] = sConfig.GetIntDefault("ChatLevelReq.Channel", 1); + m_configs[CONFIG_CHAT_WHISPER_LEVEL_REQ] = sConfig.GetIntDefault("ChatLevelReq.Whisper", 1); + m_configs[CONFIG_CHAT_SAY_LEVEL_REQ] = sConfig.GetIntDefault("ChatLevelReq.Say", 1); + m_configs[CONFIG_TRADE_LEVEL_REQ] = sConfig.GetIntDefault("LevelReq.Trade", 1); + m_configs[CONFIG_TICKET_LEVEL_REQ] = sConfig.GetIntDefault("LevelReq.Ticket", 1); + m_configs[CONFIG_AUCTION_LEVEL_REQ] = sConfig.GetIntDefault("LevelReq.Auction", 1); + m_configs[CONFIG_MAIL_LEVEL_REQ] = sConfig.GetIntDefault("LevelReq.Mail", 1); m_configs[CONFIG_ALLOW_PLAYER_COMMANDS] = sConfig.GetBoolDefault("AllowPlayerCommands", 1); m_configs[CONFIG_GRID_UNLOAD] = sConfig.GetBoolDefault("GridUnload", true); m_configs[CONFIG_INTERVAL_SAVE] = sConfig.GetIntDefault("PlayerSaveInterval", 15 * MINUTE * IN_MILISECONDS); diff --git a/src/game/World.h b/src/game/World.h index a105a995099..ba0cd8e4f44 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -202,6 +202,12 @@ enum WorldConfigs CONFIG_CHAT_STRICT_LINK_CHECKING_SEVERITY, CONFIG_CHAT_STRICT_LINK_CHECKING_KICK, CONFIG_CHAT_CHANNEL_LEVEL_REQ, + CONFIG_CHAT_WHISPER_LEVEL_REQ, + CONFIG_CHAT_SAY_LEVEL_REQ, + CONFIG_TRADE_LEVEL_REQ, + CONFIG_TICKET_LEVEL_REQ, + CONFIG_AUCTION_LEVEL_REQ, + CONFIG_MAIL_LEVEL_REQ, CONFIG_ALLOW_PLAYER_COMMANDS, CONFIG_CORPSE_DECAY_NORMAL, CONFIG_CORPSE_DECAY_RARE, diff --git a/src/trinitycore/trinitycore.conf.dist b/src/trinitycore/trinitycore.conf.dist index b1b1d322635..43efc8e095d 100644 --- a/src/trinitycore/trinitycore.conf.dist +++ b/src/trinitycore/trinitycore.conf.dist @@ -1164,10 +1164,18 @@ ListenRange.Yell = 300 # Default: 0 (join announcement in normal way) # 1 (GM join without announcement) # -# ChannelLevelReq +# ChatLevelReq.Channel # The required level of character to be able to write in chat channels # Default: 1 (From level 1) # +# ChatLevelReq.Whisper +# The required level of character to be able to whisper +# Default: 1 (From level 1) +# +# ChatLevelReq.Say +# The required level of character to be able to say/yell/emote +# Default: 1 (From level 1) +# # AllowPlayerCommands # Allowed the players to use commands # Default: 1 (allow) @@ -1182,7 +1190,9 @@ ChatFlood.MessageDelay = 1 ChatFlood.MuteTime = 10 Channel.RestrictedLfg = 1 Channel.SilentlyGMJoin = 0 -ChannelLevelReq = 1 +ChatLevelReq.Channel = 1 +ChatLevelReq.Whisper = 1 +ChatLevelReq.Say = 1 AllowPlayerCommands = 1 ############################################################################### @@ -2146,6 +2156,22 @@ Ra.Secure = 1 # to players when they login to a newly created character. # Default: "" - send no text # +# LevelReq.Trade +# The required level of character to be able to trade +# Default: 1 (From level 1) +# +# LevelReq.Ticket +# The required level of character to be able to write tickets +# Default: 1 (From level 1) +# +# LevelReq.Auction +# The required level of character to be able to use auction +# Default: 1 (From level 1) +# +# LevelReq.Mail +# The required level of character to be able to send and receive mail +# Default: 1 (From level 1) +# ############################################################################### PlayerStart.AllReputation = 0 @@ -2164,3 +2190,7 @@ ShowKickInWorld = 0 RecordUpdateTimeDiffInterval = 60000 MinRecordUpdateTimeDiff = 100 PlayerStart.String = "" +LevelReq.Trade = 1 +LevelReq.Ticket = 1 +LevelReq.Auction = 1 +LevelReq.Mail = 1 |