diff options
author | Shocker <none@none> | 2010-09-05 04:03:02 +0300 |
---|---|---|
committer | Shocker <none@none> | 2010-09-05 04:03:02 +0300 |
commit | f769e88f5c4f76e4f7ce98ccde3e9d3e007bd3c5 (patch) | |
tree | 5b20872fcd87ed6f8f64e66f86dec885ee641fd1 /src | |
parent | adf1ae62866ece2f78616829b9a2f81769338b97 (diff) |
Core/Commands: Implement possibility to unbind specific maps/difficulties with .instance unbind, based on svetilo12's idea, closes issue 3792
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Chat/Commands/Level3.cpp | 50 |
1 files changed, 30 insertions, 20 deletions
diff --git a/src/server/game/Chat/Commands/Level3.cpp b/src/server/game/Chat/Commands/Level3.cpp index 66e18011033..54206226890 100644 --- a/src/server/game/Chat/Commands/Level3.cpp +++ b/src/server/game/Chat/Commands/Level3.cpp @@ -6588,7 +6588,8 @@ bool ChatHandler::HandleInstanceListBindsCommand(const char* /*args*/) { InstanceSave *save = itr->second.save; std::string timeleft = GetTimeString(save->GetResetTime() - time(NULL)); - PSendSysMessage("map: %d inst: %d perm: %s diff: %d canReset: %s TTR: %s", itr->first, save->GetInstanceId(), itr->second.perm ? "yes" : "no", save->GetDifficulty(), save->CanReset() ? "yes" : "no", timeleft.c_str()); counter++; + PSendSysMessage("map: %d inst: %d perm: %s diff: %d canReset: %s TTR: %s", itr->first, save->GetInstanceId(), itr->second.perm ? "yes" : "no", save->GetDifficulty(), save->CanReset() ? "yes" : "no", timeleft.c_str()); + counter++; } } } @@ -6602,31 +6603,40 @@ bool ChatHandler::HandleInstanceUnbindCommand(const char *args) if (!*args) return false; - std::string cmd = args; - if (cmd == "all") + Player* player = getSelectedPlayer(); + if (!player) + player = m_session->GetPlayer(); + + char* pMap = strtok((char*)args, " "); + char* pDiff = strtok(NULL, " "); + int8 diff = -1; + if (pDiff) + diff = atoi(pDiff); + uint16 counter = 0; + int16 MapId = 0; + + if (strcmp(pMap, "all")) + if (!(MapId = atoi(pMap))) + return false; + + for(uint8 i = 0; i < MAX_DIFFICULTY; ++i) { - Player* player = getSelectedPlayer(); - if (!player) player = m_session->GetPlayer(); - uint32 counter = 0; - for (uint8 i = 0; i < MAX_DIFFICULTY; ++i) + Player::BoundInstancesMap &binds = player->GetBoundInstances(Difficulty(i)); + for(Player::BoundInstancesMap::iterator itr = binds.begin(); itr != binds.end();) { - Player::BoundInstancesMap &binds = player->GetBoundInstances(Difficulty(i)); - for (Player::BoundInstancesMap::iterator itr = binds.begin(); itr != binds.end();) + InstanceSave *save = itr->second.save; + if(itr->first != player->GetMapId() && (!MapId || MapId == itr->first) && (diff == -1 || diff == save->GetDifficulty())) { - if (itr->first != player->GetMapId()) - { - InstanceSave *save = itr->second.save; - std::string timeleft = GetTimeString(save->GetResetTime() - time(NULL)); - PSendSysMessage("unbinding map: %d inst: %d perm: %s diff: %d canReset: %s TTR: %s", itr->first, save->GetInstanceId(), itr->second.perm ? "yes" : "no", save->GetDifficulty(), save->CanReset() ? "yes" : "no", timeleft.c_str()); - player->UnbindInstance(itr, Difficulty(i)); - counter++; - } - else - ++itr; + std::string timeleft = GetTimeString(save->GetResetTime() - time(NULL)); + PSendSysMessage("unbinding map: %d inst: %d perm: %s diff: %d canReset: %s TTR: %s", itr->first, save->GetInstanceId(), itr->second.perm ? "yes" : "no", save->GetDifficulty(), save->CanReset() ? "yes" : "no", timeleft.c_str()); + player->UnbindInstance(itr, Difficulty(i)); + counter++; } + else + ++itr; } - PSendSysMessage("instances unbound: %d", counter); } + PSendSysMessage("instances unbound: %d", counter); return true; } |