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

模拟服务器

开发平台:

C/C++

  1. #ifndef KSkillListH
  2. #define KSkillListH
  3. //#include "Windows.h"
  4. #include "GameDataDef.h"
  5. #define MAX_NPCSKILL 80
  6. #define MAX_TRAPNUM 5
  7. typedef struct tagNpcSkill
  8. {
  9. int SkillId;
  10. int SkillLevel;
  11. int MaxTimes;
  12. int RemainTimes;
  13. DWORD NextCastTime; //下次可发送时的最小时间
  14. int CurrentSkillLevel;
  15. } NPCSKILL, *LPNPCSKILL;
  16. struct TDBPlayerData;
  17. #ifndef TOOLVERSION
  18. class KSkillList
  19. #else 
  20. class CORE_API KSkillList
  21. #endif
  22. {
  23. public:
  24. int m_nTrapNpcID[5];
  25. NPCSKILL m_Skills[MAX_NPCSKILL];//下标从1开始,0为无效index
  26. int m_nNpcIndex;
  27. public:
  28. KSkillList();
  29. ~KSkillList();
  30. int Add(int nSkillID, int nLevel = 1, int nMaxTimes = 0, int RemainTimes = 0);
  31. void Remove(int nSkillID)
  32. {
  33. if (nSkillID <= 0 || nSkillID >= MAX_SKILL) 
  34. return ;
  35. int i = FindSame(nSkillID);
  36. if (i)
  37. {
  38. m_Skills[i].CurrentSkillLevel = 0;
  39. m_Skills[i].SkillId = 0;
  40. m_Skills[i].SkillLevel = 0;
  41. }
  42. };//Question :需要加!
  43. int GetSkillId(unsigned long ulSkillIdx) const
  44. {
  45. if (ulSkillIdx >= MAX_NPCSKILL || ulSkillIdx == 0) 
  46. return 0;
  47. else 
  48. return m_Skills[ulSkillIdx].SkillId;
  49. };
  50. int SetSkillLevelDirectlyUsingIndex(unsigned long ulSkillIdx, unsigned long ulLevel)/*请慎用该函数,因为目前未加任何被动技能降级对数值的影响*/
  51. {
  52. if (ulSkillIdx >= MAX_NPCSKILL ||  ulSkillIdx == 0 || ulLevel >= MAX_SKILLLEVEL)
  53. return 0;
  54. if (m_Skills[ulSkillIdx].SkillId)
  55. {
  56. m_Skills[ulSkillIdx].SkillLevel = ulLevel;
  57. m_Skills[ulSkillIdx].CurrentSkillLevel = ulLevel;
  58. return 1;
  59. }
  60. return 0;
  61. }
  62. int SetSkillLevelDirectlyUsingId(unsigned long ulSkillId, unsigned long ulLevel)/*请慎用该函数,因为目前未加任何被动技能降级对数值的影响*/
  63. {
  64. if (ulSkillId >= MAX_SKILL || ulSkillId == 0 ||  ulLevel >= MAX_SKILLLEVEL)
  65. return 0;
  66. unsigned long  ulSkillIdx = FindSame(ulSkillId);
  67. if (ulSkillIdx)
  68. {
  69. if (m_Skills[ulSkillIdx].SkillId)
  70. {
  71. m_Skills[ulSkillIdx].SkillLevel = ulLevel;
  72. m_Skills[ulSkillIdx].CurrentSkillLevel = ulLevel;
  73. return 1;
  74. }
  75. }
  76. return 0;
  77. }
  78. void Clear(){memset(m_Skills, 0, sizeof(m_Skills));};
  79. #ifndef _SERVER
  80. void SetSkillLevel(int nId, int nLevel);
  81. BOOL SetLevel(int nIndex, int nLevel); // 把某个编号技能设为某一级
  82. int GetSkillSortList(KUiSkillData *); // 获得角色当前所有技能排序列表
  83. int GetSkillPosition(int nSkillId);
  84. int GetLeftSkillSortList(KUiSkillData*); // 获得角色当前左键技能排序列表
  85. int GetRightSkillSortList(KUiSkillData*); // 获得角色当前右键技能排序列表
  86. #endif
  87. BOOL IncreaseLevel(int nIdx, int nLvl);
  88. int GetLevel(int nSkillID);
  89. int GetSkillIdxLevel(int nIdx) 
  90. {
  91. if (nIdx <= 0) return 0;
  92. return m_Skills[nIdx].SkillLevel;
  93. };
  94. int GetCurrentLevel(int nSkillID);
  95. int GetCount();
  96. int FindSame(int nSkillID);
  97. int FindFree();
  98. BOOL CanCast(int nSkillID, DWORD dwTime);
  99. void SetNextCastTime(int nSkillID, DWORD dwTime);
  100. int GetSkillId(int nListIndex)
  101. {
  102. if (nListIndex < MAX_NPCSKILL && nListIndex > 0)
  103. return m_Skills[nListIndex].SkillId;
  104. else 
  105. return -1;
  106. };
  107. #ifdef _SERVER
  108. int UpdateDBSkillList(BYTE *);
  109. void SetNpcSkill(int nSkillNo, int nSkillId, int nSkillLevel);//sometime , npc's AI SkillList may have same skills.IT ONLY BE USED FOR NPC(NO PLAYER)
  110. void RemoveNpcSkill(int nSkillNo);
  111. int ClearSkillLevel(bool bClearPhysicalLevel);
  112. #endif
  113. };
  114. #endif