diff options
author | Machiavelli <machiavelli.trinity@gmail.com> | 2011-07-27 17:51:57 +0200 |
---|---|---|
committer | Machiavelli <machiavelli.trinity@gmail.com> | 2011-07-27 17:51:57 +0200 |
commit | 0dcc22907114508141cbabbca69aeaa0791feb79 (patch) | |
tree | 7c06ff9c085d0f10825f12951e41178de852f644 | |
parent | 2eb69330b4f15e1fad6702a4829420c1a7f33208 (diff) |
Core/Commands: Allow muting offline players - the mute will become effective on next player login.
-rw-r--r-- | sql/base/auth_database.sql | 2 | ||||
-rw-r--r-- | sql/base/world_database.sql | 1 | ||||
-rw-r--r-- | sql/updates/auth/2011_07_27_00_auth_account.sql | 1 | ||||
-rw-r--r-- | sql/updates/world/2011_07_27_01_world_trinity_string.sql | 2 | ||||
-rwxr-xr-x | src/server/game/Chat/Commands/Level2.cpp | 19 | ||||
-rwxr-xr-x | src/server/game/Miscellaneous/Language.h | 2 | ||||
-rwxr-xr-x | src/server/game/Server/WorldSocket.cpp | 8 |
7 files changed, 25 insertions, 10 deletions
diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql index 1890ea3838b..4aad22245d5 100644 --- a/sql/base/auth_database.sql +++ b/sql/base/auth_database.sql @@ -61,7 +61,7 @@ CREATE TABLE `account` ( `last_login` timestamp NOT NULL default '0000-00-00 00:00:00', `online` tinyint(4) NOT NULL default '0', `expansion` tinyint(3) unsigned NOT NULL default '2', - `mutetime` bigint(40) unsigned NOT NULL default '0', + `mutetime` bigint(40) NOT NULL default '0', `locale` tinyint(3) unsigned NOT NULL default '0', `recruiter` int(11) NOT NULL default '0', PRIMARY KEY (`id`), diff --git a/sql/base/world_database.sql b/sql/base/world_database.sql index d2e7781cf63..812dd8c6b99 100644 --- a/sql/base/world_database.sql +++ b/sql/base/world_database.sql @@ -27147,6 +27147,7 @@ INSERT INTO `trinity_string` (`entry`,`content_default`,`content_loc1`,`content_ (280, 'Vendor has too many items (max 128)', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), (281, 'You can''t kick self, logout instead', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), (282, 'Player %s kicked.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), +(283, 'You have disabled %s\'s chat for %u minutes, effective at the player\'s next login. Reason: %s.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), (284, 'Accepting Whisper: %s', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), (285, 'Accepting Whisper: ON', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), (286, 'Accepting Whisper: OFF', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), diff --git a/sql/updates/auth/2011_07_27_00_auth_account.sql b/sql/updates/auth/2011_07_27_00_auth_account.sql new file mode 100644 index 00000000000..34393d518fc --- /dev/null +++ b/sql/updates/auth/2011_07_27_00_auth_account.sql @@ -0,0 +1 @@ +ALTER TABLE `account` CHANGE `mutetime` `mutetime` bigint(40) NOT NULL DEFAULT 0;
\ No newline at end of file diff --git a/sql/updates/world/2011_07_27_01_world_trinity_string.sql b/sql/updates/world/2011_07_27_01_world_trinity_string.sql new file mode 100644 index 00000000000..9e36d27ed37 --- /dev/null +++ b/sql/updates/world/2011_07_27_01_world_trinity_string.sql @@ -0,0 +1,2 @@ +INSERT INTO `trinity_string` (`entry`,`content_default`) VALUES +(283,'You have disabled %s\'s chat for %u minutes, effective at the player\'s next login. Reason: %s.');
\ No newline at end of file diff --git a/src/server/game/Chat/Commands/Level2.cpp b/src/server/game/Chat/Commands/Level2.cpp index 8625a0ac23a..ea7f17201d5 100755 --- a/src/server/game/Chat/Commands/Level2.cpp +++ b/src/server/game/Chat/Commands/Level2.cpp @@ -76,19 +76,24 @@ bool ChatHandler::HandleMuteCommand(const char* args) if (HasLowerSecurity (target, target_guid, true)) return false; - time_t mutetime = time(NULL) + notspeaktime*60; - if (target) + { + //! Target is online, mute will be in effect right away. + int64 mutetime = time(NULL) + notspeaktime * MINUTE; target->GetSession()->m_muteTime = mutetime; - - LoginDatabase.PExecute("UPDATE account SET mutetime = " UI64FMTD " WHERE id = '%u'", uint64(mutetime), account_id); - - if (target) + LoginDatabase.PExecute("UPDATE account SET mutetime = " SI64FMTD " WHERE id = '%u'", mutetime, account_id); ChatHandler(target).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, notspeaktime, mutereasonstr.c_str()); + } + else + { + //! Target is offline, mute will be in effect starting from the next login. + int32 muteTime = -(notspeaktime * MINUTE); + LoginDatabase.PExecute("UPDATE account SET mutetime = %d WHERE id = %u", muteTime, account_id); + } std::string nameLink = playerLink(target_name); - PSendSysMessage(LANG_YOU_DISABLE_CHAT, nameLink.c_str(), notspeaktime, mutereasonstr.c_str()); + PSendSysMessage(target ? LANG_YOU_DISABLE_CHAT : LANG_COMMAND_DISABLE_CHAT_DELAYED, nameLink.c_str(), notspeaktime, mutereasonstr.c_str()); return true; } diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index bd2c34aef5c..d160d42e19c 100755 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -267,7 +267,7 @@ enum TrinityStrings LANG_COMMAND_ADDVENDORITEMITEMS = 280, LANG_COMMAND_KICKSELF = 281, LANG_COMMAND_KICKMESSAGE = 282, - // 283, not used + LANG_COMMAND_DISABLE_CHAT_DELAYED = 283, LANG_COMMAND_WHISPERACCEPTING = 284, LANG_COMMAND_WHISPERON = 285, LANG_COMMAND_WHISPEROFF = 286, diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index fb152cfd331..8c854b7d30c 100755 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -889,7 +889,13 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket) K.SetHexStr (fields[1].GetCString()); - time_t mutetime = time_t (fields[7].GetUInt64()); + int64 mutetime = fields[7].GetInt64(); + //! Negative mutetime indicates amount of seconds to be muted effective on next login - which is now. + if (mutetime < 0) + { + mutetime = time(NULL) + abs(mutetime); + LoginDatabase.PExecute("UPDATE account SET mutetime = " SI64FMTD " WHERE id = '%u'", mutetime, id); + } locale = LocaleConstant (fields[8].GetUInt8()); if (locale >= TOTAL_LOCALES) |