DS60102.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. using Common.Utility.CombatEvent;
  2. using Fort23.Core;
  3. using GameLogic.Combat.CombatTool;
  4. using GameLogic.Combat.Hero;
  5. using GameLogic.Player;
  6. using Utility;
  7. namespace GameLogic.Combat.Skill
  8. {
  9. /// <summary>
  10. /// 生衍道 :功法拥有生息之能,每次使用功法能获得对应属性的充能,充能满后获得对应属性的加成 金:提升攻击力 木:恢复生命 水:治疗一个较重伤势 火:功法强度提升 土:玩家防御提升。(全能型)
  11. /// </summary>
  12. public class DS60102 : SkillBasic
  13. {
  14. public Map<WuXingType, float> currEnergy = new Map<WuXingType, float>();
  15. private long addAtt;
  16. private float addAtt_bl;
  17. private long addDef;
  18. private float addDef_bl;
  19. private long addQiangDu;
  20. private float addQiangDu_bl;
  21. protected override void ProUseSkill()
  22. {
  23. }
  24. protected override void ProInitSkill()
  25. {
  26. CombatEventManager.Instance.AddEventListener(CombatEventType.UseSkill, UseSkill);
  27. }
  28. private void UseSkill(IEventData iEventData)
  29. {
  30. CombatUseSkillEventData combatUseSkillEventData = iEventData as CombatUseSkillEventData;
  31. SkillBasic skillBasic = combatUseSkillEventData.useSkill;
  32. if (skillBasic.CombatHeroEntity == CombatHeroEntity && skillBasic.SelfSkillConfig.SkillType == 1)
  33. {
  34. float v = SelfSkillConfig.effectValue[0];
  35. if (currEnergy.ContainsKey(skillBasic.wuXingType))
  36. {
  37. currEnergy[skillBasic.wuXingType] += v;
  38. v = currEnergy[skillBasic.wuXingType];
  39. }
  40. else
  41. {
  42. currEnergy.Add(skillBasic.wuXingType, v);
  43. }
  44. switch (skillBasic.wuXingType)
  45. {
  46. case WuXingType.Gold:
  47. GoldLogic();
  48. break;
  49. case WuXingType.Wood:
  50. WoodLogic();
  51. break;
  52. case WuXingType.Water:
  53. WaterLogic();
  54. break;
  55. case WuXingType.Fire:
  56. FireLogic();
  57. break;
  58. case WuXingType.Earth:
  59. EarthLogic();
  60. break;
  61. }
  62. }
  63. }
  64. protected void GoldLogic()
  65. {
  66. float max = SelfSkillConfig.effectValue[1];
  67. float v = currEnergy[WuXingType.Gold];
  68. if (v >= max)
  69. {
  70. currEnergy[WuXingType.Gold] = 0;
  71. long maxAttack = CombatHeroEntity.MaxCombatHeroInfo.attack.Value;
  72. float addV = SelfSkillConfig.effectValue[2];
  73. float maxValue = SelfSkillConfig.effectValue[3];
  74. if (addV + addAtt_bl > maxValue)
  75. {
  76. addV = maxValue - addAtt_bl;
  77. }
  78. addAtt_bl += addV;
  79. CombatHeroEntity.CurrCombatHeroInfo.attack -= addAtt;
  80. addAtt = CombatCalculateTool.Instance.GetVlaueRatioForLong(maxAttack, addV);
  81. CombatHeroEntity.CurrCombatHeroInfo.attack += addAtt;
  82. }
  83. }
  84. protected void WoodLogic()
  85. {
  86. float max = SelfSkillConfig.effectValue[4];
  87. float v = currEnergy[WuXingType.Wood];
  88. if (v >= max)
  89. {
  90. currEnergy[WuXingType.Wood] = 0;
  91. long h = CombatCalculateTool.Instance.GetVlaueRatioForLong(CombatHeroEntity.MaxCombatHeroInfo.hp.Value,
  92. SelfSkillConfig.effectValue[5]);
  93. CombatCalculateTool.Instance.Recover(CombatHeroEntity,
  94. CombatHeroEntity.GetMainHotPoin<CombatHeroHitPoint>(), h, AttType.Skill, HarmType.Default,
  95. triggerData);
  96. }
  97. }
  98. protected void WaterLogic()
  99. {
  100. float max = SelfSkillConfig.effectValue[6];
  101. float v = currEnergy[WuXingType.Water];
  102. if (v < max)
  103. {
  104. return;
  105. }
  106. currEnergy[WuXingType.Water] = 0;
  107. float metal_Injury = CombatHeroEntity.CurrCombatHeroInfo.Metal_Injury;
  108. float Wood_Injury = CombatHeroEntity.CurrCombatHeroInfo.Wood_Injury;
  109. float Water_Injury = CombatHeroEntity.CurrCombatHeroInfo.Water_Injury;
  110. float Fire_Injury = CombatHeroEntity.CurrCombatHeroInfo.Fire_Injury;
  111. float Earth_Injury = CombatHeroEntity.CurrCombatHeroInfo.Earth_Injury;
  112. float[] injury = { metal_Injury, Wood_Injury, Water_Injury, Fire_Injury, Earth_Injury };
  113. int minIndex = 0;
  114. float minValue = injury[0];
  115. for (int i = 1; i < injury.Length; i++)
  116. {
  117. if (injury[i] < minValue)
  118. {
  119. minValue = injury[i];
  120. minIndex = i;
  121. }
  122. }
  123. float vInjury = SelfSkillConfig.effectValue[7];
  124. switch (minIndex)
  125. {
  126. case 0:
  127. CombatHeroEntity.CurrCombatHeroInfo.Metal_Injury -= vInjury;
  128. break;
  129. case 1:
  130. CombatHeroEntity.CurrCombatHeroInfo.Wood_Injury -= vInjury;
  131. break;
  132. case 2:
  133. CombatHeroEntity.CurrCombatHeroInfo.Water_Injury -= vInjury;
  134. break;
  135. case 3:
  136. CombatHeroEntity.CurrCombatHeroInfo.Fire_Injury -= vInjury;
  137. break;
  138. case 4:
  139. CombatHeroEntity.CurrCombatHeroInfo.Earth_Injury -= vInjury;
  140. break;
  141. }
  142. }
  143. protected void FireLogic()
  144. {
  145. float max = SelfSkillConfig.effectValue[8];
  146. float v = currEnergy[WuXingType.Fire];
  147. if (v < max)
  148. {
  149. return;
  150. }
  151. currEnergy[WuXingType.Fire] = 0;
  152. // float currGongFaStrength = CombatHeroEntity.CurrCombatHeroInfo.gongFaStrength;
  153. float addV = SelfSkillConfig.effectValue[9];
  154. float maxValue = SelfSkillConfig.effectValue[10];
  155. if (addV + addQiangDu_bl > maxValue)
  156. {
  157. addV = maxValue - addQiangDu_bl;
  158. }
  159. CombatHeroEntity.CurrCombatHeroInfo.gongFaStrength -= addQiangDu_bl;
  160. addQiangDu_bl += addV;
  161. CombatHeroEntity.CurrCombatHeroInfo.gongFaStrength += addQiangDu_bl;
  162. }
  163. protected void EarthLogic()
  164. {
  165. float max = SelfSkillConfig.effectValue[11];
  166. float v = currEnergy[WuXingType.Earth];
  167. if (v < max)
  168. {
  169. return;
  170. }
  171. currEnergy[WuXingType.Earth] = 0;
  172. long maxDef = CombatHeroEntity.MaxCombatHeroInfo.defense.Value;
  173. float addV = SelfSkillConfig.effectValue[12];
  174. float maxValue = SelfSkillConfig.effectValue[13];
  175. if (addV + addDef_bl > maxValue)
  176. {
  177. addV = maxValue - addDef_bl;
  178. }
  179. addDef_bl += addV;
  180. CombatHeroEntity.CurrCombatHeroInfo.defense -= addDef;
  181. addDef = CombatCalculateTool.Instance.GetVlaueRatioForLong(maxDef, addV);
  182. CombatHeroEntity.CurrCombatHeroInfo.attack += addDef;
  183. }
  184. private void Finish()
  185. {
  186. // if (_updateTime)
  187. // {
  188. // CombatHeroEntity.CurrCombatHeroInfo.addAttSpeed_bl -= SelfSkillConfig.effectValue[2];
  189. // _updateTime = false;
  190. // }
  191. }
  192. protected override void ProCombatUpdate(float time)
  193. {
  194. // if (_updateTime)
  195. // {
  196. // _currTime += time;
  197. // if (_currTime >= SelfSkillConfig.effectValue[3])
  198. // {
  199. // Finish();
  200. // }
  201. // }
  202. }
  203. protected override void ProDispose()
  204. {
  205. CombatEventManager.Instance.RemoveEventListener(CombatEventType.UseSkill, UseSkill);
  206. }
  207. }
  208. }