Files
SVSimServer/SVSim.BattleEngine/Engine/NetworkSkill_cost_change.cs
gamer147 957af3d1ec feat(battle-engine): full Unity/VFX/god-object shims + expanded copy closure (2570 files)
Authored Unity primitive/object-model shim, VFX layer (control-flow-preserving, InstantVfx never invokes its action -- headless suppression), god-object stubs (GameMgr/EffectMgr/UIManager with faithfully-extracted nested enums), View/UI/Touch tree, LitJson+BetterList+Tuple copied, third-party stubs. Discovered Roslyn header-error masking: fixing class-header type errors unmasks body references, so the true copy closure is ~2570 files (was 782 under masking). Errors: masked-25720 -> 268; our shim files compile clean. Remaining: ~50 residual shim/external types, 24 NGUI UI-base overrides, static-type fixes, plus likely 1-2 more unmask waves.
2026-06-05 17:22:20 -04:00

263 lines
12 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using Wizard.Battle.View.Vfx;
public class NetworkSkill_cost_change : Skill_cost_change
{
private bool isCall;
public bool IsForHandResident { get; private set; }
public NetworkSkill_cost_change(NetworkBattleManagerBase battleManager, SkillParameter skillPrm, string option)
: base(skillPrm, option)
{
NetworkSkill_cost_change networkSkill_cost_change = this;
base.OnSkillEnd += delegate
{
networkSkill_cost_change.isCall = false;
return NullVfx.GetInstance();
};
base.OnSkillStart += delegate(SkillBase skill, List<BattleCardBase> targetCards, SkillConditionCheckerOption checkerOption)
{
if (!networkSkill_cost_change.isCall && networkSkill_cost_change.IsSend(networkSkill_cost_change) && !(skill.ApplyBattlePlayerFilter is BothBattlePlayerFilter) && !skill.IsUserSelectType && battleManager._networkBattleSetupCardEventBase.IsSettingUnapprovedCard(networkSkill_cost_change) && ((networkSkill_cost_change.SkillPrm.ownerCard.IsPlayer && networkSkill_cost_change.ApplyBattlePlayerFilter is OpponentBattlePlayerFilter) || (!networkSkill_cost_change.SkillPrm.ownerCard.IsPlayer && networkSkill_cost_change.ApplyBattlePlayerFilter is SelfBattlePlayerFilter)) && networkSkill_cost_change.IsPrivate())
{
networkSkill_cost_change.SettingCostChangeData();
ICardCostModifier modifire = networkSkill_cost_change.CreateCostModifier();
networkSkill_cost_change.PrivateTargetRegister(battleManager, modifire, targetCards);
networkSkill_cost_change.isCall = true;
}
};
OnAccumulationCostChange = (Action<BattleCardBase, List<BattleCardBase>, ICardCostModifier>)Delegate.Combine(OnAccumulationCostChange, (Action<BattleCardBase, List<BattleCardBase>, ICardCostModifier>)delegate(BattleCardBase ownerCard, List<BattleCardBase> targetCards, ICardCostModifier modifier)
{
List<BattleCardBase> list = targetCards.Where((BattleCardBase c) => c.IsInHand || c.IsInDeck).ToList();
bool flag = list.Count == 1 && list.Any((BattleCardBase c) => c == ownerCard) && networkSkill_cost_change.OnWhenFusion == 0 && networkSkill_cost_change.OnWhenReturnStart == 0 && !networkSkill_cost_change.IsOpen();
if ((!networkSkill_cost_change.isCall || networkSkill_cost_change.HasEachTargetOption()) && networkSkill_cost_change.IsSend(networkSkill_cost_change) && list != null && list.Count > 0 && !flag)
{
List<BattleCardBase> list2 = list.Where((BattleCardBase c) => c.IsPlayer).ToList();
List<BattleCardBase> list3 = list.Where((BattleCardBase c) => !c.IsPlayer).ToList();
bool flag2 = networkSkill_cost_change.IsPrivate();
if (list2.Count > 0)
{
networkSkill_cost_change.PublicTargetRegister(battleManager, modifier, list2);
}
if (list3.Count > 0)
{
if (flag2)
{
networkSkill_cost_change.PrivateTargetRegister(battleManager, modifier, list3);
}
else
{
networkSkill_cost_change.PublicTargetRegister(battleManager, modifier, list3);
}
}
networkSkill_cost_change.isCall = true;
}
});
}
private bool IsPrivate()
{
if (NetworkBattleGenericTool.IsNeedUnapprovedListSkill(this) || RegisterFilter.IsFilterCard(this))
{
return !IsOpen();
}
return false;
}
public override void SkillCreateEnd()
{
base.SkillCreateEnd();
if (base.SkillPrm.ownerCard.IsPlayer)
{
if (NetworkBattleGenericTool.IsNeedUnapprovedListSkill(this))
{
NetworkExecutionInfoCreator networkExecutionInfoCreator = base._executionInfoCreator as NetworkExecutionInfoCreator;
if (base.IsWhenDestroySkill || OnWhenReturnStart != 0)
{
networkExecutionInfoCreator.SetPlaySkill();
base.OnSkillEnd += PublicAnytimeRandomTargetRegister;
isCall = true;
}
else
{
base.OnSkillEnd += NetworkBattleGenericTool.Event_SetupPlayerUnapprovedAddEvent;
}
}
}
else if (NetworkBattleGenericTool.IsNeedUnapprovedListSkill(this))
{
NetworkExecutionInfoCreator networkExecutionInfoCreator2 = base._executionInfoCreator as NetworkExecutionInfoCreator;
if (base.IsWhenDestroySkill || OnWhenReturnStart != 0)
{
networkExecutionInfoCreator2.SetPlaySkill();
base.OnSkillEnd += PrivateAnytimeRandomTargetRegister;
isCall = true;
}
networkExecutionInfoCreator2.SetUnapproved();
}
}
public void CheckForHandResident(List<SkillBase> skillList)
{
IsForHandResident = false;
if (base.OptionValue.HasInfoByName(SkillFilterCreator.ContentKeyword.set) || base.OptionValue.HasInfoByName(SkillFilterCreator.ContentKeyword.random_set_range))
{
if (base.ApplyingTargetFilter is SkillTargetHandFilter && base.ApplySelectFilter is SkillSelectAllFilter && OnSelfTurnStartStart == 1)
{
IsForHandResident = true;
}
else if (base.ApplyingTargetFilter is SkillTargetSkillDrewCardFilter && skillList.Any((SkillBase s) => s.SkillTimingText == SkillTimingText && s.ApplyingTargetFilter is SkillTargetDestroyedThisTurnCardListFilter))
{
IsForHandResident = true;
}
else if (skillList.Any((SkillBase s) => s.SkillTimingText == SkillTimingText && s is Skill_draw) && !base.PreprocessList.Any((SkillPreprocessBase p) => p is SkillPreprocessTurnEndStop))
{
IsForHandResident = true;
}
}
}
private VfxBase PublicAnytimeRandomTargetRegister(SkillBase skillBase, List<BattleCardBase> cards, SkillConditionCheckerOption checkerOption, SkillProcessor skillProcessor)
{
if (cards != null && cards.Count() >= 1)
{
PublicTargetRegister(BattleManagerBase.GetIns() as NetworkBattleManagerBase, CreateCostModifier(), cards);
return NetworkBattleGenericTool.Event_SetupPlayerUnapprovedAddEvent(skillBase, cards, checkerOption, skillProcessor);
}
if (cards == null || cards.Count() == 0)
{
(BattleManagerBase.GetIns() as NetworkBattleManagerBase).StableRandomDouble();
}
return NullVfx.GetInstance();
}
private VfxBase PrivateAnytimeRandomTargetRegister(SkillBase skillBase, IEnumerable<BattleCardBase> cards, SkillConditionCheckerOption checkerOption, SkillProcessor skillProcessor)
{
RegisterLotCardBase registerLotCardBase = null;
NetworkBattleManagerBase networkBattleManagerBase = BattleManagerBase.GetIns() as NetworkBattleManagerBase;
if (skillBase.SkillPrm.ownerCard.SelfBattlePlayer.IsSelfTurn && cards != null && cards.Count() >= 1)
{
registerLotCardBase = NetworkBattleGenericTool.MakeRegisterLotAndRandomAdvance(skillBase, cards, checkerOption);
}
else
{
NetworkBattleDefine.NetworkCardPlaceState networkCardPlaceState = NetworkBattleDefine.NetworkCardPlaceState.None;
if (skillBase.ApplyingTargetFilter is SkillTargetHandFilter || skillBase.ApplyingTargetFilter is SkillTargetHandOtherSelfFilter)
{
networkCardPlaceState = NetworkBattleDefine.NetworkCardPlaceState.Hand;
}
else if (skillBase.ApplyingTargetFilter is SkillTargetDeckFilter)
{
networkCardPlaceState = NetworkBattleDefine.NetworkCardPlaceState.Deck;
}
double num = 0.0;
registerLotCardBase = new RegisterLotCardBase(rand: (cards == null || cards.Count() < 1) ? networkBattleManagerBase.StableRandomDouble() : networkBattleManagerBase.randomResult, registerActionManager: networkBattleManagerBase.RegisterActionManager, mgr: networkBattleManagerBase, isplayer: false, from: networkCardPlaceState, targetIndex: -1, skill: this);
registerLotCardBase.SettingTargetStatusToSearchSkill(networkBattleManagerBase, skillBase);
networkBattleManagerBase.RegisterActionManager.Add(registerLotCardBase);
}
SettingCostChangeData();
RegisterCostChangeCard data = new RegisterCostChangeCard(networkBattleManagerBase, networkBattleManagerBase.RegisterActionManager, CreateCostModifier(), null, this, checkerOption, registerLotCardBase, isNotCheckCard: true);
networkBattleManagerBase.RegisterActionManager.Add(data);
return NullVfx.GetInstance();
}
private void PrivateTargetRegister(NetworkBattleManagerBase battleManager, ICardCostModifier modifire, List<BattleCardBase> targets)
{
bool flag = base.ApplyBattlePlayerFilter is SelfBattlePlayerFilter;
if (!base.SkillPrm.ownerCard.IsPlayer)
{
flag = !flag;
}
RegisterTargetBase registerTargetBase = null;
SkillConditionCheckerOption skillConditionCheckerOption = new SkillConditionCheckerOption();
if (NetworkBattleGenericTool.IsNeedUnapprovedListSkill(this))
{
if (targets.Count == 0)
{
return;
}
battleManager._networkBattleSetupCardEventBase.SetSkillTargetsConditionCheckUList(this, targets, skillConditionCheckerOption);
registerTargetBase = NetworkBattleGenericTool.MakeRegisterLotAndRandomAdvance(this, targets, skillConditionCheckerOption);
}
else if (RegisterFilter.IsFilterCard(this))
{
if ((base.ApplyingTargetFilter is SkillTargetSkillUpdateDeckCardFilter && targets.Count == 0) || (base.ApplyingTargetFilter is SkillTargetLoadTargetFilter && OnBeforeAttackStart != 0 && targets.Count((BattleCardBase c) => !c.IsInCemetery) == 0))
{
return;
}
battleManager._networkBattleSetupCardEventBase.SetSkillTargetsCondition(this, skillConditionCheckerOption);
registerTargetBase = new RegisterFilter(battleManager.RegisterActionManager, battleManager, flag, this, targets, isStop: false, skillConditionCheckerOption);
battleManager.RegisterActionManager.Add(registerTargetBase);
}
RegisterCostChangeCard register = new RegisterCostChangeCard(battleManager, battleManager.RegisterActionManager, modifire, targets, this, skillConditionCheckerOption, registerTargetBase);
battleManager._networkBattleSetupCardEventBase.AddRegisterActionManager(register);
}
private void PublicTargetRegister(NetworkBattleManagerBase battleManager, ICardCostModifier modifire, List<BattleCardBase> targets)
{
SkillConditionCheckerOption option = new SkillConditionCheckerOption();
battleManager._networkBattleSetupCardEventBase.SetSkillTargetsCondition(this, option);
RegisterCostChangeCard register = new RegisterCostChangeCard(battleManager, battleManager.RegisterActionManager, modifire, targets, this, option);
battleManager._networkBattleSetupCardEventBase.AddRegisterActionManager(register);
}
private bool IsSend(SkillBase skill)
{
if (((skill.SkillPrm.ownerCard.FinalMetamorphoseCard != null) ? skill.SkillPrm.ownerCard.FinalMetamorphoseCard : skill.SkillPrm.ownerCard).IsInHand && skill.OnWhenReturnStart == 0 && skill.OnWhenFusion == 0 && !IsOpen())
{
return false;
}
return true;
}
public override void SetEventAfterReplace(BattleCardBase card, BuffInfo buff)
{
card.OnResetCardParameter += delegate
{
card.RemoveBuffInfo(buff);
};
}
protected override bool IsUnconditionalCostChange()
{
BattleCardBase ownerCard = base.SkillPrm.ownerCard;
GameMgr ins = GameMgr.GetIns();
if (!ownerCard.IsPlayer && !ins.IsAdminWatch && !GameMgr.GetIns().IsReplayBattle && RegisterFilter.IsFilterPreprocessCondition(this))
{
return !IsRightSkillPreprocessConditionCheck();
}
return false;
}
private bool IsRightSkillPreprocessConditionCheck()
{
if (!(base.PreprocessList.FirstOrDefault((SkillPreprocessBase p) => p is SkillPreprocessConditionCheck) is SkillPreprocessConditionCheck skillPreprocessConditionCheck))
{
return true;
}
return skillPreprocessConditionCheck.GetFilter().VariableCompareFilter.All((SkillVariableComareFilter s) => s.Filtering(base.OptionValue));
}
public override VfxWithLoading Start(CallParameter parameter)
{
int count = base.CostModifierTypeList.Count;
VfxWithLoading result = base.Start(parameter);
List<ICardCostModifier> range = base.CostModifierTypeList.GetRange(count, base.CostModifierTypeList.Count - count);
bool isOpenCard = base.SkillPrm.ownerCard.IsPlayer && base.PreprocessList.FirstOrDefault((SkillPreprocessBase p) => p is SkillPreprocessOpenCard) != null && base.ApplyingTargetFilter is SkillTargetHandSelfFilter;
base.SkillPrm.selfBattlePlayer.CallOnCostChange(base.SkillPrm.ownerCard, _targets, (from c in range
where c is CostAddModifier
select c.Cost).ToList(), (from c in range
where c is CostSetModifier
select c.Cost).ToList(), _isCostUpList, IsHalfRoundUpCostSkill(SkillFilterCreator.ContentKeyword.add), OnWhenSpellChargeStart != 0, isOpenCard);
return result;
}
public override VfxWithLoading Stop(SkillProcessor skillProcessor)
{
base.SkillPrm.ownerCard.SelfBattlePlayer.CallOnRemoveCostChange(buffInfoContainer, OnWhenSpellChargeStart != 0, _addValue == int.MinValue || _addValue <= 0);
return base.Stop(skillProcessor);
}
}