aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMachiavelli <machiavelli.trinity@gmail.com>2011-07-27 17:51:57 +0200
committerMachiavelli <machiavelli.trinity@gmail.com>2011-07-27 17:51:57 +0200
commit0dcc22907114508141cbabbca69aeaa0791feb79 (patch)
tree7c06ff9c085d0f10825f12951e41178de852f644
parent2eb69330b4f15e1fad6702a4829420c1a7f33208 (diff)
Core/Commands: Allow muting offline players - the mute will become effective on next player login.
-rw-r--r--sql/base/auth_database.sql2
-rw-r--r--sql/base/world_database.sql1
-rw-r--r--sql/updates/auth/2011_07_27_00_auth_account.sql1
-rw-r--r--sql/updates/world/2011_07_27_01_world_trinity_string.sql2
-rwxr-xr-xsrc/server/game/Chat/Commands/Level2.cpp19
-rwxr-xr-xsrc/server/game/Miscellaneous/Language.h2
-rwxr-xr-xsrc/server/game/Server/WorldSocket.cpp8
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)