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

模拟服务器

开发平台:

C/C++

  1. #ifndef KNpcH
  2. #define KNpcH
  3. //---------------------------------------------------------------------------
  4. class ISkill;
  5. #include "KCore.h"
  6. #include "KSkillList.h"
  7. #include "KMagicAttrib.h"
  8. #include "GameDataDef.h"
  9. #include "KNpcFindPath.h"
  10. #include "KNpcDeathCalcExp.h"
  11. #include "KIndexNode.h"
  12. #include "KNpcGold.h"
  13. class KSkill;
  14. #ifndef _SERVER
  15. #include "KNpcRes.h"
  16. #endif
  17. //---------------------------------------------------------------------------
  18. #ifdef _SERVER
  19. #define MAX_NPC 16384
  20. #else
  21. #define MAX_NPC 256
  22. #endif
  23. #define MAX_NPCSTYLE 2000
  24. #define MAX_AI_PARAM 11
  25. #define MAX_NPC_USE_SKILL 4
  26. // 跑动速度与行走速度的倍数
  27. //#define WALK_RUN_TIMES 3
  28. #define STATE_FREEZE 0x01
  29. #define STATE_POISON 0x02
  30. #define STATE_CONFUSE 0x04
  31. #define STATE_STUN 0x08
  32. enum NPCATTRIB
  33. {
  34. attrib_mana,
  35. attrib_stamina,
  36. attrib_life,
  37. attrib_maxmana,
  38. attrib_maxstamina,
  39. attrib_maxlife,
  40. };
  41. enum NPCCMD
  42. {
  43. do_none, // 什么也不干
  44. do_stand, // 站立
  45. do_walk, // 行走
  46. do_run, // 跑动
  47. do_jump, // 跳跃
  48. do_skill, // 发技能的命令
  49. do_magic, // 施法
  50. do_attack, // 攻击
  51. do_sit, // 打坐
  52. do_hurt, // 受伤
  53. do_death, // 死亡
  54. do_defense, // 格挡
  55. do_idle, // 喘气
  56. do_specialskill,// 技能控制动作
  57. do_special1, // 特殊1
  58. do_special2, // 特殊2
  59. do_special3, // 特殊3
  60. do_special4, // 特殊4
  61. do_runattack,
  62. do_manyattack,
  63. do_jumpattack,
  64. do_revive,
  65. };
  66. enum CLIENTACTION
  67. {
  68. cdo_fightstand,
  69. cdo_stand,
  70. cdo_stand1,
  71. cdo_fightwalk,
  72. cdo_walk,
  73. cdo_fightrun,
  74. cdo_run,
  75. cdo_hurt,
  76. cdo_death,
  77. cdo_attack,
  78. cdo_attack1,
  79. cdo_magic,
  80. cdo_sit,
  81. cdo_jump,
  82. cdo_none,   
  83. cdo_count,
  84. };
  85. enum DAMAGE_TYPE
  86. {
  87. damage_physics = 0, // 物理伤害
  88. damage_fire, // 火焰伤害
  89. damage_cold, // 冰冻伤害
  90. damage_light, // 闪电伤害
  91. damage_poison, // 毒素伤害
  92. damage_magic, // 无属性伤害
  93. damage_num, // 伤害类型数目
  94. };
  95. // DoDeath 时的参数,对应不同的死亡惩罚
  96. enum enumDEATH_MODE
  97. {
  98. enumDEATH_MODE_NPC_KILL = 0, // 被npc杀死
  99. enumDEATH_MODE_PLAYER_NO_PUNISH, // 切磋模式被玩家杀死
  100. enumDEATH_MODE_PLAYER_PUNISH, // 被玩家PK致死,根据PK值进行惩罚
  101. enumDEATH_MODE_PKBATTLE_PUNISH, // 类式于国战时的惩罚处理
  102. enumDEATH_MODE_NUM,
  103. };
  104. typedef struct
  105. {
  106. NPCCMD CmdKind; // 命令C
  107. int Param_X; // 参数X
  108. int Param_Y; // 参数Y
  109. int Param_Z; // 参数Y
  110. } NPC_COMMAND;
  111. typedef struct
  112. {
  113. int nTotalFrame;
  114. int nCurrentFrame;
  115. } DOING_FRAME;
  116. struct KState
  117. {
  118. int nMagicAttrib;
  119. int nValue[2];
  120. int nTime;
  121. };
  122. struct KSyncPos
  123. {
  124. DWORD m_dwRegionID;
  125. int m_nMapX;
  126. int m_nMapY;
  127. int m_nOffX;
  128. int m_nOffY;
  129. int m_nDoing;
  130. };
  131. class KStateNode : public KNode
  132. {
  133. public:
  134. int m_SkillID; // 技能ID
  135. int m_Level; // 技能等级
  136. int m_LeftTime; // 剩余时间
  137. KMagicAttrib m_State[MAX_SKILL_STATE]; // 修改属性列表
  138. int m_StateGraphics; // 状态动画索引
  139. };
  140. #ifndef _SERVER
  141. /*--- 用于标明客户端npc是哪个region的第几个npc ,
  142. 如果这是一个服务器控制的npc ,ID 值为 0 ,No 值为 -1  ---*/
  143. struct KClientNpcID
  144. {
  145. DWORD m_dwRegionID;
  146. int m_nNo;
  147. };
  148. #endif
  149. #ifdef _SERVER
  150. struct KItemDropRate
  151. {
  152. struct KItemParam
  153. {
  154. int nGenre;
  155. int nDetailType;
  156. int nParticulType;
  157. int nRate;
  158. };
  159. int nCount;
  160. int nMagicRate;
  161. int nMaxRandRate;
  162. int nMoneyRate;
  163. int nMoneyScale;
  164. int nMinItemLevelScale;
  165. int nMaxItemLevelScale;
  166. int nMinItemLevel;
  167. int nMaxItemLevel;
  168. KItemParam* pItemParam;
  169. };
  170. #endif
  171. class KNpc
  172. {
  173. friend class KNpcSet;
  174. public:
  175. DWORD m_dwID; // Npc的ID
  176. int m_Index; // Npc的索引
  177. KIndexNode m_Node; // Npc's Node
  178. int m_Level; // Npc的等级
  179. DWORD m_Kind; // Npc的类型
  180. int m_Series; // Npc的系
  181. int m_Height; // Npc的高度(跳跃的时候非零)
  182. BYTE m_btRankId;
  183. int m_nStature; //Tall 
  184. BYTE m_btStateInfo[MAX_NPC_RECORDER_STATE]; // Npc当前最新的几个状态 
  185. int m_nNextStatePos; // 下一次状态在m_btState的位置
  186. // DWORD m_NpcEnchant; // Npc的加强类型(黄金怪物)
  187. KNpcGold m_cGold;
  188. //用于Npc模板库中,当FALSE表示该Npc数据当前是无效的 ,数值未经过脚本计算,需要生成.
  189. //TRUE表示有效数据
  190. BOOL m_bHaveLoadedFromTemplate;// 
  191. KState m_PowerState; // 怒火状态
  192. KState m_PoisonState; // 中毒状态
  193. KState m_FreezeState; // 冰冻状态
  194. KState m_BurnState; // 燃烧状态
  195. KState m_ConfuseState; // 混乱状态
  196. KState m_StunState; // 眩晕状态
  197. KState m_LifeState; // 补血状态
  198. KState m_ManaState; // 补MANA状态
  199. KState m_MenuState; // 菜单
  200. KState m_DrunkState; // 醉酒状态
  201. KState m_PhysicsArmor;
  202. KState m_ColdArmor;
  203. KState m_LightArmor;
  204. KState m_PoisonArmor;
  205. KState m_FireArmor;
  206. KState m_ManaShield;
  207. KList m_StateSkillList; // 附加状态技能列表(同技能不叠加)
  208. int m_Camp; // Npc的阵营
  209. int m_CurrentCamp; // Npc的当前阵营
  210. NPCCMD m_Doing; // Npc的行为
  211. CLIENTACTION m_ClientDoing; // Npc的客户端行为
  212. DOING_FRAME m_Frames; // Npc的行为帧数
  213. KSkillList m_SkillList; // Npc的技能列表
  214. int m_SubWorldIndex; // Npc所在的SubWorld ID
  215. int m_RegionIndex; // Npc所在的Region ID
  216. int m_ActiveSkillID; // Npc激活的技能ID
  217. int m_ActiveAuraID; // Npc激活的光环技能ID
  218. // Npc的实际数据(已经经过装备及技能的运算了)
  219. int m_CurrentExperience; // Npc被杀后送出的经验
  220. int m_CurrentLife; // Npc的当前生命
  221. int m_CurrentLifeMax; // Npc的当前生命最大值
  222. int m_CurrentLifeReplenish; // Npc的当前生命回复速度
  223. int m_CurrentMana; // Npc的当前内力
  224. int m_CurrentManaMax; // Npc的当前最大内力
  225. int m_CurrentManaReplenish; // Npc的当前内力回复速度
  226. int m_CurrentStamina; // Npc的当前体力
  227. int m_CurrentStaminaMax; // Npc的当前最大体力
  228. int m_CurrentStaminaGain; // Npc的当前体力回复速度
  229. int m_CurrentStaminaLoss; // Npc的当前体力下降速度
  230. KMagicAttrib m_PhysicsDamage; // Npc的当前伤害(由力量敏捷与武器伤害决定,不考虑直接加伤害的魔法属性)
  231. KMagicAttrib m_CurrentFireDamage; // Npc的当前火伤害
  232. KMagicAttrib m_CurrentColdDamage; // Npc的当前冰伤害
  233. KMagicAttrib m_CurrentLightDamage; // Npc的当前电伤害
  234. KMagicAttrib m_CurrentPoisonDamage; // Npc的当前毒伤害
  235. int m_CurrentAttackRating; // Npc的当前命中率
  236. int m_CurrentDefend; // Npc的当前防御
  237. int m_CurrentFireResist; // Npc的当前火抗性
  238. int m_CurrentColdResist; // Npc的当前冰抗性
  239. int m_CurrentPoisonResist; // Npc的当前毒抗性
  240. int m_CurrentLightResist; // Npc的当前电抗性
  241. int m_CurrentPhysicsResist; // Npc的当前物理抗性
  242. int m_CurrentFireResistMax; // Npc的当前最大火抗性
  243. int m_CurrentColdResistMax; // Npc的当前最大冰抗性
  244. int m_CurrentPoisonResistMax; // Npc的当前最大毒抗性
  245. int m_CurrentLightResistMax; // Npc的当前最大电抗性
  246. int m_CurrentPhysicsResistMax; // Npc的当前最大物理抗性
  247. int m_CurrentWalkSpeed; // Npc的当前走动速度
  248. int m_CurrentRunSpeed; // Npc的当前跑动速度
  249. int m_CurrentJumpSpeed; // Npc的当前跳跃速度
  250. int m_CurrentJumpFrame; // Npc的当前跳跃帧数
  251. int m_CurrentAttackSpeed; // Npc的当前攻击速度
  252. int m_CurrentCastSpeed; // Npc的当前施法速度
  253. int m_CurrentVisionRadius; // Npc的当前视野范围
  254. int m_CurrentAttackRadius; // Npc的当前攻击范围
  255. int m_CurrentActiveRadius; // Npc的当前活动范围
  256. int m_CurrentHitRecover; // Npc的当前受击回复速度
  257. int m_CurrentTreasure; // Npc丢落装备的数量
  258. // 以下数据只需要当前值,基础值均为0
  259. int m_CurrentMeleeDmgRetPercent; // Npc近程伤害返回的百分比
  260. int m_CurrentMeleeDmgRet; // Npc近程被击时返回的伤害点数
  261. int m_CurrentRangeDmgRetPercent; // Npc远程伤害返回的百分比
  262. int m_CurrentRangeDmgRet; // Npc远程被击时返回的伤害点数
  263. BOOL m_CurrentSlowMissle; // Npc是否在慢速子弹状态下
  264. int m_CurrentDamageReduce; // 物理伤害减少
  265. int m_CurrentElementDamageReduce; // 元素伤害减少
  266. int m_CurrentDamage2Mana; // 伤害转内力百分比
  267. int m_CurrentManaPerEnemy; // 杀一个敌人加多少点内力
  268. int m_CurrentLifeStolen; // 偷生命百分比
  269. int m_CurrentManaStolen; // 偷内力百分比
  270. int m_CurrentStaminaStolen; // 偷体力百分比
  271. int m_CurrentKnockBack; // 震退百分比
  272. int m_CurrentDeadlyStrike; // 致命一击百分比
  273. int m_CurrentBlindEnemy; // 致盲敌人百分比
  274. int m_CurrentPiercePercent; // 穿透攻击百分比
  275. int m_CurrentFreezeTimeReducePercent; // 冰冻时间减少百分比
  276. int m_CurrentPoisonTimeReducePercent; // 中毒时间减少百分比
  277. int m_CurrentStunTimeReducePercent; // 眩晕时间减少百分比
  278. int m_CurrentFireEnhance; // 火加强
  279. int m_CurrentColdEnhance; // 冰加强
  280. int m_CurrentPoisonEnhance; // 毒加强
  281. int m_CurrentLightEnhance; // 电加强
  282. int m_CurrentAddPhysicsDamage; // 直接的物理伤害加强点数
  283. int m_CurrentMeleeEnhance[MAX_MELEE_WEAPON]; // 近程物理加强
  284. int m_CurrentRangeEnhance; // 远程物理加强
  285. int m_CurrentHandEnhance; // 空手物理加强
  286. // 只需要当前值的数据结束
  287. int m_Dir; // Npc的方向
  288. int m_RedLum; // Npc的亮度
  289. int m_GreenLum;
  290. int m_BlueLum;
  291. int m_MapX, m_MapY, m_MapZ; // Npc的地图坐标
  292. int m_OffX, m_OffY; // Npc在格子中的偏移坐标(放大了1024倍)
  293. int m_DesX, m_DesY; // Npc的目标坐标
  294. int m_SkillParam1, m_SkillParam2;
  295. int m_OriginX, m_OriginY; // Npc的原始坐标
  296. int m_NextAITime;
  297. BYTE m_AIMAXTime;//NpcAI
  298. // Npc的装备(决定客户端的换装备)
  299. int m_HelmType; // Npc的头盔类型
  300. int m_ArmorType; // Npc的盔甲类型
  301. int m_WeaponType; // Npc的武器类型
  302. int m_HorseType; // Npc的骑马类型
  303. BOOL m_bRideHorse; // Npc是否骑马
  304. char Name[32]; // Npc的名称
  305. int m_nSex; // Npc的性别0为男,1为女
  306. int m_NpcSettingIdx; // Npc的设定文件索引
  307. int m_CorpseSettingIdx; // Npc的尸体定义索引
  308. char ActionScript[80]; // Npc的行为脚本
  309. DWORD m_ActionScriptID; // Npc的行为脚本ID(使用时用这个来检索)
  310. DWORD m_TrapScriptID; // Npc的当前Trap脚本ID;
  311. int m_nPeopleIdx; // 对象人物
  312. int m_nLastDamageIdx; // 最后一次伤害的人物索引
  313. int m_nLastPoisonDamageIdx; // 最后一次毒伤害的人物索引
  314. int m_nObjectIdx; // 对象物品
  315. // Npc的基本数据(未考虑装备、技能的影响)
  316. int m_Experience; // Npc被杀获得的经验
  317. int m_LifeMax; // Npc的最大生命
  318. int m_LifeReplenish; // Npc的生命回复速度
  319. int m_ManaMax; // Npc的最大内力
  320. int m_ManaReplenish; // Npc的内力回复速度
  321. int m_StaminaMax; // Npc的最大体力
  322. int m_StaminaGain; // Npc的体力回复速度
  323. int m_StaminaLoss; // Npc的体力下降速度
  324. int m_AttackRating; // Npc的命中率
  325. int m_Defend; // Npc的防御
  326. int m_FireResist; // Npc的火抗性
  327. int m_ColdResist; // Npc的冷抗性
  328. int m_PoisonResist; // Npc的毒抗性
  329. int m_LightResist; // Npc的电抗性
  330. int m_PhysicsResist; // Npc的物理抗性
  331. int m_FireResistMax; // Npc的最大火抗性
  332. int m_ColdResistMax; // Npc的最大冰抗性
  333. int m_PoisonResistMax; // Npc的最大毒抗性
  334. int m_LightResistMax; // Npc的最大电抗性
  335. int m_PhysicsResistMax; // Npc的最大物理抗性
  336. int m_WalkSpeed; // Npc的行走速度
  337. int m_RunSpeed; // Npc的跑动速度
  338. int m_JumpSpeed; // Npc的跳跃速度
  339. int m_AttackSpeed; // Npc的攻击速度
  340. int m_CastSpeed; // Npc的施法速度
  341. int m_VisionRadius; // Npc的视野范围
  342. int m_DialogRadius; // Npc的对话范围
  343. int m_ActiveRadius; // Npc的活动范围
  344. int m_HitRecover; // Npc的受击回复速度
  345. int m_Treasure; // Npc丢落装备的数量
  346. BOOL m_bClientOnly; // 
  347. int m_nCurrentMeleeSkill; // Npc当前正执行的格斗技能
  348. int m_nCurrentMeleeTime;
  349. // AI参数
  350. int m_AiMode; // AI模式
  351. int m_AiParam[MAX_AI_PARAM];// 用于AI模块计算AI
  352. int m_AiAddLifeTime;
  353. int m_HeadImage;
  354. int m_FightMode; // 客户端处理动作用。
  355. int m_OldFightMode;
  356. BOOL m_bExchangeServer;
  357. #ifdef _SERVER
  358. int m_AiSkillRadiusLoadFlag;// 战斗npc技能范围是否已经初始化 只需要在构造的时候初始化一次
  359. KNpcDeathCalcExp m_cDeathCalcExp; // 战斗npc死亡后送出经验给不同的player
  360. KItemDropRate* m_pDropRate;
  361. int m_nCurPKPunishState; // PK死亡时的惩罚性质,用于国战
  362. #endif
  363. #ifndef _SERVER
  364. int m_SyncSignal; // 同步信号
  365. KClientNpcID m_sClientNpcID; // 用于标明客户端npc是哪个region的第几个npc
  366. DWORD m_dwRegionID; // 本npc所在region的id
  367. KSyncPos m_sSyncPos;
  368. int m_nPKFlag;
  369. char m_szChatBuffer[MAX_SENTENCE_LENGTH];
  370. int m_nChatContentLen;
  371. int m_nChatNumLine;
  372. int m_nChatFontWidth;
  373. unsigned int m_nCurChatTime;
  374. int m_nSleepFlag;
  375. int m_nHurtHeight;
  376. int m_nHurtDesX;
  377. int m_nHurtDesY;
  378. int m_nTongFlag; // 是否有招人图标
  379. #endif
  380. private:
  381. int m_LoopFrames; // 循环帧数
  382. int m_nPlayerIdx;
  383. int m_DeathFrame; // 死亡帧数
  384. int m_StandFrame;
  385. int m_HurtFrame;
  386. int m_AttackFrame;
  387. int m_CastFrame;
  388. int m_WalkFrame;
  389. int m_RunFrame;
  390. int m_StandFrame1;
  391. int m_ReviveFrame; // 重生帧数
  392. int m_SitFrame;
  393. int m_JumpFrame;
  394. int m_JumpFirstSpeed;
  395. NPC_COMMAND m_Command; // 命令结构
  396. BOOL m_ProcessAI; // 处理AI标志
  397. BOOL m_ProcessState; // 处理状态标志
  398. int m_XFactor;
  399. int m_YFactor;
  400. int m_JumpStep;
  401. int m_JumpDir;
  402. int m_SpecialSkillStep; // 特殊技能步骤
  403. NPC_COMMAND m_SpecialSkillCommand; // 特殊技能行为命令
  404. KNpcFindPath m_PathFinder;
  405. BOOL m_bActivateFlag;
  406. #ifndef _SERVER
  407. int m_ResDir;
  408. KNpcRes m_DataRes; // Npc的客户端资源(图象、声音)
  409. // 用于普通战斗npc冒血处理
  410. int m_nBloodNo;
  411. int m_nBloodAlpha;
  412. int m_nBloodTime;
  413. char m_szBloodNo[32];
  414. #endif
  415. private:
  416. BOOL WaitForFrame();
  417. BOOL IsReachFrame(int nPercent);
  418. void DoStand();
  419. void OnStand();
  420. void DoRevive();
  421. void OnRevive();
  422. void DoWait();
  423. void OnWait();
  424. void DoWalk();
  425. void OnWalk();
  426. void DoRun();
  427. void OnRun();
  428. void DoSkill(int nX, int nY);
  429. int DoOrdinSkill(KSkill * pSkill, int nX, int nY);
  430. void OnSkill();
  431. void DoAttack();
  432. void DoMagic();
  433. void DoJump();
  434. BOOL OnJump();
  435. void DoSit();
  436. void OnSit();
  437. void DoHurt(int nHurtFrames = 0, int nX = 0, int nY =0);
  438. void OnHurt();
  439. // mode == 0 npc 导致 == 1 player 导致,不掉东西 == 2 player 导致,掉东西
  440. // 与 DeathPunish 的参数对应 具体参阅 enumDEATH_MODE
  441. void DoDeath(int nMode = 0);
  442. void OnDeath();
  443. void DoDefense();
  444. void OnDefense();
  445. void DoIdle();
  446. void OnIdle();
  447. // 有关格斗技能的------------------------------------------
  448. BOOL DoManyAttack();
  449. void OnManyAttack();
  450. BOOL DoBlurAttack();
  451. BOOL DoJumpAttack();
  452. BOOL OnJumpAttack();
  453. BOOL DoRunAttack();
  454. void OnRunAttack();
  455. BOOL CastMeleeSkill(KSkill * pSkill);
  456. //-----------------------------------------------------------
  457. void OnPlayerTalk();
  458. void DoSpecial1();
  459. void OnSpecial1();
  460. void DoSpecial2();
  461. void OnSpecial2();
  462. void DoSpecial3();
  463. void OnSpecial3();
  464. void DoSpecial4();
  465. void OnSpecial4();
  466. void Goto(int nMpsX, int nMpsY);
  467. void RunTo(int nMpsX, int nMpsY);
  468. void JumpTo(int nMpsX, int nMpsY);
  469. void ServeMove(int nSpeed);
  470. void ServeJump(int nSpeed);
  471. // void Enchant(void);
  472. // void ModifyEnchant(void* pData, int nAttrib);
  473. BOOL NewPath(int nMpsX, int nMpsY);
  474. BOOL NewJump(int nMpsX, int nMpsY);
  475. BOOL CheckHitTarget(int nAR, int nDf, int nIngore = 0);
  476. #ifdef _SERVER
  477. void LoseSingleItem(int nBelongPlayer);
  478. void LoseMoney(int nBelongPlayer);
  479. void PlayerDeadCreateMoneyObj(int nMoneyNum); // 玩家死的时候掉出来的钱生成一个object
  480. void UpdateNpcStateInfo(); //重新更新角色的状态信息
  481. #endif
  482. #ifndef _SERVER
  483. void HurtAutoMove();
  484. #endif
  485. public:
  486. friend class KNpcAttribModify;
  487. friend class KThiefSkill;
  488. KNpc();
  489. void SetActiveFlag(BOOL bFlag) { m_bActivateFlag = bFlag; };
  490. void DoPlayerTalk(char *);
  491. void CheckTrap();
  492. void Init();
  493. void Remove();
  494. void Activate();
  495. BOOL IsPlayer();
  496. void SetFightMode(BOOL bFightMode);
  497. void TurnTo(int nIdx);
  498. void SendCommand(NPCCMD cmd, int x = 0, int y = 0, int z = 0);
  499. void ProcCommand(int nAI);
  500. ISkill*  GetActiveSkill();
  501. BOOL ProcessState();
  502. void ProcStatus();
  503. void ModifyAttrib(int nAttacker, void* pData);
  504. int GetSkillLevel(int nSkillId);
  505. void SetId(DWORD dwID) { m_dwID = dwID;};
  506. BOOL IsMatch(DWORD dwID) { return dwID == m_dwID; }; // 是否ID与该Index匹配
  507. BOOL Cost(NPCATTRIB nType, int nCost, BOOL bOnlyCheckCanCast = FALSE); // 消耗内力体力等,如果OnlyCheckCanCost为TRUE,表示只是检查当前的内力等是否够消耗,并不实际的扣
  508. void SelfDamage(int nDamage); // 自身的伤害,如牺牲攻击
  509. void Load(int nNpcSettingIdx, int nLevel); // 从TabFile中加载
  510. void GetMpsPos(int * pPosX, int *pPosY);
  511. BOOL SetActiveSkill(int nSkillIdx);
  512. void SetAuraSkill(int nSkillID);
  513. void SetCamp(int nCamp);
  514. void SetCurrentCamp(int nCamp);
  515. void RestoreCurrentCamp();
  516. void SetStateSkillEffect(int nLauncher, int nSkillID, int nLevel, void *pData, int nDataNum, int nTime = -1); // 主动辅助技能与被动技能
  517. void ClearStateSkillEffect();
  518. void ReCalcStateEffect();
  519. void ClearNormalState();
  520. void SetImmediatelySkillEffect(int nLauncher, void *pData, int nDataNum);
  521. void AppendSkillEffect(BOOL bIsPhysical, BOOL bIsMelee, void *pSrcData, void *pDesData);
  522. int ModifyMissleLifeTime(int nLifeTime);
  523. int ModifyMissleSpeed(int nSpeed);
  524. BOOL ModifyMissleCollsion(BOOL bCollsion);
  525. void RestoreNpcBaseInfo(); //Set Current_Data ;
  526. void RestoreState();
  527. void ClearNpcState();
  528. BOOL SetPlayerIdx(int nIdx);
  529. void DialogNpc(int nIndex);
  530. void Revive();
  531. void AddBaseLifeMax(int nLife); // 增加基本最大生命点
  532. void AddCurLifeMax(int nLife);
  533. void AddBaseStaminaMax(int nStamina);// 增加基本最大体力点
  534. void AddCurStaminaMax(int nStamina);
  535. void AddBaseManaMax(int nMana); // 增加基本最大内力点
  536. void AddCurManaMax(int nMana);
  537. // void ResetLifeReplenish(); // 重新计算生命回复速度
  538. // void CalcCurLifeMax(); // 计算当前最大生命点
  539. // void CalcCurStaminaMax(); // 计算当前最大体力点
  540. // void CalcCurManaMax(); // 计算当前最大内力点
  541. void CalcCurLifeReplenish(); // 计算当前生命回复速度
  542. void SetSeries(int nSeries);// 设定此 npc 的五行属性(内容还没完成)
  543. // int GetNpcLevelDataFromScript(KLuaScript * pScript, char * szDataName, int nLevel, char * szParam);
  544. // int SkillString2Id(char * szSkillString);
  545. void GetNpcCopyFromTemplate(int nNpcTemplateId, int nLevel);
  546. // void InitNpcLevelData(KTabFile * pTabFile, int nNpcTemplateId, KLuaScript * pLevelScript, int nLevel);
  547. // void InitNpcBaseData(int nNpcTemplateId);
  548. void SetPhysicsDamage(int nMinDamage, int nMaxDamage); // 设定物理攻击的最大最小值
  549. void SetBaseAttackRating(int nAttackRating); // 设定攻击命中率
  550. void SetBaseDefence(int nDefence); // 设定防御力
  551. // void SetBaseWalkSpeed(int nSpeed); // 设定行走速度
  552. // void SetBaseRunSpeed(int nSpeed); // 设定跑步速度
  553. int GetCurActiveWeaponSkill();
  554. void LoadDataFromTemplate(int nNpcTemplateId, int nLevel);
  555. #ifdef _SERVER
  556. void ExecuteRevive(){DoRevive();};
  557. BOOL SendSyncData(int nClient); // 向一个客户端发完整同步数据
  558. void NormalSync(); // 广播小同步
  559. void BroadCastState(); // 广播角色的状态信息,光环,头带等等效果
  560. void BroadCastRevive(int nType);
  561. int GetPlayerIdx();
  562. void CalcDamage(int nAttacker, int nMin, int nMax, DAMAGE_TYPE nType, BOOL bIsMelee, BOOL bDoHurt = TRUE, BOOL bReturn = FALSE);
  563. BOOL ReceiveDamage(int nLauncher, BOOL bIsMelee, void *pData, BOOL bUseAR, BOOL bDoHurt);
  564. // mode == 0 npc 导致 == 1 player 导致,不掉东西 == 2 player 导致,掉东西
  565. // 与 DoDeath 的参数对应 具体参阅 enumDEATH_MODE
  566. void DeathPunish(int nMode, int nBelongPlayer);
  567. void RestoreLiveData(); // 重生后恢复Npc的基本数据
  568. int SetPos(int nX, int nY);
  569. int ChangeWorld(DWORD dwSubWorldID, int nX, int nY); // 切换世界
  570. void TobeExchangeServer(DWORD dwMapID, int nX, int nY);
  571. void RestoreLife(){m_CurrentLife = m_CurrentLifeMax; };
  572. void RestoreMana(){m_CurrentMana = m_CurrentManaMax;};
  573. void RestoreStamina(){m_CurrentStamina = m_CurrentStaminaMax; };
  574. void SendDataToNearRegion(void* pBuffer, DWORD dwSize);// 向周围九屏广播
  575. int DeathCalcPKValue(int nKiller); // 死亡时候计算PK值
  576. BOOL CheckPlayerAround(int nPlayerIdx);// 查找周围9个Region中是否有指定的 player
  577. #endif
  578. #ifndef _SERVER
  579. void SetSleepMode(BOOL bSleep) { m_nSleepFlag = bSleep; m_DataRes.SetSleepState(bSleep);};
  580. void SetNpcState(BYTE* pNpcState);
  581. void RemoveRes();
  582. void ProcNetCommand(NPCCMD cmd, int x = 0, int y = 0, int z = 0);
  583. void Paint();
  584. int PaintInfo(int nHeightOffset, bool bSelect, int nFontSize = 12, DWORD dwBorderColor = 0);
  585. int PaintChat(int nHeightOffset);
  586. int SetChatInfo(const char* Name, const char* pMsgBuff, unsigned short nMsgLength);
  587. int PaintLife(int nHeightOffset, bool bSelect);
  588. int PaintMana(int nHeightOffset);
  589. void DrawBorder();
  590. int DrawMenuState(int n);
  591. void DrawBlood(); //绘制血条和名字在固定位置
  592. BOOL IsCanInput() { return m_ProcessAI; };
  593. void SetMenuState(int nState, char *lpszSentence = NULL, int nLength = 0); // 设定头顶状态
  594. int GetMenuState(); // 获得头顶状态
  595. DWORD SearchAroundID(DWORD dwID); // 查找周围9个Region中是否有指定 ID 的 npc
  596. void SetSpecialSpr(char *lpszSprName);// 设定特殊的只播放一遍的随身spr文件
  597. void SetInstantSpr(int nNo);
  598. int GetNormalNpcStandDir(int nFrame);
  599. KNpcRes* GetNpcRes(){return &m_DataRes;};
  600. int GetNpcPate();
  601. int GetNpcPatePeopleInfo();
  602. // 冒血处理
  603. void ClearBlood();
  604. void SetBlood(int nNo);
  605. int PaintBlood(int nHeightOffset); //绘制冒血
  606. #endif
  607. };
  608. #ifndef TOOLVERSION
  609. extern KNpc Npc[MAX_NPC];
  610. #else
  611. extern CORE_API KNpc Npc[MAX_NPC];
  612. #endif
  613. #endif