123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- using CommonAI.Data;
- using CommonAI.Zone;
- using CommonAI.Zone.Formula;
- using CommonAI.Zone.Instance;
- using CommonLang;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using XmdsCommon.Plugin;
- using XmdsCommonServer.Plugin;
- using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
- using XmdsCommonServer.XLS.Data;
- using XmdsCommonSkill.Plugin.Skills;
- namespace XmdsCommonSkill.Plugin.PassiveSkills.Pet20200515
- {
- /// <summary>
- /// 宠物装备被动:死亡几率触发 -》 召唤友方小石怪
- /// </summary>
- ///
- class Pet_80320 : PetEquipSkillBase
- {
- /// 技能ID.
- private static int ID = 80320;
- public override int SkillID { get { return ID; } }
- //召唤物id, 数量
- private XmdsSkillValue mSummonInfo;
- //召唤物攻防血继承比例
- private XmdsSkillValue mSummonValue;
- //内部变量
- private int mSkillLv;
- protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner)
- {
- owner.mUnit.OnDead += OnPetDead;
- this.mSkillLv = skillInfo.SkillLevel;
- }
- protected override void OnDispose(XmdsVirtual owner)
- {
- owner.mUnit.OnDead -= OnPetDead;
- }
- protected override void OnSkillDataChange(GameSkill gs, XmdsVirtual unit)
- {
- this.mSkillLv = gs.SkillLevel;
- }
- private void OnPetDead(InstanceUnit unit, InstanceUnit attacker)
- {
- XmdsVirtual_Pet virtualPet = (XmdsVirtual_Pet)unit.Virtual;
- if (virtualPet != null && base.IsTrigger(virtualPet, this.mSkillLv))
- {
- UnitInfo info = XmdsBattleSkill.GetUnitInfo(mSummonInfo.GetValue(this.mSkillLv, 1));
- if(info == null)
- {
- log.Error("Pet_80320 - OnPetDead找不到单位信息:" + mSummonInfo.GetValue(this.mSkillLv, 1));
- }
- //继承宠物属性: 攻防血
- XmdsUnitProperties unitProp = (info.Properties as XmdsUnitProperties);
- unitProp.ServerData.Prop.BaseAttack = CUtils.CastInt(virtualPet.MirrorProp.MaxAttack * XmdsUnitProp.PER * mSummonValue.GetValue(this.mSkillLv, 1));
- unitProp.ServerData.Prop.BaseDefence = CUtils.CastInt(virtualPet.MirrorProp.Defence * XmdsUnitProp.PER * mSummonValue.GetValue(this.mSkillLv, 2));
- unitProp.ServerData.Prop.HP = CUtils.CastInt(virtualPet.MirrorProp.MaxHP * XmdsUnitProp.PER * mSummonValue.GetValue(this.mSkillLv, 3));
- unitProp.ServerData.Prop.BaseMaxHP = unitProp.ServerData.Prop.HP;
- unitProp.LoadDataConfig = false;
- XmdsUnitProperties masterProp = virtualPet.GetMaster().mUnit.Properties as XmdsUnitProperties;
- if(masterProp != null)
- {
- unitProp.ServerData.UnitPKInfo = masterProp.ServerData.UnitPKInfo;
- }
-
- for (int i = 0; i < mSummonInfo.GetValue(this.mSkillLv, 2); i++)
- {
- AddUnitEvent aue = null;
- var summonUnit = unit.Parent.AddUnit(
- info, info.Name,
- unit.Force, virtualPet.GetUnitLv(),
- unit.X + GetRandomDis(unit), unit.Y + GetRandomDis(unit),
- unit.Direction,
- out aue);
- }
- }
- }
- private float GetRandomDis(InstanceUnit unit)
- {
- int addOrReduce = unit.RandomN.Next() % 2 == 0 ? 1 : -1;
- return 1.5f + 2.0f * addOrReduce * (unit.RandomN.Next() % 10) / 10.0f;
- }
- protected override void OnInitConfig(GameSkill skillInfo)
- {
- XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(this.SkillID);
- XmdsSkillValue triggerInterval, triggerRate;
- InitData(data, out triggerInterval, XmdsSkillData.XmdsSkillDataKey.ValueSet);
- InitData(data, out triggerRate, XmdsSkillData.XmdsSkillDataKey.ValueSet2);
- InitData(data, out mSummonInfo, XmdsSkillData.XmdsSkillDataKey.ValueSet3);
- InitData(data, out mSummonValue, XmdsSkillData.XmdsSkillDataKey.ValueSet4);
- base.initEquipSkillBase(triggerInterval, triggerRate, skillInfo.SkillLevel);
- }
- }
- }
|