using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using Wizard; using Wizard.Battle.View; using Wizard.Battle.View.Vfx; public class ReplaceReceivedCard { public class CardIdAndIndex { public int CardId { get; private set; } public int CardIndex { get; private set; } public bool IsPlayer { get; private set; } public int Cost { get; private set; } public CardIdAndIndex(int cardId, int index, bool isPlayer, int cost = -1) { CardId = cardId; CardIndex = index; IsPlayer = isPlayer; Cost = cost; } } protected readonly NetworkBattleManagerBase _networkBattleMgr; protected int CardIdx; protected int CardId; private int _playCardCost = -1; protected int? _buffAddAtk; protected int? _buffSetAtk; protected int? _buffSetLife; protected int? _buffAddLife; protected int _clan; protected List _tribe; protected string _attachTarget = ""; protected NetworkBattleDefine.NetworkCardPlaceState _fromState; protected List _toStateList; protected int _skillCardIndex; protected int _spellboost = -1; protected int? _addChantCount; protected int? _setChantCount; protected int _unionBurstCount = -1; protected int _skyboundArtCount = -1; protected List _fusionIngredientList; protected bool _isOpen; private bool _isReserved; private bool _isCemetary; private bool _isNecromanceZone; protected BattleCardBase _originalDummyCard; private readonly int[] _machineGoddessCardIdList = new int[3] { 900841110, 900841120, 900841130 }; public ReplaceReceivedCard(NetworkBattleManagerBase battleMgrBase, CardDataModel cardData) { _networkBattleMgr = battleMgrBase; CardIdx = cardData.Index; CardId = cardData.CardId; _playCardCost = cardData.playCardCost; _buffAddAtk = cardData.AddAtk; _buffSetAtk = cardData.SetAtk; _buffAddLife = cardData.AddLife; _buffSetLife = cardData.SetLife; _clan = cardData.Clan; _tribe = ((cardData.Tribe != "NONE") ? CardParameter.CreateTribeList(cardData.Tribe) : null); _attachTarget = cardData.AttachTarget; _fromState = cardData.fromState; _toStateList = cardData.ToStateList; _skillCardIndex = cardData.skillCardIndex; _spellboost = cardData.Spellboost; _addChantCount = cardData.AddChantCount; _setChantCount = cardData.SetChantCount; _unionBurstCount = cardData.UnionBurstCount; _skyboundArtCount = cardData.SkyboundArtCount; _fusionIngredientList = cardData.FusionIngredientList; _isOpen = cardData.IsOpen; _isReserved = false; _isCemetary = false; _isNecromanceZone = false; } public BattleCardBase ReplaceCard(BattlePlayerBase battlePlayer) { bool isCardInDeck = SearchForDummyCardInHandAndDeck(battlePlayer); CardParameter cardParameterFromId = CardMaster.GetInstanceForBattle().GetCardParameterFromId(CardId); bool flag = cardParameterFromId.SkillTiming.Contains("when_draw"); bool flag2 = _machineGoddessCardIdList.Contains(cardParameterFromId.BaseCardId); if (_originalDummyCard == null) { if (!GameMgr.GetIns().IsWatchBattle && (flag || flag2)) { _networkBattleMgr.AddNotReplaceCardList(new CardIdAndIndex(CardId, CardIdx, battlePlayer.IsPlayer, _playCardCost)); return null; } return null; } BattleCardBase battleCardBase = CreateActualCard(battlePlayer, isCardInDeck, flag); if (battleCardBase is NullBattleCard) { return null; } ReplaceCardInList(battlePlayer, battleCardBase, isCardInDeck); return battleCardBase; } protected bool SearchForDummyCardInHandAndDeck(BattlePlayerBase battlePlayer) { bool result = true; _originalDummyCard = battlePlayer.DeckCardList.SingleOrDefault((BattleCardBase c) => c.Index == CardIdx); if (_originalDummyCard == null) { _originalDummyCard = battlePlayer.HandCardList.SingleOrDefault((BattleCardBase c) => c.Index == CardIdx); result = false; } if (_originalDummyCard == null) { _originalDummyCard = battlePlayer.CemeteryList.FirstOrDefault((BattleCardBase c) => c.Index == CardIdx); _isCemetary = _originalDummyCard != null; } if (_originalDummyCard == null) { _originalDummyCard = battlePlayer.NecromanceZoneList.FirstOrDefault((BattleCardBase c) => c.Index == CardIdx); _isNecromanceZone = _originalDummyCard != null; } if (_originalDummyCard == null) { _originalDummyCard = battlePlayer.ReservedCardList.FirstOrDefault((BattleCardBase c) => c.Index == CardIdx); _isReserved = true; } return result; } protected virtual BattleCardBase CreateActualCard(BattlePlayerBase battlePlayer, bool isCardInDeck, bool isOpenDrawSkill) { BattleCardBase battleCardBase = _networkBattleMgr.CreateBattleCardWithGameObject(new BattleManagerBase.CardCreateInfo(CardId, battlePlayer.IsPlayer, isChoice: false, NetworkBattleDefine.NetworkCardPlaceState.None), new BattleManagerBase.IndexInfo(CardIdx), -1, isVirtual: false, isActualCard: true); if (!GameMgr.GetIns().IsWatchBattle && _isOpen && _fromState == NetworkBattleDefine.NetworkCardPlaceState.Deck && _toStateList.Contains(NetworkBattleDefine.NetworkCardPlaceState.Banish) && battleCardBase.Skills.Any((SkillBase s) => s is Skill_banish && s.OnWhenDraw != 0 && s.ApplyingTargetFilter is SkillTargetSelfFilter)) { return CardCreatorBase.GetDummyInstance(); } SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create(); sequentialVfxPlayer.Register(CreateReplaceDummyCardVfx(battleCardBase, battlePlayer, isCardInDeck, isOpenDrawSkill)); InheritedCardData(battleCardBase); if (!(battleCardBase is SpellBattleCard)) { battleCardBase.Skills.InitTimingInfo(); battleCardBase.BattleCardView.BattleCardIconAnimations.Initialize(battleCardBase, battleCardBase.Skills); } ReplaceBuffInfoList(battleCardBase, _originalDummyCard); battleCardBase.ShallowCopyBuffInfoList(_originalDummyCard); _networkBattleMgr.VfxMgr.RegisterSequentialVfx(sequentialVfxPlayer); SettingTargetDeckSelfCardAddDeckSkillCardList(battleCardBase, isCardInDeck); RemoveOpenCardRemoveAfterActionSkills(battleCardBase); return battleCardBase; } protected void InheritedCardData(BattleCardBase receivedCard) { NetworkBattleReceiver.ReceiveData receiveData = _networkBattleMgr.networkBattleData.GetReceiveData(); if (receiveData != null && (!receiveData.IsTransformChoice || receiveData.playCardIndex != receivedCard.Index || receiveData.keyActionType.Exists((SendKeyActionDataManager.KeyActionType x) => x == SendKeyActionDataManager.KeyActionType.HaveBeforeSkillChoice))) { CopyDataToActualCard(receivedCard); AddAttachedSkill(receivedCard); InheritedAddParameter(receivedCard); InheritedAffiliation(receivedCard); InheritedSkillValue(receivedCard); } } protected void AddAttachedSkill(BattleCardBase receivedCard) { if (_attachTarget == null) { return; } string[] array = _attachTarget.Split(','); for (int i = 0; i < array.Count(); i++) { string text = array[i]; if (text.Contains('|') || !(text != string.Empty)) { continue; } if (!int.TryParse(text, out var count)) { LocalLog.AccumulateTraceLog("#690983 incorrect attachTarget:" + _attachTarget); break; } SkillBase skillBase = receivedCard.SelfBattlePlayer.BattleMgr.PublishedSkillList.SingleOrDefault((SkillBase s) => s.PublishedActiveSkillCount == count); if (skillBase == null) { continue; } if (skillBase is Skill_attach_skill) { skillBase.IsNotAssignPublishedActiveSkillCount = true; SkillBase skill = Skill_attach_skill.CreateAndAttachSkill(receivedCard, skillBase, Skill_attach_skill.CreateAttachSkillBuildInfo(skillBase.OptionValue.GetOption(SkillFilterCreator.ContentKeyword.skill))); skillBase.ReplaceBuffInfoTargetCard(_originalDummyCard, receivedCard); if (skillBase.PreprocessList.Any((SkillPreprocessBase s) => s is SkillPreprocessTurnEndStop)) { skillBase.ReplaceBuffInfoSkill(receivedCard, skill); } skillBase.IsNotAssignPublishedActiveSkillCount = false; } else if (skillBase is Skill_powerup) { receivedCard.SkillApplyInformation.GiveBuff(isReplace: true); if ((skillBase as Skill_powerup).GetAddLife() > 0) { receivedCard.SkillApplyInformation.GiveBuffLife(); } receivedCard.OnRemoveFromInPlayAfterOneTime += delegate { receivedCard.SkillApplyInformation.DepriveBuff(); return NullVfx.GetInstance(); }; } else if (skillBase is Skill_attack_by_life) { receivedCard.SkillApplyInformation.GiveAttackByLife((skillBase as Skill_attack_by_life).type); skillBase.ReplaceBuffInfoTargetCard(_originalDummyCard, receivedCard); } } } protected void InheritedAddParameter(BattleCardBase receivedCard) { AddSetModifier(receivedCard); InheritedAddParameterBuff(receivedCard); } private void InheritedAddParameterBuff(BattleCardBase receivedCard) { ICardOffenseModifier cardOffenseModifier = null; ICardLifeModifier cardLifeModifier = null; if (_buffAddAtk.HasValue) { cardOffenseModifier = new OffenseAddModifier(_buffAddAtk.Value); } if (_buffAddLife.HasValue) { cardLifeModifier = new LifeAddModifier(_buffAddLife.Value); } if (cardOffenseModifier != null || cardLifeModifier != null) { receivedCard.SkillApplyInformation.GiveCombatValueModifier(cardOffenseModifier, cardLifeModifier, new SkillProcessor()); } } private void AddSetModifier(BattleCardBase receivedCard) { ICardOffenseModifier cardOffenseModifier = null; ICardLifeModifier cardLifeModifier = null; if (_buffSetAtk.HasValue) { cardOffenseModifier = new OffenseSetModifier(_buffSetAtk.Value); } if (_buffSetLife.HasValue) { cardLifeModifier = new LifeSetModifier(_buffSetLife.Value); } if (cardOffenseModifier != null || cardLifeModifier != null) { receivedCard.SkillApplyInformation.GiveCombatValueModifier(cardOffenseModifier, cardLifeModifier, new SkillProcessor()); } } protected void InheritedAffiliation(BattleCardBase receivedCard) { if (_clan == -1 && (_tribe == null || _tribe.Count <= 0) && _attachTarget == null) { return; } CardBasePrm.ClanType clan = receivedCard.Clan; if (_clan != -1) { clan = (CardBasePrm.ClanType)_clan; } CardBasePrm.TribeInfo tribeInfo = null; if (_tribe != null && _tribe.Count > 0) { tribeInfo = new CardBasePrm.TribeInfo(_tribe, CardBasePrm.TribeChangeType.CHANGE); } receivedCard.SkillApplyInformation.GiveChangeAffiliation(clan, tribeInfo, showEffect: false); if (_attachTarget == null) { return; } string[] array = _attachTarget.Split(','); for (int i = 0; i < array.Count(); i++) { string text = array[i]; if (text.Contains('|') || !(text != string.Empty)) { continue; } if (!int.TryParse(text, out var count)) { LocalLog.AccumulateTraceLog("#690983 incorrect attachTarget:" + _attachTarget); break; } Skill_change_affiliation skill = receivedCard.SelfBattlePlayer.BattleMgr.PublishedSkillList.SingleOrDefault((SkillBase s) => s.PublishedActiveSkillCount == count) as Skill_change_affiliation; if (skill != null) { skill.ReplaceBuffInfoTargetCard(_originalDummyCard, receivedCard); receivedCard.OnLoseSkillOneTime += delegate(SkillBase loseSkill, SkillProcessor skillProcessor, BattleCardBase card) { skill.RegisterStop(card); return card.SkillApplyInformation.ForceDepriveChangeAffiliation(); }; } } } protected void InheritedSkillValue(BattleCardBase receivedCard) { if (_unionBurstCount != -1) { ICardUnionBurstCountModifier unionBurstCountModifier = new UnionBurstCountAddModifier(-_unionBurstCount); receivedCard.SkillApplyInformation.GiveUnionBurstCount(unionBurstCountModifier); } if (_skyboundArtCount != -1) { ICardSkyboundArtCountModifier skyboundArtCountModifier = new SkyboundArtCountAddModifier(-_skyboundArtCount); receivedCard.SkillApplyInformation.GiveSkyboundArtCount(skyboundArtCountModifier); ICardSuperSkyboundArtCountModifier superSkyboundArtCountModifier = new SuperSkyboundArtCountAddModifier(-_skyboundArtCount); receivedCard.SkillApplyInformation.GiveSuperSkyboundArtCount(superSkyboundArtCountModifier); } if (receivedCard.BaseParameter.BaseCardId == _originalDummyCard.BaseParameter.BaseCardId) { receivedCard.SetSkillActivatedCount(_originalDummyCard.SkillActivatedCount); } if (_originalDummyCard.SkillApplyInformation.SkillRandomArray != null) { receivedCard.SkillApplyInformation.GiveSkillRandomArray(_originalDummyCard.SkillApplyInformation.SkillRandomArray); } if (_originalDummyCard.SkillApplyInformation.RandomSelectedCardList != null) { receivedCard.SkillApplyInformation.RandomSelectedCardList.AddRange(_originalDummyCard.SkillApplyInformation.RandomSelectedCardList); } if (_originalDummyCard.SkillApplyInformation.SkillDrewCardList != null) { receivedCard.SkillApplyInformation.SkillDrewCardList.AddRange(_originalDummyCard.SkillApplyInformation.SkillDrewCardList); } for (int i = 0; i < Mathf.Min(_originalDummyCard.Skills.Count(), receivedCard.Skills.Count()); i++) { SkillPreprocessTimesPerGame skillPreprocessTimesPerGame = _originalDummyCard.Skills.ElementAt(i).PreprocessList.FirstOrDefault((SkillPreprocessBase p) => p is SkillPreprocessTimesPerGame) as SkillPreprocessTimesPerGame; SkillPreprocessTimesPerGame skillPreprocessTimesPerGame2 = receivedCard.Skills.ElementAt(i).PreprocessList.FirstOrDefault((SkillPreprocessBase p) => p is SkillPreprocessTimesPerGame) as SkillPreprocessTimesPerGame; if (skillPreprocessTimesPerGame != null) { skillPreprocessTimesPerGame2?.Clone(skillPreprocessTimesPerGame, _originalDummyCard.Skills.ElementAt(i)); } } } protected void ReplaceBuffInfoList(BattleCardBase receivedCard, BattleCardBase dummyCard) { if (_attachTarget == null) { dummyCard.BuffInfoList.Clear(); return; } List list = new List(); List list2 = new List(); string[] array = _attachTarget.Split(','); int num = 0; bool flag = false; for (int i = 0; i < array.Count(); i++) { string text = array[i]; if (text.Contains('|')) { string[] array2 = array[i].Split('|'); int num2 = 0; int num3 = 0; int skillIndex = 0; bool isEvol = false; BattlePlayerBase selfBattlePlayer = receivedCard.SelfBattlePlayer; for (int j = 0; j < array2.Count(); j++) { int result = 0; if (!int.TryParse(array2[j], out result)) { return; } switch (num2) { case 0: num3 = result; list2.Add(num3); break; case 1: skillIndex = result; break; case 2: isEvol = result == 1; break; } if (num2 == 2) { try { CardParameter cardParameterFromId = CardMaster.GetInstanceForBattle().GetCardParameterFromId(num3); BattleCardBase battleCardBase = _networkBattleMgr.CreateBattleCard(num3, selfBattlePlayer.IsPlayer, null, cardParameterFromId, selfBattlePlayer, CardIdx); SkillBase skillBase = NetworkBattleGenericTool.SearchCardSkillIndex(battleCardBase, skillIndex, isEvol); list.Add(skillBase); if (skillBase.OnWhenPlayOtherStart != 0 || skillBase.OnWhenEvolveOtherStart != 0 || skillBase.OnWhenEvolveSelfAndOtherStart != 0 || skillBase.OnWhenBanishOther != 0 || skillBase.OnWhenSpellChargeStart != 0 || ((skillBase.OnSelfTurnEndStart != 0 || skillBase.OnWhenDraw != 0) && skillBase.ApplyingTargetFilter is SkillTargetHandSelfFilter)) { if (skillBase is Skill_powerup) { Skill_powerup skill_powerup = skillBase as Skill_powerup; skill_powerup.OptionValue = new SkillOptionValue(skill_powerup.SkillPrm.buildInfo._parsedOption); BattlePlayerReadOnlyInfoPair playerInfoPair = new BattlePlayerReadOnlyInfoPair(_networkBattleMgr.BattlePlayer, _networkBattleMgr.BattleEnemy); SkillConditionCheckerOption skillConditionCheckerOption = new SkillConditionCheckerOption(); skillConditionCheckerOption.AddChargeCount = _spellboost; SkillCollectionBase.SetupOptionValue(skill_powerup.OptionValue, playerInfoPair, skillBase.SkillPrm.ownerCard, skillBase, skillConditionCheckerOption); if (SkillOptionValue.IsVariableValue(skill_powerup.OptionValue.GetOption(SkillFilterCreator.ContentKeyword.add_offense, "0")) || SkillOptionValue.IsVariableValue(skill_powerup.OptionValue.GetOption(SkillFilterCreator.ContentKeyword.add_life, "0"))) { bool flag2 = skill_powerup.IsRefVariable(SkillFilterCreator.ContentKeyword.add_offense.ToString()); bool flag3 = skill_powerup.IsRefVariable(SkillFilterCreator.ContentKeyword.add_life.ToString()); skill_powerup.SettingPowerUpData(flag2 ? 1 : 0, flag3 ? 1 : 0); } else { int offense = skill_powerup.OptionValue.GetInt(SkillFilterCreator.ContentKeyword.add_offense, 0); int life = skill_powerup.OptionValue.GetInt(SkillFilterCreator.ContentKeyword.add_life, 0); skill_powerup.SettingPowerUpData(offense, life); } skillBase.InsertBuffInfoIfNeeded(dummyCard, i); receivedCard.SkillApplyInformation.GiveBuff(isReplace: true); if ((skillBase as Skill_powerup).GetAddLife() > 0) { receivedCard.SkillApplyInformation.GiveBuffLife(); } } else if (skillBase is Skill_attach_skill) { Skill_attach_skill skill_attach_skill = skillBase as Skill_attach_skill; CreateAndAttachSkill(receivedCard, skill_attach_skill); flag = true; skill_attach_skill.InsertBuffInfoIfNeeded(dummyCard, i); list.Add(skill_attach_skill); } else if (skillBase is Skill_generic_value_modifier) { if (skillBase.OptionValue.GetOption(SkillFilterCreator.ContentKeyword.set).Contains(SkillFilterCreator.ContentKeyword.fixed_generic_value_initial.ToString())) { IEnumerable source = battleCardBase.Skills.Where((SkillBase s) => s is Skill_attach_skill && s.SkillPrm.buildInfo._condition.Contains("{me.hand_self.count}>0")); Skill_attach_skill skill_attach_skill2 = source.ElementAt(num % source.Count()) as Skill_attach_skill; CreateAndAttachSkill(receivedCard, skill_attach_skill2); num++; skill_attach_skill2.InsertBuffInfoIfNeeded(dummyCard, i); list.Add(skill_attach_skill2); flag = true; } } else { Debug.LogError("UnknownBuff" + skillBase); } } } catch { } num2 = 0; skillIndex = 0; } else { num2++; } } } else { if (!(text != string.Empty)) { continue; } if (!int.TryParse(text, out var count)) { LocalLog.AccumulateTraceLog("#690983 incorrect attachTarget:" + _attachTarget); return; } SkillBase value = receivedCard.SelfBattlePlayer.BattleMgr.PublishedSkillList.SingleOrDefault((SkillBase s) => s.PublishedActiveSkillCount == count); if (value != null) { list2.Add(value.SkillPrm.ownerCard.BaseParameter.BaseCardId); list.Add(value); SkillBase skillBase2 = receivedCard.Skills.FirstOrDefault((SkillBase s) => s.GetAttachSkill == value); if (skillBase2 != null && flag) { receivedCard.Skills.Remove(skillBase2); receivedCard.Skills.Add(skillBase2); receivedCard.Skills.Complete(); } } } } for (int num4 = 0; num4 < list.Count; num4++) { SkillBase skill = list[num4]; if (skill == null) { LocalLog.AccumulateTraceLog("#690983 incorrect attachTarget:" + _attachTarget); } else if (IsBuffServerInfo(skill)) { BuffInfo buffInfo = dummyCard.BuffInfoList.FirstOrDefault((BuffInfo b) => b.SkillFrom == skill); if (buffInfo == null) { buffInfo = skill.InsertBuffInfoIfNeeded(dummyCard, num4, isBaseCardId: true); } skill.SetEventAfterReplace(receivedCard, buffInfo); } } List list3 = new List(); for (int num5 = 0; num5 < dummyCard.BuffInfoList.Count(); num5++) { BuffInfo buff = dummyCard.BuffInfoList[num5]; try { if (list2.Count == 0) { list3.Add(buff); continue; } SkillBase skillBase3 = list.Find((SkillBase x) => x.ToString() == buff.SkillFrom.ToString()); if (!list2.Contains(buff.BaseCardIDFrom) || skillBase3 == null) { list3.Add(buff); continue; } list2.Remove(buff.BaseCardIDFrom); list.Remove(skillBase3); } catch { } } for (int num6 = 0; num6 < list3.Count; num6++) { dummyCard.BuffInfoList.Remove(list3[num6]); } } private static bool IsBuffServerInfo(SkillBase skill) { if (!RegisterFilter.IsBothTurnFilterSkill(skill)) { if ((!(skill is Skill_cost_change) && !(skill is Skill_powerup)) || !(skill.ApplyingTargetFilter is SkillTargetDeckFilter)) { return skill.ApplyingTargetFilter is SkillTargetSkillUpdateDeckCardFilter; } return true; } return true; } private void CreateAndAttachSkill(BattleCardBase receivedCard, Skill_attach_skill attachSkill) { attachSkill.IsNotAssignPublishedActiveSkillCount = true; SkillBase skillBase = Skill_attach_skill.CreateAndAttachSkill(receivedCard, attachSkill, Skill_attach_skill.CreateAttachSkillBuildInfo(attachSkill.OptionValue.GetOption(SkillFilterCreator.ContentKeyword.skill))); BuffInfo buffInfo = skillBase.AddBuffInfoIfNeeded(_originalDummyCard); attachSkill.AddBuffInfo(new SkillBase.BuffInfoContainer(receivedCard, buffInfo, attachSkill.SkillPrm.ownerCard.Skills.IndexOf(attachSkill), "", skillBase, 0L)); attachSkill.ReplaceBuffInfoTargetCard(_originalDummyCard, receivedCard); attachSkill.IsNotAssignPublishedActiveSkillCount = false; } protected void SettingTargetDeckSelfCardAddDeckSkillCardList(BattleCardBase receivedCard, bool isCardInDeck) { if (_networkBattleMgr.networkBattleData != null && _networkBattleMgr.networkBattleData.GetReceiveData() != null && _networkBattleMgr.networkBattleData.GetReceiveData().unapprovedList != null) { bool flag = _networkBattleMgr.networkBattleData.GetReceiveData().unapprovedList.Exists((CardDataModel x) => x.skillCardIndex == receivedCard.Index) && receivedCard.Skills.Any((SkillBase s) => s.ConditionTargetFilter is SkillTargetDeckSelfFilter); bool flag2 = receivedCard.Skills.Any((SkillBase s) => RegisterValidate.IsDeckParamVariable(s)) && _toStateList.Contains(NetworkBattleDefine.NetworkCardPlaceState.Field); if (isCardInDeck && _fromState == NetworkBattleDefine.NetworkCardPlaceState.Deck && _networkBattleMgr.networkBattleData.GetReceiveData().unapprovedList.Exists((CardDataModel x) => x.skillCardIndex == receivedCard.Index) && (flag || flag2)) { receivedCard.SelfBattlePlayer.RemoveOriginalAndAddDeckSkillCard(receivedCard); } } } protected void CopyDataToActualCard(BattleCardBase receivedCard) { receivedCard.SetSpellChargeCount(_spellboost); if (_setChantCount.HasValue) { receivedCard.SkillApplyInformation.GiveChantCount(new ChantCountSetModifier(_setChantCount.Value)); } if (_addChantCount.HasValue) { receivedCard.SkillApplyInformation.GiveChantCount(new ChantCountAddModifier(_addChantCount.Value)); } if (_playCardCost > -1) { receivedCard.AddCostModifier(new CostSetModifier(_playCardCost), null, eventCall: false); } receivedCard.SkillApplyInformation.AddFusionIngredients(_originalDummyCard.SkillApplyInformation.FusionIngredients); } public void SetPrivateCardSpellboost(BattlePlayerBase battlePlayer) { if (CardIdx == 0) { return; } _originalDummyCard = battlePlayer.DeckCardList.SingleOrDefault((BattleCardBase c) => c.Index == CardIdx); if (_originalDummyCard == null) { _originalDummyCard = battlePlayer.HandCardList.SingleOrDefault((BattleCardBase c) => c.Index == CardIdx); } if (_originalDummyCard != null) { _originalDummyCard.SetSpellChargeCount(_spellboost); } } protected void ReplaceCardInList(BattlePlayerBase battlePlayer, BattleCardBase receivedCard, bool isCardInDeck) { List list = (_isReserved ? battlePlayer.ReservedCardList : (_isCemetary ? battlePlayer.CemeteryList : (_isNecromanceZone ? battlePlayer.NecromanceZoneList : ((!isCardInDeck) ? battlePlayer.HandCardList : battlePlayer.DeckCardList)))); int index = list.IndexOf(_originalDummyCard); list[index] = receivedCard; } private VfxBase CreateReplaceDummyCardVfx(BattleCardBase receivedCard, BattlePlayerBase battlePlayer, bool isCardInDeck, bool isOpenDrawSkill) { int cost = receivedCard.Cost; BattleCardBase cardBeforeChangeParameter = receivedCard.VirtualClone(receivedCard.SelfBattlePlayer, receivedCard.OpponentBattlePlayer); IBattleCardView dummyCardView = _originalDummyCard.BattleCardView; bool isCemetary = _isCemetary; bool isNecromanceZone = _isNecromanceZone; return InstantVfx.Create(delegate { if (!isCardInDeck) { receivedCard.BattleCardView.GameObject.transform.parent = dummyCardView.GameObject.transform.parent; receivedCard.BattleCardView.GameObject.transform.localPosition = dummyCardView.GameObject.transform.localPosition; receivedCard.BattleCardView.GameObject.transform.localScale = dummyCardView.GameObject.transform.localScale; receivedCard.BattleCardView.GameObject.transform.localRotation = dummyCardView.GameObject.transform.localRotation; receivedCard.BattleCardView.UpdateParameterView(receivedCard.Atk, receivedCard.Life, (receivedCard.FixedUseCost != -1) ? receivedCard.FixedUseCost : receivedCard.Cost, receivedCard.BaseParameter.CardName, receivedCard.IsInplay); if (!_isReserved && !(isCemetary || isNecromanceZone)) { battlePlayer.BattleView.HandView.ReplaceCardInViewWithoutRearrange(dummyCardView, receivedCard.BattleCardView); receivedCard.BattleCardView.GameObject.SetActive(value: true); receivedCard.BattleCardView.GameObject.GetComponent().CardNormalTemp.gameObject.SetActive(value: true); } } else if (isOpenDrawSkill || (_isOpen && isCardInDeck)) { InheritedAddParameter(cardBeforeChangeParameter); receivedCard.BattleCardView.UpdateParameterView(cardBeforeChangeParameter.Atk, cardBeforeChangeParameter.Life, (receivedCard.FixedUseCost != -1) ? receivedCard.FixedUseCost : cost, receivedCard.BaseParameter.CardName, receivedCard.IsInplay, isRecovery: false, useNormalCost: true); } if (ToolboxGame.RealTimeNetworkAgent != null && !_networkBattleMgr.IsBattleEnd) { ToolboxGame.RealTimeNetworkAgent.StartCoroutine(WaitToReady(receivedCard, dummyCardView.GameObject)); } else { Object.DestroyImmediate(dummyCardView.GameObject); } }); } private IEnumerator WaitToReady(BattleCardBase receivedCard, GameObject dummyGameObject) { do { yield return null; } while (!CheckReadyFinishCard(receivedCard)); Object.DestroyImmediate(dummyGameObject); } private bool CheckReadyFinishCard(BattleCardBase receivedCard) { if (receivedCard != null && receivedCard.IsTokenLoad) { return true; } return false; } protected void RemoveOpenCardRemoveAfterActionSkills(BattleCardBase receivedCard) { if (_fromState != NetworkBattleDefine.NetworkCardPlaceState.Hand || (!_toStateList.Contains(NetworkBattleDefine.NetworkCardPlaceState.Hand) && !_toStateList.Contains(NetworkBattleDefine.NetworkCardPlaceState.Field) && !_toStateList.Contains(NetworkBattleDefine.NetworkCardPlaceState.Banish)) || _originalDummyCard.CardId != receivedCard.CardId) { return; } IEnumerable source = receivedCard.Skills.Where((SkillBase s) => s.PreprocessList.Any((SkillPreprocessBase p) => p is SkillPreprocessOpenCard) && s.PreprocessList.Any((SkillPreprocessBase p) => p is SkillPreprocessRemoveAfterAction) && s.OnSelfTurnEndStart != 0); if (source.Count() <= 0) { return; } List originalDummyCardSkillIndexList = new List(); IEnumerable source2 = _originalDummyCard.Skills.Where((SkillBase s) => s.PreprocessList.Any((SkillPreprocessBase p) => p is SkillPreprocessOpenCard) && s.PreprocessList.Any((SkillPreprocessBase p) => p is SkillPreprocessRemoveAfterAction) && s.OnSelfTurnEndStart != 0); for (int num = 0; num < source2.Count(); num++) { originalDummyCardSkillIndexList.Add(_originalDummyCard.NormalSkillBuildInfos.IndexOf(source2.ElementAt(num).SkillPrm.buildInfo)); } List list = source.Where((SkillBase s) => !originalDummyCardSkillIndexList.Contains(receivedCard.Skills.IndexOf(s))).ToList(); for (int num2 = 0; num2 < list.Count(); num2++) { receivedCard.NormalSkills.Remove(list[num2]); } } }