123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- using CommonAI.data;
- using CommonAI.Zone;
- using CommonAI.Zone.Instance;
- using CommonLang;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using XmdsCommonServer.Plugin;
- using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
- using XmdsCommonServer.XLS.Data;
- using XmdsCommonSkill.Plugin.PassiveSkills.Remedy;
- using static CommonAI.Zone.Instance.InstanceUnit;
- namespace XmdsCommonSkill.Plugin.Skills
- {
- //记录叠加buff的玩家信息
- public class PoisonPlayers
- {
- public long buffValidTime;
- public XmdsVirtual player;
- }
- // 治疗天赋数据
- public class PlayerCache_Remedy : PlayerCacheBase
- {
- //value - value1:加毒概率,value2:加毒层数
- private HashMap<int, IntIntData> mPoisonRate = new HashMap<int, IntIntData>();
- //记录所有附加毒的玩家信息
- //private HashMap<String, PoisonPlayers> mPoisonPlayers = new HashMap<String, PoisonPlayers>();
- /* 设置叠毒限制 - 非boss单位,N毫秒内叠毒上限M */
- private int mPoisonValidTime; // 毒计算时间维度
- private int mPosionTotals; // 单位时间维度内叠毒上限
- //private short mRecordPosions;
- private long mRecordPosionEndTime; // 单位时间内,累计叠毒截止时间,
- private HashSet<uint> mRecordPosionExt = new HashSet<uint>();
- //强化4-5内容
- public int mPoisonBreakDmgAdd; //毒爆伤害增加
- public int mPoisonBreakFullDmgAdd; //满层毒爆伤害增加
- //强化5-4内容
- private long mPoisonRateVaildTime;
- private int mPoisonAddRate;
- public PlayerCache_Remedy(InstanceUnit unit, int recordTime, int poisionTotal) : base(unit, null)
- {
- this.mPoisonValidTime = recordTime;
- this.mPosionTotals = poisionTotal;
- }
- //刷新概率信息
- public void SetSkillPoisonRate(IntIntData data, int skillID)
- {
- this.mPoisonRate.Put(skillID, data);
- }
- //获得击中其他人概率信息
- public IntIntData GePoisonRateInfo(int skillID)
- {
- return mPoisonRate.Get(skillID);
- }
- //设置强化4-5内容
- public void SetStrong4_4(int poisonDmgAdd, int poisonFullDmgAdd)
- {
- this.mPoisonBreakDmgAdd = poisonDmgAdd;
- this.mPoisonBreakFullDmgAdd = poisonFullDmgAdd;
- }
- //设置强化5-4内容
- public void SetStrong5_4(int validTime, int addRate)
- {
- this.mPoisonRateVaildTime = CommonLang.CUtils.localTimeMS + validTime;
- this.mPoisonAddRate = addRate;
- }
- // 获得叠毒增加概率
- public int GetRateAddition()
- {
- if(this.mPoisonRateVaildTime >= CommonLang.CUtils.localTimeMS)
- {
- return this.mPoisonAddRate;
- }
- return 0;
- }
- public override void MarkValid(bool isValid)
- {
- base.MarkValid(isValid);
- //if (!isValid)
- //{
- // mPoisonRate.Clear();
- //}
- this.mPoisonBreakDmgAdd = 0;
- this.mPoisonBreakFullDmgAdd = 0;
- this.mPoisonRateVaildTime = 0;
- this.mPoisonAddRate = 0;
- }
- /* 是否可以叠毒 */
- public bool IsCanAddPosion(XmdsVirtual hitted)
- {
- if (!hitted.IsBoss())
- {
- if (this.mRecordPosionEndTime > CommonLang.CUtils.localTimeMS)
- {
- //this.mRecordPosions++;
- if (mRecordPosionExt.Count >= mPosionTotals)
- {
- return false;
- }
- else
- {
- mRecordPosionExt.Add(hitted.mUnit.ID);
- }
- }
- else
- {
- this.mRecordPosionEndTime = CommonLang.CUtils.localTimeMS + mPoisonValidTime;
- mRecordPosionExt.Clear();
- //this.mRecordPosions = 1;
- mRecordPosionExt.Add(hitted.mUnit.ID);
- }
- }
- return true;
- }
- //记录叠毒玩家信息
- //public void RecordPoisonPlayer(XmdsVirtual hitter)
- //{
- // PoisonPlayers record = mPoisonPlayers.Get(hitter.mUnit.PlayerUUID);
- // if(record == null)
- // {
- // record = new PoisonPlayers();
- // record.player = hitter;
- // mPoisonPlayers.Put(hitter.mUnit.PlayerUUID, record);
- // }
- // record.buffValidTime = CommonLang.CUtils.localTimeMS + mPoisonValidTime;
- //}
- //刷新配置
- public void RefreshConfig(int recordTime, int poisionTotal)
- {
- this.mPoisonValidTime = recordTime;
- this.mPosionTotals = poisionTotal;
- }
- //毒爆: checkRange内的玩家毒会爆炸
- //public void TriggerPoisonEffect(int damageBase, int damagePer, int checkRange = 9, int addLayer = 0, int breakAddBuffId = 0, int breakAddBufMaxLayer = 0)
- //{
- // XmdsVirtual owner = this.mOwner.Virtual as XmdsVirtual;
- // foreach (PoisonPlayers playerData in mPoisonPlayers.Values)
- // {
- // if (playerData.buffValidTime < CommonLang.CUtils.localTimeMS || !playerData.player.mUnit.IsActive)
- // {
- // continue;
- // }
- // else if(CMath.getDistance(mOwner.X, mOwner.Y, playerData.player.mUnit.X, playerData.player.mUnit.Y) > checkRange)
- // {
- // continue;
- // }
- // BuffState buffState = playerData.player.mUnit.GetBuffByIDAndSender(Remedy_510601.Buff_POISON, this.mOwner.ID);
- // if(buffState == null)
- // {
- // continue;
- // }
- // int finalLayer = 1 + buffState.OverlayLevel + addLayer;
- // damagePer += (this.mPoisonBreakDmgAdd + (finalLayer >= buffState.Data.MaxOverlay ? this.mPoisonBreakFullDmgAdd : 0));
- // int attackTemp = (int)(owner.MirrorProp.GetFinalAttack(playerData.player.mUnit.IsMonster) / XmdsDamageCalculator.PERER * damagePer);
- // int calcDmg = (damageBase + XmdsDamageCalculator.GetDamage(attackTemp, owner, playerData.player, null)) * finalLayer;
- // playerData.player.mUnit.AddHP(-calcDmg, this.mOwner);
- // playerData.player.mUnit.removeBuffBySender(Remedy_510601.Buff_POISON, this.mOwner.ID);
- // // 附加额外buff
- // if(breakAddBuffId > 0)
- // {
- // BuffState buff = playerData.player.mUnit.AddBuff(breakAddBuffId, this.mOwner, 0, false, false, false, 0, finalLayer);
- // buff.SetLayerLevel((byte)(Math.Min(breakAddBufMaxLayer, finalLayer)));
- // }
- // System.Console.WriteLine("毒爆: " + playerData.player.mUnit.Info.Name + ", 伤害:" + calcDmg + ", 结算层:" + (1 + buffState.OverlayLevel + addLayer));
- // }
- // this.mPoisonPlayers.Clear();
- //}
- }
- }
|