using CommonAI.Data;
using CommonAI.Zone;
using CommonAI.Zone.Helper;
using CommonAI.Zone.Instance;
using System.Collections.Generic;
using XmdsCommon.Plugin;
using XmdsCommonServer.Plugin;
using XmdsCommonServer.XLS.Data;
using XmdsCommonSkill.Plugin.Buffs;
using XmdsCommonSkill.Plugin.Interface;
using static CommonAI.Zone.Instance.InstanceUnit;
namespace XmdsCommonSkill.Plugin.Skills.Magic
{
///
/// 法师二技能: 2 基类
/// 从背后拔出长剑,向前方发出一道光剑,对命中的敌人造成伤害后销毁
///
public class Magic_310200 : XmdsSkillBase
{
private static int ID = 310200;
public override int SkillID { get { return ID; } }
private static int[] SwordShadowSpellID = new int[] { 310980, 310981, 310982, 310983 };
// 固定值_百分比
protected XmdsSkillValue mValueSet1;
//基础飞剑数N1,剑气层转飞剑系数N2,飞剑伤害N3
protected XmdsSkillValue mValueSet8;
//内部
//是否第一次释放触发剑影
private bool mTriggerSword = false;
protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
{
unit.RegistTrySendSpellEvent(OnTrySendSpell, info, info.SkillID + 1);
}
protected override int OnUnitLaunchSkillOver(GameSkill info, XmdsCommonServer.Plugin.XmdsVirtual attacker, CommonAI.Zone.Instance.InstanceUnit.SkillState state)
{
mTriggerSword = true;
return 0;
}
protected override void OnSkillDamagePerEvent(BattleParams param)
{
if(param.AtkProp.DamagePerID == 1)
{
param.SkillDamageAdd = mValueSet1.GetValue(param.GameSkill.SkillLevel);
param.SkillDamagePer = mValueSet1.GetValueExt(param.GameSkill.SkillLevel);
}
else if(param.AtkProp.DamagePerID == 2)
{
//飞弹伤害
param.SkillDamagePer = mValueSet8.GetValue(param.GameSkill.SkillLevel, 3);
}
if(mTriggerSword)
{
mTriggerSword = false;
//触发额外释放剑影
this.OnTriggerFirstHitUnit(param);
}
}
protected virtual int OnTriggerFirstHitUnit(BattleParams param)
{
//如果有剑影,带出特殊剑影效果
BuffState buff = param.Attacker.mUnit.GetBuffByID(XmdsBuff_SwordShadow.BuffID);
if (buff == null)
{
return 0;
}
PlayerCache_Magic cache = param.Attacker.GetPlayerCache() as PlayerCache_Magic;
int tempExt = buff.BuffExtData;
// 法师专属逻辑-释放剑影,增加剑气值
param.Attacker.Talent__Add((1 + buff.OverlayLevel) * (cache == null ? 0 : cache.GetSwordTalentValue()));
param.Attacker.mUnit.removeBuff(XmdsBuff_SwordShadow.BuffID);
//int tempExt = 43214;
List spellList = new List();
while (tempExt > 0)
{
int index = tempExt % 10;
if(index < 0 || index > SwordShadowSpellID.Length)
{
log.Error("Magic_310200 OnTriggerFirstHitUnit剑影转飞剑异常:" + param.Attacker.mUnit.PlayerUUID + ", " + tempExt);
}
else
{
LaunchSpell spell = ComSpellTemplate.Instance().GetSpellBySpellID(SwordShadowSpellID[index-1]);
if(spell == null)
{
log.Error("Magic_310200 OnTriggerFirstHitUnit找不到法术:" + param.Attacker.mUnit.PlayerUUID + ", " + SwordShadowSpellID[index]);
continue;
}
spellList.Add(spell);
tempExt = tempExt / 10;
}
}
if(spellList.Count > 0)
{
LaunchSpell launchSpell = spellList[spellList.Count - 1];
SpellTemplate spt = param.Attacker.mUnit.Parent.Templates.getSpell(launchSpell.SpellID);
JSGCreateSpellData createData = new JSGCreateSpellData();
createData.mMaxSpellCount = spellList.Count;
InstanceSpell spell = param.Attacker.mUnit.Parent.launch_ManyCannon(param.Source.FromSkillType, spt, param.Attacker.mUnit, launchSpell, null, param.Attacker.mUnit, param.Hitter.mUnit.ID, 0, createData);
spell.mCurveSpellList = spellList;
///param.Attacker.mUnit.Parent.unitLaunchSpell(param.Source.FromSkillType, param.Attacker.mUnit, spellList[spellList.Count-1], param.Attacker.mUnit.X, param.Attacker.mUnit.Y,
// param.Hitter.mUnit.ID, null, -1, 0, 0);
}
return spellList.Count;
}
private void OnTrySendSpell(GameSkill skill, XmdsVirtual launcher, LaunchSpell launch, ref SpellTemplate spell, ref JSGCreateSpellData createData,
ref float startX, ref float startY)
{
if(launcher.GetPlayerCache() == null)
{
return;
}
createData.mMaxSpellCount = mValueSet8.GetValue(skill.SkillLevel, 1) + launcher.GetPlayerCache().GetTalentLv() * mValueSet8.GetValue(skill.SkillLevel, 2);
}
protected override void OnInitConfig()
{
XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
InitData(data, out mValueSet1, XmdsSkillData.XmdsSkillDataKey.ValueSet);
//扩展
InitData(data, out mValueSet8, XmdsSkillData.XmdsSkillDataKey.ValueSet8);
}
}
}