aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server/Packets
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-12-16 22:44:55 +0100
committerShauren <shauren.trinity@gmail.com>2022-12-16 22:44:55 +0100
commit0cc5ab8372f19dad7412038d52dcd39db5e0e171 (patch)
tree99e621862e90fc9f073897445d4a8bdd4fbfa557 /src/server/game/Server/Packets
parent9be60f240960f6538329b5e017f435c6237a89ea (diff)
Core/Players: Implemented new talent system
Diffstat (limited to 'src/server/game/Server/Packets')
-rw-r--r--src/server/game/Server/Packets/AllPackets.h1
-rw-r--r--src/server/game/Server/Packets/PacketUtilities.h10
-rw-r--r--src/server/game/Server/Packets/TraitPackets.cpp68
-rw-r--r--src/server/game/Server/Packets/TraitPackets.h106
-rw-r--r--src/server/game/Server/Packets/TraitPacketsCommon.cpp68
-rw-r--r--src/server/game/Server/Packets/TraitPacketsCommon.h14
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);
}