aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorAokromes <aokromes@gmail.com>2017-03-26 13:32:28 +0200
committerAokromes <aokromes@gmail.com>2017-03-26 13:32:28 +0200
commit0999ef0b774f2c93beefa6329d1a42a13377a35b (patch)
tree86293ced1ccfbb75d7a422e81b478ac83ef2edc6 /src/server/game/Entities
parentde4043097e31d7ba968425f0a2ec55a9a1e5b117 (diff)
Core/Scripts: Add support for spawn specific C++ scripts
By Krudor
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp5
-rw-r--r--src/server/game/Entities/Creature/Creature.h1
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp8
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h3
4 files changed, 15 insertions, 2 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 952f0be0d19..51807373822 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -1013,7 +1013,7 @@ bool Creature::Create(ObjectGuid::LowType guidlow, Map* map, uint32 phaseMask, u
Relocate(x, y, z, ang);
}
- LastUsedScriptID = GetCreatureTemplate()->ScriptID;
+ LastUsedScriptID = GetScriptId();
/// @todo Replace with spell, handle from DB
if (IsSpiritHealer() || IsSpiritGuide())
@@ -2591,6 +2591,9 @@ std::string Creature::GetScriptName() const
uint32 Creature::GetScriptId() const
{
+ if (CreatureData const* creatureData = GetCreatureData())
+ return creatureData->ScriptId;
+
return sObjectMgr->GetCreatureTemplate(GetEntry())->ScriptID;
}
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index 1fc9833e376..dcffc7e0051 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -281,6 +281,7 @@ struct CreatureData
uint32 npcflag;
uint32 unit_flags; // enum UnitFlags mask values
uint32 dynamicflags;
+ uint32 ScriptId;
bool dbData;
};
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 1e5e2a32458..d399de52cdf 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -1954,6 +1954,14 @@ void GameObject::EventInform(uint32 eventId, WorldObject* invoker /*= nullptr*/)
bgMap->GetBG()->ProcessEvent(this, eventId, invoker);
}
+uint32 GameObject::GetScriptId() const
+{
+ if (GameObjectData const* gameObjectData = GetGOData())
+ return gameObjectData->ScriptId;
+
+ return GetGOInfo()->ScriptId;
+}
+
// overwrite WorldObject function for proper name localization
std::string const & GameObject::GetNameForLocaleIdx(LocaleConstant loc_idx) const
{
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index bad48e0693d..26982066af9 100644
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -654,6 +654,7 @@ struct GameObjectData
GOState go_state;
uint8 spawnMask;
uint8 artKit;
+ uint32 ScriptId;
bool dbData;
};
@@ -872,7 +873,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
void EventInform(uint32 eventId, WorldObject* invoker = NULL);
- virtual uint32 GetScriptId() const { return GetGOInfo()->ScriptId; }
+ virtual uint32 GetScriptId() const;
GameObjectAI* AI() const { return m_AI; }
std::string GetAIName() const;