using CommonAI.Zone.Helper;
using CommonAI.Zone.Instance;
using XmdsCommonServer.Plugin;
using XmdsCommonServer.XLS.Data;
using XmdsCommonSkill.Plugin.Buffs;
using System;
using static CommonAI.Zone.Instance.InstanceUnit;
using XmdsCommon.Plugin;
using CommonAI.Zone;
using XmdsCommonServer.Plugin.Units;
using CommonAI.Zone.Formula;
using XmdsCommonSkill.Plugin.Skills;
using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
using CommonLang;
namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
{
///
/// boss - 3 - 水火无情触发检测
///
class Boss_90111 : XmdsPassiveSkillBase
{
public static int ID = 90111;
private static int Buff_ID = (int)XmdsBuffBase.XmdsBuffList.BOSS_ZB_TAG_SKILLLAUNCH; // 水火无情冷却标记
private static XmdsSkillValue valueSet0; // 伤害系数
private static XmdsSkillValue valueSet1; // 触发间隔
private static XmdsSkillValue valueSet2; // 水无情
private static XmdsSkillValue valueSet3; // 火无情
private int TimePass = 0; //时间流逝
private XmdsVirtual mOwner = null;
// 分解配置数据
private int mTriggerInterval = 0;
private int mUnitMySkillID = 0;
private int mUnitOtherID = 0;
private int mUnitOtherSkillID = 0;
public override int SkillID {get{return ID;}}
protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner)
{
this.mOwner = owner;
this.mTriggerInterval = valueSet1.GetValue();
int unitA = valueSet2.GetValue(1, 1);
int skillA = valueSet2.GetValue(1, 2);
int unitB = valueSet3.GetValue(1, 1);
int skillB = valueSet3.GetValue(1, 2);
if(unitA == this.mOwner.mInfo.ID)
{
this.mUnitMySkillID = skillA;
this.mUnitOtherID = unitB;
this.mUnitOtherSkillID = skillB;
}
else if (unitB == this.mOwner.mInfo.ID)
{
this.mUnitMySkillID = skillB;
this.mUnitOtherID = unitA;
this.mUnitOtherSkillID = skillA;
}
else
{
this.mTriggerInterval = 0;
}
XmdsBuffPack pack1 = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID);
BuffTemplate bt1 = pack1.mBuffTemplate;
bt1.IsHarmful = true;
bt1.LifeTimeMS = this.mTriggerInterval;
pack1.BindTemplateAndDispose();
this.mOwner.RegistSendBuff(bt1);
}
protected override void OnUpdate(int intervalMS, bool slowRefresh)
{
try
{
if(mTriggerInterval <= 0)
{
base.OnUpdate(intervalMS, slowRefresh);
return;
}
this.TimePass += intervalMS;
if (this.TimePass > this.mTriggerInterval && this.mOwner.mUnit.GetBuffByID(Buff_ID) == null)
{
this.TimePass = 0;
InstanceUnit unit = this.mOwner.mUnit.Parent.isUnitInRoundRange(this.mUnitOtherID,
this.mOwner.mUnit.X, this.mOwner.mUnit.Y, 35, this.mOwner.mUnit.AoiStatus);
if (unit != null)
{
unit.AddBuff(Buff_ID, this.mOwner.mUnit);
this.mOwner.mUnit.AddBuff(Buff_ID, this.mOwner.mUnit);
// 释放技能
SkillState skillStateA = this.mOwner.mUnit.getSkillState(mUnitMySkillID);
SkillState skillStateB = unit.getSkillState(mUnitOtherSkillID);
if(skillStateA != null && skillStateB != null)
{
this.mOwner.mUnit.launchSkill(skillStateA, new InstanceUnit.LaunchSkillParam());
unit.launchSkill(skillStateB, new InstanceUnit.LaunchSkillParam());
}
else
{
log.Warn("Boss_90111 释放双生技能时,找不到技能状态信息!");
}
}
}
base.OnUpdate(intervalMS, slowRefresh);
}
catch(Exception err)
{
log.Warn("Boss_90111 catch : " + err);
}
}
protected override void OnInitSkillParam()
{
XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
InitData(data, out valueSet0, XmdsSkillData.XmdsSkillDataKey.DmgRate);
InitData(data, out valueSet1, XmdsSkillData.XmdsSkillDataKey.ValueSet);
InitData(data, out valueSet2, XmdsSkillData.XmdsSkillDataKey.ValueSet2);
InitData(data, out valueSet3, XmdsSkillData.XmdsSkillDataKey.ValueSet3);
}
protected override void OnDispose(XmdsVirtual owner)
{
}
}
}