From 1b32fbe085d447caa8145c4c62729462932beafe Mon Sep 17 00:00:00 2001 From: Tartalo Date: Sun, 6 Jun 2010 22:33:06 +0200 Subject: 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 --- src/server/game/Chat/Level3.cpp | 60 ++++++++++++++++++++++++++++++++++------- 1 file changed, 51 insertions(+), 9 deletions(-) (limited to 'src') 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 -- cgit v1.2.3