using XmdsCommonServer.Plugin;
using CommonLang;
using CommonAI.Zone.Instance;
using CommonAI.Zone;
using XmdsCommon.Plugin;
namespace XmdsCommonSkill.Plugin.Skills.Monster
{
///
/// 兽人祭司 - 复活: 复活附近已死亡的怪物,使其恢复100%生命和法力
///
public class Monster_10090202 : XmdsSkillBase
{
///
/// 技能ID.
///
public static int ID = 10090202;
public static int Range = 5;
///
/// 获取技能ID.
///
public override int SkillID
{
get
{
return ID;
}
}
protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
{
//施放技能监听.
unit.RegistTryLaunchSkillEvent(OnTryLaunchSkillEventHandle, info, false);
}
protected virtual bool OnTryLaunchSkillEventHandle(GameSkill skillInfo, ref InstanceUnit.SkillState skill, XmdsVirtual launcher, ref InstanceUnit.LaunchSkillParam param)
{
//复活附近已死亡的怪物,使其恢复100%生命和法力.
using (var list = ListObjectPool.AllocAutoRelease())
{
launcher.mUnit.Parent.getObjectsRoundRange(
(obj, dx, dy, dr) =>
{
var u = obj as InstanceUnit;
//己方单位.
if (u.IsDead() && launcher.IsAllies(u.Virtual as XmdsVirtual))
{
return CMath.includeRoundPoint(dx, dy, dr, u.X, u.Y);
}
return false;
},
launcher.mUnit.X,
launcher.mUnit.Y,
Range,
list , launcher.mUnit.AoiStatus);
if (list.Count > 0)
{
param.TargetUnitID = launcher.mUnit.ID;
return true;
}
}
return false;
}
protected override void OnSkillLogicEvent(BattleParams param)
{
//不产生伤害.
param.UseDamageType = CommonAI.Data.DamageType.None;
//复活附近已死亡的怪物,使其恢复100%生命和法力.
using (var list = ListObjectPool.AllocAutoRelease())
{
param.Attacker.mUnit.Parent.getObjectsRoundRange(
(obj, dx, dy, dr) =>
{
var u = obj as InstanceUnit;
//己方单位.
if (u.IsDead() && param.Attacker.IsAllies(u.Virtual as XmdsVirtual))
{
return CMath.includeRoundPoint(dx, dy, dr, u.X, u.Y);
}
return false;
},
param.Hitter.mUnit.X,
param.Hitter.mUnit.Y,
Range,
list,
param.Hitter.mUnit.AoiStatus);
if (list.Count > 0)
{
for (int i = 0; i < list.Count; i++)
{
list[i].startRebirth();
}
}
}
}
}
}