diff options
| author | Tartalo <none@none> | 2010-06-06 22:33:06 +0200 |
|---|---|---|
| committer | Tartalo <none@none> | 2010-06-06 22:33:06 +0200 |
| commit | 1b32fbe085d447caa8145c4c62729462932beafe (patch) | |
| tree | a39ac4eb15617d92cf8ece28cd8222e991963a73 /src | |
| parent | 5dd3344372e56685d197c41655b8be02bcae23d9 (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.cpp | 60 |
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 |
