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; namespace XmdsCommonSkill.Plugin.PassiveSkills.Warrior { /// /// 战士被动 /// 嗜血神力:每过15秒,攻击回复自身+n%攻击加成点生命值 /// public class Warrior_110600 : XmdsPassiveSkillBase { /// 技能ID. public static readonly int ID = 110600; public override int SkillID { get { return ID; } } // 怒气最大值 protected static XmdsSkillValue mAngerMax; // 怒气变化规则 protected static XmdsSkillValue mAngerRule; // 脱战X时间后,怒气开始掉 protected static XmdsSkillValue mAngerReduceTime; // 怒气每增加XX, 妖兽增伤增加Y protected static XmdsSkillValue mAngerToDmg; // 普攻增加的怒气值 protected static XmdsSkillValue mNormalAtkAnger; // private int m_UUID1; private XmdsVirtual mOwner; protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner) { this.mOwner = owner; //无等级概念,为适应客户端偷懒这么写的 IntIntIntData refreshRule = new IntIntIntData(mAngerReduceTime.GetValue(), mAngerRule.GetValue(1,1), mAngerRule.GetValue(1,2)); var playerCache = XmdsPlayerCache.PlayerTalnetInit(XmdsUnitPro.Sword, owner.mUnit, mAngerMax.GetValue(), refreshRule) as PlayerCache_Warrior; this.mOwner.SetPlayerCache(playerCache); if (playerCache != null) { playerCache.SetNormalAtakAnger(mNormalAtkAnger.GetValue(skillInfo.GetPassiveLevel())); } m_UUID1 = owner.RegistOnHitOther(OnHitOther, skillInfo, true); } protected virtual float OnHitOther(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source, ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch) { if(skill != null && mAngerToDmg.GetValue(skill.GetPassiveLevel(), 1) > 0) { int layer = attacker.Talent_Value() / mAngerToDmg.GetValue(skill.GetPassiveLevel(), 1) * mAngerToDmg.GetValue(skill.GetPassiveLevel(), 2); damage = damage * (1.0f + layer / XmdsDamageCalculator.PERER); } return damage; } protected override void OnSkillDataChange(GameSkill gs, XmdsVirtual unit) { var cache = unit.GetPlayerCache() as PlayerCache_Warrior; if(cache != null) { cache.SetNormalAtakAnger(mNormalAtkAnger.GetValue(gs.GetPassiveLevel())); } } protected override void OnUpdate(int intervalMS, bool slowRefresh) { base.OnUpdate(intervalMS, slowRefresh); if (slowRefresh) { this.mOwner.Talent_Refresh(); } } protected override void OnDispose(XmdsVirtual owner) { owner.UnRegistOnHitOther(m_UUID1); XmdsPlayerCache.PlayerTalnetDestory(owner.mUnit); } protected override void OnInitSkillParam() { XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID); InitData(data, out mAngerMax, XmdsSkillData.XmdsSkillDataKey.ValueSet); InitData(data, out mAngerRule, XmdsSkillData.XmdsSkillDataKey.ValueSet2); InitData(data, out mAngerReduceTime, XmdsSkillData.XmdsSkillDataKey.ValueSet3); InitData(data, out mAngerToDmg, XmdsSkillData.XmdsSkillDataKey.ValueSet4); InitData(data, out mNormalAtkAnger, XmdsSkillData.XmdsSkillDataKey.ValueSet5); } public void ResetTriggerTime() { //this.BuffNextTriggerTime = 0; } } }