diff options
| author | Traesh <traesh@farahlon.com> | 2016-09-25 16:13:12 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2016-09-25 16:13:12 +0200 |
| commit | d4887311e39527e036419ebd966f399fdbdae67a (patch) | |
| tree | 7a87b65e493e3b0660790b02b151107fc4ab66b4 /src/server/game/Scripting | |
| parent | dd64a3cd36d7c8db67f4075c5a8c1eb01898d1ed (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.cpp | 48 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 27 |
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; |
