using CommonAI.data; using CommonAI.Zone; using CommonAI.Zone.Instance; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using XmdsCommonServer.XLS.Data; namespace XmdsCommonSkill.Plugin.Skills { // 法师天赋数据 public class PlayerCache_Magic : PlayerCacheBase { private IntIntData[] mTalnetData; // 天赋值规则: 天赋值上限-value1,该等级天赋获得时长-value2 private byte mTalnetLv; // 天赋等级 protected long mTalnetLvUpdateTime; // 天赋等级最后更新时间 private byte mTalentMaxLv; //剑影获得剑气值 private int mSwordGetTalnetValue; public PlayerCache_Magic(InstanceUnit unit, IntIntData[] talnetValue, IntIntIntData refreshRule) : base(unit, refreshRule) { this.mTalnetData = talnetValue; this.mTalentMaxLv = (byte)(talnetValue.Length - 1); } public void SetSwordAddTalentValue(int value) { this.mSwordGetTalnetValue = value; } public int GetSwordTalentValue() { return this.mSwordGetTalnetValue; } // 增加天赋点信息 public override void AddTalentValue(int value) { //战斗状态下,才会增加剑气值 if(this.mOwner.Virtual.GetBattleStatus() < CommonAI.Data.BattleStatus.PVE) { return; } // 法师每次获得剑气值都是一样的 value = value == 0 ? this.mSwordGetTalnetValue : value; if (value <= 0) { return; } // 基础天赋值变更 int upValue = 0; if (mTalnetLv < this.mTalentMaxLv && (upValue = this.mTalentValue + value - mTalnetData[mTalnetLv].value1) > 0) { this.mTalnetLv += 1; this.mTalnetLvUpdateTime = CommonLang.CUtils.S_LOCAL_TIMESTAMPMS; this.mTalentValue = Math.Min(upValue, mTalnetData[mTalnetLv].value1); } else { this.mTalentValue = Math.Min(this.mTalentValue + value, mTalnetData[mTalnetLv].value1); } //this.mTalnetUpdateTime = CommonLang.CUtils.S_LOCAL_TIMESTAMPMS; base.AddTalentValue(value); } public override void UseTalentValue(int value) { if (value <= 0) { return; } this.mTalentValue = Math.Max(this.mTalentValue - value, 0); //this.mTalnetUpdateTime = CommonLang.CUtils.S_LOCAL_TIMESTAMPMS; base.UseTalentValue(value); } public override bool Refresh(bool notify) { long timePass = 0; //检测天赋值 bool refrush = base.Refresh(false); //检测等级 if (mTalnetLv > 0 && (timePass = CommonLang.CUtils.S_LOCAL_TIMESTAMPMS - mTalnetLvUpdateTime) > mTalnetData[mTalnetLv].value2) { mTalnetLv -= 1; //避免降级后,天赋值超了 mTalentValue = Math.Min(mTalentValue, mTalnetData[mTalnetLv].value1); refrush = true; this.mTalnetLvUpdateTime = CommonLang.CUtils.S_LOCAL_TIMESTAMPMS; //降级后, //base.mTalnetUpdateTime = CommonLang.CUtils.S_LOCAL_TIMESTAMPMS; } if (refrush && notify) { NotifyPlayer(); return true; } return false; } //通知玩家信息变更 public override void NotifyPlayer() { RefreshTalnetInfo refreshInfo = new RefreshTalnetInfo((short)this.mTalentValue, this.mTalnetLv, (int)(mTalnetLvUpdateTime / 1000)); mOwner.Virtual.SendMsgToPlayer(refreshInfo); } //重置天赋数据 public void ReSet() { this.mTalentValue = 0; //this.mTalnetUpdateTime = CommonLang.CUtils.localTimeMS; this.mTalnetLv = 0; this.mTalnetLvUpdateTime = CommonLang.CUtils.localTimeMS; this.NotifyPlayer(); } public override byte GetTalentLv() { return this.mTalnetLv; } } }