123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- 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 CommonLang;
- using CommonAI.Data;
- using static CommonAI.Zone.Helper.HateSystem;
- using System.Collections.Generic;
- using XmdsCommonServer.Message;
- using CommonAI.ZoneServer.JSGModule;
- namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
- {
-
-
-
- class Boss_91001 : XmdsPassiveSkillBase
- {
- public static int ID = 91001;
- public override int SkillID { get { return ID; } }
-
- private static int mBuffID = (int)XmdsBuffBase.XmdsBuffList.BOSS_WEAK;
- private static XmdsSkillValue mValueSet1;
- private static XmdsSkillValue mValueSet2;
- private static XmdsSkillValue mValueSet3;
-
- private int mUUID_1 = 0;
- private int mTriggerHP;
- private bool mTriggerHelp;
- private float mDamageDeeper;
- private XmdsVirtual mOwner;
-
- private long mNextWeakTime;
- public short mWeakRate;
- public int mWeakInterval;
- protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner)
- {
- XmdsBuffPack pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(mBuffID);
- BuffTemplate bt = pack.mBuffTemplate;
- bt.IsHarmful = true;
- bt.LifeTimeMS = mValueSet2.GetValue(skillInfo.SkillLevel, 3);
- pack.BindTemplateAndDispose();
- owner.RegistSendBuff(bt);
- this.mUUID_1 = owner.RegistOnHitDamage(OnHandleHitDmage, skillInfo, true);
- this.mTriggerHP = CUtils.CastInt(owner.MirrorProp.MaxHP * XmdsUnitProp.PER * mValueSet1.GetValue(skillInfo.SkillLevel));
- this.mOwner = owner;
- this.mDamageDeeper = mValueSet3.GetValue(skillInfo.SkillLevel) * XmdsUnitProp.PER;
- this.mWeakRate = (short)mValueSet2.GetValue(skillInfo.SkillLevel, 2);
- this.mWeakInterval = mValueSet2.GetValue(skillInfo.SkillLevel, 1);
- }
- protected override void OnDispose(XmdsVirtual owner)
- {
- owner.UnRegistOnHitDamage(this.mUUID_1);
- }
- protected override void OnUpdate(int intervalMS, bool slowRefresh)
- {
- if(!slowRefresh)
- {
- return;
- }
- if (this.mOwner.GetBattleStatus() <= BattleStatus.ReadyBattle)
- {
- mNextWeakTime = 0;
- mTriggerHelp = false;
- return;
- }
- int kingID = this.mOwner.mUnit.Parent.GetZoneKingID();
- if (kingID > 0 && mNextWeakTime < CommonLang.CUtils.localTimeMS && !JSGMountainKingModule.IsKingAlive(this.mOwner.mUnit.Parent, kingID)
- && this.mOwner.RandomPercent(this.mWeakRate))
- {
- this.mNextWeakTime = this.mWeakInterval + CommonLang.CUtils.localTimeMS;
- this.mOwner.mUnit.AddBuff(mBuffID);
- }
- }
- private float OnHandleHitDmage(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
- ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
- {
- int kingID = hitted.mUnit.Parent.GetZoneKingID();
- if (kingID <= 0)
- {
- return damage;
- }
- if (!JSGMountainKingModule.IsKingAlive(hitted.mUnit.Parent, kingID))
- {
- damage += damage * this.mDamageDeeper;
- }
- else if (!mTriggerHelp && hitted.mUnit.IsActive && hitted.mUnit.Virtual.GetBattleStatus() >= BattleStatus.PVE)
- {
-
- int leftHP = (int)(hitted.mUnit.CurrentHP - damage);
- if (leftHP > 0 && leftHP < mTriggerHP)
- {
- mTriggerHelp = true;
- List<HateInfo> ret = new List<HateInfo>();
- hitted.GetHateSystem().GetHateList(ret);
-
- MountainKingHelpEventB2R notifyEvent = new MountainKingHelpEventB2R();
- notifyEvent.mapId = hitted.mUnit.Parent.GetSceneID();
- notifyEvent.monsterId = hitted.mUnit.Info.ID;
- notifyEvent.monsterObjectId = hitted.mUnit.ID;
- int playerCount = Math.Min(3, ret.Count);
- for (int i = 0; i < ret.Count; i++)
- {
- InstanceUnit player = ret[i].Unit;
- if (player == null || !player.IsPlayer)
- {
- continue;
- }
- notifyEvent.players.Add(player.PlayerUUID);
- }
- if (notifyEvent.players.Count > 0)
- {
- hitted.mUnit.queueEvent(notifyEvent);
- }
- else
- {
- log.Warn("触发大王护卫事件,找不到仇恨目标:" + hitted.mUnit.Parent.GetSceneID() + ", " + hitted.mUnit.Info.ID + ", " + ret.Count
- + ", 本次伤害:" + damage + ", 剩余血量: " + leftHP + ", PV状态: " + hitted.mUnit.Virtual.GetBattleStatus()
- + ", 本次攻击者信息:" + attacker.mUnit.PlayerUUID + ", " + attacker.mUnit.Info.ID + ", " + JSGModule.GetAttackSourceDes(source));
- }
- }
- }
- return damage;
- }
- protected override void OnInitSkillParam()
- {
- XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
- InitData(data, out mValueSet1, XmdsSkillData.XmdsSkillDataKey.ValueSet);
- InitData(data, out mValueSet2, XmdsSkillData.XmdsSkillDataKey.ValueSet2);
- InitData(data, out mValueSet3, XmdsSkillData.XmdsSkillDataKey.ValueSet3);
- }
- }
- }
|