1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- using CommonAI.Zone.Helper;
- using CommonAI.Zone.Instance;
- using XmdsCommonServer.Plugin;
- using XmdsCommonServer.XLS.Data;
- using XmdsCommonSkill.Plugin.Buffs;
- using System;
- using static CommonAI.Zone.Instance.InstanceUnit;
- using XmdsCommon.Plugin;
- using CommonAI.Zone;
- using XmdsCommonServer.Plugin.Units;
- using CommonAI.Zone.Formula;
- using XmdsCommonSkill.Plugin.Skills;
- using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
- using CommonAI.Data;
- using CommonLang;
- using XmdsCommonSkill.Plugin.PassiveSkills.Pet20200515;
- namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
- {
- /// <summary>
- /// NewPet - 攻2(最大血量每减少N%,提高当前攻击力N(固定值)+N%(当前攻击力),检测逻辑间隔N秒。)不能实时变化攻击力,暂时转化成实时加成最终伤害
- /// </summary>
- class Pet_80001 : PetPassiveBase
- {
- public static readonly int ID = 80001;
- private static XmdsSkillValue triggerInterval; // 触发间隔
- private static XmdsSkillValue hpReducePer; // HP减少XX触发
- private static XmdsSkillValue attackAddition; // 攻击力增加:固定值+百分比
- //内部数据
- private int mUUID_1 = 0;
- private float mDamageAddition = 0.0f; //伤害加成,攻击力转换过来的
- private long mNextTriggerTime = 0;
- public override int SkillID { get { return ID; } }
- protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner)
- {
- mUUID_1 = owner.RegistOnHitOther(OnHandleHitOther, skillInfo, true);
- }
- // 检测被动
- private void CheckPassive(XmdsVirtual owner, GameSkill skill)
- {
- //直接算生命加成最终伤害值
- if (this.mNextTriggerTime < CommonLang.CUtils.localTimeMS)
- {
- float hpLevel = (int)((owner.mUnit.MaxHP - owner.mUnit.CurrentHP) /
- (owner.mUnit.MaxHP * XmdsUnitProp.PER * hpReducePer.GetValue(skill.SkillLevel)));
- float attackLayerAdd = attackAddition.GetValue(skill.SkillLevel) + owner.MirrorProp.BaseAttack * XmdsUnitProp.PER * attackAddition.GetValueExt(skill.SkillLevel);
- this.mDamageAddition = hpLevel * attackLayerAdd / owner.MirrorProp.MaxAttack;
- this.mNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerInterval.GetValue();
- }
- }
- // 攻击其他人
- private float OnHandleHitOther(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
- ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
- {
- CheckPassive(attacker, skill);
- if (mDamageAddition > 0)
- {
- damage = damage * (1 + mDamageAddition);
- }
- return damage;
- }
- protected override void OnInitSkillParam()
- {
- XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
- //ValueSet, ValueSet2-客户端命格概率假数据
- InitData(data, out triggerInterval, XmdsSkillData.XmdsSkillDataKey.ValueSet3);
- InitData(data, out hpReducePer, XmdsSkillData.XmdsSkillDataKey.ValueSet4);
- InitData(data, out attackAddition, XmdsSkillData.XmdsSkillDataKey.ValueSet5);
- }
- protected override void OnDispose(XmdsVirtual owner)
- {
- owner.UnRegistOnHitOther(mUUID_1);
- }
- }
- }
|