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

模拟服务器

开发平台:

C/C++

  1. // KSkills.h: interface for the KSkills class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #ifndef KSkillsH
  5. #define KSkillsH
  6. #include "KMissle.h"
  7. #include "KWorldMsg.h"
  8. #include "KNpc.h"
  9. #include "KNode.h"
  10. #include "KMissleMagicAttribsData.h"
  11. #include "Skill.h"
  12. #define MAX_MISSLE_DAMAGEATTRIB 8
  13. typedef  KSkill KFightSkill;
  14. class KMissle;
  15. class KSkill;
  16. //Skill[0]无用,每个skill的[0]无用!!注意!
  17. enum
  18. {
  19. Missle_StartEvent = 1,
  20. Missle_FlyEvent,
  21. Missle_CollideEvent,
  22. Missle_VanishEvent,
  23. };
  24. #ifdef TOOLVERSION
  25. class CORE_API KSkill  :public ISkill
  26. #else
  27. class KSkill :public ISkill
  28. #endif
  29. {
  30. private:
  31. public:
  32. unsigned long m_ulLevel;
  33. #ifdef _SERVER
  34. DWORD m_dwSkillLevelUpScriptID; //玩家点升级技能等级时触发的脚本ID
  35. DWORD m_dwSkillLevelDataScriptId; //该技能升级的变动数据对应脚本ID
  36. #endif
  37. #ifndef _SERVER
  38. char m_szSkillIcon[80];
  39. char m_szPreCastEffectFile[100];
  40. char m_szManPreCastSoundFile[100];
  41. char m_szFMPreCastSoundFile[100];
  42. eSkillLRInfo m_eLRSkillInfo; //0 表示左右键皆可,1表示只可以作右键技能,2表示左右键都不可作
  43. #endif
  44. unsigned short m_usReqLevel;// 技能需要的最小等级
  45. private:
  46. int m_nCharClass; // 属哪个系的
  47. eSKillStyle m_eSkillStyle; //  当前的技能类型
  48. int m_nSkillTime; // 该技能的作用时间
  49. BOOL m_bClientSend; //  该技能是否对服务器来说有效
  50. BOOL m_bHaveLoad; // 标识该技能是否已经加载,如果没有则加载先
  51. int m_nInteruptTypeWhenMove;//子弹的激活是否受发送者的移动而中止
  52. BOOL m_bHeelAtParent; // 当子弹实际激活时,位置根据父当前位置而确定,而不是由产生那刻parent位置决定
  53. //技能限制项
  54. CLIENTACTION m_nCharActionId; // 发这个技能时人物做什么动作
  55. int m_nWaitTime; // 该技能正常情况下真正产生的时间
  56. BOOL m_bIsAura; // 是否为光环技能
  57. BOOL m_bIsPassivity; // 是否为被动技能
  58. BOOL m_bIsMelee; // 是否为近身攻击,近身攻击时
  59. BOOL m_bUseAttackRate; // 是否考虑命中率
  60. BOOL m_bTargetOnly; // 只有选中目标的时候才能发出
  61. BOOL m_bTargetEnemy; // 技能的目标是否为敌人
  62. BOOL m_bTargetAlly; // 技能的目标是否为同伴
  63. BOOL m_bTargetObj; // 技能的目标是否为物件
  64. BOOL m_bTargetSelf; // 技能的目标是否可以为自已
  65. int m_eRelation;
  66. char m_szName[32]; // 技能名称
  67. DWORD m_nId; // 技能Id
  68. BOOL m_bBaseSkill; // 是否为最基本技能
  69. BOOL m_bByMissle; // 当由父技能产生时,是否是根据玩家为基点还是以当前的子弹为基点
  70. BOOL m_bIsPhysical; // 是否为物理技能
  71. int m_nCost; // 技能使用时所需要花费的内力、体力、精力、金钱的类型
  72. NPCATTRIB m_nSkillCostType; // 发该技能所需的内力、体力等的消耗
  73. int m_nMinTimePerCast; // 发该技能的最小间阁时间
  74. int m_nChildSkillNum; // 同时发射子技能的数量
  75. eMisslesForm m_eMisslesForm; // 多个子弹的起始格式
  76. int m_nValue1; // 附加整形数据1
  77. int m_nValue2; // 附加整形数据2
  78. int m_nEventSkillLevel;
  79. KMagicAttrib m_MissleAttribs[MAXSKILLLEVELSETTINGNUM];//生成子弹的相关数据。不同等级的技能,子弹的相关属性可以变化。
  80. int m_nMissleAttribsNum;
  81. KMagicAttrib m_DamageAttribs[MAX_MISSLE_DAMAGEATTRIB]; //应用到非状态相关的数据
  82. int m_nDamageAttribsNum;
  83. KMagicAttrib m_ImmediateAttribs[MAXSKILLLEVELSETTINGNUM];//非状态类数据,立即伤害,技能发的子弹打中对方就立即生效的伤害,不随技能等级变化而改变.
  84. int m_nImmediateAttribsNum;
  85. KMagicAttrib m_StateAttribs[MAXSKILLLEVELSETTINGNUM];     //应用到状态相关的数据
  86. int m_nStateAttribsNum; //个数,最大10
  87. eMissleFollowKind   m_eMissleFollowKind;
  88. int m_nFollowKindIndex;
  89. DWORD m_dwFollowKindID;
  90. int m_nChildSkillId; // 技能引发的子技能Id; //当该技能为基本技能时,这项无用
  91. int m_nChildSkillLevel;
  92. BOOL m_bFlyingEvent; // 是否需要在飞行过程消息发生是,调用相关回调函数
  93. BOOL m_bStartEvent; // 是否需要在技能第一次Active时,调用相关回调函数
  94. BOOL m_bCollideEvent; // 是否需要在子技能魔法碰撞时,调用相关回调函数
  95. BOOL m_bVanishedEvent; // 是否需要在子技能消亡时,调用相关的回调函数
  96. int m_nFlySkillId; // 整 个飞行的相关技能
  97. int m_nFlyEventTime; // 每多少帧回调FlyEvent;
  98. int m_nStartSkillId; // 技能刚刚才发出时所引发的事件时,所需要的相关技能id
  99. int m_nVanishedSkillId; // 技能发出的子弹结束时引发的技能Id;
  100. int m_nCollideSkillId; // 技能发出的子弹碰撞到物件引发的技能Id;
  101. BOOL m_bMustBeHit; // 是否为必中技能,即对其处理简单化以便降低服务器负荷
  102. eMisslesGenerateStyle m_eMisslesGenerateStyle;//同时生成的多个子弹,DoWait的时间顺序
  103. int m_nMisslesGenerateData; //相关数据
  104. int m_nMaxShadowNum; // 最大保留的残影量
  105. BOOL m_bNeedShadow;
  106. int m_nAttackRadius; // 射程
  107. int m_nStateSpecialId; //状态性魔法光环id号
  108. int m_nMaxTimes; //某些如陷阱魔法,最大同时出现多少个陷阱
  109. int m_nEquiptLimited; //发技能时对当前装备的限制
  110. int m_nHorseLimited; //骑马限制 0表示没任何限制
  111. //    1表示不能骑马
  112. //    2表示必须骑马
  113. BOOL m_bDoHurt;
  114. public:
  115. KSkill();
  116. virtual ~KSkill();
  117. //载入相对于g_OrdinSkillsSetting的列号
  118. //BOOL
  119. BOOL OnMissleEvent(unsigned short usEvent, KMissle * pMissle) const;
  120. BOOL IsTargetOnly()const{return m_bTargetOnly;};
  121. BOOL IsTargetEnemy()const{return m_bTargetEnemy;};
  122. BOOL IsTargetAlly()const{return m_bTargetAlly;};
  123. BOOL IsTargetObj()const{return m_bTargetObj;};
  124. BOOL IsNeedShadow()const{ return m_bNeedShadow;};
  125. int GetMaxTimes()const{  return m_nMaxTimes;};
  126. static int GetSkillIdFromName(char * szSkillName);
  127. unsigned short GetSkillReqLevel()const{ return m_usReqLevel;};
  128. #ifdef _SERVER
  129. unsigned long GetSkillLevelUpScriptId()const{return m_dwSkillLevelUpScriptID;};
  130. KMissleMagicAttribsData* CreateMissleMagicAttribsData(int nLauncher)const;
  131. #endif
  132. #ifndef _SERVER
  133. eSkillLRInfo GetSkillLRInfo() const{ return m_eLRSkillInfo; };
  134. const char * GetPreCastEffectFile() const{  return m_szPreCastEffectFile;};
  135. const char * GetPreCastSoundFile(BOOL bIsFeMale) const{ return bIsFeMale? m_szFMPreCastSoundFile: m_szManPreCastSoundFile;};
  136. #endif
  137. const char * GetSkillName(){return m_szName;};
  138. int GetSkillStyle(){ return m_eSkillStyle;};
  139. BOOL GetInfoFromTabFile(int nCol);
  140. BOOL GetInfoFromTabFile(KITabFile *pSkillsSettingFile, int nRow);
  141. BOOL Load(int nCol);
  142. BOOL Cast(int nLauncher,   int nParam1, int nParam2, int nWaitTime = 0, eSkillLauncherType eLauncherType = SKILL_SLT_Npc) const; //发出时调用
  143. int GetChildSkillNum(int nLevel)const;
  144. int GetAttackRadius() const{ return m_nAttackRadius;};
  145. int CalculateDamage()const;
  146. void LoadSkillLevelData(unsigned long  ulLevel , int nParam); //从技能升级文件中获得nLevel等级的属性变动,并设置
  147. friend class KMissle;
  148. int GetSkillCost(void *)const{return m_nCost;};
  149. NPCATTRIB GetSkillCostType()const{return m_nSkillCostType;};
  150. BOOL GetItemLimit(int)const;
  151. CLIENTACTION GetActionType()const{return m_nCharActionId;};
  152. int GetDelayPerCast()const{return m_nMinTimePerCast; };
  153. unsigned int GetMissleGenerateTime(int nNo) const ;
  154. int GetChildSkillNum() const {return m_nChildSkillNum;};
  155. int GetChildSkillId() const {return m_nChildSkillId;};
  156. int GetChildSkillLevel() const {return m_nChildSkillLevel;};
  157. int GetSkillId() {return m_nId;};
  158. void SetSkillId(int nId) {m_nId = nId;};
  159. void SetSkillLevel(unsigned long ulLevel){m_ulLevel = ulLevel;};
  160. BOOL IsAura() const { return m_bIsAura;};
  161. BOOL IsPhysical() const {return m_bIsPhysical;};
  162. int GetMeleeType() const { return m_eMisslesForm;};
  163. int GetStateSpecailId() const {return m_nStateSpecialId; };
  164. BOOL CanCastSkill  (int nLauncher, int &nParam1, int &nParam2)  const ;
  165. void PlayPreCastSound  (BOOL bIsFeMale , int nX, int nY) const ;
  166. KMagicAttrib* GetDamageAttribs()  { return m_DamageAttribs;};
  167. private:
  168. void Vanish(KMissle *) const;
  169. void FlyEvent(KMissle *)  const ;
  170. void Collidsion(KMissle *) const ;
  171. BOOL CastMissles(int nLauncher, int nParam1, int nParam2, int nWaitTime = 0 , eSkillLauncherType eLauncherType = SKILL_SLT_Npc) const ;
  172. BOOL CastInitiativeSkill(int nLauncher, int nParam1, int nParam2, int nWaitTime) const ;
  173. BOOL CastPassivitySkill(int nLauncher, int nParam1, int nParam2, int nWaitTime) const ;
  174. int CastWall (TOrdinSkillParam * pSkillParam, int nDir, int nRefPX, int nRefPY) const ;
  175. int CastLine (TOrdinSkillParam * pSkillParam, int nDir, int nRefPX, int nRefPY) const ;
  176. int CastSpread (TOrdinSkillParam * pSkillParam, int nDir, int nRefPX, int nRefPY) const ;
  177. int CastCircle (TOrdinSkillParam * pSkillParam, int nDir, int nRefPX, int nRefPY) const ;
  178. int CastZone (TOrdinSkillParam * pSkillParam, int nDir, int nRefPX, int nRefPY) const ;
  179. int CastExtractiveLineMissle (TOrdinSkillParam * pSkillParam, int nDir, int nSrcX,  int nSrcY, int nXOffset, int nYOffset, int nDesX, int nDesY) const ;
  180. int Param2PCoordinate (int nLauncher, int nParam1, int nParam2 , int *npPX, int *npPY, eSkillLauncherType eLauncherType = SKILL_SLT_Npc) const ;
  181. void CreateMissle(int nLauncher, int ChildSkillId,  int nMissleIndex) const ;
  182. BOOL ParseString2MagicAttrib(unsigned long ulLevel, char * szMagicAttribName, char * szValue) ;
  183. inline const char * MagicAttrib2String(int MagicAttrib) const ;
  184. #ifndef _SERVER
  185. public:
  186. void DrawSkillIcon(int x, int y, int Width, int Height);
  187. KRUImage m_RUIconImage;
  188. char m_szSkillDesc[300];//技能的描述
  189. static void GetDesc(unsigned long ulSkillId, unsigned long ulCurLevel, char * pszMsg, int nOwnerIndex,  bool bGetNextLevelDesc);
  190. void GetDescAboutLevel(char * pszMsg);
  191. #endif
  192. };
  193. #define MAX_MELEEWEAPON_PARTICULARTYPE_NUM 100
  194. #define MAX_RANGEWEAPON_PARTICULARTYPE_NUM 100
  195. extern int g_nMeleeWeaponSkill[MAX_MELEEWEAPON_PARTICULARTYPE_NUM];
  196. extern int g_nRangeWeaponSkill[MAX_RANGEWEAPON_PARTICULARTYPE_NUM];
  197. extern int g_nHandSkill;
  198. #endif