TrinityCore
TraitPacketsCommon.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "TraitPacketsCommon.h"
19#include "DBCEnums.h"
20#include "UpdateFields.h"
21
23{
24TraitEntry::TraitEntry() = default;
25
27{
28 TraitNodeID = ufEntry.TraitNodeID;
30 Rank = ufEntry.Rank;
31 GrantedRanks = ufEntry.GrantedRanks;
32}
33
34TraitConfig::TraitConfig() = default;
35
37{
38 ID = ufConfig.ID;
39 Type = static_cast<TraitConfigType>(*ufConfig.Type);
43 SkillLineID = ufConfig.SkillLineID;
45 for (UF::TraitEntry const& ufEntry : ufConfig.Entries)
46 Entries.emplace_back(ufEntry);
47 Name = ufConfig.Name;
48}
49
51{
52 data >> traitEntry.TraitNodeID;
53 data >> traitEntry.TraitNodeEntryID;
54 data >> traitEntry.Rank;
55 data >> traitEntry.GrantedRanks;
56
57 return data;
58}
59
60ByteBuffer& operator<<(ByteBuffer& data, TraitEntry const& traitEntry)
61{
62 data << int32(traitEntry.TraitNodeID);
63 data << int32(traitEntry.TraitNodeEntryID);
64 data << int32(traitEntry.Rank);
65 data << int32(traitEntry.GrantedRanks);
66
67 return data;
68}
69
71{
72 data >> traitConfig.ID;
73 traitConfig.Type = data.read<TraitConfigType, int32>();
74 uint32 entriesSize = data.read<uint32>();
75 if (entriesSize > 100)
76 throw PacketArrayMaxCapacityException(entriesSize, 100);
77
78 traitConfig.Entries.resize(entriesSize);
79 switch (traitConfig.Type)
80 {
82 data >> traitConfig.ChrSpecializationID;
84 data >> traitConfig.LocalIdentifier;
85 break;
87 data >> traitConfig.SkillLineID;
88 break;
90 data >> traitConfig.TraitSystemID;
91 break;
92 default:
93 break;
94 }
95
96 for (TraitEntry& traitEntry : traitConfig.Entries)
97 data >> traitEntry;
98
99 uint32 nameLength = data.ReadBits(9);
100 traitConfig.Name = data.ReadString(nameLength, false);
101
102 return data;
103}
104
105ByteBuffer& operator<<(ByteBuffer& data, TraitConfig const& traitConfig)
106{
107 data << int32(traitConfig.ID);
108 data << int32(traitConfig.Type);
109 data << uint32(traitConfig.Entries.size());
110 switch (traitConfig.Type)
111 {
113 data << int32(traitConfig.ChrSpecializationID);
114 data << int32(traitConfig.CombatConfigFlags);
115 data << int32(traitConfig.LocalIdentifier);
116 break;
118 data << int32(traitConfig.SkillLineID);
119 break;
121 data << int32(traitConfig.TraitSystemID);
122 break;
123 default:
124 break;
125 }
126
127 for (TraitEntry const& traitEntry : traitConfig.Entries)
128 data << traitEntry;
129
130 data.WriteBits(traitConfig.Name.length(), 9);
131 data.FlushBits();
132
133 data.WriteString(static_cast<std::string const&>(traitConfig.Name));
134
135 return data;
136}
137}
TraitConfigType
Definition: DBCEnums.h:2185
TraitCombatConfigFlags
Definition: DBCEnums.h:2157
int32_t int32
Definition: Define.h:138
uint32_t uint32
Definition: Define.h:142
uint32 ReadBits(int32 bits)
Definition: ByteBuffer.h:209
void WriteString(std::string const &str)
Definition: ByteBuffer.h:500
void WriteBits(std::size_t value, int32 bits)
Definition: ByteBuffer.h:203
void FlushBits()
Definition: ByteBuffer.h:155
std::string ReadString(uint32 length, bool requireValidUtf8=true)
Definition: ByteBuffer.cpp:78
std::size_t length() const
ByteBuffer & operator>>(ByteBuffer &data, TraitEntry &traitEntry)
ByteBuffer & operator<<(ByteBuffer &data, TraitEntry const &traitEntry)
UpdateField< int32, 4, 7 > ChrSpecializationID
Definition: UpdateFields.h:738
UpdateField< int32, 4, 6 > SkillLineID
Definition: UpdateFields.h:737
UpdateField< int32, 4, 5 > Type
Definition: UpdateFields.h:736
UpdateField< int32, 8, 9 > CombatConfigFlags
Definition: UpdateFields.h:739
UpdateField< std::string, 0, 3 > Name
Definition: UpdateFields.h:735
DynamicUpdateField< UF::TraitEntry, 0, 1 > Entries
Definition: UpdateFields.h:733
UpdateField< int32, 8, 10 > LocalIdentifier
Definition: UpdateFields.h:740
UpdateField< int32, 0, 2 > ID
Definition: UpdateFields.h:734
UpdateField< int32, 8, 11 > TraitSystemID
Definition: UpdateFields.h:741
int32 TraitNodeEntryID
Definition: UpdateFields.h:721
TraitCombatConfigFlags CombatConfigFlags
std::vector< TraitEntry > Entries