aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Scripting
diff options
context:
space:
mode:
authorTraesh <traesh@farahlon.com>2016-09-25 16:13:12 +0200
committerShauren <shauren.trinity@gmail.com>2016-09-25 16:13:12 +0200
commitd4887311e39527e036419ebd966f399fdbdae67a (patch)
tree7a87b65e493e3b0660790b02b151107fc4ab66b4 /src/server/game/Scripting
parentdd64a3cd36d7c8db67f4075c5a8c1eb01898d1ed (diff)
Core/Scenes: Implemented scene system
Closes #17858 Closes #17976
Diffstat (limited to 'src/server/game/Scripting')
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp48
-rw-r--r--src/server/game/Scripting/ScriptMgr.h27
2 files changed, 75 insertions, 0 deletions
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp
index d228e161b69..17a71ed8ff8 100644
--- a/src/server/game/Scripting/ScriptMgr.cpp
+++ b/src/server/game/Scripting/ScriptMgr.cpp
@@ -96,6 +96,10 @@ template<>
struct is_script_database_bound<AchievementCriteriaScript>
: std::true_type { };
+template<>
+struct is_script_database_bound<SceneScript>
+ : std::true_type { };
+
enum Spells
{
SPELL_HOTSWAP_VISUAL_SPELL_EFFECT = 40162 // 59084
@@ -2296,6 +2300,43 @@ void ScriptMgr::ModifySpellDamageTaken(Unit* target, Unit* attacker, int32& dama
FOREACH_SCRIPT(PlayerScript)->ModifySpellDamageTaken(target, attacker, damage);
}
+// Scene
+void ScriptMgr::OnSceneStart(Player* player, uint32 sceneInstanceID, SceneTemplate const* sceneTemplate)
+{
+ ASSERT(player);
+ ASSERT(sceneTemplate);
+
+ GET_SCRIPT(SceneScript, sceneTemplate->ScriptId, tmpscript);
+ tmpscript->OnSceneStart(player, sceneInstanceID, sceneTemplate);
+}
+
+void ScriptMgr::OnSceneTrigger(Player* player, uint32 sceneInstanceID, SceneTemplate const* sceneTemplate, std::string const& triggerName)
+{
+ ASSERT(player);
+ ASSERT(sceneTemplate);
+
+ GET_SCRIPT(SceneScript, sceneTemplate->ScriptId, tmpscript);
+ tmpscript->OnSceneTriggerEvent(player, sceneInstanceID, sceneTemplate, triggerName);
+}
+
+void ScriptMgr::OnSceneCancel(Player* player, uint32 sceneInstanceID, SceneTemplate const* sceneTemplate)
+{
+ ASSERT(player);
+ ASSERT(sceneTemplate);
+
+ GET_SCRIPT(SceneScript, sceneTemplate->ScriptId, tmpscript);
+ tmpscript->OnSceneCancel(player, sceneInstanceID, sceneTemplate);
+}
+
+void ScriptMgr::OnSceneComplete(Player* player, uint32 sceneInstanceID, SceneTemplate const* sceneTemplate)
+{
+ ASSERT(player);
+ ASSERT(sceneTemplate);
+
+ GET_SCRIPT(SceneScript, sceneTemplate->ScriptId, tmpscript);
+ tmpscript->OnSceneComplete(player, sceneInstanceID, sceneTemplate);
+}
+
SpellScriptLoader::SpellScriptLoader(const char* name)
: ScriptObject(name)
{
@@ -2450,6 +2491,12 @@ AccountScript::AccountScript(const char* name)
ScriptRegistry<AccountScript>::Instance()->AddScript(this);
}
+SceneScript::SceneScript(const char* name)
+ : ScriptObject(name)
+{
+ ScriptRegistry<SceneScript>::Instance()->AddScript(this);
+}
+
GuildScript::GuildScript(const char* name)
: ScriptObject(name)
{
@@ -2489,3 +2536,4 @@ template class TC_GAME_API ScriptRegistry<GuildScript>;
template class TC_GAME_API ScriptRegistry<GroupScript>;
template class TC_GAME_API ScriptRegistry<UnitScript>;
template class TC_GAME_API ScriptRegistry<AccountScript>;
+template class TC_GAME_API ScriptRegistry<SceneScript>;
diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h
index a8458af987b..22d8426796e 100644
--- a/src/server/game/Scripting/ScriptMgr.h
+++ b/src/server/game/Scripting/ScriptMgr.h
@@ -69,6 +69,7 @@ struct Condition;
struct ItemTemplate;
struct MapEntry;
struct OutdoorPvPData;
+struct SceneTemplate;
#define VISIBLE_RANGE 166.0f //MAX visible range (size of grid)
@@ -831,6 +832,26 @@ class TC_GAME_API GroupScript : public ScriptObject
virtual void OnDisband(Group* /*group*/) { }
};
+class TC_GAME_API SceneScript : public ScriptObject
+{
+ protected:
+
+ SceneScript(const char* name);
+
+ public:
+ // Called when a player start a scene
+ virtual void OnSceneStart(Player* /*player*/, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/) { }
+
+ // Called when a player receive trigger from scene
+ virtual void OnSceneTriggerEvent(Player* /*player*/, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/, std::string const& /*triggerName*/) { }
+
+ // Called when a scene is canceled
+ virtual void OnSceneCancel(Player* /*player*/, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/) { }
+
+ // Called when a scene is completed
+ virtual void OnSceneComplete(Player* /*player*/, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/) { }
+};
+
// Manages registration, loading, and execution of scripts.
class TC_GAME_API ScriptMgr
{
@@ -1107,6 +1128,12 @@ class TC_GAME_API ScriptMgr
void ModifyMeleeDamage(Unit* target, Unit* attacker, uint32& damage);
void ModifySpellDamageTaken(Unit* target, Unit* attacker, int32& damage);
+ public: /* SceneScript */
+ void OnSceneStart(Player* player, uint32 sceneInstanceID, SceneTemplate const* sceneTemplate);
+ void OnSceneTrigger(Player* player, uint32 sceneInstanceID, SceneTemplate const* sceneTemplate, std::string const& triggerName);
+ void OnSceneCancel(Player* player, uint32 sceneInstanceID, SceneTemplate const* sceneTemplate);
+ void OnSceneComplete(Player* player, uint32 sceneInstanceID, SceneTemplate const* sceneTemplate);
+
private:
uint32 _scriptCount;