aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShocker <none@none>2010-09-05 04:03:02 +0300
committerShocker <none@none>2010-09-05 04:03:02 +0300
commitf769e88f5c4f76e4f7ce98ccde3e9d3e007bd3c5 (patch)
tree5b20872fcd87ed6f8f64e66f86dec885ee641fd1 /src
parentadf1ae62866ece2f78616829b9a2f81769338b97 (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.cpp50
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;
}