aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Commands
diff options
context:
space:
mode:
authorDDuarte <dnpd.dd@gmail.com>2014-10-19 00:18:06 +0100
committerDDuarte <dnpd.dd@gmail.com>2014-10-19 00:18:06 +0100
commit5bf55eacfdf7cfd0036bf51e78a2f04f9b55feb0 (patch)
tree9653ff7011d0b370c1360e09590c09ebec4f7e9a /src/server/scripts/Commands
parente07d3ebe4e6d2d797cb77ba65fb52efbef3462d9 (diff)
parent15a9c6729ee274044b2ba78f8b9ad3c167c94bd1 (diff)
Merge remote-tracking branch 'origin/3.3.5' into 4.3.4
Conflicts: sql/base/auth_database.sql src/server/game/Instances/InstanceScript.h src/server/scripts/Northrend/isle_of_conquest.cpp src/server/shared/Database/Implementation/LoginDatabase.cpp src/server/shared/Database/Implementation/LoginDatabase.h
Diffstat (limited to 'src/server/scripts/Commands')
-rw-r--r--src/server/scripts/Commands/cs_instance.cpp144
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp66
-rw-r--r--src/server/scripts/Commands/cs_quest.cpp11
3 files changed, 216 insertions, 5 deletions
diff --git a/src/server/scripts/Commands/cs_instance.cpp b/src/server/scripts/Commands/cs_instance.cpp
index a426c49a5f7..d2cec87e08f 100644
--- a/src/server/scripts/Commands/cs_instance.cpp
+++ b/src/server/scripts/Commands/cs_instance.cpp
@@ -40,11 +40,13 @@ public:
{
static ChatCommand instanceCommandTable[] =
{
- { "listbinds", rbac::RBAC_PERM_COMMAND_INSTANCE_LISTBINDS, false, &HandleInstanceListBindsCommand, "", NULL },
- { "unbind", rbac::RBAC_PERM_COMMAND_INSTANCE_UNBIND, false, &HandleInstanceUnbindCommand, "", NULL },
- { "stats", rbac::RBAC_PERM_COMMAND_INSTANCE_STATS, true, &HandleInstanceStatsCommand, "", NULL },
- { "savedata", rbac::RBAC_PERM_COMMAND_INSTANCE_SAVEDATA, false, &HandleInstanceSaveDataCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "listbinds", rbac::RBAC_PERM_COMMAND_INSTANCE_LISTBINDS, false, &HandleInstanceListBindsCommand, "", NULL },
+ { "unbind", rbac::RBAC_PERM_COMMAND_INSTANCE_UNBIND, false, &HandleInstanceUnbindCommand, "", NULL },
+ { "stats", rbac::RBAC_PERM_COMMAND_INSTANCE_STATS, true, &HandleInstanceStatsCommand, "", NULL },
+ { "savedata", rbac::RBAC_PERM_COMMAND_INSTANCE_SAVEDATA, false, &HandleInstanceSaveDataCommand, "", NULL },
+ { "setbossstate", rbac::RBAC_PERM_COMMAND_INSTANCE_SET_BOSS_STATE, true, &HandleInstanceSetBossStateCommand, "", NULL },
+ { "getbossstate", rbac::RBAC_PERM_COMMAND_INSTANCE_GET_BOSS_STATE, true, &HandleInstanceGetBossStateCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
@@ -187,6 +189,138 @@ public:
return true;
}
+
+ static bool HandleInstanceSetBossStateCommand(ChatHandler* handler, char const* args)
+ {
+ if (!*args)
+ return false;
+
+ char* param1 = strtok((char*)args, " ");
+ char* param2 = strtok(nullptr, " ");
+ char* param3 = strtok(nullptr, " ");
+ uint32 encounterId = 0;
+ int32 state = 0;
+ Player* player = nullptr;
+ std::string playerName;
+
+ // Character name must be provided when using this from console.
+ if (!param2 || (!param3 && !handler->GetSession()))
+ {
+ handler->PSendSysMessage(LANG_CMD_SYNTAX);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (!param3)
+ player = handler->GetSession()->GetPlayer();
+ else
+ {
+ playerName = param3;
+ if (normalizePlayerName(playerName))
+ player = sObjectAccessor->FindPlayerByName(playerName);
+ }
+
+ if (!player)
+ {
+ handler->PSendSysMessage(LANG_PLAYER_NOT_FOUND);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ Map* map = player->GetMap();
+ if (!map->IsDungeon())
+ {
+ handler->PSendSysMessage(LANG_NOT_DUNGEON);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (!map->ToInstanceMap()->GetInstanceScript())
+ {
+ handler->PSendSysMessage(LANG_NO_INSTANCE_DATA);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ encounterId = atoi(param1);
+ state = atoi(param2);
+
+ // Reject improper values.
+ if (state > TO_BE_DECIDED || encounterId > map->ToInstanceMap()->GetInstanceScript()->GetEncounterCount())
+ {
+ handler->PSendSysMessage(LANG_BAD_VALUE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ map->ToInstanceMap()->GetInstanceScript()->SetBossState(encounterId, (EncounterState)state);
+ handler->PSendSysMessage(LANG_COMMAND_INST_SET_BOSS_STATE, encounterId, state);
+ return true;
+ }
+
+ static bool HandleInstanceGetBossStateCommand(ChatHandler* handler, char const* args)
+ {
+ if (!*args)
+ return false;
+
+ char* param1 = strtok((char*)args, " ");
+ char* param2 = strtok(nullptr, " ");
+ uint32 encounterId = 0;
+ Player* player = nullptr;
+ std::string playerName;
+
+ // Character name must be provided when using this from console.
+ if (!param1 || (!param2 && !handler->GetSession()))
+ {
+ handler->PSendSysMessage(LANG_CMD_SYNTAX);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (!param2)
+ player = handler->GetSession()->GetPlayer();
+ else
+ {
+ playerName = param2;
+ if (normalizePlayerName(playerName))
+ player = sObjectAccessor->FindPlayerByName(playerName);
+ }
+
+ if (!player)
+ {
+ handler->PSendSysMessage(LANG_PLAYER_NOT_FOUND);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ Map* map = player->GetMap();
+ if (!map->IsDungeon())
+ {
+ handler->PSendSysMessage(LANG_NOT_DUNGEON);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (!map->ToInstanceMap()->GetInstanceScript())
+ {
+ handler->PSendSysMessage(LANG_NO_INSTANCE_DATA);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (encounterId > map->ToInstanceMap()->GetInstanceScript()->GetEncounterCount())
+ {
+ handler->PSendSysMessage(LANG_BAD_VALUE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ encounterId = atoi(param1);
+
+ uint8 state = map->ToInstanceMap()->GetInstanceScript()->GetBossState(encounterId);
+ handler->PSendSysMessage(LANG_COMMAND_INST_GET_BOSS_STATE, encounterId, state);
+ return true;
+ }
};
void AddSC_instance_commandscript()
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 75dbf975857..706f98c0009 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -73,6 +73,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 },
@@ -1850,6 +1851,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)
@@ -1909,6 +1916,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/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp
index dc75e0aedab..fb486128049 100644
--- a/src/server/scripts/Commands/cs_quest.cpp
+++ b/src/server/scripts/Commands/cs_quest.cpp
@@ -238,6 +238,17 @@ public:
if (ReqOrRewMoney < 0)
player->ModifyMoney(-ReqOrRewMoney);
+ if (sWorld->getBoolConfig(CONFIG_QUEST_ENABLE_QUEST_TRACKER)) // check if Quest Tracker is enabled
+ {
+ // prepare Quest Tracker datas
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_QUEST_TRACK_GM_COMPLETE);
+ stmt->setUInt32(0, quest->GetQuestId());
+ stmt->setUInt32(1, player->GetGUIDLow());
+
+ // add to Quest Tracker
+ CharacterDatabase.Execute(stmt);
+ }
+
player->CompleteQuest(entry);
return true;
}