diff options
| author | Shauren <shauren.trinity@gmail.com> | 2022-12-16 22:44:55 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-12-16 22:44:55 +0100 |
| commit | 0cc5ab8372f19dad7412038d52dcd39db5e0e171 (patch) | |
| tree | 99e621862e90fc9f073897445d4a8bdd4fbfa557 /src/server/game/Server/Packets | |
| parent | 9be60f240960f6538329b5e017f435c6237a89ea (diff) | |
Core/Players: Implemented new talent system
Diffstat (limited to 'src/server/game/Server/Packets')
| -rw-r--r-- | src/server/game/Server/Packets/AllPackets.h | 1 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/PacketUtilities.h | 10 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/TraitPackets.cpp | 68 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/TraitPackets.h | 106 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/TraitPacketsCommon.cpp | 68 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/TraitPacketsCommon.h | 14 |
6 files changed, 267 insertions, 0 deletions
diff --git a/src/server/game/Server/Packets/AllPackets.h b/src/server/game/Server/Packets/AllPackets.h index eab189b56e9..a9658aec4eb 100644 --- a/src/server/game/Server/Packets/AllPackets.h +++ b/src/server/game/Server/Packets/AllPackets.h @@ -77,6 +77,7 @@ #include "TotemPackets.h" #include "ToyPackets.h" #include "TradePackets.h" +#include "TraitPackets.h" #include "TransmogrificationPackets.h" #include "VehiclePackets.h" #include "VoidStoragePackets.h" diff --git a/src/server/game/Server/Packets/PacketUtilities.h b/src/server/game/Server/Packets/PacketUtilities.h index f445169784c..4af2d2c4b17 100644 --- a/src/server/game/Server/Packets/PacketUtilities.h +++ b/src/server/game/Server/Packets/PacketUtilities.h @@ -198,6 +198,16 @@ namespace WorldPackets return _storage.back(); } + iterator erase(const_iterator first, const_iterator last) + { + return _storage.erase(first, last); + } + + void clear() + { + _storage.clear(); + } + private: storage_type _storage; }; diff --git a/src/server/game/Server/Packets/TraitPackets.cpp b/src/server/game/Server/Packets/TraitPackets.cpp new file mode 100644 index 00000000000..2c1770f6aaa --- /dev/null +++ b/src/server/game/Server/Packets/TraitPackets.cpp @@ -0,0 +1,68 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "TraitPackets.h" + +namespace WorldPackets::Traits +{ +void TraitsCommitConfig::Read() +{ + _worldPacket >> Config; + _worldPacket >> SavedConfigID; + _worldPacket >> SavedLocalIdentifier; +} + +WorldPacket const* TraitConfigCommitFailed::Write() +{ + _worldPacket << int32(ConfigID); + _worldPacket << int32(SpellID); + _worldPacket.WriteBits(Reason, 4); + _worldPacket.FlushBits(); + + return &_worldPacket; +} + +void ClassTalentsRequestNewConfig::Read() +{ + _worldPacket >> Config; +} + +void ClassTalentsRenameConfig::Read() +{ + _worldPacket >> ConfigID; + uint32 nameLength = _worldPacket.ReadBits(9); + Name = _worldPacket.ReadString(nameLength, false); +} + +void ClassTalentsDeleteConfig::Read() +{ + _worldPacket >> ConfigID; +} + +void ClassTalentsSetStarterBuildActive::Read() +{ + _worldPacket >> ConfigID; + Active = _worldPacket.ReadBit(); +} + +void ClassTalentsSetUsesSharedActionBars::Read() +{ + _worldPacket >> ConfigID; + UsesShared = _worldPacket.ReadBit(); + IsLastSelectedSavedConfig = _worldPacket.ReadBit(); +} +} diff --git a/src/server/game/Server/Packets/TraitPackets.h b/src/server/game/Server/Packets/TraitPackets.h new file mode 100644 index 00000000000..88c2ae43637 --- /dev/null +++ b/src/server/game/Server/Packets/TraitPackets.h @@ -0,0 +1,106 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef TRINITYCORE_TRAIT_PACKETS_H +#define TRINITYCORE_TRAIT_PACKETS_H + +#include "Packet.h" +#include "TraitPacketsCommon.h" + +namespace WorldPackets::Traits +{ +class TraitsCommitConfig final : public ClientPacket +{ +public: + explicit TraitsCommitConfig(WorldPacket&& packet) : ClientPacket(CMSG_TRAITS_COMMIT_CONFIG, std::move(packet)) { } + + void Read() override; + + TraitConfig Config; + int32 SavedConfigID = 0; + int32 SavedLocalIdentifier = 0; +}; + +class TraitConfigCommitFailed final : public ServerPacket +{ +public: + TraitConfigCommitFailed(int32 configId = 0, int32 spellId = 0, int32 reason = 0) : ServerPacket(SMSG_TRAIT_CONFIG_COMMIT_FAILED, 4 + 4 + 1), + ConfigID(configId), SpellID(spellId), Reason(reason) { } + + WorldPacket const* Write() override; + + int32 ConfigID; + int32 SpellID; + int32 Reason; +}; + +class ClassTalentsRequestNewConfig final : public ClientPacket +{ +public: + explicit ClassTalentsRequestNewConfig(WorldPacket&& packet) : ClientPacket(CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG, std::move(packet)) { } + + void Read() override; + + TraitConfig Config; +}; + +class ClassTalentsRenameConfig final : public ClientPacket +{ +public: + explicit ClassTalentsRenameConfig(WorldPacket&& packet) : ClientPacket(CMSG_CLASS_TALENTS_RENAME_CONFIG, std::move(packet)) { } + + void Read() override; + + int32 ConfigID = 0; + String<259> Name; +}; + +class ClassTalentsDeleteConfig final : public ClientPacket +{ +public: + explicit ClassTalentsDeleteConfig(WorldPacket&& packet) : ClientPacket(CMSG_CLASS_TALENTS_DELETE_CONFIG, std::move(packet)) { } + + void Read() override; + + int32 ConfigID = 0; +}; + +class ClassTalentsSetStarterBuildActive final : public ClientPacket +{ +public: + explicit ClassTalentsSetStarterBuildActive(WorldPacket&& packet) : ClientPacket(CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE, std::move(packet)) { } + + void Read() override; + + int32 ConfigID = 0; + bool Active = false; +}; + +class ClassTalentsSetUsesSharedActionBars final : public ClientPacket +{ +public: + explicit ClassTalentsSetUsesSharedActionBars(WorldPacket&& packet) : ClientPacket(CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS, std::move(packet)) { } + + void Read() override; + + int32 ConfigID = 0; + bool UsesShared = false; + bool IsLastSelectedSavedConfig = false; +}; +} + +#endif // TRINITYCORE_TRAIT_PACKETS_H diff --git a/src/server/game/Server/Packets/TraitPacketsCommon.cpp b/src/server/game/Server/Packets/TraitPacketsCommon.cpp index 482f3b5e91d..d6bfe6667cf 100644 --- a/src/server/game/Server/Packets/TraitPacketsCommon.cpp +++ b/src/server/game/Server/Packets/TraitPacketsCommon.cpp @@ -17,9 +17,46 @@ #include "TraitPacketsCommon.h" #include "DBCEnums.h" +#include "UpdateFields.h" namespace WorldPackets::Traits { +TraitEntry::TraitEntry() = default; + +TraitEntry::TraitEntry(UF::TraitEntry const& ufEntry) +{ + TraitNodeID = ufEntry.TraitNodeID; + TraitNodeEntryID = ufEntry.TraitNodeEntryID; + Rank = ufEntry.Rank; + GrantedRanks = ufEntry.GrantedRanks; +} + +TraitConfig::TraitConfig() = default; + +TraitConfig::TraitConfig(UF::TraitConfig const& ufConfig) +{ + ID = ufConfig.ID; + Type = static_cast<TraitConfigType>(*ufConfig.Type); + ChrSpecializationID = ufConfig.ChrSpecializationID; + CombatConfigFlags = static_cast<TraitCombatConfigFlags>(*ufConfig.CombatConfigFlags); + LocalIdentifier = ufConfig.LocalIdentifier; + SkillLineID = ufConfig.SkillLineID; + TraitSystemID = ufConfig.TraitSystemID; + for (UF::TraitEntry const& ufEntry : ufConfig.Entries) + Entries.emplace_back(ufEntry); + Name = ufConfig.Name; +} + +ByteBuffer& operator>>(ByteBuffer& data, TraitEntry& traitEntry) +{ + data >> traitEntry.TraitNodeID; + data >> traitEntry.TraitNodeEntryID; + data >> traitEntry.Rank; + data >> traitEntry.GrantedRanks; + + return data; +} + ByteBuffer& operator<<(ByteBuffer& data, TraitEntry const& traitEntry) { data << int32(traitEntry.TraitNodeID); @@ -30,6 +67,37 @@ ByteBuffer& operator<<(ByteBuffer& data, TraitEntry const& traitEntry) return data; } +ByteBuffer& operator>>(ByteBuffer& data, TraitConfig& traitConfig) +{ + data >> traitConfig.ID; + traitConfig.Type = data.read<TraitConfigType, int32>(); + traitConfig.Entries.resize(data.read<uint32>()); + switch (traitConfig.Type) + { + case TraitConfigType::Combat: + data >> traitConfig.ChrSpecializationID; + traitConfig.CombatConfigFlags = data.read<TraitCombatConfigFlags, int32>(); + data >> traitConfig.LocalIdentifier; + break; + case TraitConfigType::Profession: + data >> traitConfig.SkillLineID; + break; + case TraitConfigType::Generic: + data >> traitConfig.TraitSystemID; + break; + default: + break; + } + + for (TraitEntry& traitEntry : traitConfig.Entries) + data >> traitEntry; + + uint32 nameLength = data.ReadBits(9); + traitConfig.Name = data.ReadString(nameLength, false); + + return data; +} + ByteBuffer& operator<<(ByteBuffer& data, TraitConfig const& traitConfig) { data << int32(traitConfig.ID); diff --git a/src/server/game/Server/Packets/TraitPacketsCommon.h b/src/server/game/Server/Packets/TraitPacketsCommon.h index d61e16ed49b..96186412362 100644 --- a/src/server/game/Server/Packets/TraitPacketsCommon.h +++ b/src/server/game/Server/Packets/TraitPacketsCommon.h @@ -23,10 +23,19 @@ enum class TraitCombatConfigFlags : int32; enum class TraitConfigType : int32; +namespace UF +{ +struct TraitConfig; +struct TraitEntry; +} + namespace WorldPackets::Traits { struct TraitEntry { + TraitEntry(); + explicit TraitEntry(UF::TraitEntry const& ufEntry); + int32 TraitNodeID = 0; int32 TraitNodeEntryID = 0; int32 Rank = 0; @@ -35,6 +44,9 @@ struct TraitEntry struct TraitConfig { + TraitConfig(); + explicit TraitConfig(UF::TraitConfig const& ufConfig); + int32 ID = 0; TraitConfigType Type = {}; int32 ChrSpecializationID = 0; @@ -46,7 +58,9 @@ struct TraitConfig String<259> Name; }; +ByteBuffer& operator>>(ByteBuffer& data, TraitEntry& traitEntry); ByteBuffer& operator<<(ByteBuffer& data, TraitEntry const& traitEntry); +ByteBuffer& operator>>(ByteBuffer& data, TraitConfig& traitConfig); ByteBuffer& operator<<(ByteBuffer& data, TraitConfig const& traitConfig); } |
