diff options
author | click <none@none> | 2010-12-02 03:56:57 +0100 |
---|---|---|
committer | click <none@none> | 2010-12-02 03:56:57 +0100 |
commit | 590a426d16f49a190c05e3dd1e0a3c9bc7791e5e (patch) | |
tree | 4da8631414f2f4000fae2f723c2f80881ff9e3df | |
parent | bc098658c6a6b1611ff881dd21ab113540d37935 (diff) |
And remove the patch, yeye...
--HG--
branch : trunk
-rw-r--r-- | patch | 704 |
1 files changed, 0 insertions, 704 deletions
diff --git a/patch b/patch deleted file mode 100644 index 54b189c46be..00000000000 --- a/patch +++ /dev/null @@ -1,704 +0,0 @@ -diff -r 9b294adafcde src/server/game/Chat/Channels/Channel.cpp ---- a/src/server/game/Chat/Channels/Channel.cpp Wed Dec 01 21:20:28 2010 +0200 -+++ b/src/server/game/Chat/Channels/Channel.cpp Thu Dec 02 03:14:06 2010 +0100 -@@ -21,14 +21,17 @@ - #include "ObjectMgr.h" - #include "SocialMgr.h" - #include "World.h" -+#include "DatabaseEnv.h" - - Channel::Channel(const std::string& name, uint32 channel_id, uint32 Team) -- : m_announce(true), m_moderate(false), m_name(name), m_password(""), m_flags(0), m_channelId(channel_id), m_ownerGUID(0), m_Team(Team) -+ : m_announce(true), m_ownership(true), m_name(name), m_password(""), m_flags(0), m_channelId(channel_id), m_ownerGUID(0), m_Team(Team) - { -+ m_IsSaved = false; - // set special flags if built-in channel - if (ChatChannelsEntry const* ch = sChatChannelsStore.LookupEntry(channel_id)) // check whether it's a built-in channel - { - m_announce = false; // no join/leave announces -+ m_ownership = false; // no ownership handout - - m_flags |= CHANNEL_FLAG_GENERAL; // for all built-in channels - -@@ -42,92 +45,103 @@ - m_flags |= CHANNEL_FLAG_LFG; - else // for all other channels - m_flags |= CHANNEL_FLAG_NOT_LFG; -- m_IsSaved = false; - } - else // it's custom channel - { - channel_id = 0; - m_flags |= CHANNEL_FLAG_CUSTOM; -+ -+ // If storing custom channels in the db is enabled either load or save the channel -+ if (sWorld.getBoolConfig(CONFIG_PRESERVE_CUSTOM_CHANNELS)) -+ { -+ PreparedStatement *stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_CHANNEL); -+ stmt->setString(0, name); -+ stmt->setUInt32(1, m_Team); -+ PreparedQueryResult result = CharacterDatabase.Query(stmt); - -- //load not built in channel if saved -- std::string _name(name); -- CharacterDatabase.escape_string(_name); -- QueryResult result = CharacterDatabase.PQuery("SELECT 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(); -+ m_announce = fields[0].GetBool(); -+ m_ownership = fields[1].GetBool(); -+ m_password = fields[2].GetString(); -+ const char* db_BannedList = fields[3].GetCString(); - -- if (result)//load -- { -- Field *fields = result->Fetch(); -- m_announce = fields[0].GetBool(); -- m_moderate = fields[1].GetBool(); -- m_public = fields[2].GetBool(); -- m_password = fields[3].GetString(); -- const char* db_BannedList = fields[4].GetCString(); -- -- m_IsSaved = true; -- -- if (db_BannedList) -- { -- Tokens tokens(db_BannedList, ' '); -- Tokens::iterator iter; -- for (iter = tokens.begin(); iter != tokens.end(); ++iter) -+ if (db_BannedList) - { -- uint64 banned_guid = atol(*iter); -- if (banned_guid) -+ Tokens tokens(db_BannedList, ' '); -+ Tokens::iterator iter; -+ for (iter = tokens.begin(); iter != tokens.end(); ++iter) - { -- sLog.outDebug("Channel(%s) loaded banned guid:" UI64FMTD "",name.c_str(), banned_guid); -- banned.insert(banned_guid); -+ uint64 banned_guid = atol(*iter); -+ if (banned_guid) -+ { -+ sLog.outDebug("Channel(%s) loaded banned guid:" UI64FMTD "",name.c_str(), banned_guid); -+ banned.insert(banned_guid); -+ } - } - } - } -- } -- else // save -- { -- // _name is already escaped at this point. -- 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()); -+ else // save -+ { -+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_CHANNEL); -+ stmt->setString(0, name); -+ stmt->setUInt32(1, m_Team); -+ CharacterDatabase.Execute(stmt); -+ sLog.outDebug("Channel(%s) saved in database", name.c_str()); -+ } -+ - m_IsSaved = true; - } - } - } - --bool Channel::_UpdateStringInDB(const std::string& colName, const std::string& colValue) const -+void Channel::UpdateChannelInDB() const - { -- // Prevent SQL-injection -- std::string _name(m_name); -- std::string _colValue(colValue); -- CharacterDatabase.escape_string(_colValue); -- CharacterDatabase.escape_string(_name); -- CharacterDatabase.PExecute("UPDATE channels SET %s = '%s' WHERE m_name = '%s' AND m_team = '%u'", -- colName.c_str(), _colValue.c_str(), _name.c_str(), m_Team); -- return true; --} -- --bool Channel::_UpdateIntInDB(const std::string& colName, int colValue) const --{ -- // Prevent SQL-injection -- std::string _name(m_name); -- CharacterDatabase.escape_string(_name); -- CharacterDatabase.PExecute("UPDATE channels SET %s = '%u' WHERE m_name = '%s' AND m_team = '%u'", -- colName.c_str(), colValue, _name.c_str(), m_Team); -- return true; --} -- --void Channel::_UpdateBanListInDB() const --{ -- // save banlist - if (m_IsSaved) - { - std::ostringstream banlist; - BannedList::const_iterator iter; - for (iter = banned.begin(); iter != banned.end(); ++iter) - banlist << (*iter) << " "; -+ - std::string banListStr = banlist.str(); -- if (_UpdateStringInDB("BannedList", banListStr)) -- sLog.outDebug("Channel(%s) BannedList saved", m_name.c_str()); -+ -+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_CHANNEL); -+ stmt->setBool(0, m_announce); -+ stmt->setBool(1, m_ownership); -+ stmt->setString(2, m_password); -+ stmt->setString(3, banListStr); -+ stmt->setString(4, m_name); -+ stmt->setUInt32(5, m_Team); -+ CharacterDatabase.Execute(stmt); -+ -+ sLog.outDebug("Channel(%s) updated in database", m_name.c_str()); -+ } -+ -+} -+ -+void Channel::UpdateChannelUseageInDB() const -+{ -+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_CHANNEL_USAGE); -+ stmt->setString(0, m_name); -+ stmt->setUInt32(1, m_Team); -+ CharacterDatabase.Execute(stmt); -+} -+ -+void Channel::CleanOldChannelsInDB() -+{ -+ if (sWorld.getIntConfig(CONFIG_PRESERVE_CUSTOM_CHANNEL_DURATION) > 0) -+ { -+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_CLEAN_CHANNEL); -+ stmt->setUInt32(0, sWorld.getIntConfig(CONFIG_PRESERVE_CUSTOM_CHANNEL_DURATION)*DAY); -+ CharacterDatabase.Execute(stmt); -+ -+ sLog.outDebug("Cleaned out unused custom chat channels."); - } - } - -+ - void Channel::Join(uint64 p, const char *pass) - { - WorldPacket data; -@@ -188,18 +202,20 @@ - - JoinNotify(p); - -- // if no owner first logged will become -- if (!IsConstant() && !m_ownerGUID) -+ // Custom channel handling -+ if (!IsConstant()) - { -- SetOwner(p, (players.size() > 1 ? true : false)); -- players[p].SetModerator(true); -+ // Update last_used timestamp in db -+ if(!players.empty()) -+ UpdateChannelUseageInDB(); -+ -+ // If the channel has no owner yet and ownership is allowed, set the new owner. -+ if ( !m_ownerGUID && m_ownership) -+ { -+ SetOwner(p, (players.size() > 1 ? true : false)); -+ players[p].SetModerator(true); -+ } - } -- /* -- else if (!IsConstant() && m_ownerGUID && plr && m_ownerGUID == plr->GetGUID())) -- { -- SetOwner(p, (players.size() > 1 ? true : false)); -- players[p].SetModerator(true); -- }*/ - } - - void Channel::Leave(uint64 p, bool send) -@@ -239,11 +255,18 @@ - - LeaveNotify(p); - -- if (changeowner) -+ if (!IsConstant()) - { -- uint64 newowner = !players.empty() ? players.begin()->second.player : 0; -- players[newowner].SetModerator(true); -- SetOwner(newowner); -+ // Update last_used timestamp in db -+ UpdateChannelUseageInDB(); -+ -+ // If the channel owner left and there are still players inside, pick a new owner -+ if (changeowner && m_ownership && !players.empty()) -+ { -+ uint64 newowner = players.begin()->second.player; -+ players[newowner].SetModerator(true); -+ SetOwner(newowner); -+ } - } - } - } -@@ -292,8 +315,8 @@ - { - banned.insert(bad->GetGUID()); - MakePlayerBanned(&data, bad->GetGUID(), good); -- _UpdateBanListInDB(); - -+ UpdateChannelInDB(); - } - else - MakePlayerKicked(&data, bad->GetGUID(), good); -@@ -302,9 +325,9 @@ - players.erase(bad->GetGUID()); - bad->LeftChannel(this); - -- if (changeowner) -+ if (changeowner && m_ownership && !players.empty()) - { -- uint64 newowner = !players.empty() ? good : false; -+ uint64 newowner = good; - players[newowner].SetModerator(true); - SetOwner(newowner); - } -@@ -347,8 +370,8 @@ - WorldPacket data; - MakePlayerUnbanned(&data, bad->GetGUID(), good); - SendToAll(&data); -- //save banlist -- _UpdateBanListInDB(); -+ -+ UpdateChannelInDB(); - } - } - } -@@ -363,12 +386,6 @@ - - ChatHandler chat(plr); - -- if (!m_public && sec <= SEC_MODERATOR) -- { -- chat.PSendSysMessage(LANG_CHANNEL_NOT_PUBLIC); -- return; -- } -- - if (!IsOn(p)) - { - WorldPacket data; -@@ -388,8 +405,8 @@ - WorldPacket data; - MakePasswordChanged(&data, p); - SendToAll(&data); -- if (m_IsSaved && _UpdateStringInDB("m_password", m_password)) -- sLog.outDebug("Channel(%s) password saved", m_name.c_str()); -+ -+ UpdateChannelInDB(); - } - } - -@@ -595,43 +612,8 @@ - else - MakeAnnouncementsOff(&data, p); - SendToAll(&data); -- if (m_IsSaved && _UpdateIntInDB("m_announce", m_announce ? 1 : 0)) -- sLog.outDebug("Channel(%s) announce saved", m_name.c_str()); - -- } --} -- --void Channel::Moderate(uint64 p) --{ -- uint32 sec = 0; -- Player *plr = sObjectMgr.GetPlayer(p); -- if (plr) -- sec = plr->GetSession()->GetSecurity(); -- -- if (!IsOn(p)) -- { -- WorldPacket data; -- MakeNotMember(&data); -- SendToOne(&data, p); -- } -- else if (!players[p].IsModerator() && sec < SEC_GAMEMASTER) -- { -- WorldPacket data; -- MakeNotModerator(&data); -- SendToOne(&data, p); -- } -- else -- { -- m_moderate = !m_moderate; -- -- WorldPacket data; -- if (m_moderate) -- MakeModerationOn(&data, p); -- else -- MakeModerationOff(&data, p); -- SendToAll(&data); -- if (m_IsSaved && _UpdateIntInDB("m_announce", m_announce ? 1 : 0)) -- sLog.outDebug("Channel(%s) announce saved", m_name.c_str()); -+ UpdateChannelInDB(); - } - } - -@@ -659,7 +641,7 @@ - MakeMuted(&data); - SendToOne(&data, p); - } -- else if (m_moderate && !players[p].IsModerator() && sec < SEC_GAMEMASTER) -+ else if (!players[p].IsModerator() && sec < SEC_GAMEMASTER) - { - WorldPacket data; - MakeNotModerator(&data); -@@ -768,9 +750,8 @@ - MakeOwnerChanged(&data, m_ownerGUID); - SendToAll(&data); - } -- if (m_IsSaved && _UpdateIntInDB("m_moderate", m_moderate ? 1 : 0)) -- sLog.outDebug("Channel(%s) moderate saved", m_name.c_str()); - -+ UpdateChannelInDB(); - } - } - -@@ -936,20 +917,6 @@ - *data << uint64(guid); - } - --// done 0x0F --void Channel::MakeModerationOn(WorldPacket *data, uint64 guid) --{ -- MakeNotifyPacket(data, CHAT_MODERATION_ON_NOTICE); -- *data << uint64(guid); --} -- --// done 0x10 --void Channel::MakeModerationOff(WorldPacket *data, uint64 guid) --{ -- MakeNotifyPacket(data, CHAT_MODERATION_OFF_NOTICE); -- *data << uint64(guid); --} -- - // done 0x11 - void Channel::MakeMuted(WorldPacket *data) - { -diff -r 9b294adafcde src/server/game/Chat/Channels/Channel.h ---- a/src/server/game/Chat/Channels/Channel.h Wed Dec 01 21:20:28 2010 +0200 -+++ b/src/server/game/Chat/Channels/Channel.h Thu Dec 02 03:14:06 2010 +0100 -@@ -48,8 +48,8 @@ - CHAT_MODE_CHANGE_NOTICE = 0x0C, //? - CHAT_ANNOUNCEMENTS_ON_NOTICE = 0x0D, //+ "[%s] Channel announcements enabled by %s."; - CHAT_ANNOUNCEMENTS_OFF_NOTICE = 0x0E, //+ "[%s] Channel announcements disabled by %s."; -- CHAT_MODERATION_ON_NOTICE = 0x0F, //+ "[%s] Channel moderation enabled by %s."; -- CHAT_MODERATION_OFF_NOTICE = 0x10, //+ "[%s] Channel moderation disabled by %s."; -+ // CHAT_MODERATION_ON_NOTICE = 0x0F, //+ "[%s] Channel moderation enabled by %s."; -+ // CHAT_MODERATION_OFF_NOTICE = 0x10, //+ "[%s] Channel moderation disabled by %s."; - CHAT_MUTED_NOTICE = 0x11, //+ "[%s] You do not have permission to speak."; - CHAT_PLAYER_KICKED_NOTICE = 0x12, //? "[%s] Player %s kicked by %s."; - CHAT_BANNED_NOTICE = 0x13, //+ "[%s] You are banned from that channel."; -@@ -150,8 +150,7 @@ - typedef std::set<uint64> BannedList; - BannedList banned; - bool m_announce; -- bool m_moderate; -- bool m_public; -+ bool m_ownership; - std::string m_name; - std::string m_password; - uint8 m_flags; -@@ -178,8 +177,6 @@ - void MakeModeChange(WorldPacket *data, uint64 guid, uint8 oldflags); //+ 0x0C - void MakeAnnouncementsOn(WorldPacket *data, uint64 guid); //+ 0x0D - void MakeAnnouncementsOff(WorldPacket *data, uint64 guid); //+ 0x0E -- void MakeModerationOn(WorldPacket *data, uint64 guid); //+ 0x0F -- void MakeModerationOff(WorldPacket *data, uint64 guid); //+ 0x10 - void MakeMuted(WorldPacket *data); //? 0x11 - void MakePlayerKicked(WorldPacket *data, uint64 bad, uint64 good); //? 0x12 - void MakeBanned(WorldPacket *data); //? 0x13 -@@ -207,9 +204,8 @@ - bool IsOn(uint64 who) const { return players.find(who) != players.end(); } - bool IsBanned(uint64 guid) const { return banned.find(guid) != banned.end(); } - -- bool _UpdateStringInDB(const std::string& colName, const std::string& colValue) const; -- bool _UpdateIntInDB(const std::string& colName, int colValue) const; -- void _UpdateBanListInDB() const; -+ void UpdateChannelInDB() const; -+ void UpdateChannelUseageInDB() const; - - uint8 GetPlayerFlags(uint64 p) const - { -@@ -278,13 +274,14 @@ - void UnsetMute(uint64 p, const char *newname) { SetMode(p, newname, false, false); } - void List(Player* p); - void Announce(uint64 p); -- void Moderate(uint64 p); - void Say(uint64 p, const char *what, uint32 lang); - void Invite(uint64 p, const char *newp); - void Voice(uint64 guid1, uint64 guid2); - void DeVoice(uint64 guid1, uint64 guid2); - void JoinNotify(uint64 guid); // invisible notify - void LeaveNotify(uint64 guid); // invisible notify -+ void SetOwnership(bool ownership) { m_ownership = ownership; }; -+ static void CleanOldChannelsInDB(); - }; - #endif - -diff -r 9b294adafcde src/server/game/Chat/Chat.cpp ---- a/src/server/game/Chat/Chat.cpp Wed Dec 01 21:20:28 2010 +0200 -+++ b/src/server/game/Chat/Chat.cpp Thu Dec 02 03:14:06 2010 +0100 -@@ -150,8 +150,8 @@ - - static ChatCommand channelSetCommandTable[] = - { -- { "public", SEC_ADMINISTRATOR, true, OldHandler<&ChatHandler::HandleChannelSetPublic>, "", NULL }, -- { NULL, 0, false, NULL, "", NULL } -+ { "ownership", SEC_ADMINISTRATOR, false, OldHandler<&ChatHandler::HandleChannelSetOwnership>, "", NULL }, -+ { NULL, 0, false, NULL, "", NULL } - }; - - static ChatCommand channelCommandTable[] = -diff -r 9b294adafcde src/server/game/Chat/Chat.h ---- a/src/server/game/Chat/Chat.h Wed Dec 01 21:20:28 2010 +0200 -+++ b/src/server/game/Chat/Chat.h Thu Dec 02 03:14:06 2010 +0100 -@@ -166,7 +166,7 @@ - bool HandleCharacterReputationCommand(const char* args); - bool HandleCharacterTitlesCommand(const char* args); - -- bool HandleChannelSetPublic(const char *args); -+ bool HandleChannelSetOwnership(const char *args); - - bool HandlePossessCommand(const char* args); - bool HandleUnPossessCommand(const char* args); -diff -r 9b294adafcde src/server/game/Chat/Commands/Level3.cpp ---- a/src/server/game/Chat/Commands/Level3.cpp Wed Dec 01 21:20:28 2010 +0200 -+++ b/src/server/game/Chat/Commands/Level3.cpp Thu Dec 02 03:14:06 2010 +0100 -@@ -61,6 +61,7 @@ - #include "CreatureTextMgr.h" - #include "SmartAI.h" - #include "Group.h" -+#include "ChannelMgr.h" - - bool ChatHandler::HandleMaxSkillCommand(const char* /*args*/) - { -@@ -4400,25 +4401,38 @@ - return true; - } - --bool ChatHandler::HandleChannelSetPublic(const char *args) -+bool ChatHandler::HandleChannelSetOwnership(const char *args) - { - if (!*args) - return false; -- std::string channel = strtok((char*)args, " "); -- uint32 val = atoi((char*)args); -- -- if (val) -+ char *channel = strtok((char*)args, " "); -+ char *argstr = strtok(NULL, ""); -+ -+ if (!channel || !argstr) -+ return false; -+ -+ Player *player = m_session->GetPlayer(); -+ Channel *chn; -+ -+ if (ChannelMgr* cMgr = channelMgr(player->GetTeam())) -+ chn = cMgr->GetChannel(channel, player); -+ -+ if (strcmp(argstr, "on") == 0) - { -- CharacterDatabase.PExecute("UPDATE channels SET m_public = 1 WHERE m_name LIKE '%s'", channel.c_str()); -- val = 1; -+ if(chn) -+ chn->SetOwnership(true); -+ CharacterDatabase.PExecute("UPDATE channels SET m_ownership = 1 WHERE m_name LIKE '%s'", channel); -+ PSendSysMessage(LANG_CHANNEL_ENABLE_OWNERSHIP, channel); -+ } -+ else if (strcmp(argstr, "off") == 0) -+ { -+ if(chn) -+ chn->SetOwnership(false); -+ CharacterDatabase.PExecute("UPDATE channels SET m_ownership = 0 WHERE m_name LIKE '%s'", channel); -+ PSendSysMessage(LANG_CHANNEL_DISABLE_OWNERSHIP, channel); - } - else -- { -- CharacterDatabase.PExecute("UPDATE channels SET m_public = 0 WHERE m_name LIKE '%s'", channel.c_str()); -- val = 0; -- } -- -- PSendSysMessage(LANG_CHANNEL_PUBLIC_CHANGED, channel.c_str(), val); -+ return false; - - return true; - } -diff -r 9b294adafcde src/server/game/Miscellaneous/Language.h ---- a/src/server/game/Miscellaneous/Language.h Wed Dec 01 21:20:28 2010 +0200 -+++ b/src/server/game/Miscellaneous/Language.h Thu Dec 02 03:14:06 2010 +0100 -@@ -906,8 +906,8 @@ - LANG_MOUNTABLE = 5019, - LANG_NPCINFO_PHASEMASK = 5020, - LANG_NPCINFO_ARMOR = 5021, -- LANG_CHANNEL_NOT_PUBLIC = 5022, -- LANG_CHANNEL_PUBLIC_CHANGED = 5023, -+ LANG_CHANNEL_ENABLE_OWNERSHIP = 5022, -+ LANG_CHANNEL_DISABLE_OWNERSHIP = 5023, - LANG_GOINFO_ENTRY = 5024, - LANG_GOINFO_TYPE = 5025, - LANG_GOINFO_DISPLAYID = 5026, -diff -r 9b294adafcde src/server/game/Server/Protocol/Handlers/ChannelHandler.cpp ---- a/src/server/game/Server/Protocol/Handlers/ChannelHandler.cpp Wed Dec 01 21:20:28 2010 +0200 -+++ b/src/server/game/Server/Protocol/Handlers/ChannelHandler.cpp Thu Dec 02 03:14:06 2010 +0100 -@@ -281,17 +281,6 @@ - chn->Announce(_player->GetGUID()); - } - --void WorldSession::HandleChannelModerate(WorldPacket& recvPacket) --{ -- sLog.outDebug("Opcode %u", recvPacket.GetOpcode()); -- //recvPacket.hexlike(); -- std::string channelname; -- recvPacket >> channelname; -- if (ChannelMgr* cMgr = channelMgr(_player->GetTeam())) -- if (Channel *chn = cMgr->GetChannel(channelname, _player)) -- chn->Moderate(_player->GetGUID()); --} -- - void WorldSession::HandleChannelDisplayListQuery(WorldPacket &recvPacket) - { - sLog.outDebug("Opcode %u", recvPacket.GetOpcode()); -diff -r 9b294adafcde src/server/game/Server/Protocol/Opcodes.cpp ---- a/src/server/game/Server/Protocol/Opcodes.cpp Wed Dec 01 21:20:28 2010 +0200 -+++ b/src/server/game/Server/Protocol/Opcodes.cpp Thu Dec 02 03:14:06 2010 +0100 -@@ -194,7 +194,7 @@ - /*0x0A5*/ { "CMSG_CHANNEL_BAN", STATUS_LOGGEDIN, &WorldSession::HandleChannelBan }, - /*0x0A6*/ { "CMSG_CHANNEL_UNBAN", STATUS_LOGGEDIN, &WorldSession::HandleChannelUnban }, - /*0x0A7*/ { "CMSG_CHANNEL_ANNOUNCEMENTS", STATUS_LOGGEDIN, &WorldSession::HandleChannelAnnouncements }, -- /*0x0A8*/ { "CMSG_CHANNEL_MODERATE", STATUS_LOGGEDIN, &WorldSession::HandleChannelModerate }, -+ /*0x0A8*/ { "CMSG_CHANNEL_MODERATE", STATUS_NEVER, &WorldSession::Handle_NULL }, - /*0x0A9*/ { "SMSG_UPDATE_OBJECT", STATUS_NEVER, &WorldSession::Handle_ServerSide }, - /*0x0AA*/ { "SMSG_DESTROY_OBJECT", STATUS_NEVER, &WorldSession::Handle_ServerSide }, - /*0x0AB*/ { "CMSG_USE_ITEM", STATUS_LOGGEDIN, &WorldSession::HandleUseItemOpcode }, -diff -r 9b294adafcde src/server/game/World/World.cpp ---- a/src/server/game/World/World.cpp Wed Dec 01 21:20:28 2010 +0200 -+++ b/src/server/game/World/World.cpp Thu Dec 02 03:14:06 2010 +0100 -@@ -71,6 +71,7 @@ - #include "WeatherMgr.h" - #include "CreatureTextMgr.h" - #include "SmartAI.h" -+#include "Channel.h" - - volatile bool World::m_stopEvent = false; - uint8 World::m_ExitCode = SHUTDOWN_EXIT_CODE; -@@ -576,6 +577,8 @@ - m_int_configs[CONFIG_AUCTION_LEVEL_REQ] = sConfig.GetIntDefault("LevelReq.Auction", 1); - m_int_configs[CONFIG_MAIL_LEVEL_REQ] = sConfig.GetIntDefault("LevelReq.Mail", 1); - m_bool_configs[CONFIG_ALLOW_PLAYER_COMMANDS] = sConfig.GetBoolDefault("AllowPlayerCommands", 1); -+ m_bool_configs[CONFIG_PRESERVE_CUSTOM_CHANNELS] = sConfig.GetBoolDefault("PreserveCustomChannels", false); -+ m_int_configs[CONFIG_PRESERVE_CUSTOM_CHANNEL_DURATION] = sConfig.GetIntDefault("PreserveCustomChannelDuration", 14); - m_bool_configs[CONFIG_GRID_UNLOAD] = sConfig.GetBoolDefault("GridUnload", true); - m_int_configs[CONFIG_INTERVAL_SAVE] = sConfig.GetIntDefault("PlayerSaveInterval", 15 * MINUTE * IN_MILLISECONDS); - m_int_configs[CONFIG_INTERVAL_DISCONNECT_TOLERANCE] = sConfig.GetIntDefault("DisconnectToleranceInterval", 0); -@@ -1673,6 +1676,9 @@ - // Delete all characters which have been deleted X days before - Player::DeleteOldCharacters(); - -+ // Delete all custom channels which haven't been used for PreserveCustomChannelDuration days. -+ Channel::CleanOldChannelsInDB(); -+ - sLog.outString("Starting Arena Season..."); - sGameEventMgr.StartArenaSeason(); - -diff -r 9b294adafcde src/server/game/World/World.h ---- a/src/server/game/World/World.h Wed Dec 01 21:20:28 2010 +0200 -+++ b/src/server/game/World/World.h Thu Dec 02 03:14:06 2010 +0100 -@@ -163,6 +163,7 @@ - CONFIG_AUTOBROADCAST, - CONFIG_ALLOW_TICKETS, - CONFIG_DBC_ENFORCE_ITEM_ATTRIBUTES, -+ CONFIG_PRESERVE_CUSTOM_CHANNELS, - BOOL_CONFIG_VALUE_COUNT - }; - -@@ -308,6 +309,7 @@ - CONFIG_AUTOBROADCAST_INTERVAL, - CONFIG_MAX_RESULTS_LOOKUP_COMMANDS, - CONFIG_DB_PING_INTERVAL, -+ CONFIG_PRESERVE_CUSTOM_CHANNEL_DURATION, - INT_CONFIG_VALUE_COUNT - }; - -diff -r 9b294adafcde src/server/shared/Database/Implementation/CharacterDatabase.cpp ---- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp Wed Dec 01 21:20:28 2010 +0200 -+++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp Thu Dec 02 03:14:06 2010 +0100 -@@ -215,5 +215,12 @@ - PrepareStatement(CHAR_DEL_CRESPAWNTIME, "DELETE FROM creature_respawn WHERE guid = ? AND instance = ?"); - PrepareStatement(CHAR_ADD_CRESPAWNTIME, "INSERT INTO creature_respawn VALUES (?, ?, ?)"); - -+ // Chat channel handling -+ PrepareStatement(CHAR_LOAD_CHANNEL, "SELECT m_announce, m_ownership, m_password, BannedList FROM channels WHERE m_name = ? AND m_team = ?"); -+ PrepareStatement(CHAR_ADD_CHANNEL, "INSERT INTO channels (m_name, m_team, last_used) VALUES (? , ?, UNIX_TIMESTAMP())"); -+ PrepareStatement(CHAR_SET_CHANNEL, "UPDATE channels SET m_announce = ?, m_ownership = ?, m_password = ?, BannedList = ?, last_used = UNIX_TIMESTAMP() WHERE m_name = ? AND m_team = ?"); -+ PrepareStatement(CHAR_SET_CHANNEL_USAGE, "UPDATE channels SET last_used = UNIX_TIMESTAMP() WHERE m_name = ? AND m_team = ?"); -+ PrepareStatement(CHAR_CLEAN_CHANNEL, "DELETE FROM channels WHERE m_ownership = 1 AND (last_used + ?) < UNIX_TIMESTAMP()"); -+ - return true; - } -diff -r 9b294adafcde src/server/shared/Database/Implementation/CharacterDatabase.h ---- a/src/server/shared/Database/Implementation/CharacterDatabase.h Wed Dec 01 21:20:28 2010 +0200 -+++ b/src/server/shared/Database/Implementation/CharacterDatabase.h Thu Dec 02 03:14:06 2010 +0100 -@@ -181,6 +181,12 @@ - CHAR_DEL_CRESPAWNTIME, - CHAR_ADD_CRESPAWNTIME, - -+ CHAR_LOAD_CHANNEL, -+ CHAR_ADD_CHANNEL, -+ CHAR_SET_CHANNEL, -+ CHAR_SET_CHANNEL_USAGE, -+ CHAR_CLEAN_CHANNEL, -+ - MAX_CHARACTERDATABASE_STATEMENTS, - }; - -diff -r 9b294adafcde src/server/worldserver/worldserver.conf.dist ---- a/src/server/worldserver/worldserver.conf.dist Wed Dec 01 21:20:28 2010 +0200 -+++ b/src/server/worldserver/worldserver.conf.dist Thu Dec 02 03:14:06 2010 +0100 -@@ -1371,9 +1371,10 @@ - - # - # DBC.EnforceItemAttributes --# Disallow overriding item attributes stored in DBC files with values from the database --# Default: 0 - Off, Use DB values --# 1 - On, Enforce DBC Values (default) -+# Description: Disallow overriding item attributes stored in DBC files with values from the -+# database. -+# Default: 1 - (Enabled, Enforce DBC values) -+# 0 - (Disabled, Use database values) - - DBC.EnforceItemAttributes = 1 - -@@ -1745,6 +1746,27 @@ - AllowPlayerCommands = 1 - - # -+# PreserveCustomChannels -+# Description: Store custom chat channel settings like password, automatic ownership handout -+# or ban list in the database. Needs to be enabled to save custom -+# world/trade/etc. channels that have automatic ownership handout disabled. -+# (.channel set ownership $channel off) -+# Default: 0 - (Disabled, Blizzlike, Channel settings are lost if last person left) -+# 1 - (Enabled) -+ -+PreserveCustomChannels = 1 -+ -+# -+# PreserveCustomChannelDuration -+# Description: Time (in days) that needs to pass before the customs chat channels get -+# cleaned up from the database. Only channels with ownership handout enabled -+# (default behavior) will be cleaned. -+# Default: 14 - (Enabled, Clean channels that haven't been used for 14 days) -+# 0 - (Disabled, Infinite channel storage) -+ -+PreserveCustomChannelDuration = 14 -+ -+# - ################################################################################################### - - ################################################################################################### |