diff options
-rw-r--r-- | sql/updates/7417_characters_channels.sql | 1 | ||||
-rw-r--r-- | sql/updates/7417_world_trinity_string.sql | 1 | ||||
-rw-r--r-- | src/game/Channel.cpp | 20 | ||||
-rw-r--r-- | src/game/Channel.h | 1 | ||||
-rw-r--r-- | src/game/Language.h | 3 | ||||
-rw-r--r-- | src/game/ObjectMgr.cpp | 2 |
6 files changed, 21 insertions, 7 deletions
diff --git a/sql/updates/7417_characters_channels.sql b/sql/updates/7417_characters_channels.sql new file mode 100644 index 00000000000..f61a810da18 --- /dev/null +++ b/sql/updates/7417_characters_channels.sql @@ -0,0 +1 @@ +ALTER TABLE channels ADD COLUMN m_public tinyint(1) NOT NULL DEFAULT 1 AFTER m_moderate;
\ No newline at end of file diff --git a/sql/updates/7417_world_trinity_string.sql b/sql/updates/7417_world_trinity_string.sql new file mode 100644 index 00000000000..105be373309 --- /dev/null +++ b/sql/updates/7417_world_trinity_string.sql @@ -0,0 +1 @@ +INSERT INTO trinity_string (entry, content_default) VALUES (5022, "Channel password not changed due to channel being marked public. GM Powers required.");
\ No newline at end of file diff --git a/src/game/Channel.cpp b/src/game/Channel.cpp index 3b32f29371c..5b0ce8ffa04 100644 --- a/src/game/Channel.cpp +++ b/src/game/Channel.cpp @@ -53,7 +53,7 @@ Channel::Channel(const std::string& name, uint32 channel_id, uint32 Team) //load not built in channel if saved std::string _name(name); CharacterDatabase.escape_string(_name); - QueryResult_AutoPtr result = CharacterDatabase.PQuery("SELECT m_name, m_team, m_announce, m_moderate, m_password, BannedList FROM channels WHERE m_name = '%s' AND m_team = '%u'", _name.c_str(), m_Team); + QueryResult_AutoPtr result = CharacterDatabase.PQuery("SELECT m_name, m_team, m_announce, m_moderate, m_public, m_password, BannedList FROM channels WHERE m_name = '%s' AND m_team = '%u'", _name.c_str(), m_Team); if (result)//load { Field *fields = result->Fetch(); @@ -61,8 +61,9 @@ Channel::Channel(const std::string& name, uint32 channel_id, uint32 Team) uint32 db_team = fields[1].GetUInt32(); m_announce = fields[2].GetBool(); m_moderate = fields[3].GetBool(); - m_password = fields[4].GetString(); - const char* db_BannedList = fields[5].GetString(); + m_public = fields[4].GetBool(); + m_password = fields[5].GetString(); + const char* db_BannedList = fields[6].GetString(); m_IsSaved = true; @@ -84,8 +85,8 @@ Channel::Channel(const std::string& name, uint32 channel_id, uint32 Team) else // save { // _name is already escaped at this point. - if (CharacterDatabase.PExecute("INSERT INTO channels (m_name, m_team, m_announce, m_moderate, m_password) " - "VALUES ('%s', '%u', '1', '0', '')", _name.c_str(), m_Team)) + if (CharacterDatabase.PExecute("INSERT INTO channels (m_name, m_team, m_announce, m_moderate, m_public, m_password) " + "VALUES ('%s', '%u', '1', '0', '1', '')", _name.c_str(), m_Team)) { sLog.outDebug("New Channel(%s) saved", name.c_str()); m_IsSaved = true; @@ -360,11 +361,20 @@ void Channel::UnBan(uint64 good, const char *badname) void Channel::Password(uint64 p, const char *pass) { + std::string plName; uint32 sec = 0; Player *plr = objmgr.GetPlayer(p); if(plr) sec = plr->GetSession()->GetSecurity(); + if(!m_public && sec <= SEC_MODERATOR) + { + plName = plr->GetName(); + normalizePlayerName(plName); + PSendSysMessage(LANG_CHANNEL_NOT_PUBLIC, plName.c_str()); + return; + } + if(!IsOn(p)) { WorldPacket data; diff --git a/src/game/Channel.h b/src/game/Channel.h index cf2ba8a1020..680cfed3296 100644 --- a/src/game/Channel.h +++ b/src/game/Channel.h @@ -153,6 +153,7 @@ class Channel BannedList banned; bool m_announce; bool m_moderate; + bool m_public; std::string m_name; std::string m_password; uint8 m_flags; diff --git a/src/game/Language.h b/src/game/Language.h index 86235315d27..08ec029d5a3 100644 --- a/src/game/Language.h +++ b/src/game/Language.h @@ -877,7 +877,8 @@ enum TrinityStrings LANG_MOUNTABLE = 5019, LANG_NPCINFO_PHASEMASK = 5020, LANG_NPCINFO_ARMOR = 5021, - // Room for more Trinity strings 5022-9999 + LANG_CHANNEL_NOT_PUBLIC = 5022, + // Room for more Trinity strings 5023-9999 // Used for GM Announcements LANG_GM_BROADCAST = 6613, LANG_GM_NOTIFY = 6614, diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 898c20b5c42..cdc267ad1bd 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -8587,7 +8587,7 @@ bool ObjectMgr::IsVendorItemValid( uint32 vendor_entry, uint32 item_id, int32 ma return false; } - if(vItems->GetItemCount() > MAX_VENDOR_ITEMS) + if(vItems->GetItemCount() >= MAX_VENDOR_ITEMS) { if(pl) ChatHandler(pl).SendSysMessage(LANG_COMMAND_ADDVENDORITEMITEMS); |