diff options
author | Krudor <erikstrandberg93@hotmail.com> | 2016-12-17 18:27:43 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-12-17 18:27:43 +0100 |
commit | 1530c956979f9d4b56b9e585dbc16d7660e609b1 (patch) | |
tree | 7643badb91c739a8ca4c1800ccb5c07a7883c9c7 | |
parent | 9c8f641cd2d7713a91281362b15c31a19e4a4071 (diff) |
Core/Scripts: Add server-side script support for movie completion (#18308)
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 7 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 9 | ||||
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 4 | ||||
-rw-r--r-- | src/server/game/Server/Packets/MiscPackets.h | 8 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 2 |
8 files changed, 42 insertions, 5 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index e8650013beb..afcf846a6f8 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -179,6 +179,8 @@ Player::Player(WorldSession* session) : Unit(true), m_sceneMgr(this) m_cinematic = 0; + m_movie = 0; + PlayerTalkClass = new PlayerMenu(GetSession()); m_currentBuybackSlot = BUYBACK_SLOT_START; @@ -5917,10 +5919,11 @@ void Player::SendCinematicStart(uint32 CinematicSequenceId) const SendDirectMessage(packet.Write()); } -void Player::SendMovieStart(uint32 MovieId) const +void Player::SendMovieStart(uint32 movieId) { + SetMovie(movieId); WorldPackets::Misc::TriggerMovie packet; - packet.MovieID = MovieId; + packet.MovieID = movieId; SendDirectMessage(packet.Write()); } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index caad21e8148..8166b0c3fc8 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1850,6 +1850,9 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> uint8 getCinematic() const { return m_cinematic; } void setCinematic(uint8 cine) { m_cinematic = cine; } + uint32 GetMovie() const { return m_movie; } + void SetMovie(uint32 movie) { m_movie = movie; } + ActionButton* AddActionButton(uint8 button, uint32 action, uint8 type); void RemoveActionButton(uint8 button); ActionButton const* GetActionButton(uint8 button); @@ -2340,7 +2343,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> bool IsPetNeedBeTemporaryUnsummoned() const; void SendCinematicStart(uint32 CinematicSequenceId) const; - void SendMovieStart(uint32 MovieId) const; + void SendMovieStart(uint32 movieId); uint32 DoRandomRoll(uint32 minimum, uint32 maximum); @@ -2687,7 +2690,9 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> JoinedChannelsList m_channels; - uint8 m_cinematic; + uint8 m_cinematic; + + uint32 m_movie; TradeData* m_trade; diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 2e5c36279ce..499f11e0d75 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -726,6 +726,16 @@ void WorldSession::HandleNextCinematicCamera(WorldPackets::Misc::NextCinematicCa { } +void WorldSession::HandleCompleteMovie(WorldPackets::Misc::CompleteMovie& /*packet*/) +{ + uint32 movie = _player->GetMovie(); + if (!movie) + return; + + _player->SetMovie(0); + sScriptMgr->OnMovieComplete(_player, movie); +} + void WorldSession::HandleSetActionBarToggles(WorldPackets::Character::SetActionBarToggles& packet) { if (!GetPlayer()) // ignore until not logged (check needed because STATUS_AUTHED) diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index adf37585e51..726aa79fcca 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -2153,6 +2153,11 @@ void ScriptMgr::OnQuestStatusChange(Player* player, uint32 questId, QuestStatus FOREACH_SCRIPT(PlayerScript)->OnQuestStatusChange(player, questId, status); } +void ScriptMgr::OnMovieComplete(Player* player, uint32 movieId) +{ + FOREACH_SCRIPT(PlayerScript)->OnMovieComplete(player, movieId); +} + // Account void ScriptMgr::OnAccountLogin(uint32 accountId) { diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index e360b80f94d..32ff90dc3db 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -739,6 +739,9 @@ class TC_GAME_API PlayerScript : public UnitScript // Called after a player's quest status has been changed virtual void OnQuestStatusChange(Player* /*player*/, uint32 /*questId*/, QuestStatus /*status*/) { } + + // Called when a player completes a movie + virtual void OnMovieComplete(Player* /*player*/, uint32 /*movieId*/) { } }; class TC_GAME_API AccountScript : public ScriptObject @@ -1088,6 +1091,7 @@ class TC_GAME_API ScriptMgr void OnPlayerBindToInstance(Player* player, Difficulty difficulty, uint32 mapid, bool permanent, uint8 extendState); void OnPlayerUpdateZone(Player* player, uint32 newZone, uint32 newArea); void OnQuestStatusChange(Player* player, uint32 questId, QuestStatus status); + void OnMovieComplete(Player* player, uint32 movieId); public: /* AccountScript */ diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index 654a5ae715f..fd9d6237fa8 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -653,6 +653,14 @@ namespace WorldPackets void Read() override { } }; + class CompleteMovie final : public ClientPacket + { + public: + CompleteMovie(WorldPacket&& packet) : ClientPacket(CMSG_COMPLETE_MOVIE, std::move(packet)) { } + + void Read() override { } + }; + class FarSight final : public ClientPacket { public: diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 60ce86eee56..df091d53d56 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -311,7 +311,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_COMMENTATOR_START_WARGAME, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_COMPLAINT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleComplaint); DEFINE_HANDLER(CMSG_COMPLETE_CINEMATIC, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCompleteCinematic); - DEFINE_HANDLER(CMSG_COMPLETE_MOVIE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_COMPLETE_MOVIE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCompleteMovie); DEFINE_HANDLER(CMSG_CONFIRM_ARTIFACT_RESPEC, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleConfirmArtifactRespec); DEFINE_HANDLER(CMSG_CONFIRM_RESPEC_WIPE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleConfirmRespecWipeOpcode); DEFINE_HANDLER(CMSG_CONNECT_TO_FAILED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 5c49c0887c9..f94d956f52f 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -422,6 +422,7 @@ namespace WorldPackets class ObjectUpdateFailed; class ObjectUpdateRescued; class CompleteCinematic; + class CompleteMovie; class NextCinematicCamera; class FarSight; class LoadCUFProfiles; @@ -1514,6 +1515,7 @@ class TC_GAME_API WorldSession void HandleCompleteCinematic(WorldPackets::Misc::CompleteCinematic& packet); void HandleNextCinematicCamera(WorldPackets::Misc::NextCinematicCamera& packet); + void HandleCompleteMovie(WorldPackets::Misc::CompleteMovie& packet); void HandleQueryPageText(WorldPackets::Query::QueryPageText& packet); |