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.
120 lines
4.3 KiB
C#
120 lines
4.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Wizard;
|
|
using Wizard.Battle.Card;
|
|
using Wizard.Battle.View.Vfx;
|
|
|
|
public class SkillPreprocessRemoveAfterAction : SkillPreprocessBase
|
|
{
|
|
public int Count { get; private set; } = 1;
|
|
|
|
public SkillPreprocessRemoveAfterAction(string args, SkillBase skill)
|
|
{
|
|
if (args.Length < 2 || args.First() != '(' || args.Last() != ')')
|
|
{
|
|
return;
|
|
}
|
|
args = args.Substring(1, args.Length - 2);
|
|
string[] array = args.Split(':');
|
|
for (int i = 0; i < array.Length; i++)
|
|
{
|
|
string[] array2 = array[i].Split('=');
|
|
switch (array2[0])
|
|
{
|
|
case "skill_id":
|
|
base.BanId = array2[1];
|
|
break;
|
|
case "count":
|
|
Count = int.Parse(array2[1]);
|
|
break;
|
|
case "is_individual":
|
|
base.BanId = (long.Parse(base.BanId) + skill.IndividualId).ToString();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public override bool IsRight(BattlePlayerReadOnlyInfoPair playerInfoPair, SkillConditionCheckerOption option, bool PreexecutionCheck = false)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public override VfxBase Start(BattlePlayerPair playerPair, SkillBase skill, SkillProcessor skillProcessor, SkillOptionValue optionValue, SkillConditionCheckerOption checkerOption)
|
|
{
|
|
SetUp(skill);
|
|
return NullVfx.GetInstance();
|
|
}
|
|
|
|
public override void Clone(SkillPreprocessBase source, SkillBase skill)
|
|
{
|
|
SetUp(skill);
|
|
}
|
|
|
|
private void SetUp(SkillBase skill)
|
|
{
|
|
BattleCardBase card = skill.SkillPrm.ownerCard;
|
|
List<SkillBase> sameBanIdSkills = new List<SkillBase>();
|
|
if (base.BanId != string.Empty)
|
|
{
|
|
sameBanIdSkills = card.NormalSkills.Where((SkillBase s) => skill != s && s.PreprocessList.Any((SkillPreprocessBase p) => p is SkillPreprocessRemoveAfterAction && p.BanId == base.BanId)).ToList();
|
|
sameBanIdSkills.AddRange(card.EvolutionSkills.Where((SkillBase s) => skill != s && s.PreprocessList.Any((SkillPreprocessBase p) => p is SkillPreprocessRemoveAfterAction && p.BanId == base.BanId)).ToList());
|
|
IEnumerable<SkillPreprocessBase> source = sameBanIdSkills.SelectMany((SkillBase s) => s.PreprocessList.Where((SkillPreprocessBase p) => p is SkillPreprocessRemoveAfterAction && p.BanId == base.BanId));
|
|
for (int num = 0; num < source.Count(); num++)
|
|
{
|
|
(source.ElementAt(num) as SkillPreprocessRemoveAfterAction).DecrementCount();
|
|
}
|
|
}
|
|
SkillBase skillBase = card.NormalSkills.FirstOrDefault((SkillBase s) => skill != s && s.SkillPrm.buildInfo._previousSkillOwner != null && skill.SkillPrm.buildInfo == s.SkillPrm.buildInfo);
|
|
if (skillBase != null)
|
|
{
|
|
sameBanIdSkills.Add(skillBase);
|
|
}
|
|
SkillBase skillBase2 = card.EvolutionSkills.FirstOrDefault((SkillBase s) => skill != s && s.SkillPrm.buildInfo._previousSkillOwner != null && skill.SkillPrm.buildInfo == s.SkillPrm.buildInfo);
|
|
if (skillBase2 != null)
|
|
{
|
|
sameBanIdSkills.Add(skillBase2);
|
|
}
|
|
Func<SkillBase, List<BattleCardBase>, SkillConditionCheckerOption, SkillProcessor, VfxBase> callStopOneTime = null;
|
|
callStopOneTime = delegate(SkillBase _skill, List<BattleCardBase> cards, SkillConditionCheckerOption _checkerOption, SkillProcessor skillProcessorOneTime)
|
|
{
|
|
DecrementCount();
|
|
skill.OnSkillEnd -= callStopOneTime;
|
|
if (IsEnd())
|
|
{
|
|
card.NormalSkills.Remove(skill);
|
|
card.EvolutionSkills.Remove(skill);
|
|
for (int i = 0; i < sameBanIdSkills.Count(); i++)
|
|
{
|
|
SkillBase removeSkill = sameBanIdSkills.ElementAt(i);
|
|
card.NormalSkills.Remove(removeSkill);
|
|
card.EvolutionSkills.Remove(removeSkill);
|
|
if (removeSkill.GetAttachSkill != null && !(card is IVirtualBattleCard))
|
|
{
|
|
StopSkill(removeSkill.GetAttachSkill, skillProcessorOneTime);
|
|
}
|
|
card.RemoveBuffInfo((BuffInfo b) => b.IsCopied && b.IsBuffGaveSkill(removeSkill));
|
|
}
|
|
SkillBase originSkill = skill.GetAttachSkill;
|
|
if (originSkill != null && !(card is IVirtualBattleCard) && !card.Skills.Any((SkillBase s) => s.GetAttachSkill != null && s.GetAttachSkill.IsSameSkill(originSkill)))
|
|
{
|
|
StopSkill(skill.GetAttachSkill, skillProcessorOneTime);
|
|
}
|
|
card.RemoveBuffInfo((BuffInfo b) => b.IsCopied && b.IsBuffGaveSkill(skill));
|
|
}
|
|
return card.BattleCardView.InitializeBattleCardIcon(card, card.Skills);
|
|
};
|
|
skill.OnSkillEnd += callStopOneTime;
|
|
}
|
|
|
|
public void DecrementCount()
|
|
{
|
|
Count--;
|
|
}
|
|
|
|
public bool IsEnd()
|
|
{
|
|
return Count <= 0;
|
|
}
|
|
}
|