From e621f5fe98ac7f0c488ffb00b0d7844b7f4e27fd Mon Sep 17 00:00:00 2001 From: Spp Date: Sun, 5 Dec 2010 17:50:26 +0100 Subject: Core/Dungeon Finder: Code cleanup and minor optimizations - Extend LfgState to keep control of the state of group and players using LFG - Move scripts to its own class and initialize only if Dungeon finder is enabled - Updated comments to doxygen format - Use constructor initialization list - All variables are declared in the inner most scope - Fix some mem leaks - Remove no longer needed code (Cleaner) - Normalize handler function names --HG-- branch : trunk --- src/server/scripts/World/CMakeLists.txt | 1 - src/server/scripts/World/dungeon_finder.cpp | 163 ---------------------------- 2 files changed, 164 deletions(-) delete mode 100644 src/server/scripts/World/dungeon_finder.cpp (limited to 'src/server/scripts/World') diff --git a/src/server/scripts/World/CMakeLists.txt b/src/server/scripts/World/CMakeLists.txt index 3cc27cd8b5e..2f015db7cb4 100644 --- a/src/server/scripts/World/CMakeLists.txt +++ b/src/server/scripts/World/CMakeLists.txt @@ -7,7 +7,6 @@ set(scripts_STAT_SRCS World/boss_taerar.cpp World/boss_ysondre.cpp World/chat_log.cpp - World/dungeon_finder.cpp World/go_scripts.cpp World/guards.cpp World/item_scripts.cpp diff --git a/src/server/scripts/World/dungeon_finder.cpp b/src/server/scripts/World/dungeon_finder.cpp deleted file mode 100644 index 60a8ede4360..00000000000 --- a/src/server/scripts/World/dungeon_finder.cpp +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright (C) 2008-2010 TrinityCore - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -/* - * Interaction between core and LFGMgr - */ - -#include "ScriptPCH.h" -#include "LFGMgr.h" -#include "Group.h" - -class DungeonFinderScript: public GroupScript, PlayerScript -{ -public: - DungeonFinderScript(): GroupScript("DungeonFinderScript"), PlayerScript("DungeonFinderScript") { } - - void OnAddMember(Group* group, uint64 guid) - { - uint64 gguid = group->GetGUID(); - sLog.outDebug("OnAddMember [" UI64FMTD "]: added [" UI64FMTD "]", gguid, guid); - if (!gguid) - return; - - for (GroupReference *itr = group->GetFirstMember(); itr != NULL; itr = itr->next()) - { - if (Player *plrg = itr->getSource()) - { - plrg->GetSession()->SendLfgUpdatePlayer(LFG_UPDATETYPE_CLEAR_LOCK_LIST); - plrg->GetSession()->SendLfgUpdateParty(LFG_UPDATETYPE_CLEAR_LOCK_LIST); - } - } - - if (group->isLfgQueued()) - sLFGMgr.Leave(NULL, group); - - Player *plr = sObjectMgr.GetPlayer(guid); - if (plr && plr->isUsingLfg()) - sLFGMgr.Leave(plr); - } - - void OnRemoveMember(Group* group, uint64 guid, RemoveMethod& method, uint64 kicker, const char* reason) - { - uint64 gguid = group->GetGUID(); - sLog.outDebug("OnRemoveMember [" UI64FMTD "]: remove [" UI64FMTD "] Method: %d Kicker: [" UI64FMTD "] Reason: %s", gguid, guid, method, kicker, (reason ? reason : "")); - if (!gguid) - return; - - if (group->isLfgQueued()) - { - // TODO - Do not remove, just remove the one leaving and rejoin queue with all other data - sLFGMgr.Leave(NULL, group); - } - - if (!group->isLFGGroup()) - return; - - if (method == GROUP_REMOVEMETHOD_KICK) // Player have been kicked - { - // TODO - Update internal kick cooldown of kicker - std::string str_reason = ""; - if (reason) - str_reason = std::string(reason); - sLFGMgr.InitBoot(group, GUID_LOPART(kicker), GUID_LOPART(guid), str_reason); - return; - } - - if (Player *plr = sObjectMgr.GetPlayer(guid)) - { - /* - if (method == GROUP_REMOVEMETHOD_LEAVE) - // Add deserter flag - else if (group->isLfgKickActive()) - // Update internal kick cooldown of kicked - */ - - plr->GetSession()->SendLfgUpdateParty(LFG_UPDATETYPE_LEADER); - if (plr->GetMap()->IsDungeon()) // Teleport player out the dungeon - sLFGMgr.TeleportPlayer(plr, true); - } - - if (!group->isLfgDungeonComplete()) // Need more players to finish the dungeon - sLFGMgr.OfferContinue(group); - } - - void OnDisband(Group* group) - { - uint64 gguid = group->GetGUID(); - sLog.outDebug("OnDisband [" UI64FMTD "]", gguid); - if (!gguid) - return; - - if (group->isLfgQueued()) - sLFGMgr.Leave(NULL, group); - - for (GroupReference *itr = group->GetFirstMember(); itr != NULL; itr = itr->next()) - { - if (Player *plrg = itr->getSource()) - { - plrg->GetSession()->SendLfgUpdateParty(LFG_UPDATETYPE_GROUP_DISBAND); - plrg->GetSession()->SendLfgUpdateParty(LFG_UPDATETYPE_LEADER); - if (plrg->GetMap()->IsDungeon()) // Teleport player out the dungeon - sLFGMgr.TeleportPlayer(plrg, true); - } - } - } - - void OnChangeLeader(Group* group, uint64 newLeaderGuid, uint64 oldLeaderGuid) - { - uint64 gguid = group->GetGUID(); - sLog.outDebug("OnChangeLeader [" UI64FMTD "]: old [" UI64FMTD "] new [" UI64FMTD "]", gguid, newLeaderGuid, oldLeaderGuid); - if (!gguid) - return; - - Player *plr = sObjectMgr.GetPlayer(newLeaderGuid); - if (plr) - plr->GetSession()->SendLfgUpdateParty(LFG_UPDATETYPE_LEADER); - - plr = sObjectMgr.GetPlayer(oldLeaderGuid); - if (plr) - plr->GetSession()->SendLfgUpdateParty(LFG_UPDATETYPE_GROUP_DISBAND); - } - - void OnInviteMember(Group* group, uint64 guid) - { - uint64 gguid = group->GetGUID(); - sLog.outDebug("OnInviteMember [" UI64FMTD "]: invite [" UI64FMTD "] leader [" UI64FMTD "]", gguid, guid, group->GetLeaderGUID()); - if (!gguid) - return; - - sLFGMgr.Leave(NULL, group); - } - - void OnLevelChanged(Player* /*player*/, uint8 /*newLevel*/) - { - } - - void OnLogout(Player* player) - { - sLFGMgr.Leave(player); - player->GetSession()->SendLfgUpdateParty(LFG_UPDATETYPE_REMOVED_FROM_QUEUE); - player->GetSession()->SendLfgUpdatePlayer(LFG_UPDATETYPE_REMOVED_FROM_QUEUE); - player->GetSession()->SendLfgUpdateSearch(false); - } -}; - -void AddSC_dungeon_finder() -{ - new DungeonFinderScript(); -} -- cgit v1.2.3