123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- using CommonAI.Data;
- using CommonLang.Log;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using XmdsCommonServer.XLS.Data;
- using XmdsCommonSkill.Plugin.CardSkill;
- namespace XmdsCommonServer.Plugin.CardSkill.PlayerCardSkill
- {
- //下一次卡牌技能强化
- public class JSNextCardSkillStrengthenhModule
- {
- protected static Logger sLog = LoggerFactory.GetLogger("JSNextCardSkillStrengthenhModule");
- // 本次强化效果: 可能存在多个累加
- private CardStrengthData[] mCardStrengthInfo = new CardStrengthData[(int)CardStrengthenType.Max + 1];
- //下次强化加成
- private List<NextCardStrengthenInfo> mStrengthenList = new List<NextCardStrengthenInfo>();
- //---------------------------------------------- --------------------------------------------------------------------
- //---------------------------------------------特殊效果数据记录--------------------------------------------------------
- //-------------------------------------------------------------------------------------------------------------------
- public void Update(XmdsVirtual player)
- {
- for (int i = mStrengthenList.Count - 1; i >= 0; i--)
- {
- NextCardStrengthenInfo data = mStrengthenList[i];
- if (data.validTime <= CommonLang.CUtils.localTimeMS || data.validTimes == 0)
- {
- //如果绑定buff
- if (data.bindBuffID > 0 && data.validTimes <= 0)
- {
- player.mUnit.removeBuff(data.bindBuffID);
- }
- mStrengthenList.RemoveAt(i);
- }
- }
- }
- public void Init()
- {
- for (int i = 0; i <= (int)CardStrengthenType.Max; i++)
- {
- if (mCardStrengthInfo[i] == null)
- {
- mCardStrengthInfo[i] = new CardStrengthData();
- mCardStrengthInfo[i].data = new IntIntData();
- }
- }
- }
- public void ReSet()
- {
- for (int i = 0; i <= (int)CardStrengthenType.Max; i++)
- {
- mCardStrengthInfo[i].type = CardStrengthenType.None;
- }
- this.mStrengthenList.Clear();
- }
- public NextCardStrengthenInfo AddStrength(CardType type, CardStrengthenType strenghType, int value1, int value2, int validTime, int validTimes = -1,
- byte needSames = 0, DamageType dmgType = DamageType.None, CardLayerRule layerRules = null)
- {
- long validEndTime = validTime + CommonLang.CUtils.localTimeMS;
- //this.SetAllStrengthTimeByType(strenghType, validEndTime, validTimes);
- NextCardStrengthenInfo data = new NextCardStrengthenInfo();
- data.layerRules = layerRules;
- data.pointCard = type;
- data.needSames = needSames;
- data.needDmgType = dmgType;
- data.type = strenghType;
- data.value1 = value1;
- data.value2 = value2;
- data.validTime = validEndTime;
- data.validTimes = validTimes;
- //data.bindBuffID = bindBuffID;
- do
- {
- if (data.layerRules == null) { break; }
- if (!data.layerRules.IsValid())
- {
- sLog.Error("AddStrength异常:" + type + ", " + strenghType + ", " + data);
- return null;
- }
- NextCardStrengthenInfo oldData = this.GetStrengthInfoByUniqueID(data.layerRules.uniqueID);
- if (oldData == null) { break; }
- if (data.layerRules.layerType == CardLayerType.Replace)
- {
- //针对那种多个覆盖形式的
- oldData.Replace(data);
- //System.Console.WriteLine("伤害覆盖:" + data.value2 + " -> " + oldData.value2);
- return oldData;
- }
- else if(data.layerRules.layerType == CardLayerType.Layers)
- {
- //针对叠层
- oldData.AddLayers(data);
- //System.Console.WriteLine("伤害叠层:" + data.value2 + " -> " + oldData.value2);
- return oldData;
- }
- } while (false);
- this.mStrengthenList.Add(data);
- return data;
- }
- private NextCardStrengthenInfo GetStrengthInfoByUniqueID(int uniqueID)
- {
- foreach (NextCardStrengthenInfo info in this.mStrengthenList)
- {
- if (info.layerRules != null && info.layerRules.uniqueID == uniqueID)
- {
- return info;
- }
- }
- return null;
- }
- //private void SetAllStrengthTimeByType(CardStrengthenType strenghType, long validTime, int validTimes)
- //{
- // 重置剩余层数的所有时间
- // if (strenghType != CardStrengthenType.DmgLayer)
- // {
- // return;
- // }
- // for (int i = 0; i < mStrengthenList.Count; i++)
- // {
- // NextCardStrengthenInfo data = mStrengthenList[i];
- // if (data.type == strenghType)
- // {
- // data.validTime = validTime;
- // data.validTimes = validTimes;
- // }
- // }
- //}
- //重置当前强化效果
- public void TriggerSkillLoadStrength(CardSkillData skillData, int sameNums)
- {
- for (int i = 1; i < (int)CardStrengthenType.Max; i++)
- {
- if (this.GetStrengthInfo(skillData.type, (CardStrengthenType)i, sameNums, skillData.dmgType, mCardStrengthInfo[i].data))
- {
- mCardStrengthInfo[i].type = (CardStrengthenType)i;
- }
- else
- {
- mCardStrengthInfo[i].type = CardStrengthenType.None;
- mCardStrengthInfo[i].data.ReSet();
- }
- }
- }
- public IntIntData GetStrengthInfo(CardStrengthenType strgnthenType)
- {
- return mCardStrengthInfo[(int)strgnthenType].data;
- }
- //获得强化加成效果
- private bool GetStrengthInfo(CardType cardType, CardStrengthenType strgnthenType, int sameNums, DamageType dmgType, IntIntData strengthenInfo)
- {
- //处理卡牌珠生成逻辑,优先处理最近的
- bool process = false;
- for (int i = mStrengthenList.Count - 1; i >= 0; i--)
- {
- NextCardStrengthenInfo data = mStrengthenList[i];
- if (data.pointCard != CardType.Max && data.pointCard != cardType)
- {
- continue;
- }
- else if (strgnthenType != data.type || data.validTime < CommonLang.CUtils.localTimeMS || data.validTimes == 0)
- {
- continue;
- }
- else if (data.needSames > 0 && sameNums < data.needSames)
- {
- continue;
- }
- else if (data.needDmgType != DamageType.None && data.needDmgType != dmgType)
- {
- continue;
- }
- if (data.validTimes > 0) { data.validTimes--; }
- //特殊模块的特殊处理
- process = true;
- if (data.layerRules != null && data.layerRules.layerType == CardLayerType.Layers)
- {
- // 仅层数叠加
- strengthenInfo.value1 = data.value1 * data.value2;
- strengthenInfo.value2 += data.value2;
- }
- else
- {
- strengthenInfo.value1 += data.value1;
- strengthenInfo.value2 += data.value2;
- }
- }
- return process;
- }
- }
- }
|