diff options
author | Spp <none@none> | 2010-09-26 14:49:55 +0200 |
---|---|---|
committer | Spp <none@none> | 2010-09-26 14:49:55 +0200 |
commit | 27187017083e82e0d23f652bc80ec1e209ee54a5 (patch) | |
tree | 1dcf1e2eed307baad1608b563fd141b3cf1c3189 /src | |
parent | ef16cc91094f524555f36f8b27480b7543dc267c (diff) |
Core/Dungeon Finder: Add support for dungeon cooldown and luck of the draw spells
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/DungeonFinding/LFGMgr.cpp | 20 | ||||
-rw-r--r-- | src/server/game/DungeonFinding/LFGMgr.h | 21 | ||||
-rw-r--r-- | src/server/game/Groups/Group.cpp | 3 |
3 files changed, 27 insertions, 17 deletions
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 4297e73687d..b091cd4ee53 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -586,9 +586,9 @@ void LFGMgr::Join(Player* plr) } else if (plr->InBattleground() || plr->InArena()) result = LFG_JOIN_USING_BG_SYSTEM; - else if (plr->HasAura(LFG_SPELL_DESERTER)) + else if (plr->HasAura(LFG_SPELL_DUNGEON_DESERTER)) result = LFG_JOIN_DESERTER; - else if (plr->HasAura(LFG_SPELL_COOLDOWN)) + else if (plr->HasAura(LFG_SPELL_DUNGEON_COOLDOWN)) result = LFG_JOIN_RANDOM_COOLDOWN; else { @@ -617,9 +617,9 @@ void LFGMgr::Join(Player* plr) plrg = itr->getSource(); if (plrg) { - if (plrg->HasAura(LFG_SPELL_DESERTER)) + if (plrg->HasAura(LFG_SPELL_DUNGEON_DESERTER)) result = LFG_JOIN_PARTY_DESERTER; - else if (plrg->HasAura(LFG_SPELL_COOLDOWN)) + else if (plrg->HasAura(LFG_SPELL_DUNGEON_COOLDOWN)) result = LFG_JOIN_PARTY_RANDOM_COOLDOWN; ++memberCount; } @@ -763,6 +763,7 @@ void LFGMgr::Leave(Player* plr, Group* grp /* = NULL*/) plr->GetLfgDungeons()->clear(); plr->SetLfgRoles(ROLE_NONE); plr->SetLfgState(LFG_STATE_NONE); + plr->RemoveAurasDueToSpell(LFG_SPELL_LUCK_OF_THE_DRAW); } } @@ -1608,7 +1609,10 @@ void LFGMgr::UpdateProposal(uint32 proposalId, uint32 lowGuid, bool accept) // Teleport Player for (LfgPlayerList::const_iterator it = players.begin(); it != players.end(); ++it) + { + (*it)->CastSpell(*it, LFG_SPELL_DUNGEON_COOLDOWN, false); TeleportPlayer(*it, false); + } for (LfgProposalPlayerMap::const_iterator it = pProposal->players.begin(); it != pProposal->players.end(); ++it) delete it->second; @@ -1813,6 +1817,7 @@ void LFGMgr::TeleportPlayer(Player* plr, bool out) sLog.outError("DEBUG:LFGMgr::TeleportPlayer: [" UI64FMTD "] is being teleported %s", plr->GetGUID(), out ? "out" : "in"); if (out) { + plr->RemoveAurasDueToSpell(LFG_SPELL_LUCK_OF_THE_DRAW); plr->TeleportToBGEntryPoint(); return; } @@ -1837,8 +1842,11 @@ void LFGMgr::TeleportPlayer(Player* plr, bool out) if (!plr->GetMap()->IsDungeon() && !plr->GetMap()->IsRaid()) plr->SetBattlegroundEntryPoint(); plr->RemoveAurasByType(SPELL_AURA_MOUNTED); - // TODO: Teleport to group - plr->TeleportTo(at->target_mapId, at->target_X, at->target_Y, at->target_Z, at->target_Orientation); + // TODO: Teleport to group + if (plr->TeleportTo(at->target_mapId, at->target_X, at->target_Y, at->target_Z, at->target_Orientation)) + plr->CastSpell(plr, LFG_SPELL_LUCK_OF_THE_DRAW, false); + else + sLog.outError("LfgMgr::TeleportPlayer: Failed to teleport [" UI64FMTD "] to map %u: ", plr->GetGUID(), at->target_mapId); } } diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h index a1d82290bb8..832d88ecc5e 100644 --- a/src/server/game/DungeonFinding/LFGMgr.h +++ b/src/server/game/DungeonFinding/LFGMgr.h @@ -28,16 +28,17 @@ class Player; enum LFGenum { - LFG_TIME_ROLECHECK = 2*MINUTE, - LFG_TIME_BOOT = 2*MINUTE, - LFG_TIME_PROPOSAL = 2*MINUTE, - LFG_TIME_JOIN_WARNING = 1*IN_MILLISECONDS, - LFG_TANKS_NEEDED = 1, - LFG_HEALERS_NEEDED = 1, - LFG_DPS_NEEDED = 3, - LFG_QUEUEUPDATE_INTERVAL = 15000, - LFG_SPELL_COOLDOWN = 71328, - LFG_SPELL_DESERTER = 71041, + LFG_TIME_ROLECHECK = 2*MINUTE, + LFG_TIME_BOOT = 2*MINUTE, + LFG_TIME_PROPOSAL = 2*MINUTE, + LFG_TIME_JOIN_WARNING = 1*IN_MILLISECONDS, + LFG_TANKS_NEEDED = 1, + LFG_HEALERS_NEEDED = 1, + LFG_DPS_NEEDED = 3, + LFG_QUEUEUPDATE_INTERVAL = 15*IN_MILLISECONDS, + LFG_SPELL_DUNGEON_COOLDOWN = 71328, + LFG_SPELL_DUNGEON_DESERTER = 71041, + LFG_SPELL_LUCK_OF_THE_DRAW = 72221, }; enum LfgType diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 415a406635d..f5de2dbc42b 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -321,7 +321,8 @@ bool Group::AddMember(const uint64 &guid, const char* name) Player *player = sObjectMgr.GetPlayer(guid); if (player) { - sLFGMgr.Leave(player); + if (player->isUsingLfg()) + sLFGMgr.Leave(player); if (!IsLeader(player->GetGUID()) && !isBGGroup()) { // reset the new member's instances, unless he is currently in one of them |