From 6ea84fe7fd45d33402e0a7f36929d1233eb854d9 Mon Sep 17 00:00:00 2001 From: purerosefallen <78877@qq.com> Date: Sat, 13 Mar 2021 17:05:20 +0800 Subject: [PATCH 1/3] add buildUpdateDeck --- Game/GameBehavior.cs | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/Game/GameBehavior.cs b/Game/GameBehavior.cs index 89eea440..b981134a 100644 --- a/Game/GameBehavior.cs +++ b/Game/GameBehavior.cs @@ -28,6 +28,7 @@ public class GameBehavior private bool _debug; private int _select_hint; private GameMessage _lastMessage; + private int lastDuelResult; public GameBehavior(GameClient game) { @@ -47,6 +48,7 @@ public GameBehavior(GameClient game) Deck = Deck.Load(Game.DeckFile ?? _ai.Executor.Deck); _select_hint = 0; + lastDuelResult = 2; } public int GetLocalPlayer(int player) @@ -144,6 +146,19 @@ private void RegisterPackets() _messages.Add(GameMessage.FlipSummoned, OnSummoned); } + private BinaryWriter buildUpdateDeck(Deck targetDeck) { + BinaryWriter deck = GamePacketFactory.Create(CtosMessage.UpdateDeck); + deck.Write(targetDeck.Cards.Count + targetDeck.ExtraCards.Count); + deck.Write(targetDeck.SideCards.Count); + foreach (NamedCard card in targetDeck.Cards) + deck.Write(card.Id); + foreach (NamedCard card in targetDeck.ExtraCards) + deck.Write(card.Id); + foreach (NamedCard card in targetDeck.SideCards) + deck.Write(card.Id); + return deck; + } + private void OnJoinGame(BinaryReader packet) { /*int lflist = (int)*/ packet.ReadUInt32(); @@ -152,30 +167,14 @@ private void OnJoinGame(BinaryReader packet) int duel_rule = packet.ReadByte(); _ai.Duel.IsNewRule = (duel_rule >= 4); _ai.Duel.IsNewRule2020 = (duel_rule >= 5); - BinaryWriter deck = GamePacketFactory.Create(CtosMessage.UpdateDeck); - deck.Write(Deck.Cards.Count + Deck.ExtraCards.Count); - deck.Write(Deck.SideCards.Count); - foreach (NamedCard card in Deck.Cards) - deck.Write(card.Id); - foreach (NamedCard card in Deck.ExtraCards) - deck.Write(card.Id); - foreach (NamedCard card in Deck.SideCards) - deck.Write(card.Id); + BinaryWriter deck = buildUpdateDeck(Deck); Connection.Send(deck); _ai.OnJoinGame(); } private void OnChangeSide(BinaryReader packet) { - BinaryWriter deck = GamePacketFactory.Create(CtosMessage.UpdateDeck); - deck.Write(Deck.Cards.Count + Deck.ExtraCards.Count); - deck.Write(Deck.SideCards.Count); - foreach (NamedCard card in Deck.Cards) - deck.Write(card.Id); - foreach (NamedCard card in Deck.ExtraCards) - deck.Write(card.Id); - foreach (NamedCard card in Deck.SideCards) - deck.Write(card.Id); + BinaryWriter deck = buildUpdateDeck(Deck); Connection.Send(deck); _ai.OnJoinGame(); } @@ -359,7 +358,7 @@ private void OnStart(BinaryReader packet) extra = packet.ReadInt16(); _duel.Fields[GetLocalPlayer(1)].Init(deck, extra); - Logger.DebugWriteLine("Duel started: " + _room.Names[0] + " versus " + _room.Names[1]); + Logger.WriteLine("Duel started: " + _room.Names[0] + " versus " + _room.Names[1]); _ai.OnStart(); } @@ -367,9 +366,11 @@ private void OnWin(BinaryReader packet) { int result = GetLocalPlayer(packet.ReadByte()); + lastDuelResult = result; + string otherName = _room.Position == 0 ? _room.Names[1] : _room.Names[0]; string textResult = (result == 2 ? "Draw" : result == 0 ? "Win" : "Lose"); - Logger.DebugWriteLine("Duel finished against " + otherName + ", result: " + textResult); + Logger.WriteLine("Duel finished against " + otherName + ", result: " + textResult); } private void OnDraw(BinaryReader packet) From 9d138ca0ebff67f25765e2c4656a1d0ef41e0d1b Mon Sep 17 00:00:00 2001 From: purerosefallen <78877@qq.com> Date: Sat, 13 Mar 2021 17:17:40 +0800 Subject: [PATCH 2/3] change side --- Game/GameBehavior.cs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/Game/GameBehavior.cs b/Game/GameBehavior.cs index b981134a..bd33ae7e 100644 --- a/Game/GameBehavior.cs +++ b/Game/GameBehavior.cs @@ -16,6 +16,8 @@ public class GameBehavior public GameClient Game { get; private set; } public YGOClient Connection { get; private set; } public Deck Deck { get; private set; } + public Deck DeckForWin { get; private set; } + public Deck DeckForLose { get; private set; } private GameAI _ai; @@ -45,8 +47,10 @@ public GameBehavior(GameClient game) _ai = new GameAI(Game, _duel); _ai.Executor = DecksManager.Instantiate(_ai, _duel); - Deck = Deck.Load(Game.DeckFile ?? _ai.Executor.Deck); - + string deckName = Game.DeckFile ?? _ai.Executor.Deck; + Deck = Deck.Load(deckName); + DeckForWin = Deck.Load("Win/" + deckName); + DeckForLose = Deck.Load("Lose/" + deckName); _select_hint = 0; lastDuelResult = 2; } @@ -171,10 +175,20 @@ private void OnJoinGame(BinaryReader packet) Connection.Send(deck); _ai.OnJoinGame(); } + + private Deck pickDeckOnResult() { + if(lastDuelResult == 0 && DeckForWin != null) { + return DeckForWin; + } + if(lastDuelResult == 1 && DeckForLose != null) { + return DeckForLose; + } + return Deck; + } private void OnChangeSide(BinaryReader packet) { - BinaryWriter deck = buildUpdateDeck(Deck); + BinaryWriter deck = buildUpdateDeck(pickDeckOnResult()); Connection.Send(deck); _ai.OnJoinGame(); } From f368dda6155b39086138e26e5703bd4fb0f80c9a Mon Sep 17 00:00:00 2001 From: purerosefallen <78877@qq.com> Date: Sat, 13 Mar 2021 18:37:59 +0800 Subject: [PATCH 3/3] side of fp --- Decks/AI_FamiliarPossessed.ydk | 15 ++ Decks/Lose/AI_FamiliarPossessed.ydk | 78 +++++++ Decks/Win/AI_FamiliarPossessed.ydk | 78 +++++++ Game/AI/Decks/FamiliarPossessedExecutor.cs | 230 +++++++++++---------- Game/AI/DefaultExecutor.cs | 17 ++ Game/GameBehavior.cs | 8 +- WindBot.csproj | 8 +- 7 files changed, 324 insertions(+), 110 deletions(-) create mode 100644 Decks/Lose/AI_FamiliarPossessed.ydk create mode 100644 Decks/Win/AI_FamiliarPossessed.ydk diff --git a/Decks/AI_FamiliarPossessed.ydk b/Decks/AI_FamiliarPossessed.ydk index e809afe3..527ec21a 100644 --- a/Decks/AI_FamiliarPossessed.ydk +++ b/Decks/AI_FamiliarPossessed.ydk @@ -61,3 +61,18 @@ 41999284 41999284 !side +14558127 +23434538 +12580477 +14532163 +14532163 +14532163 +8267140 +8267140 +24224830 +24224830 +65681983 +65681983 +10045474 +10045474 +10045474 diff --git a/Decks/Lose/AI_FamiliarPossessed.ydk b/Decks/Lose/AI_FamiliarPossessed.ydk new file mode 100644 index 00000000..33a80a99 --- /dev/null +++ b/Decks/Lose/AI_FamiliarPossessed.ydk @@ -0,0 +1,78 @@ +#created by ... +#main +71197066 +15397015 +15397015 +15397015 +4376659 +4376659 +31764354 +31887906 +40542826 +40542826 +68881650 +68881650 +14558127 +14558127 +36584821 +36584821 +18144506 +35261759 +35261759 +49238328 +49238328 +24224830 +24224830 +73915051 +73915051 +62256492 +62256492 +25704359 +25704359 +30241314 +30241314 +36975314 +36975314 +59305593 +59305593 +61740673 +82732705 +82732705 +40605147 +40605147 +41420027 +41420027 +84749824 +84749824 +#extra +12014404 +31833038 +85289965 +65330383 +38342335 +2857636 +9839945 +30674956 +48815792 +73309655 +97661969 +75452921 +98978921 +41999284 +41999284 +!side +14558127 +23434538 +23434538 +23434538 +12580477 +14532163 +14532163 +14532163 +8267140 +8267140 +65681983 +65681983 +10045474 +10045474 +10045474 diff --git a/Decks/Win/AI_FamiliarPossessed.ydk b/Decks/Win/AI_FamiliarPossessed.ydk new file mode 100644 index 00000000..46c0f2ef --- /dev/null +++ b/Decks/Win/AI_FamiliarPossessed.ydk @@ -0,0 +1,78 @@ +#created by ... +#main +71197066 +15397015 +15397015 +4376659 +4376659 +31764354 +31887906 +40542826 +40542826 +68881650 +68881650 +14558127 +14558127 +14558127 +36584821 +36584821 +23434538 +23434538 +23434538 +14532163 +14532163 +14532163 +18144506 +35261759 +35261759 +49238328 +49238328 +73915051 +73915051 +62256492 +62256492 +10045474 +10045474 +10045474 +25704359 +25704359 +36975314 +36975314 +61740673 +82732705 +82732705 +40605147 +41420027 +41420027 +#extra +12014404 +31833038 +85289965 +65330383 +38342335 +2857636 +9839945 +30674956 +48815792 +73309655 +97661969 +75452921 +98978921 +41999284 +41999284 +!side +15397015 +12580477 +8267140 +8267140 +24224830 +24224830 +65681983 +65681983 +30241314 +30241314 +59305593 +59305593 +40605147 +84749824 +84749824 diff --git a/Game/AI/Decks/FamiliarPossessedExecutor.cs b/Game/AI/Decks/FamiliarPossessedExecutor.cs index e56ea0bb..1d9f5094 100644 --- a/Game/AI/Decks/FamiliarPossessedExecutor.cs +++ b/Game/AI/Decks/FamiliarPossessedExecutor.cs @@ -17,23 +17,23 @@ public class CardId public const int InspectBoarder = 15397015; public const int AshBlossomAndJoyousSpring = 14558127; public const int GrenMajuDaEizo = 36584821; - public const int MaxxC = 23434538; - - public const int Aussa = 31887906; - public const int Eria = 68881650; - public const int Wynn = 31764354; - public const int Hiita = 4376659; - public const int Lyna = 40542825; - public const int Awakening = 62256492; - public const int Unpossessed = 25704359; - + public const int MaxxC = 23434538; + + public const int Aussa = 31887906; + public const int Eria = 68881650; + public const int Wynn = 31764354; + public const int Hiita = 4376659; + public const int Lyna = 40542825; + public const int Awakening = 62256492; + public const int Unpossessed = 25704359; + public const int NaturalExterio = 99916754; public const int NaturalBeast = 33198837; public const int SwordsmanLV7 = 37267041; public const int RoyalDecreel = 51452091; public const int HarpieFeatherDuster = 18144506; - public const int PotOfDesires = 35261759; + public const int PotOfDesires = 35261759; public const int PotofExtravagance = 49238328; public const int Scapegoat = 73915051; public const int MacroCosmos = 30241314; @@ -41,32 +41,39 @@ public class CardId public const int ImperialOrder = 61740673; public const int SolemnWarning = 84749824; public const int SolemStrike = 40605147; - public const int SolemnJudgment = 41420027; - public const int SkillDrain = 82732705; + public const int SolemnJudgment = 41420027; + public const int SkillDrain = 82732705; public const int Mistake = 59305593; public const int BorreloadDragon = 31833038; - public const int BirrelswordDragon = 85289965; + public const int BirrelswordDragon = 85289965; public const int KnightmareGryphon = 65330383; public const int KnightmareUnicorn = 38342335; public const int KnightmarePhoenix = 2857636; public const int KnightmareCerberus = 75452921; public const int LinkSpider = 98978921; - public const int Linkuriboh = 41999284; - public const int GagagaCowboy = 12014404; - - public const int AussaP = 97661969; - public const int EriaP = 73309655; - public const int WynnP = 30674956; - public const int HiitaP = 48815792; - public const int LynaP = 9839945; - + public const int Linkuriboh = 41999284; + public const int GagagaCowboy = 12014404; + + public const int AussaP = 97661969; + public const int EriaP = 73309655; + public const int WynnP = 30674956; + public const int HiitaP = 48815792; + public const int LynaP = 9839945; + + // side + public const int Raigeki = 12580477; + public const int lightningStorm = 14532163; + public const int CosmicCyclone = 8267140; + public const int CalledByTheGrave = 24224830; + public const int CrossoutDesignator = 65681983; + public const int InfiniteImpermanence = 10045474; } public FamiliarPossessedExecutor(GameAI ai, Duel duel) : base(ai, duel) - { - // do first + { + // do first AddExecutor(ExecutorType.Activate, CardId.PotofExtravagance, PotofExtravaganceActivate); // burn if enemy's LP is below 800 AddExecutor(ExecutorType.SpSummon, CardId.GagagaCowboy, GagagaCowboySummon); @@ -74,19 +81,26 @@ public FamiliarPossessedExecutor(GameAI ai, Duel duel) //Sticker AddExecutor(ExecutorType.Activate, CardId.MacroCosmos, MacroCosmoseff); //counter + AddExecutor(ExecutorType.Activate, CardId.CalledByTheGrave, DefaultCalledByTheGrave); + // AddExecutor(ExecutorType.Activate, CardId.CrossoutDesignator, DefaultCalledByTheGrave); + AddExecutor(ExecutorType.Activate, CardId.InfiniteImpermanence, DefaultInfiniteImpermanence); AddExecutor(ExecutorType.Activate, CardId.AshBlossomAndJoyousSpring, DefaultAshBlossomAndJoyousSpring); - AddExecutor(ExecutorType.Activate, CardId.MaxxC, DefaultMaxxC); + AddExecutor(ExecutorType.Activate, CardId.MaxxC, DefaultMaxxC); AddExecutor(ExecutorType.Activate, CardId.SolemnWarning, DefaultSolemnWarning); AddExecutor(ExecutorType.Activate, CardId.SolemStrike, DefaultSolemnStrike); AddExecutor(ExecutorType.Activate, CardId.ImperialOrder, ImperialOrderfirst); AddExecutor(ExecutorType.Activate, CardId.ImperialOrder, ImperialOrdereff); - AddExecutor(ExecutorType.Activate, CardId.SolemnJudgment, DefaultSolemnJudgment); - AddExecutor(ExecutorType.Activate, CardId.SkillDrain, SkillDrainEffect); - AddExecutor(ExecutorType.Activate, CardId.Mistake, DefaultUniqueTrap); - AddExecutor(ExecutorType.Activate, CardId.Awakening); + AddExecutor(ExecutorType.Activate, CardId.SolemnJudgment, DefaultSolemnJudgment); + AddExecutor(ExecutorType.Activate, CardId.SkillDrain, SkillDrainEffect); + AddExecutor(ExecutorType.Activate, CardId.Mistake, DefaultUniqueTrap); + AddExecutor(ExecutorType.Activate, CardId.Awakening); AddExecutor(ExecutorType.Activate, CardId.Unpossessed, UnpossessedEffect); //first do + AddExecutor(ExecutorType.Activate, CardId.lightningStorm, DefaultLightingStorm); AddExecutor(ExecutorType.Activate, CardId.HarpieFeatherDuster, DefaultHarpiesFeatherDusterFirst); + AddExecutor(ExecutorType.Activate, CardId.CosmicCyclone, DefaultMysticalSpaceTyphoon); + AddExecutor(ExecutorType.Activate, CardId.Raigeki, DefaultRaigeki); + AddExecutor(ExecutorType.Activate, CardId.PotOfDesires, PotOfDesireseff); //sp AddExecutor(ExecutorType.Activate, CardId.Linkuriboh, Linkuriboheff); @@ -94,31 +108,31 @@ public FamiliarPossessedExecutor(GameAI ai, Duel duel) AddExecutor(ExecutorType.SpSummon, CardId.KnightmareCerberus, Knightmaresp); AddExecutor(ExecutorType.SpSummon, CardId.KnightmarePhoenix, Knightmaresp); AddExecutor(ExecutorType.SpSummon, CardId.AussaP, AussaPsp); - AddExecutor(ExecutorType.Activate, CardId.AussaP, AussaPeff); + AddExecutor(ExecutorType.Activate, CardId.AussaP, AussaPeff); AddExecutor(ExecutorType.SpSummon, CardId.EriaP, EriaPsp); - AddExecutor(ExecutorType.Activate, CardId.EriaP, EriaPeff); + AddExecutor(ExecutorType.Activate, CardId.EriaP, EriaPeff); AddExecutor(ExecutorType.SpSummon, CardId.WynnP, WynnPsp); - AddExecutor(ExecutorType.Activate, CardId.WynnP, WynnPeff); + AddExecutor(ExecutorType.Activate, CardId.WynnP, WynnPeff); AddExecutor(ExecutorType.SpSummon, CardId.HiitaP, HiitaPsp); - AddExecutor(ExecutorType.Activate, CardId.HiitaP, HiitaPeff); + AddExecutor(ExecutorType.Activate, CardId.HiitaP, HiitaPeff); AddExecutor(ExecutorType.SpSummon, CardId.LynaP, LynaPsp); - AddExecutor(ExecutorType.Activate, CardId.LynaP, LynaPeff); - + AddExecutor(ExecutorType.Activate, CardId.LynaP, LynaPeff); + AddExecutor(ExecutorType.SpSummon, CardId.Linkuriboh, Linkuribohsp); AddExecutor(ExecutorType.SpSummon, CardId.LinkSpider); AddExecutor(ExecutorType.SpSummon, CardId.BorreloadDragon, BorreloadDragonsp); - AddExecutor(ExecutorType.Activate, CardId.BorreloadDragon, BorreloadDragoneff); + AddExecutor(ExecutorType.Activate, CardId.BorreloadDragon, BorreloadDragoneff); AddExecutor(ExecutorType.SpSummon, CardId.BirrelswordDragon, BirrelswordDragonsp); - AddExecutor(ExecutorType.Activate, CardId.BirrelswordDragon, BirrelswordDragoneff); - // normal summon + AddExecutor(ExecutorType.Activate, CardId.BirrelswordDragon, BirrelswordDragoneff); + // normal summon AddExecutor(ExecutorType.Summon, CardId.InspectBoarder, InspectBoardersummon); AddExecutor(ExecutorType.Summon, CardId.GrenMajuDaEizo, GrenMajuDaEizosummon); - AddExecutor(ExecutorType.SpSummon, CardId.BorreloadDragon, BorreloadDragonspsecond); - - AddExecutor(ExecutorType.Summon, CardId.Aussa, FamiliarPossessedsummon); - AddExecutor(ExecutorType.Summon, CardId.Eria, FamiliarPossessedsummon); - AddExecutor(ExecutorType.Summon, CardId.Wynn, FamiliarPossessedsummon); - AddExecutor(ExecutorType.Summon, CardId.Hiita, FamiliarPossessedsummon); + AddExecutor(ExecutorType.SpSummon, CardId.BorreloadDragon, BorreloadDragonspsecond); + + AddExecutor(ExecutorType.Summon, CardId.Aussa, FamiliarPossessedsummon); + AddExecutor(ExecutorType.Summon, CardId.Eria, FamiliarPossessedsummon); + AddExecutor(ExecutorType.Summon, CardId.Wynn, FamiliarPossessedsummon); + AddExecutor(ExecutorType.Summon, CardId.Hiita, FamiliarPossessedsummon); AddExecutor(ExecutorType.Summon, CardId.Lyna, FamiliarPossessedsummon); AddExecutor(ExecutorType.Activate, CardId.MetalSnake, MetalSnakesp); @@ -129,8 +143,8 @@ public FamiliarPossessedExecutor(GameAI ai, Duel duel) AddExecutor(ExecutorType.Repos, DefaultMonsterRepos); //set AddExecutor(ExecutorType.SpellSet, SpellSet); - } - + } + public void SelectSTPlace(ClientCard card = null, bool avoid_Impermanence = false, List avoid_list = null) { List list = new List { 0, 1, 2, 3, 4 }; @@ -154,8 +168,8 @@ public void SelectSTPlace(ClientCard card = null, bool avoid_Impermanence = fals }; } AI.SelectPlace(0); - } - + } + public bool SpellNegatable(bool isCounter = false, ClientCard target = null) { // target default set @@ -180,8 +194,8 @@ public bool SpellNegatable(bool isCounter = false, ClientCard target = null) } private bool MacroCosmoseff() - { - + { + return (Duel.LastChainPlayer == 1 || Duel.LastSummonPlayer == 1 || Duel.Player == 0) && UniqueFaceupSpell(); } @@ -208,7 +222,7 @@ private bool ImperialOrdereff() } private bool PotOfDesireseff() - { + { return Bot.Deck.Count > 14 && !DefaultSpellWillBeNegated(); } @@ -227,27 +241,27 @@ private bool Crackdowneff() if (Util.GetOneEnemyBetterThanMyBest(true, true) != null && Bot.UnderAttack) AI.SelectCard(Util.GetOneEnemyBetterThanMyBest(true, true)); return Util.GetOneEnemyBetterThanMyBest(true, true) != null && Bot.UnderAttack; - } - + } + private bool SkillDrainEffect() { return (Bot.LifePoints > 1000) && DefaultUniqueTrap(); - } - + } + private bool UnpossessedEffect() - { + { AI.SelectCard(new List() { - CardId.Lyna, - CardId.Hiita, - CardId.Wynn, - CardId.Eria, + CardId.Lyna, + CardId.Hiita, + CardId.Wynn, + CardId.Eria, CardId.Aussa }); return true; } private bool InspectBoardersummon() - { + { if (Bot.MonsterZone[0] == null) AI.SelectPlace(Zones.z0); else @@ -257,17 +271,17 @@ private bool InspectBoardersummon() private bool GrenMajuDaEizosummon() { - if (Duel.Turn == 1) return false; - if (Bot.HasInSpellZone(CardId.SkillDrain) || Enemy.HasInSpellZone(CardId.SkillDrain)) return false; + if (Duel.Turn == 1) return false; + if (Bot.HasInSpellZone(CardId.SkillDrain) || Enemy.HasInSpellZone(CardId.SkillDrain)) return false; if (Bot.MonsterZone[0] == null) AI.SelectPlace(Zones.z0); else AI.SelectPlace(Zones.z4); return Bot.Banished.Count >= 6; - } - + } + private bool FamiliarPossessedsummon() - { + { if (Bot.MonsterZone[0] == null) AI.SelectPlace(Zones.z0); else @@ -330,8 +344,8 @@ public bool BorreloadDragoneff() return true; } return false; - } - + } + private bool BirrelswordDragonsp() { IList material_list = new List(); @@ -363,7 +377,7 @@ private bool BirrelswordDragonsp() private bool BirrelswordDragoneff() { if (ActivateDescription == Util.GetStringId(CardId.BirrelswordDragon, 0)) - { + { if (Util.IsChainTarget(Card) && Util.GetBestEnemyMonster(true, true) != null) { AI.SelectCard(Util.GetBestEnemyMonster(true, true)); @@ -404,7 +418,7 @@ private bool MetalSnakesp() return Bot.Deck.Count >= 12; if (Duel.Player == 0 && Duel.Phase >= DuelPhase.Main1) return Bot.Deck.Count >= 12; - } + } return false; } @@ -414,22 +428,22 @@ private bool MetalSnakeeff() if (ActivateDescription == Util.GetStringId(CardId.MetalSnake, 1) && target != null) { AI.SelectCard(new[] - { - CardId.LynaP, - CardId.HiitaP, - CardId.WynnP, - CardId.EriaP, + { + CardId.LynaP, + CardId.HiitaP, + CardId.WynnP, + CardId.EriaP, CardId.KnightmareGryphon - }); + }); AI.SelectNextCard(target); return true; } - return false; - + return false; + } private bool AussaPsp() - { + { IList material_list = new List(); foreach (ClientCard monster in Bot.GetMonsters()) { @@ -451,10 +465,10 @@ private bool AussaPeff() { AI.SelectCard(CardId.MaxxC, CardId.Aussa); return true; - } - + } + private bool EriaPsp() - { + { IList material_list = new List(); foreach (ClientCard monster in Bot.GetMonsters()) { @@ -476,10 +490,10 @@ private bool EriaPeff() { AI.SelectCard(CardId.Eria); return true; - } - + } + private bool WynnPsp() - { + { IList material_list = new List(); foreach (ClientCard monster in Bot.GetMonsters()) { @@ -501,10 +515,10 @@ private bool WynnPeff() { AI.SelectCard(CardId.Wynn); return true; - } - + } + private bool HiitaPsp() - { + { IList material_list = new List(); foreach (ClientCard monster in Bot.GetMonsters()) { @@ -526,10 +540,10 @@ private bool HiitaPeff() { AI.SelectCard(CardId.Hiita); return true; - } - + } + private bool LynaPsp() - { + { IList material_list = new List(); foreach (ClientCard monster in Bot.GetMonsters()) { @@ -551,13 +565,13 @@ private bool LynaPeff() { AI.SelectCard(CardId.Lyna); return true; - } - + } + private bool Linkuribohsp() - { - + { + foreach (ClientCard c in Bot.GetMonsters()) - { + { if (c.Level == 1) { AI.SelectMaterials(c); @@ -586,10 +600,10 @@ private bool Knightmaresp() } private bool Linkuriboheff() { - if (Duel.LastChainPlayer == 0 && Util.GetLastChainCard().IsCode(CardId.Linkuriboh)) return false; + if (Duel.LastChainPlayer == 0 && Util.GetLastChainCard().IsCode(CardId.Linkuriboh)) return false; return true; - } - + } + private bool GagagaCowboySummon() { if (Enemy.LifePoints <= 800 || (Bot.GetMonsterCount() >= 4 && Enemy.LifePoints <= 1600)) @@ -600,16 +614,16 @@ private bool GagagaCowboySummon() return false; } private bool SpellSet() - { - if (Card.IsCode(CardId.MacroCosmos) && Bot.HasInSpellZone(CardId.MacroCosmos)) return false; - if (Card.IsCode(CardId.Unpossessed) && Bot.HasInSpellZone(CardId.Unpossessed)) return false; - if (Card.IsCode(CardId.Crackdown) && Bot.HasInSpellZone(CardId.Crackdown)) return false; - if (Card.IsCode(CardId.SkillDrain) && Bot.HasInSpellZone(CardId.SkillDrain)) return false; + { + if (Card.IsCode(CardId.MacroCosmos) && Bot.HasInSpellZone(CardId.MacroCosmos)) return false; + if (Card.IsCode(CardId.Unpossessed) && Bot.HasInSpellZone(CardId.Unpossessed)) return false; + if (Card.IsCode(CardId.Crackdown) && Bot.HasInSpellZone(CardId.Crackdown)) return false; + if (Card.IsCode(CardId.SkillDrain) && Bot.HasInSpellZone(CardId.SkillDrain)) return false; if (Card.IsCode(CardId.Mistake) && Bot.HasInSpellZone(CardId.Mistake)) return false; if (Card.IsCode(CardId.Scapegoat)) return true; if (Card.HasType(CardType.Trap)) - return Bot.GetSpellCountWithoutField() < 4; + return Bot.GetSpellCountWithoutField() < 4; return false; } public override ClientCard OnSelectAttacker(IList attackers, IList defenders) @@ -624,6 +638,6 @@ public override ClientCard OnSelectAttacker(IList attackers, IList Enemy.SpellZone.ToList().Count ) && Enemy.MonsterZone.ToList().Count>3) + { + AI.SelectPlace(Zones.MonsterZones); + return true; + } + else + { + AI.SelectPlace(Zones.SpellZones); + return true; + } + + } } } diff --git a/Game/GameBehavior.cs b/Game/GameBehavior.cs index bd33ae7e..94e81e31 100644 --- a/Game/GameBehavior.cs +++ b/Game/GameBehavior.cs @@ -153,7 +153,9 @@ private void RegisterPackets() private BinaryWriter buildUpdateDeck(Deck targetDeck) { BinaryWriter deck = GamePacketFactory.Create(CtosMessage.UpdateDeck); deck.Write(targetDeck.Cards.Count + targetDeck.ExtraCards.Count); + //Logger.WriteLine("Main + Extra: " + targetDeck.Cards.Count + targetDeck.ExtraCards.Count); deck.Write(targetDeck.SideCards.Count); + //Logger.WriteLine("Side: " + targetDeck.SideCards.Count); foreach (NamedCard card in targetDeck.Cards) deck.Write(card.Id); foreach (NamedCard card in targetDeck.ExtraCards) @@ -171,18 +173,21 @@ private void OnJoinGame(BinaryReader packet) int duel_rule = packet.ReadByte(); _ai.Duel.IsNewRule = (duel_rule >= 4); _ai.Duel.IsNewRule2020 = (duel_rule >= 5); - BinaryWriter deck = buildUpdateDeck(Deck); + BinaryWriter deck = buildUpdateDeck(pickDeckOnResult()); Connection.Send(deck); _ai.OnJoinGame(); } private Deck pickDeckOnResult() { if(lastDuelResult == 0 && DeckForWin != null) { + //Logger.WriteLine("Using deck for win: " + DeckForWin.SideCards[2].Name); return DeckForWin; } if(lastDuelResult == 1 && DeckForLose != null) { + //Logger.WriteLine("Using deck for lose: " + DeckForLose.SideCards[2].Name); return DeckForLose; } + //Logger.WriteLine("Using default deck."); return Deck; } @@ -306,6 +311,7 @@ private void OnChat(BinaryReader packet) private void OnErrorMsg(BinaryReader packet) { int msg = packet.ReadByte(); + Logger.WriteLine("Got error: " + msg); // align packet.ReadByte(); packet.ReadByte(); diff --git a/WindBot.csproj b/WindBot.csproj index 528ac780..d0e6e65b 100644 --- a/WindBot.csproj +++ b/WindBot.csproj @@ -156,6 +156,12 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + PreserveNewest @@ -171,4 +177,4 @@ --> - \ No newline at end of file +