aboutsummaryrefslogtreecommitdiff
path: root/src/game
diff options
context:
space:
mode:
Diffstat (limited to 'src/game')
-rw-r--r--src/game/Channel.cpp20
-rw-r--r--src/game/Channel.h1
-rw-r--r--src/game/Language.h3
-rw-r--r--src/game/ObjectMgr.cpp2
4 files changed, 19 insertions, 7 deletions
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);