diff options
| author | Spp <spp@jorge.gr> | 2010-08-17 11:26:31 +0200 |
|---|---|---|
| committer | Spp <spp@jorge.gr> | 2010-08-17 11:26:31 +0200 |
| commit | 6009ac3f45f89803039368d7c4f9858a7e02a308 (patch) | |
| tree | 57b89a1adea4c365bf767eb50d92bc3b505e1e92 /src/server/game/Server | |
| parent | 46d06a859bdaf5267e0d8b25db4f38ec3138346c (diff) | |
Dungeon Finder: Simplify 'Offer to continue' checks and allow to join non-random dungeon after a random one is assigned
--HG--
branch : trunk
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Protocol/Handlers/LFGHandler.cpp | 58 |
1 files changed, 17 insertions, 41 deletions
diff --git a/src/server/game/Server/Protocol/Handlers/LFGHandler.cpp b/src/server/game/Server/Protocol/Handlers/LFGHandler.cpp index fad5131b33f..5a0e2626e54 100644 --- a/src/server/game/Server/Protocol/Handlers/LFGHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/LFGHandler.cpp @@ -35,6 +35,7 @@ void WorldSession::HandleLfgJoinOpcode(WorldPacket &recv_data) uint32 dungeon; uint32 roles; std::string comment; + LfgDungeonSet newDungeons; recv_data >> roles; recv_data.read_skip<uint8>(); // unk - always 0 @@ -47,48 +48,10 @@ void WorldSession::HandleLfgJoinOpcode(WorldPacket &recv_data) return; } - GetPlayer()->SetLfgRoles(uint8(roles)); - - // 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 + for (int8 i = 0 ; i < numDungeons; ++i) { - for (int8 i = 0 ; i < numDungeons; ++i) - { - recv_data >> dungeon; - // remove the type from the dungeon entry - GetPlayer()->GetLfgDungeons()->insert((dungeon & 0x00FFFFFF)); - } + recv_data >> dungeon; + newDungeons.insert((dungeon & 0x00FFFFFF)); // remove the type from the dungeon entry } recv_data >> numDungeons; // unk - always 3 @@ -97,6 +60,19 @@ void WorldSession::HandleLfgJoinOpcode(WorldPacket &recv_data) recv_data >> comment; + LfgDungeonSet *dungeons = GetPlayer()->GetLfgDungeons(); + Group *grp = GetPlayer()->GetGroup(); + bool isRandomDungeon = dungeons->size() == 1 && sLFGMgr.isRandomDungeon(*dungeons->begin()); + bool isCurrentDungeon = newDungeons.size() == 1 && grp && grp->isLFGGroup() && grp->GetLfgDungeonEntry() == *newDungeons.begin(); + + if (!isRandomDungeon || !isCurrentDungeon) // is not offer to continue - clear old dungeons and use new dungeons + { + dungeons->clear(); + for (LfgDungeonSet::const_iterator it = newDungeons.begin(); it != newDungeons.end(); ++it) + dungeons->insert(*it); + } + newDungeons.clear(); + GetPlayer()->SetLfgRoles(uint8(roles)); GetPlayer()->SetLfgComment(comment); sLFGMgr.Join(GetPlayer()); } |
