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

模拟服务器

开发平台:

C/C++

  1. //---------------------------------------------------------------------------
  2. // Sword3 Core (c) 2002 by Kingsoft
  3. //
  4. // File: KBasPropTbl.h
  5. // Date: 2002.08.14
  6. // Code: DongBo
  7. // Desc:    header file. 本文件定义的类用于从tab file中读出道具的初始属性,
  8. // 并生成对应的属性表
  9. //---------------------------------------------------------------------------
  10. #ifndef KBasPropTblH
  11. #define KBasPropTblH
  12. #define SZBUFLEN_0 80 // 典型的字符串缓冲区长度
  13. #define SZBUFLEN_1 128 // 典型的字符串缓冲区长度
  14. #define MAX_MAGIC_PREFIX 20
  15. #define MAX_MAGIC_SUFFIX 20
  16. // 以下结构用于描述矿石的基本属性. 相关属性由配置文件(tab file)提供
  17. typedef struct
  18. {
  19. char m_szName[SZBUFLEN_0]; // 名称
  20. int m_nItemGenre; // 道具种类
  21. int m_nDetailType; // 具体类别
  22. int m_nParticularType; // 详细类别
  23. char m_szImageName[SZBUFLEN_0]; // 界面中的动画文件名
  24. int m_nObjIdx; // 对应物件索引
  25. int m_nWidth; // 道具栏中所占宽度
  26. int m_nHeight; // 道具栏中所占高度
  27. char m_szIntro[SZBUFLEN_1]; // 说明文字
  28. int m_nSeries; // 五行属性
  29. int m_nPrice; // 价格
  30. int m_nLevel; // 等级
  31. BOOL m_bStack; // 是否可叠放
  32. } KBASICPROP_MINE;
  33. // 以下结构用于描述药品属性的特性:数值与时间
  34. typedef struct
  35. {
  36. int nAttrib;
  37. int nValue;
  38. int nTime;
  39. } KMEDATTRIB;
  40. // 以下结构用于描述药品的基本属性. 相关属性由配置文件(tab file)提供
  41. // 适用于以下药品: 生命补充类,内力补充类,体力补充类,毒药类,解毒类,
  42. // 解燃烧类,解冰冻类
  43. typedef struct
  44. {
  45. char m_szName[SZBUFLEN_0]; // 名称
  46. int m_nItemGenre; // 道具种类
  47. int m_nDetailType; // 具体类别
  48. int m_nParticularType; // 详细类别
  49. char m_szImageName[SZBUFLEN_0]; // 界面中的动画文件名
  50. int m_nObjIdx; // 对应物件索引
  51. int m_nWidth; // 道具栏中所占宽度
  52. int m_nHeight; // 道具栏中所占高度
  53. char m_szIntro[SZBUFLEN_1]; // 说明文字
  54. int m_nSeries; // 五行属性
  55. int m_nPrice; // 价格
  56. int m_nLevel; // 等级
  57. BOOL m_bStack; // 是否可叠放
  58. KMEDATTRIB m_aryAttrib[2]; // 药品的属性
  59. } KBASICPROP_MEDICINE;
  60. // 以下结构用于描述药材的基本属性. 相关属性由配置文件(tab file)提供
  61. typedef struct
  62. {
  63. char m_szName[SZBUFLEN_0]; // 名称
  64. int m_nItemGenre; // 道具种类
  65. int m_nDetailType; // 具体类别
  66. int m_nParticularType; // 详细类别
  67. char m_szImageName[SZBUFLEN_0]; // 界面中的动画文件名
  68. int m_nObjIdx; // 对应物件索引
  69. int m_nWidth; // 道具栏中所占宽度
  70. int m_nHeight; // 道具栏中所占高度
  71. char m_szIntro[SZBUFLEN_1]; // 说明文字
  72. int m_nSeries; // 五行属性
  73. int m_nPrice; // 价格
  74. int m_nLevel; // 等级
  75. BOOL m_bStack; // 是否可叠放
  76. int m_nAttrib1_Type; // 属性1类型
  77. int m_nAttrib1_Para; // 属性1参数
  78. int m_nAttrib2_Type; // 属性2类型
  79. int m_nAttrib2_Para; // 属性2参数
  80. int m_nAttrib3_Type; // 属性2类型
  81. int m_nAttrib3_Para; // 属性2参数
  82. } KBASICPROP_MEDMATERIAL;
  83. // 以下结构用于描述一对最大,最小值
  84. typedef struct
  85. {
  86. int nMin;
  87. int nMax;
  88. } KMINMAXPAIR;
  89. // 以下结构用于给出装备的核心参数: 基础属性
  90. typedef struct
  91. {
  92. int nType; // 属性类型
  93. KMINMAXPAIR sRange; // 取值范围
  94. } KEQCP_BASIC; // Equipment_CorePara_Basic
  95. // 以下结构用于给出装备的核心参数: 需求属性
  96. typedef struct
  97. {
  98. int nType; // 属性类型
  99. int nPara; // 数值
  100. } KEQCP_REQ; // Equipment_CorePara_Requirment
  101. // 以下结构用于给出魔法的核心参数
  102. typedef struct
  103. {
  104. int nPropKind; // 修改的属性类型(对同一个数值加百分比和加点数被认为是两个属性)
  105. KMINMAXPAIR aryRange[3]; // 修改属性所需的几个参数
  106. } KMACP; // MagicAttrib_CorePara
  107. // 以下结构用于描述配置文件中给出的魔法属性. 相关属性由配置文件(tab file)提供
  108. // Add by Freeway Chen in 2003.5.30
  109. #define MATF_CBDR     11      // 物品类型 type(现在的值为 equip_detailnum)
  110. #define         MATF_PREFIXPOSFIX   2       // 前缀后缀
  111. #define         MATF_SERIES         5       // 五行
  112. #define         MATF_LEVEL          10      // 最多有10个级别
  113. typedef struct
  114. {
  115. int m_nPos; // 前缀还是后缀
  116. char m_szName[SZBUFLEN_0]; // 名称
  117. int m_nClass; // 五行要求
  118. int m_nLevel; // 等级要求
  119. char m_szIntro[SZBUFLEN_1]; // 说明文字
  120. KMACP m_MagicAttrib; // 核心参数
  121. int m_DropRate[MATF_CBDR]; // 出现概率
  122.     //add by Freeway Chen in 2003.5.30
  123.     int         m_nUseFlag;                 // 该魔法是否被使用过
  124. } KMAGICATTRIB_TABFILE;
  125. // 以下结构用于描述魔法属性. 相关属性由配置文件(tab file)提供
  126. /*
  127. typedef struct
  128. {
  129. int m_nPos; // 前缀还是后缀
  130. char m_szName[SZBUFLEN_0]; // 名称
  131. int m_nClass; // 五行要求
  132. int m_nLevel; // 等级要求
  133. char m_szIntro[SZBUFLEN_1]; // 说明文字
  134. KMACP m_MagicAttrib; // 核心参数
  135. int m_DropRate; // 出现概率
  136. } KMAGICATTRIB;
  137. */
  138. // 以下结构用于描述装备的初始属性. 相关数据由配置文件(tab file)提供
  139. typedef struct
  140. {
  141. char m_szName[SZBUFLEN_0]; // 名称
  142. int m_nItemGenre; // 道具种类 (武器? 药品? 矿石?)
  143. int m_nDetailType; // 具体类别
  144. int m_nParticularType; // 详细类别
  145. char m_szImageName[SZBUFLEN_0]; // 界面中的动画文件名
  146. int m_nObjIdx; // 对应物件索引
  147. int m_nWidth; // 道具栏中所占宽度
  148. int m_nHeight; // 道具栏中所占高度
  149. char m_szIntro[SZBUFLEN_1]; // 说明文字
  150. int m_nSeries; // 五行属性
  151. int m_nPrice; // 价格
  152. int m_nLevel; // 等级
  153. BOOL m_bStack; // 是否可叠放
  154. KEQCP_BASIC m_aryPropBasic[7]; // 基础属性
  155. KEQCP_REQ m_aryPropReq[6]; // 需求属性
  156. } KBASICPROP_EQUIPMENT;
  157. // 以下结构用于描述唯一装备的初始属性. 相关数据由配置文件(tab file)提供
  158. typedef struct
  159. {
  160. char m_szName[SZBUFLEN_0]; // 名称
  161. int m_nItemGenre; // 道具种类 (武器? 药品? 矿石?)
  162. int m_nDetailType; // 具体类别
  163. int m_nParticularType; // 详细类别
  164. char m_szImageName[SZBUFLEN_0]; // 界面中的动画文件名
  165. int m_nObjIdx; // 对应物件索引
  166. char m_szIntro[SZBUFLEN_1]; // 说明文字
  167. int m_nSeries; // 五行属性
  168. int m_nPrice; // 价格
  169. int m_nLevel; // 等级
  170. int m_nRarity; // 稀有程度
  171. KEQCP_REQ m_aryPropReq[6]; // 需求属性
  172. KMACP m_aryMagicAttribs[6]; // 魔法属性
  173. } KBASICPROP_EQUIPMENT_UNIQUE;
  174. // 以下结构用于描述黄金装备的初始属性. 相关数据由配置文件(tab file)提供
  175. // flying 根据策划需求修改自KBASICPROP_EQUIPMENT_UNIQUE类型
  176. typedef struct
  177. {
  178. char m_szName[SZBUFLEN_0]; // 名称
  179. int m_nItemGenre; // 道具种类 (武器? 药品? 矿石?)
  180. int m_nDetailType; // 具体类别
  181. int m_nParticularType; // 详细类别
  182. int m_nRarity; // 稀有程度
  183. char m_szImageName[SZBUFLEN_0]; // 界面中的动画文件名
  184. int m_nObjIdx; // 对应物件索引
  185. int m_nWidth; // 物品栏宽度
  186. int m_nHeight; // 物品栏高度
  187. char m_szIntro[SZBUFLEN_1]; // 说明文字
  188. int m_nSeries; // 五行属性
  189. int m_nPrice; // 价格
  190. int m_nLevel; // 等级
  191. KEQCP_REQ m_aryPropReq[6]; // 需求属性
  192. KMACP m_aryMagicAttribs[6]; // 魔法属性
  193. } KBASICPROP_EQUIPMENT_GOLD;
  194. typedef struct
  195. {
  196. char m_szName[SZBUFLEN_0]; // 名称
  197. int m_nItemGenre; // 道具种类
  198. int m_nDetailType; // 具体类别
  199. char m_szImageName[SZBUFLEN_0]; // 界面中的动画文件名
  200. int m_nObjIdx; // 对应物件索引
  201. int m_nWidth; // 道具栏中所占宽度
  202. int m_nHeight; // 道具栏中所占高度
  203. char m_szIntro[SZBUFLEN_1]; // 说明文字
  204. } KBASICPROP_QUEST;
  205. typedef struct
  206. {
  207. char m_szName[SZBUFLEN_0]; // 名称
  208. int m_nItemGenre; // 道具种类
  209. char m_szImageName[SZBUFLEN_0]; // 界面中的动画文件名
  210. int m_nObjIdx; // 对应物件索引
  211. int m_nWidth; // 道具栏中所占宽度
  212. int m_nHeight; // 道具栏中所占高度
  213. int m_nPrice; // 价格
  214. char m_szIntro[SZBUFLEN_1]; // 说明文字
  215. } KBASICPROP_TOWNPORTAL;
  216. //=============================================================================
  217. class KBasicPropertyTable // 缩写: BPT,用于派生类
  218. {
  219. public:
  220. KBasicPropertyTable();
  221. ~KBasicPropertyTable();
  222. // 以下是核心成员变量
  223. protected:
  224. void* m_pBuf; // 指向属性表缓冲区的指针
  225. // 属性表是一个结构数组,
  226. // 其具体类型由派生类决定
  227. int m_nNumOfEntries; // 属性表含有多少项数据
  228. // 以下是辅助性的成员变量
  229.     int         m_nSizeOfEntry; // 每项数据的大小(即结构的大小)
  230. char m_szTabFile[MAX_PATH]; // tabfile的文件名
  231. // 以下是对外接口
  232. public:
  233. virtual BOOL Load(); // 从tabfile中读出初始属性值, 填入属性表
  234. int NumOfEntries() const { return m_nNumOfEntries; }
  235. // 以下是辅助函数
  236. protected:
  237. BOOL GetMemory();
  238. void ReleaseMemory();
  239. void SetCount(int);
  240. virtual BOOL LoadRecord(int i, KTabFile* pTF) = 0;
  241. };
  242. class KBPT_Mine : public KBasicPropertyTable
  243. {
  244. public:
  245. KBPT_Mine();
  246. ~KBPT_Mine();
  247. // 以下是对外接口
  248. public:
  249. const KBASICPROP_MINE* GetRecord(IN int) const;
  250. // 以下是辅助函数
  251. protected:
  252. virtual BOOL LoadRecord(int i, KTabFile* pTF);
  253. };
  254. // =====>药品<=====
  255. class KBPT_Medicine : public KBasicPropertyTable
  256. {
  257. public:
  258. KBPT_Medicine();
  259. ~KBPT_Medicine();
  260. // 以下是对外接口
  261. public:
  262. const KBASICPROP_MEDICINE* GetRecord(IN int) const;
  263. const KBASICPROP_MEDICINE* FindRecord(IN int, IN int) const;
  264. // 以下是辅助函数
  265. protected:
  266. virtual BOOL LoadRecord(int i, KTabFile* pTF);
  267. };
  268. // =====>任务物品<=====
  269. class KBPT_Quest : public KBasicPropertyTable
  270. {
  271. public:
  272. KBPT_Quest();
  273. ~KBPT_Quest();
  274. // 以下是对外接口
  275. public:
  276. const KBASICPROP_QUEST* GetRecord(IN int) const;
  277. const KBASICPROP_QUEST* FindRecord(IN int) const;
  278. protected:
  279. virtual BOOL LoadRecord(int i, KTabFile* pTF);
  280. };
  281. class KBPT_TownPortal : public KBasicPropertyTable
  282. {
  283. public:
  284. KBPT_TownPortal();
  285. ~KBPT_TownPortal();
  286. // 以下是对外接口
  287. public:
  288. const KBASICPROP_TOWNPORTAL* GetRecord(IN int) const;
  289. protected:
  290. virtual BOOL LoadRecord(int i, KTabFile* pTF);
  291. };
  292. // =====>药材<=====
  293. class KBPT_MedMaterial : public KBasicPropertyTable
  294. {
  295. public:
  296. KBPT_MedMaterial();
  297. ~KBPT_MedMaterial();
  298. // 以下是对外接口
  299. public:
  300. const KBASICPROP_MEDMATERIAL* GetRecord(IN int) const;
  301. // 以下是辅助函数
  302. protected:
  303. virtual BOOL LoadRecord(int i, KTabFile* pTF);
  304. };
  305. class KBPT_Equipment : public KBasicPropertyTable
  306. {
  307. public:
  308. KBPT_Equipment();
  309. ~KBPT_Equipment();
  310. // 以下是对外接口
  311. public:
  312. const KBASICPROP_EQUIPMENT* GetRecord(IN int) const;
  313. const KBASICPROP_EQUIPMENT* FindRecord(IN int, IN int, IN int) const;
  314. void Init(IN int);
  315. // 以下是辅助函数
  316. protected:
  317. virtual BOOL LoadRecord(int i, KTabFile* pTF);
  318. };
  319. class KBPT_Equipment_Unique : public KBasicPropertyTable
  320. {
  321. public:
  322. KBPT_Equipment_Unique();
  323. ~KBPT_Equipment_Unique();
  324. // 以下是对外接口
  325. public:
  326. const KBASICPROP_EQUIPMENT_UNIQUE* GetRecord(IN int) const;
  327. const KBASICPROP_EQUIPMENT_UNIQUE* FindRecord(IN int, IN int, IN int) const;
  328. // 以下是辅助函数
  329. protected:
  330. virtual BOOL LoadRecord(int i, KTabFile* pTF);
  331. };
  332. // flying modify this class
  333. // 黄金装备
  334. class KBPT_Equipment_Gold : public KBasicPropertyTable
  335. {
  336. public:
  337. KBPT_Equipment_Gold();
  338. virtual ~KBPT_Equipment_Gold();
  339. // 以下是对外接口
  340. public:
  341. const KBASICPROP_EQUIPMENT_GOLD* GetRecord(IN int) const;
  342. const KBASICPROP_EQUIPMENT_GOLD* FindRecord(IN int, IN int, IN int) const;
  343. int GetRecordCount() const {return KBasicPropertyTable::NumOfEntries();};
  344. // 以下是辅助函数
  345. protected:
  346. virtual BOOL LoadRecord(int i, KTabFile* pTF);
  347. };
  348. class KBPT_MagicAttrib_TF : public KBasicPropertyTable
  349. {
  350. public:
  351. KBPT_MagicAttrib_TF();
  352. ~KBPT_MagicAttrib_TF();
  353. // 以下是辅助成员变量
  354. protected:
  355. int m_naryMACount[2][MATF_CBDR]; // 每种装备可适用的魔法数目,分前后缀进行统计
  356. // 共有MATF_CBDR种装备可以具备魔法
  357. // 以下是对外接口
  358. public:
  359. void GetMACount(int*) const;
  360. const KMAGICATTRIB_TABFILE* GetRecord(IN int) const;
  361. // 以下是辅助函数
  362. protected:
  363. virtual BOOL LoadRecord(int i, KTabFile* pTF);
  364. void Init();
  365. };
  366. /*
  367. class KBPT_MagicAttrib : public KBasicPropertyTable
  368. {
  369. public:
  370. KBPT_MagicAttrib();
  371. ~KBPT_MagicAttrib();
  372. // 以下是辅助函数
  373. protected:
  374. };
  375. */
  376. //============================================================================
  377. // Add by Freeway Chen in 2003.5.30
  378. class KBPT_ClassMAIT    // Magic Item Index Table
  379. {
  380. public:
  381. KBPT_ClassMAIT();
  382. ~KBPT_ClassMAIT();
  383. // 以下是核心成员变量
  384. protected:
  385. int* m_pnTable; // 缓冲区指针, 所存数据为
  386. // KBPT_MagicAttrib_TF::m_pBuf数组的下标
  387. int m_nSize; // 缓冲区内含多少项数据(并非字节数)
  388. // 以下是辅助成员变量
  389. int m_nNumOfValidData; // 缓冲区中有效数据的个数
  390. // 初始化工作完成后m_nNumOfValidData < m_nSize
  391. // 以下是对外接口
  392. public:
  393.     BOOL Clear();
  394. BOOL Insert(int nItemIndex);
  395. int  Get(int i) const;
  396.     int  GetCount() const { return m_nNumOfValidData; }
  397. };
  398. //============================================================================
  399. class KBPT_ClassifiedMAT
  400. {
  401. public:
  402. KBPT_ClassifiedMAT();
  403. ~KBPT_ClassifiedMAT();
  404. // 以下是核心成员变量
  405. protected:
  406. int* m_pnTable; // 缓冲区指针, 所存数据为
  407. // KBPT_MagicAttrib_TF::m_pBuf数组的下标
  408. int m_nSize; // 缓冲区内含多少项数据(并非字节数)
  409. // 以下是辅助成员变量
  410. int m_nNumOfValidData; // 缓冲区中有效数据的个数
  411. // 初始化工作完成后m_nNumOfValidData==m_nSize
  412. // 以下是对外接口
  413. public:
  414. BOOL GetMemory(int);
  415. BOOL Set(int);
  416. int Get(int) const;
  417. BOOL GetAll(int*, int*) const;
  418. // 以下是辅助函数
  419. protected:
  420. void ReleaseMemory();
  421. };
  422. class KLibOfBPT
  423. {
  424. public:
  425. KLibOfBPT();
  426. ~KLibOfBPT();
  427. // 以下是核心成员变量
  428. protected:
  429. KBPT_Medicine m_BPTMedicine;
  430. KBPT_TownPortal m_BPTTownPortal;
  431. KBPT_Quest m_BPTQuest;
  432. KBPT_Equipment m_BPTHorse;
  433. KBPT_Equipment m_BPTMeleeWeapon;
  434. KBPT_Equipment m_BPTRangeWeapon;
  435. KBPT_Equipment m_BPTArmor;
  436. KBPT_Equipment m_BPTHelm;
  437. KBPT_Equipment m_BPTBoot;
  438. KBPT_Equipment m_BPTBelt;
  439. KBPT_Equipment m_BPTAmulet;
  440. KBPT_Equipment m_BPTRing;
  441. KBPT_Equipment m_BPTCuff;
  442. KBPT_Equipment m_BPTPendant;
  443.     KBPT_MagicAttrib_TF m_BPTMagicAttrib;
  444. // Add by flying
  445. KBPT_Equipment_Gold m_GoldItem;
  446.     // Add by Freeway Chen in 2003.5.30
  447. // 四维分别为前后缀、物品类型、五行、级别
  448.     KBPT_ClassMAIT          m_CMAIT[MATF_PREFIXPOSFIX][MATF_CBDR][MATF_SERIES][MATF_LEVEL];
  449. KBPT_ClassifiedMAT m_CMAT[2][MATF_CBDR];
  450. // 以下是对外接口
  451. public:
  452. BOOL Init();
  453. const KMAGICATTRIB_TABFILE* GetMARecord(IN int) const;
  454. const int GetMARecordNumber() const;
  455.     
  456.     // Add by Freeway Chen in 2003.5.30
  457.     const KBPT_ClassMAIT*       GetCMIT(IN int nPrefixPostfix, IN int nType, IN int nSeries, int nLevel) const;
  458. const KBPT_ClassifiedMAT* GetCMAT(IN int, int) const;
  459. // Add by flying on 2003.6.2
  460. const KBASICPROP_EQUIPMENT_GOLD* GetGoldItemRecord(IN int nIndex) const;
  461. const int GetGoldItemNumber() const;
  462. const KBASICPROP_EQUIPMENT* GetMeleeWeaponRecord(IN int) const;
  463. const int GetMeleeWeaponRecordNumber() const;
  464. const KBASICPROP_EQUIPMENT* GetRangeWeaponRecord(IN int) const;
  465. const int GetRangeWeaponRecordNumber() const;
  466. const KBASICPROP_EQUIPMENT* GetArmorRecord(IN int) const;
  467. const int GetArmorRecordNumber() const;
  468. const KBASICPROP_EQUIPMENT* GetHelmRecord(IN int) const;
  469. const int GetHelmRecordNumber() const;
  470. const KBASICPROP_EQUIPMENT* GetBootRecord(IN int) const;
  471. const int GetBootRecordNumber() const;
  472. const KBASICPROP_EQUIPMENT* GetBeltRecord(IN int) const;
  473. const int GetBeltRecordNumber() const;
  474. const KBASICPROP_EQUIPMENT* GetAmuletRecord(IN int) const;
  475. const int GetAmuletRecordNumber() const;
  476. const KBASICPROP_EQUIPMENT* GetRingRecord(IN int) const;
  477. const int GetRingRecordNumber() const;
  478. const KBASICPROP_EQUIPMENT* GetCuffRecord(IN int) const;
  479. const int GetCuffRecordNumber() const;
  480. const KBASICPROP_EQUIPMENT* GetPendantRecord(IN int) const;
  481. const int GetPendantRecordNumber() const;
  482. const KBASICPROP_EQUIPMENT* GetHorseRecord(IN int) const;
  483. const int GetHorseRecordNumber() const;
  484. const KBASICPROP_EQUIPMENT_UNIQUE* FindEquipmentUnique(IN int, IN int, IN int) const;
  485. const KBASICPROP_MEDMATERIAL* GetMedMaterial(IN int) const;
  486. const KBASICPROP_MEDICINE* GetMedicineRecord(IN int) const;
  487. const int GetMedicineRecordNumber() const;
  488. const KBASICPROP_MEDICINE* FindMedicine(IN int, IN int) const;
  489. const KBASICPROP_QUEST* GetQuestRecord(IN int) const;
  490. const int GetQuestRecordNumber() const;
  491. const KBASICPROP_TOWNPORTAL* GetTownPortalRecord(IN int) const;
  492. const int GetTownPortalRecordNumber() const;
  493. const KBASICPROP_MINE* GetMine(IN int) const;
  494. // 以下是辅助函数
  495. protected:
  496. BOOL InitMALib();
  497.     
  498.     // Add by Freeway Chen in 2003.5.30
  499.     BOOL InitMAIT();
  500. };
  501. #endif // #ifndef KBasPropTblH