diff options
| author | DDuarte <dnpd.dd@gmail.com> | 2014-10-19 00:18:06 +0100 |
|---|---|---|
| committer | DDuarte <dnpd.dd@gmail.com> | 2014-10-19 00:18:06 +0100 |
| commit | 5bf55eacfdf7cfd0036bf51e78a2f04f9b55feb0 (patch) | |
| tree | 9653ff7011d0b370c1360e09590c09ebec4f7e9a /src/server/scripts/Commands | |
| parent | e07d3ebe4e6d2d797cb77ba65fb52efbef3462d9 (diff) | |
| parent | 15a9c6729ee274044b2ba78f8b9ad3c167c94bd1 (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.cpp | 144 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_misc.cpp | 66 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_quest.cpp | 11 |
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; } |
