123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- using CommonAI.data;
- using CommonAI.Data;
- using CommonLang.Log;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using XmdsCommonSkill.Plugin.CardSkill;
- namespace XmdsCommonServer.Plugin.Base
- {
- public abstract class JSGCardDataBase : ICardData
- {
- protected static Logger log = LoggerFactory.GetLogger("JSGCardDataBase");
- public static readonly byte TRIGGER_NUM = 4;
- protected int mCards = 0;
- protected CardType[] mCardData = new CardType[(int)CardType.Max];
- public virtual void RefreshCardInfo(XmdsVirtual unit) { }
- public virtual void RefreshCardInfo(XmdsVirtual unit, byte[] cardData) { }
- public virtual void SendTriggerInfo(XmdsVirtual player, CardTriggerResult result, int skillId, byte[] cardData) { }
- public int GetCardNums()
- {
- return this.mCards;
- }
- public void ReSet(XmdsVirtual unit)
- {
- this.mCards = 0;
- for (int i = 0; i < (int)CardType.Max; i++)
- {
- mCardData[i] = CardType.Max;
- }
- if (unit != null)
- {
- this.RefreshCardInfo(unit);
- }
- }
- public CardTriggerResult AddCard(XmdsVirtual unit, GenCardData cardData)
- {
- if (mCards + cardData.nums >= TRIGGER_NUM)
- {
- CardTriggerResult result = new CardTriggerResult();
- byte[] cardNum = new byte[(int)CardType.Max];
- for (int i = 0; i < mCards; i++)
- {
- cardNum[(int)mCardData[i]]++;
- result.cardData[i] = (byte)mCardData[i];
- }
- cardNum[(int)cardData.type] = (byte)(cardNum[(int)cardData.type] + (TRIGGER_NUM - mCards));
- //1. 触发结果
- byte sameMax = 0, sameIndex = 0;
- for (byte i = 0; i < (byte)CardType.Max; i++)
- {
- if (cardNum[i] > sameMax)
- {
- sameMax = cardNum[i];
- sameIndex = i;
- }
- }
- //2. 保存触发记录
- for(int i = mCards; i < TRIGGER_NUM; i++)
- {
- result.cardData[i] = (byte)cardData.type;
- }
- //填充剩余卡牌
- mCards = Math.Min(TRIGGER_NUM - 1, mCards + cardData.nums - TRIGGER_NUM);
- for (int i = 0; i < mCards; i++)
- {
- mCardData[i] = cardData.type;
- }
-
- result.type = sameMax <= 1 ? CardType.Max : (CardType)(sameIndex);
- result.sameNums = cardNum[sameIndex];
- if(result.sameNums < 1)
- {
- log.Warn("AddCard触发卡牌,sameNums异常:" + result.sameNums + ", type: " + result.type);
- log.Warn("详情:" + cardNum[0] + ", " + cardNum[1] + ", " + cardNum[2] + ", " + cardNum[3]);
- result.sameNums = 1;
- }
- //刷一次之前的球信息
- this.RefreshCardInfo(unit, result.cardData);
- //刷当前的数据
- this.RefreshCardInfo(unit);
- return result;
- }
- else
- {
- for (int i = mCards; i < mCards + cardData.nums; i++)
- {
- mCardData[i] = cardData.type;
- }
- mCards = mCards + cardData.nums;
- this.RefreshCardInfo(unit);
- return null;
- }
- }
- public CardType GetCardData(int index)
- {
- if(index < 0 || index >= mCards)
- {
- return CardType.Max;
- }
- return this.mCardData[index];
- }
- }
- }
|