diff options
| -rw-r--r-- | sql/updates/world/2013_02_04_05_world_spell_script_names.sql | 1 | ||||
| -rw-r--r-- | src/server/game/DungeonFinding/LFGMgr.cpp | 14 | ||||
| -rw-r--r-- | src/server/game/DungeonFinding/LFGMgr.h | 9 | ||||
| -rw-r--r-- | src/server/game/DungeonFinding/LFGScripts.cpp | 18 | ||||
| -rw-r--r-- | src/server/game/DungeonFinding/LFGScripts.h | 1 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 19 | ||||
| -rw-r--r-- | src/server/game/Maps/Map.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 3 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 61 | 
10 files changed, 29 insertions, 103 deletions
diff --git a/sql/updates/world/2013_02_04_05_world_spell_script_names.sql b/sql/updates/world/2013_02_04_05_world_spell_script_names.sql new file mode 100644 index 00000000000..055e4b1d77d --- /dev/null +++ b/sql/updates/world/2013_02_04_05_world_spell_script_names.sql @@ -0,0 +1 @@ +DELETE FROM `spell_script_names` WHERE `spell_id`=72221; diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index e18a103e21c..9bb65b63557 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -1085,7 +1085,6 @@ void LFGMgr::UpdateProposal(uint32 proposalId, uint64 guid, bool accept)                  break;          } -        teleportStore.push_back(pguid);          SetState(pguid, LFG_STATE_DUNGEON);      } @@ -1320,10 +1319,7 @@ void LFGMgr::TeleportPlayer(Player* player, bool out, bool fromOpcode /*= false*          sLog->outDebug(LOG_FILTER_LFG, "TeleportPlayer: Player %s is being teleported out. Current Map %u - Expected Map %u",              player->GetName().c_str(), player->GetMapId(), uint32(dungeon->map));          if (player->GetMapId() == uint32(dungeon->map)) -        { -            player->RemoveAurasDueToSpell(LFG_SPELL_LUCK_OF_THE_DRAW);              player->TeleportToBGEntryPoint(); -        }          return;      } @@ -1597,16 +1593,6 @@ const std::string& LFGMgr::GetComment(uint64 guid)      return PlayersStore[guid].GetComment();  } -bool LFGMgr::hasPendingTeleport(uint64 pguid) -{ -    if (std::find(teleportStore.begin(), teleportStore.end(), pguid) != teleportStore.end()) -    { -        teleportStore.remove(pguid); -        return true; -    } -    return false; -} -  LfgDungeonSet const& LFGMgr::GetSelectedDungeons(uint64 guid)  {      sLog->outTrace(LOG_FILTER_LFG, "LFGMgr::GetSelectedDungeons: [" UI64FMTD "]", guid); diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h index 07c4281f86f..96fedb65547 100644 --- a/src/server/game/DungeonFinding/LFGMgr.h +++ b/src/server/game/DungeonFinding/LFGMgr.h @@ -329,8 +329,6 @@ class LFGMgr          void _LoadFromDB(Field* fields, uint64 guid);          /// Initializes player data after loading group data from DB          void SetupGroupMember(uint64 guid, uint64 gguid); -        /// Player has pending teleport action -        bool hasPendingTeleport(uint64 guid);          /// Return Lfg dungeon entry for given dungeon id          uint32 GetLFGDungeonEntry(uint32 id); @@ -340,7 +338,7 @@ class LFGMgr          /// Get current player comment (used for LFR)          std::string const& GetComment(uint64 gguid);          /// Gets current lfg options -        uint32 GetOptions(); // cs_lfg +        uint32 GetOptions();          /// Sets new lfg options          void SetOptions(uint32 options);          /// Checks if given lfg option is enabled @@ -355,8 +353,6 @@ class LFGMgr          uint64 GetLeader(uint64 guid);          /// Initializes locked dungeons for given player (called at login or level change)          void InitializeLockedDungeons(Player* player, uint8 level = 0); -        /// Inits new proposal to boot a player -        void InitBoot(uint64 gguid, uint64 kguid, uint64 vguid, std::string const& reason);          /// Sets player team          void SetTeam(uint64 guid, uint8 team);          /// Sets player group @@ -385,6 +381,8 @@ class LFGMgr          LfgDungeonSet GetRandomAndSeasonalDungeons(uint8 level, uint8 expansion);          /// Teleport a player to/from selected dungeon          void TeleportPlayer(Player* player, bool out, bool fromOpcode = false); +        /// Inits new proposal to boot a player +        void InitBoot(uint64 gguid, uint64 kguid, uint64 vguid, std::string const& reason);          /// Updates player boot proposal with new player answer          void UpdateBoot(uint64 guid, bool accept);          /// Updates proposal to join dungeon with player answer @@ -467,7 +465,6 @@ class LFGMgr          LfgPlayerBootContainer BootsStore;                 ///< Current player kicks          LfgPlayerDataContainer PlayersStore;               ///< Player data          LfgGroupDataContainer GroupsStore;                 ///< Group data -        LfgGuidList teleportStore;                         ///< Players being teleported  };  } // namespace lfg diff --git a/src/server/game/DungeonFinding/LFGScripts.cpp b/src/server/game/DungeonFinding/LFGScripts.cpp index ac95d289397..46a4ed4a134 100644 --- a/src/server/game/DungeonFinding/LFGScripts.cpp +++ b/src/server/game/DungeonFinding/LFGScripts.cpp @@ -88,6 +88,24 @@ void LFGPlayerScript::OnBindToInstance(Player* player, Difficulty difficulty, ui          sLFGMgr->InitializeLockedDungeons(player);  } +void LFGPlayerScript::OnMapChanged(Player* player) +{ +    Map const* map = player->GetMap(); + +    if (sLFGMgr->inLfgDungeonMap(player->GetGUID(), map->GetId(), map->GetDifficulty())) +    { +        Group* group = player->GetGroup(); +        for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next()) +            if (Player* member = itr->getSource()) +                player->GetSession()->SendNameQueryOpcode(member->GetGUID()); + +        if (sLFGMgr->selectedRandomLfgDungeon(player->GetGUID())) +            player->CastSpell(player, LFG_SPELL_LUCK_OF_THE_DRAW, true); +    } +    else // if (player->HasAura(lfg:LFG_SPELL_LUCK_OF_THE_DRAW)) +        player->RemoveAurasDueToSpell(LFG_SPELL_LUCK_OF_THE_DRAW); +} +  LFGGroupScript::LFGGroupScript() : GroupScript("LFGGroupScript")  {  } diff --git a/src/server/game/DungeonFinding/LFGScripts.h b/src/server/game/DungeonFinding/LFGScripts.h index e9c6b1499d1..bb1900cad93 100644 --- a/src/server/game/DungeonFinding/LFGScripts.h +++ b/src/server/game/DungeonFinding/LFGScripts.h @@ -39,6 +39,7 @@ class LFGPlayerScript : public PlayerScript          void OnLogout(Player* player);          void OnLogin(Player* player);          void OnBindToInstance(Player* player, Difficulty difficulty, uint32 mapId, bool permanent); +        void OnMapChanged(Player* player);  };  class LFGGroupScript : public GroupScript diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index dc98facc5ab..18b2a837b5a 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -7444,17 +7444,7 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea)      // group update      if (Group* group = GetGroup()) -    {          SetGroupUpdateFlag(GROUP_UPDATE_FULL); -        if (GetSession() && group->isLFGGroup() && sLFGMgr->hasPendingTeleport(GetGUID())) -        { -            for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next()) -            { -                if (Player* member = itr->getSource()) -                    GetSession()->SendNameQueryOpcode(member->GetGUID()); -            } -        } -    }      m_zoneUpdateId    = newZone;      m_zoneUpdateTimer = ZONE_UPDATE_INTERVAL; @@ -11913,19 +11903,12 @@ InventoryResult Player::CanUseItem(ItemTemplate const* proto) const  InventoryResult Player::CanRollForItemInLFG(ItemTemplate const* proto, WorldObject const* lootedObject) const  { -    lfg::LfgDungeonSet const& dungeons = sLFGMgr->GetSelectedDungeons(GetGUID()); -    if (dungeons.empty()) -        return EQUIP_ERR_OK;    // not using LFG -      if (!GetGroup() || !GetGroup()->isLFGGroup())          return EQUIP_ERR_OK;    // not in LFG group      // check if looted object is inside the lfg dungeon -    bool lootedObjectInDungeon = false;      Map const* map = lootedObject->GetMap(); -    lootedObjectInDungeon = sLFGMgr->inLfgDungeonMap(GetGroup()->GetGUID(), map->GetId(), map->GetDifficulty()); - -    if (!lootedObjectInDungeon) +    if (!sLFGMgr->inLfgDungeonMap(GetGroup()->GetGUID(), map->GetId(), map->GetDifficulty()))          return EQUIP_ERR_OK;      if (!proto) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 288592d1029..7fe516a1eb4 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -26,7 +26,6 @@  #include "GridStates.h"  #include "Group.h"  #include "InstanceScript.h" -#include "LFGMgr.h"  #include "MapInstanced.h"  #include "MapManager.h"  #include "ObjectAccessor.h" @@ -2484,9 +2483,6 @@ bool InstanceMap::AddPlayerToMap(Player* player)                          ASSERT(playerBind->save == mapSave);                  }              } - -            if (group && group->isLFGGroup()) -                player->CastSpell(player, lfg::LFG_SPELL_LUCK_OF_THE_DRAW, true);          }          // for normal instances cancel the reset schedule when the diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index cae8ea9d2d5..8321b88962f 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -580,6 +580,8 @@ void ScriptMgr::OnPlayerEnterMap(Map* map, Player* player)      ASSERT(map);      ASSERT(player); +    FOREACH_SCRIPT(PlayerScript)->OnMapChanged(player); +      SCR_MAP_BGN(WorldMapScript, map, itr, end, entry, IsWorldMap);          itr->second->OnPlayerEnter(map, player);      SCR_MAP_END; diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 7f140cfffe0..b13c2da7f6c 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -754,6 +754,9 @@ class PlayerScript : public UnitScript          // Called when a player switches to a new zone          virtual void OnUpdateZone(Player* /*player*/, uint32 /*newZone*/, uint32 /*newArea*/) { } + +        // Called when a player changes to a new map (after moving to new map) +        virtual void OnMapChanged(Player* /*player*/) { }  };  class GuildScript : public ScriptObject diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 39992e94c21..edda9750709 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -1707,66 +1707,6 @@ class spell_gen_damage_reduction_aura : public SpellScriptLoader          }  }; -class spell_gen_luck_of_the_draw : public SpellScriptLoader -{ -    public: -        spell_gen_luck_of_the_draw() : SpellScriptLoader("spell_gen_luck_of_the_draw") { } - -        class spell_gen_luck_of_the_draw_AuraScript : public AuraScript -        { -            PrepareAuraScript(spell_gen_luck_of_the_draw_AuraScript); -            Map const* map; -            Difficulty difficulty; - -            bool Load() -            { -                Player* owner = GetUnitOwner()->ToPlayer(); -                if (!owner) -                    return false; - -                Group* group = owner->GetGroup(); -                if (!group || !group->isLFGGroup()) -                    return false; - -                if (!sLFGMgr->selectedRandomLfgDungeon(owner->GetGUID())) -                    return false; - -                map = owner->GetMap(); -                difficulty = owner->GetMap()->GetDifficulty(); -                 -                if (!sLFGMgr->inLfgDungeonMap(owner->GetGUID(), map->GetId(), difficulty)) -                    return false; - -                return true; -            } - -            // cheap hax to make it have update calls -            void CalcPeriodic(AuraEffect const* /*effect*/, bool& isPeriodic, int32& amplitude) -            { -                isPeriodic = true; -                amplitude = 5 * IN_MILLISECONDS; -            } - -            void Update(AuraEffect* /*effect*/) -            { -                Map const* currentMap = GetUnitOwner()->ToPlayer()->GetMap(); -                if (currentMap != map || currentMap->GetDifficulty() != difficulty) -                    Remove(AURA_REMOVE_BY_DEFAULT); -            } - -            void Register() -            { -                DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_gen_luck_of_the_draw_AuraScript::CalcPeriodic, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE); -                OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_gen_luck_of_the_draw_AuraScript::Update, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE); -            } -        }; - -        AuraScript* GetAuraScript() const -        { -            return new spell_gen_luck_of_the_draw_AuraScript(); -        } -}; -  enum DummyTrigger  {      SPELL_PERSISTANT_SHIELD_TRIGGERED       = 26470, @@ -3608,7 +3548,6 @@ void AddSC_generic_spell_scripts()      new spell_gen_vehicle_scaling();      new spell_gen_oracle_wolvar_reputation();      new spell_gen_damage_reduction_aura(); -    new spell_gen_luck_of_the_draw();      new spell_gen_dummy_trigger();      new spell_gen_spirit_healer_res();      new spell_gen_gadgetzan_transporter_backfire();  | 
