Clone of PhatAC @ https://github.com/floaterxk/PhatAC

PublicWeenieDesc.h 8.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. #pragma once
  2. #include "BinaryReader.h"
  3. // All of this is temporary.
  4. class RestrictionDB
  5. {
  6. public:
  7. RestrictionDB() { }
  8. };
  9. class PublicWeenieDesc
  10. {
  11. public:
  12. uint32_t header;
  13. uint32_t header2;
  14. std::string _name;
  15. uint32_t _wcid;
  16. uint32_t _iconID;
  17. ITEM_TYPE _type;
  18. uint32_t _bitfield;
  19. std::string _plural_name;
  20. uint8_t _itemsCapacity;
  21. uint8_t _containersCapacity;
  22. AMMO_TYPE _ammoType;
  23. uint32_t _value;
  24. ITEM_USEABLE _useability;
  25. float _useRadius;
  26. ITEM_TYPE _targetType;
  27. uint32_t _effects;
  28. uint8_t _combatUse;
  29. uint16_t _structure;
  30. uint16_t _maxStructure;
  31. uint16_t _stackSize;
  32. uint16_t _maxStackSize;
  33. uint32_t _containerID;
  34. uint32_t _wielderID;
  35. uint32_t _valid_locations;
  36. uint32_t _location;
  37. uint32_t _priority;
  38. uint8_t _blipColor;
  39. RadarEnum _radar_enum;
  40. uint16_t _pscript;
  41. float _workmanship;
  42. uint16_t _burden;
  43. uint16_t _spellID;
  44. uint32_t _house_owner_iid;
  45. RestrictionDB _db;
  46. uint32_t _hook_item_types;
  47. uint32_t _monarch;
  48. ITEM_TYPE _hook_type;
  49. uint32_t _iconOverlayID;
  50. uint32_t _iconUnderlayID;
  51. MaterialType _material_type;
  52. uint32_t _cooldown_id;
  53. double _cooldown_duration;
  54. uint32_t _pet_owner;
  55. PublicWeenieDesc()
  56. {
  57. _wcid = 0;
  58. _iconID = 0;
  59. _type = (ITEM_TYPE)0;
  60. _bitfield = 0;
  61. _itemsCapacity = 0;
  62. _containersCapacity = 0;
  63. _ammoType = (AMMO_TYPE)0;
  64. _value = 0;
  65. _useability = (ITEM_USEABLE)0;
  66. _useRadius = 0;
  67. _targetType = (ITEM_TYPE)0;
  68. _effects = 0;
  69. _combatUse = 0;
  70. _structure = 0;
  71. _maxStructure = 0;
  72. _stackSize = 0;
  73. _maxStackSize = 0;
  74. _containerID = 0;
  75. _wielderID = 0;
  76. _valid_locations = 0;
  77. _location = 0;
  78. _priority = 0;
  79. _blipColor = 0;
  80. _radar_enum = (RadarEnum)0;
  81. _pscript = 0;
  82. _workmanship = 0;
  83. _burden = 0;
  84. _spellID = 0;
  85. _house_owner_iid = 0;
  86. _hook_item_types = 0;
  87. _monarch = 0;
  88. _hook_type = (ITEM_TYPE)0;
  89. _iconOverlayID = 0;
  90. _iconUnderlayID = 0;
  91. _material_type = (MaterialType)0;
  92. _cooldown_id = 0;
  93. _cooldown_duration = 0;
  94. _pet_owner = 0;
  95. }
  96. void Unpack(BinaryReader &binaryReader) {
  97. PublicWeenieDesc &newObj = *this;
  98. newObj.header = binaryReader.ReadUInt32();
  99. newObj._name = binaryReader.ReadString();
  100. newObj._wcid = binaryReader.ReadPackedDWORD();
  101. newObj._iconID = 0x6000000 | binaryReader.ReadPackedDWORD();
  102. newObj._type = (ITEM_TYPE)binaryReader.ReadUInt32();
  103. newObj._bitfield = binaryReader.ReadUInt32();
  104. newObj.header2 = 0;
  105. binaryReader.ReadAlign();
  106. if ((newObj._bitfield & (uint32_t)BitfieldIndex::BF_INCLUDES_SECOND_HEADER) != 0) {
  107. newObj.header2 = binaryReader.ReadUInt32();
  108. }
  109. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_PluralName) != 0) {
  110. newObj._plural_name = binaryReader.ReadString();
  111. }
  112. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_ItemsCapacity) != 0) {
  113. newObj._itemsCapacity = binaryReader.ReadByte();
  114. }
  115. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_ContainersCapacity) != 0) {
  116. newObj._containersCapacity = binaryReader.ReadByte();
  117. }
  118. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_AmmoType) != 0) {
  119. newObj._ammoType = (AMMO_TYPE)binaryReader.ReadUInt16();
  120. }
  121. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_Value) != 0) {
  122. newObj._value = binaryReader.ReadUInt32();
  123. }
  124. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_Useability) != 0) {
  125. newObj._useability = (ITEM_USEABLE)binaryReader.ReadUInt32();
  126. }
  127. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_UseRadius) != 0) {
  128. newObj._useRadius = binaryReader.ReadSingle();
  129. }
  130. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_TargetType) != 0) {
  131. newObj._targetType = (ITEM_TYPE)binaryReader.ReadUInt32();
  132. }
  133. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_UIEffects) != 0) {
  134. newObj._effects = binaryReader.ReadUInt32();
  135. }
  136. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_CombatUse) != 0) {
  137. newObj._combatUse = binaryReader.ReadByte();
  138. }
  139. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_Structure) != 0) {
  140. newObj._structure = binaryReader.ReadUInt16();
  141. }
  142. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_MaxStructure) != 0) {
  143. newObj._maxStructure = binaryReader.ReadUInt16();
  144. }
  145. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_StackSize) != 0) {
  146. newObj._stackSize = binaryReader.ReadUInt16();
  147. }
  148. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_MaxStackSize) != 0) {
  149. newObj._maxStackSize = binaryReader.ReadUInt16();
  150. }
  151. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_ContainerID) != 0) {
  152. newObj._containerID = binaryReader.ReadUInt32();
  153. }
  154. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_WielderID) != 0) {
  155. newObj._wielderID = binaryReader.ReadUInt32();
  156. }
  157. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_ValidLocations) != 0) {
  158. newObj._valid_locations = binaryReader.ReadUInt32();
  159. }
  160. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_Location) != 0) {
  161. newObj._location = binaryReader.ReadUInt32();
  162. }
  163. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_Priority) != 0) {
  164. newObj._priority = binaryReader.ReadUInt32();
  165. }
  166. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_BlipColor) != 0) {
  167. newObj._blipColor = binaryReader.ReadByte();
  168. }
  169. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_RadarEnum) != 0) {
  170. newObj._radar_enum = (RadarEnum)binaryReader.ReadByte();
  171. }
  172. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_PScript) != 0) {
  173. newObj._pscript = binaryReader.ReadUInt16();
  174. }
  175. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_Workmanship) != 0) {
  176. newObj._workmanship = binaryReader.ReadSingle();
  177. }
  178. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_Burden) != 0) {
  179. newObj._burden = binaryReader.ReadUInt16();
  180. }
  181. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_SpellID) != 0) {
  182. newObj._spellID = binaryReader.ReadUInt16();
  183. }
  184. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_HouseOwner) != 0) {
  185. newObj._house_owner_iid = binaryReader.ReadUInt32();
  186. }
  187. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_HouseRestrictions) != 0) {
  188. // TODO: Read here once you get RestrictedDB read finished
  189. binaryReader.ReadUInt32();
  190. binaryReader.ReadUInt32();
  191. binaryReader.ReadUInt32();
  192. WORD count = binaryReader.ReadUInt16();
  193. binaryReader.ReadUInt16();
  194. for (int i = 0; i < count; i++)
  195. {
  196. binaryReader.ReadUInt32();
  197. binaryReader.ReadUInt32();
  198. }
  199. }
  200. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_HookItemTypes) != 0) {
  201. newObj._hook_item_types = binaryReader.ReadUInt32();
  202. }
  203. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_Monarch) != 0) {
  204. newObj._monarch = binaryReader.ReadUInt32();
  205. }
  206. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_HookType) != 0) {
  207. newObj._hook_type = (ITEM_TYPE)binaryReader.ReadUInt16();
  208. }
  209. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_IconOverlay) != 0) {
  210. newObj._iconOverlayID = 0x6000000 | binaryReader.ReadPackedDWORD();
  211. }
  212. if ((newObj.header2 & (uint32_t)PublicWeenieDescPackHeader2::PWD2_Packed_IconUnderlay) != 0) {
  213. newObj._iconUnderlayID = 0x6000000 | binaryReader.ReadPackedDWORD();
  214. }
  215. if ((newObj.header & (uint32_t)PublicWeenieDescPackHeader::PWD_Packed_MaterialType) != 0) {
  216. newObj._material_type = (MaterialType)binaryReader.ReadUInt32();
  217. }
  218. if ((newObj.header2 & (uint32_t)PublicWeenieDescPackHeader2::PWD2_Packed_CooldownID) != 0) {
  219. newObj._cooldown_id = binaryReader.ReadUInt32();
  220. }
  221. if ((newObj.header2 & (uint32_t)PublicWeenieDescPackHeader2::PWD2_Packed_CooldownDuration) != 0) {
  222. newObj._cooldown_duration = binaryReader.ReadDouble();
  223. }
  224. if ((newObj.header2 & (uint32_t)PublicWeenieDescPackHeader2::PWD2_Packed_PetOwner) != 0) {
  225. newObj._pet_owner = binaryReader.ReadUInt32();
  226. }
  227. binaryReader.ReadAlign();
  228. }
  229. };