diff options
-rwxr-xr-x | src/server/game/AI/CreatureAISelector.cpp | 2 | ||||
-rwxr-xr-x | src/server/game/Entities/GameObject/GameObject.cpp | 6 | ||||
-rwxr-xr-x | src/server/game/Entities/GameObject/GameObject.h | 2 | ||||
-rwxr-xr-x | src/server/game/Entities/Transport/Transport.cpp | 8 |
4 files changed, 14 insertions, 4 deletions
diff --git a/src/server/game/AI/CreatureAISelector.cpp b/src/server/game/AI/CreatureAISelector.cpp index 1fc847d3bb7..b0fcc98f622 100755 --- a/src/server/game/AI/CreatureAISelector.cpp +++ b/src/server/game/AI/CreatureAISelector.cpp @@ -137,7 +137,7 @@ namespace FactorySelector //future goAI types go here - std::string ainame = (ai_factory == NULL) ? "NullGameObjectAI" : ai_factory->key(); + std::string ainame = (ai_factory == NULL || go->GetScriptId()) ? "NullGameObjectAI" : ai_factory->key(); sLog.outStaticDebug("GameObject %u used AI is %s.", go->GetGUIDLow(), ainame.c_str()); diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index eb9a25b17cc..33dd0422ce8 100755 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -239,9 +239,12 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map *map, uint32 phaseMa void GameObject::Update(uint32 diff) { - if(!m_AI) + if(!AI()) + { if (!AIM_Initialize()) sLog.outError("Could not initialize GameObjectAI"); + } else + AI()->UpdateAI(diff); if (IS_MO_TRANSPORT(GetGUID())) { @@ -550,7 +553,6 @@ void GameObject::Update(uint32 diff) break; } } - AI()->UpdateAI(diff); sScriptMgr.OnGameObjectUpdate(this, diff); } diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 5da1fceae21..4ed40c7d6e9 100755 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -752,6 +752,7 @@ class GameObject : public WorldObject, public GridObject<GameObject> std::string GetAIName() const; protected: + bool AIM_Initialize(); uint32 m_spellId; time_t m_respawnTime; // (secs) time of next respawn (or despawn if GO have owner()), uint32 m_respawnDelayTime; // (secs) if 0 then current GO state no dependent from timer @@ -779,6 +780,5 @@ class GameObject : public WorldObject, public GridObject<GameObject> private: void SwitchDoorOrButton(bool activate, bool alternative = false); GameObjectAI* m_AI; - bool AIM_Initialize(); }; #endif diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index a00fd51d4de..1ce86567d17 100755 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -26,6 +26,7 @@ #include "DBCStores.h" #include "ProgressBar.h" #include "World.h" +#include "GameObjectAI.h" void MapManager::LoadTransports() { @@ -544,6 +545,13 @@ bool Transport::RemovePassenger(Player* passenger) void Transport::Update(uint32 p_diff) { + if(!AI()) + { + if (!AIM_Initialize()) + sLog.outError("Could not initialize GameObjectAI for Transport"); + } else + AI()->UpdateAI(p_diff); + if (m_WayPoints.size() <= 1) return; |