Files
SVSimServer/SVSim.BattleEngine/Engine/RegisterCostChangeCard.cs
gamer147 824309ec44 feat(battle-engine): close the AI-simulation subsystem (verbatim)
Copied the 89 uncopied AI*SimulationUtility/extension files defining the
AIVirtualCard/AIVirtualField extension methods; the compile loop then auto-closed
the revealed type deps (~3049 files total, drift-clean). 10.0k -> 62 errors.
2026-06-05 20:30:59 -04:00

187 lines
6.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using Wizard.Battle.View.Vfx;
public class RegisterCostChangeCard : RegisterAlter
{
public enum CostChangeType
{
addCost,
setCost,
halfCost,
halfCostRoundDown
}
public int CostVal;
private Dictionary<string, object> _data;
private RegisterActionManager _registerActionManager;
private BattleManagerBase _mgr;
private ICardCostModifier _costModifier;
private const string FOR_HAND_RESIDENT = "forHandResident";
public CostChangeType CostChangeTypeVal { get; private set; }
public int Index => base.IndexList[0];
public RegisterCostChangeCard(BattleManagerBase mgr, RegisterActionManager registerActionManager, ICardCostModifier costModifier, List<BattleCardBase> cards, SkillBase skill, SkillConditionCheckerOption option, RegisterTargetBase registerTarget = null, bool isNotCheckCard = false)
: base(cards, skill)
{
RegisterCostChangeCard registerCostChangeCard = this;
if (!isNotCheckCard && cards == null && skill == null)
{
return;
}
base.IndexList = new List<int>();
if (cards == null)
{
base.IndexList.Add(-1);
}
else
{
cards.ForEach(delegate(BattleCardBase x)
{
if (!registerCostChangeCard.IndexList.Any((int z) => z == x.Index))
{
registerCostChangeCard.IndexList.Add(x.Index);
}
});
if (cards.Count() == 0)
{
IsSelf = false;
}
else
{
IsSelf = cards.First().IsPlayer;
}
}
if (isNotCheckCard)
{
IsSelf = false;
}
_registerActionManager = registerActionManager;
_mgr = mgr;
_costModifier = costModifier;
if (_costModifier != null)
{
SettingCostChangeType(_costModifier);
}
if (registerTarget != null)
{
registerTarget.SettingGroupIndexMsg(this);
}
if (_data == null)
{
_data = base.MakeSendData();
_data.Add(ActionBaseParameter.type.ToString(), ActionBaseParameter.add.ToString());
switch (CostChangeTypeVal)
{
case CostChangeType.addCost:
_data.Add(ActionBaseParameter.cost.ToString(), "a" + CostVal);
break;
case CostChangeType.setCost:
_data.Add(ActionBaseParameter.cost.ToString(), "s" + CostVal);
break;
case CostChangeType.halfCost:
_data.Add(ActionBaseParameter.cost.ToString(), "d" + CostVal);
break;
case CostChangeType.halfCostRoundDown:
_data.Add(ActionBaseParameter.cost.ToString(), "D" + CostVal);
break;
}
if (registerActionManager.RegisterDataList.Any((RegisterActionBase r) => r is RegisterMetamorphoseData))
{
List<RegisterActionBase> registerMetamorphoses = registerActionManager.RegisterDataList.Where((RegisterActionBase r) => r is RegisterMetamorphoseData).ToList();
int i;
for (i = 0; i < registerMetamorphoses.Count(); i++)
{
if (base.IndexList.Any((int index) => index != -1 && index == (registerMetamorphoses[i] as RegisterMetamorphoseData).Index) && IsSelf == registerMetamorphoses[i].IsSelf)
{
_data.Add(ActionBaseParameter.isForce.ToString(), 1);
break;
}
}
}
_data = MakeAttachTarget(_data);
Dictionary<string, object> data = new Dictionary<string, object>(_data);
Func<SkillBase, List<BattleCardBase>, SkillConditionCheckerOption, SkillProcessor, VfxBase> value = delegate(SkillBase _skill, List<BattleCardBase> _cards, SkillConditionCheckerOption _checkerOption, SkillProcessor _skillProcessor)
{
bool flag = _skill.SkillPrm.ownerCard.IsPlayer;
if (_skill.ApplyBattlePlayerFilter is OpponentBattlePlayerFilter)
{
flag = !flag;
}
RegisterFilter registerFilter = new RegisterFilter(registerCostChangeCard._registerActionManager, registerCostChangeCard._mgr, flag, _skill, _cards, isStop: true, option);
registerCostChangeCard._registerActionManager.Add(registerFilter);
RegisterCostChangeCard registerCostChangeCard2 = new RegisterCostChangeCard(registerCostChangeCard._mgr, registerCostChangeCard._registerActionManager, registerCostChangeCard._costModifier, null, null, option);
List<string> groupMsgList = registerFilter.GetGroupMsgList();
if (registerTarget != null && groupMsgList != null && groupMsgList.Count > 0)
{
data[NetworkBattleDefine.NetworkParameterNames[NetworkBattleDefine.NetworkParameter.idx]] = groupMsgList[0];
}
registerCostChangeCard2.SetSendData(data);
registerCostChangeCard2.SetCostChangeType(ActionBaseParameter.del.ToString());
registerCostChangeCard._registerActionManager.Add(registerCostChangeCard2);
return NullVfx.GetInstance();
};
_skill.OnSkillStopEnd -= value;
_skill.OnSkillStopEnd += value;
_skill.OnSkillStopEnd -= ((NetworkBattleManagerBase)_mgr)._networkBattleSetupCardEventBase.Event_RegisterFilterSkillEnd;
_skill.OnSkillStopEnd += ((NetworkBattleManagerBase)_mgr)._networkBattleSetupCardEventBase.Event_RegisterFilterSkillEnd;
}
if (skill is NetworkSkill_cost_change { IsForHandResident: not false })
{
_data.Add("forHandResident", 1);
}
}
public void SetCostChangeType(string type)
{
_data[ActionBaseParameter.type.ToString()] = type;
}
public override Dictionary<string, object> MakeSendData()
{
return _data;
}
private void SettingCostChangeType(ICardCostModifier costModifiers)
{
if (costModifiers is CostAddModifier)
{
CostAddModifier costAddModifier = costModifiers as CostAddModifier;
if (costAddModifier.Cost != 0)
{
CostVal = costAddModifier.Cost;
CostChangeTypeVal = CostChangeType.addCost;
}
}
else if (costModifiers is CostSetModifier)
{
int cost = (costModifiers as CostSetModifier).Cost;
CostVal = cost;
CostChangeTypeVal = CostChangeType.setCost;
}
else if (costModifiers is CostHalfRoundUpModifier)
{
CostVal = 2;
CostChangeTypeVal = CostChangeType.halfCost;
}
else if (costModifiers is CostHalfRoundDownModifier)
{
CostVal = 2;
CostChangeTypeVal = CostChangeType.halfCostRoundDown;
}
}
private void SetSendData(Dictionary<string, object> data)
{
_data = data;
}
}