aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorSpp <spp@jorge.gr>2010-08-12 00:02:15 +0200
committerSpp <spp@jorge.gr>2010-08-12 00:02:15 +0200
commiteec9212ee4e94551d21f04dc96150de0a086b15e (patch)
tree4a63f4cc11597697ed8ee59f55705df7e3571488 /src/server/game/Server
parent5b1b713aa69e7c144081db0ea395ac0d599cdacf (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.cpp44
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