diff options
| author | Spp <spp@jorge.gr> | 2010-08-12 00:02:15 +0200 |
|---|---|---|
| committer | Spp <spp@jorge.gr> | 2010-08-12 00:02:15 +0200 |
| commit | eec9212ee4e94551d21f04dc96150de0a086b15e (patch) | |
| tree | 4a63f4cc11597697ed8ee59f55705df7e3571488 /src/server/game/Server | |
| parent | 5b1b713aa69e7c144081db0ea395ac0d599cdacf (diff) | |
Dungeon Finder: Fix bad dungeon selection being show at offer continue rolechecks
--HG--
branch : trunk
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Protocol/Handlers/LFGHandler.cpp | 44 |
1 files changed, 40 insertions, 4 deletions
diff --git a/src/server/game/Server/Protocol/Handlers/LFGHandler.cpp b/src/server/game/Server/Protocol/Handlers/LFGHandler.cpp index 0e79e9a15ce..b2a91b010fc 100644 --- a/src/server/game/Server/Protocol/Handlers/LFGHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/LFGHandler.cpp @@ -43,11 +43,47 @@ void WorldSession::HandleLfgJoinOpcode(WorldPacket &recv_data) } GetPlayer()->SetLfgRoles(uint8(roles)); - for (int8 i = 0 ; i < numDungeons; ++i) + + // Check if it's offer continue + Group *grp = GetPlayer()->GetGroup(); + if (grp && grp->isLFGGroup()) + { + LfgDungeonSet *dungeons = GetPlayer()->GetLfgDungeons(); + if (grp->GetLfgStatus() == LFG_STATUS_COMPLETE) // Dungeon complete add all dungeons + { + dungeons->clear(); + for (int8 i = 0 ; i < numDungeons; ++i) + { + recv_data >> dungeon; + dungeons->insert((dungeon & 0x00FFFFFF)); + } + } + else if (dungeons->size() > 1 || dungeons->size() ==1 && !sLFGMgr.isRandomDungeon(*dungeons->begin())) + { + dungeons->clear(); + // ignore the list and select the current dungeon + for (int8 i = 0 ; i < numDungeons; ++i) + recv_data.read_skip<uint32>(); + dungeons->insert(grp->GetLfgDungeonEntry()); + } + else // currently added to random Dungeon + { + for (int8 i = 0 ; i < numDungeons; ++i) + { + recv_data >> dungeon; + // remove the type from the dungeon entry + GetPlayer()->GetLfgDungeons()->insert((dungeon & 0x00FFFFFF)); + } + } + } + else { - recv_data >> dungeon; - // remove the type from the dungeon entry - GetPlayer()->GetLfgDungeons()->insert((dungeon & 0x00FFFFFF)); + for (int8 i = 0 ; i < numDungeons; ++i) + { + recv_data >> dungeon; + // remove the type from the dungeon entry + GetPlayer()->GetLfgDungeons()->insert((dungeon & 0x00FFFFFF)); + } } recv_data >> numDungeons; // unk - always 3 |
