aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp15
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.cpp15
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.h22
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp4
-rw-r--r--src/server/game/Server/WorldSession.h3
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/nexus.h2
6 files changed, 48 insertions, 13 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index 7a983f7b847..2759b4f2f5e 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -965,16 +965,13 @@ void WorldSession::HandleSetActionBarToggles(WorldPackets::Character::SetActionB
GetPlayer()->SetByteValue(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES, packet.Mask);
}
-void WorldSession::HandlePlayedTime(WorldPacket& recvData)
+void WorldSession::HandlePlayedTime(WorldPackets::Character::PlayedTimeClient& packet)
{
- uint8 unk1;
- recvData >> unk1; // 0 or 1 expected
-
- WorldPacket data(SMSG_PLAYED_TIME, 4 + 4 + 1);
- data << uint32(_player->GetTotalPlayedTime());
- data << uint32(_player->GetLevelPlayedTime());
- data << uint8(unk1); // 0 - will not show in chat frame
- SendPacket(&data);
+ WorldPackets::Character::PlayedTime playedTime;
+ playedTime.TotalTime = _player->GetTotalPlayedTime();
+ playedTime.LevelTime = _player->GetLevelPlayedTime();
+ playedTime.TriggerEvent = packet.TriggerScriptEvent; // 0-1 - will not show in chat frame
+ SendPacket(playedTime.Write());
}
void WorldSession::HandleWorldTeleportOpcode(WorldPacket& recvData)
diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp
index 5383002ad21..e5a415e6f7f 100644
--- a/src/server/game/Server/Packets/CharacterPackets.cpp
+++ b/src/server/game/Server/Packets/CharacterPackets.cpp
@@ -401,3 +401,18 @@ void WorldPackets::Character::SetActionBarToggles::Read()
{
_worldPacket >> Mask;
}
+
+void WorldPackets::Character::PlayedTimeClient::Read()
+{
+ TriggerScriptEvent = _worldPacket.ReadBit();
+}
+
+WorldPacket const* WorldPackets::Character::PlayedTime::Write()
+{
+ _worldPacket << int32(TotalTime);
+ _worldPacket << int32(LevelTime);
+ _worldPacket.WriteBit(TriggerEvent);
+ _worldPacket.FlushBits();
+
+ return &_worldPacket;
+}
diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h
index a381fa93e74..d281aa4b7ba 100644
--- a/src/server/game/Server/Packets/CharacterPackets.h
+++ b/src/server/game/Server/Packets/CharacterPackets.h
@@ -538,6 +538,28 @@ namespace WorldPackets
uint8 Mask = 0;
};
+
+ class PlayedTimeClient final : public ClientPacket
+ {
+ public:
+ PlayedTimeClient(WorldPacket&& packet) : ClientPacket(CMSG_PLAYED_TIME, std::move(packet)) { }
+
+ void Read() override;
+
+ bool TriggerScriptEvent = false;
+ };
+
+ class PlayedTime final : public ServerPacket
+ {
+ public:
+ PlayedTime() : ServerPacket(SMSG_PLAYED_TIME, 9) { }
+
+ WorldPacket const* Write() override;
+
+ int32 TotalTime = 0;
+ int32 LevelTime = 0;
+ bool TriggerEvent = false;
+ };
}
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 107f77ad50f..41dd7ce4115 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -648,7 +648,7 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER_OLD(CMSG_PET_SPELL_AUTOCAST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePetSpellAutocastOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_PET_STOP_ATTACK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePetStopAttack );
DEFINE_HANDLER(CMSG_PING, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPacket, &WorldSession::Handle_EarlyProccess);
- DEFINE_OPCODE_HANDLER_OLD(CMSG_PLAYED_TIME, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePlayedTime );
+ DEFINE_HANDLER(CMSG_PLAYED_TIME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Character::PlayedTimeClient, &WorldSession::HandlePlayedTime);
DEFINE_HANDLER(CMSG_PLAYER_LOGIN, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Character::PlayerLogin, &WorldSession::HandlePlayerLoginOpcode);
DEFINE_OPCODE_HANDLER_OLD(CMSG_PLAYER_TIME_ADJUSTMENT_RESPONSE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_PLAY_DANCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -1599,7 +1599,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_STABLE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_TAME_FAILURE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_UPDATE_COMBO_POINTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYED_TIME, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYED_TIME, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_BOUND, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SKINNED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_VEHICLE_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 9c3daa319f8..b3103ce7b14 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -118,6 +118,7 @@ namespace WorldPackets
class LogoutCancel;
class LoadingScreenNotify;
class SetActionBarToggles;
+ class PlayedTimeClient;
enum class LoginFailureReason : uint8;
}
@@ -786,7 +787,7 @@ class WorldSession
void SendUndeleteCharacterResponse(CharacterUndeleteResult result, WorldPackets::Character::CharacterUndeleteInfo const* undeleteInfo);
// played time
- void HandlePlayedTime(WorldPacket& recvPacket);
+ void HandlePlayedTime(WorldPackets::Character::PlayedTimeClient& packet);
// new
void HandleMoveUnRootAck(WorldPacket& recvPacket);
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/nexus.h b/src/server/scripts/Northrend/Nexus/Nexus/nexus.h
index 6123407575d..c48c7323301 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/nexus.h
+++ b/src/server/scripts/Northrend/Nexus/Nexus/nexus.h
@@ -22,7 +22,7 @@
#define DataHeader "NEX"
uint32 const EncounterCount = 5;
-
+
enum DataTypes
{
DATA_COMMANDER = 0,