diff options
| author | Machiavelli <machiavelli.trinity@gmail.com> | 2011-12-13 14:05:17 +0100 |
|---|---|---|
| committer | Machiavelli <machiavelli.trinity@gmail.com> | 2011-12-13 14:05:17 +0100 |
| commit | d237134d901fa8762dd49460ec43794afd7d6327 (patch) | |
| tree | 0ea46a30686b0e7fe329ffdc074551072fcc0cf4 /src/server/game/Events/GameEventMgr.cpp | |
| parent | b8dec4ec35bae3cee6a3726276ec9ec99e08fe1b (diff) | |
| parent | 589f06710187713796f220f0a874b4447aaa6829 (diff) | |
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.x
Diffstat (limited to 'src/server/game/Events/GameEventMgr.cpp')
| -rwxr-xr-x | src/server/game/Events/GameEventMgr.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index d3cc27c9e6c..5cb130b93e4 100755 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -27,6 +27,8 @@ #include "GossipDef.h" #include "Player.h" #include "BattlegroundMgr.h" +#include "UnitAI.h" +#include "GameObjectAI.h" bool GameEventMgr::CheckOneGameEvent(uint16 entry) const { @@ -1059,6 +1061,8 @@ uint32 GameEventMgr::Update() // return the next e void GameEventMgr::UnApplyEvent(uint16 event_id) { sLog->outDetail("GameEvent %u \"%s\" removed.", event_id, mGameEvent[event_id].description.c_str()); + //! Run SAI scripts with SMART_EVENT_GAME_EVENT_END + RunSmartAIScripts(event_id, false); // un-spawn positive event tagged objects GameEventUnspawn(event_id); // spawn negative event tagget objects @@ -1090,6 +1094,9 @@ void GameEventMgr::ApplyNewEvent(uint16 event_id) sLog->outDetail("GameEvent %u \"%s\" started.", event_id, mGameEvent[event_id].description.c_str()); + //! Run SAI scripts with SMART_EVENT_GAME_EVENT_END + RunSmartAIScripts(event_id, true); + // spawn positive event tagget objects GameEventSpawn(event_id); // un-spawn negative event tagged objects @@ -1601,6 +1608,26 @@ void GameEventMgr::SendWorldStateUpdate(Player* player, uint16 event_id) } } +void GameEventMgr::RunSmartAIScripts(uint16 event_id, bool activate) +{ + //! Iterate over every supported source type (creature and gameobject) + //! Not entirely sure how this will affect units in non-loaded grids. + { + TRINITY_READ_GUARD(HashMapHolder<Creature>::LockType, *HashMapHolder<Creature>::GetLock()); + HashMapHolder<Creature>::MapType const& m = ObjectAccessor::GetCreatures(); + for (HashMapHolder<Creature>::MapType::const_iterator iter = m.begin(); iter != m.end(); ++iter) + if (iter->second->IsInWorld()) + iter->second->AI()->sOnGameEvent(activate, event_id); + } + { + TRINITY_READ_GUARD(HashMapHolder<GameObject>::LockType, *HashMapHolder<GameObject>::GetLock()); + HashMapHolder<GameObject>::MapType const& m = ObjectAccessor::GetGameObjects(); + for (HashMapHolder<GameObject>::MapType::const_iterator iter = m.begin(); iter != m.end(); ++iter) + if (iter->second->IsInWorld()) + iter->second->AI()->OnGameEvent(activate, event_id); + } +} + bool IsHolidayActive(HolidayIds id) { if (id == HOLIDAY_NONE) |
