aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/DungeonFinding/LFGMgr.cpp
diff options
context:
space:
mode:
authorSpp <spp@jorge.gr>2012-11-28 08:29:39 +0100
committerSpp <spp@jorge.gr>2012-11-28 08:29:39 +0100
commita7d8a65bd0a95f21f1e350cefbef94ace20f69ec (patch)
tree6a17aed7e6efdeeeb77f9740d2e04e656c7ee501 /src/server/game/DungeonFinding/LFGMgr.cpp
parentcddc0a09ba6870894dd189202306f5429a6373bd (diff)
Core/Dungeon Finder: Partial revert of ad6b5fb419
Diffstat (limited to 'src/server/game/DungeonFinding/LFGMgr.cpp')
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp52
1 files changed, 15 insertions, 37 deletions
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index f8aea2d10f3..668b1622738 100644
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -809,18 +809,12 @@ void LFGMgr::LeaveLfg(uint64 guid)
RemoveProposal(it, LFG_UPDATETYPE_PROPOSAL_DECLINED);
break;
}
- case LFG_STATE_BOOT:
- if (guid != gguid) // Player
- {
- UpdateBoot(guid); // Forcing LFG_ANSWER_PENDING (Removal of player)
- SetState(guid, LFG_STATE_NONE);
- }
- break;
case LFG_STATE_NONE:
case LFG_STATE_RAIDBROWSER:
break;
case LFG_STATE_DUNGEON:
case LFG_STATE_FINISHED_DUNGEON:
+ case LFG_STATE_BOOT:
if (guid != gguid) // Player
SetState(guid, LFG_STATE_NONE);
break;
@@ -1342,7 +1336,7 @@ void LFGMgr::InitBoot(uint64 gguid, uint64 kicker, uint64 victim, std::string co
@param[in] guid Player who has answered
@param[in] player answer
*/
-void LFGMgr::UpdateBoot(uint64 guid, LfgAnswer answer)
+void LFGMgr::UpdateBoot(uint64 guid, bool accept)
{
uint64 gguid = GetGroup(guid);
if (!gguid)
@@ -1354,42 +1348,26 @@ void LFGMgr::UpdateBoot(uint64 guid, LfgAnswer answer)
LfgPlayerBoot& boot = itBoot->second;
+ if (boot.votes[guid] != LFG_ANSWER_PENDING) // Cheat check: Player can't vote twice
+ return;
+
+ boot.votes[guid] = LfgAnswer(accept);
+
uint8 votesNum = 0;
uint8 agreeNum = 0;
-
- if (guid == boot.victim)
- agreeNum = LFG_GROUP_KICK_VOTES_NEEDED + 1; // +1 on purpose to skip kick code
- else if (answer == LFG_ANSWER_PENDING)
+ for (LfgAnswerContainer::const_iterator itVotes = boot.votes.begin(); itVotes != boot.votes.end(); ++itVotes)
{
- boot.votes.erase(guid);
- // If we don't have enough members - force boot fail
- if (boot.votes.size() <= LFG_GROUP_KICK_VOTES_NEEDED)
+ if (itVotes->second != LFG_ANSWER_PENDING)
{
- agreeNum = 0;
- votesNum = boot.votes.size();
+ ++votesNum;
+ if (itVotes->second == LFG_ANSWER_AGREE)
+ ++agreeNum;
}
}
- else
- {
- if (boot.votes[guid] != LFG_ANSWER_PENDING) // Cheat check: Player can't vote twice
- return;
-
- boot.votes[guid] = answer;
-
- for (LfgAnswerContainer::const_iterator itVotes = boot.votes.begin(); itVotes != boot.votes.end(); ++itVotes)
- {
- if (itVotes->second != LFG_ANSWER_PENDING)
- {
- ++votesNum;
- if (itVotes->second == LFG_ANSWER_AGREE)
- ++agreeNum;
- }
- }
- // if we don't have enough votes (agree or deny) do nothing
- if (agreeNum < LFG_GROUP_KICK_VOTES_NEEDED && (votesNum - agreeNum) < LFG_GROUP_KICK_VOTES_NEEDED)
- return;
- }
+ // if we don't have enough votes (agree or deny) do nothing
+ if (agreeNum < LFG_GROUP_KICK_VOTES_NEEDED && (votesNum - agreeNum) < LFG_GROUP_KICK_VOTES_NEEDED)
+ return;
// Send update info to all players
boot.inProgress = false;