using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using CommonAI.Data; using CommonAI.Zone.Formula; using XmdsCommon.JSGModule.Interface; using XmdsCommon.Plugin; using XmdsCommonServer.XLS.Data; using XmdsCommonSkill.Plugin.CardSkill; using XmdsCommonServer.Plugin.Base; using CommonAI.data; using CommonLang.Log; namespace XmdsCommonServer.Plugin.CardSkill { public abstract class JSGCardModuleBase : IJSCardSkillModule { protected static Logger log = LoggerFactory.GetLogger("JSGCardModuleBase"); public static readonly int S_TRIGGER_DLAY = 1500; //得球率,间隔配置 private static XmdsCardCfg[] S_CARD_CFG; protected XmdsCardCfg mCardCfg; //下一次得球时间 protected long mNextGetCardTime; //卡牌珠清理时间 - 重置时间 private long mClearCardTime; protected XmdsVirtual mOwner; protected bool mIsInitOK = true; //玩家当前卡牌数据 protected JSGCardDataBase mCardData; //触发卡牌技能数据 protected TriggerCardSkillDelayData mTriggerSkillDelay = new TriggerCardSkillDelayData(); //外层接口 public virtual void AddCard(int nums, bool random) { } public virtual void AddCard(CardType type, int nums) { } public virtual NextCardStrengthenInfo AddNextStrengthInfo(CardType type, CardStrengthenType strenghType, int value1, int value2, int validTime, int validTimes = -1, byte needSames = 0, DamageType dmgType = DamageType.None, CardLayerRule layerRules = null) {return null;} public virtual void ChangeCardWeight(CardType type, CardRateChgType chgType, int value, int validTime, bool isPrecent = true, int validTimes = -1, int uniqueID = 0) { } public virtual GetCardData GetLastCardData() { return null; } public virtual IntIntData GetStrengthInfo(CardStrengthenType strgnthenType) { return null; } public void Init(XmdsVirtual owner) { this.mOwner = owner; bool notifyClient = true; if(mClearCardTime > 0 && this.mClearCardTime < CommonLang.CUtils.localTimeMS) { notifyClient = false; this.mClearCardTime = 0; this.ReSet(false, true); } this.InitCardCfg(); this.mIsInitOK = this.OnInit(owner, notifyClient); } public virtual void OnHitDamage(XmdsVirtual attacker, AttackSource source, int damage, DamageType damageType) { } public virtual void OnHitOther(XmdsVirtual hitter, AttackSource source, int damage, DamageType damageType) { } public virtual void OnSkillDataChange(GameSkill info) { } public virtual void OnInitOver(GameSkill info, IJSGCardSkill cardSkill) { } public virtual void TriggerSkillLoadStrength(CardSkillData skillData, int sameNums) { } public virtual void ReloadCardSkillWeight() { } public void Dispose() { this.mClearCardTime = CommonLang.CUtils.localTimeMS + XmdsConfig.Instance.CARD_OUTBATTLE_VALID_TIME; } //扩展接口 protected virtual void OnUpdate(XmdsVirtual player, int interval, bool slowRefresh) { } protected virtual void ReSet(bool IsInit, bool notifyClient){ } protected virtual bool IsNeedUpdate() { return true; } protected virtual bool OnInit(XmdsVirtual owner, bool notifyClient) { return true; } // 内部接口 public virtual void Update(int interval, bool slowRefresh) { this.mTriggerSkillDelay.CheckTriggerSkill(); if (!slowRefresh || this.mOwner == null || mCardData == null) { return; } if (this.mOwner.GetBattleStatus() > BattleStatus.ReadyBattle) { this.mClearCardTime = 0; } else if (this.mClearCardTime == 0) { this.mClearCardTime = CommonLang.CUtils.localTimeMS + XmdsConfig.Instance.CARD_OUTBATTLE_VALID_TIME; } else if (this.mClearCardTime < CommonLang.CUtils.localTimeMS) { this.mClearCardTime = 0; if (this.mCardData.GetCardNums() > 0) { this.ReSet(false, true); } } this.OnUpdate(this.mOwner, interval, slowRefresh); } public ICardData GetCardInterface() { return this.mCardData; } private void InitCardCfg() { if (S_CARD_CFG == null) { S_CARD_CFG = new XmdsCardCfg[(int)XmdsUnitPro.Max]; foreach (XmdsCardCfg cfgTemp in XmdsConfig.Instance.CARD_CFG) { int pro = (int)cfgTemp.pro; if(pro < 0 || pro >= S_CARD_CFG.Length) { log.Warn("出球概率配置错误:" + cfgTemp.pro); continue; } S_CARD_CFG[pro] = cfgTemp; } if(S_CARD_CFG[0] == null) { S_CARD_CFG[0] = new XmdsCardCfg(); } } if (this.mOwner.mUnit.IsMonster) { this.mCardCfg = S_CARD_CFG[0]; } else { XmdsCardCfg cfg = S_CARD_CFG[(int)this.mOwner.GetUnitPro()]; this.mCardCfg = cfg == null ? S_CARD_CFG[0] : cfg; } } } }