aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/server/game/AI/CreatureAISelector.cpp2
-rwxr-xr-xsrc/server/game/Entities/GameObject/GameObject.cpp6
-rwxr-xr-xsrc/server/game/Entities/GameObject/GameObject.h2
-rwxr-xr-xsrc/server/game/Entities/Transport/Transport.cpp8
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;