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

模拟服务器

开发平台:

C/C++

  1. #ifndef KNpcAIH
  2. #define KNpcAIH
  3. #include "KMath.h"
  4. class KNpcAI
  5. {
  6. public:
  7. int m_nIndex;
  8. BOOL m_bActivate;
  9. private:
  10. public:
  11. KNpcAI();
  12. void Activate(int nIndex);
  13. void Enable(){ m_bActivate = TRUE; }
  14. void Disable(){ m_bActivate = FALSE; }
  15. private:
  16. int GetNearestNpc(int nRelation);
  17. int GetNpcNumber(int nRelation);
  18. void ProcessPlayer();
  19. /* void ProcessAIType1();
  20. void ProcessAIType2();
  21. void ProcessAIType3();
  22. void ProcessAIType4();
  23. void ProcessAIType5();
  24. void ProcessAIType6();
  25. void ProcessAIType7();
  26. void ProcessAIType8();
  27. void ProcessAIType9();
  28. void ProcessAIType10();*/
  29. void ProcessAIType01(); // 普通主动类1
  30. void ProcessAIType02(); // 普通主动类2
  31. void ProcessAIType03(); // 普通主动类3
  32. void ProcessAIType04(); // 普通被动类1
  33. void ProcessAIType05(); // 普通被动类2
  34. void ProcessAIType06(); // 普通被动类3
  35. void TriggerObjectTrap();
  36. void TriggerMapTrap();
  37. void FollowAttack(int nIdx);
  38. BOOL InEyeshot(int nIdx);
  39. void CommonAction();
  40. BOOL KeepActiveRange();
  41. void KeepAttackRange(int nEnemy, int nRange);
  42. void Flee(int nIdx);
  43. #ifndef _SERVER
  44. void FollowPeople(int nIdx);
  45. void FollowObject(int nIdx);
  46. #endif
  47. friend class KNpc;
  48. #ifndef _SERVER
  49. // 装饰性质NPC运动函数系列 
  50. // flying add these on Jun.4.2003
  51. // 所有装饰性NPC运动处理入口,由Activate(int)内部调用
  52. int ProcessShowNpc();
  53. int   ShowNpcType11();
  54. int ShowNpcType12();
  55. int ShowNpcType13();
  56. int ShowNpcType14();
  57. int ShowNpcType15();
  58. int ShowNpcType16();
  59. int ShowNpcType17();
  60. int             GetNpcMoveOffset(int nDir, int nDistance, int *pnX, int *pnY);
  61. // 判断是否超出范围
  62. //BOOL KeepActiveShowRange();
  63. // 16/17 AiMode NPC的逃逸动作
  64. int DoShowFlee(int nIdx);
  65. // 判断是否这个帧内可以给该NPC下指令
  66. BOOL CanShowNpc();
  67. #endif
  68. // flying add the function to get nearest player.
  69. int IsPlayerCome();
  70. };
  71. #if !defined _SERVER
  72. inline int KNpcAI::GetNpcMoveOffset(int nDir, int nDistance, int *pnX, int *pnY)
  73. {
  74.     _ASSERT(pnX);
  75.     _ASSERT(pnY);
  76.     *pnX = -nDistance * g_DirSin(nDir, 64);
  77.     *pnY = -nDistance * g_DirCos(nDir, 64);
  78.     return true;
  79. }
  80. inline BOOL KNpcAI::CanShowNpc()
  81. {
  82. BOOL bResult = TRUE;
  83. if (Npc[m_nIndex].m_AiParam[5] < Npc[m_nIndex].m_AiParam[4])
  84. bResult = FALSE;
  85. Npc[m_nIndex].m_AiParam[5]++;
  86. return bResult;
  87. }
  88. #endif
  89. extern KNpcAI NpcAI;
  90. #endif