aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp7
-rw-r--r--src/server/game/Entities/Player/Player.h9
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp10
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp5
-rw-r--r--src/server/game/Scripting/ScriptMgr.h4
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h8
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
-rw-r--r--src/server/game/Server/WorldSession.h2
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);