aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/DungeonFinding/LFGScripts.cpp
diff options
context:
space:
mode:
authorSpp <none@none>2010-12-16 10:53:21 +0100
committerSpp <none@none>2010-12-16 10:53:21 +0100
commit46715001720f9ec8bf8e0164c2abcd262822868d (patch)
tree86fa9ed066c66571dd9e4ca2ee6d41d4cb09e007 /src/server/game/DungeonFinding/LFGScripts.cpp
parent451a6f40d447d6257bd25b469de36ac6095d0332 (diff)
Core/Dungeon Finder: Move all LFG data from Player and Group classes to internal LFG data classes.
--HG-- branch : trunk
Diffstat (limited to 'src/server/game/DungeonFinding/LFGScripts.cpp')
-rw-r--r--src/server/game/DungeonFinding/LFGScripts.cpp25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/server/game/DungeonFinding/LFGScripts.cpp b/src/server/game/DungeonFinding/LFGScripts.cpp
index d3c32b5364c..5a1310de01e 100644
--- a/src/server/game/DungeonFinding/LFGScripts.cpp
+++ b/src/server/game/DungeonFinding/LFGScripts.cpp
@@ -47,12 +47,12 @@ void LFGScripts::OnAddMember(Group* group, uint64 guid)
}
// TODO - if group is queued and new player is added convert to rolecheck without notify the current players queued
- if (group->GetLfgState() == LFG_STATE_QUEUED)
+ if (sLFGMgr.GetState(gguid) == LFG_STATE_QUEUED)
sLFGMgr.Leave(NULL, group);
- Player *plr = sObjectMgr.GetPlayer(guid);
- if (plr && plr->GetLfgState() == LFG_STATE_QUEUED)
- sLFGMgr.Leave(plr);
+ if (sLFGMgr.GetState(guid) == LFG_STATE_QUEUED)
+ if (Player *plr = sObjectMgr.GetPlayer(guid))
+ sLFGMgr.Leave(plr);
}
void LFGScripts::OnRemoveMember(Group* group, uint64 guid, RemoveMethod& method, uint64 kicker, const char* reason)
@@ -62,7 +62,7 @@ void LFGScripts::OnRemoveMember(Group* group, uint64 guid, RemoveMethod& method,
return;
sLog.outDebug("LFGScripts::OnRemoveMember [" UI64FMTD "]: remove [" UI64FMTD "] Method: %d Kicker: [" UI64FMTD "] Reason: %s", gguid, guid, method, kicker, (reason ? reason : ""));
- if (group->GetLfgState() == LFG_STATE_QUEUED)
+ if (sLFGMgr.GetState(gguid) == LFG_STATE_QUEUED)
{
// TODO - Do not remove, just remove the one leaving and rejoin queue with all other data
sLFGMgr.Leave(NULL, group);
@@ -81,6 +81,7 @@ void LFGScripts::OnRemoveMember(Group* group, uint64 guid, RemoveMethod& method,
return;
}
+ sLFGMgr.ClearState(guid);
if (Player *plr = sObjectMgr.GetPlayer(guid))
{
/*
@@ -89,20 +90,23 @@ void LFGScripts::OnRemoveMember(Group* group, uint64 guid, RemoveMethod& method,
else if (group->isLfgKickActive())
// Update internal kick cooldown of kicked
*/
-
- plr->ClearLfgState();
+
LfgUpdateData updateData = LfgUpdateData(LFG_UPDATETYPE_LEADER);
plr->GetSession()->SendLfgUpdateParty(updateData);
if (plr->GetMap()->IsDungeon()) // Teleport player out the dungeon
sLFGMgr.TeleportPlayer(plr, true);
}
- if (group->GetLfgState() != LFG_STATE_FINISHED_DUNGEON)// Need more players to finish the dungeon
+ if (sLFGMgr.GetState(gguid) != LFG_STATE_FINISHED_DUNGEON)// Need more players to finish the dungeon
sLFGMgr.OfferContinue(group);
}
-void LFGScripts::OnDisband(Group* /*group*/)
+void LFGScripts::OnDisband(Group* group)
{
+ uint64 gguid = group->GetGUID();
+ sLog.outError("LFGScripts::OnDisband [" UI64FMTD "]", gguid);
+
+ sLFGMgr.RemoveGroupData(gguid);
}
void LFGScripts::OnChangeLeader(Group* group, uint64 newLeaderGuid, uint64 oldLeaderGuid)
@@ -149,6 +153,9 @@ void LFGScripts::OnLogout(Player* player)
player->GetSession()->SendLfgUpdateParty(updateData);
player->GetSession()->SendLfgUpdatePlayer(updateData);
player->GetSession()->SendLfgUpdateSearch(false);
+ uint64 guid = player->GetGUID();
+ // TODO - Do not remove, add timer before deleting
+ sLFGMgr.RemovePlayerData(guid);
}
void LFGScripts::OnLogin(Player* /*player*/)