KItem.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:6k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //---------------------------------------------------------------------------
  2. // Sword3 Core (c) 2002 by Kingsoft
  3. //
  4. // File: KItem.h
  5. // Date: 2002.08
  6. // Code: LiXueWu, DongBo
  7. // Desc: Header File
  8. //---------------------------------------------------------------------------
  9. #ifndef KItemH
  10. #define KItemH
  11. #include "KBasPropTbl.h"
  12. #include "KMagicAttrib.h"
  13. #include "GameDataDef.h"
  14. #ifndef _SERVER
  15. #include  "../../Represent/iRepresent/KRepresentUnit.h"
  16. #endif
  17. #include "KTabFile.h"
  18. //#include "KPlayer.h"
  19. class KPlayer;
  20. class KIniFile;
  21. #define IN
  22. #define OUT
  23. #ifdef _SERVER
  24. #define MAX_ITEM 160000
  25. #else
  26. #define MAX_ITEM 512
  27. #endif
  28. #define KItemNormalAttrib KMagicAttrib
  29. /*
  30. //装备属性作用于Player的何种属性
  31. #define ID_LIFE 0
  32. #define ID_MAXLIFE 1
  33. #define ID_LIEFREPLENISH 2
  34. #define ID_MANA 3
  35. #define ID_MAXMANA 4
  36. #define ID_MANAREPLENISH 5
  37. */
  38. enum ITEMGENRE
  39. {
  40. item_equip = 0, // 装备
  41. item_medicine, // 药品
  42. item_mine, // 矿石
  43. item_materials, // 药材
  44. item_task, // 任务
  45. item_townportal, // 传送门
  46. item_number, // 类型数目
  47. };
  48. enum EQUIPLEVEL
  49. {
  50. equip_normal = 0, // 普通装备
  51. equip_magic, // 魔法装备(1 ~ 2个魔法前后缀)
  52. equip_rare, // 稀有装备(3 ~ 6个魔法前后缀)
  53. equip_unique, // 唯一装备
  54. equip_set, // 套装
  55. equip_number, // 装备等级数目
  56. // flying add this item
  57. equip_gold, //黄金装备
  58. };
  59. enum EQUIPDETAILTYPE
  60. {
  61. equip_meleeweapon = 0,
  62. equip_rangeweapon,
  63. equip_armor,
  64. equip_ring,
  65. equip_amulet,
  66. equip_boots,
  67. equip_belt,
  68. equip_helm,
  69. equip_cuff,
  70. equip_pendant,
  71. equip_horse,
  72. equip_detailnum,
  73. };
  74. enum MEDICINEDETAILTYPE
  75. {
  76. medicine_blood = 0,
  77. medicine_mana,
  78. medicine_both,
  79. medicine_stamina,
  80. medicine_antipoison,
  81. medicine_detailnum,
  82. };
  83. typedef struct
  84. {
  85. int nItemGenre; // 道具种类 (武器? 药品? 矿石?)
  86. int nDetailType; // 在该种类中的具体类别
  87. int nParticularType; // 详细类别
  88. int nObjIdx; // 地图上摆放时对应的物件数据编号
  89. BOOL bStack; // 是否可叠放
  90. int nWidth; // 道具栏中所占宽度
  91. int nHeight; // 道具栏中所占高度
  92. int nPrice; // 价格
  93. int nLevel; // 等级
  94. int nSeries; // 五行属性
  95. char szItemName[80]; // 名称
  96. #ifndef _SERVER
  97. char szImageName[80]; // 界面中的动画文件名
  98. char szIntro[256]; // 说明文字
  99. #endif
  100. int nNpcImage; // NPC图象影响
  101. } KItemCommonAttrib;
  102. typedef struct
  103. {
  104. UINT uRandomSeed;
  105. int nGeneratorLevel[6];
  106. int nVersion;
  107. int nLuck;
  108. } KItemGeneratorParam;
  109. class KNpc;
  110. class KItem
  111. {
  112. public:
  113. KItem();
  114. ~KItem();
  115. // 以下是核心成员变量
  116. private:
  117. KItemCommonAttrib m_CommonAttrib; // 各种道具的共同属性
  118. KItemNormalAttrib m_aryBaseAttrib[7]; // 道具的基础属性
  119. KItemNormalAttrib m_aryRequireAttrib[6]; // 道具的需求属性
  120. KItemNormalAttrib m_aryMagicAttrib[6]; // 道具的魔法属性
  121. // 以下是辅助性的成员变量
  122. public:
  123. KItemGeneratorParam m_GeneratorParam; // 道具的生成参数
  124. private:
  125. int m_nIndex; // 自身在道具数组中的索引
  126. DWORD m_dwID; // 独立的ID,用于客户端与服务器端的交流
  127. int m_nCurrentDur; // 当前耐久度
  128. #ifndef _SERVER
  129. KRUImage m_Image;
  130. #endif
  131. // 以下是对外接口
  132. public:
  133. void ApplyMagicAttribToNPC(IN KNpc*, IN int = 0) const;
  134. void RemoveMagicAttribFromNPC(IN KNpc*, IN int = 0) const;
  135. void ApplyHiddenMagicAttribToNPC(IN KNpc*, IN int) const;
  136. void RemoveHiddenMagicAttribFromNPC(IN KNpc*, IN int) const;
  137. KItemGeneratorParam * GetItemParam(){return &m_GeneratorParam;};
  138. void SetID(DWORD dwID) { m_dwID = dwID; };
  139. DWORD GetID() const { return m_dwID; };
  140. int GetDetailType() const { return m_CommonAttrib.nDetailType; };
  141. int GetGenre() const { return m_CommonAttrib.nItemGenre; };
  142. int GetSeries() const { return m_CommonAttrib.nSeries; };
  143. int GetParticular() { return m_CommonAttrib.nParticularType; };
  144. int GetLevel() { return m_CommonAttrib.nLevel; };
  145. void SetSeries(int nSeries) { m_CommonAttrib.nSeries = nSeries; };
  146. int GetWidth() const { return m_CommonAttrib.nWidth; };
  147. int GetHeight() const { return m_CommonAttrib.nHeight; };
  148. int GetPrice() const { return m_CommonAttrib.nPrice; };
  149. char* GetName() const { return (char *)m_CommonAttrib.szItemName; };
  150. int GetObjIdx() { return m_CommonAttrib.nObjIdx;};
  151. void* GetRequirement(IN int);
  152. int GetMaxDurability();
  153. int GetTotalMagicLevel();
  154. int GetRepairPrice();
  155. void Remove();
  156. BOOL SetBaseAttrib(IN const KItemNormalAttrib*);
  157. BOOL SetRequireAttrib(IN const KItemNormalAttrib*);
  158. BOOL SetMagicAttrib(IN const KItemNormalAttrib*);
  159. void SetDurability(IN const int nDur) { m_nCurrentDur = nDur; };
  160. int GetDurability() { return m_nCurrentDur; };
  161. KItemGeneratorParam* GetGeneratorParam() { return &m_GeneratorParam; }
  162. int Abrade(IN const int nRange);
  163. BOOL CanBeRepaired();
  164. #ifndef _SERVER
  165. void Paint(int nX, int nY);
  166. void GetDesc(char* pszMsg, bool bShowPrice = false, int nPriceScale = 1, int nActiveAttrib = 0);
  167. #endif
  168. // 以下是辅助接口
  169. friend class KItemGenerator;
  170. friend class KPlayer;
  171. friend class KItemList;
  172. private:
  173. BOOL SetAttrib_CBR(IN const KBASICPROP_EQUIPMENT*);
  174. BOOL SetAttrib_MA(IN const KItemNormalAttrib*);
  175. BOOL SetAttrib_MA(IN const KMACP*);
  176. void operator = (const KBASICPROP_EQUIPMENT&);
  177. void operator = (const KBASICPROP_MEDMATERIAL&);
  178. void operator = (const KBASICPROP_MINE&);
  179. void operator = (const KBASICPROP_MEDICINE&);
  180. void operator = (const KBASICPROP_QUEST&);
  181. void operator = (const KBASICPROP_TOWNPORTAL&);
  182. void operator = (const KBASICPROP_EQUIPMENT_UNIQUE&);
  183. // flying add this overload operator.
  184. void operator = (const KBASICPROP_EQUIPMENT_GOLD&);
  185. BOOL Gen_Equipment_Unique(const KBASICPROP_EQUIPMENT*, const KBASICPROP_EQUIPMENT_UNIQUE*);
  186. // 以下是辅助函数
  187. private:
  188. BOOL SetAttrib_Base(const KEQCP_BASIC*);
  189. BOOL SetAttrib_Req(const KEQCP_REQ*);
  190. };
  191. extern KItem Item[MAX_ITEM];
  192. #endif