using System.Collections.Generic; using System.Linq; using UnityEngine; using Wizard; using Wizard.Battle; public class OperateReceiveChecker { private NetworkBattleData networkBattleData; private BattleManagerBase _battleMgr; public OperateReceiveChecker(BattleManagerBase mgr, NetworkBattleData networkData) { _battleMgr = mgr; networkBattleData = networkData; } public bool IsOperateReceive() { try { NetworkBattleReceiver.ReceiveData receiveData = networkBattleData.GetReceiveData(); if (receiveData.dataUri == NetworkBattleDefine.NetworkBattleURI.PlayActions) { int playCardIndex = receiveData.playCardIndex; BattleCardBase battleCardIdx = _battleMgr.GetBattleCardIdx(_battleMgr.BattleEnemy.ClassAndInPlayCardList, playCardIndex); switch (receiveData.actionType) { case NetworkBattleDefine.PlayActionType.ATTACK: { if (battleCardIdx == null) { LocalLog.AccumulateTraceLog("IsOperateReceive actionCard null"); return false; } List opposingCardObjTarget = NetworkBattleGenericTool.GetOpposingCardObjTarget(_battleMgr, receiveData.OpponentTargetDataList); if (!AttackSelectControl.CanCardAttackTarget(battleCardIdx, opposingCardObjTarget.First(), _battleMgr.BattlePlayer.InPlayCards)) { LocalLog.AccumulateTraceLog("IsOperateReceive CanCardAttackTarget"); return false; } break; } case NetworkBattleDefine.PlayActionType.EVOLUTION: case NetworkBattleDefine.PlayActionType.EVOLUTION_SELECT: if (battleCardIdx == null) { LocalLog.AccumulateTraceLog("IsOperateReceive actionCard null"); return false; } if (!battleCardIdx.CanEvolution(isSkill: false, isSelfBattlePlayer: true) || !battleCardIdx.IsInplay) { LocalLog.AccumulateTraceLog("IsOperateReceive CanEvolution"); return false; } if (!IsSelectSkillCheck(receiveData, battleCardIdx, isEvol: true)) { LocalLog.AccumulateTraceLog("IsOperateReceive IsSelectSkillCheck"); return false; } if (!IsChoiceSkillActivate(receiveData, battleCardIdx)) { LocalLog.AccumulateTraceLog("NotEvolChoiceActivate"); return false; } break; case NetworkBattleDefine.PlayActionType.PLAY_HAND: case NetworkBattleDefine.PlayActionType.PLAY_HAND_SELECT: { if (receiveData.keyActionType.Contains(SendKeyActionDataManager.KeyActionType.ChoiceBrave)) { break; } CardDataModel playCard = networkBattleData.GetPlayCard(); if (playCard == null) { LocalLog.AccumulateTraceLog("IsOperateReceive cardData null"); return false; } BattleCardBase indexToCardBase = NetworkBattleGenericTool.GetIndexToCardBase(_battleMgr, _battleMgr.BattleEnemy, playCard.Index); if (indexToCardBase == null) { LocalLog.AccumulateTraceLog("IsOperateReceive playCard null"); return false; } if (NetworkBattleGenericTool.GetCardPlaceState(_battleMgr.BattleEnemy, playCard.Index) != NetworkBattleDefine.NetworkCardPlaceState.Hand) { LocalLog.AccumulateTraceLog(string.Concat("CardID" + indexToCardBase.CardId + "Idx" + indexToCardBase.Index + " ", "IsOperateReceive notHandCard")); return false; } if (receiveData.IsAcceleratedOrCrystallize) { int cardId = CardMaster.GetInstanceForBattle().GetCardParameterFromId(receiveData.transformBeforeCardId).CardId; int num = (CardMaster.GetInstanceForBattle().GetCardParameterFromId(cardId).IsFoil ? 1 : 0); string[] array = SkillCreator.SplitBothSkillText(CardMaster.GetInstanceForBattle().GetCardParameterFromId(cardId).SkillOption)[0].Split(','); for (int i = 0; i < array.Length; i++) { string elementAtString = SkillCreator.GetElementAtString(array, i); if (elementAtString.Contains("card_id=")) { elementAtString = elementAtString.Replace("card_id=", ""); if (receiveData.mutationAfterCardId == int.Parse(elementAtString) + num) { break; } if (i == array.Length - 1) { LocalLog.AccumulateTraceLog("Operate Receive Mutation MistakeID"); return false; } } } if (!indexToCardBase.CheckConditionFixedUseCost(isPrePlay: true) || indexToCardBase.CalcFixedUseCost(indexToCardBase.SelfBattlePlayer.Pp) >= indexToCardBase.Cost) { LocalLog.AccumulateTraceLog("accelerated CostError"); return false; } } else if (!TouchControl.IsPlayCard(_battleMgr.BattleEnemy, indexToCardBase, isDebugLog: true)) { LocalLog.AccumulateTraceLog("NotPlayCard"); return false; } if (!IsSelectSkillCheck(receiveData, indexToCardBase, isEvol: false)) { LocalLog.AccumulateTraceLog("IsOperateReceive IsSelectSkillCheck"); return false; } if (!IsChoiceSkillActivate(receiveData, indexToCardBase)) { LocalLog.AccumulateTraceLog("NotPlayChoiceActivate"); return false; } break; } } } } catch { return false; } return true; } private bool IsSelectSkillCheck(NetworkBattleReceiver.ReceiveData receiveData, BattleCardBase playCard, bool isEvol) { if (receiveData.OpponentTargetDataList.Count() == 0) { return true; } SkillCollectionBase skillCollectionBase = null; skillCollectionBase = (isEvol ? playCard.EvolutionSkills : playCard.Skills); BattlePlayerPair battlePlayerPair = _battleMgr.GetBattlePlayerPair(isPlayer: false); if (receiveData.OpponentTargetDataList.Count() == 0 && skillCollectionBase.Any()) { IEnumerable enumerable = skillCollectionBase.Where(delegate(SkillBase s) { bool flag = s.ApplyingTargetFilter is SkillTargetInPlayFilter || s.ApplyingTargetFilter is SkillTargetInPlayOtherSelfFilter || s.ApplyingTargetFilter is SkillTargetInplaySelfAndClassFilter; return s.IsUserSelectType && flag && ActionProcessor.GetSkillUserSelectableTargets(s, battlePlayerPair) != null && s.CheckCondition(battlePlayerPair, new SkillConditionCheckerOption(), isPrePlay: true); }); if (enumerable != null && enumerable.Any()) { return false; } return true; } IEnumerable source = skillCollectionBase.Where((SkillBase s) => s.IsUserSelectType && !(s is Skill_fusion) && s.CheckCondition(battlePlayerPair, new SkillConditionCheckerOption(), isPrePlay: true)); SkillBase skillBase = null; if (source.Count() > 0) { skillBase = ((source.Count() > 1) ? source.ToList().Last() : source.ToList().First()); } if (skillBase == null) { return true; } IEnumerable skillUserSelectableTargets = ActionProcessor.GetSkillUserSelectableTargets(skillBase, battlePlayerPair); if (skillUserSelectableTargets == null) { LocalLog.AccumulateTraceLog("IsSelectSkillCheck selectableTargets null"); return false; } foreach (BattleCardBase item in NetworkBattleGenericTool.GetOpposingCardObjTarget(_battleMgr, receiveData.OpponentTargetDataList)) { if (skillUserSelectableTargets.Contains(item)) { return true; } } LocalLog.AccumulateTraceLog("IsSelectSkillCheck false"); return false; } private bool IsChoiceSkillActivate(NetworkBattleReceiver.ReceiveData receiveData, BattleCardBase cardBase) { if (receiveData.IsChoice) { CardParameter cardParameterFromId = CardMaster.GetInstanceForBattle().GetCardParameterFromId(receiveData.transformBeforeCardId); BattleCardBase battleCardBase = BattleManagerBase.GetIns().CreateBattleCard(cardParameterFromId.BaseCardId, cardBase.IsPlayer, null, cardParameterFromId, cardBase.SelfBattlePlayer, 0); foreach (CardDataModel item in receiveData.SkillConditionCheckList.FindAll((CardDataModel x) => x.publishedActiveSkillCount != 0)) { if (item.publishedActiveSkillCount == -1) { continue; } foreach (SkillBase skill in battleCardBase.Skills) { if (skill.ApplyingTargetFilter is SkillTargetChosenCardsFilter) { Object.DestroyImmediate(battleCardBase.BattleCardView.GameObject); battleCardBase = null; return item.activate == 1; } } } Object.DestroyImmediate(battleCardBase.BattleCardView.GameObject); battleCardBase = null; } return true; } }