Decompiled source of Genshin Impact Mod v0.2.2
GenshinMod.dll
Decompiled 11 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using DigitalRuby.LightningBolt; using DiskCardGame; using HarmonyLib; using Infiniscryption.PackManagement; using InscryptionAPI.Ascension; using InscryptionAPI.Card; using InscryptionAPI.Guid; using InscryptionAPI.Helpers; using InscryptionAPI.Helpers.Extensions; using InscryptionAPI.Sound; using Microsoft.CodeAnalysis; using Pixelplacement; using SpritesheetAPI; using SpritesheetAPI.JSONData; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyCompany("GenshinMod")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("GenshinMod' cards")] [assembly: AssemblyFileVersion("0.2.1.0")] [assembly: AssemblyInformationalVersion("0.2.1")] [assembly: AssemblyProduct("GenshinMod")] [assembly: AssemblyTitle("GenshinMod")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.2.1.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace GenshinMod { [BepInPlugin("pdd.Genshin", "GenshinMod", "0.2.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { public class LogoAppearanceBehaviour : CardAppearanceBehaviour { public override void ApplyAppearance() { Texture2D imageAsTexture = TextureHelper.GetImageAsTexture("logo.png", (FilterMode)0); ((CardAppearanceBehaviour)this).Card.Info.TempDecals.Clear(); ((CardAppearanceBehaviour)this).Card.Info.TempDecals.Add((Texture)(object)imageAsTexture); ((CardAppearanceBehaviour)this).Card.RenderInfo.forceEmissivePortrait = true; } } private Harmony harmony = new Harmony("pdd.Genshin"); private const string PluginGuid = "pdd.Genshin"; private const string PluginName = "GenshinMod"; private const string PluginVersion = "0.2.1"; private const string PluginPrefix = "GenshinMod"; public static string Directory; public static Tribe wu_tribe; public static int randomSeed; public static float StartingFixedDeltaTime; public static List<Sprite> art_sprites; public static readonly Appearance AP = CardAppearanceBehaviourManager.Add("pdd.Genshin", "Spritesheet Animator", typeof(SpritesheetBehaviour)).Id; public static readonly Appearance LogoAppearance = CardAppearanceBehaviourManager.Add("pdd.Genshin", "LogoAppearance", typeof(LogoAppearanceBehaviour)).Id; private void AddGrass_seeds() { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Expected I4, but got Unknown //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected I4, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Expected I4, but got Unknown CardInfo val = CardExtensions.AddAppearances(CardExtensions.AddAbilities(CardExtensions.SetCost(CardManager.New("GenshinMod", "Grass_seeds", "草种子", 0, 1, "小心爆炸"), (int?)0, (int?)0, (int?)0, (List<GemType>)null), (Ability[])(object)new Ability[1] { (Ability)(int)Grassseeds.ability }), (Appearance[])(object)new Appearance[2] { (Appearance)(int)LogoAppearance, (Appearance)(int)GuidManager.GetEnumValue<Appearance>("spapi.inscryption.coloredportraits", "ColoredPortrait") }); CardManager.Add("GenshinMod", val); } private void AddAymxzs() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "Aymxzs", "雷电将军汇聚万千真言,竭尽诸愿百眼之愿力,斩出粉碎一切诅咒的梦想一刀,造成雷元素范围伤害;并在接下来的一段时间内,为自身附加雷元素附魔", typeof(Aymxzs), (Texture)(object)Asset.LoadIcon("Ay_mxzs"))); val.canStack = false; val.passive = false; val.activated = true; val.opponentUsable = false; val.powerLevel = 5; val.rulebookName = "奥义·梦想真说"; Aymxzs.ability = val.ability; } private void Addleishen() { //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Expected I4, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Expected I4, but got Unknown //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Expected I4, but got Unknown CardInfo val = CardExtensions.AddAppearances(CardExtensions.AddMetaCategories(CardExtensions.AddDecal(CardExtensions.AddAbilities(CardExtensions.SetCost(CardExtensions.SetPixelPortrait(CardExtensions.SetPortrait(CardManager.New("GenshinMod", "leishen", "雷电将军", 1, 2, "那里很早就有了风雨和雷电,有了天光与大海……有了“雷电将军”。"), Asset.LoadPortrait("leishen"), (FilterMode?)null), Asset.Loadpixel("leishen"), (FilterMode?)null), (int?)1, (int?)0, (int?)0, (List<GemType>)null), (Ability[])(object)new Ability[2] { (Ability)(int)Sbeyky1.ability, (Ability)(int)Aymxzs.ability }), (Texture[])(object)new Texture[1] { (Texture)Asset.LoadPortrait("logo") }), (CardMetaCategory[])(object)new CardMetaCategory[1] { (CardMetaCategory)3 }), (Appearance[])(object)new Appearance[1] { (Appearance)(int)GuidManager.GetEnumValue<Appearance>("spapi.inscryption.coloredportraits", "ColoredPortrait") }); CardManager.Add("GenshinMod", val); } private void AddleishenE() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Expected I4, but got Unknown //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Expected I4, but got Unknown CardInfo val = CardExtensions.SetExtendedProperty(CardExtensions.AddAppearances(CardExtensions.SetCost(CardExtensions.SetPortrait(CardManager.New("GenshinMod", "leishenE", "", 2, 4, "那里很早就有了风雨和雷电,有了天光与大海……有了“雷电将军”。"), Asset.LoadPortrait("leishen"), (FilterMode?)null), (int?)0, (int?)0, (int?)0, (List<GemType>)null), (Appearance[])(object)new Appearance[2] { (Appearance)(int)GuidManager.GetEnumValue<Appearance>("spapi.inscryption.coloredportraits", "ColoredPortrait"), (Appearance)(int)GuidManager.GetEnumValue<Appearance>("spapi.inscryption.configemissions", "ConfigurableBackground") }), "customBackground", (object)"tm.png"); CardManager.Add("GenshinMod", val); val.hideAttackAndHealth = true; } private void AddleishenQ() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Expected I4, but got Unknown //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Expected I4, but got Unknown CardInfo val = CardExtensions.SetExtendedProperty(CardExtensions.AddAppearances(CardExtensions.SetCost(CardExtensions.SetPortrait(CardManager.New("GenshinMod", "leishenQ", "", 2, 4, "那里很早就有了风雨和雷电,有了天光与大海……有了“雷电将军”。"), Asset.LoadPortrait("leishen"), (FilterMode?)null), (int?)0, (int?)0, (int?)0, (List<GemType>)null), (Appearance[])(object)new Appearance[2] { (Appearance)(int)GuidManager.GetEnumValue<Appearance>("spapi.inscryption.coloredportraits", "ColoredPortrait"), (Appearance)(int)GuidManager.GetEnumValue<Appearance>("spapi.inscryption.configemissions", "ConfigurableBackground") }), "customBackground", (object)"tm.png"); CardManager.Add("GenshinMod", val); val.hideAttackAndHealth = true; } private void AddSbeyky1() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "Sbeyky1", "【消耗1骨头激活】雷电将军展开净土的一角,对周围的敌人造成雷元素伤害,为队伍中附近的所有角色授以雷罚恶曜之眼。", typeof(Sbeyky1), (Texture)(object)Asset.LoadIcon("Sb_eyky1"))); val.canStack = false; val.passive = false; val.activated = true; val.opponentUsable = false; val.powerLevel = 5; val.rulebookName = "神变·恶曜开眼"; Sbeyky1.ability = val.ability; } private void AddSbeyky2() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "Sbeyky2", "获授雷罚恶曜之眼的角色的攻击对敌人造成伤害时,雷罚恶曜之眼会进行协同攻击,在敌人的位置造成雷元素伤害。", typeof(Sbeyky2), (Texture)(object)Asset.LoadIcon("sb_eyky2"))); val.canStack = false; val.passive = false; val.activated = false; val.opponentUsable = true; val.powerLevel = 5; val.rulebookName = "雷罚恶曜之眼"; Sbeyky2.ability = val.ability; } private void Addxingqiu() { //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Expected I4, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Expected I4, but got Unknown //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Expected I4, but got Unknown CardInfo val = CardExtensions.AddAppearances(CardExtensions.AddMetaCategories(CardExtensions.AddDecal(CardExtensions.AddAbilities(CardExtensions.SetCost(CardExtensions.SetPixelPortrait(CardExtensions.SetPortrait(CardManager.New("GenshinMod", "xingqiu", "行秋", 1, 2, "偷得浮生半日闲"), Asset.LoadPortrait("xingqiu"), (FilterMode?)null), Asset.Loadpixel("xingqiu"), (FilterMode?)null), (int?)1, (int?)0, (int?)0, (List<GemType>)null), (Ability[])(object)new Ability[2] { (Ability)(int)xingqiu_yszj.ability, (Ability)(int)xingqiu_ysbf.ability }), (Texture[])(object)new Texture[1] { (Texture)Asset.LoadPortrait("logo") }), (CardMetaCategory[])(object)new CardMetaCategory[2] { default(CardMetaCategory), (CardMetaCategory)1 }), (Appearance[])(object)new Appearance[1] { (Appearance)(int)GuidManager.GetEnumValue<Appearance>("spapi.inscryption.coloredportraits", "ColoredPortrait") }); CardManager.Add("GenshinMod", val); } private void AddxingqiuQ() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Expected I4, but got Unknown //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Expected I4, but got Unknown CardInfo val = CardExtensions.SetExtendedProperty(CardExtensions.AddAppearances(CardExtensions.SetCost(CardExtensions.SetPortrait(CardManager.New("GenshinMod", "xingqiuQ", "", 2, 4, "行秋喵"), Asset.LoadPortrait("xingqiu"), (FilterMode?)null), (int?)0, (int?)0, (int?)0, (List<GemType>)null), (Appearance[])(object)new Appearance[2] { (Appearance)(int)GuidManager.GetEnumValue<Appearance>("spapi.inscryption.coloredportraits", "ColoredPortrait"), (Appearance)(int)GuidManager.GetEnumValue<Appearance>("spapi.inscryption.configemissions", "ConfigurableBackground") }), "customBackground", (object)"tm.png"); CardManager.Add("GenshinMod", val); val.hideAttackAndHealth = true; } private void Addxingqiu_ysbf() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "xingqiu_ysbf", "【消耗4能量激活】为自身附加【雨帘剑】", typeof(xingqiu_ysbf), (Texture)(object)Asset.LoadIcon("xingqiu_ysbf"))); val.canStack = false; val.passive = false; val.activated = true; val.opponentUsable = false; val.powerLevel = 3; val.rulebookName = "古华剑·裁雨留虹"; xingqiu_ysbf.ability = val.ability; } private void Addxingqiu_yszj() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "xingqiu_yszj", "【消耗1骨头激活】对对面的卡牌造成基于自身攻击力的水元素伤害", typeof(xingqiu_yszj), (Texture)(object)Asset.LoadIcon("xingqiu_yszj"))); val.canStack = false; val.passive = false; val.activated = true; val.opponentUsable = false; val.powerLevel = 2; val.rulebookName = "古华剑·画雨笼山"; xingqiu_yszj.ability = val.ability; } private void Addxingqiu_ysbf_ylj() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "xingqiu_ysbf_ylj", "行秋会为他与他两侧的卡牌提供1点伤害减免,并使他们在受到伤害时回复1点生命值。当其他角色发动攻击时,雨帘剑会协同友军对其目标卡牌进行攻击,造成基于自身攻击力的伤害", typeof(xingqiu_ysbf_ylj), (Texture)(object)Asset.LoadIcon("xingqiu_ysbf_ylj"))); val.canStack = false; val.passive = false; val.activated = false; val.opponentUsable = true; val.powerLevel = 2; val.rulebookName = "雨帘剑"; xingqiu_ysbf_ylj.ability = val.ability; } private void CreatePack() { PackInfo packInfo = PackManager.GetPackInfo("GenshinMod"); packInfo.Title = "原神模组"; packInfo.Description = "众所周知,你可以在各种各样的地方启动原神,哪怕这里也不例外。有bug请在QQ群或B站私信向我反馈"; packInfo.SetTexture(Asset.LoadTexture("pack")); packInfo.ValidFor.Add((PackMetacategory)0); packInfo.SplitPackByCardTemple = false; } private void Awake() { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown Directory = ((BaseUnityPlugin)this).Info.Location.Replace("GenshinMod.dll", ""); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Loaded GenshinMod!"); Harmony val = new Harmony("pdd.Genshin"); val.PatchAll(typeof(Plugin)); val.PatchAll(typeof(TakeDamagePatch)); val.PatchAll(typeof(AudioHelper)); Addfire(); Addwater(); Addice(); Addthunder(); AddSuperconducting(); Addgrass(); AddBurn(); AddGrassseeds(); AddAdddfire(); AddAdddgrass(); AddAdddice(); AddAdddrock(); AddAdddthunder(); AddAdddwater(); AddAdddwind(); AddSbeyky1(); AddSbeyky2(); AddAymxzs(); Addxingqiu_ysbf_ylj(); Addxingqiu_ysbf(); Addxingqiu_yszj(); AddGrass_seeds(); Addleishen(); AddleishenE(); AddleishenQ(); Addxingqiu(); AddxingqiuQ(); RegisterPortrait.Add("GenshinMod_leishen", "leishen_Spritesheet.png", 24, 89, false, 0f); Register.Add("GenshinMod_leishenE", "leishen_SpritesheetE.png", 33, 40, HasPause: false, 1f); Register.Add("GenshinMod_leishenQ", "leishen_SpritesheetQ.png", 12, 40, HasPause: false, 1f); RegisterPortrait.Add("GenshinMod_xingqiu", "xingqiu_Spritesheet.png", 33, 204, false, 0f); Register.Add("GenshinMod_xingqiuQ", "xingqiu_SpritesheetQ.png", 24, 53, HasPause: false, 1f); StarterDeckInfo val2 = ScriptableObject.CreateInstance<StarterDeckInfo>(); val2.title = "雷电将军"; val2.iconSprite = TextureHelper.GetImageAsSprite("deck_thunder.png", (SpriteType)9, (FilterMode)0); val2.cards = new List<CardInfo> { CardLoader.GetCardByName("GenshinMod_leishen"), CardLoader.GetCardByName("RingWorm"), CardLoader.GetCardByName("GenshinMod_xingqiu") }; StarterDeckManager.Add("pdd.Genshin", val2, 0); } public static CardModificationInfo CreateModForFreeze(PlayableCard playableCard) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Expected O, but got Unknown //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Expected O, but got Unknown int num = ((playableCard.Attack != 0) ? (-playableCard.Attack) : 0); CardModificationInfo val = new CardModificationInfo(num, 1 - playableCard.Health) { negateAbilities = new List<Ability> { (Ability)83, (Ability)13, (Ability)55 } }; if (CardExtensions.LacksAbility(playableCard, (Ability)26)) { val.abilities = new List<Ability> { (Ability)26, Ice_cling.ability }; ((Card)playableCard).Info.iceCubeParams = new IceCubeParams { creatureWithin = ((Card)playableCard).Info }; ((Card)playableCard).RenderCard(); } return val; } public static CardModificationInfo CreateModBreakFreeze(PlayableCard playableCard) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown int num = ((playableCard.Attack != 0) ? (-playableCard.Attack) : 0); CardModificationInfo result = new CardModificationInfo(num, 1 - playableCard.Health) { negateAbilities = new List<Ability> { (Ability)26 } }; ((Card)playableCard).RenderCard(); return result; } private void AddBurn() { //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "Burn", "该单位正在被灼烧,每回合扣1点血(可叠加)", typeof(Burn), (Texture)(object)Asset.LoadIcon("burn"))); val.canStack = true; val.passive = false; val.activated = false; val.opponentUsable = true; val.powerLevel = -2; val.rulebookName = "燃烧"; Burn.ability = val.ability; } private void AddAdddfire() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "Adddfire", "这张卡牌攻击时会为敌方卡牌附加火元素附着", typeof(Adddfire), (Texture)(object)Asset.LoadIcon("Addd_fire"))); val.canStack = false; val.passive = false; val.activated = false; val.opponentUsable = true; val.powerLevel = 2; val.rulebookName = "火元素附魔"; Adddfire.ability = val.ability; } private void AddAdddgrass() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "Adddgrass", "这张卡牌攻击时会为敌方卡牌附加草元素附着", typeof(Adddgrass), (Texture)(object)Asset.LoadIcon("Addd_grass"))); val.canStack = false; val.passive = false; val.activated = false; val.opponentUsable = true; val.powerLevel = 2; val.rulebookName = "草元素附魔"; Adddgrass.ability = val.ability; } private void AddAdddice() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "Adddice", "这张卡牌攻击时会为敌方卡牌附加冰元素附着", typeof(Adddice), (Texture)(object)Asset.LoadIcon("Addd_ice"))); val.canStack = false; val.passive = false; val.activated = false; val.opponentUsable = true; val.powerLevel = 2; val.rulebookName = "冰元素附魔"; Adddice.ability = val.ability; } private void AddAdddrock() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "Adddrock", "这张卡牌攻击时会为敌方卡牌附造成岩元素伤害", typeof(Adddrock), (Texture)(object)Asset.LoadIcon("Addd_rock"))); val.canStack = false; val.passive = false; val.activated = false; val.opponentUsable = true; val.powerLevel = 2; val.rulebookName = "岩元素附魔"; Adddrock.ability = val.ability; } private void AddAdddthunder() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "Adddthunder", "这张卡牌攻击时会为敌方卡牌附加雷元素附着", typeof(Adddthunder), (Texture)(object)Asset.LoadIcon("Addd_thunder"))); val.canStack = false; val.passive = false; val.activated = false; val.opponentUsable = true; val.powerLevel = 2; val.rulebookName = "雷元素附魔"; Adddthunder.ability = val.ability; } private void AddAdddwater() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "Adddwater", "这张卡牌攻击时会为敌方卡牌附加水元素附着", typeof(Adddwater), (Texture)(object)Asset.LoadIcon("Addd_water"))); val.canStack = false; val.passive = false; val.activated = false; val.opponentUsable = true; val.powerLevel = 2; val.rulebookName = "水元素附魔"; Adddwater.ability = val.ability; } private void AddAdddwind() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "Adddwind", "这张卡牌攻击时会对敌方卡牌造成风元素伤害", typeof(Adddwind), (Texture)(object)Asset.LoadIcon("Addd_wind"))); val.canStack = false; val.passive = false; val.activated = false; val.opponentUsable = true; val.powerLevel = 2; val.rulebookName = "风元素附魔"; Adddwind.ability = val.ability; } private void Addfire() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "fire", "该单位具有火元素附着,尝试让其它元素与之反应以触发强力效果,2回合后附着消失", typeof(Fire_cling), (Texture)(object)Asset.LoadIcon("fire"))); val.canStack = false; val.passive = false; val.activated = false; val.opponentUsable = true; val.powerLevel = 0; val.rulebookName = "火元素附着"; Fire_cling.ability = val.ability; } private void Addgrass() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "grass", "该单位具有草元素附着,尝试让其它元素与之反应以触发强力效果,2回合后附着消失", typeof(grass_cling), (Texture)(object)Asset.LoadIcon("grass"))); val.canStack = false; val.passive = false; val.activated = false; val.opponentUsable = true; val.powerLevel = 0; val.rulebookName = "草元素附着"; grass_cling.ability = val.ability; } private void Addice() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "ice", "该单位具有冰元素附着,尝试让其它元素与之反应以触发强力效果,2回合后附着消失", typeof(Ice_cling), (Texture)(object)Asset.LoadIcon("ice"))); val.canStack = false; val.passive = false; val.activated = false; val.opponentUsable = true; val.powerLevel = 0; val.rulebookName = "冰元素附着"; Ice_cling.ability = val.ability; } private void AddGrassseeds() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "Grassseeds", "这是个草种子", typeof(Grassseeds), (Texture)(object)Asset.LoadIcon("grassseeds"))); val.canStack = false; val.passive = false; val.activated = false; val.opponentUsable = false; val.powerLevel = 7; val.rulebookName = "草种子"; Grassseeds.ability = val.ability; } private void AddSuperconducting() { //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "Superconducting", "拥有该印记的卡牌会受到额外2点伤害", typeof(Superconducting), (Texture)(object)Asset.LoadIcon("superconducting"))); val.canStack = false; val.passive = false; val.activated = false; val.opponentUsable = true; val.powerLevel = -2; val.rulebookName = "超导"; Superconducting.ability = val.ability; } private void Addthunder() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "thunder", "该单位具有雷元素附着,尝试让其它元素与之反应以触发强力效果,2回合后附着消失", typeof(thunder_cling), (Texture)(object)Asset.LoadIcon("thunder"))); val.canStack = false; val.passive = false; val.activated = false; val.opponentUsable = true; val.powerLevel = 0; val.rulebookName = "雷元素附着"; thunder_cling.ability = val.ability; } private void Addwater() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityManager.New("pdd.Genshin", "water", "该单位具有水元素附着,尝试让其它元素与之反应以触发强力效果,2回合后附着消失", typeof(Water_cling), (Texture)(object)Asset.LoadIcon("water"))); val.canStack = false; val.passive = false; val.activated = false; val.opponentUsable = true; val.powerLevel = 0; val.rulebookName = "水元素附着"; Water_cling.ability = val.ability; } } public class Aymxzs : ActivatedAbilityBehaviour { public static Ability ability; public const string leishen_q1_SOUND = "leishen_q1"; public const string leishen_q2_SOUND = "leishen_q2"; public const string leishen_q3_SOUND = "leishen_q3"; public string leishen_q_SOUND; public int a; public override Ability Ability => ability; public override int EnergyCost => 6; public override IEnumerator Activate() { Random random = new Random(); a = random.Next(3); if (a == 0) { leishen_q_SOUND = "leishen_q1"; } if (a == 1) { leishen_q_SOUND = "leishen_q2"; } if (a == 2) { leishen_q_SOUND = "leishen_q3"; } Singleton<ViewManager>.Instance.SwitchToView((View)4, false, false); yield return (object)new WaitForSeconds(0.15f); get get2 = new get(); _ = ((AbilityBehaviour)this).Card.Slot.opposingSlot.Card; PlayableCard playableCard = ((AbilityBehaviour)this).Card; CardSlot basecardslot = ((AbilityBehaviour)this).Card.Slot; bool flag = basecardslot.Card.HasAbility(Sbeyky2.ability); yield return get2.getart(basecardslot, "GenshinMod_leishen", "GenshinMod_leishenQ", leishen_q_SOUND, 2.4f); yield return get2.getsigil(basecardslot.Card, Adddthunder.ability, "Adddthunder", "雷元素附魔", 2); if (flag) { yield return get2.getsigil(basecardslot.Card, Sbeyky2.ability, "Sbeyky2", "雷罚恶曜之眼", 2); } List<PlayableCard> cards = new List<PlayableCard>(); cards.AddRange(Singleton<BoardManager>.Instance.CardsOnBoard.FindAll((PlayableCard x) => Object.op_Implicit((Object)(object)x) != playableCard.OpponentCard && !x.Dead)); if (cards.Count > 0) { for (int i = cards.Count - 1; i >= 0; i--) { if (cards[i].OpponentCard) { yield return get2.getgetthunder(basecardslot.Card, cards[i]); if (!cards[i].Dead) { yield return get2.ShockCard(cards[i], basecardslot.Card, basecardslot.Card.Attack, 1.0); } } } } ((Card)basecardslot.Card).Anim.LightNegationEffect(); Singleton<ViewManager>.Instance.SwitchToView((View)0, false, false); Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)0; yield return (object)new WaitForSeconds(0.15f); } } public class Sbeyky1 : ActivatedAbilityBehaviour { public static Ability ability; public const string leishen_e1_SOUND = "leishen_e1"; public const string leishen_e2_SOUND = "leishen_e2"; public const string leishen_e3_SOUND = "leishen_e3"; public string leishen_e_SOUND; public int a; public override Ability Ability => ability; public override int BonesCost => 1; public override IEnumerator Activate() { Random random = new Random(); a = random.Next(3); if (a == 0) { leishen_e_SOUND = "leishen_e1"; } if (a == 1) { leishen_e_SOUND = "leishen_e2"; } if (a == 2) { leishen_e_SOUND = "leishen_e3"; } Singleton<ViewManager>.Instance.SwitchToView((View)4, false, false); yield return (object)new WaitForSeconds(0.15f); get get2 = new get(); PlayableCard card = ((AbilityBehaviour)this).Card.Slot.opposingSlot.Card; _ = ((AbilityBehaviour)this).Card; CardSlot basecardslot = ((AbilityBehaviour)this).Card.Slot; bool flag = basecardslot.Card.HasAbility(Adddthunder.ability); yield return get2.getart(basecardslot, "GenshinMod_leishen", "GenshinMod_leishenE", leishen_e_SOUND, 0.7f); yield return get2.getsigil(basecardslot.Card, Sbeyky2.ability, "Sbeyky2", "雷罚恶曜之眼", 2); if (flag) { yield return get2.getsigil(basecardslot.Card, Adddthunder.ability, "Adddthunder", "雷元素附魔", 2); } if ((Object)(object)card != (Object)null && card.Health > 0) { yield return get2.getgetthunder(basecardslot.Card, card); yield return get2.ShockCard(card, basecardslot.Card, basecardslot.Card.Attack, 0.5); yield return Singleton<ResourcesManager>.Instance.AddMaxEnergy(2); yield return Singleton<ResourcesManager>.Instance.AddEnergy(2); } else { ((Card)basecardslot.Card).Anim.LightNegationEffect(); Singleton<ViewManager>.Instance.SwitchToView((View)0, false, false); Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)0; } } } public class Sbeyky2 : AbilityBehaviour { public static Ability ability; public override Ability Ability => ability; public override bool RespondsToUpkeep(bool playerUpkeep) { return ((AbilityBehaviour)this).Card.OpponentCard != playerUpkeep; } public override IEnumerator OnUpkeep(bool playerUpkeep) { get get2 = new get(); yield return get2.removesigil(((AbilityBehaviour)this).Card, ability, "Sbeyky2", "雷罚恶曜之眼"); } public override bool RespondsToOtherCardDealtDamage(PlayableCard attacker, int amount, PlayableCard target) { return true; } public override IEnumerator OnOtherCardDealtDamage(PlayableCard attacker, int amount, PlayableCard target) { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); List<CardSlot> cardsToHelp = BoardManagerExtensions.GetSlotsCopy(Singleton<BoardManager>.Instance, !((AbilityBehaviour)this).Card.OpponentCard).FindAll((CardSlot slot) => (Object)(object)slot.Card != (Object)null); cardsToHelp.RemoveAll((CardSlot x) => (Object)(object)x.Card == (Object)(object)((AbilityBehaviour)this).Card); CardSlot slotSaved = ((AbilityBehaviour)this).Card.slot; foreach (CardSlot slot2 in cardsToHelp) { if ((Object)(object)slot2 != (Object)null && (Object)(object)slot2.Card != (Object)null && (Object)(object)slot2.Card == (Object)(object)attacker && !target.Dead && !target.InOpponentQueue) { get get2 = new get(); yield return get2.getgetthunder(((AbilityBehaviour)this).Card, target); yield return (object)new WaitForSeconds(0.1f); yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); ((Card)((AbilityBehaviour)this).Card).Anim.StrongNegationEffect(); yield return ((AbilityBehaviour)this).LearnAbility(0.4f); if (!target.Dead) { yield return Singleton<CombatPhaseManager>.Instance.SlotAttackSlot(slotSaved, target.slot, 0f); } yield return Singleton<ResourcesManager>.Instance.AddMaxEnergy(1); yield return Singleton<ResourcesManager>.Instance.AddEnergy(1); yield return (object)new WaitForSeconds(0.1f); } } Singleton<ViewManager>.Instance.SwitchToView((View)0, false, false); Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)0; yield return ((AbilityBehaviour)this).LearnAbility(0.1f); } } public class xingqiu_ysbf : ActivatedAbilityBehaviour { public static Ability ability; public const string xingqiu_ysbf1_SOUND = "xingqiu_q1"; public const string xingqiu_ysbf2_SOUND = "xingqiu_q2"; public const string xingqiu_ysbf3_SOUND = "xingqiu_q3"; public string xingqiu_ysbf_SOUND; public int a; public override Ability Ability => ability; public override int EnergyCost => 4; public override IEnumerator Activate() { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); ((Card)((AbilityBehaviour)this).Card).Anim.StrongNegationEffect(); yield return ((AbilityBehaviour)this).LearnAbility(0.4f); Random random = new Random(); a = random.Next(3); if (a == 0) { xingqiu_ysbf_SOUND = "xingqiu_q1"; } if (a == 1) { xingqiu_ysbf_SOUND = "xingqiu_q2"; } if (a == 2) { xingqiu_ysbf_SOUND = "xingqiu_q3"; } Singleton<ViewManager>.Instance.SwitchToView((View)4, false, false); yield return (object)new WaitForSeconds(0.15f); get get2 = new get(); _ = ((AbilityBehaviour)this).Card.Slot.opposingSlot.Card; _ = ((AbilityBehaviour)this).Card; CardSlot basecardslot = ((AbilityBehaviour)this).Card.Slot; yield return get2.getart(basecardslot, "GenshinMod_xingqiu", "GenshinMod_xingqiuQ", xingqiu_ysbf_SOUND, 0.7f); yield return get2.getsigil(basecardslot.Card, xingqiu_ysbf_ylj.ability, "xingqiu_ysbf_ylj", "雨帘剑", 2); ((Card)basecardslot.Card).Anim.LightNegationEffect(); Singleton<ViewManager>.Instance.SwitchToView((View)0, false, false); Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)0; } } public class xingqiu_yszj : ActivatedAbilityBehaviour { public static Ability ability; public const string xingqiu_yszj1_SOUND = "xingqiu_e1"; public const string xingqiu_yszj2_SOUND = "xingqiu_e2"; public const string xingqiu_yszj3_SOUND = "xingqiu_e3"; public string xingqiu_yszj_SOUND; public int a; public override Ability Ability => ability; public override int BonesCost => 1; public override IEnumerator Activate() { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); ((Card)((AbilityBehaviour)this).Card).Anim.StrongNegationEffect(); yield return ((AbilityBehaviour)this).LearnAbility(0.4f); Random random = new Random(); a = random.Next(3); if (a == 0) { xingqiu_yszj_SOUND = "xingqiu_e1"; } if (a == 1) { xingqiu_yszj_SOUND = "xingqiu_e2"; } if (a == 2) { xingqiu_yszj_SOUND = "xingqiu_e3"; } Singleton<ViewManager>.Instance.SwitchToView((View)4, false, false); yield return (object)new WaitForSeconds(0.15f); get get2 = new get(); PlayableCard card = ((AbilityBehaviour)this).Card.Slot.opposingSlot.Card; PlayableCard playableCard = ((AbilityBehaviour)this).Card; CardSlot basecardslot = ((AbilityBehaviour)this).Card.Slot; yield return get2.getgetwater(playableCard, card); if ((Object)(object)card != (Object)null && card.Health > 0) { yield return (object)new WaitForSeconds(0.5f); AudioController.Instance.PlaySound3D(xingqiu_yszj_SOUND, (MixerGroup)5, ((Component)basecardslot.Card).transform.position, 1f, 0f, (Pitch)null, (Repetition)null, (Randomization)null, (Distortion)null, false); yield return (object)new WaitForSeconds(0.5f); yield return get2.ShockCard(card, playableCard, playableCard.Attack, 0.5); } } } public class xingqiu_ysbf_ylj : AbilityBehaviour { public static Ability ability; public override Ability Ability => ability; public override bool RespondsToUpkeep(bool playerUpkeep) { return ((AbilityBehaviour)this).Card.OpponentCard != playerUpkeep; } public override IEnumerator OnUpkeep(bool playerUpkeep) { get get2 = new get(); yield return get2.removesigil(((AbilityBehaviour)this).Card, ability, "xingqiu_ysbf_ylj", "雨帘剑"); } public override bool RespondsToOtherCardDealtDamage(PlayableCard attacker, int amount, PlayableCard target) { return true; } public override IEnumerator OnOtherCardDealtDamage(PlayableCard attacker, int amount, PlayableCard target) { get get2 = new get(); CardSlot basecardslot = ((AbilityBehaviour)this).Card.Slot; if (amount > 0 && CardExtensions.NotDead(target) && Singleton<BoardManager>.Instance.GetAdjacentSlots(((AbilityBehaviour)this).Card.Slot).Contains(target.Slot)) { if (target.Status.damageTaken > 0) { target.HealDamage(1); } yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); ((Card)((AbilityBehaviour)this).Card).Anim.StrongNegationEffect(); yield return ((AbilityBehaviour)this).LearnAbility(0.4f); } yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); CardSlot toLeft = Singleton<BoardManager>.Instance.GetAdjacent(((AbilityBehaviour)this).Card.Slot, true); CardSlot toRight = Singleton<BoardManager>.Instance.GetAdjacent(((AbilityBehaviour)this).Card.Slot, false); if ((Object)(object)toLeft != (Object)null && (Object)(object)toLeft.Card != (Object)null && (Object)(object)toLeft.Card == (Object)(object)attacker && !target.Dead && !target.InOpponentQueue) { yield return get2.getgetwater(basecardslot.Card, target); yield return (object)new WaitForSeconds(0.1f); if (!target.Dead) { yield return target.TakeDamage(basecardslot.Card.Attack * 3 / 10 + 1, basecardslot.Card); yield break; } yield return Singleton<ResourcesManager>.Instance.AddMaxEnergy(1); yield return Singleton<ResourcesManager>.Instance.AddEnergy(1); yield return (object)new WaitForSeconds(0.1f); } else if ((Object)(object)toRight != (Object)null && (Object)(object)toRight.Card != (Object)null && (Object)(object)toRight.Card == (Object)(object)attacker && !target.Dead && !target.InOpponentQueue) { yield return get2.getgetwater(basecardslot.Card, target); yield return (object)new WaitForSeconds(0.1f); if (!target.Dead) { yield return target.TakeDamage(basecardslot.Card.Attack * 3 / 10 + 1, basecardslot.Card); yield break; } yield return Singleton<ResourcesManager>.Instance.AddMaxEnergy(1); yield return Singleton<ResourcesManager>.Instance.AddEnergy(1); yield return (object)new WaitForSeconds(0.1f); } else { yield return ((AbilityBehaviour)this).LearnAbility(0.1f); } } public override bool RespondsToTakeDamage(PlayableCard source) { return true; } public override IEnumerator OnTakeDamage(PlayableCard source) { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); ((Card)((AbilityBehaviour)this).Card).Anim.StrongNegationEffect(); yield return (object)new WaitForSeconds(0.55f); if (((AbilityBehaviour)this).Card.Status.damageTaken > 0) { ((AbilityBehaviour)this).Card.HealDamage(1); } yield return ((AbilityBehaviour)this).LearnAbility(0.4f); } } internal class Asset { private static Assembly _assembly; public static Assembly CurrentAssembly => _assembly ?? (_assembly = Assembly.GetExecutingAssembly()); public static Texture2D LoadIcon(string name) { return TextureHelper.GetImageAsTexture(("ability_" + name + (name.EndsWith(".png") ? "" : ".png")).ToLowerInvariant(), CurrentAssembly, (FilterMode)0); } public static Texture2D LoadPortrait(string name) { return TextureHelper.GetImageAsTexture(("portrait_" + name + (name.EndsWith(".png") ? "" : ".png")).ToLowerInvariant(), CurrentAssembly, (FilterMode)0); } public static Texture2D Loadpixel(string name) { return TextureHelper.GetImageAsTexture(("pixel_" + name + (name.EndsWith(".png") ? "" : ".png")).ToLowerInvariant(), CurrentAssembly, (FilterMode)0); } public static Texture2D LoadEmission(string name) { return TextureHelper.GetImageAsTexture(("portrait_" + name + (name.EndsWith("_emission.png") ? "" : "_emission.png")).ToLowerInvariant(), CurrentAssembly, (FilterMode)0); } public static Texture2D LoadTexture(string name) { return TextureHelper.GetImageAsTexture(name + (name.EndsWith(".png") ? "" : ".png"), CurrentAssembly, (FilterMode)0); } public static Sprite LoadSprite(string name) { return TextureHelper.ConvertTexture(TextureHelper.GetImageAsTexture(name + (name.EndsWith(".png") ? "" : ".png"), CurrentAssembly, (FilterMode)0), (Vector2?)null); } } public static class AudioHelper { public struct AudioState { public int sourceNum; public string clipName; public float position; public bool isPlaying; public float volume; } [HarmonyPatch(typeof(AudioController), "Awake")] [HarmonyPostfix] internal static void LoadMyCustomAudio(ref AudioController __instance) { string[] array = new string[12] { "leishen_e1", "leishen_e2", "leishen_e3", "leishen_q1", "leishen_q2", "leishen_q3", "xingqiu_e1", "xingqiu_e2", "xingqiu_e3", "xingqiu_q1", "xingqiu_q2", "xingqiu_q3" }; foreach (string clipName in array) { if (!__instance.SFX.Any((AudioClip ac) => ((Object)ac).name.Equals(clipName, StringComparison.InvariantCultureIgnoreCase))) { AudioClip val = SoundManager.LoadAudioClip("GenshinMod", clipName + ".wav"); ((Object)val).name = clipName; __instance.SFX.Add(val); } } } public static List<AudioState> PauseAllLoops() { Traverse val = Traverse.Create((object)AudioController.Instance); List<AudioSource> value = val.Field("loopSources").GetValue<List<AudioSource>>(); List<AudioState> list = new List<AudioState>(); for (int i = 0; i < value.Count; i++) { AudioSource val2 = value[i]; if ((Object)(object)val2 == (Object)null || (Object)(object)val2.clip == (Object)null) { List<AudioState> list2 = list; AudioState audioState = default(AudioState); audioState.sourceNum = i; audioState.position = 0f; audioState.clipName = null; audioState.isPlaying = false; AudioState item = audioState; list2.Add(item); } else { List<AudioState> list3 = list; AudioState audioState = default(AudioState); audioState.sourceNum = i; audioState.position = (val2.isPlaying ? (val2.time / val2.clip.length) : 0f); audioState.clipName = ((Object)val2.clip).name; audioState.isPlaying = val2.isPlaying; audioState.volume = val2.volume; AudioState item2 = audioState; list3.Add(item2); } } AudioController.Instance.StopAllLoops(); return list; } public static void ResumeAllLoops(List<AudioState> states) { for (int i = 0; i < states.Count; i++) { if (states[i].isPlaying) { AudioController.Instance.SetLoopAndPlay(states[i].clipName, i, true, true); AudioController.Instance.SetLoopVolumeImmediate(0f, i); AudioController.Instance.SetLoopTimeNormalized(states[i].position, i); AudioController.Instance.FadeInLoop(1f, states[i].volume, new int[1] { i }); } else { AudioController.Instance.StopLoop(i); } } } } [HarmonyPatch(typeof(PlayableCard), "TakeDamage")] public class TakeDamagePatch : PlayableCard { private static void Prefix(ref PlayableCard __instance, ref int damage) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) if (__instance.HasAbility(Superconducting.ability)) { damage += 2; } if (__instance.HasAbility(Ice_cling.ability) && __instance.HasAbility((Ability)26)) { damage = 0; } if (__instance.HasAbility(xingqiu_ysbf_ylj.ability)) { damage--; } damage -= CardSlotExtensions.GetAdjacentCards(__instance.Slot).FindAll((PlayableCard x) => x.HasAbility(xingqiu_ysbf_ylj.ability)).Count; } } public static class CardRelatedExtension { public static void RemoveAbilityFromThisCard(this PlayableCard playableCard, CardModificationInfo modInfo, Action callback = null) { object obj = ((Card)playableCard).Info.Clone(); CardInfo val = (CardInfo)((obj is CardInfo) ? obj : null); val.Mods.Add(modInfo); ((Card)playableCard).SetInfo(val); callback?.Invoke(); } } public class get { private readonly GameObject bombPrefab = ResourceBank.Get<GameObject>("Prefabs/Cards/SpecificCardModels/DetonatorHoloBomb"); public IEnumerator ShockCard(PlayableCard target, PlayableCard attacker, int damage, double num) { double newDamage = Math.Floor((double)damage * num + 1.0); int finalDamage = (int)newDamage; ((Card)target).Anim.SetOverclocked(true); ((Card)target).Anim.PlayHitAnimation(); yield return target.TakeDamage(finalDamage, attacker); ((Card)target).Anim.SetOverclocked(false); yield return (object)new WaitForSeconds(0.2f); } public IEnumerator getgetfire(PlayableCard playableCard, PlayableCard card) { Singleton<ViewManager>.Instance.SwitchToView((View)4, false, false); yield return (object)new WaitForSeconds(0.1f); if (card.HasAbility(thunder_cling.ability) && playableCard.OnBoard && (Object)(object)playableCard.Slot.opposingSlot != (Object)null && (Object)(object)Singleton<BoardManager>.Instance != (Object)null) { yield return nosigil(card, thunder_cling.ability, "雷元素附着"); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]超载![c:]", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, false); List<CardSlot> slotsToAttack = new List<CardSlot> { playableCard.Slot.opposingSlot }; slotsToAttack.AddRange(Singleton<BoardManager>.Instance.GetAdjacentSlots(playableCard.Slot.opposingSlot)); slotsToAttack.RemoveAll((CardSlot x) => (Object)(object)x == (Object)null || (Object)(object)x.Card == (Object)null); slotsToAttack.Sort((CardSlot x, CardSlot x2) => x.Index - x2.Index); foreach (CardSlot slot in slotsToAttack) { if ((Object)(object)slot.Card != (Object)null) { GameObject bomb = Object.Instantiate<GameObject>(bombPrefab); bomb.transform.position = ((Component)playableCard).transform.position + Vector3.up * 0.1f; Tween.Position(bomb.transform, ((Component)slot.Card).transform.position + Vector3.up * 0.1f, 0.5f, 0f, Tween.EaseLinear, (LoopType)0, (Action)null, (Action)null, true); yield return (object)new WaitForSeconds(0.5f); ((Card)slot.Card).Anim.PlayHitAnimation(); Object.Destroy((Object)(object)bomb); yield return ShockCard(slot.Card, playableCard, playableCard.Attack, 0.75); } } yield return ShockCard(playableCard, playableCard, playableCard.Attack, 0.25); ((Card)card).RenderCard(); } else { if (!((Object)(object)card != (Object)null) || card.Dead) { yield break; } if (card.HasAbility(Water_cling.ability)) { yield return nosigil(card, Water_cling.ability, "水元素附着"); if (card.Health != 0) { yield return ShockCard(card, playableCard, playableCard.Attack, 0.75); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]蒸发![c:]", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); } ((Card)card).RenderCard(); } else if (card.HasAbility(grass_cling.ability)) { yield return nosigil(card, grass_cling.ability, "草元素附着"); if (card.Health != 0) { yield return ShockCard(card, playableCard, playableCard.Attack, 0.75); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]燃烧![c:]", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); } ((Card)card).RenderCard(); if (card.Health != 0) { int? terrifyTurns = CardExtensions.GetExtendedPropertyAsInt(((Card)card).Info, "Burn"); ((Card)playableCard).Anim.LightNegationEffect(); CardModificationInfo cardModificationInfo = new CardModificationInfo(); foreach (CardModificationInfo mod in card.temporaryMods) { if (mod.abilities.Contains(Burn.ability)) { CardExtensions.SetExtendedProperty(((Card)card).Info, "Burn", (object)(terrifyTurns + 2)); Debug.Log((object)("[" + ((Card)card).Info.displayedName + "] 被附加燃烧了!")); yield break; } } Debug.Log((object)("[" + ((Card)card).Info.displayedName + "] 被附加燃烧了!")); CardExtensions.SetExtendedProperty(((Card)card).Info, "Burn", (object)1); cardModificationInfo.abilities.Add(Burn.ability); cardModificationInfo.abilities.Add(Fire_cling.ability); card.AddTemporaryMod(cardModificationInfo); ((Card)card).RenderCard(); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]燃烧![c:]", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); } ((Card)card).RenderCard(); } else if (card.HasAbility(Ice_cling.ability)) { yield return nosigil(card, Ice_cling.ability, "冰元素附着"); if (card.Health != 0) { yield return ShockCard(card, playableCard, playableCard.Attack, 1.0); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]融化![c:]", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); } ((Card)card).RenderCard(); } else { ((Card)playableCard).Anim.LightNegationEffect(); yield return getsigil(card, Fire_cling.ability, "Fire_cling", "火元素附着", 2); } } } public IEnumerator getgetice(PlayableCard playableCard, PlayableCard card) { Singleton<ViewManager>.Instance.SwitchToView((View)4, false, false); yield return (object)new WaitForSeconds(0.1f); if (!((Object)(object)card != (Object)null)) { yield break; } if (card.HasAbility((Ability)26) && card.HasAbility(Ice_cling.ability)) { PlayableCard opposingSlotCard = CardExtensions.OpposingCard(playableCard); if (Object.op_Implicit((Object)(object)opposingSlotCard) && opposingSlotCard.HasAbility((Ability)26) && opposingSlotCard.HasAbility(Ice_cling.ability)) { CardModificationInfo frozenAway2 = Plugin.CreateModBreakFreeze(opposingSlotCard); opposingSlotCard.RemoveAbilityFromThisCard(frozenAway2); ((Card)opposingSlotCard).Anim.PlayTransformAnimation(); yield return (object)new WaitForSeconds(0.25f); yield return opposingSlotCard.TakeDamage(1, playableCard); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]碎冰![c:]", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); } } else { if (card.Dead) { yield break; } if (card.HasAbility(thunder_cling.ability)) { yield return nosigil(card, thunder_cling.ability, "雷元素附着"); if (card.Health != 0) { ((Card)playableCard).Anim.LightNegationEffect(); yield return getsigil(card, Superconducting.ability, "Superconducting", "超导", 2); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]超导![c:]", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); } ((Card)card).RenderCard(); } else if (card.HasAbility(Fire_cling.ability)) { yield return nosigil(card, Fire_cling.ability, "火元素附着"); if (card.Health != 0) { yield return ShockCard(card, playableCard, playableCard.Attack, 0.5); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]融化![c:]", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); } ((Card)card).RenderCard(); } else if (card.HasAbility(Water_cling.ability)) { yield return nosigil(card, Water_cling.ability, "水元素附着"); if (card.Health == 0) { yield break; } PlayableCard opposingSlotCard2 = CardExtensions.OpposingCard(playableCard); if (Object.op_Implicit((Object)(object)opposingSlotCard2)) { if (opposingSlotCard2.HasTrait((Trait)16)) { yield return (object)new WaitForSeconds(0.25f); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("这种程度的寒冷还不足以将" + ((Card)opposingSlotCard2).Info.DisplayedNameLocalized + "冻结!", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); yield return opposingSlotCard2.TakeDamage(4, playableCard); } else if (CardExtensions.LacksAbility(opposingSlotCard2, (Ability)26)) { CardModificationInfo frozenAway = Plugin.CreateModForFreeze(opposingSlotCard2); opposingSlotCard2.RemoveAbilityFromThisCard(frozenAway); ((Card)opposingSlotCard2).Anim.PlayTransformAnimation(); yield return (object)new WaitForSeconds(0.25f); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]冻结![c:]", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); } } } else { ((Card)playableCard).Anim.LightNegationEffect(); yield return getsigil(card, Fire_cling.ability, "Fire_cling", "火元素附着", 2); } } } public IEnumerator getgetwater(PlayableCard playableCard, PlayableCard card) { Singleton<ViewManager>.Instance.SwitchToView((View)4, false, false); yield return (object)new WaitForSeconds(0.1f); if (!((Object)(object)card != (Object)null)) { yield break; } if (card.HasAbility((Ability)26) && card.HasAbility(Ice_cling.ability)) { PlayableCard opposingSlotCard = CardExtensions.OpposingCard(playableCard); if (Object.op_Implicit((Object)(object)opposingSlotCard) && opposingSlotCard.HasAbility((Ability)26) && opposingSlotCard.HasAbility(Ice_cling.ability)) { CardModificationInfo frozenAway2 = Plugin.CreateModBreakFreeze(opposingSlotCard); opposingSlotCard.RemoveAbilityFromThisCard(frozenAway2); ((Card)opposingSlotCard).Anim.PlayTransformAnimation(); yield return (object)new WaitForSeconds(0.25f); yield return opposingSlotCard.TakeDamage(1, playableCard); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]碎冰![c:]", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); } } else if (card.HasAbility(thunder_cling.ability)) { if (!card.Dead) { yield return nosigil(card, thunder_cling.ability, "雷元素附着"); } yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]感电![c:]对所有生物造成伤害!", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); List<PlayableCard> cards = new List<PlayableCard>(); cards.AddRange(Singleton<BoardManager>.Instance.CardsOnBoard.FindAll((PlayableCard x) => Object.op_Implicit((Object)(object)x) != playableCard.OpponentCard && !x.Dead)); if (cards.Count > 0) { for (int i = cards.Count - 1; i >= 0; i--) { if (cards[i].OpponentCard) { yield return ShockCard(cards[i], playableCard, playableCard.Attack, 0.25); } } } ((Card)card).RenderCard(); } else { if (card.Dead) { yield break; } if (card.HasAbility(Fire_cling.ability)) { yield return nosigil(card, Fire_cling.ability, "火元素附着"); if (card.Health != 0) { yield return ShockCard(card, playableCard, playableCard.Attack, 1.0); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]蒸发![c:]", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); } ((Card)card).RenderCard(); } else if (card.HasAbility(grass_cling.ability)) { yield return nosigil(card, grass_cling.ability, "草元素附着"); if (card.Health != 0) { yield return ShockCard(card, playableCard, playableCard.Attack, 0.75); } ((Card)card).RenderCard(); List<CardSlot> cards2 = Singleton<BoardManager>.Instance.OpponentSlotsCopy; List<CardSlot> openspots = new List<CardSlot>(); foreach (CardSlot slot in cards2) { if ((Object)(object)slot.Card == (Object)null) { openspots.Add(slot); } } if (openspots.Count != 0) { Random random = new Random(); yield return (object)new WaitForSeconds(0.3f); Singleton<ViewManager>.Instance.SwitchToView((View)4, false, false); yield return (object)new WaitForSeconds(0.3f); yield return Singleton<BoardManager>.Instance.CreateCardInSlot(ScriptableObjectLoader<CardInfo>.AllData.Find((CardInfo info) => ((Object)info).name == "GenshinMod_Grass_seeds"), openspots[random.Next(openspots.Count)], 0.1f, true); yield return (object)new WaitForSeconds(0.3f); Singleton<ViewManager>.Instance.SwitchToView((View)1, false, false); } } else if (card.HasAbility(Ice_cling.ability)) { yield return nosigil(card, Ice_cling.ability, "冰元素附着"); if (card.Health != 0) { PlayableCard opposingSlotCard2 = CardExtensions.OpposingCard(playableCard); if (Object.op_Implicit((Object)(object)opposingSlotCard2)) { if (opposingSlotCard2.HasTrait((Trait)16)) { yield return (object)new WaitForSeconds(0.25f); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("这种程度的寒冷还不足以将" + ((Card)opposingSlotCard2).Info.DisplayedNameLocalized + "冻结!", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); yield return opposingSlotCard2.TakeDamage(4, playableCard); } else if (CardExtensions.LacksAbility(opposingSlotCard2, (Ability)26)) { CardModificationInfo frozenAway = Plugin.CreateModForFreeze(opposingSlotCard2); opposingSlotCard2.RemoveAbilityFromThisCard(frozenAway); ((Card)opposingSlotCard2).Anim.PlayTransformAnimation(); yield return (object)new WaitForSeconds(0.25f); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]冻结![c:]", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); } } } else { ((Card)card).RenderCard(); } } else { ((Card)playableCard).Anim.LightNegationEffect(); yield return getsigil(card, Water_cling.ability, "Water_cling", "水元素附着", 2); } } } public IEnumerator getgetthunder(PlayableCard playableCard, PlayableCard card) { Singleton<ViewManager>.Instance.SwitchToView((View)4, false, false); yield return (object)new WaitForSeconds(0.1f); if (card.HasAbility(Fire_cling.ability) && playableCard.OnBoard && (Object)(object)playableCard.Slot.opposingSlot != (Object)null && (Object)(object)Singleton<BoardManager>.Instance != (Object)null) { yield return nosigil(card, Fire_cling.ability, "火元素附着"); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]超载![c:]", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); List<CardSlot> slotsToAttack = new List<CardSlot> { playableCard.Slot.opposingSlot }; slotsToAttack.AddRange(Singleton<BoardManager>.Instance.GetAdjacentSlots(playableCard.Slot.opposingSlot)); slotsToAttack.RemoveAll((CardSlot x) => (Object)(object)x == (Object)null || (Object)(object)x.Card == (Object)null); slotsToAttack.Sort((CardSlot x, CardSlot x2) => x.Index - x2.Index); foreach (CardSlot slot in slotsToAttack) { if ((Object)(object)slot.Card != (Object)null) { GameObject bomb = Object.Instantiate<GameObject>(bombPrefab); bomb.transform.position = ((Component)playableCard).transform.position + Vector3.up * 0.1f; Tween.Position(bomb.transform, ((Component)slot.Card).transform.position + Vector3.up * 0.1f, 0.5f, 0f, Tween.EaseLinear, (LoopType)0, (Action)null, (Action)null, true); yield return (object)new WaitForSeconds(0.5f); ((Card)slot.Card).Anim.PlayHitAnimation(); Object.Destroy((Object)(object)bomb); yield return ShockCard(slot.Card, playableCard, playableCard.Attack, 0.75); } } yield return ShockCard(playableCard, playableCard, playableCard.Attack, 0.25); ((Card)card).RenderCard(); } else { if (!((Object)(object)card != (Object)null)) { yield break; } if (card.HasAbility(Water_cling.ability)) { if (!card.Dead) { yield return nosigil(card, Water_cling.ability, "水元素附着"); } yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]感电![c:]对所有生物造成伤害!", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); List<PlayableCard> cards = new List<PlayableCard>(); cards.AddRange(Singleton<BoardManager>.Instance.CardsOnBoard.FindAll((PlayableCard x) => Object.op_Implicit((Object)(object)x) != playableCard.OpponentCard && !x.Dead)); if (cards.Count > 0) { for (int i = cards.Count - 1; i >= 0; i--) { if (cards[i].OpponentCard) { yield return ShockCard(cards[i], playableCard, playableCard.Attack, 0.25); } } } ((Card)card).RenderCard(); } else { if (card.Dead) { yield break; } if (card.HasAbility(grass_cling.ability)) { yield return nosigil(card, grass_cling.ability, "草元素附着"); if (card.Health != 0) { yield return ShockCard(card, playableCard, playableCard.Attack, 0.75); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]超激化![c:]", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); } ((Card)card).RenderCard(); } else if (card.HasAbility(Ice_cling.ability)) { yield return nosigil(card, Ice_cling.ability, "冰元素附着"); if (card.Health != 0) { ((Card)playableCard).Anim.LightNegationEffect(); yield return getsigil(card, Superconducting.ability, "Superconducting", "超导", 2); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]超导![c:]", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); } ((Card)card).RenderCard(); } else { ((Card)playableCard).Anim.LightNegationEffect(); yield return getsigil(card, thunder_cling.ability, "thunder_cling", "雷元素附着", 2); } } } } public IEnumerator getgetwind(PlayableCard playableCard, PlayableCard card) { get get2 = new get(); Singleton<ViewManager>.Instance.SwitchToView((View)4, false, false); yield return (object)new WaitForSeconds(0.1f); if (card.HasAbility(Water_cling.ability) && playableCard.OnBoard && (Object)(object)playableCard.Slot.opposingSlot != (Object)null && (Object)(object)Singleton<BoardManager>.Instance != (Object)null) { yield return nosigil(card, Water_cling.ability, "水元素附着"); List<CardSlot> slots = new List<CardSlot>(); if (Object.op_Implicit((Object)(object)playableCard.slot.opposingSlot)) { slots.AddRange(Singleton<BoardManager>.Instance.GetAdjacentSlots(playableCard.slot.opposingSlot)); } foreach (CardSlot slot2 in slots) { if (Object.op_Implicit((Object)(object)playableCard) && playableCard.OnBoard && Object.op_Implicit((Object)(object)slot2) && (Object)(object)slot2.Card != (Object)null) { ((Card)playableCard).Anim.StrongNegationEffect(); yield return (object)new WaitForSeconds(0.1f); yield return get2.getgetwater(playableCard, slot2.Card); yield return (object)new WaitForSeconds(0.4f); } } } else if (card.HasAbility(thunder_cling.ability) && playableCard.OnBoard && (Object)(object)playableCard.Slot.opposingSlot != (Object)null && (Object)(object)Singleton<BoardManager>.Instance != (Object)null) { yield return nosigil(card, thunder_cling.ability, "雷元素附着"); List<CardSlot> slots2 = new List<CardSlot>(); if (Object.op_Implicit((Object)(object)playableCard.slot.opposingSlot)) { slots2.AddRange(Singleton<BoardManager>.Instance.GetAdjacentSlots(playableCard.slot.opposingSlot)); } foreach (CardSlot slot3 in slots2) { if (Object.op_Implicit((Object)(object)playableCard) && playableCard.OnBoard && Object.op_Implicit((Object)(object)slot3) && (Object)(object)slot3.Card != (Object)null) { ((Card)playableCard).Anim.StrongNegationEffect(); yield return (object)new WaitForSeconds(0.1f); yield return get2.getgetthunder(playableCard, slot3.Card); yield return (object)new WaitForSeconds(0.4f); } } } else if (card.HasAbility(Fire_cling.ability) && playableCard.OnBoard && (Object)(object)playableCard.Slot.opposingSlot != (Object)null && (Object)(object)Singleton<BoardManager>.Instance != (Object)null) { yield return nosigil(card, Fire_cling.ability, "火元素附着"); List<CardSlot> slots3 = new List<CardSlot>(); if (Object.op_Implicit((Object)(object)playableCard.slot.opposingSlot)) { slots3.AddRange(Singleton<BoardManager>.Instance.GetAdjacentSlots(playableCard.slot.opposingSlot)); } foreach (CardSlot slot4 in slots3) { if (Object.op_Implicit((Object)(object)playableCard) && playableCard.OnBoard && Object.op_Implicit((Object)(object)slot4) && (Object)(object)slot4.Card != (Object)null) { ((Card)playableCard).Anim.StrongNegationEffect(); yield return (object)new WaitForSeconds(0.1f); yield return get2.getgetfire(playableCard, slot4.Card); yield return (object)new WaitForSeconds(0.4f); } } } else { if (!card.HasAbility(Ice_cling.ability) || !playableCard.OnBoard || !((Object)(object)playableCard.Slot.opposingSlot != (Object)null) || !((Object)(object)Singleton<BoardManager>.Instance != (Object)null)) { yield break; } yield return nosigil(card, Ice_cling.ability, "冰元素附着"); List<CardSlot> slots4 = new List<CardSlot>(); if (Object.op_Implicit((Object)(object)playableCard.slot.opposingSlot)) { slots4.AddRange(Singleton<BoardManager>.Instance.GetAdjacentSlots(playableCard.slot.opposingSlot)); } foreach (CardSlot slot in slots4) { if (Object.op_Implicit((Object)(object)playableCard) && playableCard.OnBoard && Object.op_Implicit((Object)(object)slot) && (Object)(object)slot.Card != (Object)null) { ((Card)playableCard).Anim.StrongNegationEffect(); yield return (object)new WaitForSeconds(0.1f); yield return get2.getgetice(playableCard, slot.Card); yield return (object)new WaitForSeconds(0.4f); } } } } public IEnumerator getgetgrass(PlayableCard playableCard, PlayableCard card) { new get(); Singleton<ViewManager>.Instance.SwitchToView((View)4, false, false); yield return (object)new WaitForSeconds(0.1f); if (!((Object)(object)card != (Object)null) || card.Dead) { yield break; } if (card.HasAbility(thunder_cling.ability)) { yield return nosigil(card, thunder_cling.ability, "雷元素附着"); if (card.Health != 0) { yield return ShockCard(card, playableCard, playableCard.Attack, 0.75); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]超激化![c:]", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); } ((Card)card).RenderCard(); } else if (card.HasAbility(Fire_cling.ability)) { if (card.Health != 0) { Singleton<ViewManager>.Instance.SwitchToView((View)4, false, false); yield return (object)new WaitForSeconds(0.1f); int? terrifyTurns = CardExtensions.GetExtendedPropertyAsInt(((Card)card).Info, "Burn"); ((Card)playableCard).Anim.LightNegationEffect(); CardModificationInfo cardModificationInfo = new CardModificationInfo(); foreach (CardModificationInfo mod in card.temporaryMods) { if (mod.abilities.Contains(Burn.ability)) { CardExtensions.SetExtendedProperty(((Card)card).Info, "Burn", (object)(terrifyTurns + 2)); Debug.Log((object)("[" + ((Card)card).Info.displayedName + "] 被附加燃烧了!")); yield break; } } Debug.Log((object)("[" + ((Card)card).Info.displayedName + "] 被附加燃烧了!")); CardExtensions.SetExtendedProperty(((Card)card).Info, "Burn", (object)2); cardModificationInfo.abilities.Add(Burn.ability); card.AddTemporaryMod(cardModificationInfo); ((Card)card).RenderCard(); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]燃烧![c:]", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); } ((Card)card).RenderCard(); } else if (card.HasAbility(Water_cling.ability)) { yield return nosigil(card, Water_cling.ability, "水元素附着"); List<CardSlot> cards = Singleton<BoardManager>.Instance.OpponentSlotsCopy; List<CardSlot> openspots = new List<CardSlot>(); foreach (CardSlot slot in cards) { if ((Object)(object)slot.Card == (Object)null) { openspots.Add(slot); } } if (openspots.Count != 0) { Random random = new Random(); yield return (object)new WaitForSeconds(0.3f); yield return Singleton<BoardManager>.Instance.CreateCardInSlot(ScriptableObjectLoader<CardInfo>.AllData.Find((CardInfo info) => ((Object)info).name == "GenshinMod_Grass_seeds"), openspots[random.Next(openspots.Count)], 0.1f, true); yield break; } List<CardSlot> slotsToAttack = new List<CardSlot> { playableCard.Slot.opposingSlot }; slotsToAttack.AddRange(Singleton<BoardManager>.Instance.GetAdjacentSlots(playableCard.Slot.opposingSlot)); slotsToAttack.RemoveAll((CardSlot x) => (Object)(object)x == (Object)null || (Object)(object)x.Card == (Object)null); slotsToAttack.Sort((CardSlot x, CardSlot x2) => x.Index - x2.Index); foreach (CardSlot slot2 in slotsToAttack) { if ((Object)(object)slot2.Card != (Object)null) { GameObject bomb = Object.Instantiate<GameObject>(bombPrefab); bomb.transform.position = ((Component)playableCard).transform.position + Vector3.up * 0.1f; Tween.Position(bomb.transform, ((Component)slot2.Card).transform.position + Vector3.up * 0.1f, 0.5f, 0f, Tween.EaseLinear, (LoopType)0, (Action)null, (Action)null, true); yield return (object)new WaitForSeconds(0.5f); ((Card)slot2.Card).Anim.PlayHitAnimation(); Object.Destroy((Object)(object)bomb); yield return ShockCard(slot2.Card, playableCard, playableCard.Attack, 0.75); } } yield return ShockCard(playableCard, playableCard, playableCard.Attack, 0.25); ((Card)card).RenderCard(); } else { Singleton<ViewManager>.Instance.SwitchToView((View)4, false, false); yield return (object)new WaitForSeconds(0.1f); ((Card)playableCard).Anim.LightNegationEffect(); yield return getsigil(card, grass_cling.ability, "grass_cling", "草元素附着", 2); } } public IEnumerator getgetrock(PlayableCard playableCard, PlayableCard card) { Singleton<ViewManager>.Instance.SwitchToView((View)4, false, false); yield return (object)new WaitForSeconds(0.1f); if (!card.HasAbility(Water_cling.ability) && !card.HasAbility(Fire_cling.ability) && !card.HasAbility(thunder_cling.ability) && !card.HasAbility(Ice_cling.ability)) { yield break; } yield return nosigil(card, Water_cling.ability, "水元素附着"); List<CardSlot> cards = Singleton<BoardManager>.Instance.PlayerSlotsCopy; List<CardSlot> openspots = new List<CardSlot>(); foreach (CardSlot slot in cards) { int shield = CardExtensions.GetTotalShields(slot.Card); if ((Object)(object)slot.Card != (Object)null && shield == 0) { openspots.Add(slot); } } if (openspots.Count == 0) { yield break; } Random random = new Random(); PlayableCard opencard = openspots[random.Next(openspots.Count)].Card; yield return (object)new WaitForSeconds(0.3f); ((Card)opencard).Anim.LightNegationEffect(); CardModificationInfo cardModificationInfo = new CardModificationInfo(); foreach (CardModificationInfo mod in opencard.temporaryMods) { if (mod.abilities.Contains((Ability)54)) { DamageShieldBehaviour component = ((Component)opencard).GetComponent<DamageShieldBehaviour>(); component.numShields++; yield break; } } CardExtensions.ResetShield(opencard, (Ability)54); cardModificationInfo.abilities.Add((Ability)54); opencard.AddTemporaryMod(cardModificationInfo); ((Card)opencard).RenderCard(); yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("[c:bR]结晶![c:]", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true); } public IEnumerator getart(CardSlot basecardslot, string name, string name1, string music, float time) { int damageTaken = basecardslot.Card.Status.damageTaken; CardInfo evolution = CardLoader.GetCardByName(name); CardInfo evolution2 = CardLoader.GetCardByName(name1); yield return (object)new WaitForSeconds(0.25f); foreach (CardModificationInfo item in ((Card)basecardslot.Card).Info.Mods.FindAll((CardModificationInfo x) => !x.nonCopyable)) { CardModificationInfo cardModificationInfo = (CardModificationInfo)item.Clone(); evolution.Mods.Add(cardModificationInfo); } yield return (object)new WaitForSeconds(0.1f); ((Card)basecardslot.Card).ExitBoard(0f, new Vector3(0f, 0f, 0f)); yield return Singleton<BoardManager>.Instance.CreateCardInSlot(evolution2, basecardslot, 0.1f, false); yield return (object)new WaitForSeconds(0.5f); AudioController.Instance.PlaySound3D(music, (MixerGroup)5, ((Component)basecardslot.Card).transform.position, 1f, 0f, (Pitch)null, (Repetition)null, (Randomization)null, (Distortion)null, false); yield return (object)new WaitForSeconds(time); ((Card)basecardslot.Card).ExitBoard(0f, new Vector3(0f, 0f, 0f)); yield return Singleton<BoardManager>.Instance.CreateCardInSlot(evolution, basecardslot, 0.1f, false); PlayableCard player = basecardslot.Card; player.Status.damageTaken = damageTaken; yield return (object)new WaitForSeconds(0.5f); } public IEnumerator getsigil(PlayableCard playableCard, Ability ability, string name, string displayname, int turn) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) CardModificationInfo cardModificationInfo22 = new CardModificationInfo { fromDuplicateMerge = true }; foreach (CardModificationInfo mod in playableCard.temporaryMods) { if (mod.abilities.Contains(ability)) { Debug.Log((object)("[" + ((Card)playableCard).Info.displayedName + "]的" + displayname + "还剩两回合!")); yield break; } } Debug.Log((object)("[" + ((Card)playableCard).Info.displayedName + "] 附加了" + displayname)); CardExtensions.SetExtendedProperty(((Card)playableCard).Info, name, (object)turn); cardModificationInfo22.abilities.Add(ability); playableCard.AddTemporaryMod(cardModificationInfo22); ((Card)playableCard).RenderCard(); } public IEnumerator removesigil(PlayableCard playableCard, Ability ability, string name, string displayname) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) int? pl = CardExtensions.GetExtendedPropertyAsInt(((Card)playableCard).Info, name); Debug.Log((object)(displayname + $"还剩[{pl}] 回合!")); if (pl == 0) { CardModificationInfo removeMe = null; foreach (CardModificationInfo mod in playableCard.temporaryMods) { if (mod.abilities.Contains(ability)) { removeMe = mod; } } if (removeMe != null) { playableCard.RemoveTemporaryMod(removeMe, true); } ((Card)playableCard).Info.ModAbilities.Remove(ability); Debug.Log((object)("[" + ((Card)playableCard).Info.displayedName + "]的" + displayname + "消失了!")); ((Card)playableCard).RenderCard(); } else { CardExtensions.SetExtendedProperty(((Card)playableCard).Info, name, (object)(pl - 1)); } yield break; } public IEnumerator nosigil(PlayableCard playableCard, Ability ability, string displayname) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) CardModificationInfo removeMe = null; foreach (CardModificationInfo mod in playableCard.temporaryMods) { if (mod.abilities.Contains(ability)) { removeMe = mod; } } if (removeMe != null) { playableCard.RemoveTemporaryMod(removeMe, true); } ((Card)playableCard).Info.ModAbilities.Remove(ability); Debug.Log((object)("[" + ((Card)playableCard).Info.displayedName + "]的" + displayname + "消失了!")); ((Card)playableCard).RenderCard(); yield break; } } public class APIDeathShield : DamageShieldBehaviour { public override Ability Ability => (Ability)54; public override int StartingNumShields => CardExtensions.GetAbilityStacks(((AbilityBehaviour)this).Card, (Ability)54); } internal static class Library { public static List<string> CardsToPatch = new List<string>(); public static Dictionary<string, PortraitJSON> Spritesheets = new Dictionary<string, PortraitJSON>(); public static Dictionary<string, (Sprite[] frames, int frameRate, float pauseTime)> AnimatedPortraits = new Dictionary<string, (Sprite[], int, float)>(); } internal static class ParseSpritesheet { public const int pWidth = 125; public const int pHeight = 190; public static void Parse() { List<string> cardsToPatch = Library.CardsToPatch; foreach (string item2 in cardsToPatch) { if (Library.AnimatedPortraits.ContainsKey(item2) || !Library.Spritesheets.ContainsKey(item2)) { continue; } PortraitJSON val = Library.Spritesheets[item2]; string text = FindImage(val.Spritesheet); if (text != null) { Texture2D tex = LoadTexture2D(text); Sprite[] item = LoadAllSprites(tex, val.FrameCount); if (!val.HasPause || val.PauseTime < 0f) { val.PauseTime = 0f; } Library.AnimatedPortraits.Add(item2, (item, val.FrameRate, val.PauseTime)); } } } public static Texture2D LoadTexture2D(string path) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown byte[] array = File.ReadAllBytes(path); Texture2D val = new Texture2D(1, 1); ((Texture)val).filterMode = (FilterMode)0; ImageConversion.LoadImage(val, array); return val; } public static Sprite MakeSprite(Texture2D tex) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) Rect val = default(Rect); ((Rect)(ref val))..ctor(0f, 0f, (float)((Texture)tex).width, (float)((Texture)tex).height); Vector2 val2 = default(Vector2); ((Vector2)(ref val2))..ctor(0.5f, 0.5f); return Sprite.Create(tex, val, val2); } public static Sprite[] LoadAllSprites(Texture2D tex, int frameCount) { //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) int height = ((Texture)tex).height; int width = ((Texture)tex).width; int num = height / 190; int num2 = width / 125; List<Sprite> list = new List<Sprite>(); Rect val = default(Rect); Vector2 val2 = default(Vector2); for (int num3 = num - 1; num3 >= 0; num3--) { for (int i = 0; i < num2; i++) { ((Rect)(ref val))..ctor((float)(i * 125), (float)(num3 * 190), 125f, 190f); ((Vector2)(ref val2))..ctor(0.5f, 0.5f); Sprite item = Sprite.Create(tex, val, val2); list.Add(item); if (list.Count >= frameCount) { break; } } if (list.Count == frameCount) { break; } } return list.ToArray(); } public static string FindImage(string fileName) { string[] files = Directory.GetFiles(Paths.PluginPath, fileName, SearchOption.AllDirectories); if (files.Length == 0) { return null; } if (files.Length > 1) { } return files.First(); } } public static class Register { public static void Add(string CardName, string Spritesheet, int FrameRate, int FrameCount, bool HasPause = false, float PauseTime = 0f) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Expected O, but got Unknown //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected I4, but got Unknown PortraitJSON val = new PortraitJSON(CardName, Spritesheet, FrameRate, FrameCount, HasPause, PauseTime); bool flag = Utility.IsNullOrWhiteSpace(val.Spritesheet); bool flag2 = Utility.IsNullOrWhiteSpace(val.CardName); bool flag3 = val.FrameRate <= 0 || val.FrameRate > 60; bool flag4 = val.FrameCount <= 0; if (flag || flag2 || flag3 || flag4) { return; } CardInfo val2 = null; val2 = CardLoader.GetCardByName(val.CardName); if (!((Object)(object)val2 == (Object)null)) { CardExtensions.AddAppearances(val2, (Appearance[])(object)new Appearance[1] { (Appearance)(int)Plugin.AP }); if (!Library.CardsToPatch.Contains(val.CardName)) { Library.CardsToPatch.Add(val.CardName); } if (!Library.Spritesheets.ContainsKey(val.CardName)) { Library.Spritesheets.Add(val.CardName, val); } ParseSpritesheet.Parse(); } } } internal class SpritesheetBehaviour : CardAppearanceBehaviour { private (Sprite[] frames, int frameRate, float PauseTime) Anim; private bool coroutineStart; private bool noAnim; public override void ApplyAppearance() { if (!coroutineStart && !noAnim) { noAnim = !Library.AnimatedPortraits.ContainsKey(((Object)((CardAppearanceBehaviour)this).Card.Info).name); if (!noAnim) { Anim = Library.AnimatedPortraits[((Object)((CardAppearanceBehaviour)this).Card.Info).name]; coroutineStart = true; ((MonoBehaviour)this).StartCoroutine(AnimatePortrait()); } } } public IEnumerator AnimatePortrait() { Sprite[] frames = Anim.frames; float frameWait = 1f / (float)Anim.frameRate; while (true) { for (int i = 0; i < frames.Length; i++) { ((CardAppearanceBehaviour)this).Card.RenderInfo.portraitOverride = frames[i]; ((CardAppearanceBehaviour)this).Card.StatsLayer.RenderCard(((CardAppearanceBehaviour)this).Card.RenderInfo); yield return (object)new WaitForSeconds(frameWait); } if (Anim.PauseTime > 0f) { yield return (object)new WaitForSeconds(Anim.PauseTime); } } } } public class Burn : AbilityBehaviour { public static Ability ability; public override Ability Ability => ability; public override bool RespondsToUpkeep(bool playerUpkeep) { return ((AbilityBehaviour)this).Card.OpponentCard != playerUpkeep; } public override IEnumerator OnUpkeep(bool playerUpkeep) { get get2 = new get(); PlayableCard card = ((AbilityBehaviour)this).Card.Slot.opposingSlot.Card; _ = ((AbilityBehaviour)this).Card; int? terrifyTurns = CardExtensions.GetExtendedPropertyAsInt(((Card)((AbilityBehaviour)this).Card).Info, "Burn"); yield return get2.ShockCard(num: 0.5 * (double)terrifyTurns.Value, target: ((AbilityBehaviour)this).Card, attacker: ((AbilityBehaviour)this).Card, damage: ((AbilityBehaviour)this).Card.Attack); if ((Object)(object)card != (Object)null && card.Health > 0) { yield return get2.getgetfire(card, card); } Debug.Log((object)$"燃烧还剩[{terrifyTurns}] 回合!"); if (terrifyTurns == 0) { CardModificationInfo removeMe = null; foreach (CardModificationInfo mod in ((AbilityBehaviour)this).Card.temporaryMods) { if (mod.abilities.Contains(ability)) { removeMe = mod; } } if (removeMe != null) { ((AbilityBehaviour)this).Card.RemoveTemporaryMod(removeMe, true); } ((Card)((AbilityBehaviour)this).Card).Info.ModAbilities.Remove(ability); Debug.Log((object)"燃烧结束了!"); ((Card)((AbilityBehaviour)this).Card).RenderCard(); } else { CardExtensions.SetExtendedProperty(((Card)((AbilityBehaviour)this).Card).Info, "Burn", (object)(terrifyTurns - 1)); } } } public class Adddfire : AbilityBehaviour { public static Ability ability; public override Ability Ability => ability; public override bool RespondsToUpkeep(bool playerUpkeep) { return ((AbilityBehaviour)this).Card.OpponentCard != playerUpkeep; } public override IEnumerator OnUpkeep(bool playerUpkeep) { get get2 = new get(); yield return get2.removesigil(((AbilityBehaviour)this).Card, ability, "Adddfire", "火元素附魔"); } public override bool RespondsToSlotTargetedForAttack(CardSlot slot, PlayableCard attacker) { return (Object)(object)attacker == (Object)(object)((AbilityBehaviour)this).Card; } public override IEnumerator OnSlotTargetedForAttack(CardSlot slot, PlayableCard attacker) { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); if ((Object)(object)slot.Card != (Object)null && slot.Card.Health > 0) { get get2 = new get(); yield return get2.getgetfire(attacker, slot.Card); } else { yield return (object)new WaitForSeconds(0.05f); yield return ((AbilityBehaviour)this).LearnAbility(0f); } } } public class Adddgrass : AbilityBehaviour { public static Ability ability; public override Ability Ability => ability; public override bool RespondsToUpkeep(bool playerUpkeep) { return ((AbilityBehaviour)this).Card.OpponentCard != playerUpkeep; } public override IEnumerator OnUpkeep(bool playerUpkeep) { get get2 = new get(); yield return get2.removesigil(((AbilityBehaviour)this).Card, ability, "Adddgrass", "草元素附魔"); } public override bool RespondsToSlotTargetedForAttack(CardSlot slot, PlayableCard attacker) { return (Object)(object)attacker == (Object)(object)((AbilityBehaviour)this).Card; } public override IEnumerator OnSlotTargetedForAttack(CardSlot slot, PlayableCard attacker) { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); if ((Object)(object)slot.Card != (Object)null && slot.Card.Health > 0) { get get2 = new get(); yield return get2.getgetgrass(attacker, slot.Card); } else { yield return (object)new WaitForSeconds(0.05f); yield return ((AbilityBehaviour)this).LearnAbility(0f); } } } public class Adddice : AbilityBehaviour { public static Ability ability; public override Ability Ability => ability; public override bool RespondsToUpkeep(bool playerUpkeep) { return ((AbilityBehaviour)this).Card.OpponentCard != playerUpkeep; } public override IEnumerator OnUpkeep(bool playerUpkeep) { get get2 = new get(); yield return get2.removesigil(((AbilityBehaviour)this).Card, ability, "Adddice", "冰元素附魔"); } public override bool RespondsToSlotTargetedForAttack(CardSlot slot, PlayableCard attacker) { return (Object)(object)attacker == (Object)(object)((AbilityBehaviour)this).Card; } public override IEnumerator OnSlotTargetedForAttack(CardSlot slot, PlayableCard attacker) { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); if ((Object)(object)slot.Card != (Object)null && slot.Card.Health > 0) { get get2 = new get(); yield return get2.getgetice(attacker, slot.Card); } else { yield return (object)new WaitForSeconds(0.05f); yield return ((AbilityBehaviour)this).LearnAbility(0f); } } } public class Adddrock : AbilityBehaviour { public static Ability ability; public override Ability Ability => ability; public override bool RespondsToUpkeep(bool playerUpkeep) { return ((AbilityBehaviour)this).Card.OpponentCard != playerUpkeep; } public override IEnumerator OnUpkeep(bool playerUpkeep) { get get2 = new get(); yield return get2.removesigil(((AbilityBehaviour)this).Card, ability, "Adddrock", "岩元素附魔"); } public override bool RespondsToSlotTargetedForAttack(CardSlot slot, PlayableCard attacker) { return (Object)(object)attacker == (Object)(object)((AbilityBehaviour)this).Card; } public override IEnumerator OnSlotTargetedForAttack(CardSlot slot, PlayableCard attacker) { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); if ((Object)(object)slot.Card != (Object)null && slot.Card.Health > 0) { get get2 = new get(); yield return get2.getgetrock(attacker, slot.Card); } else { yield return (object)new WaitForSeconds(0.05f); yield return ((AbilityBehaviour)this).LearnAbility(0f); } } } public class Adddthunder : AbilityBehaviour { public static Ability ability; public override Ability Ability => ability; public override bool RespondsToUpkeep(bool playerUpkeep) { return ((AbilityBehaviour)this).Card.OpponentCard != playerUpkeep; } public override IEnumerator OnUpkeep(bool playerUpkeep) { get get2 = new get(); yield return get2.removesigil(((AbilityBehaviour)this).Card, ability, "Adddthunder", "雷元素附魔"); } public override bool RespondsToSlotTargetedForAttack(CardSlot slot, PlayableCard attacker) { return (Object)(object)attacker == (Object)(object)((AbilityBehaviour)this).Card; } public override IEnumerator OnSlotTargetedForAttack(CardSlot slot, PlayableCard attacker) { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); if ((Object)(object)slot.Card != (Object)null && slot.Card.Health > 0) { get get2 = new get(); yield return get2.getgetthunder(attacker, slot.Card); } else { yield return (object)new WaitForSeconds(0.05f); yield return ((AbilityBehaviour)this).LearnAbility(0f); } } } public class Adddwater : AbilityBehaviour { public static Ability ability; public override Ability Ability => ability; public override bool RespondsToUpkeep(bool playerUpkeep) { return ((AbilityBehaviour)this).Card.OpponentCard != playerUpkeep; } public override IEnumerator OnUpkeep(bool playerUpkeep) { get get2 = new get(); yield return get2.removesigil(((AbilityBehaviour)this).Card, ability, "Adddwater", "水元素附魔"); } public override bool RespondsToSlotTargetedForAttack(CardSlot slot, PlayableCard attacker) { return (Object)(object)attacker == (Object)(object)((AbilityBehaviour)this).Card; } public override IEnumerator OnSlotTargetedForAttack(CardSlot slot, PlayableCard attacker) { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); if ((Object)(object)slot.Card != (Object)null && slot.Card.Health > 0) { get get2 = new get(); yield return get2.getgetwater(attacker, slot.Card); } else { yield return (object)new WaitForSeconds(0.05f); yield return ((AbilityBehaviour)this).LearnAbility(0f); } } } public class Adddwind : AbilityBehaviour { public static Ability ability; public override Ability Ability => ability; public override bool RespondsToUpkeep(bool playerUpkeep) { return ((AbilityBehaviour)this).Card.OpponentCard != playerUpkeep; } public override IEnumerator OnUpkeep(bool playerUpkeep) { get get2 = new get(); yield return get2.removesigil(((AbilityBehaviour)this).Card, ability, "Adddwind", "风元素附魔"); } public override bool RespondsToSlotTargetedForAttack(CardSlot slot, PlayableCard attacker) { return (Object)(object)attacker == (Object)(object)((AbilityBehaviour)this).Card; } public override IEnumerator OnSlotTargetedForAttack(CardSlot slot, PlayableCard attacker) { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); if ((Object)(object)slot.Card != (Object)null && slot.Card.Health > 0) { get get2 = new get(); yield return get2.getgetwind(attacker, slot.Card); } else { yield return (object)new WaitForSeconds(0.05f); yield return ((AbilityBehaviour)this).LearnAbility(0f); } } } public class Fire_cling : AbilityBehaviour { public static Ability ability; public override Ability Ability => ability; public override bool RespondsToUpkeep(bool playerUpkeep) { return ((AbilityBehaviour)this).Card.OpponentCard != playerUpkeep; } public override IEnumerator OnUpkeep(bool playerUpkeep) { get get2 = new get(); yield return get2.removesigil(((AbilityBehaviour)this).Card, ability, "Fire_cling", "火元素附着"); } } public class grass_cling : AbilityBehaviour { public static Ability ability; public override Ability Ability => ability; public override bool RespondsToUpkeep(bool playerUpkeep) { return ((AbilityBehaviour)this).Card.OpponentCard != playerUpkeep; } public override IEnumerator OnUpkeep(bool playerUpkeep) { get get2 = new get(); yield return get2.removesigil(((AbilityBehaviour)this).Card, ability, "grass_cling", "草元素附着"); } } public class Ice_cling : AbilityBehaviour { public static Ability ability; public override Ability Ability => ability; public override bool RespondsToUpkeep(bool playerUpkeep) { return ((AbilityBehaviour)this).Card.OpponentCard != playerUpkeep; } public override IEnumerator OnUpkeep(bool playerUpkeep) { get get2 = new get(); yield return get2.removesigil(((AbilityBehaviour)this).Card, ability, "Ice_cling", "冰元素附着"); } } public class Grassseeds : AbilityBehaviour { public static Ability ability; private const string BOMB_PREFAB_PATH = "Prefabs/Cards/SpecificCardModels/DetonatorHoloBomb"; private GameObject bombPrefab; public override Ability Ability => ability; private void Awake() { bombPrefab = ResourceBank.Get<GameObject>("Prefabs/Cards/SpecificCardModels/DetonatorHoloBomb"); } public override bool RespondsToPreDeathAnimation(bool wasSacrifice) { return ((AbilityBehaviour)this).Card.OnBoard; } public override IEnumerator OnPreDeathAnimation(bool wasSacrifice) { ((Card)((AbilityBehaviour)this).Card).Anim.LightNegationEffect(); yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); yield return ExplodeFromSlot(((AbilityBehaviour)this).Card.Slot); yield return ((AbilityBehaviour)this).LearnAbility(0.25f); } protected IEnumerator ExplodeFromSlot(CardSlot slot) { List<CardSlot> adjacentSlots = Singleton<BoardManager>.Instance.GetAdjacentSlots(slot); if (adjacentSlots.Count > 0 && adjacentSlots[0].Index < slot.Index) { if ((Object)(object)adjacentSlots[0].Card != (Object)null && !adjacentSlots[0].Card.Dead) { yield return BombCard(adjacentSlots[0].Card, slot.Card); } adjacentSlots.RemoveAt(0); } if ((Object)(object)slot.opposingSlot.Card != (Object)null && !slot.opposingSlot.Card.Dead) { yield return BombCard(slot.opposingSlot.Card, slot.Card); } if (adjacentSlots.Count > 0 && (Object)(object)adjacentSlots[0].Card != (Object)null && !adjacentSlots[0].Card.Dead) { yield return BombCard(adjacentSlots[0].Card, slot.Card); } } private IEnumerator BombCard(PlayableCard target, PlayableCard attacker) { GameObject bomb = Object.Instantiate<GameObject>(bombPrefab); bomb.transform.position = ((Component)attacker).transform.position + Vector3.up * 0.1f; Tween.Position(bomb.transform, ((Component)target).transform.position + Vector3.up * 0.1f, 0.5f, 0f, Tween.EaseLinear, (LoopType)0, (Action)null, (Action)null, true); yield return (object)new WaitForSeconds(0.5f); ((Card)target).Anim.PlayHitAnimation(); Object.Destroy((Object)(object)bomb); yield return target.TakeDamage(10, attacker); } } public class Superconducting : AbilityBehaviour { public static Ability ability; public override Ability Ability => ability; public override bool RespondsToUpkeep(bool playerUpkeep) { return ((AbilityBehaviour)this).Card.OpponentCard != playerUpkeep; } public override IEnumerator OnUpkeep(bool playerUpkeep) { get get2 = new get(); yield return get2.removesigil(((AbilityBehaviour)this).Card, ability, "Superconducting", "超导"); } } public class thunder_cling : AbilityBehaviour { public static Ability ability; public override Ability Ability => ability; public override bool RespondsToUpkeep(bool playerUpkeep) { return ((AbilityBehaviour)this).Card.OpponentCard != playerUpkeep; } public override IEnumerator OnUpkeep(bool playerUpkeep) { get get2 = new get(); yield return get2.removesigil(((AbilityBehaviour)this).Card, ability, "thunder_cling", "雷元素附着"); } } public class Water_cling : AbilityBehaviour { public static Ability ability; public override Ability Ability => ability; public override bool RespondsToUpkeep(bool playerUpkeep) { return ((AbilityBehaviour)this).Card.OpponentCard != playerUpkeep; } public override IEnumerator OnUpkeep(bool playerUpkeep) { get get2 = new get(); yield return get2.removesigil(((AbilityBehaviour)this).Card, ability, "Water_cling", "水元素附着"); } } public static class Tools { public static GameObject act1holotarget = ResourceBank.Get<GameObject>("Prefabs/Cards/SpecificCardModels/CannonTargetIcon"); public static GameObject act3holotarget = ResourceBank.Get<GameObject>("Prefabs/Cards/SpecificCardModels/SniperTargetIcon"); public static GameObject DeathcardCorner = ResourceBank.Get<GameObject>("Prefabs/GBCCardBattle/PixelDeathcardOverlay"); public static GameObject Particle; public static int CombinedPower(this List<Ability> abilities) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) i