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

模拟服务器

开发平台:

C/C++

  1. #ifndef KItemListH
  2. #define KItemListH
  3. #include "KLinkArray.h"
  4. #include "KItem.h"
  5. #define MAX_ITEM_ACTIVE 2
  6. //#define EQUIPMENT_ROOM_WIDTH 6
  7. //#define EQUIPMENT_ROOM_HEIGHT 10
  8. //#define REPOSITORY_ROOM_WIDTH 6
  9. //#define REPOSITORY_ROOM_HEIGHT 10
  10. //#define TRADE_ROOM_WIDTH 6
  11. //#define TRADE_ROOM_HEIGHT 10
  12. #define REQUEST_EQUIP_ITEM 1
  13. #define REQUEST_EAT_MEDICINE 2
  14. typedef struct
  15. {
  16. int nPlace;
  17. int nX;
  18. int nY;
  19. } ItemPos;
  20. class CORE_API KItemList
  21. {
  22. private:
  23. int m_PlayerIdx;
  24. int m_Hand;
  25. int m_nBackHand;
  26. int m_EquipItem[itempart_num]; // 玩家装备的道具(对应游戏世界中道具数组的索引)
  27. PlayerItem m_Items[MAX_PLAYER_ITEM]; // 玩家拥有的所有道具(包括装备着的和箱子里放的,对应游戏世界中道具数组的索引)
  28. PlayerItem m_sBackItems[MAX_PLAYER_ITEM]; // 交易过程中 m_Items 的备份
  29. static int ms_ActiveEquip[itempart_num][MAX_ITEM_ACTIVE]; // 某个部分的装备所激活的装备
  30. static int ms_ActivedEquip[itempart_num][MAX_ITEM_ACTIVE]; // 某个部分的装备被什么装备激活
  31. KLinkArray m_FreeIdx;
  32. KLinkArray m_UseIdx;
  33. int m_nListCurIdx; // 用于 GetFirstItem 和 GetNextItem
  34. #ifndef _SERVER
  35. BOOL m_bLockOperation;
  36. #endif
  37. public:
  38. KInventory m_Room[room_num];
  39. private:
  40. int FindFree();
  41. int FindSame(int nGameIdx); // nGameIdx指游戏世界中道具数组的编号
  42. int GetEquipPlace(int nType); // 取得某类型装备应该放的位置
  43. BOOL Fit(int nIdx, int nPlace); // 检查是否可以装备上
  44. BOOL Fit(KItem* pItem, int nPlace);
  45. int GetEquipEnhance(int nPlace); // 取得装备的激活属性数量
  46. int GetActiveEquipPlace(int nPlace, int nCount); // 取得nPlace的装备激活的第nCount个装备位置
  47. void InfectionNextEquip(int nPlace, BOOL bEquip = FALSE);
  48. // 在room_equipment中查找指定Genre和DetailType的物品,得到ItemIdx和位置
  49. BOOL FindSameDetailTypeInEquipment(int nGenre, int nDetail, int *pnIdx, int *pnX, int *pnY);
  50. friend class KPlayer;
  51. public:
  52. KItemList();
  53. ~KItemList();
  54. int Init(int nIdx);
  55. int GetEquipment(int nIdx) { return m_EquipItem[nIdx]; }
  56. int GetActiveAttribNum(int nIdx); // nIdx指游戏世界中道具数组的编号
  57. int GetWeaponType(); // 取得武器的类型,近程武器(equip_meleeweapon)还是远程武器(equip_rangeweapon)
  58. int GetWeaponParticular(); // 取得武器的具体类型,用于计算不同的伤害加强
  59. void GetWeaponDamage(int* nMin, int* nMax); // 取得武器的伤害
  60. int Add(int nIdx, int nPlace, int nX, int nY); // nIdx指游戏世界中道具数组的编号
  61. BOOL Remove(int nIdx); // nIdx指游戏世界中道具数组的编号
  62. void RemoveAll();
  63. BOOL CanEquip(int nIdx, int nPlace = -1); // nIdx指游戏世界中道具数组的编号
  64. BOOL CanEquip(KItem* pItem, int nPlace = -1);
  65. BOOL EnoughAttrib(void* pData);
  66. BOOL Equip(int nIdx, int nPlace = -1); // nIdx指游戏世界中道具数组的编号
  67. BOOL UnEquip(int nIdx, int nPlace = -1); // nIdx指游戏世界中道具数组的编号
  68. BOOL EatMecidine(int nIdx); // nIdx指游戏世界中道具数组的编号
  69. PlayerItem* GetFirstItem();
  70. PlayerItem* GetNextItem();
  71. int SearchID(int nID);
  72. void ExchangeMoney(int nSrcRoom, int DesRoom, int nMoney);
  73. void ExchangeItem(ItemPos* SrcPos,ItemPos* DesPos);
  74. int GetMoneyAmount(); // 得到物品栏和储物箱的总钱数
  75. int GetEquipmentMoney(); // 得到物品栏和储物箱的钱数
  76. BOOL AddMoney(int nRoom, int nMoney);
  77. BOOL CostMoney(int nMoney);
  78. BOOL DecMoney(int nMoney);
  79. void SetMoney(int nMoney1, int nMoney2, int nMoney3);
  80. void SetRoomMoney(int nRoom, int nMoney);
  81. int GetMoney(int nRoom) { return m_Room[nRoom].GetMoney(); } // 取得空间的钱
  82. void SetPlayerIdx(int nIdx); // 设定玩家索引
  83. int Hand() { return m_Hand; };
  84. void ClearRoom(int nRoom);
  85. void BackupTrade();
  86. void RecoverTrade();
  87. void StartTrade();
  88. #ifdef _SERVER
  89. void Abrade(int nType);
  90. void TradeMoveMoney(int nMoney); // 调用此接口必须保证传入的nMoney是一个有效数(正数且不超过所有钱数)
  91. void SendMoneySync(); // 服务器发money同步信息给客户端
  92. BOOL IsTaskItemExist(int nDetailType);
  93. int GetTaskItemNum(int nDetailType);
  94. BOOL RemoveTaskItem(int nDetailType);
  95. void GetTradeRoomItemInfo(); // 交易中把 trade room 中的 item 的 idx width height 信息写入 itemset 中的 m_psItemInfo 中去
  96. BOOL TradeCheckCanPlace(); // 交易中判断买进的物品能不能完全放进自己的物品栏
  97. BOOL CheckCanPlaceInEquipment(int nWidth, int nHeight, int *pnX, int *pnY);// 判断一定长宽的物品能否放进物品栏
  98. BOOL EatMecidine(int nPlace, int nX, int nY); // 吃什么地方的药
  99. // 自动把一个药品从room_equipment移动到room_immediacy
  100. BOOL AutoMoveMedicine(int nItemIdx, int nSrcX, int nSrcY, int nDestX, int nDestY);
  101. // 丢失随身物品
  102. void AutoLoseItemFromEquipmentRoom(int nRate);
  103. // 丢失一个穿在身上的装备(马不会掉)
  104. void AutoLoseEquip();
  105. #endif
  106. #ifndef _SERVER
  107. int UseItem(int nIdx); // nIdx指游戏世界中道具数组的编号
  108. BOOL SearchPosition(int nWidth, int nHeight, ItemPos* pPos);
  109. BOOL AutoMoveItem(ItemPos SrcPos,ItemPos DesPos);
  110. void MenuSetMouseItem();
  111. void RemoveAllInOneRoom(int nRoom);
  112. void LockOperation(); // 锁定客户端对装备的操作
  113. void UnlockOperation();
  114. BOOL IsLockOperation() { return m_bLockOperation; };
  115. int GetSameDetailItemNum(int nImmediatePos);
  116. #endif
  117. };
  118. #endif