Clone of UAS2 @ https://github.com/drudgedance/uas2

cModels.h 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. /*
  2. * This file is part of UAS2.
  3. *
  4. * UAS2 is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation; either version 2 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * UAS2 is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. * You should have received a copy of the GNU General Public License
  14. * along with UASv1; if not, write to the Free Software
  15. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  16. */
  17. /**
  18. * @file cModels.h
  19. */
  20. #if !defined(AFX_CMODELS_H__08D0B2E9_9DDB_4F52_B2A8_8847149A4EAB__INCLUDED_)
  21. #define AFX_CMODELS_H__08D0B2E9_9DDB_4F52_B2A8_8847149A4EAB__INCLUDED_
  22. #if _MSC_VER > 1000
  23. #pragma once
  24. #endif // _MSC_VER > 1000
  25. #include <winsock2.h>
  26. #include "shared.h"
  27. #define MONSTER_MODEL_TABLE_SIZE 3000
  28. class cModels
  29. {
  30. friend class cMasterServer;
  31. public:
  32. cModels( DWORD dwModelID, BOOL fAddToHash = TRUE )
  33. : m_dwModelID( dwModelID ),
  34. m_pcPrev ( NULL ),
  35. m_pcNext ( NULL )
  36. {
  37. m_dwUnknownDword = 0x0L;
  38. m_dwUnknown = 0x0L;
  39. m_wSeagreen10 = 0x0;
  40. m_dwFlags2 = 0x00800016;
  41. m_dwObjectFlags1 = 0x00000010;
  42. m_dwObjectFlags2 = 0x00000014;
  43. m_bItemSlots = 0xFF;
  44. m_bPackSlots = 0xFF;
  45. m_wUnknown1 = 0x0;
  46. m_flScale = 1.0f;
  47. m_dwTrio1[0] = 0x0;
  48. m_dwTrio1[1] = 0x0;
  49. m_dwTrio1[2] = 0x0;
  50. m_dwTrio2[0] = 0x0;
  51. m_dwTrio2[1] = 0x0;
  52. m_dwTrio2[2] = 0x0;
  53. m_dwTrio3[0] = 0x0;
  54. m_dwTrio3[1] = 0x0;
  55. m_dwTrio3[2] = 0x0;
  56. m_dwSpecies = 0x0;
  57. if( fAddToHash )
  58. Hash_Add( this );
  59. }
  60. virtual ~cModels()
  61. {
  62. if ( m_pcPrev ) m_pcPrev->m_pcNext = m_pcNext;
  63. else m_lpcHashTable[m_dwModelID] = m_pcNext;
  64. if ( m_pcNext ) m_pcNext->m_pcPrev = m_pcPrev;
  65. }
  66. static inline void Hash_Load( )
  67. {
  68. ZeroMemory( m_lpcHashTable, sizeof( m_lpcHashTable ) );
  69. }
  70. static inline cModels *Hash_New( DWORD& dwModelID )
  71. {
  72. cModels *pcModel = Hash_Find( dwModelID );
  73. if ( pcModel )
  74. return pcModel;
  75. return new cModels( dwModelID ) ;
  76. }
  77. static void Hash_Erase ( );
  78. static void Hash_Remove ( cModels *pcModel );
  79. static cModels *FindModel ( DWORD dwModelID );
  80. std::string m_strName;
  81. std::string m_strDescription;
  82. DWORD m_dwSpecies;
  83. DWORD m_dwModelID;
  84. // Model Vectors
  85. BYTE m_bPaletteChange;
  86. DWORD m_wPaletteVector;
  87. sPaletteChange m_vectorPal[255];
  88. BYTE m_bTextureChange;
  89. DWORD m_wTextureVector;
  90. sTextureChange m_vectorTex[255];
  91. BYTE m_bModelChange;
  92. DWORD m_wModelVector;
  93. sModelChange m_vectorMod[255];
  94. WORD m_wPortalMode;
  95. WORD m_wUnknown_1;
  96. DWORD m_dwUnknownCount;
  97. BYTE m_bInitialAnimation[200];
  98. DWORD m_dwUnknownDword;
  99. DWORD m_dwUnknown;
  100. WORD m_wSeagreen8;
  101. WORD m_wSeagreen10;
  102. WORD m_wModel;
  103. WORD m_wIcon;
  104. WORD m_wAnimConfig;
  105. WORD m_wSoundSet;
  106. DWORD m_dwModelNumber;
  107. DWORD m_dwObjectFlags1;
  108. DWORD m_dwObjectFlags2;
  109. BYTE m_bItemSlots;
  110. BYTE m_bPackSlots;
  111. DWORD m_dwFlags1;
  112. DWORD m_dwFlags2;
  113. WORD m_wUnknown1;
  114. DWORD m_dwUnknown_Blue;
  115. float m_flScale;
  116. DWORD m_dwUnknown_LightGrey;
  117. DWORD m_dwTrio1[3];
  118. DWORD m_dwTrio2[3];
  119. DWORD m_dwTrio3[3];
  120. DWORD m_dwMedGrey;
  121. DWORD m_dwBlueGrey;
  122. DWORD m_dwUnknown_v2;
  123. DWORD m_dwUnknown_v6;
  124. int m_isContainer;
  125. //Stats for damage
  126. float mob_strength;
  127. cAnimates m_cAnimations;
  128. cModels *m_pcNext;
  129. cModels *m_pcPrev;
  130. std::list< cModels * > m_lstModels;
  131. private:
  132. static cModels *m_lpcHashTable[MONSTER_MODEL_TABLE_SIZE];
  133. static inline Hash_Add( cModels *pcModels )
  134. {
  135. const DWORD dwModelID = pcModels->m_dwModelID;
  136. if ( !m_lpcHashTable[dwModelID] )
  137. m_lpcHashTable[dwModelID] = pcModels;
  138. else
  139. {
  140. pcModels->m_pcNext = m_lpcHashTable[dwModelID];
  141. m_lpcHashTable[dwModelID]->m_pcPrev = pcModels;
  142. m_lpcHashTable[dwModelID] = pcModels;
  143. }
  144. }
  145. static inline cModels *Hash_Find( DWORD& dwModelID )
  146. {
  147. const DWORD dwModel = dwModelID;
  148. cModels *pcModels = m_lpcHashTable[dwModel];
  149. while ( pcModels )
  150. {
  151. if ( pcModels->CompareModel( dwModelID ) ) return pcModels;
  152. else
  153. pcModels = pcModels->m_pcNext;
  154. }
  155. return NULL;
  156. }
  157. inline BOOL CompareModel( DWORD& dwModelID )
  158. {
  159. if ( dwModelID == m_dwModelID )
  160. return true;
  161. else
  162. return false;
  163. }
  164. };
  165. #endif // !defined(AFX_CMODELS_H__08D0B2E9_9DDB_4F52_B2A8_8847149A4EAB__INCLUDED_)