YLBattleUnit.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using NetData;
  5. /// <summary>
  6. /// 描述:言灵世界数据
  7. /// 作者:
  8. /// </summary>
  9. public class YLBattleUnit
  10. {
  11. public bool mIsHero = true;
  12. public GameHeroVo mHeroVo = null;
  13. public sm_hero mMonsterVo = null;
  14. /// <summary>
  15. /// 当前使用的技能
  16. /// </summary>
  17. private string _curUseSkill = "";
  18. /// <summary>
  19. /// 队长技ID
  20. /// </summary>
  21. /// <returns></returns>
  22. public string SkillLeader()
  23. {
  24. if (mIsHero)
  25. {
  26. return this.mHeroVo.mo.skill_leader;
  27. }
  28. else
  29. {
  30. return this.mMonsterVo.skill_leader;
  31. }
  32. }
  33. /// <summary>
  34. /// 必杀ID
  35. /// </summary>
  36. /// <returns></returns>
  37. public string GetSkillBisha()
  38. {
  39. if (mIsHero)
  40. {
  41. return this.mHeroVo.mo.skill_bisha;
  42. }
  43. else
  44. {
  45. return this.mMonsterVo.skill_bisha;
  46. }
  47. }
  48. /// <summary>
  49. /// 被动ID
  50. /// </summary>
  51. /// <returns></returns>
  52. public string GetSKillBeidong()
  53. {
  54. if (mIsHero)
  55. {
  56. return this.mHeroVo.mo.skill_beidong;
  57. }
  58. else
  59. {
  60. return this.mMonsterVo.skill_beidong;
  61. }
  62. }
  63. /// <summary>
  64. /// 普攻ID
  65. /// </summary>
  66. /// <param name="skillIndex">技能索引</param>
  67. /// <param name="subSkillIndex">子技能索引(连招)</param>
  68. /// <returns></returns>
  69. public string GetSKillNormal(int skillIndex = 1, int subSkillIndex = 1)
  70. {
  71. int tempSkillIndex = skillIndex - 1;
  72. int tempSubSkillIndex = subSkillIndex - 1;
  73. if (mIsHero)
  74. {
  75. if (tempSkillIndex >= 0 && tempSkillIndex < this.mHeroVo.mo.GetNormalSkills().Count)
  76. {
  77. string tempSkill = this.mHeroVo.mo.GetNormalSkills()[tempSkillIndex];
  78. if (tempSubSkillIndex >= 1)
  79. {
  80. sm_skill skill = sm_skill.GetMoByID(int.Parse(tempSkill));
  81. List<string> subSkills = skill.GetNextSkills();
  82. if (tempSubSkillIndex - 1 < subSkills.Count)
  83. {
  84. return subSkills[tempSubSkillIndex - 1];
  85. }
  86. }
  87. else
  88. {
  89. return tempSkill;
  90. }
  91. }
  92. }
  93. else
  94. {
  95. if (tempSkillIndex >= 0 && tempSkillIndex < mMonsterVo.GetNormalSkills().Count)
  96. {
  97. string tempSkill = mMonsterVo.GetNormalSkills()[tempSkillIndex];
  98. if (tempSubSkillIndex >= 1)
  99. {
  100. sm_skill skill = sm_skill.GetMoByID(int.Parse(tempSkill));
  101. List<string> subSkills = skill.GetNextSkills();
  102. if (tempSubSkillIndex - 1 < subSkills.Count)
  103. {
  104. return subSkills[tempSubSkillIndex - 1];
  105. }
  106. }
  107. else
  108. {
  109. return tempSkill;
  110. }
  111. }
  112. }
  113. return "";
  114. }
  115. /// <summary>
  116. /// 极限闪避ID
  117. /// </summary>
  118. /// <returns></returns>
  119. public string GetSKillJixianshabi()
  120. {
  121. if (mIsHero)
  122. {
  123. return this.mHeroVo.mo.skill_jixianshanbi;
  124. }
  125. else
  126. {
  127. return this.mMonsterVo.skill_jixianshanbi;
  128. }
  129. }
  130. /// <summary>
  131. /// 获取当前使用的技能
  132. /// </summary>
  133. /// <returns></returns>
  134. public string GetCurUseSkill()
  135. {
  136. if (_curUseSkill == "")
  137. {
  138. _curUseSkill = GetSKillNormal();
  139. }
  140. return _curUseSkill;
  141. }
  142. /// <summary>
  143. /// 设置当前使用的技能
  144. /// </summary>
  145. /// <param name="skillID"></param>
  146. public void SetCurUseSkill(string skillID)
  147. {
  148. _curUseSkill = skillID;
  149. }
  150. /// <summary>
  151. /// 唯一ID
  152. /// </summary>
  153. public int UID { get { return _UID; } }
  154. private int _UID = 0;
  155. private static int StaticUID = 100000;
  156. /// <summary>
  157. /// 模板ID
  158. /// </summary>
  159. public int TID { get { return _TID; } }
  160. private int _TID = 0;
  161. /// <summary>
  162. /// 怪物模版ID 去除等级后
  163. /// </summary>
  164. public int MTID { get { return _MTID; } }
  165. private int _MTID;
  166. /// <summary>
  167. /// 等级
  168. /// </summary>
  169. public int LV { get { return _LV; } }
  170. private int _LV = 0;
  171. /// <summary>
  172. /// 血量
  173. /// </summary>
  174. public int HP { get { return _HP; } }
  175. private int _HP = 0;
  176. public int HP_Final { get { return _HP_Final; } set { _HP_Final = value; } }
  177. private int _HP_Final = 0;
  178. /// <summary>
  179. /// 最大血量
  180. /// </summary>
  181. public int MaxHP { get { return _MaxHP; } }
  182. private int _MaxHP = 0;
  183. public int MaxHP_Final { get { return _MaxHP_Final; } set { _MaxHP_Final = value; } }
  184. private int _MaxHP_Final = 0;
  185. /// <summary>
  186. /// 魔法值
  187. /// </summary>
  188. public int MP { get { return _MP; } }
  189. private int _MP = 0;
  190. public int MP_Final { get { return _MP_Final; } set { _MP_Final = value; } }
  191. private int _MP_Final = 0;
  192. /// <summary>
  193. /// 最大魔法值
  194. /// </summary>
  195. public int MaxMP { get { return _MaxMP; } }
  196. private int _MaxMP = 0;
  197. public int MaxMP_Final { get { return _MaxMP_Final; } set { _MaxMP_Final = value; } }
  198. private int _MaxMP_Final = 0;
  199. /// <summary>
  200. /// 物攻
  201. /// </summary>
  202. public int ATK { get { return _ATK; } }
  203. private int _ATK = 0;
  204. public int ATK_Final { get { return _ATK_Final; } set { _ATK_Final = value; } }
  205. private int _ATK_Final = 0;
  206. /// <summary>
  207. /// 护甲(物防)
  208. /// </summary>
  209. public int DEF { get { return _DEF; } }
  210. private int _DEF = 0;
  211. public int DEF_Final { get { return _DEF_Final; } set { _DEF_Final = value; } }
  212. private int _DEF_Final = 0;
  213. /// <summary>
  214. /// 魔攻
  215. /// </summary>
  216. public int ADM { get { return _ADM; } }
  217. private int _ADM = 0;
  218. public int ADM_Final { get { return _ADM_Final; } set { _ADM_Final = value; } }
  219. private int _ADM_Final = 0;
  220. /// <summary>
  221. /// 魔防
  222. /// </summary>
  223. public int MDF { get { return _MDF; } }
  224. private int _MDF = 0;
  225. public int MDF_Final { get { return _MDF_Final; } set { _MDF_Final = value; } }
  226. private int _MDF_Final = 0;
  227. /// <summary>
  228. /// 言力
  229. /// </summary>
  230. public int YAN { get { return _YAN; } }
  231. private int _YAN = 0;
  232. public int YAN_Final { get { return _YAN_Final; } set { _YAN_Final = value; } }
  233. private int _YAN_Final = 0;
  234. /// <summary>
  235. /// 暴击率
  236. /// </summary>
  237. public float CRT { get { return _CRT; } }
  238. private float _CRT = 0;
  239. public float CRT_Final { get { return _CRT_Final; } set { _CRT_Final = value; } }
  240. private float _CRT_Final = 0;
  241. /// <summary>
  242. /// 暴击伤害
  243. /// </summary>
  244. public float CRD { get { return _CRD; } }
  245. private float _CRD = 0;
  246. public float CRD_Final { get { return _CRD_Final; } set { _CRD_Final = value; } }
  247. private float _CRD_Final = 0;
  248. /// <summary>
  249. /// 抗暴力
  250. /// </summary>
  251. public float KBL { get { return _KBL; } }
  252. private float _KBL = 0;
  253. public float KBL_Final { get { return _KBL_Final; } set { _KBL_Final = value; } }
  254. private float _KBL_Final = 0;
  255. /// <summary>
  256. /// 攻击速度
  257. /// </summary>
  258. public float ASP { get { return _ASP; } }
  259. private float _ASP = 0;
  260. public float ASP_Final { get { return _ASP_Final; } set { _ASP_Final = value; } }
  261. private float _ASP_Final = 0;
  262. /// <summary>
  263. /// 移动速度
  264. /// </summary>
  265. public float MSP { get { return _MSP; } }
  266. private float _MSP = 0;
  267. public float MSP_Final { get { return _MSP_Final; } set { _MSP_Final = value; } }
  268. private float _MSP_Final = 0;
  269. /// <summary>
  270. /// CD 控制因子
  271. /// </summary>
  272. public float CLT { get { return _CLT; } }
  273. private float _CLT = 0;
  274. public float CLT_Final { get { return _CLT_Final; } set { _CLT_Final = value; } }
  275. private float _CLT_Final = 0;
  276. /// <summary>
  277. /// 攻击范围
  278. /// </summary>
  279. public float ARG { get { return _ARG; } }
  280. private float _ARG = 0;
  281. public float ARG_Final { get { return _ARG_Final; } set { _ARG_Final = value; } }
  282. private float _ARG_Final = 0;
  283. /// <summary>
  284. /// 观察范围
  285. /// </summary>
  286. public float ORG { get { return _ORG; } }
  287. private float _ORG = 0;
  288. public float ORG_Final { get { return _ORG_Final; } set { _ORG_Final = value; } }
  289. private float _ORG_Final = 0;
  290. /// <summary>
  291. /// 晕眩
  292. /// </summary>
  293. private int _BUFF_STU = 0;
  294. public int BUFF_STU { get { return _BUFF_STU; } set { _BUFF_STU = value; } }
  295. /// <summary>
  296. /// 静止
  297. /// </summary>
  298. private int _BUFF_STA = 0;
  299. public int BUFF_STA { get { return _BUFF_STA; } set { _BUFF_STA = value; } }
  300. /// <summary>
  301. /// 护盾
  302. /// </summary>
  303. private int _BUFF_SHI = 0;
  304. public int BUFF_SHI { get { return _BUFF_SHI; } set { _BUFF_SHI = value; } }
  305. /// <summary>
  306. /// 沉默
  307. /// </summary>
  308. private int _BUFF_SIL = 0;
  309. public int BUFF_SIL { get { return _BUFF_SIL; } set { _BUFF_SIL = value; } }
  310. /// <summary>
  311. /// 灼烧burn
  312. /// </summary>
  313. private int _BUFF_BUR = 0;
  314. public int BUFF_BUR { get { return _BUFF_BUR; } set { _BUFF_BUR = value; } }
  315. /// <summary>
  316. /// 寒冰Ice
  317. /// </summary>CE
  318. private int _BUFF_ICE = 0;
  319. public int BUFF_ICE { get { return _BUFF_ICE; } set { _BUFF_ICE = value; } }
  320. /// <summary>
  321. /// 黑暗dim
  322. /// </summary>
  323. private int _BUFF_DIM = 0;
  324. public int BUFF_DIM { get { return _BUFF_DIM; } set { _BUFF_DIM = value; } }
  325. /// <summary>
  326. /// 霸体 SuperArmor 不被一切攻击打断 (不受眩晕 沉默 冰封 等效果限制)
  327. /// </summary>
  328. private float _SAR = 0;
  329. public float SAR { get { return _SAR; } }
  330. private float _SAR_Final = 0;
  331. public float SAR_Final { get { return _SAR_Final; } set { _SAR_Final = value; } }
  332. /// <summary>
  333. /// 构造
  334. /// </summary>
  335. /// <param name="monster">数据</param>
  336. /// <param name="hero">VO</param>
  337. public YLBattleUnit(sm_hero monster, GameHeroVo hero = null)
  338. {
  339. // 普通单位
  340. if (hero == null)
  341. {
  342. mIsHero = false;
  343. mMonsterVo = monster;
  344. _UID = StaticUID++;
  345. _TID = monster.heroId;
  346. _MTID = _TID / 100;
  347. _LV = 1;
  348. _HP = monster.hp;
  349. _MaxHP = monster.hp;
  350. _MP = 0;
  351. _MaxMP = monster.nengliangzhi;
  352. _ATK = monster.wuligongji;
  353. _DEF = monster.fangyuhujia;
  354. _ADM = monster.fashuqiangdu;
  355. _MDF = monster.mofakangxing;
  356. _CRT = monster.baoji;
  357. _ASP = monster.atkSpeed;
  358. _MSP = monster.moveSpeed;
  359. _ARG = monster.atkRange;
  360. _ORG = monster.alarmRange;
  361. _YAN = monster.yanli;
  362. _KBL = monster.kangbaoji;
  363. }
  364. // 英雄单位
  365. else
  366. {
  367. mIsHero = true;
  368. mHeroVo = hero;
  369. _UID = int.Parse(hero.uid);
  370. _TID = int.Parse(hero.typeId);
  371. _MTID = _TID;
  372. _LV = hero.level;
  373. if (MapTcpProxy.Instance.Peer.Player.heroDict.ContainsKey(_UID))
  374. {
  375. _HP = MapTcpProxy.Instance.Peer.Player.heroDict[_UID].hp;
  376. _MP = MapTcpProxy.Instance.Peer.Player.heroDict[_UID].mp;
  377. }
  378. else
  379. {
  380. _HP = (int)hero.getHpForBattle();
  381. _MP = 0;
  382. }
  383. _MaxHP = (int)hero.getHpForBattle();
  384. _MaxMP = (int)hero.getNengLiangZhiJiForBattle();
  385. _ATK = (int)hero.getWuLiGongJiForBattle();
  386. _DEF = (int)hero.getFangYuHuJiaForBattle();
  387. _ADM = (int)hero.getFaShuQiangDuForBattle();
  388. _MDF = (int)hero.getMoFaKangXingForBattle();
  389. _CRT = (int)hero.getCriticalForBattle();
  390. _YAN = (int)hero.getYanliForBattle();
  391. _KBL = (int)hero.getKangbaojiForBattle();
  392. _ASP = hero.mo.atkSpeed;
  393. _MSP = hero.mo.moveSpeed;
  394. _ARG = hero.mo.atkRange;
  395. _ORG = hero.mo.alarmRange;
  396. }
  397. _HP_Final = _HP;
  398. _MaxHP_Final = _MaxHP;
  399. _MP_Final = _MP;
  400. _MaxMP_Final = _MaxMP;
  401. _MSP_Final = _MSP;
  402. _ATK_Final = _ATK;
  403. _DEF_Final = _DEF;
  404. _ADM_Final = _ADM;
  405. _MDF_Final = _MDF;
  406. _CRT_Final = _CRT;
  407. _ASP_Final = _ASP;
  408. _MSP_Final = _MSP;
  409. _ARG_Final = _ARG;
  410. _ORG_Final = _ORG;
  411. _YAN_Final = _YAN;
  412. _KBL_Final = _KBL;
  413. }
  414. /// <summary>
  415. /// 刷新数据 去除 当前 HP 当前 MP
  416. /// </summary>
  417. /// <param name="monster">怪物数据</param>
  418. public void RefreshDataUnit(sm_hero monster, GameHeroVo hero = null)
  419. {
  420. // 普通单位
  421. if (hero == null)
  422. {
  423. mIsHero = false;
  424. mMonsterVo = monster;
  425. //_UID = StaticUID++;
  426. _TID = monster.heroId;
  427. _MTID = _TID / 100;
  428. _LV = 1;
  429. // _HP = monster.hp;
  430. //_MaxHP = monster.hp;
  431. //_MP = 0;
  432. //_MaxMP = monster.nengliangzhi;
  433. _ATK = monster.wuligongji;
  434. _DEF = monster.fangyuhujia;
  435. _ADM = monster.fashuqiangdu;
  436. _MDF = monster.mofakangxing;
  437. _CRT = monster.baoji;
  438. _ASP = monster.atkSpeed;
  439. _MSP = monster.moveSpeed;
  440. _ARG = monster.atkRange;
  441. _ORG = monster.alarmRange;
  442. _YAN = monster.yanli;
  443. _KBL = monster.kangbaoji;
  444. }
  445. else
  446. {
  447. mIsHero = true;
  448. mHeroVo = hero;
  449. _UID = int.Parse(hero.uid);
  450. _TID = int.Parse(hero.typeId);
  451. _MTID = _TID;
  452. _LV = hero.level;
  453. //_HP = (int)hero.getHpForBattle();
  454. //_MaxHP = (int)hero.getHpForBattle();
  455. //_MP = 0;
  456. //_MaxMP = (int)hero.getNengLiangZhiJiForBattle();
  457. _ATK = (int)hero.getWuLiGongJiForBattle();
  458. _DEF = (int)hero.getFangYuHuJiaForBattle();
  459. _ADM = (int)hero.getFaShuQiangDuForBattle();
  460. _MDF = (int)hero.getMoFaKangXingForBattle();
  461. _CRT = (int)hero.getCriticalForBattle();
  462. _ASP = hero.mo.atkSpeed;
  463. _MSP = hero.mo.moveSpeed;
  464. _ARG = hero.mo.atkRange;
  465. _ORG = hero.mo.alarmRange;
  466. _YAN = hero.getYanliForBattle();
  467. _KBL = hero.getKangbaojiForBattle();
  468. }
  469. //_HP_Final = _HP;
  470. //_MaxHP_Final = _MaxHP;
  471. //_MP_Final = _MP;
  472. //_MaxMP_Final = _MaxMP;
  473. _MSP_Final = _MSP;
  474. _ATK_Final = _ATK;
  475. _DEF_Final = _DEF;
  476. _ADM_Final = _ADM;
  477. _MDF_Final = _MDF;
  478. _CRT_Final = _CRT;
  479. _ASP_Final = _ASP;
  480. _MSP_Final = _MSP;
  481. _ARG_Final = _ARG;
  482. _ORG_Final = _ORG;
  483. _YAN_Final = _YAN;
  484. _KBL_Final = _KBL;
  485. }
  486. /// <summary>
  487. /// 更新血量
  488. /// </summary>
  489. /// <param name="val"></param>
  490. public void UpdateHP(int val, bool updateUI = false)
  491. {
  492. if (val != 0)
  493. {
  494. _HP_Final += val;
  495. if (_HP_Final > _MaxHP_Final)
  496. {
  497. _HP_Final = _MaxHP_Final;
  498. }
  499. if (_HP_Final < 0)
  500. {
  501. _HP_Final = 0;
  502. }
  503. if (mIsHero)
  504. {
  505. MapTcpProxy.Instance.Peer.ReportDataChange((Info_Map_Player_Hero)this);
  506. }
  507. }
  508. if (updateUI)
  509. {
  510. BattleCanvas.Instance.ShowPlayerHP(_HP_Final, _MaxHP_Final);
  511. }
  512. }
  513. /// <summary>
  514. /// 重置血量
  515. /// </summary>
  516. /// <param name="val"></param>
  517. public void ResetHpMp()
  518. {
  519. _HP_Final = _MaxHP_Final;
  520. _MP_Final = _MaxMP_Final;
  521. if (mIsHero && BattleCanvas.Instance != null)
  522. {
  523. MapTcpProxy.Instance.Peer.ReportDataChange((Info_Map_Player_Hero)this);
  524. BattleCanvas.Instance.ShowPlayerHP(_HP_Final, _MaxHP_Final);
  525. BattleCanvas.Instance.ShowPlayerPower(_MP_Final, _MaxMP_Final);
  526. }
  527. }
  528. /// <summary>
  529. /// 世界BOSS更新血量
  530. /// </summary>
  531. /// <param name="val"></param>
  532. public void SetBossHP(int val, bool updateUI = false)
  533. {
  534. _HP_Final = val;
  535. if (_HP_Final > _MaxHP_Final)
  536. {
  537. _HP_Final = _MaxHP_Final;
  538. }
  539. if (_HP_Final < 0)
  540. {
  541. _HP_Final = 0;
  542. }
  543. if (updateUI)
  544. {
  545. BattleCanvas.Instance.ShowPlayerHP(_HP_Final, _MaxHP_Final);
  546. }
  547. }
  548. /// <summary>
  549. /// 更新蓝
  550. /// </summary>
  551. /// <param name="val"></param>
  552. public void UpdateMP(int val, bool updateUI = false)
  553. {
  554. if (val != 0)
  555. {
  556. _MP_Final += val;
  557. if (_MP_Final > _MaxMP_Final)
  558. {
  559. _MP_Final = _MaxMP_Final;
  560. }
  561. if (_MP_Final < 0)
  562. {
  563. _MP_Final = 0;
  564. }
  565. if (mIsHero)
  566. {
  567. MapTcpProxy.Instance.Peer.ReportDataChange((Info_Map_Player_Hero)this);
  568. }
  569. }
  570. if (updateUI)
  571. {
  572. BattleCanvas.Instance.ShowPlayerPower(_MP_Final, _MaxMP_Final);
  573. }
  574. }
  575. /// <summary>
  576. /// 更新蓝
  577. /// </summary>
  578. /// <param name="val"></param>
  579. public void SetMP(int val, bool updateUI = false)
  580. {
  581. MP_Final = val;
  582. if (MP_Final > MaxMP_Final)
  583. {
  584. MP_Final = MaxMP_Final;
  585. }
  586. if (mIsHero)
  587. {
  588. MapTcpProxy.Instance.Peer.ReportDataChange((Info_Map_Player_Hero)this);
  589. }
  590. if (updateUI)
  591. {
  592. BattleCanvas.Instance.ShowPlayerPower(_MP_Final, _MaxMP_Final);
  593. }
  594. }
  595. }