TrinityCore
Loading...
Searching...
No Matches
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 "PacketOperators.h"
21#include "UpdateFields.h"
22
24{
25TraitEntry::TraitEntry() = default;
26
28{
29 TraitNodeID = ufEntry.TraitNodeID;
31 Rank = ufEntry.Rank;
32 GrantedRanks = ufEntry.GrantedRanks;
33 BonusRanks = ufEntry.BonusRanks;
34}
35
37
39{
40 TraitSubTreeID = ufSubTreeCache.TraitSubTreeID;
41 for (UF::TraitEntry const& ufEntry : ufSubTreeCache.Entries)
42 Entries.emplace_back(ufEntry);
43 Active = ufSubTreeCache.Active;
44}
45
46TraitConfig::TraitConfig() = default;
47
49{
50 ID = ufConfig.ID;
51 Type = static_cast<TraitConfigType>(*ufConfig.Type);
55 SkillLineID = ufConfig.SkillLineID;
57 VariationID = ufConfig.VariationID;
58 for (UF::TraitEntry const& ufEntry : ufConfig.Entries)
59 Entries.emplace_back(ufEntry);
60 for (UF::TraitSubTreeCache const& ufSubTree : ufConfig.SubTrees)
61 SubTrees.emplace_back(ufSubTree);
62 Name = ufConfig.Name;
63}
64
66{
67 data >> traitEntry.TraitNodeID;
68 data >> traitEntry.TraitNodeEntryID;
69 data >> traitEntry.Rank;
70 data >> traitEntry.GrantedRanks;
71 data >> traitEntry.BonusRanks;
72
73 return data;
74}
75
76ByteBuffer& operator<<(ByteBuffer& data, TraitEntry const& traitEntry)
77{
78 data << int32(traitEntry.TraitNodeID);
79 data << int32(traitEntry.TraitNodeEntryID);
80 data << int32(traitEntry.Rank);
81 data << int32(traitEntry.GrantedRanks);
82 data << int32(traitEntry.BonusRanks);
83
84 return data;
85}
86
88{
89 data >> traitSubTreeCache.TraitSubTreeID;
90 uint32 entriesSize = data.read<uint32>();
91 if (entriesSize > 100)
92 OnInvalidArraySize(entriesSize, 100);
93
94 traitSubTreeCache.Entries.resize(entriesSize);
95 for (TraitEntry& traitEntry : traitSubTreeCache.Entries)
96 data >> traitEntry;
97
98 data >> Bits<1>(traitSubTreeCache.Active);
99
100 return data;
101}
102
103ByteBuffer& operator<<(ByteBuffer& data, TraitSubTreeCache const& traitSubTreeCache)
104{
105 data << int32(traitSubTreeCache.TraitSubTreeID);
106 data << Size<uint32>(traitSubTreeCache.Entries);
107
108 for (TraitEntry const& traitEntry : traitSubTreeCache.Entries)
109 data << traitEntry;
110
111 data << Bits<1>(traitSubTreeCache.Active);
112 data.FlushBits();
113
114 return data;
115}
116
118{
119 data >> traitConfig.ID;
120 data >> As<int32>(traitConfig.Type);
121 uint32 entriesSize = data.read<uint32>();
122 if (entriesSize > 100)
123 OnInvalidArraySize(entriesSize, 100);
124
125 traitConfig.Entries.resize(entriesSize);
126
127 uint32 subtreesSize = data.read<uint32>();
128 if (subtreesSize > 10)
129 OnInvalidArraySize(subtreesSize, 10);
130
131 traitConfig.SubTrees.resize(subtreesSize);
132
133 switch (traitConfig.Type)
134 {
136 data >> traitConfig.ChrSpecializationID;
137 data >> As<int32>(traitConfig.CombatConfigFlags);
138 data >> traitConfig.LocalIdentifier;
139 break;
141 data >> traitConfig.SkillLineID;
142 break;
144 data >> traitConfig.TraitSystemID;
145 data >> traitConfig.VariationID;
146 break;
147 default:
148 break;
149 }
150
151 for (TraitEntry& traitEntry : traitConfig.Entries)
152 data >> traitEntry;
153
154 data >> SizedString::BitsSize<9>(traitConfig.Name);
155
156 for (TraitSubTreeCache& traitSubTreeCache : traitConfig.SubTrees)
157 data >> traitSubTreeCache;
158
159 data >> SizedString::Data<Strings::DontValidateUtf8>(traitConfig.Name);
160
161 return data;
162}
163
164ByteBuffer& operator<<(ByteBuffer& data, TraitConfig const& traitConfig)
165{
166 data << int32(traitConfig.ID);
167 data << int32(traitConfig.Type);
168 data << Size<uint32>(traitConfig.Entries);
169 data << Size<uint32>(traitConfig.SubTrees);
170 switch (traitConfig.Type)
171 {
173 data << int32(traitConfig.ChrSpecializationID);
174 data << int32(traitConfig.CombatConfigFlags);
175 data << int32(traitConfig.LocalIdentifier);
176 break;
178 data << int32(traitConfig.SkillLineID);
179 break;
181 data << int32(traitConfig.TraitSystemID);
182 data << int32(traitConfig.VariationID);
183 break;
184 default:
185 break;
186 }
187
188 for (TraitEntry const& traitEntry : traitConfig.Entries)
189 data << traitEntry;
190
191 data << SizedString::BitsSize<9>(traitConfig.Name);
192
193 for (TraitSubTreeCache const& traitSubTreeCache : traitConfig.SubTrees)
194 data << traitSubTreeCache;
195
196 data.FlushBits();
197
198 data << SizedString::Data(static_cast<std::string const&>(traitConfig.Name));
199
200 return data;
201}
202}
TraitConfigType
Definition DBCEnums.h:2851
TraitCombatConfigFlags
Definition DBCEnums.h:2821
int32_t int32
Definition Define.h:150
uint32_t uint32
Definition Define.h:154
void FlushBits()
Definition ByteBuffer.h:141
ByteBuffer & operator>>(ByteBuffer &data, TraitEntry &traitEntry)
ByteBuffer & operator<<(ByteBuffer &data, TraitEntry const &traitEntry)
void OnInvalidArraySize(std::size_t requestedSize, std::size_t sizeLimit)
UpdateField< int32, 12, 13 > TraitSystemID
UpdateField< int32, 4, 6 > Type
DynamicUpdateField< UF::TraitEntry, 0, 1 > Entries
UpdateField< int32, 0, 3 > ID
UpdateField< std::string, 4, 5 > Name
UpdateField< int32, 12, 14 > VariationID
UpdateField< int32, 4, 7 > SkillLineID
DynamicUpdateField< UF::TraitSubTreeCache, 0, 2 > SubTrees
UpdateField< int32, 8, 10 > CombatConfigFlags
UpdateField< int32, 8, 9 > ChrSpecializationID
UpdateField< int32, 8, 11 > LocalIdentifier
std::vector< UF::TraitEntry > Entries
TraitCombatConfigFlags CombatConfigFlags
std::vector< TraitSubTreeCache > SubTrees
std::vector< TraitEntry > Entries