using CommonAI.Zone;
using XmdsCommonServer.XLS.Data;
using XmdsCommon.Plugin;
using XmdsCommonServer.Plugin;
using XmdsCommonServer.Plugin.Units;
using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
using XmdsCommonSkill.Plugin.Buffs;
using System.Collections.Generic;
using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
using CommonLang;
namespace XmdsCommonSkill.Plugin.Skills.Monster
{
///
/// 卵之束缚:喷吐蛛液,被命中的敌人将被虫卵覆盖,被虫卵覆盖后无法移动和攻击,并每秒持续流失生命x%。
/// 虫卵具有y点生命值,可被打破,打破后敌人将恢复自由.
///
public class Monster_10490403 : XmdsSkillBase
{
///
/// 技能ID.
///
public static int ID = 10490403;
///
/// Buff效果.
///
public static int Buff_ID = 104000;
public static XmdsSkillValue Buff_Damage;
public static XmdsSkillValue Buff_Bug_Life;
///
/// 虫卵.
///
public static int SummonUnit = 60402;
///
/// 虫卵血量.
///
public static int SummonUnit_HP;
///
/// 获取技能ID.
///
public override int SkillID
{
get
{
return ID;
}
}
protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
{
XmdsBuffPack pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID);
BuffTemplate bt = pack.mBuffTemplate;
bt.IsHarmful = true;
pack.BindTemplateAndDispose();
unit.RegistSendBuff(bt);
}
protected override void OnSkillLogicEvent(BattleParams param)
{
//此次攻击没有伤害.
param.UseDamageType = CommonAI.Data.DamageType.None;
//关联.
var buff2 = param.Attacker.GetRegisBuffVirtual(Buff_ID, 0) as XmdsBuff_UnitLink;
buff2.OnHandleBuffBeginEvent += ((hitter, attacker, state) =>
{
{
UnitInfo info = XmdsBattleSkill.GetUnitInfo(SummonUnit);
List list = null;
if (state.Tag != null)
{
list = state.Tag as List;
}
XmdsBuff_UnitLink b = null;
if (list != null && list.Count > 0)
{
for (int i = 0; i < list.Count; i++)
{
if (list[i] is XmdsBuff_UnitLink)
{
b = list[i] as XmdsBuff_UnitLink;
AddUnitEvent aue = null;
info.LifeTimeMS = 5000;
var unit = (attacker.mUnit.Parent.AddUnit(
info, info.Name,
attacker.mUnit.Force, 1,
hitter.mUnit.X,
hitter.mUnit.Y,
attacker.mUnit.Direction,
out aue,
attacker.mUnit)) as XmdsInstanceSummonUnit;
if (unit != null)
{
//关联单位设置.
b.LinkTarget = unit.Virtual as XmdsVirtual;
//设置虫卵血量.
SummonUnit_HP = this.GetTargetFormulaValue(param.GameSkill.SkillLevel, Buff_Bug_Life);
unit.MaxHP = SummonUnit_HP;
unit.CurrentHP = SummonUnit_HP;
//召唤单位坐标与玩家绑定.
unit.BindUnit = hitter.mUnit;
unit.Master = null;
}
}
}
}
}
});
//单位不受伤害.
var buff3 = param.Attacker.GetRegisBuffVirtual(Buff_ID, 1) as XmdsBuff_Nothingness;
//受buff影响.
buff3.ChangeType = XmdsBuff_Nothingness.NothingnessType.NothingnessIgnoreSkill;
//持续受到BUFF伤害.
var buff4 = param.Attacker.GetRegisBuffVirtual(Buff_ID, 2) as XmdsBuff_Bleed;
float pec = this.GetTargetFormulaValue(param.GameSkill.SkillLevel, Buff_Damage) / XmdsDamageCalculator.PERER;
buff4.ChangeValue = CUtils.CastInt(param.Hitter.mUnit.MaxHP * pec);
BuffTemplate bt = param.Attacker.GetRegistBuff(Buff_ID);
bt.LifeTimeMS = 5000;
bt.IsHarmful = true;
(bt.Properties as XmdsBuffProperties).Dispelled = true;
param.Hitter.mUnit.AddBuff(Buff_ID, param.Attacker.mUnit);
}
protected override void OnInitSkillParam()
{
XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
InitData(data, out Buff_Damage, XmdsSkillData.XmdsSkillDataKey.ValueSet2);
InitData(data, out Buff_Bug_Life, XmdsSkillData.XmdsSkillDataKey.ValueSet);
}
}
}