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

Item.cpp 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. #include "StdAfx.h"
  2. #include "PhysicsObj.h"
  3. #include "Item.h"
  4. #include "LandBlock.h"
  5. #include "BinaryWriter.h"
  6. #include "World.h"
  7. CBaseItem::CBaseItem()
  8. {
  9. m_dwSoundSet = 0x20000014;
  10. m_dwEffectSet = 0x3400002B;
  11. m_bWieldSequence = 0;
  12. m_pWielder = NULL;
  13. m_bContainSequence = 0;
  14. m_pContainer = NULL;
  15. m_strName = "Item";
  16. m_PhysicsState = PhysicsState::GRAVITY_PS | PhysicsState::IGNORE_COLLISIONS_PS | PhysicsState::ETHEREAL_PS;
  17. m_WeenieBitfield = BF_INSCRIBABLE | BF_ATTACKABLE;
  18. m_RadarVis = ShowNever_RadarEnum;
  19. }
  20. CBaseItem::~CBaseItem()
  21. {
  22. }
  23. BOOL CBaseItem::CanEquip()
  24. {
  25. //...
  26. return TRUE;
  27. }
  28. DWORD CBaseItem::GetLandcell()
  29. {
  30. if (m_pContainer)
  31. return m_pContainer->GetLandcell();
  32. if (m_pWielder)
  33. return m_pWielder->GetLandcell();
  34. return m_Origin.landcell;
  35. }
  36. BOOL CBaseItem::IsContained() {
  37. return GetContainerID() ? TRUE : FALSE;
  38. }
  39. BOOL CBaseItem::IsWielded() {
  40. return GetWielderID() ? TRUE : FALSE;
  41. }
  42. DWORD CBaseItem::GetContainerID() {
  43. return (m_pContainer ? m_pContainer->m_dwGUID : NULL);
  44. }
  45. DWORD CBaseItem::GetWielderID() {
  46. return (m_pWielder ? m_pWielder->m_dwGUID : NULL);
  47. }
  48. CPhysicsObj* CBaseItem::GetWorldContainer() {
  49. return m_pContainer;
  50. }
  51. CPhysicsObj* CBaseItem::GetWorldWielder() {
  52. return m_pWielder;
  53. }
  54. void CBaseItem::SetWorldContainer(DWORD dwCell, CPhysicsObj *pContainer)
  55. {
  56. BinaryWriter SWC;
  57. SWC.WriteDWORD(0x22D);
  58. SWC.WriteBYTE(++m_bContainSequence);
  59. SWC.WriteDWORD(m_dwGUID);
  60. SWC.WriteDWORD(2);
  61. SWC.WriteDWORD(pContainer ? pContainer->m_dwGUID : 0);
  62. g_pWorld->BroadcastPVS(dwCell, SWC.GetData(), SWC.GetSize(), PRIVATE_MSG);
  63. if (pContainer) //&& !m_pContainer )
  64. {
  65. CLandBlock* pBlock = GetBlock();
  66. if (pBlock)
  67. pBlock->Release(this);
  68. }
  69. m_pContainer = pContainer;
  70. }
  71. void CBaseItem::SetWorldWielder(DWORD dwCell, CPhysicsObj *pWielder)
  72. {
  73. if (m_ItemType & (TYPE_ARMOR | TYPE_CLOTHING))
  74. {
  75. LOG(Object, Warning, "Trying to wield armor!\n");
  76. }
  77. BinaryWriter SWW;
  78. SWW.WriteDWORD(0x22D);
  79. SWW.WriteBYTE(++m_bWieldSequence);
  80. SWW.WriteDWORD(m_dwGUID);
  81. SWW.WriteDWORD(3);
  82. SWW.WriteDWORD(pWielder ? pWielder->m_dwGUID : 0);
  83. g_pWorld->BroadcastPVS(dwCell, SWW.GetData(), SWW.GetSize(), PRIVATE_MSG);
  84. if (pWielder) //&& !m_pWielder )
  85. {
  86. CLandBlock* pBlock = GetBlock();
  87. if (pBlock)
  88. pBlock->Release(this);
  89. }
  90. else
  91. {
  92. SetWorldCoverage(dwCell, NULL);
  93. }
  94. m_pWielder = pWielder;
  95. }
  96. void CBaseItem::SetWorldCoverage(DWORD dwCell, DWORD dwCoverage)
  97. {
  98. BinaryWriter SC;
  99. SC.WriteDWORD(0x229);
  100. SC.WriteBYTE(++m_bCoverSequence);
  101. SC.WriteDWORD(m_dwGUID);
  102. SC.WriteDWORD(10);
  103. SC.WriteDWORD(dwCoverage);
  104. g_pWorld->BroadcastPVS(dwCell, SC.GetData(), SC.GetSize(), PRIVATE_MSG);
  105. m_dwCoverage2 = dwCoverage;
  106. }
  107. BOOL CBaseItem::HasCoverage()
  108. {
  109. return ((m_dwCoverage1 || m_dwCoverage2 || m_dwCoverage3) ? TRUE : FALSE);
  110. }
  111. CBaseWand::CBaseWand()
  112. {
  113. //We'll be a drudge wand by default =)
  114. m_dwModel = 0x02000896;
  115. m_dwEffectSet = 0x3400002B;
  116. m_dwSoundSet = 0x20000014;
  117. m_miBaseModel.dwBasePalette = 0xBEF;
  118. m_miBaseModel.lPalettes.push_back(PaletteRpl(0xBF0, 0, 0));
  119. m_miBaseModel.lTextures.push_back(TextureRpl(0, 0xA8A, 0xA8A));
  120. m_miBaseModel.lModels.push_back(ModelRpl(0, 0xB6E));
  121. m_fScale = 1.0f;
  122. m_Burden = 0;
  123. m_Value = 1337;
  124. m_strName = "Staff of Aerfalle";
  125. m_wTypeID = 0x2FBD;
  126. m_wIcon = 0x22B3;
  127. m_ItemType = TYPE_CASTER;
  128. m_dwEquipSlot = eEquipSlotMelee;
  129. m_dwCoverage1 = CA_WEAPON_FOCUS;
  130. //m_dwCoverage2 = CA_WEAPON_FOCUS;
  131. //m_dwCoverage3 = CA_WEAPON_FOCUS;
  132. m_bCoverSequence = 0;
  133. }
  134. CEnvoyShield::CEnvoyShield()
  135. {
  136. //We'll be a drudge wand by default =)
  137. m_dwModel = 0x02001035;
  138. m_Burden = 0;
  139. m_Value = 1;
  140. m_strName = "Envoy's Shield";
  141. m_wTypeID = 0x65CA;
  142. m_wIcon = 0x13FF;
  143. m_ItemType = TYPE_ARMOR;
  144. m_dwEquipSlot = eEquipSlotShield;
  145. m_dwEquipType = eEquipTypeShield;
  146. m_dwCoverage1 = CA_SHIELD;
  147. }
  148. CBaseArmor::CBaseArmor()
  149. {
  150. //We'll be a drudge wand by default =)
  151. m_strName = "Armor";
  152. m_ItemType = TYPE_ARMOR;
  153. m_dwEquipSlot = eEquipSlotNone;
  154. //m_dwCoverage1 = ..;
  155. //m_dwCoverage2 = ..;
  156. //m_dwCoverage3 = ..;
  157. }
  158. CAcademyCoat::CAcademyCoat()
  159. {
  160. m_strName = "Academy Coat";
  161. m_dwModel = 0x020000D4;
  162. m_wTypeID = 0x339A;
  163. m_wIcon = 0x1F14;
  164. m_dwCoverage1 = CA_LOWERARMS | CA_UPPERARMS | CA_GIRTH | CA_CHEST;
  165. m_dwCoverage3 = 0x3C;
  166. m_miBaseModel.dwBasePalette = 0x7E;
  167. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x1083, 0x50, 0x0C));
  168. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x1083, 0x60, 0x0C));
  169. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x1083, 0x74, 0x0C));
  170. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x1083, 0xD8, 0x18));
  171. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x108F, 0x48, 0x08));
  172. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x108F, 0x6C, 0x08));
  173. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x108F, 0xAE, 0x0C));
  174. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0x3D5, 0x1AFE));
  175. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0x3D4, 0x1AFC));
  176. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0xBB0, 0x1AF9));
  177. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0xCBE, 0x1AFD));
  178. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0x2C4, 0x1AFA));
  179. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0x2CC, 0x1AFB));
  180. m_miBaseModel.lModels.push_back(ModelRpl(0x00, 0x474));
  181. //m_miWornModel.lModels.push_back( ModelRpl(0x10, 0x449) );
  182. }
  183. CTuskerHelm::CTuskerHelm()
  184. {
  185. m_strName = "Tusker Helm";
  186. m_dwModel = 0x020000D4;
  187. m_wTypeID = 0x339A;
  188. m_wIcon = 0x1F14;
  189. m_dwCoverage1 = CA_HEAD;
  190. m_dwCoverage3 = 0x3C;
  191. m_miBaseModel.dwBasePalette = 0x7E;
  192. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x1083, 0x50, 0x0C));
  193. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x1083, 0x60, 0x0C));
  194. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x1083, 0x74, 0x0C));
  195. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x1083, 0xD8, 0x18));
  196. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x108F, 0x48, 0x08));
  197. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x108F, 0x6C, 0x08));
  198. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x108F, 0xAE, 0x0C));
  199. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0x3D5, 0x1AFE));
  200. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0x3D4, 0x1AFC));
  201. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0xBB0, 0x1AF9));
  202. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0xCBE, 0x1AFD));
  203. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0x2C4, 0x1AFA));
  204. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0x2CC, 0x1AFB));
  205. m_miBaseModel.lModels.push_back(ModelRpl(0x00, 0x474));
  206. m_miWornModel.dwBasePalette = 0x7E;
  207. m_miWornModel.lPalettes.push_back(PaletteRpl(0x485, 0xF0, 0x0A));
  208. m_miWornModel.lPalettes.push_back(PaletteRpl(0x5EA, 0xFA, 0x06));
  209. m_miWornModel.lTextures.push_back(TextureRpl(0x10, 0x3C8, 0x3C8));
  210. m_miWornModel.lTextures.push_back(TextureRpl(0x10, 0x3C9, 0x3C9));
  211. m_miWornModel.lModels.push_back(ModelRpl(0x10, 0x449));
  212. }
  213. CBoboHelm::CBoboHelm()
  214. {
  215. m_strName = "Helm of Bobo";
  216. m_dwModel = 0x020000D4;
  217. m_wTypeID = 0x339B;
  218. m_wIcon = 0x2957;
  219. m_dwCoverage1 = CA_HEAD;
  220. m_dwCoverage3 = 0x3C;
  221. m_miBaseModel.dwBasePalette = 0x7E;
  222. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x1083, 0x50, 0x0C));
  223. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x1083, 0x60, 0x0C));
  224. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x1083, 0x74, 0x0C));
  225. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x1083, 0xD8, 0x18));
  226. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x108F, 0x48, 0x08));
  227. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x108F, 0x6C, 0x08));
  228. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x108F, 0xAE, 0x0C));
  229. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0x3D5, 0x1AFE));
  230. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0x3D4, 0x1AFC));
  231. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0xBB0, 0x1AF9));
  232. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0xCBE, 0x1AFD));
  233. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0x2C4, 0x1AFA));
  234. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0x2CC, 0x1AFB));
  235. m_miBaseModel.lModels.push_back(ModelRpl(0x00, 0x474));
  236. //m_miWornModel.wBasePalette = 0x7E;
  237. //m_miWornModel.lPalettes.push_back( PaletteRpl(0x485, 0xF0, 0x0A) );
  238. //m_miWornModel.lPalettes.push_back( PaletteRpl(0x5EA, 0xFA, 0x06) );
  239. //m_miWornModel.lTextures.push_back( TextureRpl(0x10, 0x3C8, 0x3C8) );
  240. //m_miWornModel.lTextures.push_back( TextureRpl(0x10, 0x3C9, 0x3C9) );
  241. m_miWornModel.lModels.push_back(ModelRpl(0x10, 0x2CF7));
  242. }
  243. CPhatRobe::CPhatRobe()
  244. {
  245. m_strName = "Phat Robe";
  246. m_dwModel = 0x020000D4;
  247. m_wTypeID = 0x1337;
  248. m_wIcon = 0x1B93;
  249. m_dwCoverage1 = CA_HEAD | CA_CHEST | CA_GIRTH | CA_UPPERARMS | CA_LOWERARMS | CA_UPPERLEGS | CA_LOWERLEGS | CA_FEET;
  250. m_dwCoverage3 = 0x3C;
  251. m_Burden = 200;
  252. m_dwStats[eArmorLevel] = 1337;
  253. m_miBaseModel.dwBasePalette = 0x7E;
  254. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x1083, 0x50, 0x0C));
  255. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x1083, 0x60, 0x0C));
  256. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x1083, 0x74, 0x0C));
  257. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x1083, 0xD8, 0x18));
  258. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x108F, 0x48, 0x08));
  259. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x108F, 0x6C, 0x08));
  260. m_miBaseModel.lPalettes.push_back(PaletteRpl(0x108F, 0xAE, 0x0C));
  261. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0x3D5, 0x1AFE));
  262. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0x3D4, 0x1AFC));
  263. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0xBB0, 0x1AF9));
  264. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0xCBE, 0x1AFD));
  265. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0x2C4, 0x1AFA));
  266. m_miBaseModel.lTextures.push_back(TextureRpl(0x00, 0x2CC, 0x1AFB));
  267. m_miBaseModel.lModels.push_back(ModelRpl(0x00, 0x474));
  268. m_miWornModel.dwBasePalette = 0x7E;
  269. //0x1080 = white robe
  270. /*
  271. m_miWornModel.lPalettes.push_back(PaletteRpl(0xFFD, 0x28, 0x28));
  272. m_miWornModel.lPalettes.push_back(PaletteRpl(0xFFD, 0x50, 0x0C));
  273. m_miWornModel.lPalettes.push_back(PaletteRpl(0xFFD, 0x60, 0x0C));
  274. m_miWornModel.lPalettes.push_back(PaletteRpl(0xFFD, 0x74, 0x0C));
  275. */
  276. m_miWornModel.lPalettes.push_back(PaletteRpl(0xFFD, 0x28, 0x28));
  277. m_miWornModel.lPalettes.push_back(PaletteRpl(0xFFD, 0x50, 0x0C));
  278. m_miWornModel.lPalettes.push_back(PaletteRpl(0xFFD, 0x60, 0x0C));
  279. m_miWornModel.lPalettes.push_back(PaletteRpl(0xFFD, 0x74, 0x0C));
  280. m_miWornModel.lTextures.push_back(TextureRpl(0x00, 0x1879, 0x1879));
  281. m_miWornModel.lTextures.push_back(TextureRpl(0x00, 0x1878, 0x1878));
  282. m_miWornModel.lTextures.push_back(TextureRpl(0x01, 0x1880, 0x1880));
  283. m_miWornModel.lTextures.push_back(TextureRpl(0x02, 0x187F, 0x187F));
  284. m_miWornModel.lTextures.push_back(TextureRpl(0x05, 0x1880, 0x1880));
  285. m_miWornModel.lTextures.push_back(TextureRpl(0x06, 0x187F, 0x187F));
  286. m_miWornModel.lTextures.push_back(TextureRpl(0x09, 0x3D5, 0x187C));
  287. m_miWornModel.lTextures.push_back(TextureRpl(0x09, 0x3D4, 0x187D));
  288. m_miWornModel.lTextures.push_back(TextureRpl(0x0A, 0x187B, 0x187B));
  289. m_miWornModel.lTextures.push_back(TextureRpl(0x0B, 0x187A, 0x187A));
  290. m_miWornModel.lTextures.push_back(TextureRpl(0x0D, 0x187B, 0x187B));
  291. m_miWornModel.lTextures.push_back(TextureRpl(0x0E, 0x187A, 0x187A));
  292. //m_miWornModel.lTextures.push_back( TextureRpl(0x10, 0x187E, 0x187E) ); - Face Texture
  293. m_miWornModel.lModels.push_back(ModelRpl(0x00, 0x1A16));
  294. m_miWornModel.lModels.push_back(ModelRpl(0x01, 0x1A0D));
  295. m_miWornModel.lModels.push_back(ModelRpl(0x02, 0x1A06));
  296. m_miWornModel.lModels.push_back(ModelRpl(0x03, 0x1EC));
  297. m_miWornModel.lModels.push_back(ModelRpl(0x04, 0x1EC));
  298. m_miWornModel.lModels.push_back(ModelRpl(0x05, 0x1A11));
  299. m_miWornModel.lModels.push_back(ModelRpl(0x06, 0x1A09));
  300. m_miWornModel.lModels.push_back(ModelRpl(0x07, 0x1EC));
  301. m_miWornModel.lModels.push_back(ModelRpl(0x08, 0x1EC));
  302. m_miWornModel.lModels.push_back(ModelRpl(0x09, 0x120D));
  303. m_miWornModel.lModels.push_back(ModelRpl(0x0A, 0x19F7));
  304. m_miWornModel.lModels.push_back(ModelRpl(0x0B, 0x19EF));
  305. m_miWornModel.lModels.push_back(ModelRpl(0x0D, 0x19FF));
  306. m_miWornModel.lModels.push_back(ModelRpl(0x0E, 0x19EF));
  307. m_miWornModel.lModels.push_back(ModelRpl(0x10, 0x1A13));
  308. }