123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- using CommonAI.Zone;
- using CommonLang;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using XmdsCommon.Plugin;
- using XmdsCommonServer.Plugin;
- using XmdsCommonServer.Plugin.Units;
- using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
- using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
- using XmdsCommonServer.XLS.Data;
- using XmdsCommonSkill.Plugin.Buffs;
- namespace XmdsCommonSkill.Plugin.Skills.Monster
- {
- /// <summary>
- /// 埋葬沙堆 持续施法 埋葬一名敌人,如果没有人解救,他会受到持续5%的最大生命值伤害,直到死亡 参考技能10490403制作,已实现,
- /// </summary>
- class Monster_605051 : XmdsSkillBase
- {
- public static int ID = 605051;
- /// Buff效果.
- public static int Buff_ID = 104000;
- public static XmdsSkillValue Buff_Damage;
- public static XmdsSkillValue Buff_Bug_Life;
- /// 虫卵.
- public static int SummonUnit = 60507;
- /// 虫卵血量.
- public static int SummonUnit_HP;
- 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<XmdsBuffVirtual> list = null;
- if (state.Tag != null)
- {
- list = state.Tag as List<XmdsBuffVirtual>;
- }
- 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);
- }
- }
- }
|