From 767a1e6841af7edb94a1867a46bb1d66b03d49a7 Mon Sep 17 00:00:00 2001 From: Ha <479310608@qq.com> Date: Mon, 7 Nov 2022 18:02:51 +0800 Subject: [PATCH 01/18] Add ai "ThunderDragon" --- Decks/AI_ThunderDragon.ydk | 69 + Dialogs/Zefra.zh-CN.json | 54 + Game/AI/Decks/ThunderDragonExecutor.cs | 2334 ++++++++++++++++++++++++ WindBot.csproj | 1 + 4 files changed, 2458 insertions(+) create mode 100644 Decks/AI_ThunderDragon.ydk create mode 100644 Dialogs/Zefra.zh-CN.json create mode 100644 Game/AI/Decks/ThunderDragonExecutor.cs diff --git a/Decks/AI_ThunderDragon.ydk b/Decks/AI_ThunderDragon.ydk new file mode 100644 index 00000000..ff6d7c02 --- /dev/null +++ b/Decks/AI_ThunderDragon.ydk @@ -0,0 +1,69 @@ +#created by ... +#main +5206415 +32731036 +32731036 +90488465 +6637331 +6637331 +33854624 +33854624 +29596581 +29596581 +83107873 +83107873 +31786629 +31786629 +31786629 +56713174 +56713174 +56713174 +61901281 +61901281 +99234526 +99234526 +92998610 +92998610 +44586426 +44586426 +44586426 +14558127 +14558127 +23434538 +23434538 +23434538 +76218313 +20318029 +20318029 +20318029 +1475311 +1475311 +1475311 +75500286 +95238394 +95238394 +99266988 +99266988 +99266988 +24224830 +24224830 +34090915 +10045474 +10045474 +#extra +41685633 +41685633 +15291624 +21044178 +98127546 +21887175 +86066372 +4280258 +38342335 +83152482 +65741786 +50277355 +70369116 +73539069 +41999284 +!side diff --git a/Dialogs/Zefra.zh-CN.json b/Dialogs/Zefra.zh-CN.json new file mode 100644 index 00000000..346780ec --- /dev/null +++ b/Dialogs/Zefra.zh-CN.json @@ -0,0 +1,54 @@ +{ + "welcome": [ + "你好呀,打牌人", + "你好,欢迎和我耍牌" + ], + "deckerror": [ + "抱歉,我的卡组需要{0}才可以耍" + ], + "duelstart": [ + "嘿嘿,我要用二哥打爆你。", + "我的卡组不屁股,也就塞了几张禁卡捏", + "我只会耍简单的卡组,不要用禁卡和我打拉" + ], + "newturn": [ + "到我喽,抽卡!(裤裆偷偷掏出)", + "我抽一张卡" + ], + "endturn": [ + "我耍完了,到你了", + "到你回合了哦,不会是多线程决斗吧?" + ], + "directattack": [ + "{0},攻击对手!", + "{0},撞烂它!", + "{0},小拳揍它!" + ], + "attack": [ + "{0},把{1}打倒!", + "嘿嘿,{0},攻击{1}!" + ], + "ondirectattack": [ + "啊,不要打我,我放禁卡给你玩", + "呀,太强辣,可以带带我嘛", + "好痛...想拔电源" + ], + "facedownmonstername": "怪兽", + "activate": [ + "嘿嘿,我发动{0}", + "嘎嘎,我使用{0}的力量" + ], + "summon": [ + "我召唤(掏出){0}!", + "出来,我的小怪兽{0}!" + ], + "setmonster": [ + "我放置一只不知名怪兽。" + ], + "chaining": [ + "嘿,我能用禁卡气不气?", + "乎,我发动{0}!", + "不好意思拉,我有{0}", + "哈哈,发动{0}的效果!" + ] +} diff --git a/Game/AI/Decks/ThunderDragonExecutor.cs b/Game/AI/Decks/ThunderDragonExecutor.cs new file mode 100644 index 00000000..e16f5ded --- /dev/null +++ b/Game/AI/Decks/ThunderDragonExecutor.cs @@ -0,0 +1,2334 @@ +using YGOSharp.OCGWrapper.Enums; +using System.Collections.Generic; +using System.Linq; +using WindBot; +using WindBot.Game; +using WindBot.Game.AI; + +namespace WindBot.Game.AI.Decks +{ + [Deck("ThunderDragon", "AI_ThunderDragon")] + class ThunderDragonExecutor : DefaultExecutor + { + public class CardId + { + public const int ThunderDragonlord = 5206415; + public const int TheBystialLubellion = 32731036; + public const int TheChaosCreator = 90488465; + public const int BystialDruiswurm = 6637331; + public const int BystialMagnamhut = 33854624; + public const int ThunderDragonroar = 29596581; + public const int ThunderDragonhawk = 83107873; + public const int NormalThunderDragon = 31786629; + public const int ThunderDragondark = 56713174; + public const int BlackDragonCollapserpent = 61901281; + public const int WhiteDragonWyverburster = 99234526; + public const int AloofLupine = 92998610; + public const int BatterymanSolar = 44586426; + public const int AshBlossom = 14558127; + public const int G = 23434538; + public const int DragonBusterDestructionSword = 76218313; + public const int ThunderDragonmatrix = 20318029; + public const int AllureofDarkness = 1475311; + public const int GoldSarcophagus = 75500286; + public const int ThunderDragonFusion = 95238394; + public const int ChaosSpace = 99266988; + public const int CalledbytheGrave = 24224830; + public const int BrandedRegained = 34090915; + public const int InfiniteImpermanence = 10045474; + public const int BatterymanToken = 44586427; + + public const int ThunderDragonTitan = 41685633; + public const int ThunderDragonColossus = 15291624; + public const int AbyssDweller = 21044178; + public const int UnderworldGoddessoftheClosedWorld = 98127546; + public const int MekkKnightCrusadiaAvramax = 21887175; + public const int AccesscodeTalker = 86066372; + public const int BowoftheGoddess = 4280258; + public const int KnightmareUnicorn = 38342335; + public const int UnionCarrier = 83152482; + public const int IP = 65741786; + public const int CrossSheep = 50277355; + public const int PredaplantVerteAnaconda = 70369116; + public const int StrikerDragon = 73539069; + public const int Linkuriboh = 41999284; + } + private enum Select + { + NormalThunderDragon, + TheChaosCreator, + ChaosSpace_1, + ChaosSpace_2, + ThunderDragonColossus, + AccesscodeTalker, + DestroyReplace + }; + private const int THUNDER_COUNTD = 18; + List selectFlag = new List() + { + false,false,false,false,false,false,false + }; + List selectAtt = new List() + { + false,false,false,false,false,false,false + }; + + bool isSummoned = false; + bool handActivated = false; + bool place_CrossSheep = false; + bool place_ThunderDragonColossus = false; + bool place_Link_4 = false; + bool summon_WhiteDragonWyverburster = false; + bool summon_BlackDragonCollapserpent = false; + bool summon_UnionCarrier = false; + bool summon_TheBystialLubellion = false; + bool activate_ThunderDragonFusion = false; + bool activate_ThunderDragondark = false; + bool activate_ThunderDragonroar = false; + bool activate_ThunderDragonhawk = false; + bool activate_ThunderDragonmatrix = false; + bool activate_TheBystialLubellion_hand = false; + bool activate_BystialMagnamhut_hand = false; + bool activate_BystialDruiswurm_hand = false; + bool activate_ChaosSpace_grave = false; + bool activate_ChaosSpace_hand = false; + bool No_SpSummon = false; + + List SpSummonCardsId = new List() + { + CardId.ThunderDragonmatrix,CardId.BatterymanSolar , + CardId.AshBlossom,CardId.G, + CardId.DragonBusterDestructionSword,CardId.AloofLupine + }; + List NotSpSummonCardsId = new List() + { + CardId.ThunderDragonlord,CardId.TheBystialLubellion,CardId.TheChaosCreator, + CardId.BlackDragonCollapserpent,CardId.WhiteDragonWyverburster + }; + List Impermanence_list = new List(); + List should_not_negate = new List + { + 81275020, 28985331 + }; + public ThunderDragonExecutor(GameAI ai, Duel duel) + : base(ai, duel) + { + AddExecutor(ExecutorType.Activate, CardId.InfiniteImpermanence, Impermanence_activate); + AddExecutor(ExecutorType.Activate, CardId.G, GEffect); + AddExecutor(ExecutorType.Activate, CardId.BowoftheGoddess); + AddExecutor(ExecutorType.Activate, CardId.UnderworldGoddessoftheClosedWorld); + AddExecutor(ExecutorType.Activate, CardId.AshBlossom, AshBlossomEffect); + AddExecutor(ExecutorType.Activate, CardId.TheBystialLubellion, TheBystialLubellionEffect); + AddExecutor(ExecutorType.Activate, CardId.CalledbytheGrave, CalledbytheGraveEffect); + AddExecutor(ExecutorType.Activate, CardId.AccesscodeTalker, AccesscodeTalkerEffect); + AddExecutor(ExecutorType.Activate, CardId.BrandedRegained, BrandedRegainedEffect); + AddExecutor(ExecutorType.Activate, CardId.UnionCarrier, UnionCarrierEffect); + AddExecutor(ExecutorType.SpSummon, CardId.TheBystialLubellion, TheBystialLubellionSummon); + AddExecutor(ExecutorType.Activate, CardId.GoldSarcophagus, GoldSarcophagusEffect); + AddExecutor(ExecutorType.Activate, CardId.NormalThunderDragon, NormalThunderDragonEffect); + AddExecutor(ExecutorType.Activate, CardId.ThunderDragonmatrix, ThunderDragonmatrixEffect); + AddExecutor(ExecutorType.SpSummon, CardId.StrikerDragon, StrikerDragonSummon); + AddExecutor(ExecutorType.SpSummon, CardId.CrossSheep, CrossSheepSummon); + AddExecutor(ExecutorType.Activate, CardId.CrossSheep, CrossSheepEffect); + AddExecutor(ExecutorType.Activate, CardId.TheChaosCreator); + AddExecutor(ExecutorType.Activate, CardId.ThunderDragonTitan, ThunderDragonTitanEffect); + AddExecutor(ExecutorType.Activate, CardId.ThunderDragonColossus, ThunderDragonColossusEffect); + AddExecutor(ExecutorType.SpSummon, CardId.ThunderDragonColossus, ThunderDragonColossusSummon); + AddExecutor(ExecutorType.Summon, CardId.AloofLupine, AloofLupineSummon); + AddExecutor(ExecutorType.Activate, CardId.AloofLupine, AloofLupineEffect); + AddExecutor(ExecutorType.Summon, CardId.BatterymanSolar, BatterymanSolarSummon); + AddExecutor(ExecutorType.Activate, CardId.BatterymanSolar, BatterymanSolarEffect); + AddExecutor(ExecutorType.SpSummon, CardId.WhiteDragonWyverburster, WhiteDragonWyverbursterSummon); + AddExecutor(ExecutorType.Activate, CardId.WhiteDragonWyverburster); + AddExecutor(ExecutorType.SpSummon, CardId.BlackDragonCollapserpent, BlackDragonCollapserpentSummon); + AddExecutor(ExecutorType.Activate, CardId.BlackDragonCollapserpent); + AddExecutor(ExecutorType.SpSummon, CardId.UnionCarrier, UnionCarrierSummon); + AddExecutor(ExecutorType.Activate, CardId.AllureofDarkness, AllureofDarknessEffect); + AddExecutor(ExecutorType.Activate, CardId.ThunderDragonhawk, ThunderDragonhawkEffect); + AddExecutor(ExecutorType.Activate, CardId.ChaosSpace, ChaosSpaceEffect); + AddExecutor(ExecutorType.Activate, CardId.BystialMagnamhut, BystialMagnamhutEffect); + AddExecutor(ExecutorType.Activate, CardId.BystialDruiswurm, BystialDruiswurmEffect); + AddExecutor(ExecutorType.SpSummon, CardId.ThunderDragonlord, ThunderDragonlordSummon); + AddExecutor(ExecutorType.Activate, CardId.PredaplantVerteAnaconda, PredaplantVerteAnacondaEffect); + AddExecutor(ExecutorType.MonsterSet, CardId.ThunderDragonmatrix, ThunderDragonmatrixSet); + AddExecutor(ExecutorType.Activate, CardId.ThunderDragonFusion, ThunderDragonFusionEffect); + AddExecutor(ExecutorType.Activate, CardId.ThunderDragondark, ThunderDragondarkEffect); + AddExecutor(ExecutorType.Activate, CardId.ThunderDragonroar, ThunderDragonroarEffect); + AddExecutor(ExecutorType.Activate, CardId.ThunderDragonlord, ThunderDragonlordEffect); + AddExecutor(ExecutorType.SpSummon, CardId.TheChaosCreator, TheChaosCreatorSummon); + AddExecutor(ExecutorType.SpSummon, CardId.UnderworldGoddessoftheClosedWorld, UnderworldGoddessoftheClosedWorldSummon); + AddExecutor(ExecutorType.SpSummon, CardId.BowoftheGoddess, BowoftheGoddessSummon); + AddExecutor(ExecutorType.SpSummon, CardId.UnionCarrier, UnionCarrierSummon_2); + AddExecutor(ExecutorType.Activate, CardId.IP, IPEffect); + AddExecutor(ExecutorType.SpSummon, CardId.IP,IPSummon); + AddExecutor(ExecutorType.Activate, CardId.KnightmareUnicorn, KnightmareUnicornEffect); + AddExecutor(ExecutorType.SpSummon, CardId.KnightmareUnicorn, KnightmareUnicornSummon); + AddExecutor(ExecutorType.SpSummon, CardId.AccesscodeTalker, BowoftheGoddessSummon); + AddExecutor(ExecutorType.Activate, CardId.MekkKnightCrusadiaAvramax, MekkKnightCrusadiaAvramaxEffect); + AddExecutor(ExecutorType.SpSummon, CardId.MekkKnightCrusadiaAvramax, MekkKnightCrusadiaAvramaxSummon); + AddExecutor(ExecutorType.SpSummon, CardId.PredaplantVerteAnaconda, PredaplantVerteAnacondaSummon); + AddExecutor(ExecutorType.Activate, CardId.Linkuriboh); + AddExecutor(ExecutorType.SpSummon, CardId.Linkuriboh); + AddExecutor(ExecutorType.SpSummon, CardId.AbyssDweller); + AddExecutor(ExecutorType.Activate, CardId.AbyssDweller, GEffect); + AddExecutor(ExecutorType.Activate, CardId.ChaosSpace, ChaosSpaceEffect_2); + AddExecutor(ExecutorType.Activate, CardId.ThunderDragonmatrix, ThunderDragonmatrixEffect_2); + AddExecutor(ExecutorType.Summon, CardId.ThunderDragonmatrix, ThunderDragonmatrixSummon); + AddExecutor(ExecutorType.SpSummon, CardId.BlackDragonCollapserpent, BlackDragonCollapserpentSummon_2); + AddExecutor(ExecutorType.Summon, CardId.ThunderDragonroar, DefaultSummon); + AddExecutor(ExecutorType.Summon, CardId.ThunderDragondark, DefaultSummon); + AddExecutor(ExecutorType.Summon, CardId.NormalThunderDragon, DefaultSummon); + AddExecutor(ExecutorType.Summon, CardId.DragonBusterDestructionSword, ThunderDragonmatrixSummon); + AddExecutor(ExecutorType.Summon, CardId.AloofLupine, DefaultSummon); + AddExecutor(ExecutorType.Summon, CardId.AshBlossom, DefaultSummon); + AddExecutor(ExecutorType.Summon, CardId.G, DefaultSummon); + AddExecutor(ExecutorType.Activate, CardId.ThunderDragondark, ThunderDragondarkEffect_2); + AddExecutor(ExecutorType.SpellSet, SpellSet); + AddExecutor(ExecutorType.Activate, CardId.AllureofDarkness, AllureofDarknessEffect_2); + AddExecutor(ExecutorType.Activate, CardId.UnionCarrier, UnionCarrierEffect_2); + AddExecutor(ExecutorType.Repos, DefaultMonsterRepos); + + } + #region DeckCheck + public int CheckRemainInDeck(int id) + { + switch (id) + { + case CardId.ThunderDragonlord: + return Bot.GetRemainingCount(CardId.ThunderDragonlord, 1); + case CardId.TheBystialLubellion: + return Bot.GetRemainingCount(CardId.TheBystialLubellion, 2); + case CardId.TheChaosCreator: + return Bot.GetRemainingCount(CardId.TheChaosCreator, 1); + case CardId.BystialDruiswurm: + return Bot.GetRemainingCount(CardId.BystialDruiswurm, 2); + case CardId.BystialMagnamhut: + return Bot.GetRemainingCount(CardId.BystialMagnamhut, 2); + case CardId.ThunderDragonroar: + return Bot.GetRemainingCount(CardId.ThunderDragonroar, 2); + case CardId.ThunderDragonhawk: + return Bot.GetRemainingCount(CardId.ThunderDragonhawk, 2); + case CardId.NormalThunderDragon: + return Bot.GetRemainingCount(CardId.NormalThunderDragon, 3); + case CardId.ThunderDragondark: + return Bot.GetRemainingCount(CardId.ThunderDragondark, 3); + case CardId.BlackDragonCollapserpent: + return Bot.GetRemainingCount(CardId.BlackDragonCollapserpent, 2); + case CardId.WhiteDragonWyverburster: + return Bot.GetRemainingCount(CardId.WhiteDragonWyverburster, 2); + case CardId.AloofLupine: + return Bot.GetRemainingCount(CardId.AloofLupine, 2); + case CardId.BatterymanSolar: + return Bot.GetRemainingCount(CardId.BatterymanSolar, 3); + case CardId.AshBlossom: + return Bot.GetRemainingCount(CardId.AshBlossom, 2); + case CardId.G: + return Bot.GetRemainingCount(CardId.G, 3); + case CardId.DragonBusterDestructionSword: + return Bot.GetRemainingCount(CardId.DragonBusterDestructionSword, 1); + case CardId.ThunderDragonmatrix: + return Bot.GetRemainingCount(CardId.ThunderDragonmatrix, 3); + case CardId.AllureofDarkness: + return Bot.GetRemainingCount(CardId.AllureofDarkness, 3); + case CardId.GoldSarcophagus: + return Bot.GetRemainingCount(CardId.GoldSarcophagus, 1); + case CardId.ThunderDragonFusion: + return Bot.GetRemainingCount(CardId.ThunderDragonFusion, 2); + case CardId.ChaosSpace: + return Bot.GetRemainingCount(CardId.ChaosSpace, 3); + case CardId.CalledbytheGrave: + return Bot.GetRemainingCount(CardId.CalledbytheGrave, 2); + case CardId.BrandedRegained: + return Bot.GetRemainingCount(CardId.BrandedRegained, 1); + case CardId.InfiniteImpermanence: + return Bot.GetRemainingCount(CardId.InfiniteImpermanence, 2); + default: + return 0; + } + } + #endregion + public override void OnNewTurn() + { + handActivated = false; + isSummoned = false; + No_SpSummon = false; + + activate_ThunderDragonFusion = false; + activate_ThunderDragondark = false; + activate_ThunderDragonroar = false; + activate_ThunderDragonhawk = false; + activate_ThunderDragonmatrix = false; + activate_TheBystialLubellion_hand = false; + activate_BystialMagnamhut_hand = false; + activate_BystialDruiswurm_hand = false; + activate_ChaosSpace_grave = false; + + summon_WhiteDragonWyverburster = false; + summon_BlackDragonCollapserpent = false; + summon_TheBystialLubellion = false; + summon_UnionCarrier = false; + + for (int i = 0; i < selectAtt.Count; i++) + selectAtt[i] = false; + } + public override int OnSelectPlace(int cardId, int player, CardLocation location, int available) + { + if (player == 0 && location==CardLocation.MonsterZone) + { + if (place_CrossSheep) + { + place_CrossSheep = false; + if ((Zones.z5 & available) > 0) return Zones.z5; + if ((Zones.z6 & available) > 0) return Zones.z6; + } + if (place_ThunderDragonColossus) + { + place_ThunderDragonColossus = false; + if (Bot.MonsterZone[5] != null && Bot.MonsterZone[5].IsCode(CardId.CrossSheep)) + { + if ((Zones.z0 & available) > 0) return Zones.z0; + if ((Zones.z2 & available) > 0) return Zones.z2; + } + if (Bot.MonsterZone[6] != null && Bot.MonsterZone[6].IsCode(CardId.CrossSheep)) + { + if ((Zones.z2 & available) > 0) return Zones.z2; + if ((Zones.z4 & available) > 0) return Zones.z4; + } + if ((Zones.z2 & available) > 0) return Zones.z2; + if ((Zones.z0 & available) > 0) return Zones.z0; + if ((Zones.z4 & available) > 0) return Zones.z4; + } + if (place_Link_4) + { + place_Link_4 = false; + if ((Zones.z5 & available) > 0) return Zones.z5; + if ((Zones.z6 & available) > 0) return Zones.z6; + } + if (Bot.MonsterZone[5] != null && Bot.MonsterZone[5].IsCode(CardId.CrossSheep)) + { + if ((Zones.z0 & available) > 0 && Bot.MonsterZone[2] != null && Bot.MonsterZone[2].HasType(CardType.Fusion) && Bot.MonsterZone[2].IsFaceup()) return Zones.z0; + if ((Zones.z2 & available) > 0 && Bot.MonsterZone[0] != null && Bot.MonsterZone[0].HasType(CardType.Fusion) && Bot.MonsterZone[0].IsFaceup()) return Zones.z2; + } + if (Bot.MonsterZone[6] != null && Bot.MonsterZone[6].IsCode(CardId.CrossSheep)) + { + if ((Zones.z2 & available) > 0 && Bot.MonsterZone[4] != null && Bot.MonsterZone[4].HasType(CardType.Fusion) && Bot.MonsterZone[4].IsFaceup()) return Zones.z2; + if ((Zones.z4 & available) > 0 && Bot.MonsterZone[2] != null && Bot.MonsterZone[2].HasType(CardType.Fusion) && Bot.MonsterZone[2].IsFaceup()) return Zones.z4; + } + return base.OnSelectPlace(cardId, player, location, available); + } + return base.OnSelectPlace(cardId, player, location, available); + } + public override IList OnSelectCard(IList cards, int min, int max, int hint, bool cancelable) + { + if (selectFlag.Count(flag => flag) > 1) + { + if (selectFlag.Count(flag => flag) == 2 && selectFlag[(int)Select.TheChaosCreator] && !selectFlag[(int)Select.DestroyReplace]) + { + selectFlag[(int)Select.TheChaosCreator] = false; + } + else if (selectFlag.Count(flag => flag) == 2 && selectFlag[(int)Select.DestroyReplace]) + { + selectFlag[(int)Select.DestroyReplace] = false; + } + else + { + for (int i = 0; i < selectFlag.Count; ++i) + selectFlag[i] = false; + return null; + } + } + if (selectFlag[(int)Select.NormalThunderDragon]) + { + selectFlag[(int)Select.NormalThunderDragon] = false; + if (cards.Count <= 1) return null; + if (Bot.HasInHand(CardId.ChaosSpace) && !activate_ChaosSpace_hand) + return Util.CheckSelectCount(cards, cards, max, max); + if(Bot.HasInHand(CardId.AloofLupine) && !isSummoned && GetRemainingThunderCount(true)>0) + return Util.CheckSelectCount(cards, cards, max, max); + if (Bot.HasInHand(CardId.ThunderDragonFusion) && !activate_ThunderDragonFusion) + return Util.CheckSelectCount(cards, cards, min, min); + if(HasInZoneNoActivate(CardId.BlackDragonCollapserpent,CardLocation.Hand) + || HasInZoneNoActivate(CardId.BystialDruiswurm, CardLocation.Hand) + || HasInZoneNoActivate(CardId.BystialMagnamhut, CardLocation.Hand) + || HasInZoneNoActivate(CardId.TheBystialLubellion, CardLocation.Hand)) + return Util.CheckSelectCount(cards, cards, min, min); + if(HasInZoneNoActivate(CardId.ThunderDragonhawk,CardLocation.Hand)) + return Util.CheckSelectCount(cards, cards, min, min); + return Util.CheckSelectCount(cards, cards, max, max); + } + if (selectFlag[(int)Select.ChaosSpace_1]) + { + selectFlag[(int)Select.ChaosSpace_1] = false; + selectFlag[(int)Select.ChaosSpace_2] = true; + List res = new List(); + if (cards.Any(card => card != null && card.IsCode(CardId.ThunderDragonroar)) && !activate_ThunderDragonroar) + res.AddRange(cards.Where(card => card != null && card.IsCode(CardId.ThunderDragonroar)).ToList()); + if (cards.Any(card => card != null && card.IsCode(CardId.ThunderDragondark)) && !activate_ThunderDragondark) + res.AddRange(cards.Where(card => card != null && card.IsCode(CardId.ThunderDragondark)).ToList()); + if (cards.Any(card => card != null && card.IsCode(CardId.ThunderDragondark)) && !activate_ThunderDragondark) + res.AddRange(cards.Where(card => card != null && card.IsCode(CardId.ThunderDragondark)).ToList()); + if (cards.Any(card => card != null && card.IsCode(CardId.NormalThunderDragon))) + res.AddRange(cards.Where(card => card != null && card.IsCode(CardId.NormalThunderDragon)).ToList()); + if (cards.Any(card => card != null && card.IsCode(CardId.ThunderDragonmatrix))) + res.AddRange(cards.Where(card => card != null && card.IsCode(CardId.ThunderDragonmatrix)).ToList()); + if (res.Count <= 0) return null; + return Util.CheckSelectCount(res, cards, min, max); + } + if (selectFlag[(int)Select.ChaosSpace_2]) + { + selectFlag[(int)Select.ChaosSpace_2] = false; + List res = new List(); + //can't get CardAttributes in deck + if (cards.Any(card => card != null && (card.Id == CardId.BlackDragonCollapserpent + || card.Id == CardId.TheChaosCreator))) + { + if (!summon_BlackDragonCollapserpent && cards.Any(card => card != null && card.IsCode(CardId.BlackDragonCollapserpent) && !Bot.HasInHand(CardId.BlackDragonCollapserpent))) + { + IList cards_1 = cards.Where(card => card != null && card.IsCode(CardId.BlackDragonCollapserpent)).ToList(); + IList cards_2 = cards.Where(card => card != null && !card.IsCode(CardId.BlackDragonCollapserpent)).ToList(); + res.AddRange(cards_1); + res.AddRange(cards_2); + return Util.CheckSelectCount(res, cards, min, max); + } + else + { + res = cards.ToList(); + res.Sort(CardContainer.CompareCardLevel); + res.Reverse(); + return Util.CheckSelectCount(res, cards, min, max); + } + } + else if (cards.Any(card => card != null && (card.Id == CardId.WhiteDragonWyverburster + ||card.Id == CardId.ThunderDragonlord || card.Id == CardId.TheBystialLubellion))) + { + if (!summon_WhiteDragonWyverburster && cards.Any(card => card != null && card.IsCode(CardId.WhiteDragonWyverburster) + && (Bot.HasInExtra(CardId.StrikerDragon) || Bot.HasInExtra(CardId.UnionCarrier)) && !Bot.HasInHand(CardId.WhiteDragonWyverburster))) + { + IList cards_1 = cards.Where(card => card != null && card.IsCode(CardId.WhiteDragonWyverburster)).ToList(); + IList cards_2 = cards.Where(card => card != null && !card.IsCode(CardId.WhiteDragonWyverburster)).ToList(); + res.AddRange(cards_1); + res.AddRange(cards_2); + return Util.CheckSelectCount(res, cards, min, max); + } + else if (!activate_TheBystialLubellion_hand && (HasInZoneNoActivate(CardId.BystialMagnamhut, CardLocation.Deck) + || HasInZoneNoActivate(CardId.BystialDruiswurm, CardLocation.Deck) && !Bot.HasInHand(CardId.TheBystialLubellion)) + && cards.Any(card => card != null && card.IsCode(CardId.TheBystialLubellion))) + { + IList cards_1 = cards.Where(card => card != null && card.IsCode(CardId.TheBystialLubellion)).ToList(); + IList cards_2 = cards.Where(card => card != null && !card.IsCode(CardId.TheBystialLubellion)).ToList(); + res.AddRange(cards_1); + res.AddRange(cards_2); + return Util.CheckSelectCount(res, cards, min, max); + } + else if (!summon_WhiteDragonWyverburster && !Bot.HasInHand(CardId.WhiteDragonWyverburster) && cards.Any(card => card != null && card.IsCode(CardId.WhiteDragonWyverburster))) + { + IList cards_1 = cards.Where(card => card != null && card.IsCode(CardId.WhiteDragonWyverburster)).ToList(); + IList cards_2 = cards.Where(card => card != null && !card.IsCode(CardId.WhiteDragonWyverburster)).ToList(); + res.AddRange(cards_1); + res.AddRange(cards_2); + return Util.CheckSelectCount(res, cards, min, max); + } + else + { + res = cards.ToList(); + res.Sort(CardContainer.CompareCardLevel); + return Util.CheckSelectCount(res, cards, min, max); + } + } + return null; + } + if (selectFlag[(int)Select.ThunderDragonColossus]) + { + selectFlag[(int)Select.ThunderDragonColossus] = false; + if (cards.Count < 2) return null; + List copy_cards = new List(cards); + copy_cards.Sort(CardContainer.CompareCardAttack); + IList res = new List(); + for (int i = 0; i < copy_cards.Count; ++i) + { + if ((copy_cards[i].Id == CardId.ThunderDragonroar && HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.MonsterZone) && Bot.GetMonstersInMainZone().Count < 5) + || (copy_cards[i].Id == CardId.ThunderDragondark && HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.MonsterZone)) + || (copy_cards[i].Id == CardId.ThunderDragonmatrix && HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.MonsterZone))) + { + if (i <= 0) continue; + ClientCard temp = copy_cards[0]; + copy_cards[0] = copy_cards[i]; + copy_cards[i] = temp; + } + } + return Util.CheckSelectCount(copy_cards, cards, min, max); + } + if (selectFlag[(int)Select.AccesscodeTalker]) + { + selectFlag[(int)Select.AccesscodeTalker] = false; + List copy_cards = new List(cards); + copy_cards.Sort(CardContainer.CompareCardAttack); + List res = new List(); + res.AddRange(copy_cards.Where(card => card != null && card.Location == CardLocation.Grave)); + res.AddRange(copy_cards.Where(card => card != null && card.Location != CardLocation.Grave)); + if (res.Count <= 0) return null; + CardAttribute att = (CardAttribute)res[0].Attribute; + if (GetAttIndex(att) > 0) selectAtt[GetAttIndex(att)] = true; + return Util.CheckSelectCount(res, cards, min, max); + } + if (selectFlag[(int)Select.DestroyReplace]) + { + selectFlag[(int)Select.DestroyReplace] = false; + if (min == 1 && max == 1) + { + List copy_cards = new List(cards); + copy_cards.Sort(CardContainer.CompareCardAttack); + List res = new List(); + List pre_res = new List(); + foreach (var card in copy_cards) + { + if (card == null) continue; + if (card.Id == CardId.ThunderDragonroar && !activate_ThunderDragonroar && Bot.GetMonstersInMainZone().Count < 5) + res.Add(card); + else if (card.Id == CardId.ThunderDragondark && !activate_ThunderDragondark) + res.Add(card); + else + pre_res.Add(card); + } + res.Reverse(); + res.AddRange(pre_res); + if(res.Count>=0) return Util.CheckSelectCount(res, cards, min, max); + return null; + } + if (min == 2 && max == 2) + { + List res = new List(); + if (!activate_ThunderDragonroar && Bot.GetMonstersInMainZone().Count < 5) + { + foreach (var card in cards) + if (card.Id == CardId.ThunderDragonroar && res.Count(_card => _card != null && _card.Id == CardId.ThunderDragonroar) <= 0) + res.Add(card); + } + if (!activate_ThunderDragondark) + { + foreach (var card in cards) + if (card.Id == CardId.ThunderDragondark && res.Count(_card => _card != null && _card.Id == CardId.ThunderDragondark) <= 0) + res.Add(card); + } + if (!activate_ThunderDragonhawk && !GetZoneRepeatCardsId(0,Bot.Hand).Contains(-1)) + { + foreach (var card in cards) + if (card.Id == CardId.ThunderDragonhawk && res.Count(_card => _card != null && _card.Id == CardId.ThunderDragonhawk) <= 0) + res.Add(card); + } + if (HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.Deck)) + { + foreach (var card in cards) + if (card.Id == CardId.ThunderDragonmatrix && res.Count(_card => _card != null && _card.Id == CardId.ThunderDragonmatrix) <= 0) + res.Add(card); + } + List scards = cards.Where(card => card != null && card.Id != CardId.ChaosSpace && card.Id != CardId.ThunderDragonFusion).ToList(); + if (scards.Count > 0) res.AddRange(scards); + List mcards = cards.Where(card => card != null && !card.HasRace(CardRace.Thunder)).ToList(); + mcards.Sort(CardContainer.CompareCardAttack); + mcards.Reverse(); + if (mcards.Count > 0) res.AddRange(mcards); + if(res.Count>0) return Util.CheckSelectCount(res, cards, min, max); + return null; + + } + } + if (hint == HintMsg.FusionMaterial) + { + List res = new List(); + List banish = cards.Where(card => card != null && card.Location == CardLocation.Removed).ToList(); + if (banish.Count > 0) res.AddRange(banish); + List grave_1 = cards.Where(card => card != null && card.Location == CardLocation.Grave && card.Id != CardId.ThunderDragonroar && card.Id != CardId.ThunderDragondark).ToList(); + List grave_2 = cards.Where(card => card != null && card.Location == CardLocation.Grave && (card.Id == CardId.ThunderDragonroar || card.Id == CardId.ThunderDragondark)).ToList(); + if (grave_1.Count > 0) res.AddRange(grave_1); + if (grave_2.Count > 0) res.AddRange(grave_2); + if (res.Count > 0) return Util.CheckSelectCount(res, cards, min, max); + return null; + } + if (Duel.Phase == DuelPhase.End && hint == HintMsg.AddToHand) + { + List res = new List(); + List cards_1 = cards.Where(card => card != null && card.Id == CardId.BystialDruiswurm).ToList(); + List cards_2 = cards.Where(card => card != null && (card.Id == CardId.WhiteDragonWyverburster || card.Id == CardId.BlackDragonCollapserpent)).ToList(); + List cards_3 = cards.Where(card => card != null && card.Id != CardId.BystialDruiswurm && card.Id != CardId.WhiteDragonWyverburster && card.Id != CardId.BlackDragonCollapserpent).ToList(); + if (cards_1.Count > 0) res.AddRange(cards_1); + if (cards_2.Count > 0) res.AddRange(cards_2); + if (cards_3.Count > 0) res.AddRange(cards_3); + if (res.Count > 0) return Util.CheckSelectCount(res, cards, min, max); + return null; + } + if (hint == HintMsg.OperateCard) + { + if (cards.Any(card => card != null && card.Location == CardLocation.Removed)) + { + selectFlag[(int)Select.TheChaosCreator] = true; + List res = new List(); + List cards_1 = cards.Where(card => card != null && card.Controller == 0 && (card.IsCode(CardId.ThunderDragonColossus) || card.IsCode(CardId.ThunderDragonTitan))).ToList(); + if (cards_1.Count > 0) res.AddRange(cards_1); + List cards_2 = cards.Where(card => card != null && card.Controller == 0 && !card.IsCode(CardId.ThunderDragonColossus) && !card.IsCode(CardId.ThunderDragonTitan)).ToList(); + if (cards_2.Count > 0) res.AddRange(cards_2); + List cards_3 = cards.Where(card => card != null && card.Controller == 1).ToList(); + if (cards_3.Count > 0) res.AddRange(cards_3); + if (res.Count > 0) return Util.CheckSelectCount(res, cards, min, max); + return null; + } + return null; + } + if (selectFlag[(int)Select.TheChaosCreator]) + { + selectFlag[(int)Select.TheChaosCreator] = false; + List res = new List(cards); + res.Sort(CardContainer.CompareCardAttack); + if (res.Count <= 0) return null; + if(res[0].Attack= 0 && this_seq + that_seq == 4) + || (Util.IsChainTarget(Card)) + || (LastChainCard != null && LastChainCard.Controller == 1 && LastChainCard.IsCode(_CardId.HarpiesFeatherDuster))) + { + List enemy_monsters = Enemy.GetMonsters(); + enemy_monsters.Sort(CardContainer.CompareCardAttack); + enemy_monsters.Reverse(); + foreach (ClientCard card in enemy_monsters) + { + if (card.IsFaceup() && !card.IsShouldNotBeTarget() && !card.IsShouldNotBeSpellTrapTarget()) + { + AI.SelectCard(card); + Impermanence_list.Add(this_seq); + return true; + } + } + } + } + if ((LastChainCard == null || LastChainCard.Controller != 1 || LastChainCard.Location != CardLocation.MonsterZone + || LastChainCard.IsDisabled() || LastChainCard.IsShouldNotBeTarget() || LastChainCard.IsShouldNotBeSpellTrapTarget())) + return false; + // negate monsters + if (is_should_not_negate() && LastChainCard.Location == CardLocation.MonsterZone) return false; + if (Card.Location == CardLocation.SpellZone) + { + for (int i = 0; i < 5; ++i) + { + if (Bot.SpellZone[i] == Card) + { + Impermanence_list.Add(i); + break; + } + } + } + if (Card.Location == CardLocation.Hand) + { + AI.SelectPlace(SelectSTPlace(Card, true)); + } + if (LastChainCard != null) AI.SelectCard(LastChainCard); + else + { + List enemy_monsters = Enemy.GetMonsters(); + enemy_monsters.Sort(CardContainer.CompareCardAttack); + enemy_monsters.Reverse(); + foreach (ClientCard card in enemy_monsters) + { + if (card.IsFaceup() && !card.IsShouldNotBeTarget() && !card.IsShouldNotBeSpellTrapTarget()) + { + AI.SelectCard(card); + return true; + } + } + } + return true; + } + public int SelectSTPlace(ClientCard card = null, bool avoid_Impermanence = false) + { + List list = new List { 0, 1, 2, 3, 4 }; + int n = list.Count; + while (n-- > 1) + { + int index = Program.Rand.Next(n + 1); + int temp = list[index]; + list[index] = list[n]; + list[n] = temp; + } + foreach (int seq in list) + { + int zone = (int)System.Math.Pow(2, seq); + if (Bot.SpellZone[seq] == null) + { + if (card != null && card.Location == CardLocation.Hand && avoid_Impermanence && Impermanence_list.Contains(seq)) continue; + return zone; + }; + } + return 0; + } + public bool is_should_not_negate() + { + ClientCard last_card = Util.GetLastChainCard(); + if (last_card != null + && last_card.Controller == 1 && last_card.IsCode(should_not_negate)) + return true; + return false; + } + private bool MekkKnightCrusadiaAvramaxEffect() + { + if (Card.Location == CardLocation.Grave) + { + List cards = Enemy.GetMonsters(); + cards.Sort(CardContainer.CompareCardAttack); + cards.Reverse(); + cards.AddRange(Enemy.GetSpells()); + if (cards.Count <= 0) return false; + AI.SelectCard(cards); + return true; + } + else return true; + } + private bool ThunderDragonColossusEffect() + { + selectFlag[(int)Select.DestroyReplace] = true; + return true; + } + private IList GetAttUsed() + { + IList attributes = new List(); + for (int i = 0; i < selectAtt.Count; ++i) + if (selectAtt[i]) attributes.Add((CardAttribute)(2^i)); + if (attributes.Count > 0) return attributes; + return null; + } + private int GetRemainingThunderCount(bool isOnlyTunder = false) + { + int remaining = THUNDER_COUNTD; + if (isOnlyTunder) remaining -= 4; + remaining = remaining - Bot.Hand.Count(card => card != null && card.HasRace(CardRace.Thunder) && !card.IsExtraCard() && !(isOnlyTunder & !Card.HasSetcode(0x11c))); + remaining = remaining - Bot.SpellZone.Count(card => card != null && card.HasRace(CardRace.Thunder) && !card.IsExtraCard() && !(isOnlyTunder & !Card.HasSetcode(0x11c))); + remaining = remaining - Bot.MonsterZone.Count(card => card != null && card.HasRace(CardRace.Thunder) && !card.IsExtraCard() && !(isOnlyTunder & !Card.HasSetcode(0x11c))); + remaining = remaining - Bot.Graveyard.Count(card => card != null && card.HasRace(CardRace.Thunder) && !card.IsExtraCard() && !(isOnlyTunder & !Card.HasSetcode(0x11c))); + remaining = remaining - Bot.Banished.Count(card => card != null && card.HasRace(CardRace.Thunder) && !card.IsExtraCard() && !(isOnlyTunder & !Card.HasSetcode(0x11c))); + return (remaining < 0) ? 0 : remaining; + } + private int GetLinkMark(int cardId) + { + if (cardId == CardId.Linkuriboh || cardId == CardId.StrikerDragon) return 1; + if (cardId == CardId.PredaplantVerteAnaconda || cardId == CardId.CrossSheep || cardId == CardId.IP || cardId == CardId.UnionCarrier) return 2; + if (cardId == CardId.KnightmareUnicorn) return 3; + if (cardId == CardId.BowoftheGoddess || cardId == CardId.AccesscodeTalker || cardId == CardId.MekkKnightCrusadiaAvramax) return 4; + if (cardId == CardId.UnderworldGoddessoftheClosedWorld) return 5; + return 1; + } + private bool AshBlossomEffect() + { + return Duel.CurrentChain.Count > 0 && Duel.LastChainPlayer != 0; + } + public int CompareCardLink(ClientCard cardA, ClientCard cardB) + { + if (cardA.LinkCount < cardB.LinkCount) + return -1; + if (cardA.LinkCount == cardB.LinkCount) + return 0; + return 1; + } + private bool IPEffect() + { + if (Duel.LastChainPlayer == 0) return false; + if (!Bot.HasInExtra(CardId.KnightmareUnicorn) && !Bot.HasInExtra(CardId.MekkKnightCrusadiaAvramax)) return false; + int[] materials = new[] { + CardId.PredaplantVerteAnaconda, + CardId.UnionCarrier, + CardId.CrossSheep + }; + if (Bot.MonsterZone.GetMatchingCardsCount(card => card.IsCode(materials)) >= 1 && Bot.HasInExtra(CardId.MekkKnightCrusadiaAvramax)) + { + AI.SelectCard(CardId.MekkKnightCrusadiaAvramax); + AI.SelectMaterials(materials); + return true; + } + else if (Bot.HasInExtra(CardId.KnightmareUnicorn)) + { + if (Bot.Hand.Count <= 0) return false; + List pre_cards = Enemy.GetMonsters(); + pre_cards.AddRange(Enemy.GetSpells()); + if (pre_cards.Count(card => card != null && !card.IsShouldNotBeTarget()) <= 0) return false; + List materials_2 = new List(); + List resMaterials = new List(); + foreach (var card in Bot.GetMonsters()) + { + if (card == null) continue; + if (card.Id == CardId.UnionCarrier && summon_UnionCarrier) continue; + if ((GetLinkMark(card.Id) < 3 || card.Id == CardId.BowoftheGoddess && card.Attack <= 800) && card.Id != CardId.ThunderDragonTitan + && card.Id != CardId.ThunderDragonColossus && card.IsFaceup() && materials_2.Count(_card => _card != null && _card.Id == card.Id) <= 0) + materials_2.Add(card); + } + int link_count = 0; + materials_2.Sort(CardContainer.CompareCardAttack); + materials_2.Sort(CompareCardLink); + if (materials_2.Count <= 0) return false; + foreach (var card in materials_2) + { + if (!resMaterials.Contains(card)) + { + resMaterials.Add(card); + link_count += 1; + if (link_count >= 1) break; + } + } + if (link_count >= 1) { AI.SelectCard(CardId.KnightmareUnicorn); AI.SelectMaterials(resMaterials); return true; } + } + return false; + } + private bool AccesscodeTalkerEffect() + { + if (ActivateDescription == Util.GetStringId(CardId.AccesscodeTalker, 1)) + { + if (Card.IsDisabled()) return false; + if (Bot.Graveyard.Count(card => card != null && card.HasType(CardType.Link)) <= 0) return false; + IList attributes = GetAttUsed(); + if (attributes == null || attributes.Count <= 0) { selectFlag[(int)Select.AccesscodeTalker] = true; return true; } + if (Bot.Graveyard.Count(card => card != null && card.HasType(CardType.Link) && !attributes.Contains((CardAttribute)card.Attribute)) <= 0) return false; + selectFlag[(int)Select.AccesscodeTalker] = true; + return true; + } + else + { + List cards = Bot.GetGraveyardMonsters(); + cards.Sort(CompareCardLink); + cards.Reverse(); + AI.SelectCard(cards); + return true; + } + } + private bool CalledbytheGraveEffect() + { + ClientCard card = Util.GetLastChainCard(); + if (Duel.LastChainPlayer != 0 && card != null && card.Location == CardLocation.Grave + && card.HasType(CardType.Monster)) + { + AI.SelectCard(card); + return true; + } + return false; + } + private bool MekkKnightCrusadiaAvramaxSummon() + { + List materials_1 = new List{ + CardId.PredaplantVerteAnaconda,CardId.CrossSheep, + CardId.IP + }; + List materials_2 = new List{ + CardId.KnightmareUnicorn + }; + List materials_3 = new List{ + CardId.StrikerDragon,CardId.Linkuriboh,CardId.AbyssDweller + }; + if (Bot.GetMonsters().Count(card => card != null && card.IsFaceup() && card.Id == CardId.BowoftheGoddess && card.Attack <= 800) > 0) + materials_3.Add(CardId.BowoftheGoddess); + if (!summon_UnionCarrier) materials_1.Add(CardId.UnionCarrier); + if (Bot.MonsterZone.GetMatchingCardsCount(card => card.IsCode(materials_1) && card.IsFaceup()) >= 2) + { + AI.SelectMaterials(materials_1); + place_Link_4 = true; + return true; + } + else if (Bot.MonsterZone.GetMatchingCardsCount(card => card.IsCode(materials_2) && card.IsFaceup()) > 0 + && Bot.MonsterZone.GetMatchingCardsCount(card => card.IsCode(materials_3) && card.IsFaceup()) > 0) + { + materials_2.AddRange(materials_3); + AI.SelectMaterials(materials_2); + place_Link_4 = true; + return true; + } + return false; + } + private bool GEffect() + { + return Duel.Player != 0; + } + private bool ThunderDragonTitanEffect() + { + //if (Duel.CurrentChain.Count > 0) + if(ActivateDescription == Util.GetStringId(CardId.ThunderDragonTitan, 0)) + { + List res = new List(); + List mcards = Enemy.GetMonsters(); + List scards = Enemy.GetSpells(); + if (mcards.Count <= 0 && scards.Count <= 0) return false; + if (Duel.CurrentChain.Count(card => card != null && card.Controller == 1) > 0) + { + foreach (var card in Duel.CurrentChain) + { + if (card != null && card.Controller == 1 && (card.Location == CardLocation.MonsterZone || card.Location == CardLocation.SpellZone) + && !card.IsDisabled() && (card.HasType(CardType.Monster) + || card.HasType(CardType.Field) || card.HasType(CardType.Continuous) + || card.HasType(CardType.Equip))) + { + res.Add(card); + } + } + } + mcards.Sort(CardContainer.CompareCardAttack); + mcards.Reverse(); + res.AddRange(mcards); + res.AddRange(scards); + AI.SelectCard(res); + return true; + } + else + { + selectFlag[(int)Select.DestroyReplace] = true; + return true; + } + + } + private bool PredaplantVerteAnacondaEffect() + { + if (ActivateDescription == Util.GetStringId(CardId.PredaplantVerteAnaconda, 1)) + { + if (CheckRemainInDeck(CardId.ThunderDragonFusion) <= 0) return false; + List g_card = Bot.Graveyard.ToList(); + List b_card = Bot.Banished.ToList(); + g_card.AddRange(b_card); + int count = 0; + int Lcount = 0; + foreach (var card in g_card) + { + if (card == null) continue; + if (card.HasType(CardType.Monster) && card.HasSetcode(0x11c)) + ++count; + if (card.IsCode(CardId.NormalThunderDragon)) + ++Lcount; + } + if (Bot.HasInExtra(CardId.ThunderDragonColossus) && Lcount > 0 && g_card.Count(card => card != null && card.HasRace(CardRace.Thunder)) > 1) + { + AI.SelectCard(CardId.ThunderDragonFusion); + AI.SelectNextCard(CardId.ThunderDragonColossus,CardId.ThunderDragonTitan); + No_SpSummon = true; + return true; + } + else if (count >= 3 && Bot.HasInExtra(CardId.ThunderDragonTitan)) + { + AI.SelectCard(CardId.ThunderDragonFusion); + AI.SelectNextCard(CardId.ThunderDragonTitan, CardId.ThunderDragonColossus); + No_SpSummon = true; + return true; + } + return false; + } + return false; + } + private bool CrossSheepEffect() + { + if (Bot.HasInExtra(CardId.UnionCarrier) + && (Bot.HasInGraveyard(CardId.AloofLupine)|| Bot.HasInGraveyard(CardId.G))) + AI.SelectCard(CardId.AloofLupine, CardId.G); + else if (HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.Grave)) + AI.SelectCard(CardId.ThunderDragonmatrix); + else if (Bot.HasInExtra(CardId.Linkuriboh)) + AI.SelectCard(CardId.ThunderDragonmatrix, CardId.DragonBusterDestructionSword); + else AI.SelectCard(CardId.BatterymanSolar, CardId.AshBlossom,CardId.G); + return true; + } + private bool KnightmareUnicornEffect() + { + List cards = new List(); + cards.AddRange(Enemy.SpellZone); + cards.AddRange(Enemy.MonsterZone); + cards = cards.Where(card => card != null && !card.IsShouldNotBeTarget()).ToList(); + if (cards.Count <= 0) return false; + List disCardId = new List(); + IList repeatId = GetZoneRepeatCardsId(0, Bot.Hand); + if (!repeatId.Contains(-1)) disCardId.AddRange(repeatId); + foreach (var card in Bot.Hand) + if (card != null && card.HasSetcode(0x11c) && card.HasType(CardType.Monster)) + disCardId.Add(card.Id); + AI.SelectCard(disCardId); + cards.Sort(CardContainer.CompareCardAttack); + cards.Reverse(); + AI.SelectNextCard(cards); + return true; + } + private bool ThunderDragonlordEffect() + { + if (Duel.Phase == DuelPhase.End) + { + int count = Bot.Graveyard.Count(card => card != null && card.HasRace(CardRace.Thunder)); + if ((Bot.HasInGraveyard(CardId.ThunderDragonroar) || Bot.HasInGraveyard(CardId.ThunderDragondark) && count > 1) && CheckRemainInDeck(CardId.ThunderDragonFusion) >0 ) + AI.SelectCard(CardId.ThunderDragonFusion); + else if(!Bot.HasInGraveyard(CardId.ThunderDragonroar) && CheckRemainInDeck(CardId.ThunderDragonroar) > 0) + AI.SelectCard(CardId.ThunderDragonroar); + else if(!Bot.HasInGraveyard(CardId.ThunderDragondark) && CheckRemainInDeck(CardId.ThunderDragondark) > 0) + AI.SelectCard(CardId.ThunderDragondark); + else AI.SelectCard(CardId.ThunderDragonmatrix,CardId.NormalThunderDragon,CardId.BatterymanSolar); + return true; + } + if (Duel.Phase == DuelPhase.Standby) + { + List Thundercards = Bot.Graveyard.Where(card => card != null && card.HasRace(CardRace.Thunder)).ToList(); + List NoThundercards = Bot.Graveyard.Where(card => card != null && !card.HasRace(CardRace.Thunder) && !card.IsCode(CardId.ThunderDragonFusion) && !card.IsCode(CardId.ChaosSpace)).ToList(); + if (HasInZoneNoActivate(CardId.ThunderDragonroar,CardLocation.Grave) && Bot.GetMonstersInMainZone().Count < 5) + AI.SelectCard(CardId.ThunderDragonroar); + else if(HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Grave)) + AI.SelectCard(CardId.ThunderDragondark); + else if (HasInZoneNoActivate(CardId.ThunderDragonhawk, CardLocation.Grave) && !GetZoneRepeatCardsId(0,Bot.Hand).Contains(-1)) + AI.SelectCard(CardId.ThunderDragonhawk); + else if (HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.Grave)) + AI.SelectCard(CardId.ThunderDragonmatrix); + else if(Thundercards.Count > 0) + AI.SelectCard(Thundercards); + else AI.SelectCard(CardId.ThunderDragonmatrix); + + List Spellcards = Bot.GetGraveyardSpells().Where(card => card != null && !card.IsCode(CardId.ThunderDragonFusion) && !card.IsCode(CardId.ChaosSpace)).ToList(); + if (Spellcards.Count > 0) AI.SelectNextCard(Spellcards); + else if(NoThundercards.Count > 0 ) AI.SelectNextCard(Spellcards); + else if(Thundercards.Count > 0) AI.SelectNextCard(Thundercards); + else AI.SelectNextCard(CardId.ChaosSpace); + AI.SelectThirdCard(CardId.ThunderDragonColossus, CardId.ThunderDragonTitan, CardId.ThunderDragonlord,CardId.TheChaosCreator); + return true; + } + return false; + } + private bool PredaplantVerteAnacondaSummon() + { + if (CheckRemainInDeck(CardId.ThunderDragonFusion) <= 0) return false; + List g_card = Bot.Graveyard.ToList(); + List b_card = Bot.Banished.ToList(); + g_card.AddRange(b_card); + int count = 0; + int Lcount = 0; + foreach (var card in g_card) + { + if (card == null) continue; + if (card.HasType(CardType.Monster) && card.HasSetcode(0x11c)) + ++count; + if (card.IsCode(CardId.NormalThunderDragon)) + ++Lcount; + } + if ((count >= 3 && Bot.HasInExtra(CardId.ThunderDragonTitan)) || + (Bot.HasInExtra(CardId.ThunderDragonColossus) && Lcount > 0 && g_card.Count(card => card != null && card.HasRace(CardRace.Thunder)) > 1)) + { + List cards = Bot.GetMonsters().Where(card => card != null && card.IsFaceup() && GetLinkMark(card.Id) < 3 && !card.HasType(CardType.Normal) && !card.IsCode(CardId.ThunderDragonColossus) && !card.IsCode(CardId.ThunderDragonTitan) && !card.IsCode(CardId.ThunderDragonlord) && !(card.IsCode(CardId.UnionCarrier) && summon_UnionCarrier)).ToList(); + if (cards.Count < 2) return false; + cards.Sort(CardContainer.CompareCardAttack); + AI.SelectMaterials(cards); + return true; + } + return false; + } + private bool AllureofDarknessEffect_2() + { + return !Bot.HasInHand(CardId.G) && Bot.Hand.Count <= 3 && Bot.Deck.Count > 2; + } + private bool KnightmareUnicornSummon() + { + if (Bot.Hand.Count <= 0) return false; + List pre_cards = Enemy.GetMonsters(); + pre_cards.AddRange(Enemy.GetSpells()); + if (pre_cards.Count(card => card != null && !card.IsShouldNotBeTarget()) <= 0) return false; + List materials = new List(); + List resMaterials = new List(); + foreach (var card in Bot.GetMonsters()) + { + if (card == null) continue; + if (card.Id == CardId.UnionCarrier && summon_UnionCarrier) continue; + if (GetLinkMark(card.Id) < 3 && card.Id != CardId.ThunderDragonTitan + && card.Id != CardId.ThunderDragonColossus && card.IsFaceup() && materials.Count(_card=> _card != null && _card.Id==card.Id) <= 0) + materials.Add(card); + } + int link_count = 0; + materials.Sort(CardContainer.CompareCardAttack); + materials.Sort(CompareCardLink); + materials.Reverse(); + if (materials.Count(card => card != null && card.LinkCount >= 2) > 1 + && materials.Count(card => card != null && card.LinkCount < 2) < 1) return false; + foreach (var card in materials) + { + if (!resMaterials.Contains(card) && card.LinkCount < 3) + { + resMaterials.Add(card); + link_count += (card.HasType(CardType.Link)) ? card.LinkCount : 1; + if (link_count >= 3) break; + } + } + if (link_count >= 3) { AI.SelectMaterials(resMaterials); return true; } + return false; + } + private bool UnderworldGoddessoftheClosedWorldSummon() + { + if (Duel.Turn == 0 || Enemy.GetMonsterCount() <= 0) return false; + if (Util.GetBestAttack(Bot) >= Util.GetBestAttack(Enemy) && Enemy.MonsterZone.GetDangerousMonster() == null) return false; + List e_materials = new List(); + List m_materials = new List(); + List resMaterials = new List(); + foreach (var card in Enemy.GetMonsters()) + { + if (card != null && card.HasType(CardType.Effect) && card.IsFaceup()) + e_materials.Add(card); + } + if (e_materials.Count() <= 0) return false; + foreach (var card in Bot.GetMonsters()) + { + if (card == null) continue; + if (card.Id == CardId.UnionCarrier && summon_UnionCarrier) continue; + if (GetLinkMark(card.Id) < 3 && card.Id != CardId.ThunderDragonTitan + && card.Id != CardId.ThunderDragonColossus && card.IsFaceup() && card.HasType(CardType.Effect)) + m_materials.Add(card); + } + if (m_materials.Count() < 3) return false; + int link_count = 0; + int e_link_count = 0; + e_materials.Sort(CardContainer.CompareCardAttack); + e_materials.Reverse(); + foreach (var card in e_materials) + { + if (!resMaterials.Contains(card)) + resMaterials.Add(card); + e_link_count += (card.HasType(CardType.Link)) ? (card.LinkCount == 2 ? 2:1): 1; + if (e_link_count >= 1) break; + } + if (e_link_count <= 0) return false; + link_count += e_link_count; + foreach (var card in m_materials) + { + if (e_link_count <= 1) + { + if (!resMaterials.Contains(card) && card.LinkCount < 3) + { + resMaterials.Add(card); + link_count += (card.HasType(CardType.Link)) ? card.LinkCount : 1; + if (link_count >= 5) break; + } + } + else + { + resMaterials.Add(card); + link_count += 1; + if (link_count >= 5) break; + } + } + if (link_count >= 5) { AI.SelectMaterials(resMaterials); place_Link_4 = true; return true; } + return false; + } + private bool BowoftheGoddessSummon() + { + if (Card.Id == CardId.AccesscodeTalker) + { + if (Duel.Turn == 0 || Enemy.GetMonsterCount() + Enemy.GetSpellCount() <= 0) return false; + } + else + { + if (Duel.Turn > 0 && Enemy.GetMonsterCount() + Enemy.GetSpellCount() > 0 + && (Bot.HasInExtra(CardId.UnderworldGoddessoftheClosedWorld) || Bot.HasInExtra(CardId.MekkKnightCrusadiaAvramax) + || Bot.HasInExtra(CardId.AccesscodeTalker))) return false; + } + List materials = new List(); + List resMaterials = new List(); + foreach (var card in Bot.GetMonsters()) + { + if (card == null) continue; + if(card.Id == CardId.UnionCarrier && summon_UnionCarrier) continue; + if (GetLinkMark(card.Id) < 4 && card.Id != CardId.ThunderDragonTitan + && card.Id != CardId.ThunderDragonColossus && card.IsFaceup() && !card.HasType(CardType.Token)) + materials.Add(card); + } + int link_count = 0; + materials.Sort(CompareCardLink); + materials.Reverse(); + foreach (var card in materials) + { + if (!resMaterials.Contains(card) && card.LinkCount < 4) + { + if (Card.Id == CardId.BowoftheGoddess && resMaterials.Count(_card => _card != null && _card.Id == card.Id) > 0) break; + resMaterials.Add(card); + link_count += (card.HasType(CardType.Link)) ? card.LinkCount : 1; + if (link_count >= 4) break; + } + } + if (link_count >= 4) { AI.SelectMaterials(resMaterials); place_Link_4 = true; return true; } + return false; + } + private bool TheChaosCreatorSummon() + { + IList cardsid = new List(); + if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Grave) && Bot.GetMonstersInMainZone().Count < 4) + cardsid.Add(CardId.ThunderDragonroar); + if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Grave)) + cardsid.Add(CardId.ThunderDragondark); + if (HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.Grave)) + cardsid.Add(CardId.ThunderDragonmatrix); + if (Bot.HasInGraveyard(CardId.ChaosSpace) && !activate_ChaosSpace_grave) + { + cardsid.Add(CardId.BlackDragonCollapserpent); + cardsid.Add(CardId.WhiteDragonWyverburster); + cardsid.Add(CardId.TheBystialLubellion); + cardsid.Add(CardId.ThunderDragonlord); + } + if (!Bot.HasInSpellZone(CardId.BrandedRegained, true, true) + || Bot.GetCountCardInZone(Bot.GetGraveyardMonsters(),CardId.BystialMagnamhut) + Bot.GetCountCardInZone(Bot.GetGraveyardMonsters(), CardId.BystialDruiswurm) > 1) + { + cardsid.Add(CardId.BystialMagnamhut); + cardsid.Add(CardId.BystialDruiswurm); + } + List cards = Bot.GetGraveyardMonsters().Where(card => card != null && (card.HasAttribute(CardAttribute.Dark) || card.HasAttribute(CardAttribute.Light))).ToList(); + cards.Sort(CardContainer.CompareCardAttack); + foreach (var card in cards) + if (card != null) cardsid.Add(card.Id); + AI.SelectCard(cardsid); + AI.SelectCard(cardsid); + return true; + } + private bool ThunderDragonColossusSummon() + { + selectFlag[(int)Select.ThunderDragonColossus] = true; + place_ThunderDragonColossus = true; + return true; + } + private bool ThunderDragonmatrixSet() + { + if (handActivated && Bot.HasInExtra(CardId.ThunderDragonColossus) + && Bot.GetMonsters().Count(card=>card != null && card.HasRace(CardRace.Thunder) + && card.IsFaceup() && card.HasType(CardType.Effect)) <= 0) + { + isSummoned = true; + return true; + } + return false; + } + private bool IPSummon() + { + if (Bot.HasInMonstersZone(CardId.ThunderDragonColossus) && Bot.GetMonsterCount() <= 3) return false; + if (!Bot.HasInExtra(CardId.KnightmareUnicorn) && !Bot.HasInExtra(CardId.BowoftheGoddess) + && !Bot.HasInExtra(CardId.MekkKnightCrusadiaAvramax) && !Bot.HasInExtra(CardId.AccesscodeTalker) && !Bot.HasInExtra(CardId.UnderworldGoddessoftheClosedWorld)) return false; + List cards = Bot.GetMonsters().Where(card => card != null && GetLinkMark(card.Id) < 3 && card.Id != CardId.ThunderDragonTitan && card.Id != CardId.ThunderDragonColossus && !card.HasType(CardType.Link) && card.Attack <= 2500 && card.EquipCards.Count(ecard=> ecard != null && ecard.Id==CardId.DragonBusterDestructionSword && !ecard.IsDisabled())<=0).ToList(); + if (cards.Count < 2) return false; + cards.Sort(CardContainer.CompareCardAttack); + List cardsId = new List(); + if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.MonsterZone)) + cardsId.Add(CardId.ThunderDragonroar); + if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.MonsterZone)) + cardsId.Add(CardId.ThunderDragondark); + if (HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.MonsterZone)) + cardsId.Add(CardId.ThunderDragonmatrix); + foreach (var card in cards) + if (card != null) cardsId.Add(card.Id); + AI.SelectMaterials(cardsId); + return true; + } + private bool ThunderDragonlordSummon() + { + IList cardsId = new List(); + if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Hand) + || HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.MonsterZone, true)) + cardsId.Add(CardId.ThunderDragonroar); + if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Hand) + || HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.MonsterZone, true)) + cardsId.Add(CardId.ThunderDragondark); + if (HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.Hand) + || HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.MonsterZone, true)) + cardsId.Add(CardId.ThunderDragonmatrix); + List handCards = Bot.Hand.ToList(); + handCards.Sort(CardContainer.CompareCardLevel); + List monsterCards = Bot.GetMonsters().ToList(); + monsterCards.Sort(CardContainer.CompareCardAttack); + foreach (var card in handCards) + if(card != null && card.HasRace(CardRace.Thunder) && card.Level <= 8) + cardsId.Add(card.Id); + foreach (var card in monsterCards) + if (card != null && card.HasRace(CardRace.Thunder) && card.Level <= 8 + && card.Id != CardId.ThunderDragonColossus && card.IsFaceup()) + cardsId.Add(card.Id); + if (cardsId.Count <= 0) return false; + AI.SelectCard(cardsId); + return true; + } + private bool UnionCarrierEffect() + { + if (!Bot.HasInMonstersZone(CardId.ThunderDragonColossus)) return false; + return UnionCarrierEffect_2(); + } + private bool UnionCarrierEffect_2() + { + IList cardsId = new List(); + cardsId.Add(CardId.ThunderDragonColossus); + cardsId.Add(CardId.TheChaosCreator); + List cards_1 = Bot.GetMonsters().Where(card => card != null && card.IsFaceup() && (card.HasAttribute(CardAttribute.Dark) || card.HasRace(CardRace.Dragon))).ToList(); + if (cards_1.Count <= 0) + { + List cards_2 = Bot.GetMonsters(); + cards_2.Sort(CardContainer.CompareCardAttack); + cards_2.Reverse(); + foreach (var card in cards_2) + if (card != null && !cardsId.Contains(card.Id)) + cardsId.Add(card.Id); + } + else + { + cards_1.Sort(CardContainer.CompareCardAttack); + cards_1.Reverse(); + foreach (var card in cards_1) + if (card != null && !cardsId.Contains(card.Id)) + cardsId.Add(card.Id); + } + AI.SelectCard(cardsId); + AI.SelectNextCard(CardId.DragonBusterDestructionSword,CardId.ThunderDragonroar,CardId.ThunderDragondark,CardId.ThunderDragonmatrix,CardId.NormalThunderDragon); + return true; + } + private bool StrikerDragonSummon() + { + return Bot.GetMonsters().Count(card => card != null && card.HasRace(CardRace.Dragon) && card.Level > 1) > 0; + } + private bool DefaultSummon() + { + if (No_SpSummon) return false; + if (Card.Id == CardId.AshBlossom || Card.Id == CardId.G) + { + if (Bot.GetMonsterCount() >= 2 || handActivated) return false; + if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.MonsterZone, true) + || HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.MonsterZone, true)) + { + if (Bot.HasInExtra(CardId.PredaplantVerteAnaconda) || Bot.HasInExtra(CardId.IP) || Bot.HasInExtra(CardId.CrossSheep)) return true; + } + return false; + } + if (Card.Level == 1) + { + if (Bot.ExtraDeck.Count(card => card != null && card.LinkCount <= 2) <= 0) return false; + } + else + { + if (Bot.ExtraDeck.Count(card => card != null && card.LinkCount == 2) <= 0) return false; + } + if (Card.Id == CardId.ThunderDragonroar || Card.Id == CardId.ThunderDragondark) + { + if (!Bot.HasInExtra(CardId.ThunderDragonColossus) || !handActivated) return false; + } + if (Card.Level > 4) + { + List cards = Bot.GetMonsters().Where(card => card != null && GetLinkMark(card.Id) < 3 && card.Id != CardId.ThunderDragonTitan && card.Id != CardId.ThunderDragonColossus && card.Id != CardId.IP && card.Id != CardId.UnionCarrier).ToList(); + if (cards.Count <= 0) return false; + cards.Sort(CardContainer.CompareCardAttack); + if (handActivated && cards[0].Attack >= Card.Attack && !Bot.HasInExtra(CardId.ThunderDragonColossus)) return false; + AI.SelectCard(cards); + } + isSummoned = true; + return true; + } + private bool CheckThunderRemove() + { + if(HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Hand) && GetRemainingThunderCount() > 0) return true; + if(HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Hand) && GetRemainingThunderCount() > 0) return true; + if(Bot.Hand.Any(card=> card != null && card.HasRace(CardRace.Thunder) && !card.IsOriginalCode(CardId.AloofLupine) + && (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Deck) || HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Deck)))) return true; + return false; + } + private bool ThunderDragonhawkEffect() + { + if (Card.Location == CardLocation.Hand) + { + List banish_cards = new List(); + List grave_cards = new List(); + foreach (var card in Bot.Banished) + if (card != null && card.HasType(CardType.Monster) && card.HasSetcode(0x11c)) + banish_cards.Add(card); + foreach (var card in Bot.Graveyard) + if (card != null && card.HasType(CardType.Monster) && card.HasSetcode(0x11c)) + grave_cards.Add(card); + banish_cards.Sort(CardContainer.CompareCardAttack); + banish_cards.Reverse(); + grave_cards.Sort(CardContainer.CompareCardAttack); + grave_cards.Reverse(); + banish_cards.AddRange(grave_cards); + List res = new List(); + foreach (var card in banish_cards) + { + if (!activate_ThunderDragonroar && card != null && card.Id == CardId.ThunderDragonroar) + res.Add(card); + else if (!activate_ThunderDragondark && card != null && card.Id == CardId.ThunderDragondark) + res.Add(card); + } + res.AddRange(banish_cards); + AI.SelectCard(res); + handActivated = true; + activate_ThunderDragonhawk = true; + return true; + + } + else + { + activate_ThunderDragonhawk = true; + List cardsid = new List() { CardId.DragonBusterDestructionSword }; + cardsid.AddRange(GetZoneRepeatCardsId(0, Bot.Hand)); + List resCards = new List(); + foreach (var card in Bot.Hand) + { + if (card != null && cardsid.Contains(card.Id) && resCards.Count(_card => _card != null && _card.Id == card.Id) <= 0) + { + resCards.Add(card); + } + } + if (resCards.Count() <= 0) return false; + AI.SelectCard(resCards); + return true; + } + } + private bool BlackDragonCollapserpentSummon_2() + { + if (Bot.HasInGraveyard(CardId.WhiteDragonWyverburster) && Bot.HasInGraveyard(CardId.ChaosSpace) + && !activate_ChaosSpace_grave) + AI.SelectCard(CardId.WhiteDragonWyverburster); + else if (Bot.HasInGraveyard(CardId.ThunderDragonlord) && Bot.HasInGraveyard(CardId.ChaosSpace) + && !activate_ChaosSpace_grave) + AI.SelectCard(CardId.ThunderDragonlord); + else if (HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.Grave)) + AI.SelectCard(CardId.ThunderDragonmatrix); + else if (HasInZoneNoActivate(CardId.ThunderDragonhawk, CardLocation.Grave) && !(GetZoneRepeatCardsId(0, Bot.Hand, false)).Contains(-1)) + AI.SelectCard(CardId.ThunderDragonhawk); + else + AI.SelectCard(CardId.WhiteDragonWyverburster, CardId.BatterymanSolar); + summon_BlackDragonCollapserpent = true; + return true; + } + private bool BlackDragonCollapserpentSummon() + { + if (Bot.Graveyard.Count(card => card != null && card.HasAttribute(CardAttribute.Light)) <= 1 + && Bot.HasInGraveyard(CardId.TheBystialLubellion) && CheckRemainInDeck(CardId.BrandedRegained) > 0 && !summon_TheBystialLubellion) + return false; + return BlackDragonCollapserpentSummon_2(); + } + private bool GoldSarcophagusEffect() + { + if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Deck) && Bot.GetMonstersInMainZone().Count < 5) + AI.SelectCard(CardId.ThunderDragonroar); + else if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Deck)) + AI.SelectCard(CardId.ThunderDragondark); + else if (HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.Deck)) + AI.SelectCard(CardId.ThunderDragonmatrix); + else AI.SelectCard(CardId.ThunderDragonmatrix); + return true; + } + private bool UnionCarrierSummon() + { + if (CheckRemainInDeck(CardId.DragonBusterDestructionSword) <= 0 || !Bot.HasInMonstersZone(CardId.ThunderDragonColossus,false,false,true)) return false; + return UnionCarrierSummon_2(); + } + private bool LinkCheck(bool exZone_1) + { + int exSq = 0; + int linkSq_1 = 0; + int linkSq_2 = 0; + if (exZone_1) + { + exSq = 5; + linkSq_1 = 0; + linkSq_2 = 2; + } + else + { + exSq = 6; + linkSq_1 = 2; + linkSq_2 = 4; + } + if (Bot.MonsterZone[exSq] != null && Bot.HasInMonstersZone(CardId.ThunderDragonColossus, false, false, true)) + { + CardRace linkRace = (CardRace)Bot.MonsterZone[exSq].Race; + CardAttribute linkAtt = (CardAttribute)Bot.MonsterZone[exSq].Attribute; + int linkRaceCount = Bot.GetMonsters().Count(card => card != null && card.IsFaceup() && !card.IsCode(CardId.ThunderDragonColossus) && card.HasRace(linkRace)); + int linkAttCount = Bot.GetMonsters().Count(card => card != null && card.IsFaceup() && !card.IsCode(CardId.ThunderDragonColossus) && card.HasAttribute(linkAtt)); + if (Bot.MonsterZone[exSq].Id == CardId.CrossSheep + || Bot.MonsterZone[exSq].Id == CardId.PredaplantVerteAnaconda + || Bot.MonsterZone[exSq].Id == CardId.IP + || Bot.MonsterZone[exSq].Id == CardId.MekkKnightCrusadiaAvramax) + { + if (Bot.MonsterZone[linkSq_1] != null && Bot.MonsterZone[linkSq_1].Id == CardId.ThunderDragonColossus) + { + if (Bot.MonsterZone[linkSq_2] != null) + { + CardRace race = (CardRace)Bot.MonsterZone[linkSq_2].Race; + CardAttribute att = (CardAttribute)Bot.MonsterZone[linkSq_2].Attribute; + int raceCount = Bot.GetMonsters().Count(card => card != null && card.IsFaceup() && !card.IsCode(CardId.ThunderDragonColossus) && card.HasRace(race)); + int attCount = Bot.GetMonsters().Count(card => card != null && card.IsFaceup() && !card.IsCode(CardId.ThunderDragonColossus) && card.HasAttribute(att)); + if (raceCount < 2 && attCount < 2 && linkRaceCount < 2 && linkAttCount < 2) return false; + } + } + else if (Bot.MonsterZone[linkSq_2] != null && Bot.MonsterZone[linkSq_2].Id == CardId.ThunderDragonColossus) + { + if (Bot.MonsterZone[linkSq_1] != null) + { + CardRace race = (CardRace)Bot.MonsterZone[linkSq_1].Race; + CardAttribute att = (CardAttribute)Bot.MonsterZone[linkSq_1].Attribute; + int raceCount = Bot.GetMonsters().Count(card => card != null && card.IsFaceup() && !card.IsCode(CardId.ThunderDragonColossus) && card.HasRace(race)); + int attCount = Bot.GetMonsters().Count(card => card != null && card.IsFaceup() && !card.IsCode(CardId.ThunderDragonColossus) && card.HasAttribute(att)); + if (raceCount < 2 && attCount < 2 && linkRaceCount < 2 && linkAttCount < 2) return false; + } + + } + } + } + return true; + } + private bool UnionCarrierSummon_2() + { + if (Bot.GetMonsterCount() <= 2 && (Bot.HasInMonstersZone(CardId.ThunderDragonColossus) || Bot.HasInMonstersZone(CardId.ThunderDragonTitan))) return false; + List attDarkCards = Bot.GetMonsters().Where(card => card != null && card.HasAttribute(CardAttribute.Dark) && card.IsFaceup() && !card.IsOriginalCode(CardId.ThunderDragonColossus) && GetLinkMark(card.Id) < 3).ToList(); + List attLightCards = Bot.GetMonsters().Where(card => card != null && card.HasAttribute(CardAttribute.Light) && card.IsFaceup() && GetLinkMark(card.Id) < 3).ToList(); + List attEarthCards = Bot.GetMonsters().Where(card => card != null && card.HasAttribute(CardAttribute.Earth) && card.IsFaceup() && GetLinkMark(card.Id) < 3).ToList(); + List raceThunderCards = Bot.GetMonsters().Where(card => card != null && card.HasRace(CardRace.Thunder) && card.IsFaceup() && !card.IsOriginalCode(CardId.ThunderDragonColossus) && GetLinkMark(card.Id) < 3).ToList(); + List raceDragonCards = Bot.GetMonsters().Where(card => card != null && card.HasRace(CardRace.Dragon) && card.IsFaceup() && GetLinkMark(card.Id) < 3).ToList(); + List raceBeastCards = Bot.GetMonsters().Where(card => card != null && card.HasRace(CardRace.Beast) && card.IsFaceup() && GetLinkMark(card.Id) < 3).ToList(); + if (attDarkCards.Count() < 2 && attLightCards.Count() < 2 && attEarthCards.Count() < 2 + && raceThunderCards.Count() < 2 && raceDragonCards.Count() < 2 && raceBeastCards.Count() < 2) + return false; + if (!LinkCheck(false) || !LinkCheck(true)) return false; + if (Bot.MonsterZone[6] != null && Bot.MonsterZone[6].Controller == 0 && GetLinkMark(Bot.MonsterZone[6].Id) > 1) return false; + int[] materials = new[] { + CardId.BatterymanToken,CardId.BatterymanSolar,CardId.ThunderDragonmatrix, + CardId.NormalThunderDragon, CardId.WhiteDragonWyverburster, CardId.ThunderDragonhawk, + CardId.G, CardId.AloofLupine, CardId.CrossSheep, + CardId.ThunderDragonroar,CardId.ThunderDragondark,CardId.BlackDragonCollapserpent, + CardId.DragonBusterDestructionSword,CardId.BystialMagnamhut,CardId.BystialDruiswurm, + CardId.TheChaosCreator,CardId.Linkuriboh,CardId.TheBystialLubellion, + CardId.ThunderDragonlord, CardId.StrikerDragon,CardId.PredaplantVerteAnaconda, + CardId.IP + }; + if (Bot.MonsterZone.GetMatchingCardsCount(card => card.IsCode(materials)) >= 2) + { + AI.SelectMaterials(materials); + summon_UnionCarrier = true; + return true; + } + return false; + } + private bool BatterymanSolarSummon() + { + if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Deck) || HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Deck) + || HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.Deck) || HasInZoneNoActivate(CardId.BlackDragonCollapserpent, CardLocation.Hand) + || HasInZoneNoActivate(CardId.WhiteDragonWyverburster, CardLocation.Hand) || HasInZoneNoActivate(CardId.BystialDruiswurm, CardLocation.Hand) + || HasInZoneNoActivate(CardId.BystialMagnamhut, CardLocation.Hand) || Bot.HasInHand(CardId.TheChaosCreator)) + { + isSummoned = true; + return true; + } + return false; + } + private bool ThunderDragonroarEffect() + { + if (Card.Location == CardLocation.Hand) + { + if (handActivated) return false; + handActivated = true; + activate_ThunderDragonroar = true; + if (HasInZoneNoActivate(CardId.ThunderDragonhawk, CardLocation.Grave) + || HasInZoneNoActivate(CardId.ThunderDragonhawk, CardLocation.Removed)) + { + AI.SelectCard(CardId.ThunderDragonhawk); + } + else AI.SelectCard(CardId.ThunderDragonmatrix,CardId.ThunderDragondark,CardId.ThunderDragonhawk); + return true; + } + else + { + if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Deck)) + AI.SelectCard(CardId.ThunderDragondark); + else if(HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.Deck)) + AI.SelectCard(CardId.ThunderDragonmatrix); + else if(HasInZoneNoActivate(CardId.NormalThunderDragon, CardLocation.Deck)) + AI.SelectCard(CardId.NormalThunderDragon); + else + AI.SelectCard(CardId.NormalThunderDragon, CardId.ThunderDragondark, CardId.NormalThunderDragon, CardId.ThunderDragonmatrix); + activate_ThunderDragonroar = true; + return true; + } + } + private bool S_SpSummon() + { + if (Duel.Player == 0) + { + if (Duel.CurrentChain.Count > 0) return false; + List cards = new List(); + if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Grave) + && Bot.GetMonstersInMainZone().Count < 4) + { + foreach (var card_1 in Bot.Graveyard) + { + if (card_1 != null && card_1.Id == CardId.ThunderDragonroar) + cards.Add(card_1); + } + } + else if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Grave)) + { + foreach (var card_2 in Bot.Graveyard) + { + if (card_2 != null && card_2.Id == CardId.ThunderDragondark) + cards.Add(card_2); + } + } + else if (HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.Grave)) + { + foreach (var card_3 in Bot.Graveyard) + { + if (card_3 != null && card_3.Id == CardId.ThunderDragonmatrix) + cards.Add(card_3); + } + } + else if (Bot.HasInGraveyard(CardId.ChaosSpace) && !activate_ChaosSpace_grave) + { + foreach (var card_4 in Bot.Graveyard) + { + if (card_4 != null && NotSpSummonCardsId.Contains(card_4.Id)) + cards.Add(card_4); + } + } + else + { + foreach (var card_5 in Enemy.Graveyard) + { + if (card_5 != null && (card_5.HasAttribute(CardAttribute.Light) + || card_5.HasAttribute(CardAttribute.Dark))) + cards.Add(card_5); + } + foreach (var card_6 in Bot.Graveyard) + { + if (card_6 != null && (card_6.HasAttribute(CardAttribute.Light) + || card_6.HasAttribute(CardAttribute.Dark)) && !card_6.IsCode(CardId.TheBystialLubellion) && !card_6.HasRace(CardRace.Thunder)) + cards.Add(card_6); + } + foreach (var card_7 in Bot.Graveyard) + { + if (card_7 != null && (card_7.HasAttribute(CardAttribute.Light) + || card_7.HasAttribute(CardAttribute.Dark)) && card_7.HasRace(CardRace.Thunder)) + cards.Add(card_7); + } + } + AI.SelectCard(cards); + return true; + } + else + { + if (Duel.Phase < DuelPhase.Battle && Duel.CurrentChain.Count <= 0) return false; + ClientCard card = Util.GetLastChainCard(); + if (card != null && card.Controller != 0 && + card.Location == CardLocation.Grave + && (card.HasAttribute(CardAttribute.Dark) + || card.HasAttribute(CardAttribute.Light))) + { + AI.SelectCard(card); + } + else if (Duel.CurrentChain.Count > 0 && Duel.CurrentChain.Count(_card => _card != null && (_card.Id == CardId.BystialDruiswurm || _card.Id == CardId.BystialMagnamhut)) <= 0 + && Duel.LastChainPlayer == 1 && Enemy.Graveyard.Count(_card => _card != null && (_card.HasAttribute(CardAttribute.Dark) || _card.HasAttribute(CardAttribute.Light))) > 0) + { + List graveCards = Enemy.GetGraveyardMonsters(); + graveCards.Reverse(); + AI.SelectCard(graveCards); + } + else + { + if (Duel.CurrentChain.Count > 0 && Duel.CurrentChain.Count(_card => _card != null && _card.Controller == 0 && (_card.Id == CardId.BystialDruiswurm || _card.Id == CardId.BystialMagnamhut)) > 0) return false; + List res = new List(); + List pre_res = new List(); + foreach (var mcard in Enemy.Graveyard) + { + if (mcard != null && (mcard.HasAttribute(CardAttribute.Dark) + || mcard.HasAttribute(CardAttribute.Light))) + res.Add(mcard); + } + foreach (var mcard in Bot.Graveyard) + { + if (mcard != null && (mcard.HasAttribute(CardAttribute.Dark) + || mcard.HasAttribute(CardAttribute.Light))) + { + if (mcard.Id == CardId.ThunderDragonroar && !activate_ThunderDragonroar && Bot.GetMonstersInMainZone().Count < 5) + res.Add(mcard); + else if(mcard.Id == CardId.ThunderDragondark && !activate_ThunderDragondark) + res.Add(mcard); + else + pre_res.Add(mcard); + } + } + if (pre_res.Count > 0) res.AddRange(pre_res); + AI.SelectCard(res); + } + return true; + } + } + private bool BystialDruiswurmEffect() + { + if (Card.Location == CardLocation.Hand) return S_SpSummon(); + else + { + List cards = Enemy.GetMonsters(); + cards.Sort(CardContainer.CompareCardAttack); + cards.Reverse(); + AI.SelectCard(cards); + return true; + } + } + private bool BystialMagnamhutEffect() + { + if (Card.Location == CardLocation.Hand) return S_SpSummon(); + return true; + } + private bool CrossSheepSummon() + { + if (Bot.MonsterZone[5] != null && Bot.MonsterZone[5].Controller == 0 && GetLinkMark(Bot.MonsterZone[5].Id) > 1) return false; + if (Bot.MonsterZone[6] != null && Bot.MonsterZone[6].Controller == 0 && GetLinkMark(Bot.MonsterZone[6].Id) > 1) return false; + if (!handActivated && Bot.Hand.Count(card => card != null && card.HasSetcode(0x11c) && card.HasType(CardType.Monster)) + + Bot.MonsterZone.Count(card => card != null && card.HasSetcode(0x11c) && card.IsFaceup() && card.HasType(CardType.Monster)) + + Bot.Graveyard.Count(card => card != null && card.HasSetcode(0x11c) && card.HasType(CardType.Monster)) + + Bot.Banished.Count(card => card != null && card.HasSetcode(0x11c) && card.IsFaceup() && card.HasType(CardType.Monster)) < 2) return false; + if ((Bot.HasInMonstersZone(CardId.ThunderDragonColossus, false, false, true) || Bot.HasInMonstersZone(CardId.ThunderDragonTitan, false, false, true))) + { + bool isShoudlSummon_1 = false; + int light_count = Bot.Graveyard.Count(card => card != null && card.HasAttribute(CardAttribute.Light)); + int dark_count = Bot.Graveyard.Count(card => card != null && card.HasAttribute(CardAttribute.Dark)); + if (HasInZoneNoActivate(CardId.WhiteDragonWyverburster, CardLocation.Hand) && dark_count > 0) isShoudlSummon_1 = true; + else if (HasInZoneNoActivate(CardId.BlackDragonCollapserpent, CardLocation.Hand) && light_count > 0) isShoudlSummon_1 = true; + else if ((HasInZoneNoActivate(CardId.BystialMagnamhut, CardLocation.Hand) || HasInZoneNoActivate(CardId.BystialDruiswurm, CardLocation.Hand)) + && (dark_count > 0 || light_count > 0)) isShoudlSummon_1 = true; + else if (HasInZoneNoActivate(CardId.ThunderDragonhawk, CardLocation.Hand)) + { + List mcards = Bot.GetMonsters().ToList(); + List grave = Bot.Graveyard.ToList(); + List banish = Bot.Banished.ToList(); + mcards.AddRange(grave); + mcards.AddRange(banish); + int mcount = mcards.Count(card => card != null && card.HasType(CardType.Monster) && card.HasSetcode(0x11c) && !card.IsCode(CardId.ThunderDragonColossus) && !card.IsCode(CardId.ThunderDragonTitan)); + isShoudlSummon_1 = mcount > 0 ? true : false; + } + else if(Bot.HasInHand(CardId.TheChaosCreator) && light_count > 0 && dark_count > 0) isShoudlSummon_1 = true; + else if (Bot.HasInHand(CardId.ThunderDragonlord) && Bot.Hand.Count(card=>card != null && card.HasType(CardType.Monster) && card.HasSetcode(0x11c))>1) isShoudlSummon_1 = true; + if (!isShoudlSummon_1) return false; + + } + IList cardsid = GetZoneRepeatCardsId(0, Bot.MonsterZone,true); + if (!cardsid.Contains(-1) && Bot.MonsterZone.Count(card => card != null && card.IsFaceup() && !card.IsOriginalCode(CardId.ThunderDragonColossus) && GetLinkMark(card.Id) <= 1) + - cardsid.Count() < 2) return false; + if (cardsid.Contains(-1) && Bot.MonsterZone.Count(card => card != null && card.IsFaceup() && !card.IsOriginalCode(CardId.ThunderDragonColossus) && !card.IsOriginalCode(CardId.ThunderDragonTitan) && GetLinkMark(card.Id) <= 1 ) < 2) return false; + bool isShoudlSummon_2 = false; + foreach (var card in Bot.GetMonsters()) + if (card != null && card.IsFaceup() && SpSummonCardsId.Contains(card.Id)) { isShoudlSummon_2 = true; break; } + if (Bot.Graveyard.Count(card => card != null && card.HasType(CardType.Monster) && card.Level <= 4 && !card.IsCode(CardId.BlackDragonCollapserpent) && !card.IsCode(CardId.WhiteDragonWyverburster)) > 0) isShoudlSummon_2 = true; + if (!isShoudlSummon_2) return false; + List cards = Bot.GetMonsters(); + if (cards.Count < 2) return false; + cards.Sort(CardContainer.CompareCardAttack); + HashSet MaterialsIdSet = new HashSet(); + foreach (var card in cards) + { + if (card == null) continue; + if (card.Id == CardId.UnionCarrier && summon_UnionCarrier) continue; + if (GetLinkMark(card.Id) <= 1 && card.Id != CardId.ThunderDragonColossus && card.Id != CardId.ThunderDragonTitan + && (card.EquipCards == null || (card.EquipCards != null && card.EquipCards.Count(ecard => ecard != null + && ecard.Id == CardId.DragonBusterDestructionSword) <= 0))) + MaterialsIdSet.Add(card.Id); + } + if (MaterialsIdSet.Count() < 2) return false; + List material = new List(); + if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.MonsterZone)) + material.Add(CardId.ThunderDragonroar); + if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.MonsterZone)) + material.Add(CardId.ThunderDragondark); + if (HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.MonsterZone)) + material.Add(CardId.ThunderDragonmatrix); + IList materials = MaterialsIdSet.ToList(); + material.AddRange(materials); + AI.SelectMaterials(material); + place_CrossSheep = true; + return true; + } + private bool ThunderDragonmatrixEffect() + { + if (Card.Location != CardLocation.Hand) + { + activate_ThunderDragonmatrix = true; + return true; + } + return false; + } + private bool IsShouldChainTunder() + { + ClientCard card = Util.GetLastChainCard(); + return card != null && card.Controller != 0 && Bot.HasInMonstersZone(CardId.ThunderDragonTitan, true, false, true) + && !card.IsDisabled() && (card.HasType(CardType.Monster) + || card.HasType(CardType.Continuous) || card.HasType(CardType.Equip) || card.HasType(CardType.Field)) && (card.Location == CardLocation.MonsterZone || card.Location == CardLocation.SpellZone); + } + private bool ThunderDragonmatrixEffect_2() + { + if (Card.Location == CardLocation.Hand) + { + if (Duel.Player == 0) + { + if (IsShouldChainTunder()) + { + activate_ThunderDragondark = true; + handActivated = true; + return true; + } + if (Duel.CurrentChain.Count > 0) return false; + List cards = Bot.Graveyard.ToList(); + cards.AddRange(Bot.Banished.ToList()); + if (handActivated || (HasInZoneNoActivate(CardId.ThunderDragonhawk, CardLocation.Hand) && Bot.GetMonstersInMainZone().Count < 5 + && cards.Count(card => card != null && card.HasSetcode(0x11c) && card.HasType(CardType.Monster) + && !card.IsCode(CardId.ThunderDragonhawk) && !card.IsExtraCard() && !card.IsCode(CardId.ThunderDragonlord)) > 0)) return false; + activate_ThunderDragonmatrix = true; + handActivated = true; + return true; + } + else + { + if (IsShouldChainTunder()) + { + AI.SelectCard(CardId.ThunderDragonColossus, CardId.ThunderDragonTitan); + activate_ThunderDragonmatrix = true; + handActivated = true; + return true; + } + else if (Duel.Phase == DuelPhase.Battle) + { + if (Bot.HasInMonstersZone(CardId.ThunderDragonTitan, true, false, true) && Enemy.GetMonsterCount() > 0) + { + AI.SelectCard(CardId.ThunderDragonColossus, CardId.ThunderDragonTitan); + activate_ThunderDragonmatrix = true; + handActivated = true; + return true; + } + } + else if (Duel.Phase == DuelPhase.BattleStep) + { + if (Bot.BattlingMonster != null && Bot.BattlingMonster.HasRace(CardRace.Thunder) + && !Bot.BattlingMonster.IsShouldNotBeTarget()) + { + AI.SelectCard(Bot.BattlingMonster); + activate_ThunderDragonmatrix = true; + handActivated = true; + return true; + } + } + else if(Duel.Phase == DuelPhase.End) + { + AI.SelectCard(CardId.ThunderDragonColossus, CardId.ThunderDragonTitan); + activate_ThunderDragonmatrix = true; + handActivated = true; + return true; + } + return false; + } + } + return false; + } + private bool WhiteDragonWyverbursterSummon() + { + if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Grave) + && Bot.GetMonstersInMainZone().Count < 5) + AI.SelectCard(CardId.ThunderDragonroar); + else if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Grave)) + AI.SelectCard(CardId.ThunderDragondark); + else + { + List cardsid = new List(); + cardsid.Add(CardId.BlackDragonCollapserpent); + cardsid.Add(CardId.TheChaosCreator); + foreach (var card in Bot.Graveyard) + { + if (card != null && !card.HasSetcode(0x11c) && card.HasAttribute(CardAttribute.Dark)) + cardsid.Add(card.Id); + } + foreach (var card in Bot.Graveyard) + { + if (card != null && card.HasSetcode(0x11c) && card.HasAttribute(CardAttribute.Dark)) + cardsid.Add(card.Id); + } + + AI.SelectCard(cardsid); + } + summon_WhiteDragonWyverburster = true; + return true; + } + private bool HasInZoneNoActivate(int cardId , CardLocation location , bool isFaceUp = false) + { + switch (location) + { + case CardLocation.Deck: if (CheckRemainInDeck(cardId) <= 0) return false; break; + case CardLocation.Hand: if (!Bot.HasInHand(cardId)) return false; break; + case CardLocation.Grave: if (!Bot.HasInGraveyard(cardId)) return false; break; + case CardLocation.Removed: if (!Bot.HasInBanished(cardId)) return false; break; + case CardLocation.MonsterZone: if (!Bot.HasInMonstersZone(cardId,false,false, isFaceUp)) return false; break; + default: return false; + } + switch (cardId) + { + case CardId.ThunderDragonroar: return !activate_ThunderDragonroar; + case CardId.ThunderDragondark: return !activate_ThunderDragondark; + case CardId.ThunderDragonhawk: return !activate_ThunderDragonhawk; + case CardId.ThunderDragonmatrix: return !activate_ThunderDragonmatrix; + case CardId.BystialDruiswurm: return !activate_BystialDruiswurm_hand; + case CardId.BystialMagnamhut: return !activate_BystialMagnamhut_hand; + case CardId.TheBystialLubellion: return !activate_TheBystialLubellion_hand; + case CardId.BlackDragonCollapserpent: return !summon_BlackDragonCollapserpent; + case CardId.WhiteDragonWyverburster: return !summon_WhiteDragonWyverburster; + default: return false; + } + } + private bool AloofLupineEffect() + { + if (Card.Location == CardLocation.MonsterZone) + { + if (Bot.Hand.Count(card => card != null && card.HasRace(CardRace.Thunder)) <= 0) return false; + bool _ThunderDragonroar = false, _ThunderDragondark = false, _ThunderDragonmatrix = false; + if (Bot.Hand.Count(card => card != null && card.HasRace(CardRace.Thunder) && !(card.IsCode(CardId.ThunderDragonhawk) && activate_ThunderDragonhawk)) <= 0 + && GetRemainingThunderCount(true) <= 0) return false; + if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Hand) && Bot.GetMonstersInMainZone().Count() < 5 + && GetRemainingThunderCount() > 0) + { + AI.SelectCard(CardId.ThunderDragonroar); + _ThunderDragonroar = true; + } + else if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Hand) && GetRemainingThunderCount() > 0) + { + AI.SelectCard(CardId.ThunderDragondark); + _ThunderDragondark = true; + } + else if (HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.Hand) && GetRemainingThunderCount() > 0) + { + AI.SelectCard(CardId.ThunderDragonmatrix); + _ThunderDragonmatrix = true; + } + else if (Bot.GetCountCardInZone(Bot.Hand, CardId.NormalThunderDragon) > 1) + AI.SelectCard(CardId.NormalThunderDragon); + else + { + IList cards = Bot.Hand.Where(card => card != null && card.HasRace(CardRace.Thunder)).ToList(); + if (cards.Count() > 0) AI.SelectCard(cards); + else AI.SelectCard(CardId.ThunderDragonlord, CardId.BatterymanSolar, CardId.TheChaosCreator, CardId.NormalThunderDragon); + } + if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Deck) && !_ThunderDragonroar + && Bot.GetMonstersInMainZone().Count < 5 && !Bot.HasInMonstersZone(CardId.ThunderDragonroar,false,false,true)) + AI.SelectNextCard(CardId.ThunderDragonroar); + else if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Deck) && !_ThunderDragondark + && !Bot.HasInMonstersZone(CardId.ThunderDragondark, false, false, true)) + AI.SelectNextCard(CardId.ThunderDragondark); + else if (HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.Deck) && !_ThunderDragonmatrix + && !Bot.HasInMonstersZone(CardId.ThunderDragonmatrix, false, false, true)) + AI.SelectNextCard(CardId.ThunderDragonmatrix); + else if(Bot.HasInGraveyard(CardId.TheChaosCreator) && !activate_ChaosSpace_grave && CheckRemainInDeck(CardId.ThunderDragonlord) > 0) + AI.SelectNextCard(CardId.ThunderDragonlord); + else + AI.SelectNextCard(CardId.NormalThunderDragon); + return true; + } + else + { + int[] ids = new int[] + { + CardId.ThunderDragonhawk,CardId.ThunderDragonColossus, + CardId.BystialMagnamhut,CardId.BystialDruiswurm, + CardId.BlackDragonCollapserpent,CardId.WhiteDragonWyverburster, + CardId.TheChaosCreator,CardId.TheBystialLubellion + }; + AI.SelectCard(ids); + return true; + } + + } + private bool ThunderDragonmatrixSummon() + { + if (No_SpSummon) return false; + if (Bot.HasInExtra(CardId.Linkuriboh)) + { + if (Bot.MonsterZone[5] != null && Bot.MonsterZone[5].Id == CardId.UnionCarrier && Bot.MonsterZone[5].Controller == 0) + { + if (Bot.MonsterZone[1] != null) return false; + } + if (Bot.MonsterZone[6] != null && Bot.MonsterZone[6].Id == CardId.UnionCarrier && Bot.MonsterZone[6].Controller == 0) + { + if (Bot.MonsterZone[3] != null) return false; + } + isSummoned = true; + return true; + } + if (Bot.GetMonsters().Count(card => card != null && card.Id != CardId.ThunderDragonTitan && card.Id != CardId.ThunderDragonColossus && GetLinkMark(card.Id) < 3 && card.IsFaceup()) < 1) return false; + switch (Card.Id) + { + case CardId.ThunderDragonmatrix: + if((Bot.HasInExtra(CardId.CrossSheep) || Bot.HasInExtra(CardId.IP)) + && (Bot.GetMonsterCount()>0 && !Bot.HasInMonstersZone(CardId.ThunderDragonColossus) + && !Bot.HasInMonstersZone(CardId.ThunderDragonTitan))) + { isSummoned = true; return true; } + break; + default: + break; + } + return false; + } + private bool TheBystialLubellionEffect() + { + if (Card.Location == CardLocation.Hand) + { + if (HasInZoneNoActivate(CardId.BystialMagnamhut,CardLocation.Deck) && !Bot.HasInHand(CardId.BystialMagnamhut)) + AI.SelectCard(CardId.BystialMagnamhut); + else if(HasInZoneNoActivate(CardId.BystialDruiswurm, CardLocation.Deck) && !Bot.HasInHand(CardId.BystialDruiswurm)) + AI.SelectCard(CardId.BystialDruiswurm); + else + AI.SelectCard(CardId.BystialDruiswurm, CardId.BystialMagnamhut); + activate_TheBystialLubellion_hand = true; + return true; + } + return Card.Location == CardLocation.MonsterZone; + } + private bool ThunderDragonFusionEffect() + { + if (Card.Location == CardLocation.Grave) + { + if (Bot.Graveyard.Count(card => card != null && card.HasAttribute(CardAttribute.Dark)) > 0 + && Bot.Graveyard.Count(card => card != null && card.HasAttribute(CardAttribute.Light)) > 0 + && CheckRemainInDeck(CardId.TheChaosCreator) > 0) + AI.SelectCard(CardId.TheChaosCreator); + else if(Bot.HasInGraveyardOrInBanished(CardId.ThunderDragonroar) || Bot.HasInGraveyardOrInBanished(CardId.ThunderDragondark) + || Bot.HasInGraveyardOrInBanished(CardId.ThunderDragonlord) || Bot.HasInGraveyardOrInBanished(CardId.ThunderDragonmatrix) + || Bot.HasInGraveyardOrInBanished(CardId.NormalThunderDragon) && CheckRemainInDeck(CardId.ThunderDragonhawk) > 0) + AI.SelectCard(CardId.ThunderDragonhawk); + else if((HasInZoneNoActivate(CardId.BystialDruiswurm,CardLocation.Hand) || HasInZoneNoActivate(CardId.BystialMagnamhut, CardLocation.Hand) + || HasInZoneNoActivate(CardId.WhiteDragonWyverburster, CardLocation.Hand) || HasInZoneNoActivate(CardId.BlackDragonCollapserpent, CardLocation.Hand) + || HasInZoneNoActivate(CardId.TheChaosCreator, CardLocation.Hand)) && CheckRemainInDeck(CardId.BatterymanSolar) > 0) + AI.SelectCard(CardId.BatterymanSolar); + else if(Bot.HasInMonstersZone(CardId.ThunderDragonTitan,true,false,true) && CheckRemainInDeck(CardId.NormalThunderDragon)>1) + AI.SelectCard(CardId.NormalThunderDragon); + else if(!HasInZoneNoActivate(CardId.ThunderDragonroar,CardLocation.Deck)) + AI.SelectCard(CardId.ThunderDragonroar); + else if(handActivated && CheckRemainInDeck(CardId.ThunderDragonlord) > 0) + AI.SelectCard(CardId.ThunderDragonlord); + else + AI.SelectCard(CardId.TheChaosCreator,CardId.ThunderDragondark,CardId.ThunderDragonlord); + return true; + } + else + { + List cards = Bot.Graveyard.ToList(); + IList banish = Bot.Banished; + cards.AddRange(banish); + if (Bot.HasInExtra(CardId.ThunderDragonColossus) && Bot.GetCountCardInZone(cards, CardId.NormalThunderDragon) >= 1 && + Bot.GetCountCardInZone(cards, CardId.NormalThunderDragon) + cards.Count(card => card != null && card.HasSetcode(0x11c) && card.HasType(CardType.Monster) && !card.IsCode(CardId.NormalThunderDragon)) > 1) + { + AI.SelectCard(CardId.ThunderDragonColossus, CardId.ThunderDragonTitan); + return true; + } + else if (Bot.HasInExtra(CardId.ThunderDragonTitan) && cards.Count(card => card != null && card.HasSetcode(0x11c) && card.HasType(CardType.Monster)) >= 3) + { + AI.SelectCard(CardId.ThunderDragonColossus, CardId.ThunderDragonTitan); + return true; + } + return false; + } + } + private bool TheBystialLubellionSummon() + { + if (Bot.HasInGraveyard(CardId.TheBystialLubellion) && Card.Location == CardLocation.Hand) return false; + if (Card.Location == CardLocation.Hand && activate_TheBystialLubellion_hand && !Bot.HasInGraveyard(CardId.TheBystialLubellion)) { summon_TheBystialLubellion = true; return true; } + if (Card.Location == CardLocation.Grave) { summon_TheBystialLubellion = true; return true; } + return false; + } + private bool CheckHandThunder() + { + if (HasInZoneNoActivate(CardId.ThunderDragonroar,CardLocation.Hand)) return true; + if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Hand)) return true; + if (HasInZoneNoActivate(CardId.ThunderDragonhawk, CardLocation.Hand)) return true; + if (Bot.HasInHand(CardId.NormalThunderDragon)) return true; + return false; + } + private bool ChaosSpaceEffect_2() + { + if (Card.Location == CardLocation.Grave) + { + if((CheckRemainInDeck(CardId.ThunderDragonFusion)>0 || Bot.HasInHandOrInSpellZone(CardId.ThunderDragonFusion)) + && !Bot.HasInExtra(CardId.ThunderDragonTitan)) + AI.SelectCard(CardId.ThunderDragonTitan,CardId.ThunderDragonColossus, CardId.BlackDragonCollapserpent, CardId.WhiteDragonWyverburster, CardId.TheBystialLubellion); + else + AI.SelectCard(CardId.ThunderDragonColossus,CardId.WhiteDragonWyverburster, CardId.BlackDragonCollapserpent, CardId.TheBystialLubellion); + activate_ChaosSpace_grave = true; + return true; + } + return false; + } + private bool ChaosSpaceEffect() + { + if (Card.Location != CardLocation.Grave) + { + if (Bot.GetCountCardInZone(Bot.Hand, CardId.ThunderDragonmatrix) > 1 && !activate_ThunderDragonmatrix + && !CheckHandThunder() && Bot.Hand.Any(card => card != null && + (card.HasAttribute(CardAttribute.Dark) || card.HasAttribute(CardAttribute.Light)) + && !card.IsCode(CardId.ThunderDragonroar) && !card.IsCode(CardId.ThunderDragondark) && !card.IsCode(CardId.ThunderDragonhawk) + && !card.IsCode(CardId.NormalThunderDragon))) return false; + selectFlag[(int)Select.ChaosSpace_1] = true; + activate_ChaosSpace_hand = true; + return true; + } + return false; + } + private bool AloofLupineSummon() + { + if (Bot.Hand.Count <= 1 || !Bot.Hand.Any(card => card!=null && card.HasRace(CardRace.Thunder) && card != Card)) return false; + if (CheckThunderRemove()) + { + isSummoned = true; + return true; + } + return false; + } + private IList GetZoneRepeatCardsId(int att, IList zoneCards,bool isFaceUp = false) + { + if (zoneCards.Count <= 0) return new List() { -1 }; + IList cards = zoneCards; + if (att > 0) cards = cards.Where(card => card != null && card.HasAttribute((CardAttribute)att)).ToList(); + if(cards.Count <= 0) return new List() { -1 }; + IList cardsid = new List(); + IList res = new List(); + foreach (var card in cards) + if(card != null && !(!card.IsFaceup() & isFaceUp)) + cardsid.Add(card.Id); + for (int i = 0; i < cardsid.Count; i++) + { + if (res.Count >= 0 && res.Contains(cardsid[i])) continue; + int times = 0; + for (int j = 0; j < cardsid.Count; j++) + { + if (times > 1) { res.Add(cardsid[i]); break; } + if (cardsid[i] == cardsid[j]) ++times; + } + } + if (res.Count <= 0) return new List() { -1 }; + return res; + } + private bool AllureofDarknessEffect() + { + if (Bot.Deck.Count <= 2) return false; + if (Bot.Hand.Count(card => card != null && card.HasAttribute(CardAttribute.Dark)) <= 0) return false; + if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Hand) && Bot.GetMonstersInMainZone().Count < 5) + AI.SelectCard(CardId.ThunderDragonroar); + else if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Hand)) + AI.SelectCard(CardId.ThunderDragondark); + else + { + List cardsid = new List(); + IList cardsid_1 = GetZoneRepeatCardsId((int)CardAttribute.Dark, Bot.Hand).ToList(); + IList cardsid_2 = new List(); + if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Deck) && Bot.GetMonstersInMainZone().Count < 5) cardsid.Add(CardId.ThunderDragonroar); + if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Deck)) cardsid.Add(CardId.ThunderDragondark); + if (HasInZoneNoActivate(CardId.TheBystialLubellion, CardLocation.Hand)) { cardsid_2.Add(CardId.BystialDruiswurm); cardsid_2.Add(CardId.BystialMagnamhut); } + if (!Bot.HasInExtra(CardId.Linkuriboh) || isSummoned) cardsid_2.Add(CardId.DragonBusterDestructionSword); + if (!HasInZoneNoActivate(CardId.BlackDragonCollapserpent, CardLocation.Hand)) cardsid_2.Add(CardId.BlackDragonCollapserpent); + if (isSummoned) cardsid_2.Add(CardId.AloofLupine); + cardsid.AddRange(cardsid_1); + cardsid.AddRange(cardsid_2); + AI.SelectCard(cardsid); + } + return true; + } + private bool ThunderDragondarkEffect_2() + { + if (Card.Location == CardLocation.Hand) + { + if (Duel.Player == 0) + { + if (IsShouldChainTunder()) + { + activate_ThunderDragondark = true; + handActivated = true; + return true; + } + if (Duel.CurrentChain.Count > 0 || Duel.Phase < DuelPhase.Main1) return false; + if (handActivated || (Bot.HasInHand(CardId.NormalThunderDragon) && CheckRemainInDeck(CardId.NormalThunderDragon) > 0) || !Bot.HasInExtra(CardId.ThunderDragonColossus)) return false; + if (!isSummoned && (Bot.HasInHand(CardId.BatterymanSolar) || Bot.HasInHand(CardId.AloofLupine))) return false; + activate_ThunderDragondark = true; + handActivated = true; + return true; + } + else + { + if (IsShouldChainTunder() || (Duel.Phase == DuelPhase.End + && Bot.HasInMonstersZone(CardId.ThunderDragonTitan, true, false, true) + && Enemy.GetMonsterCount() + Enemy.GetSpellCount() > 0) + || (!Bot.HasInMonstersZone(CardId.ThunderDragonTitan, true, false, true) + && !Bot.HasInGraveyard(CardId.ThunderDragondark))) + { + activate_ThunderDragondark = true; + handActivated = true; + return true; + } + return false; + } + } + return false; + } + private bool ThunderDragondarkEffect() + { + if (Card.Location != CardLocation.Hand) + { + if (Duel.Player == 0) + { + if (handActivated && CheckRemainInDeck(CardId.ThunderDragonlord) > 0 && + Bot.Hand.Count(card => card != null && card.HasRace(CardRace.Thunder)) > 0 && + (Bot.HasInMonstersZone(CardId.ThunderDragonColossus) || (!isSummoned && Bot.Hand.Count(card => card != null && card.HasRace(CardRace.Thunder)) > 1))) + AI.SelectCard(CardId.ThunderDragonlord); + else if (HasInZoneNoActivate(CardId.ThunderDragonhawk, CardLocation.Deck) && !Bot.HasInHand(CardId.ThunderDragonhawk)) + AI.SelectCard(CardId.ThunderDragonhawk); + else if (handActivated && Bot.Hand.Count(card => card != null && card.HasRace(CardRace.Thunder) && card.Level < 8) > 0 + && Bot.HasInMonstersZone(CardId.ThunderDragonColossus) && CheckRemainInDeck(CardId.ThunderDragonlord) > 0) + AI.SelectCard(CardId.ThunderDragonlord); + else if (HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.Deck)) + AI.SelectCard(CardId.ThunderDragonmatrix); + else if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Hand) && handActivated + && CheckRemainInDeck(CardId.ThunderDragonlord) > 0) + AI.SelectCard(CardId.ThunderDragonlord); + else if (CheckRemainInDeck(CardId.ThunderDragonlord) > 0 && CheckRemainInDeck(CardId.NormalThunderDragon) > 1) + AI.SelectCard(CardId.ThunderDragonlord); + else if (handActivated && Bot.HasInHand(CardId.ThunderDragonlord) && CheckRemainInDeck(CardId.ThunderDragonroar) > 0) + AI.SelectCard(CardId.ThunderDragonroar); + else if (CheckRemainInDeck(CardId.NormalThunderDragon) > 1 && !handActivated) + AI.SelectCard(CardId.NormalThunderDragon); + else + AI.SelectCard(CardId.ThunderDragonmatrix, CardId.ThunderDragondark, CardId.ThunderDragonroar, CardId.NormalThunderDragon); + activate_ThunderDragondark = true; + return true; + } + else + { + if (!Bot.HasInHand(CardId.ThunderDragonmatrix) && HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.Deck) + &&(Bot.HasInMonstersZone(CardId.ThunderDragonTitan, true, false, true) + || (Bot.HasInMonstersZone(CardId.ThunderDragonColossus, true, false, true) && Bot.GetGraveyardMonsters().Count(card=>card != null && card.HasRace(CardRace.Thunder)) < 2 ))) + AI.SelectCard(CardId.ThunderDragonmatrix); + else AI.SelectCard(CardId.ThunderDragonFusion, CardId.ThunderDragonhawk,CardId.ThunderDragonroar,CardId.NormalThunderDragon) ; + activate_ThunderDragondark = true; + return true; + } + } + return false; + } + private bool NormalThunderDragonEffect() + { + handActivated = true; + selectFlag[(int)Select.NormalThunderDragon] = true; + return true; + } + private bool BatterymanSolarEffect() + { + if (HasInZoneNoActivate(CardId.BystialDruiswurm, CardLocation.Hand) + || HasInZoneNoActivate(CardId.BystialMagnamhut, CardLocation.Hand)) + { + if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Deck)) + AI.SelectCard(CardId.ThunderDragonroar); + else if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Deck) + && !Bot.HasInMonstersZone(CardId.ThunderDragondark,false,false,true)) + AI.SelectCard(CardId.ThunderDragondark); + else if ((HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.Deck))) + AI.SelectCard(CardId.ThunderDragonmatrix); + else if (CheckRemainInDeck(CardId.NormalThunderDragon) > 0) + AI.SelectCard(CardId.NormalThunderDragon); + else if (CheckRemainInDeck(CardId.TheChaosCreator) > 0) + AI.SelectCard(CardId.TheChaosCreator); + else AI.SelectCard(CardId.ThunderDragonmatrix); + } + else if (HasInZoneNoActivate(CardId.WhiteDragonWyverburster, CardLocation.Hand)) + { + if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Deck)) + AI.SelectCard(CardId.ThunderDragonroar); + else if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Deck)) + AI.SelectCard(CardId.ThunderDragondark); + else if (CheckRemainInDeck(CardId.TheChaosCreator) > 0) + AI.SelectCard(CardId.TheChaosCreator); + else AI.SelectCard(CardId.ThunderDragonmatrix); + + } + else if (Bot.HasInHand(CardId.ChaosSpace) && !activate_ChaosSpace_hand) + { + if ((Bot.Hand.Count(card => card != null && card.HasAttribute(CardAttribute.Dark)) > 0 + || Bot.Hand.Count(card => card != null && card.HasAttribute(CardAttribute.Light)) > 0) + && HasInZoneNoActivate(CardId.WhiteDragonWyverburster, CardLocation.Deck) + && HasInZoneNoActivate(CardId.BlackDragonCollapserpent, CardLocation.Deck)) + { + if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Deck)) + AI.SelectCard(CardId.ThunderDragonroar); + else if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Deck)) + AI.SelectCard(CardId.ThunderDragondark); + else + AI.SelectCard(CardId.ThunderDragonmatrix, CardId.ThunderDragonhawk, CardId.NormalThunderDragon); + } + } + else if (HasInZoneNoActivate(CardId.BlackDragonCollapserpent, CardLocation.Hand)) + AI.SelectCard(CardId.ThunderDragonmatrix, CardId.ThunderDragonhawk); + else + { + if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Deck)) + AI.SelectCard(CardId.ThunderDragonroar); + else if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Deck)) + AI.SelectCard(CardId.ThunderDragondark); + else AI.SelectCard(CardId.ThunderDragonmatrix, CardId.ThunderDragonhawk); + } + return true; + } + } +} diff --git a/WindBot.csproj b/WindBot.csproj index 40ac0adf..10d6e778 100644 --- a/WindBot.csproj +++ b/WindBot.csproj @@ -85,6 +85,7 @@ + From e0b1b7287256b01f111b1e4f138da7369ca956e5 Mon Sep 17 00:00:00 2001 From: mercury233 Date: Tue, 15 Nov 2022 19:52:08 +0800 Subject: [PATCH 02/18] fix --- Game/AI/Decks/ThunderDragonExecutor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Game/AI/Decks/ThunderDragonExecutor.cs b/Game/AI/Decks/ThunderDragonExecutor.cs index e16f5ded..b89e4866 100644 --- a/Game/AI/Decks/ThunderDragonExecutor.cs +++ b/Game/AI/Decks/ThunderDragonExecutor.cs @@ -581,7 +581,7 @@ public override IList OnSelectCard(IList cards, int min, res.Sort(CardContainer.CompareCardAttack); if (res.Count <= 0) return null; if(res[0].Attack Date: Wed, 16 Nov 2022 21:01:44 +0800 Subject: [PATCH 03/18] fix "ThunderDragon" --- Game/AI/Decks/ThunderDragonExecutor.cs | 118 +++++++++++++++++++++---- 1 file changed, 99 insertions(+), 19 deletions(-) diff --git a/Game/AI/Decks/ThunderDragonExecutor.cs b/Game/AI/Decks/ThunderDragonExecutor.cs index b89e4866..b8709125 100644 --- a/Game/AI/Decks/ThunderDragonExecutor.cs +++ b/Game/AI/Decks/ThunderDragonExecutor.cs @@ -1,6 +1,7 @@ using YGOSharp.OCGWrapper.Enums; using System.Collections.Generic; using System.Linq; +using System; using WindBot; using WindBot.Game; using WindBot.Game.AI; @@ -61,12 +62,13 @@ private enum Select ChaosSpace_2, ThunderDragonColossus, AccesscodeTalker, - DestroyReplace + DestroyReplace, + ThunderDragonTitan }; private const int THUNDER_COUNTD = 18; List selectFlag = new List() { - false,false,false,false,false,false,false + false,false,false,false,false,false,false,false }; List selectAtt = new List() { @@ -128,6 +130,7 @@ public ThunderDragonExecutor(GameAI ai, Duel duel) AddExecutor(ExecutorType.Activate, CardId.NormalThunderDragon, NormalThunderDragonEffect); AddExecutor(ExecutorType.Activate, CardId.ThunderDragonmatrix, ThunderDragonmatrixEffect); AddExecutor(ExecutorType.SpSummon, CardId.StrikerDragon, StrikerDragonSummon); + AddExecutor(ExecutorType.SpSummon, CardId.ThunderDragonColossus, ThunderDragonColossusSummon_2); AddExecutor(ExecutorType.SpSummon, CardId.CrossSheep, CrossSheepSummon); AddExecutor(ExecutorType.Activate, CardId.CrossSheep, CrossSheepEffect); AddExecutor(ExecutorType.Activate, CardId.TheChaosCreator); @@ -298,6 +301,11 @@ public override int OnSelectPlace(int cardId, int player, CardLocation location, if ((Zones.z0 & available) > 0) return Zones.z0; if ((Zones.z4 & available) > 0) return Zones.z4; } + if ((Bot.HasInMonstersZone(CardId.ThunderDragonTitan, false, false, true) || Bot.HasInMonstersZone(CardId.ThunderDragonColossus, false, false, true)) && Bot.HasInMonstersZone(CardId.CrossSheep, false, false, true)) + { + if ((Zones.z1 & available) > 0) return Zones.z1; + if ((Zones.z3 & available) > 0) return Zones.z3; + } if (place_Link_4) { place_Link_4 = false; @@ -760,7 +768,7 @@ private IList GetAttUsed() { IList attributes = new List(); for (int i = 0; i < selectAtt.Count; ++i) - if (selectAtt[i]) attributes.Add((CardAttribute)(2^i)); + if (selectAtt[i]) attributes.Add((CardAttribute)(Math.Pow(2, i))); if (attributes.Count > 0) return attributes; return null; } @@ -911,6 +919,12 @@ private bool GEffect() { return Duel.Player != 0; } + private bool ThunderDragonColossusSummon_2() + { + if (handActivated && activate_ThunderDragonmatrix) + return ThunderDragonColossusSummon(); + return false; + } private bool ThunderDragonTitanEffect() { //if (Duel.CurrentChain.Count > 0) @@ -938,6 +952,7 @@ private bool ThunderDragonTitanEffect() res.AddRange(mcards); res.AddRange(scards); AI.SelectCard(res); + selectFlag[(int)Select.ThunderDragonTitan] = true; return true; } else @@ -952,6 +967,7 @@ private bool PredaplantVerteAnacondaEffect() if (ActivateDescription == Util.GetStringId(CardId.PredaplantVerteAnaconda, 1)) { if (CheckRemainInDeck(CardId.ThunderDragonFusion) <= 0) return false; + if (Bot.GetMonstersInMainZone().Count > 4 && Bot.GetMonstersInMainZone().Count(card => card != null && !card.IsExtraCard() && card.HasSetcode(0x11c) && card.HasType(CardType.Monster)) <= 0) return false; List g_card = Bot.Graveyard.ToList(); List b_card = Bot.Banished.ToList(); g_card.AddRange(b_card); @@ -1054,6 +1070,24 @@ private bool ThunderDragonlordEffect() } return false; } + private bool LinkZoneCheck() + { + bool res = false; + foreach (var card in Bot.GetMonstersInMainZone()) + { + if (card == null) continue; + if (card.Id != CardId.ThunderDragonTitan && card.Id != CardId.ThunderDragonColossus && (card.LinkCount < 3 || (card.Id == CardId.BowoftheGoddess && card.Attack <= 800))) + { + if (Util.GetBotAvailZonesFromExtraDeck(card) > 0) + { + res = true; + break; + } + } + } + if (!res) return false; + return true; + } private bool PredaplantVerteAnacondaSummon() { if (CheckRemainInDeck(CardId.ThunderDragonFusion) <= 0) return false; @@ -1070,12 +1104,14 @@ private bool PredaplantVerteAnacondaSummon() if (card.IsCode(CardId.NormalThunderDragon)) ++Lcount; } + if (!LinkZoneCheck()) return false; if ((count >= 3 && Bot.HasInExtra(CardId.ThunderDragonTitan)) || (Bot.HasInExtra(CardId.ThunderDragonColossus) && Lcount > 0 && g_card.Count(card => card != null && card.HasRace(CardRace.Thunder)) > 1)) { List cards = Bot.GetMonsters().Where(card => card != null && card.IsFaceup() && GetLinkMark(card.Id) < 3 && !card.HasType(CardType.Normal) && !card.IsCode(CardId.ThunderDragonColossus) && !card.IsCode(CardId.ThunderDragonTitan) && !card.IsCode(CardId.ThunderDragonlord) && !(card.IsCode(CardId.UnionCarrier) && summon_UnionCarrier)).ToList(); if (cards.Count < 2) return false; cards.Sort(CardContainer.CompareCardAttack); + if (cards.Count(card => card != null && card.Id == CardId.IP) > 0 && cards.Count <= 2) return false; AI.SelectMaterials(cards); return true; } @@ -1091,20 +1127,31 @@ private bool KnightmareUnicornSummon() List pre_cards = Enemy.GetMonsters(); pre_cards.AddRange(Enemy.GetSpells()); if (pre_cards.Count(card => card != null && !card.IsShouldNotBeTarget()) <= 0) return false; - List materials = new List(); + List tmepMaterials = new List(); List resMaterials = new List(); foreach (var card in Bot.GetMonsters()) { if (card == null) continue; if (card.Id == CardId.UnionCarrier && summon_UnionCarrier) continue; - if (GetLinkMark(card.Id) < 3 && card.Id != CardId.ThunderDragonTitan - && card.Id != CardId.ThunderDragonColossus && card.IsFaceup() && materials.Count(_card=> _card != null && _card.Id==card.Id) <= 0) - materials.Add(card); + if ((GetLinkMark(card.Id) < 3 || (card.Id == CardId.BowoftheGoddess && card.Attack <= 800)) && card.Id != CardId.ThunderDragonTitan + && card.Id != CardId.ThunderDragonColossus && card.IsFaceup() && tmepMaterials.Count(_card=> _card != null && _card.Id==card.Id) <= 0) + tmepMaterials.Add(card); } int link_count = 0; - materials.Sort(CardContainer.CompareCardAttack); - materials.Sort(CompareCardLink); - materials.Reverse(); + tmepMaterials.Sort(CardContainer.CompareCardAttack); + List materials = new List(); + List link_materials = tmepMaterials.Where(card => card != null && card.LinkCount == 2).ToList(); + List normal_materials = tmepMaterials.Where(card => card != null && card.LinkCount != 2).ToList(); + if (link_materials.Count() >= 1) + { + link_materials.InsertRange(1, normal_materials); + materials.AddRange(link_materials); + } + else + { + materials.AddRange(normal_materials); + materials.AddRange(link_materials); + } if (materials.Count(card => card != null && card.LinkCount >= 2) > 1 && materials.Count(card => card != null && card.LinkCount < 2) < 1) return false; foreach (var card in materials) @@ -1187,7 +1234,7 @@ private bool BowoftheGoddessSummon() && (Bot.HasInExtra(CardId.UnderworldGoddessoftheClosedWorld) || Bot.HasInExtra(CardId.MekkKnightCrusadiaAvramax) || Bot.HasInExtra(CardId.AccesscodeTalker))) return false; } - List materials = new List(); + List tempmaterials = new List(); List resMaterials = new List(); foreach (var card in Bot.GetMonsters()) { @@ -1195,11 +1242,42 @@ private bool BowoftheGoddessSummon() if(card.Id == CardId.UnionCarrier && summon_UnionCarrier) continue; if (GetLinkMark(card.Id) < 4 && card.Id != CardId.ThunderDragonTitan && card.Id != CardId.ThunderDragonColossus && card.IsFaceup() && !card.HasType(CardType.Token)) - materials.Add(card); + tempmaterials.Add(card); } + if (!LinkZoneCheck()) return false; int link_count = 0; - materials.Sort(CompareCardLink); - materials.Reverse(); + List materials = new List(); + List link_materials = tempmaterials.Where(card => card != null && (card.LinkCount == 3 || card.LinkCount == 2)).ToList(); + List normal_materials = tempmaterials.Where(card => card != null && card.LinkCount != 3 && card.LinkCount != 2).ToList(); + normal_materials.Sort(CardContainer.CompareCardAttack); + if (link_materials.Count <= 0 && Card.Id == CardId.AccesscodeTalker) return false; + if (link_materials.Count(card => card != null && card.LinkCount == 3) > 0 && normal_materials.Count() > 0) + { + int index = -1; + for (int i = 0; i < link_materials.Count(); i++) + { + if (link_materials[i] != null && link_materials[i].LinkCount == 3) + { + if (i > 0) + { + ClientCard temp = link_materials[0]; + link_materials[0] = link_materials[i]; + link_materials[i] = temp; + } + index = i; + break; + } + } + resMaterials.Sort(CardContainer.CompareCardAttack); + if (index >= 0) link_materials.InsertRange(index + 1, normal_materials); + materials.AddRange(link_materials); + } + else + { + link_materials.Sort(CompareCardLink); + materials.AddRange(link_materials); + materials.AddRange(normal_materials); + } foreach (var card in materials) { if (!resMaterials.Contains(card) && card.LinkCount < 4) @@ -1210,6 +1288,7 @@ private bool BowoftheGoddessSummon() if (link_count >= 4) break; } } + resMaterials.Sort(CardContainer.CompareCardAttack); if (link_count >= 4) { AI.SelectMaterials(resMaterials); place_Link_4 = true; return true; } return false; } @@ -1267,6 +1346,7 @@ private bool IPSummon() && !Bot.HasInExtra(CardId.MekkKnightCrusadiaAvramax) && !Bot.HasInExtra(CardId.AccesscodeTalker) && !Bot.HasInExtra(CardId.UnderworldGoddessoftheClosedWorld)) return false; List cards = Bot.GetMonsters().Where(card => card != null && GetLinkMark(card.Id) < 3 && card.Id != CardId.ThunderDragonTitan && card.Id != CardId.ThunderDragonColossus && !card.HasType(CardType.Link) && card.Attack <= 2500 && card.EquipCards.Count(ecard=> ecard != null && ecard.Id==CardId.DragonBusterDestructionSword && !ecard.IsDisabled())<=0).ToList(); if (cards.Count < 2) return false; + if (!LinkZoneCheck()) return false; cards.Sort(CardContainer.CompareCardAttack); List cardsId = new List(); if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.MonsterZone)) @@ -1341,6 +1421,7 @@ private bool UnionCarrierEffect_2() } private bool StrikerDragonSummon() { + if ((summon_WhiteDragonWyverburster && summon_BlackDragonCollapserpent) || CheckRemainInDeck(CardId.WhiteDragonWyverburster) <= 0 || CheckRemainInDeck(CardId.BlackDragonCollapserpent) <= 0) return false; return Bot.GetMonsters().Count(card => card != null && card.HasRace(CardRace.Dragon) && card.Level > 1) > 0; } private bool DefaultSummon() @@ -1547,14 +1628,13 @@ private bool UnionCarrierSummon_2() if (!LinkCheck(false) || !LinkCheck(true)) return false; if (Bot.MonsterZone[6] != null && Bot.MonsterZone[6].Controller == 0 && GetLinkMark(Bot.MonsterZone[6].Id) > 1) return false; int[] materials = new[] { - CardId.BatterymanToken,CardId.BatterymanSolar,CardId.ThunderDragonmatrix, - CardId.NormalThunderDragon, CardId.WhiteDragonWyverburster, CardId.ThunderDragonhawk, - CardId.G, CardId.AloofLupine, CardId.CrossSheep, + CardId.StrikerDragon,CardId.BatterymanToken,CardId.BatterymanSolar, + CardId.ThunderDragonmatrix,CardId.NormalThunderDragon, CardId.WhiteDragonWyverburster, + CardId.ThunderDragonhawk,CardId.G, CardId.AloofLupine, CardId.CrossSheep, CardId.ThunderDragonroar,CardId.ThunderDragondark,CardId.BlackDragonCollapserpent, CardId.DragonBusterDestructionSword,CardId.BystialMagnamhut,CardId.BystialDruiswurm, CardId.TheChaosCreator,CardId.Linkuriboh,CardId.TheBystialLubellion, - CardId.ThunderDragonlord, CardId.StrikerDragon,CardId.PredaplantVerteAnaconda, - CardId.IP + CardId.ThunderDragonlord,CardId.PredaplantVerteAnaconda,CardId.IP }; if (Bot.MonsterZone.GetMatchingCardsCount(card => card.IsCode(materials)) >= 2) { From fe779cefa54b94e4b07d9eb9e14c8b89432cd80e Mon Sep 17 00:00:00 2001 From: Ha <479310608@qq.com> Date: Tue, 29 Nov 2022 16:30:46 +0800 Subject: [PATCH 04/18] fix bot --- Game/AI/Decks/KashtiraExecutor.cs | 67 ++++--- Game/AI/Decks/ThunderDragonExecutor.cs | 240 ++++++++++++++++++++----- 2 files changed, 235 insertions(+), 72 deletions(-) diff --git a/Game/AI/Decks/KashtiraExecutor.cs b/Game/AI/Decks/KashtiraExecutor.cs index 1c85fe72..1e1212fd 100644 --- a/Game/AI/Decks/KashtiraExecutor.cs +++ b/Game/AI/Decks/KashtiraExecutor.cs @@ -60,6 +60,7 @@ public class CardId bool activate_KashtiraTearlaments_1 = false; bool activate_DimensionShifter = false; bool activate_pre_PrimePlanetParaisos = false; + bool activate_pre_PrimePlanetParaisos_2 = false; bool active_KashtiraPapiyas_1 = false; bool active_KashtiraPapiyas_2 = false; bool active_KashtiraBirth = false; @@ -128,7 +129,7 @@ public KashtiraExecutor(GameAI ai, Duel duel) AddExecutor(ExecutorType.Activate, CardId.CupidPitch); AddExecutor(ExecutorType.SpSummon, CardId.BorreloadSavageDragon, BorreloadSavageDragonSummon); AddExecutor(ExecutorType.Activate, CardId.NemesesCorridor, NemesesCorridorEffect); - AddExecutor(ExecutorType.Activate, CardId.MekkKnightCrusadiaAvramax, MekkKnightCrusadiaAvramaxSummon); + AddExecutor(ExecutorType.SpSummon, CardId.MekkKnightCrusadiaAvramax, MekkKnightCrusadiaAvramaxSummon); AddExecutor(ExecutorType.Activate, CardId.MekkKnightCrusadiaAvramax, MekkKnightCrusadiaAvramaxEffect); //link mode AddExecutor(ExecutorType.Activate, CardId.KashtiraRiseheart, KashtiraRiseheartEffect_2); @@ -137,6 +138,7 @@ public KashtiraExecutor(GameAI ai, Duel duel) AddExecutor(ExecutorType.Activate, CardId.KashtiraPapiyas, KashtiraPapiyasEffect_2); AddExecutor(ExecutorType.Activate, CardId.KashtiraBirth, KashtiraBirthEffect_3); AddExecutor(ExecutorType.Summon, CardId.KashtiraRiseheart, KashtiraRiseheartSummon); + AddExecutor(ExecutorType.Summon, CardId.KashtiraTearlaments, DefaultSummon); AddExecutor(ExecutorType.SpellSet, SpellSet); AddExecutor(ExecutorType.Repos, DefaultRepos); } @@ -153,6 +155,7 @@ public override void OnNewTurn() activate_KashtiraScareclaw_1 = false; activate_KashtiraTearlaments_1 = false; activate_KashtiraShangriIra = false; + activate_pre_PrimePlanetParaisos_2 = false; active_KashtiraPapiyas_1 = false; active_KashtiraPapiyas_2 = false; active_KashtiraBirth = false; @@ -335,7 +338,7 @@ public override IList OnSelectCard(IList cards, int min, List nRelease = new List(); foreach (var card in cards) { - if (card == null || card.IsExtraCard() || card.IsFacedown()) continue; + if (card == null || (card.IsExtraCard() && card.Id != CardId.DiablosistheMindHacker) || card.IsFacedown()) continue; if (card.Id == CardId.Token || card.Id == CardId.Token_2) tRelease.Add(card); else nRelease.Add(card); @@ -571,7 +574,7 @@ private List FilterdRepeatIdCards(IList cards) foreach (var card in cards) { if (card == null) continue; - if (temp.Count(_card => _card != null && _card.Id == card.Id) > 0) + if (temp.Count(_card => _card != null && _card.Id == card.Id) > 0 && res.Count(_card=>_card != null && _card.Id == card.Id) <= 0) res.Add(card); else temp.Add(card); @@ -670,14 +673,24 @@ private bool NibiruEffect() private bool CalledbytheGraveEffect() { ClientCard card = Util.GetLastChainCard(); - if (Duel.LastChainPlayer != 0 && card != null && card.Location == CardLocation.Grave - && card.HasType(CardType.Monster)) + if (card == null) return false; + int id = card.Id; + List g_cards = Enemy.GetGraveyardMonsters().Where(g_card => g_card != null && g_card.Id == id).ToList(); + if (Duel.LastChainPlayer != 0 && card != null) { if (Card.Location == CardLocation.Hand) { AI.SelectPlace(SelectSTPlace(Card, true)); } - AI.SelectCard(card); + if (card.Location == CardLocation.Grave && card.HasType(CardType.Monster)) + { + AI.SelectCard(card); + } + else if (g_cards.Count() > 0 && card.HasType(CardType.Monster)) + { + AI.SelectCard(g_cards); + } + else return false; select_CalledbytheGrave = true; return true; } @@ -758,7 +771,7 @@ private bool MechaPhantomBeastAuroradonEffect() List nRelease = new List(); foreach (var card in Bot.GetMonsters()) { - if (card == null|| card.IsExtraCard()|| card.IsFacedown()) continue; + if (card == null || (card.IsExtraCard() && card.Id != CardId.DiablosistheMindHacker) || card.IsFacedown()) continue; if (card.Id == CardId.Token || card.Id == CardId.Token_2) tRelease.Add(card); else nRelease.Add(card); @@ -864,8 +877,8 @@ private bool SpellActivate() } private bool PrimePlanetParaisosEffect() { - if (SpellActivate()) return true; - if (activate_pre_PrimePlanetParaisos) return false; + if (SpellActivate()) { activate_pre_PrimePlanetParaisos_2 = true; return true; } + if (activate_pre_PrimePlanetParaisos_2 || activate_pre_PrimePlanetParaisos) return false; List cards = GetEnemyOnFields().Where(card => card != null && !card.IsShouldNotBeTarget()).ToList(); if (cards == null || cards.Count <= 0) return false; return true; @@ -946,7 +959,7 @@ private bool ActivateLimit(int cardId) if (Bot.MonsterZone.Count() <= 0 && ((Bot.HasInHand(CardId.KashtiraFenrir) && !activate_KashtiraFenrir_1) || (Bot.HasInHand(CardId.KashtiraUnicorn) && !activate_KashtiraUnicorn_1))) return false; - if (Bot.HasInHand(CardId.PrimePlanetParaisos) && !activate_PrimePlanetParaisos) return false; + if (Bot.HasInHand(CardId.PrimePlanetParaisos) && !activate_pre_PrimePlanetParaisos_2) return false; List cards = new List(); List hand_cards = Bot.Hand.GetMatchingCards(card=>card!=null && card.HasSetcode(0x189)).ToList(); List grave_cards = Bot.Graveyard.GetMatchingCards(card => card != null && card.HasSetcode(0x189)).ToList(); @@ -965,7 +978,8 @@ private bool ActivateLimit(int cardId) if (((activate_KashtiraUnicorn_1 || summon_KashtiraUnicorn) && hand_cards.Count(card => card != null && card.Id == CardId.KashtiraUnicorn) > 0) || hand_cards.Count(card => card != null && card.Id == CardId.KashtiraUnicorn) > 1) cardsid.Add(CardId.KashtiraUnicorn); - if (cardId != CardId.KashtiraScareclaw && hand_cards.Count(card => card != null && card.Id == CardId.KashtiraScareclaw) > 0) + if ((cardId != CardId.KashtiraScareclaw && hand_cards.Count(card => card != null && card.Id == CardId.KashtiraScareclaw) > 0) + || (hand_cards.Count(card => card != null && card.Id == CardId.KashtiraScareclaw) > 1)) cardsid.Add(CardId.KashtiraScareclaw); if ((activate_KashtiraRiseheart_2 && hand_cards.Count(card => card != null && card.Id == CardId.KashtiraRiseheart) > 0) || hand_cards.Count(card => card != null && card.Id == CardId.KashtiraRiseheart) > 1) @@ -1046,7 +1060,7 @@ private bool DefaultSummon() { isSummoned = true; if (Card.Id == CardId.KashtiraUnicorn) summon_KashtiraUnicorn = true; - else summon_KashtiraFenrir = true; + else if(Card.Id == CardId.KashtiraFenrir) summon_KashtiraFenrir = true; return true; } return false; @@ -1150,9 +1164,9 @@ private bool SelectEnemyCard(bool faceUp = true, bool isXyz= false) { AI.SelectCard(card);if (isXyz)AI.SelectNextCard(card); return true; } if (GetEnemyOnFields().Count(_card => _card != null && !_card.IsShouldNotBeTarget() && !(faceUp & !_card.IsFaceup()) && !_card.HasType(CardType.Token)) <= 0) return false; ClientCard dcard = GetEnemyOnFields().GetDangerousMonster(true); - if (Duel.Phase >= DuelPhase.Battle || Util.GetBestAttack(Enemy) >= Util.GetBestAttack(Bot) || dcard != null) + if (Duel.Phase >= DuelPhase.BattleStart || Util.GetBestAttack(Enemy) >= Util.GetBestAttack(Bot) || dcard != null) { - if (dcard != null){ AI.SelectCard(dcard); if(isXyz)AI.SelectNextCard(dcard) ; return true; } + if (dcard != null) { AI.SelectCard(dcard); if(isXyz)AI.SelectNextCard(dcard) ; return true; } List cards = GetEnemyOnFields().Where(_card => _card != null && !_card.IsShouldNotBeTarget() && !(!_card.IsFaceup() & faceUp)).ToList(); cards.Sort(CardContainer.CompareCardAttack); cards.Reverse(); @@ -1166,21 +1180,15 @@ private bool SelectEnemyCard(bool faceUp = true, bool isXyz= false) private bool KashtiraFenrirEffect() { if (Card.IsDisabled()) return false; - if (Duel.Phase == DuelPhase.Battle || Duel.CurrentChain.Count > 0) - { - if (Duel.LastChainPlayer == 0 && Util.GetLastChainCard() != null && - Util.GetLastChainCard().Id == CardId.PrimePlanetParaisos) return false; - return SelectEnemyCard(); - } - else + if (ActivateDescription == Util.GetStringId(CardId.KashtiraFenrir, 1)) { IList cardsId = new List(); if ((!Bot.HasInHandOrInSpellZone(CardId.KashtiraBirth) || isSummoned) && !Bot.HasInHand(CardId.KashtiraRiseheart) && (!activate_KashtiraRiseheart_2 && (!activate_KashtiraRiseheart_1 || !isSummoned)) && CheckRemainInDeck(CardId.KashtiraRiseheart) > 0) cardsId.Add(CardId.KashtiraRiseheart); - if(Bot.HasInHandOrInSpellZone(CardId.KashtiraBirth) && !isSummoned && !Bot.HasInHand(CardId.KashtiraUnicorn) && !activate_KashtiraUnicorn_1 && CheckRemainInDeck(CardId.KashtiraUnicorn) > 0) + if (Bot.HasInHandOrInSpellZone(CardId.KashtiraBirth) && !isSummoned && !Bot.HasInHand(CardId.KashtiraUnicorn) && !activate_KashtiraUnicorn_1 && CheckRemainInDeck(CardId.KashtiraUnicorn) > 0) cardsId.Add(CardId.KashtiraUnicorn); - if(!Bot.HasInHand(CardId.KashtiraTearlaments) && !activate_KashtiraTearlaments_1 && CheckRemainInDeck(CardId.KashtiraTearlaments) > 0) + if (!Bot.HasInHand(CardId.KashtiraTearlaments) && !activate_KashtiraTearlaments_1 && CheckRemainInDeck(CardId.KashtiraTearlaments) > 0) cardsId.Add(CardId.KashtiraTearlaments); if (!Bot.HasInHand(CardId.KashtiraScareclaw) && !activate_KashtiraScareclaw_1 && CheckRemainInDeck(CardId.KashtiraScareclaw) > 0) cardsId.Add(CardId.KashtiraScareclaw); @@ -1190,6 +1198,19 @@ private bool KashtiraFenrirEffect() AI.SelectCard(cardsId); return true; } + else + { + if (Duel.LastChainPlayer == 0 && Util.GetLastChainCard() != null && + Util.GetLastChainCard().Id == CardId.PrimePlanetParaisos) return false; + List cards = GetEnemyOnFields().Where(card => card != null && card.IsFaceup()).ToList(); + if (cards.Count > 0) + { + cards.Sort(CardContainer.CompareCardAttack); + cards.Reverse(); + AI.SelectCard(cards); + } + return true; + } } private bool TerraformingEffect() diff --git a/Game/AI/Decks/ThunderDragonExecutor.cs b/Game/AI/Decks/ThunderDragonExecutor.cs index b8709125..7f045b50 100644 --- a/Game/AI/Decks/ThunderDragonExecutor.cs +++ b/Game/AI/Decks/ThunderDragonExecutor.cs @@ -1,7 +1,6 @@ using YGOSharp.OCGWrapper.Enums; using System.Collections.Generic; using System.Linq; -using System; using WindBot; using WindBot.Game; using WindBot.Game.AI; @@ -62,13 +61,12 @@ private enum Select ChaosSpace_2, ThunderDragonColossus, AccesscodeTalker, - DestroyReplace, - ThunderDragonTitan + DestroyReplace }; private const int THUNDER_COUNTD = 18; List selectFlag = new List() { - false,false,false,false,false,false,false,false + false,false,false,false,false,false,false }; List selectAtt = new List() { @@ -274,6 +272,93 @@ public override void OnNewTurn() for (int i = 0; i < selectAtt.Count; i++) selectAtt[i] = false; } + private bool IsAvailableZone(int seq) + { + ClientCard card = Bot.MonsterZone[seq]; + if (seq == 5 && Bot.MonsterZone[6] != null && Bot.MonsterZone[6].Controller == 0) return false; + if (seq == 6 && Bot.MonsterZone[5] != null && Bot.MonsterZone[5].Controller == 0) return false; + if (card == null) return true; + if (card.Controller != 0) return false; + if (card.IsFacedown()) return false; + if (card.IsDisabled()) return true; + if (card.Id == CardId.ThunderDragonColossus + || card.Id == CardId.ThunderDragonTitan + || card.Id == CardId.UnderworldGoddessoftheClosedWorld + || card.Id == CardId.MekkKnightCrusadiaAvramax + || card.Id == CardId.AccesscodeTalker + || (card.Id == CardId.BowoftheGoddess && card.Attack > 800) + || (card.Id == CardId.UnionCarrier && summon_UnionCarrier)) return false; + return true; + } + private bool IsAvailableLinkZone() + { + int zones = 0; + List cards = Bot.GetMonstersInMainZone().Where(card => card != null && card.IsFaceup()).ToList(); + foreach (var card in cards) + { + zones |= card.GetLinkedZones(); + } + ClientCard e_card = Bot.MonsterZone[5]; + if (e_card != null && e_card.IsFaceup() && e_card.HasType(CardType.Link)) + { + if (e_card.Controller == 0) + { + if (e_card.HasLinkMarker(CardLinkMarker.BottomLeft)) + zones |= 1 << 0; + if (e_card.HasLinkMarker(CardLinkMarker.Bottom)) + zones |= 1 << 1; + if (e_card.HasLinkMarker(CardLinkMarker.BottomRight)) + zones |= 1 << 2; + } + if (e_card.Controller == 1) + { + if (e_card.HasLinkMarker(CardLinkMarker.TopLeft)) + zones |= 1 << 2; + if (e_card.HasLinkMarker(CardLinkMarker.Top)) + zones |= 1 << 1; + if (e_card.HasLinkMarker(CardLinkMarker.TopRight)) + zones |= 1 << 0; + } + } + e_card = Bot.MonsterZone[6]; + if (e_card != null && e_card.IsFaceup() && e_card.HasType(CardType.Link)) + { + if (e_card.Controller == 0) + { + if (e_card.HasLinkMarker(CardLinkMarker.BottomLeft)) + zones |= 1 << 2; + if (e_card.HasLinkMarker(CardLinkMarker.Bottom)) + zones |= 1 << 3; + if (e_card.HasLinkMarker(CardLinkMarker.BottomRight)) + zones |= 1 << 4; + } + if (e_card.Controller == 1) + { + if (e_card.HasLinkMarker(CardLinkMarker.TopLeft)) + zones |= 1 << 4; + if (e_card.HasLinkMarker(CardLinkMarker.Top)) + zones |= 1 << 3; + if (e_card.HasLinkMarker(CardLinkMarker.TopRight)) + zones |= 1 << 2; + } + } + zones &= 0x7f; + if ((zones & Zones.z0) > 0 && IsAvailableZone(0)) return true; + if ((zones & Zones.z1) > 0 && IsAvailableZone(1)) return true; + if ((zones & Zones.z2) > 0 && IsAvailableZone(2)) return true; + if ((zones & Zones.z3) > 0 && IsAvailableZone(3)) return true; + if ((zones & Zones.z4) > 0 && IsAvailableZone(4)) return true; + if (IsAvailableZone(5)) return true; + if (IsAvailableZone(6)) return true; + return false; + } + private void ResetFlag() + { + for (int i = 0; i < selectFlag.Count; ++i) + { + selectFlag[i] = false; + } + } public override int OnSelectPlace(int cardId, int player, CardLocation location, int available) { if (player == 0 && location==CardLocation.MonsterZone) @@ -301,11 +386,6 @@ public override int OnSelectPlace(int cardId, int player, CardLocation location, if ((Zones.z0 & available) > 0) return Zones.z0; if ((Zones.z4 & available) > 0) return Zones.z4; } - if ((Bot.HasInMonstersZone(CardId.ThunderDragonTitan, false, false, true) || Bot.HasInMonstersZone(CardId.ThunderDragonColossus, false, false, true)) && Bot.HasInMonstersZone(CardId.CrossSheep, false, false, true)) - { - if ((Zones.z1 & available) > 0) return Zones.z1; - if ((Zones.z3 & available) > 0) return Zones.z3; - } if (place_Link_4) { place_Link_4 = false; @@ -340,14 +420,15 @@ public override IList OnSelectCard(IList cards, int min, } else { - for (int i = 0; i < selectFlag.Count; ++i) - selectFlag[i] = false; + ResetFlag(); return null; } } if (selectFlag[(int)Select.NormalThunderDragon]) { selectFlag[(int)Select.NormalThunderDragon] = false; + //ThunderDragonTitan + if (cards.Any(card => card != null && card.Controller != 0)) return null; if (cards.Count <= 1) return null; if (Bot.HasInHand(CardId.ChaosSpace) && !activate_ChaosSpace_hand) return Util.CheckSelectCount(cards, cards, max, max); @@ -550,6 +631,9 @@ public override IList OnSelectCard(IList cards, int min, List grave_2 = cards.Where(card => card != null && card.Location == CardLocation.Grave && (card.Id == CardId.ThunderDragonroar || card.Id == CardId.ThunderDragondark)).ToList(); if (grave_1.Count > 0) res.AddRange(grave_1); if (grave_2.Count > 0) res.AddRange(grave_2); + List monsters = cards.Where(card => card != null && card.Location == CardLocation.MonsterZone).ToList(); + monsters.Sort(CardContainer.CompareCardAttack); + if (monsters.Count > 0) res.AddRange(monsters); if (res.Count > 0) return Util.CheckSelectCount(res, cards, min, max); return null; } @@ -601,6 +685,10 @@ private bool SpellSet() } private bool BrandedRegainedEffect() { + if (Card.Location == CardLocation.Hand) + { + AI.SelectPlace(SelectSTPlace(Card, true)); + } AI.SelectCard(CardId.BystialDruiswurm, CardId.BystialMagnamhut, CardId.TheBystialLubellion); return true; } @@ -768,7 +856,7 @@ private IList GetAttUsed() { IList attributes = new List(); for (int i = 0; i < selectAtt.Count; ++i) - if (selectAtt[i]) attributes.Add((CardAttribute)(Math.Pow(2, i))); + if (selectAtt[i]) attributes.Add((CardAttribute)(System.Math.Pow(2, i))); if (attributes.Count > 0) return attributes; return null; } @@ -804,6 +892,20 @@ public int CompareCardLink(ClientCard cardA, ClientCard cardB) return 0; return 1; } + private IList CardsIdToClientCards(IList cardsId, IList cardsList, bool uniqueId = true, bool alias = true) + { + if (cardsList?.Count() <= 0 || cardsId?.Count() <= 0) return new List(); + List res = new List(); + foreach (var cardid in cardsId) + { + List cards = cardsList.Where(card => card != null && (card.Id == cardid || ((card.Alias != 0 && cardid == card.Alias) & alias))).ToList(); + if (cards?.Count <= 0) continue; + cards.Sort(CardContainer.CompareCardAttack); + if (uniqueId) res.Add(cards.First()); + else res.AddRange(cards); + } + return res; + } private bool IPEffect() { if (Duel.LastChainPlayer == 0) return false; @@ -813,10 +915,21 @@ private bool IPEffect() CardId.UnionCarrier, CardId.CrossSheep }; - if (Bot.MonsterZone.GetMatchingCardsCount(card => card.IsCode(materials)) >= 1 && Bot.HasInExtra(CardId.MekkKnightCrusadiaAvramax)) + if (Bot.HasInExtra(CardId.MekkKnightCrusadiaAvramax)) { + List m = new List(); + IList pre_m = CardsIdToClientCards(materials, Bot.GetMonsters().Where(card=>card!=null && card.IsFaceup()).ToList()); + if (pre_m?.Count <= 0) return false; + int link_count = 0; + foreach (var card in pre_m) + { + m.Add(card); + link_count += (card.HasType(CardType.Link)) ? card.LinkCount : 1; + if (link_count >= 4) break; + } + if (link_count < 4) return false; AI.SelectCard(CardId.MekkKnightCrusadiaAvramax); - AI.SelectMaterials(materials); + AI.SelectMaterials(m); return true; } else if (Bot.HasInExtra(CardId.KnightmareUnicorn)) @@ -831,24 +944,25 @@ private bool IPEffect() { if (card == null) continue; if (card.Id == CardId.UnionCarrier && summon_UnionCarrier) continue; - if ((GetLinkMark(card.Id) < 3 || card.Id == CardId.BowoftheGoddess && card.Attack <= 800) && card.Id != CardId.ThunderDragonTitan + if ((GetLinkMark(card.Id) < 3 || (card.Id == CardId.BowoftheGoddess && card.Attack <= 800)) && card.Id != CardId.ThunderDragonTitan && card.Id != CardId.ThunderDragonColossus && card.IsFaceup() && materials_2.Count(_card => _card != null && _card.Id == card.Id) <= 0) materials_2.Add(card); } int link_count = 0; materials_2.Sort(CardContainer.CompareCardAttack); materials_2.Sort(CompareCardLink); + materials_2.Reverse(); if (materials_2.Count <= 0) return false; foreach (var card in materials_2) { if (!resMaterials.Contains(card)) { resMaterials.Add(card); - link_count += 1; - if (link_count >= 1) break; + link_count += (card.HasType(CardType.Link)) ? card.LinkCount : 1; + if (link_count >= 3) break; } } - if (link_count >= 1) { AI.SelectCard(CardId.KnightmareUnicorn); AI.SelectMaterials(resMaterials); return true; } + if (link_count >= 3) { AI.SelectCard(CardId.KnightmareUnicorn); AI.SelectMaterials(resMaterials); return true; } } return false; } @@ -859,8 +973,9 @@ private bool AccesscodeTalkerEffect() if (Card.IsDisabled()) return false; if (Bot.Graveyard.Count(card => card != null && card.HasType(CardType.Link)) <= 0) return false; IList attributes = GetAttUsed(); - if (attributes == null || attributes.Count <= 0) { selectFlag[(int)Select.AccesscodeTalker] = true; return true; } + if (attributes == null || attributes.Count <= 0) { ResetFlag(); selectFlag[(int)Select.AccesscodeTalker] = true; return true; } if (Bot.Graveyard.Count(card => card != null && card.HasType(CardType.Link) && !attributes.Contains((CardAttribute)card.Attribute)) <= 0) return false; + ResetFlag(); selectFlag[(int)Select.AccesscodeTalker] = true; return true; } @@ -876,10 +991,24 @@ private bool AccesscodeTalkerEffect() private bool CalledbytheGraveEffect() { ClientCard card = Util.GetLastChainCard(); - if (Duel.LastChainPlayer != 0 && card != null && card.Location == CardLocation.Grave - && card.HasType(CardType.Monster)) + if (card == null) return false; + int id = card.Id; + List g_cards = Enemy.GetGraveyardMonsters().Where(g_card => g_card != null && g_card.Id == id).ToList(); + if (Duel.LastChainPlayer != 0 && card != null) { - AI.SelectCard(card); + if (Card.Location == CardLocation.Hand) + { + AI.SelectPlace(SelectSTPlace(Card, true)); + } + if (card.Location == CardLocation.Grave && card.HasType(CardType.Monster)) + { + AI.SelectCard(card); + } + else if (g_cards.Count() > 0 && card.HasType(CardType.Monster)) + { + AI.SelectCard(g_cards); + } + else return false; return true; } return false; @@ -952,7 +1081,6 @@ private bool ThunderDragonTitanEffect() res.AddRange(mcards); res.AddRange(scards); AI.SelectCard(res); - selectFlag[(int)Select.ThunderDragonTitan] = true; return true; } else @@ -967,7 +1095,7 @@ private bool PredaplantVerteAnacondaEffect() if (ActivateDescription == Util.GetStringId(CardId.PredaplantVerteAnaconda, 1)) { if (CheckRemainInDeck(CardId.ThunderDragonFusion) <= 0) return false; - if (Bot.GetMonstersInMainZone().Count > 4 && Bot.GetMonstersInMainZone().Count(card => card != null && !card.IsExtraCard() && card.HasSetcode(0x11c) && card.HasType(CardType.Monster)) <= 0) return false; + if (Bot.GetMonstersInMainZone().Count > 4 && Bot.GetMonstersInMainZone().Count(card => card != null && !card.IsExtraCard() && card.HasSetcode(0x11c) && card.HasType(CardType.Monster) && card.IsFaceup()) <= 0) return false; List g_card = Bot.Graveyard.ToList(); List b_card = Bot.Banished.ToList(); g_card.AddRange(b_card); @@ -1070,24 +1198,6 @@ private bool ThunderDragonlordEffect() } return false; } - private bool LinkZoneCheck() - { - bool res = false; - foreach (var card in Bot.GetMonstersInMainZone()) - { - if (card == null) continue; - if (card.Id != CardId.ThunderDragonTitan && card.Id != CardId.ThunderDragonColossus && (card.LinkCount < 3 || (card.Id == CardId.BowoftheGoddess && card.Attack <= 800))) - { - if (Util.GetBotAvailZonesFromExtraDeck(card) > 0) - { - res = true; - break; - } - } - } - if (!res) return false; - return true; - } private bool PredaplantVerteAnacondaSummon() { if (CheckRemainInDeck(CardId.ThunderDragonFusion) <= 0) return false; @@ -1104,7 +1214,7 @@ private bool PredaplantVerteAnacondaSummon() if (card.IsCode(CardId.NormalThunderDragon)) ++Lcount; } - if (!LinkZoneCheck()) return false; + if (!IsAvailableLinkZone()) return false; if ((count >= 3 && Bot.HasInExtra(CardId.ThunderDragonTitan)) || (Bot.HasInExtra(CardId.ThunderDragonColossus) && Lcount > 0 && g_card.Count(card => card != null && card.HasRace(CardRace.Thunder)) > 1)) { @@ -1124,6 +1234,7 @@ private bool AllureofDarknessEffect_2() private bool KnightmareUnicornSummon() { if (Bot.Hand.Count <= 0) return false; + if (!IsAvailableLinkZone()) return false; List pre_cards = Enemy.GetMonsters(); pre_cards.AddRange(Enemy.GetSpells()); if (pre_cards.Count(card => card != null && !card.IsShouldNotBeTarget()) <= 0) return false; @@ -1224,6 +1335,7 @@ private bool UnderworldGoddessoftheClosedWorldSummon() } private bool BowoftheGoddessSummon() { + if (!IsAvailableLinkZone()) return false; if (Card.Id == CardId.AccesscodeTalker) { if (Duel.Turn == 0 || Enemy.GetMonsterCount() + Enemy.GetSpellCount() <= 0) return false; @@ -1244,7 +1356,6 @@ private bool BowoftheGoddessSummon() && card.Id != CardId.ThunderDragonColossus && card.IsFaceup() && !card.HasType(CardType.Token)) tempmaterials.Add(card); } - if (!LinkZoneCheck()) return false; int link_count = 0; List materials = new List(); List link_materials = tempmaterials.Where(card => card != null && (card.LinkCount == 3 || card.LinkCount == 2)).ToList(); @@ -1324,6 +1435,7 @@ private bool TheChaosCreatorSummon() } private bool ThunderDragonColossusSummon() { + ResetFlag(); selectFlag[(int)Select.ThunderDragonColossus] = true; place_ThunderDragonColossus = true; return true; @@ -1341,12 +1453,14 @@ private bool ThunderDragonmatrixSet() } private bool IPSummon() { + if (Duel.Turn > 0 && Duel.Phase < DuelPhase.Main2) return false; + if (Bot.GetMonsterCount() <= 2) return false; if (Bot.HasInMonstersZone(CardId.ThunderDragonColossus) && Bot.GetMonsterCount() <= 3) return false; if (!Bot.HasInExtra(CardId.KnightmareUnicorn) && !Bot.HasInExtra(CardId.BowoftheGoddess) && !Bot.HasInExtra(CardId.MekkKnightCrusadiaAvramax) && !Bot.HasInExtra(CardId.AccesscodeTalker) && !Bot.HasInExtra(CardId.UnderworldGoddessoftheClosedWorld)) return false; List cards = Bot.GetMonsters().Where(card => card != null && GetLinkMark(card.Id) < 3 && card.Id != CardId.ThunderDragonTitan && card.Id != CardId.ThunderDragonColossus && !card.HasType(CardType.Link) && card.Attack <= 2500 && card.EquipCards.Count(ecard=> ecard != null && ecard.Id==CardId.DragonBusterDestructionSword && !ecard.IsDisabled())<=0).ToList(); if (cards.Count < 2) return false; - if (!LinkZoneCheck()) return false; + if (!IsAvailableLinkZone()) return false; cards.Sort(CardContainer.CompareCardAttack); List cardsId = new List(); if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.MonsterZone)) @@ -1362,6 +1476,7 @@ private bool IPSummon() } private bool ThunderDragonlordSummon() { + if (Bot.GetMonstersInMainZone().Count > 4 && Bot.GetMonstersInMainZone().Count(card => card != null && card.Level <= 8 && card.HasType(CardType.Tuner) && !card.IsExtraCard() && card.IsFaceup()) <= 0) return false; IList cardsId = new List(); if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Hand) || HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.MonsterZone, true)) @@ -1372,17 +1487,21 @@ private bool ThunderDragonlordSummon() if (HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.Hand) || HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.MonsterZone, true)) cardsId.Add(CardId.ThunderDragonmatrix); - List handCards = Bot.Hand.ToList(); + List handCards = Bot.Hand.Where(card=>card != null).ToList(); handCards.Sort(CardContainer.CompareCardLevel); List monsterCards = Bot.GetMonsters().ToList(); monsterCards.Sort(CardContainer.CompareCardAttack); foreach (var card in handCards) - if(card != null && card.HasRace(CardRace.Thunder) && card.Level <= 8) + { + if (card != null && card.HasRace(CardRace.Thunder) && card.Level <= 8) cardsId.Add(card.Id); + } foreach (var card in monsterCards) + { if (card != null && card.HasRace(CardRace.Thunder) && card.Level <= 8 - && card.Id != CardId.ThunderDragonColossus && card.IsFaceup()) + && card.Id != CardId.ThunderDragonColossus && card.IsFaceup()) cardsId.Add(card.Id); + } if (cardsId.Count <= 0) return false; AI.SelectCard(cardsId); return true; @@ -1445,7 +1564,7 @@ private bool DefaultSummon() { if (Bot.ExtraDeck.Count(card => card != null && card.LinkCount == 2) <= 0) return false; } - if (Card.Id == CardId.ThunderDragonroar || Card.Id == CardId.ThunderDragondark) + if (Card.Id == CardId.ThunderDragonroar || Card.Id == CardId.ThunderDragondark || Card.Id == CardId.NormalThunderDragon) { if (!Bot.HasInExtra(CardId.ThunderDragonColossus) || !handActivated) return false; } @@ -1544,6 +1663,7 @@ private bool BlackDragonCollapserpentSummon() } private bool GoldSarcophagusEffect() { + if (GetRemainingThunderCount() <= 0) return false; if (HasInZoneNoActivate(CardId.ThunderDragonroar, CardLocation.Deck) && Bot.GetMonstersInMainZone().Count < 5) AI.SelectCard(CardId.ThunderDragonroar); else if (HasInZoneNoActivate(CardId.ThunderDragondark, CardLocation.Deck)) @@ -1551,6 +1671,10 @@ private bool GoldSarcophagusEffect() else if (HasInZoneNoActivate(CardId.ThunderDragonmatrix, CardLocation.Deck)) AI.SelectCard(CardId.ThunderDragonmatrix); else AI.SelectCard(CardId.ThunderDragonmatrix); + if (Card.Location == CardLocation.Hand) + { + AI.SelectPlace(SelectSTPlace(Card, true)); + } return true; } private bool UnionCarrierSummon() @@ -1626,6 +1750,7 @@ private bool UnionCarrierSummon_2() && raceThunderCards.Count() < 2 && raceDragonCards.Count() < 2 && raceBeastCards.Count() < 2) return false; if (!LinkCheck(false) || !LinkCheck(true)) return false; + if (!IsAvailableLinkZone()) return false; if (Bot.MonsterZone[6] != null && Bot.MonsterZone[6].Controller == 0 && GetLinkMark(Bot.MonsterZone[6].Id) > 1) return false; int[] materials = new[] { CardId.StrikerDragon,CardId.BatterymanToken,CardId.BatterymanSolar, @@ -1790,6 +1915,7 @@ private bool S_SpSummon() pre_res.Add(mcard); } } + if (res.Count() <= 0) return false; if (pre_res.Count > 0) res.AddRange(pre_res); AI.SelectCard(res); } @@ -1845,6 +1971,7 @@ private bool CrossSheepSummon() if (!isShoudlSummon_1) return false; } + if (!IsAvailableLinkZone()) return false; IList cardsid = GetZoneRepeatCardsId(0, Bot.MonsterZone,true); if (!cardsid.Contains(-1) && Bot.MonsterZone.Count(card => card != null && card.IsFaceup() && !card.IsOriginalCode(CardId.ThunderDragonColossus) && GetLinkMark(card.Id) <= 1) - cardsid.Count() < 2) return false; @@ -2148,6 +2275,7 @@ private bool ThunderDragonFusionEffect() } else { + if (Bot.GetMonstersInMainZone().Count > 4 && Bot.GetMonstersInMainZone().Count(card => card != null && !card.IsExtraCard() && card.HasSetcode(0x11c) && card.HasType(CardType.Monster) && card.IsFaceup()) <= 0) return false; List cards = Bot.Graveyard.ToList(); IList banish = Bot.Banished; cards.AddRange(banish); @@ -2162,6 +2290,10 @@ private bool ThunderDragonFusionEffect() AI.SelectCard(CardId.ThunderDragonColossus, CardId.ThunderDragonTitan); return true; } + if (Card.Location == CardLocation.Hand) + { + AI.SelectPlace(SelectSTPlace(Card, true)); + } return false; } } @@ -2203,8 +2335,13 @@ private bool ChaosSpaceEffect() (card.HasAttribute(CardAttribute.Dark) || card.HasAttribute(CardAttribute.Light)) && !card.IsCode(CardId.ThunderDragonroar) && !card.IsCode(CardId.ThunderDragondark) && !card.IsCode(CardId.ThunderDragonhawk) && !card.IsCode(CardId.NormalThunderDragon))) return false; + ResetFlag(); selectFlag[(int)Select.ChaosSpace_1] = true; activate_ChaosSpace_hand = true; + if (Card.Location == CardLocation.Hand) + { + AI.SelectPlace(SelectSTPlace(Card, true)); + } return true; } return false; @@ -2266,6 +2403,10 @@ private bool AllureofDarknessEffect() cardsid.AddRange(cardsid_2); AI.SelectCard(cardsid); } + if (Card.Location == CardLocation.Hand) + { + AI.SelectPlace(SelectSTPlace(Card, true)); + } return true; } private bool ThunderDragondarkEffect_2() @@ -2351,6 +2492,7 @@ private bool ThunderDragondarkEffect() private bool NormalThunderDragonEffect() { handActivated = true; + ResetFlag(); selectFlag[(int)Select.NormalThunderDragon] = true; return true; } From 6669842aeed4c655714e6f20f408bfa2fde77b79 Mon Sep 17 00:00:00 2001 From: Mercury233 Date: Tue, 29 Nov 2022 20:45:49 +0800 Subject: [PATCH 05/18] fix GalaxyTomahawkSummon --- Game/AI/Decks/KashtiraExecutor.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Game/AI/Decks/KashtiraExecutor.cs b/Game/AI/Decks/KashtiraExecutor.cs index 1e1212fd..be0e7b45 100644 --- a/Game/AI/Decks/KashtiraExecutor.cs +++ b/Game/AI/Decks/KashtiraExecutor.cs @@ -904,7 +904,7 @@ private bool XyzCheck() } private bool GalaxyTomahawkSummon() { - if (CheckRemainInDeck(CardId.MechaPhantom) < 0) return false; + if (CheckRemainInDeck(CardId.MechaPhantom) <= 0) return false; if (Bot.GetMonsterCount() >= 4) return false; if (onlyXyzSummon || activate_DimensionShifter || Bot.HasInMonstersZone(CardId.KashtiraAriseHeart,true,false,true)) return false; if (!Bot.HasInExtra(CardId.MekkKnightCrusadiaAvramax) && !(Bot.HasInExtra(CardId.CupidPitch) || Bot.HasInExtra(CardId.BorreloadSavageDragon))) return false; @@ -1367,4 +1367,4 @@ private bool KashtiraUnicornEffect() } } -} \ No newline at end of file +} From 993716128b8bbeb09d83ae7afa50f1e84782a382 Mon Sep 17 00:00:00 2001 From: Ha <479310608@qq.com> Date: Tue, 7 Feb 2023 18:48:38 +0800 Subject: [PATCH 06/18] add bot Tearlaments --- Decks/AI_Tearlaments.ydk | 59 + Game/AI/Decks/TearlamentsExecutor.cs | 2506 ++++++++++++++++++++++++++ Game/AI/Executor.cs | 4 + Game/GameAI.cs | 1 + 4 files changed, 2570 insertions(+) create mode 100644 Decks/AI_Tearlaments.ydk create mode 100644 Game/AI/Decks/TearlamentsExecutor.cs diff --git a/Decks/AI_Tearlaments.ydk b/Decks/AI_Tearlaments.ydk new file mode 100644 index 00000000..24f66068 --- /dev/null +++ b/Decks/AI_Tearlaments.ydk @@ -0,0 +1,59 @@ +#created by ... +#main +3717252 +77723643 +572850 +572850 +572850 +73956664 +73956664 +25926710 +25926710 +25926710 +99937011 +99937011 +99937011 +62320425 +62320425 +62320425 +63542003 +63542003 +97518132 +37961969 +37961969 +37961969 +74078255 +74078255 +74078255 +92919429 +92919429 +92919429 +17266660 +17266660 +17266660 +21074344 +21074344 +21074344 +40177746 +6767771 +77103950 +77103950 +74920585 +74920585 +#extra +28226490 +84330567 +69946549 +92731385 +92731385 +94977269 +80532587 +84815190 +33158448 +21044178 +98127546 +21887175 +38342335 +27381364 +65741786 +!side diff --git a/Game/AI/Decks/TearlamentsExecutor.cs b/Game/AI/Decks/TearlamentsExecutor.cs new file mode 100644 index 00000000..ed22808d --- /dev/null +++ b/Game/AI/Decks/TearlamentsExecutor.cs @@ -0,0 +1,2506 @@ +using YGOSharp.OCGWrapper; +using YGOSharp.OCGWrapper.Enums; +using System.Collections.Generic; +using System.Linq; +using WindBot; +using WindBot.Game; +using WindBot.Game.AI; +using System; +namespace WindBot.Game.AI.Decks +{ + [Deck("Tearlaments", "AI_Tearlaments")] + class TearlamentsExecutor : DefaultExecutor + { + public class CardId + { + public const int ShaddollBeast = 3717252; + public const int ShaddollDragon = 77723643; + public const int TearlamentsScheiren = 572850; + public const int TearlamentsReinoheart = 73956664; + public const int KelbektheAncientVanguard = 25926710; + public const int MudoratheSwordOracle = 99937011; + public const int AgidotheAncientSentinel = 62320425; + public const int KeldotheSacredProtector = 63542003; + public const int NaelshaddollAriel = 97518132; + public const int TearlamentsHavnis = 37961969; + public const int TearlamentsMerrli = 74078255; + public const int DivineroftheHerald = 92919429; + public const int HeraldofOrangeLight = 17266660; + public const int HeraldofGreenLight = 21074344; + public const int Eva = 40177746; + public const int TearlamentsScream = 6767771; + public const int PrimevalPlanetPerlereino = 77103950; + public const int TearlamentsSulliek = 74920585; + + public const int TearlamentsKaleidoHeart = 28226490; + public const int TearlamentsRulkallos = 84330567; + public const int PredaplantDragostapelia = 69946549; + public const int TearlamentsKitkallos = 92731385; + public const int ElShaddollWinda = 94977269; + public const int ElderEntityNtss = 80532587; + public const int BaronnedeFleur = 84815190; + public const int FADawnDragster = 33158448; + public const int AbyssDweller = 21044178; + public const int UnderworldGoddessoftheClosedWorld = 98127546; + public const int MekkKnightCrusadiaAvramax = 21887175; + public const int KnightmareUnicorn = 38342335; + public const int SprightElf = 27381364; + public const int IP = 65741786; + } + //true ? ygopro lua : edopro lua + bool YGO_SCRIPT = true; + + bool activate_TearlamentsScheiren_1 = false; + bool activate_TearlamentsScheiren_2 = false; + bool activate_TearlamentsReinoheart_1 = false; + bool activate_TearlamentsReinoheart_2 = false; + bool activate_TearlamentsHavnis_1 = false; + bool activate_TearlamentsHavnis_2 = false; + bool activate_TearlamentsMerrli_1 = false; + bool activate_TearlamentsMerrli_2 = false; + + bool activate_TearlamentsKitkallos_1 = false; + bool activate_TearlamentsKitkallos_2 = false; + bool activate_TearlamentsKitkallos_3 = false; + bool TearlamentsKitkallostohand = true; + + bool activate_TearlamentsScream_1 = false; + bool activate_TearlamentsScream_2 = false; + + bool activate_TearlamentsSulliek_1 = false; + bool activate_TearlamentsSulliek_2 = false; + + bool activate_AgidotheAncientSentinel_2 = false; + bool activate_KelbektheAncientVanguard_2 = false; + bool activate_TearlamentsRulkallos_1 = false; + bool activate_TearlamentsRulkallos_2 = false; + bool activate_MudoratheSwordOracle_2 = false; + bool activate_KeldotheSacredProtector_2 = false; + bool activate_PrimevalPlanetPerlereino_1 = false; + bool activate_PrimevalPlanetPerlereino_2 = false; + bool activate_TearlamentsKaleidoHeart_1 = false; + bool activate_TearlamentsKaleidoHeart_2 = false; + bool activate_Eva = false; + bool activate_DivineroftheHerald = false; + bool summoned = false; + bool spsummoned = false; + + bool summon_SprightElf = false; + bool chainlist = false; + + bool pre_activate_PrimevalPlanetPerlereino = false; + + bool select_TearlamentsKitkallos = false; + private enum Flag + { + TearlamentsKitkallos = 0x1, + TearlamentsRulkallos = 0x2, + TearlamentsKaleidoHeart = 0x4, + PredaplantDragostapelia = 0x8, + ElShaddollWinda = 0x10 + } + + List remainCards = new List(); + List fusionExtra = new List(); + List fusionMaterial = new List(); + List on_chaining_cards = new List(); + List mcard_0 = new List() { null, null, null }; + List mcard_1 = new List() { null, null, null }; + List mcard_2 = new List() { null, null, null }; + List mcard_3 = new List() { null, null, null }; + List ran_fusion_mode_0 = new List() { false, false, false }; + List ran_fusion_mode_1 = new List() { false, false, false }; + List ran_fusion_mode_2 = new List() { false, false, false }; + List ran_fusion_mode_3 = new List() { false, false, false }; + + ClientCard _PredaplantDragostapelia = null; + ClientCard chain_PredaplantDragostapelia = null; + ClientCard chain_TearlamentsSulliek = null; + ClientCard tgcard = null; + List e_PredaplantDragostapelia_cards = new List(); + + ClientCard link_card = null; + List no_link_ids = new List() { CardId.TearlamentsRulkallos, CardId.BaronnedeFleur, CardId.MekkKnightCrusadiaAvramax, CardId.AbyssDweller, CardId.PredaplantDragostapelia, CardId.UnderworldGoddessoftheClosedWorld, CardId.FADawnDragster, CardId.TearlamentsKaleidoHeart }; + + List key_send_to_deck_ids = new List() + { + CardId.TearlamentsMerrli,CardId.TearlamentsScheiren,CardId.TearlamentsHavnis,CardId.TearlamentsReinoheart,8736823,29596581, + 83107873,56713174,20318029 + }; + List all_key_card_ids = new List() + { + 55623480,86682165,60461804,10000090,28651380,97565997,87074380,80208158,95440946,93880808,16261341, + 91749600,26866984,5141117,50383626,30576089,22586618,7445307,73478096,18558867, + 51617185,60880471,34172284,88774734,25451383,71197066,24226942,78077209,98787535, + 29601381,83203672,62383431,89552119,92418590,31042659,83303851,17502671,11366199, + 46668237,64382839,46290741,25607552,1295442,5560911,56174248,7407724,1855886,27198001, + 11074235,48372950,94142993,81866673,34966096,42006475,99733359,20799347,71985676, + 55787576,43266605,3422200,97962972,20773176,84976088,55151012,80208323,98881700,56677752, + 24506253,6180710,20056760,44928016,45702014,60316373,37683547,62962630,20065259,8571567, + 21351206,35998832,26077387,37351133,94730900,83682209,38695361,59707204,12469386,1833916, + 98806751,82496097,27182739,28762303,74578072,30303854,5370235,50546208,44818,67436768,29169993, + 10286023,19667590,47897376,74891384,66752837,43534808,56815977,81344070,59724555,93708824, + 43411796,7084129,51993760,87988305,23619206,86962245,48144778,30068120,9047460,25538345,69764158, + 70645913,55702233,10928224,79531196,23893227,57421866,94693857,78080961,9742784,59185998, + 93169863,46576366,2830693,68543408,50820852,2511,8972398,61488417,71734607,63180841,51447164, + 74586817,28403802,91575236,286392,97584719,60195675,24701066,20665527,73345237,23732205,146746, + 72218246,41999284,60303245 + }; + List key_no_send_to_deck_ids = new List() + { + CardId.TearlamentsRulkallos,50588353,44097050 + }; + List key_remove_ids = new List() + { + CardId.TearlamentsMerrli,CardId.TearlamentsScheiren,CardId.TearlamentsHavnis,CardId.TearlamentsReinoheart,15291624, + 11738489,44097050,15291624,63288573,70369116,83152482,72329844,24094258,86066372, + 74997493,85289965,21887175,11738489, 98127546,50588353,10389142,90590303,27548199, + }; + List key_no_remove_ids = new List() + { + 18743376,72355272,81555617,45960523,29596581,56713174,80280944,61103515,28297833, + 90020780,8736823 + }; + List bot_send_to_deck_ids = new List(); + public TearlamentsExecutor(GameAI ai, Duel duel) + : base(ai, duel) + { + AddExecutor(ExecutorType.Activate, CardId.TearlamentsScream, TearlamentsScreamEffect_1); + AddExecutor(ExecutorType.Activate, CardId.AbyssDweller, () => { return Duel.Player != 0; }); + AddExecutor(ExecutorType.Activate, CardId.TearlamentsKaleidoHeart, TearlamentsKaleidoHeartEffect); + AddExecutor(ExecutorType.Activate, CardId.UnderworldGoddessoftheClosedWorld); + AddExecutor(ExecutorType.SpSummon, CardId.UnderworldGoddessoftheClosedWorld, UnderworldGoddessoftheClosedWorldSummon); + AddExecutor(ExecutorType.SpSummon, CardId.FADawnDragster, FADawnDragsterSummon); + AddExecutor(ExecutorType.SpSummon, CardId.SprightElf, SprightElfSummon_2); + AddExecutor(ExecutorType.SpSummon, CardId.IP, IPSummon_2); + AddExecutor(ExecutorType.Activate, CardId.BaronnedeFleur, BaronnedeFleurEffect); + AddExecutor(ExecutorType.Activate, CardId.ElderEntityNtss, ElderEntityNtssEffect); + AddExecutor(ExecutorType.Activate, CardId.PredaplantDragostapelia, PredaplantDragostapeliaEffect); + AddExecutor(ExecutorType.Activate, CardId.HeraldofOrangeLight); + AddExecutor(ExecutorType.Activate, CardId.HeraldofGreenLight); + AddExecutor(ExecutorType.Activate, CardId.TearlamentsRulkallos, TearlamentsRulkallosEffect); + AddExecutor(ExecutorType.Activate, CardId.FADawnDragster); + AddExecutor(ExecutorType.Activate, CardId.TearlamentsScheiren, TearlamentsScheirenEffect); + AddExecutor(ExecutorType.Activate, CardId.TearlamentsKitkallos, TearlamentsKitkallosEffect); + AddExecutor(ExecutorType.Activate, CardId.SprightElf, SprightElfEffect); + AddExecutor(ExecutorType.Activate, CardId.PrimevalPlanetPerlereino, PrimevalPlanetPerlereinoEffect); + AddExecutor(ExecutorType.SpSummon, CardId.UnderworldGoddessoftheClosedWorld, UnderworldGoddessoftheClosedWorldSummon_3); + AddExecutor(ExecutorType.Activate, CardId.MudoratheSwordOracle, MudoratheSwordOracleEffect); + AddExecutor(ExecutorType.Activate, CardId.DivineroftheHerald, DivineroftheHeraldEffect); + AddExecutor(ExecutorType.Activate, CardId.TearlamentsMerrli, TearlamentsMerrliEffect); + AddExecutor(ExecutorType.Activate, CardId.TearlamentsHavnis, TearlamentsHavnisEffect); + AddExecutor(ExecutorType.Activate, CardId.TearlamentsReinoheart, TearlamentsReinoheartEffect); + AddExecutor(ExecutorType.Summon, CardId.DivineroftheHerald, DivineroftheHeraldSummon); + AddExecutor(ExecutorType.Summon, CardId.TearlamentsMerrli, () => { summoned = true; return true; }); + AddExecutor(ExecutorType.Summon, CardId.TearlamentsReinoheart, () => { summoned = true; return true; }); + AddExecutor(ExecutorType.Activate, CardId.AgidotheAncientSentinel, AgidotheAncientSentinelEffect); + AddExecutor(ExecutorType.Activate, CardId.KelbektheAncientVanguard, KelbektheAncientVanguardEffect); + AddExecutor(ExecutorType.Activate, CardId.NaelshaddollAriel, NaelshaddollArielEffect); + AddExecutor(ExecutorType.Activate, CardId.ShaddollDragon, ShaddollDragonEffect); + AddExecutor(ExecutorType.Activate, CardId.Eva, EvaEffect); + AddExecutor(ExecutorType.Activate, CardId.TearlamentsSulliek, TearlamentsSulliekEffect); + AddExecutor(ExecutorType.Activate, CardId.TearlamentsScream); + AddExecutor(ExecutorType.Activate, CardId.KeldotheSacredProtector, MudoratheSwordOracleEffect); + AddExecutor(ExecutorType.Activate, CardId.ShaddollBeast, () => { return Bot.Deck.Count > 0; }); + AddExecutor(ExecutorType.SpSummon, CardId.SprightElf, SprightElfSummon); + AddExecutor(ExecutorType.SpSummon, CardId.BaronnedeFleur, BaronnedeFleurSummon); + AddExecutor(ExecutorType.SpSummon, CardId.FADawnDragster, () => { SetSpSummon(); return true; }); + AddExecutor(ExecutorType.SpSummon, CardId.AbyssDweller, AbyssDwellerSummon); + AddExecutor(ExecutorType.SpSummon, CardId.IP, IPEffect); + AddExecutor(ExecutorType.SpSummon, CardId.IP, IPSummon); + AddExecutor(ExecutorType.SpSummon, CardId.UnderworldGoddessoftheClosedWorld, UnderworldGoddessoftheClosedWorldSummon_2); + AddExecutor(ExecutorType.Activate, CardId.KnightmareUnicorn, KnightmareUnicornEffect); + AddExecutor(ExecutorType.SpSummon, CardId.KnightmareUnicorn, KnightmareUnicornSummon); + AddExecutor(ExecutorType.Activate, CardId.MekkKnightCrusadiaAvramax, MekkKnightCrusadiaAvramaxEffect); + AddExecutor(ExecutorType.SpSummon, CardId.MekkKnightCrusadiaAvramax, MekkKnightCrusadiaAvramaxSummon); + AddExecutor(ExecutorType.SpSummon, CardId.BaronnedeFleur, BaronnedeFleurSummon_2); + AddExecutor(ExecutorType.Repos, DefaultMonsterRepos); + AddExecutor(ExecutorType.SpellSet, SpellSet); + } + public override void OnNewTurn() + { + List cards = Bot.ExtraDeck.Where(card => card != null && card.Id == CardId.PredaplantDragostapelia).ToList(); + if (_PredaplantDragostapelia == null && cards.Count > 0) _PredaplantDragostapelia = cards.FirstOrDefault(); + if (!key_send_to_deck_ids.Contains(all_key_card_ids[0])) key_send_to_deck_ids.AddRange(all_key_card_ids); + if (!key_remove_ids.Contains(all_key_card_ids[0])) key_remove_ids.AddRange(all_key_card_ids); + if (_PredaplantDragostapelia != null && (_PredaplantDragostapelia.Location != CardLocation.MonsterZone || _PredaplantDragostapelia.IsFacedown())) + e_PredaplantDragostapelia_cards.Clear(); + List temp = new List(e_PredaplantDragostapelia_cards); + foreach (var card in temp) + { + if (card == null || card.Location != CardLocation.MonsterZone || card.IsFacedown()) e_PredaplantDragostapelia_cards.Remove(card); + } + activate_TearlamentsScheiren_1 = false; + activate_TearlamentsScheiren_2 = false; + activate_TearlamentsReinoheart_1 = false; + activate_TearlamentsReinoheart_2 = false; + activate_TearlamentsHavnis_1 = false; + activate_TearlamentsHavnis_2 = false; + activate_TearlamentsMerrli_1 = false; + activate_TearlamentsMerrli_2 = false; + activate_PrimevalPlanetPerlereino_1 = false; + activate_PrimevalPlanetPerlereino_2 = false; + + activate_TearlamentsKitkallos_1 = false; + activate_TearlamentsKitkallos_2 = false; + activate_TearlamentsKitkallos_3 = false; + activate_TearlamentsScream_1 = false; + activate_TearlamentsScream_2 = false; + activate_TearlamentsSulliek_1 = false; + activate_TearlamentsSulliek_2 = false; + activate_TearlamentsRulkallos_1 = false; + activate_TearlamentsKaleidoHeart_1 = false; + activate_TearlamentsKaleidoHeart_2 = false; + activate_AgidotheAncientSentinel_2 = false; + activate_KelbektheAncientVanguard_2 = false; + activate_Eva = false; + activate_DivineroftheHerald = false; + summoned = false; + spsummoned = false; + summon_SprightElf = false; + } + private List GetZoneCards(CardLocation loc, ClientField player) + { + List res = new List(); + List temp = new List(); + if ((loc & CardLocation.Hand) > 0) { temp = player.Hand.Where(card => card != null).ToList(); if (temp.Count() > 0) res.AddRange(temp); } + if ((loc & CardLocation.MonsterZone) > 0) { temp = player.GetMonsters(); if (temp.Count() > 0) res.AddRange(temp); } + if ((loc & CardLocation.SpellZone) > 0) { temp = player.GetSpells(); if (temp.Count() > 0) res.AddRange(temp); } + if ((loc & CardLocation.Grave) > 0) { temp = player.Graveyard.Where(card => card != null).ToList(); if (temp.Count() > 0) res.AddRange(temp); } + if ((loc & CardLocation.Removed) > 0) { temp = player.Banished.Where(card => card != null).ToList(); if (temp.Count() > 0) res.AddRange(temp); } + if ((loc & CardLocation.Extra) > 0) { temp = player.ExtraDeck.Where(card => card != null).ToList(); if (temp.Count() > 0) res.AddRange(temp); } + return res; + } + private IList CardsIdToClientCards(IList cardsId, IList cardsList, bool uniqueId = true, bool alias = true) + { + if (cardsList?.Count() <= 0 || cardsId?.Count() <= 0) return new List(); + List res = new List(); + foreach (var cardid in cardsId) + { + List cards = cardsList.Where(card => card != null && (card.Id == cardid || ((card.Alias != 0 && cardid == card.Alias) & alias))).ToList(); + if (cards?.Count <= 0) continue; + cards.Sort(CardContainer.CompareCardAttack); + if (uniqueId) res.Add(cards.First()); + else res.AddRange(cards); + } + res = res.Distinct().ToList(); + return res; + } + private List GetKeyFusionCard(int key) + { + int id = 0; + if (Duel.Player == 0) + { + switch (key) + { + case 0: + case 2: id = CardId.TearlamentsKitkallos; break; + case 1: id = CardId.TearlamentsRulkallos; break; + case 3: id = CardId.PredaplantDragostapelia; break; + case 4: id = CardId.TearlamentsKaleidoHeart; break; + case 5: id = CardId.PredaplantDragostapelia; break; + default: break; + } + } + else + { + switch (key) + { + case 0: + case 2: id = CardId.ElShaddollWinda; break; + case 1: + case 4: id = CardId.TearlamentsKitkallos; break; + case 3: id = CardId.TearlamentsRulkallos; break; + case 5: id = CardId.TearlamentsKaleidoHeart; break; + case 6: id = CardId.PredaplantDragostapelia; break; + default: break; + } + } + List res = new List(); + int index = -1; + for (int i = 0; i < fusionExtra.Count; ++i) + { + ClientCard card = fusionExtra[i]; + if (card == null) continue; + if (card.Id == id) + { + index = i; + res.Add(card); + break; + } + } + if (index > -1 && index < fusionExtra.Count) fusionExtra.RemoveAt(index); + return res; + } + private bool CheckFusion(int listindex, int id) + { + int key = -1; + if (Duel.Player == 0) + { + if (fusionExtra.Count > 0) + { + bool flag_4 = fusionExtra.Count(card => card != null && card.Id == CardId.PredaplantDragostapelia) > 0 && Bot.HasInMonstersZone(CardId.ElShaddollWinda, true, false, true); + bool flag_1 = ((Duel.Phase < DuelPhase.End && (!activate_TearlamentsKitkallos_1 || !activate_TearlamentsKitkallos_2)) || (Duel.Phase == DuelPhase.End && !activate_TearlamentsKitkallos_1 && !activate_TearlamentsKitkallos_2)) && fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsKitkallos) > 0; + bool flag_2 = fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsRulkallos) > 0 && (Bot.HasInGraveyard(CardId.TearlamentsKitkallos) || Bot.GetMonsters().Count(card => card != null && card.Id == CardId.TearlamentsKitkallos) > 1); + bool flag_5 = fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsKaleidoHeart) > 0 && !activate_TearlamentsKaleidoHeart_1 && GetZoneCards(CardLocation.Onfield, Enemy).Count(card => card != null && !card.IsShouldNotBeTarget()) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.TearlamentsKaleidoHeart) + && (!Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) || (Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) && activate_PrimevalPlanetPerlereino_2)); + bool flag_6 = fusionExtra.Count(card => card != null && card.Id == CardId.PredaplantDragostapelia) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.PredaplantDragostapelia) && Enemy.GetMonsters().Any(card => card != null && card.HasType(CardType.Effect) && !card.IsDisabled() && card.IsFaceup() && !card.IsShouldNotBeTarget()); + bool flag_3 = fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsKitkallos) > 0; + if (flag_4) key = 3; + else if (flag_1) key = 0; + else if (flag_2) key = 1; + else if (flag_5) key = 4; + else if (flag_6) key = 5; + else if (flag_3) key = 2; + if (key > -1) + { + List fusionMaterialTemp = new List(fusionMaterial); + fusionMaterialTemp.Remove(Card); + switch (key) + { + case 0: + case 2: + fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && (card.HasRace(CardRace.Aqua) || (card.HasType(CardType.Monster) && (YGO_SCRIPT ? card.HasSetcode(0x181) : card.HasSetcode(0x182))))).ToList(); + break; + case 1: + fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && card.Id == CardId.TearlamentsKitkallos).ToList(); + break; + case 3: + fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && card.Id == CardId.ElShaddollWinda).ToList(); + break; + case 4: + fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && card.HasType(CardType.Monster) && card.HasSetcode(YGO_SCRIPT ? 0x181 : 0x182)).ToList(); + break; + case 5: + fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && (card.Id != CardId.TearlamentsRulkallos || card.IsDisabled()) && card.HasType(CardType.Fusion)).ToList(); + break; + default: + return false; + } + fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && (card.HasRace(CardRace.Aqua) || (card.HasType(CardType.Monster) && (YGO_SCRIPT ? card.HasSetcode(0x181) : card.HasSetcode(0x182))))).ToList(); + int chaining_key_count = on_chaining_cards.Count(card => card != null && (card.Id == CardId.AgidotheAncientSentinel || card.Id == CardId.KelbektheAncientVanguard)); + int chaining_key_count_2 = on_chaining_cards.Count(card => card != null && card.Id == CardId.TearlamentsSulliek); + List current_chain_cards = new List(Duel.CurrentChain); + IList current_chain_key_cards = new List(); + foreach (var card in current_chain_cards) + { + if (card == null || card.Controller == 1) continue; + if ((card.Id == CardId.TearlamentsMerrli && !HasInList(current_chain_key_cards, CardId.TearlamentsMerrli)) + || (card.Id == CardId.TearlamentsHavnis && !HasInList(current_chain_key_cards, CardId.TearlamentsHavnis) + || (card.Id == CardId.TearlamentsScheiren && !HasInList(current_chain_key_cards, CardId.TearlamentsScheiren)))) + current_chain_key_cards.Add(card); + } + if ((fusionMaterialTemp.Count <= 0 && chaining_key_count <= 0 && chaining_key_count_2 <= 0) || current_chain_key_cards.Count() >= 2) + { + if (!remainCards.Contains(Card)) remainCards.Add(Card); + return false; + } + switch (id) + { + case CardId.TearlamentsScheiren: activate_TearlamentsScheiren_2 = true; break; + case CardId.TearlamentsHavnis: activate_TearlamentsHavnis_2 = true; break; + case CardId.TearlamentsMerrli: activate_TearlamentsMerrli_2 = true; break; + default: break; + } + if (chaining_key_count > 0 || chaining_key_count_2 > 0) + { + ran_fusion_mode_0[listindex] = true; + ran_fusion_mode_1[listindex] = true; + ran_fusion_mode_2[listindex] = true; + return true; + } + fusionMaterialTemp.Sort(CardContainer.CompareCardAttack); + fusionMaterialTemp = GetDefaultMaterial(fusionMaterialTemp); + List res = GetKeyFusionCard(key); + mcard_0[listindex] = res.ElementAtOrDefault(0); + mcard_1[listindex] = Card; + mcard_2[listindex] = fusionMaterialTemp.ElementAtOrDefault(0); + if (res.Any(card => card != null && card.Id == CardId.TearlamentsKaleidoHeart)) + { + if (fusionMaterialTemp.Count <= 1) + { + mcard_0[listindex] = null; + mcard_1[listindex] = null; + mcard_2[listindex] = null; + ran_fusion_mode_0[listindex] = true; + ran_fusion_mode_1[listindex] = true; + ran_fusion_mode_2[listindex] = true; + return true; + } + if (mcard_2[listindex] != null && mcard_2[listindex].Id == CardId.TearlamentsReinoheart) + { + mcard_3[listindex] = fusionMaterialTemp.ElementAtOrDefault(1); + } + else + { + List temp = fusionMaterialTemp.Where(card => card != null && card.Id == CardId.TearlamentsReinoheart).ToList(); + if (temp.Count <= 0) + { + mcard_0[listindex] = null; + mcard_1[listindex] = null; + mcard_2[listindex] = null; + ran_fusion_mode_0[listindex] = true; + ran_fusion_mode_1[listindex] = true; + ran_fusion_mode_2[listindex] = true; + return true; + } + mcard_3[listindex] = temp.ElementAtOrDefault(0); + } + } + if (mcard_1[listindex] != null) fusionMaterial.Remove(mcard_1[listindex]); + if (mcard_2[listindex] != null) fusionMaterial.Remove(mcard_2[listindex]); + if (mcard_3[listindex] != null) fusionMaterial.Remove(mcard_3[listindex]); + return true; + } + } + return false; + } + else + { + if (fusionExtra.Count > 0) + { + bool flag_1 = (fusionExtra.Count(card => card != null && card.Id == CardId.ElShaddollWinda) > 0 + && (fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsKitkallos) <= 0 || + activate_TearlamentsKitkallos_1 || Bot.GetMonstersInMainZone().Count >= 4) && Bot.GetGraveyardMonsters().Any(card => card != null && card.HasSetcode(0x9d)) + && Card.HasAttribute(CardAttribute.Dark)); + bool flag_2 = fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsKitkallos) > 0 && !activate_TearlamentsKitkallos_1; + bool flag_3 = fusionExtra.Count(card => card != null && card.Id == CardId.ElShaddollWinda) > 0 && Bot.GetGraveyardMonsters().Any(card => card != null && card.HasSetcode(0x9d)) + && Card.HasAttribute(CardAttribute.Dark); + bool flag_4 = fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsRulkallos) > 0 && (Bot.HasInGraveyard(CardId.TearlamentsKitkallos) || Bot.HasInMonstersZone(CardId.TearlamentsKitkallos, false, false, true)); + bool flag_6 = fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsKaleidoHeart) > 0 && !activate_TearlamentsKaleidoHeart_1 && GetZoneCards(CardLocation.Onfield, Enemy).Count(card => card != null && !card.IsShouldNotBeTarget()) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.TearlamentsKaleidoHeart) + && (!Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) || (Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) && activate_PrimevalPlanetPerlereino_2)); + bool flag_7 = fusionExtra.Count(card => card != null && card.Id == CardId.PredaplantDragostapelia) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.PredaplantDragostapelia) && Enemy.GetMonsters().Any(card => card != null && card.HasType(CardType.Effect) && !card.IsDisabled() && card.IsFaceup() && !card.IsShouldNotBeTarget()); + bool flag_5 = fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsKitkallos) > 0; + if (flag_1) key = 0; + else if (flag_2) key = 1; + else if (flag_3) key = 2; + else if (flag_4) key = 3; + else if (flag_6) key = 5; + else if (flag_7) key = 6; + else if (flag_5) key = 4; + if (key > -1) + { + List fusionMaterialTemp = new List(fusionMaterial); + fusionMaterialTemp.Remove(Card); + switch (key) + { + case 0: + case 2: + fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && (card.HasType(CardType.Monster) && card.HasSetcode(0x9d))).ToList(); + break; + case 1: + case 4: + fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && (card.HasRace(CardRace.Aqua) || (card.HasType(CardType.Monster) && (YGO_SCRIPT ? card.HasSetcode(0x181) : card.HasSetcode(0x182))))).ToList(); + break; + case 3: + fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && card.Id == CardId.TearlamentsKitkallos).ToList(); + break; + case 5: + fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && card.HasType(CardType.Monster) && card.HasSetcode(YGO_SCRIPT ? 0x181 : 0x182)).ToList(); + break; + case 6: + fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && (card.Id != CardId.TearlamentsRulkallos || card.IsDisabled()) && card.HasType(CardType.Fusion)).ToList(); + break; + default: + return false; + } + int chaining_key_count = on_chaining_cards.Count(card => card != null && (card.Id == CardId.AgidotheAncientSentinel || card.Id == CardId.KelbektheAncientVanguard)); + int chaining_key_count_2 = on_chaining_cards.Count(card => card != null && card.Id == CardId.TearlamentsSulliek); + if (fusionMaterialTemp.Count <= 0 && chaining_key_count <= 0 && chaining_key_count_2 <= 0) + { + if (!remainCards.Contains(Card)) remainCards.Add(Card); + return false; + } + switch (id) + { + case CardId.TearlamentsScheiren: activate_TearlamentsScheiren_2 = true; break; + case CardId.TearlamentsHavnis: activate_TearlamentsHavnis_2 = true; break; + case CardId.TearlamentsMerrli: activate_TearlamentsMerrli_2 = true; break; + default: break; + } + if (chaining_key_count > 0 || chaining_key_count_2 > 0) + { + ran_fusion_mode_0[listindex] = true; + ran_fusion_mode_1[listindex] = true; + ran_fusion_mode_2[listindex] = true; + return true; + } + fusionMaterialTemp.Sort(CardContainer.CompareCardAttack); + fusionMaterialTemp = GetDefaultMaterial(fusionMaterialTemp); + List res = GetKeyFusionCard(key); + mcard_0[listindex] = res.ElementAtOrDefault(0); + mcard_1[listindex] = Card; + mcard_2[listindex] = fusionMaterialTemp.ElementAtOrDefault(0); + if (res.Any(card => card != null && card.Id == CardId.TearlamentsKaleidoHeart)) + { + if (fusionMaterialTemp.Count <= 1) + { + mcard_0[listindex] = null; + mcard_1[listindex] = null; + mcard_2[listindex] = null; + ran_fusion_mode_0[listindex] = true; + ran_fusion_mode_1[listindex] = true; + ran_fusion_mode_2[listindex] = true; + return true; + } + if (mcard_2[listindex] != null && mcard_2[listindex].Id == CardId.TearlamentsReinoheart) + { + mcard_3[listindex] = fusionMaterialTemp.ElementAtOrDefault(1); + } + else + { + List temp = fusionMaterialTemp.Where(card => card != null && card.Id == CardId.TearlamentsReinoheart).ToList(); + if (temp.Count <= 0) + { + mcard_0[listindex] = null; + mcard_1[listindex] = null; + mcard_2[listindex] = null; + ran_fusion_mode_0[listindex] = true; + ran_fusion_mode_1[listindex] = true; + ran_fusion_mode_2[listindex] = true; + return true; + } + mcard_3[listindex] = temp.ElementAtOrDefault(0); + } + } + if (mcard_1[listindex] != null) fusionMaterial.Remove(mcard_1[listindex]); + if (mcard_2[listindex] != null) fusionMaterial.Remove(mcard_2[listindex]); + if (mcard_3[listindex] != null) fusionMaterial.Remove(mcard_3[listindex]); + if (listindex > 0 && mcard_0[0] != null && mcard_0[listindex] != null && mcard_0[listindex].Id == CardId.ElShaddollWinda) + { + ClientCard temp = mcard_0[0]; + mcard_0[0] = mcard_0[listindex]; + mcard_0[listindex] = temp; + + } + return true; + + } + } + return false; + } + } + private bool FusionEffect(int id) + { + if (!chainlist) + { + chainlist = true; + fusionExtra = Bot.ExtraDeck.Where(fcard => fcard != null).ToList(); + fusionMaterial = GetZoneCards(CardLocation.MonsterZone, Bot).Where(mcard => mcard != null && mcard.IsFaceup()).ToList(); + fusionMaterial.AddRange(GetZoneCards(CardLocation.Hand | CardLocation.Grave, Bot)); + + } + int index = 0; + if (id == CardId.TearlamentsScheiren) index = 0; + else if (id == CardId.TearlamentsHavnis) index = 1; + else if (id == CardId.TearlamentsMerrli) index = 2; + if (!CheckFusion(index, id)) return false; + SetSpSummon(); + return true; + } + public override CardPosition OnSelectPosition(int cardId, IList positions) + { + NamedCard card = NamedCard.Get(cardId); + if (Duel.Turn > 1 && Enemy.GetMonsterCount() <= 0 && (card.Attack > 0 || cardId == CardId.FADawnDragster)) + { + return CardPosition.FaceUpAttack; + } + else + { + if (card.Attack <= 1000) return CardPosition.FaceUpDefence; + } + return base.OnSelectPosition(cardId, positions); + } + public override int OnSelectPlace(int cardId, int player, CardLocation location, int available) + { + if (player == 0 && location == CardLocation.MonsterZone) + { + if (cardId == CardId.SprightElf) + { + if ((Zones.z5 & available) > 0) return Zones.z5; + if ((Zones.z6 & available) > 0) return Zones.z6; + } + if (cardId == CardId.TearlamentsRulkallos && Bot.HasInExtra(CardId.SprightElf)) + { + if ((Zones.z2 & available) > 0) return Zones.z2; + if ((Zones.z0 & available) > 0) return Zones.z0; + } + ClientCard card = Bot.MonsterZone[5]; + if (card != null && card.Id == CardId.SprightElf) + { + if ((Zones.z0 & available) > 0) return Zones.z0; + if ((Zones.z2 & available) > 0) return Zones.z2; + } + card = Bot.MonsterZone[6]; + if (card != null && card.Id == CardId.SprightElf) + { + if ((Zones.z4 & available) > 0) return Zones.z4; + if ((Zones.z2 & available) > 0) return Zones.z2; + + } + + } + if (player == 0 && location == CardLocation.SpellZone && location != CardLocation.FieldZone) + { + List keys = new List() { 0, 1, 2, 3, 4, 5 }; + while (keys.Count > 0) + { + int index = Program.Rand.Next(keys.Count); + int key = keys[index]; + int zone = 1 << key; + if ((zone & available) > 0) return zone; + keys.Remove(key); + } + + } + return base.OnSelectPlace(cardId, player, location, available); + } + public override int OnSelectOption(IList options) + { + if (options.Count == 2 && (YGO_SCRIPT ? options.Contains(1190) : options.Contains(573))) + { + return TearlamentsKitkallostohand ? 0 : 1; + } + return base.OnSelectOption(options); + } + public override bool OnSelectYesNo(int desc) + { + if (desc == 1233663200) pre_activate_PrimevalPlanetPerlereino = true; + return base.OnSelectYesNo(desc); + } + public override void OnSelectChain(IList cards) + { + if (on_chaining_cards.Count <= 0 && cards.Count > 0) + { + on_chaining_cards = new List(cards); + } + base.OnSelectChain(cards); + } + public override void OnChaining(int player, ClientCard card) + { + if (!chainlist) + { + chainlist = true; + remainCards.Clear(); + fusionExtra = Bot.ExtraDeck.Where(fcard => fcard != null).ToList(); + fusionMaterial = GetZoneCards(CardLocation.MonsterZone, Bot).Where(mcard => mcard != null && mcard.IsFaceup()).ToList(); + fusionMaterial.AddRange(GetZoneCards(CardLocation.Hand | CardLocation.Grave, Bot)); + + } + base.OnChaining(player, card); + } + public override void OnChainEnd() + { + remainCards.Clear(); + fusionExtra.Clear(); + fusionMaterial.Clear(); + on_chaining_cards.Clear(); + tgcard = null; + for (int i = 0; i < mcard_0.Count; ++i) mcard_0[i] = null; + for (int i = 0; i < mcard_1.Count; ++i) mcard_1[i] = null; + for (int i = 0; i < mcard_2.Count; ++i) mcard_2[i] = null; + for (int i = 0; i < mcard_3.Count; ++i) mcard_3[i] = null; + for (int i = 0; i < ran_fusion_mode_0.Count; ++i) ran_fusion_mode_0[i] = false; + for (int i = 0; i < ran_fusion_mode_1.Count; ++i) ran_fusion_mode_1[i] = false; + for (int i = 0; i < ran_fusion_mode_2.Count; ++i) ran_fusion_mode_2[i] = false; + chainlist = false; + base.OnChainEnd(); + } + private bool IsAvailableZone(int seq) + { + ClientCard card = Bot.MonsterZone[seq]; + if (seq == 5 || seq == 6) + { + ClientCard card1 = Bot.MonsterZone[5]; + ClientCard card2 = Bot.MonsterZone[6]; + if (card1 != null && card1.Controller == 0 && no_link_ids.Contains(card1.Id)) return false; + if (card2 != null && card2.Controller == 0 && no_link_ids.Contains(card2.Id)) return false; + } + if (card == null) return true; + if (card.Controller != 0) return false; + if (card.IsFacedown()) return false; + if (card.IsDisabled()) return true; + if (card.Id == CardId.SprightElf && summon_SprightElf) return false; + if (no_link_ids.Contains(card.Id)) return false; + return true; + } + private bool IsAvailableLinkZone() + { + int zones = 0; + List cards = Bot.GetMonstersInMainZone().Where(card => card != null && card.IsFaceup()).ToList(); + foreach (var card in cards) + { + zones |= card.GetLinkedZones(); + } + ClientCard e_card = Bot.MonsterZone[5]; + if (e_card != null && e_card.IsFaceup() && e_card.HasType(CardType.Link)) + { + if (e_card.Controller == 0) + { + if (e_card.HasLinkMarker(CardLinkMarker.BottomLeft)) + zones |= 1 << 0; + if (e_card.HasLinkMarker(CardLinkMarker.Bottom)) + zones |= 1 << 1; + if (e_card.HasLinkMarker(CardLinkMarker.BottomRight)) + zones |= 1 << 2; + } + if (e_card.Controller == 1) + { + if (e_card.HasLinkMarker(CardLinkMarker.TopLeft)) + zones |= 1 << 2; + if (e_card.HasLinkMarker(CardLinkMarker.Top)) + zones |= 1 << 1; + if (e_card.HasLinkMarker(CardLinkMarker.TopRight)) + zones |= 1 << 0; + } + } + e_card = Bot.MonsterZone[6]; + if (e_card != null && e_card.IsFaceup() && e_card.HasType(CardType.Link)) + { + if (e_card.Controller == 0) + { + if (e_card.HasLinkMarker(CardLinkMarker.BottomLeft)) + zones |= 1 << 2; + if (e_card.HasLinkMarker(CardLinkMarker.Bottom)) + zones |= 1 << 3; + if (e_card.HasLinkMarker(CardLinkMarker.BottomRight)) + zones |= 1 << 4; + } + if (e_card.Controller == 1) + { + if (e_card.HasLinkMarker(CardLinkMarker.TopLeft)) + zones |= 1 << 4; + if (e_card.HasLinkMarker(CardLinkMarker.Top)) + zones |= 1 << 3; + if (e_card.HasLinkMarker(CardLinkMarker.TopRight)) + zones |= 1 << 2; + } + } + zones &= 0x7f; + link_card = null; + if ((zones & Zones.z0) > 0 && IsAvailableZone(0)) return GetZoneLinkCards(0); + if ((zones & Zones.z1) > 0 && IsAvailableZone(1)) return GetZoneLinkCards(1); + if ((zones & Zones.z2) > 0 && IsAvailableZone(2)) return GetZoneLinkCards(2); + if ((zones & Zones.z3) > 0 && IsAvailableZone(3)) return GetZoneLinkCards(3); + if ((zones & Zones.z4) > 0 && IsAvailableZone(4)) return GetZoneLinkCards(4); + if (IsAvailableZone(5)) return GetZoneLinkCards(5); + if (IsAvailableZone(6)) return GetZoneLinkCards(6); + return false; + } + private bool GetZoneLinkCards(int index) + { + if (index >= Bot.MonsterZone.Count()) index = 0; + link_card = Bot.MonsterZone[index]; + return true; + } + + private List GetDefaultMaterial(IList cards) + { + List first_cards = new List(); + List first_mzone_cards = new List(); + List grave_cards = new List(); + List mzone_cards = new List(); + List hand_cards = new List(); + List last_cards = new List(); + foreach (var card in Duel.CurrentChain) + { + if (card == null) continue; + if (((card.Id == CardId.TearlamentsScheiren && !HasInList(last_cards, CardId.TearlamentsScheiren)) + || (card.Id == CardId.TearlamentsMerrli && !HasInList(last_cards, CardId.TearlamentsMerrli)) + || (card.Id == CardId.TearlamentsHavnis && !HasInList(last_cards, CardId.TearlamentsHavnis)) + ) && cards.Contains(card)) + { + last_cards.Add(card); + } + + } + foreach (var card in remainCards) + { + if (card == null) continue; + if (!cards.Contains(card)) first_cards.Add(card); + } + foreach (var card in cards) + { + if (card == null || first_mzone_cards.Contains(card) || first_cards.Contains(card) || last_cards.Contains(card) || + grave_cards.Contains(card) || mzone_cards.Contains(card) || hand_cards.Contains(card)) continue; + if (card.Id == CardId.ElShaddollWinda && card.IsFaceup() && card.Location == CardLocation.MonsterZone && !card.IsDisabled()) first_cards.Add(card); + else if (card.Id != CardId.TearlamentsRulkallos && first_mzone_cards.Count() <= 0 && card.Location == CardLocation.MonsterZone && Bot.GetMonstersInMainZone().Count > 4) + { + first_mzone_cards.Add(card); + } + else if (card.Location == CardLocation.Grave) + { + if ((((card.Id == CardId.TearlamentsScheiren && !activate_TearlamentsScheiren_2) + || (card.Id == CardId.TearlamentsMerrli && !activate_TearlamentsMerrli_2) + || (card.Id == CardId.TearlamentsHavnis && !activate_TearlamentsHavnis_2)) + && last_cards.Count(mcard => mcard != null && mcard.Id == card.Id) <= 0) + || (on_chaining_cards.Count(ccard => ccard != null && ccard == card) > 0 && on_chaining_cards.Count(cccard => cccard != null && cccard.Id == card.Id) <= 1 + && last_cards.Count(mcard => mcard != null && mcard.Id == card.Id) <= 0)) + { + last_cards.Add(card); + } + else grave_cards.Add(card); + + } + else if (card.Location == CardLocation.Hand) + { + if (card.Id == CardId.TearlamentsReinoheart) hand_cards.Insert(0, card); + else hand_cards.Add(card); + } + else if (card.Location == CardLocation.MonsterZone) + { + if (card.Id == CardId.TearlamentsKitkallos || card.Id == CardId.TearlamentsRulkallos + || card.Id == CardId.TearlamentsKaleidoHeart || card.Id == CardId.PredaplantDragostapelia) last_cards.Add(card); + else mzone_cards.Add(card); + } + else mzone_cards.Add(card); + } + first_cards.AddRange(first_mzone_cards); + first_cards.AddRange(grave_cards); + first_cards.AddRange(hand_cards); + first_cards.AddRange(mzone_cards); + first_cards.AddRange(last_cards); + return first_cards; + } + public override IList OnSelectFusionMaterial(IList cards, int min, int max) + { + if (AI.HaveSelectedCards()) return null; + for (int i = 2; i >= 0; --i) + { + List keys = cards.Where(card => card != null && card.Location != CardLocation.MonsterZone && card.Id == CardId.TearlamentsReinoheart).ToList(); + if (ran_fusion_mode_1[i] || ran_fusion_mode_2[i] || ran_fusion_mode_3[i]) + { + if (ran_fusion_mode_1[i]) ran_fusion_mode_1[i] = false; + else if (ran_fusion_mode_2[i]) ran_fusion_mode_2[i] = false; + else if (ran_fusion_mode_3[i]) ran_fusion_mode_3[i] = false; + cards.ToList().Sort(CardContainer.CompareCardAttack); + return keys.Count > 0 ? Util.CheckSelectCount(keys, cards, min, max) : Util.CheckSelectCount(GetDefaultMaterial(cards), cards, min, max); + } + List res = null; + ClientCard mcard = mcard_1[i]; + if (mcard != null) + { + if (keys.Count() > 0) + { + mcard_1[i] = null; + return Util.CheckSelectCount(keys, cards, min, max); + } + mcard_1[i] = null; + List temp = new List(cards); + temp.Sort(CardContainer.CompareCardAttack); + res = GetDefaultMaterial(temp); + return Util.CheckSelectCount(res, cards, min, max); + } + mcard = mcard_2[i]; + if (mcard != null) + { + mcard_2[i] = null; + List temp = new List(cards); + temp.Sort(CardContainer.CompareCardAttack); + res = GetDefaultMaterial(temp); + return Util.CheckSelectCount(res, cards, min, max); + } + mcard = mcard_3[i]; + if (mcard != null) + { + mcard_3[i] = null; + List temp = new List(cards); + temp.Sort(CardContainer.CompareCardAttack); + res = GetDefaultMaterial(temp); + return Util.CheckSelectCount(res, cards, min, max); + } + } + return base.OnSelectFusionMaterial(cards, min, max); + } + private bool HasInList(IList cards, int id) + { + if (cards == null || cards.Count <= 0) return false; + return cards.Any(card => card != null && card.Id == id); + } + private bool IsCanSpSummon() + { + if ((Bot.HasInMonstersZone(CardId.ElShaddollWinda, true, false, true) + || Enemy.HasInMonstersZone(CardId.ElShaddollWinda, true, false, true)) && spsummoned) return false; + return true; + } + private void SetSpSummon() + { + if (Bot.HasInMonstersZone(CardId.ElShaddollWinda, true, false, true) || + Enemy.HasInMonstersZone(CardId.ElShaddollWinda, true, false, true)) spsummoned = true; + } + public override IList OnSelectCard(IList cards, int min, int max, int hint, bool cancelable) + { + if ((AI.HaveSelectedCards() && mcard_0.All(card => card == null) && ran_fusion_mode_0.All(flag => !flag)) + || (hint == HintMsg.FusionMaterial)) return null; + if (pre_activate_PrimevalPlanetPerlereino) + { + pre_activate_PrimevalPlanetPerlereino = false; + List ids = GetCardsIdSendToHand(); + return Util.CheckSelectCount(CardsIdToClientCards(ids, cards, false, true), cards, min, max); + + } + //!YGO_SCRIPT && select_TearlamentsKitkallos && hint == HintMsg.AddToHand + if ((YGO_SCRIPT && hint == HintMsg.OperateCard) || (!YGO_SCRIPT && select_TearlamentsKitkallos && hint == HintMsg.AddToHand)) + { + if (!YGO_SCRIPT) select_TearlamentsKitkallos = false; + IList ids = new List(); + IList res = new List(); + if (Duel.Player == 0) + { + if (!activate_TearlamentsScheiren_1 && !Bot.HasInHand(CardId.TearlamentsScheiren) && HasInList(cards, CardId.TearlamentsScheiren)) ids.Add(CardId.TearlamentsScheiren); + if (!activate_TearlamentsMerrli_1 && !Bot.HasInHand(CardId.TearlamentsMerrli) && HasInList(cards, CardId.TearlamentsMerrli)) ids.Add(CardId.TearlamentsMerrli); + if (!activate_TearlamentsReinoheart_1 && !Bot.HasInHand(CardId.TearlamentsReinoheart) && HasInList(cards, CardId.TearlamentsReinoheart)) ids.Add(CardId.TearlamentsReinoheart); + if (ids.Count() <= 0 && !activate_TearlamentsKitkallos_2) + { + List should_spsummon_cards = GetZoneCards(CardLocation.Grave | CardLocation.Hand, Bot); + should_spsummon_cards = should_spsummon_cards.Where(card => card != null && card.HasSetcode(YGO_SCRIPT ? 0x181 : 0x182) && card.HasType(CardType.Monster)).ToList(); + if (should_spsummon_cards.Count() <= 0) + { + if (HasInList(cards, CardId.TearlamentsScheiren)) ids.Add(CardId.TearlamentsScheiren); + if (HasInList(cards, CardId.TearlamentsMerrli)) ids.Add(CardId.TearlamentsMerrli); + if (HasInList(cards, CardId.TearlamentsReinoheart)) ids.Add(CardId.TearlamentsReinoheart); + if (HasInList(cards, CardId.TearlamentsHavnis)) ids.Add(CardId.TearlamentsHavnis); + } + } + if (HasInList(cards, CardId.TearlamentsScream) && !activate_TearlamentsScream_1) ids.Add(CardId.TearlamentsScream); + if (HasInList(cards, CardId.TearlamentsSulliek) && on_chaining_cards.Count(card => card != null && card.Id == CardId.TearlamentsScream) <= 0) ids.Add(CardId.TearlamentsSulliek); + if (HasInList(cards, CardId.PrimevalPlanetPerlereino) && !activate_PrimevalPlanetPerlereino_1) ids.Add(CardId.PrimevalPlanetPerlereino); + if (ids.Count > 0) + { + TearlamentsKitkallostohand = true; + } + else + { + if (IsShouldSummonFusion(YGO_SCRIPT ? 0x181 : 0x182, (int)CardRace.Aqua)) + { + if (!activate_TearlamentsHavnis_2 && HasInList(cards, CardId.TearlamentsHavnis)) ids.Add(CardId.TearlamentsHavnis); + if (!activate_TearlamentsScheiren_2 && HasInList(cards, CardId.TearlamentsScheiren)) ids.Add(CardId.TearlamentsScheiren); + if (!activate_TearlamentsMerrli_2 && HasInList(cards, CardId.TearlamentsMerrli)) ids.Add(CardId.TearlamentsMerrli); + if (ids.Count > 0) TearlamentsKitkallostohand = false; + } + } + + } + else + { + if (IsShouldSummonFusion(YGO_SCRIPT ? 0x181 : 0x182, (int)CardRace.Aqua, true)) + { + if (!activate_TearlamentsHavnis_2 && HasInList(cards, CardId.TearlamentsHavnis) && !Bot.HasInHand(CardId.TearlamentsHavnis)) ids.Add(CardId.TearlamentsHavnis); + if (!activate_TearlamentsScheiren_2 && HasInList(cards, CardId.TearlamentsScheiren) && !Bot.HasInHand(CardId.TearlamentsScheiren)) ids.Add(CardId.TearlamentsScheiren); + if (!activate_TearlamentsMerrli_2 && HasInList(cards, CardId.TearlamentsMerrli) && !Bot.HasInHand(CardId.TearlamentsMerrli)) ids.Add(CardId.TearlamentsMerrli); + if (!activate_TearlamentsHavnis_2 && HasInList(cards, CardId.TearlamentsHavnis) && !ids.Contains(CardId.TearlamentsHavnis)) ids.Add(CardId.TearlamentsHavnis); + if (!activate_TearlamentsScheiren_2 && HasInList(cards, CardId.TearlamentsScheiren) && !ids.Contains(CardId.TearlamentsScheiren)) ids.Add(CardId.TearlamentsScheiren); + if (!activate_TearlamentsMerrli_2 && HasInList(cards, CardId.TearlamentsMerrli) && !ids.Contains(CardId.TearlamentsMerrli)) ids.Add(CardId.TearlamentsMerrli); + } + if (ids.Count > 0) TearlamentsKitkallostohand = false; + else + { + if (!Bot.HasInHand(CardId.TearlamentsHavnis) && !activate_TearlamentsHavnis_1 && HasInList(cards, CardId.TearlamentsHavnis)) + { + ids.Add(CardId.TearlamentsHavnis); + TearlamentsKitkallostohand = true; + } + else if (!activate_TearlamentsReinoheart_2 && HasInList(cards, CardId.TearlamentsReinoheart) && Bot.Hand.Any(card => card != null && card.HasSetcode(YGO_SCRIPT ? 0x181 : 0x182))) + { + ids.Add(CardId.TearlamentsReinoheart); + TearlamentsKitkallostohand = false; + } + else if (!activate_TearlamentsSulliek_2 && HasInList(cards, CardId.TearlamentsSulliek)) + { + ids.Add(CardId.TearlamentsSulliek); + TearlamentsKitkallostohand = false; + } + else + { + if (!Bot.HasInHand(CardId.PrimevalPlanetPerlereino) && HasInList(cards, CardId.PrimevalPlanetPerlereino)) ids.Add(CardId.PrimevalPlanetPerlereino); + if (!Bot.HasInHand(CardId.TearlamentsScheiren) && HasInList(cards, CardId.TearlamentsScheiren)) ids.Add(CardId.TearlamentsScheiren); + if (!Bot.HasInHand(CardId.TearlamentsMerrli) && HasInList(cards, CardId.TearlamentsMerrli)) ids.Add(CardId.TearlamentsMerrli); + if (!Bot.HasInHand(CardId.TearlamentsReinoheart) && HasInList(cards, CardId.TearlamentsReinoheart)) ids.Add(CardId.TearlamentsReinoheart); + if (!Bot.HasInHand(CardId.TearlamentsScream) && HasInList(cards, CardId.TearlamentsScream)) ids.Add(CardId.TearlamentsScream); + if (!Bot.HasInHand(CardId.TearlamentsSulliek) && HasInList(cards, CardId.TearlamentsSulliek)) ids.Add(CardId.TearlamentsSulliek); + TearlamentsKitkallostohand = true; + } + } + + } + res = CardsIdToClientCards(ids, cards, false); + if (res.Count <= 0 || (Bot.HasInMonstersZone(CardId.ElShaddollWinda, true, false, true) && spsummoned)) TearlamentsKitkallostohand = true; + return res.Count > 0 ? Util.CheckSelectCount(res, cards, min, max) : null; + } + if (hint == HintMsg.Remove && cards.Any(card => card != null && ((card.HasAttribute(CardAttribute.Light) && card.HasRace(CardRace.Fairy)) || card.Controller == 1))) + { + IList res = CardsIdToClientCards(new List() { CardId.HeraldofGreenLight, CardId.HeraldofOrangeLight, CardId.DivineroftheHerald }, cards.Where(card => card != null && card.Location == CardLocation.Grave).ToList(), false); + List eres = cards.Where(card => card != null && card.Controller == 1 && !key_no_remove_ids.Contains(card.Id)).ToList(); + eres.Sort(CardContainer.CompareCardAttack); + eres.Reverse(); + int emax = eres.Count > max ? max : eres.Count <= 0 ? min : eres.Count; + int mmax = res.Count > max ? max : res.Count <= 0 ? min : res.Count; + return eres.Count > 0 ? Util.CheckSelectCount(eres, cards, emax, emax) : res.Count > 0 ? Util.CheckSelectCount(res, cards, mmax, mmax) : null; + } + if (hint == HintMsg.AddToHand && cards.Any(card => card != null && card.Location == CardLocation.Deck)) + { + List ids = new List() { CardId.HeraldofOrangeLight, CardId.HeraldofGreenLight, CardId.DivineroftheHerald }; + if (!Bot.HasInSpellZoneOrInGraveyard(CardId.DivineroftheHerald) && (Bot.HasInHand(CardId.HeraldofOrangeLight) || Bot.HasInHand(CardId.HeraldofGreenLight))) + { + ids.Clear(); + ids.AddRange(new List() { CardId.DivineroftheHerald, CardId.HeraldofOrangeLight, CardId.HeraldofGreenLight }); + } + ids.AddRange(GetCardsIdSendToHand().Distinct()); + IList res = CardsIdToClientCards(ids, cards, false); + return res.Count > 0 ? Util.CheckSelectCount(res, cards, max, max) : null; + } + if (hint == HintMsg.ToGrave && cards.Any(card => card != null && card.Location == CardLocation.MonsterZone) && min == 1 && max == 1) + { + List h_cards = new List(); + List m_cards = new List(); + List s_cards = new List(); + foreach (var card in cards) + { + if (card == null) continue; + if (card.Location == CardLocation.Hand) h_cards.Add(card); + else if (card.Location == CardLocation.SpellZone) s_cards.Add(card); + else m_cards.Add(card); + } + List mkeycards = new List(); + List hkeycards = new List(); + if (IsShouldSummonFusion()) + { + if (!activate_TearlamentsScheiren_2 && HasInList(cards, CardId.TearlamentsScheiren)) + { + hkeycards = cards.Where(card => card != null && card.Id == CardId.TearlamentsScheiren && card.Location == CardLocation.Hand).ToList(); + mkeycards = cards.Where(card => card != null && card.Id == CardId.TearlamentsScheiren && card.Location == CardLocation.MonsterZone).ToList(); + } + else if (!activate_TearlamentsHavnis_2 && HasInList(cards, CardId.TearlamentsHavnis)) + { + hkeycards = cards.Where(card => card != null && card.Id == CardId.TearlamentsHavnis && card.Location == CardLocation.Hand).ToList(); + mkeycards = cards.Where(card => card != null && card.Id == CardId.TearlamentsHavnis && card.Location == CardLocation.MonsterZone).ToList(); + } + else if (!activate_TearlamentsMerrli_2 && HasInList(cards, CardId.TearlamentsMerrli)) + { + hkeycards = cards.Where(card => card != null && card.Id == CardId.TearlamentsMerrli && card.Location == CardLocation.Hand).ToList(); + mkeycards = cards.Where(card => card != null && card.Id == CardId.TearlamentsMerrli && card.Location == CardLocation.MonsterZone).ToList(); + } + if (mkeycards.Count > 0 || hkeycards.Count > 0) + { + if (Bot.GetMonstersInMainZone().Count < 5) + { + hkeycards.AddRange(mkeycards); + return Util.CheckSelectCount(hkeycards, cards, min, max); + } + else + { + mkeycards.AddRange(hkeycards); + return Util.CheckSelectCount(mkeycards, cards, min, max); + } + } + } + mkeycards = cards.Where(card => card != null && card.Id == CardId.TearlamentsKitkallos).ToList(); + if (!activate_TearlamentsKitkallos_3 && mkeycards.Count > 0 && IsShouldSummonFusion(YGO_SCRIPT ? 0x181 : 0x182, (int)CardRace.Aqua) + && ((CheckRemainInDeck(CardId.TearlamentsHavnis) > 0 && !activate_TearlamentsHavnis_2) + || (CheckRemainInDeck(CardId.TearlamentsMerrli) > 0 && !activate_TearlamentsMerrli_2) + || (CheckRemainInDeck(CardId.TearlamentsScheiren) > 0 && !activate_TearlamentsScheiren_2))) + return Util.CheckSelectCount(mkeycards, cards, min, max); + mkeycards = cards.Where(card => card != null && card.Id == CardId.TearlamentsKaleidoHeart).ToList(); + if (!activate_TearlamentsKaleidoHeart_2 && IsCanSpSummon() && mkeycards.Count > 0) return Util.CheckSelectCount(mkeycards, cards, min, max); + mkeycards = cards.Where(card => card != null && card.Id == CardId.TearlamentsRulkallos).ToList(); + if (!activate_TearlamentsRulkallos_2 && IsCanSpSummon() && mkeycards.Count > 0) return Util.CheckSelectCount(mkeycards, cards, min, max); + s_cards.AddRange(h_cards); + m_cards.Sort(CardContainer.CompareCardAttack); + s_cards.AddRange(m_cards); + return Util.CheckSelectCount(s_cards, cards, min, max); + } + if (hint == HintMsg.ToGrave && cards.Any(card => card != null && card.Location == CardLocation.Hand) && min == 1 && max == 1) + { + IList ids = new List(); + if (!activate_AgidotheAncientSentinel_2) ids.Add(CardId.AgidotheAncientSentinel); + if (!activate_KelbektheAncientVanguard_2) ids.Add(CardId.KelbektheAncientVanguard); + if (IsShouldSummonFusion(YGO_SCRIPT ? 0x181 : 0x182, (int)CardRace.Aqua)) + { + if (activate_TearlamentsScheiren_1 && !activate_TearlamentsScheiren_2) ids.Add(CardId.TearlamentsScheiren); + if (summoned && !activate_TearlamentsMerrli_2) ids.Add(CardId.TearlamentsMerrli); + if (!activate_TearlamentsHavnis_2) ids.Add(CardId.TearlamentsHavnis); + if (!activate_TearlamentsMerrli_2) ids.Add(CardId.TearlamentsMerrli); + if (!activate_TearlamentsScheiren_2) ids.Add(CardId.TearlamentsScheiren); + } + if (Enemy.GetSpellCount() > 0) ids.Add(CardId.ShaddollDragon); + if (Bot.Deck.Count > 0) ids.Add(CardId.ShaddollBeast); + if (Enemy.Graveyard.Count > 0) ids.Add(CardId.NaelshaddollAriel); + if (!activate_Eva && Bot.Graveyard.Count(card => card != null && card.HasAttribute(CardAttribute.Light) && card.HasRace(CardRace.Fairy)) > 0 + && (CheckRemainInDeck(CardId.HeraldofGreenLight) > 0 || CheckRemainInDeck(CardId.HeraldofOrangeLight) > 0)) ids.Add(CardId.Eva); + if (((Bot.HasInHand(CardId.HeraldofOrangeLight) || Bot.HasInHand(CardId.HeraldofGreenLight)) + && Bot.Hand.Count(card => card != null && card.HasRace(CardRace.Fairy)) > 2) + || (!Bot.HasInHand(CardId.HeraldofOrangeLight) && !Bot.HasInHand(CardId.HeraldofGreenLight))) + { + ids.Add(CardId.MudoratheSwordOracle); + ids.Add(CardId.KeldotheSacredProtector); + } + if (!activate_TearlamentsReinoheart_2 && HasInList(cards, CardId.TearlamentsReinoheart)) ids.Add(CardId.TearlamentsReinoheart); + if (!activate_TearlamentsScream_2 && CheckRemainInDeck(CardId.TearlamentsSulliek) > 0) ids.Add(CardId.TearlamentsScream); + if (!activate_TearlamentsSulliek_2) ids.Add(CardId.TearlamentsSulliek); + ids.Add(CardId.HeraldofGreenLight); + ids.Add(CardId.HeraldofOrangeLight); + ids = ids.Distinct().ToList(); + IList res = CardsIdToClientCards(ids, cards, false); + List temp = new List(cards); + foreach (var card in cards) + { + if (temp.Count <= 1) break; + if ((!summoned && card.Id == CardId.DivineroftheHerald) + || card.Id == CardId.HeraldofOrangeLight || card.Id == CardId.HeraldofGreenLight + || (!summoned && card.Id == CardId.TearlamentsMerrli && !activate_TearlamentsHavnis_1)) + { + temp.Remove(card); + } + } + temp.Sort(CardContainer.CompareCardAttack); + return res.Count > 0 ? Util.CheckSelectCount(res, cards, min, max) : Util.CheckSelectCount(temp, cards, min, max); + + } + if (hint == HintMsg.ToGrave && cards.Any(card => card != null && (card.Location == CardLocation.Deck || card.Location == CardLocation.Extra)) && min == 1 && max == 1) + { + List cardsid = new List(); + if (HasInList(cards, CardId.AgidotheAncientSentinel) && !activate_AgidotheAncientSentinel_2) + { + if (HasInList(cards, CardId.KelbektheAncientVanguard) && !activate_KelbektheAncientVanguard_2 && Bot.HasInHand(CardId.AgidotheAncientSentinel)) + { + cardsid.Add(CardId.KelbektheAncientVanguard); + } + else cardsid.Add(CardId.AgidotheAncientSentinel); + } + else if (HasInList(cards, CardId.KelbektheAncientVanguard) && !activate_KelbektheAncientVanguard_2) + { + cardsid.Add(CardId.KelbektheAncientVanguard); + } + else if (HasInList(cards, CardId.ElderEntityNtss) && GetZoneCards(CardLocation.Onfield, Enemy).Count(card => card != null && !card.IsShouldNotBeTarget()) > 0) + { + cardsid.Add(CardId.ElderEntityNtss); + } + if (HasInList(cards, CardId.Eva) && !activate_Eva && + (CheckRemainInDeck(CardId.HeraldofOrangeLight) > 0 || CheckRemainInDeck(CardId.HeraldofGreenLight) > 0)) + cardsid.Add(CardId.Eva); + if (HasInList(cards, CardId.MudoratheSwordOracle)) cardsid.Add(CardId.MudoratheSwordOracle); + if (HasInList(cards, CardId.KeldotheSacredProtector)) cardsid.Add(CardId.KeldotheSacredProtector); + if (IsShouldSummonFusion()) + { + if (cards.Any(card => card != null && card.Id == CardId.TearlamentsHavnis) && !activate_TearlamentsHavnis_2) cardsid.Add(CardId.TearlamentsHavnis); + if (cards.Any(card => card != null && card.Id == CardId.TearlamentsMerrli) && !activate_TearlamentsMerrli_2) cardsid.Add(CardId.TearlamentsMerrli); + if (cards.Any(card => card != null && card.Id == CardId.TearlamentsScheiren) && !activate_TearlamentsScheiren_2) cardsid.Add(CardId.TearlamentsScheiren); + } + if (cards.Any(card => card != null && card.Id == CardId.TearlamentsSulliek) && !activate_TearlamentsSulliek_2) cardsid.Add(CardId.TearlamentsSulliek); + if (cards.Any(card => card != null && card.Id == CardId.TearlamentsScream) && !activate_TearlamentsScream_2 && CheckRemainInDeck(CardId.TearlamentsSulliek) > 0) cardsid.Add(CardId.TearlamentsScream); + IList res = CardsIdToClientCards(cardsid, cards, false); + return res.Count > 0 ? Util.CheckSelectCount(res, cards, min, max) : null; + } + if (hint == HintMsg.ToDeck && cards.Any(card => card != null && card.Location == CardLocation.Grave)) + { + List b_cards = new List(); + List e_cards = new List(); + List e_temp_1 = new List(); + List e_temp_2 = new List(); + List e_temp_3 = new List(); + List e_temp_4 = new List(); + foreach (var card in cards) + { + if (card == null) continue; + if (card.Controller == 0) b_cards.Add(card); + else e_cards.Add(card); + } + if (e_cards.Count <= 0 && Bot.Deck.Count > 2) + { + return null; + } + int imax = e_cards.Count > max ? max : e_cards.Count < 0 ? min : e_cards.Count; + if (Duel.CurrentChain == null || Duel.ChainTargets == null) return Util.CheckSelectCount(e_cards, cards, imax, imax); + foreach (var card in Duel.CurrentChain) + { + if (card == null || card.Controller == 0 || card.Location != CardLocation.Grave) continue; + if (cards.Contains(card)) + { + if (key_no_send_to_deck_ids.Contains(card.Id)) continue; + else if (key_send_to_deck_ids.Contains(card.Id) && !e_temp_1.Contains(card)) e_temp_1.Add(card); + else if (!e_temp_2.Contains(card)) e_temp_2.Add(card); + } + } + foreach (var card in Duel.ChainTargets) + { + if (card == null || card.Controller == 0 || card.Location != CardLocation.Grave) continue; + if (cards.Contains(card)) + { + if (key_no_send_to_deck_ids.Contains(card.Id)) continue; + else if (key_send_to_deck_ids.Contains(card.Id) && !e_temp_1.Contains(card)) e_temp_1.Add(card); + else if (!e_temp_2.Contains(card)) e_temp_2.Add(card); + } + } + foreach (var card in cards) + { + if (card == null || card.Controller == 0 || card.Location != CardLocation.Grave) continue; + if (key_send_to_deck_ids.Contains(card.Id) && !e_temp_1.Contains(card) && !e_temp_2.Contains(card)) e_temp_2.Add(card); + } + if (Bot.Deck.Count <= 0 && Duel.CurrentChain.Any(card => card != null && card.Controller == 0 && card.Id == CardId.ShaddollBeast)) + { + bot_send_to_deck_ids = new List { CardId.TearlamentsScheiren, CardId.TearlamentsMerrli, CardId.TearlamentsHavnis }; + IList temp = CardsIdToClientCards(bot_send_to_deck_ids, b_cards); + if (temp.Count <= 0) + { + for (int i = 0; i < b_cards.Count; i++) + { + if (i >= 2) break; + if (b_cards[i] == null || e_temp_1.Contains(b_cards[i])) continue; + e_temp_1.Insert(0, b_cards[i]); + } + } + else + { + for (int i = 0; i < temp.Count; i++) + { + if (i >= 2) break; + if (temp[i] == null || e_temp_1.Contains(temp[i])) continue; + e_temp_1.Insert(0, temp[i]); + } + } + } + if (Bot.Deck.Count < 3) + { + bot_send_to_deck_ids = new List(); + IList temp = new List(); + if (b_cards.Count > 0 && Bot.ExtraDeck.Any(card => card != null && card.HasType(CardType.Fusion) && card.Id != CardId.ElderEntityNtss)) + { + if (CheckRemainInDeck(CardId.TearlamentsScheiren) <= 0 && HasInList(cards, CardId.TearlamentsScheiren)) bot_send_to_deck_ids.Add(CardId.TearlamentsScheiren); + if (CheckRemainInDeck(CardId.TearlamentsMerrli) <= 0 && HasInList(cards, CardId.TearlamentsMerrli)) bot_send_to_deck_ids.Add(CardId.TearlamentsMerrli); + if (CheckRemainInDeck(CardId.TearlamentsHavnis) <= 0 && HasInList(cards, CardId.TearlamentsHavnis)) bot_send_to_deck_ids.Add(CardId.TearlamentsHavnis); + } + temp = CardsIdToClientCards(bot_send_to_deck_ids, b_cards); + if (temp.Count > 0) + { + for (int i = 0; i < temp.Count; i++) + { + if (temp[i] == null || e_temp_4.Contains(temp[i]) || e_temp_1.Contains(temp[i]) + || e_temp_2.Contains(temp[i])) continue; + e_temp_4.Add(temp[i]); + } + } + bot_send_to_deck_ids.Clear(); + if (HasInList(cards, CardId.NaelshaddollAriel)) bot_send_to_deck_ids.Add(CardId.NaelshaddollAriel); + if (CheckRemainInDeck(CardId.KelbektheAncientVanguard) <= 0 && HasInList(cards, CardId.KelbektheAncientVanguard)) bot_send_to_deck_ids.Add(CardId.KelbektheAncientVanguard); + if (CheckRemainInDeck(CardId.AgidotheAncientSentinel) <= 0 && HasInList(cards, CardId.AgidotheAncientSentinel)) bot_send_to_deck_ids.Add(CardId.AgidotheAncientSentinel); + if (CheckRemainInDeck(CardId.HeraldofOrangeLight) <= 0 && HasInList(cards, CardId.HeraldofOrangeLight)) bot_send_to_deck_ids.Add(CardId.HeraldofOrangeLight); + if (CheckRemainInDeck(CardId.HeraldofGreenLight) <= 0 && HasInList(cards, CardId.HeraldofGreenLight)) bot_send_to_deck_ids.Add(CardId.HeraldofGreenLight); + temp = CardsIdToClientCards(bot_send_to_deck_ids, b_cards); + if (temp.Count > 0) + { + for (int i = 0; i < temp.Count; i++) + { + if (temp[i] == null || e_temp_4.Contains(temp[i]) || e_temp_1.Contains(temp[i]) + || e_temp_2.Contains(temp[i])) continue; + e_temp_4.Add(temp[i]); + } + } + foreach (var card in b_cards) + { + if (card == null || e_temp_4.Contains(card) || e_temp_1.Contains(card) + || e_temp_2.Contains(card)) continue; + e_temp_4.Add(card); + } + } + e_temp_3 = e_cards.Where(card => card != null && !e_temp_1.Contains(card) && !e_temp_2.Contains(card) && !e_temp_4.Contains(card)).ToList(); + e_temp_1.AddRange(e_temp_2); + e_temp_1.AddRange(e_temp_4); + e_temp_1.AddRange(e_temp_3); + imax = e_temp_1.Count > max ? max : e_temp_1.Count < 0 ? min : e_temp_1.Count; + return e_temp_1.Count > 0 ? Util.CheckSelectCount(e_temp_1, cards, imax, imax) : Util.CheckSelectCount(e_cards, cards, max, max); + + } + if (hint == HintMsg.SpSummon && cards.Any(card => card != null && (card.Level == 2 || card.LinkCount == 2) && card.Location == CardLocation.Grave)) + { + IList res = new List(); + List ids = new List(); + if (Duel.Player == 0) + { + if (HasInList(cards, CardId.TearlamentsMerrli) && !activate_TearlamentsMerrli_1 && IsCanFusionSummon()) + { + ids.Add(CardId.TearlamentsMerrli); + } + else if (HasInList(cards, CardId.DivineroftheHerald) && !activate_DivineroftheHerald) + { + ids.Add(CardId.DivineroftheHerald); + } + else if (HasInList(cards, CardId.TearlamentsMerrli) && !activate_TearlamentsMerrli_1) + { + ids.Add(CardId.TearlamentsMerrli); + } + else if (HasInList(cards, CardId.IP) && Bot.ExtraDeck.Count(card => card != null && card.LinkCount > 2) > 0) + { + ids.Add(CardId.IP); + } + else + { + ids = new List() { CardId.DivineroftheHerald, CardId.TearlamentsMerrli, CardId.HeraldofOrangeLight, CardId.HeraldofGreenLight }; + } + } + else + { + if (HasInList(cards, CardId.DivineroftheHerald) && !activate_DivineroftheHerald && FusionDeckCheck() + && ((CheckRemainInDeck(CardId.AgidotheAncientSentinel) > 0 && !activate_AgidotheAncientSentinel_2) + || (CheckRemainInDeck(CardId.KelbektheAncientVanguard) > 0 && !activate_KelbektheAncientVanguard_2))) + { + ids.Add(CardId.DivineroftheHerald); + } + if (HasInList(cards, CardId.TearlamentsMerrli) && !activate_TearlamentsMerrli_1 && + IsShouldSummonFusion(-1, -1, true) && FusionDeckCheck()) + { + ids.Add(CardId.TearlamentsMerrli); + } + else if (HasInList(cards, CardId.DivineroftheHerald) && Bot.HasInExtra(CardId.ElderEntityNtss) && GetZoneCards(CardLocation.Onfield, Enemy).Any(card => card != null && !card.IsShouldNotBeTarget())) + { + ids.Add(CardId.DivineroftheHerald); + } + else if (HasInList(cards, CardId.IP) && Bot.ExtraDeck.Any(card => card != null && card.LinkCount > 2)) + { + ids.Add(CardId.IP); + } + else + { + ids = new List() { CardId.DivineroftheHerald, CardId.TearlamentsMerrli, CardId.HeraldofOrangeLight, CardId.HeraldofGreenLight }; + } + } + res = CardsIdToClientCards(ids, cards, false); + return res.Count > 0 ? Util.CheckSelectCount(res, cards, min, max) : null; + } + //(YGO_SCRIPT && hint == HintMsg.Disable) || (!YGO_SCRIPT && hint == HintMsg.Negate) + if (YGO_SCRIPT && hint == HintMsg.Disable) + { + if (chain_TearlamentsSulliek != null && cards.Contains(chain_TearlamentsSulliek)) + { + List res = new List() { chain_TearlamentsSulliek }; + return Util.CheckSelectCount(res, cards, min, max); + } + return null; + } + if (hint == HintMsg.Faceup && cards.Any(card => card != null && card.Controller == 1)) + { + if (chain_PredaplantDragostapelia != null && cards.Contains(chain_PredaplantDragostapelia)) + { + List res = new List() { chain_PredaplantDragostapelia }; + e_PredaplantDragostapelia_cards.Add(chain_PredaplantDragostapelia); + return Util.CheckSelectCount(res, cards, min, max); + } + return null; + } + for (int i = 2; i >= 0; --i) + { + if (ran_fusion_mode_0[i]) + { + ran_fusion_mode_0[i] = false; + if (Duel.Player == 0) + { + List res0 = cards.Where(card => card != null && card.Id == CardId.PredaplantDragostapelia).ToList(); + if (res0.Count > 0 && Bot.HasInMonstersZone(CardId.ElShaddollWinda, true, false, true)) + { + return Util.CheckSelectCount(res0, cards, min, max); + } + res0 = cards.Where(card => card != null && card.Id == CardId.TearlamentsKitkallos).ToList(); + if (res0.Count > 0 && ((!activate_TearlamentsKitkallos_1 && + ((!activate_TearlamentsScheiren_2 && CheckRemainInDeck(CardId.TearlamentsScheiren) > 0) + || (!activate_TearlamentsHavnis_2 && CheckRemainInDeck(CardId.TearlamentsHavnis) > 0) + || (!activate_TearlamentsMerrli_2 && CheckRemainInDeck(CardId.TearlamentsMerrli) > 0))) || !activate_TearlamentsKitkallos_2)) + { + return Util.CheckSelectCount(res0, cards, min, max); + } + res0 = cards.Where(card => card != null && card.Id == CardId.TearlamentsKaleidoHeart).ToList(); + if (GetZoneCards(CardLocation.Onfield, Enemy).Count(card => card != null && !card.IsShouldNotBeTarget()) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.TearlamentsKaleidoHeart) + && !activate_TearlamentsKaleidoHeart_1 && (!Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) || (Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) && activate_PrimevalPlanetPerlereino_2))) + { + ran_fusion_mode_3[i] = true; + return Util.CheckSelectCount(res0, cards, min, max); + } + res0 = cards.Where(card => card != null && card.Id == CardId.TearlamentsRulkallos).ToList(); + if (Bot.Graveyard.Count(card => card != null && card.Id == CardId.TearlamentsKitkallos) > 0 || + Bot.MonsterZone.Count(card => card != null && card.Id == CardId.TearlamentsKitkallos && card.IsFaceup()) > 0 && res0.Count > 0) + { + activate_TearlamentsRulkallos_2 = false; + return Util.CheckSelectCount(res0, cards, min, max); + } + res0 = cards.Where(card => card != null && card.Id == CardId.PredaplantDragostapelia).ToList(); + if (res0.Count > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.PredaplantDragostapelia) && Enemy.GetMonsters().Any(card => card != null && card.HasType(CardType.Effect) && !card.IsDisabled() && card.IsFaceup() && !card.IsShouldNotBeTarget())) + { + return Util.CheckSelectCount(res0, cards, min, max); + } + List res1 = cards.Where(card => card != null && card.Id == CardId.TearlamentsKitkallos).ToList(); + if (res1.Count > 0) + { + List material = GetDefaultMaterial(fusionMaterial); + if (((material.Count(mcard => mcard != null && mcard.Id == CardId.TearlamentsKitkallos && mcard.Location == CardLocation.MonsterZone) > 0 && + activate_TearlamentsKitkallos_1) || (material.Count(mcard => mcard != null && mcard.Id == CardId.TearlamentsKitkallos && mcard.Location == CardLocation.MonsterZone) > 1)) && + material.Count <= 2) + { + if (res0.Count > 0) + { + activate_TearlamentsRulkallos_2 = false; + return Util.CheckSelectCount(res0, cards, min, max); + } + return Util.CheckSelectCount(res1, cards, min, max); + } + return Util.CheckSelectCount(res1, cards, min, max); + } + + } + else + { + List res = cards.Where(card => card != null && card.Id == CardId.TearlamentsKitkallos).ToList(); + if (res.Count > 0 && !activate_TearlamentsKitkallos_1 && + ((!activate_TearlamentsScheiren_2 && CheckRemainInDeck(CardId.TearlamentsScheiren) > 0) + || (!activate_TearlamentsHavnis_2 && CheckRemainInDeck(CardId.TearlamentsHavnis) > 0) + || (!activate_TearlamentsMerrli_2 && CheckRemainInDeck(CardId.TearlamentsMerrli) > 0)) && Bot.GetMonstersInMainZone().Count < 4) return Util.CheckSelectCount(res, cards, min, max); + res = cards.Where(card => card != null && card.Id == CardId.TearlamentsRulkallos).ToList(); + if (res.Count > 0) return Util.CheckSelectCount(res, cards, min, max); + res = cards.Where(card => card != null && card.Id == CardId.TearlamentsKaleidoHeart).ToList(); + if (GetZoneCards(CardLocation.Onfield, Enemy).Count(card => card != null && !card.IsShouldNotBeTarget()) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.TearlamentsKaleidoHeart) + && !activate_TearlamentsKaleidoHeart_1 && (!Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) || (Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) && activate_PrimevalPlanetPerlereino_2))) + { + ran_fusion_mode_3[i] = true; + return Util.CheckSelectCount(res, cards, min, max); + } + res = cards.Where(card => card != null && card.Id == CardId.ElShaddollWinda).ToList(); + if (res.Count > 0) return Util.CheckSelectCount(res, cards, min, max); + res = cards.Where(card => card != null && card.Id == CardId.PredaplantDragostapelia).ToList(); + if (res.Count > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.PredaplantDragostapelia)) + { + return Util.CheckSelectCount(res, cards, min, max); + } + res = cards.Where(card => card != null && card.Id == CardId.TearlamentsKitkallos).ToList(); + if (res.Count > 0) + { + return Util.CheckSelectCount(res, cards, min, max); + } + return null; + } + } + if (mcard_0[i] == null) continue; + if (cards.Contains(mcard_0[i])) + { + List res = new List() { mcard_0[i] }; + mcard_0[i] = null; + return Util.CheckSelectCount(res, cards, min, max); + } + else + { + return null; + } + } + return base.OnSelectCard(cards, min, max, hint, cancelable); + } + private bool IsCanFusionSummon() + { + if ((!activate_TearlamentsMerrli_2 && CheckRemainInDeck(CardId.TearlamentsMerrli) > 0) + || (!activate_TearlamentsHavnis_2 && CheckRemainInDeck(CardId.TearlamentsHavnis) > 0) + || (!activate_TearlamentsScheiren_2 && CheckRemainInDeck(CardId.TearlamentsScheiren) > 0)) + return Bot.ExtraDeck.Count(card => card != null && card.HasType(CardType.Fusion) && card.Id != CardId.ElderEntityNtss) > 0; + return false; + + } + private bool BaronnedeFleurSummon_2() + { + if (Duel.Turn > 1 && Duel.Phase < DuelPhase.Main2) return false; + List scards = Bot.GetMonsters().Where(card => card != null && card.Id == CardId.DivineroftheHerald && card.IsFaceup()).ToList(); + List mcards = Bot.GetMonsters().Where(card => card != null && !card.HasType(CardType.Tuner) && card.IsFaceup()).ToList(); + if (scards.Any(card => card != null && card.Level == 2) && mcards.Count(card => card != null && card.Level == 4) > 1) + { + List s = scards.Where(card => card != null && card.Level == 2 && card.Id == CardId.DivineroftheHerald && card.IsFaceup()).ToList(); + List res = new List() { s.FirstOrDefault() }; + res.AddRange(mcards.Where(card => card != null && card.Level == 4 && card.IsFaceup())); + AI.SelectMaterials(res); + SetSpSummon(); + return true; + } + return false; + } + private bool BaronnedeFleurSummon() + { + List scards = Bot.GetMonsters().Where(card => card != null && card.Id == CardId.DivineroftheHerald && card.IsFaceup()).ToList(); + List mcards = Bot.GetMonsters().Where(card => card != null && !card.HasType(CardType.Synchro) && card.IsFaceup()).ToList(); + if (scards.Any(card => card != null && card.Level == 2) && mcards.Any(card => card != null && card.Level == 8 && card.Id != CardId.TearlamentsRulkallos && card.Id != CardId.PredaplantDragostapelia)) { SetSpSummon(); return true; } + else if (scards.Any(card => card != null && card.Level == 5) && mcards.Any(card => card != null && card.Level == 5)) + { + List s = Bot.GetMonsters().Where(card => card != null && card.Level == 5 && card.Id == CardId.DivineroftheHerald && card.IsFaceup()).ToList(); + if (s.Count >= 0) + { + List res = new List() { s.FirstOrDefault() }; + res.AddRange(Bot.GetMonsters().Where(card => card != null && card.Level == 5 && card.Id == CardId.ElShaddollWinda && card.IsFaceup())); + res.AddRange(Bot.GetMonsters().Where(card => card != null && card.Level == 5 && card.IsFaceup())); + AI.SelectMaterials(res); + SetSpSummon(); + return true; + } + } + else if (scards.Any(card => card != null && card.Level == 6) && mcards.Any(card => card != null && card.Level == 4)) { SetSpSummon(); return true; } + return false; + + } + private bool SprightElfEffect() + { + ClientCard card = Util.GetLastChainCard(); + if (card != null && card.Controller == 0) return false; + SetSpSummon(); + return true; + } + private bool FusionDeckCheck() + { + return (CheckRemainInDeck(CardId.TearlamentsHavnis) > 0 && !activate_TearlamentsHavnis_2) + || (CheckRemainInDeck(CardId.TearlamentsMerrli) > 0 && !activate_TearlamentsMerrli_2) + || (CheckRemainInDeck(CardId.TearlamentsScheiren) > 0 && !activate_TearlamentsScheiren_2); + } + private List GetCardsIdSendToHand() + { + List ids = new List(); + if (!activate_TearlamentsScheiren_1 && !Bot.HasInHand(CardId.TearlamentsScheiren) && CheckRemainInDeck(CardId.TearlamentsScheiren) > 0 && Bot.Hand.Count(card => card != null && card.HasType(CardType.Monster)) > 0) ids.Add(CardId.TearlamentsScheiren); + if (!activate_TearlamentsMerrli_1 && !Bot.HasInHand(CardId.TearlamentsMerrli) && CheckRemainInDeck(CardId.TearlamentsMerrli) > 0) ids.Add(CardId.TearlamentsMerrli); + if (!activate_TearlamentsReinoheart_1 && !Bot.HasInHand(CardId.TearlamentsReinoheart) && CheckRemainInDeck(CardId.TearlamentsReinoheart) > 0) ids.Add(CardId.TearlamentsReinoheart); + if (!activate_TearlamentsScheiren_1 && !Bot.HasInHand(CardId.TearlamentsScheiren) && CheckRemainInDeck(CardId.TearlamentsScheiren) > 0) ids.Add(CardId.TearlamentsScheiren); + if (!activate_TearlamentsHavnis_1 && !Bot.HasInHand(CardId.TearlamentsHavnis) && CheckRemainInDeck(CardId.TearlamentsHavnis) > 0) + { + if (Duel.Player == 0 && Duel.Phase != DuelPhase.End) ids.Add(CardId.TearlamentsHavnis); + else ids.Insert(0, CardId.TearlamentsHavnis); + } + ids.AddRange(new List() { CardId.TearlamentsScheiren, CardId.TearlamentsMerrli, CardId.TearlamentsHavnis, CardId.TearlamentsReinoheart }); + return ids; + } + public int CheckRemainInDeck(int id) + { + switch (id) + { + case CardId.ShaddollBeast: + return Bot.GetRemainingCount(CardId.ShaddollBeast, 1); + case CardId.ShaddollDragon: + return Bot.GetRemainingCount(CardId.ShaddollDragon, 1); + case CardId.TearlamentsScheiren: + return Bot.GetRemainingCount(CardId.TearlamentsScheiren, 3); + case CardId.TearlamentsReinoheart: + return Bot.GetRemainingCount(CardId.TearlamentsReinoheart, 2); + case CardId.KelbektheAncientVanguard: + return Bot.GetRemainingCount(CardId.KelbektheAncientVanguard, 3); + case CardId.MudoratheSwordOracle: + return Bot.GetRemainingCount(CardId.MudoratheSwordOracle, 3); + case CardId.AgidotheAncientSentinel: + return Bot.GetRemainingCount(CardId.AgidotheAncientSentinel, 3); + case CardId.KeldotheSacredProtector: + return Bot.GetRemainingCount(CardId.KeldotheSacredProtector, 2); + case CardId.NaelshaddollAriel: + return Bot.GetRemainingCount(CardId.NaelshaddollAriel, 1); + case CardId.TearlamentsHavnis: + return Bot.GetRemainingCount(CardId.TearlamentsHavnis, 3); + case CardId.TearlamentsMerrli: + return Bot.GetRemainingCount(CardId.TearlamentsMerrli, 3); + case CardId.DivineroftheHerald: + return Bot.GetRemainingCount(CardId.DivineroftheHerald, 3); + case CardId.HeraldofOrangeLight: + return Bot.GetRemainingCount(CardId.HeraldofOrangeLight, 3); + case CardId.HeraldofGreenLight: + return Bot.GetRemainingCount(CardId.HeraldofGreenLight, 3); + case CardId.Eva: + return Bot.GetRemainingCount(CardId.Eva, 1); + case CardId.TearlamentsScream: + return Bot.GetRemainingCount(CardId.TearlamentsScream, 1); + case CardId.PrimevalPlanetPerlereino: + return Bot.GetRemainingCount(CardId.PrimevalPlanetPerlereino, 2); + case CardId.TearlamentsSulliek: + return Bot.GetRemainingCount(CardId.TearlamentsSulliek, 2); + default: + return 0; + } + } + private bool PredaplantDragostapeliaEffect() + { + ClientCard card = Util.GetLastChainCard(); + if (card != null && card.Controller != 0 && card.Location == CardLocation.MonsterZone && !card.IsShouldNotBeTarget() && !e_PredaplantDragostapelia_cards.Contains(card)) + { + chain_PredaplantDragostapelia = card; + return true; + } + return false; + } + private bool UnderworldGoddessoftheClosedWorldSummon_2() + { + return UnderworldGoddessoftheClosedWorldLinkSummon(false); + } + private bool UnderworldGoddessoftheClosedWorldLinkSummon(bool filter = true) + { + if (Duel.Turn == 1 || Enemy.GetMonsterCount() <= 0) return false; + List e_cards = Enemy.GetMonsters().Where(card => card != null && card.IsFaceup() && card.IsAttack()).ToList(); + List b_cards = Bot.GetMonsters().Where(card => card != null && card.IsFaceup() && card.IsAttack()).ToList(); + if ((e_cards.Count <= 0 || b_cards.Count <= 0) && Enemy.MonsterZone.GetDangerousMonster() == null) return false; + e_cards.Sort(CardContainer.CompareCardAttack); + e_cards.Reverse(); + b_cards.Sort(CardContainer.CompareCardAttack); + b_cards.Reverse(); + if ((e_cards[0].Attack > b_cards[0].Attack && (e_cards[0].IsShouldNotBeTarget() || e_cards[0].Attack >= 2500)) || Enemy.MonsterZone.GetDangerousMonster() != null) + { + List e_materials = new List(); + List m_materials = new List(); + List resMaterials = new List(); + foreach (var card in Enemy.GetMonsters()) + { + if (card != null && card.HasType(CardType.Effect) && card.IsFaceup()) + e_materials.Add(card); + } + if (e_materials.Count() <= 0) return false; + List mcards = Bot.GetMonsters(); + mcards.Sort(CardContainer.CompareCardAttack); + foreach (var card in mcards) + { + if (card == null || card.IsFacedown()) continue; + if (card.Id == CardId.SprightElf && summon_SprightElf) continue; + if (card.LinkCount < 3 && !(no_link_ids.Contains(card.Id) & filter) && card.IsFaceup() && card.HasType(CardType.Effect)) + { + if (card.Id == CardId.ElShaddollWinda) m_materials.Insert(0, card); + else m_materials.Add(card); + } + } + if (m_materials.Count() < 3) return false; + int link_count = 0; + int e_link_count = 0; + e_materials.Sort(CardContainer.CompareCardAttack); + e_materials.Reverse(); + foreach (var card in e_materials) + { + if (!resMaterials.Contains(card)) + resMaterials.Add(card); + e_link_count += (card.HasType(CardType.Link)) ? (card.LinkCount == 2 ? 2 : 1) : 1; + if (e_link_count >= 1) break; + } + if (e_link_count <= 0) return false; + link_count += e_link_count; + foreach (var card in m_materials) + { + if (e_link_count <= 1) + { + if (!resMaterials.Contains(card) && card.LinkCount < 3) + { + resMaterials.Add(card); + link_count += (card.HasType(CardType.Link)) ? card.LinkCount : 1; + if (link_count >= 5) break; + } + } + else + { + resMaterials.Add(card); + link_count += 1; + if (link_count >= 5) break; + } + } + if (link_count >= 5) { AI.SelectMaterials(resMaterials); SetSpSummon(); return true; } + } + return false; + } + private bool TearlamentsKaleidoHeartEffect() + { + if (Card.Location == CardLocation.MonsterZone) + { + activate_TearlamentsKaleidoHeart_1 = true; + return DestoryEnemyCard(); + } + else + { + activate_TearlamentsKaleidoHeart_2 = true; + return true; + } + } + private bool UnderworldGoddessoftheClosedWorldSummon() + { + if (Bot.HasInMonstersZone(CardId.ElShaddollWinda, true, false, true)) + { + return UnderworldGoddessoftheClosedWorldLinkSummon(); + } + return false; + } + private bool UnderworldGoddessoftheClosedWorldSummon_3() + { + return UnderworldGoddessoftheClosedWorldLinkSummon(); + } + private bool SpellActivate() + { + return Card.Location == CardLocation.Hand || (Card.Location == CardLocation.SpellZone && Card.IsFacedown()); + } + private bool SprightElfSummon_2() + { + List key_cards = Bot.GetMonsters().Where(card => card != null && card.Id == CardId.ElShaddollWinda && !card.IsDisabled() && card.IsFaceup()).ToList(); + if (key_cards.Count <= 0 || key_cards.Count > 1 || !IsAvailableLinkZone()) return false; + List cards = Bot.GetMonsters().Where(card => card != null && card.Level == 2 && card.Id != CardId.ElShaddollWinda && card.IsFaceup()).ToList(); + if (cards.Count <= 0) return false; + cards.Sort(CardContainer.CompareCardAttack); + cards.Insert(0, key_cards[0]); + AI.SelectMaterials(cards); + SetSpSummon(); + return true; + } + private bool FADawnDragsterSummon() + { + List key_cards = Bot.GetMonsters().Where(card => card != null && card.Id == CardId.ElShaddollWinda && !card.IsDisabled() && card.IsFaceup()).ToList(); + if (key_cards.Count <= 0 || key_cards.Count > 1 ) return false; + SetSpSummon(); + IList cards = CardsIdToClientCards(new List() { CardId.DivineroftheHerald }, Bot.GetMonsters().Where(card => card != null && card.IsFaceup()).ToList()); + if (cards.Count > 0) key_cards.Insert(0, cards[0]); + AI.SelectMaterials(key_cards); + return true; + } + private bool IPSummon_2() + { + if (Bot.GetMonsterCount() <= 2) return false; + List key_cards = Bot.GetMonsters().Where(card => card != null && card.Id == CardId.ElShaddollWinda && !card.IsDisabled() && card.IsFaceup()).ToList(); + if (key_cards.Count <= 0 || key_cards.Count > 1 || !IsAvailableLinkZone()) return false; + List cards = Bot.GetMonsters().Where(card => card != null && !card.HasType(CardType.Link) && !no_link_ids.Contains(card.Id) && card.IsFaceup()).ToList(); + cards.Sort(CardContainer.CompareCardAttack); + cards.Insert(0, key_cards[0]); + AI.SelectMaterials(cards); + SetSpSummon(); + return true; + } + private bool SprightElfSummon() + { + if (!IsAvailableLinkZone()) return false; + List cards = GetZoneCards(CardLocation.MonsterZone, Bot).Where(card=>card != null && card.IsFaceup()).ToList(); + cards.Sort(CardContainer.CompareCardAttack); + List materials1 = new List(); + List materials2 = new List(); + List materials3 = new List(); + List materials4 = new List(); + foreach (var card in cards) + { + if (card == null) continue; + if (card.Level == 2 && materials1.Count <= 0) materials1.Add(card); + else if(link_card != null && card == link_card) materials2.Insert(0, link_card); + else if (!card.IsDisabled() && no_link_ids.Contains(card.Id)) materials4.Add(card); + else + { + if(card.Level <= 2) materials2.Add(card); + else materials3.Add(card); + } + + } + if (materials1.Count <= 0 || materials2.Count + materials3.Count <= 0) return false; + materials3.Sort(CardContainer.CompareCardLevel); + materials3.Reverse(); + materials1.AddRange(materials2); + materials1.AddRange(materials3); + summon_SprightElf = true; + AI.SelectMaterials(materials1); + SetSpSummon(); + return true; + } + private bool AbyssDwellerSummon() + { + if (Duel.Turn > 1 && Duel.Phase < DuelPhase.Main2) return false; + SetSpSummon(); + return true; + } + private bool IPEffect() + { + if (Duel.LastChainPlayer == 0) return false; + if (!Bot.HasInExtra(CardId.KnightmareUnicorn) && !Bot.HasInExtra(CardId.MekkKnightCrusadiaAvramax)) return false; + List m = new List(); + List pre_m = new List(); + if (Bot.HasInExtra(CardId.UnderworldGoddessoftheClosedWorld)) + { + List e_cards = Enemy.GetMonsters().Where(card => card != null && card.IsFaceup() && card.IsAttack()).ToList(); + List b_cards = Bot.GetMonsters().Where(card => card != null && card.IsFaceup() && card.IsAttack()).ToList(); + if (e_cards.Count > 0 && b_cards.Count > 0) + { + e_cards.Sort(CardContainer.CompareCardAttack); + e_cards.Reverse(); + b_cards.Sort(CardContainer.CompareCardAttack); + b_cards.Reverse(); + if ((e_cards[0].Attack > b_cards[0].Attack && (e_cards[0].IsShouldNotBeTarget() || e_cards[0].Attack >= 2500)) || Enemy.MonsterZone.GetDangerousMonster() != null) + { + pre_m = Bot.GetMonsters().Where(card => card != null && card != Card && card.IsFaceup() && ((card.HasType(CardType.Link) && card.LinkCount < 3) || (card.HasType(CardType.Fusion | CardType.Xyz | CardType.Synchro))) && (!no_link_ids.Contains(card.Id) || card.IsDisabled())).ToList(); + List pre_m2 = new List(); + pre_m2.Add(Enemy.MonsterZone.GetDangerousMonster() == null ? e_cards[0] : Enemy.MonsterZone.GetDangerousMonster()); + pre_m2.AddRange(e_cards); + int link_count = 0; + foreach (var card in pre_m) + { + if (card == null || (card.Id == CardId.SprightElf && summon_SprightElf)) continue; + link_count += 1; + m.Add(card); + if (link_count >= 2) break; + } + if (link_count > 2) + { + AI.SelectCard(CardId.UnderworldGoddessoftheClosedWorld); + m.Insert(0, Card); + m.Add(pre_m2.FirstOrDefault()); + AI.SelectMaterials(m); + return true; + } + } + } + } + if (Bot.HasInExtra(CardId.MekkKnightCrusadiaAvramax)) + { + m.Clear(); + pre_m = Bot.GetMonsters().Where(card => card != null && card != Card && card.IsFaceup() && ((card.HasType(CardType.Link) && card.LinkCount < 3) || (card.HasType(CardType.Fusion|CardType.Xyz|CardType.Synchro))) && (!no_link_ids.Contains(card.Id) || card.IsDisabled())).ToList(); + if (pre_m.Count > 0) + { + pre_m.Sort(CardContainer.CompareCardAttack); + int link_count = 0; + foreach (var card in pre_m) + { + if (card == null || (card.Id == CardId.SprightElf && summon_SprightElf)) continue; + link_count += (card.HasType(CardType.Link)) ? card.LinkCount : 1; + m.Add(card); + if (link_count >= 2) break; + } + if (link_count > 2) + { + AI.SelectCard(CardId.MekkKnightCrusadiaAvramax); + m.Insert(0, Card); + AI.SelectMaterials(m); + return true; + } + } + } + if (Bot.HasInExtra(CardId.KnightmareUnicorn)) + { + List pre_cards = GetZoneCards(CardLocation.Onfield,Enemy); + if (Bot.Hand.Count > 0 && pre_cards.Count(card => card != null && !card.IsShouldNotBeTarget()) > 0) + { + m.Clear(); + pre_m = Bot.GetMonsters().Where(card => card != null && card != Card && card.IsFaceup() && !no_link_ids.Contains(card.Id) && card.Id != Card.Id).ToList(); + if (pre_m.Count > 0) + { + pre_m.Sort(CardContainer.CompareCardAttack); + int link_count = 0; + foreach (var card in pre_m) + { + if (card == null || (card.Id == CardId.SprightElf && summon_SprightElf)) continue; + link_count += (card.HasType(CardType.Link)) ? card.LinkCount : 1; + m.Add(card); + if (link_count >= 1) break; + } + if (link_count > 1) + { + AI.SelectCard(CardId.KnightmareUnicorn); + m.Insert(0, Card); + AI.SelectMaterials(m); + return true; + } + } + } + } + return false; + } + private bool IPSummon() + { + if (Duel.Turn > 1 && Duel.Phase < DuelPhase.Main2) return false; + if (!Bot.HasInMonstersZone(CardId.SprightElf) || Bot.GetMonsterCount() <= 2) return false; + if (Bot.ExtraDeck.Count(card => card != null && card.LinkCount > 2) <= 0 || !IsAvailableLinkZone()) return false; + List cards = GetZoneCards(CardLocation.MonsterZone, Bot).Where(card => card != null && card.IsFaceup() && !card.HasType(CardType.Link)).ToList(); + List materials = new List(); + foreach (var card in cards) + { + if (card == null || (!card.IsDisabled() && no_link_ids.Contains(card.Id)) + || card.LinkCount >= 2) continue; + if (link_card != null && card == link_card) materials.Insert(0, link_card); + else materials.Add(card); + } + if (materials.Count <= 1) return false; + materials.Sort(CardContainer.CompareCardAttack); + AI.SelectMaterials(materials); + SetSpSummon(); + return true; + } + private bool KnightmareUnicornEffect() + { + List cards = GetZoneCards(CardLocation.Onfield,Enemy); + cards = cards.Where(card => card != null && !card.IsShouldNotBeTarget() && (tgcard == null || card != tgcard)).ToList(); + if (cards.Count <= 0) return false; + List ids = new List(); + if (!activate_KelbektheAncientVanguard_2) ids.Add(CardId.KelbektheAncientVanguard); + if (!activate_AgidotheAncientSentinel_2) ids.Add(CardId.AgidotheAncientSentinel); + ids.AddRange(new List() { CardId.MudoratheSwordOracle, CardId.KeldotheSacredProtector, CardId.ShaddollBeast, CardId.ShaddollDragon, CardId.TearlamentsSulliek, CardId.Eva, CardId.TearlamentsReinoheart }); + cards.Sort(CardContainer.CompareCardAttack); + cards.Reverse(); + AI.SelectCard(ids); + AI.SelectNextCard(cards); + return true; + + } + private bool MekkKnightCrusadiaAvramaxSummon() + { + if (!IsAvailableLinkZone() || (Duel.Turn > 1 && Duel.Phase < DuelPhase.Main2)) return false; + if (Bot.HasInMonstersZone(CardId.SprightElf, false, false, true) && !summon_SprightElf + && Bot.HasInMonstersZone(CardId.IP, false, false, true)) + { + List m1 = Bot.GetMonsters().Where(card => card != null && card.IsFaceup() && card.Id == CardId.SprightElf).ToList(); + List m2 = Bot.GetMonsters().Where(card => card != null && card.IsFaceup() && card.Id == CardId.IP).ToList(); + if (m1.Count <= 0 || m2.Count <= 0) return false; + List res = new List() { m1[0] }; + res.Add(m2[0]); + AI.SelectMaterials(res); + SetSpSummon(); + return true; + } + else + { + List cards = Bot.GetMonsters().Where(card => card != null && card.LinkCount != 2 &&card.IsFaceup() && (!no_link_ids.Contains(card.Id) || card.IsDisabled()) + && card.IsExtraCard() && card.Id != CardId.KnightmareUnicorn).ToList(); + List cards2 = Bot.GetMonsters().Where(card => card != null && card.IsFaceup() && card.Id == CardId.KnightmareUnicorn).ToList(); + if (cards.Count <= 0 || cards2.Count <= 0) return false; + cards.Sort(CardContainer.CompareCardAttack); + List res = new List(); + res.Add(cards.FirstOrDefault()); + res.Add(cards.FirstOrDefault()); + AI.SelectMaterials(res); + SetSpSummon(); + return true; + } + } + private bool MekkKnightCrusadiaAvramaxEffect() + { + if (Card.Location == CardLocation.MonsterZone) return true; + else return DestoryEnemyCard(); + } + private bool KnightmareUnicornSummon() + { + if (Bot.Hand.Count <= 0) return false; + if (!IsAvailableLinkZone()) return false; + List ecards = GetZoneCards(CardLocation.Onfield, Enemy); + if (ecards.Count(card => card != null && !card.IsShouldNotBeTarget()) <= 0) return false; + List tmepMaterials = new List(); + List resMaterials = new List(); + foreach (var card in Bot.GetMonsters()) + { + if (card == null || card.IsFacedown() || (card.Id == CardId.SprightElf && summon_SprightElf) + || (no_link_ids.Contains(card.Id)) || card.Id == CardId.TearlamentsKitkallos) continue; + if (tmepMaterials.Count(_card => _card != null && _card.Id == card.Id) <= 0) + tmepMaterials.Add(card); + } + int link_count = 0; + tmepMaterials.Sort(CardContainer.CompareCardAttack); + List materials = new List(); + List link_materials = tmepMaterials.Where(card => card != null && card.LinkCount == 2).ToList(); + List normal_materials = tmepMaterials.Where(card => card != null && card.LinkCount != 2).ToList(); + if (link_materials.Count() >= 1) + { + materials.Add(link_materials.FirstOrDefault()); + materials.AddRange(normal_materials); + } + else + { + materials.AddRange(normal_materials); + materials.AddRange(link_materials); + } + if (materials.Count(card => card != null && card.LinkCount >= 2) > 1 + && materials.Count(card => card != null && card.LinkCount < 2) < 1) return false; + foreach (var card in materials) + { + if (!resMaterials.Contains(card) && card.LinkCount < 3) + { + resMaterials.Add(card); + link_count += (card.HasType(CardType.Link)) ? card.LinkCount : 1; + if (link_count >= 3) break; + } + } + if (link_count >= 3) { AI.SelectMaterials(resMaterials);SetSpSummon(); return true; } + return false; + } + private bool BaronnedeFleurEffect() + { + if (ActivateDescription == Util.GetStringId(CardId.BaronnedeFleur, 0)) + { + return DestoryEnemyCard(); + } + if (ActivateDescription == Util.GetStringId(CardId.BaronnedeFleur, 1)) + { + return Duel.LastChainPlayer != 0; + } + return false; + + } + private bool PrimevalPlanetPerlereinoEffect() + { + if (SpellActivate()) return true; + else + { + ClientCard card = Util.GetLastChainCard(); + if (card != null && card.Controller == 0 && card.Id == CardId.TearlamentsKaleidoHeart) return false; + return DestoryEnemyCard(); + } + } + + private bool DestoryEnemyCard() + { + ClientCard card = Util.GetProblematicEnemyMonster(0, true); + if (card != null && (tgcard == null || tgcard != card)) + { + AI.SelectCard(card); + tgcard = card; + return true; + } + card = Util.GetBestEnemySpell(true); + if (card != null && (tgcard == null || tgcard != card)) + { + AI.SelectCard(card); + tgcard = card; + return true; + } + List cards = GetZoneCards(CardLocation.Onfield, Enemy); + cards = cards.Where(tcard => tcard != null && !tcard.IsShouldNotBeTarget() && (tgcard == null || tcard != tgcard)).ToList(); + if (cards.Count <= 0) return false; + cards.Sort(CardContainer.CompareCardAttack); + cards.Reverse(); + tgcard = cards[0]; + AI.SelectCard(cards); + if (Card.Id == CardId.PrimevalPlanetPerlereino) activate_PrimevalPlanetPerlereino_2 = true; + return true; + } + private bool ElderEntityNtssEffect() + { + if (Card.Location == CardLocation.Grave) + { + return DestoryEnemyCard(); + } + else return true; + + } + private bool DivineroftheHeraldSummon() + { + if ((CheckRemainInDeck(CardId.KelbektheAncientVanguard) > 0 && !activate_KelbektheAncientVanguard_2) + || (CheckRemainInDeck(CardId.AgidotheAncientSentinel) > 0 && !activate_AgidotheAncientSentinel_2)) + { + summoned = true; + return true; + } + return false; + } + private bool EvaEffect() + { + List cards = Bot.GetGraveyardMonsters().Where(card => card != null && card.HasAttribute(CardAttribute.Light) && card.HasRace(CardRace.Fairy) && card != Card).ToList(); + if (cards.Count <= 0) return false; + activate_Eva = true; + return true; + } + private bool DivineroftheHeraldEffect() + { + if (Card.Location == CardLocation.MonsterZone) + { + if (Duel.Player == 0) + { + if ((activate_KelbektheAncientVanguard_2 || CheckRemainInDeck(CardId.KelbektheAncientVanguard) <= 0) + && (activate_AgidotheAncientSentinel_2 || CheckRemainInDeck(CardId.AgidotheAncientSentinel) <= 0) && Bot.HasInExtra(CardId.SprightElf)) + { + List cards = Bot.GetMonsters().Where(card => card != null && card.IsFaceup() && !no_link_ids.Contains(card.Id) && card != Card).ToList(); + if (cards.Count() >= 1) return false; + } + } + + activate_DivineroftheHerald = true; + return true; + } + else + { + return true; + } + } + private bool TearlamentsScreamEffect_1() + { + return SpellActivate(); + } + private bool MudoratheSwordOracleEffect() + { + if (Card.Location == CardLocation.Hand) + { + if ((Bot.Hand.Count(card => card != null && card.Id == CardId.AgidotheAncientSentinel) <= 0 || activate_AgidotheAncientSentinel_2) + && (Bot.Hand.Count(card => card != null && card.Id == CardId.KelbektheAncientVanguard) <= 0 || activate_KelbektheAncientVanguard_2) && + !summoned && !Bot.HasInHand(CardId.MudoratheSwordOracle) && !Bot.HasInHand(CardId.KeldotheSacredProtector)) return false; + IList cardsid = new List(); + if (!activate_AgidotheAncientSentinel_2) cardsid.Add(CardId.AgidotheAncientSentinel); + if (!activate_KelbektheAncientVanguard_2) cardsid.Add(CardId.KelbektheAncientVanguard); + cardsid.Add(CardId.KeldotheSacredProtector); + cardsid.Add(CardId.MudoratheSwordOracle); + if (Card.Id == CardId.MudoratheSwordOracle) activate_MudoratheSwordOracle_2 = true; + else if (Card.Id == CardId.KeldotheSacredProtector) activate_KeldotheSacredProtector_2 = true; + AI.SelectCard(cardsid); + SetSpSummon(); + return true; + } + else if (Card.Location == CardLocation.Grave) + { + ClientCard chain_card = Util.GetLastChainCard(); + if (chain_card != null && chain_card.Controller == 0 && (chain_card.Id == CardId.TearlamentsRulkallos || chain_card.Id == CardId.UnderworldGoddessoftheClosedWorld || chain_card.Id == CardId.FADawnDragster)) return false; + if (GetZoneCards(CardLocation.Grave, Enemy).Count() <= 0 && Bot.Deck.Count >= 3) return false; + if ((Duel.CurrentChain == null || Duel.CurrentChain.Count <= 0) && Bot.Deck.Count >= 3) return false; + if (Duel.CurrentChain.Any(card => card != null && card.Controller == 0 && (card.Id == CardId.MudoratheSwordOracle || card.Id == CardId.KeldotheSacredProtector) || card.Id == CardId.NaelshaddollAriel)) return false; + if (Duel.CurrentChain.Any(card => card != null && card.Controller == 0 && card.Id == CardId.ShaddollBeast) && Bot.Deck.Count <= 0) + { + if (Card.Id == CardId.MudoratheSwordOracle) activate_MudoratheSwordOracle_2 = true; + else if (Card.Id == CardId.KeldotheSacredProtector) activate_KeldotheSacredProtector_2 = true; + return true; + } + foreach (var card in Duel.ChainTargets) + { + if (card == null) continue; + if ((card == Card && (Bot.Deck.Count < 5 || Enemy.Graveyard.Count(ccard => ccard != null && !key_no_send_to_deck_ids.Contains(ccard.Id)) > 0)) + || (card.Controller == 1 && card.Location == CardLocation.Grave)) + { + if (Card.Id == CardId.MudoratheSwordOracle) activate_MudoratheSwordOracle_2 = true; + else if (Card.Id == CardId.KeldotheSacredProtector) activate_KeldotheSacredProtector_2 = true; + return true; + } + } + foreach (var card in Duel.CurrentChain) + { + if (card == null || card.Controller == 0 || card.Location != CardLocation.Grave) continue; + if (key_send_to_deck_ids.Contains(card.Id)) + { + if (Card.Id == CardId.MudoratheSwordOracle) activate_MudoratheSwordOracle_2 = true; + else if (Card.Id == CardId.KeldotheSacredProtector) activate_KeldotheSacredProtector_2 = true; + return true; + } + } + if (Duel.Phase == DuelPhase.End && Bot.Deck.Count < 3 && Bot.Graveyard.Count > 0) + { + if (Card.Id == CardId.MudoratheSwordOracle) activate_MudoratheSwordOracle_2 = true; + else if (Card.Id == CardId.KeldotheSacredProtector) activate_KeldotheSacredProtector_2 = true; + return true; + } + return false; + } + else + { + if (Duel.Phase == DuelPhase.End && Bot.Deck.Count < 3 && Bot.Graveyard.Count > 0) + { + if (Card.Id == CardId.MudoratheSwordOracle) activate_MudoratheSwordOracle_2 = true; + else if (Card.Id == CardId.KeldotheSacredProtector) activate_KeldotheSacredProtector_2 = true; + return true; + } + return false; + } + } + + private bool TearlamentsScheirenEffect() + { + if (Card.Location == CardLocation.Grave) + { + return FusionEffect(CardId.TearlamentsScheiren); + } + else + { + + activate_TearlamentsScheiren_1 = true; + SetSpSummon(); + return true; + } + } + private bool NaelshaddollArielEffect() + { + if (Card.Location == CardLocation.Grave) + { + return Enemy.Graveyard.Count(card => card != null && !key_no_remove_ids.Contains(card.Id)) > 0; + } + else + { + SetSpSummon(); + return true; + } + } + private bool IsShouldSummonFusion(int setcode = -1,int race = -1,bool all = false,int flag = 0x1f) + { + List cards = GetZoneCards(CardLocation.MonsterZone, Bot).Where(card => card != null && card.IsFaceup()).ToList(); + cards.AddRange(GetZoneCards(CardLocation.Grave | CardLocation.Hand, Bot)); + int xcount_1 = 0; + int xcount_2 = 0; + int xcount_3 = 0; + if ((flag & (int)Flag.TearlamentsKitkallos)>0 && Bot.ExtraDeck.Count(card => card != null && card.Id == CardId.TearlamentsKitkallos) > 0) + { + foreach (var card in cards) + { + if (card == null) continue; + if (card.Id == CardId.TearlamentsRulkallos && card.Location == CardLocation.MonsterZone && !card.IsDisabled()) continue; + if ((YGO_SCRIPT ? card.HasSetcode(0x181) : card.HasSetcode(0x182)) && card.HasType(CardType.Monster)) + { + ++xcount_1; + if (card.HasRace(CardRace.Aqua)) { --xcount_1; ++xcount_3; } + } + else if (card.HasRace(CardRace.Aqua)) ++xcount_2; + } + if (YGO_SCRIPT ? setcode == 0x181 : setcode == 0x182) + { + ++xcount_1; + if (race == (int)CardRace.Aqua) { --xcount_1; ++xcount_3; } + } + else if (race == (int)CardRace.Aqua) ++xcount_2; + if (xcount_3 > 1 || (xcount_1 > 0 && xcount_3 > 0) || (xcount_1 > 0 && xcount_2 > 0) || (xcount_2 > 0 && xcount_3 > 0)) return true; + } + if ((flag & (int)Flag.TearlamentsRulkallos) > 0 && Bot.ExtraDeck.Count(card => card != null && card.Id == CardId.TearlamentsRulkallos) > 0) + { + xcount_1 = 0; + xcount_2 = 0; + foreach (var card in cards) + { + if (card == null) continue; + if (card.Id == CardId.TearlamentsKitkallos && xcount_1 <= 0) ++xcount_1; + else if ((YGO_SCRIPT ? card.HasSetcode(0x181) : card.HasSetcode(0x182)) && card.HasType(CardType.Monster)) ++xcount_2; + } + if (YGO_SCRIPT ? setcode == 0x181 : setcode == 0x182) ++xcount_2; + if (xcount_1 > 0 && xcount_2 > 0) return true; + } + if ((flag & (int)Flag.TearlamentsKaleidoHeart) > 0 && Bot.ExtraDeck.Count(card => card != null && card.Id == CardId.TearlamentsKaleidoHeart) > 0) + { + xcount_1 = 0; + xcount_2 = 0; + foreach (var card in cards) + { + if (card == null) continue; + if (card.Id == CardId.TearlamentsRulkallos && card.Location == CardLocation.MonsterZone && !card.IsDisabled()) continue; + if (card.Id == CardId.TearlamentsReinoheart && xcount_1 <= 0) ++xcount_1; + else if (card.HasRace(CardRace.Aqua)) ++xcount_2; + } + if (race == (int)CardRace.Aqua) ++xcount_2; + if (xcount_1 > 0 && xcount_2 > 0) return true; + } + if ((flag & (int)Flag.PredaplantDragostapelia) > 0 && Bot.ExtraDeck.Count(card => card != null && card.Id == CardId.PredaplantDragostapelia) > 0) + { + xcount_1 = 0; + foreach (var card in cards) + { + if (card == null) continue; + if (card.Id == CardId.TearlamentsRulkallos && card.Location == CardLocation.MonsterZone && !card.IsDisabled()) continue; + if (((Bot.GetMonstersInMainZone().Count > 4 && card.Location == CardLocation.MonsterZone)|| Bot.GetMonstersInMainZone().Count<=4) && card.HasType(CardType.Fusion)) ++xcount_1; + } + if (xcount_1 > 0) return true; + } + if (all) + { + if ((flag & (int)Flag.ElShaddollWinda) > 0 && Bot.ExtraDeck.Count(card => card != null && card.Id == CardId.ElShaddollWinda) > 0) + { + List materials_1 = new List(); + List materials_2 = new List(); + foreach (var card in cards) + { + if (card == null) continue; + if (card.HasSetcode(0x9d)) materials_1.Add(card); + else if ((card.Id == CardId.TearlamentsHavnis || card.Id == CardId.TearlamentsMerrli + || card.Id == CardId.TearlamentsScheiren) && card.HasAttribute(CardAttribute.Dark)) + materials_2.Add(card); + } + xcount_1 = materials_1.Count; + xcount_2 = materials_2.Count; + if ((YGO_SCRIPT ? setcode == 0x181 : setcode == 0x182) && race == (int)CardRace.Aqua) + { + ++xcount_2; + } + if (xcount_1 > 0 && xcount_2 > 0) return true; + } + } + return false; + } + private bool TearlamentsRulkallosEffect() + { + if (Card.Location == CardLocation.Grave) + { + activate_TearlamentsRulkallos_2 = true; + SetSpSummon(); + return true; + } + else + { + activate_TearlamentsRulkallos_1 = true; + return true; + } + } + private bool AgidotheAncientSentinelEffect() + { + if (Card.Location == CardLocation.Hand) + { + if (Duel.Player == 1) + { + if (!activate_AgidotheAncientSentinel_2 && (Bot.HasInHand(CardId.HeraldofOrangeLight) || Bot.HasInHand(CardId.HeraldofGreenLight)) + && Bot.Hand.Count(card => card != null && card.Id == CardId.AgidotheAncientSentinel) <= 1) return false; + } + SetSpSummon(); + return true; + } + else + { + activate_AgidotheAncientSentinel_2 = true; + return true; + } + } + private bool KelbektheAncientVanguardEffect() + { + if (Card.Location == CardLocation.Hand) + { + if ((Bot.HasInHand(CardId.HeraldofOrangeLight) || Bot.HasInHand(CardId.HeraldofGreenLight)) + && !activate_KelbektheAncientVanguard_2) return false; + List cards = Enemy.GetMonsters(); + cards.Sort(CardContainer.CompareCardAttack); + cards.Reverse(); + AI.SelectCard(cards); + + SetSpSummon(); + return true; + } + else + { + activate_KelbektheAncientVanguard_2 = true; + return true; + } + } + private bool TearlamentsMerrliEffect() + { + if (Card.Location == CardLocation.MonsterZone) + { + activate_TearlamentsMerrli_1 = true; + return true; + } + else + { + return FusionEffect(CardId.TearlamentsMerrli); + } + } + private bool TearlamentsHavnisEffect() + { + if (Card.Location == CardLocation.Hand) + { + activate_TearlamentsHavnis_1 = true; + return true; + } + else + { + return FusionEffect(CardId.TearlamentsHavnis); + } + } + private bool SpellSet() + { + if (Card.Id == CardId.TearlamentsSulliek) return !Bot.GetSpells().Any(card => card != null && card.Id == CardId.TearlamentsSulliek && (card.IsFacedown() || (card.IsFaceup() && !card.IsDisabled()))); + return Card.HasType(CardType.QuickPlay) || Card.HasType(CardType.Trap); + } + private bool TearlamentsReinoheartEffect() + { + if (Card.Location == CardLocation.Grave) + { + List cards = Bot.Hand.Where(card => card != null && card.HasSetcode(YGO_SCRIPT ? 0x181 : 0x182)).ToList(); + List temp = new List(cards); + foreach (var card in temp) + { + if ((card.Id == CardId.TearlamentsScheiren && !activate_TearlamentsScheiren_1) + || (card.Id == CardId.TearlamentsMerrli && !summoned && !activate_TearlamentsMerrli_1)) + cards.Remove(card); + } + if (cards.Count() <= 0) return false; + activate_TearlamentsReinoheart_2 = true; + SetSpSummon(); + return true; + } + else + { + if (activate_TearlamentsHavnis_2 && activate_TearlamentsHavnis_2 && activate_TearlamentsScheiren_2) return false; + activate_TearlamentsReinoheart_1 = true; + return true; + } + } + private bool ShaddollDragonEffect() + { + if (Card.Location == CardLocation.Grave) + { + ClientCard card = Util.GetBestEnemySpell(); + List cards = Enemy.GetSpells().Where(ccard=> tgcard == null || tgcard != ccard).ToList(); + if (card != null && (tgcard == null || tgcard != card)) { AI.SelectCard(card); return true; } + else if (cards.Count > 0) { AI.SelectCard(cards); return true; } + return false; + } + else return true; + } + private bool TearlamentsKitkallosEffect() + { + if (ActivateDescription == Util.GetStringId(CardId.TearlamentsKitkallos, 1)) + { + if (Card.IsDisabled()) return false; + if (Bot.HasInMonstersZone(CardId.TearlamentsKitkallos) && !activate_TearlamentsKitkallos_3) AI.SelectCard(CardId.TearlamentsKitkallos); + else if (Bot.HasInMonstersZone(CardId.AgidotheAncientSentinel) && !activate_AgidotheAncientSentinel_2) AI.SelectCard(CardId.AgidotheAncientSentinel); + else if (Bot.HasInMonstersZone(CardId.KelbektheAncientVanguard) && !activate_KelbektheAncientVanguard_2) AI.SelectCard(CardId.KelbektheAncientVanguard); + else if (Bot.HasInMonstersZone(CardId.ShaddollDragon) && Enemy.GetSpellCount() > 0) AI.SelectCard(CardId.ShaddollDragon); + else if (!activate_TearlamentsScheiren_2 && Bot.HasInMonstersZone(CardId.TearlamentsScheiren) && IsShouldSummonFusion(YGO_SCRIPT ? 0x181 : 0x182, (int)CardRace.Aqua)) AI.SelectCard(CardId.TearlamentsScheiren); + else if (!activate_TearlamentsMerrli_2 && Bot.HasInMonstersZone(CardId.TearlamentsMerrli) && IsShouldSummonFusion(YGO_SCRIPT ? 0x181 : 0x182, (int)CardRace.Aqua)) AI.SelectCard(CardId.TearlamentsMerrli); + else if (!activate_TearlamentsHavnis_2 && Bot.HasInMonstersZone(CardId.TearlamentsHavnis) && IsShouldSummonFusion(YGO_SCRIPT ? 0x181 : 0x182, (int)CardRace.Aqua)) AI.SelectCard(CardId.TearlamentsHavnis); + else if (Bot.HasInMonstersZone(CardId.TearlamentsReinoheart) && !activate_TearlamentsReinoheart_1) AI.SelectCard(CardId.TearlamentsReinoheart); + else if (Bot.HasInMonstersZone(CardId.Eva) && Bot.Graveyard.Count(card => card != null && card.HasAttribute(CardAttribute.Light) && card.HasRace(CardRace.Fairy)) > 0 + && (CheckRemainInDeck(CardId.HeraldofGreenLight) > 0 || CheckRemainInDeck(CardId.HeraldofOrangeLight) > 0)) AI.SelectCard(CardId.Eva); + else if ((Bot.HasInExtra(CardId.TearlamentsRulkallos) && !Bot.HasInGraveyard(CardId.TearlamentsKitkallos)) + || (Bot.HasInExtra(CardId.PredaplantDragostapelia) && Bot.Graveyard.Count(card => card != null && card.HasType(CardType.Fusion)) <= 0)) AI.SelectCard(CardId.TearlamentsKitkallos); + else + { + List mcards = GetZoneCards(CardLocation.MonsterZone, Bot); + mcards.Sort(CardContainer.CompareCardAttack); + AI.SelectCard(mcards); + } + if (!activate_TearlamentsMerrli_1 && Bot.HasInGraveyard(CardId.TearlamentsMerrli)) AI.SelectNextCard(Bot.Graveyard.Where(card => card != null && card.Id == CardId.TearlamentsMerrli).ToList()); + else if (!activate_TearlamentsScheiren_1 && Bot.HasInGraveyard(CardId.TearlamentsScheiren)) AI.SelectNextCard(Bot.Graveyard.Where(card => card != null && card.Id == CardId.TearlamentsScheiren).ToList()); + else if (!activate_TearlamentsMerrli_1 && Bot.HasInHand(CardId.TearlamentsMerrli)) AI.SelectNextCard(Bot.Hand.Where(card => card != null && card.Id == CardId.TearlamentsMerrli).ToList()); + else if (!activate_TearlamentsReinoheart_1 && Bot.HasInGraveyard(CardId.TearlamentsReinoheart)) AI.SelectNextCard(Bot.Graveyard.Where(card => card != null && card.Id == CardId.TearlamentsReinoheart).ToList()); + else if (!activate_TearlamentsReinoheart_1 && Bot.HasInHand(CardId.TearlamentsReinoheart)) AI.SelectNextCard(Bot.Hand.Where(card => card != null && card.Id == CardId.TearlamentsReinoheart).ToList()); + else AI.SelectNextCard(CardId.TearlamentsMerrli); + activate_TearlamentsKitkallos_2 = true; + SetSpSummon(); + return true; + } + else if (Card.Location == CardLocation.Grave) + { + activate_TearlamentsKitkallos_3 = true; + return true; + } + else + { + if (Card.IsDisabled()) return false; + if (!YGO_SCRIPT) select_TearlamentsKitkallos = true; + activate_TearlamentsKitkallos_1 = true; + return true; + } + } + private bool TearlamentsSulliekEffect() + { + if (SpellActivate()) return true; + if (Card.Location == CardLocation.SpellZone) + { + ClientCard card = Util.GetLastChainCard(); + if (card != null && card.Controller == 1 && card.Location == CardLocation.MonsterZone + && !card.IsShouldNotBeTarget()) + { + if (_PredaplantDragostapelia != null && _PredaplantDragostapelia.Location == CardLocation.MonsterZone && _PredaplantDragostapelia.IsFaceup() + && e_PredaplantDragostapelia_cards.Contains(card)) return false; + chain_TearlamentsSulliek = card; + return true; + } + else + { + if (Duel.Player == 1 || Duel.Phase == DuelPhase.End) + { + if (((Bot.HasInMonstersZone(CardId.TearlamentsKitkallos,false,false,true) && !activate_TearlamentsKitkallos_3 && IsShouldSummonFusion(YGO_SCRIPT ? 0x181 : 0x182, (int)CardRace.Aqua) + && ((CheckRemainInDeck(CardId.TearlamentsHavnis) > 0 && !activate_TearlamentsHavnis_2) + || (CheckRemainInDeck(CardId.TearlamentsMerrli) > 0 && !activate_TearlamentsMerrli_2) + || (CheckRemainInDeck(CardId.TearlamentsScheiren) > 0 && !activate_TearlamentsScheiren_2)) && Bot.GetMonsterCount()<3) + ||(IsCanFusionSummon() && (Bot.HasInMonstersZone(CardId.TearlamentsScheiren,false,false,true) || Bot.HasInMonstersZone(CardId.TearlamentsHavnis,false,false,true) + || Bot.HasInMonstersZone(CardId.TearlamentsMerrli,false,false,true)))) && IsCanSpSummon()) + { + List cards = Enemy.GetMonsters().Where(ecard=> ecard != null && !ecard.IsShouldNotBeTarget() && ecard.IsFaceup()).ToList(); + if (cards.Count > 0) + { + cards.Sort(CardContainer.CompareCardAttack); + cards.Reverse(); + chain_TearlamentsSulliek = cards[0]; + } + else chain_TearlamentsSulliek = null; + return true; + + } + } + } + return false; + } + else + { + return true; + } + + } + } +} \ No newline at end of file diff --git a/Game/AI/Executor.cs b/Game/AI/Executor.cs index 6ef82be1..f3939ff8 100644 --- a/Game/AI/Executor.cs +++ b/Game/AI/Executor.cs @@ -165,6 +165,10 @@ public virtual IList OnCardSorting(IList cards) // For overriding return null; } + public virtual void OnSelectChain(IList cards) + { + return; + } public virtual bool OnSelectYesNo(int desc) { diff --git a/Game/GameAI.cs b/Game/GameAI.cs index a40c8596..e2d0e2c3 100644 --- a/Game/GameAI.cs +++ b/Game/GameAI.cs @@ -304,6 +304,7 @@ public IList OnSelectCard(IList cards, int min, int max, /// Index of the activated card or -1. public int OnSelectChain(IList cards, IList descs, bool forced) { + Executor.OnSelectChain(cards); foreach (CardExecutor exec in Executor.Executors) { for (int i = 0; i < cards.Count; ++i) From d4552d53315b91ad4761654e207ed7784bb9e8b7 Mon Sep 17 00:00:00 2001 From: mercury233 Date: Tue, 7 Feb 2023 21:07:06 +0800 Subject: [PATCH 07/18] fix proj --- WindBot.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/WindBot.csproj b/WindBot.csproj index c92d05a7..a3789f27 100644 --- a/WindBot.csproj +++ b/WindBot.csproj @@ -86,6 +86,7 @@ + From c28d069040713f517bfe024cee26b460223f649a Mon Sep 17 00:00:00 2001 From: mercury233 Date: Tue, 7 Feb 2023 21:08:32 +0800 Subject: [PATCH 08/18] rename YGO_SCRIPT to IS_YGOPRO --- Game/AI/Decks/TearlamentsExecutor.cs | 59 +++++++++++++++------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/Game/AI/Decks/TearlamentsExecutor.cs b/Game/AI/Decks/TearlamentsExecutor.cs index ed22808d..e7cb48e2 100644 --- a/Game/AI/Decks/TearlamentsExecutor.cs +++ b/Game/AI/Decks/TearlamentsExecutor.cs @@ -47,8 +47,11 @@ public class CardId public const int SprightElf = 27381364; public const int IP = 65741786; } - //true ? ygopro lua : edopro lua - bool YGO_SCRIPT = true; + // false: EDOPro + const bool IS_YGOPRO = true; + // YGOPro: 0x181 + // EDOPro: 0x182 + int SETCODE = 0x181; bool activate_TearlamentsScheiren_1 = false; bool activate_TearlamentsScheiren_2 = false; @@ -360,7 +363,7 @@ private bool CheckFusion(int listindex, int id) { case 0: case 2: - fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && (card.HasRace(CardRace.Aqua) || (card.HasType(CardType.Monster) && (YGO_SCRIPT ? card.HasSetcode(0x181) : card.HasSetcode(0x182))))).ToList(); + fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && (card.HasRace(CardRace.Aqua) || (card.HasType(CardType.Monster) && card.HasSetcode(SETCODE)))).ToList(); break; case 1: fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && card.Id == CardId.TearlamentsKitkallos).ToList(); @@ -369,7 +372,7 @@ private bool CheckFusion(int listindex, int id) fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && card.Id == CardId.ElShaddollWinda).ToList(); break; case 4: - fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && card.HasType(CardType.Monster) && card.HasSetcode(YGO_SCRIPT ? 0x181 : 0x182)).ToList(); + fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && card.HasType(CardType.Monster) && card.HasSetcode(SETCODE)).ToList(); break; case 5: fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && (card.Id != CardId.TearlamentsRulkallos || card.IsDisabled()) && card.HasType(CardType.Fusion)).ToList(); @@ -377,7 +380,7 @@ private bool CheckFusion(int listindex, int id) default: return false; } - fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && (card.HasRace(CardRace.Aqua) || (card.HasType(CardType.Monster) && (YGO_SCRIPT ? card.HasSetcode(0x181) : card.HasSetcode(0x182))))).ToList(); + fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && (card.HasRace(CardRace.Aqua) || (card.HasType(CardType.Monster) && card.HasSetcode(SETCODE)))).ToList(); int chaining_key_count = on_chaining_cards.Count(card => card != null && (card.Id == CardId.AgidotheAncientSentinel || card.Id == CardId.KelbektheAncientVanguard)); int chaining_key_count_2 = on_chaining_cards.Count(card => card != null && card.Id == CardId.TearlamentsSulliek); List current_chain_cards = new List(Duel.CurrentChain); @@ -490,13 +493,13 @@ private bool CheckFusion(int listindex, int id) break; case 1: case 4: - fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && (card.HasRace(CardRace.Aqua) || (card.HasType(CardType.Monster) && (YGO_SCRIPT ? card.HasSetcode(0x181) : card.HasSetcode(0x182))))).ToList(); + fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && (card.HasRace(CardRace.Aqua) || (card.HasType(CardType.Monster) && card.HasSetcode(SETCODE)))).ToList(); break; case 3: fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && card.Id == CardId.TearlamentsKitkallos).ToList(); break; case 5: - fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && card.HasType(CardType.Monster) && card.HasSetcode(YGO_SCRIPT ? 0x181 : 0x182)).ToList(); + fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && card.HasType(CardType.Monster) && card.HasSetcode(SETCODE)).ToList(); break; case 6: fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && (card.Id != CardId.TearlamentsRulkallos || card.IsDisabled()) && card.HasType(CardType.Fusion)).ToList(); @@ -657,7 +660,7 @@ public override int OnSelectPlace(int cardId, int player, CardLocation location, } public override int OnSelectOption(IList options) { - if (options.Count == 2 && (YGO_SCRIPT ? options.Contains(1190) : options.Contains(573))) + if (options.Count == 2 && (IS_YGOPRO ? options.Contains(1190) : options.Contains(573))) { return TearlamentsKitkallostohand ? 0 : 1; } @@ -940,9 +943,9 @@ public override IList OnSelectCard(IList cards, int min, } //!YGO_SCRIPT && select_TearlamentsKitkallos && hint == HintMsg.AddToHand - if ((YGO_SCRIPT && hint == HintMsg.OperateCard) || (!YGO_SCRIPT && select_TearlamentsKitkallos && hint == HintMsg.AddToHand)) + if ((IS_YGOPRO && hint == HintMsg.OperateCard) || (!IS_YGOPRO && select_TearlamentsKitkallos && hint == HintMsg.AddToHand)) { - if (!YGO_SCRIPT) select_TearlamentsKitkallos = false; + if (!IS_YGOPRO) select_TearlamentsKitkallos = false; IList ids = new List(); IList res = new List(); if (Duel.Player == 0) @@ -953,7 +956,7 @@ public override IList OnSelectCard(IList cards, int min, if (ids.Count() <= 0 && !activate_TearlamentsKitkallos_2) { List should_spsummon_cards = GetZoneCards(CardLocation.Grave | CardLocation.Hand, Bot); - should_spsummon_cards = should_spsummon_cards.Where(card => card != null && card.HasSetcode(YGO_SCRIPT ? 0x181 : 0x182) && card.HasType(CardType.Monster)).ToList(); + should_spsummon_cards = should_spsummon_cards.Where(card => card != null && card.HasSetcode(SETCODE) && card.HasType(CardType.Monster)).ToList(); if (should_spsummon_cards.Count() <= 0) { if (HasInList(cards, CardId.TearlamentsScheiren)) ids.Add(CardId.TearlamentsScheiren); @@ -971,7 +974,7 @@ public override IList OnSelectCard(IList cards, int min, } else { - if (IsShouldSummonFusion(YGO_SCRIPT ? 0x181 : 0x182, (int)CardRace.Aqua)) + if (IsShouldSummonFusion(SETCODE, (int)CardRace.Aqua)) { if (!activate_TearlamentsHavnis_2 && HasInList(cards, CardId.TearlamentsHavnis)) ids.Add(CardId.TearlamentsHavnis); if (!activate_TearlamentsScheiren_2 && HasInList(cards, CardId.TearlamentsScheiren)) ids.Add(CardId.TearlamentsScheiren); @@ -983,7 +986,7 @@ public override IList OnSelectCard(IList cards, int min, } else { - if (IsShouldSummonFusion(YGO_SCRIPT ? 0x181 : 0x182, (int)CardRace.Aqua, true)) + if (IsShouldSummonFusion(SETCODE, (int)CardRace.Aqua, true)) { if (!activate_TearlamentsHavnis_2 && HasInList(cards, CardId.TearlamentsHavnis) && !Bot.HasInHand(CardId.TearlamentsHavnis)) ids.Add(CardId.TearlamentsHavnis); if (!activate_TearlamentsScheiren_2 && HasInList(cards, CardId.TearlamentsScheiren) && !Bot.HasInHand(CardId.TearlamentsScheiren)) ids.Add(CardId.TearlamentsScheiren); @@ -1000,7 +1003,7 @@ public override IList OnSelectCard(IList cards, int min, ids.Add(CardId.TearlamentsHavnis); TearlamentsKitkallostohand = true; } - else if (!activate_TearlamentsReinoheart_2 && HasInList(cards, CardId.TearlamentsReinoheart) && Bot.Hand.Any(card => card != null && card.HasSetcode(YGO_SCRIPT ? 0x181 : 0x182))) + else if (!activate_TearlamentsReinoheart_2 && HasInList(cards, CardId.TearlamentsReinoheart) && Bot.Hand.Any(card => card != null && card.HasSetcode(SETCODE))) { ids.Add(CardId.TearlamentsReinoheart); TearlamentsKitkallostohand = false; @@ -1095,7 +1098,7 @@ public override IList OnSelectCard(IList cards, int min, } } mkeycards = cards.Where(card => card != null && card.Id == CardId.TearlamentsKitkallos).ToList(); - if (!activate_TearlamentsKitkallos_3 && mkeycards.Count > 0 && IsShouldSummonFusion(YGO_SCRIPT ? 0x181 : 0x182, (int)CardRace.Aqua) + if (!activate_TearlamentsKitkallos_3 && mkeycards.Count > 0 && IsShouldSummonFusion(SETCODE, (int)CardRace.Aqua) && ((CheckRemainInDeck(CardId.TearlamentsHavnis) > 0 && !activate_TearlamentsHavnis_2) || (CheckRemainInDeck(CardId.TearlamentsMerrli) > 0 && !activate_TearlamentsMerrli_2) || (CheckRemainInDeck(CardId.TearlamentsScheiren) > 0 && !activate_TearlamentsScheiren_2))) @@ -1114,7 +1117,7 @@ public override IList OnSelectCard(IList cards, int min, IList ids = new List(); if (!activate_AgidotheAncientSentinel_2) ids.Add(CardId.AgidotheAncientSentinel); if (!activate_KelbektheAncientVanguard_2) ids.Add(CardId.KelbektheAncientVanguard); - if (IsShouldSummonFusion(YGO_SCRIPT ? 0x181 : 0x182, (int)CardRace.Aqua)) + if (IsShouldSummonFusion(SETCODE, (int)CardRace.Aqua)) { if (activate_TearlamentsScheiren_1 && !activate_TearlamentsScheiren_2) ids.Add(CardId.TearlamentsScheiren); if (summoned && !activate_TearlamentsMerrli_2) ids.Add(CardId.TearlamentsMerrli); @@ -1367,7 +1370,7 @@ public override IList OnSelectCard(IList cards, int min, return res.Count > 0 ? Util.CheckSelectCount(res, cards, min, max) : null; } //(YGO_SCRIPT && hint == HintMsg.Disable) || (!YGO_SCRIPT && hint == HintMsg.Negate) - if (YGO_SCRIPT && hint == HintMsg.Disable) + if (IS_YGOPRO && hint == HintMsg.Disable) { if (chain_TearlamentsSulliek != null && cards.Contains(chain_TearlamentsSulliek)) { @@ -2215,14 +2218,14 @@ private bool IsShouldSummonFusion(int setcode = -1,int race = -1,bool all = fals { if (card == null) continue; if (card.Id == CardId.TearlamentsRulkallos && card.Location == CardLocation.MonsterZone && !card.IsDisabled()) continue; - if ((YGO_SCRIPT ? card.HasSetcode(0x181) : card.HasSetcode(0x182)) && card.HasType(CardType.Monster)) + if (card.HasSetcode(SETCODE) && card.HasType(CardType.Monster)) { ++xcount_1; if (card.HasRace(CardRace.Aqua)) { --xcount_1; ++xcount_3; } } else if (card.HasRace(CardRace.Aqua)) ++xcount_2; } - if (YGO_SCRIPT ? setcode == 0x181 : setcode == 0x182) + if (setcode == SETCODE) { ++xcount_1; if (race == (int)CardRace.Aqua) { --xcount_1; ++xcount_3; } @@ -2238,9 +2241,9 @@ private bool IsShouldSummonFusion(int setcode = -1,int race = -1,bool all = fals { if (card == null) continue; if (card.Id == CardId.TearlamentsKitkallos && xcount_1 <= 0) ++xcount_1; - else if ((YGO_SCRIPT ? card.HasSetcode(0x181) : card.HasSetcode(0x182)) && card.HasType(CardType.Monster)) ++xcount_2; + else if (card.HasSetcode(SETCODE) && card.HasType(CardType.Monster)) ++xcount_2; } - if (YGO_SCRIPT ? setcode == 0x181 : setcode == 0x182) ++xcount_2; + if (setcode == SETCODE) ++xcount_2; if (xcount_1 > 0 && xcount_2 > 0) return true; } if ((flag & (int)Flag.TearlamentsKaleidoHeart) > 0 && Bot.ExtraDeck.Count(card => card != null && card.Id == CardId.TearlamentsKaleidoHeart) > 0) @@ -2284,7 +2287,7 @@ private bool IsShouldSummonFusion(int setcode = -1,int race = -1,bool all = fals } xcount_1 = materials_1.Count; xcount_2 = materials_2.Count; - if ((YGO_SCRIPT ? setcode == 0x181 : setcode == 0x182) && race == (int)CardRace.Aqua) + if ((setcode == SETCODE) && race == (int)CardRace.Aqua) { ++xcount_2; } @@ -2378,7 +2381,7 @@ private bool TearlamentsReinoheartEffect() { if (Card.Location == CardLocation.Grave) { - List cards = Bot.Hand.Where(card => card != null && card.HasSetcode(YGO_SCRIPT ? 0x181 : 0x182)).ToList(); + List cards = Bot.Hand.Where(card => card != null && card.HasSetcode(SETCODE)).ToList(); List temp = new List(cards); foreach (var card in temp) { @@ -2419,9 +2422,9 @@ private bool TearlamentsKitkallosEffect() else if (Bot.HasInMonstersZone(CardId.AgidotheAncientSentinel) && !activate_AgidotheAncientSentinel_2) AI.SelectCard(CardId.AgidotheAncientSentinel); else if (Bot.HasInMonstersZone(CardId.KelbektheAncientVanguard) && !activate_KelbektheAncientVanguard_2) AI.SelectCard(CardId.KelbektheAncientVanguard); else if (Bot.HasInMonstersZone(CardId.ShaddollDragon) && Enemy.GetSpellCount() > 0) AI.SelectCard(CardId.ShaddollDragon); - else if (!activate_TearlamentsScheiren_2 && Bot.HasInMonstersZone(CardId.TearlamentsScheiren) && IsShouldSummonFusion(YGO_SCRIPT ? 0x181 : 0x182, (int)CardRace.Aqua)) AI.SelectCard(CardId.TearlamentsScheiren); - else if (!activate_TearlamentsMerrli_2 && Bot.HasInMonstersZone(CardId.TearlamentsMerrli) && IsShouldSummonFusion(YGO_SCRIPT ? 0x181 : 0x182, (int)CardRace.Aqua)) AI.SelectCard(CardId.TearlamentsMerrli); - else if (!activate_TearlamentsHavnis_2 && Bot.HasInMonstersZone(CardId.TearlamentsHavnis) && IsShouldSummonFusion(YGO_SCRIPT ? 0x181 : 0x182, (int)CardRace.Aqua)) AI.SelectCard(CardId.TearlamentsHavnis); + else if (!activate_TearlamentsScheiren_2 && Bot.HasInMonstersZone(CardId.TearlamentsScheiren) && IsShouldSummonFusion(SETCODE, (int)CardRace.Aqua)) AI.SelectCard(CardId.TearlamentsScheiren); + else if (!activate_TearlamentsMerrli_2 && Bot.HasInMonstersZone(CardId.TearlamentsMerrli) && IsShouldSummonFusion(SETCODE, (int)CardRace.Aqua)) AI.SelectCard(CardId.TearlamentsMerrli); + else if (!activate_TearlamentsHavnis_2 && Bot.HasInMonstersZone(CardId.TearlamentsHavnis) && IsShouldSummonFusion(SETCODE, (int)CardRace.Aqua)) AI.SelectCard(CardId.TearlamentsHavnis); else if (Bot.HasInMonstersZone(CardId.TearlamentsReinoheart) && !activate_TearlamentsReinoheart_1) AI.SelectCard(CardId.TearlamentsReinoheart); else if (Bot.HasInMonstersZone(CardId.Eva) && Bot.Graveyard.Count(card => card != null && card.HasAttribute(CardAttribute.Light) && card.HasRace(CardRace.Fairy)) > 0 && (CheckRemainInDeck(CardId.HeraldofGreenLight) > 0 || CheckRemainInDeck(CardId.HeraldofOrangeLight) > 0)) AI.SelectCard(CardId.Eva); @@ -2451,7 +2454,7 @@ private bool TearlamentsKitkallosEffect() else { if (Card.IsDisabled()) return false; - if (!YGO_SCRIPT) select_TearlamentsKitkallos = true; + if (!IS_YGOPRO) select_TearlamentsKitkallos = true; activate_TearlamentsKitkallos_1 = true; return true; } @@ -2474,7 +2477,7 @@ private bool TearlamentsSulliekEffect() { if (Duel.Player == 1 || Duel.Phase == DuelPhase.End) { - if (((Bot.HasInMonstersZone(CardId.TearlamentsKitkallos,false,false,true) && !activate_TearlamentsKitkallos_3 && IsShouldSummonFusion(YGO_SCRIPT ? 0x181 : 0x182, (int)CardRace.Aqua) + if (((Bot.HasInMonstersZone(CardId.TearlamentsKitkallos,false,false,true) && !activate_TearlamentsKitkallos_3 && IsShouldSummonFusion(SETCODE, (int)CardRace.Aqua) && ((CheckRemainInDeck(CardId.TearlamentsHavnis) > 0 && !activate_TearlamentsHavnis_2) || (CheckRemainInDeck(CardId.TearlamentsMerrli) > 0 && !activate_TearlamentsMerrli_2) || (CheckRemainInDeck(CardId.TearlamentsScheiren) > 0 && !activate_TearlamentsScheiren_2)) && Bot.GetMonsterCount()<3) From b667262ffe12be6e093f31280a43f6b9586dbb27 Mon Sep 17 00:00:00 2001 From: mercury233 Date: Tue, 7 Feb 2023 21:12:00 +0800 Subject: [PATCH 09/18] always go first for YSPplayer bots --- Game/AI/Decks/KashtiraExecutor.cs | 7 +++++++ Game/AI/Decks/TearlamentsExecutor.cs | 7 +++++++ Game/AI/Decks/ThunderDragonExecutor.cs | 7 +++++++ 3 files changed, 21 insertions(+) diff --git a/Game/AI/Decks/KashtiraExecutor.cs b/Game/AI/Decks/KashtiraExecutor.cs index be0e7b45..3b823110 100644 --- a/Game/AI/Decks/KashtiraExecutor.cs +++ b/Game/AI/Decks/KashtiraExecutor.cs @@ -142,6 +142,13 @@ public KashtiraExecutor(GameAI ai, Duel duel) AddExecutor(ExecutorType.SpellSet, SpellSet); AddExecutor(ExecutorType.Repos, DefaultRepos); } + + public override bool OnSelectHand() + { + // go first + return true; + } + public override void OnNewTurn() { if (pre_link_mode < 0) pre_link_mode = Program.Rand.Next(2); diff --git a/Game/AI/Decks/TearlamentsExecutor.cs b/Game/AI/Decks/TearlamentsExecutor.cs index e7cb48e2..07f4daeb 100644 --- a/Game/AI/Decks/TearlamentsExecutor.cs +++ b/Game/AI/Decks/TearlamentsExecutor.cs @@ -220,6 +220,13 @@ public TearlamentsExecutor(GameAI ai, Duel duel) AddExecutor(ExecutorType.Repos, DefaultMonsterRepos); AddExecutor(ExecutorType.SpellSet, SpellSet); } + + public override bool OnSelectHand() + { + // go first + return true; + } + public override void OnNewTurn() { List cards = Bot.ExtraDeck.Where(card => card != null && card.Id == CardId.PredaplantDragostapelia).ToList(); diff --git a/Game/AI/Decks/ThunderDragonExecutor.cs b/Game/AI/Decks/ThunderDragonExecutor.cs index 7f045b50..b073f9ac 100644 --- a/Game/AI/Decks/ThunderDragonExecutor.cs +++ b/Game/AI/Decks/ThunderDragonExecutor.cs @@ -248,6 +248,13 @@ public int CheckRemainInDeck(int id) } } #endregion + + public override bool OnSelectHand() + { + // go first + return true; + } + public override void OnNewTurn() { handActivated = false; From 35b35672e564cd6f58c24abde98bdaf22a53e47a Mon Sep 17 00:00:00 2001 From: Ha <479310608@qq.com> Date: Thu, 9 Feb 2023 16:35:25 +0800 Subject: [PATCH 10/18] fix Tearlaments --- Game/AI/Decks/TearlamentsExecutor.cs | 278 ++++++++++++++++++++------- 1 file changed, 208 insertions(+), 70 deletions(-) diff --git a/Game/AI/Decks/TearlamentsExecutor.cs b/Game/AI/Decks/TearlamentsExecutor.cs index 07f4daeb..c976a38e 100644 --- a/Game/AI/Decks/TearlamentsExecutor.cs +++ b/Game/AI/Decks/TearlamentsExecutor.cs @@ -87,6 +87,7 @@ public class CardId bool activate_DivineroftheHerald = false; bool summoned = false; bool spsummoned = false; + bool TearlamentsKitkallos_summoned = false; bool summon_SprightElf = false; bool chainlist = false; @@ -120,6 +121,7 @@ private enum Flag ClientCard chain_PredaplantDragostapelia = null; ClientCard chain_TearlamentsSulliek = null; ClientCard tgcard = null; + ClientCard no_fusion_card = null; List e_PredaplantDragostapelia_cards = new List(); ClientCard link_card = null; @@ -127,8 +129,7 @@ private enum Flag List key_send_to_deck_ids = new List() { - CardId.TearlamentsMerrli,CardId.TearlamentsScheiren,CardId.TearlamentsHavnis,CardId.TearlamentsReinoheart,8736823,29596581, - 83107873,56713174,20318029 + CardId.TearlamentsMerrli,CardId.TearlamentsScheiren,CardId.TearlamentsHavnis,CardId.TearlamentsReinoheart,8736823 }; List all_key_card_ids = new List() { @@ -172,8 +173,9 @@ public TearlamentsExecutor(GameAI ai, Duel duel) AddExecutor(ExecutorType.Activate, CardId.AbyssDweller, () => { return Duel.Player != 0; }); AddExecutor(ExecutorType.Activate, CardId.TearlamentsKaleidoHeart, TearlamentsKaleidoHeartEffect); AddExecutor(ExecutorType.Activate, CardId.UnderworldGoddessoftheClosedWorld); - AddExecutor(ExecutorType.SpSummon, CardId.UnderworldGoddessoftheClosedWorld, UnderworldGoddessoftheClosedWorldSummon); AddExecutor(ExecutorType.SpSummon, CardId.FADawnDragster, FADawnDragsterSummon); + AddExecutor(ExecutorType.Activate, CardId.TearlamentsKitkallos, TearlamentsKitkallosEffect_2); + AddExecutor(ExecutorType.SpSummon, CardId.UnderworldGoddessoftheClosedWorld, UnderworldGoddessoftheClosedWorldSummon); AddExecutor(ExecutorType.SpSummon, CardId.SprightElf, SprightElfSummon_2); AddExecutor(ExecutorType.SpSummon, CardId.IP, IPSummon_2); AddExecutor(ExecutorType.Activate, CardId.BaronnedeFleur, BaronnedeFleurEffect); @@ -183,10 +185,10 @@ public TearlamentsExecutor(GameAI ai, Duel duel) AddExecutor(ExecutorType.Activate, CardId.HeraldofGreenLight); AddExecutor(ExecutorType.Activate, CardId.TearlamentsRulkallos, TearlamentsRulkallosEffect); AddExecutor(ExecutorType.Activate, CardId.FADawnDragster); + AddExecutor(ExecutorType.Activate, CardId.PrimevalPlanetPerlereino, PrimevalPlanetPerlereinoEffect); AddExecutor(ExecutorType.Activate, CardId.TearlamentsScheiren, TearlamentsScheirenEffect); AddExecutor(ExecutorType.Activate, CardId.TearlamentsKitkallos, TearlamentsKitkallosEffect); AddExecutor(ExecutorType.Activate, CardId.SprightElf, SprightElfEffect); - AddExecutor(ExecutorType.Activate, CardId.PrimevalPlanetPerlereino, PrimevalPlanetPerlereinoEffect); AddExecutor(ExecutorType.SpSummon, CardId.UnderworldGoddessoftheClosedWorld, UnderworldGoddessoftheClosedWorldSummon_3); AddExecutor(ExecutorType.Activate, CardId.MudoratheSwordOracle, MudoratheSwordOracleEffect); AddExecutor(ExecutorType.Activate, CardId.DivineroftheHerald, DivineroftheHeraldEffect); @@ -202,14 +204,16 @@ public TearlamentsExecutor(GameAI ai, Duel duel) AddExecutor(ExecutorType.Activate, CardId.ShaddollDragon, ShaddollDragonEffect); AddExecutor(ExecutorType.Activate, CardId.Eva, EvaEffect); AddExecutor(ExecutorType.Activate, CardId.TearlamentsSulliek, TearlamentsSulliekEffect); - AddExecutor(ExecutorType.Activate, CardId.TearlamentsScream); + AddExecutor(ExecutorType.Activate, CardId.TearlamentsScream,()=> { return !AllActivated(); }); AddExecutor(ExecutorType.Activate, CardId.KeldotheSacredProtector, MudoratheSwordOracleEffect); AddExecutor(ExecutorType.Activate, CardId.ShaddollBeast, () => { return Bot.Deck.Count > 0; }); + AddExecutor(ExecutorType.Summon, CardId.DivineroftheHerald, ()=> { return !Bot.HasInHand(CardId.HeraldofGreenLight) && !Bot.HasInHand(CardId.HeraldofOrangeLight); }); + AddExecutor(ExecutorType.SpSummon, CardId.AbyssDweller, AbyssDwellerSummon_2); AddExecutor(ExecutorType.SpSummon, CardId.SprightElf, SprightElfSummon); AddExecutor(ExecutorType.SpSummon, CardId.BaronnedeFleur, BaronnedeFleurSummon); AddExecutor(ExecutorType.SpSummon, CardId.FADawnDragster, () => { SetSpSummon(); return true; }); AddExecutor(ExecutorType.SpSummon, CardId.AbyssDweller, AbyssDwellerSummon); - AddExecutor(ExecutorType.SpSummon, CardId.IP, IPEffect); + AddExecutor(ExecutorType.Activate, CardId.IP, IPEffect); AddExecutor(ExecutorType.SpSummon, CardId.IP, IPSummon); AddExecutor(ExecutorType.SpSummon, CardId.UnderworldGoddessoftheClosedWorld, UnderworldGoddessoftheClosedWorldSummon_2); AddExecutor(ExecutorType.Activate, CardId.KnightmareUnicorn, KnightmareUnicornEffect); @@ -217,6 +221,7 @@ public TearlamentsExecutor(GameAI ai, Duel duel) AddExecutor(ExecutorType.Activate, CardId.MekkKnightCrusadiaAvramax, MekkKnightCrusadiaAvramaxEffect); AddExecutor(ExecutorType.SpSummon, CardId.MekkKnightCrusadiaAvramax, MekkKnightCrusadiaAvramaxSummon); AddExecutor(ExecutorType.SpSummon, CardId.BaronnedeFleur, BaronnedeFleurSummon_2); + AddExecutor(ExecutorType.SpSummon, CardId.BaronnedeFleur, () => { return Bot.HasInMonstersZone(CardId.SprightElf, true, false, true); }); AddExecutor(ExecutorType.Repos, DefaultMonsterRepos); AddExecutor(ExecutorType.SpellSet, SpellSet); } @@ -268,6 +273,7 @@ public override void OnNewTurn() summoned = false; spsummoned = false; summon_SprightElf = false; + TearlamentsKitkallos_summoned = false; } private List GetZoneCards(CardLocation loc, ClientField player) { @@ -305,7 +311,8 @@ private List GetKeyFusionCard(int key) { case 0: case 2: id = CardId.TearlamentsKitkallos; break; - case 1: id = CardId.TearlamentsRulkallos; break; + case 1: + case 6: id = CardId.TearlamentsRulkallos; break; case 3: id = CardId.PredaplantDragostapelia; break; case 4: id = CardId.TearlamentsKaleidoHeart; break; case 5: id = CardId.PredaplantDragostapelia; break; @@ -342,6 +349,14 @@ private List GetKeyFusionCard(int key) if (index > -1 && index < fusionExtra.Count) fusionExtra.RemoveAt(index); return res; } + private bool IsLastFusionCard() + { + int count = 0; + if (activate_TearlamentsScheiren_2) ++count; + if (activate_TearlamentsHavnis_2) ++count; + if (activate_TearlamentsMerrli_2) ++count; + return count >= 2; + } private bool CheckFusion(int listindex, int id) { int key = -1; @@ -351,16 +366,20 @@ private bool CheckFusion(int listindex, int id) { bool flag_4 = fusionExtra.Count(card => card != null && card.Id == CardId.PredaplantDragostapelia) > 0 && Bot.HasInMonstersZone(CardId.ElShaddollWinda, true, false, true); bool flag_1 = ((Duel.Phase < DuelPhase.End && (!activate_TearlamentsKitkallos_1 || !activate_TearlamentsKitkallos_2)) || (Duel.Phase == DuelPhase.End && !activate_TearlamentsKitkallos_1 && !activate_TearlamentsKitkallos_2)) && fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsKitkallos) > 0; - bool flag_2 = fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsRulkallos) > 0 && (Bot.HasInGraveyard(CardId.TearlamentsKitkallos) || Bot.GetMonsters().Count(card => card != null && card.Id == CardId.TearlamentsKitkallos) > 1); - bool flag_5 = fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsKaleidoHeart) > 0 && !activate_TearlamentsKaleidoHeart_1 && GetZoneCards(CardLocation.Onfield, Enemy).Count(card => card != null && !card.IsShouldNotBeTarget()) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.TearlamentsKaleidoHeart) - && (!Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) || (Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) && activate_PrimevalPlanetPerlereino_2)); - bool flag_6 = fusionExtra.Count(card => card != null && card.Id == CardId.PredaplantDragostapelia) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.PredaplantDragostapelia) && Enemy.GetMonsters().Any(card => card != null && card.HasType(CardType.Effect) && !card.IsDisabled() && card.IsFaceup() && !card.IsShouldNotBeTarget()); + bool flag_2 = fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsRulkallos) > 0 && (Bot.HasInGraveyard(CardId.TearlamentsKitkallos) || Bot.GetMonsters().Count(card => card != null && card.Id == CardId.TearlamentsKitkallos) > 1 || Duel.CurrentChain.Any(card=>card!=null && card.Controller==0 && card!=Card && (card.Id==CardId.TearlamentsScheiren || card.Id==CardId.TearlamentsHavnis || card.Id==CardId.TearlamentsMerrli))); + // && !activate_TearlamentsKaleidoHeart_1 && GetZoneCards(CardLocation.Onfield, Enemy).Count(card => card != null && !card.IsShouldNotBeTarget()) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.TearlamentsKaleidoHeart) + //&& (!Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) || (Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) && activate_PrimevalPlanetPerlereino_2) + bool flag_5 = fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsKaleidoHeart) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.TearlamentsKaleidoHeart); + //&& Enemy.GetMonsters().Any(card => card != null && card.HasType(CardType.Effect) && !card.IsDisabled() && card.IsFaceup() && !card.IsShouldNotBeTarget()) + bool flag_6 = fusionExtra.Count(card => card != null && card.Id == CardId.PredaplantDragostapelia) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.PredaplantDragostapelia); + bool flag_7 = fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsRulkallos) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.TearlamentsRulkallos) && IsLastFusionCard(); bool flag_3 = fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsKitkallos) > 0; if (flag_4) key = 3; else if (flag_1) key = 0; else if (flag_2) key = 1; else if (flag_5) key = 4; else if (flag_6) key = 5; + else if (flag_7) key = 6; else if (flag_3) key = 2; if (key > -1) { @@ -373,6 +392,7 @@ private bool CheckFusion(int listindex, int id) fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && (card.HasRace(CardRace.Aqua) || (card.HasType(CardType.Monster) && card.HasSetcode(SETCODE)))).ToList(); break; case 1: + case 6: fusionMaterialTemp = fusionMaterialTemp.Where(card => card != null && card.Id == CardId.TearlamentsKitkallos).ToList(); break; case 3: @@ -460,6 +480,11 @@ private bool CheckFusion(int listindex, int id) if (mcard_1[listindex] != null) fusionMaterial.Remove(mcard_1[listindex]); if (mcard_2[listindex] != null) fusionMaterial.Remove(mcard_2[listindex]); if (mcard_3[listindex] != null) fusionMaterial.Remove(mcard_3[listindex]); + //foreach (var card in fusionMaterial) + //{ + // if (card == null) continue; + // Logger.DebugWriteLine("remain" + card.Id); + //} return true; } } @@ -471,7 +496,7 @@ private bool CheckFusion(int listindex, int id) { bool flag_1 = (fusionExtra.Count(card => card != null && card.Id == CardId.ElShaddollWinda) > 0 && (fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsKitkallos) <= 0 || - activate_TearlamentsKitkallos_1 || Bot.GetMonstersInMainZone().Count >= 4) && Bot.GetGraveyardMonsters().Any(card => card != null && card.HasSetcode(0x9d)) + activate_TearlamentsKitkallos_1 || Bot.GetMonstersInMainZone().Count >= 4 || TearlamentsKitkallos_summoned) && Bot.GetGraveyardMonsters().Any(card => card != null && card.HasSetcode(0x9d)) && Card.HasAttribute(CardAttribute.Dark)); bool flag_2 = fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsKitkallos) > 0 && !activate_TearlamentsKitkallos_1; bool flag_3 = fusionExtra.Count(card => card != null && card.Id == CardId.ElShaddollWinda) > 0 && Bot.GetGraveyardMonsters().Any(card => card != null && card.HasSetcode(0x9d)) @@ -479,7 +504,8 @@ private bool CheckFusion(int listindex, int id) bool flag_4 = fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsRulkallos) > 0 && (Bot.HasInGraveyard(CardId.TearlamentsKitkallos) || Bot.HasInMonstersZone(CardId.TearlamentsKitkallos, false, false, true)); bool flag_6 = fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsKaleidoHeart) > 0 && !activate_TearlamentsKaleidoHeart_1 && GetZoneCards(CardLocation.Onfield, Enemy).Count(card => card != null && !card.IsShouldNotBeTarget()) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.TearlamentsKaleidoHeart) && (!Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) || (Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) && activate_PrimevalPlanetPerlereino_2)); - bool flag_7 = fusionExtra.Count(card => card != null && card.Id == CardId.PredaplantDragostapelia) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.PredaplantDragostapelia) && Enemy.GetMonsters().Any(card => card != null && card.HasType(CardType.Effect) && !card.IsDisabled() && card.IsFaceup() && !card.IsShouldNotBeTarget()); + //&& Enemy.GetMonsters().Any(card => card != null && card.HasType(CardType.Effect) && !card.IsDisabled() && card.IsFaceup() && !card.IsShouldNotBeTarget()) + bool flag_7 = fusionExtra.Count(card => card != null && card.Id == CardId.PredaplantDragostapelia) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.PredaplantDragostapelia); bool flag_5 = fusionExtra.Count(card => card != null && card.Id == CardId.TearlamentsKitkallos) > 0; if (flag_1) key = 0; else if (flag_2) key = 1; @@ -611,8 +637,16 @@ private bool FusionEffect(int id) public override CardPosition OnSelectPosition(int cardId, IList positions) { NamedCard card = NamedCard.Get(cardId); - if (Duel.Turn > 1 && Enemy.GetMonsterCount() <= 0 && (card.Attack > 0 || cardId == CardId.FADawnDragster)) + if (Duel.Turn > 1 && Enemy.GetMonsterCount() <= 0 && (card.Attack > 0 || cardId == CardId.FADawnDragster) + && Duel.Player == 0) + { + return CardPosition.FaceUpAttack; + } + else if (Duel.Player == 1) { + if (card.Attack < 2000) return CardPosition.FaceUpDefence; + int eatk = Util.GetBestAttack(Enemy); + if(eatk > card.Attack ) return CardPosition.FaceUpDefence; return CardPosition.FaceUpAttack; } else @@ -652,7 +686,7 @@ public override int OnSelectPlace(int cardId, int player, CardLocation location, } if (player == 0 && location == CardLocation.SpellZone && location != CardLocation.FieldZone) { - List keys = new List() { 0, 1, 2, 3, 4, 5 }; + List keys = new List() { 0, 1, 2, 3, 4 }; while (keys.Count > 0) { int index = Program.Rand.Next(keys.Count); @@ -706,6 +740,7 @@ public override void OnChainEnd() fusionMaterial.Clear(); on_chaining_cards.Clear(); tgcard = null; + no_fusion_card = null; for (int i = 0; i < mcard_0.Count; ++i) mcard_0[i] = null; for (int i = 0; i < mcard_1.Count; ++i) mcard_1[i] = null; for (int i = 0; i < mcard_2.Count; ++i) mcard_2[i] = null; @@ -812,6 +847,7 @@ private List GetDefaultMaterial(IList cards) List mzone_cards = new List(); List hand_cards = new List(); List last_cards = new List(); + List last_cards_2 = new List(); foreach (var card in Duel.CurrentChain) { if (card == null) continue; @@ -843,9 +879,10 @@ private List GetDefaultMaterial(IList cards) if ((((card.Id == CardId.TearlamentsScheiren && !activate_TearlamentsScheiren_2) || (card.Id == CardId.TearlamentsMerrli && !activate_TearlamentsMerrli_2) || (card.Id == CardId.TearlamentsHavnis && !activate_TearlamentsHavnis_2)) - && last_cards.Count(mcard => mcard != null && mcard.Id == card.Id) <= 0) + && last_cards.Count(mcard => mcard != null && mcard.Id == card.Id) <= 0 + && on_chaining_cards.Count(mcard => mcard != null && mcard.Id == card.Id) > 0) || (on_chaining_cards.Count(ccard => ccard != null && ccard == card) > 0 && on_chaining_cards.Count(cccard => cccard != null && cccard.Id == card.Id) <= 1 - && last_cards.Count(mcard => mcard != null && mcard.Id == card.Id) <= 0)) + && last_cards.Count(mcard => mcard != null && mcard.Id == card.Id) <= 0 && Duel.CurrentChain.Count(cccard => cccard != null && cccard.Id == card.Id) > 0)|| (no_fusion_card!=null && no_fusion_card==card)) { last_cards.Add(card); } @@ -855,12 +892,16 @@ private List GetDefaultMaterial(IList cards) else if (card.Location == CardLocation.Hand) { if (card.Id == CardId.TearlamentsReinoheart) hand_cards.Insert(0, card); + else if (Duel.Player == 1 && card.Id == CardId.TearlamentsHavnis && !activate_TearlamentsHavnis_1) last_cards.Add(card); else hand_cards.Add(card); } else if (card.Location == CardLocation.MonsterZone) { - if (card.Id == CardId.TearlamentsKitkallos || card.Id == CardId.TearlamentsRulkallos - || card.Id == CardId.TearlamentsKaleidoHeart || card.Id == CardId.PredaplantDragostapelia) last_cards.Add(card); + if (card.Id == CardId.TearlamentsKitkallos && card.IsDisabled()) last_cards.Add(card); + else if (card.Id == CardId.TearlamentsKitkallos) last_cards_2.Insert(0, card); + else if (card.Id == CardId.TearlamentsRulkallos + || card.Id == CardId.TearlamentsKaleidoHeart || card.Id == CardId.PredaplantDragostapelia || + (Duel.Player == 1 && card.Id == CardId.ElShaddollWinda)) last_cards_2.Add(card); else mzone_cards.Add(card); } else mzone_cards.Add(card); @@ -870,6 +911,7 @@ private List GetDefaultMaterial(IList cards) first_cards.AddRange(hand_cards); first_cards.AddRange(mzone_cards); first_cards.AddRange(last_cards); + first_cards.AddRange(last_cards_2); return first_cards; } public override IList OnSelectFusionMaterial(IList cards, int min, int max) @@ -949,7 +991,7 @@ public override IList OnSelectCard(IList cards, int min, return Util.CheckSelectCount(CardsIdToClientCards(ids, cards, false, true), cards, min, max); } - //!YGO_SCRIPT && select_TearlamentsKitkallos && hint == HintMsg.AddToHand + //!IS_YGOPRO && select_TearlamentsKitkallos && hint == HintMsg.AddToHand if ((IS_YGOPRO && hint == HintMsg.OperateCard) || (!IS_YGOPRO && select_TearlamentsKitkallos && hint == HintMsg.AddToHand)) { if (!IS_YGOPRO) select_TearlamentsKitkallos = false; @@ -957,8 +999,9 @@ public override IList OnSelectCard(IList cards, int min, IList res = new List(); if (Duel.Player == 0) { - if (!activate_TearlamentsScheiren_1 && !Bot.HasInHand(CardId.TearlamentsScheiren) && HasInList(cards, CardId.TearlamentsScheiren)) ids.Add(CardId.TearlamentsScheiren); - if (!activate_TearlamentsMerrli_1 && !Bot.HasInHand(CardId.TearlamentsMerrli) && HasInList(cards, CardId.TearlamentsMerrli)) ids.Add(CardId.TearlamentsMerrli); + if (!activate_TearlamentsScheiren_1 && !Bot.HasInHand(CardId.TearlamentsScheiren) && HasInList(cards, CardId.TearlamentsScheiren) && !AllActivated()) ids.Add(CardId.TearlamentsScheiren); + if (!activate_TearlamentsMerrli_1 && !Bot.HasInHand(CardId.TearlamentsMerrli) && HasInList(cards, CardId.TearlamentsMerrli) && !AllActivated()) ids.Add(CardId.TearlamentsMerrli); + if(!Bot.HasInHand(CardId.TearlamentsHavnis) && HasInList(cards, CardId.TearlamentsHavnis)) ids.Add(CardId.TearlamentsHavnis); if (!activate_TearlamentsReinoheart_1 && !Bot.HasInHand(CardId.TearlamentsReinoheart) && HasInList(cards, CardId.TearlamentsReinoheart)) ids.Add(CardId.TearlamentsReinoheart); if (ids.Count() <= 0 && !activate_TearlamentsKitkallos_2) { @@ -1073,6 +1116,12 @@ public override IList OnSelectCard(IList cards, int min, } List mkeycards = new List(); List hkeycards = new List(); + mkeycards = cards.Where(card => card != null && card.Id == CardId.TearlamentsKitkallos).ToList(); + if (!activate_TearlamentsKitkallos_3 && mkeycards.Count > 0 && !AllActivated() && IsShouldSummonFusion(SETCODE, (int)CardRace.Aqua) + && ((CheckRemainInDeck(CardId.TearlamentsHavnis) > 0 && !activate_TearlamentsHavnis_2) + || (CheckRemainInDeck(CardId.TearlamentsMerrli) > 0 && !activate_TearlamentsMerrli_2) + || (CheckRemainInDeck(CardId.TearlamentsScheiren) > 0 && !activate_TearlamentsScheiren_2))) + return Util.CheckSelectCount(mkeycards, cards, min, max); if (IsShouldSummonFusion()) { if (!activate_TearlamentsScheiren_2 && HasInList(cards, CardId.TearlamentsScheiren)) @@ -1090,6 +1139,11 @@ public override IList OnSelectCard(IList cards, int min, hkeycards = cards.Where(card => card != null && card.Id == CardId.TearlamentsMerrli && card.Location == CardLocation.Hand).ToList(); mkeycards = cards.Where(card => card != null && card.Id == CardId.TearlamentsMerrli && card.Location == CardLocation.MonsterZone).ToList(); } + else if (!activate_TearlamentsReinoheart_2 && (HasinZoneKeyCard(CardLocation.Hand) || (Bot.Hand.Count(ccard => ccard != null && ccard.HasSetcode(SETCODE) && ccard != cards.Where(card => card != null && card.Location == CardLocation.Hand && card.Id == CardId.TearlamentsReinoheart).FirstOrDefault()) > 0 && HasinZoneKeyCard(CardLocation.Deck)))) + { + hkeycards = cards.Where(card => card != null && card.Id == CardId.TearlamentsReinoheart && card.Location == CardLocation.Hand).ToList(); + mkeycards = cards.Where(card => card != null && card.Id == CardId.TearlamentsReinoheart && card.Location == CardLocation.MonsterZone).ToList(); + } if (mkeycards.Count > 0 || hkeycards.Count > 0) { if (Bot.GetMonstersInMainZone().Count < 5) @@ -1104,12 +1158,6 @@ public override IList OnSelectCard(IList cards, int min, } } } - mkeycards = cards.Where(card => card != null && card.Id == CardId.TearlamentsKitkallos).ToList(); - if (!activate_TearlamentsKitkallos_3 && mkeycards.Count > 0 && IsShouldSummonFusion(SETCODE, (int)CardRace.Aqua) - && ((CheckRemainInDeck(CardId.TearlamentsHavnis) > 0 && !activate_TearlamentsHavnis_2) - || (CheckRemainInDeck(CardId.TearlamentsMerrli) > 0 && !activate_TearlamentsMerrli_2) - || (CheckRemainInDeck(CardId.TearlamentsScheiren) > 0 && !activate_TearlamentsScheiren_2))) - return Util.CheckSelectCount(mkeycards, cards, min, max); mkeycards = cards.Where(card => card != null && card.Id == CardId.TearlamentsKaleidoHeart).ToList(); if (!activate_TearlamentsKaleidoHeart_2 && IsCanSpSummon() && mkeycards.Count > 0) return Util.CheckSelectCount(mkeycards, cards, min, max); mkeycards = cards.Where(card => card != null && card.Id == CardId.TearlamentsRulkallos).ToList(); @@ -1144,11 +1192,14 @@ public override IList OnSelectCard(IList cards, int min, ids.Add(CardId.MudoratheSwordOracle); ids.Add(CardId.KeldotheSacredProtector); } - if (!activate_TearlamentsReinoheart_2 && HasInList(cards, CardId.TearlamentsReinoheart)) ids.Add(CardId.TearlamentsReinoheart); if (!activate_TearlamentsScream_2 && CheckRemainInDeck(CardId.TearlamentsSulliek) > 0) ids.Add(CardId.TearlamentsScream); if (!activate_TearlamentsSulliek_2) ids.Add(CardId.TearlamentsSulliek); - ids.Add(CardId.HeraldofGreenLight); - ids.Add(CardId.HeraldofOrangeLight); + if (!activate_TearlamentsReinoheart_2 && HasInList(cards, CardId.TearlamentsReinoheart)) ids.Add(CardId.TearlamentsReinoheart); + if (!cards.Any(card => card != null && !card.HasRace(CardRace.Fairy))) + { + ids.Add(CardId.HeraldofGreenLight); + ids.Add(CardId.HeraldofOrangeLight); + } ids = ids.Distinct().ToList(); IList res = CardsIdToClientCards(ids, cards, false); List temp = new List(cards); @@ -1169,7 +1220,7 @@ public override IList OnSelectCard(IList cards, int min, if (hint == HintMsg.ToGrave && cards.Any(card => card != null && (card.Location == CardLocation.Deck || card.Location == CardLocation.Extra)) && min == 1 && max == 1) { List cardsid = new List(); - if (HasInList(cards, CardId.AgidotheAncientSentinel) && !activate_AgidotheAncientSentinel_2) + if (HasInList(cards, CardId.AgidotheAncientSentinel) && !activate_AgidotheAncientSentinel_2 && !AllActivated()) { if (HasInList(cards, CardId.KelbektheAncientVanguard) && !activate_KelbektheAncientVanguard_2 && Bot.HasInHand(CardId.AgidotheAncientSentinel)) { @@ -1177,7 +1228,7 @@ public override IList OnSelectCard(IList cards, int min, } else cardsid.Add(CardId.AgidotheAncientSentinel); } - else if (HasInList(cards, CardId.KelbektheAncientVanguard) && !activate_KelbektheAncientVanguard_2) + else if (HasInList(cards, CardId.KelbektheAncientVanguard) && !activate_KelbektheAncientVanguard_2 && !AllActivated()) { cardsid.Add(CardId.KelbektheAncientVanguard); } @@ -1199,6 +1250,7 @@ public override IList OnSelectCard(IList cards, int min, if (cards.Any(card => card != null && card.Id == CardId.TearlamentsSulliek) && !activate_TearlamentsSulliek_2) cardsid.Add(CardId.TearlamentsSulliek); if (cards.Any(card => card != null && card.Id == CardId.TearlamentsScream) && !activate_TearlamentsScream_2 && CheckRemainInDeck(CardId.TearlamentsSulliek) > 0) cardsid.Add(CardId.TearlamentsScream); IList res = CardsIdToClientCards(cardsid, cards, false); + if (res.Count > 0) no_fusion_card = res[0]; return res.Count > 0 ? Util.CheckSelectCount(res, cards, min, max) : null; } if (hint == HintMsg.ToDeck && cards.Any(card => card != null && card.Location == CardLocation.Grave)) @@ -1220,7 +1272,7 @@ public override IList OnSelectCard(IList cards, int min, return null; } int imax = e_cards.Count > max ? max : e_cards.Count < 0 ? min : e_cards.Count; - if (Duel.CurrentChain == null || Duel.ChainTargets == null) return Util.CheckSelectCount(e_cards, cards, imax, imax); + if (Duel.CurrentChain == null || Duel.ChainTargets == null) return Util.CheckSelectCount(cards, cards, imax, imax); foreach (var card in Duel.CurrentChain) { if (card == null || card.Controller == 0 || card.Location != CardLocation.Grave) continue; @@ -1376,7 +1428,7 @@ public override IList OnSelectCard(IList cards, int min, res = CardsIdToClientCards(ids, cards, false); return res.Count > 0 ? Util.CheckSelectCount(res, cards, min, max) : null; } - //(YGO_SCRIPT && hint == HintMsg.Disable) || (!YGO_SCRIPT && hint == HintMsg.Negate) + //(IS_YGOPRO && hint == HintMsg.Disable) || (!IS_YGOPRO && hint == HintMsg.Negate) if (IS_YGOPRO && hint == HintMsg.Disable) { if (chain_TearlamentsSulliek != null && cards.Contains(chain_TearlamentsSulliek)) @@ -1414,11 +1466,13 @@ public override IList OnSelectCard(IList cards, int min, || (!activate_TearlamentsHavnis_2 && CheckRemainInDeck(CardId.TearlamentsHavnis) > 0) || (!activate_TearlamentsMerrli_2 && CheckRemainInDeck(CardId.TearlamentsMerrli) > 0))) || !activate_TearlamentsKitkallos_2)) { + TearlamentsKitkallos_summoned = true; return Util.CheckSelectCount(res0, cards, min, max); } res0 = cards.Where(card => card != null && card.Id == CardId.TearlamentsKaleidoHeart).ToList(); - if (GetZoneCards(CardLocation.Onfield, Enemy).Count(card => card != null && !card.IsShouldNotBeTarget()) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.TearlamentsKaleidoHeart) - && !activate_TearlamentsKaleidoHeart_1 && (!Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) || (Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) && activate_PrimevalPlanetPerlereino_2))) + //if (GetZoneCards(CardLocation.Onfield, Enemy).Count(card => card != null && !card.IsShouldNotBeTarget()) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.TearlamentsKaleidoHeart) + // && !activate_TearlamentsKaleidoHeart_1 && (!Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) || (Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) && activate_PrimevalPlanetPerlereino_2))) + if(res0.Count>0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.TearlamentsKaleidoHeart)) { ran_fusion_mode_3[i] = true; return Util.CheckSelectCount(res0, cards, min, max); @@ -1431,7 +1485,8 @@ public override IList OnSelectCard(IList cards, int min, return Util.CheckSelectCount(res0, cards, min, max); } res0 = cards.Where(card => card != null && card.Id == CardId.PredaplantDragostapelia).ToList(); - if (res0.Count > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.PredaplantDragostapelia) && Enemy.GetMonsters().Any(card => card != null && card.HasType(CardType.Effect) && !card.IsDisabled() && card.IsFaceup() && !card.IsShouldNotBeTarget())) + //if (res0.Count > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.PredaplantDragostapelia) && Enemy.GetMonsters().Any(card => card != null && card.HasType(CardType.Effect) && !card.IsDisabled() && card.IsFaceup() && !card.IsShouldNotBeTarget())) + if (res0.Count > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.PredaplantDragostapelia)) { return Util.CheckSelectCount(res0, cards, min, max); } @@ -1448,6 +1503,7 @@ public override IList OnSelectCard(IList cards, int min, activate_TearlamentsRulkallos_2 = false; return Util.CheckSelectCount(res0, cards, min, max); } + TearlamentsKitkallos_summoned = true; return Util.CheckSelectCount(res1, cards, min, max); } return Util.CheckSelectCount(res1, cards, min, max); @@ -1460,11 +1516,15 @@ public override IList OnSelectCard(IList cards, int min, if (res.Count > 0 && !activate_TearlamentsKitkallos_1 && ((!activate_TearlamentsScheiren_2 && CheckRemainInDeck(CardId.TearlamentsScheiren) > 0) || (!activate_TearlamentsHavnis_2 && CheckRemainInDeck(CardId.TearlamentsHavnis) > 0) - || (!activate_TearlamentsMerrli_2 && CheckRemainInDeck(CardId.TearlamentsMerrli) > 0)) && Bot.GetMonstersInMainZone().Count < 4) return Util.CheckSelectCount(res, cards, min, max); + || (!activate_TearlamentsMerrli_2 && CheckRemainInDeck(CardId.TearlamentsMerrli) > 0)) && Bot.GetMonstersInMainZone().Count < 4) + { + TearlamentsKitkallos_summoned = true; + return Util.CheckSelectCount(res, cards, min, max); + } res = cards.Where(card => card != null && card.Id == CardId.TearlamentsRulkallos).ToList(); if (res.Count > 0) return Util.CheckSelectCount(res, cards, min, max); res = cards.Where(card => card != null && card.Id == CardId.TearlamentsKaleidoHeart).ToList(); - if (GetZoneCards(CardLocation.Onfield, Enemy).Count(card => card != null && !card.IsShouldNotBeTarget()) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.TearlamentsKaleidoHeart) + if (res.Count>0 && GetZoneCards(CardLocation.Onfield, Enemy).Count(card => card != null && !card.IsShouldNotBeTarget()) > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.TearlamentsKaleidoHeart) && !activate_TearlamentsKaleidoHeart_1 && (!Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) || (Bot.HasInSpellZone(CardId.PrimevalPlanetPerlereino, true, true) && activate_PrimevalPlanetPerlereino_2))) { ran_fusion_mode_3[i] = true; @@ -1477,9 +1537,15 @@ public override IList OnSelectCard(IList cards, int min, { return Util.CheckSelectCount(res, cards, min, max); } + res = cards.Where(card => card != null && card.Id == CardId.TearlamentsKaleidoHeart).ToList(); + if (res.Count > 0 && IsShouldSummonFusion(-1, -1, false, (int)Flag.TearlamentsKaleidoHeart)) + { + return Util.CheckSelectCount(res, cards, min, max); + } res = cards.Where(card => card != null && card.Id == CardId.TearlamentsKitkallos).ToList(); if (res.Count > 0) { + TearlamentsKitkallos_summoned = true; return Util.CheckSelectCount(res, cards, min, max); } return null; @@ -1563,12 +1629,12 @@ private List GetCardsIdSendToHand() { List ids = new List(); if (!activate_TearlamentsScheiren_1 && !Bot.HasInHand(CardId.TearlamentsScheiren) && CheckRemainInDeck(CardId.TearlamentsScheiren) > 0 && Bot.Hand.Count(card => card != null && card.HasType(CardType.Monster)) > 0) ids.Add(CardId.TearlamentsScheiren); - if (!activate_TearlamentsMerrli_1 && !Bot.HasInHand(CardId.TearlamentsMerrli) && CheckRemainInDeck(CardId.TearlamentsMerrli) > 0) ids.Add(CardId.TearlamentsMerrli); + if (!activate_TearlamentsMerrli_1 && !Bot.HasInHand(CardId.TearlamentsMerrli) && CheckRemainInDeck(CardId.TearlamentsMerrli) > 0 && (!summoned ||!activate_TearlamentsKitkallos_2) ) ids.Add(CardId.TearlamentsMerrli); if (!activate_TearlamentsReinoheart_1 && !Bot.HasInHand(CardId.TearlamentsReinoheart) && CheckRemainInDeck(CardId.TearlamentsReinoheart) > 0) ids.Add(CardId.TearlamentsReinoheart); if (!activate_TearlamentsScheiren_1 && !Bot.HasInHand(CardId.TearlamentsScheiren) && CheckRemainInDeck(CardId.TearlamentsScheiren) > 0) ids.Add(CardId.TearlamentsScheiren); if (!activate_TearlamentsHavnis_1 && !Bot.HasInHand(CardId.TearlamentsHavnis) && CheckRemainInDeck(CardId.TearlamentsHavnis) > 0) { - if (Duel.Player == 0 && Duel.Phase != DuelPhase.End) ids.Add(CardId.TearlamentsHavnis); + if (Duel.Player == 0 && (Duel.Phase != DuelPhase.End || AllActivated())) ids.Add(CardId.TearlamentsHavnis); else ids.Insert(0, CardId.TearlamentsHavnis); } ids.AddRange(new List() { CardId.TearlamentsScheiren, CardId.TearlamentsMerrli, CardId.TearlamentsHavnis, CardId.TearlamentsReinoheart }); @@ -1754,7 +1820,7 @@ private bool FADawnDragsterSummon() } private bool IPSummon_2() { - if (Bot.GetMonsterCount() <= 2) return false; + if ((Bot.GetMonsterCount() <= 2 && Bot.Hand.Count<=2 && !Bot.HasInHand(CardId.TearlamentsScheiren) && !activate_TearlamentsScheiren_1&& !Bot.HasInHand(CardId.TearlamentsMerrli) && !activate_TearlamentsMerrli_1 ) || AllActivated() ) return false; List key_cards = Bot.GetMonsters().Where(card => card != null && card.Id == CardId.ElShaddollWinda && !card.IsDisabled() && card.IsFaceup()).ToList(); if (key_cards.Count <= 0 || key_cards.Count > 1 || !IsAvailableLinkZone()) return false; List cards = Bot.GetMonsters().Where(card => card != null && !card.HasType(CardType.Link) && !no_link_ids.Contains(card.Id) && card.IsFaceup()).ToList(); @@ -1802,10 +1868,15 @@ private bool AbyssDwellerSummon() SetSpSummon(); return true; } + private bool AbyssDwellerSummon_2() + { + if (Bot.GetMonsters().Any(card => card != null && card.IsFaceup() && (card.Id == CardId.TearlamentsRulkallos || card.Id == CardId.TearlamentsKaleidoHeart))) return true; + return false; + } private bool IPEffect() { if (Duel.LastChainPlayer == 0) return false; - if (!Bot.HasInExtra(CardId.KnightmareUnicorn) && !Bot.HasInExtra(CardId.MekkKnightCrusadiaAvramax)) return false; + if (!Bot.HasInExtra(CardId.KnightmareUnicorn) && !Bot.HasInExtra(CardId.MekkKnightCrusadiaAvramax) && !Bot.HasInExtra(CardId.UnderworldGoddessoftheClosedWorld)) return false; List m = new List(); List pre_m = new List(); if (Bot.HasInExtra(CardId.UnderworldGoddessoftheClosedWorld)) @@ -1832,7 +1903,7 @@ private bool IPEffect() m.Add(card); if (link_count >= 2) break; } - if (link_count > 2) + if (link_count >= 2) { AI.SelectCard(CardId.UnderworldGoddessoftheClosedWorld); m.Insert(0, Card); @@ -1858,7 +1929,7 @@ private bool IPEffect() m.Add(card); if (link_count >= 2) break; } - if (link_count > 2) + if (link_count >= 2) { AI.SelectCard(CardId.MekkKnightCrusadiaAvramax); m.Insert(0, Card); @@ -1885,7 +1956,7 @@ private bool IPEffect() m.Add(card); if (link_count >= 1) break; } - if (link_count > 1) + if (link_count >= 1) { AI.SelectCard(CardId.KnightmareUnicorn); m.Insert(0, Card); @@ -2038,6 +2109,23 @@ private bool PrimevalPlanetPerlereinoEffect() private bool DestoryEnemyCard() { + if (Duel.Player == 0 && Card.Id == CardId.PrimevalPlanetPerlereino && !on_chaining_cards.Any(ccard => ccard != null && !ccard.IsDisabled() && ccard.Controller == 0 && ccard.Id == CardId.TearlamentsKitkallos) + && Bot.HasInMonstersZone(CardId.TearlamentsKitkallos) && !activate_TearlamentsKitkallos_3 + && !AllActivated()) + { + List temp = new List(); + List temp2 = new List(); + foreach (var ccard in Bot.GetMonsters()) + { + if (ccard == null) continue; + if (ccard.Id == CardId.TearlamentsKitkallos && ccard.IsDisabled()) temp.Add(ccard); + else if(ccard.Id == CardId.TearlamentsKitkallos) temp2.Add(ccard); + } + temp.AddRange(temp2); + AI.SelectCard(temp); + activate_PrimevalPlanetPerlereino_2 = true; + return true; + } ClientCard card = Util.GetProblematicEnemyMonster(0, true); if (card != null && (tgcard == null || tgcard != card)) { @@ -2094,6 +2182,9 @@ private bool DivineroftheHeraldEffect() { if (Duel.Player == 0) { + if (!IsCanSpSummon() && CheckRemainInDeck(CardId.MudoratheSwordOracle) <= 0 && CheckRemainInDeck(CardId.KeldotheSacredProtector) <= 0) return false; + if ((AllActivated() || Bot.ExtraDeck.Count(card=>card!=null && card.HasType(CardType.Fusion) && card.Id!=CardId.ElderEntityNtss)<=0) + && CheckRemainInDeck(CardId.MudoratheSwordOracle)<=0 && CheckRemainInDeck(CardId.KeldotheSacredProtector)<=0) return false; if ((activate_KelbektheAncientVanguard_2 || CheckRemainInDeck(CardId.KelbektheAncientVanguard) <= 0) && (activate_AgidotheAncientSentinel_2 || CheckRemainInDeck(CardId.AgidotheAncientSentinel) <= 0) && Bot.HasInExtra(CardId.SprightElf)) { @@ -2101,7 +2192,6 @@ private bool DivineroftheHeraldEffect() if (cards.Count() >= 1) return false; } } - activate_DivineroftheHerald = true; return true; } @@ -2135,7 +2225,7 @@ private bool MudoratheSwordOracleEffect() else if (Card.Location == CardLocation.Grave) { ClientCard chain_card = Util.GetLastChainCard(); - if (chain_card != null && chain_card.Controller == 0 && (chain_card.Id == CardId.TearlamentsRulkallos || chain_card.Id == CardId.UnderworldGoddessoftheClosedWorld || chain_card.Id == CardId.FADawnDragster)) return false; + if (chain_card != null && chain_card.Controller == 0) return false; if (GetZoneCards(CardLocation.Grave, Enemy).Count() <= 0 && Bot.Deck.Count >= 3) return false; if ((Duel.CurrentChain == null || Duel.CurrentChain.Count <= 0) && Bot.Deck.Count >= 3) return false; if (Duel.CurrentChain.Any(card => card != null && card.Controller == 0 && (card.Id == CardId.MudoratheSwordOracle || card.Id == CardId.KeldotheSacredProtector) || card.Id == CardId.NaelshaddollAriel)) return false; @@ -2194,7 +2284,7 @@ private bool TearlamentsScheirenEffect() } else { - + if (AllActivated() && (!Bot.GetMonsters().Any(card=>card!=null && card.IsFaceup() && card.Level==4) || !Bot.HasInExtra(CardId.AbyssDweller))) return false; activate_TearlamentsScheiren_1 = true; SetSpSummon(); return true; @@ -2313,6 +2403,7 @@ private bool TearlamentsRulkallosEffect() } else { + if (Card.IsDisabled()) return false; activate_TearlamentsRulkallos_1 = true; return true; } @@ -2323,22 +2414,39 @@ private bool AgidotheAncientSentinelEffect() { if (Duel.Player == 1) { - if (!activate_AgidotheAncientSentinel_2 && (Bot.HasInHand(CardId.HeraldofOrangeLight) || Bot.HasInHand(CardId.HeraldofGreenLight)) - && Bot.Hand.Count(card => card != null && card.Id == CardId.AgidotheAncientSentinel) <= 1) return false; + //if (!activate_AgidotheAncientSentinel_2 && (Bot.HasInHand(CardId.HeraldofOrangeLight) || Bot.HasInHand(CardId.HeraldofGreenLight)) + // && Bot.Hand.Count(card => card != null && card.Id == CardId.AgidotheAncientSentinel) <= 1) return false; + return false; } + else + { + if((!Bot.HasInGraveyard(CardId.KelbektheAncientVanguard) && !Bot.HasInGraveyard(CardId.MudoratheSwordOracle) + && !Bot.HasInGraveyard(CardId.KeldotheSacredProtector) && Bot.Hand.Count(card => card != null && card.Id == CardId.AgidotheAncientSentinel)<=1) + || Bot.GetMonstersInMainZone().Count>=4) return false; + } + if(!activate_AgidotheAncientSentinel_2 && (Bot.HasInHand(CardId.HeraldofOrangeLight) || Bot.HasInHand(CardId.HeraldofGreenLight)) + && Bot.Hand.Count(card => card != null && card.Id == CardId.AgidotheAncientSentinel) <= 1) return false; SetSpSummon(); return true; } else { + if (AllActivated() && !Duel.CurrentChain.Any(card => card != null && card.Controller == 0 && (card.Id == CardId.TearlamentsHavnis || card.Id == CardId.TearlamentsMerrli || card.Id == CardId.TearlamentsScheiren))) return false; activate_AgidotheAncientSentinel_2 = true; return true; } } + private bool AllActivated() + { + return (activate_TearlamentsScheiren_2 || CheckRemainInDeck(CardId.TearlamentsScheiren) <= 0) + && (activate_TearlamentsHavnis_2 || CheckRemainInDeck(CardId.TearlamentsHavnis) <= 0) + && (activate_TearlamentsMerrli_2 || CheckRemainInDeck(CardId.TearlamentsMerrli) <= 0); + } private bool KelbektheAncientVanguardEffect() { if (Card.Location == CardLocation.Hand) { + if (Duel.LastChainPlayer == 0) return false; if ((Bot.HasInHand(CardId.HeraldofOrangeLight) || Bot.HasInHand(CardId.HeraldofGreenLight)) && !activate_KelbektheAncientVanguard_2) return false; List cards = Enemy.GetMonsters(); @@ -2351,6 +2459,7 @@ private bool KelbektheAncientVanguardEffect() } else { + if (AllActivated() && !Duel.CurrentChain.Any(card=>card!=null && card.Controller==0 && (card.Id==CardId.TearlamentsHavnis||card.Id==CardId.TearlamentsMerrli || card.Id==CardId.TearlamentsScheiren))) return false; activate_KelbektheAncientVanguard_2 = true; return true; } @@ -2359,6 +2468,7 @@ private bool TearlamentsMerrliEffect() { if (Card.Location == CardLocation.MonsterZone) { + if (AllActivated()) return false; activate_TearlamentsMerrli_1 = true; return true; } @@ -2371,6 +2481,7 @@ private bool TearlamentsHavnisEffect() { if (Card.Location == CardLocation.Hand) { + if (AllActivated()) return false; activate_TearlamentsHavnis_1 = true; return true; } @@ -2393,7 +2504,8 @@ private bool TearlamentsReinoheartEffect() foreach (var card in temp) { if ((card.Id == CardId.TearlamentsScheiren && !activate_TearlamentsScheiren_1) - || (card.Id == CardId.TearlamentsMerrli && !summoned && !activate_TearlamentsMerrli_1)) + || (card.Id == CardId.TearlamentsMerrli && !summoned && !activate_TearlamentsMerrli_1) + ||(card.Id==CardId.TearlamentsHavnis && cards.Count(ccard=>ccard!=null && ccard.Id==CardId.TearlamentsHavnis) > 1)) cards.Remove(card); } if (cards.Count() <= 0) return false; @@ -2403,7 +2515,7 @@ private bool TearlamentsReinoheartEffect() } else { - if (activate_TearlamentsHavnis_2 && activate_TearlamentsHavnis_2 && activate_TearlamentsScheiren_2) return false; + if (AllActivated()) return false; activate_TearlamentsReinoheart_1 = true; return true; } @@ -2420,41 +2532,48 @@ private bool ShaddollDragonEffect() } else return true; } + private bool TearlamentsKitkallosEffect_2() + { + if (Bot.HasInMonstersZone(CardId.ElShaddollWinda, true, false, true)) return TearlamentsKitkallosEffect(); + return false; + } private bool TearlamentsKitkallosEffect() { if (ActivateDescription == Util.GetStringId(CardId.TearlamentsKitkallos, 1)) { if (Card.IsDisabled()) return false; - if (Bot.HasInMonstersZone(CardId.TearlamentsKitkallos) && !activate_TearlamentsKitkallos_3) AI.SelectCard(CardId.TearlamentsKitkallos); - else if (Bot.HasInMonstersZone(CardId.AgidotheAncientSentinel) && !activate_AgidotheAncientSentinel_2) AI.SelectCard(CardId.AgidotheAncientSentinel); - else if (Bot.HasInMonstersZone(CardId.KelbektheAncientVanguard) && !activate_KelbektheAncientVanguard_2) AI.SelectCard(CardId.KelbektheAncientVanguard); - else if (Bot.HasInMonstersZone(CardId.ShaddollDragon) && Enemy.GetSpellCount() > 0) AI.SelectCard(CardId.ShaddollDragon); - else if (!activate_TearlamentsScheiren_2 && Bot.HasInMonstersZone(CardId.TearlamentsScheiren) && IsShouldSummonFusion(SETCODE, (int)CardRace.Aqua)) AI.SelectCard(CardId.TearlamentsScheiren); - else if (!activate_TearlamentsMerrli_2 && Bot.HasInMonstersZone(CardId.TearlamentsMerrli) && IsShouldSummonFusion(SETCODE, (int)CardRace.Aqua)) AI.SelectCard(CardId.TearlamentsMerrli); - else if (!activate_TearlamentsHavnis_2 && Bot.HasInMonstersZone(CardId.TearlamentsHavnis) && IsShouldSummonFusion(SETCODE, (int)CardRace.Aqua)) AI.SelectCard(CardId.TearlamentsHavnis); - else if (Bot.HasInMonstersZone(CardId.TearlamentsReinoheart) && !activate_TearlamentsReinoheart_1) AI.SelectCard(CardId.TearlamentsReinoheart); + if (AllActivated() && !Bot.HasInGraveyard(CardId.TearlamentsKaleidoHeart) && !Bot.HasInGraveyard(CardId.TearlamentsRulkallos) + && !Bot.HasInGraveyard(CardId.TearlamentsKitkallos)) return false; + if(Bot.HasInMonstersZone(CardId.ElShaddollWinda,true,false,true)) AI.SelectCard(CardId.ElShaddollWinda); + else if (Bot.HasInMonstersZone(CardId.TearlamentsKitkallos) && !activate_TearlamentsKitkallos_3 && !AllActivated()) AI.SelectCard(CardId.TearlamentsKitkallos); + else if (!activate_TearlamentsScheiren_2 && Bot.HasInMonstersZone(CardId.TearlamentsScheiren) && IsShouldSummonFusion()) AI.SelectCard(CardId.TearlamentsScheiren); + else if (!activate_TearlamentsMerrli_2 && Bot.HasInMonstersZone(CardId.TearlamentsMerrli) && IsShouldSummonFusion()) AI.SelectCard(CardId.TearlamentsMerrli); + else if (!activate_TearlamentsHavnis_2 && Bot.HasInMonstersZone(CardId.TearlamentsHavnis) && IsShouldSummonFusion()) AI.SelectCard(CardId.TearlamentsHavnis); + else if (Bot.HasInMonstersZone(CardId.TearlamentsReinoheart) && !activate_TearlamentsReinoheart_1 && !AllActivated()) AI.SelectCard(CardId.TearlamentsReinoheart); else if (Bot.HasInMonstersZone(CardId.Eva) && Bot.Graveyard.Count(card => card != null && card.HasAttribute(CardAttribute.Light) && card.HasRace(CardRace.Fairy)) > 0 && (CheckRemainInDeck(CardId.HeraldofGreenLight) > 0 || CheckRemainInDeck(CardId.HeraldofOrangeLight) > 0)) AI.SelectCard(CardId.Eva); else if ((Bot.HasInExtra(CardId.TearlamentsRulkallos) && !Bot.HasInGraveyard(CardId.TearlamentsKitkallos)) || (Bot.HasInExtra(CardId.PredaplantDragostapelia) && Bot.Graveyard.Count(card => card != null && card.HasType(CardType.Fusion)) <= 0)) AI.SelectCard(CardId.TearlamentsKitkallos); + else if (Bot.HasInMonstersZone(CardId.ShaddollDragon) && Enemy.GetSpellCount() > 0) AI.SelectCard(CardId.ShaddollDragon); else { List mcards = GetZoneCards(CardLocation.MonsterZone, Bot); mcards.Sort(CardContainer.CompareCardAttack); AI.SelectCard(mcards); } - if (!activate_TearlamentsMerrli_1 && Bot.HasInGraveyard(CardId.TearlamentsMerrli)) AI.SelectNextCard(Bot.Graveyard.Where(card => card != null && card.Id == CardId.TearlamentsMerrli).ToList()); - else if (!activate_TearlamentsScheiren_1 && Bot.HasInGraveyard(CardId.TearlamentsScheiren)) AI.SelectNextCard(Bot.Graveyard.Where(card => card != null && card.Id == CardId.TearlamentsScheiren).ToList()); - else if (!activate_TearlamentsMerrli_1 && Bot.HasInHand(CardId.TearlamentsMerrli)) AI.SelectNextCard(Bot.Hand.Where(card => card != null && card.Id == CardId.TearlamentsMerrli).ToList()); - else if (!activate_TearlamentsReinoheart_1 && Bot.HasInGraveyard(CardId.TearlamentsReinoheart)) AI.SelectNextCard(Bot.Graveyard.Where(card => card != null && card.Id == CardId.TearlamentsReinoheart).ToList()); - else if (!activate_TearlamentsReinoheart_1 && Bot.HasInHand(CardId.TearlamentsReinoheart)) AI.SelectNextCard(Bot.Hand.Where(card => card != null && card.Id == CardId.TearlamentsReinoheart).ToList()); - else AI.SelectNextCard(CardId.TearlamentsMerrli); + if(!activate_TearlamentsKitkallos_1 && Bot.HasInGraveyard(CardId.TearlamentsKitkallos)) AI.SelectNextCard(Bot.Graveyard.Where(card => card != null && card.Id == CardId.TearlamentsKitkallos).ToList()); + if (!activate_TearlamentsMerrli_1 && Bot.HasInGraveyard(CardId.TearlamentsMerrli) && !AllActivated()) AI.SelectNextCard(Bot.Graveyard.Where(card => card != null && card.Id == CardId.TearlamentsMerrli).ToList()); + else if (!activate_TearlamentsMerrli_1 && Bot.HasInHand(CardId.TearlamentsMerrli) && !AllActivated()) AI.SelectNextCard(Bot.Hand.Where(card => card != null && card.Id == CardId.TearlamentsMerrli).ToList()); + else if (!activate_TearlamentsReinoheart_1 && Bot.HasInGraveyard(CardId.TearlamentsReinoheart) && !AllActivated()) AI.SelectNextCard(Bot.Graveyard.Where(card => card != null && card.Id == CardId.TearlamentsReinoheart).ToList()); + else if (!activate_TearlamentsReinoheart_1 && Bot.HasInHand(CardId.TearlamentsReinoheart) && !AllActivated()) AI.SelectNextCard(Bot.Hand.Where(card => card != null && card.Id == CardId.TearlamentsReinoheart).ToList()); + else AI.SelectNextCard(CardId.TearlamentsKaleidoHeart,CardId.TearlamentsRulkallos,CardId.TearlamentsKitkallos); activate_TearlamentsKitkallos_2 = true; SetSpSummon(); return true; } else if (Card.Location == CardLocation.Grave) { + if (AllActivated()) return false; activate_TearlamentsKitkallos_3 = true; return true; } @@ -2466,6 +2585,22 @@ private bool TearlamentsKitkallosEffect() return true; } } + private bool HasinZoneKeyCard(CardLocation loc) + { + if (loc == CardLocation.Hand) + { + if (!activate_TearlamentsScheiren_2 && Bot.HasInHand(CardId.TearlamentsScheiren)) return true; + if (!activate_TearlamentsHavnis_2 && Bot.HasInHand(CardId.TearlamentsHavnis)) return true; + if (!activate_TearlamentsMerrli_2 && Bot.HasInHand(CardId.TearlamentsMerrli)) return true; + } + if (loc == CardLocation.Deck) + { + if (!activate_TearlamentsScheiren_2 && CheckRemainInDeck(CardId.TearlamentsScheiren)>0) return true; + if (!activate_TearlamentsHavnis_2 && CheckRemainInDeck(CardId.TearlamentsHavnis)>0) return true; + if (!activate_TearlamentsMerrli_2 && CheckRemainInDeck(CardId.TearlamentsMerrli)>0) return true; + } + return false; + } private bool TearlamentsSulliekEffect() { if (SpellActivate()) return true; @@ -2484,12 +2619,15 @@ private bool TearlamentsSulliekEffect() { if (Duel.Player == 1 || Duel.Phase == DuelPhase.End) { + if (Duel.LastChainPlayer == 0 || Duel.CurrentChain.Count(ccard=>ccard!=null &&ccard.Controller==0 + && (ccard.Id==CardId.TearlamentsHavnis || ccard.Id == CardId.TearlamentsMerrli || ccard.Id == CardId.TearlamentsScheiren))>0) return false; if (((Bot.HasInMonstersZone(CardId.TearlamentsKitkallos,false,false,true) && !activate_TearlamentsKitkallos_3 && IsShouldSummonFusion(SETCODE, (int)CardRace.Aqua) && ((CheckRemainInDeck(CardId.TearlamentsHavnis) > 0 && !activate_TearlamentsHavnis_2) || (CheckRemainInDeck(CardId.TearlamentsMerrli) > 0 && !activate_TearlamentsMerrli_2) || (CheckRemainInDeck(CardId.TearlamentsScheiren) > 0 && !activate_TearlamentsScheiren_2)) && Bot.GetMonsterCount()<3) - ||(IsCanFusionSummon() && (Bot.HasInMonstersZone(CardId.TearlamentsScheiren,false,false,true) || Bot.HasInMonstersZone(CardId.TearlamentsHavnis,false,false,true) - || Bot.HasInMonstersZone(CardId.TearlamentsMerrli,false,false,true)))) && IsCanSpSummon()) + ||(IsCanFusionSummon() && (Bot.HasInMonstersZone(CardId.TearlamentsScheiren) || Bot.HasInMonstersZone(CardId.TearlamentsHavnis) + || Bot.HasInMonstersZone(CardId.TearlamentsMerrli))) || (!activate_TearlamentsReinoheart_2 && Bot.HasInMonstersZone(CardId.TearlamentsReinoheart) && (HasinZoneKeyCard(CardLocation.Hand) + || (Bot.Hand.Count(ccard=> ccard != null && ccard.HasSetcode(SETCODE))>0 && HasinZoneKeyCard(CardLocation.Deck)))&& IsShouldSummonFusion(SETCODE, (int)CardRace.Aqua))) && IsCanSpSummon()) { List cards = Enemy.GetMonsters().Where(ecard=> ecard != null && !ecard.IsShouldNotBeTarget() && ecard.IsFaceup()).ToList(); if (cards.Count > 0) From c3a1325dada12c5554acdab381b568856461e2a0 Mon Sep 17 00:00:00 2001 From: Ha <479310608@qq.com> Date: Thu, 9 Feb 2023 17:05:12 +0800 Subject: [PATCH 11/18] Update key card id --- Game/AI/Decks/TearlamentsExecutor.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Game/AI/Decks/TearlamentsExecutor.cs b/Game/AI/Decks/TearlamentsExecutor.cs index c976a38e..23c48a8c 100644 --- a/Game/AI/Decks/TearlamentsExecutor.cs +++ b/Game/AI/Decks/TearlamentsExecutor.cs @@ -129,7 +129,8 @@ private enum Flag List key_send_to_deck_ids = new List() { - CardId.TearlamentsMerrli,CardId.TearlamentsScheiren,CardId.TearlamentsHavnis,CardId.TearlamentsReinoheart,8736823 + CardId.TearlamentsMerrli,CardId.TearlamentsScheiren,CardId.TearlamentsHavnis,CardId.TearlamentsReinoheart,8736823, + 98715423,17484499 }; List all_key_card_ids = new List() { From 0069e2652c51551581f501bfc54e9ebbf315f04f Mon Sep 17 00:00:00 2001 From: Ha <479310608@qq.com> Date: Fri, 2 Jun 2023 15:51:58 +0800 Subject: [PATCH 12/18] Add Bot Zefra --- Decks/AI_Zefra.ydk | 79 + Game/AI/AIUtil.cs | 110 + Game/AI/CardContainer.cs | 9 + Game/AI/CardExtension.cs | 16 + Game/AI/Decks/ZefraExecutor.cs | 2133 ++++++++++++++++++ Game/AI/Enums/NotBeSynchroMaterialMonster.cs | 32 + Game/AI/Enums/NotBeXyzMaterialMonster.cs | 13 + WindBot.csproj | 3 + 8 files changed, 2395 insertions(+) create mode 100644 Decks/AI_Zefra.ydk create mode 100644 Game/AI/Decks/ZefraExecutor.cs create mode 100644 Game/AI/Enums/NotBeSynchroMaterialMonster.cs create mode 100644 Game/AI/Enums/NotBeXyzMaterialMonster.cs diff --git a/Decks/AI_Zefra.ydk b/Decks/AI_Zefra.ydk new file mode 100644 index 00000000..a8c7aff6 --- /dev/null +++ b/Decks/AI_Zefra.ydk @@ -0,0 +1,79 @@ +#created by ... +#main +49036338 +29432356 +29432356 +29432356 +3611830 +76794549 +5560911 +96227613 +96227613 +27354732 +58990362 +58990362 +58990362 +20773176 +22617205 +69610326 +14785765 +95401059 +31314549 +96223501 +52159691 +21495657 +21495657 +57777714 +92559258 +92559258 +92559258 +38814750 +38814750 +38814750 +72291078 +23434538 +23434538 +23434538 +94693857 +9742784 +19580308 +11609969 +61488417 +2295440 +23581825 +38943357 +38943357 +38943357 +41620959 +41620959 +41620959 +73628505 +74580251 +74580251 +74580251 +81439173 +24224830 +24224830 +46372010 +32354768 +32354768 +32354768 +35561352 +57831349 +#extra +27548199 +74586817 +80696379 +33158448 +65536818 +79606837 +88581108 +96157835 +73347079 +74997493 +44097050 +24094258 +50588353 +36429703 +41999284 +!side diff --git a/Game/AI/AIUtil.cs b/Game/AI/AIUtil.cs index 0005cb12..4a0718ce 100644 --- a/Game/AI/AIUtil.cs +++ b/Game/AI/AIUtil.cs @@ -442,5 +442,115 @@ public IList CheckSelectCount(IList _selected, IList + /// Get all xyz materials lists that xyz monster required level in the 'pre_materials' list + /// + /// Original materials + /// Xyz monster required level + /// SpSummon rule:number of xyz materials + /// More xyz materials + /// Filter xyz materials func + /// + public List> GetXyzMaterials(IList param_pre_materials, int level, int material_count, bool material_count_above = false, Func material_func = null) + { + List> result = new List>(); + List pre_materials = param_pre_materials?.Where(card => card != null && !(card.IsFacedown() & card.Location == CardLocation.MonsterZone) && card.Level == level && !card.IsMonsterNotBeXyzMaterial()).ToList(); + if (pre_materials?.Count() < material_count) return result; + Func default_func = card => true; + material_func = material_func ?? default_func; + for (int i = 1; i < Math.Pow(2, pre_materials.Count); i++) + { + List temp_materials = new List(); + string binaryString = Convert.ToString(i, 2).PadLeft(pre_materials.Count, '0'); + char[] reversedBinaryChars = binaryString.Reverse().ToArray(); + for (int j = 0; j < pre_materials.Count; j++) + { + if (reversedBinaryChars[j] == '1' && material_func(pre_materials[j])) + { + temp_materials.Add(pre_materials[j]); + } + } + if (material_count_above ? temp_materials.Count >= material_count : temp_materials.Count == material_count) + { + result.Add(temp_materials); + } + } + return result; + } + + /// + /// Get all synchro materials lists that synchro monster level == param 'level' in the 'pre_materials' list + /// + /// Original materials + /// Synchro monster level + /// SpSummon rule:number of tuner monsters + /// SpSummon rule:number of non-tuner monsters count + /// More tuner monsters + /// More non-tuner monsters + /// Filter tuner monsters func + /// Filter non-tuner monsters func + /// + public List> GetSynchroMaterials(IList param_pre_materials, int level, int tuner_count, int n_tuner_count, bool tuner_count_above = false, bool n_tuner_count_above = true, Func tuner_func = null, Func n_tuner_func = null) + { + List> t_result = new List>(); + List pre_materials = param_pre_materials?.Where(card => card != null && !(card.IsFacedown() & card.Location == CardLocation.MonsterZone) && card.Level > 0 && !card.IsMonsterNotBeSynchroMaterial()).ToList(); + if (pre_materials?.Count() < tuner_count + n_tuner_count) return t_result; + Func default_func = card => true; + tuner_func = tuner_func ?? default_func; + n_tuner_func = n_tuner_func ?? default_func; + pre_materials.Sort(CardContainer.CompareCardLevel); + Stack materials_stack = new Stack(); + for (var i = 0; i < pre_materials.Count; i++) + { + if (pre_materials[i].Level > level) break; + materials_stack.Push(new object[] { pre_materials[i].Level, i, pre_materials[i].Level, new List { pre_materials[i] } }); + } + while (materials_stack.Count > 0) + { + object[] data = materials_stack.Pop(); + int num = (int)data[0]; + int index = (int)data[1]; + int sum = (int)data[2]; + List temp_materials = (List)data[3]; + if (sum == level) + { + t_result.Add(temp_materials); + } + else if (sum < level) + { + for (var i = index + 1; i < pre_materials.Count; i++) + { + if (pre_materials[i].Level > level - sum) break; + if (i > index + 1 && pre_materials[i].Level == pre_materials[i - 1].Level) continue; + var new_temp_materials = new List(temp_materials); + new_temp_materials.Add(pre_materials[i]); + materials_stack.Push(new object[] { pre_materials[i].Level, i, sum + pre_materials[i].Level, new_temp_materials }); + } + } + } + List> result = new List>(); + for (int i = 0; i < t_result.Count; i++) + { + List materials = t_result[i]; + List tuner_materials = new List(); + List n_tuner_materials = new List(); + foreach (ClientCard material in materials) + { + if (material.HasType(CardType.Tuner) && tuner_func(material)) + { + tuner_materials.Add(material); + } + else if (material.Level > 0 && n_tuner_func(material)) + { + n_tuner_materials.Add(material); + } + } + if ((tuner_count_above ? tuner_materials.Count >= tuner_count : tuner_materials.Count == tuner_count) + && (n_tuner_count_above ? n_tuner_materials.Count >= n_tuner_count : n_tuner_materials.Count == n_tuner_count)) + result.Add(materials); + } + return result; + } } } \ No newline at end of file diff --git a/Game/AI/CardContainer.cs b/Game/AI/CardContainer.cs index 1b263e59..bc69190c 100644 --- a/Game/AI/CardContainer.cs +++ b/Game/AI/CardContainer.cs @@ -25,6 +25,15 @@ public static int CompareCardLevel(ClientCard cardA, ClientCard cardB) return 1; } + public static int CompareCardLink(ClientCard cardA, ClientCard cardB) + { + if (cardA.LinkCount < cardB.LinkCount) + return -1; + if (cardA.LinkCount == cardB.LinkCount) + return 0; + return 1; + } + public static int CompareDefensePower(ClientCard cardA, ClientCard cardB) { if (cardA == null && cardB == null) diff --git a/Game/AI/CardExtension.cs b/Game/AI/CardExtension.cs index 1fcc4530..684848aa 100644 --- a/Game/AI/CardExtension.cs +++ b/Game/AI/CardExtension.cs @@ -78,5 +78,21 @@ public static bool IsFusionSpell(this ClientCard card) { return Enum.IsDefined(typeof(FusionSpell), card.Id); } + + /// + /// Is this monster not be synchro material? + /// + public static bool IsMonsterNotBeSynchroMaterial(this ClientCard card) + { + return Enum.IsDefined(typeof(NotBeSynchroMaterialMonster), card.Id); + } + + /// + /// Is this monster not be xyz material? + /// + public static bool IsMonsterNotBeXyzMaterial(this ClientCard card) + { + return Enum.IsDefined(typeof(NotBeXyzMaterialMonster), card.Id); + } } } \ No newline at end of file diff --git a/Game/AI/Decks/ZefraExecutor.cs b/Game/AI/Decks/ZefraExecutor.cs new file mode 100644 index 00000000..2e02e0e9 --- /dev/null +++ b/Game/AI/Decks/ZefraExecutor.cs @@ -0,0 +1,2133 @@ +using YGOSharp.OCGWrapper; +using YGOSharp.OCGWrapper.Enums; +using System.Collections.Generic; +using System.Linq; +using System; +using WindBot; +using WindBot.Game; +using WindBot.Game.AI; +namespace WindBot.Game.AI.Decks +{ + //Ctrl A + Ctrl F format code + [Deck("Zefra", "AI_Zefra")] + class ZefraExecutor : DefaultExecutor + { + public class CardId + { + //main code + public const int PSY_FrameDriver = 49036338; + public const int Zefraath = 29432356; + public const int TheMightyMasterofMagic = 3611830; + public const int AstrographSorcerer = 76794549; + public const int DestrudotheLostDragon_Frisson = 5560911; + public const int SupremeKingGateZero = 96227613; + public const int MythicalBeastJackalKing = 27354732; + public const int SecretoftheYangZing = 58990362; + public const int FlameBeastoftheNekroz = 20773176; + public const int StellarknightZefraxciton = 22617205; + public const int SupremeKingDragonDarkwurm = 69610326; + public const int Blackwing_ZephyrostheElite = 14785765; + public const int ShaddollZefracore = 95401059; + public const int Raidraptor_SingingLanius = 31314549; + public const int SatellarknightZefrathuban = 96223501; + public const int Raider_Wing = 52159691; + public const int Zefraxi_TreasureoftheYangZing = 21495657; + public const int RitualBeastTamerZeframpilica = 57777714; + public const int ServantofEndymion = 92559258; + public const int PSY_FramegearGamma = 38814750; + public const int MechaPhantomBeastO_Lion = 72291078; + public const int MaxxC = 23434538; + public const int Deskbot001 = 94693857; + public const int JetSynchron = 9742784; + public const int DDLamia = 19580308; + public const int DDSavantKepler = 11609969; + public const int LightoftheYangZing = 61488417; + public const int Rank_Up_MagicSoulShaveForce = 23581825; + public const int SpellPowerMastery = 38943357; + public const int DragonShrine = 41620959; + public const int Terraforming = 73628505; + public const int ZefraProvidence = 74580251; + public const int FoolishBurial = 81439173; + public const int CalledbytheGrave = 24224830; + public const int DarkContractwiththGate = 46372010; + public const int OracleofZefra = 32354768; + public const int ZefraWar = 96073342; + public const int ZefraDivineStrike = 35561352; + public const int NinePillarsofYangZing = 57831349; + public const int OneforOne = 2295440; + + //extra code + public const int BorreloadSavageDragon = 27548199; + public const int Odd_EyesMeteorburstDragon = 80696379; + public const int F_A_DawnDragster = 33158448; + public const int Denglong_FirstoftheYangZing = 65536818; + public const int HeraldoftheArcLight = 79606837; + public const int TruKingofAllCalamities = 88581108; + public const int Raidraptor_ArsenalFalcon = 96157835; + public const int Raidraptor_ForceStrix = 73347079; + public const int SaryujaSkullDread = 74997493; + public const int MechaPhantomBeastAuroradon = 44097050; + public const int HeavymetalfoesElectrumite = 24094258; + public const int CrystronHalqifibrax = 50588353; + public const int Raidraptor_WiseStrix = 36429703; + public const int Linkuriboh = 41999284; + public const int PSY_FramelordOmega = 74586817; + + public const int MechaPhantomBeastToken = 44097051; + } + private bool opt_0 = false; + private bool opt_1 = false; + private bool opt_2 = false; + //edo false + private const bool IS_YGOPRO = true; + private const int P_ACTIVATE_DESC = 1160; + //private const int P_SPSUMMON_DESC = 1163; + private int p_count = 0; + private int spell_activate_count = 0; + private bool summoned = false; + private bool link_summoned = false; + private bool p_summoned = false; + private bool p_summoning = false; + private bool activate_SupremeKingDragonDarkwurm_1 = false; + private bool activate_p_Zefraath = false; + private bool activate_OracleofZefra = false; + private bool activate_ZefraProvidence = false; + private bool activate_SupremeKingDragonDarkwurm_2 = false; + private bool activate_JetSynchron = false; + private bool activate_Blackwing_ZephyrostheElite = false; + private bool activate_DragonShrine = false; + private bool activate_SpellPowerMastery = false; + private bool activate_DestrudotheLostDragon_Frisson = false; + private bool activate_DarkContractwiththGate = false; + private bool activate_SecretoftheYangZing = false; + private bool activate_ShaddollZefracore = false; + private bool activate_DDLamia = false; + private bool xyz_mode = false; + private bool Blackwing_ZephyrostheElite_activate = false; + private bool HeavymetalfoesElectrumite_activate = false; + private bool should_destory = false; + private List Odd_EyesMeteorburstDragon_materials = new List(); + private static class Toos + { + public delegate bool Delegate(ClientCard card); + private static bool DefaultFunc(ClientCard card) + { + return true; + } + public static bool LinqAny(IList cards, Delegate @delegate = null) + { + if (cards == null) return false; + @delegate = @delegate ?? DefaultFunc; + return cards.Any(card => card != null && @delegate(card)); + } + public static bool LinqAll(IList cards, Delegate @delegate = null, bool flag = true) + { + if (cards == null) return false; + IList rcards = new List(cards); + if (flag) rcards = cards.Where(card => card != null).ToList(); + @delegate = @delegate ?? DefaultFunc; + return rcards.All(card => card != null && @delegate(card)); + } + public static int LinqCount(IList cards, Delegate @delegate = null) + { + if (cards == null) return -1; + @delegate = @delegate ?? DefaultFunc; + return cards.Count(card => card != null && @delegate(card)); + } + public static List LinqWhere(IList cards, Delegate @delegate = null) + { + if (cards == null) return new List(); + @delegate = @delegate ?? DefaultFunc; + return cards.Where(card => card != null && @delegate(card)).ToList(); + } + } + private static class Func + { + private static IList _parameters = new List(); + private static List no_p_spsummon_ids = new List() + { + CardId.Zefraath + }; + private static List selectCardList = null; + private static List selectCardIdList = null; + public static List GetSelectCardList() + { + if (selectCardList == null) + { + selectCardList = new List(); + } + else + { + selectCardList.Clear(); + } + return selectCardList; + } + public static List GetSelectCardIdList() + { + if (selectCardIdList == null) + { + selectCardIdList = new List(); + } + else + { + selectCardIdList.Clear(); + } + return selectCardIdList; + } + public static bool IsLocation(ClientCard card) + { + return card.Location == (CardLocation)_parameters[0]; + } + public static bool IsCode(ClientCard card) + { + return card.IsCode((int)_parameters[0]); + } + public static bool IsCode(ClientCard card, params int[] ids) + { + if (card == null) return false; + foreach (var id in ids) + { + if (card.IsCode(id)) return true; + } + return false; + } + public static bool HasSetCode(ClientCard card) + { + return card.HasSetcode((int)_parameters[0]); + } + public static bool HasSetCode(ClientCard card, params int[] set_codes) + { + if (card == null) return false; + foreach (var set_code in set_codes) + { + if (card.HasSetcode(set_code)) return true; + } + return false; + } + public static bool IsFaceUp(ClientCard card) + { + return card.IsFaceup(); + } + public static bool HasAttribute(ClientCard card) + { + return card.HasAttribute((CardAttribute)_parameters[0]); + } + public static bool HasRace(ClientCard card) + { + return card.HasRace((CardRace)_parameters[0]); + } + public static bool HasLevel(ClientCard card) + { + return card.Level == (int)_parameters[0]; + } + public static bool HasType(ClientCard card) + { + return card.HasType((CardType)_parameters[0]); + } + public static bool IsOnfield(ClientCard card) + { + return (card.Location & CardLocation.MonsterZone) > 0 || (card.Location & CardLocation.SpellZone) > 0; + } + public static Toos.Delegate NegateFunc(Toos.Delegate @delegate) + { + return card => { return !@delegate(card); }; + } + private static void SetParameters(IList parameters) + { + ClearParameters(); + for (int i = 0; i < parameters?.Count(); ++i) + { + _parameters.Add(parameters[i]); + } + } + private static void ClearParameters() + { + _parameters.Clear(); + } + public static bool CardsCheckAny(IList cards, Toos.Delegate @delegate = null, params object[] parameters) + { + SetParameters(parameters); + return Toos.LinqAny(cards, @delegate); + } + public static bool CardsCheckALL(IList cards, Toos.Delegate @delegate = null, bool all = true, params object[] parameters) + { + SetParameters(parameters); + return Toos.LinqAll(cards, @delegate, all); + } + public static int CardsCheckCount(IList cards, Toos.Delegate @delegate = null, params object[] parameters) + { + SetParameters(parameters); + return Toos.LinqCount(cards, @delegate); + } + public static List CardsCheckWhere(IList cards, Toos.Delegate @delegate = null, params object[] parameters) + { + SetParameters(parameters); + return Toos.LinqWhere(cards, @delegate); + } + public static List MergeList(params List[] lists) + { + List result = new List(); + foreach (var list in lists) + { + if (list == null) continue; + result.AddRange(list); + } + return result; + } + public static List CardsIdToClientCards(IList cardsId, IList cardsList, bool uniqueId = true) + { + if (cardsList?.Count() <= 0 || cardsId?.Count() <= 0) return new List(); + List result = new List(); + cardsId = cardsId.Distinct().ToList(); + foreach (var cardid in cardsId) + { + List cards = CardsCheckWhere(cardsList, IsCode, cardid); + if (cards.Count <= 0) continue; + if (uniqueId) result.Add(cards.First()); + else result.AddRange(cards); + } + return result; + } + public static List ClientCardsToCardsId(IList cardsList, bool uniqueId = false, bool alias = false) + { + if (cardsList?.Count <= 0) return new List(); + List res = new List(); + foreach (var card in cardsList) + { + if (card == null) continue; + if (card.Alias != 0 && alias && !(res.Contains(card.Alias) & uniqueId)) res.Add(card.Alias); + else if (card.Id != 0 && !(res.Contains(card.Id) & uniqueId)) res.Add(card.Id); + } + return res; + } + //AIUtil + public static IList CheckSelectCount(AIUtil util, IList _selected, IList cards, int min, int max) + { + return _selected?.Count() <= 0 ? null : util.CheckSelectCount(_selected, cards, min, max); + } + public static List GetZoneCards(ClientField player, CardLocation loc, bool feceup = false, bool disable = false) + { + if (!feceup) disable = false; + List result = new List(); + if ((loc & CardLocation.Hand) > 0) result.AddRange(Toos.LinqWhere(player.Hand)); + if ((loc & CardLocation.MonsterZone) > 0) result.AddRange(Toos.LinqWhere(player.MonsterZone, card => !(!card.IsFaceup() & feceup) && !(!card.IsDisabled() & disable))); + if ((loc & CardLocation.SpellZone) > 0) result.AddRange(Toos.LinqWhere(player.SpellZone, card => !(!card.IsFaceup() & feceup) && !(!card.IsDisabled() & disable))); + if ((loc & CardLocation.PendulumZone) > 0) result.AddRange(Toos.LinqWhere(new List() { player.SpellZone[0], player.SpellZone[4] }, card => !(!card.IsFaceup() & feceup) && !(!card.IsDisabled() & disable))); + if ((loc & CardLocation.Grave) > 0) result.AddRange(Toos.LinqWhere(player.Graveyard)); + if ((loc & CardLocation.Removed) > 0) result.AddRange(Toos.LinqWhere(player.Banished, card => !(!card.IsFaceup() & feceup))); + if ((loc & CardLocation.Extra) > 0) result.AddRange(Toos.LinqWhere(player.ExtraDeck, card => !(!card.IsFaceup() & feceup))); + result = result.Distinct().ToList(); + return result; + } + public static bool HasInZone(ClientField player, CardLocation loc, int id, bool feceup = false, bool disable = false) + { + return CardsCheckAny(GetZoneCards(player, loc, feceup, disable), IsCode, id); + } + public static bool SpellActivate(ClientCard card) + { + return card.Location == CardLocation.Hand || (card.Location == CardLocation.SpellZone && card.IsFacedown()); + } + public static bool PendulumActivate(int desc, ClientCard card) + { + return desc == P_ACTIVATE_DESC && card.Location == CardLocation.Hand; + } + private static Toos.Delegate GetPSpSummonLimilt(ClientCard pcard) + { + int setcode = -1; + int setcode2 = -1; + switch (pcard.Id) + { + case CardId.SecretoftheYangZing: + case CardId.Zefraxi_TreasureoftheYangZing: { setcode = 0xc4; setcode2 = 0x9e; break; } + case CardId.FlameBeastoftheNekroz: { setcode = 0xc4; setcode2 = 0xb4; break; } + case CardId.StellarknightZefraxciton: + case CardId.SatellarknightZefrathuban: { setcode = 0xc4; setcode2 = 0x109c; break; } + case CardId.RitualBeastTamerZeframpilica: { setcode = 0xc4; setcode2 = 0x10b5; break; } + case CardId.ShaddollZefracore: { setcode = 0xc4; setcode2 = 0x9d; break; } + case CardId.DDSavantKepler: { setcode = 0xaf; break; } + default: break; + } + return card => { + return (setcode == -1 ? true : card.HasSetcode(setcode)) + || (setcode2 == -1 ? true : card.HasSetcode(setcode2)); + }; + } + public static int[] GetPScales(ClientField bot) + { + int[] pScales = new int[2]; + ClientCard lcard = bot.SpellZone[0]; + ClientCard rcard = bot.SpellZone[4]; + pScales[0] = (lcard == null || lcard.IsFacedown() || !lcard.HasType(CardType.Pendulum)) ? -1 : lcard.RScale; + pScales[1] = (rcard == null || rcard.IsFacedown() || !rcard.HasType(CardType.Pendulum)) ? -1 : rcard.LScale; + return pScales; + } + public static int GetPScale(ClientField bot, int id) + { + bool rscale = false; + ClientCard pcard = null; + if (bot.SpellZone[0] != null && bot.SpellZone[0].Id == id) + { + pcard = bot.SpellZone[4]; + } + else + { + pcard = bot.SpellZone[0]; + rscale = true; + } + if (pcard == null || pcard.IsFacedown() || !pcard.HasType(CardType.Pendulum)) return -1; + return rscale ? pcard.RScale : pcard.LScale; + } + public static List GetPSpSummonMonster(ClientField bot, ClientCard lcard, ClientCard rcard) + { + if (lcard == null || rcard == null || !lcard.HasType(CardType.Pendulum) || !rcard.HasType(CardType.Pendulum) || (IsOnfield(lcard) & lcard.IsFacedown()) || (IsOnfield(lcard) & rcard.IsFacedown())) return null; + int MaxScale = Math.Max(lcard.RScale, rcard.LScale); + int MinScale = Math.Min(lcard.RScale, rcard.LScale); + Toos.Delegate @llimit = GetPSpSummonLimilt(lcard); + Toos.Delegate @rlimit = GetPSpSummonLimilt(rcard); + return CardsCheckWhere(GetZoneCards(bot, CardLocation.Hand | CardLocation.Extra, true), + card => { + return card != lcard && card != rcard && card.HasType(CardType.Monster) && card.Level > MinScale && card.Level < MaxScale + && !no_p_spsummon_ids.Contains(card.Id) && @llimit(card) && @rlimit(card); + }); ; + } + public static bool IsActivateScale(ClientField bot, ClientCard card) + { + ClientCard lcard = bot.SpellZone[0]; + ClientCard rcard = bot.SpellZone[4]; + List spSummonMonster = null; + if (lcard != null && rcard != null) return false; + if (lcard == null && rcard == null) return true; + + spSummonMonster = lcard == null ? GetPSpSummonMonster(bot, card, rcard) : GetPSpSummonMonster(bot, lcard, card); + return spSummonMonster?.Count() > 0; + } + public static int CompareCardScale(ClientCard cardA, ClientCard cardB) + { + if (cardA.RScale < cardB.RScale) + return -1; + if (cardA.RScale == cardB.RScale) + return 0; + return 1; + } + public static List GetCardsRepeatCardsId(IList cards) + { + if (cards?.Count <= 0) return new List() { -1 }; + IList cardsid = new List(); + List res = new List(); + foreach (var card in cards) + { + if (card == null) continue; + cardsid.Add(card.Id); + } + for (int i = 0; i < cardsid.Count; i++) + { + if (res.Count >= 0 && res.Contains(cardsid[i])) continue; + int times = 0; + for (int j = 0; j < cardsid.Count; j++) + { + if (times > 1) { res.Add(cardsid[i]); break; } + if (cardsid[i] == cardsid[j]) ++times; + } + } + if (res.Count <= 0) return new List() { -1 }; + return res; + } + } + public ZefraExecutor(GameAI ai, Duel duel) : base(ai, duel) + { + AddExecutor(ExecutorType.Activate, CardId.CalledbytheGrave, CalledbytheGraveEffect); + AddExecutor(ExecutorType.Activate, CardId.BorreloadSavageDragon, BorreloadSavageDragonEffect_2); + AddExecutor(ExecutorType.Activate, CardId.F_A_DawnDragster); + AddExecutor(ExecutorType.Activate, CardId.NinePillarsofYangZing, NinePillarsofYangZingEffect); + AddExecutor(ExecutorType.Activate, CardId.ZefraDivineStrike, ZefraDivineStrikeEffect); + AddExecutor(ExecutorType.Activate, CardId.HeraldoftheArcLight, HeraldoftheArcLightEffect); + AddExecutor(ExecutorType.Activate, CardId.TruKingofAllCalamities,TruKingofAllCalamitiesEffect); + AddExecutor(ExecutorType.Activate, CardId.PSY_FramegearGamma); + AddExecutor(ExecutorType.Activate, CardId.MaxxC, DefaultMaxxC); + AddExecutor(ExecutorType.Activate, CardId.SupremeKingDragonDarkwurm, SupremeKingDragonDarkwurmEffect); + AddExecutor(ExecutorType.Activate, CardId.ServantofEndymion, ServantofEndymionEffect); + AddExecutor(ExecutorType.Activate, CardId.Terraforming, TerraformingEffect); + AddExecutor(ExecutorType.Activate, CardId.SpellPowerMastery); + AddExecutor(ExecutorType.Activate, CardId.DragonShrine, DragonShrineEffect); + AddExecutor(ExecutorType.Activate, CardId.FoolishBurial, FoolishBurialEffect); + AddExecutor(ExecutorType.Activate, CardId.DarkContractwiththGate, DarkContractwiththGateEffect); + AddExecutor(ExecutorType.Activate, CardId.Terraforming); + AddExecutor(ExecutorType.Activate, CardId.OracleofZefra, OracleofZefraEffect); + AddExecutor(ExecutorType.Activate, CardId.ZefraProvidence, ZefraProvidenceEffect); + AddExecutor(ExecutorType.Activate, CardId.AstrographSorcerer, AstrographSorcererEffect); + AddExecutor(ExecutorType.Activate, CardId.HeavymetalfoesElectrumite, HeavymetalfoesElectrumiteEffect); + AddExecutor(ExecutorType.Summon, CardId.SupremeKingDragonDarkwurm, SupremeKingDragonDarkwurmSummon); + AddExecutor(ExecutorType.Activate, CardId.SupremeKingGateZero, SupremeKingGateZeroEffect); + AddExecutor(ExecutorType.Activate, CardId.Zefraxi_TreasureoftheYangZing, Zefraxi_TreasureoftheYangZingEffect); + AddExecutor(ExecutorType.Activate, CardId.SatellarknightZefrathuban, SatellarknightZefrathubanEffect); + AddExecutor(ExecutorType.Activate, CardId.RitualBeastTamerZeframpilica, RitualBeastTamerZeframpilicaEffect); + AddExecutor(ExecutorType.Activate, CardId.SecretoftheYangZing, SecretoftheYangZingEffect); + AddExecutor(ExecutorType.Activate, CardId.FlameBeastoftheNekroz, FlameBeastoftheNekrozEffect); + AddExecutor(ExecutorType.Activate, CardId.ShaddollZefracore, ShaddollZefracoreEffect); + AddExecutor(ExecutorType.Activate, CardId.StellarknightZefraxciton, StellarknightZefraxcitonEffect); + AddExecutor(ExecutorType.Activate, CardId.SupremeKingDragonDarkwurm, SupremeKingGateZeroEffect); + AddExecutor(ExecutorType.Activate, CardId.AstrographSorcerer, SupremeKingGateZeroEffect); + AddExecutor(ExecutorType.Activate, CardId.Zefraath, ZefraathEffect); + AddExecutor(ExecutorType.Activate, CardId.DDSavantKepler, DDSavantKeplerEffect); + AddExecutor(ExecutorType.Summon, CardId.DDSavantKepler, DDSavantKeplerSummon); + AddExecutor(ExecutorType.Activate, CardId.ServantofEndymion, ServantofEndymionEffect_3); + AddExecutor(ExecutorType.Activate, CardId.MythicalBeastJackalKing, MythicalBeastJackalKingEffect); + AddExecutor(ExecutorType.SpSummon, Psummon); + AddExecutor(ExecutorType.Activate, CardId.OneforOne, OneforOneEffect); + AddExecutor(ExecutorType.Activate, CardId.ServantofEndymion, ServantofEndymionEffect_2); + AddExecutor(ExecutorType.Activate, CardId.CrystronHalqifibrax, CrystronHalqifibraxEffect); + AddExecutor(ExecutorType.SpSummon, CardId.Raidraptor_ArsenalFalcon, Raidraptor_ArsenalFalconSummon); + AddExecutor(ExecutorType.Activate, CardId.Raidraptor_ArsenalFalcon, Raidraptor_ArsenalFalconEffect); + AddExecutor(ExecutorType.SpSummon, CardId.HeavymetalfoesElectrumite, HeavymetalfoesElectrumiteSummon); + //xyz mode + AddExecutor(ExecutorType.SpSummon, CardId.Odd_EyesMeteorburstDragon, Odd_EyesMeteorburstDragonSummon); + AddExecutor(ExecutorType.Activate, CardId.Odd_EyesMeteorburstDragon, Odd_EyesMeteorburstDragonEffect); + AddExecutor(ExecutorType.SpSummon, CardId.Raidraptor_WiseStrix, Raidraptor_WiseStrixSummon); + AddExecutor(ExecutorType.Activate, CardId.Raidraptor_WiseStrix, Raidraptor_WiseStrixEffect); + AddExecutor(ExecutorType.Activate, CardId.Blackwing_ZephyrostheElite, Blackwing_ZephyrostheEliteEffect); + AddExecutor(ExecutorType.SpSummon, CardId.Raidraptor_ForceStrix, Raidraptor_ForceStrixSummon); + AddExecutor(ExecutorType.Activate, CardId.Raidraptor_ForceStrix, Raidraptor_ForceStrixEffect); + AddExecutor(ExecutorType.Activate, CardId.Rank_Up_MagicSoulShaveForce); + AddExecutor(ExecutorType.Activate, CardId.Raider_Wing, Raider_WingEffect); + AddExecutor(ExecutorType.SpSummon, CardId.Raidraptor_SingingLanius); + //xyz mode + AddExecutor(ExecutorType.SpSummon, CardId.SaryujaSkullDread, SaryujaSkullDreadSummon); + AddExecutor(ExecutorType.Activate, CardId.SaryujaSkullDread, SaryujaSkullDreadEffect); + AddExecutor(ExecutorType.SpSummon, CardId.Denglong_FirstoftheYangZing, Denglong_FirstoftheYangZingSummon_2); + AddExecutor(ExecutorType.SpSummon, CardId.BorreloadSavageDragon, BorreloadSavageDragonSummon_2); + AddExecutor(ExecutorType.SpSummon, CardId.CrystronHalqifibrax, CrystronHalqifibraxSummon); + AddExecutor(ExecutorType.SpSummon, CardId.Linkuriboh, LinkuribohSummon); + AddExecutor(ExecutorType.Activate, CardId.DDLamia, DDLamiaEffect); + AddExecutor(ExecutorType.SpSummon, CardId.MechaPhantomBeastAuroradon, MechaPhantomBeastAuroradonSummon); + AddExecutor(ExecutorType.Activate, CardId.MechaPhantomBeastAuroradon, MechaPhantomBeastAuroradonEffect); + AddExecutor(ExecutorType.SpSummon, CardId.Denglong_FirstoftheYangZing, Denglong_FirstoftheYangZingSummon); + AddExecutor(ExecutorType.Activate, CardId.Denglong_FirstoftheYangZing, Denglong_FirstoftheYangZingEffect); + AddExecutor(ExecutorType.SpSummon, CardId.BorreloadSavageDragon, BorreloadSavageDragonSummon); + AddExecutor(ExecutorType.Activate, CardId.BorreloadSavageDragon, BorreloadSavageDragonEffect); + AddExecutor(ExecutorType.SpSummon, CardId.HeraldoftheArcLight); + AddExecutor(ExecutorType.SpSummon, CardId.F_A_DawnDragster, F_A_DawnDragsterSummon); + AddExecutor(ExecutorType.SpSummon, CardId.PSY_FramelordOmega, BorreloadSavageDragonSummon); + AddExecutor(ExecutorType.Activate, CardId.PSY_FramelordOmega, PSY_FramelordOmegaEffect); + AddExecutor(ExecutorType.Activate, CardId.Linkuriboh, LinkuribohEffect); + AddExecutor(ExecutorType.Activate, CardId.MechaPhantomBeastO_Lion); + AddExecutor(ExecutorType.Activate, CardId.JetSynchron, JetSynchronEffect); + AddExecutor(ExecutorType.Activate, CardId.Blackwing_ZephyrostheElite, Blackwing_ZephyrostheEliteEffect_2); + AddExecutor(ExecutorType.Summon, CardId.JetSynchron, DDLamiaSummon); + AddExecutor(ExecutorType.Summon, CardId.DDLamia, DDLamiaSummon); + AddExecutor(ExecutorType.Summon, CardId.Deskbot001, DDLamiaSummon); + AddExecutor(ExecutorType.Summon, CardId.LightoftheYangZing, DDLamiaSummon); + List p_summon_ids = new List() {CardId.Zefraxi_TreasureoftheYangZing,CardId.SatellarknightZefrathuban,CardId.ServantofEndymion,CardId.RitualBeastTamerZeframpilica, + CardId.DDSavantKepler,CardId.StellarknightZefraxciton,CardId.ShaddollZefracore,CardId.SupremeKingDragonDarkwurm}; + for (int i = 0; i < p_summon_ids.Count; ++i) AddExecutor(ExecutorType.Summon, p_summon_ids[i], DefaultSummon); + AddExecutor(ExecutorType.Summon, DefaultSummon); + AddExecutor(ExecutorType.Activate, CardId.Deskbot001); + AddExecutor(ExecutorType.Activate, CardId.TheMightyMasterofMagic, TheMightyMasterofMagicEffect); + AddExecutor(ExecutorType.Activate, CardId.DestrudotheLostDragon_Frisson, DestrudotheLostDragon_FrissonEffect); + AddExecutor(ExecutorType.Summon, CardId.Blackwing_ZephyrostheElite, DefaultSummon_2); + AddExecutor(ExecutorType.Summon, DefaultSummon_2); + AddExecutor(ExecutorType.SpSummon, CardId.Linkuriboh); + AddExecutor(ExecutorType.SpellSet, SpellSet); + AddExecutor(ExecutorType.SpellSet, SpellSet_2); + AddExecutor(ExecutorType.Repos, DefaultMonsterRepos); + AddExecutor(ExecutorType.Activate, DefaultPActivate); + } + public override void OnNewTurn() + { + activate_SupremeKingDragonDarkwurm_1 = false; + activate_SupremeKingDragonDarkwurm_2 = false; + activate_JetSynchron = false; + activate_DestrudotheLostDragon_Frisson = false; + activate_ZefraProvidence = false; + activate_OracleofZefra = false; + activate_DragonShrine = false; + activate_p_Zefraath = false; + p_summoned = false; + summoned = false; + activate_DarkContractwiththGate = false; + activate_SecretoftheYangZing = false; + activate_ShaddollZefracore = false; + activate_SpellPowerMastery = false; + link_summoned = false; + activate_DDLamia = false; + xyz_mode = false; + Blackwing_ZephyrostheElite_activate = false; + HeavymetalfoesElectrumite_activate = false; + spell_activate_count = 0; + p_count = 0; + } + private bool ZefraProvidenceEffect() + { + if (Card.Location == CardLocation.Grave) + { + return true; + } + else + { + activate_ZefraProvidence = true; + return true; + } + + } + private List CheckShouldSpsummonExtraMonster() + { + List extra_ids = new List() { CardId.HeavymetalfoesElectrumite, CardId.CrystronHalqifibrax }; + if (!Bot.HasInExtra(CardId.HeavymetalfoesElectrumite)) extra_ids.Remove(CardId.HeavymetalfoesElectrumite); + if (!Bot.HasInExtra(CardId.CrystronHalqifibrax)) extra_ids.Remove(CardId.CrystronHalqifibrax); + if (extra_ids.Count <= 0) return extra_ids; + bool DD_summon_check = false; + if (Bot.HasInExtra(CardId.CrystronHalqifibrax) && ((!summoned && HasInDeck(CardId.DDSavantKepler) && (HasInDeck(CardId.DarkContractwiththGate) || Bot.HasInHandOrInSpellZone(CardId.DarkContractwiththGate) + ) && !activate_DarkContractwiththGate && HasInDeck(CardId.DDLamia)) || (Func.CardsCheckAny(Bot.Hand, Func.HasType, CardType.Tuner) && + (HasInDeck(CardId.AstrographSorcerer) || Bot.HasInHand(CardId.AstrographSorcerer))))) + { + DD_summon_check = true; + } + if (Bot.SpellZone[0] != null && Bot.SpellZone[4] != null) + { + List spSummonMonster = Func.GetPSpSummonMonster(Bot, Bot.SpellZone[0], Bot.SpellZone[4]); + if (DD_summon_check && spSummonMonster != null) + { + + List pSpsummonMonster = Func.CardsCheckWhere(spSummonMonster, Func.HasType, CardType.Pendulum); + List monsterCards = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone), card => + { return card.IsFaceup() && card.HasType(CardType.Pendulum); }); + if (Func.MergeList(pSpsummonMonster, monsterCards).Count <= 0) extra_ids.Remove(CardId.HeavymetalfoesElectrumite); + } + else + { + extra_ids.Remove(CardId.HeavymetalfoesElectrumite); + } + } + else + { + if (!((Bot.HasInHand(CardId.OracleofZefra) && !activate_OracleofZefra) || (Bot.HasInHand(CardId.ZefraProvidence) + && !activate_ZefraProvidence) || (Bot.HasInHand(CardId.Zefraath) && !activate_p_Zefraath))) + { + extra_ids.Clear(); + } + } + if (!DD_summon_check) extra_ids.Remove(CardId.HeavymetalfoesElectrumite); + return extra_ids; + } + private bool DDLamiaSummon() + { + if (!IsCanSynchroSummon(Card.Level)) return false; + if (Bot.HasInExtra(CardId.Linkuriboh) || (Bot.HasInExtra(CardId.CrystronHalqifibrax) && + Func.GetZoneCards(Bot, CardLocation.MonsterZone, true).Count > 0)) + { + summoned = true; + return true; + } + return false; + } + private bool XyzModeCheck(bool flag1 = false) + { + return !link_summoned && !(!Bot.HasInExtra(CardId.Raidraptor_ArsenalFalcon) & flag1) && HasInDeck(CardId.Blackwing_ZephyrostheElite) && Bot.HasInExtra(CardId.Raidraptor_ForceStrix) && Bot.HasInExtra(CardId.Raidraptor_WiseStrix) + && Bot.HasInExtra(CardId.TruKingofAllCalamities) && (HasInDeck(CardId.Raider_Wing) || Bot.HasInHand(CardId.Raider_Wing)) + && (HasInDeck(CardId.Raidraptor_SingingLanius) || Bot.HasInHand(CardId.Raidraptor_SingingLanius)) + && (HasInDeck(CardId.Rank_Up_MagicSoulShaveForce) || Bot.HasInHand(CardId.Rank_Up_MagicSoulShaveForce)); + } + private bool Raidraptor_ForceStrixEffect() + { + AI.SelectCard(CardId.Raider_Wing); + AI.SelectNextCard(CardId.Raidraptor_SingingLanius); + return true; + } + private bool Raidraptor_ForceStrixSummon() + { + return xyz_mode; + } + + private bool Blackwing_ZephyrostheEliteEffect_2() + { + if (!xyz_mode && Bot.GetMonstersInMainZone().Count > 4) return false; + List cards = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.Onfield, true), card => { + return !IsNoLinkCards(card) && !card.IsExtraCard() && !(card.Location == CardLocation.SpellZone + && Func.IsCode(card,CardId.SaryujaSkullDread,CardId.MechaPhantomBeastAuroradon,CardId.HeavymetalfoesElectrumite,CardId.CrystronHalqifibrax,CardId.Raidraptor_WiseStrix, + CardId.Linkuriboh)); + }); + if (cards.Count <= 0 || (cards.Count < 2 && Func.CardsCheckCount(cards, Func.HasLevel, 4) == cards.Count)) + { + Blackwing_ZephyrostheElite_activate = true; + return false; + } + cards.Sort((cardA, cardB) => + { + if (cardA.Location != CardLocation.MonsterZone && cardB.Location == CardLocation.MonsterZone) return -1; + if (cardA.Location == CardLocation.MonsterZone && cardB.Location != CardLocation.MonsterZone) return 1; + if (cardA.Location == CardLocation.SpellZone && cardB.Location == CardLocation.SpellZone) + { + if(cardA.IsCode(CardId.OracleofZefra) && !cardB.IsCode(CardId.OracleofZefra)) return -1; + if(!cardA.IsCode(CardId.OracleofZefra) && cardB.IsCode(CardId.OracleofZefra))return 1; + return 0; + } + if (xyz_mode) + { + if (cardA.Level == 4 && cardB.Level != 4) return 1; + if (cardA.Level != 4 && cardB.Level == 4) return -1; + return CardContainer.CompareCardAttack(cardA, cardB); + } + else + { + return CardContainer.CompareCardAttack(cardA, cardB); + } + }); + Blackwing_ZephyrostheElite_activate = false; + AI.SelectCard(cards); + return true; + } + private bool DefaultPActivate() + { + if (PendulumActivate() && Func.IsCode(Card,CardId.Zefraxi_TreasureoftheYangZing, CardId.SecretoftheYangZing)) + { + return Bot.HasInHandOrInSpellZone(CardId.NinePillarsofYangZing) && Func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.SpellZone, + true), card => { return Func.IsCode(Card, CardId.Zefraxi_TreasureoftheYangZing, CardId.SecretoftheYangZing); }) <= 0; + } + return false; + } + private bool Blackwing_ZephyrostheEliteEffect() + { + if (!xyz_mode) return false; + return Blackwing_ZephyrostheEliteEffect_2(); + } + private bool Raidraptor_WiseStrixSummon() + { + if (!xyz_mode) return false; + AI.SelectMaterials(CardId.Raidraptor_ArsenalFalcon, CardId.Blackwing_ZephyrostheElite); + return true; + } + private bool Raidraptor_WiseStrixEffect() + { + if (ActivateDescription == -1) + { + int count = 0; + if (HasInDeck(CardId.Raidraptor_SingingLanius)) ++count; + if (HasInDeck(CardId.Blackwing_ZephyrostheElite)) ++count; + if (HasInDeck(CardId.Raider_Wing)) ++count; + if (count <= 1) return false; + AI.SelectCard(CardId.Raider_Wing); + return true; + } + return true; + } + private bool Raidraptor_ArsenalFalconEffect() + { + if (Card.Location == CardLocation.MonsterZone) + { + AI.SelectCard(CardId.SupremeKingGateZero); + AI.SelectNextCard(new int[] {CardId.Blackwing_ZephyrostheElite,CardId.Raider_Wing,CardId.Raidraptor_SingingLanius}); + return true; + } + return false; + } + private bool Raidraptor_ArsenalFalconSummon() + { + if (!XyzModeCheck(true)) return false; + var materials_lists = Util.GetXyzMaterials(Bot.MonsterZone, 7, 2, false, + card => { return !card.IsCode(CardId.F_A_DawnDragster) && !card.IsCode(CardId.TheMightyMasterofMagic); }); + if (materials_lists.Count <= 0) return false; + AI.SelectMaterials(materials_lists[0]); + xyz_mode = true; + return true; + } + private bool Odd_EyesMeteorburstDragonCheck() + { + if (!XyzModeCheck()) return false; + var materials_lists = Util.GetXyzMaterials(Func.MergeList(new List() { Card }, + Func.GetZoneCards(Bot, CardLocation.MonsterZone | CardLocation.PendulumZone)), 7, 2, false, + card => { return !card.IsCode(CardId.F_A_DawnDragster) && !card.IsCode(CardId.TheMightyMasterofMagic); }); + if (materials_lists.Count <= 0) return false; + List pre_materials = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), SecretoftheYangZingCheck); + var materials_sy_lists = Util.GetSynchroMaterials(pre_materials, 7, 1, 1, false, true, null, card => { return !card.IsCode(CardId.MythicalBeastJackalKing) && !card.IsCode(CardId.HeraldoftheArcLight); }); + if (materials_sy_lists.Count <= 0) return false; + Odd_EyesMeteorburstDragon_materials.Clear(); + Odd_EyesMeteorburstDragon_materials.AddRange(materials_sy_lists[0]); + return true; + } + private bool Odd_EyesMeteorburstDragonSummon() + { + if (!Odd_EyesMeteorburstDragonCheck()) return false; + AI.SelectMaterials(Odd_EyesMeteorburstDragon_materials); + return true; + } + private bool Odd_EyesMeteorburstDragonEffect() + { + AI.SelectCard(CardId.SupremeKingGateZero); + return true; + } + private bool DDSavantKeplerSummon() + { + if (HasInDeck(CardId.DarkContractwiththGate)) + { + summoned = true; + return true; + } + return false; + } +// private void DebugCards(string msg, IList cards) +// { +//#if DEBUG +// Logger.DebugWriteLine(cards.Count + msg); +// foreach (var card in cards) +// { +// if (card == null) continue; +// NamedCard namedCard = NamedCard.Get(card.Id); +// if (namedCard == null) continue; +// Logger.DebugWriteLine(msg + namedCard.Name); +// } +//#endif +// } + private bool ServantofEndymionEffect_2() + { + if (Card.Location == CardLocation.SpellZone) return true; + return false; + } + private bool IsSpsummonPMonster(ClientCard card) + { + return IsZefraScaleAbove(card) || IsZefraScaleBelow(card) || card.Id == CardId.SupremeKingGateZero || card.Id == CardId.ServantofEndymion; + } + private int GetSpellActivateCount() + { + int count = 0; + if (!activate_DragonShrine && Func.CardsCheckAny(Bot.Hand, Func.IsCode, CardId.DragonShrine) && + (HasInDeck(CardId.FlameBeastoftheNekroz) || HasInDeck(CardId.DestrudotheLostDragon_Frisson) || HasInDeck(CardId.SupremeKingDragonDarkwurm))) ++count; + if (!activate_SpellPowerMastery && Func.CardsCheckAny(Bot.Hand, Func.IsCode, CardId.SpellPowerMastery) + && (HasInDeck(CardId.TheMightyMasterofMagic) || HasInDeck(CardId.ServantofEndymion))) ++count; + if (Func.CardsCheckAny(Bot.Hand, Func.IsCode, CardId.DarkContractwiththGate)) ++count; + if (!activate_ZefraProvidence && Func.CardsCheckAny(Bot.Hand, Func.IsCode, CardId.ZefraProvidence)) + { + if (Func.CardsCheckCount(Bot.Hand, Func.IsCode, CardId.OracleofZefra) <= 0 && !activate_OracleofZefra + && HasInDeck(CardId.OracleofZefra)) + { + count += 2; + } + else + { + ++count; + } + } + if (!activate_OracleofZefra && Func.CardsCheckAny(Bot.Hand, Func.IsCode, CardId.OracleofZefra)) ++count; + if (Func.CardsCheckAny(Bot.Hand, Func.IsCode, CardId.Terraforming) && HasInDeck(CardId.OracleofZefra)) ++count; + if (Func.CardsCheckAny(Bot.Hand, Func.IsCode, CardId.FoolishBurial)) ++count; + if (Func.CardsCheckCount(Bot.Hand, Func.HasType, CardType.Pendulum) > 1 && Bot.SpellZone[0] == null && + Bot.SpellZone[4] == null) ++count; + if (!summoned && Bot.HasInHand(CardId.DDSavantKepler) && HasInDeck(CardId.DarkContractwiththGate)) ++count; + return count; + } + private bool ServantofEndymionEffect_3() + { + if (PendulumActivate()) + { + return PendulumDefaultActivate(); + } + return false; + } + private bool ZefraDivineStrikeEffect() + { + if (Duel.LastChainPlayer == 0) return false; + AI.SelectCard(CardId.RitualBeastTamerZeframpilica, CardId.SatellarknightZefrathuban, CardId.StellarknightZefraxciton, CardId.FlameBeastoftheNekroz, CardId.ShaddollZefracore, + CardId.SecretoftheYangZing, CardId.Zefraxi_TreasureoftheYangZing); + return true; + } + private bool NinePillarsofYangZingEffect() + { + if (Duel.LastChainPlayer == 0) return false; + List cards = Func.CardsIdToClientCards(new List { CardId.SecretoftheYangZing },Bot.MonsterZone); + cards.AddRange(Func.CardsIdToClientCards(new List { CardId.SecretoftheYangZing,CardId.Zefraxi_TreasureoftheYangZing }, Bot.SpellZone)); + AI.SelectCard(cards); + return true; + } + private bool IsActivateBlackwing_ZephyrostheElite() + { + return (Blackwing_ZephyrostheElite_activate || HeavymetalfoesElectrumite_activate) && Func.GetZoneCards(Bot, CardLocation.PendulumZone, true).Count <= 0; + } + private bool PendulumDefaultActivate() + { + return IsActivateBlackwing_ZephyrostheElite() || (checkPActivate() && IsActivateScale()); + } + private bool ServantofEndymionEffect() + { + if (PendulumActivate()) + { + if (IsActivateBlackwing_ZephyrostheElite()) return true; + if ((!HasInDeck(CardId.TheMightyMasterofMagic) && !HasInDeck(CardId.MythicalBeastJackalKing) || GetSpellActivateCount() < 2)) return false; + return true; + } + else if (Card.Location == CardLocation.SpellZone) + { + if (Func.HasInZone(Bot, CardLocation.Hand | CardLocation.PendulumZone, CardId.Zefraath, true)) + { + return Func.CardsCheckAny(Bot.Hand, IsSpsummonPMonster); + } + return true; + } + else if (Card.Location == CardLocation.MonsterZone) return true; + else return false; + } + private bool IsZefraScaleAbove(ClientCard card) + { + return Func.IsCode(card, CardId.StellarknightZefraxciton, CardId.SecretoftheYangZing, CardId.FlameBeastoftheNekroz, CardId.ShaddollZefracore); + } + private bool IsZefraScaleBelow(ClientCard card) + { + return Func.IsCode(card, CardId.RitualBeastTamerZeframpilica, CardId.Zefraxi_TreasureoftheYangZing, CardId.SatellarknightZefrathuban); + } + private bool TerraformingEffect() + { + return Bot.HasInHand(CardId.OracleofZefra); + } + private bool DDSavantKeplerEffect() + { + if (PendulumActivate()) return false; + return true; + } + private bool FoolishBurialEffect() + { + return true; + } + private List GetSynchroMaterials() + { + List materials = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), + card => { return !IsNoLinkCards(card) && !card.HasType(CardType.Link | CardType.Xyz); }); + return materials; + } + private bool DestrudotheLostDragon_FrissonEffect() + { + if (Bot.HasInExtra(CardId.CrystronHalqifibrax)) return true; + if (!Bot.HasInExtra(CardId.F_A_DawnDragster) && !Bot.HasInExtra(CardId.Odd_EyesMeteorburstDragon)) return false; + List pre_materials = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true),card => { return SecretoftheYangZingCheck(card) && !IsNoLinkCards(card) && !card.HasType(CardType.Tuner) && card.Level > 0;}); + if (pre_materials.Count <= 0) return false; + List cards = Func.CardsCheckWhere(Func.GetZoneCards(Bot,CardLocation.MonsterZone,true),card=> + { + return !IsNoLinkCards(card) && card.Level > 0 && !card.HasType(CardType.Tuner); + }); + if (cards.Count <= 0) return false; + AI.SelectCard(cards); + return true; + } + private bool IsCanSynchroSummon(int level) + { + return Func.CardsCheckAny(GetSynchroMaterials(), card => { return (card.Level + level == 8 + && Func.CardsCheckAny(Bot.ExtraDeck, synchro_card => { return Func.IsCode(synchro_card, CardId.BorreloadSavageDragon, CardId.PSY_FramelordOmega); })) + || (card.Level + level == 7 && SecretoftheYangZingCheck(card) && Func.CardsCheckAny(Bot.ExtraDeck, synchro_card => { return Func.IsCode(synchro_card, CardId.Odd_EyesMeteorburstDragon, CardId.F_A_DawnDragster); })) + || (card.Level + level == 5 && Bot.HasInExtra(CardId.Denglong_FirstoftheYangZing)) + || (card.Level + level == 4 && Bot.HasInExtra(CardId.HeraldoftheArcLight)); }); + } + private bool DDLamiaEffect() + { + if (!Bot.HasInExtra(CardId.CrystronHalqifibrax) && !IsCanSynchroSummon(Card.Level)) return false; + AI.SelectCard(CardId.DarkContractwiththGate, CardId.DDSavantKepler); + activate_DDLamia = true; + return true; + } + private bool DragonShrineEffect() + { + return true; + } + private bool ZefraathEffect() + { + if (PendulumActivate()) return !activate_p_Zefraath || IsActivateBlackwing_ZephyrostheElite(); + if (Card.Location == CardLocation.SpellZone) + { + activate_p_Zefraath = true; + return true; + } + return false; + } + private bool RitualBeastTamerZeframpilicaEffect() + { + if (PendulumActivate()) + { + return PendulumDefaultActivate(); + } + return true; + } + private bool BorreloadSavageDragonSummon_2() + { + if (xyz_mode) return BorreloadSavageDragonSummon(); + return false; + } + private bool BorreloadSavageDragonSummon() + { + var materials_lists = Util.GetSynchroMaterials(Bot.MonsterZone,Card.Level,1,1,false,true,null, + card=> { return !card.IsCode(CardId.F_A_DawnDragster) && !card.IsCode(CardId.TheMightyMasterofMagic) && !card.IsCode(CardId.HeraldoftheArcLight); }); + if (materials_lists.Count <= 0) return false; + foreach (var materials in materials_lists) + { + if (Func.CardsCheckAny(materials, Func.IsCode, CardId.MechaPhantomBeastToken)) + { + AI.SelectMaterials(materials); + return true; + } + } + AI.SelectMaterials(materials_lists[0]); + return true; + } + private bool BorreloadSavageDragonEffect() + { + /* + * effect1 bug: Unable to read card info in the func "OnselectCard" + * Unable to run in the "ActivateDescription == -1" + */ + AI.SelectCard(new[] + { + CardId.SaryujaSkullDread, + CardId.MechaPhantomBeastAuroradon, + CardId.HeavymetalfoesElectrumite, + CardId.CrystronHalqifibrax, + CardId.Raidraptor_WiseStrix + }); + return true; + } + private bool TheMightyMasterofMagicEffect() + { + if (PendulumActivate()) + { + return PendulumDefaultActivate(); + } + else if (Card.Location == CardLocation.MonsterZone) + { + if (Duel.LastChainPlayer == 0) return false; + AI.SelectCard(CardId.ServantofEndymion, CardId.TheMightyMasterofMagic); + return true; + } + else + { + return true; + } + } + private bool checkPActivate() + { + if (p_summoned) return false; + if (Func.HasInZone(Bot, CardLocation.PendulumZone, CardId.Zefraath, true)) return true; + if (Bot.HasInHand(CardId.Zefraath) && (Bot.SpellZone[0] != null || Bot.SpellZone[4] != null)) return false; + if (Bot.SpellZone[0] == null && Bot.SpellZone[4] == null) + { + if (!Bot.HasInHand(CardId.Zefraath) && !Func.CardsCheckAny(Bot.Hand, card => { return IsSpsummonPMonster(card) && + (Card.LScale >= 5 ? card.LScale < 5 : card.LScale > 5) && Func.GetPSpSummonMonster(Bot,card,Card)?.Count > 0; })) return false; + } + else + { + if (Func.GetPSpSummonMonster(Bot, Bot.SpellZone[0], Card)?.Count <= 0 && Func.GetPSpSummonMonster(Bot, Bot.SpellZone[4], Card)?.Count <= 0) return false; + } + + return true; + } + private bool SecretoftheYangZingEffect() + { + if (PendulumActivate()) + { + return PendulumDefaultActivate(); + } + activate_SecretoftheYangZing = true; + return true; + } + private bool SatellarknightZefrathubanEffect() + { + + if (PendulumActivate()) + { + return PendulumDefaultActivate(); + } + return false; + } + private bool BorreloadSavageDragonEffect_2() + { + if (Duel.LastChainPlayer == 1) + { + ClientCard card = Util.GetLastChainCard(); + return card != null && !card.HasType(CardType.Continuous | CardType.Field) && card.HasType(CardType.Spell | CardType.Trap); + } + return false; + } + private bool Zefraxi_TreasureoftheYangZingEffect() + { + if (PendulumActivate()) + { + return PendulumDefaultActivate(); + } + return true; + } + private bool OracleofZefraEffect() + { + activate_OracleofZefra = true; + return true; + + } + private bool FlameBeastoftheNekrozEffect() + { + if (PendulumActivate()) + { + return PendulumDefaultActivate(); + } + else + { + return true; + } + + } + private bool AstrographSorcererEffect() + { + if (PendulumActivate()) return false; + return true; + } + private bool StellarknightZefraxcitonEffect() + { + if (PendulumActivate()) + { + return PendulumDefaultActivate(); + } + else + { + return true; + } + } + private bool IsNoLinkCards(ClientCard card) + { + if (card == null) return false; + return ((card.IsCode(CardId.MythicalBeastJackalKing) || card.IsCode(CardId.TheMightyMasterofMagic)) && !card.IsDisabled()) + || card.IsCode(CardId.BorreloadSavageDragon) || card.IsCode(CardId.PSY_FramelordOmega) || card.IsCode(CardId.F_A_DawnDragster) + || card.IsCode(CardId.TruKingofAllCalamities) || card.IsCode(CardId.HeraldoftheArcLight) || card.LinkCount >= 3; + } + private bool LinkuribohSummon() + { + List materials = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true),Func.HasLevel,1); + if (Func.CardsCheckCount(materials, Func.NegateFunc(Func.HasType), CardType.Tuner) <= 0 && + Func.CardsCheckCount(materials, Func.HasType, CardType.Tuner) <= 1) return false; + materials.Sort((cardA, cardB) => + { + if (cardA.HasType(CardType.Tuner) && !cardB.HasType(CardType.Tuner)) return 1; + if (!cardA.HasType(CardType.Tuner) && cardB.HasType(CardType.Tuner)) return -1; + return 0; + }); + AI.SelectMaterials(materials); + return true; + } + private bool SpellSet() + { + if (Card.HasType(CardType.Trap)) + { + AI.SelectPlace(Zones.z1|Zones.z2|Zones.z3|Zones.z4|Zones.z0); + return true; + } + return false; + } + private bool SpellSet_2() + { + if (Card.HasType(CardType.QuickPlay)) + { + AI.SelectPlace(Zones.z1 | Zones.z2 | Zones.z3 | Zones.z4 | Zones.z0); + return true; + } + return false; + } + private bool ShaddollZefracoreEffect() + { + if (PendulumActivate()) + { + return PendulumDefaultActivate(); + } + else + { + return true; + } + } + private bool PSY_FramelordOmegaEffect() + { + if (Card.Location == CardLocation.MonsterZone) + { + if (Duel.Player == 0) return true; + else + { + if (Bot.Banished.Count <= 0) return false; + AI.SelectCard(Func.CardsIdToClientCards(new List { CardId.JetSynchron, CardId.DDLamia }, Bot.Banished)); + return true; + } + } + else + { + if (Bot.Graveyard.Count <= 0) return false; + AI.SelectCard(Func.CardsIdToClientCards(new List { CardId.Zefraath, CardId.CrystronHalqifibrax, CardId.Denglong_FirstoftheYangZing,CardId.BorreloadSavageDragon, CardId.DDLamia }, Bot.Graveyard)); + return true; + } + } + private bool Psummon() + { + //if (ActivateDescription == P_SPSUMMON_DESC) + if (Card.Location == CardLocation.SpellZone) + { + p_summoning = true; + p_summoned = true; + return true; + } + return false; + } + private bool IsExtraZoneCard(ClientCard card) + { + if (card == null) return false; + ClientCard ex_card = Bot.MonsterZone[5]; + if (ex_card == card) return true; + ex_card = Bot.MonsterZone[6]; + if (ex_card == card) return true; + return false; + } + private bool HeavymetalfoesElectrumiteSummon() + { + if (Odd_EyesMeteorburstDragonCheck()) return false; + List materials = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), Func.HasType, CardType.Pendulum); + if (materials.Count > 0) + { + materials.Sort((cardA,cardB) => + { + if ((cardA.Level == 3 || cardA.HasType(CardType.Tuner)) && cardB.Level != 3 && !cardB.HasType(CardType.Tuner)) return -1; + if (cardA.Level != 3 && !cardA.HasType(CardType.Tuner) && (cardB.Level == 3 || cardB.HasType(CardType.Tuner))) return 1; + return CardContainer.CompareCardLevel(cardA, cardB); + }); + materials.Reverse(); + List result = new List(); + foreach (var material in materials) + { + if (IsExtraZoneCard(material)) result.Insert(0, material); + else if (IsNoLinkCards(material) || (material.HasType(CardType.Tuner) && Bot.HasInExtra(CardId.CrystronHalqifibrax) + && Func.CardsCheckCount(Func.GetZoneCards(Bot,CardLocation.MonsterZone,true),Func.HasType,CardType.Tuner) <= 0)) continue; + else result.Add(material); + } + if (result.Count < 2) return false; + AI.SelectMaterials(result); + return true; + } + return false; + } + private bool SecretoftheYangZingCheck(ClientCard card) + { + if (card.IsCode(CardId.SecretoftheYangZing) && Bot.HasInHandOrInSpellZone(CardId.NinePillarsofYangZing)) + { + return Func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.Hand | CardLocation.PendulumZone | CardLocation.MonsterZone, true), p_card => { + return p_card.HasSetcode(0xc4) && p_card.HasType(CardType.Pendulum);}) <= 0; + } + return true; + } + private bool F_A_DawnDragsterSummon() + { + List pre_materials = Func.CardsCheckWhere(Func.GetZoneCards(Bot,CardLocation.MonsterZone,true),SecretoftheYangZingCheck); + var materials_lists = Util.GetSynchroMaterials(pre_materials, 7,1,1,false,true,null,card => { return !card.IsCode(CardId.MythicalBeastJackalKing) && !card.IsCode(CardId.HeraldoftheArcLight); }); + if (materials_lists.Count <= 0) return false ; + foreach (var materials in materials_lists) + { + if (Func.CardsCheckCount(materials, card=> + { + return card.HasType(CardType.Tuner) && card.HasRace(CardRace.Machine); + })<=0) + { + AI.SelectMaterials(materials); + return true; + } + } + AI.SelectMaterials(materials_lists[0]); + return true; + } + private bool CrystronHalqifibraxEffect() + { + return true; + } + private bool MechaPhantomBeastAuroradonSummon() + { + if (Bot.GetMonstersInMainZone().Count >= 4 || (!HasInDeck(CardId.MechaPhantomBeastO_Lion) && !IsCanSPSummonTunerLevel1() + && !Func.CardsCheckAny(Func.GetZoneCards(Bot,CardLocation.MonsterZone|CardLocation.Grave,true),Func.IsCode,CardId.Deskbot001))) return false; + if (XyzModeCheck()) + { + List pre_materials = new List(); + List key_materials = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.Grave), card => { + return (card.IsCode(CardId.DDLamia) && !activate_DDLamia && Func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.Onfield | CardLocation.Hand, true), scard => + { return Func.HasSetCode(scard, 0xaf, 0xae) && scard.Id != CardId.DDLamia; }) > 0); + }); + List key_materials_2 = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.Grave), card => { return card.IsCode(CardId.JetSynchron) && !activate_JetSynchron; }); + pre_materials.AddRange(key_materials); + pre_materials.AddRange(key_materials_2); + if (!summoned) pre_materials.AddRange(Func.CardsCheckWhere(Bot.Hand,Func.NegateFunc(Func.IsCode),CardId.DestrudotheLostDragon_Frisson)); + pre_materials.AddRange(Bot.MonsterZone); + var materials_lists = Util.GetSynchroMaterials(pre_materials, 7, 1, 1,false,true,null,card=> { return !card.IsCode(CardId.MythicalBeastJackalKing);}); + if (materials_lists.Count > 0) return false; + } + List m = new List(); + int link_count = 0; + List cards = Bot.GetMonsters(); + cards.Sort(CardContainer.CompareCardLink); + cards.Reverse(); + foreach (var card in Bot.GetMonsters()) + { + if (card == null) continue; + if (card.IsFacedown() || !card.HasRace(CardRace.Machine) || IsNoLinkCards(card)) continue; + m.Add(card); + link_count += (card.HasType(CardType.Link)) ? card.LinkCount : 1; + if (link_count >= 3) break; + } + if (link_count < 3) return false; + AI.SelectMaterials(m); + return true; + } + private bool SaryujaSkullDreadEffect() + { + if (ActivateDescription == Util.GetStringId(CardId.SaryujaSkullDread, 2)) + { + AI.SelectCard(GetSendToDeckIds()); + return true; + } + return true; + } + private bool SaryujaSkullDreadSummon() + { + if (Bot.GetMonstersInMainZone().Count < 4 || (!Bot.HasInExtra(CardId.CrystronHalqifibrax) && !xyz_mode)) return false; + List materials = new List(); + int link_count = 0; + int materials_count = 0; + int tuner_count = Func.CardsCheckCount(Bot.MonsterZone, Func.HasType, CardType.Tuner); + List temp_materials = Bot.GetMonsters(); + temp_materials.Sort((cardA, cardB) => + { + if ((cardA.HasType(CardType.Tuner) && cardB.HasType(CardType.Tuner)) + || (!cardA.HasType(CardType.Tuner) && !cardB.HasType(CardType.Tuner))) { + return CardContainer.CompareCardLevel(cardA, cardB); + } + else if (cardA.HasType(CardType.Tuner) && !cardB.HasType(CardType.Tuner)) return 1; + return -1; + }); + foreach (var material in temp_materials) + { + ++materials_count; + if (IsExtraZoneCard(material)) materials.Insert(0, material); + else if (IsNoLinkCards(material)) { --materials_count; continue; } + else materials.Add(material); + link_count += material.HasType(CardType.Link) ? material.LinkCount : 1; + if (link_count >= 4) + { + if (materials_count == 3 && Bot.Deck.Count > 4 && ((Func.CardsCheckCount(Bot.Hand, Func.HasType, CardType.Tuner) > 0 + || (Bot.HasInMonstersZone(CardId.DDLamia,false,false,true) && !activate_DDLamia && Func.CardsCheckCount(Func.GetZoneCards + (Bot,CardLocation.Onfield|CardLocation.Hand,true),card=> { return Func.HasSetCode(card, 0xaf, 0xae) && card.Id != CardId.DDLamia; }) + > 0) || (Bot.HasInMonstersZone(CardId.JetSynchron, false, false, true) && !activate_JetSynchron)) || xyz_mode)) + { + --link_count; + continue; + } + break; + } + } + if (materials.Count < 3) return false; + AI.SelectMaterials(materials); + return true; + } + private bool CrystronHalqifibraxSummon() + { + List materials = new List(); + if (Bot.HasInExtra(CardId.MechaPhantomBeastAuroradon)) + { + materials.Add(Bot.MonsterZone[5]); + materials.Add(Bot.MonsterZone[6]); + } + List mainMonsters = Bot.GetMonstersInMainZone(); + mainMonsters.Sort(CardContainer.CompareCardAttack); + materials.AddRange(mainMonsters); + AI.SelectMaterials(materials); + return true; + } + private bool PendulumActivate() + { + return Func.PendulumActivate(ActivateDescription, Card); + } + private bool IsActivateScale() + { + return Func.IsActivateScale(Bot, Card); + } + private bool SpellActivate() + { + return Func.SpellActivate(Card); + } + private bool SupremeKingGateZeroEffect() + { + if (PendulumActivate()) return PendulumDefaultActivate(); + return false; + } + private bool MythicalBeastJackalKingEffect() + { + if (PendulumActivate()) return PendulumDefaultActivate(); + return true; + } + private bool Denglong_FirstoftheYangZingSummon_2() + { + if (xyz_mode) return Denglong_FirstoftheYangZingSummon(); + return false; + } + private bool Denglong_FirstoftheYangZingSummon() + { + var materials_lists = Util.GetSynchroMaterials(Bot.MonsterZone, 5, 1, 1, false, true, null, + card => { return !card.IsCode(CardId.HeraldoftheArcLight); }); + if (materials_lists.Count <= 0) return false; + AI.SelectMaterials(materials_lists[0]); + return true; + } + private bool Denglong_FirstoftheYangZingEffect() + { + if (ActivateDescription == Util.GetStringId(CardId.Denglong_FirstoftheYangZing, 1)) return false; + if (Card.Location == CardLocation.MonsterZone) + { + AI.SelectCard(CardId.NinePillarsofYangZing, CardId.SecretoftheYangZing, CardId.Zefraxi_TreasureoftheYangZing); + } + else + { + AI.SelectCard(CardId.SecretoftheYangZing, CardId.Zefraxi_TreasureoftheYangZing,CardId.LightoftheYangZing); + } + return true; + } + private bool DarkContractwiththGateEffect() + { + if (SpellActivate()) + { + return HasInDeck(CardId.DDLamia) || Func.HasInZone(Bot, CardLocation.PendulumZone, CardId.ServantofEndymion, true, true); + } + return true; + } + private int DisabledSort(ClientCard cardA,ClientCard cardB) + { + bool RitualBeastTamerZeframpilica_flag = !summoned && Bot.HasInExtra(CardId.HeraldoftheArcLight) && IsCanSPSummonTunerLevel1(); + if (((cardA.IsCode(CardId.RitualBeastTamerZeframpilica) && RitualBeastTamerZeframpilica_flag) || Func.IsCode(cardA, CardId.MaxxC,CardId.Zefraath,CardId.MythicalBeastJackalKing,CardId.TheMightyMasterofMagic) || cardA.HasType(CardType.Trap) || cardA.HasType(CardType.Tuner)) + && !cardB.IsCode(CardId.RitualBeastTamerZeframpilica) && !cardB.HasType(CardType.Trap) && !Func.IsCode(cardB, CardId.MaxxC, CardId.Zefraath, CardId.MythicalBeastJackalKing, CardId.TheMightyMasterofMagic) && !cardB.HasType(CardType.Tuner)) return 1; + else if (!cardA.IsCode(CardId.RitualBeastTamerZeframpilica) && !cardA.HasType(CardType.Trap) && !Func.IsCode(cardA, CardId.MaxxC, CardId.Zefraath, CardId.MythicalBeastJackalKing, CardId.TheMightyMasterofMagic) && !cardA.HasType(CardType.Tuner) + && ((cardB.IsCode(CardId.RitualBeastTamerZeframpilica) && RitualBeastTamerZeframpilica_flag) || Func.IsCode(cardB, CardId.MaxxC, CardId.Zefraath, CardId.MythicalBeastJackalKing, CardId.TheMightyMasterofMagic) || cardB.HasType(CardType.Trap) || cardB.HasType(CardType.Tuner))) return -1; + return 0; + } + private List GetDisabledIds() + { + List ids = new List(); + ids.Add(CardId.DestrudotheLostDragon_Frisson); + ids.Add(CardId.Blackwing_ZephyrostheElite); + ids.Add(CardId.Raider_Wing); + ids.Add(CardId.Raidraptor_SingingLanius); + ids.Add(CardId.PSY_FrameDriver); + if (!Bot.HasInGraveyard(CardId.Raidraptor_ArsenalFalcon) || !Bot.HasInExtra(CardId.TruKingofAllCalamities)) ids.Add(CardId.Rank_Up_MagicSoulShaveForce); + if (Bot.HasInBanished(CardId.PSY_FrameDriver)) ids.Add(CardId.PSY_FramegearGamma); + ids.Add(CardId.LightoftheYangZing); + ids.Add(CardId.DDLamia); + ids.AddRange(Func.GetCardsRepeatCardsId(Bot.Hand)); + List hands = Func.GetZoneCards(Bot, CardLocation.Hand); + hands.Sort(DisabledSort); + List hand_ids = Func.ClientCardsToCardsId(hands, true); + ids.AddRange(hand_ids); + return ids; + } + private List GetSendToDeckIds() + { + List ids = new List(); + List repeat_ids = Func.GetCardsRepeatCardsId(Func.GetZoneCards(Bot, CardLocation.Hand)); + ids.Add(CardId.MechaPhantomBeastO_Lion); + ids.AddRange(repeat_ids); + ids.Add(CardId.Raidraptor_SingingLanius); + ids.Add(CardId.Raider_Wing); + ids.Add(CardId.Blackwing_ZephyrostheElite); + ids.Add(CardId.PSY_FrameDriver); + ids.Add(CardId.LightoftheYangZing); + ids.Add(CardId.Rank_Up_MagicSoulShaveForce); + if (activate_ZefraProvidence) ids.Add(CardId.ZefraProvidence); + if(activate_OracleofZefra) ids.Add(CardId.OracleofZefra); + if(activate_DragonShrine) ids.Add(CardId.DragonShrine); + if(activate_SpellPowerMastery) ids.Add(CardId.SpellPowerMastery); + List hands = Func.GetZoneCards(Bot, CardLocation.Hand); + hands.Sort(DisabledSort); + List hand_ids = Func.ClientCardsToCardsId(hands, true); + ids.AddRange(hand_ids); + return ids; + } + private bool TruKingofAllCalamitiesEffect() + { + if (Duel.Player == 1) + { + AI.SelectAttributes(new CardAttribute[] { CardAttribute.Divine }); + return true; + } + return false; + } + private bool JetSynchronEffect() + { + + if (Card.Location == CardLocation.Grave) + { + if (!IsCanSynchroSummon(Card.Level)) return false; + if (Func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.Extra), card => { return card.HasType(CardType.Synchro) || Func.IsCode(card, CardId.CrystronHalqifibrax, CardId.Linkuriboh); })) + { + activate_JetSynchron = true; + List dcards = Func.CardsIdToClientCards(GetDisabledIds(), Bot.Hand); + if (!Bot.HasInExtra(CardId.CrystronHalqifibrax) && dcards.Count <= 0) return false; + AI.SelectCard(dcards); + return true; + } + } + return false; + } + private bool MechaPhantomBeastAuroradonEffect() + { + if (ActivateDescription == -1) { link_summoned = true; return true; } + else + { + if (!HasInDeck(CardId.MechaPhantomBeastO_Lion) + && Func.GetZoneCards(Enemy,CardLocation.Onfield).Count <= 0 && Func.CardsCheckCount(Bot.Graveyard,Func.HasType,CardType.Trap) <= 0) return false; + List tRelease = new List(); + List nRelease = new List(); + foreach (var card in Bot.GetMonsters()) + { + if (card == null || IsNoLinkCards(card)) continue; + if (card.Id == CardId.MechaPhantomBeastToken) tRelease.Add(card); else nRelease.Add(card); + } + int count = tRelease.Count() + nRelease.Count(); + opt_0 = false; + opt_1 = false; + opt_2 = false; + if (count >= 3 && Func.CardsCheckCount(Bot.Graveyard, Func.HasType, CardType.Trap) > 0) opt_2 = true; + if (count >= 2 && CheckRemainInDeck(CardId.MechaPhantomBeastO_Lion) > 0) opt_1 = true; + if (count >= 1 && Func.GetZoneCards(Enemy, CardLocation.Onfield).Count > 0) opt_0 = true; + if (!opt_0 && !opt_1 && !opt_2) return false; + return true; + } + } + private bool SupremeKingDragonDarkwurmEffect() + { + if (Card.Location == CardLocation.Grave) + { + activate_SupremeKingDragonDarkwurm_1 = true; + return true; + } + if (Card.Location == CardLocation.MonsterZone) + { + activate_SupremeKingDragonDarkwurm_2 = true; + return true; + } + return false; + } + private bool SupremeKingDragonDarkwurmSummon() + { + if ((!activate_p_Zefraath && Bot.HasInHand(CardId.Zefraath) && !activate_SupremeKingDragonDarkwurm_1 && HasInDeck(CardId.SupremeKingGateZero) && Func.CardsCheckAny(Bot.Hand, Func.HasType, CardType.Tuner)) + ||(Func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.Hand), card => { return card.LinkCount > 5; }) && + !Bot.HasInHand(CardId.SupremeKingGateZero) && !activate_SupremeKingDragonDarkwurm_2)) + { + summoned = true; + return true; + } + return false; + } + private bool DefaultSummon_2() + { + if (Card.Location == CardLocation.Hand && Card.Level <= 4 + && Bot.HasInExtra(CardId.CrystronHalqifibrax) && (Func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), card => { return Card.HasType(CardType.Tuner) ? true : card.HasType(CardType.Tuner); }))) { + summoned = true; + return true; + } + return false; + } + private bool IsCanSPSummonTunerLevel1() { + return Func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.MonsterZone | CardLocation.Grave, true), card => { + return (card.IsCode(CardId.DDLamia) && !activate_DDLamia && Func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.Onfield | CardLocation.Hand, true), scard => { return Func.HasSetCode(scard, 0xaf, 0xae) && scard.Id != CardId.DDLamia; }) + > 0) || (card.IsCode(CardId.JetSynchron) && !activate_JetSynchron) && Bot.GetMonstersInMainZone().Count <= 3; + }); + } + private bool DefaultSummon() + { + if (Card.Level > 4) return false; + if ((!link_summoned && Bot.HasInExtra(CardId.HeavymetalfoesElectrumite) && Func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), Func.HasType, CardType.Pendulum) > 0 + && Card.HasType(CardType.Pendulum)) + || (IsCanSPSummonTunerLevel1() && ((Card.Level == 3 && Bot.HasInExtra(CardId.HeraldoftheArcLight)) || ( + Card.Level == 4 && Bot.HasInExtra(CardId.Denglong_FirstoftheYangZing)))) || + (Card.Id == CardId.SupremeKingDragonDarkwurm && !activate_SupremeKingDragonDarkwurm_2) + ||(Bot.HasInExtra(CardId.CrystronHalqifibrax) && Bot.HasInHandOrInGraveyard(CardId.DestrudotheLostDragon_Frisson) && !activate_DestrudotheLostDragon_Frisson)) + { + summoned = true; + return true; + } + return false; + } + private bool OneforOneEffect() + { + AI.SelectCard(GetDisabledIds()); + AI.SelectNextCard(CardId.JetSynchron, CardId.LightoftheYangZing,CardId.DDLamia); + return true; + } + private void HeavymetalfoesElectrumiteAddIds (List ids) + { + if (!summoned && HasInDeck(CardId.DarkContractwiththGate) && HasInDeck(CardId.DDLamia)) + { + if (!Func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), Func.HasType, CardType.Tuner)) + { + ids.Add(CardId.DDSavantKepler); + } + else + { + ids.Add(CardId.AstrographSorcerer); + ids.Add(CardId.DDSavantKepler); + } + } + ids.Add(CardId.AstrographSorcerer); + ids.Add(CardId.FlameBeastoftheNekroz); + ids.Add(CardId.DDSavantKepler); + } + private bool LinkuribohEffect() + { + if (Card.Location == CardLocation.Grave) + { + if (Duel.Player != 0) return true; + return false; + } + return true; + } + private bool Raider_WingEffect() + { + if (!Bot.HasInMonstersZone(CardId.Raidraptor_ForceStrix, false, true, true)) return false; + AI.SelectCard(CardId.Raidraptor_ForceStrix); + return true; + } + private bool HeavymetalfoesElectrumiteEffect() + { + if (ActivateDescription != -1) + { + List cards = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.SpellZone, true),Func.NegateFunc(Func.IsCode),CardId.DarkContractwiththGate); + if (cards.Count <= 0) + { + HeavymetalfoesElectrumite_activate = true; + return false; + } + HeavymetalfoesElectrumite_activate = false; + return true; + } + return true; + } + public override bool OnSelectHand() + { + return true; + } + private bool HeraldoftheArcLightEffect() + { + if (Card.Location == CardLocation.MonsterZone) + { + return Duel.LastChainPlayer != 0; + } + return false; + } + private bool CalledbytheGraveEffect() + { + if ((Bot.SpellZone[5] == Card || Bot.SpellZone[0] == Card) && Duel.Player == 0) return true; + ClientCard card = Util.GetLastChainCard(); + if (card == null) return false; + int id = card.Id; + List g_cards = Func.CardsCheckWhere(Enemy.Graveyard, Func.IsCode, id); + if (Duel.LastChainPlayer != 0) + { + if (card.Location == CardLocation.Grave && card.HasType(CardType.Monster)) + { + AI.SelectCard(card); + return true; + } + else if (g_cards.Count() > 0 && card.HasType(CardType.Monster)) + { + AI.SelectCard(g_cards); + return true; + } + } + return false; + } + public override bool OnSelectYesNo(int desc) + { + /* + can't get code 74580251 Duel.SelectEffectYesNo(tp,e:GetHandler(),96) + */ + return base.OnSelectYesNo(desc); + } + public override CardPosition OnSelectPosition(int cardId, IList positions) + { + NamedCard card = NamedCard.Get(cardId); + if (cardId == CardId.F_A_DawnDragster && Duel.Turn > 1) return CardPosition.FaceUpAttack; + if (card.Attack <= 1000) return CardPosition.FaceUpDefence; + return base.OnSelectPosition(cardId, positions); + } + public override int OnSelectOption(IList options) + { + if (options.Contains(Util.GetStringId(CardId.MechaPhantomBeastAuroradon, 3))) + { + if (opt_1) return options.IndexOf(Util.GetStringId(CardId.MechaPhantomBeastAuroradon, 3)); + else if (opt_0) return 0; + return options[options.Count - 1]; + } + return base.OnSelectOption(options); + } + + public override int OnSelectPlace(int cardId, int player, CardLocation location, int available) + { + NamedCard card = NamedCard.Get(cardId); + if (player == 0) + { + if (location == CardLocation.SpellZone) + { + if (card.HasType(CardType.Pendulum)) + { + if ((available & Zones.z4) > 0) return Zones.z4; + if ((available & Zones.z0) > 0) return Zones.z0; + } + else + { + List keys = new List() { 1, 2, 3 }; + while (keys.Count > 0) + { + int index = Program.Rand.Next(keys.Count); + int key = keys[index]; + int zone = 1 << key; + if ((zone & available) > 0) return zone; + keys.Remove(key); + } + } + } + else if (location == CardLocation.MonsterZone) + { + if (card.HasType(CardType.Link)) + { + if ((available & Zones.z5) > 0) return Zones.z5; + if ((available & Zones.z6) > 0) return Zones.z6; + } + } + } + + return base.OnSelectPlace(cardId, player, location, available); + } + public override void OnChainEnd() + { + should_destory = false; + base.OnChainEnd(); + } + public override IList OnSelectSynchroMaterial(IList cards, int sum, int min, int max) + { + return base.OnSelectSynchroMaterial(cards, sum, min, max); + } + private IList _OnSelectPendulumSummon(IList cards, int min,int max) + { + List ids = Func.GetSelectCardIdList(); + List result = Func.GetSelectCardList(); + List exs = Func.CardsCheckWhere(cards, Func.IsLocation, CardLocation.Extra); + List hs = Func.CardsCheckWhere(cards,Func.NegateFunc(Func.IsLocation), CardLocation.Extra); + if (Func.CardsCheckAny(Func.GetZoneCards(Bot,CardLocation.PendulumZone,true),card=> { + return card.HasSetcode(0xc4) && !card.IsCode(CardId.Zefraath);}) && Func.CardsCheckAny(exs, Func.IsCode, CardId.ShaddollZefracore)) ids.Add(CardId.ShaddollZefracore); + result = Func.CardsIdToClientCards(ids,cards); + List temp_cards = Func.CardsCheckWhere(cards, Func.NegateFunc(Func.IsCode), CardId.MaxxC); + result.AddRange(temp_cards); + if(result.Count <= 0) return Func.CheckSelectCount(Util, result, cards, min, min); + if (result[0] != null && result[0].Location != CardLocation.Extra) ++p_count; + return Func.CheckSelectCount(Util, result, cards, max, max); + } + + public override IList OnSelectCard(IList cards, int min, int max, int hint, bool cancelable) + { + if (AI.HaveSelectedCards()) return null; + List ids = Func.GetSelectCardIdList(); + List result = Func.GetSelectCardList(); + if (hint == HintMsg.AddToHand) + { + if (Func.CardsCheckAny(cards, card => { return card.Location == CardLocation.Deck && card.HasSetcode(0xc4); })) + { + if (!activate_ZefraProvidence) ids.Add(CardId.ZefraProvidence); + if (p_summoned) + { + if (!summoned && Bot.HasInExtra(CardId.HeavymetalfoesElectrumite) && Func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), Func.HasType, CardType.Pendulum) == 1) + { + List pre_ids = new List {CardId.Zefraxi_TreasureoftheYangZing,CardId.StellarknightZefraxciton,CardId.RitualBeastTamerZeframpilica,CardId.NinePillarsofYangZing + ,CardId.StellarknightZefraxciton,CardId.ShaddollZefracore}; + ids.AddRange(pre_ids); + } + ids.Add(CardId.ZefraDivineStrike); + } + if (!activate_OracleofZefra) ids.Add(CardId.OracleofZefra); + if (!activate_p_Zefraath && !Func.HasInZone(Bot, CardLocation.Hand | CardLocation.PendulumZone, CardId.Zefraath, true)) ids.Add(CardId.Zefraath); + if (Func.HasInZone(Bot, CardLocation.Hand | CardLocation.PendulumZone, CardId.SupremeKingGateZero, true) && !Func.CardsCheckAny(Bot.Hand, Func.HasType, CardType.Tuner) + && !Bot.HasInHand(CardId.Zefraxi_TreasureoftheYangZing)) ids.Add(CardId.Zefraxi_TreasureoftheYangZing); + List pMonsters = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.Hand), card => + { + return card.HasType(CardType.Pendulum) && !card.IsCode(CardId.Zefraath); + }); + if (pMonsters.Count > 0) + { + List zefraPMonsters = Func.CardsCheckWhere(pMonsters, Func.HasSetCode, 0xc4); + if (zefraPMonsters.Count > 0) + { + zefraPMonsters.Sort(Func.CompareCardScale); + int minScale = zefraPMonsters[0].RScale; + if (Bot.HasInHand(CardId.Zefraath)) + { + if (minScale < 5) + { + if (Func.CardsCheckCount(cards, IsZefraScaleAbove) > 1) + { + ids.Add(CardId.ShaddollZefracore); + if (!Bot.HasInHand(CardId.Zefraxi_TreasureoftheYangZing)) ids.Add(CardId.Zefraxi_TreasureoftheYangZing); + ids.Add(CardId.SecretoftheYangZing); + ids.Add(CardId.FlameBeastoftheNekroz); + ids.Add(CardId.StellarknightZefraxciton); + ids.Add(CardId.SatellarknightZefrathuban); + ids.Add(CardId.RitualBeastTamerZeframpilica); + } + else + { + ids.Add(CardId.Zefraxi_TreasureoftheYangZing); + ids.Add(CardId.RitualBeastTamerZeframpilica); + ids.Add(CardId.SatellarknightZefrathuban); + } + } + else + { + if (Func.CardsCheckCount(cards, IsZefraScaleBelow) > 1) + { + ids.Add(CardId.ShaddollZefracore); + if (!Bot.HasInHand(CardId.Zefraxi_TreasureoftheYangZing)) ids.Add(CardId.Zefraxi_TreasureoftheYangZing); + ids.Add(CardId.SecretoftheYangZing); + ids.Add(CardId.FlameBeastoftheNekroz); + ids.Add(CardId.StellarknightZefraxciton); + ids.Add(CardId.SatellarknightZefrathuban); + ids.Add(CardId.RitualBeastTamerZeframpilica); + } + else + { + ids.Add(CardId.StellarknightZefraxciton); + ids.Add(CardId.SecretoftheYangZing); + ids.Add(CardId.FlameBeastoftheNekroz); + ids.Add(CardId.ShaddollZefracore); + } + } + } + else + { + if (Bot.HasInGraveyard(CardId.FlameBeastoftheNekroz)) ids.Add(CardId.RitualBeastTamerZeframpilica); + ids.Add(CardId.SecretoftheYangZing); + ids.Add(CardId.Zefraxi_TreasureoftheYangZing); + } + } + else + { + ids.Add(CardId.SecretoftheYangZing); + ids.Add(CardId.FlameBeastoftheNekroz); + ids.Add(CardId.StellarknightZefraxciton); + ids.Add(CardId.SatellarknightZefrathuban); + ids.Add(CardId.RitualBeastTamerZeframpilica); + ids.Add(CardId.Zefraxi_TreasureoftheYangZing); + } + } + else + { + if (Func.HasInZone(Bot, CardLocation.Hand | CardLocation.PendulumZone, CardId.Zefraath, true) && + !activate_p_Zefraath) + { + ids.Add(CardId.Zefraxi_TreasureoftheYangZing); + ids.Add(CardId.SatellarknightZefrathuban); + ids.Add(CardId.RitualBeastTamerZeframpilica); + } + ids.Add(CardId.SecretoftheYangZing); + ids.Add(CardId.FlameBeastoftheNekroz); + ids.Add(CardId.StellarknightZefraxciton); + ids.Add(CardId.SatellarknightZefrathuban); + ids.Add(CardId.RitualBeastTamerZeframpilica); + ids.Add(CardId.Zefraxi_TreasureoftheYangZing); + } + result = Func.CardsIdToClientCards(ids, cards); + } + else if (Func.CardsCheckALL(cards, Func.IsLocation, true, CardLocation.Extra)) + { + HeavymetalfoesElectrumiteAddIds(ids); + result = Func.CardsIdToClientCards(ids, cards); + } + else if (Func.CardsCheckALL(cards, Func.HasSetCode, true, 0x12a)) + { + if (!Func.HasInZone(Bot, CardLocation.PendulumZone | CardLocation.Hand, CardId.ServantofEndymion, true) || + (Func.HasInZone(Bot, CardLocation.PendulumZone | CardLocation.Hand, CardId.ServantofEndymion, true) && (!HasInDeck(CardId.TheMightyMasterofMagic) || !HasInDeck(CardId.MythicalBeastJackalKing)))) ids.Add(CardId.ServantofEndymion); + ids.Add(CardId.TheMightyMasterofMagic); + ids.Add(CardId.MythicalBeastJackalKing); + result = Func.CardsIdToClientCards(ids, cards); + } + else if (Func.CardsCheckALL(cards, Func.HasSetCode, true, 0xaf)) + { + ids.Add(CardId.DDLamia); + ids.Add(CardId.DDSavantKepler); + result = Func.CardsIdToClientCards(ids, cards); + } + } + else if (hint == HintMsg.ToDeck && Func.CardsCheckALL(cards, Func.IsLocation, true, CardLocation.Hand) && min == 3 && max ==3) + { + result = Func.CardsIdToClientCards(GetSendToDeckIds(),cards); + } + else if (hint == HintMsg.ToGrave && Func.CardsCheckALL(cards, Func.IsLocation, true, CardLocation.Deck)) + { + List extra_ids = CheckShouldSpsummonExtraMonster(); + //if (Func.CardsCheckAny(cards, Func.HasRace, CardRace.Dragon)) + if (extra_ids.Count <= 0) + { + if (!activate_SupremeKingDragonDarkwurm_2 && Bot.GetMonsterCount() <= 0) ids.Add(CardId.SupremeKingDragonDarkwurm); + if (!activate_DestrudotheLostDragon_Frisson) ids.Add(CardId.DestrudotheLostDragon_Frisson); + if (!activate_JetSynchron) ids.Add(CardId.JetSynchron); + ids.Add(CardId.FlameBeastoftheNekroz); + } + else if (extra_ids.Count > 1) + { + if (Bot.GetMonsterCount() <= 0 && !activate_SupremeKingDragonDarkwurm_2) ids.Add(CardId.SupremeKingDragonDarkwurm); + if (Func.CardsCheckAny(Bot.Hand, card => { return card.Level < 7 && card.HasType(CardType.Monster); })) ids.Add(CardId.DestrudotheLostDragon_Frisson); + if (Bot.GetHandCount() > 0) ids.Add(CardId.JetSynchron); + if (!summoned && Bot.HasInHand(CardId.RitualBeastTamerZeframpilica)) ids.Add(CardId.FlameBeastoftheNekroz); + ids.Add(CardId.DestrudotheLostDragon_Frisson); + ids.Add(CardId.JetSynchron); + ids.Add(CardId.SupremeKingDragonDarkwurm); + ids.Add(CardId.FlameBeastoftheNekroz); + } + else if (extra_ids.Contains(CardId.HeavymetalfoesElectrumite)) + { + if (Bot.GetMonsterCount() <= 0 && !activate_SupremeKingDragonDarkwurm_2) ids.Add(CardId.SupremeKingDragonDarkwurm); + if (!summoned && Bot.HasInHand(CardId.RitualBeastTamerZeframpilica)) ids.Add(CardId.FlameBeastoftheNekroz); + //if (!summoned && Func.CardsCheckAny(Bot.Hand, card => { return card.Level < 7 && card.HasType(CardType.Monster); })) ids.Add(CardId.DestrudotheLostDragon_Frisson); + //if (Bot.GetHandCount() > 0) ids.Add(CardId.JetSynchron); + ids.Add(CardId.DestrudotheLostDragon_Frisson); + ids.Add(CardId.JetSynchron); + ids.Add(CardId.SupremeKingDragonDarkwurm); + ids.Add(CardId.FlameBeastoftheNekroz); + } + else if (extra_ids.Contains(CardId.CrystronHalqifibrax)) + { + if (Func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.Hand | CardLocation.MonsterZone, true), Func.HasType, CardType.Tuner)) + { + if (Bot.GetMonsterCount() <= 0 && !activate_SupremeKingDragonDarkwurm_2) ids.Add(CardId.SupremeKingDragonDarkwurm); + ids.Add(CardId.DestrudotheLostDragon_Frisson); + ids.Add(CardId.JetSynchron); + ids.Add(CardId.SupremeKingDragonDarkwurm); + ids.Add(CardId.FlameBeastoftheNekroz); + } + else + { + ids.Add(CardId.DestrudotheLostDragon_Frisson); + ids.Add(CardId.JetSynchron); + ids.Add(CardId.SupremeKingDragonDarkwurm); + ids.Add(CardId.FlameBeastoftheNekroz); + + } + } + result = Func.CardsIdToClientCards(ids, cards); + } + else if (hint == Util.GetStringId(CardId.Zefraath, 1)) + { + int[] pScales = Func.GetPScales(Bot); + int rScale = pScales[0]; + int lScale = pScales[1]; + int pScale = (rScale != 5) ? rScale : lScale; + if (pScale < 5) + { + if (!activate_SecretoftheYangZing && !Func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.Hand | CardLocation.Extra, true), Func.IsCode, CardId.SecretoftheYangZing)) ids.Add(CardId.SecretoftheYangZing); + if (!activate_ShaddollZefracore && Func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.PendulumZone, true), card => { return !card.IsCode(CardId.Zefraath) && card.HasSetcode(0xc4); })) ids.Add(CardId.ShaddollZefracore); + ids.Add(CardId.StellarknightZefraxciton); + ids.Add(CardId.SecretoftheYangZing); + ids.Add(CardId.ShaddollZefracore); + } + else + { + ids.Add(CardId.Zefraxi_TreasureoftheYangZing); + ids.Add(CardId.SatellarknightZefrathuban); + ids.Add(CardId.RitualBeastTamerZeframpilica); + } + result = Func.CardsIdToClientCards(ids, cards); + } + else if (hint == Util.GetStringId(CardId.HeavymetalfoesElectrumite, 3)) + { + HeavymetalfoesElectrumiteAddIds(ids); + result = Func.CardsIdToClientCards(ids, cards); + } + else if (!(IS_YGOPRO & !(hint == HintMsg.SpSummon)) && Func.CardsCheckALL(cards, card =>{return card.IsCode(CardId.TheMightyMasterofMagic) || card.IsCode(CardId.MythicalBeastJackalKing); + }, true)) + { + ids.Add(CardId.MythicalBeastJackalKing); + ids.Add(CardId.TheMightyMasterofMagic); + result = Func.CardsIdToClientCards(ids, cards); + } + else if (p_summoning || ((Card == Bot.SpellZone[0] || Card == Bot.SpellZone[4]) && hint == HintMsg.SpSummon && + Card.HasType(CardType.Pendulum))) + { + p_summoning = false; + if (p_count >= 3 && !Bot.HasInExtra(CardId.SaryujaSkullDread) && Bot.HasInExtra(CardId.MechaPhantomBeastAuroradon)) return Func.CheckSelectCount(Util, result, cards, min, min); + return _OnSelectPendulumSummon(cards,min,max); + } + else if (hint == HintMsg.Destroy) + { + if (Func.CardsCheckALL(cards, card => { return card.Controller == 0 && card.IsFaceup(); }, true)) + { + should_destory = true; + if (Func.CardsCheckALL(cards, Func.HasSetCode, true, 0x9e)) + { + if (!activate_SecretoftheYangZing) result = Func.CardsIdToClientCards(new List { CardId.SecretoftheYangZing }, Func.CardsCheckWhere(cards, + Func.IsLocation,CardLocation.MonsterZone)); + result.AddRange(Func.CardsIdToClientCards(new List { CardId.SecretoftheYangZing, CardId.Zefraxi_TreasureoftheYangZing }, Func.CardsCheckWhere(cards, + Func.NegateFunc(Func.IsLocation), CardLocation.MonsterZone))); + } + else + { + List scards = Func.CardsCheckWhere(cards, card => { return card.Location == CardLocation.SpellZone; }); + scards.Sort((cardA, cardB) => + { + if (Func.IsCode(cardA, CardId.OracleofZefra, CardId.DarkContractwiththGate) && !Func.IsCode(cardB, CardId.OracleofZefra, CardId.DarkContractwiththGate)) return 1; + if (!Func.IsCode(cardA, CardId.OracleofZefra, CardId.DarkContractwiththGate) && Func.IsCode(cardB, CardId.OracleofZefra, CardId.DarkContractwiththGate)) return -1; + return 0; + }); + result.AddRange(scards); + } + + } + else if (Func.CardsCheckAny(cards, card => { return card.Controller == 1 && (card.Location & CardLocation.Onfield) > 0; }) && min == 1 && max == 1) + { + ClientCard card = Util.GetBestEnemyCard(); + if (card != null && cards.Contains(card)) result.Add(card); + else + { + result = new List(Func.CardsCheckWhere(cards, ecard => { return ecard.Controller == 1; })); + if (result.Count <= 0) return null; + result.Sort(CardContainer.CompareCardAttack); + result.Reverse(); + } + } + } + else if (hint == HintMsg.SpSummon) + { + List tuner_ids = new List() + { + CardId.DestrudotheLostDragon_Frisson, CardId.PSY_FrameDriver, CardId.JetSynchron, CardId.PSY_FramegearGamma,CardId.LightoftheYangZing + }; + List no_tuner_ids = new List() + { + CardId.TheMightyMasterofMagic, CardId.MythicalBeastJackalKing, CardId.SecretoftheYangZing + }; + if (Func.CardsCheckALL(cards, Func.IsLocation,true,CardLocation.Hand)) + { + if(summoned && Bot.HasInExtra(CardId.CrystronHalqifibrax) && Func.CardsCheckCount(Bot.MonsterZone,card => {return card.IsFaceup() + && card.HasType(CardType.Tuner);}) <= 0 && !(Bot.HasInGraveyard(CardId.DDLamia) && !activate_DDLamia + && Func.CardsCheckCount(Func.GetZoneCards (Bot, CardLocation.Onfield | CardLocation.Hand, true), card => { return Func.HasSetCode(card, 0xaf, 0xae) && card.Id != CardId.DDLamia; }) + <= 0) && !(Bot.HasInGraveyard(CardId.JetSynchron) && !activate_JetSynchron) + && !(Bot.HasInGraveyard(CardId.DestrudotheLostDragon_Frisson) && !activate_DestrudotheLostDragon_Frisson)){ + ids.AddRange(tuner_ids); + ids.AddRange(no_tuner_ids); + } + else + { + ids.AddRange(no_tuner_ids); + ids.AddRange(tuner_ids); + } + result = Func.CardsIdToClientCards(ids, cards); + } + else if (Func.CardsCheckALL(cards, card => { return Func.IsCode(card, CardId.LightoftheYangZing, CardId.PSY_FramegearGamma, + CardId.MechaPhantomBeastO_Lion, CardId.JetSynchron, CardId.Deskbot001, CardId.DDLamia); })){ + if (Bot.GetMonstersInMainZone().Count <= 1) ids.Add(CardId.Deskbot001); + ids.Add(CardId.JetSynchron); + ids.Add(CardId.Deskbot001); + ids.Add(CardId.LightoftheYangZing); + ids.Add(CardId.PSY_FramegearGamma); + result = Func.CardsIdToClientCards(ids, cards); + } + + } + else if (hint == HintMsg.Release && Func.CardsCheckAny(cards, Func.IsLocation, CardLocation.MonsterZone)) + { + List tRelease = new List(); + List nRelease = new List(); + foreach (var card in cards) + { + if (card == null || IsNoLinkCards(card)) continue; + if (card.Id == CardId.MechaPhantomBeastToken) tRelease.Add(card); + else if(card.Id == CardId.Raidraptor_WiseStrix) tRelease.Insert(0,card); + else nRelease.Add(card); + } + result.AddRange(tRelease); + result.AddRange(nRelease); + } + return Func.CheckSelectCount(Util, result, cards, min, max); + } + private bool HasInDeck(int id) + { + return CheckRemainInDeck(id) > 0; + } + private int CheckRemainInDeck(int id) + { + switch (id) + { + case CardId.PSY_FrameDriver: + return Bot.GetRemainingCount(CardId.PSY_FrameDriver, 1); + case CardId.Zefraath: + return Bot.GetRemainingCount(CardId.Zefraath, 3); + case CardId.TheMightyMasterofMagic: + return Bot.GetRemainingCount(CardId.TheMightyMasterofMagic, 1); + case CardId.AstrographSorcerer: + return Bot.GetRemainingCount(CardId.AstrographSorcerer, 1); + case CardId.DestrudotheLostDragon_Frisson: + return Bot.GetRemainingCount(CardId.DestrudotheLostDragon_Frisson, 1); + case CardId.SupremeKingGateZero: + return Bot.GetRemainingCount(CardId.SupremeKingGateZero, 2); + case CardId.MythicalBeastJackalKing: + return Bot.GetRemainingCount(CardId.MythicalBeastJackalKing, 1); + case CardId.SecretoftheYangZing: + return Bot.GetRemainingCount(CardId.SecretoftheYangZing, 3); + case CardId.FlameBeastoftheNekroz: + return Bot.GetRemainingCount(CardId.FlameBeastoftheNekroz, 1); + case CardId.StellarknightZefraxciton: + return Bot.GetRemainingCount(CardId.StellarknightZefraxciton, 1); + case CardId.SupremeKingDragonDarkwurm: + return Bot.GetRemainingCount(CardId.SupremeKingDragonDarkwurm, 1); + case CardId.Blackwing_ZephyrostheElite: + return Bot.GetRemainingCount(CardId.Blackwing_ZephyrostheElite, 1); + case CardId.ShaddollZefracore: + return Bot.GetRemainingCount(CardId.ShaddollZefracore, 1); + case CardId.Raidraptor_SingingLanius: + return Bot.GetRemainingCount(CardId.Raidraptor_SingingLanius, 1); + case CardId.SatellarknightZefrathuban: + return Bot.GetRemainingCount(CardId.SatellarknightZefrathuban, 1); + case CardId.Raider_Wing: + return Bot.GetRemainingCount(CardId.Raider_Wing, 1); + case CardId.Zefraxi_TreasureoftheYangZing: + return Bot.GetRemainingCount(CardId.Zefraxi_TreasureoftheYangZing, 2); + case CardId.RitualBeastTamerZeframpilica: + return Bot.GetRemainingCount(CardId.RitualBeastTamerZeframpilica, 1); + case CardId.ServantofEndymion: + return Bot.GetRemainingCount(CardId.ServantofEndymion, 3); + case CardId.PSY_FramegearGamma: + return Bot.GetRemainingCount(CardId.PSY_FramegearGamma, 3); + case CardId.MechaPhantomBeastO_Lion: + return Bot.GetRemainingCount(CardId.MechaPhantomBeastO_Lion, 1); + case CardId.MaxxC: + return Bot.GetRemainingCount(CardId.MaxxC, 3); + case CardId.Deskbot001: + return Bot.GetRemainingCount(CardId.Deskbot001, 1); + case CardId.JetSynchron: + return Bot.GetRemainingCount(CardId.JetSynchron, 1); + case CardId.DDLamia: + return Bot.GetRemainingCount(CardId.DDLamia, 1); + case CardId.DDSavantKepler: + return Bot.GetRemainingCount(CardId.DDSavantKepler, 1); + case CardId.LightoftheYangZing: + return Bot.GetRemainingCount(CardId.LightoftheYangZing, 1); + case CardId.Rank_Up_MagicSoulShaveForce: + return Bot.GetRemainingCount(CardId.Rank_Up_MagicSoulShaveForce, 1); + case CardId.SpellPowerMastery: + return Bot.GetRemainingCount(CardId.SpellPowerMastery, 3); + case CardId.DragonShrine: + return Bot.GetRemainingCount(CardId.DragonShrine, 3); + case CardId.Terraforming: + return Bot.GetRemainingCount(CardId.Terraforming, 1); + case CardId.ZefraProvidence: + return Bot.GetRemainingCount(CardId.ZefraProvidence, 3); + case CardId.FoolishBurial: + return Bot.GetRemainingCount(CardId.FoolishBurial, 1); + case CardId.CalledbytheGrave: + return Bot.GetRemainingCount(CardId.CalledbytheGrave, 2); + case CardId.DarkContractwiththGate: + return Bot.GetRemainingCount(CardId.DarkContractwiththGate, 1); + case CardId.OracleofZefra: + return Bot.GetRemainingCount(CardId.OracleofZefra, 3); + case CardId.ZefraWar: + return Bot.GetRemainingCount(CardId.ZefraWar, 1); + case CardId.ZefraDivineStrike: + return Bot.GetRemainingCount(CardId.ZefraDivineStrike, 1); + case CardId.NinePillarsofYangZing: + return Bot.GetRemainingCount(CardId.NinePillarsofYangZing, 1); + default: + return 0; + } + } + } +} diff --git a/Game/AI/Enums/NotBeSynchroMaterialMonster.cs b/Game/AI/Enums/NotBeSynchroMaterialMonster.cs new file mode 100644 index 00000000..a7d6491e --- /dev/null +++ b/Game/AI/Enums/NotBeSynchroMaterialMonster.cs @@ -0,0 +1,32 @@ +namespace WindBot.Game.AI.Enums +{ + public enum NotBeSynchroMaterialMonster + { + Ronintoadin = 1357146, + GagagaCaesar = 9583383, + VagueShadowToken = 9929399, + TourGuideFromtheUnderworld = 10802915, + PhotonToken = 17418745, + KagemuchaKnight = 19353570, + SharkStickers = 20838380, + GagagaMagician = 26082117, + RadianToken = 28674153, + Kurivolt = 40817915, + BlueMountainButterspy = 54582424, + Lightserpent = 55501446, + SaberShark = 63193879, + ConstellarKaus = 70908596, + CeremonialToken = 82340057, + HeroicChallenger_DoubleLance = 89774530, + SteelswarmScout = 90727556, + Kagetokage = 94656263, + YellowDuston = 16366810, + BlueDuston = 40217358, + Centerfrog = 47346782, + GreenDuston = 52182715, + RedDuston = 61019812, + EaterofMillions = 63845230, + PutridPuddingBodyBuddies = 85101097 + + } +} \ No newline at end of file diff --git a/Game/AI/Enums/NotBeXyzMaterialMonster.cs b/Game/AI/Enums/NotBeXyzMaterialMonster.cs new file mode 100644 index 00000000..23b74da8 --- /dev/null +++ b/Game/AI/Enums/NotBeXyzMaterialMonster.cs @@ -0,0 +1,13 @@ +namespace WindBot.Game.AI.Enums +{ + public enum NotBeXyzMaterialMonster + { + YellowDuston = 16366810, + BlueDuston = 40217358, + Centerfrog = 47346782, + GreenDuston = 52182715, + RedDuston = 61019812, + EaterofMillions = 63845230, + PutridPuddingBodyBuddies = 85101097 + } +} \ No newline at end of file diff --git a/WindBot.csproj b/WindBot.csproj index 0f29b7e8..c40a8c76 100644 --- a/WindBot.csproj +++ b/WindBot.csproj @@ -115,12 +115,15 @@ + + + From 5adfbaa747447c677625f5c873977f793fddcb57 Mon Sep 17 00:00:00 2001 From: Ha <479310608@qq.com> Date: Mon, 12 Jun 2023 16:06:30 +0800 Subject: [PATCH 13/18] Fix Bot Zefra --- Game/AI/Decks/ZefraExecutor.cs | 296 ++++++++++++++++----------------- 1 file changed, 148 insertions(+), 148 deletions(-) diff --git a/Game/AI/Decks/ZefraExecutor.cs b/Game/AI/Decks/ZefraExecutor.cs index 2e02e0e9..68451f19 100644 --- a/Game/AI/Decks/ZefraExecutor.cs +++ b/Game/AI/Decks/ZefraExecutor.cs @@ -8,7 +8,6 @@ using WindBot.Game.AI; namespace WindBot.Game.AI.Decks { - //Ctrl A + Ctrl F format code [Deck("Zefra", "AI_Zefra")] class ZefraExecutor : DefaultExecutor { @@ -141,16 +140,16 @@ public static List LinqWhere(IList cards, Delegate @dele return cards.Where(card => card != null && @delegate(card)).ToList(); } } - private static class Func + private class Func { - private static IList _parameters = new List(); - private static List no_p_spsummon_ids = new List() + private IList _parameters = new List(); + private List no_p_spsummon_ids = new List() { CardId.Zefraath }; - private static List selectCardList = null; - private static List selectCardIdList = null; - public static List GetSelectCardList() + private List selectCardList = null; + private List selectCardIdList = null; + public List GetSelectCardList() { if (selectCardList == null) { @@ -162,7 +161,7 @@ public static List GetSelectCardList() } return selectCardList; } - public static List GetSelectCardIdList() + public List GetSelectCardIdList() { if (selectCardIdList == null) { @@ -174,11 +173,11 @@ public static List GetSelectCardIdList() } return selectCardIdList; } - public static bool IsLocation(ClientCard card) + public bool IsLocation(ClientCard card) { return card.Location == (CardLocation)_parameters[0]; } - public static bool IsCode(ClientCard card) + public bool IsCode(ClientCard card) { return card.IsCode((int)_parameters[0]); } @@ -191,7 +190,7 @@ public static bool IsCode(ClientCard card, params int[] ids) } return false; } - public static bool HasSetCode(ClientCard card) + public bool HasSetCode(ClientCard card) { return card.HasSetcode((int)_parameters[0]); } @@ -208,19 +207,19 @@ public static bool IsFaceUp(ClientCard card) { return card.IsFaceup(); } - public static bool HasAttribute(ClientCard card) + public bool HasAttribute(ClientCard card) { return card.HasAttribute((CardAttribute)_parameters[0]); } - public static bool HasRace(ClientCard card) + public bool HasRace(ClientCard card) { return card.HasRace((CardRace)_parameters[0]); } - public static bool HasLevel(ClientCard card) + public bool HasLevel(ClientCard card) { return card.Level == (int)_parameters[0]; } - public static bool HasType(ClientCard card) + public bool HasType(ClientCard card) { return card.HasType((CardType)_parameters[0]); } @@ -232,7 +231,7 @@ public static Toos.Delegate NegateFunc(Toos.Delegate @delegate) { return card => { return !@delegate(card); }; } - private static void SetParameters(IList parameters) + private void SetParameters(IList parameters) { ClearParameters(); for (int i = 0; i < parameters?.Count(); ++i) @@ -240,26 +239,26 @@ private static void SetParameters(IList parameters) _parameters.Add(parameters[i]); } } - private static void ClearParameters() + private void ClearParameters() { _parameters.Clear(); } - public static bool CardsCheckAny(IList cards, Toos.Delegate @delegate = null, params object[] parameters) + public bool CardsCheckAny(IList cards, Toos.Delegate @delegate = null, params object[] parameters) { SetParameters(parameters); return Toos.LinqAny(cards, @delegate); } - public static bool CardsCheckALL(IList cards, Toos.Delegate @delegate = null, bool all = true, params object[] parameters) + public bool CardsCheckALL(IList cards, Toos.Delegate @delegate = null, bool all = true, params object[] parameters) { SetParameters(parameters); return Toos.LinqAll(cards, @delegate, all); } - public static int CardsCheckCount(IList cards, Toos.Delegate @delegate = null, params object[] parameters) + public int CardsCheckCount(IList cards, Toos.Delegate @delegate = null, params object[] parameters) { SetParameters(parameters); return Toos.LinqCount(cards, @delegate); } - public static List CardsCheckWhere(IList cards, Toos.Delegate @delegate = null, params object[] parameters) + public List CardsCheckWhere(IList cards, Toos.Delegate @delegate = null, params object[] parameters) { SetParameters(parameters); return Toos.LinqWhere(cards, @delegate); @@ -274,7 +273,7 @@ public static List MergeList(params List[] lists) } return result; } - public static List CardsIdToClientCards(IList cardsId, IList cardsList, bool uniqueId = true) + public List CardsIdToClientCards(IList cardsId, IList cardsList, bool uniqueId = true) { if (cardsList?.Count() <= 0 || cardsId?.Count() <= 0) return new List(); List result = new List(); @@ -319,7 +318,7 @@ public static List GetZoneCards(ClientField player, CardLocation loc result = result.Distinct().ToList(); return result; } - public static bool HasInZone(ClientField player, CardLocation loc, int id, bool feceup = false, bool disable = false) + public bool HasInZone(ClientField player, CardLocation loc, int id, bool feceup = false, bool disable = false) { return CardsCheckAny(GetZoneCards(player, loc, feceup, disable), IsCode, id); } @@ -377,7 +376,7 @@ public static int GetPScale(ClientField bot, int id) if (pcard == null || pcard.IsFacedown() || !pcard.HasType(CardType.Pendulum)) return -1; return rscale ? pcard.RScale : pcard.LScale; } - public static List GetPSpSummonMonster(ClientField bot, ClientCard lcard, ClientCard rcard) + public List GetPSpSummonMonster(ClientField bot, ClientCard lcard, ClientCard rcard) { if (lcard == null || rcard == null || !lcard.HasType(CardType.Pendulum) || !rcard.HasType(CardType.Pendulum) || (IsOnfield(lcard) & lcard.IsFacedown()) || (IsOnfield(lcard) & rcard.IsFacedown())) return null; int MaxScale = Math.Max(lcard.RScale, rcard.LScale); @@ -390,7 +389,7 @@ public static List GetPSpSummonMonster(ClientField bot, ClientCard l && !no_p_spsummon_ids.Contains(card.Id) && @llimit(card) && @rlimit(card); }); ; } - public static bool IsActivateScale(ClientField bot, ClientCard card) + public bool IsActivateScale(ClientField bot, ClientCard card) { ClientCard lcard = bot.SpellZone[0]; ClientCard rcard = bot.SpellZone[4]; @@ -433,6 +432,7 @@ public static List GetCardsRepeatCardsId(IList cards) return res; } } + private Func func = new Func(); public ZefraExecutor(GameAI ai, Duel duel) : base(ai, duel) { AddExecutor(ExecutorType.Activate, CardId.CalledbytheGrave, CalledbytheGraveEffect); @@ -576,19 +576,19 @@ private List CheckShouldSpsummonExtraMonster() if (extra_ids.Count <= 0) return extra_ids; bool DD_summon_check = false; if (Bot.HasInExtra(CardId.CrystronHalqifibrax) && ((!summoned && HasInDeck(CardId.DDSavantKepler) && (HasInDeck(CardId.DarkContractwiththGate) || Bot.HasInHandOrInSpellZone(CardId.DarkContractwiththGate) - ) && !activate_DarkContractwiththGate && HasInDeck(CardId.DDLamia)) || (Func.CardsCheckAny(Bot.Hand, Func.HasType, CardType.Tuner) && + ) && !activate_DarkContractwiththGate && HasInDeck(CardId.DDLamia)) || (func.CardsCheckAny(Bot.Hand, func.HasType, CardType.Tuner) && (HasInDeck(CardId.AstrographSorcerer) || Bot.HasInHand(CardId.AstrographSorcerer))))) { DD_summon_check = true; } if (Bot.SpellZone[0] != null && Bot.SpellZone[4] != null) { - List spSummonMonster = Func.GetPSpSummonMonster(Bot, Bot.SpellZone[0], Bot.SpellZone[4]); + List spSummonMonster = func.GetPSpSummonMonster(Bot, Bot.SpellZone[0], Bot.SpellZone[4]); if (DD_summon_check && spSummonMonster != null) { - List pSpsummonMonster = Func.CardsCheckWhere(spSummonMonster, Func.HasType, CardType.Pendulum); - List monsterCards = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone), card => + List pSpsummonMonster = func.CardsCheckWhere(spSummonMonster, func.HasType, CardType.Pendulum); + List monsterCards = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone), card => { return card.IsFaceup() && card.HasType(CardType.Pendulum); }); if (Func.MergeList(pSpsummonMonster, monsterCards).Count <= 0) extra_ids.Remove(CardId.HeavymetalfoesElectrumite); } @@ -640,12 +640,12 @@ private bool Raidraptor_ForceStrixSummon() private bool Blackwing_ZephyrostheEliteEffect_2() { if (!xyz_mode && Bot.GetMonstersInMainZone().Count > 4) return false; - List cards = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.Onfield, true), card => { + List cards = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.Onfield, true), card => { return !IsNoLinkCards(card) && !card.IsExtraCard() && !(card.Location == CardLocation.SpellZone && Func.IsCode(card,CardId.SaryujaSkullDread,CardId.MechaPhantomBeastAuroradon,CardId.HeavymetalfoesElectrumite,CardId.CrystronHalqifibrax,CardId.Raidraptor_WiseStrix, CardId.Linkuriboh)); }); - if (cards.Count <= 0 || (cards.Count < 2 && Func.CardsCheckCount(cards, Func.HasLevel, 4) == cards.Count)) + if (cards.Count <= 0 || (cards.Count < 2 && func.CardsCheckCount(cards, func.HasLevel, 4) == cards.Count)) { Blackwing_ZephyrostheElite_activate = true; return false; @@ -679,7 +679,7 @@ private bool DefaultPActivate() { if (PendulumActivate() && Func.IsCode(Card,CardId.Zefraxi_TreasureoftheYangZing, CardId.SecretoftheYangZing)) { - return Bot.HasInHandOrInSpellZone(CardId.NinePillarsofYangZing) && Func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.SpellZone, + return Bot.HasInHandOrInSpellZone(CardId.NinePillarsofYangZing) && func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.SpellZone, true), card => { return Func.IsCode(Card, CardId.Zefraxi_TreasureoftheYangZing, CardId.SecretoftheYangZing); }) <= 0; } return false; @@ -736,7 +736,7 @@ private bool Odd_EyesMeteorburstDragonCheck() Func.GetZoneCards(Bot, CardLocation.MonsterZone | CardLocation.PendulumZone)), 7, 2, false, card => { return !card.IsCode(CardId.F_A_DawnDragster) && !card.IsCode(CardId.TheMightyMasterofMagic); }); if (materials_lists.Count <= 0) return false; - List pre_materials = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), SecretoftheYangZingCheck); + List pre_materials = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), SecretoftheYangZingCheck); var materials_sy_lists = Util.GetSynchroMaterials(pre_materials, 7, 1, 1, false, true, null, card => { return !card.IsCode(CardId.MythicalBeastJackalKing) && !card.IsCode(CardId.HeraldoftheArcLight); }); if (materials_sy_lists.Count <= 0) return false; Odd_EyesMeteorburstDragon_materials.Clear(); @@ -788,14 +788,14 @@ private bool IsSpsummonPMonster(ClientCard card) private int GetSpellActivateCount() { int count = 0; - if (!activate_DragonShrine && Func.CardsCheckAny(Bot.Hand, Func.IsCode, CardId.DragonShrine) && + if (!activate_DragonShrine && func.CardsCheckAny(Bot.Hand, func.IsCode, CardId.DragonShrine) && (HasInDeck(CardId.FlameBeastoftheNekroz) || HasInDeck(CardId.DestrudotheLostDragon_Frisson) || HasInDeck(CardId.SupremeKingDragonDarkwurm))) ++count; - if (!activate_SpellPowerMastery && Func.CardsCheckAny(Bot.Hand, Func.IsCode, CardId.SpellPowerMastery) + if (!activate_SpellPowerMastery && func.CardsCheckAny(Bot.Hand, func.IsCode, CardId.SpellPowerMastery) && (HasInDeck(CardId.TheMightyMasterofMagic) || HasInDeck(CardId.ServantofEndymion))) ++count; - if (Func.CardsCheckAny(Bot.Hand, Func.IsCode, CardId.DarkContractwiththGate)) ++count; - if (!activate_ZefraProvidence && Func.CardsCheckAny(Bot.Hand, Func.IsCode, CardId.ZefraProvidence)) + if (func.CardsCheckAny(Bot.Hand, func.IsCode, CardId.DarkContractwiththGate)) ++count; + if (!activate_ZefraProvidence && func.CardsCheckAny(Bot.Hand, func.IsCode, CardId.ZefraProvidence)) { - if (Func.CardsCheckCount(Bot.Hand, Func.IsCode, CardId.OracleofZefra) <= 0 && !activate_OracleofZefra + if (func.CardsCheckCount(Bot.Hand, func.IsCode, CardId.OracleofZefra) <= 0 && !activate_OracleofZefra && HasInDeck(CardId.OracleofZefra)) { count += 2; @@ -805,10 +805,10 @@ private int GetSpellActivateCount() ++count; } } - if (!activate_OracleofZefra && Func.CardsCheckAny(Bot.Hand, Func.IsCode, CardId.OracleofZefra)) ++count; - if (Func.CardsCheckAny(Bot.Hand, Func.IsCode, CardId.Terraforming) && HasInDeck(CardId.OracleofZefra)) ++count; - if (Func.CardsCheckAny(Bot.Hand, Func.IsCode, CardId.FoolishBurial)) ++count; - if (Func.CardsCheckCount(Bot.Hand, Func.HasType, CardType.Pendulum) > 1 && Bot.SpellZone[0] == null && + if (!activate_OracleofZefra && func.CardsCheckAny(Bot.Hand, func.IsCode, CardId.OracleofZefra)) ++count; + if (func.CardsCheckAny(Bot.Hand, func.IsCode, CardId.Terraforming) && HasInDeck(CardId.OracleofZefra)) ++count; + if (func.CardsCheckAny(Bot.Hand, func.IsCode, CardId.FoolishBurial)) ++count; + if (func.CardsCheckCount(Bot.Hand, func.HasType, CardType.Pendulum) > 1 && Bot.SpellZone[0] == null && Bot.SpellZone[4] == null) ++count; if (!summoned && Bot.HasInHand(CardId.DDSavantKepler) && HasInDeck(CardId.DarkContractwiththGate)) ++count; return count; @@ -831,8 +831,8 @@ private bool ZefraDivineStrikeEffect() private bool NinePillarsofYangZingEffect() { if (Duel.LastChainPlayer == 0) return false; - List cards = Func.CardsIdToClientCards(new List { CardId.SecretoftheYangZing },Bot.MonsterZone); - cards.AddRange(Func.CardsIdToClientCards(new List { CardId.SecretoftheYangZing,CardId.Zefraxi_TreasureoftheYangZing }, Bot.SpellZone)); + List cards = func.CardsIdToClientCards(new List { CardId.SecretoftheYangZing },Bot.MonsterZone); + cards.AddRange(func.CardsIdToClientCards(new List { CardId.SecretoftheYangZing,CardId.Zefraxi_TreasureoftheYangZing }, Bot.SpellZone)); AI.SelectCard(cards); return true; } @@ -854,9 +854,9 @@ private bool ServantofEndymionEffect() } else if (Card.Location == CardLocation.SpellZone) { - if (Func.HasInZone(Bot, CardLocation.Hand | CardLocation.PendulumZone, CardId.Zefraath, true)) + if (func.HasInZone(Bot, CardLocation.Hand | CardLocation.PendulumZone, CardId.Zefraath, true)) { - return Func.CardsCheckAny(Bot.Hand, IsSpsummonPMonster); + return func.CardsCheckAny(Bot.Hand, IsSpsummonPMonster); } return true; } @@ -886,7 +886,7 @@ private bool FoolishBurialEffect() } private List GetSynchroMaterials() { - List materials = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), + List materials = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), card => { return !IsNoLinkCards(card) && !card.HasType(CardType.Link | CardType.Xyz); }); return materials; } @@ -894,9 +894,9 @@ private bool DestrudotheLostDragon_FrissonEffect() { if (Bot.HasInExtra(CardId.CrystronHalqifibrax)) return true; if (!Bot.HasInExtra(CardId.F_A_DawnDragster) && !Bot.HasInExtra(CardId.Odd_EyesMeteorburstDragon)) return false; - List pre_materials = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true),card => { return SecretoftheYangZingCheck(card) && !IsNoLinkCards(card) && !card.HasType(CardType.Tuner) && card.Level > 0;}); + List pre_materials = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true),card => { return SecretoftheYangZingCheck(card) && !IsNoLinkCards(card) && !card.HasType(CardType.Tuner) && card.Level > 0;}); if (pre_materials.Count <= 0) return false; - List cards = Func.CardsCheckWhere(Func.GetZoneCards(Bot,CardLocation.MonsterZone,true),card=> + List cards = func.CardsCheckWhere(Func.GetZoneCards(Bot,CardLocation.MonsterZone,true),card=> { return !IsNoLinkCards(card) && card.Level > 0 && !card.HasType(CardType.Tuner); }); @@ -906,9 +906,9 @@ private bool DestrudotheLostDragon_FrissonEffect() } private bool IsCanSynchroSummon(int level) { - return Func.CardsCheckAny(GetSynchroMaterials(), card => { return (card.Level + level == 8 - && Func.CardsCheckAny(Bot.ExtraDeck, synchro_card => { return Func.IsCode(synchro_card, CardId.BorreloadSavageDragon, CardId.PSY_FramelordOmega); })) - || (card.Level + level == 7 && SecretoftheYangZingCheck(card) && Func.CardsCheckAny(Bot.ExtraDeck, synchro_card => { return Func.IsCode(synchro_card, CardId.Odd_EyesMeteorburstDragon, CardId.F_A_DawnDragster); })) + return func.CardsCheckAny(GetSynchroMaterials(), card => { return (card.Level + level == 8 + && func.CardsCheckAny(Bot.ExtraDeck, synchro_card => { return Func.IsCode(synchro_card, CardId.BorreloadSavageDragon, CardId.PSY_FramelordOmega); })) + || (card.Level + level == 7 && SecretoftheYangZingCheck(card) && func.CardsCheckAny(Bot.ExtraDeck, synchro_card => { return Func.IsCode(synchro_card, CardId.Odd_EyesMeteorburstDragon, CardId.F_A_DawnDragster); })) || (card.Level + level == 5 && Bot.HasInExtra(CardId.Denglong_FirstoftheYangZing)) || (card.Level + level == 4 && Bot.HasInExtra(CardId.HeraldoftheArcLight)); }); } @@ -953,7 +953,7 @@ private bool BorreloadSavageDragonSummon() if (materials_lists.Count <= 0) return false; foreach (var materials in materials_lists) { - if (Func.CardsCheckAny(materials, Func.IsCode, CardId.MechaPhantomBeastToken)) + if (func.CardsCheckAny(materials, func.IsCode, CardId.MechaPhantomBeastToken)) { AI.SelectMaterials(materials); return true; @@ -998,16 +998,16 @@ private bool TheMightyMasterofMagicEffect() private bool checkPActivate() { if (p_summoned) return false; - if (Func.HasInZone(Bot, CardLocation.PendulumZone, CardId.Zefraath, true)) return true; + if (func.HasInZone(Bot, CardLocation.PendulumZone, CardId.Zefraath, true)) return true; if (Bot.HasInHand(CardId.Zefraath) && (Bot.SpellZone[0] != null || Bot.SpellZone[4] != null)) return false; if (Bot.SpellZone[0] == null && Bot.SpellZone[4] == null) { - if (!Bot.HasInHand(CardId.Zefraath) && !Func.CardsCheckAny(Bot.Hand, card => { return IsSpsummonPMonster(card) && - (Card.LScale >= 5 ? card.LScale < 5 : card.LScale > 5) && Func.GetPSpSummonMonster(Bot,card,Card)?.Count > 0; })) return false; + if (!Bot.HasInHand(CardId.Zefraath) && !func.CardsCheckAny(Bot.Hand, card => { return IsSpsummonPMonster(card) && + (Card.LScale >= 5 ? card.LScale < 5 : card.LScale > 5) && func.GetPSpSummonMonster(Bot,card,Card)?.Count > 0; })) return false; } else { - if (Func.GetPSpSummonMonster(Bot, Bot.SpellZone[0], Card)?.Count <= 0 && Func.GetPSpSummonMonster(Bot, Bot.SpellZone[4], Card)?.Count <= 0) return false; + if (func.GetPSpSummonMonster(Bot, Bot.SpellZone[0], Card)?.Count <= 0 && func.GetPSpSummonMonster(Bot, Bot.SpellZone[4], Card)?.Count <= 0) return false; } return true; @@ -1090,9 +1090,9 @@ private bool IsNoLinkCards(ClientCard card) } private bool LinkuribohSummon() { - List materials = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true),Func.HasLevel,1); - if (Func.CardsCheckCount(materials, Func.NegateFunc(Func.HasType), CardType.Tuner) <= 0 && - Func.CardsCheckCount(materials, Func.HasType, CardType.Tuner) <= 1) return false; + List materials = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true),func.HasLevel,1); + if (func.CardsCheckCount(materials, Func.NegateFunc(func.HasType), CardType.Tuner) <= 0 && + func.CardsCheckCount(materials, func.HasType, CardType.Tuner) <= 1) return false; materials.Sort((cardA, cardB) => { if (cardA.HasType(CardType.Tuner) && !cardB.HasType(CardType.Tuner)) return 1; @@ -1139,14 +1139,14 @@ private bool PSY_FramelordOmegaEffect() else { if (Bot.Banished.Count <= 0) return false; - AI.SelectCard(Func.CardsIdToClientCards(new List { CardId.JetSynchron, CardId.DDLamia }, Bot.Banished)); + AI.SelectCard(func.CardsIdToClientCards(new List { CardId.JetSynchron, CardId.DDLamia }, Bot.Banished)); return true; } } else { if (Bot.Graveyard.Count <= 0) return false; - AI.SelectCard(Func.CardsIdToClientCards(new List { CardId.Zefraath, CardId.CrystronHalqifibrax, CardId.Denglong_FirstoftheYangZing,CardId.BorreloadSavageDragon, CardId.DDLamia }, Bot.Graveyard)); + AI.SelectCard(func.CardsIdToClientCards(new List { CardId.Zefraath, CardId.CrystronHalqifibrax, CardId.Denglong_FirstoftheYangZing,CardId.BorreloadSavageDragon, CardId.DDLamia }, Bot.Graveyard)); return true; } } @@ -1173,7 +1173,7 @@ private bool IsExtraZoneCard(ClientCard card) private bool HeavymetalfoesElectrumiteSummon() { if (Odd_EyesMeteorburstDragonCheck()) return false; - List materials = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), Func.HasType, CardType.Pendulum); + List materials = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), func.HasType, CardType.Pendulum); if (materials.Count > 0) { materials.Sort((cardA,cardB) => @@ -1188,7 +1188,7 @@ private bool HeavymetalfoesElectrumiteSummon() { if (IsExtraZoneCard(material)) result.Insert(0, material); else if (IsNoLinkCards(material) || (material.HasType(CardType.Tuner) && Bot.HasInExtra(CardId.CrystronHalqifibrax) - && Func.CardsCheckCount(Func.GetZoneCards(Bot,CardLocation.MonsterZone,true),Func.HasType,CardType.Tuner) <= 0)) continue; + && func.CardsCheckCount(Func.GetZoneCards(Bot,CardLocation.MonsterZone,true),func.HasType,CardType.Tuner) <= 0)) continue; else result.Add(material); } if (result.Count < 2) return false; @@ -1201,19 +1201,19 @@ private bool SecretoftheYangZingCheck(ClientCard card) { if (card.IsCode(CardId.SecretoftheYangZing) && Bot.HasInHandOrInSpellZone(CardId.NinePillarsofYangZing)) { - return Func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.Hand | CardLocation.PendulumZone | CardLocation.MonsterZone, true), p_card => { + return func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.Hand | CardLocation.PendulumZone | CardLocation.MonsterZone, true), p_card => { return p_card.HasSetcode(0xc4) && p_card.HasType(CardType.Pendulum);}) <= 0; } return true; } private bool F_A_DawnDragsterSummon() { - List pre_materials = Func.CardsCheckWhere(Func.GetZoneCards(Bot,CardLocation.MonsterZone,true),SecretoftheYangZingCheck); + List pre_materials = func.CardsCheckWhere(Func.GetZoneCards(Bot,CardLocation.MonsterZone,true),SecretoftheYangZingCheck); var materials_lists = Util.GetSynchroMaterials(pre_materials, 7,1,1,false,true,null,card => { return !card.IsCode(CardId.MythicalBeastJackalKing) && !card.IsCode(CardId.HeraldoftheArcLight); }); if (materials_lists.Count <= 0) return false ; foreach (var materials in materials_lists) { - if (Func.CardsCheckCount(materials, card=> + if (func.CardsCheckCount(materials, card=> { return card.HasType(CardType.Tuner) && card.HasRace(CardRace.Machine); })<=0) @@ -1232,18 +1232,18 @@ private bool CrystronHalqifibraxEffect() private bool MechaPhantomBeastAuroradonSummon() { if (Bot.GetMonstersInMainZone().Count >= 4 || (!HasInDeck(CardId.MechaPhantomBeastO_Lion) && !IsCanSPSummonTunerLevel1() - && !Func.CardsCheckAny(Func.GetZoneCards(Bot,CardLocation.MonsterZone|CardLocation.Grave,true),Func.IsCode,CardId.Deskbot001))) return false; + && !func.CardsCheckAny(Func.GetZoneCards(Bot,CardLocation.MonsterZone|CardLocation.Grave,true),func.IsCode,CardId.Deskbot001))) return false; if (XyzModeCheck()) { List pre_materials = new List(); - List key_materials = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.Grave), card => { - return (card.IsCode(CardId.DDLamia) && !activate_DDLamia && Func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.Onfield | CardLocation.Hand, true), scard => + List key_materials = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.Grave), card => { + return (card.IsCode(CardId.DDLamia) && !activate_DDLamia && func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.Onfield | CardLocation.Hand, true), scard => { return Func.HasSetCode(scard, 0xaf, 0xae) && scard.Id != CardId.DDLamia; }) > 0); }); - List key_materials_2 = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.Grave), card => { return card.IsCode(CardId.JetSynchron) && !activate_JetSynchron; }); + List key_materials_2 = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.Grave), card => { return card.IsCode(CardId.JetSynchron) && !activate_JetSynchron; }); pre_materials.AddRange(key_materials); pre_materials.AddRange(key_materials_2); - if (!summoned) pre_materials.AddRange(Func.CardsCheckWhere(Bot.Hand,Func.NegateFunc(Func.IsCode),CardId.DestrudotheLostDragon_Frisson)); + if (!summoned) pre_materials.AddRange(func.CardsCheckWhere(Bot.Hand,Func.NegateFunc(func.IsCode),CardId.DestrudotheLostDragon_Frisson)); pre_materials.AddRange(Bot.MonsterZone); var materials_lists = Util.GetSynchroMaterials(pre_materials, 7, 1, 1,false,true,null,card=> { return !card.IsCode(CardId.MythicalBeastJackalKing);}); if (materials_lists.Count > 0) return false; @@ -1280,7 +1280,7 @@ private bool SaryujaSkullDreadSummon() List materials = new List(); int link_count = 0; int materials_count = 0; - int tuner_count = Func.CardsCheckCount(Bot.MonsterZone, Func.HasType, CardType.Tuner); + int tuner_count = func.CardsCheckCount(Bot.MonsterZone, func.HasType, CardType.Tuner); List temp_materials = Bot.GetMonsters(); temp_materials.Sort((cardA, cardB) => { @@ -1300,8 +1300,8 @@ private bool SaryujaSkullDreadSummon() link_count += material.HasType(CardType.Link) ? material.LinkCount : 1; if (link_count >= 4) { - if (materials_count == 3 && Bot.Deck.Count > 4 && ((Func.CardsCheckCount(Bot.Hand, Func.HasType, CardType.Tuner) > 0 - || (Bot.HasInMonstersZone(CardId.DDLamia,false,false,true) && !activate_DDLamia && Func.CardsCheckCount(Func.GetZoneCards + if (materials_count == 3 && Bot.Deck.Count > 4 && ((func.CardsCheckCount(Bot.Hand, func.HasType, CardType.Tuner) > 0 + || (Bot.HasInMonstersZone(CardId.DDLamia,false,false,true) && !activate_DDLamia && func.CardsCheckCount(Func.GetZoneCards (Bot,CardLocation.Onfield|CardLocation.Hand,true),card=> { return Func.HasSetCode(card, 0xaf, 0xae) && card.Id != CardId.DDLamia; }) > 0) || (Bot.HasInMonstersZone(CardId.JetSynchron, false, false, true) && !activate_JetSynchron)) || xyz_mode)) { @@ -1335,7 +1335,7 @@ private bool PendulumActivate() } private bool IsActivateScale() { - return Func.IsActivateScale(Bot, Card); + return func.IsActivateScale(Bot, Card); } private bool SpellActivate() { @@ -1381,7 +1381,7 @@ private bool DarkContractwiththGateEffect() { if (SpellActivate()) { - return HasInDeck(CardId.DDLamia) || Func.HasInZone(Bot, CardLocation.PendulumZone, CardId.ServantofEndymion, true, true); + return HasInDeck(CardId.DDLamia) || func.HasInZone(Bot, CardLocation.PendulumZone, CardId.ServantofEndymion, true, true); } return true; } @@ -1450,10 +1450,10 @@ private bool JetSynchronEffect() if (Card.Location == CardLocation.Grave) { if (!IsCanSynchroSummon(Card.Level)) return false; - if (Func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.Extra), card => { return card.HasType(CardType.Synchro) || Func.IsCode(card, CardId.CrystronHalqifibrax, CardId.Linkuriboh); })) + if (func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.Extra), card => { return card.HasType(CardType.Synchro) || Func.IsCode(card, CardId.CrystronHalqifibrax, CardId.Linkuriboh); })) { activate_JetSynchron = true; - List dcards = Func.CardsIdToClientCards(GetDisabledIds(), Bot.Hand); + List dcards = func.CardsIdToClientCards(GetDisabledIds(), Bot.Hand); if (!Bot.HasInExtra(CardId.CrystronHalqifibrax) && dcards.Count <= 0) return false; AI.SelectCard(dcards); return true; @@ -1467,7 +1467,7 @@ private bool MechaPhantomBeastAuroradonEffect() else { if (!HasInDeck(CardId.MechaPhantomBeastO_Lion) - && Func.GetZoneCards(Enemy,CardLocation.Onfield).Count <= 0 && Func.CardsCheckCount(Bot.Graveyard,Func.HasType,CardType.Trap) <= 0) return false; + && Func.GetZoneCards(Enemy,CardLocation.Onfield).Count <= 0 && func.CardsCheckCount(Bot.Graveyard,func.HasType,CardType.Trap) <= 0) return false; List tRelease = new List(); List nRelease = new List(); foreach (var card in Bot.GetMonsters()) @@ -1479,7 +1479,7 @@ private bool MechaPhantomBeastAuroradonEffect() opt_0 = false; opt_1 = false; opt_2 = false; - if (count >= 3 && Func.CardsCheckCount(Bot.Graveyard, Func.HasType, CardType.Trap) > 0) opt_2 = true; + if (count >= 3 && func.CardsCheckCount(Bot.Graveyard, func.HasType, CardType.Trap) > 0) opt_2 = true; if (count >= 2 && CheckRemainInDeck(CardId.MechaPhantomBeastO_Lion) > 0) opt_1 = true; if (count >= 1 && Func.GetZoneCards(Enemy, CardLocation.Onfield).Count > 0) opt_0 = true; if (!opt_0 && !opt_1 && !opt_2) return false; @@ -1502,8 +1502,8 @@ private bool SupremeKingDragonDarkwurmEffect() } private bool SupremeKingDragonDarkwurmSummon() { - if ((!activate_p_Zefraath && Bot.HasInHand(CardId.Zefraath) && !activate_SupremeKingDragonDarkwurm_1 && HasInDeck(CardId.SupremeKingGateZero) && Func.CardsCheckAny(Bot.Hand, Func.HasType, CardType.Tuner)) - ||(Func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.Hand), card => { return card.LinkCount > 5; }) && + if ((!activate_p_Zefraath && Bot.HasInHand(CardId.Zefraath) && !activate_SupremeKingDragonDarkwurm_1 && HasInDeck(CardId.SupremeKingGateZero) && func.CardsCheckAny(Bot.Hand, func.HasType, CardType.Tuner)) + ||(func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.Hand), card => { return card.LinkCount > 5; }) && !Bot.HasInHand(CardId.SupremeKingGateZero) && !activate_SupremeKingDragonDarkwurm_2)) { summoned = true; @@ -1514,22 +1514,22 @@ private bool SupremeKingDragonDarkwurmSummon() private bool DefaultSummon_2() { if (Card.Location == CardLocation.Hand && Card.Level <= 4 - && Bot.HasInExtra(CardId.CrystronHalqifibrax) && (Func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), card => { return Card.HasType(CardType.Tuner) ? true : card.HasType(CardType.Tuner); }))) { + && Bot.HasInExtra(CardId.CrystronHalqifibrax) && (func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), card => { return Card.HasType(CardType.Tuner) ? true : card.HasType(CardType.Tuner); }))) { summoned = true; return true; } return false; } private bool IsCanSPSummonTunerLevel1() { - return Func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.MonsterZone | CardLocation.Grave, true), card => { - return (card.IsCode(CardId.DDLamia) && !activate_DDLamia && Func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.Onfield | CardLocation.Hand, true), scard => { return Func.HasSetCode(scard, 0xaf, 0xae) && scard.Id != CardId.DDLamia; }) + return func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.MonsterZone | CardLocation.Grave, true), card => { + return (card.IsCode(CardId.DDLamia) && !activate_DDLamia && func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.Onfield | CardLocation.Hand, true), scard => { return Func.HasSetCode(scard, 0xaf, 0xae) && scard.Id != CardId.DDLamia; }) > 0) || (card.IsCode(CardId.JetSynchron) && !activate_JetSynchron) && Bot.GetMonstersInMainZone().Count <= 3; }); } private bool DefaultSummon() { if (Card.Level > 4) return false; - if ((!link_summoned && Bot.HasInExtra(CardId.HeavymetalfoesElectrumite) && Func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), Func.HasType, CardType.Pendulum) > 0 + if ((!link_summoned && Bot.HasInExtra(CardId.HeavymetalfoesElectrumite) && func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), func.HasType, CardType.Pendulum) > 0 && Card.HasType(CardType.Pendulum)) || (IsCanSPSummonTunerLevel1() && ((Card.Level == 3 && Bot.HasInExtra(CardId.HeraldoftheArcLight)) || ( Card.Level == 4 && Bot.HasInExtra(CardId.Denglong_FirstoftheYangZing)))) || @@ -1551,7 +1551,7 @@ private void HeavymetalfoesElectrumiteAddIds (List ids) { if (!summoned && HasInDeck(CardId.DarkContractwiththGate) && HasInDeck(CardId.DDLamia)) { - if (!Func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), Func.HasType, CardType.Tuner)) + if (!func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), func.HasType, CardType.Tuner)) { ids.Add(CardId.DDSavantKepler); } @@ -1584,7 +1584,7 @@ private bool HeavymetalfoesElectrumiteEffect() { if (ActivateDescription != -1) { - List cards = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.SpellZone, true),Func.NegateFunc(Func.IsCode),CardId.DarkContractwiththGate); + List cards = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.SpellZone, true),Func.NegateFunc(func.IsCode),CardId.DarkContractwiththGate); if (cards.Count <= 0) { HeavymetalfoesElectrumite_activate = true; @@ -1613,7 +1613,7 @@ private bool CalledbytheGraveEffect() ClientCard card = Util.GetLastChainCard(); if (card == null) return false; int id = card.Id; - List g_cards = Func.CardsCheckWhere(Enemy.Graveyard, Func.IsCode, id); + List g_cards = func.CardsCheckWhere(Enemy.Graveyard, func.IsCode, id); if (Duel.LastChainPlayer != 0) { if (card.Location == CardLocation.Grave && card.HasType(CardType.Monster)) @@ -1702,14 +1702,14 @@ public override IList OnSelectSynchroMaterial(IList card } private IList _OnSelectPendulumSummon(IList cards, int min,int max) { - List ids = Func.GetSelectCardIdList(); - List result = Func.GetSelectCardList(); - List exs = Func.CardsCheckWhere(cards, Func.IsLocation, CardLocation.Extra); - List hs = Func.CardsCheckWhere(cards,Func.NegateFunc(Func.IsLocation), CardLocation.Extra); - if (Func.CardsCheckAny(Func.GetZoneCards(Bot,CardLocation.PendulumZone,true),card=> { - return card.HasSetcode(0xc4) && !card.IsCode(CardId.Zefraath);}) && Func.CardsCheckAny(exs, Func.IsCode, CardId.ShaddollZefracore)) ids.Add(CardId.ShaddollZefracore); - result = Func.CardsIdToClientCards(ids,cards); - List temp_cards = Func.CardsCheckWhere(cards, Func.NegateFunc(Func.IsCode), CardId.MaxxC); + List ids = func.GetSelectCardIdList(); + List result = func.GetSelectCardList(); + List exs = func.CardsCheckWhere(cards, func.IsLocation, CardLocation.Extra); + List hs = func.CardsCheckWhere(cards,Func.NegateFunc(func.IsLocation), CardLocation.Extra); + if (func.CardsCheckAny(Func.GetZoneCards(Bot,CardLocation.PendulumZone,true),card=> { + return card.HasSetcode(0xc4) && !card.IsCode(CardId.Zefraath);}) && func.CardsCheckAny(exs, func.IsCode, CardId.ShaddollZefracore)) ids.Add(CardId.ShaddollZefracore); + result = func.CardsIdToClientCards(ids,cards); + List temp_cards = func.CardsCheckWhere(cards, Func.NegateFunc(func.IsCode), CardId.MaxxC); result.AddRange(temp_cards); if(result.Count <= 0) return Func.CheckSelectCount(Util, result, cards, min, min); if (result[0] != null && result[0].Location != CardLocation.Extra) ++p_count; @@ -1719,16 +1719,16 @@ private IList _OnSelectPendulumSummon(IList cards, int m public override IList OnSelectCard(IList cards, int min, int max, int hint, bool cancelable) { if (AI.HaveSelectedCards()) return null; - List ids = Func.GetSelectCardIdList(); - List result = Func.GetSelectCardList(); + List ids = func.GetSelectCardIdList(); + List result = func.GetSelectCardList(); if (hint == HintMsg.AddToHand) { - if (Func.CardsCheckAny(cards, card => { return card.Location == CardLocation.Deck && card.HasSetcode(0xc4); })) + if (func.CardsCheckAny(cards, card => { return card.Location == CardLocation.Deck && card.HasSetcode(0xc4); })) { if (!activate_ZefraProvidence) ids.Add(CardId.ZefraProvidence); if (p_summoned) { - if (!summoned && Bot.HasInExtra(CardId.HeavymetalfoesElectrumite) && Func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), Func.HasType, CardType.Pendulum) == 1) + if (!summoned && Bot.HasInExtra(CardId.HeavymetalfoesElectrumite) && func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), func.HasType, CardType.Pendulum) == 1) { List pre_ids = new List {CardId.Zefraxi_TreasureoftheYangZing,CardId.StellarknightZefraxciton,CardId.RitualBeastTamerZeframpilica,CardId.NinePillarsofYangZing ,CardId.StellarknightZefraxciton,CardId.ShaddollZefracore}; @@ -1737,16 +1737,16 @@ public override IList OnSelectCard(IList cards, int min, ids.Add(CardId.ZefraDivineStrike); } if (!activate_OracleofZefra) ids.Add(CardId.OracleofZefra); - if (!activate_p_Zefraath && !Func.HasInZone(Bot, CardLocation.Hand | CardLocation.PendulumZone, CardId.Zefraath, true)) ids.Add(CardId.Zefraath); - if (Func.HasInZone(Bot, CardLocation.Hand | CardLocation.PendulumZone, CardId.SupremeKingGateZero, true) && !Func.CardsCheckAny(Bot.Hand, Func.HasType, CardType.Tuner) + if (!activate_p_Zefraath && !func.HasInZone(Bot, CardLocation.Hand | CardLocation.PendulumZone, CardId.Zefraath, true)) ids.Add(CardId.Zefraath); + if (func.HasInZone(Bot, CardLocation.Hand | CardLocation.PendulumZone, CardId.SupremeKingGateZero, true) && !func.CardsCheckAny(Bot.Hand, func.HasType, CardType.Tuner) && !Bot.HasInHand(CardId.Zefraxi_TreasureoftheYangZing)) ids.Add(CardId.Zefraxi_TreasureoftheYangZing); - List pMonsters = Func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.Hand), card => + List pMonsters = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.Hand), card => { return card.HasType(CardType.Pendulum) && !card.IsCode(CardId.Zefraath); }); if (pMonsters.Count > 0) { - List zefraPMonsters = Func.CardsCheckWhere(pMonsters, Func.HasSetCode, 0xc4); + List zefraPMonsters = func.CardsCheckWhere(pMonsters, func.HasSetCode, 0xc4); if (zefraPMonsters.Count > 0) { zefraPMonsters.Sort(Func.CompareCardScale); @@ -1755,7 +1755,7 @@ public override IList OnSelectCard(IList cards, int min, { if (minScale < 5) { - if (Func.CardsCheckCount(cards, IsZefraScaleAbove) > 1) + if (func.CardsCheckCount(cards, IsZefraScaleAbove) > 1) { ids.Add(CardId.ShaddollZefracore); if (!Bot.HasInHand(CardId.Zefraxi_TreasureoftheYangZing)) ids.Add(CardId.Zefraxi_TreasureoftheYangZing); @@ -1774,7 +1774,7 @@ public override IList OnSelectCard(IList cards, int min, } else { - if (Func.CardsCheckCount(cards, IsZefraScaleBelow) > 1) + if (func.CardsCheckCount(cards, IsZefraScaleBelow) > 1) { ids.Add(CardId.ShaddollZefracore); if (!Bot.HasInHand(CardId.Zefraxi_TreasureoftheYangZing)) ids.Add(CardId.Zefraxi_TreasureoftheYangZing); @@ -1812,7 +1812,7 @@ public override IList OnSelectCard(IList cards, int min, } else { - if (Func.HasInZone(Bot, CardLocation.Hand | CardLocation.PendulumZone, CardId.Zefraath, true) && + if (func.HasInZone(Bot, CardLocation.Hand | CardLocation.PendulumZone, CardId.Zefraath, true) && !activate_p_Zefraath) { ids.Add(CardId.Zefraxi_TreasureoftheYangZing); @@ -1826,36 +1826,36 @@ public override IList OnSelectCard(IList cards, int min, ids.Add(CardId.RitualBeastTamerZeframpilica); ids.Add(CardId.Zefraxi_TreasureoftheYangZing); } - result = Func.CardsIdToClientCards(ids, cards); + result = func.CardsIdToClientCards(ids, cards); } - else if (Func.CardsCheckALL(cards, Func.IsLocation, true, CardLocation.Extra)) + else if (func.CardsCheckALL(cards, func.IsLocation, true, CardLocation.Extra)) { HeavymetalfoesElectrumiteAddIds(ids); - result = Func.CardsIdToClientCards(ids, cards); + result = func.CardsIdToClientCards(ids, cards); } - else if (Func.CardsCheckALL(cards, Func.HasSetCode, true, 0x12a)) + else if (func.CardsCheckALL(cards, func.HasSetCode, true, 0x12a)) { - if (!Func.HasInZone(Bot, CardLocation.PendulumZone | CardLocation.Hand, CardId.ServantofEndymion, true) || - (Func.HasInZone(Bot, CardLocation.PendulumZone | CardLocation.Hand, CardId.ServantofEndymion, true) && (!HasInDeck(CardId.TheMightyMasterofMagic) || !HasInDeck(CardId.MythicalBeastJackalKing)))) ids.Add(CardId.ServantofEndymion); + if (!func.HasInZone(Bot, CardLocation.PendulumZone | CardLocation.Hand, CardId.ServantofEndymion, true) || + (func.HasInZone(Bot, CardLocation.PendulumZone | CardLocation.Hand, CardId.ServantofEndymion, true) && (!HasInDeck(CardId.TheMightyMasterofMagic) || !HasInDeck(CardId.MythicalBeastJackalKing)))) ids.Add(CardId.ServantofEndymion); ids.Add(CardId.TheMightyMasterofMagic); ids.Add(CardId.MythicalBeastJackalKing); - result = Func.CardsIdToClientCards(ids, cards); + result = func.CardsIdToClientCards(ids, cards); } - else if (Func.CardsCheckALL(cards, Func.HasSetCode, true, 0xaf)) + else if (func.CardsCheckALL(cards, func.HasSetCode, true, 0xaf)) { ids.Add(CardId.DDLamia); ids.Add(CardId.DDSavantKepler); - result = Func.CardsIdToClientCards(ids, cards); + result = func.CardsIdToClientCards(ids, cards); } } - else if (hint == HintMsg.ToDeck && Func.CardsCheckALL(cards, Func.IsLocation, true, CardLocation.Hand) && min == 3 && max ==3) + else if (hint == HintMsg.ToDeck && func.CardsCheckALL(cards, func.IsLocation, true, CardLocation.Hand) && min == 3 && max ==3) { - result = Func.CardsIdToClientCards(GetSendToDeckIds(),cards); + result = func.CardsIdToClientCards(GetSendToDeckIds(),cards); } - else if (hint == HintMsg.ToGrave && Func.CardsCheckALL(cards, Func.IsLocation, true, CardLocation.Deck)) + else if (hint == HintMsg.ToGrave && func.CardsCheckALL(cards, func.IsLocation, true, CardLocation.Deck)) { List extra_ids = CheckShouldSpsummonExtraMonster(); - //if (Func.CardsCheckAny(cards, Func.HasRace, CardRace.Dragon)) + //if (func.CardsCheckAny(cards, Func.HasRace, CardRace.Dragon)) if (extra_ids.Count <= 0) { if (!activate_SupremeKingDragonDarkwurm_2 && Bot.GetMonsterCount() <= 0) ids.Add(CardId.SupremeKingDragonDarkwurm); @@ -1866,7 +1866,7 @@ public override IList OnSelectCard(IList cards, int min, else if (extra_ids.Count > 1) { if (Bot.GetMonsterCount() <= 0 && !activate_SupremeKingDragonDarkwurm_2) ids.Add(CardId.SupremeKingDragonDarkwurm); - if (Func.CardsCheckAny(Bot.Hand, card => { return card.Level < 7 && card.HasType(CardType.Monster); })) ids.Add(CardId.DestrudotheLostDragon_Frisson); + if (func.CardsCheckAny(Bot.Hand, card => { return card.Level < 7 && card.HasType(CardType.Monster); })) ids.Add(CardId.DestrudotheLostDragon_Frisson); if (Bot.GetHandCount() > 0) ids.Add(CardId.JetSynchron); if (!summoned && Bot.HasInHand(CardId.RitualBeastTamerZeframpilica)) ids.Add(CardId.FlameBeastoftheNekroz); ids.Add(CardId.DestrudotheLostDragon_Frisson); @@ -1878,7 +1878,7 @@ public override IList OnSelectCard(IList cards, int min, { if (Bot.GetMonsterCount() <= 0 && !activate_SupremeKingDragonDarkwurm_2) ids.Add(CardId.SupremeKingDragonDarkwurm); if (!summoned && Bot.HasInHand(CardId.RitualBeastTamerZeframpilica)) ids.Add(CardId.FlameBeastoftheNekroz); - //if (!summoned && Func.CardsCheckAny(Bot.Hand, card => { return card.Level < 7 && card.HasType(CardType.Monster); })) ids.Add(CardId.DestrudotheLostDragon_Frisson); + //if (!summoned && func.CardsCheckAny(Bot.Hand, card => { return card.Level < 7 && card.HasType(CardType.Monster); })) ids.Add(CardId.DestrudotheLostDragon_Frisson); //if (Bot.GetHandCount() > 0) ids.Add(CardId.JetSynchron); ids.Add(CardId.DestrudotheLostDragon_Frisson); ids.Add(CardId.JetSynchron); @@ -1887,7 +1887,7 @@ public override IList OnSelectCard(IList cards, int min, } else if (extra_ids.Contains(CardId.CrystronHalqifibrax)) { - if (Func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.Hand | CardLocation.MonsterZone, true), Func.HasType, CardType.Tuner)) + if (func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.Hand | CardLocation.MonsterZone, true), func.HasType, CardType.Tuner)) { if (Bot.GetMonsterCount() <= 0 && !activate_SupremeKingDragonDarkwurm_2) ids.Add(CardId.SupremeKingDragonDarkwurm); ids.Add(CardId.DestrudotheLostDragon_Frisson); @@ -1904,7 +1904,7 @@ public override IList OnSelectCard(IList cards, int min, } } - result = Func.CardsIdToClientCards(ids, cards); + result = func.CardsIdToClientCards(ids, cards); } else if (hint == Util.GetStringId(CardId.Zefraath, 1)) { @@ -1914,8 +1914,8 @@ public override IList OnSelectCard(IList cards, int min, int pScale = (rScale != 5) ? rScale : lScale; if (pScale < 5) { - if (!activate_SecretoftheYangZing && !Func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.Hand | CardLocation.Extra, true), Func.IsCode, CardId.SecretoftheYangZing)) ids.Add(CardId.SecretoftheYangZing); - if (!activate_ShaddollZefracore && Func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.PendulumZone, true), card => { return !card.IsCode(CardId.Zefraath) && card.HasSetcode(0xc4); })) ids.Add(CardId.ShaddollZefracore); + if (!activate_SecretoftheYangZing && !func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.Hand | CardLocation.Extra, true), func.IsCode, CardId.SecretoftheYangZing)) ids.Add(CardId.SecretoftheYangZing); + if (!activate_ShaddollZefracore && func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.PendulumZone, true), card => { return !card.IsCode(CardId.Zefraath) && card.HasSetcode(0xc4); })) ids.Add(CardId.ShaddollZefracore); ids.Add(CardId.StellarknightZefraxciton); ids.Add(CardId.SecretoftheYangZing); ids.Add(CardId.ShaddollZefracore); @@ -1926,19 +1926,19 @@ public override IList OnSelectCard(IList cards, int min, ids.Add(CardId.SatellarknightZefrathuban); ids.Add(CardId.RitualBeastTamerZeframpilica); } - result = Func.CardsIdToClientCards(ids, cards); + result = func.CardsIdToClientCards(ids, cards); } else if (hint == Util.GetStringId(CardId.HeavymetalfoesElectrumite, 3)) { HeavymetalfoesElectrumiteAddIds(ids); - result = Func.CardsIdToClientCards(ids, cards); + result = func.CardsIdToClientCards(ids, cards); } - else if (!(IS_YGOPRO & !(hint == HintMsg.SpSummon)) && Func.CardsCheckALL(cards, card =>{return card.IsCode(CardId.TheMightyMasterofMagic) || card.IsCode(CardId.MythicalBeastJackalKing); + else if (!(IS_YGOPRO & !(hint == HintMsg.SpSummon)) && func.CardsCheckALL(cards, card =>{return card.IsCode(CardId.TheMightyMasterofMagic) || card.IsCode(CardId.MythicalBeastJackalKing); }, true)) { ids.Add(CardId.MythicalBeastJackalKing); ids.Add(CardId.TheMightyMasterofMagic); - result = Func.CardsIdToClientCards(ids, cards); + result = func.CardsIdToClientCards(ids, cards); } else if (p_summoning || ((Card == Bot.SpellZone[0] || Card == Bot.SpellZone[4]) && hint == HintMsg.SpSummon && Card.HasType(CardType.Pendulum))) @@ -1949,19 +1949,19 @@ public override IList OnSelectCard(IList cards, int min, } else if (hint == HintMsg.Destroy) { - if (Func.CardsCheckALL(cards, card => { return card.Controller == 0 && card.IsFaceup(); }, true)) + if (func.CardsCheckALL(cards, card => { return card.Controller == 0 && card.IsFaceup(); }, true)) { should_destory = true; - if (Func.CardsCheckALL(cards, Func.HasSetCode, true, 0x9e)) + if (func.CardsCheckALL(cards, func.HasSetCode, true, 0x9e)) { - if (!activate_SecretoftheYangZing) result = Func.CardsIdToClientCards(new List { CardId.SecretoftheYangZing }, Func.CardsCheckWhere(cards, - Func.IsLocation,CardLocation.MonsterZone)); - result.AddRange(Func.CardsIdToClientCards(new List { CardId.SecretoftheYangZing, CardId.Zefraxi_TreasureoftheYangZing }, Func.CardsCheckWhere(cards, - Func.NegateFunc(Func.IsLocation), CardLocation.MonsterZone))); + if (!activate_SecretoftheYangZing) result = func.CardsIdToClientCards(new List { CardId.SecretoftheYangZing }, func.CardsCheckWhere(cards, + func.IsLocation,CardLocation.MonsterZone)); + result.AddRange(func.CardsIdToClientCards(new List { CardId.SecretoftheYangZing, CardId.Zefraxi_TreasureoftheYangZing }, func.CardsCheckWhere(cards, + Func.NegateFunc(func.IsLocation), CardLocation.MonsterZone))); } else { - List scards = Func.CardsCheckWhere(cards, card => { return card.Location == CardLocation.SpellZone; }); + List scards = func.CardsCheckWhere(cards, card => { return card.Location == CardLocation.SpellZone; }); scards.Sort((cardA, cardB) => { if (Func.IsCode(cardA, CardId.OracleofZefra, CardId.DarkContractwiththGate) && !Func.IsCode(cardB, CardId.OracleofZefra, CardId.DarkContractwiththGate)) return 1; @@ -1972,13 +1972,13 @@ public override IList OnSelectCard(IList cards, int min, } } - else if (Func.CardsCheckAny(cards, card => { return card.Controller == 1 && (card.Location & CardLocation.Onfield) > 0; }) && min == 1 && max == 1) + else if (func.CardsCheckAny(cards, card => { return card.Controller == 1 && (card.Location & CardLocation.Onfield) > 0; }) && min == 1 && max == 1) { ClientCard card = Util.GetBestEnemyCard(); if (card != null && cards.Contains(card)) result.Add(card); else { - result = new List(Func.CardsCheckWhere(cards, ecard => { return ecard.Controller == 1; })); + result = new List(func.CardsCheckWhere(cards, ecard => { return ecard.Controller == 1; })); if (result.Count <= 0) return null; result.Sort(CardContainer.CompareCardAttack); result.Reverse(); @@ -1995,11 +1995,11 @@ public override IList OnSelectCard(IList cards, int min, { CardId.TheMightyMasterofMagic, CardId.MythicalBeastJackalKing, CardId.SecretoftheYangZing }; - if (Func.CardsCheckALL(cards, Func.IsLocation,true,CardLocation.Hand)) + if (func.CardsCheckALL(cards, func.IsLocation,true,CardLocation.Hand)) { - if(summoned && Bot.HasInExtra(CardId.CrystronHalqifibrax) && Func.CardsCheckCount(Bot.MonsterZone,card => {return card.IsFaceup() + if(summoned && Bot.HasInExtra(CardId.CrystronHalqifibrax) && func.CardsCheckCount(Bot.MonsterZone,card => {return card.IsFaceup() && card.HasType(CardType.Tuner);}) <= 0 && !(Bot.HasInGraveyard(CardId.DDLamia) && !activate_DDLamia - && Func.CardsCheckCount(Func.GetZoneCards (Bot, CardLocation.Onfield | CardLocation.Hand, true), card => { return Func.HasSetCode(card, 0xaf, 0xae) && card.Id != CardId.DDLamia; }) + && func.CardsCheckCount(Func.GetZoneCards (Bot, CardLocation.Onfield | CardLocation.Hand, true), card => { return Func.HasSetCode(card, 0xaf, 0xae) && card.Id != CardId.DDLamia; }) <= 0) && !(Bot.HasInGraveyard(CardId.JetSynchron) && !activate_JetSynchron) && !(Bot.HasInGraveyard(CardId.DestrudotheLostDragon_Frisson) && !activate_DestrudotheLostDragon_Frisson)){ ids.AddRange(tuner_ids); @@ -2010,20 +2010,20 @@ public override IList OnSelectCard(IList cards, int min, ids.AddRange(no_tuner_ids); ids.AddRange(tuner_ids); } - result = Func.CardsIdToClientCards(ids, cards); + result = func.CardsIdToClientCards(ids, cards); } - else if (Func.CardsCheckALL(cards, card => { return Func.IsCode(card, CardId.LightoftheYangZing, CardId.PSY_FramegearGamma, + else if (func.CardsCheckALL(cards, card => { return Func.IsCode(card, CardId.LightoftheYangZing, CardId.PSY_FramegearGamma, CardId.MechaPhantomBeastO_Lion, CardId.JetSynchron, CardId.Deskbot001, CardId.DDLamia); })){ if (Bot.GetMonstersInMainZone().Count <= 1) ids.Add(CardId.Deskbot001); ids.Add(CardId.JetSynchron); ids.Add(CardId.Deskbot001); ids.Add(CardId.LightoftheYangZing); ids.Add(CardId.PSY_FramegearGamma); - result = Func.CardsIdToClientCards(ids, cards); + result = func.CardsIdToClientCards(ids, cards); } } - else if (hint == HintMsg.Release && Func.CardsCheckAny(cards, Func.IsLocation, CardLocation.MonsterZone)) + else if (hint == HintMsg.Release && func.CardsCheckAny(cards, func.IsLocation, CardLocation.MonsterZone)) { List tRelease = new List(); List nRelease = new List(); From f1837f3d3a27bfb944105fa36636ac7b9149011f Mon Sep 17 00:00:00 2001 From: Ha <479310608@qq.com> Date: Sun, 18 Jun 2023 21:19:05 +0800 Subject: [PATCH 14/18] Update dialog and bot Zefra --- BotWrapper/bot.conf | 5 + Dialogs/Zefra.zh-CN.json | 5 + Game/AI/Decks/ZefraExecutor.cs | 494 +++++++++++++++++++-------------- Game/AI/Dialogs.cs | 22 +- Game/AI/Executor.cs | 6 + Game/GameAI.cs | 10 +- 6 files changed, 333 insertions(+), 209 deletions(-) diff --git a/BotWrapper/bot.conf b/BotWrapper/bot.conf index 3e2d153f..8330018d 100644 --- a/BotWrapper/bot.conf +++ b/BotWrapper/bot.conf @@ -213,3 +213,8 @@ SUPPORT_MASTER_RULE_2020 Name=神数不神 Deck=Tearlaments Dialog=Zefra.zh-CN 旧式地天使珠泪哀歌族卡组。 AI_LV3 SUPPORT_MASTER_RULE_2020 + +!神数不神-神数 +Name=神数不神 Deck=Zefra Dialog=Zefra.zh-CN +神数卡组。 +AI_LV3 SUPPORT_MASTER_RULE_2020 diff --git a/Dialogs/Zefra.zh-CN.json b/Dialogs/Zefra.zh-CN.json index 346780ec..fbe3870f 100644 --- a/Dialogs/Zefra.zh-CN.json +++ b/Dialogs/Zefra.zh-CN.json @@ -50,5 +50,10 @@ "乎,我发动{0}!", "不好意思拉,我有{0}", "哈哈,发动{0}的效果!" + ], + "custom": [ + "呱!本体出征!", + "凸(艹皿艹 )卡手不玩拉!!!", + "嘿不慌,还有摆子场( ̄y▽ ̄)╭" ] } diff --git a/Game/AI/Decks/ZefraExecutor.cs b/Game/AI/Decks/ZefraExecutor.cs index 68451f19..e89ed7b7 100644 --- a/Game/AI/Decks/ZefraExecutor.cs +++ b/Game/AI/Decks/ZefraExecutor.cs @@ -106,6 +106,16 @@ public class CardId private bool HeavymetalfoesElectrumite_activate = false; private bool should_destory = false; private List Odd_EyesMeteorburstDragon_materials = new List(); + private bool duel_start = true; + private int activate_count = 0; + private int summon_count = 0; + private bool enemy_activate = false; + private enum CustomMessage + { + Happy, + Angry, + Surprise + } private static class Toos { public delegate bool Delegate(ClientCard card); @@ -441,7 +451,7 @@ public ZefraExecutor(GameAI ai, Duel duel) : base(ai, duel) AddExecutor(ExecutorType.Activate, CardId.NinePillarsofYangZing, NinePillarsofYangZingEffect); AddExecutor(ExecutorType.Activate, CardId.ZefraDivineStrike, ZefraDivineStrikeEffect); AddExecutor(ExecutorType.Activate, CardId.HeraldoftheArcLight, HeraldoftheArcLightEffect); - AddExecutor(ExecutorType.Activate, CardId.TruKingofAllCalamities,TruKingofAllCalamitiesEffect); + AddExecutor(ExecutorType.Activate, CardId.TruKingofAllCalamities, TruKingofAllCalamitiesEffect); AddExecutor(ExecutorType.Activate, CardId.PSY_FramegearGamma); AddExecutor(ExecutorType.Activate, CardId.MaxxC, DefaultMaxxC); AddExecutor(ExecutorType.Activate, CardId.SupremeKingDragonDarkwurm, SupremeKingDragonDarkwurmEffect); @@ -530,9 +540,15 @@ public ZefraExecutor(GameAI ai, Duel duel) : base(ai, duel) AddExecutor(ExecutorType.SpellSet, SpellSet_2); AddExecutor(ExecutorType.Repos, DefaultMonsterRepos); AddExecutor(ExecutorType.Activate, DefaultPActivate); + AddExecutor(ExecutorType.GoToEndPhase, GoToEndPhase); } public override void OnNewTurn() { + if (duel_start) + { + duel_start = false; + AI.OnCustom((int)CustomMessage.Happy); + } activate_SupremeKingDragonDarkwurm_1 = false; activate_SupremeKingDragonDarkwurm_2 = false; activate_JetSynchron = false; @@ -554,17 +570,20 @@ public override void OnNewTurn() HeavymetalfoesElectrumite_activate = false; spell_activate_count = 0; p_count = 0; + activate_count = 0; + summon_count = 0; + enemy_activate = false; } private bool ZefraProvidenceEffect() { if (Card.Location == CardLocation.Grave) { - return true; + return BeforeResult(ExecutorType.Activate); } else { activate_ZefraProvidence = true; - return true; + return BeforeResult(ExecutorType.Activate); } } @@ -589,7 +608,7 @@ private List CheckShouldSpsummonExtraMonster() List pSpsummonMonster = func.CardsCheckWhere(spSummonMonster, func.HasType, CardType.Pendulum); List monsterCards = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone), card => - { return card.IsFaceup() && card.HasType(CardType.Pendulum); }); + { return card.IsFaceup() && card.HasType(CardType.Pendulum); }); if (Func.MergeList(pSpsummonMonster, monsterCards).Count <= 0) extra_ids.Remove(CardId.HeavymetalfoesElectrumite); } else @@ -615,7 +634,7 @@ private bool DDLamiaSummon() Func.GetZoneCards(Bot, CardLocation.MonsterZone, true).Count > 0)) { summoned = true; - return true; + return BeforeResult(ExecutorType.Summon); } return false; } @@ -630,11 +649,11 @@ private bool Raidraptor_ForceStrixEffect() { AI.SelectCard(CardId.Raider_Wing); AI.SelectNextCard(CardId.Raidraptor_SingingLanius); - return true; + return BeforeResult(ExecutorType.Activate); } private bool Raidraptor_ForceStrixSummon() { - return xyz_mode; + return xyz_mode && BeforeResult(ExecutorType.Summon); } private bool Blackwing_ZephyrostheEliteEffect_2() @@ -642,22 +661,22 @@ private bool Blackwing_ZephyrostheEliteEffect_2() if (!xyz_mode && Bot.GetMonstersInMainZone().Count > 4) return false; List cards = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.Onfield, true), card => { return !IsNoLinkCards(card) && !card.IsExtraCard() && !(card.Location == CardLocation.SpellZone - && Func.IsCode(card,CardId.SaryujaSkullDread,CardId.MechaPhantomBeastAuroradon,CardId.HeavymetalfoesElectrumite,CardId.CrystronHalqifibrax,CardId.Raidraptor_WiseStrix, + && Func.IsCode(card, CardId.SaryujaSkullDread, CardId.MechaPhantomBeastAuroradon, CardId.HeavymetalfoesElectrumite, CardId.CrystronHalqifibrax, CardId.Raidraptor_WiseStrix, CardId.Linkuriboh)); }); if (cards.Count <= 0 || (cards.Count < 2 && func.CardsCheckCount(cards, func.HasLevel, 4) == cards.Count)) { Blackwing_ZephyrostheElite_activate = true; return false; - } + } cards.Sort((cardA, cardB) => { if (cardA.Location != CardLocation.MonsterZone && cardB.Location == CardLocation.MonsterZone) return -1; if (cardA.Location == CardLocation.MonsterZone && cardB.Location != CardLocation.MonsterZone) return 1; if (cardA.Location == CardLocation.SpellZone && cardB.Location == CardLocation.SpellZone) { - if(cardA.IsCode(CardId.OracleofZefra) && !cardB.IsCode(CardId.OracleofZefra)) return -1; - if(!cardA.IsCode(CardId.OracleofZefra) && cardB.IsCode(CardId.OracleofZefra))return 1; + if (cardA.IsCode(CardId.OracleofZefra) && !cardB.IsCode(CardId.OracleofZefra)) return -1; + if (!cardA.IsCode(CardId.OracleofZefra) && cardB.IsCode(CardId.OracleofZefra)) return 1; return 0; } if (xyz_mode) @@ -673,14 +692,45 @@ private bool Blackwing_ZephyrostheEliteEffect_2() }); Blackwing_ZephyrostheElite_activate = false; AI.SelectCard(cards); + return BeforeResult(ExecutorType.Activate); + } + public override void OnChaining(int player, ClientCard card) + { + if (card == null) return; + if (player == 1 && Func.IsCode(card, 14558127, 59438930, 94145021, 38814750, 73642296, 97268402)) + enemy_activate = true; + base.OnChaining(player, card); + } + private bool BeforeResult(ExecutorType type) + { + if (type == ExecutorType.Activate) + { + ++activate_count; + } + if (type == ExecutorType.Summon) + { + ++summon_count; + } return true; } + private bool GoToEndPhase() + { + if (Duel.Player == 0 && Duel.Turn == 1 && func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), IsNoLinkCards) <= 0 + && activate_count + summon_count < 5 && !enemy_activate) + { + + AI.OnCustom((int)CustomMessage.Angry); + return true; + } + return false; + + } private bool DefaultPActivate() { - if (PendulumActivate() && Func.IsCode(Card,CardId.Zefraxi_TreasureoftheYangZing, CardId.SecretoftheYangZing)) + if (PendulumActivate() && Func.IsCode(Card, CardId.Zefraxi_TreasureoftheYangZing, CardId.SecretoftheYangZing)) { return Bot.HasInHandOrInSpellZone(CardId.NinePillarsofYangZing) && func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.SpellZone, - true), card => { return Func.IsCode(Card, CardId.Zefraxi_TreasureoftheYangZing, CardId.SecretoftheYangZing); }) <= 0; + true), card => { return Func.IsCode(Card, CardId.Zefraxi_TreasureoftheYangZing, CardId.SecretoftheYangZing); }) <= 0 && BeforeResult(ExecutorType.Activate); } return false; } @@ -693,7 +743,7 @@ private bool Raidraptor_WiseStrixSummon() { if (!xyz_mode) return false; AI.SelectMaterials(CardId.Raidraptor_ArsenalFalcon, CardId.Blackwing_ZephyrostheElite); - return true; + return BeforeResult(ExecutorType.Summon); } private bool Raidraptor_WiseStrixEffect() { @@ -705,17 +755,17 @@ private bool Raidraptor_WiseStrixEffect() if (HasInDeck(CardId.Raider_Wing)) ++count; if (count <= 1) return false; AI.SelectCard(CardId.Raider_Wing); - return true; + return BeforeResult(ExecutorType.Activate); } - return true; + return BeforeResult(ExecutorType.Activate); } private bool Raidraptor_ArsenalFalconEffect() { if (Card.Location == CardLocation.MonsterZone) { AI.SelectCard(CardId.SupremeKingGateZero); - AI.SelectNextCard(new int[] {CardId.Blackwing_ZephyrostheElite,CardId.Raider_Wing,CardId.Raidraptor_SingingLanius}); - return true; + AI.SelectNextCard(new int[] { CardId.Blackwing_ZephyrostheElite, CardId.Raider_Wing, CardId.Raidraptor_SingingLanius }); + return BeforeResult(ExecutorType.Activate); } return false; } @@ -727,7 +777,7 @@ private bool Raidraptor_ArsenalFalconSummon() if (materials_lists.Count <= 0) return false; AI.SelectMaterials(materials_lists[0]); xyz_mode = true; - return true; + return BeforeResult(ExecutorType.Summon); } private bool Odd_EyesMeteorburstDragonCheck() { @@ -740,6 +790,14 @@ private bool Odd_EyesMeteorburstDragonCheck() var materials_sy_lists = Util.GetSynchroMaterials(pre_materials, 7, 1, 1, false, true, null, card => { return !card.IsCode(CardId.MythicalBeastJackalKing) && !card.IsCode(CardId.HeraldoftheArcLight); }); if (materials_sy_lists.Count <= 0) return false; Odd_EyesMeteorburstDragon_materials.Clear(); + foreach (var materials in materials_sy_lists) + { + if (func.CardsCheckCount(materials, func.IsCode, CardId.SupremeKingGateZero) > 0) + { + Odd_EyesMeteorburstDragon_materials.AddRange(materials); + return true; + } + } Odd_EyesMeteorburstDragon_materials.AddRange(materials_sy_lists[0]); return true; } @@ -747,38 +805,38 @@ private bool Odd_EyesMeteorburstDragonSummon() { if (!Odd_EyesMeteorburstDragonCheck()) return false; AI.SelectMaterials(Odd_EyesMeteorburstDragon_materials); - return true; + return BeforeResult(ExecutorType.Summon); } private bool Odd_EyesMeteorburstDragonEffect() { AI.SelectCard(CardId.SupremeKingGateZero); - return true; + return BeforeResult(ExecutorType.Activate); } private bool DDSavantKeplerSummon() { if (HasInDeck(CardId.DarkContractwiththGate)) { summoned = true; - return true; + return BeforeResult(ExecutorType.Summon); } return false; } -// private void DebugCards(string msg, IList cards) -// { -//#if DEBUG -// Logger.DebugWriteLine(cards.Count + msg); -// foreach (var card in cards) -// { -// if (card == null) continue; -// NamedCard namedCard = NamedCard.Get(card.Id); -// if (namedCard == null) continue; -// Logger.DebugWriteLine(msg + namedCard.Name); -// } -//#endif -// } + // private void DebugCards(string msg, IList cards) + // { + //#if DEBUG + // Logger.DebugWriteLine(cards.Count + msg); + // foreach (var card in cards) + // { + // if (card == null) continue; + // NamedCard namedCard = NamedCard.Get(card.Id); + // if (namedCard == null) continue; + // Logger.DebugWriteLine(msg + namedCard.Name); + // } + //#endif + // } private bool ServantofEndymionEffect_2() { - if (Card.Location == CardLocation.SpellZone) return true; + if (Card.Location == CardLocation.SpellZone) return BeforeResult(ExecutorType.Activate); return false; } private bool IsSpsummonPMonster(ClientCard card) @@ -808,7 +866,7 @@ private int GetSpellActivateCount() if (!activate_OracleofZefra && func.CardsCheckAny(Bot.Hand, func.IsCode, CardId.OracleofZefra)) ++count; if (func.CardsCheckAny(Bot.Hand, func.IsCode, CardId.Terraforming) && HasInDeck(CardId.OracleofZefra)) ++count; if (func.CardsCheckAny(Bot.Hand, func.IsCode, CardId.FoolishBurial)) ++count; - if (func.CardsCheckCount(Bot.Hand, func.HasType, CardType.Pendulum) > 1 && Bot.SpellZone[0] == null && + if (func.CardsCheckCount(Bot.Hand, func.HasType, CardType.Pendulum) > 1 && Bot.SpellZone[0] == null && Bot.SpellZone[4] == null) ++count; if (!summoned && Bot.HasInHand(CardId.DDSavantKepler) && HasInDeck(CardId.DarkContractwiththGate)) ++count; return count; @@ -817,7 +875,7 @@ private bool ServantofEndymionEffect_3() { if (PendulumActivate()) { - return PendulumDefaultActivate(); + return PendulumDefaultActivate() && BeforeResult(ExecutorType.Activate); } return false; } @@ -826,15 +884,16 @@ private bool ZefraDivineStrikeEffect() if (Duel.LastChainPlayer == 0) return false; AI.SelectCard(CardId.RitualBeastTamerZeframpilica, CardId.SatellarknightZefrathuban, CardId.StellarknightZefraxciton, CardId.FlameBeastoftheNekroz, CardId.ShaddollZefracore, CardId.SecretoftheYangZing, CardId.Zefraxi_TreasureoftheYangZing); - return true; + return BeforeResult(ExecutorType.Activate); } private bool NinePillarsofYangZingEffect() { if (Duel.LastChainPlayer == 0) return false; - List cards = func.CardsIdToClientCards(new List { CardId.SecretoftheYangZing },Bot.MonsterZone); - cards.AddRange(func.CardsIdToClientCards(new List { CardId.SecretoftheYangZing,CardId.Zefraxi_TreasureoftheYangZing }, Bot.SpellZone)); + List cards = func.CardsIdToClientCards(new List { CardId.SecretoftheYangZing }, Bot.MonsterZone); + cards.AddRange(func.CardsIdToClientCards(new List { CardId.SecretoftheYangZing, CardId.Zefraxi_TreasureoftheYangZing }, Bot.SpellZone)); AI.SelectCard(cards); - return true; + should_destory = true; + return BeforeResult(ExecutorType.Activate); } private bool IsActivateBlackwing_ZephyrostheElite() { @@ -848,19 +907,19 @@ private bool ServantofEndymionEffect() { if (PendulumActivate()) { - if (IsActivateBlackwing_ZephyrostheElite()) return true; + if (IsActivateBlackwing_ZephyrostheElite()) return BeforeResult(ExecutorType.Activate); if ((!HasInDeck(CardId.TheMightyMasterofMagic) && !HasInDeck(CardId.MythicalBeastJackalKing) || GetSpellActivateCount() < 2)) return false; - return true; + return BeforeResult(ExecutorType.Activate); } else if (Card.Location == CardLocation.SpellZone) { if (func.HasInZone(Bot, CardLocation.Hand | CardLocation.PendulumZone, CardId.Zefraath, true)) { - return func.CardsCheckAny(Bot.Hand, IsSpsummonPMonster); + return func.CardsCheckAny(Bot.Hand, IsSpsummonPMonster) && BeforeResult(ExecutorType.Activate); } - return true; + return BeforeResult(ExecutorType.Activate); } - else if (Card.Location == CardLocation.MonsterZone) return true; + else if (Card.Location == CardLocation.MonsterZone) return BeforeResult(ExecutorType.Activate); else return false; } private bool IsZefraScaleAbove(ClientCard card) @@ -873,16 +932,16 @@ private bool IsZefraScaleBelow(ClientCard card) } private bool TerraformingEffect() { - return Bot.HasInHand(CardId.OracleofZefra); + return Bot.HasInHand(CardId.OracleofZefra) && BeforeResult(ExecutorType.Activate); } private bool DDSavantKeplerEffect() { if (PendulumActivate()) return false; - return true; + return BeforeResult(ExecutorType.Activate); } private bool FoolishBurialEffect() { - return true; + return BeforeResult(ExecutorType.Activate); } private List GetSynchroMaterials() { @@ -892,28 +951,31 @@ private List GetSynchroMaterials() } private bool DestrudotheLostDragon_FrissonEffect() { - if (Bot.HasInExtra(CardId.CrystronHalqifibrax)) return true; + if (Bot.HasInExtra(CardId.CrystronHalqifibrax)) return BeforeResult(ExecutorType.Activate); if (!Bot.HasInExtra(CardId.F_A_DawnDragster) && !Bot.HasInExtra(CardId.Odd_EyesMeteorburstDragon)) return false; - List pre_materials = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true),card => { return SecretoftheYangZingCheck(card) && !IsNoLinkCards(card) && !card.HasType(CardType.Tuner) && card.Level > 0;}); + List pre_materials = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), card => { return SecretoftheYangZingCheck(card) && !IsNoLinkCards(card) && !card.HasType(CardType.Tuner) && card.Level > 0; }); if (pre_materials.Count <= 0) return false; - List cards = func.CardsCheckWhere(Func.GetZoneCards(Bot,CardLocation.MonsterZone,true),card=> + List cards = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), card => { return !IsNoLinkCards(card) && card.Level > 0 && !card.HasType(CardType.Tuner); }); if (cards.Count <= 0) return false; AI.SelectCard(cards); - return true; + return BeforeResult(ExecutorType.Activate); } - private bool IsCanSynchroSummon(int level) + private bool IsCanSynchroSummon(int level) { - return func.CardsCheckAny(GetSynchroMaterials(), card => { return (card.Level + level == 8 - && func.CardsCheckAny(Bot.ExtraDeck, synchro_card => { return Func.IsCode(synchro_card, CardId.BorreloadSavageDragon, CardId.PSY_FramelordOmega); })) - || (card.Level + level == 7 && SecretoftheYangZingCheck(card) && func.CardsCheckAny(Bot.ExtraDeck, synchro_card => { return Func.IsCode(synchro_card, CardId.Odd_EyesMeteorburstDragon, CardId.F_A_DawnDragster); })) - || (card.Level + level == 5 && Bot.HasInExtra(CardId.Denglong_FirstoftheYangZing)) - || (card.Level + level == 4 && Bot.HasInExtra(CardId.HeraldoftheArcLight)); }); + return func.CardsCheckAny(GetSynchroMaterials(), card => { + return (card.Level + level == 8 + && func.CardsCheckAny(Bot.ExtraDeck, synchro_card => { return Func.IsCode(synchro_card, CardId.BorreloadSavageDragon, CardId.PSY_FramelordOmega); })) + || (card.Level + level == 7 && SecretoftheYangZingCheck(card) && func.CardsCheckAny(Bot.ExtraDeck, synchro_card => { return Func.IsCode(synchro_card, CardId.Odd_EyesMeteorburstDragon, CardId.F_A_DawnDragster); })) + || (card.Level + level == 5 && Bot.HasInExtra(CardId.Denglong_FirstoftheYangZing)) + || (card.Level + level == 4 && Bot.HasInExtra(CardId.HeraldoftheArcLight)); + }); } private bool DDLamiaEffect() { + if (Bot.HasInExtra(CardId.MechaPhantomBeastAuroradon) && Bot.GetMonstersInMainZone().Count >= 3) return false; if (!Bot.HasInExtra(CardId.CrystronHalqifibrax) && !IsCanSynchroSummon(Card.Level)) return false; AI.SelectCard(CardId.DarkContractwiththGate, CardId.DDSavantKepler); activate_DDLamia = true; @@ -921,15 +983,15 @@ private bool DDLamiaEffect() } private bool DragonShrineEffect() { - return true; + return BeforeResult(ExecutorType.Activate); } private bool ZefraathEffect() { - if (PendulumActivate()) return !activate_p_Zefraath || IsActivateBlackwing_ZephyrostheElite(); - if (Card.Location == CardLocation.SpellZone) + if (PendulumActivate()) return !activate_p_Zefraath || IsActivateBlackwing_ZephyrostheElite(); + if (Card.Location == CardLocation.SpellZone) { activate_p_Zefraath = true; - return true; + return BeforeResult(ExecutorType.Activate); } return false; } @@ -937,9 +999,9 @@ private bool RitualBeastTamerZeframpilicaEffect() { if (PendulumActivate()) { - return PendulumDefaultActivate(); + return PendulumDefaultActivate() && BeforeResult(ExecutorType.Activate); } - return true; + return BeforeResult(ExecutorType.Activate); } private bool BorreloadSavageDragonSummon_2() { @@ -948,19 +1010,19 @@ private bool BorreloadSavageDragonSummon_2() } private bool BorreloadSavageDragonSummon() { - var materials_lists = Util.GetSynchroMaterials(Bot.MonsterZone,Card.Level,1,1,false,true,null, - card=> { return !card.IsCode(CardId.F_A_DawnDragster) && !card.IsCode(CardId.TheMightyMasterofMagic) && !card.IsCode(CardId.HeraldoftheArcLight); }); + var materials_lists = Util.GetSynchroMaterials(Bot.MonsterZone, Card.Level, 1, 1, false, true, null, + card => { return !card.IsCode(CardId.F_A_DawnDragster) && !card.IsCode(CardId.TheMightyMasterofMagic) && !card.IsCode(CardId.HeraldoftheArcLight); }); if (materials_lists.Count <= 0) return false; foreach (var materials in materials_lists) { if (func.CardsCheckAny(materials, func.IsCode, CardId.MechaPhantomBeastToken)) { AI.SelectMaterials(materials); - return true; + return BeforeResult(ExecutorType.Summon); } } AI.SelectMaterials(materials_lists[0]); - return true; + return BeforeResult(ExecutorType.Summon); } private bool BorreloadSavageDragonEffect() { @@ -976,23 +1038,23 @@ private bool BorreloadSavageDragonEffect() CardId.CrystronHalqifibrax, CardId.Raidraptor_WiseStrix }); - return true; + return BeforeResult(ExecutorType.Activate); } private bool TheMightyMasterofMagicEffect() { if (PendulumActivate()) { - return PendulumDefaultActivate(); + return PendulumDefaultActivate() && BeforeResult(ExecutorType.Activate); } else if (Card.Location == CardLocation.MonsterZone) { if (Duel.LastChainPlayer == 0) return false; AI.SelectCard(CardId.ServantofEndymion, CardId.TheMightyMasterofMagic); - return true; + return BeforeResult(ExecutorType.Activate); } else { - return true; + return BeforeResult(ExecutorType.Activate); } } private bool checkPActivate() @@ -1002,31 +1064,33 @@ private bool checkPActivate() if (Bot.HasInHand(CardId.Zefraath) && (Bot.SpellZone[0] != null || Bot.SpellZone[4] != null)) return false; if (Bot.SpellZone[0] == null && Bot.SpellZone[4] == null) { - if (!Bot.HasInHand(CardId.Zefraath) && !func.CardsCheckAny(Bot.Hand, card => { return IsSpsummonPMonster(card) && - (Card.LScale >= 5 ? card.LScale < 5 : card.LScale > 5) && func.GetPSpSummonMonster(Bot,card,Card)?.Count > 0; })) return false; + if (!Bot.HasInHand(CardId.Zefraath) && !func.CardsCheckAny(Bot.Hand, card => { + return IsSpsummonPMonster(card) && +(Card.LScale >= 5 ? card.LScale < 5 : card.LScale > 5) && func.GetPSpSummonMonster(Bot, card, Card)?.Count > 0; + })) return false; } else { if (func.GetPSpSummonMonster(Bot, Bot.SpellZone[0], Card)?.Count <= 0 && func.GetPSpSummonMonster(Bot, Bot.SpellZone[4], Card)?.Count <= 0) return false; } - + return true; } private bool SecretoftheYangZingEffect() { if (PendulumActivate()) { - return PendulumDefaultActivate(); + return PendulumDefaultActivate() && BeforeResult(ExecutorType.Activate); } activate_SecretoftheYangZing = true; - return true; + return BeforeResult(ExecutorType.Activate); } private bool SatellarknightZefrathubanEffect() { if (PendulumActivate()) { - return PendulumDefaultActivate(); + return PendulumDefaultActivate() && BeforeResult(ExecutorType.Activate); } return false; } @@ -1035,7 +1099,7 @@ private bool BorreloadSavageDragonEffect_2() if (Duel.LastChainPlayer == 1) { ClientCard card = Util.GetLastChainCard(); - return card != null && !card.HasType(CardType.Continuous | CardType.Field) && card.HasType(CardType.Spell | CardType.Trap); + return card != null && !card.HasType(CardType.Continuous | CardType.Field) && card.HasType(CardType.Spell | CardType.Trap) && BeforeResult(ExecutorType.Activate); } return false; } @@ -1043,42 +1107,42 @@ private bool Zefraxi_TreasureoftheYangZingEffect() { if (PendulumActivate()) { - return PendulumDefaultActivate(); + return PendulumDefaultActivate() && BeforeResult(ExecutorType.Activate); } - return true; + return BeforeResult(ExecutorType.Activate); } private bool OracleofZefraEffect() { activate_OracleofZefra = true; - return true; - + return BeforeResult(ExecutorType.Activate); + } private bool FlameBeastoftheNekrozEffect() { if (PendulumActivate()) { - return PendulumDefaultActivate(); + return PendulumDefaultActivate() && BeforeResult(ExecutorType.Activate); } else { - return true; + return BeforeResult(ExecutorType.Activate); } } private bool AstrographSorcererEffect() { if (PendulumActivate()) return false; - return true; + return BeforeResult(ExecutorType.Activate); } private bool StellarknightZefraxcitonEffect() { if (PendulumActivate()) { - return PendulumDefaultActivate(); + return PendulumDefaultActivate() && BeforeResult(ExecutorType.Activate); } else { - return true; + return BeforeResult(ExecutorType.Activate); } } private bool IsNoLinkCards(ClientCard card) @@ -1090,7 +1154,7 @@ private bool IsNoLinkCards(ClientCard card) } private bool LinkuribohSummon() { - List materials = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true),func.HasLevel,1); + List materials = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), func.HasLevel, 1); if (func.CardsCheckCount(materials, Func.NegateFunc(func.HasType), CardType.Tuner) <= 0 && func.CardsCheckCount(materials, func.HasType, CardType.Tuner) <= 1) return false; materials.Sort((cardA, cardB) => @@ -1106,7 +1170,7 @@ private bool SpellSet() { if (Card.HasType(CardType.Trap)) { - AI.SelectPlace(Zones.z1|Zones.z2|Zones.z3|Zones.z4|Zones.z0); + AI.SelectPlace(Zones.z1 | Zones.z2 | Zones.z3 | Zones.z4 | Zones.z0); return true; } return false; @@ -1124,30 +1188,30 @@ private bool ShaddollZefracoreEffect() { if (PendulumActivate()) { - return PendulumDefaultActivate(); + return PendulumDefaultActivate() && BeforeResult(ExecutorType.Activate); } else { - return true; + return BeforeResult(ExecutorType.Activate); } } private bool PSY_FramelordOmegaEffect() { if (Card.Location == CardLocation.MonsterZone) { - if (Duel.Player == 0) return true; + if (Duel.Player == 0) return BeforeResult(ExecutorType.Activate); else { if (Bot.Banished.Count <= 0) return false; AI.SelectCard(func.CardsIdToClientCards(new List { CardId.JetSynchron, CardId.DDLamia }, Bot.Banished)); - return true; + return BeforeResult(ExecutorType.Activate); } } else { if (Bot.Graveyard.Count <= 0) return false; - AI.SelectCard(func.CardsIdToClientCards(new List { CardId.Zefraath, CardId.CrystronHalqifibrax, CardId.Denglong_FirstoftheYangZing,CardId.BorreloadSavageDragon, CardId.DDLamia }, Bot.Graveyard)); - return true; + AI.SelectCard(func.CardsIdToClientCards(new List { CardId.Zefraath, CardId.CrystronHalqifibrax, CardId.Denglong_FirstoftheYangZing, CardId.BorreloadSavageDragon, CardId.DDLamia }, Bot.Graveyard)); + return BeforeResult(ExecutorType.Activate); } } private bool Psummon() @@ -1176,7 +1240,7 @@ private bool HeavymetalfoesElectrumiteSummon() List materials = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), func.HasType, CardType.Pendulum); if (materials.Count > 0) { - materials.Sort((cardA,cardB) => + materials.Sort((cardA, cardB) => { if ((cardA.Level == 3 || cardA.HasType(CardType.Tuner)) && cardB.Level != 3 && !cardB.HasType(CardType.Tuner)) return -1; if (cardA.Level != 3 && !cardA.HasType(CardType.Tuner) && (cardB.Level == 3 || cardB.HasType(CardType.Tuner))) return 1; @@ -1188,12 +1252,12 @@ private bool HeavymetalfoesElectrumiteSummon() { if (IsExtraZoneCard(material)) result.Insert(0, material); else if (IsNoLinkCards(material) || (material.HasType(CardType.Tuner) && Bot.HasInExtra(CardId.CrystronHalqifibrax) - && func.CardsCheckCount(Func.GetZoneCards(Bot,CardLocation.MonsterZone,true),func.HasType,CardType.Tuner) <= 0)) continue; + && func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), func.HasType, CardType.Tuner) <= 0)) continue; else result.Add(material); } if (result.Count < 2) return false; AI.SelectMaterials(result); - return true; + return BeforeResult(ExecutorType.Summon); } return false; } @@ -1202,37 +1266,38 @@ private bool SecretoftheYangZingCheck(ClientCard card) if (card.IsCode(CardId.SecretoftheYangZing) && Bot.HasInHandOrInSpellZone(CardId.NinePillarsofYangZing)) { return func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.Hand | CardLocation.PendulumZone | CardLocation.MonsterZone, true), p_card => { - return p_card.HasSetcode(0xc4) && p_card.HasType(CardType.Pendulum);}) <= 0; + return p_card.HasSetcode(0xc4) && p_card.HasType(CardType.Pendulum); + }) <= 0; } return true; } private bool F_A_DawnDragsterSummon() { - List pre_materials = func.CardsCheckWhere(Func.GetZoneCards(Bot,CardLocation.MonsterZone,true),SecretoftheYangZingCheck); - var materials_lists = Util.GetSynchroMaterials(pre_materials, 7,1,1,false,true,null,card => { return !card.IsCode(CardId.MythicalBeastJackalKing) && !card.IsCode(CardId.HeraldoftheArcLight); }); - if (materials_lists.Count <= 0) return false ; + List pre_materials = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), SecretoftheYangZingCheck); + var materials_lists = Util.GetSynchroMaterials(pre_materials, 7, 1, 1, false, true, null, card => { return !card.IsCode(CardId.MythicalBeastJackalKing) && !card.IsCode(CardId.HeraldoftheArcLight); }); + if (materials_lists.Count <= 0) return false; foreach (var materials in materials_lists) { - if (func.CardsCheckCount(materials, card=> + if (func.CardsCheckCount(materials, card => { return card.HasType(CardType.Tuner) && card.HasRace(CardRace.Machine); - })<=0) + }) <= 0) { AI.SelectMaterials(materials); - return true; + return BeforeResult(ExecutorType.Summon); } } AI.SelectMaterials(materials_lists[0]); - return true; + return BeforeResult(ExecutorType.Summon); } private bool CrystronHalqifibraxEffect() { - return true; + return BeforeResult(ExecutorType.Activate); } - private bool MechaPhantomBeastAuroradonSummon() + private bool MechaPhantomBeastAuroradonSummon() { if (Bot.GetMonstersInMainZone().Count >= 4 || (!HasInDeck(CardId.MechaPhantomBeastO_Lion) && !IsCanSPSummonTunerLevel1() - && !func.CardsCheckAny(Func.GetZoneCards(Bot,CardLocation.MonsterZone|CardLocation.Grave,true),func.IsCode,CardId.Deskbot001))) return false; + && !func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.MonsterZone | CardLocation.Grave, true), func.IsCode, CardId.Deskbot001))) return false; if (XyzModeCheck()) { List pre_materials = new List(); @@ -1243,10 +1308,14 @@ private bool MechaPhantomBeastAuroradonSummon() List key_materials_2 = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.Grave), card => { return card.IsCode(CardId.JetSynchron) && !activate_JetSynchron; }); pre_materials.AddRange(key_materials); pre_materials.AddRange(key_materials_2); - if (!summoned) pre_materials.AddRange(func.CardsCheckWhere(Bot.Hand,Func.NegateFunc(func.IsCode),CardId.DestrudotheLostDragon_Frisson)); + if (!summoned) pre_materials.AddRange(func.CardsCheckWhere(Bot.Hand, card => { return !card.IsCode(CardId.DestrudotheLostDragon_Frisson) && card.Level < 5; })); pre_materials.AddRange(Bot.MonsterZone); - var materials_lists = Util.GetSynchroMaterials(pre_materials, 7, 1, 1,false,true,null,card=> { return !card.IsCode(CardId.MythicalBeastJackalKing);}); - if (materials_lists.Count > 0) return false; + var synchro_materials_lists = Util.GetSynchroMaterials(pre_materials, 7, 1, 1, false, true, null, card => { return !card.IsCode(CardId.MythicalBeastJackalKing); }); + var xyz_materials_lists = Util.GetXyzMaterials(Func.GetZoneCards(Bot, CardLocation.MonsterZone | CardLocation.PendulumZone), 7, 1, false, + card => { return !card.IsCode(CardId.F_A_DawnDragster) && !card.IsCode(CardId.TheMightyMasterofMagic); }); + var xyz_materials_lists_2 = Util.GetXyzMaterials(Func.GetZoneCards(Bot, CardLocation.MonsterZone), 7, 2, false, + card => { return !card.IsCode(CardId.F_A_DawnDragster) && !card.IsCode(CardId.TheMightyMasterofMagic); }); + if ((synchro_materials_lists.Count > 0 && xyz_materials_lists.Count > 0) || xyz_materials_lists_2.Count > 0) return false; } List m = new List(); int link_count = 0; @@ -1267,12 +1336,12 @@ private bool MechaPhantomBeastAuroradonSummon() } private bool SaryujaSkullDreadEffect() { - if (ActivateDescription == Util.GetStringId(CardId.SaryujaSkullDread, 2)) + if (ActivateDescription == Util.GetStringId(CardId.SaryujaSkullDread, 2)) { AI.SelectCard(GetSendToDeckIds()); - return true; + return BeforeResult(ExecutorType.Activate); } - return true; + return BeforeResult(ExecutorType.Activate); } private bool SaryujaSkullDreadSummon() { @@ -1285,7 +1354,8 @@ private bool SaryujaSkullDreadSummon() temp_materials.Sort((cardA, cardB) => { if ((cardA.HasType(CardType.Tuner) && cardB.HasType(CardType.Tuner)) - || (!cardA.HasType(CardType.Tuner) && !cardB.HasType(CardType.Tuner))) { + || (!cardA.HasType(CardType.Tuner) && !cardB.HasType(CardType.Tuner))) + { return CardContainer.CompareCardLevel(cardA, cardB); } else if (cardA.HasType(CardType.Tuner) && !cardB.HasType(CardType.Tuner)) return 1; @@ -1294,15 +1364,15 @@ private bool SaryujaSkullDreadSummon() foreach (var material in temp_materials) { ++materials_count; - if (IsExtraZoneCard(material)) materials.Insert(0, material); + if (IsExtraZoneCard(material)) materials.Insert(0, material); else if (IsNoLinkCards(material)) { --materials_count; continue; } else materials.Add(material); link_count += material.HasType(CardType.Link) ? material.LinkCount : 1; if (link_count >= 4) { if (materials_count == 3 && Bot.Deck.Count > 4 && ((func.CardsCheckCount(Bot.Hand, func.HasType, CardType.Tuner) > 0 - || (Bot.HasInMonstersZone(CardId.DDLamia,false,false,true) && !activate_DDLamia && func.CardsCheckCount(Func.GetZoneCards - (Bot,CardLocation.Onfield|CardLocation.Hand,true),card=> { return Func.HasSetCode(card, 0xaf, 0xae) && card.Id != CardId.DDLamia; }) + || (Bot.HasInMonstersZone(CardId.DDLamia, false, false, true) && !activate_DDLamia && func.CardsCheckCount(Func.GetZoneCards + (Bot, CardLocation.Onfield | CardLocation.Hand, true), card => { return Func.HasSetCode(card, 0xaf, 0xae) && card.Id != CardId.DDLamia; }) > 0) || (Bot.HasInMonstersZone(CardId.JetSynchron, false, false, true) && !activate_JetSynchron)) || xyz_mode)) { --link_count; @@ -1313,7 +1383,7 @@ private bool SaryujaSkullDreadSummon() } if (materials.Count < 3) return false; AI.SelectMaterials(materials); - return true; + return BeforeResult(ExecutorType.Summon); } private bool CrystronHalqifibraxSummon() { @@ -1327,6 +1397,10 @@ private bool CrystronHalqifibraxSummon() mainMonsters.Sort(CardContainer.CompareCardAttack); materials.AddRange(mainMonsters); AI.SelectMaterials(materials); + if (materials.Distinct().Count() <= 3) + { + AI.OnCustom((int)CustomMessage.Surprise); + } return true; } private bool PendulumActivate() @@ -1343,13 +1417,13 @@ private bool SpellActivate() } private bool SupremeKingGateZeroEffect() { - if (PendulumActivate()) return PendulumDefaultActivate(); + if (PendulumActivate()) return PendulumDefaultActivate() && BeforeResult(ExecutorType.Activate); return false; } private bool MythicalBeastJackalKingEffect() { - if (PendulumActivate()) return PendulumDefaultActivate(); - return true; + if (PendulumActivate()) return PendulumDefaultActivate() && BeforeResult(ExecutorType.Activate); + return BeforeResult(ExecutorType.Activate); } private bool Denglong_FirstoftheYangZingSummon_2() { @@ -1362,7 +1436,7 @@ private bool Denglong_FirstoftheYangZingSummon() card => { return !card.IsCode(CardId.HeraldoftheArcLight); }); if (materials_lists.Count <= 0) return false; AI.SelectMaterials(materials_lists[0]); - return true; + return BeforeResult(ExecutorType.Summon); } private bool Denglong_FirstoftheYangZingEffect() { @@ -1373,7 +1447,7 @@ private bool Denglong_FirstoftheYangZingEffect() } else { - AI.SelectCard(CardId.SecretoftheYangZing, CardId.Zefraxi_TreasureoftheYangZing,CardId.LightoftheYangZing); + AI.SelectCard(CardId.SecretoftheYangZing, CardId.Zefraxi_TreasureoftheYangZing, CardId.LightoftheYangZing); } return true; } @@ -1381,17 +1455,17 @@ private bool DarkContractwiththGateEffect() { if (SpellActivate()) { - return HasInDeck(CardId.DDLamia) || func.HasInZone(Bot, CardLocation.PendulumZone, CardId.ServantofEndymion, true, true); + return (HasInDeck(CardId.DDLamia) || func.HasInZone(Bot, CardLocation.PendulumZone, CardId.ServantofEndymion, true, true)) && BeforeResult(ExecutorType.Activate); } - return true; + return BeforeResult(ExecutorType.Activate); } - private int DisabledSort(ClientCard cardA,ClientCard cardB) + private int DisabledSort(ClientCard cardA, ClientCard cardB) { bool RitualBeastTamerZeframpilica_flag = !summoned && Bot.HasInExtra(CardId.HeraldoftheArcLight) && IsCanSPSummonTunerLevel1(); - if (((cardA.IsCode(CardId.RitualBeastTamerZeframpilica) && RitualBeastTamerZeframpilica_flag) || Func.IsCode(cardA, CardId.MaxxC,CardId.Zefraath,CardId.MythicalBeastJackalKing,CardId.TheMightyMasterofMagic) || cardA.HasType(CardType.Trap) || cardA.HasType(CardType.Tuner)) + if (((cardA.IsCode(CardId.RitualBeastTamerZeframpilica) && RitualBeastTamerZeframpilica_flag) || Func.IsCode(cardA, CardId.MaxxC, CardId.Zefraath, CardId.MythicalBeastJackalKing, CardId.TheMightyMasterofMagic) || cardA.HasType(CardType.Trap) || cardA.HasType(CardType.Tuner)) && !cardB.IsCode(CardId.RitualBeastTamerZeframpilica) && !cardB.HasType(CardType.Trap) && !Func.IsCode(cardB, CardId.MaxxC, CardId.Zefraath, CardId.MythicalBeastJackalKing, CardId.TheMightyMasterofMagic) && !cardB.HasType(CardType.Tuner)) return 1; - else if (!cardA.IsCode(CardId.RitualBeastTamerZeframpilica) && !cardA.HasType(CardType.Trap) && !Func.IsCode(cardA, CardId.MaxxC, CardId.Zefraath, CardId.MythicalBeastJackalKing, CardId.TheMightyMasterofMagic) && !cardA.HasType(CardType.Tuner) - && ((cardB.IsCode(CardId.RitualBeastTamerZeframpilica) && RitualBeastTamerZeframpilica_flag) || Func.IsCode(cardB, CardId.MaxxC, CardId.Zefraath, CardId.MythicalBeastJackalKing, CardId.TheMightyMasterofMagic) || cardB.HasType(CardType.Trap) || cardB.HasType(CardType.Tuner))) return -1; + else if (!cardA.IsCode(CardId.RitualBeastTamerZeframpilica) && !cardA.HasType(CardType.Trap) && !Func.IsCode(cardA, CardId.MaxxC, CardId.Zefraath, CardId.MythicalBeastJackalKing, CardId.TheMightyMasterofMagic) && !cardA.HasType(CardType.Tuner) + && ((cardB.IsCode(CardId.RitualBeastTamerZeframpilica) && RitualBeastTamerZeframpilica_flag) || Func.IsCode(cardB, CardId.MaxxC, CardId.Zefraath, CardId.MythicalBeastJackalKing, CardId.TheMightyMasterofMagic) || cardB.HasType(CardType.Trap) || cardB.HasType(CardType.Tuner))) return -1; return 0; } private List GetDisabledIds() @@ -1426,21 +1500,21 @@ private List GetSendToDeckIds() ids.Add(CardId.LightoftheYangZing); ids.Add(CardId.Rank_Up_MagicSoulShaveForce); if (activate_ZefraProvidence) ids.Add(CardId.ZefraProvidence); - if(activate_OracleofZefra) ids.Add(CardId.OracleofZefra); - if(activate_DragonShrine) ids.Add(CardId.DragonShrine); - if(activate_SpellPowerMastery) ids.Add(CardId.SpellPowerMastery); + if (activate_OracleofZefra) ids.Add(CardId.OracleofZefra); + if (activate_DragonShrine) ids.Add(CardId.DragonShrine); + if (activate_SpellPowerMastery) ids.Add(CardId.SpellPowerMastery); List hands = Func.GetZoneCards(Bot, CardLocation.Hand); hands.Sort(DisabledSort); List hand_ids = Func.ClientCardsToCardsId(hands, true); ids.AddRange(hand_ids); return ids; } - private bool TruKingofAllCalamitiesEffect() + private bool TruKingofAllCalamitiesEffect() { if (Duel.Player == 1) { AI.SelectAttributes(new CardAttribute[] { CardAttribute.Divine }); - return true; + return BeforeResult(ExecutorType.Activate); } return false; } @@ -1456,18 +1530,18 @@ private bool JetSynchronEffect() List dcards = func.CardsIdToClientCards(GetDisabledIds(), Bot.Hand); if (!Bot.HasInExtra(CardId.CrystronHalqifibrax) && dcards.Count <= 0) return false; AI.SelectCard(dcards); - return true; + return BeforeResult(ExecutorType.Activate); } } return false; } private bool MechaPhantomBeastAuroradonEffect() { - if (ActivateDescription == -1) { link_summoned = true; return true; } + if (ActivateDescription == -1) { link_summoned = true; return true; } else { if (!HasInDeck(CardId.MechaPhantomBeastO_Lion) - && Func.GetZoneCards(Enemy,CardLocation.Onfield).Count <= 0 && func.CardsCheckCount(Bot.Graveyard,func.HasType,CardType.Trap) <= 0) return false; + && Func.GetZoneCards(Enemy, CardLocation.Onfield).Count <= 0) return false; List tRelease = new List(); List nRelease = new List(); foreach (var card in Bot.GetMonsters()) @@ -1491,39 +1565,41 @@ private bool SupremeKingDragonDarkwurmEffect() if (Card.Location == CardLocation.Grave) { activate_SupremeKingDragonDarkwurm_1 = true; - return true; + return BeforeResult(ExecutorType.Activate); } if (Card.Location == CardLocation.MonsterZone) { activate_SupremeKingDragonDarkwurm_2 = true; - return true; + return BeforeResult(ExecutorType.Activate); } return false; } private bool SupremeKingDragonDarkwurmSummon() { if ((!activate_p_Zefraath && Bot.HasInHand(CardId.Zefraath) && !activate_SupremeKingDragonDarkwurm_1 && HasInDeck(CardId.SupremeKingGateZero) && func.CardsCheckAny(Bot.Hand, func.HasType, CardType.Tuner)) - ||(func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.Hand), card => { return card.LinkCount > 5; }) && + || (func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.Hand), card => { return card.LinkCount > 5; }) && !Bot.HasInHand(CardId.SupremeKingGateZero) && !activate_SupremeKingDragonDarkwurm_2)) { summoned = true; - return true; + return BeforeResult(ExecutorType.Summon); } return false; } private bool DefaultSummon_2() { if (Card.Location == CardLocation.Hand && Card.Level <= 4 - && Bot.HasInExtra(CardId.CrystronHalqifibrax) && (func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), card => { return Card.HasType(CardType.Tuner) ? true : card.HasType(CardType.Tuner); }))) { + && Bot.HasInExtra(CardId.CrystronHalqifibrax) && (func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.MonsterZone, true), card => { return Card.HasType(CardType.Tuner) ? true : card.HasType(CardType.Tuner); }))) + { summoned = true; - return true; + return BeforeResult(ExecutorType.Summon); } return false; } - private bool IsCanSPSummonTunerLevel1() { + private bool IsCanSPSummonTunerLevel1() + { return func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.MonsterZone | CardLocation.Grave, true), card => { return (card.IsCode(CardId.DDLamia) && !activate_DDLamia && func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.Onfield | CardLocation.Hand, true), scard => { return Func.HasSetCode(scard, 0xaf, 0xae) && scard.Id != CardId.DDLamia; }) - > 0) || (card.IsCode(CardId.JetSynchron) && !activate_JetSynchron) && Bot.GetMonstersInMainZone().Count <= 3; + > 0) || (card.IsCode(CardId.JetSynchron) && !activate_JetSynchron) && Bot.GetMonstersInMainZone().Count <= 3; }); } private bool DefaultSummon() @@ -1534,20 +1610,20 @@ private bool DefaultSummon() || (IsCanSPSummonTunerLevel1() && ((Card.Level == 3 && Bot.HasInExtra(CardId.HeraldoftheArcLight)) || ( Card.Level == 4 && Bot.HasInExtra(CardId.Denglong_FirstoftheYangZing)))) || (Card.Id == CardId.SupremeKingDragonDarkwurm && !activate_SupremeKingDragonDarkwurm_2) - ||(Bot.HasInExtra(CardId.CrystronHalqifibrax) && Bot.HasInHandOrInGraveyard(CardId.DestrudotheLostDragon_Frisson) && !activate_DestrudotheLostDragon_Frisson)) + || (Bot.HasInExtra(CardId.CrystronHalqifibrax) && Bot.HasInHandOrInGraveyard(CardId.DestrudotheLostDragon_Frisson) && !activate_DestrudotheLostDragon_Frisson)) { summoned = true; - return true; + return BeforeResult(ExecutorType.Summon); } return false; } private bool OneforOneEffect() { AI.SelectCard(GetDisabledIds()); - AI.SelectNextCard(CardId.JetSynchron, CardId.LightoftheYangZing,CardId.DDLamia); - return true; + AI.SelectNextCard(CardId.JetSynchron, CardId.LightoftheYangZing, CardId.DDLamia); + return BeforeResult(ExecutorType.Activate); } - private void HeavymetalfoesElectrumiteAddIds (List ids) + private void HeavymetalfoesElectrumiteAddIds(List ids) { if (!summoned && HasInDeck(CardId.DarkContractwiththGate) && HasInDeck(CardId.DDLamia)) { @@ -1569,31 +1645,31 @@ private bool LinkuribohEffect() { if (Card.Location == CardLocation.Grave) { - if (Duel.Player != 0) return true; + if (Duel.Player != 0) return BeforeResult(ExecutorType.Activate); return false; } - return true; + return BeforeResult(ExecutorType.Activate); } private bool Raider_WingEffect() { if (!Bot.HasInMonstersZone(CardId.Raidraptor_ForceStrix, false, true, true)) return false; AI.SelectCard(CardId.Raidraptor_ForceStrix); - return true; + return BeforeResult(ExecutorType.Activate); } private bool HeavymetalfoesElectrumiteEffect() { if (ActivateDescription != -1) { - List cards = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.SpellZone, true),Func.NegateFunc(func.IsCode),CardId.DarkContractwiththGate); + List cards = func.CardsCheckWhere(Func.GetZoneCards(Bot, CardLocation.SpellZone, true), Func.NegateFunc(func.IsCode), CardId.DarkContractwiththGate); if (cards.Count <= 0) { HeavymetalfoesElectrumite_activate = true; return false; } HeavymetalfoesElectrumite_activate = false; - return true; + return BeforeResult(ExecutorType.Activate); } - return true; + return BeforeResult(ExecutorType.Activate); } public override bool OnSelectHand() { @@ -1603,13 +1679,13 @@ private bool HeraldoftheArcLightEffect() { if (Card.Location == CardLocation.MonsterZone) { - return Duel.LastChainPlayer != 0; + return Duel.LastChainPlayer != 0 && BeforeResult(ExecutorType.Activate); } return false; } private bool CalledbytheGraveEffect() { - if ((Bot.SpellZone[5] == Card || Bot.SpellZone[0] == Card) && Duel.Player == 0) return true; + if ((Bot.SpellZone[5] == Card || Bot.SpellZone[0] == Card) && Duel.Player == 0) return BeforeResult(ExecutorType.Activate); ClientCard card = Util.GetLastChainCard(); if (card == null) return false; int id = card.Id; @@ -1619,23 +1695,16 @@ private bool CalledbytheGraveEffect() if (card.Location == CardLocation.Grave && card.HasType(CardType.Monster)) { AI.SelectCard(card); - return true; + return BeforeResult(ExecutorType.Activate); } else if (g_cards.Count() > 0 && card.HasType(CardType.Monster)) { AI.SelectCard(g_cards); - return true; + return BeforeResult(ExecutorType.Activate); } } return false; } - public override bool OnSelectYesNo(int desc) - { - /* - can't get code 74580251 Duel.SelectEffectYesNo(tp,e:GetHandler(),96) - */ - return base.OnSelectYesNo(desc); - } public override CardPosition OnSelectPosition(int cardId, IList positions) { NamedCard card = NamedCard.Get(cardId); @@ -1653,7 +1722,7 @@ public override int OnSelectOption(IList options) } return base.OnSelectOption(options); } - + public override int OnSelectPlace(int cardId, int player, CardLocation location, int available) { NamedCard card = NamedCard.Get(cardId); @@ -1691,31 +1760,38 @@ public override int OnSelectPlace(int cardId, int player, CardLocation location, return base.OnSelectPlace(cardId, player, location, available); } - public override void OnChainEnd() + public override bool OnSelectEffectYn(ClientCard card, int desc) { + if (card == null) return false; + if (card.Id == CardId.ZefraProvidence && card.Location == CardLocation.Grave) + { + if (should_destory) + { + should_destory = false; + return false; + } + return true; + } should_destory = false; - base.OnChainEnd(); - } - public override IList OnSelectSynchroMaterial(IList cards, int sum, int min, int max) - { - return base.OnSelectSynchroMaterial(cards, sum, min, max); + return base.OnSelectEffectYn(card, desc); } - private IList _OnSelectPendulumSummon(IList cards, int min,int max) + private IList _OnSelectPendulumSummon(IList cards, int min, int max) { List ids = func.GetSelectCardIdList(); List result = func.GetSelectCardList(); List exs = func.CardsCheckWhere(cards, func.IsLocation, CardLocation.Extra); - List hs = func.CardsCheckWhere(cards,Func.NegateFunc(func.IsLocation), CardLocation.Extra); - if (func.CardsCheckAny(Func.GetZoneCards(Bot,CardLocation.PendulumZone,true),card=> { - return card.HasSetcode(0xc4) && !card.IsCode(CardId.Zefraath);}) && func.CardsCheckAny(exs, func.IsCode, CardId.ShaddollZefracore)) ids.Add(CardId.ShaddollZefracore); - result = func.CardsIdToClientCards(ids,cards); + List hs = func.CardsCheckWhere(cards, Func.NegateFunc(func.IsLocation), CardLocation.Extra); + if (func.CardsCheckAny(Func.GetZoneCards(Bot, CardLocation.PendulumZone, true), card => { + return card.HasSetcode(0xc4) && !card.IsCode(CardId.Zefraath); + }) && func.CardsCheckAny(exs, func.IsCode, CardId.ShaddollZefracore)) ids.Add(CardId.ShaddollZefracore); + result = func.CardsIdToClientCards(ids, cards); List temp_cards = func.CardsCheckWhere(cards, Func.NegateFunc(func.IsCode), CardId.MaxxC); result.AddRange(temp_cards); - if(result.Count <= 0) return Func.CheckSelectCount(Util, result, cards, min, min); + if (result.Count <= 0) return Func.CheckSelectCount(Util, result, cards, min, min); if (result[0] != null && result[0].Location != CardLocation.Extra) ++p_count; return Func.CheckSelectCount(Util, result, cards, max, max); } - + public override IList OnSelectCard(IList cards, int min, int max, int hint, bool cancelable) { if (AI.HaveSelectedCards()) return null; @@ -1735,7 +1811,7 @@ public override IList OnSelectCard(IList cards, int min, ids.AddRange(pre_ids); } ids.Add(CardId.ZefraDivineStrike); - } + } if (!activate_OracleofZefra) ids.Add(CardId.OracleofZefra); if (!activate_p_Zefraath && !func.HasInZone(Bot, CardLocation.Hand | CardLocation.PendulumZone, CardId.Zefraath, true)) ids.Add(CardId.Zefraath); if (func.HasInZone(Bot, CardLocation.Hand | CardLocation.PendulumZone, CardId.SupremeKingGateZero, true) && !func.CardsCheckAny(Bot.Hand, func.HasType, CardType.Tuner) @@ -1848,9 +1924,9 @@ public override IList OnSelectCard(IList cards, int min, result = func.CardsIdToClientCards(ids, cards); } } - else if (hint == HintMsg.ToDeck && func.CardsCheckALL(cards, func.IsLocation, true, CardLocation.Hand) && min == 3 && max ==3) - { - result = func.CardsIdToClientCards(GetSendToDeckIds(),cards); + else if (hint == HintMsg.ToDeck && func.CardsCheckALL(cards, func.IsLocation, true, CardLocation.Hand) && min == 3 && max == 3) + { + result = func.CardsIdToClientCards(GetSendToDeckIds(), cards); } else if (hint == HintMsg.ToGrave && func.CardsCheckALL(cards, func.IsLocation, true, CardLocation.Deck)) { @@ -1933,8 +2009,9 @@ public override IList OnSelectCard(IList cards, int min, HeavymetalfoesElectrumiteAddIds(ids); result = func.CardsIdToClientCards(ids, cards); } - else if (!(IS_YGOPRO & !(hint == HintMsg.SpSummon)) && func.CardsCheckALL(cards, card =>{return card.IsCode(CardId.TheMightyMasterofMagic) || card.IsCode(CardId.MythicalBeastJackalKing); - }, true)) + else if (!(IS_YGOPRO & !(hint == HintMsg.SpSummon)) && func.CardsCheckALL(cards, card => { + return card.IsCode(CardId.TheMightyMasterofMagic) || card.IsCode(CardId.MythicalBeastJackalKing); + }, true)) { ids.Add(CardId.MythicalBeastJackalKing); ids.Add(CardId.TheMightyMasterofMagic); @@ -1945,7 +2022,7 @@ public override IList OnSelectCard(IList cards, int min, { p_summoning = false; if (p_count >= 3 && !Bot.HasInExtra(CardId.SaryujaSkullDread) && Bot.HasInExtra(CardId.MechaPhantomBeastAuroradon)) return Func.CheckSelectCount(Util, result, cards, min, min); - return _OnSelectPendulumSummon(cards,min,max); + return _OnSelectPendulumSummon(cards, min, max); } else if (hint == HintMsg.Destroy) { @@ -1955,7 +2032,7 @@ public override IList OnSelectCard(IList cards, int min, if (func.CardsCheckALL(cards, func.HasSetCode, true, 0x9e)) { if (!activate_SecretoftheYangZing) result = func.CardsIdToClientCards(new List { CardId.SecretoftheYangZing }, func.CardsCheckWhere(cards, - func.IsLocation,CardLocation.MonsterZone)); + func.IsLocation, CardLocation.MonsterZone)); result.AddRange(func.CardsIdToClientCards(new List { CardId.SecretoftheYangZing, CardId.Zefraxi_TreasureoftheYangZing }, func.CardsCheckWhere(cards, Func.NegateFunc(func.IsLocation), CardLocation.MonsterZone))); } @@ -1970,7 +2047,7 @@ public override IList OnSelectCard(IList cards, int min, }); result.AddRange(scards); } - + } else if (func.CardsCheckAny(cards, card => { return card.Controller == 1 && (card.Location & CardLocation.Onfield) > 0; }) && min == 1 && max == 1) { @@ -1995,13 +2072,15 @@ public override IList OnSelectCard(IList cards, int min, { CardId.TheMightyMasterofMagic, CardId.MythicalBeastJackalKing, CardId.SecretoftheYangZing }; - if (func.CardsCheckALL(cards, func.IsLocation,true,CardLocation.Hand)) - { - if(summoned && Bot.HasInExtra(CardId.CrystronHalqifibrax) && func.CardsCheckCount(Bot.MonsterZone,card => {return card.IsFaceup() - && card.HasType(CardType.Tuner);}) <= 0 && !(Bot.HasInGraveyard(CardId.DDLamia) && !activate_DDLamia - && func.CardsCheckCount(Func.GetZoneCards (Bot, CardLocation.Onfield | CardLocation.Hand, true), card => { return Func.HasSetCode(card, 0xaf, 0xae) && card.Id != CardId.DDLamia; }) + if (func.CardsCheckALL(cards, func.IsLocation, true, CardLocation.Hand)) + { + if (summoned && Bot.HasInExtra(CardId.CrystronHalqifibrax) && func.CardsCheckCount(Bot.MonsterZone, card => { + return card.IsFaceup() && card.HasType(CardType.Tuner); + }) <= 0 && !(Bot.HasInGraveyard(CardId.DDLamia) && !activate_DDLamia + && func.CardsCheckCount(Func.GetZoneCards(Bot, CardLocation.Onfield | CardLocation.Hand, true), card => { return Func.HasSetCode(card, 0xaf, 0xae) && card.Id != CardId.DDLamia; }) <= 0) && !(Bot.HasInGraveyard(CardId.JetSynchron) && !activate_JetSynchron) - && !(Bot.HasInGraveyard(CardId.DestrudotheLostDragon_Frisson) && !activate_DestrudotheLostDragon_Frisson)){ + && !(Bot.HasInGraveyard(CardId.DestrudotheLostDragon_Frisson) && !activate_DestrudotheLostDragon_Frisson)) + { ids.AddRange(tuner_ids); ids.AddRange(no_tuner_ids); } @@ -2012,8 +2091,11 @@ public override IList OnSelectCard(IList cards, int min, } result = func.CardsIdToClientCards(ids, cards); } - else if (func.CardsCheckALL(cards, card => { return Func.IsCode(card, CardId.LightoftheYangZing, CardId.PSY_FramegearGamma, - CardId.MechaPhantomBeastO_Lion, CardId.JetSynchron, CardId.Deskbot001, CardId.DDLamia); })){ + else if (func.CardsCheckALL(cards, card => { + return Func.IsCode(card, CardId.LightoftheYangZing, CardId.PSY_FramegearGamma, + CardId.MechaPhantomBeastO_Lion, CardId.JetSynchron, CardId.Deskbot001, CardId.DDLamia); + })) + { if (Bot.GetMonstersInMainZone().Count <= 1) ids.Add(CardId.Deskbot001); ids.Add(CardId.JetSynchron); ids.Add(CardId.Deskbot001); @@ -2021,7 +2103,7 @@ public override IList OnSelectCard(IList cards, int min, ids.Add(CardId.PSY_FramegearGamma); result = func.CardsIdToClientCards(ids, cards); } - + } else if (hint == HintMsg.Release && func.CardsCheckAny(cards, func.IsLocation, CardLocation.MonsterZone)) { @@ -2031,13 +2113,13 @@ public override IList OnSelectCard(IList cards, int min, { if (card == null || IsNoLinkCards(card)) continue; if (card.Id == CardId.MechaPhantomBeastToken) tRelease.Add(card); - else if(card.Id == CardId.Raidraptor_WiseStrix) tRelease.Insert(0,card); + else if (card.Id == CardId.Raidraptor_WiseStrix) tRelease.Insert(0, card); else nRelease.Add(card); } result.AddRange(tRelease); result.AddRange(nRelease); } - return Func.CheckSelectCount(Util, result, cards, min, max); + return Func.CheckSelectCount(Util, result, cards, min, max); } private bool HasInDeck(int id) { diff --git a/Game/AI/Dialogs.cs b/Game/AI/Dialogs.cs index 478783ed..40e171c9 100644 --- a/Game/AI/Dialogs.cs +++ b/Game/AI/Dialogs.cs @@ -34,7 +34,9 @@ public class DialogsData [DataMember] public string[] setmonster { get; set; } [DataMember] - public string[] chaining { get; set; } + public string[] chaining { get; set; } + [DataMember] + public string[] custom { get; set; } } public class Dialogs { @@ -53,7 +55,8 @@ public class Dialogs private string[] _summon; private string[] _setmonster; private string[] _chaining; - + private string[] _custom; + public Dialogs(GameClient game) { _game = game; @@ -75,6 +78,7 @@ public Dialogs(GameClient game) _summon = data.summon; _setmonster = data.setmonster; _chaining = data.chaining; + _custom = data.custom; } } @@ -158,6 +162,20 @@ public void SendChaining(string card) InternalSendMessage(_chaining, card); } + public void SendCustom(int index, params object[] opts) + { + InternalSendCustomMessage(index, opts); + } + + private void InternalSendCustomMessage(int index, params object[] opts) + { + if (!_game._chat || _custom == null) + return; + string message = string.Format(_custom[index], opts); + if (message != "") + _game.Chat(message); + } + private void InternalSendMessage(IList array, params object[] opts) { if (!_game._chat) diff --git a/Game/AI/Executor.cs b/Game/AI/Executor.cs index f3939ff8..9b932594 100644 --- a/Game/AI/Executor.cs +++ b/Game/AI/Executor.cs @@ -165,11 +165,17 @@ public virtual IList OnCardSorting(IList cards) // For overriding return null; } + public virtual void OnSelectChain(IList cards) { return; } + public virtual bool OnSelectEffectYn(ClientCard card, int desc) + { + return true; + } + public virtual bool OnSelectYesNo(int desc) { return true; diff --git a/Game/GameAI.cs b/Game/GameAI.cs index e2d0e2c3..ffb46876 100644 --- a/Game/GameAI.cs +++ b/Game/GameAI.cs @@ -54,6 +54,14 @@ public void OnStart() _dialogs.SendDuelStart(); } + /// + /// Customized called when the AI do something in a duel. + /// + public void OnCustom(int index, params object[] opts) + { + _dialogs.SendCustom(index, opts); + } + /// /// Called when the AI do the rock-paper-scissors. /// @@ -378,7 +386,7 @@ public bool OnSelectEffectYn(ClientCard card, int desc) foreach (CardExecutor exec in Executor.Executors) { if (ShouldExecute(exec, card, ExecutorType.Activate, desc)) - return true; + return Executor.OnSelectEffectYn(card, desc); } return false; } From 5db1aeb5e07f97b5fa14b28ab5c55aa78fad285b Mon Sep 17 00:00:00 2001 From: Ha <479310608@qq.com> Date: Sun, 18 Jun 2023 22:57:22 +0800 Subject: [PATCH 15/18] fix --- Game/AI/Decks/ZefraExecutor.cs | 46 ++++++++++++++++------------------ Game/AI/Dialogs.cs | 2 +- Game/AI/Executor.cs | 5 ---- Game/GameAI.cs | 6 ++--- 4 files changed, 25 insertions(+), 34 deletions(-) diff --git a/Game/AI/Decks/ZefraExecutor.cs b/Game/AI/Decks/ZefraExecutor.cs index e89ed7b7..40bef73a 100644 --- a/Game/AI/Decks/ZefraExecutor.cs +++ b/Game/AI/Decks/ZefraExecutor.cs @@ -447,21 +447,21 @@ public ZefraExecutor(GameAI ai, Duel duel) : base(ai, duel) { AddExecutor(ExecutorType.Activate, CardId.CalledbytheGrave, CalledbytheGraveEffect); AddExecutor(ExecutorType.Activate, CardId.BorreloadSavageDragon, BorreloadSavageDragonEffect_2); - AddExecutor(ExecutorType.Activate, CardId.F_A_DawnDragster); + AddExecutor(ExecutorType.Activate, CardId.F_A_DawnDragster, ResetFlag); AddExecutor(ExecutorType.Activate, CardId.NinePillarsofYangZing, NinePillarsofYangZingEffect); AddExecutor(ExecutorType.Activate, CardId.ZefraDivineStrike, ZefraDivineStrikeEffect); AddExecutor(ExecutorType.Activate, CardId.HeraldoftheArcLight, HeraldoftheArcLightEffect); AddExecutor(ExecutorType.Activate, CardId.TruKingofAllCalamities, TruKingofAllCalamitiesEffect); - AddExecutor(ExecutorType.Activate, CardId.PSY_FramegearGamma); + AddExecutor(ExecutorType.Activate, CardId.PSY_FramegearGamma, ResetFlag); AddExecutor(ExecutorType.Activate, CardId.MaxxC, DefaultMaxxC); AddExecutor(ExecutorType.Activate, CardId.SupremeKingDragonDarkwurm, SupremeKingDragonDarkwurmEffect); AddExecutor(ExecutorType.Activate, CardId.ServantofEndymion, ServantofEndymionEffect); AddExecutor(ExecutorType.Activate, CardId.Terraforming, TerraformingEffect); - AddExecutor(ExecutorType.Activate, CardId.SpellPowerMastery); + AddExecutor(ExecutorType.Activate, CardId.SpellPowerMastery, ResetFlag); AddExecutor(ExecutorType.Activate, CardId.DragonShrine, DragonShrineEffect); AddExecutor(ExecutorType.Activate, CardId.FoolishBurial, FoolishBurialEffect); AddExecutor(ExecutorType.Activate, CardId.DarkContractwiththGate, DarkContractwiththGateEffect); - AddExecutor(ExecutorType.Activate, CardId.Terraforming); + AddExecutor(ExecutorType.Activate, CardId.Terraforming, ResetFlag); AddExecutor(ExecutorType.Activate, CardId.OracleofZefra, OracleofZefraEffect); AddExecutor(ExecutorType.Activate, CardId.ZefraProvidence, ZefraProvidenceEffect); AddExecutor(ExecutorType.Activate, CardId.AstrographSorcerer, AstrographSorcererEffect); @@ -497,7 +497,7 @@ public ZefraExecutor(GameAI ai, Duel duel) : base(ai, duel) AddExecutor(ExecutorType.Activate, CardId.Blackwing_ZephyrostheElite, Blackwing_ZephyrostheEliteEffect); AddExecutor(ExecutorType.SpSummon, CardId.Raidraptor_ForceStrix, Raidraptor_ForceStrixSummon); AddExecutor(ExecutorType.Activate, CardId.Raidraptor_ForceStrix, Raidraptor_ForceStrixEffect); - AddExecutor(ExecutorType.Activate, CardId.Rank_Up_MagicSoulShaveForce); + AddExecutor(ExecutorType.Activate, CardId.Rank_Up_MagicSoulShaveForce, ResetFlag); AddExecutor(ExecutorType.Activate, CardId.Raider_Wing, Raider_WingEffect); AddExecutor(ExecutorType.SpSummon, CardId.Raidraptor_SingingLanius); //xyz mode @@ -530,7 +530,7 @@ public ZefraExecutor(GameAI ai, Duel duel) : base(ai, duel) CardId.DDSavantKepler,CardId.StellarknightZefraxciton,CardId.ShaddollZefracore,CardId.SupremeKingDragonDarkwurm}; for (int i = 0; i < p_summon_ids.Count; ++i) AddExecutor(ExecutorType.Summon, p_summon_ids[i], DefaultSummon); AddExecutor(ExecutorType.Summon, DefaultSummon); - AddExecutor(ExecutorType.Activate, CardId.Deskbot001); + AddExecutor(ExecutorType.Activate, CardId.Deskbot001, ResetFlag); AddExecutor(ExecutorType.Activate, CardId.TheMightyMasterofMagic, TheMightyMasterofMagicEffect); AddExecutor(ExecutorType.Activate, CardId.DestrudotheLostDragon_Frisson, DestrudotheLostDragon_FrissonEffect); AddExecutor(ExecutorType.Summon, CardId.Blackwing_ZephyrostheElite, DefaultSummon_2); @@ -547,7 +547,7 @@ public override void OnNewTurn() if (duel_start) { duel_start = false; - AI.OnCustom((int)CustomMessage.Happy); + AI.SendCustomChat((int)CustomMessage.Happy); } activate_SupremeKingDragonDarkwurm_1 = false; activate_SupremeKingDragonDarkwurm_2 = false; @@ -576,8 +576,13 @@ public override void OnNewTurn() } private bool ZefraProvidenceEffect() { - if (Card.Location == CardLocation.Grave) + if (ActivateDescription == 96) { + if (should_destory) + { + should_destory = false; + return false; + } return BeforeResult(ExecutorType.Activate); } else @@ -705,6 +710,7 @@ private bool BeforeResult(ExecutorType type) { if (type == ExecutorType.Activate) { + ResetFlag(); ++activate_count; } if (type == ExecutorType.Summon) @@ -719,7 +725,7 @@ private bool GoToEndPhase() && activate_count + summon_count < 5 && !enemy_activate) { - AI.OnCustom((int)CustomMessage.Angry); + AI.SendCustomChat((int)CustomMessage.Angry); return true; } return false; @@ -1399,7 +1405,7 @@ private bool CrystronHalqifibraxSummon() AI.SelectMaterials(materials); if (materials.Distinct().Count() <= 3) { - AI.OnCustom((int)CustomMessage.Surprise); + AI.SendCustomChat((int)CustomMessage.Surprise); } return true; } @@ -1675,6 +1681,11 @@ public override bool OnSelectHand() { return true; } + private bool ResetFlag() + { + should_destory = false; + return true; + } private bool HeraldoftheArcLightEffect() { if (Card.Location == CardLocation.MonsterZone) @@ -1760,21 +1771,6 @@ public override int OnSelectPlace(int cardId, int player, CardLocation location, return base.OnSelectPlace(cardId, player, location, available); } - public override bool OnSelectEffectYn(ClientCard card, int desc) - { - if (card == null) return false; - if (card.Id == CardId.ZefraProvidence && card.Location == CardLocation.Grave) - { - if (should_destory) - { - should_destory = false; - return false; - } - return true; - } - should_destory = false; - return base.OnSelectEffectYn(card, desc); - } private IList _OnSelectPendulumSummon(IList cards, int min, int max) { List ids = func.GetSelectCardIdList(); diff --git a/Game/AI/Dialogs.cs b/Game/AI/Dialogs.cs index 40e171c9..62b66976 100644 --- a/Game/AI/Dialogs.cs +++ b/Game/AI/Dialogs.cs @@ -162,7 +162,7 @@ public void SendChaining(string card) InternalSendMessage(_chaining, card); } - public void SendCustom(int index, params object[] opts) + public void SendCustomChat(int index, params object[] opts) { InternalSendCustomMessage(index, opts); } diff --git a/Game/AI/Executor.cs b/Game/AI/Executor.cs index 9b932594..d2a43e1c 100644 --- a/Game/AI/Executor.cs +++ b/Game/AI/Executor.cs @@ -171,11 +171,6 @@ public virtual void OnSelectChain(IList cards) return; } - public virtual bool OnSelectEffectYn(ClientCard card, int desc) - { - return true; - } - public virtual bool OnSelectYesNo(int desc) { return true; diff --git a/Game/GameAI.cs b/Game/GameAI.cs index ffb46876..1c120915 100644 --- a/Game/GameAI.cs +++ b/Game/GameAI.cs @@ -57,9 +57,9 @@ public void OnStart() /// /// Customized called when the AI do something in a duel. /// - public void OnCustom(int index, params object[] opts) + public void SendCustomChat(int index, params object[] opts) { - _dialogs.SendCustom(index, opts); + _dialogs.SendCustomChat(index, opts); } /// @@ -386,7 +386,7 @@ public bool OnSelectEffectYn(ClientCard card, int desc) foreach (CardExecutor exec in Executor.Executors) { if (ShouldExecute(exec, card, ExecutorType.Activate, desc)) - return Executor.OnSelectEffectYn(card, desc); + return true; } return false; } From 4d71d1e7b6df7e82252b72d9d3d9056042097c3f Mon Sep 17 00:00:00 2001 From: mercury233 Date: Sun, 18 Jun 2023 23:13:13 +0800 Subject: [PATCH 16/18] format --- Game/AI/Dialogs.cs | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/Game/AI/Dialogs.cs b/Game/AI/Dialogs.cs index 62b66976..00835649 100644 --- a/Game/AI/Dialogs.cs +++ b/Game/AI/Dialogs.cs @@ -162,32 +162,27 @@ public void SendChaining(string card) InternalSendMessage(_chaining, card); } - public void SendCustomChat(int index, params object[] opts) - { - InternalSendCustomMessage(index, opts); - } - - private void InternalSendCustomMessage(int index, params object[] opts) + private void InternalSendMessage(IList array, params object[] opts) { - if (!_game._chat || _custom == null) + if (!_game._chat) return; - string message = string.Format(_custom[index], opts); + string message = string.Format(array[Program.Rand.Next(array.Count)], opts); if (message != "") _game.Chat(message); } - private void InternalSendMessage(IList array, params object[] opts) + private void InternalSendMessageForced(IList array, params object[] opts) { - if (!_game._chat) - return; string message = string.Format(array[Program.Rand.Next(array.Count)], opts); if (message != "") _game.Chat(message); } - private void InternalSendMessageForced(IList array, params object[] opts) + public void SendCustomChat(int index, params object[] opts) { - string message = string.Format(array[Program.Rand.Next(array.Count)], opts); + if (!_game._chat || _custom == null) + return; + string message = string.Format(_custom[index], opts); if (message != "") _game.Chat(message); } From d1719318e09f899f020f46b129af456e0e474b1a Mon Sep 17 00:00:00 2001 From: Ha <479310608@qq.com> Date: Sun, 30 Jul 2023 15:38:41 +0800 Subject: [PATCH 17/18] Support windbot link core --- Game/AI/CoreFunction.cs | 4099 +++++++++++++++++++++++++++++++++ Game/AI/Executor.cs | 17 + Game/ClientCard.cs | 15 + Game/GameAI.cs | 5 +- Game/GameBehavior.cs | 10 +- WindBot.csproj | 1 + YGOSharp.Network.dll | Bin 17408 -> 18432 bytes YGOSharp.OCGWrapper.Enums.dll | Bin 9728 -> 18432 bytes YGOSharp.OCGWrapper.dll | Bin 16896 -> 16896 bytes sqlite3.dll | Bin 852754 -> 669052 bytes 10 files changed, 4144 insertions(+), 3 deletions(-) create mode 100644 Game/AI/CoreFunction.cs diff --git a/Game/AI/CoreFunction.cs b/Game/AI/CoreFunction.cs new file mode 100644 index 00000000..6c311fab --- /dev/null +++ b/Game/AI/CoreFunction.cs @@ -0,0 +1,4099 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using YGOSharp.Network; +using YGOSharp.Network.Enums; +using System.IO; +using YGOSharp.OCGWrapper.Enums; + +namespace WindBot.Game.AI +{ + /// + /// function of link ocgcore,approximately equivalent to core lua function + /// + public class CoreFunction + { + public enum ReceiveType + { + Null, + Success, + LuaError, + CoreError, + BufferError, + ClientError + + } + public byte[] Data { get; set; } + public Duel Duel { get; private set; } + public YGOClient Connection { get; private set; } + /* + If true, we can get information about all cards by CoreFunction, + including the facdedown cards and the enemy cards, which are not allowed by rules. + For certain special situations, it can be used appropriately, + such as get card information when viewing the enemy cards. + */ + public bool GodMode { get; set; } + + public ReceiveType type; + + private IList resetCards = new List(); + + private const int PLAYER_NONE = 2; + private const int PLAYER_ALL = 3; + private const int PLAYER_NULL = 4; + private const int MAX_EX_PARAMETERS = 11; + private const int LOCATION_REASON_TOFIELD = 0x1; + private static class FunctionCode + { + public enum Type + { + Card, + Duel + } + public enum Card + { + GetCode, + GetOriginalCodeRule, + GetPreviousCodeOnField, + GetUnionCount, + GetTributeRequirement, + + GetOriginalCode, + GetType, + GetOriginalType, + GetFusionType, + GetSynchroType, + GetXyzType, + GetLinkType, + GetLevel, + GetRank, + GetLink, + GetOriginalLevel, + GetOriginalRank, + GetLeftScale, + GetOriginalLeftScale, + GetRightScale, + GetOriginalRightScale, + GetCurrentScale, + GetLinkedGroupCount, + GetMutualLinkedGroupCount, + GetColumnGroupCount, + GetAttribute, + GetOriginalAttribute, + GetRace, + GetOriginalRace, + GetAttack, + GetBaseAttack, + GetTextAttack, + GetDefense, + GetBaseDefense, + GetTextDefense, + GetPreviousTypeOnField, + GetPreviousLevelOnField, + GetPreviousRankOnField, + GetPreviousAttributeOnField, + GetPreviousRaceOnField, + GetPreviousAttackOnField, + GetPreviousDefenseOnField, + GetOwner, + GetControler, + GetPreviousControler, + GetReason, + GetReasonPlayer, + GetPosition, + GetPreviousPosition, + GetBattlePosition, + GetLocation, + GetPreviousLocation, + GetSequence, + GetSummonType, + GetSummonLocation, + GetSummonPlayer, + GetDestination, + GetLeaveFieldDest, + GetTurnID, + GetFieldID, + GetRealFieldID, + GetTurnCounter, + GetMaterialCount, + GetEquipCount, + GetOverlayCount, + GetAttackedGroupCount, + GetAttackedCount, + GetAttackAnnouncedCount, + GetCardTargetCount, + GetOwnerTargetCount, + + GetFusionCode, + GetLinkCode, + + IsFusionCode, + IsLinkCode, + IsSetCard, + IsOriginalSetCard, + IsPreviousSetCard, + IsFusionSetCard, + IsLinkSetCard, + IsOriginalCodeRule, + IsCode, + IsLevel, + IsRank, + IsLink, + IsAttack, + IsDefense, + IsLinkRace, + IsFusionAttribute, + IsLinkAttribute, + + GetSynchroLevel, + GetRitualLevel, + + IsLinkMarker, + IsType, + IsFusionType, + IsSynchroType, + IsXyzType, + IsLinkType, + IsRace, + IsAttribute, + IsReason, + IsSummonType, + IsSummonLocation, + IsSummonPlayer, + IsStatus, + IsRelateToChain, + IsPosition, + IsPreviousPosition, + IsControler, + IsPreviousControler, + IsLocation, + IsPreviousLocation, + IsLevelBelow, + IsLevelAbove, + IsRankBelow, + IsRankAbove, + IsLinkBelow, + IsLinkAbove, + IsAttackBelow, + IsAttackAbove, + IsDefenseBelow, + IsDefenseAbove, + IsCanHaveCounter, + IsFusionSummonableCard, + IsSpecialSummonable, + IsAbleToHand, + IsAbleToRemoveAsCost, + IsDiscardable, + IsCanOverlay, + + GetLinkedGroup, + GetMutualLinkedGroup, + GetColumnGroup, + GetMaterial, + GetEquipGroup, + GetAttackedGroup, + GetBattledGroup, + GetCardTarget, + GetOwnerTarget, + + IsLinkState, + IsExtraLinkState, + IsAllColumn, + IsExtraDeckMonster, + IsDualState, + IsDirectAttacked, + IsRelateToBattle, + IsDisabled, + IsSummonableCard, + IsAbleToDeck, + IsAbleToExtra, + IsAbleToGrave, + IsAbleToHandAsCost, + IsAbleToDeckAsCost, + IsAbleToExtraAsCost, + IsAbleToDeckOrExtraAsCost, + IsAbleToGraveAsCost, + IsReleasable, + IsReleasableByEffect, + IsAttackable, + IsFaceup, + IsAttackPos, + IsFacedown, + IsDefensePos, + IsOnField, + IsPublic, + IsForbidden, + IsAbleToChangeControler, + IsCanChangePosition, + IsCanTurnSet, + + GetLinkedZone, + GetMutualLinkedZone, + GetFusionAttribute, + GetLinkAttribute, + GetLinkRace, + + GetReasonCard, + GetEquipTarget, + GetPreviousEquipTarget, + GetOverlayTarget, + GetFirstCardTarget, + GetBattleTarget, + + IsNotTuner, + CheckEquipTarget, + CheckUnionTarget, + IsHasCardTarget, + IsRelateToCard, + CheckFusionSubstitute, + IsCanBeBattleTarget, + IsSynchroSummonable, + + GetEffectCount, + GetFlagEffect, + GetCounter, + + IsSummonable, + IsMSetable, + IsXyzSummonable, + IsLinkSummonable, + IsXyzLevel, + GetFlagEffectLabel, + GetColumnZone, + GetOverlayGroup, + CheckRemoveOverlayCard, + IsHasEffect, + GetAttackableTarget, + + IsCanBeCardTarget, + IsCanBeDisabledByCard, + IsImmuneToCard, + IsDestructable, + + IsSSetable, + IsAbleToRemove, + IsChainAttackable, + IsControlerCanBeChanged, + IsCanAddCounter, + IsCanRemoveCounter, + + IsCanBeFusionMaterial, + IsCanBeSynchroMaterial, + IsCanBeRitualMaterial, + IsCanBeXyzMaterial, + IsCanBeLinkMaterial, + CheckUniqueOnField + + } + public enum Duel + { + GetLP, + GetTurnCount, + GetDrawCount, + GetBattleDamage, + GetLinkedZone, + GetRitualMaterial, + IsPlayerCanAdditionalSummon, + GetBattledCount, + + GetTurnPlayer, + GetCurrentChain, + GetCurrentPhase, + IsDamageCalculated, + GetAttacker, + GetAttackTarget, + CheckPhaseActivity, + IsAbleToEnterBP, + + GetDecktopGroup, + GetExtraTopGroup, + GetReleaseGroup, + GetReleaseGroupCount, + GetFusionMaterial, + IsPlayerAffectedByEffect, + IsPlayerCanDraw, + IsPlayerCanDiscardDeck, + IsPlayerCanDiscardDeckAsCost, + IsPlayerCanSSet, + IsPlayerCanSpecialSummonCount, + IsPlayerCanRelease, + IsPlayerCanSendtoHand, + IsPlayerCanSendtoGrave, + IsPlayerCanSendtoDeck, + + + GetBattleMonster, + GetFlagEffect, + GetFlagEffectLabel, + IsCanAddCounter, + IsCanRemoveCounter, + GetCounter, + IsEnvironment, + CheckLPCost, + CheckSummonedCount, + GetLocationCount, + GetUsableMZoneCount, + + GetLinkedGroup, + GetLinkedGroupCount, + GetFieldCard, + CheckLocation, + GetFieldGroup, + GetFieldGroupCount, + GetOverlayGroup, + GetOverlayCount, + + GetTributeGroup, + CheckRemoveOverlayCard, + IsPlayerCanSummon, + IsPlayerCanMSet, + IsPlayerCanSpecialSummon, + IsPlayerCanSpecialSummonMonster, + IsPlayerCanRemove + } + } + private class DataReader + { + public MemoryStream Stream { get; private set; } + public BinaryReader Packet { get; private set; } + + public DataReader(MemoryStream stream, BinaryReader packet) + { + Stream = stream; + Packet = packet; + } + public void Close() + { + Packet?.Close(); + Stream?.Close(); + } + } + + public CoreFunction(Duel duel, YGOClient connection) + { + Duel = duel; + Connection = connection; + Data = null; + GodMode = false; + } + + private DataReader GetDataReader(byte[] data) + { + if (data?.Length <= 0) return null; + MemoryStream stream = new MemoryStream(data); + BinaryReader packet = new BinaryReader(stream); + return new DataReader(stream, packet); + } + private void Close(DataReader dreader) + { + Data = null; + dreader?.Close(); + } + + /// + /// Called when determining whether a function is executing correctly + /// + public bool FunctionSuccess() + { + return type == ReceiveType.Success; + } + + private bool CheckGodMode(ClientCard card) + { + if (card == null) return false; + if (GodMode) return true; + if (card.Sequence < 0) return false; + if (card.Controller == 0) + { + if (card.Location == CardLocation.Deck) return false; + if (card.Location == CardLocation.Removed && card.IsFacedown()) return false; + return true; + + } + else + { + if (((card.Location & CardLocation.Onfield) > 0 && !card.IsFacedown()) || card.Location == CardLocation.Overlay) return true; + return false; + } + } + + private void WriteCard(BinaryWriter reply,ClientCard card) + { + RestoreCardsData(); + if (card == null) + { + reply.Write((byte)PLAYER_NONE); + } + else + { + //if (card.Sequence < 0 && GodMode) GetFieldGroup(0, (int)card.Location, (int)card.Location); + int controller = 0; + int sequence = -1; + if (GodMode && card.Sequence < 0) + { + int[] data = GetRealPosition(card, card.Location); + controller = data[0]; + sequence = data[1]; + } + else + { + controller = card.Controller; + sequence = card.Sequence; + } + reply.Write((byte)controller); + reply.Write((int)card.Location); + reply.Write(sequence); + } + } + + private int SearchCard(IList cards,ClientCard card) + { + for (int i = 0; i < cards.Count; i++) + { + if (card == cards[i]) return i; + } + return -1; + } + + private int[] GetRealPosition(ClientCard card,CardLocation loction) + { + //Controller Sequence + if (card == null) return new int[] { 0, -1 }; + int sequence = -1; + switch (loction) + { + case CardLocation.Deck: + if ((sequence = SearchCard(Duel.Fields[1].Deck, card)) > 0) return new int[] { 1, sequence }; + if ((sequence = SearchCard(Duel.Fields[0].Deck, card)) > 0) return new int[] { 0, sequence }; + break; + case CardLocation.Hand: + if ((sequence = SearchCard(Duel.Fields[1].Hand, card)) > 0) return new int[] { 1, sequence }; + if ((sequence = SearchCard(Duel.Fields[0].Hand, card)) > 0) return new int[] { 0, sequence }; + break; + case CardLocation.MonsterZone: + if ((sequence = SearchCard(Duel.Fields[1].MonsterZone, card)) > 0) return new int[] { 1, sequence }; + if ((sequence = SearchCard(Duel.Fields[0].MonsterZone, card)) > 0) return new int[] { 0, sequence }; + break; + case CardLocation.SpellZone: + if ((sequence = SearchCard(Duel.Fields[1].SpellZone, card)) > 0) return new int[] { 1, sequence }; + if ((sequence = SearchCard(Duel.Fields[0].SpellZone, card)) > 0) return new int[] { 0, sequence }; + break; + case CardLocation.Grave: + if ((sequence = SearchCard(Duel.Fields[1].Graveyard, card)) > 0) return new int[] { 1, sequence }; + if ((sequence = SearchCard(Duel.Fields[0].Graveyard, card)) > 0) return new int[] { 0, sequence }; + break; + case CardLocation.Removed: + if ((sequence = SearchCard(Duel.Fields[1].Banished, card)) > 0) return new int[] { 1, sequence }; + if ((sequence = SearchCard(Duel.Fields[0].Banished, card)) > 0) return new int[] { 0, sequence }; + break; + case CardLocation.Extra: + if ((sequence = SearchCard(Duel.Fields[1].ExtraDeck, card)) > 0) return new int[] { 1, sequence }; + if ((sequence = SearchCard(Duel.Fields[0].ExtraDeck, card)) > 0) return new int[] { 0, sequence }; + break; + default: + break; + } + return new int[] { 0, -1 }; + } + + private void ReadGroup(BinaryReader packet,IList cards) + { + int count = packet.ReadInt32(); + int id; + int player; + int loc; + int seq; + ClientCard rcard; + for (int i = 0; i < count; ++i) + { + id = packet.ReadInt32(); + player = Duel.GetLocalPlayer(packet.ReadByte()); + loc = packet.ReadInt32(); + seq = packet.ReadInt32(); + rcard = Duel.GetCard(player, (CardLocation)loc, seq); + UpdateCardByCore(rcard, id, player, loc, seq); + cards.Add(rcard); + } + } + + /// + /// Update card data by core,only id,player,loc,seq + /// + private void UpdateCardByCore(ClientCard rcard,int id,int player,int loc,int seq) + { + if (CheckGodMode(rcard)) + { + + if (rcard.Sequence < 0) + { + resetCards.Add(rcard); + } + rcard.SetId(id); + rcard.SetController(player); + rcard.SetLocation((CardLocation)loc); + rcard.SetSequence(seq); + } + } + + private void ReadCard(BinaryReader packet,ClientCard rcard) + { + int id = packet.ReadInt32(); + if (id == 0) return; + int player = Duel.GetLocalPlayer(packet.ReadByte()); + int loc = packet.ReadInt32(); + int seq = packet.ReadInt32(); + rcard = Duel.GetCard(player, (CardLocation)loc, seq); + UpdateCardByCore(rcard, id, player, loc, seq); + } + + /// + /// Try to manually call this function after operating the card to avoid data confusion + /// + public void RestoreCardsData() + { + if (resetCards?.Count <= 0) return; + foreach (var resetCard in resetCards) + { + resetCard.SetController(0); + resetCard.SetId(0); + resetCard.SetSequence(-1); + } + resetCards.Clear(); + } + + private bool CheckError(DataReader dreader) + { + try + { + ReceiveType receiveType = (ReceiveType)dreader.Packet.ReadInt32(); + type = receiveType; + if (receiveType != ReceiveType.Success) + { +#if DEBUG + Logger.DebugWriteLine("Handle data Error!"); + Logger.DebugWriteLine("Error Type:" + receiveType); + FunctionCode.Type func_type = (FunctionCode.Type)dreader.Packet.ReadByte(); + if (func_type == FunctionCode.Type.Card) + { + FunctionCode.Card func_code = (FunctionCode.Card)dreader.Packet.ReadUInt16(); + Logger.DebugWriteLine("Error data is:" + func_type + ":" + func_code); + } + else if (func_type == FunctionCode.Type.Duel) + { + FunctionCode.Duel func_code = (FunctionCode.Duel)dreader.Packet.ReadUInt16(); + Logger.DebugWriteLine("Error data is:" + func_type + ":" + func_code); + } +#endif + Close(dreader); + return false; + } + } + catch (Exception e) + { +#if DEBUG + Logger.DebugWriteLine("Receive Error:" + e.Message); +#endif + type = ReceiveType.BufferError; + Close(dreader); + return false; + } + return true; + } + + private void DefaultCardFunctionWrite(FunctionCode.Card functionCode,BinaryWriter reply, ClientCard card) + { + reply.Write((byte)FunctionCode.Type.Card); + reply.Write((short)functionCode); + WriteCard(reply, card); + } + + private T ClientErrorReturn(T value) + { + type = ReceiveType.ClientError; +#if DEBUG + Logger.DebugWriteLine("Parameter Error!"); + Logger.DebugWriteLine("Error Type:" + type); +#endif + return value; + } + + private IList HandleCardToDoubleInt(FunctionCode.Card functionCode, ClientCard card) + { + IList results = new List(); + if (!CheckGodMode(card)) return ClientErrorReturn(results); + BinaryWriter reply = GamePacketFactory.Create(CtosMessage.AiRequest); + DefaultCardFunctionWrite(functionCode,reply, card); + Connection.Send(reply, true); + DataReader dreader = GetDataReader(Data); + if (!CheckError(dreader)) return results; + int result; + for (int i = 0; i < 2; ++i) + { + result = dreader.Packet.ReadInt32(); + if (result == 0 && (functionCode == FunctionCode.Card.GetCode || + functionCode == FunctionCode.Card.GetOriginalCodeRule || + functionCode == FunctionCode.Card.GetPreviousCodeOnField)) continue; + results.Add(result); + } + Close(dreader); + return results; + } + + private int? HandleCardToInt(FunctionCode.Card functionCode, ClientCard card) + { + if (!CheckGodMode(card)) return ClientErrorReturn((int?)null); + BinaryWriter reply = GamePacketFactory.Create(CtosMessage.AiRequest); + DefaultCardFunctionWrite(functionCode, reply, card); + Connection.Send(reply, true); + DataReader dreader = GetDataReader(Data); + if (!CheckError(dreader)) return null; + int result = dreader.Packet.ReadInt32(); + Close(dreader); + return result; + } + + private int? HandleIntToInt(FunctionCode.Card functionCode, ClientCard card,int parameter) + { + if (!CheckGodMode(card)) return ClientErrorReturn((int?)null); + BinaryWriter reply = GamePacketFactory.Create(CtosMessage.AiRequest); + DefaultCardFunctionWrite(functionCode, reply, card); + reply.Write((byte)parameter); + Connection.Send(reply, true); + DataReader dreader = GetDataReader(Data); + if (!CheckError(dreader)) return null; + int result = dreader.Packet.ReadInt32(); + Close(dreader); + return result; + } + + private IList HandleCardToIntEx(FunctionCode.Card functionCode, ClientCard card) + { + IList results = new List(); + if (!CheckGodMode(card)) return ClientErrorReturn(results); + BinaryWriter reply = GamePacketFactory.Create(CtosMessage.AiRequest); + DefaultCardFunctionWrite(functionCode, reply, card); + Connection.Send(reply, true); + DataReader dreader = GetDataReader(Data); + if (!CheckError(dreader)) return results; + int count = dreader.Packet.ReadInt32(); + int result; + for (int i = 0; i < count; ++i) + { + result = dreader.Packet.ReadInt32(); + if (result == 0) continue; + } + Close(dreader); + return results; + } + + private bool HandleCardIntIntExToBool(FunctionCode.Card functionCode, ClientCard card, int parameter, params int[] parameters) + { + if (!CheckGodMode(card)) return ClientErrorReturn(false); + BinaryWriter reply = GamePacketFactory.Create(CtosMessage.AiRequest); + DefaultCardFunctionWrite(functionCode, reply, card); + int max_parameter_count = parameters.Count() > MAX_EX_PARAMETERS ? MAX_EX_PARAMETERS : parameters.Count(); + reply.Write((parameters.Count() + 1)); + reply.Write(parameter); + for (int i = 0; i < max_parameter_count; ++i) + { + reply.Write(parameters[i]); + }; + Connection.Send(reply, true); + DataReader dreader = GetDataReader(Data); + if (!CheckError(dreader)) return false; + byte result = dreader.Packet.ReadByte(); + Close(dreader); + return result == 1 ? true : false; + } + + private bool HandleCardIntToBool(FunctionCode.Card functionCode, ClientCard card, int parameter) + { + if (!CheckGodMode(card)) return ClientErrorReturn(false); + BinaryWriter reply = GamePacketFactory.Create(CtosMessage.AiRequest); + DefaultCardFunctionWrite(functionCode, reply, card); + reply.Write(parameter); + Connection.Send(reply, true); + DataReader dreader = GetDataReader(Data); + if (!CheckError(dreader)) return false; + byte result = dreader.Packet.ReadByte(); + Close(dreader); + return result == 1 ? true : false; + } + + private bool HandleCardToBool(FunctionCode.Card functionCode, ClientCard card) + { + if (!CheckGodMode(card)) return ClientErrorReturn(false); + BinaryWriter reply = GamePacketFactory.Create(CtosMessage.AiRequest); + DefaultCardFunctionWrite(functionCode, reply, card); + Connection.Send(reply, true); + DataReader dreader = GetDataReader(Data); + if (!CheckError(dreader)) return false; + byte result = dreader.Packet.ReadByte(); + Close(dreader); + return result == 1 ? true : false; + } + + private bool HandleDoubleCardToBool(FunctionCode.Card functionCode, ClientCard cardA, ClientCard cardB) + { + if (!CheckGodMode(cardA) || !CheckGodMode(cardB)) return ClientErrorReturn(false); + BinaryWriter reply = GamePacketFactory.Create(CtosMessage.AiRequest); + DefaultCardFunctionWrite(functionCode, reply, cardA); + WriteCard(reply,cardB); + Connection.Send(reply, true); + DataReader dreader = GetDataReader(Data); + if (!CheckError(dreader)) return false; + byte result = dreader.Packet.ReadByte(); + Close(dreader); + return result == 1 ? true : false; + } + + private ClientCard HandleCardToCard(FunctionCode.Card functionCode, ClientCard card) + { + ClientCard rcard = null; + if (!CheckGodMode(card)) return ClientErrorReturn(rcard); + BinaryWriter reply = GamePacketFactory.Create(CtosMessage.AiRequest); + DefaultCardFunctionWrite(functionCode, reply, card); + Connection.Send(reply, true); + DataReader dreader = GetDataReader(Data); + if (!CheckError(dreader)) return null; + ReadCard(dreader.Packet, rcard); + Close(dreader); + return rcard; + } + + private object HandleDuel(FunctionCode.Duel functionCode, params object[] parameters) + { + BinaryWriter reply = GamePacketFactory.Create(CtosMessage.AiRequest); + reply.Write((byte)FunctionCode.Type.Duel); + reply.Write((short)functionCode); + switch (functionCode) + { + case FunctionCode.Duel.GetLP: case FunctionCode.Duel.GetTurnCount: case FunctionCode.Duel.GetDrawCount: + case FunctionCode.Duel.GetBattleDamage: case FunctionCode.Duel.GetLinkedZone:case FunctionCode.Duel.GetBattleMonster: + case FunctionCode.Duel.GetRitualMaterial: case FunctionCode.Duel.IsPlayerCanAdditionalSummon: case FunctionCode.Duel.GetBattledCount: + { + int player = (int)parameters[0]; + reply.Write((byte)player); + } + break; + case FunctionCode.Duel.GetTurnPlayer: case FunctionCode.Duel.GetCurrentChain: case FunctionCode.Duel.GetCurrentPhase: + case FunctionCode.Duel.IsDamageCalculated: case FunctionCode.Duel.GetAttacker: case FunctionCode.Duel.GetAttackTarget: + case FunctionCode.Duel.CheckPhaseActivity: case FunctionCode.Duel.IsAbleToEnterBP: + break; + case FunctionCode.Duel.GetFlagEffect: case FunctionCode.Duel.GetFlagEffectLabel: case FunctionCode.Duel.GetDecktopGroup: + case FunctionCode.Duel.GetExtraTopGroup: case FunctionCode.Duel.GetFusionMaterial: case FunctionCode.Duel.IsPlayerAffectedByEffect: + case FunctionCode.Duel.IsPlayerCanDraw: case FunctionCode.Duel.IsPlayerCanDiscardDeck: case FunctionCode.Duel.IsPlayerCanDiscardDeckAsCost: + case FunctionCode.Duel.IsPlayerCanSpecialSummonCount: + { + int player = (int)parameters[0]; + int parameter = (int)parameters[1]; + reply.Write((byte)player); + reply.Write(parameter); + } + break; + case FunctionCode.Duel.GetReleaseGroup: + case FunctionCode.Duel.GetReleaseGroupCount: + { + int player = (int)parameters[0]; + bool parameter = (bool)parameters[1]; + int bparameter = parameter ? 1 : 0; + reply.Write((byte)player); + reply.Write((byte)bparameter); + } + break; + case FunctionCode.Duel.IsCanAddCounter: + { + int player = (int)parameters[0]; + int countertype = (int)parameters[1]; + int count = (int)parameters[2]; + ClientCard c = (ClientCard)parameters[3]; + reply.Write((byte)player); + if (countertype >= 0 && count >= 0 && c != null) + { + reply.Write((byte)1); + reply.Write(countertype); + reply.Write(count); + WriteCard(reply, c); + } + else + { + reply.Write((byte)0); + } + } + break; + case FunctionCode.Duel.IsCanRemoveCounter: + { + int player = (int)parameters[0]; + int s = (int)parameters[1]; + int o = (int)parameters[2]; + int countertype = (int)parameters[3]; + int count = (int)parameters[4]; + int reason = (int)parameters[5]; + reply.Write((byte)player); + reply.Write(s); + reply.Write(o); + reply.Write(countertype); + reply.Write(count); + reply.Write(reason); + } + break; + case FunctionCode.Duel.GetCounter: + { + int player = (int)parameters[0]; + int s = (int)parameters[1]; + int o = (int)parameters[2]; + int countertype = (int)parameters[3]; + reply.Write((byte)player); + reply.Write(s); + reply.Write(o); + reply.Write(countertype); + } + break; + case FunctionCode.Duel.IsEnvironment: + { + int code = (int)parameters[0]; + int player = (int)parameters[1]; + int loc = (int)parameters[2]; + reply.Write(code); + reply.Write((byte)player); + reply.Write(loc); + } + break; + case FunctionCode.Duel.CheckLPCost: + { + int player = (int)parameters[0]; + int cost = (int)parameters[1]; + reply.Write((byte)player); + reply.Write(cost); + } + break; + case FunctionCode.Duel.CheckSummonedCount: + case FunctionCode.Duel.GetTributeGroup: + { + ClientCard c = (ClientCard)parameters[0]; + WriteCard(reply, c); + } + break; + case FunctionCode.Duel.GetLocationCount: + { + int player = (int)parameters[0]; + int location = (int)parameters[1]; + int use_player = (int)parameters[2]; + int reason = (int)parameters[3]; + int zone = (int)parameters[4]; + reply.Write((byte)player); + reply.Write(location); + reply.Write((byte)use_player); + reply.Write(reason); + reply.Write(zone); + } + break; + case FunctionCode.Duel.GetUsableMZoneCount: + { + int player = (int)parameters[0]; + int use_player = (int)parameters[1]; + reply.Write((byte)player); + reply.Write((byte)use_player); + } + break; + case FunctionCode.Duel.GetLinkedGroup: case FunctionCode.Duel.GetLinkedGroupCount: case FunctionCode.Duel.GetFieldCard: + case FunctionCode.Duel.CheckLocation: case FunctionCode.Duel.GetFieldGroup: case FunctionCode.Duel.GetFieldGroupCount: + case FunctionCode.Duel.GetOverlayGroup: case FunctionCode.Duel.GetOverlayCount: + { + int player = (int)parameters[0]; + int parameter1 = (int)parameters[1]; + int parameter2 = (int)parameters[1]; + reply.Write((byte)player); + reply.Write(parameter1); + reply.Write(parameter2); + } + break; + case FunctionCode.Duel.CheckRemoveOverlayCard: + { + int player = (int)parameters[0]; + int s = (int)parameters[1]; + int o = (int)parameters[2]; + int count = (int)parameters[3]; + int reason = (int)parameters[4]; + reply.Write((byte)player); + reply.Write(s); + reply.Write(o); + reply.Write(count); + reply.Write(reason); + } + break; + case FunctionCode.Duel.IsPlayerCanSummon: + case FunctionCode.Duel.IsPlayerCanMSet: + { + int player = (int)parameters[0]; + int sumtype = (int)parameters[1]; + ClientCard c = (ClientCard)parameters[2]; + reply.Write((byte)player); + reply.Write(sumtype); + WriteCard(reply, c); + } + break; + case FunctionCode.Duel.IsPlayerCanSSet: + case FunctionCode.Duel.IsPlayerCanRelease: + case FunctionCode.Duel.IsPlayerCanSendtoHand: + case FunctionCode.Duel.IsPlayerCanSendtoGrave: + case FunctionCode.Duel.IsPlayerCanSendtoDeck: + { + int player = (int)parameters[0]; + ClientCard c = (ClientCard)parameters[1]; + reply.Write((byte)player); + WriteCard(reply, c); + } + break; + case FunctionCode.Duel.IsPlayerCanSpecialSummon: + { + int player = (int)parameters[0]; + int sumtype = (int)parameters[1]; + int sumpos = (int)parameters[2]; + int target_player = (int)parameters[3]; + ClientCard c = (ClientCard)parameters[4]; + reply.Write((byte)player); + reply.Write(sumtype); + reply.Write(sumpos); + reply.Write((byte)target_player); + WriteCard(reply, c); + } + break; + case FunctionCode.Duel.IsPlayerCanSpecialSummonMonster: + { + Action WriteIntOrNull = (binaryWriter, value) => + { + if (value != null) + { + binaryWriter.Write((byte)1); + binaryWriter.Write((int)value); + } + else reply.Write((byte)0); + }; + int player = (int)parameters[0]; + int code = (int)parameters[1]; + int? setcode = (int?)parameters[2]; + int? type = (int?)parameters[3]; + int? atk = (int?)parameters[4]; + int? def = (int?)parameters[5]; + int? level = (int?)parameters[6]; + int? race = (int?)parameters[7]; + int? attribute = (int?)parameters[8]; + int pos = (int)parameters[9]; + int target_player = (int)parameters[10]; + int sumtype = (int)parameters[11]; + reply.Write((byte)player); + reply.Write(code); + WriteIntOrNull(reply, setcode); + WriteIntOrNull(reply, type); + WriteIntOrNull(reply, atk); + WriteIntOrNull(reply, def); + WriteIntOrNull(reply, level); + WriteIntOrNull(reply, race); + WriteIntOrNull(reply, attribute); + reply.Write(pos); + reply.Write((byte)target_player); + reply.Write(sumtype); + } + break; + case FunctionCode.Duel.IsPlayerCanRemove: + { + int player = (int)parameters[0]; + ClientCard c = (ClientCard)parameters[1]; + int reason = (int)parameters[2]; + reply.Write((byte)player); + WriteCard(reply, c); + reply.Write(reason); + } + break; + default: + return null; + } + Connection.Send(reply, true); + DataReader dreader = GetDataReader(Data); + if (!CheckError(dreader)) return null; + switch (functionCode) + { + case FunctionCode.Duel.GetLP: case FunctionCode.Duel.GetTurnCount: case FunctionCode.Duel.GetDrawCount: + case FunctionCode.Duel.GetTurnPlayer:case FunctionCode.Duel.GetFlagEffect: case FunctionCode.Duel.GetCounter: + case FunctionCode.Duel.GetBattleDamage: case FunctionCode.Duel.GetLocationCount: case FunctionCode.Duel.GetUsableMZoneCount: + case FunctionCode.Duel.GetLinkedGroupCount: case FunctionCode.Duel.GetLinkedZone: case FunctionCode.Duel.GetCurrentChain: + case FunctionCode.Duel.GetCurrentPhase: case FunctionCode.Duel.GetReleaseGroupCount: case FunctionCode.Duel.GetFieldGroupCount: + case FunctionCode.Duel.GetOverlayCount: case FunctionCode.Duel.GetBattledCount: + { + int result = dreader.Packet.ReadInt32(); + Close(dreader); + return result; + } + case FunctionCode.Duel.GetFlagEffectLabel: + { + IList results = new List(); + int count = dreader.Packet.ReadInt32(); + for (int i = 0; i < count; ++i) + { + results.Add(dreader.Packet.ReadInt32()); + } + Close(dreader); + return results; + } + case FunctionCode.Duel.IsCanAddCounter: case FunctionCode.Duel.IsCanRemoveCounter:case FunctionCode.Duel.IsEnvironment: + case FunctionCode.Duel.CheckLPCost: case FunctionCode.Duel.CheckSummonedCount: case FunctionCode.Duel.CheckLocation: + case FunctionCode.Duel.IsDamageCalculated: case FunctionCode.Duel.CheckRemoveOverlayCard: case FunctionCode.Duel.IsPlayerAffectedByEffect: + case FunctionCode.Duel.IsPlayerCanDraw: case FunctionCode.Duel.IsPlayerCanDiscardDeck: case FunctionCode.Duel.IsPlayerCanDiscardDeckAsCost: + case FunctionCode.Duel.IsPlayerCanSummon: case FunctionCode.Duel.IsPlayerCanMSet: case FunctionCode.Duel.IsPlayerCanSSet: + case FunctionCode.Duel.IsPlayerCanSpecialSummon: case FunctionCode.Duel.IsPlayerCanSpecialSummonMonster: case FunctionCode.Duel.IsPlayerCanSpecialSummonCount: + case FunctionCode.Duel.IsPlayerCanRelease: case FunctionCode.Duel.IsPlayerCanSendtoHand: case FunctionCode.Duel.IsPlayerCanSendtoGrave: + case FunctionCode.Duel.IsPlayerCanSendtoDeck: case FunctionCode.Duel.IsPlayerCanRemove: case FunctionCode.Duel.IsPlayerCanAdditionalSummon: + case FunctionCode.Duel.CheckPhaseActivity: case FunctionCode.Duel.IsAbleToEnterBP: + { + byte result = dreader.Packet.ReadByte(); + Close(dreader); + return result == 1 ? true : false; + } + case FunctionCode.Duel.GetLinkedGroup: case FunctionCode.Duel.GetDecktopGroup: case FunctionCode.Duel.GetExtraTopGroup: + case FunctionCode.Duel.GetReleaseGroup: case FunctionCode.Duel.GetTributeGroup: case FunctionCode.Duel.GetRitualMaterial: + case FunctionCode.Duel.GetFieldGroup: case FunctionCode.Duel.GetOverlayGroup: + { + IList results = new List(); + ReadGroup(dreader.Packet, results); + Close(dreader); + return results; + } + case FunctionCode.Duel.GetBattleMonster: + { + IList results = new List(); + ClientCard rcard = null; + byte not_null = dreader.Packet.ReadByte(); + if (not_null == 1) + { + ReadCard(dreader.Packet, rcard); + results.Add(rcard); + ReadCard(dreader.Packet, rcard); + results.Add(rcard); + Close(dreader); + return results; + } + else + { + Close(dreader); + return null; + } + } + case FunctionCode.Duel.GetFieldCard: case FunctionCode.Duel.GetAttacker: case FunctionCode.Duel.GetAttackTarget: + { + ClientCard rcard = null; + ReadCard(dreader.Packet, rcard); + Close(dreader); + return rcard; + } + case FunctionCode.Duel.GetFusionMaterial: + { + IList> results = new List>(); + results.Add(new List()); + results.Add(new List()); + ReadGroup(dreader.Packet, results[0]); + ReadGroup(dreader.Packet, results[1]); + Close(dreader); + return results; + } + default: + return null; + } + } + + private object HandleCardSpecial(FunctionCode.Card functionCode, ClientCard card, params object[] parameters) + { + if (!CheckGodMode(card)) return ClientErrorReturn(card); + BinaryWriter reply = GamePacketFactory.Create(CtosMessage.AiRequest); + DefaultCardFunctionWrite(functionCode, reply, card); + switch (functionCode) + { + case FunctionCode.Card.IsSummonable: + case FunctionCode.Card.IsMSetable: + { + byte ignore_count = (bool)parameters[0] ? (byte)1 : (byte)0; + int minc = (int)parameters[1]; + int zone = (int)parameters[2]; + reply.Write(ignore_count); + reply.Write(minc); + reply.Write(zone); + } + break; + case FunctionCode.Card.IsXyzSummonable: + { + int minc = (int)parameters[0]; + int maxc = (int)parameters[1]; + reply.Write(minc); + reply.Write(maxc); + } + break; + case FunctionCode.Card.IsHasEffect: + { + int code = (int)parameters[0]; + int check_player = (int)parameters[1]; + reply.Write(code); + reply.Write((byte)check_player); + } + break; + case FunctionCode.Card.IsLinkSummonable: + { + ClientCard lcard = (ClientCard)parameters[0]; + int minc = (int)parameters[1]; + int maxc = (int)parameters[2]; + WriteCard(reply, lcard); + reply.Write(minc); + reply.Write(maxc); + } + break; + case FunctionCode.Card.GetFlagEffectLabel: + { + int code = (int)parameters[0]; + reply.Write(code); + } + break; + case FunctionCode.Card.GetColumnZone: + { + int location = (int)parameters[0]; + int player = (int)parameters[1]; + reply.Write(location); + reply.Write(player); + } + break; + case FunctionCode.Card.GetOverlayGroup: + case FunctionCode.Card.GetAttackableTarget: + break; + case FunctionCode.Card.CheckRemoveOverlayCard: + { + int player = (int)parameters[0]; + int count = (int)parameters[1]; + int reason = (int)parameters[2]; + reply.Write((byte)player); + reply.Write(count); + reply.Write(reason); + } + break; + case FunctionCode.Card.IsXyzLevel: + { + ClientCard xyzc = (ClientCard)parameters[0]; + if (!CheckGodMode(xyzc)) return null; + int lv = (int)parameters[1]; + WriteCard(reply,xyzc); + reply.Write(lv); + } + break; + case FunctionCode.Card.IsSSetable: + { + bool ignore_field = (bool)parameters[0]; + int b_ignore_field = ignore_field ? 1 : 0; + reply.Write((byte)b_ignore_field); + } + break; + case FunctionCode.Card.IsAbleToRemove: + { + int player = (int)parameters[0]; + int pos = (int)parameters[1]; + int reason = (int)parameters[2]; + reply.Write((byte)player); + reply.Write(pos); + reply.Write(reason); + } + break; + case FunctionCode.Card.IsChainAttackable: + { + int ac = (int)parameters[0]; + bool monsteronly = (bool)parameters[1]; + int bmonsteronly = monsteronly ? 1 : 0; + reply.Write(ac); + reply.Write((byte)bmonsteronly); + } + break; + case FunctionCode.Card.IsControlerCanBeChanged: + { + bool ignore_mzone = (bool)parameters[0]; + int zone = (int)parameters[1]; + int bignore_mzone = ignore_mzone ? 1 : 0; + reply.Write((byte)bignore_mzone); + reply.Write(zone); + } + break; + case FunctionCode.Card.IsCanAddCounter: + { + int countertype = (int)parameters[0]; + int count = (int)parameters[1]; + bool singly = (bool)parameters[2]; + int location = (int)parameters[3]; + int bsingly = singly ? 1 : 0; + reply.Write(countertype); + reply.Write(count); + reply.Write((byte)bsingly); + reply.Write(location); + } + break; + case FunctionCode.Card.IsCanRemoveCounter: + { + int player = (int)parameters[0]; + int countertype = (int)parameters[1]; + int count = (int)parameters[2]; + int reason = (int)parameters[3]; + reply.Write((byte)player); + reply.Write(countertype); + reply.Write(count); + reply.Write(reason); + } + break; + case FunctionCode.Card.IsCanBeFusionMaterial: + { + ClientCard fc = (ClientCard)parameters[0]; + int summon_type = (int)parameters[1]; + WriteCard(reply, fc); + reply.Write(summon_type); + } + break; + case FunctionCode.Card.IsCanBeSynchroMaterial: + { + ClientCard fc = (ClientCard)parameters[0]; + ClientCard tuner = (ClientCard)parameters[1]; + WriteCard(reply, fc); + WriteCard(reply, tuner); + } + break; + case FunctionCode.Card.IsCanBeRitualMaterial: + case FunctionCode.Card.IsCanBeXyzMaterial: + case FunctionCode.Card.IsCanBeLinkMaterial: + { + ClientCard sc = (ClientCard)parameters[0]; + WriteCard(reply, sc); + } + break; + case FunctionCode.Card.CheckUniqueOnField: + { + int check_player = (int)parameters[0]; + int check_location = (int)parameters[1]; + ClientCard icard = (ClientCard)parameters[2]; + reply.Write((byte)check_player); + reply.Write(check_location); + WriteCard(reply, icard); + } + break; + default: + return null; + } + Connection.Send(reply, true); + DataReader dreader = GetDataReader(Data); + if (!CheckError(dreader)) return null; + switch (functionCode) + { + case FunctionCode.Card.IsSummonable:case FunctionCode.Card.IsMSetable: case FunctionCode.Card.IsXyzSummonable: + case FunctionCode.Card.IsLinkSummonable: case FunctionCode.Card.CheckRemoveOverlayCard: case FunctionCode.Card.IsXyzLevel: + case FunctionCode.Card.IsHasEffect: case FunctionCode.Card.IsSSetable: case FunctionCode.Card.IsAbleToRemove: + case FunctionCode.Card.IsChainAttackable: case FunctionCode.Card.IsControlerCanBeChanged: case FunctionCode.Card.IsCanAddCounter: + case FunctionCode.Card.IsCanRemoveCounter: case FunctionCode.Card.IsCanBeFusionMaterial: case FunctionCode.Card.IsCanBeSynchroMaterial: + case FunctionCode.Card.IsCanBeRitualMaterial: case FunctionCode.Card.IsCanBeXyzMaterial: case FunctionCode.Card.IsCanBeLinkMaterial: + case FunctionCode.Card.CheckUniqueOnField: + { + byte result = dreader.Packet.ReadByte(); + Close(dreader); + return result == 1 ? true : false; + } + case FunctionCode.Card.GetFlagEffectLabel: + { + IList results = new List(); + int count = dreader.Packet.ReadInt32(); + for (int i = 0; i < count; ++i) + { + results.Add(dreader.Packet.ReadInt32()); + } + Close(dreader); + return results; + } + case FunctionCode.Card.GetColumnZone: + { + int result = dreader.Packet.ReadInt32(); + Close(dreader); + return result; + } + case FunctionCode.Card.GetOverlayGroup: + { + IList cards = new List(); + int count = dreader.Packet.ReadInt32(); + int id; + int player; + int loc; + int seq; + ClientCard rcard; + for (int i = 0; i < count; ++i) + { + id = dreader.Packet.ReadInt32(); + player = Duel.GetLocalPlayer(dreader.Packet.ReadByte()); + if (player < 0 || player > 1) + { + player = GetControler(card); + } + loc = dreader.Packet.ReadInt32(); + seq = dreader.Packet.ReadInt32(); + rcard = Duel.GetCard(player, (int)((CardLocation)loc|CardLocation.MonsterZone), card.Sequence, seq); + UpdateCardByCore(rcard, id, player, loc, seq); + cards.Add(rcard); + } + Close(dreader); + return cards; + } + case FunctionCode.Card.GetAttackableTarget: + { + object[] results = new object[2]; + IList cards = new List(); + results[0] = dreader.Packet.ReadByte(); + int count = dreader.Packet.ReadInt32(); + ClientCard rcard = null; + for (int i = 0; i < count; ++i) + { + ReadCard(dreader.Packet, rcard); + cards.Add(rcard); + } + Close(dreader); + results[1] = cards; + return results; + } + default: + return null; + } + } + + private int? HandleDoubleCardToInt(FunctionCode.Card functionCode, ClientCard cardA, ClientCard cardB) + { + if (!CheckGodMode(cardA) || !CheckGodMode(cardB)) return ClientErrorReturn((int?)null); ; + BinaryWriter reply = GamePacketFactory.Create(CtosMessage.AiRequest); + DefaultCardFunctionWrite(functionCode, reply, cardA); + WriteCard(reply, cardB); + Connection.Send(reply, true); + DataReader dreader = GetDataReader(Data); + if (!CheckError(dreader)) return null; + int result = dreader.Packet.ReadInt32(); + Close(dreader); + return result; + } + + private int? HandleCardIntToInt(FunctionCode.Card functionCode, ClientCard card, int parameter) + { + if (!CheckGodMode(card)) return ClientErrorReturn((int?)null); ; + BinaryWriter reply = GamePacketFactory.Create(CtosMessage.AiRequest); + DefaultCardFunctionWrite(functionCode, reply, card); + reply.Write(parameter); + Connection.Send(reply, true); + DataReader dreader = GetDataReader(Data); + if (!CheckError(dreader)) return null; + int result = dreader.Packet.ReadInt32(); + Close(dreader); + return result; + } + + private IList HandleCardToGroup(FunctionCode.Card functionCode, ClientCard card) + { + IList cards = new List(); + if (!CheckGodMode(card)) return ClientErrorReturn(cards); ; + BinaryWriter reply = GamePacketFactory.Create(CtosMessage.AiRequest); + DefaultCardFunctionWrite(functionCode, reply, card); + Connection.Send(reply, true); + DataReader dreader = GetDataReader(Data); + if (!CheckError(dreader)) return cards; + ReadGroup(dreader.Packet, cards); + Close(dreader); + return cards; + } + + //=================== Card =================== + + /// + /// Returns the current codename for card (possibly because the effect changes) + /// 返回卡片 c 的当前卡号(可能因为效果改变) + /// + public IList GetCode(ClientCard c) + { + return HandleCardToDoubleInt(FunctionCode.Card.GetCode, c); + } + + /// + /// Returns the codename on the c rule (used as a card rule on this card) + /// 返回卡片 c 规则上的代号(这张卡规则上当作XXX使用) + /// + public IList GetOriginalCodeRule(ClientCard c) + { + return HandleCardToDoubleInt(FunctionCode.Card.GetOriginalCodeRule, c); + } + + /// + ///Returns the card number prior to the c position change + /// 返回卡片 c 位置变化之前在场上的卡号 + /// + public IList GetPreviousCodeOnField(ClientCard c) + { + return HandleCardToDoubleInt(FunctionCode.Card.GetPreviousCodeOnField, c); + } + + /// + /// Returns the number of ally cards for the current device + /// 返回卡片 c 当前装备的同盟卡数量,第二个返回值是 旧同盟 的数量 + /// + public IList GetUnionCount(ClientCard c) + { + return HandleCardToDoubleInt(FunctionCode.Card.GetUnionCount, c); + } + + /// + /// Returns the minimum and maximum number of sacrifices required to normally call c + /// 返回通常召唤卡片 c 所需要的祭品的最小和最大数量 + /// + public IList GetTributeRequirement(ClientCard c) + { + return HandleCardToDoubleInt(FunctionCode.Card.GetTributeRequirement, c); + } + + + /// + /// Returns the code number of the card in c + /// 返回卡片 c 的卡片记载的卡号 + /// + public int GetOriginalCode(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetOriginalCode, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the Type property + /// 返回卡片 c 的当前类型 + /// + public int GetType(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetType, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the type of card entry for c + /// 返回卡片 c 的卡片记载的类型 + /// + public int GetOriginalType(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetOriginalType, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// 返回卡片 c 用作融合素材时的类型(与GetType的区别在于对于魔陷区的怪兽卡,返回其原本类型 + /// + public int GetFusionType(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetFusionType, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// 返回卡片 c 用作同调素材时的类型(与GetType的区别在于对于魔陷区的怪兽卡,返回其原本类型) + /// + public int GetSynchroType(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetSynchroType, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// 返回卡片 c 用作同调素材时的类型(与GetType的区别在于对于魔陷区的怪兽卡,返回其原本类型) + /// + public int GetXyzType(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetXyzType, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// 返回卡片 c 用作连接素材时的类型(与GetType的区别在于对于魔陷区的怪兽卡,返回其原本类型) + /// + public int GetLinkType(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetLinkType, c); + if (result == null) return 0; + return (int)result; + } + + /// + ///Returns the current level of c + /// 返回卡片 c 的当前等级 + /// + public int GetLevel(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetLevel, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the current class of c + /// 返回卡片 c 的当前阶级 + /// + public int GetRank(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetRank, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// 返回卡片 c 的连接标记数量 + /// + public int GetLink(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetLink, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the rank of the card in c + /// 返回卡片 c 的卡片记载的等级 + /// + public int GetOriginalLevel(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetOriginalLevel, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the class of the card in c + /// 返回卡片 c 的卡片记载的阶级 + /// + public int GetOriginalRank(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetOriginalRank, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the left-hand pendulum scale of c + /// 返回卡片 c 的左灵摆刻度 + /// + public int GetLeftScale(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetLeftScale, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the original left-hand pendulum scale of c + /// 返回卡片 c 的原本的左灵摆刻度 + /// + public int GetOriginalLeftScale(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetOriginalLeftScale, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the right-hand pendulum scale of c + /// 返回卡片 c 的右灵摆刻度 + /// + public int GetRightScale(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetRightScale, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the original right pendulum scale of c + /// 返回卡片 c 的原本的右灵摆刻度 + /// + public int GetOriginalRightScale(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetOriginalRightScale, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// 返回卡片 c 的当前灵摆刻度若 c 在左侧的灵摆区,则返回左灵摆刻度;否则返回右灵摆刻度 + /// + public int GetCurrentScale(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetCurrentScale, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// 返回卡片 c 的连接区的卡片组的卡的数量(目前只限怪兽区) + /// + public int GetLinkedGroupCount(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetLinkedGroupCount, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// 返回和卡片 c 互相连接状态的卡片组的数量 + /// + public int GetMutualLinkedGroupCount(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetMutualLinkedGroupCount, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// 返回与卡片 c 同一纵列的 c 以外的卡片的数量 + /// + public int GetColumnGroupCount(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetColumnGroupCount, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the current attribute of c + /// 返回卡片 c 的当前属性 注:对某些多属性怪兽如光与暗之龙,此函数的返回值可能是几个属性的组合值 + /// + public int GetAttribute(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetAttribute, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the attributes of the card that c is describing + /// 返回卡片 c 的卡片记载的属性 + /// + public int GetOriginalAttribute(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetOriginalAttribute, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the current race of c + /// 返回卡片 c 的当前种族 注:对某些多种族怪兽如动画效果的魔术猿,此函数的返回值可能是几个种族的组合值 + /// + public int GetRace(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetRace, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the c of the card record race + /// 返回卡片 c 的卡片记载的种族 + /// + public int GetOriginalRace(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetOriginalRace, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Return the current attack power of c, the return value is a negative that is "?" + /// 返回卡片 c 的当前攻击力 + /// + public int GetAttack(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetAttack, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Return the original attack power of c + /// 返回卡片 c 的原本攻击力 + /// + public int GetBaseAttack(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetBaseAttack, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the attack power recorded on card c + /// 返回卡片 c 的卡片记载的攻击力,返回值是负数表示是"?" + /// + public int GetTextAttack(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetTextAttack, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Return to the original c of the defense + /// Returns the current defense of c, the return value is negative that is "?" + /// + public int GetDefense(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetDefense, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Return to the original c of the defense + /// 返回卡片 c 的原本守备力 + /// + public int GetBaseDefense(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetBaseDefense, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Return the c 's card record of the garrison + /// 返回卡片 c 的卡片记载的守备力,返回值是负数表示是"?" + /// + public int GetTextDefense(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetTextDefense, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the type before the c position change + /// 返回卡片 c 位置变化之前在场上的类型 + /// + public int GetPreviousTypeOnField(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetPreviousTypeOnField, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the rank before the c position change + /// 返回卡片 c 位置变化之前在场上的等级 + /// + public int GetPreviousLevelOnField(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetPreviousLevelOnField, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the class before the c position changes + /// 返回卡片 c 位置变化之前在场上的阶级 + /// + public int GetPreviousRankOnField(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetPreviousRankOnField, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the attribute before the c position change + /// 返回卡片 c 位置变化之前在场上的属性 + /// + public int GetPreviousAttributeOnField(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetPreviousAttributeOnField, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the attribute before the c position change + /// 返回卡片 c 位置变化之前在场上的种族 + /// + public int GetPreviousRaceOnField(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetPreviousRaceOnField, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the attack power before the c position changes + /// 返回卡片 c 位置变化之前在场上的攻击力 + /// + public int GetPreviousAttackOnField(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetPreviousAttackOnField, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the defensive power before the c position changes + /// 返回卡片 c 位置变化之前在场上的守备力 + /// + public int GetPreviousDefenseOnField(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetPreviousDefenseOnField, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the holder of c + /// 返回卡片 c 的持有者 + /// + public int GetOwner(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetOwner, c); + if (result == null) return PLAYER_NONE; + return (int)result; + } + + /// + /// Returns the current controller of c + /// 返回卡片 c 的当前控制者 + /// + public int GetControler(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetControler, c); + if (result == null) return PLAYER_NONE; + return (int)result; + } + + /// + /// Returns the controller before the position change of c + /// 返回卡片 c 的位置变化之前的控制者 + /// + public int GetPreviousControler(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetPreviousControler, c); + if (result == null) return PLAYER_NONE; + return (int)result; + } + + /// + /// Returns the position change reason for c + /// 返回卡片 c 的位置变化原因 + /// + public int GetReason(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetReason, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the player that caused the position of c to change + /// 返回导致卡片 c 的位置变化的玩家 + /// + public int GetReasonPlayer(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetReasonPlayer, c); + if (result == null) return PLAYER_NONE; + return (int)result; + } + + /// + /// Returns the current representation of c + /// 返回卡片 c 当前的表示形式 + /// + public int GetPosition(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetPosition, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the representation of the position before the c position changes + /// 返回卡片 c 位置变化前的表示形式 + /// + public int GetPreviousPosition(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetPreviousPosition, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the representation of c before this battle occurs + /// 返回卡片 c 在本次战斗发生之前的表示形式 + /// + public int GetBattlePosition(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetBattlePosition, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the current position of c + /// 返回卡片 c 当前的所在位置 + /// + public int GetLocation(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetLocation, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the position before the c position changes + /// 返回卡片 c 位置变化前的所在的位置 + /// + public int GetPreviousLocation(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetPreviousLocation, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the serial number of the current position + /// 返回卡片 c 在当前位置的序号 在场上时,序号代表所在的格子,从左往右分别是0-4,5-6,场地魔法格的序号为5,左右灵摆区域为6-7在其它地方时,序号表示的是第几张卡,最下面的卡的序号为0 + /// + public int GetSequence(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetSequence, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the call / special call of c + /// 返回卡片 c 的召唤/特殊召唤的方式 + /// + public int GetSummonType(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetSummonType, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the call position of c + /// 返回卡片 c 的召唤/特殊召唤的位置 + /// + public int GetSummonLocation(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetSummonLocation, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Return to Summoner / Special Summoner c Players + /// 返回召唤/特殊召唤 c 上场的玩家 + /// + public int GetSummonPlayer(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetSummonPlayer, c); + if (result == null) return PLAYER_NONE; + return (int)result; + } + + /// + /// Returns the destination of the c position change + /// 返回卡片 c 位置变化的目的地此函数仅在处理位置转移代替效果时有效 + /// + public int GetDestination(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetDestination, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Returns the destination of an effect (such as the universe) that was changed as a result of departure from c + /// 返回卡片 c 离场时因改变去向的效果(如大宇宙)的目的地 + /// + public int GetLeaveFieldDest(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetLeaveFieldDest, c); + if (result == null) return 0; + return (int)result; + } + + /// + /// Return c The round to the current position + /// 返回卡片 c 转移到当前位置的回合 + /// + public int GetTurnID(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetTurnID, c); + if (result == null) return -1; + return (int)result; + } + + /// + /// Returns the time stamp of the transition to the current position + /// 返回卡片 c 转移到当前位置的时间标识此数值唯一,越小表示c是越早出现在那个位置卡片从里侧翻开也会改变此数值 + /// + public int GetFieldID(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetFieldID, c); + if (result == null) return -1; + return (int)result; + } + + /// + /// Returns the actual timestamp for the c transition to the current position + /// 返回卡片 c 转移到当前位置的真实的时间标识卡片从里侧翻开不会改变此数值 + /// + public int GetRealFieldID(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetRealFieldID, c); + if (result == null) return -1; + return (int)result; + } + + /// + /// Returns the round counter for c + /// 返回卡片 c 的回合计数器 + /// + public int GetTurnCounter(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetTurnCounter, c); + if (result == null) return -1; + return (int)result; + } + + /// + /// Returns the amount of material used for c appearance + /// 返回卡片 c 出场使用的素材数量 + /// + public int GetMaterialCount(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetMaterialCount, c); + if (result == null) return -1; + return (int)result; + } + + /// + /// Returns the number of cards currently loaded + /// 返回卡片 c 当前装备着的卡片数量 + /// + public int GetEquipCount(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetEquipCount, c); + if (result == null) return -1; + return (int)result; + } + + /// + /// Returns the number of cards currently stacked + /// 返回卡片 c 当前叠放着的卡片数量 + /// + public int GetOverlayCount(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetOverlayCount, c); + if (result == null) return -1; + return (int)result; + } + + /// + /// Returns the number of cards that have been attacked this turn + /// 返回卡片 c 本回合攻击过的卡片数量 + /// + public int GetAttackedGroupCount(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetAttackedGroupCount, c); + if (result == null) return -1; + return (int)result; + } + + /// + /// Returns the number of times this round has been attacked + /// 返回卡片 c 本回合攻击过的次数 注:如果此值与 Card.GetAttackedGroupCount(c) 的返回值不同,那么说明卡片c本回合进行过直接攻击 + /// + public int GetAttackedCount(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetAttackedCount, c); + if (result == null) return -1; + return (int)result; + } + + /// + /// 返回卡片 c 本回合攻击宣言的次数 注:攻击被无效不会被计入攻击过的次数,但是会计入攻击宣言的次数 + /// + public int GetAttackAnnouncedCount(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetAttackAnnouncedCount, c); + if (result == null) return -1; + return (int)result; + } + + /// + /// Returns the number of current persistent objects + /// 返回卡片 c 当前的永续对象的数量 + /// + public int GetCardTargetCount(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetCardTargetCount, c); + if (result == null) return -1; + return (int)result; + } + + /// + /// Returns the number of cards that take c as the persistent object + /// 返回取卡片 c 作为永续对象的卡的数量 + /// + public int GetOwnerTargetCount(ClientCard c) + { + int? result = HandleCardToInt(FunctionCode.Card.GetOwnerTargetCount, c); + if (result == null) return -1; + return (int)result; + } + + /// + /// Return c as the fusion material when the card number (including the original c card number) + /// 返回卡片 c 作为融合素材时的卡号。第2个返回值开始是其他的卡号 + /// + public IList GetFusionCode(ClientCard c) + { + return HandleCardToIntEx(FunctionCode.Card.GetFusionCode, c); + } + + /// + /// 返回卡片 c 作为连接素材的卡号。第2个返回值开始是其他的卡号 + /// + public IList GetLinkCode(ClientCard c) + { + return HandleCardToIntEx(FunctionCode.Card.GetLinkCode, c); + } + + /// + /// Check the c as a fusion material can be used as the card number for the code card + /// 检查卡片 c 作为融合素材时能否当作卡号为 code 的卡,额外参数是其他 code + /// + public bool IsFusionCode(ClientCard c,int code, params int[] ex_code) + { + return HandleCardIntIntExToBool(FunctionCode.Card.IsFusionCode, c, code, ex_code); + } + + /// + /// 检查卡片 c 作为连接素材时能否当作卡号为 code 的卡,额外参数是其他 code + /// + public bool IsLinkCode(ClientCard c, int code, params int[] ex_code) + { + return HandleCardIntIntExToBool(FunctionCode.Card.IsLinkCode, c, code, ex_code); + } + + /// + /// Check whether c is a card with the name setname + /// 检查卡片 c 是否是卡名含有 setname 的卡(也就是字段),额外参数是其他 setname + /// + public bool IsSetCard(ClientCard c, int setcode, params int[] ex_setcode) + { + return HandleCardIntIntExToBool(FunctionCode.Card.IsSetCard, c, setcode, ex_setcode); + } + + /// + /// 检查卡片 c 是否是原本卡名含有 setname 的卡(也就是字段) + /// + public bool IsOriginalSetCard(ClientCard c, int setcode, params int[] ex_setcode) + { + return HandleCardIntIntExToBool(FunctionCode.Card.IsOriginalSetCard, c, setcode, ex_setcode); + } + + /// + /// Check whether the name c contains a setname before the c position changes + /// 检查卡片 c 位置变化之前是否是名字含有 setname 的卡(也就是字段) + /// + public bool IsPreviousSetCard(ClientCard c, int setcode, params int[] ex_setcode) + { + return HandleCardIntIntExToBool(FunctionCode.Card.IsPreviousSetCard, c, setcode, ex_setcode); + } + + /// + /// Check the c as a fusion material can be used as a name setname card + /// 检查卡片 c 作为融合素材时能否当作名字含有 setname 的卡(也就是字段) + /// + public bool IsFusionSetCard(ClientCard c, int setcode, params int[] ex_setcode) + { + return HandleCardIntIntExToBool(FunctionCode.Card.IsFusionSetCard, c, setcode, ex_setcode); + } + + /// ) + /// 检查卡片 c 作为连接素材时能否当作名字含有 setname 的卡(也就是字段) + /// + public bool IsLinkSetCard(ClientCard c, int setcode, params int[] ex_setcode) + { + return HandleCardIntIntExToBool(FunctionCode.Card.IsLinkSetCard, c, setcode, ex_setcode); + } + + /// + /// 检查卡片 c 的卡号是否规则上(就是CDB里显示的卡密)是 code1[, 或者为 code2...] + /// + public bool IsOriginalCodeRule(ClientCard c, int code, params int[] ex_code) + { + return HandleCardIntIntExToBool(FunctionCode.Card.IsOriginalCodeRule, c, code, ex_code); + } + + /// + /// Check whether the card number c is code1 [, or code2 ...] + /// 检查卡片 c 的卡号是否是 code1[, 或者为 code2...] + /// + public bool IsCode(ClientCard c, int code, params int[] ex_code) + { + return HandleCardIntIntExToBool(FunctionCode.Card.IsCode, c, code, ex_code); + } + + /// + /// 检查卡片 c 是否是等级 level1[, 或者为 level2...] + /// + public bool IsLevel(ClientCard c, int level, params int[] ex_level) + { + return HandleCardIntIntExToBool(FunctionCode.Card.IsLevel, c, level, ex_level); + } + + /// + /// 检查卡片 c 是否是阶级 rank1[, 或者为 rank2...] + /// + public bool IsRank(ClientCard c, int rank, params int[] ex_rank) + { + return HandleCardIntIntExToBool(FunctionCode.Card.IsRank, c, rank, ex_rank); + } + + /// + /// 检查卡片 c 的连接标记数量是否是 link1[, 或者为 link2...] + /// + public bool IsLink(ClientCard c, int link, params int[] ex_link) + { + return HandleCardIntIntExToBool(FunctionCode.Card.IsLink, c, link, ex_link); + } + + /// + /// 检查卡片 c 的攻击力是否是 atk1[, 或者为 atk2...],如果c不是怪兽卡,或者不在 LOCATION_MZONE 则都返回false + /// + public bool IsAttack(ClientCard c, int attack, params int[] ex_attack) + { + return HandleCardIntIntExToBool(FunctionCode.Card.IsAttack, c, attack, ex_attack); + } + + /// + /// 检查卡片 c 的守备力是否是 def1[, 或者为 def2...],如果c不是怪兽卡,或者不在 LOCATION_MZONE 则都返回false + /// + public bool IsDefense(ClientCard c, int defense, params int[] ex_defense) + { + return HandleCardIntIntExToBool(FunctionCode.Card.IsDefense, c, defense, ex_defense); + } + + /// + /// 检查卡片 c [由 player 连接召唤时]用作连接素材时是否属于种族 race + /// + public bool IsLinkRace(ClientCard c, int race, int player = PLAYER_NONE) + { + return HandleCardIntIntExToBool(FunctionCode.Card.IsLinkRace, c, race, player); + } + + /// + /// 检查卡片 c [由 player 融合召唤时]用作融合素材是否属于属性 attribute + /// + public bool IsFusionAttribute(ClientCard c, int attribute, int player = PLAYER_NONE) + { + return HandleCardIntIntExToBool(FunctionCode.Card.IsFusionAttribute, c, attribute, player); + } + + /// + /// 检查卡片 c [由 player 连接召唤时]用作连接素材是否属于属性 attribute + /// + public bool IsLinkAttribute(ClientCard c, int attribute, int player = PLAYER_NONE) + { + return HandleCardIntIntExToBool(FunctionCode.Card.IsLinkAttribute, c, attribute, player); + } + + /// + /// Return to the co-ordination of c with the call monster sc with the level + /// 返回卡片 c 的对于同调怪兽 sc 的同调用等级此函数除了某些特定卡如调节支援士,返回值与Card.GetLevel(c) 相同 + /// + public int GetSynchroLevel(ClientCard c, ClientCard sc) + { + int? result = HandleDoubleCardToInt(FunctionCode.Card.GetSynchroLevel, c, sc); + if (result == null) return -1; + return (int)result; + } + + /// + /// Returns the ritual liberation level for rc ritual monsters + /// 返回卡片 c 的对于仪式怪兽 rc 仪式解放等级此函数除了某些特定卡如仪式供物,返回值与Card.GetLevel(c) 相同 + /// + public int GetRitualLevel(ClientCard c, ClientCard sc) + { + int? result = HandleDoubleCardToInt(FunctionCode.Card.GetRitualLevel, c, sc); + if (result == null) return -1; + return (int)result; + } + + /// + /// 检查卡片 c 是否是连接标记为 dir 的卡 + /// + public bool IsLinkMarker(ClientCard c, int dir) + { + return HandleCardIntToBool(FunctionCode.Card.IsLinkMarker, c, dir); + } + + /// + /// Check if c is of type type + /// 检查卡片 c 是否属于类型 type + /// + public bool IsType(ClientCard c, int type) + { + return HandleCardIntToBool(FunctionCode.Card.IsType, c, type); + } + + /// + /// 检查卡片 c 用作融合素材时是否属于类型 type (与IsType的区别在于对于魔陷区的怪兽卡,用其原本类型作判断) + /// + public bool IsFusionType(ClientCard c, int type) + { + return HandleCardIntToBool(FunctionCode.Card.IsFusionType, c, type); + } + + /// + /// 检查卡片 c 用作同调素材时是否属于类型 type (与IsType的区别在于对于魔陷区的怪兽卡,用其原本类型作判断) + /// + public bool IsSynchroType(ClientCard c, int type) + { + return HandleCardIntToBool(FunctionCode.Card.IsSynchroType, c, type); + } + + /// + /// 检查卡片 c 用作超量素材时是否属于类型 type (与IsType的区别在于对于魔陷区的怪兽卡,用其原本类型作判断) + /// + public bool IsXyzType(ClientCard c, int type) + { + return HandleCardIntToBool(FunctionCode.Card.IsXyzType, c, type); + } + + /// + /// 检查卡片 c 用作连接素材时是否属于类型 type (与IsType的区别在于对于魔陷区的怪兽卡,用其原本类型作判断) + /// + public bool IsLinkType(ClientCard c, int type) + { + return HandleCardIntToBool(FunctionCode.Card.IsLinkType, c, type); + } + + /// + /// Check if c is race race + /// 检查卡片 c 是否属于种族 race + /// + public bool IsRace(ClientCard c, int race) + { + return HandleCardIntToBool(FunctionCode.Card.IsRace, c, race); + } + + /// + /// Check whether c belongs to attribute attribute + /// 检查卡片 c 是否属于属性 attribute + /// + public bool IsAttribute(ClientCard c, int attribute) + { + return HandleCardIntToBool(FunctionCode.Card.IsAttribute, c, attribute); + } + + /// + /// Check if c contains the reason + /// 检查卡片 c 是否包含原因 reason + /// + public bool IsReason(ClientCard c, int reason) + { + return HandleCardIntToBool(FunctionCode.Card.IsReason, c, reason); + } + + /// + /// 检查卡片 c 的召唤类型是否是 sumtype + /// + public bool IsSummonType(ClientCard c, int sumtype) + { + return HandleCardIntToBool(FunctionCode.Card.IsSummonType, c, sumtype); + } + + /// + /// 检查卡片 c 的召唤区域是否是 tloc + /// + public bool IsSummonLocation(ClientCard c, int tloc) + { + return HandleCardIntToBool(FunctionCode.Card.IsSummonLocation, c, tloc); + } + + /// + ///检查卡片 c 的召唤玩家是否是 sumplayer + /// + public bool IsSummonPlayer(ClientCard c, int sumplayer) + { + return HandleCardIntToBool(FunctionCode.Card.IsSummonPlayer, c, sumplayer); + } + + /// + /// Check whether c contains a status code + ///检查卡片 c 是否包含某个状态码 status + /// + public bool IsStatus(ClientCard c, int status) + { + return HandleCardIntToBool(FunctionCode.Card.IsStatus, c, status); + } + + /// + /// Check if c is linked to chained chainc + ///检查卡片 c 是否和连锁 chainc 有联系。 chainc==0 表示当前连锁 + /// + public bool IsRelateToChain(ClientCard c, int chainc) + { + //不随意调用 + return HandleCardIntToBool(FunctionCode.Card.IsRelateToChain, c, chainc); + } + + /// + /// Check whether c is the representation pos + ///检查卡片 c 是否是表示形式 pos + /// + public bool IsPosition(ClientCard c, int pos) + { + return HandleCardIntToBool(FunctionCode.Card.IsPosition, c, pos); + } + + /// + /// Check whether the c position before the change is represented by pos + ///检查卡片 c 位置变化之前是否是表示形式 pos + /// + public bool IsPreviousPosition(ClientCard c, int pos) + { + return HandleCardIntToBool(FunctionCode.Card.IsPreviousPosition, c, pos); + } + + /// + /// Check whether the current control of c is a controler + ///检查卡片 c 的当前控制着是否是 controler + /// + public bool IsControler(ClientCard c, int controler) + { + return HandleCardIntToBool(FunctionCode.Card.IsControler, c, controler); + } + + /// + ///检查卡片 c 的当前控制着是否是 controler + /// + public bool IsPreviousControler(ClientCard c, int controler) + { + return HandleCardIntToBool(FunctionCode.Card.IsPreviousControler, c, controler); + } + + /// + /// Check if c is the current location + ///检查卡片 c 当前位置是否是 location + /// + public bool IsLocation(ClientCard c, int location) + { + return HandleCardIntToBool(FunctionCode.Card.IsLocation, c, location); + } + + /// + /// Check if the location before c is location + ///检查卡片 c 之前的位置是否是 location + /// + public bool IsPreviousLocation(ClientCard c, int location) + { + return HandleCardIntToBool(FunctionCode.Card.IsPreviousLocation, c, location); + } + + /// + /// Check whether c is below the level level (at least 1) + ///检查卡片 c 是否是等级 level 以下(至少为1) + /// + public bool IsLevelBelow(ClientCard c, int level) + { + return HandleCardIntToBool(FunctionCode.Card.IsLevelBelow, c, level); + } + + /// + /// Check whether c is above level level + ///检查卡片 c 是否是等级 level 以上 + /// + public bool IsLevelAbove(ClientCard c, int level) + { + return HandleCardIntToBool(FunctionCode.Card.IsLevelAbove, c, level); + } + + /// + /// Check whether c is below the rank rank (at least 1) + ///检查卡片 c 是否是阶级 rank 以下(至少为1) + /// + public bool IsRankBelow(ClientCard c, int rank) + { + return HandleCardIntToBool(FunctionCode.Card.IsRankBelow, c, rank); + } + + /// + ///Check whether c is above the class rank + ///检查卡片 c 是否是阶级 rank 以上 + /// + public bool IsRankAbove(ClientCard c, int rank) + { + return HandleCardIntToBool(FunctionCode.Card.IsRankAbove, c, rank); + } + + /// + ///检查卡片 c 是否连接标记数量是 link 以下(至少为1) + /// + public bool IsLinkBelow(ClientCard c, int link) + { + return HandleCardIntToBool(FunctionCode.Card.IsLinkBelow, c, link); + } + + /// + ///检查卡片 c 是否连接标记数量是 link 以上 + /// + public bool IsLinkAbove(ClientCard c, int link) + { + return HandleCardIntToBool(FunctionCode.Card.IsLinkAbove, c, link); + } + + /// + /// Check whether c is attack power atk below (at least 0) + ///检查卡片 c 是否是攻击力 atk 以下(至少为0) + /// + public bool IsAttackBelow(ClientCard c, int atk) + { + return HandleCardIntToBool(FunctionCode.Card.IsAttackBelow, c, atk); + } + + /// + ///Check whether c is more than attack power atk + ///检查卡片 c 是否是攻击力 atk 以上 + /// + public bool IsAttackAbove(ClientCard c, int atk) + { + return HandleCardIntToBool(FunctionCode.Card.IsAttackAbove, c, atk); + } + + /// + /// Check whether c is defensive def below (at least 0) + ///检查卡片 c 是否是守备力 def 以下(至少为0) + /// + public bool IsDefenseBelow(ClientCard c, int def) + { + return HandleCardIntToBool(FunctionCode.Card.IsDefenseBelow, c, def); + } + + /// + ///Check c is defensive def above + ///检查卡片 c 是否是守备力 def 以上 + /// + public bool IsDefenseAbove(ClientCard c, int def) + { + return HandleCardIntToBool(FunctionCode.Card.IsDefenseAbove, c, def); + } + + /// + ///检查卡片 c 是否可以放置 countertype 类型的指示物 + /// + public bool IsCanHaveCounter(ClientCard c, int countertype) + { + return HandleCardIntToBool(FunctionCode.Card.IsDefenseAbove, c, countertype); + } + + /// + ///检查卡片 c 是否是可[用 sum_type 方式]融合召唤的卡 + /// + public bool IsFusionSummonableCard(ClientCard c, int sum_type = 0) + { + return HandleCardIntToBool(FunctionCode.Card.IsFusionSummonableCard, c, sum_type); + } + + /// + /// Check if you can make a special call to c + ///检查是否可以对卡片 c [用 sum_type 方式]进行特殊召唤手续 + /// + public bool IsSpecialSummonable(ClientCard c, int sum_type = 0) + { + return HandleCardIntToBool(FunctionCode.Card.IsSpecialSummonable, c, sum_type); + } + + /// + /// Check whether c can hand + ///检查卡片 c 是否可以送去[玩家 player 的]手牌 + /// + public bool IsAbleToHand(ClientCard c, int player) + { + return HandleCardIntToBool(FunctionCode.Card.IsAbleToHand, c, player); + } + + /// + ///Check whether c can be excluded as a cost + ///检查卡片 c 是否可以[以 pos 表示形式]作为cost除外 + /// + public bool IsAbleToRemoveAsCost(ClientCard c, int pos = (int)CardPosition.FaceUp) + { + return HandleCardIntToBool(FunctionCode.Card.IsAbleToRemoveAsCost, c, pos); + } + + /// + /// Check whether c can be discarded + ///检查卡片 c 是否可以以 reason 原因丢弃 + /// + public bool IsDiscardable(ClientCard c, int reason = (int)CardReason.Cost) + { + return HandleCardIntToBool(FunctionCode.Card.IsDiscardable, c, reason); + } + + /// + ///检查卡片 c 是否可以被[玩家 player]叠放 + /// + public bool IsCanOverlay(ClientCard c, int player) + { + return HandleCardIntToBool(FunctionCode.Card.IsCanOverlay, c, player); + } + + /// + ///返回卡片 c 的连接区的卡片组(目前只限怪兽区) + /// + public IList GetLinkedGroup(ClientCard c) + { + return HandleCardToGroup(FunctionCode.Card.GetLinkedGroup, c); + } + + /// + ///返回和卡片 c 互相连接状态的卡片组 + /// + public IList GetMutualLinkedGroup(ClientCard c) + { + return HandleCardToGroup(FunctionCode.Card.GetMutualLinkedGroup, c); + } + + /// + ///返回与卡片 c 同一纵列的 c 以外的卡片组 + /// + public IList GetColumnGroup(ClientCard c) + { + return HandleCardToGroup(FunctionCode.Card.GetColumnGroup, c); + } + + /// + ///Returns the material used for the appearance of c) + ///返回卡片 c 出场使用的素材 + /// + public IList GetMaterial(ClientCard c) + { + return HandleCardToGroup(FunctionCode.Card.GetMaterial, c); + } + + /// + /// Returns the current set of cards + ///返回卡片 c 当前装备着的卡片组 + /// + public IList GetEquipGroup(ClientCard c) + { + return HandleCardToGroup(FunctionCode.Card.GetEquipGroup, c); + } + + /// + ///Returns the card set attacked by this turn + ///返回卡片 c 本回合攻击过的卡片组 + /// + public IList GetAttackedGroup(ClientCard c) + { + return HandleCardToGroup(FunctionCode.Card.GetAttackedGroup, c); + } + + /// + /// Returns the deck of the card that fought this turn + ///返回本回合与卡片 c 进行过战斗的卡片组 进行过战斗指发生过伤害的计算,用于剑斗兽等卡的判定 + /// + public IList GetBattledGroup(ClientCard c) + { + return HandleCardToGroup(FunctionCode.Card.GetBattledGroup, c); + } + + /// + /// Returns all currently persistent objects + ///返回卡片 c 当前所有的永续对象 + /// + public IList GetCardTarget(ClientCard c) + { + return HandleCardToGroup(FunctionCode.Card.GetCardTarget, c); + } + + /// + /// Returns all cards with c as the persistent object + ///返回取卡片 c 作为永续对象的所有卡 + /// + public IList GetOwnerTarget(ClientCard c) + { + return HandleCardToGroup(FunctionCode.Card.GetOwnerTarget, c); + } + + /// + ///检查卡片 c 是否是连接状态 + /// + public bool IsLinkState(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsLinkState, c); + } + + /// + ///检查卡片 c 是否是额外连接状态 + /// + public bool IsExtraLinkState(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsExtraLinkState, c); + } + + /// + ///检查与卡片 c 同一纵列的区域是否全都有卡 + /// + public bool IsAllColumn(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsAllColumn, c); + } + + /// + ///检查卡片 c 是否属于额外卡组的怪兽(融合·同调·超量·连接) + /// + public bool IsExtraDeckMonster(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsExtraDeckMonster, c); + } + + /// + /// Check whether c is in the re-call state + ///检查卡片 c 属否处于再召唤状态 + /// + public bool IsDualState(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsDualState, c); + } + + /// + /// Check whether c direct attack + ///检查卡片 c 是否直接攻击过 + /// + public bool IsDirectAttacked(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsDirectAttacked, c); + } + + /// + /// Check whether c is associated with this battle + ///检查卡片 c 是否和本次战斗关联 注:此效果通常用于伤害计算后伤害阶段结束前,用于检查战斗的卡是否离场过 + /// + public bool IsRelateToBattle(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsRelateToBattle, c); + } + + /// + /// Check whether c is in an invalid state + ///检查卡片 c 是否处于无效状态 + /// + public bool IsDisabled(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsDisabled, c); + } + + /// + /// Check whether c is a card that can be called normally + ///检查卡片 c 是否是可通常召唤的卡 + /// + public bool IsSummonableCard(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsSummonableCard, c); + } + + /// + /// Check whether c can be sent to the card group + ///检查卡片 c 是否可以送去卡组 + /// + public bool IsAbleToDeck(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsAbleToDeck, c); + } + + /// + /// Check if c can send extra cards + ///检查卡片 c 是否可以送去额外卡组 对于非融合、同调等额外怪兽或者非灵摆怪兽此函数均返回false + /// + public bool IsAbleToExtra(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsAbleToExtra, c); + } + + /// + /// Check whether c can be sent to the cemetery + ///检查卡片 c 是否可以送去墓地 + /// + public bool IsAbleToGrave(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsAbleToGrave, c); + } + + /// + /// Check whether c can be sent as the cost of hand cards + ///检查卡片 c 是否可以作为cost送去手牌 + /// + public bool IsAbleToHandAsCost(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsAbleToHandAsCost, c); + } + + /// + /// Check whether c can be sent to the card as a cost group + ///检查卡片 c 是否可以作为cost送去卡组 + /// + public bool IsAbleToDeckAsCost(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsAbleToDeckAsCost, c); + } + + /// + /// Check whether c can be sent as an additional cost card group + ///检查卡片 c 是否可以作为cost送去额外卡组,主卡组的灵摆卡会返回false + /// + public bool IsAbleToExtraAsCost(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsAbleToExtraAsCost, c); + } + + /// + /// Check whether c can be sent as a cost card group or additional card group (for the new Yu-xia, sword fighting beast fusion call monster detection procedures) + ///检查卡片 c 是否可以作为cost送去卡组或额外卡组(用于新宇侠、剑斗兽融合怪兽的召唤手续检测) + /// + + + public bool IsAbleToDeckOrExtraAsCost(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsAbleToDeckOrExtraAsCost, c); + } + + /// + ///Check whether c can be sent to the cemetery as a cost + ///检查卡片 c 是否可以作为cost送去墓地 + /// + public bool IsAbleToGraveAsCost(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsAbleToGraveAsCost, c); + } + + /// + /// Check whether c can be liberated (non-superior call) + ///检查卡片 c 是否可以被解放(非上级召唤用) + /// + public bool IsReleasable(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsReleasable, c); + } + + /// + ///Check whether c can be liberated by the effect + ///检查卡片 c 是否可以被效果解放 + /// + public bool IsReleasableByEffect(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsReleasableByEffect, c); + } + + /// + /// Check whether c can attack + ///检查卡片 c 是否可以攻击 + /// + public bool IsAttackable(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsAttackable, c); + } + + /// + /// Check whether c is a surface-side representation + ///检查卡片 c 是否是表侧表示 + /// + public bool IsFaceup(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsFaceup, c); + } + + /// + ///Check whether c is an attack + ///检查卡片 c 是否是攻击表示 + /// + public bool IsAttackPos(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsAttackPos, c); + } + + /// + /// Check whether c is the backside representation + ///检查卡片 c 是否是里侧表示 + /// + public bool IsFacedown(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsFacedown, c); + } + + /// + /// Check whether c is a defensive representation + ///检查卡片 c 是否是守备表示 + /// + public bool IsDefensePos(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsDefensePos, c); + } + + /// + /// Check if c is present + ///检查卡片 c 是否在场 + /// + public bool IsOnField(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsOnField, c); + } + + /// + /// Check if c is open + ///检查卡片 c 是否处于公开状态 + /// + public bool IsPublic(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsPublic, c); + } + + /// + ///Check whether c is in the declaration prohibition state + ///检查卡片 c 是否处于被宣言禁止状态 + /// + public bool IsForbidden(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsForbidden, c); + } + + /// + /// Check whether c can change the control + ///检查卡片 c 是否可以改变控制权 + /// + public bool IsAbleToChangeControler(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsAbleToChangeControler, c); + } + + /// + ///检查卡片 c 是否可以用效果改变表示形式 + /// + public bool IsCanChangePosition(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsCanChangePosition, c); + } + + /// + /// Check whether c can turn into the inside of that + ///检查卡片 c 是否可以转成里侧表示 + /// + public bool IsCanTurnSet(ClientCard c) + { + return HandleCardToBool(FunctionCode.Card.IsCanTurnSet, c); + } + + /// + ///返回以玩家 player 来看的所有连接区域 + /// + public int GetLinkedZone(ClientCard c,int player) + { + int? result = HandleIntToInt(FunctionCode.Card.GetLinkedZone, c, player); + if (result == null) return -1; + return (int)result; + } + + /// + ///返回[以 player 来看的]与卡片 c 互相连接的卡 所在的区域 + /// + public int GetMutualLinkedZone(ClientCard c, int player) + { + int? result = HandleIntToInt(FunctionCode.Card.GetMutualLinkedZone, c, player); + if (result == null) return -1; + return (int)result; + } + + /// + ///返回卡片 c [由 player 融合召唤时]用作融合素材时的属性 + /// + public int GetFusionAttribute(ClientCard c, int player = PLAYER_NONE) + { + int? result = HandleIntToInt(FunctionCode.Card.GetFusionAttribute, c, player); + if (result == null) return -1; + return (int)result; + } + + /// + ///返回卡片 c [由 player 连接召唤时]用作连接素材时的属性 + /// + public int GetLinkAttribute(ClientCard c, int player = PLAYER_NONE) + { + int? result = HandleIntToInt(FunctionCode.Card.GetLinkAttribute, c, player); + if (result == null) return -1; + return (int)result; + } + + /// + ///返回卡片 c [由 player 连接召唤时]作为连接素材时的种族 + /// + public int GetLinkRace(ClientCard c, int player = PLAYER_NONE) + { + int? result = HandleIntToInt(FunctionCode.Card.GetLinkRace, c, player); + if (result == null) return -1; + return (int)result; + } + + /// + /// Returns the card that caused the position of c to change + ///返回导致卡片 c 的位置变化的卡 + /// + public ClientCard GetReasonCard(ClientCard c) + { + return HandleCardToCard(FunctionCode.Card.GetReasonCard, c); + } + + /// + /// Returns the current artefact object + ///返回卡片 c 当前的装备对象 + /// + public ClientCard GetEquipTarget(ClientCard c) + { + return HandleCardToCard(FunctionCode.Card.GetEquipTarget, c); + } + + /// + ///Returns the device object before c + ///返回卡片 c 之前的装备对象 + /// + public ClientCard GetPreviousEquipTarget(ClientCard c) + { + return HandleCardToCard(FunctionCode.Card.GetPreviousEquipTarget, c); + } + + /// + ///Returns the card with c as the excess material + ///返回以卡片 c 为超量素材的卡 + /// + public ClientCard GetOverlayTarget(ClientCard c) + { + return HandleCardToCard(FunctionCode.Card.GetOverlayTarget, c); + } + + /// + /// Returns c the current first persistent object + ///返回卡片 c 当前第一个永续对象,没有则返回 nil + /// + public ClientCard GetFirstCardTarget(ClientCard c) + { + return HandleCardToCard(FunctionCode.Card.GetFirstCardTarget, c); + } + + /// + ///Returns the card that fought with c + ///返回与卡片 c 进行战斗的卡,没有则返回nil + /// + public ClientCard GetBattleTarget(ClientCard c) + { + return HandleCardToCard(FunctionCode.Card.GetBattleTarget, c); + } + + /// + ///Check whether c can be used as a non-adjustment + ///检查卡片 c 是否可以作为同调怪兽 sc 的调整以外的怪兽 + /// + public bool IsNotTuner(ClientCard c, ClientCard sc) + { + return HandleDoubleCardToBool(FunctionCode.Card.IsNotTuner, c, sc); + } + + /// + /// Check whether c2 is the correct equipment object for c1 + ///检查卡片 c2是否是卡片 c1 的正确的装备对象 + /// + public bool CheckEquipTarget(ClientCard c1, ClientCard c2) + { + return HandleDoubleCardToBool(FunctionCode.Card.CheckEquipTarget, c1, c2); + } + + /// + ///检查卡片 c2 是否是卡片 c1 的正确的同盟对象 + /// + public bool CheckUnionTarget(ClientCard c1, ClientCard c2) + { + return HandleDoubleCardToBool(FunctionCode.Card.CheckUnionTarget, c1, c2); + } + + /// + /// Check whether c1 takes c2 as a persistent object + ///检查卡片 c2 是否取卡片 c1 为永续对象 + /// + public bool IsHasCardTarget(ClientCard c1, ClientCard c2) + { + return HandleDoubleCardToBool(FunctionCode.Card.IsHasCardTarget, c1, c2); + } + + /// + /// Check whether c1 and c2 are linked + ///检查卡片 c1 是否和卡片 c2 有联系 + /// + public bool IsRelateToCard(ClientCard c1, ClientCard c2) + { + return HandleDoubleCardToBool(FunctionCode.Card.IsRelateToCard, c1, c2); + } + + /// + /// Check whether the c can replace the material description card name of the fusion monster fc + ///检查卡片 c 能否代替融合怪兽 fc 的记述卡名的素材 + /// + public bool CheckFusionSubstitute(ClientCard c, ClientCard fc) + { + return HandleDoubleCardToBool(FunctionCode.Card.CheckFusionSubstitute, c, fc); + } + + /// + /// Check whether c1 can become a target of c2 + ///检查卡片 c1 是否可以成为卡片 c2 的攻击目标 + /// + public bool IsCanBeBattleTarget(ClientCard c1, ClientCard c2) + { + return HandleDoubleCardToBool(FunctionCode.Card.IsCanBeBattleTarget, c1, c2); + } + + /// + ///Returns the number of effects that c is affected by the type of code + ///返回卡片 c 受到影响的种类是code的效果的数量 + /// + public int GetEffectCount(ClientCard c, int code) + { + int? result = HandleCardIntToInt(FunctionCode.Card.GetEffectCount, c, code); + if (result == null) return -1; + return (int)result; + } + + /// + ///The type of returned c is the number of identifying effects of the code + ///返回卡片 c 的种类是 code 的标识效果的数量 + /// + public int GetFlagEffect(ClientCard c, int code) + { + int? result = HandleCardIntToInt(FunctionCode.Card.GetFlagEffect, c, code); + if (result == null) return -1; + return (int)result; + } + + /// + ///Returns the number of countertype types on c + ///返回卡片 c 上的 countertype 类型的指示物的数量, countertype==0 则返回卡片 c 上所有类型的指示物数量之和 + /// + public int GetCounter(ClientCard c, int countertype) + { + int? result = HandleCardIntToInt(FunctionCode.Card.GetCounter, c, countertype); + if (result == null) return -1; + return (int)result; + } + + /// + /// Check whether c is usually called (not including the normally called set) + ///检查卡片 c 是否可以进行通常召唤(不包含通常召唤的set),ignore_count==true 则不检查召唤次数限制,minc 表示至少需要的祭品数(用于区分妥协召唤与上级召唤),zone 表示必须要召唤到的区域 + /// + public bool IsSummonable(ClientCard c, bool ignore_count = false, int minc = 0, int zone = 0x1f) + { + object result = HandleCardSpecial(FunctionCode.Card.IsSummonable, c, ignore_count, minc, zone); + if (result == null) return false; + return (bool)result; + } + + /// + /// Check whether c can be normally called set + ///检查卡片 c 是否可进行通常召唤的set,ignore_count==true 则不检查召唤次数限制 minc 表示至少需要的祭品数(用于区分妥协召唤set与上级召唤set),zone 表示必须要放置到的区域 + /// + public bool IsMSetable(ClientCard c, bool ignore_count = false, int minc = 0, int zone = 0x1f) + { + object result = HandleCardSpecial(FunctionCode.Card.IsMSetable, c, ignore_count, minc, zone); + if (result == null) return false; + return (bool)result; + } + + /// + /// Check whether mg can be selected in the [min-max months] excessive material on the c to call the excess procedure + ///检查是否可以在场上的卡[中选出 minc-maxc 个超量素材]对卡片 c 进行超量召唤手续 c 如果不是超量会返回 false + /// + public bool IsXyzSummonable(ClientCard c, int minc = 0, int maxc = 0) + { + object result = HandleCardSpecial(FunctionCode.Card.IsXyzSummonable, c, minc, maxc); + if (result == null) return false; + return (bool)result; + } + + /// + ///检查是否可以用[包含卡 lcard 的]场上的卡[选出 minc-maxc 个连接素材]对卡片 c 进行连接召唤手续 c 如果不是连接会返回 false + /// + public bool IsLinkSummonable(ClientCard c, ClientCard lcard = null, int minc = 0, int maxc = 0) + { + object result = HandleCardSpecial(FunctionCode.Card.IsLinkSummonable, c, lcard, minc, maxc); + if (result == null) return false; + return (bool)result; + } + + /// + /// The type of c is the label that identifies the effect of code, and returns nil if it does not + ///返回卡片 c 的种类为 code 的标识效果的Label(数量可能不止1个) + /// + public IList GetFlagEffectLabel(ClientCard c, int code) + { + object result = HandleCardSpecial(FunctionCode.Card.GetFlagEffectLabel, c, code); + if (result == null) return new List(); + return (IList)result; + } + + /// + ///返回[以 player 来看的] location 范围内与卡片 c 同一纵列的区域(c 所在的位置排除), + /// + public int GetColumnZone(ClientCard c, int location, int player) + { + object result = HandleCardSpecial(FunctionCode.Card.GetColumnZone, c, location, player); + if (result == null) return -1; + return (int)result; + } + + /// + ///Returns all stacked cards at a specified location + ///返回卡片 c 当前叠放着的卡片组 + /// + public IList GetOverlayGroup(ClientCard c) + { + object result = HandleCardSpecial(FunctionCode.Card.GetOverlayGroup, c); + if (result == null) return new List(); + return (IList)result; + } + + /// + /// Check if the player can remove at least count cards for the specified reason + ///检查玩家 player 能否以 reason 为原因,至少取除卡片 c 下面叠放的 count 张卡 + /// + public bool CheckRemoveOverlayCard(ClientCard c, int player, int count, int reason) + { + object result = HandleCardSpecial(FunctionCode.Card.CheckRemoveOverlayCard, c, player, count, reason); + if (result == null) return false; + return (bool)result; + } + + /// + /// Check if c is affected by the effect type + ///检查卡片 c 是否受到效果种类是code的效果的影响 + /// + public bool IsHasEffect(ClientCard c, int code, int check_player = PLAYER_NONE) + { + object result = HandleCardSpecial(FunctionCode.Card.IsHasEffect, c, code, check_player); + if (result == null) return false; + return (bool)result; + } + + /// + /// Returns the attackable card set and whether it can attack directly + ///返回卡片 c 可攻击的卡片组以及能否直接攻击,[0]是否可以攻击,[1]卡片组 + /// + public object[] GetAttackableTarget(ClientCard c) + { + object result = HandleCardSpecial(FunctionCode.Card.GetAttackableTarget, c); + if (result == null) return new object[0]; + return (object[])result; + } + + /// + /// Check c for excess monster xyzc with the level of whether the excess is lv + ///检查卡片 c 对于超量怪兽 xyzc 的超量用等级是否是 lv + /// + public bool IsXyzLevel(ClientCard c, ClientCard xyzc, int lv) + { + object result = HandleCardSpecial(FunctionCode.Card.IsXyzLevel, c, xyzc, lv); + if (result == null) return false; + return (bool)result; + } + + /// + /// Check whether c can be the object of sc + /// 检查卡片 c 是否可以成为卡片sc的效果对象 + /// + public bool IsCanBeCardTarget(ClientCard c, ClientCard sc) + { + return HandleDoubleCardToBool(FunctionCode.Card.IsCanBeCardTarget, c, sc); + } + + /// + /// 检查卡片 c 是否可以被sc的效果无效 + /// + public bool IsCanBeDisabledByCard(ClientCard c, ClientCard sc) + { + return HandleDoubleCardToBool(FunctionCode.Card.IsCanBeDisabledByCard, c, sc); + } + + /// + /// Check whether c immune sc + /// 检查卡片 c 是否可以免疫sc的效果 + /// + public bool IsImmuneToCard(ClientCard c, ClientCard sc) + { + return HandleDoubleCardToBool(FunctionCode.Card.IsImmuneToCard, c, sc); + } + + /// + /// Check whether c can be destoryed by sc + /// 检查卡片 c 是否可以被sc的效果破坏 + /// + public bool IsDestructable(ClientCard c, ClientCard sc) + { + return HandleDoubleCardToBool(FunctionCode.Card.IsDestructable, c, sc); + } + + /// + /// Check whether c can be set to the magic trap area, ignore_field = true is disregard of the trap area trap trap + /// 检查卡片 c 是否可以set到魔法陷阱区,ignore_field==true 则无视魔陷区格子是否能使用的限制 + /// + public bool IsSSetable(ClientCard c, bool ignore_field = false) + { + object result = HandleCardSpecial(FunctionCode.Card.IsSSetable, c, ignore_field); + if (result == null) return false; + return (bool)result; + } + + /// + /// Check whether c can be player except player + /// 检查卡片 c 是否可以被[玩家 player 以 pos 的表示形式,reason 原因]除外 + /// + public bool IsAbleToRemove(ClientCard c, int player, int pos = (int)CardPosition.FaceUp, int reason = (int)CardReason.Effect) + { + object result = HandleCardSpecial(FunctionCode.Card.IsAbleToRemove, c, player,pos,reason); + if (result == null) return false; + return (bool)result; + } + + /// + /// Check whether c can be a continuous attack, c the number of attacks declared> = ac return false + /// 检查卡片 c 是否可以连续攻击,c 的攻击宣言次数>=ac 则返回false monsteronly==true 则表示只能对怪兽攻击 + /// + public bool IsChainAttackable(ClientCard c, int ac = 2, bool monsteronly = false) + { + object result = HandleCardSpecial(FunctionCode.Card.IsChainAttackable, c, ac, monsteronly); + if (result == null) return false; + return (bool)result; + } + + /// + /// Check whether the control of c can be changed + /// 检查卡片 c 的控制权是否可以改变。 ignore_mzone==true 会忽视转移控制权后的玩家场上是否有空格位, zone 表示必须要使用的位置 + /// + public bool IsControlerCanBeChanged(ClientCard c, bool ignore_mzone = false, int zone = 0xff) + { + object result = HandleCardSpecial(FunctionCode.Card.IsControlerCanBeChanged, c, ignore_mzone, zone); + if (result == null) return false; + return (bool)result; + } + + /// + /// Check if c can place count counters of type countertype [singly = true] + /// 检查是否可以给[在 location 区域存在的]卡片 c [逐个(singly==true)]放置 count 个 countertype 类型的指示物 + /// + public bool IsCanAddCounter(ClientCard c, int countertype, int count, int location, bool singly = false) + { + object result = HandleCardSpecial(FunctionCode.Card.IsCanAddCounter, c, countertype, count, singly,location); + if (result == null) return false; + return (bool)result; + } + + /// + ///Check if the player player can remove count counters of type c on c for reason + /// 检查玩家 player 是否可以以原因 reason 移除卡片 c 上的 count 个 countertype 类型的指示物 + /// + public bool IsCanRemoveCounter(ClientCard c, int player, int countertype, int count, int reason) + { + object result = HandleCardSpecial(FunctionCode.Card.IsCanRemoveCounter, c, player, countertype, count, reason); + if (result == null) return false; + return (bool)result; + } + + /// + /// 检查卡片 c 是否可以成为[融合怪兽 fc 的 summon_type 方式的]融合素材 + /// + public bool IsCanBeFusionMaterial(ClientCard c, ClientCard fc = null, int summon_type = (int)SummonType.Fusion) + { + object result = HandleCardSpecial(FunctionCode.Card.IsCanBeFusionMaterial, c, fc, summon_type); + if (result == null) return false; + return (bool)result; + } + + /// + /// 检查卡片 c 是否可以成为[以 tuner 为调整的同调怪兽 sc 的]同调素材 + /// + public bool IsCanBeSynchroMaterial(ClientCard c, ClientCard sc = null, ClientCard tuner = null) + { + object result = HandleCardSpecial(FunctionCode.Card.IsCanBeSynchroMaterial, c, sc, tuner); + if (result == null) return false; + return (bool)result; + } + + /// + /// 检查卡片 c 是否可以作为[仪式怪兽 sc 的]仪式素材,没有指定sc的场合,必须填nil + /// + public bool IsCanBeRitualMaterial(ClientCard c, ClientCard sc = null) + { + object result = HandleCardSpecial(FunctionCode.Card.IsCanBeRitualMaterial, c, sc); + if (result == null) return false; + return (bool)result; + } + + /// + /// 检查卡片 c 是否可以成为[超量怪兽 sc 的]超量素材,没有指定sc的场合,必须填nil + /// + public bool IsCanBeXyzMaterial(ClientCard c, ClientCard sc = null) + { + object result = HandleCardSpecial(FunctionCode.Card.IsCanBeXyzMaterial, c, sc); + if (result == null) return false; + return (bool)result; + } + + /// + /// 检查卡片 c 是否可以成为[连接怪兽 sc 的]连接素材,没有指定sc的场合,必须填nil + /// + public bool IsCanBeLinkMaterial(ClientCard c, ClientCard sc = null) + { + object result = HandleCardSpecial(FunctionCode.Card.IsCanBeLinkMaterial, c, sc); + if (result == null) return false; + return (bool)result; + } + + /// + /// 检查卡片 c 在 check_player 场上[check_location 区域]的唯一性[, 忽略卡片 icard 的唯一性影响] + /// + public bool CheckUniqueOnField(ClientCard c, int check_player, int check_location = (int)CardLocation.Onfield, ClientCard icard = null) + { + object result = HandleCardSpecial(FunctionCode.Card.CheckUniqueOnField, c, check_player, check_location, icard); + if (result == null) return false; + return (bool)result; + } + + //=================== Duel =================== + + /// + /// Returns the current LP of the player's player + /// 返回玩家 player 的当前LP + /// + public int GetLP(int player) + { + object result = HandleDuel(FunctionCode.Duel.GetLP, player); + if (result == null) return -1; + return (int)result; + } + + /// + /// 返回[玩家 player 所经过的]当前的回合数 + /// + public int GetTurnCount(int player = PLAYER_NONE) + { + object result = HandleDuel(FunctionCode.Duel.GetTurnCount, player); + if (result == null) return -1; + return (int)result; + } + + /// + /// Returns the player's number of rules drawn per turn + /// 返回玩家 player 每回合的规则抽卡数量 + /// + public int GetDrawCount(int player) + { + object result = HandleDuel(FunctionCode.Duel.GetDrawCount, player); + if (result == null) return -1; + return (int)result; + } + + /// + /// Returns the player's player's damage during this battle + /// 返回玩家 player 在本次战斗中受到的伤害 + /// + public int GetBattleDamage(int player) + { + object result = HandleDuel(FunctionCode.Duel.GetBattleDamage, player); + if (result == null) return -1; + return (int)result; + } + + /// + /// 返回以玩家 player 来看的所有连接区域 + /// + public int GetLinkedZone(int player) + { + object result = HandleDuel(FunctionCode.Duel.GetLinkedZone, player); + if (result == null) return -1; + return (int)result; + } + + /// + /// Returns the player's deck of cards available for ritual summoning material + /// 返回玩家 player 可用的用于仪式召唤素材的卡片组 + /// + public IList GetRitualMaterial(int player) + { + object result = HandleDuel(FunctionCode.Duel.GetRitualMaterial, player); + if (result == null) return new List(); + return (IList)result; + } + + /// + /// Returns the current round of players + /// 返回当前的回合玩家 + /// + public int GetTurnPlayer() + { + object result = HandleDuel(FunctionCode.Duel.GetTurnPlayer); + if (result == null) return -1; + return (int)result; + } + + /// + /// Returns the chain number currently being processed + /// 返回当前正在处理的连锁序号 + /// + public int GetCurrentChain() + { + object result = HandleDuel(FunctionCode.Duel.GetCurrentChain); + if (result == null) return -1; + return (int)result; + } + + /// + /// Returns the current stage + /// 返回当前的阶段 + /// + public int GetCurrentPhase() + { + object result = HandleDuel(FunctionCode.Duel.GetCurrentPhase); + if (result == null) return -1; + return (int)result; + } + + /// + /// Used to check if damage has been calculated during the damage phase + /// 用于在伤害阶段检查是否已经计算了战斗伤害 + /// + public bool IsDamageCalculated() + { + object result = HandleDuel(FunctionCode.Duel.IsDamageCalculated); + if (result == null) return false; + return (bool)result; + } + + /// + /// Return the card for this combat attack + /// 返回此次战斗攻击的卡 + /// + public ClientCard GetAttacker() + { + return (ClientCard)HandleDuel(FunctionCode.Duel.GetAttacker); + } + + /// + /// Return the card for this combat attack + /// 返回此次战斗被攻击的卡,如果返回null表示是直接攻击 + /// + public ClientCard GetAttackTarget() + { + return (ClientCard)HandleDuel(FunctionCode.Duel.GetAttackTarget); + } + + /// + /// heck the player at the current stage whether the operation + /// 检查玩家在当前阶段是否有操作 + /// + public bool CheckPhaseActivity() + { + object result = HandleDuel(FunctionCode.Duel.CheckPhaseActivity); + if (result == null) return false; + return (bool)result; + } + + /// + /// Check whether the player can enter the combat phase of the round + /// 检查回合玩家能否进入战斗阶段 + /// + public bool IsAbleToEnterBP() + { + object result = HandleDuel(FunctionCode.Duel.IsAbleToEnterBP); + if (result == null) return false; + return (bool)result; + } + + /// + /// Returns the count card at the top of the player's deck + /// 返回玩家 player 的卡组最上方的 count 张卡 + /// + public IList GetDecktopGroup(int player, int count) + { + object result = HandleDuel(FunctionCode.Duel.GetDecktopGroup, player,count); + if (result == null) return new List(); + return (IList)result; + } + + /// + /// Return to the player player can be liberated (non-superior summoned use) of the deck, use_hand is true, including the hand card + /// 返回玩家 player 可解放(非上级召唤用)的卡片组, use_hand==true 则包括手卡 + /// + public IList GetReleaseGroup(int player, bool use_hand = false) + { + object result = HandleDuel(FunctionCode.Duel.GetReleaseGroup, player, use_hand); + if (result == null) return new List(); + return (IList)result; + } + + /// + /// Return player player can be liberated (non-superior summoned with) the number of cards, use_hand is true, including the hand card + /// 返回玩家 player 可解放(非上级召唤用)的卡片数量, use_hand==true 则包括手卡 + /// + public int GetReleaseGroupCount(int player, bool use_hand = false) + { + object result = HandleDuel(FunctionCode.Duel.GetReleaseGroupCount, player, use_hand); + if (result == null) return -1; + return (int)result; + } + + /// + /// 第一个返回值是 玩家 player [在区域 location 内的]可用的用于融合召唤素材的卡片组(包含受 EFFECT_EXTRA_FUSION_MATERIAL 效果影响的卡) + /// 第二个返回值是 只包含 手卡、怪兽区[、除外、墓地、卡组、额外卡组、P区·魔陷区原本种类是] 怪兽卡的卡片组(也即是没有包含受 EFFECT_EXTRA_FUSION_MATERIAL 效果影响的卡) + /// + public IList> GetFusionMaterial(int player, int location = (int)CardLocation.Hand | (int)CardLocation.MonsterZone) + { + object result = HandleDuel(FunctionCode.Duel.GetFusionMaterial, player, location); + if (result == null) return new List>(); + return (IList>)result; + } + + /// + /// Check if the player is affected by the effect of the code type + /// 检查玩家 player 是否受到种类为 code 的效果影响 + /// + public bool IsPlayerAffectedByEffect(int player, int code) + { + object result = HandleDuel(FunctionCode.Duel.IsPlayerAffectedByEffect, player, code); + if (result == null) return false; + return (bool)result; + } + + /// + /// Check the player player can effect pumping [count Zhang] card + /// 检查玩家 player 是否可以效果抽[count 张]卡 + /// + public bool IsPlayerCanDraw(int player, int count = 0) + { + object result = HandleDuel(FunctionCode.Duel.IsPlayerCanDraw, player, count); + if (result == null) return false; + return (bool)result; + } + + /// + /// Check player player can put the card group top count cards sent to the cemetery + /// 检查玩家 player 是否可以把卡组顶端 count 张卡送去墓地 + /// + public bool IsPlayerCanDiscardDeck(int player, int count = 0) + { + object result = HandleDuel(FunctionCode.Duel.IsPlayerCanDiscardDeck, player, count); + if (result == null) return false; + return (bool)result; + } + + /// + /// Check the player player can put the card group top count cards sent to the cemetery as cost + /// 检查玩家 player 能否把卡组顶端 count 张卡送去墓地作为cost + /// + public bool IsPlayerCanDiscardDeckAsCost(int player, int count = 0) + { + object result = HandleDuel(FunctionCode.Duel.IsPlayerCanDiscardDeckAsCost, player, count); + if (result == null) return false; + return (bool)result; + } + + /// + /// 检查玩家 player 是否可以把卡片[ c ]盖放到魔陷区 + /// + public bool IsPlayerCanSSet(int player, ClientCard c = null) + { + object result = HandleDuel(FunctionCode.Duel.IsPlayerCanSSet, player, c); + if (result == null) return false; + return (bool)result; + } + + /// + ///Check whether the player player special call count times + ///检查玩家 player 能否特殊召唤 count 次 + /// + public bool IsPlayerCanSpecialSummonCount(int player, int count) + { + object result = HandleDuel(FunctionCode.Duel.IsPlayerCanSpecialSummonCount, player, count); + if (result == null) return false; + return (bool)result; + } + + /// + ///Check whether the player can liberate the player c + ///检查玩家 player 是否能解放[卡片 c] + /// + public bool IsPlayerCanRelease(int player, ClientCard c = null) + { + object result = HandleDuel(FunctionCode.Duel.IsPlayerCanRelease, player, c); + if (result == null) return false; + return (bool)result; + } + + /// + ///Check whether the player can send c to hand + ///检查玩家是否能把卡片[c]送去手牌 + /// + public bool IsPlayerCanSendtoHand(int player, ClientCard c = null) + { + object result = HandleDuel(FunctionCode.Duel.IsPlayerCanSendtoHand, player, c); + if (result == null) return false; + return (bool)result; + } + + /// + ///Check whether the player can send c to the cemetery + ///检查玩家是否能把卡片[c]送去墓地 + /// + public bool IsPlayerCanSendtoGrave(int player, ClientCard c = null) + { + object result = HandleDuel(FunctionCode.Duel.IsPlayerCanSendtoGrave, player, c); + if (result == null) return false; + return (bool)result; + } + + /// + ///Check whether the player can send c to the card group + ///检查玩家是否能把卡片[c]送去卡组 + /// + public bool IsPlayerCanSendtoDeck(int player, ClientCard c = null) + { + object result = HandleDuel(FunctionCode.Duel.IsPlayerCanSendtoDeck, player, c); + if (result == null) return false; + return (bool)result; + } + + /// + /// 返回玩家 player 的额外卡组表侧表示的卡中最上方的 count 张卡 + /// + public IList GetExtraTopGroup(int player, int count) + { + object result = HandleDuel(FunctionCode.Duel.GetExtraTopGroup, player, count); + if (result == null) return new List(); + return (IList)result; + } + + /// + /// Return the card for this combat attack + /// 返回本次进行战斗的怪兽。以玩家 player 来看,第一个是自己的怪兽,第二个是对方的怪兽,没有进行战斗的怪兽的话,则为null + /// + public IList GetBattleMonster(int player) + { + object result = HandleDuel(FunctionCode.Duel.GetBattleMonster,player); + if (result == null) + { + return type == ReceiveType.Success ? null : new List(); + } + return (IList)result; + } + + /// + /// Returns the number of specific marker effects for the player's player + /// 返回玩家 player 的 code 标识效果的数量 + /// + public int GetFlagEffect(int player, int code) + { + object result = HandleDuel(FunctionCode.Duel.GetFlagEffect, player,code); + if (result == null) return -1; + return (int)result; + } + + /// + ///返回玩家 player 的种类为 code 的标识效果的全部Label + /// + public IList GetFlagEffectLabel(int player, int code) + { + object result = HandleDuel(FunctionCode.Duel.GetFlagEffectLabel, player, code); + if (result == null) return new List(); + return (IList)result; + } + + /// + ///检查玩家 player 能否[向卡片 c]添加[count 个 countertype 类型的]指示物,如果 player 不是 0或者1,则返回false 额外参数如果要用,必须全写 + /// + public bool IsCanAddCounter(int player, int countertype = -1, int count = -1, ClientCard c = null) + { + object result = HandleDuel(FunctionCode.Duel.IsCanAddCounter, player, countertype, count, c); + if (result == null) return false; + return (bool)result; + } + + /// + /// Check if the player player can remove count counters of type c on c for reason + ///检查玩家 player 以 reason 为原因是否能移除场上的 countertype 类型的 count 个指示物 + /// + public bool IsCanRemoveCounter(int player, int s, int o, int countertype, int count, int reason) + { + object result = HandleDuel(FunctionCode.Duel.IsCanRemoveCounter, player, s, o, countertype, count, reason); + if (result == null) return false; + return (bool)result; + } + + /// + /// Returns the number of counterstype types that exist on the farm + ///返回场上存在的 countertype 类型的指示物的数量 + /// + public int GetCounter(int player, int s, int o, int countertype) + { + object result = HandleDuel(FunctionCode.Duel.GetCounter, player, s, o, countertype); + if (result == null) return -1; + return (int)result; + } + + /// + ///检查场地代号是否是code [,来源玩家是否是 player][,生效区域是否在 loc 内] + /// + public bool IsEnvironment(int code, int player = PLAYER_ALL, int loc = (int)CardLocation.FieldZone | (int)CardLocation.Onfield) + { + object result = HandleDuel(FunctionCode.Duel.IsEnvironment, code, player, loc); + if (result == null) return false; + return (bool)result; + } + + /// + ///Check player player can pay cost point lp + ///检查玩家 player 是否能支付cost点lp + /// + public bool CheckLPCost(int player, int cost) + { + object result = HandleDuel(FunctionCode.Duel.CheckLPCost, player, cost); + if (result == null) return false; + return (bool)result; + } + + /// + ///Check whether the round player can still summon this turn [Card c] + ///检查回合玩家本回合是否还能通常召唤[卡片 c] + /// + public bool CheckSummonedCount(ClientCard c = null) + { + object result = HandleDuel(FunctionCode.Duel.CheckSummonedCount, c); + if (result == null) return false; + return (bool)result; + } + + /// + ///Returns the number of spaces available in the player's field + ///返回玩家 player 的场上区域 location 内的可用的[区域 zone 里的]空格数 + /// + public int GetLocationCount(int player, int location, int use_player = PLAYER_NULL, int reason = LOCATION_REASON_TOFIELD, int zone = 0xff) + { + object result = HandleDuel(FunctionCode.Duel.GetLocationCount, player, location, use_player, reason, zone); + if (result == null) return -1; + return (int)result; + } + + /// + ///返回玩家 player 场上[对于 use_player 来说]可用的怪兽区数量(?) + /// + public int GetUsableMZoneCount(int player, int use_player = PLAYER_NULL) + { + object result = HandleDuel(FunctionCode.Duel.GetUsableMZoneCount, player, use_player); + if (result == null) return -1; + return (int)result; + } + + /// + ///返回以玩家 player 来看的 s_range 和 o_range 区域的处于连接状态的卡片组 + /// + public IList GetLinkedGroup(int player, int s_range, int o_range) + { + object result = HandleDuel(FunctionCode.Duel.GetLinkedGroup, player, s_range, o_range); + if (result == null) return new List(); + return (IList)result; + } + + /// + ///返回以玩家 player 来看的 s_range 和 o_range 区域的处于连接状态的卡片的数量 + /// + public int GetLinkedGroupCount(int player, int s_range, int o_range) + { + object result = HandleDuel(FunctionCode.Duel.GetLinkedGroupCount, player, s_range, o_range); + if (result == null) return -1; + return (int)result; + } + + /// + /// Back to player The player's field is located in the location number seq card + ///返回玩家 player 的场上位于区域 location 序号为 seq 的卡,常用于获得场地区域·灵摆区域的卡 + /// + public ClientCard GetFieldCard(int player, int location, int seq) + { + return (ClientCard)HandleDuel(FunctionCode.Duel.GetFieldCard, player, location, seq); + } + + /// + /// Check if the player's player field is seq in the location of the space is availabl + ///检查玩家 player 的场上位于区域 location 序号为 seq 的空格是否可用 + /// + public bool CheckLocation(int player, int location, int seq) + { + object result = HandleDuel(FunctionCode.Duel.CheckLocation, player, location, seq); + if (result == null) return false; + return (bool)result; + } + + /// + /// Returns the card at the specified location + ///返回以 player 来看的指定位置的卡,s 代表以 player 来看的自己的位置,o 代表以 player 来看的对方的位置 + /// + public IList GetFieldGroup(int player, int s, int o) + { + object result = HandleDuel(FunctionCode.Duel.GetFieldGroup, player, s, o); + if (result == null) return new List(); + return (IList)result; + } + + /// + ///Returns the number of cards in the specified location + ///同 Duel.GetFieldGroup ,只是返回的是卡的数量 + /// + public int GetFieldGroupCount(int player, int s, int o) + { + object result = HandleDuel(FunctionCode.Duel.GetFieldGroupCount, player, s, o); + if (result == null) return -1; + return (int)result; + } + + /// + ///Returns all stacked cards at a specified location + ///返回以 player 来看的指定位置的所有叠放的卡 + /// + public IList GetOverlayGroup(int player, int s, int o) + { + object result = HandleDuel(FunctionCode.Duel.GetOverlayGroup, player, s, o); + if (result == null) return new List(); + return (IList)result; + } + + /// + ///Returns the number of all stacked cards in the specified location + ///返回以 player 来看的指定位置的所有叠放的卡的数量 + /// + public int GetOverlayCount(int player, int s, int o) + { + object result = HandleDuel(FunctionCode.Duel.GetOverlayCount, player, s, o); + if (result == null) return -1; + return (int)result; + } + + /// + ///Returns the deck of cards used for the normal summon c to be released (for higher-level summons) + ///返回场上用于通常召唤卡片 c 可解放(上级召唤用)的卡片组 + /// + public IList GetTributeGroup(ClientCard c) + { + object result = HandleDuel(FunctionCode.Duel.GetTributeGroup, c); + if (result == null) return new List(); + return (IList)result; + } + + /// + ///Check if the player can remove at least count cards for the specified reason + ///检查 player 能否以原因 reason 移除以 player 来看的指定位置至少 count 张卡 + /// + public bool CheckRemoveOverlayCard(int player, int s, int o, int count, int reason) + { + object result = HandleDuel(FunctionCode.Duel.CheckRemoveOverlayCard, player, s, o,count,reason); + if (result == null) return false; + return (bool)result; + } + + /// + /// Check player player can usually call [c, to sumtype] + ///检查玩家 player 是否可以通常召唤[c,以 sumtype 方式] + /// + public bool IsPlayerCanSummon(int player, int sumtype = 0, ClientCard c = null) + { + object result = HandleDuel(FunctionCode.Duel.IsPlayerCanSummon, player, sumtype, c); + if (result == null) return false; + return (bool)result; + } + + /// + ///检查玩家 player 是否可以盖放怪兽[c,以sumtype方式] + /// + public bool IsPlayerCanMSet(int player, int sumtype = 0, ClientCard c = null) + { + object result = HandleDuel(FunctionCode.Duel.IsPlayerCanMSet, player, sumtype, c); + if (result == null) return false; + return (bool)result; + } + + /// + /// Check player player can special summon [c to target_player field to sumtype summation, sumpos form] + ///检查玩家 player 能否特殊召唤[卡片 c 到 target_player 场上,以 sumtype 召唤方式,sumpos 表示形式] + /// + public bool IsPlayerCanSpecialSummon(int player, int sumtype = 0, int sumpos = 0, int target_player = PLAYER_NULL, ClientCard c = null) + { + object result = HandleDuel(FunctionCode.Duel.IsPlayerCanSpecialSummon, player, sumtype, sumpos, target_player, c); + if (result == null) return false; + return (bool)result; + } + + /// + ///Check player player can be pos to the form of special summon the parameters of the monster to the target_player field + ///检查玩家 player 是否可以[以 sumtype 方式][以 pos 表示形式]特殊召唤 给定参数的怪兽到 target_player 场上 + /// + public bool IsPlayerCanSpecialSummonMonster(int player, int code, int target_player, int sumtype = 0,int pos = (int)CardPosition.FaceUp,int ? setcode = null, int? type = null,int? atk = null,int? def = null, + int? level = null,int? race = null,int? attribute = null) + { + object result = HandleDuel(FunctionCode.Duel.IsPlayerCanSpecialSummonMonster, player, code, setcode, type, atk, def, level, race, + attribute, pos, target_player, sumtype); + if (result == null) return false; + return (bool)result; + } + + /// + /// Check whether the player player except c + ///检查玩家 player 是否能[以 reason 原因]除外[卡片 c] + /// + public bool IsPlayerCanRemove(int player, ClientCard c = null,int reason = (int)CardReason.Effect) + { + object result = HandleDuel(FunctionCode.Duel.IsPlayerCanRemove, player, c, reason); + if (result == null) return false; + return (bool)result; + } + + /// + ///检查玩家是否可以额外的增加通常召唤次数。 + /// + public bool IsPlayerCanAdditionalSummon(int player) + { + object result = HandleDuel(FunctionCode.Duel.IsPlayerCanAdditionalSummon, player); + if (result == null) return false; + return (bool)result; + } + + /// + /// Returns the number of times a player fought this turn + ///返回玩家 player 这回合战斗过的次数 + /// + public int GetBattledCount(int player) + { + object result = HandleDuel(FunctionCode.Duel.GetBattledCount, player); + if (result == null) return -1; + return (int)result; + } + + + } +} diff --git a/Game/AI/Executor.cs b/Game/AI/Executor.cs index d2a43e1c..3d5aa49c 100644 --- a/Game/AI/Executor.cs +++ b/Game/AI/Executor.cs @@ -15,6 +15,7 @@ public abstract class Executor public IList Executors { get; private set; } public GameAI AI { get; private set; } public AIUtil Util { get; private set; } + public CoreFunction CoreFunction { get; private set; } protected MainPhase Main { get; private set; } protected BattlePhase Battle { get; private set; } @@ -32,6 +33,7 @@ protected Executor(GameAI ai, Duel duel) AI = ai; Util = new AIUtil(duel); Executors = new List(); + CoreFunction = AI.CoreFunction; Bot = Duel.Fields[0]; Enemy = Duel.Fields[1]; @@ -276,5 +278,20 @@ private bool DefaultNoExecutor() { return Executors.All(exec => exec.Type != Type || exec.CardId != Card.Id); } + + public int ClientFieldToPlayer(ClientField field) + { + int player = Duel.IsFirst ? 0 : 1; + if (field == Bot) + { + return player; + } + if (field == Enemy) + { + return 1 - player; + } + return 2; + } + } } \ No newline at end of file diff --git a/Game/ClientCard.cs b/Game/ClientCard.cs index 1eec6b7b..b6e4f308 100644 --- a/Game/ClientCard.cs +++ b/Game/ClientCard.cs @@ -85,6 +85,21 @@ public void SetId(int id) } } + public void SetLocation(CardLocation location) + { + Location = location; + } + + public void SetController(int controller) + { + Controller = controller; + } + + public void SetSequence(int sequence) + { + Sequence = sequence; + } + public void Update(BinaryReader packet, Duel duel) { int flag = packet.ReadInt32(); diff --git a/Game/GameAI.cs b/Game/GameAI.cs index 1c120915..7771023c 100644 --- a/Game/GameAI.cs +++ b/Game/GameAI.cs @@ -9,6 +9,7 @@ public class GameAI { public GameClient Game { get; private set; } public Duel Duel { get; private set; } + public CoreFunction CoreFunction { get; private set; } public Executor Executor { get; set; } private Dialogs _dialogs; @@ -16,11 +17,11 @@ public class GameAI // record activated count to prevent infinite actions private Dictionary _activatedCards; - public GameAI(GameClient game, Duel duel) + public GameAI(GameClient game, Duel duel, CoreFunction coreFunction) { Game = game; Duel = duel; - + CoreFunction = coreFunction; _dialogs = new Dialogs(game); _activatedCards = new Dictionary(); } diff --git a/Game/GameBehavior.cs b/Game/GameBehavior.cs index ff2cc939..9b198544 100644 --- a/Game/GameBehavior.cs +++ b/Game/GameBehavior.cs @@ -19,6 +19,7 @@ public class GameBehavior public Deck Deck { get; private set; } private GameAI _ai; + private CoreFunction _coreFunction; private IDictionary> _packets; private IDictionary> _messages; @@ -43,7 +44,8 @@ public GameBehavior(GameClient game) _room = new Room(); _duel = new Duel(); - _ai = new GameAI(Game, _duel); + _coreFunction = new CoreFunction(_duel, Connection); + _ai = new GameAI(Game, _duel, _coreFunction); _ai.Executor = DecksManager.Instantiate(_ai, _duel); Deck = Deck.Load(Game.DeckFile ?? _ai.Executor.Deck); @@ -84,6 +86,7 @@ private void RegisterPackets() _packets.Add(StocMessage.Chat, OnChat); _packets.Add(StocMessage.ChangeSide, OnChangeSide); _packets.Add(StocMessage.ErrorMsg, OnErrorMsg); + _packets.Add(StocMessage.AiReceive, OnAiReceive); _messages.Add(GameMessage.Retry, OnRetry); _messages.Add(GameMessage.Start, OnStart); @@ -146,6 +149,11 @@ private void RegisterPackets() _messages.Add(GameMessage.FlipSummoned, OnSummoned); } + private void OnAiReceive(BinaryReader packet) + { + _coreFunction.Data = packet.ReadBytes((int)packet.BaseStream.Length); + } + private void OnJoinGame(BinaryReader packet) { /*int lflist = (int)*/ packet.ReadUInt32(); diff --git a/WindBot.csproj b/WindBot.csproj index c40a8c76..d392fad1 100644 --- a/WindBot.csproj +++ b/WindBot.csproj @@ -67,6 +67,7 @@ + diff --git a/YGOSharp.Network.dll b/YGOSharp.Network.dll index 1df1f9c03b4d013a090f137cfa9dce7a58156f3e..71535441777fc94f1f2a80f2702472ea5b36d03b 100644 GIT binary patch delta 8429 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 diff --git a/YGOSharp.OCGWrapper.Enums.dll b/YGOSharp.OCGWrapper.Enums.dll index 199ff7e61c44a20c15a1b7736d817a1bdc56afec..422fe6e26ecb428564adaa93d995d69f1afeec3e 100644 GIT binary patch literal 18432 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 Fe**nWzY72W delta 4151 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 CD!}Xj diff --git a/YGOSharp.OCGWrapper.dll b/YGOSharp.OCGWrapper.dll index 2d38e5ac1316248f9d6c3b8f597f67790312fe9e..50425d8f47ff2c9a7f4c8acf75764a216b1b3cdf 100644 GIT binary patch delta 6310 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 W?4)%(%2_Ybm@KVa7gqKnU0%1@DyqG|JAh|ap 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�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 z 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

HgL+0*rHXBmbn3Zis5U5C1z5>&W~?k{+3L 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

uj0Lx$3@C1QXzsAQ|{SX)B??G>}%2;vQ}`_!ph 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

1$+J{T52W)l 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 YOKq=SX{<>lZ#2c-Jl76`*TuyD5BfYv7XSbN From b4a78b2af149e0e8e29fd43f7c17710233f9dc56 Mon Sep 17 00:00:00 2001 From: Ha <479310608@qq.com> Date: Mon, 31 Jul 2023 21:59:11 +0800 Subject: [PATCH 18/18] fix --- Game/AI/CoreFunction.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Game/AI/CoreFunction.cs b/Game/AI/CoreFunction.cs index 6c311fab..301530e7 100644 --- a/Game/AI/CoreFunction.cs +++ b/Game/AI/CoreFunction.cs @@ -968,7 +968,7 @@ private object HandleDuel(FunctionCode.Duel functionCode, params object[] parame binaryWriter.Write((byte)1); binaryWriter.Write((int)value); } - else reply.Write((byte)0); + else binaryWriter.Write((byte)0); }; int player = (int)parameters[0]; int code = (int)parameters[1]; @@ -2449,7 +2449,6 @@ public bool IsStatus(ClientCard c, int status) ///

public bool IsRelateToChain(ClientCard c, int chainc) { - //不随意调用 return HandleCardIntToBool(FunctionCode.Card.IsRelateToChain, c, chainc); }