aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTartalo <none@none>2010-06-06 22:33:06 +0200
committerTartalo <none@none>2010-06-06 22:33:06 +0200
commit1b32fbe085d447caa8145c4c62729462932beafe (patch)
treea39ac4eb15617d92cf8ece28cd8222e991963a73 /src
parent5dd3344372e56685d197c41655b8be02bcae23d9 (diff)
Better behaviour for .instance open/close commands
For Dungeons: .instance open|close [mapid] normal|heroic|all For Raids: .instance open|close [mapid] normal|heroic|10man|25man|all|10normal|10heroic|25normal|25heroic normal|heroic options will open|close instance in both 10man & 25man at once for selected difficulty 10man|25man options will open|close instance in both normal & heroic modes at once for selected num of players --HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Chat/Level3.cpp60
1 files changed, 51 insertions, 9 deletions
diff --git a/src/server/game/Chat/Level3.cpp b/src/server/game/Chat/Level3.cpp
index f7ced44922b..8ac26cc5e8f 100644
--- a/src/server/game/Chat/Level3.cpp
+++ b/src/server/game/Chat/Level3.cpp
@@ -7062,20 +7062,62 @@ bool ChatHandler::HandleInstanceOpenCloseCommand(const char *args,bool open)
uint8 status = objmgr.GetAccessRequirement(instance->access_id)->status;
uint8 flag = 0;
- if (strcmp(instanceModeStr,"normal") || strcmp(instanceModeStr,"10normal"))
- flag = DUNGEON_STATUSFLAG_NORMAL;
- else if (strcmp(instanceModeStr,"heroic") || strcmp(instanceModeStr,"25normal"))
- flag = DUNGEON_STATUSFLAG_HEROIC;
- else if (strcmp(instanceModeStr,"10heroic"))
- flag = RAID_STATUSFLAG_10MAN_HEROIC;
- else if (strcmp(instanceModeStr,"25heroic"))
- flag = RAID_STATUSFLAG_25MAN_HEROIC;
+ const MapEntry *entry = sMapStore.LookupEntry(mapid);
+ if (!entry)
+ return false;
+
+ if (entry->IsDungeon())
+ {
+ if (strcmp(instanceModeStr,"normal"))
+ flag = DUNGEON_STATUSFLAG_NORMAL;
+ else if (strcmp(instanceModeStr,"heroic"))
+ flag = DUNGEON_STATUSFLAG_HEROIC;
+ else if (strcmp(instanceModeStr,"all"))
+ flag = DUNGEON_STATUSFLAG_NORMAL & DUNGEON_STATUSFLAG_HEROIC;
+ else
+ {
+ PSendSysMessage("Unrecognized difficulty string");
+ SetSentErrorMessage(true);
+ return false;
+ }
+ }
+
+ else if (entry->IsRaid())
+ {
+ if (strcmp(instanceModeStr,"normal"))
+ flag = RAID_STATUSFLAG_10MAN_NORMAL & RAID_STATUSFLAG_25MAN_NORMAL;
+ else if (strcmp(instanceModeStr,"heroic"))
+ flag = RAID_STATUSFLAG_10MAN_HEROIC & RAID_STATUSFLAG_25MAN_HEROIC;
+ else if (strcmp(instanceModeStr,"10man"))
+ flag = RAID_STATUSFLAG_10MAN_NORMAL & RAID_STATUSFLAG_10MAN_HEROIC;
+ else if (strcmp(instanceModeStr,"25man"))
+ flag = RAID_STATUSFLAG_25MAN_NORMAL & RAID_STATUSFLAG_25MAN_HEROIC;
+ else if (strcmp(instanceModeStr,"heroic"))
+ flag = RAID_STATUSFLAG_10MAN_HEROIC & RAID_STATUSFLAG_25MAN_HEROIC;
+ else if (strcmp(instanceModeStr,"10normal"))
+ flag = DUNGEON_STATUSFLAG_NORMAL;
+ else if (strcmp(instanceModeStr,"25normal"))
+ flag = DUNGEON_STATUSFLAG_HEROIC;
+ else if (strcmp(instanceModeStr,"10heroic"))
+ flag = RAID_STATUSFLAG_10MAN_HEROIC;
+ else if (strcmp(instanceModeStr,"25heroic"))
+ flag = RAID_STATUSFLAG_25MAN_HEROIC;
+ else if (strcmp(instanceModeStr,"all"))
+ flag = RAID_STATUSFLAG_10MAN_NORMAL & RAID_STATUSFLAG_10MAN_HEROIC & RAID_STATUSFLAG_25MAN_NORMAL & RAID_STATUSFLAG_25MAN_HEROIC;
+ else
+ {
+ PSendSysMessage("Unrecognized difficulty string");
+ SetSentErrorMessage(true);
+ return false;
+ }
+ }
else
{
- PSendSysMessage("Unrecognized difficulty string");
+ PSendSysMessage("Map is not a dungeon/raid");
SetSentErrorMessage(true);
return false;
}
+
if (open)
status |= flag;
else