using Common.Utility.CombatEvent;
using Fort23.Core;
using GameLogic.Combat.CombatTool;
using GameLogic.Combat.Hero;
using GameLogic.Player;
using Utility;
namespace GameLogic.Combat.Skill
{
///
/// 生衍道 :功法拥有生息之能,每次使用功法能获得对应属性的充能,充能满后获得对应属性的加成 金:提升攻击力 木:恢复生命 水:治疗一个较重伤势 火:功法强度提升 土:玩家防御提升。(全能型)
///
public class DS60102 : SkillBasic
{
public Map currEnergy = new Map();
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(), 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);
}
}
}