using CommonAI.Zone;
using CommonAI.Zone.Formula;
using CommonAI.Zone.Helper;
using CommonAI.Zone.Instance;
using CommonLang;
using System;
using System.Collections.Generic;
using XmdsCommon.Plugin;
using XmdsCommonServer.Plugin;
using XmdsCommonServer.Plugin.Units;
using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
using XmdsCommonServer.XLS.Data;
using XmdsCommonSkill.Plugin.Buffs;
using XmdsCommonSkill.Plugin.PassiveSkills.Magic;
using static CommonAI.Zone.Instance.InstanceUnit;
namespace XmdsCommonSkill.Plugin.Skills.Boss
{
///
/// 隐藏BOSS-道君分身, 捆仙索
/// 随机对N名玩家释放捆仙锁,被捆仙锁命中会被定身在原地无法移动和攻击,每秒对玩家造成最大血量的<$1>的伤害持续<$2>秒。
/// 同时场景中出现对应玩家名称的小怪,击杀小怪后玩家解除定身。怪物血量为boss血量<$3>
/// Monster_10490403
///
public class Boss_90316 : XmdsSkillBase
{
private static int ID = 90316;
public override int SkillID { get { return ID; } }
private static int Buff_ID = (int)XmdsBuffBase.XmdsBuffList.BOSS_ZB_TRAP; // 捆仙索buff
public static XmdsSkillValue damageValue; // 最大生命百分比伤害
public static XmdsSkillValue buffTime; // Buff时间
public static XmdsSkillValue mirrorMonsterHP; // 镜像怪生命值
public static XmdsSkillValue trapCount; // 束缚上限
private static XmdsSkillValue summonUnitID; // 召唤单位ID
// 转换小怪id
private static int mCheckRange = 10;
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);
unit.RegistLaunchSkillOver(OnLaunchSkillOver, info, false);
}
private int OnLaunchSkillOver(GameSkill info, XmdsCommonServer.Plugin.XmdsVirtual launcher, CommonAI.Zone.Instance.InstanceUnit.SkillState skill)
{
//治疗自己和队友
using (var list = ListObjectPool.AllocAutoRelease())
{
launcher.mUnit.Parent.getObjectsRoundRange((obj, dx, dy, dr) =>
{
var u = obj as InstanceUnit;
if (u.IsPlayer)
{
return CMath.includeRoundPoint(dx, dy, dr, u.X, u.Y);
}
return false;
},
launcher.mUnit.X,
launcher.mUnit.Y,
mCheckRange,
list, launcher.mUnit.AoiStatus);
int count = Math.Max(list.Count, trapCount.GetValue());
UnitInfo sumUnitInfo = XmdsBattleSkill.GetUnitInfo(summonUnitID.GetValue());
// 召唤连接单位
for (int i = 0; i < count; i++)
{
AddUnitEvent aue = null;
var unit = list[i].Parent.AddUnit(
sumUnitInfo, sumUnitInfo.Name,
list[i].Force, 1,
list[i].X,
list[i].Y,
list[i].Direction,
out aue,
list[i]) as XmdsInstanceSummonUnit;
}
//int addHP = CUtils.CastInt(launcher.MirrorProp.BaseAttack * XmdsUnitProp.PER * valueSet1.GetValue(info.SkillLevel));
//加血 & 加速
//for (int i = 0; i < list.Count; i++)
//{
// list[i].AddHP(addHP, launcher.mUnit);
// list[i].AddBuff(Buff_ID, launcher.mUnit);
//}
}
return 0;
}
protected override void OnInitSkillParam()
{
XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
InitData(data, out damageValue, XmdsSkillData.XmdsSkillDataKey.DmgRate);
InitData(data, out buffTime, XmdsSkillData.XmdsSkillDataKey.ValueSet);
InitData(data, out mirrorMonsterHP, XmdsSkillData.XmdsSkillDataKey.ValueSet2);
InitData(data, out trapCount, XmdsSkillData.XmdsSkillDataKey.ValueSet3);
InitData(data, out summonUnitID, XmdsSkillData.XmdsSkillDataKey.ValueSet4);
}
}
}