123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- using Common.Utility.CombatEvent;
- using Fort23.Core;
- using GameLogic.Combat.CombatTool;
- using GameLogic.Combat.Hero;
- using GameLogic.Player;
- using Utility;
- namespace GameLogic.Combat.Skill
- {
- /// <summary>
- /// 生衍道 :功法拥有生息之能,每次使用功法能获得对应属性的充能,充能满后获得对应属性的加成 金:提升攻击力 木:恢复生命 水:治疗一个较重伤势 火:功法强度提升 土:玩家防御提升。(全能型)
- /// </summary>
- public class DS60102 : SkillBasic
- {
- public Map<WuXingType, float> currEnergy = new Map<WuXingType, float>();
- private long addAtt;
- private float addAtt_bl;
- private long addDef;
- private float addDef_bl;
- private long addQiangDu;
- private float addQiangDu_bl;
- protected override void ProUseSkill()
- {
- }
- protected override void ProInitSkill()
- {
- CombatEventManager.Instance.AddEventListener(CombatEventType.UseSkill, UseSkill);
- }
- private void UseSkill(IEventData iEventData)
- {
- CombatUseSkillEventData combatUseSkillEventData = iEventData as CombatUseSkillEventData;
- SkillBasic skillBasic = combatUseSkillEventData.useSkill;
- if (skillBasic.CombatHeroEntity == CombatHeroEntity && skillBasic.SelfSkillConfig.SkillType == 1)
- {
- float v = SelfSkillConfig.effectValue[0];
- if (currEnergy.ContainsKey(skillBasic.wuXingType))
- {
- currEnergy[skillBasic.wuXingType] += v;
- v = currEnergy[skillBasic.wuXingType];
- }
- else
- {
- currEnergy.Add(skillBasic.wuXingType, v);
- }
- switch (skillBasic.wuXingType)
- {
- case WuXingType.Gold:
- GoldLogic();
- break;
- case WuXingType.Wood:
- WoodLogic();
- break;
- case WuXingType.Water:
- WaterLogic();
- break;
- case WuXingType.Fire:
- FireLogic();
- break;
- case WuXingType.Earth:
- EarthLogic();
- break;
- }
- }
- }
- protected void GoldLogic()
- {
- float max = SelfSkillConfig.effectValue[1];
- float v = currEnergy[WuXingType.Gold];
- if (v >= max)
- {
- currEnergy[WuXingType.Gold] = 0;
- long maxAttack = CombatHeroEntity.MaxCombatHeroInfo.attack.Value;
- float addV = SelfSkillConfig.effectValue[2];
- float maxValue = SelfSkillConfig.effectValue[3];
- if (addV + addAtt_bl > maxValue)
- {
- addV = maxValue - addAtt_bl;
- }
- addAtt_bl += addV;
- CombatHeroEntity.CurrCombatHeroInfo.attack -= addAtt;
- addAtt = CombatCalculateTool.Instance.GetVlaueRatioForLong(maxAttack, addV);
- CombatHeroEntity.CurrCombatHeroInfo.attack += addAtt;
- }
- }
- protected void WoodLogic()
- {
- float max = SelfSkillConfig.effectValue[4];
- float v = currEnergy[WuXingType.Wood];
- if (v >= max)
- {
- currEnergy[WuXingType.Wood] = 0;
- long h = CombatCalculateTool.Instance.GetVlaueRatioForLong(CombatHeroEntity.MaxCombatHeroInfo.hp.Value,
- SelfSkillConfig.effectValue[5]);
- CombatCalculateTool.Instance.Recover(CombatHeroEntity,
- CombatHeroEntity.GetMainHotPoin<CombatHeroHitPoint>(), h, AttType.Skill, HarmType.Default,
- triggerData);
- }
- }
- protected void WaterLogic()
- {
- float max = SelfSkillConfig.effectValue[6];
- float v = currEnergy[WuXingType.Water];
- if (v < max)
- {
- return;
- }
- currEnergy[WuXingType.Water] = 0;
- float metal_Injury = CombatHeroEntity.CurrCombatHeroInfo.Metal_Injury;
- float Wood_Injury = CombatHeroEntity.CurrCombatHeroInfo.Wood_Injury;
- float Water_Injury = CombatHeroEntity.CurrCombatHeroInfo.Water_Injury;
- float Fire_Injury = CombatHeroEntity.CurrCombatHeroInfo.Fire_Injury;
- float Earth_Injury = CombatHeroEntity.CurrCombatHeroInfo.Earth_Injury;
- float[] injury = { metal_Injury, Wood_Injury, Water_Injury, Fire_Injury, Earth_Injury };
- int minIndex = 0;
- float minValue = injury[0];
- for (int i = 1; i < injury.Length; i++)
- {
- if (injury[i] < minValue)
- {
- minValue = injury[i];
- minIndex = i;
- }
- }
- float vInjury = SelfSkillConfig.effectValue[7];
- switch (minIndex)
- {
- case 0:
- CombatHeroEntity.CurrCombatHeroInfo.Metal_Injury -= vInjury;
- break;
- case 1:
- CombatHeroEntity.CurrCombatHeroInfo.Wood_Injury -= vInjury;
- break;
- case 2:
- CombatHeroEntity.CurrCombatHeroInfo.Water_Injury -= vInjury;
- break;
- case 3:
- CombatHeroEntity.CurrCombatHeroInfo.Fire_Injury -= vInjury;
- break;
- case 4:
- CombatHeroEntity.CurrCombatHeroInfo.Earth_Injury -= vInjury;
- break;
- }
- }
- protected void FireLogic()
- {
- float max = SelfSkillConfig.effectValue[8];
- float v = currEnergy[WuXingType.Fire];
- if (v < max)
- {
- return;
- }
- currEnergy[WuXingType.Fire] = 0;
- // float currGongFaStrength = CombatHeroEntity.CurrCombatHeroInfo.gongFaStrength;
- float addV = SelfSkillConfig.effectValue[9];
- float maxValue = SelfSkillConfig.effectValue[10];
- if (addV + addQiangDu_bl > maxValue)
- {
- addV = maxValue - addQiangDu_bl;
- }
- CombatHeroEntity.CurrCombatHeroInfo.gongFaStrength -= addQiangDu_bl;
- addQiangDu_bl += addV;
- CombatHeroEntity.CurrCombatHeroInfo.gongFaStrength += addQiangDu_bl;
- }
- protected void EarthLogic()
- {
- float max = SelfSkillConfig.effectValue[11];
- float v = currEnergy[WuXingType.Earth];
- if (v < max)
- {
- return;
- }
- currEnergy[WuXingType.Earth] = 0;
- long maxDef = CombatHeroEntity.MaxCombatHeroInfo.defense.Value;
- float addV = SelfSkillConfig.effectValue[12];
- float maxValue = SelfSkillConfig.effectValue[13];
- if (addV + addDef_bl > maxValue)
- {
- addV = maxValue - addDef_bl;
- }
- addDef_bl += addV;
- CombatHeroEntity.CurrCombatHeroInfo.defense -= addDef;
- addDef = CombatCalculateTool.Instance.GetVlaueRatioForLong(maxDef, addV);
- CombatHeroEntity.CurrCombatHeroInfo.attack += addDef;
- }
- private void Finish()
- {
- // if (_updateTime)
- // {
- // CombatHeroEntity.CurrCombatHeroInfo.addAttSpeed_bl -= SelfSkillConfig.effectValue[2];
- // _updateTime = false;
- // }
- }
- protected override void ProCombatUpdate(float time)
- {
- // if (_updateTime)
- // {
- // _currTime += time;
- // if (_currTime >= SelfSkillConfig.effectValue[3])
- // {
- // Finish();
- // }
- // }
- }
- protected override void ProDispose()
- {
- CombatEventManager.Instance.RemoveEventListener(CombatEventType.UseSkill, UseSkill);
- }
- }
- }
|