aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHeihachi <gamehacker953@gmail.com>2014-10-18 23:01:30 +0100
committerDDuarte <dnpd.dd@gmail.com>2014-10-18 23:34:18 +0100
commit15a9c6729ee274044b2ba78f8b9ad3c167c94bd1 (patch)
tree4ddfb8e940ef3af710a2cfe1901f8281def34e1f /src
parentf21b55068c1df170211cea3b66057790c68bd761 (diff)
Scripts/Commands: Implement mutehistory command for GM's with requested improvements
Closes #13350
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Accounts/RBAC.h2
-rw-r--r--src/server/game/Miscellaneous/Language.h7
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp66
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp2
-rw-r--r--src/server/shared/Database/Implementation/LoginDatabase.cpp2
-rw-r--r--src/server/shared/Database/Implementation/LoginDatabase.h3
6 files changed, 79 insertions, 3 deletions
diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h
index afaf1999d45..efbbf61c2ff 100644
--- a/src/server/game/Accounts/RBAC.h
+++ b/src/server/game/Accounts/RBAC.h
@@ -535,7 +535,7 @@ enum RBACPermissions
RBAC_PERM_COMMAND_RELOAD_CONDITIONS = 629,
RBAC_PERM_COMMAND_RELOAD_CONFIG = 630,
RBAC_PERM_COMMAND_RELOAD_BATTLEGROUND_TEMPLATE = 631,
- RBAC_PERM_UNUSED_632 = 632, // unused
+ RBAC_PERM_COMMAND_MUTEHISTORY = 632,
RBAC_PERM_COMMAND_RELOAD_CREATURE_LINKED_RESPAWN = 633,
RBAC_PERM_COMMAND_RELOAD_CREATURE_LOOT_TEMPLATE = 634,
RBAC_PERM_COMMAND_RELOAD_CREATURE_ONKILL_REPUTATION = 635,
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index f7db4e0f9bd..33abd7ae288 100644
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -1111,7 +1111,12 @@ enum TrinityStrings
LANG_COMMAND_INST_SET_BOSS_STATE = 5057,
LANG_COMMAND_INST_GET_BOSS_STATE = 5058,
- // Room for more Trinity strings 5059-9999
+ // Mutehistory commands
+ LANG_COMMAND_MUTEHISTORY = 5059,
+ LANG_COMMAND_MUTEHISTORY_EMPTY = 5060,
+ LANG_COMMAND_MUTEHISTORY_OUTPUT = 5061,
+
+ // Room for more Trinity strings 5062-9999
// Level requirement notifications
LANG_SAY_REQ = 6604,
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index ccfb32a2e09..f8400406bdc 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -74,6 +74,7 @@ public:
{ "maxskill", rbac::RBAC_PERM_COMMAND_MAXSKILL, false, &HandleMaxSkillCommand, "", NULL },
{ "movegens", rbac::RBAC_PERM_COMMAND_MOVEGENS, false, &HandleMovegensCommand, "", NULL },
{ "mute", rbac::RBAC_PERM_COMMAND_MUTE, true, &HandleMuteCommand, "", NULL },
+ { "mutehistory", rbac::RBAC_PERM_COMMAND_MUTEHISTORY, true, &HandleMuteInfoCommand, "", NULL },
{ "neargrave", rbac::RBAC_PERM_COMMAND_NEARGRAVE, false, &HandleNearGraveCommand, "", NULL },
{ "pinfo", rbac::RBAC_PERM_COMMAND_PINFO, true, &HandlePInfoCommand, "", NULL },
{ "playall", rbac::RBAC_PERM_COMMAND_PLAYALL, false, &HandlePlayAllCommand, "", NULL },
@@ -1849,6 +1850,12 @@ public:
stmt->setString(2, muteBy.c_str());
stmt->setUInt32(3, accountId);
LoginDatabase.Execute(stmt);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_ACCOUNT_MUTE);
+ stmt->setUInt32(0, accountId);
+ stmt->setUInt32(1, notSpeakTime);
+ stmt->setString(2, muteBy.c_str());
+ stmt->setString(3, muteReasonStr.c_str());
+ LoginDatabase.Execute(stmt);
std::string nameLink = handler->playerLink(targetName);
if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD) && !target)
@@ -1908,6 +1915,65 @@ public:
return true;
}
+ // mutehistory command
+ static bool HandleMuteInfoCommand(ChatHandler* handler, char const* args)
+ {
+ if (!*args)
+ return false;
+
+ char *nameStr = strtok((char*)args, "");
+ if (!nameStr)
+ return false;
+
+ std::string accountName = nameStr;
+ if (!AccountMgr::normalizeString(accountName))
+ {
+ handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName.c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ uint32 accountId = AccountMgr::GetId(accountName);
+ if (!accountId)
+ {
+ handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName.c_str());
+ return false;
+ }
+
+ return HandleMuteInfoHelper(accountId, accountName.c_str(), handler);
+ }
+
+ // helper for mutehistory
+ static bool HandleMuteInfoHelper(uint32 accountId, char const* accountName, ChatHandler *handler)
+ {
+ PreparedStatement *stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_MUTE_INFO);
+ stmt->setUInt16(0, accountId);
+ PreparedQueryResult result = LoginDatabase.Query(stmt);
+
+ if (!result)
+ {
+ handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY_EMPTY, accountName);
+ return true;
+ }
+
+ handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY, accountName);
+ do
+ {
+ Field* fields = result->Fetch();
+
+ // we have to manually set the string for mutedate
+ time_t sqlTime = fields[0].GetUInt32();
+ struct tm* timeinfo;
+ char buffer[80];
+
+ // set it to string
+ timeinfo = localtime_r(&sqlTime);
+ strftime(buffer, sizeof(buffer),"%Y-%m-%d %I:%M%p", timeinfo);
+
+ handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY_OUTPUT, buffer, fields[1].GetUInt32(), fields[2].GetCString(), fields[3].GetCString());
+ } while (result->NextRow());
+ return true;
+ }
static bool HandleMovegensCommand(ChatHandler* handler, char const* /*args*/)
{
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 93f9519993e..4ac415d7cfd 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -4020,7 +4020,7 @@ public:
SetBonusValueForEffect(EFFECT_0, 5, aurEff);
break;
default:
- TC_LOG_ERROR("spells", "SpellId %d couldn't be processed in spell_gen_mixology_bonus", GetId());
+ TC_LOG_ERROR("spells", "SpellId %u couldn't be processed in spell_gen_mixology_bonus", GetId());
break;
}
amount += bonus;
diff --git a/src/server/shared/Database/Implementation/LoginDatabase.cpp b/src/server/shared/Database/Implementation/LoginDatabase.cpp
index a2b9091a8d5..34144417a6e 100644
--- a/src/server/shared/Database/Implementation/LoginDatabase.cpp
+++ b/src/server/shared/Database/Implementation/LoginDatabase.cpp
@@ -111,4 +111,6 @@ void LoginDatabaseConnection::DoPrepareStatements()
PrepareStatement(LOGIN_SEL_RBAC_ACCOUNT_PERMISSIONS, "SELECT permissionId, granted FROM rbac_account_permissions WHERE accountId = ? AND (realmId = ? OR realmId = -1) ORDER BY permissionId, realmId", CONNECTION_SYNCH);
PrepareStatement(LOGIN_INS_RBAC_ACCOUNT_PERMISSION, "INSERT INTO rbac_account_permissions (accountId, permissionId, granted, realmId) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE granted = VALUES(granted)", CONNECTION_ASYNC);
PrepareStatement(LOGIN_DEL_RBAC_ACCOUNT_PERMISSION, "DELETE FROM rbac_account_permissions WHERE accountId = ? AND permissionId = ? AND (realmId = ? OR realmId = -1)", CONNECTION_ASYNC);
+ PrepareStatement(LOGIN_INS_ACCOUNT_MUTE, "INSERT INTO account_muted VALUES (?, UNIX_TIMESTAMP(), ?, ?, ?)", CONNECTION_ASYNC);
+ PrepareStatement(LOGIN_SEL_ACCOUNT_MUTE_INFO, "SELECT mutedate, mutetime, mutereason, mutedby FROM account_muted WHERE guid = ? ORDER BY mutedate ASC", CONNECTION_SYNCH);
}
diff --git a/src/server/shared/Database/Implementation/LoginDatabase.h b/src/server/shared/Database/Implementation/LoginDatabase.h
index d37149c6a76..c0caaaaf21a 100644
--- a/src/server/shared/Database/Implementation/LoginDatabase.h
+++ b/src/server/shared/Database/Implementation/LoginDatabase.h
@@ -127,6 +127,9 @@ enum LoginDatabaseStatements
LOGIN_SEL_RBAC_ACCOUNT_PERMISSIONS,
LOGIN_INS_RBAC_ACCOUNT_PERMISSION,
LOGIN_DEL_RBAC_ACCOUNT_PERMISSION,
+
+ LOGIN_INS_ACCOUNT_MUTE,
+ LOGIN_SEL_ACCOUNT_MUTE_INFO,
MAX_LOGINDATABASE_STATEMENTS
};