Commit c2a94e8e authored by mercury233's avatar mercury233

rename AI.Utils to Util

parent d2bdb15f
...@@ -4,45 +4,19 @@ using System.Linq; ...@@ -4,45 +4,19 @@ using System.Linq;
using YGOSharp.OCGWrapper.Enums; using YGOSharp.OCGWrapper.Enums;
namespace WindBot.Game.AI namespace WindBot.Game.AI
{ {
public class AIFunctions public class AIUtil
{ {
public Duel Duel { get; private set; } public Duel Duel { get; private set; }
public ClientField Bot { get; private set; } public ClientField Bot { get; private set; }
public ClientField Enemy { get; private set; } public ClientField Enemy { get; private set; }
public AIFunctions(Duel duel) public AIUtil(Duel duel)
{ {
Duel = duel; Duel = duel;
Bot = Duel.Fields[0]; Bot = Duel.Fields[0];
Enemy = Duel.Fields[1]; Enemy = Duel.Fields[1];
} }
public static int CompareCardAttack(ClientCard cardA, ClientCard cardB)
{
if (cardA.Attack < cardB.Attack)
return -1;
if (cardA.Attack == cardB.Attack)
return 0;
return 1;
}
public static int CompareDefensePower(ClientCard cardA, ClientCard cardB)
{
if (cardA == null && cardB == null)
return 0;
if (cardA == null)
return -1;
if (cardB == null)
return 1;
int powerA = cardA.GetDefensePower();
int powerB = cardB.GetDefensePower();
if (powerA < powerB)
return -1;
if (powerA == powerB)
return 0;
return 1;
}
/// <summary> /// <summary>
/// Get the total ATK Monster of the player. /// Get the total ATK Monster of the player.
/// </summary> /// </summary>
......
...@@ -7,6 +7,32 @@ namespace WindBot.Game.AI ...@@ -7,6 +7,32 @@ namespace WindBot.Game.AI
{ {
public static class CardContainer public static class CardContainer
{ {
public static int CompareCardAttack(ClientCard cardA, ClientCard cardB)
{
if (cardA.Attack < cardB.Attack)
return -1;
if (cardA.Attack == cardB.Attack)
return 0;
return 1;
}
public static int CompareDefensePower(ClientCard cardA, ClientCard cardB)
{
if (cardA == null && cardB == null)
return 0;
if (cardA == null)
return -1;
if (cardB == null)
return 1;
int powerA = cardA.GetDefensePower();
int powerB = cardB.GetDefensePower();
if (powerA < powerB)
return -1;
if (powerA == powerB)
return 0;
return 1;
}
public static ClientCard GetHighestAttackMonster(this IEnumerable<ClientCard> cards, bool canBeTarget = false) public static ClientCard GetHighestAttackMonster(this IEnumerable<ClientCard> cards, bool canBeTarget = false)
{ {
return cards return cards
......
This diff is collapsed.
...@@ -93,7 +93,7 @@ namespace WindBot.Game.AI.Decks ...@@ -93,7 +93,7 @@ namespace WindBot.Game.AI.Decks
{ {
if (Card.Location == CardLocation.Hand && Bot.HasInSpellZone(Card.Id)) if (Card.Location == CardLocation.Hand && Bot.HasInSpellZone(Card.Id))
return false; return false;
if (ActivateDescription == AI.Utils.GetStringId((int)Card.Id,0)) if (ActivateDescription == Util.GetStringId((int)Card.Id,0))
AI.SelectCard(CardId.GaleTheWhirlwind); AI.SelectCard(CardId.GaleTheWhirlwind);
return true; return true;
} }
......
...@@ -143,7 +143,7 @@ namespace WindBot.Game.AI.Decks ...@@ -143,7 +143,7 @@ namespace WindBot.Game.AI.Decks
if (!Bot.HasInHand(CardId.WhiteDragon)) if (!Bot.HasInHand(CardId.WhiteDragon))
result.AddRange(cards.Where(card => card.IsCode(CardId.WhiteDragon)).Take(1)); result.AddRange(cards.Where(card => card.IsCode(CardId.WhiteDragon)).Take(1));
result.AddRange(cards.Where(card => card.IsCode(CardId.AlternativeWhiteDragon))); result.AddRange(cards.Where(card => card.IsCode(CardId.AlternativeWhiteDragon)));
return AI.Utils.CheckSelectCount(result, cards, min, max); return Util.CheckSelectCount(result, cards, min, max);
} }
Logger.DebugWriteLine("Use default."); Logger.DebugWriteLine("Use default.");
return null; return null;
...@@ -152,8 +152,8 @@ namespace WindBot.Game.AI.Decks ...@@ -152,8 +152,8 @@ namespace WindBot.Game.AI.Decks
public override IList<ClientCard> OnSelectXyzMaterial(IList<ClientCard> cards, int min, int max) public override IList<ClientCard> OnSelectXyzMaterial(IList<ClientCard> cards, int min, int max)
{ {
Logger.DebugWriteLine("OnSelectXyzMaterial " + cards.Count + " " + min + " " + max); Logger.DebugWriteLine("OnSelectXyzMaterial " + cards.Count + " " + min + " " + max);
IList<ClientCard> result = AI.Utils.SelectPreferredCards(UsedAlternativeWhiteDragon, cards, min, max); IList<ClientCard> result = Util.SelectPreferredCards(UsedAlternativeWhiteDragon, cards, min, max);
return AI.Utils.CheckSelectCount(result, cards, min, max); return Util.CheckSelectCount(result, cards, min, max);
} }
public override IList<ClientCard> OnSelectSynchroMaterial(IList<ClientCard> cards, int sum, int min, int max) public override IList<ClientCard> OnSelectSynchroMaterial(IList<ClientCard> cards, int sum, int min, int max)
...@@ -259,7 +259,7 @@ namespace WindBot.Game.AI.Decks ...@@ -259,7 +259,7 @@ namespace WindBot.Game.AI.Decks
private bool AlternativeWhiteDragonEffect() private bool AlternativeWhiteDragonEffect()
{ {
ClientCard target = AI.Utils.GetProblematicEnemyMonster(Card.GetDefensePower()); ClientCard target = Util.GetProblematicEnemyMonster(Card.GetDefensePower());
if (target != null) if (target != null)
{ {
AI.SelectCard(target); AI.SelectCard(target);
...@@ -268,7 +268,7 @@ namespace WindBot.Game.AI.Decks ...@@ -268,7 +268,7 @@ namespace WindBot.Game.AI.Decks
} }
if (CanDealWithUsedAlternativeWhiteDragon()) if (CanDealWithUsedAlternativeWhiteDragon())
{ {
target = AI.Utils.GetBestEnemyMonster(false, true); target = Util.GetBestEnemyMonster(false, true);
AI.SelectCard(target); AI.SelectCard(target);
UsedAlternativeWhiteDragon.Add(Card); UsedAlternativeWhiteDragon.Add(Card);
return true; return true;
...@@ -389,7 +389,7 @@ namespace WindBot.Game.AI.Decks ...@@ -389,7 +389,7 @@ namespace WindBot.Game.AI.Decks
{ {
if (ActivateDescription == -1) if (ActivateDescription == -1)
{ {
ClientCard target = AI.Utils.GetBestEnemySpell(); ClientCard target = Util.GetBestEnemySpell();
AI.SelectCard(target); AI.SelectCard(target);
return true; return true;
} }
...@@ -405,7 +405,7 @@ namespace WindBot.Game.AI.Decks ...@@ -405,7 +405,7 @@ namespace WindBot.Game.AI.Decks
&& !Bot.HasInGraveyard(CardId.DragonSpiritOfWhite) && !Bot.HasInGraveyard(CardId.DragonSpiritOfWhite)
&& !Bot.HasInGraveyard(CardId.WhiteDragon); && !Bot.HasInGraveyard(CardId.WhiteDragon);
} }
if (AI.Utils.IsChainTarget(Card)) if (Util.IsChainTarget(Card))
{ {
return true; return true;
} }
...@@ -415,7 +415,7 @@ namespace WindBot.Game.AI.Decks ...@@ -415,7 +415,7 @@ namespace WindBot.Game.AI.Decks
private bool BlueEyesSpiritDragonEffect() private bool BlueEyesSpiritDragonEffect()
{ {
if (ActivateDescription == -1 || ActivateDescription == AI.Utils.GetStringId(CardId.BlueEyesSpiritDragon, 0)) if (ActivateDescription == -1 || ActivateDescription == Util.GetStringId(CardId.BlueEyesSpiritDragon, 0))
{ {
return Duel.LastChainPlayer == 1; return Duel.LastChainPlayer == 1;
} }
...@@ -426,7 +426,7 @@ namespace WindBot.Game.AI.Decks ...@@ -426,7 +426,7 @@ namespace WindBot.Game.AI.Decks
} }
else else
{ {
if (AI.Utils.IsChainTarget(Card)) if (Util.IsChainTarget(Card))
{ {
AI.SelectCard(CardId.AzureEyesSilverDragon); AI.SelectCard(CardId.AzureEyesSilverDragon);
return true; return true;
...@@ -437,7 +437,7 @@ namespace WindBot.Game.AI.Decks ...@@ -437,7 +437,7 @@ namespace WindBot.Game.AI.Decks
private bool HopeHarbingerDragonTitanicGalaxyEffect() private bool HopeHarbingerDragonTitanicGalaxyEffect()
{ {
if (ActivateDescription == -1 || ActivateDescription == AI.Utils.GetStringId(CardId.HopeHarbingerDragonTitanicGalaxy, 0)) if (ActivateDescription == -1 || ActivateDescription == Util.GetStringId(CardId.HopeHarbingerDragonTitanicGalaxy, 0))
{ {
return Duel.LastChainPlayer == 1; return Duel.LastChainPlayer == 1;
} }
...@@ -446,7 +446,7 @@ namespace WindBot.Game.AI.Decks ...@@ -446,7 +446,7 @@ namespace WindBot.Game.AI.Decks
private bool WhiteStoneOfAncientsEffect() private bool WhiteStoneOfAncientsEffect()
{ {
if (ActivateDescription == AI.Utils.GetStringId(CardId.WhiteStoneOfAncients, 0)) if (ActivateDescription == Util.GetStringId(CardId.WhiteStoneOfAncients, 0))
{ {
if (Bot.HasInHand(CardId.TradeIn) if (Bot.HasInHand(CardId.TradeIn)
&& !Bot.HasInHand(CardId.WhiteDragon) && !Bot.HasInHand(CardId.WhiteDragon)
...@@ -538,7 +538,7 @@ namespace WindBot.Game.AI.Decks ...@@ -538,7 +538,7 @@ namespace WindBot.Game.AI.Decks
{ {
return false; return false;
} }
if (AI.Utils.IsOneEnemyBetterThanValue(2999, false)) if (Util.IsOneEnemyBetterThanValue(2999, false))
{ {
return true; return true;
} }
...@@ -561,7 +561,7 @@ namespace WindBot.Game.AI.Decks ...@@ -561,7 +561,7 @@ namespace WindBot.Game.AI.Decks
} }
if (Bot.HasInMonstersZone(CardId.GalaxyEyesPrimePhotonDragon)) if (Bot.HasInMonstersZone(CardId.GalaxyEyesPrimePhotonDragon))
{ {
if (!AI.Utils.IsOneEnemyBetterThanValue(4000, false)) if (!Util.IsOneEnemyBetterThanValue(4000, false))
{ {
AI.SelectCard(CardId.GalaxyEyesPrimePhotonDragon); AI.SelectCard(CardId.GalaxyEyesPrimePhotonDragon);
return true; return true;
...@@ -572,7 +572,7 @@ namespace WindBot.Game.AI.Decks ...@@ -572,7 +572,7 @@ namespace WindBot.Game.AI.Decks
private bool GalaxyEyesCipherBladeDragonSummon() private bool GalaxyEyesCipherBladeDragonSummon()
{ {
if (Bot.HasInMonstersZone(CardId.GalaxyEyesFullArmorPhotonDragon) && AI.Utils.GetProblematicEnemyCard() != null) if (Bot.HasInMonstersZone(CardId.GalaxyEyesFullArmorPhotonDragon) && Util.GetProblematicEnemyCard() != null)
{ {
AI.SelectCard(CardId.GalaxyEyesFullArmorPhotonDragon); AI.SelectCard(CardId.GalaxyEyesFullArmorPhotonDragon);
return true; return true;
...@@ -622,13 +622,13 @@ namespace WindBot.Game.AI.Decks ...@@ -622,13 +622,13 @@ namespace WindBot.Game.AI.Decks
private bool GalaxyEyesFullArmorPhotonDragonEffect() private bool GalaxyEyesFullArmorPhotonDragonEffect()
{ {
ClientCard target = AI.Utils.GetProblematicEnemySpell(); ClientCard target = Util.GetProblematicEnemySpell();
if (target != null) if (target != null)
{ {
AI.SelectCard(target); AI.SelectCard(target);
return true; return true;
} }
target = AI.Utils.GetProblematicEnemyMonster(); target = Util.GetProblematicEnemyMonster();
if (target != null) if (target != null)
{ {
AI.SelectCard(target); AI.SelectCard(target);
...@@ -679,7 +679,7 @@ namespace WindBot.Game.AI.Decks ...@@ -679,7 +679,7 @@ namespace WindBot.Game.AI.Decks
{ {
return true; return true;
} }
ClientCard target = AI.Utils.GetProblematicEnemyCard(); ClientCard target = Util.GetProblematicEnemyCard();
if (target != null) if (target != null)
{ {
AI.SelectCard(target); AI.SelectCard(target);
...@@ -737,8 +737,8 @@ namespace WindBot.Game.AI.Decks ...@@ -737,8 +737,8 @@ namespace WindBot.Game.AI.Decks
{ {
if (Duel.Phase != DuelPhase.Main1 || Duel.Turn == 1 || SoulChargeUsed) if (Duel.Phase != DuelPhase.Main1 || Duel.Turn == 1 || SoulChargeUsed)
return false; return false;
int bestSelfAttack = AI.Utils.GetBestAttack(Bot); int bestSelfAttack = Util.GetBestAttack(Bot);
int bestEnemyAttack = AI.Utils.GetBestPower(Enemy); int bestEnemyAttack = Util.GetBestPower(Enemy);
return bestSelfAttack <= bestEnemyAttack && bestEnemyAttack > 2500 && bestEnemyAttack <= 3100; return bestSelfAttack <= bestEnemyAttack && bestEnemyAttack > 2500 && bestEnemyAttack <= 3100;
} }
...@@ -856,7 +856,7 @@ namespace WindBot.Game.AI.Decks ...@@ -856,7 +856,7 @@ namespace WindBot.Game.AI.Decks
private bool Repos() private bool Repos()
{ {
bool enemyBetter = AI.Utils.IsAllEnemyBetter(true); bool enemyBetter = Util.IsAllEnemyBetter(true);
if (Card.IsAttack() && enemyBetter) if (Card.IsAttack() && enemyBetter)
return true; return true;
......
...@@ -128,32 +128,32 @@ namespace WindBot.Game.AI.Decks ...@@ -128,32 +128,32 @@ namespace WindBot.Game.AI.Decks
{ {
if(Duel.LastChainPlayer==1) if(Duel.LastChainPlayer==1)
{ {
ClientCard lastCard = AI.Utils.GetLastChainCard(); ClientCard lastCard = Util.GetLastChainCard();
if (lastCard.IsCode(CardId.MaxxC)) if (lastCard.IsCode(CardId.MaxxC))
{ {
AI.SelectCard(CardId.MaxxC); AI.SelectCard(CardId.MaxxC);
if(AI.Utils.ChainContainsCard(CardId.TheMelodyOfAwakeningDragon)) if(Util.ChainContainsCard(CardId.TheMelodyOfAwakeningDragon))
AI.SelectNextCard(CardId.BlueEyesChaosMaxDragon, CardId.BlueEyesChaosMaxDragon, CardId.BlueEyesAlternativeWhiteDragon); AI.SelectNextCard(CardId.BlueEyesChaosMaxDragon, CardId.BlueEyesChaosMaxDragon, CardId.BlueEyesAlternativeWhiteDragon);
return UniqueFaceupSpell(); return UniqueFaceupSpell();
} }
if (lastCard.IsCode(CardId.LockBird)) if (lastCard.IsCode(CardId.LockBird))
{ {
AI.SelectCard(CardId.LockBird); AI.SelectCard(CardId.LockBird);
if (AI.Utils.ChainContainsCard(CardId.TheMelodyOfAwakeningDragon)) if (Util.ChainContainsCard(CardId.TheMelodyOfAwakeningDragon))
AI.SelectNextCard(CardId.BlueEyesChaosMaxDragon, CardId.BlueEyesChaosMaxDragon, CardId.BlueEyesAlternativeWhiteDragon); AI.SelectNextCard(CardId.BlueEyesChaosMaxDragon, CardId.BlueEyesChaosMaxDragon, CardId.BlueEyesAlternativeWhiteDragon);
return UniqueFaceupSpell(); return UniqueFaceupSpell();
} }
if (lastCard.IsCode(CardId.Ghost)) if (lastCard.IsCode(CardId.Ghost))
{ {
AI.SelectCard(CardId.Ghost); AI.SelectCard(CardId.Ghost);
if (AI.Utils.ChainContainsCard(CardId.TheMelodyOfAwakeningDragon)) if (Util.ChainContainsCard(CardId.TheMelodyOfAwakeningDragon))
AI.SelectNextCard(CardId.BlueEyesChaosMaxDragon, CardId.BlueEyesChaosMaxDragon, CardId.BlueEyesAlternativeWhiteDragon); AI.SelectNextCard(CardId.BlueEyesChaosMaxDragon, CardId.BlueEyesChaosMaxDragon, CardId.BlueEyesAlternativeWhiteDragon);
return UniqueFaceupSpell(); return UniqueFaceupSpell();
} }
if (lastCard.IsCode(CardId.AshBlossom)) if (lastCard.IsCode(CardId.AshBlossom))
{ {
AI.SelectCard(CardId.AshBlossom); AI.SelectCard(CardId.AshBlossom);
if (AI.Utils.ChainContainsCard(CardId.TheMelodyOfAwakeningDragon)) if (Util.ChainContainsCard(CardId.TheMelodyOfAwakeningDragon))
AI.SelectNextCard(CardId.BlueEyesChaosMaxDragon, CardId.BlueEyesChaosMaxDragon, CardId.BlueEyesAlternativeWhiteDragon); AI.SelectNextCard(CardId.BlueEyesChaosMaxDragon, CardId.BlueEyesChaosMaxDragon, CardId.BlueEyesAlternativeWhiteDragon);
return UniqueFaceupSpell(); return UniqueFaceupSpell();
} }
...@@ -170,9 +170,9 @@ namespace WindBot.Game.AI.Decks ...@@ -170,9 +170,9 @@ namespace WindBot.Game.AI.Decks
} }
else else
{ {
if(AI.Utils.GetProblematicEnemyMonster(3000,true)!=null) if(Util.GetProblematicEnemyMonster(3000,true)!=null)
{ {
AI.SelectCard(AI.Utils.GetProblematicEnemyMonster(3000, true)); AI.SelectCard(Util.GetProblematicEnemyMonster(3000, true));
return true; return true;
} }
} }
...@@ -464,7 +464,7 @@ namespace WindBot.Game.AI.Decks ...@@ -464,7 +464,7 @@ namespace WindBot.Game.AI.Decks
private bool Linkuriboheff() private bool Linkuriboheff()
{ {
if (Duel.LastChainPlayer == 0 && AI.Utils.GetLastChainCard().IsCode(CardId.Linkuriboh)) return false; if (Duel.LastChainPlayer == 0 && Util.GetLastChainCard().IsCode(CardId.Linkuriboh)) return false;
return true; return true;
} }
private bool BirrelswordDragonsp() private bool BirrelswordDragonsp()
...@@ -498,11 +498,11 @@ namespace WindBot.Game.AI.Decks ...@@ -498,11 +498,11 @@ namespace WindBot.Game.AI.Decks
private bool BirrelswordDragoneff() private bool BirrelswordDragoneff()
{ {
if (ActivateDescription == AI.Utils.GetStringId(CardId.BirrelswordDragon, 0)) if (ActivateDescription == Util.GetStringId(CardId.BirrelswordDragon, 0))
{ {
if (AI.Utils.IsChainTarget(Card) && AI.Utils.GetBestEnemyMonster(true, true) != null) if (Util.IsChainTarget(Card) && Util.GetBestEnemyMonster(true, true) != null)
{ {
AI.SelectCard(AI.Utils.GetBestEnemyMonster(true, true)); AI.SelectCard(Util.GetBestEnemyMonster(true, true));
return true; return true;
} }
if (Duel.Player == 1 && Bot.BattlingMonster == Card) if (Duel.Player == 1 && Bot.BattlingMonster == Card)
......
...@@ -415,7 +415,7 @@ namespace WindBot.Game.AI.Decks ...@@ -415,7 +415,7 @@ namespace WindBot.Game.AI.Decks
private bool must_chain() private bool must_chain()
{ {
if (AI.Utils.IsChainTarget(Card)) return true; if (Util.IsChainTarget(Card)) return true;
foreach (ClientCard card in Enemy.GetSpells()) foreach (ClientCard card in Enemy.GetSpells())
{ {
if (card.IsCode(CardId.HarpiesFeatherDuster)&&card.IsFaceup()) if (card.IsCode(CardId.HarpiesFeatherDuster)&&card.IsFaceup())
...@@ -509,7 +509,7 @@ namespace WindBot.Game.AI.Decks ...@@ -509,7 +509,7 @@ namespace WindBot.Game.AI.Decks
} }
private bool BattleFadereff() private bool BattleFadereff()
{ {
if (AI.Utils.ChainContainsCard(CardId.BlazingMirrorForce) || AI.Utils.ChainContainsCard(CardId.MagicCylinder)) if (Util.ChainContainsCard(CardId.BlazingMirrorForce) || Util.ChainContainsCard(CardId.MagicCylinder))
return false; return false;
if (prevent_used || Duel.Player == 0) return false; if (prevent_used || Duel.Player == 0) return false;
AI.SelectPosition(CardPosition.FaceUpDefence); AI.SelectPosition(CardPosition.FaceUpDefence);
...@@ -545,11 +545,11 @@ namespace WindBot.Game.AI.Decks ...@@ -545,11 +545,11 @@ namespace WindBot.Game.AI.Decks
} }
public bool Ring_act() public bool Ring_act()
{ {
if (Duel.LastChainPlayer == 0 && AI.Utils.GetLastChainCard() != null ) return false; if (Duel.LastChainPlayer == 0 && Util.GetLastChainCard() != null ) return false;
ClientCard target = AI.Utils.GetProblematicEnemyMonster(); ClientCard target = Util.GetProblematicEnemyMonster();
if (target == null && AI.Utils.IsChainTarget(Card)) if (target == null && Util.IsChainTarget(Card))
{ {
target = AI.Utils.GetBestEnemyMonster(true, true); target = Util.GetBestEnemyMonster(true, true);
} }
if (target != null) if (target != null)
{ {
...@@ -569,7 +569,7 @@ namespace WindBot.Game.AI.Decks ...@@ -569,7 +569,7 @@ namespace WindBot.Game.AI.Decks
count++; count++;
} }
bool Demiseused = AI.Utils.ChainContainsCard(CardId.CardOfDemise); bool Demiseused = Util.ChainContainsCard(CardId.CardOfDemise);
if (drawfirst) return UniqueFaceupSpell(); if (drawfirst) return UniqueFaceupSpell();
if (DefaultOnBecomeTarget() && count > 1) return true; if (DefaultOnBecomeTarget() && count > 1) return true;
if (Demiseused) return false; if (Demiseused) return false;
...@@ -724,8 +724,8 @@ namespace WindBot.Game.AI.Decks ...@@ -724,8 +724,8 @@ namespace WindBot.Game.AI.Decks
return true; return true;
if (GetTotalATK(newlist) / 2 >= Enemy.LifePoints && Bot.HasInSpellZone(CardId.BlazingMirrorForce)) if (GetTotalATK(newlist) / 2 >= Enemy.LifePoints && Bot.HasInSpellZone(CardId.BlazingMirrorForce))
return false; return false;
if (AI.Utils.GetLastChainCard() == null) return true; if (Util.GetLastChainCard() == null) return true;
if (AI.Utils.GetLastChainCard().IsCode(CardId.Linkuriboh)) return false; if (Util.GetLastChainCard().IsCode(CardId.Linkuriboh)) return false;
return true; return true;
} }
public bool MonsterRepos() public bool MonsterRepos()
......
...@@ -126,7 +126,7 @@ namespace WindBot.Game.AI.Decks ...@@ -126,7 +126,7 @@ namespace WindBot.Game.AI.Decks
private bool EvolutionBurstEffect() private bool EvolutionBurstEffect()
{ {
ClientCard bestMy = Bot.GetMonsters().GetHighestAttackMonster(); ClientCard bestMy = Bot.GetMonsters().GetHighestAttackMonster();
if (bestMy == null || !AI.Utils.IsOneEnemyBetterThanValue(bestMy.Attack, false)) if (bestMy == null || !Util.IsOneEnemyBetterThanValue(bestMy.Attack, false))
return false; return false;
else else
AI.SelectCard(Enemy.MonsterZone.GetHighestAttackMonster()); AI.SelectCard(Enemy.MonsterZone.GetHighestAttackMonster());
...@@ -142,7 +142,7 @@ namespace WindBot.Game.AI.Decks ...@@ -142,7 +142,7 @@ namespace WindBot.Game.AI.Decks
private bool ArmoredCybernSet() private bool ArmoredCybernSet()
{ {
if (CyberDragonInHand() && (Bot.GetMonsterCount() == 0 && Enemy.GetMonsterCount() != 0) || (Bot.HasInHand(CardId.CyberDragonDrei) || Bot.HasInHand(CardId.CyberPhoenix)) && !AI.Utils.IsOneEnemyBetterThanValue(1800,true)) if (CyberDragonInHand() && (Bot.GetMonsterCount() == 0 && Enemy.GetMonsterCount() != 0) || (Bot.HasInHand(CardId.CyberDragonDrei) || Bot.HasInHand(CardId.CyberPhoenix)) && !Util.IsOneEnemyBetterThanValue(1800,true))
return false; return false;
return true; return true;
} }
...@@ -151,7 +151,7 @@ namespace WindBot.Game.AI.Decks ...@@ -151,7 +151,7 @@ namespace WindBot.Game.AI.Decks
{ {
if (Bot.GetCountCardInZone(Bot.Hand, CardId.CyberDragon) + Bot.GetCountCardInZone(Bot.MonsterZone, CardId.CyberDragon) + Bot.GetCountCardInZone(Bot.MonsterZone, CardId.CyberDragonCore) >= 1 && Bot.HasInHand(CardId.Polymerization) || Bot.GetCountCardInZone(Bot.Hand, CardId.CyberDragon) + Bot.GetCountCardInZone(Bot.MonsterZone, CardId.CyberDragon) + Bot.GetCountCardInZone(Bot.Graveyard, CardId.CyberDragon) + Bot.GetCountCardInZone(Bot.Graveyard, CardId.CyberDragonCore) >= 1 && Bot.HasInHand(CardId.PowerBond)) if (Bot.GetCountCardInZone(Bot.Hand, CardId.CyberDragon) + Bot.GetCountCardInZone(Bot.MonsterZone, CardId.CyberDragon) + Bot.GetCountCardInZone(Bot.MonsterZone, CardId.CyberDragonCore) >= 1 && Bot.HasInHand(CardId.Polymerization) || Bot.GetCountCardInZone(Bot.Hand, CardId.CyberDragon) + Bot.GetCountCardInZone(Bot.MonsterZone, CardId.CyberDragon) + Bot.GetCountCardInZone(Bot.Graveyard, CardId.CyberDragon) + Bot.GetCountCardInZone(Bot.Graveyard, CardId.CyberDragonCore) >= 1 && Bot.HasInHand(CardId.PowerBond))
return true; return true;
if (CyberDragonInHand() && (Bot.GetMonsterCount() == 0 && Enemy.GetMonsterCount() != 0) || (Bot.HasInHand(CardId.CyberDragonDrei) || Bot.HasInHand(CardId.CyberPhoenix)) && !AI.Utils.IsOneEnemyBetterThanValue(1800, true)) if (CyberDragonInHand() && (Bot.GetMonsterCount() == 0 && Enemy.GetMonsterCount() != 0) || (Bot.HasInHand(CardId.CyberDragonDrei) || Bot.HasInHand(CardId.CyberPhoenix)) && !Util.IsOneEnemyBetterThanValue(1800, true))
return false; return false;
return true; return true;
} }
...@@ -167,8 +167,8 @@ namespace WindBot.Game.AI.Decks ...@@ -167,8 +167,8 @@ namespace WindBot.Game.AI.Decks
return true; return true;
else if (Card.Location == CardLocation.SpellZone) else if (Card.Location == CardLocation.SpellZone)
{ {
if (AI.Utils.IsOneEnemyBetterThanValue(Bot.GetMonsters().GetHighestAttackMonster().Attack, true)) if (Util.IsOneEnemyBetterThanValue(Bot.GetMonsters().GetHighestAttackMonster().Attack, true))
if (ActivateDescription == AI.Utils.GetStringId(CardId.ArmoredCybern, 2)) if (ActivateDescription == Util.GetStringId(CardId.ArmoredCybern, 2))
return true; return true;
return false; return false;
} }
......
This diff is collapsed.
...@@ -170,7 +170,7 @@ namespace WindBot.Game.AI.Decks ...@@ -170,7 +170,7 @@ namespace WindBot.Game.AI.Decks
break; break;
} }
} }
if (!hasRealMonster || AI.Utils.GetProblematicCard() != null)*/ if (!hasRealMonster || Util.GetProblematicCard() != null)*/
needId = CardId.DragunityDux; needId = CardId.DragunityDux;
} }
...@@ -200,7 +200,7 @@ namespace WindBot.Game.AI.Decks ...@@ -200,7 +200,7 @@ namespace WindBot.Game.AI.Decks
else else
option = 1; option = 1;
if (ActivateDescription != AI.Utils.GetStringId(CardId.DragonRavine, option)) if (ActivateDescription != Util.GetStringId(CardId.DragonRavine, option))
return false; return false;
AI.SelectCard(tributeId); AI.SelectCard(tributeId);
...@@ -254,7 +254,7 @@ namespace WindBot.Game.AI.Decks ...@@ -254,7 +254,7 @@ namespace WindBot.Game.AI.Decks
private bool MonsterReborn() private bool MonsterReborn()
{ {
List<ClientCard> cards = new List<ClientCard>(Bot.Graveyard); List<ClientCard> cards = new List<ClientCard>(Bot.Graveyard);
cards.Sort(AIFunctions.CompareCardAttack); cards.Sort(CardContainer.CompareCardAttack);
ClientCard selectedCard = null; ClientCard selectedCard = null;
for (int i = cards.Count - 1; i >= 0; --i) for (int i = cards.Count - 1; i >= 0; --i)
{ {
...@@ -270,7 +270,7 @@ namespace WindBot.Game.AI.Decks ...@@ -270,7 +270,7 @@ namespace WindBot.Game.AI.Decks
} }
} }
cards = new List<ClientCard>(Enemy.Graveyard); cards = new List<ClientCard>(Enemy.Graveyard);
cards.Sort(AIFunctions.CompareCardAttack); cards.Sort(CardContainer.CompareCardAttack);
for (int i = cards.Count - 1; i >= 0; --i) for (int i = cards.Count - 1; i >= 0; --i)
{ {
ClientCard card = cards[i]; ClientCard card = cards[i];
...@@ -333,16 +333,16 @@ namespace WindBot.Game.AI.Decks ...@@ -333,16 +333,16 @@ namespace WindBot.Game.AI.Decks
private bool ScrapDragonSummon() private bool ScrapDragonSummon()
{ {
//if (AI.Utils.IsOneEnemyBetterThanValue(2500, true)) //if (Util.IsOneEnemyBetterThanValue(2500, true))
// return true; // return true;
ClientCard invincible = AI.Utils.GetProblematicEnemyCard(3000); ClientCard invincible = Util.GetProblematicEnemyCard(3000);
return invincible != null; return invincible != null;
} }
private bool ScrapDragonEffect() private bool ScrapDragonEffect()
{ {
ClientCard invincible = AI.Utils.GetProblematicEnemyCard(3000); ClientCard invincible = Util.GetProblematicEnemyCard(3000);
if (invincible == null && !AI.Utils.IsOneEnemyBetterThanValue(2800 - 1, false)) if (invincible == null && !Util.IsOneEnemyBetterThanValue(2800 - 1, false))
return false; return false;
int tributeId = -1; int tributeId = -1;
...@@ -362,7 +362,7 @@ namespace WindBot.Game.AI.Decks ...@@ -362,7 +362,7 @@ namespace WindBot.Game.AI.Decks
tributeId = CardId.DragonRavine; tributeId = CardId.DragonRavine;
List<ClientCard> monsters = Enemy.GetMonsters(); List<ClientCard> monsters = Enemy.GetMonsters();
monsters.Sort(AIFunctions.CompareCardAttack); monsters.Sort(CardContainer.CompareCardAttack);
ClientCard destroyCard = invincible; ClientCard destroyCard = invincible;
if (destroyCard == null) if (destroyCard == null)
...@@ -432,7 +432,7 @@ namespace WindBot.Game.AI.Decks ...@@ -432,7 +432,7 @@ namespace WindBot.Game.AI.Decks
|| Bot.HasInHand(CardId.DragunitySpearOfDestiny)) || Bot.HasInHand(CardId.DragunitySpearOfDestiny))
{ {
List<ClientCard> monster_sorted = Bot.GetMonsters(); List<ClientCard> monster_sorted = Bot.GetMonsters();
monster_sorted.Sort(AIFunctions.CompareCardAttack); monster_sorted.Sort(CardContainer.CompareCardAttack);
foreach (ClientCard monster in monster_sorted) foreach (ClientCard monster in monster_sorted)
{ {
AI.SelectMaterials(monster); AI.SelectMaterials(monster);
......
...@@ -87,7 +87,7 @@ namespace WindBot.Game.AI.Decks ...@@ -87,7 +87,7 @@ namespace WindBot.Game.AI.Decks
private bool SwapFrogSummon() private bool SwapFrogSummon()
{ {
int atk = Card.Attack + GetSpellBonus(); int atk = Card.Attack + GetSpellBonus();
if (AI.Utils.IsAllEnemyBetterThanValue(atk, true)) if (Util.IsAllEnemyBetterThanValue(atk, true))
return false; return false;
AI.SelectCard(CardId.Ronintoadin); AI.SelectCard(CardId.Ronintoadin);
...@@ -120,7 +120,7 @@ namespace WindBot.Game.AI.Decks ...@@ -120,7 +120,7 @@ namespace WindBot.Game.AI.Decks
{ {
m_flipFlopFrogSummoned = -1; m_flipFlopFrogSummoned = -1;
List<ClientCard> monsters = Enemy.GetMonsters(); List<ClientCard> monsters = Enemy.GetMonsters();
monsters.Sort(AIFunctions.CompareCardAttack); monsters.Sort(CardContainer.CompareCardAttack);
monsters.Reverse(); monsters.Reverse();
AI.SelectCard(monsters); AI.SelectCard(monsters);
return true; return true;
...@@ -144,7 +144,7 @@ namespace WindBot.Game.AI.Decks ...@@ -144,7 +144,7 @@ namespace WindBot.Game.AI.Decks
{ {
int atk = Card.Attack + GetSpellBonus(); int atk = Card.Attack + GetSpellBonus();
if (AI.Utils.IsOneEnemyBetterThanValue(atk, true)) if (Util.IsOneEnemyBetterThanValue(atk, true))
return false; return false;
if (Card.IsCode(CardId.SwapFrog)) if (Card.IsCode(CardId.SwapFrog))
...@@ -156,7 +156,7 @@ namespace WindBot.Game.AI.Decks ...@@ -156,7 +156,7 @@ namespace WindBot.Game.AI.Decks
{ {
List<int> cards = new List<int>(); List<int> cards = new List<int>();
if (AI.Utils.IsOneEnemyBetter()) if (Util.IsOneEnemyBetter())
{ {
cards.Add(CardId.FlipFlopFrog); cards.Add(CardId.FlipFlopFrog);
} }
...@@ -213,7 +213,7 @@ namespace WindBot.Game.AI.Decks ...@@ -213,7 +213,7 @@ namespace WindBot.Game.AI.Decks
if (Card.IsCode(CardId.DewdarkOfTheIceBarrier)) if (Card.IsCode(CardId.DewdarkOfTheIceBarrier))
return Card.IsDefense(); return Card.IsDefense();
bool enemyBetter = AI.Utils.IsOneEnemyBetterThanValue(Card.Attack + (Card.IsFacedown() ? GetSpellBonus() : 0), true); bool enemyBetter = Util.IsOneEnemyBetterThanValue(Card.Attack + (Card.IsFacedown() ? GetSpellBonus() : 0), true);
if (Card.Attack < 800) if (Card.Attack < 800)
enemyBetter = true; enemyBetter = true;
bool result = false; bool result = false;
......
...@@ -130,7 +130,7 @@ namespace WindBot.Game.AI.Decks ...@@ -130,7 +130,7 @@ namespace WindBot.Game.AI.Decks
private bool GravekeepersDescendantEffect() private bool GravekeepersDescendantEffect()
{ {
int bestatk = Bot.GetMonsters().GetHighestAttackMonster().Attack; int bestatk = Bot.GetMonsters().GetHighestAttackMonster().Attack;
if (AI.Utils.IsOneEnemyBetterThanValue(bestatk, true)) if (Util.IsOneEnemyBetterThanValue(bestatk, true))
{ {
AI.SelectCard(Enemy.GetMonsters().GetHighestAttackMonster()); AI.SelectCard(Enemy.GetMonsters().GetHighestAttackMonster());
return true; return true;
......
...@@ -183,14 +183,14 @@ namespace WindBot.Game.AI.Decks ...@@ -183,14 +183,14 @@ namespace WindBot.Game.AI.Decks
targets.Add(check); targets.Add(check);
} }
if (AI.Utils.GetPZone(1, 0) != null && AI.Utils.GetPZone(1, 0).Type == 16777218) if (Util.GetPZone(1, 0) != null && Util.GetPZone(1, 0).Type == 16777218)
{ {
targets.Add(AI.Utils.GetPZone(1, 0)); targets.Add(Util.GetPZone(1, 0));
} }
if (AI.Utils.GetPZone(1, 1) != null && AI.Utils.GetPZone(1, 1).Type == 16777218) if (Util.GetPZone(1, 1) != null && Util.GetPZone(1, 1).Type == 16777218)
{ {
targets.Add(AI.Utils.GetPZone(1, 1)); targets.Add(Util.GetPZone(1, 1));
} }
foreach (ClientCard check in Enemy.GetSpells()) foreach (ClientCard check in Enemy.GetSpells())
{ {
...@@ -208,9 +208,9 @@ namespace WindBot.Game.AI.Decks ...@@ -208,9 +208,9 @@ namespace WindBot.Game.AI.Decks
if (check.Type == 16777218) if (check.Type == 16777218)
count++; count++;
} }
if(AI.Utils.GetLastChainCard()!=null && if(Util.GetLastChainCard()!=null &&
(AI.Utils.GetLastChainCard().HasType(CardType.Continuous)|| (Util.GetLastChainCard().HasType(CardType.Continuous)||
AI.Utils.GetLastChainCard().HasType(CardType.Field) || count==2) && Util.GetLastChainCard().HasType(CardType.Field) || count==2) &&
Duel.LastChainPlayer==1) Duel.LastChainPlayer==1)
{ {
AI.SelectCard(targets); AI.SelectCard(targets);
...@@ -235,9 +235,9 @@ namespace WindBot.Game.AI.Decks ...@@ -235,9 +235,9 @@ namespace WindBot.Game.AI.Decks
} }
if(count==2) if(count==2)
{ {
if (AI.Utils.GetPZone(1, 1) != null && AI.Utils.GetPZone(1, 1).Type == 16777218) if (Util.GetPZone(1, 1) != null && Util.GetPZone(1, 1).Type == 16777218)
{ {
card=AI.Utils.GetPZone(1, 1); card=Util.GetPZone(1, 1);
} }
} }
...@@ -251,27 +251,27 @@ namespace WindBot.Game.AI.Decks ...@@ -251,27 +251,27 @@ namespace WindBot.Game.AI.Decks
private bool DarkBribeeff() private bool DarkBribeeff()
{ {
if (AI.Utils.GetLastChainCard()!=null && AI.Utils.GetLastChainCard().IsCode(CardId.UpstartGoblin)) if (Util.GetLastChainCard()!=null && Util.GetLastChainCard().IsCode(CardId.UpstartGoblin))
return false; return false;
return true; return true;
} }
private bool ImperialOrderfirst() private bool ImperialOrderfirst()
{ {
if (AI.Utils.GetLastChainCard() != null && AI.Utils.GetLastChainCard().IsCode(CardId.UpstartGoblin)) if (Util.GetLastChainCard() != null && Util.GetLastChainCard().IsCode(CardId.UpstartGoblin))
return false; return false;
return DefaultOnBecomeTarget() && AI.Utils.GetLastChainCard().HasType(CardType.Spell); return DefaultOnBecomeTarget() && Util.GetLastChainCard().HasType(CardType.Spell);
} }
private bool ImperialOrdereff() private bool ImperialOrdereff()
{ {
if (AI.Utils.GetLastChainCard() != null && AI.Utils.GetLastChainCard().IsCode(CardId.UpstartGoblin)) if (Util.GetLastChainCard() != null && Util.GetLastChainCard().IsCode(CardId.UpstartGoblin))
return false; return false;
if (Duel.LastChainPlayer == 1) if (Duel.LastChainPlayer == 1)
{ {
foreach(ClientCard check in Enemy.GetSpells()) foreach(ClientCard check in Enemy.GetSpells())
{ {
if (AI.Utils.GetLastChainCard() == check) if (Util.GetLastChainCard() == check)
return true; return true;
} }
} }
...@@ -284,7 +284,7 @@ namespace WindBot.Game.AI.Decks ...@@ -284,7 +284,7 @@ namespace WindBot.Game.AI.Decks
if(Enemy.BattlingMonster.Attack-Bot.LifePoints>=1000) if(Enemy.BattlingMonster.Attack-Bot.LifePoints>=1000)
return DefaultUniqueTrap(); return DefaultUniqueTrap();
} }
if (AI.Utils.GetTotalAttackingMonsterAttack(1) >= Bot.LifePoints) if (Util.GetTotalAttackingMonsterAttack(1) >= Bot.LifePoints)
return DefaultUniqueTrap(); return DefaultUniqueTrap();
if (Enemy.GetMonsterCount() >= 2) if (Enemy.GetMonsterCount() >= 2)
return DefaultUniqueTrap(); return DefaultUniqueTrap();
...@@ -307,7 +307,7 @@ namespace WindBot.Game.AI.Decks ...@@ -307,7 +307,7 @@ namespace WindBot.Game.AI.Decks
if (card.HasType(CardType.Monster)) if (card.HasType(CardType.Monster))
count++; count++;
} }
if(AI.Utils.GetBestEnemyMonster()!=null && AI.Utils.GetBestEnemyMonster().Attack>=1900) if(Util.GetBestEnemyMonster()!=null && Util.GetBestEnemyMonster().Attack>=1900)
AI.SelectCard( AI.SelectCard(
CardId.EaterOfMillions, CardId.EaterOfMillions,
CardId.PotOfDesires, CardId.PotOfDesires,
...@@ -473,7 +473,7 @@ namespace WindBot.Game.AI.Decks ...@@ -473,7 +473,7 @@ namespace WindBot.Game.AI.Decks
} }
return true; return true;
}; };
ClientCard BestEnemy = AI.Utils.GetBestEnemyMonster(true); ClientCard BestEnemy = Util.GetBestEnemyMonster(true);
ClientCard WorstBot = Bot.GetMonsters().GetLowestAttackMonster(); ClientCard WorstBot = Bot.GetMonsters().GetLowestAttackMonster();
if (BestEnemy == null || BestEnemy.HasPosition(CardPosition.FaceDown)) return false; if (BestEnemy == null || BestEnemy.HasPosition(CardPosition.FaceDown)) return false;
if (WorstBot == null || WorstBot.HasPosition(CardPosition.FaceDown)) return false; if (WorstBot == null || WorstBot.HasPosition(CardPosition.FaceDown)) return false;
...@@ -493,9 +493,9 @@ namespace WindBot.Game.AI.Decks ...@@ -493,9 +493,9 @@ namespace WindBot.Game.AI.Decks
AI.SelectPlace(Zones.z4); AI.SelectPlace(Zones.z4);
if (Enemy.HasInMonstersZone(CardId.KnightmareGryphon, true)) return false; if (Enemy.HasInMonstersZone(CardId.KnightmareGryphon, true)) return false;
if (Bot.HasInMonstersZone(CardId.InspectBoarder) && !eater_eff) return false; if (Bot.HasInMonstersZone(CardId.InspectBoarder) && !eater_eff) return false;
if (AI.Utils.GetProblematicEnemyMonster() == null && Bot.ExtraDeck.Count < 5) return false; if (Util.GetProblematicEnemyMonster() == null && Bot.ExtraDeck.Count < 5) return false;
if (Bot.GetMonstersInMainZone().Count >= 5) return false; if (Bot.GetMonstersInMainZone().Count >= 5) return false;
if (AI.Utils.IsTurn1OrMain2()) return false; if (Util.IsTurn1OrMain2()) return false;
AI.SelectPosition(CardPosition.FaceUpAttack); AI.SelectPosition(CardPosition.FaceUpAttack);
IList<ClientCard> targets = new List<ClientCard>(); IList<ClientCard> targets = new List<ClientCard>();
foreach (ClientCard e_c in Bot.ExtraDeck) foreach (ClientCard e_c in Bot.ExtraDeck)
...@@ -588,7 +588,7 @@ namespace WindBot.Game.AI.Decks ...@@ -588,7 +588,7 @@ namespace WindBot.Game.AI.Decks
private bool Linkuriboheff() private bool Linkuriboheff()
{ {
if (Duel.LastChainPlayer == 0 && AI.Utils.GetLastChainCard().IsCode(CardId.Linkuriboh)) return false; if (Duel.LastChainPlayer == 0 && Util.GetLastChainCard().IsCode(CardId.Linkuriboh)) return false;
return true; return true;
} }
private bool MonsterRepos() private bool MonsterRepos()
......
...@@ -97,7 +97,7 @@ namespace WindBot.Game.AI.Decks ...@@ -97,7 +97,7 @@ namespace WindBot.Game.AI.Decks
return false; return false;
List<ClientCard> cards = new List<ClientCard>(Bot.Graveyard); List<ClientCard> cards = new List<ClientCard>(Bot.Graveyard);
cards.Sort(AIFunctions.CompareCardAttack); cards.Sort(CardContainer.CompareCardAttack);
for (int i = cards.Count - 1; i >= 0; --i) for (int i = cards.Count - 1; i >= 0; --i)
{ {
ClientCard card = cards[i]; ClientCard card = cards[i];
...@@ -115,7 +115,7 @@ namespace WindBot.Game.AI.Decks ...@@ -115,7 +115,7 @@ namespace WindBot.Game.AI.Decks
private bool MonsterReborn() private bool MonsterReborn()
{ {
List<ClientCard> cards = new List<ClientCard>(Bot.Graveyard); List<ClientCard> cards = new List<ClientCard>(Bot.Graveyard);
cards.Sort(AIFunctions.CompareCardAttack); cards.Sort(CardContainer.CompareCardAttack);
ClientCard selectedCard = null; ClientCard selectedCard = null;
for (int i = cards.Count - 1; i >= 0; --i) for (int i = cards.Count - 1; i >= 0; --i)
{ {
...@@ -129,7 +129,7 @@ namespace WindBot.Game.AI.Decks ...@@ -129,7 +129,7 @@ namespace WindBot.Game.AI.Decks
} }
} }
cards = new List<ClientCard>(Enemy.Graveyard); cards = new List<ClientCard>(Enemy.Graveyard);
cards.Sort(AIFunctions.CompareCardAttack); cards.Sort(CardContainer.CompareCardAttack);
for (int i = cards.Count - 1; i >= 0; --i) for (int i = cards.Count - 1; i >= 0; --i)
{ {
ClientCard card = cards[i]; ClientCard card = cards[i];
...@@ -152,7 +152,7 @@ namespace WindBot.Game.AI.Decks ...@@ -152,7 +152,7 @@ namespace WindBot.Game.AI.Decks
private bool WhiteNightDragon() private bool WhiteNightDragon()
{ {
// We should summon Horus the Black Flame Dragon LV6 if he can lvlup. // We should summon Horus the Black Flame Dragon LV6 if he can lvlup.
if (Enemy.GetMonsterCount() != 0 && !AI.Utils.IsAllEnemyBetterThanValue(2300 - 1, false)) if (Enemy.GetMonsterCount() != 0 && !Util.IsAllEnemyBetterThanValue(2300 - 1, false))
foreach (ClientCard card in Main.SummonableCards) foreach (ClientCard card in Main.SummonableCards)
if (card.IsCode(11224103)) if (card.IsCode(11224103))
return false; return false;
...@@ -170,7 +170,7 @@ namespace WindBot.Game.AI.Decks ...@@ -170,7 +170,7 @@ namespace WindBot.Game.AI.Decks
List<ClientCard> cards = new List<ClientCard>(Bot.GetMonsters()); List<ClientCard> cards = new List<ClientCard>(Bot.GetMonsters());
if (cards.Count == 0) if (cards.Count == 0)
return false; return false;
cards.Sort(AIFunctions.CompareCardAttack); cards.Sort(CardContainer.CompareCardAttack);
ClientCard tributeCard = null; ClientCard tributeCard = null;
foreach (ClientCard monster in cards) foreach (ClientCard monster in cards)
{ {
...@@ -190,7 +190,7 @@ namespace WindBot.Game.AI.Decks ...@@ -190,7 +190,7 @@ namespace WindBot.Game.AI.Decks
cards.AddRange(Bot.Graveyard); cards.AddRange(Bot.Graveyard);
if (cards.Count == 0) if (cards.Count == 0)
return false; return false;
cards.Sort(AIFunctions.CompareCardAttack); cards.Sort(CardContainer.CompareCardAttack);
ClientCard summonCard = null; ClientCard summonCard = null;
for (int i = cards.Count - 1; i >= 0; --i) for (int i = cards.Count - 1; i >= 0; --i)
{ {
......
...@@ -116,7 +116,7 @@ namespace WindBot.Game.AI.Decks ...@@ -116,7 +116,7 @@ namespace WindBot.Game.AI.Decks
break; break;
} }
return AI.Utils.CheckSelectCount(result, cards, min, max); return Util.CheckSelectCount(result, cards, min, max);
} }
private bool ReinforcementOfTheArmyEffect() private bool ReinforcementOfTheArmyEffect()
...@@ -222,10 +222,10 @@ namespace WindBot.Game.AI.Decks ...@@ -222,10 +222,10 @@ namespace WindBot.Game.AI.Decks
{ {
IList<ClientCard> targets = new List<ClientCard>(); IList<ClientCard> targets = new List<ClientCard>();
ClientCard target1 = AI.Utils.GetBestEnemyMonster(); ClientCard target1 = Util.GetBestEnemyMonster();
if (target1 != null) if (target1 != null)
targets.Add(target1); targets.Add(target1);
ClientCard target2 = AI.Utils.GetBestEnemySpell(); ClientCard target2 = Util.GetBestEnemySpell();
if (target2 != null) if (target2 != null)
targets.Add(target2); targets.Add(target2);
......
...@@ -479,7 +479,7 @@ namespace WindBot.Game.AI.Decks ...@@ -479,7 +479,7 @@ namespace WindBot.Game.AI.Decks
private bool FairyTailSnowsummon() private bool FairyTailSnowsummon()
{ {
ClientCard target = AI.Utils.GetBestEnemyMonster(true, true); ClientCard target = Util.GetBestEnemyMonster(true, true);
if(target != null) if(target != null)
{ {
return true; return true;
...@@ -493,7 +493,7 @@ namespace WindBot.Game.AI.Decks ...@@ -493,7 +493,7 @@ namespace WindBot.Game.AI.Decks
if (Card.Location == CardLocation.MonsterZone) if (Card.Location == CardLocation.MonsterZone)
{ {
AI.SelectCard(AI.Utils.GetBestEnemyMonster(true, true)); AI.SelectCard(Util.GetBestEnemyMonster(true, true));
return true; return true;
} }
else else
...@@ -524,14 +524,14 @@ namespace WindBot.Game.AI.Decks ...@@ -524,14 +524,14 @@ namespace WindBot.Game.AI.Decks
all.Add(check); all.Add(check);
} }
} }
if (AI.Utils.ChainContainsCard(CardId.FairyTailSnow)) return false; if (Util.ChainContainsCard(CardId.FairyTailSnow)) return false;
if ( Duel.Player == 1 && Duel.Phase == DuelPhase.BattleStart && Bot.BattlingMonster == null && Enemy_atk >=Bot.LifePoints || if ( Duel.Player == 1 && Duel.Phase == DuelPhase.BattleStart && Bot.BattlingMonster == null && Enemy_atk >=Bot.LifePoints ||
Duel.Player == 0 && Duel.Phase==DuelPhase.BattleStart && Enemy.BattlingMonster == null && Enemy.LifePoints<=1850 Duel.Player == 0 && Duel.Phase==DuelPhase.BattleStart && Enemy.BattlingMonster == null && Enemy.LifePoints<=1850
) )
{ {
AI.SelectCard(all); AI.SelectCard(all);
AI.SelectNextCard(AI.Utils.GetBestEnemyMonster()); AI.SelectNextCard(Util.GetBestEnemyMonster());
return true; return true;
} }
} }
...@@ -602,7 +602,7 @@ namespace WindBot.Game.AI.Decks ...@@ -602,7 +602,7 @@ namespace WindBot.Game.AI.Decks
AI.SelectCard(CardId.UltimateConductorTytanno); AI.SelectCard(CardId.UltimateConductorTytanno);
return true; return true;
} }
if (!AI.Utils.IsOneEnemyBetter(true)) return false; if (!Util.IsOneEnemyBetter(true)) return false;
IList<int> targets = new[] { IList<int> targets = new[] {
CardId.ElShaddollConstruct, CardId.ElShaddollConstruct,
CardId.DogorantheMadFlameKaiju, CardId.DogorantheMadFlameKaiju,
...@@ -752,7 +752,7 @@ namespace WindBot.Game.AI.Decks ...@@ -752,7 +752,7 @@ namespace WindBot.Game.AI.Decks
return true; return true;
} }
} }
if (!AI.Utils.IsOneEnemyBetter()) return false; if (!Util.IsOneEnemyBetter()) return false;
foreach (ClientCard monster in Bot.Hand) foreach (ClientCard monster in Bot.Hand)
...@@ -830,7 +830,7 @@ namespace WindBot.Game.AI.Decks ...@@ -830,7 +830,7 @@ namespace WindBot.Game.AI.Decks
ShaddollSquamata_used = true; ShaddollSquamata_used = true;
if (Card.Location != CardLocation.MonsterZone) if (Card.Location != CardLocation.MonsterZone)
{ {
if(AI.Utils.ChainContainsCard(CardId.ElShaddollConstruct)) if(Util.ChainContainsCard(CardId.ElShaddollConstruct))
{ {
if (!Bot.HasInHand(CardId.ShaddollFusion) && Bot.HasInGraveyard(CardId.ShaddollFusion)) if (!Bot.HasInHand(CardId.ShaddollFusion) && Bot.HasInGraveyard(CardId.ShaddollFusion))
AI.SelectNextCard(CardId.ShaddollCore); AI.SelectNextCard(CardId.ShaddollCore);
...@@ -851,7 +851,7 @@ namespace WindBot.Game.AI.Decks ...@@ -851,7 +851,7 @@ namespace WindBot.Game.AI.Decks
else else
{ {
if (Enemy.GetMonsterCount() == 0) return false; if (Enemy.GetMonsterCount() == 0) return false;
ClientCard target = AI.Utils.GetBestEnemyMonster(); ClientCard target = Util.GetBestEnemyMonster();
AI.SelectCard(target); AI.SelectCard(target);
} }
return true; return true;
...@@ -890,7 +890,7 @@ namespace WindBot.Game.AI.Decks ...@@ -890,7 +890,7 @@ namespace WindBot.Game.AI.Decks
ShaddollHedgehog_used = true; ShaddollHedgehog_used = true;
if (Card.Location != CardLocation.MonsterZone) if (Card.Location != CardLocation.MonsterZone)
{ {
if (AI.Utils.ChainContainsCard(CardId.ElShaddollConstruct)) if (Util.ChainContainsCard(CardId.ElShaddollConstruct))
{ {
AI.SelectNextCard( AI.SelectNextCard(
CardId.ShaddollFalco, CardId.ShaddollFalco,
...@@ -924,14 +924,14 @@ namespace WindBot.Game.AI.Decks ...@@ -924,14 +924,14 @@ namespace WindBot.Game.AI.Decks
ShaddollDragon_used = true; ShaddollDragon_used = true;
if (Card.Location == CardLocation.MonsterZone) if (Card.Location == CardLocation.MonsterZone)
{ {
ClientCard target = AI.Utils.GetBestEnemyCard(); ClientCard target = Util.GetBestEnemyCard();
AI.SelectCard(target); AI.SelectCard(target);
return true; return true;
} }
else else
{ {
if (Enemy.GetSpellCount() == 0) return false; if (Enemy.GetSpellCount() == 0) return false;
ClientCard target = AI.Utils.GetBestEnemySpell(); ClientCard target = Util.GetBestEnemySpell();
AI.SelectCard(target); AI.SelectCard(target);
return true; return true;
} }
...@@ -996,7 +996,7 @@ namespace WindBot.Game.AI.Decks ...@@ -996,7 +996,7 @@ namespace WindBot.Game.AI.Decks
if (Card.Location == CardLocation.Grave) if (Card.Location == CardLocation.Grave)
return true; return true;
if (Bot.LifePoints <= 1000) return false; if (Bot.LifePoints <= 1000) return false;
ClientCard select = AI.Utils.GetBestEnemyCard(); ClientCard select = Util.GetBestEnemyCard();
if (select == null) return false; if (select == null) return false;
if(select!=null) if(select!=null)
{ {
...@@ -1018,10 +1018,10 @@ namespace WindBot.Game.AI.Decks ...@@ -1018,10 +1018,10 @@ namespace WindBot.Game.AI.Decks
{ {
IList<ClientCard> targets = new List<ClientCard>(); IList<ClientCard> targets = new List<ClientCard>();
ClientCard target1 = AI.Utils.GetBestEnemyMonster(); ClientCard target1 = Util.GetBestEnemyMonster();
if (target1 != null) if (target1 != null)
targets.Add(target1); targets.Add(target1);
ClientCard target2 = AI.Utils.GetBestEnemySpell(); ClientCard target2 = Util.GetBestEnemySpell();
if (target2 != null) if (target2 != null)
targets.Add(target2); targets.Add(target2);
...@@ -1106,16 +1106,16 @@ namespace WindBot.Game.AI.Decks ...@@ -1106,16 +1106,16 @@ namespace WindBot.Game.AI.Decks
return true; return true;
} }
else if (DarkHole || AI.Utils.IsChainTarget(Card) || AI.Utils.GetProblematicEnemySpell() != null) else if (DarkHole || Util.IsChainTarget(Card) || Util.GetProblematicEnemySpell() != null)
{ {
AI.SelectCard(CardId.TG_WonderMagician); AI.SelectCard(CardId.TG_WonderMagician);
return true; return true;
} }
else if (Duel.Player == 1 && Duel.Phase == DuelPhase.BattleStart && AI.Utils.IsOneEnemyBetterThanValue(1500, true)) else if (Duel.Player == 1 && Duel.Phase == DuelPhase.BattleStart && Util.IsOneEnemyBetterThanValue(1500, true))
{ {
AI.SelectCard(CardId.TG_WonderMagician); AI.SelectCard(CardId.TG_WonderMagician);
if (AI.Utils.IsOneEnemyBetterThanValue(1900, true)) if (Util.IsOneEnemyBetterThanValue(1900, true))
{ {
AI.SelectPosition(CardPosition.FaceUpDefence); AI.SelectPosition(CardPosition.FaceUpDefence);
} }
...@@ -1136,7 +1136,7 @@ namespace WindBot.Game.AI.Decks ...@@ -1136,7 +1136,7 @@ namespace WindBot.Game.AI.Decks
private bool ScarlightRedDragoneff() private bool ScarlightRedDragoneff()
{ {
IList<ClientCard> targets = new List<ClientCard>(); IList<ClientCard> targets = new List<ClientCard>();
ClientCard target1 = AI.Utils.GetBestEnemyMonster(); ClientCard target1 = Util.GetBestEnemyMonster();
if (target1 != null) if (target1 != null)
{ {
targets.Add(target1); targets.Add(target1);
...@@ -1160,8 +1160,8 @@ namespace WindBot.Game.AI.Decks ...@@ -1160,8 +1160,8 @@ namespace WindBot.Game.AI.Decks
AI.SelectCard(Useless_List()); AI.SelectCard(Useless_List());
return true; return true;
} }
//if (ActivateDescription == AI.Utils.GetStringId(CardId.snake, 2)) return true; //if (ActivateDescription == Util.GetStringId(CardId.snake, 2)) return true;
if (ActivateDescription == AI.Utils.GetStringId(CardId.snake, 1)) if (ActivateDescription == Util.GetStringId(CardId.snake, 1))
{ {
foreach (ClientCard hand in Bot.Hand) foreach (ClientCard hand in Bot.Hand)
{ {
...@@ -1186,7 +1186,7 @@ namespace WindBot.Game.AI.Decks ...@@ -1186,7 +1186,7 @@ namespace WindBot.Game.AI.Decks
private bool BlackRoseMoonlightDragoneff() private bool BlackRoseMoonlightDragoneff()
{ {
IList<ClientCard> targets = new List<ClientCard>(); IList<ClientCard> targets = new List<ClientCard>();
ClientCard target1 = AI.Utils.GetBestEnemyMonster(); ClientCard target1 = Util.GetBestEnemyMonster();
if (target1 != null) if (target1 != null)
{ {
targets.Add(target1); targets.Add(target1);
...@@ -1224,18 +1224,18 @@ namespace WindBot.Game.AI.Decks ...@@ -1224,18 +1224,18 @@ namespace WindBot.Game.AI.Decks
return true; return true;
IList<ClientCard> targets = new List<ClientCard>(); IList<ClientCard> targets = new List<ClientCard>();
ClientCard target1 = AI.Utils.GetBestEnemyMonster(); ClientCard target1 = Util.GetBestEnemyMonster();
if (target1 != null) if (target1 != null)
targets.Add(target1); targets.Add(target1);
ClientCard target2 = AI.Utils.GetBestEnemySpell(); ClientCard target2 = Util.GetBestEnemySpell();
if (target2 != null) if (target2 != null)
targets.Add(target2); targets.Add(target2);
else if (AI.Utils.IsChainTarget(Card) || AI.Utils.GetProblematicEnemySpell() != null) else if (Util.IsChainTarget(Card) || Util.GetProblematicEnemySpell() != null)
{ {
AI.SelectCard(targets); AI.SelectCard(targets);
return true; return true;
} }
else if (Duel.Player == 1 && Duel.Phase == DuelPhase.BattleStart && AI.Utils.IsOneEnemyBetterThanValue(2400, true)) else if (Duel.Player == 1 && Duel.Phase == DuelPhase.BattleStart && Util.IsOneEnemyBetterThanValue(2400, true))
{ {
AI.SelectCard(targets); AI.SelectCard(targets);
return true; return true;
......
...@@ -159,7 +159,7 @@ namespace WindBot.Game.AI.Decks ...@@ -159,7 +159,7 @@ namespace WindBot.Game.AI.Decks
private bool DecisiveArmorEffect() private bool DecisiveArmorEffect()
{ {
if (AI.Utils.IsAllEnemyBetterThanValue(3300, true)) if (Util.IsAllEnemyBetterThanValue(3300, true))
{ {
AI.SelectCard(CardId.DecisiveArmor); AI.SelectCard(CardId.DecisiveArmor);
return true; return true;
...@@ -176,7 +176,7 @@ namespace WindBot.Game.AI.Decks ...@@ -176,7 +176,7 @@ namespace WindBot.Game.AI.Decks
private bool GungnirEffect() private bool GungnirEffect()
{ {
if (AI.Utils.IsOneEnemyBetter(true) && Duel.Phase == DuelPhase.Main1) if (Util.IsOneEnemyBetter(true) && Duel.Phase == DuelPhase.Main1)
{ {
AI.SelectCard(Enemy.GetMonsters().GetHighestAttackMonster()); AI.SelectCard(Enemy.GetMonsters().GetHighestAttackMonster());
return true; return true;
...@@ -196,12 +196,12 @@ namespace WindBot.Game.AI.Decks ...@@ -196,12 +196,12 @@ namespace WindBot.Game.AI.Decks
AI.SelectCard(CardId.Mirror); AI.SelectCard(CardId.Mirror);
return true; return true;
} }
else if (AI.Utils.IsOneEnemyBetterThanValue(3300, true) && !Bot.HasInHand(CardId.Trishula)) else if (Util.IsOneEnemyBetterThanValue(3300, true) && !Bot.HasInHand(CardId.Trishula))
{ {
AI.SelectCard(CardId.Trishula); AI.SelectCard(CardId.Trishula);
return true; return true;
} }
else if (AI.Utils.IsAllEnemyBetterThanValue(2700,true) && !Bot.HasInHand(CardId.DecisiveArmor)) else if (Util.IsAllEnemyBetterThanValue(2700,true) && !Bot.HasInHand(CardId.DecisiveArmor))
{ {
AI.SelectCard(CardId.DecisiveArmor); AI.SelectCard(CardId.DecisiveArmor);
return true; return true;
...@@ -221,12 +221,12 @@ namespace WindBot.Game.AI.Decks ...@@ -221,12 +221,12 @@ namespace WindBot.Game.AI.Decks
private bool ThousandHandsEffect() private bool ThousandHandsEffect()
{ {
if (AI.Utils.IsOneEnemyBetterThanValue(3300, true) && !Bot.HasInHand(CardId.Trishula)) if (Util.IsOneEnemyBetterThanValue(3300, true) && !Bot.HasInHand(CardId.Trishula))
{ {
AI.SelectCard(CardId.Trishula); AI.SelectCard(CardId.Trishula);
return true; return true;
} }
else if (AI.Utils.IsAllEnemyBetterThanValue(2700, true) && !Bot.HasInHand(CardId.DecisiveArmor)) else if (Util.IsAllEnemyBetterThanValue(2700, true) && !Bot.HasInHand(CardId.DecisiveArmor))
{ {
AI.SelectCard(CardId.DecisiveArmor); AI.SelectCard(CardId.DecisiveArmor);
return true; return true;
...@@ -277,7 +277,7 @@ namespace WindBot.Game.AI.Decks ...@@ -277,7 +277,7 @@ namespace WindBot.Game.AI.Decks
foreach (int Id in NekrozCard) foreach (int Id in NekrozCard)
{ {
if (Id == CardId.Trishula && AI.Utils.IsAllEnemyBetterThanValue(2700, true) && Bot.HasInHand(CardId.DecisiveArmor)) if (Id == CardId.Trishula && Util.IsAllEnemyBetterThanValue(2700, true) && Bot.HasInHand(CardId.DecisiveArmor))
{ {
AI.SelectCard(CardId.Trishula); AI.SelectCard(CardId.Trishula);
return true; return true;
......
...@@ -104,7 +104,7 @@ namespace WindBot.Game.AI.Decks ...@@ -104,7 +104,7 @@ namespace WindBot.Game.AI.Decks
if (handCard.IsFacedown()) if (handCard.IsFacedown())
return true; return true;
} }
return AI.Utils.IsOneEnemyBetter(true); return Util.IsOneEnemyBetter(true);
} }
} }
} }
\ No newline at end of file
...@@ -133,7 +133,7 @@ namespace WindBot.Game.AI.Decks ...@@ -133,7 +133,7 @@ namespace WindBot.Game.AI.Decks
{ {
if (Enemy.GetMonsterCount() == 0) if (Enemy.GetMonsterCount() == 0)
{ {
if (AI.Utils.GetTotalAttackingMonsterAttack(0) >= Enemy.LifePoints) if (Util.GetTotalAttackingMonsterAttack(0) >= Enemy.LifePoints)
{ {
return true; return true;
} }
...@@ -145,7 +145,7 @@ namespace WindBot.Game.AI.Decks ...@@ -145,7 +145,7 @@ namespace WindBot.Game.AI.Decks
{ {
if (DefaultOnBecomeTarget() && Card.Location==CardLocation.SpellZone) if (DefaultOnBecomeTarget() && Card.Location==CardLocation.SpellZone)
{ {
AI.SelectCard(AI.Utils.GetBestEnemyCard(false,true)); AI.SelectCard(Util.GetBestEnemyCard(false,true));
return true; return true;
} }
if(Enemy.HasInSpellZone(CardId.EternalSoul)) if(Enemy.HasInSpellZone(CardId.EternalSoul))
...@@ -159,17 +159,17 @@ namespace WindBot.Game.AI.Decks ...@@ -159,17 +159,17 @@ namespace WindBot.Game.AI.Decks
return UniqueFaceupSpell(); return UniqueFaceupSpell();
} }
if (Bot.GetMonsterCount() > 0 && !Bot.HasInSpellZone(CardId.SeaStealthAttack) && if (Bot.GetMonsterCount() > 0 && !Bot.HasInSpellZone(CardId.SeaStealthAttack) &&
AI.Utils.IsOneEnemyBetterThanValue(2000, false) && Duel.Phase==DuelPhase.BattleStart) Util.IsOneEnemyBetterThanValue(2000, false) && Duel.Phase==DuelPhase.BattleStart)
{ {
AI.SelectCard(AI.Utils.GetBestEnemyMonster(true,true)); AI.SelectCard(Util.GetBestEnemyMonster(true,true));
return UniqueFaceupSpell(); return UniqueFaceupSpell();
} }
if (AI.Utils.GetProblematicEnemyCard(9999,true)!=null) if (Util.GetProblematicEnemyCard(9999,true)!=null)
{ {
if (AI.Utils.GetProblematicEnemyCard(9999, true).IsCode(CardId.ElShaddollWinda) && if (Util.GetProblematicEnemyCard(9999, true).IsCode(CardId.ElShaddollWinda) &&
!AI.Utils.GetProblematicEnemyCard(9999, true).IsDisabled()) !Util.GetProblematicEnemyCard(9999, true).IsDisabled())
return false; return false;
AI.SelectCard(AI.Utils.GetProblematicEnemyCard(9999, true)); AI.SelectCard(Util.GetProblematicEnemyCard(9999, true));
return UniqueFaceupSpell(); return UniqueFaceupSpell();
} }
return false; return false;
...@@ -201,7 +201,7 @@ namespace WindBot.Game.AI.Decks ...@@ -201,7 +201,7 @@ namespace WindBot.Game.AI.Decks
{ {
if (m.IsAttack()) count++; if (m.IsAttack()) count++;
} }
if (AI.Utils.GetTotalAttackingMonsterAttack(1) >= Bot.LifePoints) if (Util.GetTotalAttackingMonsterAttack(1) >= Bot.LifePoints)
return true; return true;
return count >= 2; return count >= 2;
} }
...@@ -239,7 +239,7 @@ namespace WindBot.Game.AI.Decks ...@@ -239,7 +239,7 @@ namespace WindBot.Game.AI.Decks
private bool SkillDraineff() private bool SkillDraineff()
{ {
if (Duel.LastChainPlayer == 1 && AI.Utils.GetLastChainCard().Location == CardLocation.MonsterZone) if (Duel.LastChainPlayer == 1 && Util.GetLastChainCard().Location == CardLocation.MonsterZone)
return UniqueFaceupSpell(); return UniqueFaceupSpell();
return false; return false;
} }
...@@ -369,7 +369,7 @@ namespace WindBot.Game.AI.Decks ...@@ -369,7 +369,7 @@ namespace WindBot.Game.AI.Decks
{ {
if (target != null && !SeaStealthAttackeff_used) if (target != null && !SeaStealthAttackeff_used)
{ {
if (AI.Utils.IsChainTarget(Card) || AI.Utils.IsChainTarget(target)) if (Util.IsChainTarget(Card) || Util.IsChainTarget(target))
return false; return false;
} }
break; break;
...@@ -421,11 +421,11 @@ namespace WindBot.Game.AI.Decks ...@@ -421,11 +421,11 @@ namespace WindBot.Game.AI.Decks
private bool BorrelswordDragoneff() private bool BorrelswordDragoneff()
{ {
if (ActivateDescription == AI.Utils.GetStringId(CardId.BorrelswordDragon, 0)) if (ActivateDescription == Util.GetStringId(CardId.BorrelswordDragon, 0))
{ {
if (AI.Utils.IsChainTarget(Card) && AI.Utils.GetBestEnemyMonster(true, true) != null) if (Util.IsChainTarget(Card) && Util.GetBestEnemyMonster(true, true) != null)
{ {
AI.SelectCard(AI.Utils.GetBestEnemyMonster(true, true)); AI.SelectCard(Util.GetBestEnemyMonster(true, true));
return true; return true;
} }
if (Duel.Player == 1 && Bot.BattlingMonster == Card) if (Duel.Player == 1 && Bot.BattlingMonster == Card)
...@@ -461,9 +461,9 @@ namespace WindBot.Game.AI.Decks ...@@ -461,9 +461,9 @@ namespace WindBot.Game.AI.Decks
else else
AI.SelectPlace(Zones.z3); AI.SelectPlace(Zones.z3);
if (Enemy.HasInMonstersZone(CardId.KnightmareGryphon, true)) return false; if (Enemy.HasInMonstersZone(CardId.KnightmareGryphon, true)) return false;
if (AI.Utils.GetProblematicEnemyMonster() == null && Bot.ExtraDeck.Count < 5) return false; if (Util.GetProblematicEnemyMonster() == null && Bot.ExtraDeck.Count < 5) return false;
if (Bot.GetMonstersInMainZone().Count >= 5) return false; if (Bot.GetMonstersInMainZone().Count >= 5) return false;
if (AI.Utils.IsTurn1OrMain2()) return false; if (Util.IsTurn1OrMain2()) return false;
AI.SelectPosition(CardPosition.FaceUpAttack); AI.SelectPosition(CardPosition.FaceUpAttack);
IList<ClientCard> material_list = new List<ClientCard>(); IList<ClientCard> material_list = new List<ClientCard>();
if(Bot.HasInExtra(CardId.BorreloadDragon)) if(Bot.HasInExtra(CardId.BorreloadDragon))
...@@ -538,7 +538,7 @@ namespace WindBot.Game.AI.Decks ...@@ -538,7 +538,7 @@ namespace WindBot.Game.AI.Decks
private bool Linkuriboheff() private bool Linkuriboheff()
{ {
if (Duel.LastChainPlayer == 0 && AI.Utils.GetLastChainCard().IsCode(CardId.Linkuriboh)) return false; if (Duel.LastChainPlayer == 0 && Util.GetLastChainCard().IsCode(CardId.Linkuriboh)) return false;
return true; return true;
} }
private bool SeaStealthAttackeff() private bool SeaStealthAttackeff()
...@@ -591,12 +591,12 @@ namespace WindBot.Game.AI.Decks ...@@ -591,12 +591,12 @@ namespace WindBot.Game.AI.Decks
if (s.IsCode(CardId.PacifisThePhantasmCity)) if (s.IsCode(CardId.PacifisThePhantasmCity))
target = s; target = s;
} }
if (target != null && AI.Utils.IsChainTarget(target)) if (target != null && Util.IsChainTarget(target))
{ {
SeaStealthAttackeff_used = true; SeaStealthAttackeff_used = true;
return true; return true;
} }
target = AI.Utils.GetLastChainCard(); target = Util.GetLastChainCard();
if(target!=null) if(target!=null)
{ {
if(target.IsCode(CardId.BrandishSkillAfterburner)) if(target.IsCode(CardId.BrandishSkillAfterburner))
......
...@@ -183,7 +183,7 @@ namespace WindBot.Game.AI.Decks ...@@ -183,7 +183,7 @@ namespace WindBot.Game.AI.Decks
private bool CardOfDemiseEffect() private bool CardOfDemiseEffect()
{ {
if (AI.Utils.IsTurn1OrMain2() && !ShouldPendulum()) if (Util.IsTurn1OrMain2() && !ShouldPendulum())
{ {
CardOfDemiseUsed = true; CardOfDemiseUsed = true;
return true; return true;
...@@ -215,8 +215,8 @@ namespace WindBot.Game.AI.Decks ...@@ -215,8 +215,8 @@ namespace WindBot.Game.AI.Decks
{ {
if (Card.Location == CardLocation.Grave) if (Card.Location == CardLocation.Grave)
{ {
ClientCard l = AI.Utils.GetPZone(0, 0); ClientCard l = Util.GetPZone(0, 0);
ClientCard r = AI.Utils.GetPZone(0, 1); ClientCard r = Util.GetPZone(0, 1);
if (l == null && r == null) if (l == null && r == null)
AI.SelectCard(CardId.Scout); AI.SelectCard(CardId.Scout);
} }
...@@ -227,8 +227,8 @@ namespace WindBot.Game.AI.Decks ...@@ -227,8 +227,8 @@ namespace WindBot.Game.AI.Decks
{ {
if (Card.Location != CardLocation.Hand) if (Card.Location != CardLocation.Hand)
return false; return false;
ClientCard l = AI.Utils.GetPZone(0, 0); ClientCard l = Util.GetPZone(0, 0);
ClientCard r = AI.Utils.GetPZone(0, 1); ClientCard r = Util.GetPZone(0, 1);
if (l == null && r == null) if (l == null && r == null)
return true; return true;
if (l == null && r.RScale != Card.LScale) if (l == null && r.RScale != Card.LScale)
...@@ -252,8 +252,8 @@ namespace WindBot.Game.AI.Decks ...@@ -252,8 +252,8 @@ namespace WindBot.Game.AI.Decks
{ {
count++; count++;
} }
ClientCard l = AI.Utils.GetPZone(0, 0); ClientCard l = Util.GetPZone(0, 0);
ClientCard r = AI.Utils.GetPZone(0, 1); ClientCard r = Util.GetPZone(0, 1);
if (l == null && r == null) if (l == null && r == null)
{ {
if (CardOfDemiseUsed) if (CardOfDemiseUsed)
...@@ -316,7 +316,7 @@ namespace WindBot.Game.AI.Decks ...@@ -316,7 +316,7 @@ namespace WindBot.Game.AI.Decks
{ {
if (Card.Location == CardLocation.Hand) if (Card.Location == CardLocation.Hand)
return false; return false;
ClientCard target = AI.Utils.GetBestEnemyCard(); ClientCard target = Util.GetBestEnemyCard();
if (target != null) if (target != null)
{ {
AI.SelectCard(target); AI.SelectCard(target);
...@@ -329,7 +329,7 @@ namespace WindBot.Game.AI.Decks ...@@ -329,7 +329,7 @@ namespace WindBot.Game.AI.Decks
{ {
if (Card.Location == CardLocation.Hand) if (Card.Location == CardLocation.Hand)
return false; return false;
ClientCard target = AI.Utils.GetBestEnemyMonster(); ClientCard target = Util.GetBestEnemyMonster();
if (target != null) if (target != null)
{ {
AI.SelectCard(target); AI.SelectCard(target);
...@@ -342,7 +342,7 @@ namespace WindBot.Game.AI.Decks ...@@ -342,7 +342,7 @@ namespace WindBot.Game.AI.Decks
{ {
if (Card.Location == CardLocation.Hand) if (Card.Location == CardLocation.Hand)
return false; return false;
ClientCard target = AI.Utils.GetBestEnemySpell(); ClientCard target = Util.GetBestEnemySpell();
if (target != null) if (target != null)
{ {
AI.SelectCard(target); AI.SelectCard(target);
...@@ -353,8 +353,8 @@ namespace WindBot.Game.AI.Decks ...@@ -353,8 +353,8 @@ namespace WindBot.Game.AI.Decks
private bool ShouldPendulum() private bool ShouldPendulum()
{ {
ClientCard l = AI.Utils.GetPZone(0, 0); ClientCard l = Util.GetPZone(0, 0);
ClientCard r = AI.Utils.GetPZone(0, 1); ClientCard r = Util.GetPZone(0, 1);
if (l != null && r != null && l.LScale != r.RScale) if (l != null && r != null && l.LScale != r.RScale)
{ {
int count = 0; int count = 0;
......
...@@ -174,7 +174,7 @@ namespace WindBot.Game.AI.Decks ...@@ -174,7 +174,7 @@ namespace WindBot.Game.AI.Decks
break; break;
} }
return AI.Utils.CheckSelectCount(result, cards, min, max); return Util.CheckSelectCount(result, cards, min, max);
} }
private bool UnexpectedDaiEffect() private bool UnexpectedDaiEffect()
...@@ -185,7 +185,7 @@ namespace WindBot.Game.AI.Decks ...@@ -185,7 +185,7 @@ namespace WindBot.Game.AI.Decks
CardId.PhantomGryphon, CardId.PhantomGryphon,
CardId.MegalosmasherX CardId.MegalosmasherX
); );
else if (AI.Utils.IsTurn1OrMain2()) else if (Util.IsTurn1OrMain2())
{ {
if (Bot.HasInHand(CardId.MysteryShellDragon)) if (Bot.HasInHand(CardId.MysteryShellDragon))
AI.SelectCard(CardId.MysteryShellDragon); AI.SelectCard(CardId.MysteryShellDragon);
...@@ -210,14 +210,14 @@ namespace WindBot.Game.AI.Decks ...@@ -210,14 +210,14 @@ namespace WindBot.Game.AI.Decks
private bool RescueRabbitSummon() private bool RescueRabbitSummon()
{ {
return AI.Utils.GetBotAvailZonesFromExtraDeck() > 0 return Util.GetBotAvailZonesFromExtraDeck() > 0
|| AI.Utils.GetMatchingCards(Enemy.MonsterZone, card => card.GetDefensePower() >= 1900).Count == 0 || Util.GetMatchingCards(Enemy.MonsterZone, card => card.GetDefensePower() >= 1900).Count == 0
|| AI.Utils.GetMatchingCards(Enemy.MonsterZone, card => card.GetDefensePower() < 1900).Count > AI.Utils.GetMatchingCards(Bot.MonsterZone, card => card.Attack >= 1900).Count; || Util.GetMatchingCards(Enemy.MonsterZone, card => card.GetDefensePower() < 1900).Count > Util.GetMatchingCards(Bot.MonsterZone, card => card.Attack >= 1900).Count;
} }
private bool RescueRabbitEffect() private bool RescueRabbitEffect()
{ {
if (AI.Utils.IsTurn1OrMain2()) if (Util.IsTurn1OrMain2())
{ {
AI.SelectCard( AI.SelectCard(
CardId.MegalosmasherX, CardId.MegalosmasherX,
...@@ -278,15 +278,15 @@ namespace WindBot.Game.AI.Decks ...@@ -278,15 +278,15 @@ namespace WindBot.Game.AI.Decks
private bool IgnisterProminenceTheBlastingDracoslayerSummon() private bool IgnisterProminenceTheBlastingDracoslayerSummon()
{ {
return AI.Utils.GetProblematicEnemyCard() != null; return Util.GetProblematicEnemyCard() != null;
} }
private bool IgnisterProminenceTheBlastingDracoslayerEffect() private bool IgnisterProminenceTheBlastingDracoslayerEffect()
{ {
if (ActivateDescription == AI.Utils.GetStringId(CardId.IgnisterProminenceTheBlastingDracoslayer, 1)) if (ActivateDescription == Util.GetStringId(CardId.IgnisterProminenceTheBlastingDracoslayer, 1))
return true; return true;
ClientCard target1 = null; ClientCard target1 = null;
ClientCard target2 = AI.Utils.GetProblematicEnemyCard(); ClientCard target2 = Util.GetProblematicEnemyCard();
List<ClientCard> spells = Enemy.GetSpells(); List<ClientCard> spells = Enemy.GetSpells();
foreach (ClientCard spell in spells) foreach (ClientCard spell in spells)
{ {
...@@ -333,7 +333,7 @@ namespace WindBot.Game.AI.Decks ...@@ -333,7 +333,7 @@ namespace WindBot.Game.AI.Decks
private bool Number37HopeWovenDragonSpiderSharkSummon() private bool Number37HopeWovenDragonSpiderSharkSummon()
{ {
return AI.Utils.IsAllEnemyBetterThanValue(1700, false) && !AI.Utils.IsOneEnemyBetterThanValue(3600, true); return Util.IsAllEnemyBetterThanValue(1700, false) && !Util.IsOneEnemyBetterThanValue(3600, true);
} }
private bool LightningChidoriSummon() private bool LightningChidoriSummon()
...@@ -353,12 +353,12 @@ namespace WindBot.Game.AI.Decks ...@@ -353,12 +353,12 @@ namespace WindBot.Game.AI.Decks
} }
} }
return AI.Utils.GetProblematicEnemyCard() != null; return Util.GetProblematicEnemyCard() != null;
} }
private bool LightningChidoriEffect() private bool LightningChidoriEffect()
{ {
ClientCard problematicCard = AI.Utils.GetProblematicEnemyCard(); ClientCard problematicCard = Util.GetProblematicEnemyCard();
AI.SelectCard(0); AI.SelectCard(0);
AI.SelectNextCard(problematicCard); AI.SelectNextCard(problematicCard);
return true; return true;
...@@ -366,12 +366,12 @@ namespace WindBot.Game.AI.Decks ...@@ -366,12 +366,12 @@ namespace WindBot.Game.AI.Decks
private bool EvolzarLaggiaSummon() private bool EvolzarLaggiaSummon()
{ {
return (AI.Utils.IsAllEnemyBetterThanValue(2000, false) && !AI.Utils.IsOneEnemyBetterThanValue(2400, true)) || AI.Utils.IsTurn1OrMain2(); return (Util.IsAllEnemyBetterThanValue(2000, false) && !Util.IsOneEnemyBetterThanValue(2400, true)) || Util.IsTurn1OrMain2();
} }
private bool EvilswarmNightmareSummon() private bool EvilswarmNightmareSummon()
{ {
if (AI.Utils.IsTurn1OrMain2()) if (Util.IsTurn1OrMain2())
{ {
AI.SelectPosition(CardPosition.FaceUpDefence); AI.SelectPosition(CardPosition.FaceUpDefence);
return true; return true;
...@@ -381,7 +381,7 @@ namespace WindBot.Game.AI.Decks ...@@ -381,7 +381,7 @@ namespace WindBot.Game.AI.Decks
private bool TraptrixRafflesiaSummon() private bool TraptrixRafflesiaSummon()
{ {
if (AI.Utils.IsTurn1OrMain2() && (Bot.GetRemainingCount(CardId.BottomlessTrapHole, 1) + Bot.GetRemainingCount(CardId.TraptrixTrapHoleNightmare, 1)) > 0) if (Util.IsTurn1OrMain2() && (Bot.GetRemainingCount(CardId.BottomlessTrapHole, 1) + Bot.GetRemainingCount(CardId.TraptrixTrapHoleNightmare, 1)) > 0)
{ {
AI.SelectPosition(CardPosition.FaceUpDefence); AI.SelectPosition(CardPosition.FaceUpDefence);
return true; return true;
...@@ -392,14 +392,14 @@ namespace WindBot.Game.AI.Decks ...@@ -392,14 +392,14 @@ namespace WindBot.Game.AI.Decks
private bool Number59CrookedCookSummon() private bool Number59CrookedCookSummon()
{ {
return ((Bot.GetMonsterCount() + Bot.GetSpellCount() - 2) <= 1) && return ((Bot.GetMonsterCount() + Bot.GetSpellCount() - 2) <= 1) &&
((AI.Utils.IsOneEnemyBetter() && !AI.Utils.IsOneEnemyBetterThanValue(2300, true)) || AI.Utils.IsTurn1OrMain2()); ((Util.IsOneEnemyBetter() && !Util.IsOneEnemyBetterThanValue(2300, true)) || Util.IsTurn1OrMain2());
} }
private bool Number59CrookedCookEffect() private bool Number59CrookedCookEffect()
{ {
if (Duel.Player == 0) if (Duel.Player == 0)
{ {
if (AI.Utils.IsChainTarget(Card)) if (Util.IsChainTarget(Card))
return true; return true;
} }
else else
...@@ -422,7 +422,7 @@ namespace WindBot.Game.AI.Decks ...@@ -422,7 +422,7 @@ namespace WindBot.Game.AI.Decks
private bool StarliegePaladynamoEffect() private bool StarliegePaladynamoEffect()
{ {
ClientCard result = AI.Utils.GetOneEnemyBetterThanValue(2000, true); ClientCard result = Util.GetOneEnemyBetterThanValue(2000, true);
if (result != null) if (result != null)
{ {
AI.SelectCard(0); AI.SelectCard(0);
......
...@@ -120,13 +120,13 @@ namespace WindBot.Game.AI.Decks ...@@ -120,13 +120,13 @@ namespace WindBot.Game.AI.Decks
public override IList<ClientCard> OnSelectXyzMaterial(IList<ClientCard> cards, int min, int max) public override IList<ClientCard> OnSelectXyzMaterial(IList<ClientCard> cards, int min, int max)
{ {
IList<ClientCard> result = AI.Utils.SelectPreferredCards(new[] { IList<ClientCard> result = Util.SelectPreferredCards(new[] {
CardId.MistArchfiend, CardId.MistArchfiend,
CardId.PanzerDragon, CardId.PanzerDragon,
CardId.SolarWindJammer, CardId.SolarWindJammer,
CardId.StarDrawing CardId.StarDrawing
}, cards, min, max); }, cards, min, max);
return AI.Utils.CheckSelectCount(result, cards, min, max); return Util.CheckSelectCount(result, cards, min, max);
} }
private bool NormalSummon() private bool NormalSummon()
...@@ -236,7 +236,7 @@ namespace WindBot.Game.AI.Decks ...@@ -236,7 +236,7 @@ namespace WindBot.Game.AI.Decks
private bool CyberDragonNovaEffect() private bool CyberDragonNovaEffect()
{ {
if (ActivateDescription == AI.Utils.GetStringId(CardId.CyberDragonNova, 0)) if (ActivateDescription == Util.GetStringId(CardId.CyberDragonNova, 0))
{ {
return true; return true;
} }
...@@ -282,12 +282,12 @@ namespace WindBot.Game.AI.Decks ...@@ -282,12 +282,12 @@ namespace WindBot.Game.AI.Decks
private bool Number61VolcasaurusSummon() private bool Number61VolcasaurusSummon()
{ {
return AI.Utils.IsOneEnemyBetterThanValue(2000, false); return Util.IsOneEnemyBetterThanValue(2000, false);
} }
private bool Number61VolcasaurusEffect() private bool Number61VolcasaurusEffect()
{ {
ClientCard target = AI.Utils.GetProblematicEnemyMonster(2000); ClientCard target = Util.GetProblematicEnemyMonster(2000);
if (target != null) if (target != null)
{ {
AI.SelectCard(CardId.CyberDragon); AI.SelectCard(CardId.CyberDragon);
...@@ -300,9 +300,9 @@ namespace WindBot.Game.AI.Decks ...@@ -300,9 +300,9 @@ namespace WindBot.Game.AI.Decks
private bool TirasKeeperOfGenesisEffect() private bool TirasKeeperOfGenesisEffect()
{ {
ClientCard target = AI.Utils.GetProblematicEnemyCard(); ClientCard target = Util.GetProblematicEnemyCard();
if (target == null) if (target == null)
target = AI.Utils.GetBestEnemyCard(); target = Util.GetBestEnemyCard();
if (target != null) if (target != null)
{ {
AI.SelectCard(target); AI.SelectCard(target);
...@@ -357,7 +357,7 @@ namespace WindBot.Game.AI.Decks ...@@ -357,7 +357,7 @@ namespace WindBot.Game.AI.Decks
private bool PanzerDragonEffect() private bool PanzerDragonEffect()
{ {
ClientCard target = AI.Utils.GetBestEnemyCard(); ClientCard target = Util.GetBestEnemyCard();
if (target != null) if (target != null)
{ {
AI.SelectCard(target); AI.SelectCard(target);
......
...@@ -189,7 +189,7 @@ namespace WindBot.Game.AI.Decks ...@@ -189,7 +189,7 @@ namespace WindBot.Game.AI.Decks
private bool MindControlEffect() private bool MindControlEffect()
{ {
ClientCard target = AI.Utils.GetBestEnemyMonster(); ClientCard target = Util.GetBestEnemyMonster();
if (target != null) if (target != null)
{ {
AI.SelectCard(target); AI.SelectCard(target);
...@@ -461,8 +461,8 @@ namespace WindBot.Game.AI.Decks ...@@ -461,8 +461,8 @@ namespace WindBot.Game.AI.Decks
private bool LinkSummon() private bool LinkSummon()
{ {
return (AI.Utils.IsTurn1OrMain2() || AI.Utils.IsOneEnemyBetter()) return (Util.IsTurn1OrMain2() || Util.IsOneEnemyBetter())
&& AI.Utils.GetBestAttack(Bot) < Card.Attack; && Util.GetBestAttack(Bot) < Card.Attack;
} }
} }
} }
\ No newline at end of file
...@@ -114,7 +114,7 @@ namespace WindBot.Game.AI.Decks ...@@ -114,7 +114,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor(ExecutorType.SpSummon, CardId.Hayate, HayateSummon); AddExecutor(ExecutorType.SpSummon, CardId.Hayate, HayateSummon);
AddExecutor(ExecutorType.Activate, CardId.Hayate, HayateEffect); AddExecutor(ExecutorType.Activate, CardId.Hayate, HayateEffect);
AddExecutor(ExecutorType.SpSummon, CardId.TopologicBomberDragon, AI.Utils.IsTurn1OrMain2); AddExecutor(ExecutorType.SpSummon, CardId.TopologicBomberDragon, Util.IsTurn1OrMain2);
AddExecutor(ExecutorType.Summon, CardId.Raye, RayeSummon); AddExecutor(ExecutorType.Summon, CardId.Raye, RayeSummon);
...@@ -160,15 +160,15 @@ namespace WindBot.Game.AI.Decks ...@@ -160,15 +160,15 @@ namespace WindBot.Game.AI.Decks
public override bool OnSelectYesNo(int desc) public override bool OnSelectYesNo(int desc)
{ {
if (desc == AI.Utils.GetStringId(CardId.SummonSorceress, 2)) // summon to the field of opponent? if (desc == Util.GetStringId(CardId.SummonSorceress, 2)) // summon to the field of opponent?
return false; return false;
if (desc == AI.Utils.GetStringId(CardId.Engage, 0)) // draw card? if (desc == Util.GetStringId(CardId.Engage, 0)) // draw card?
return true; return true;
if (desc == AI.Utils.GetStringId(CardId.WidowAnchor, 0)) // get control? if (desc == Util.GetStringId(CardId.WidowAnchor, 0)) // get control?
return true; return true;
if (desc == AI.Utils.GetStringId(CardId.JammingWave, 0)) // destroy monster? if (desc == Util.GetStringId(CardId.JammingWave, 0)) // destroy monster?
{ {
ClientCard target = AI.Utils.GetBestEnemyMonster(); ClientCard target = Util.GetBestEnemyMonster();
if (target != null) if (target != null)
{ {
AI.SelectCard(target); AI.SelectCard(target);
...@@ -177,9 +177,9 @@ namespace WindBot.Game.AI.Decks ...@@ -177,9 +177,9 @@ namespace WindBot.Game.AI.Decks
else else
return false; return false;
} }
if (desc == AI.Utils.GetStringId(CardId.Afterburners, 0)) // destroy spell & trap? if (desc == Util.GetStringId(CardId.Afterburners, 0)) // destroy spell & trap?
{ {
ClientCard target = AI.Utils.GetBestEnemySpell(); ClientCard target = Util.GetBestEnemySpell();
if (target != null) if (target != null)
{ {
AI.SelectCard(target); AI.SelectCard(target);
...@@ -199,7 +199,7 @@ namespace WindBot.Game.AI.Decks ...@@ -199,7 +199,7 @@ namespace WindBot.Game.AI.Decks
private bool TwinTwistersEffect() private bool TwinTwistersEffect()
{ {
if (AI.Utils.ChainContainsCard(CardId.TwinTwisters)) if (Util.ChainContainsCard(CardId.TwinTwisters))
return false; return false;
IList<ClientCard> targets = new List<ClientCard>(); IList<ClientCard> targets = new List<ClientCard>();
foreach (ClientCard target in Enemy.GetSpells()) foreach (ClientCard target in Enemy.GetSpells())
...@@ -261,7 +261,7 @@ namespace WindBot.Game.AI.Decks ...@@ -261,7 +261,7 @@ namespace WindBot.Game.AI.Decks
private bool AfterburnersEffect() private bool AfterburnersEffect()
{ {
ClientCard target = AI.Utils.GetBestEnemyMonster(true, true); ClientCard target = Util.GetBestEnemyMonster(true, true);
if (target != null) if (target != null)
{ {
AI.SelectCard(target); AI.SelectCard(target);
...@@ -291,9 +291,9 @@ namespace WindBot.Game.AI.Decks ...@@ -291,9 +291,9 @@ namespace WindBot.Game.AI.Decks
private bool WidowAnchorEffectFirst() private bool WidowAnchorEffectFirst()
{ {
if (AI.Utils.ChainContainsCard(CardId.WidowAnchor)) if (Util.ChainContainsCard(CardId.WidowAnchor))
return false; return false;
ClientCard target = AI.Utils.GetProblematicEnemyMonster(0, true); ClientCard target = Util.GetProblematicEnemyMonster(0, true);
if (target != null) if (target != null)
{ {
WidowAnchorTarget = target; WidowAnchorTarget = target;
...@@ -359,7 +359,7 @@ namespace WindBot.Game.AI.Decks ...@@ -359,7 +359,7 @@ namespace WindBot.Game.AI.Decks
return true; return true;
if (Bot.HasInMonstersZone(CardId.TopologicBomberDragon) && Enemy.GetMonsterCount() > 1) if (Bot.HasInMonstersZone(CardId.TopologicBomberDragon) && Enemy.GetMonsterCount() > 1)
return true; return true;
if (!AI.Utils.IsTurn1OrMain2()) if (!Util.IsTurn1OrMain2())
{ {
foreach (ClientCard card in Bot.Hand) foreach (ClientCard card in Bot.Hand)
{ {
...@@ -375,14 +375,14 @@ namespace WindBot.Game.AI.Decks ...@@ -375,14 +375,14 @@ namespace WindBot.Game.AI.Decks
{ {
if (DefaultBreakthroughSkill()) if (DefaultBreakthroughSkill())
{ {
WidowAnchorTarget = AI.Utils.GetLastChainCard(); WidowAnchorTarget = Util.GetLastChainCard();
return true; return true;
} }
if (!HaveThreeSpellsInGrave() || Duel.Player == 1 || Duel.Phase < DuelPhase.Main1 || Duel.Phase >= DuelPhase.Main2 || AI.Utils.ChainContainsCard(CardId.WidowAnchor)) if (!HaveThreeSpellsInGrave() || Duel.Player == 1 || Duel.Phase < DuelPhase.Main1 || Duel.Phase >= DuelPhase.Main2 || Util.ChainContainsCard(CardId.WidowAnchor))
return false; return false;
ClientCard target = AI.Utils.GetBestEnemyMonster(true, true); ClientCard target = Util.GetBestEnemyMonster(true, true);
if (target != null && !target.IsDisabled() && !target.HasType(CardType.Normal)) if (target != null && !target.IsDisabled() && !target.HasType(CardType.Normal))
{ {
WidowAnchorTarget = target; WidowAnchorTarget = target;
...@@ -410,9 +410,9 @@ namespace WindBot.Game.AI.Decks ...@@ -410,9 +410,9 @@ namespace WindBot.Game.AI.Decks
} }
else else
{ {
if (AI.Utils.IsTurn1OrMain2()) if (Util.IsTurn1OrMain2())
return false; return false;
ClientCard bestBotMonster = AI.Utils.GetBestBotMonster(true); ClientCard bestBotMonster = Util.GetBestBotMonster(true);
if (bestBotMonster != null) if (bestBotMonster != null)
{ {
int bestPower = bestBotMonster.Attack; int bestPower = bestBotMonster.Attack;
...@@ -527,7 +527,7 @@ namespace WindBot.Game.AI.Decks ...@@ -527,7 +527,7 @@ namespace WindBot.Game.AI.Decks
{ {
return false; return false;
} }
if (AI.Utils.IsChainTarget(Card)) if (Util.IsChainTarget(Card))
{ {
RayeSelectTarget(); RayeSelectTarget();
return true; return true;
...@@ -582,11 +582,11 @@ namespace WindBot.Game.AI.Decks ...@@ -582,11 +582,11 @@ namespace WindBot.Game.AI.Decks
private bool KagariEffect() private bool KagariEffect()
{ {
if (EmptyMainMonsterZone() && AI.Utils.GetProblematicEnemyMonster() != null && Bot.HasInGraveyard(CardId.Afterburners)) if (EmptyMainMonsterZone() && Util.GetProblematicEnemyMonster() != null && Bot.HasInGraveyard(CardId.Afterburners))
{ {
AI.SelectCard(CardId.Afterburners); AI.SelectCard(CardId.Afterburners);
} }
else if (EmptyMainMonsterZone() && AI.Utils.GetProblematicEnemySpell() != null && Bot.HasInGraveyard(CardId.JammingWave)) else if (EmptyMainMonsterZone() && Util.GetProblematicEnemySpell() != null && Bot.HasInGraveyard(CardId.JammingWave))
{ {
AI.SelectCard(CardId.JammingWave); AI.SelectCard(CardId.JammingWave);
} }
...@@ -597,7 +597,7 @@ namespace WindBot.Game.AI.Decks ...@@ -597,7 +597,7 @@ namespace WindBot.Game.AI.Decks
private bool ShizukuSummon() private bool ShizukuSummon()
{ {
if (AI.Utils.IsTurn1OrMain2()) if (Util.IsTurn1OrMain2())
{ {
ShizukuSummoned = true; ShizukuSummoned = true;
return true; return true;
...@@ -617,7 +617,7 @@ namespace WindBot.Game.AI.Decks ...@@ -617,7 +617,7 @@ namespace WindBot.Game.AI.Decks
private bool HayateSummon() private bool HayateSummon()
{ {
if (AI.Utils.IsTurn1OrMain2()) if (Util.IsTurn1OrMain2())
return false; return false;
HayateSummoned = true; HayateSummoned = true;
return true; return true;
...@@ -641,14 +641,14 @@ namespace WindBot.Game.AI.Decks ...@@ -641,14 +641,14 @@ namespace WindBot.Game.AI.Decks
CardId.EffectVeiler, CardId.EffectVeiler,
CardId.GhostRabbit, CardId.GhostRabbit,
CardId.JetSynchron CardId.JetSynchron
}) && !AI.Utils.IsTurn1OrMain2() }) && !Util.IsTurn1OrMain2()
&& Bot.GetMonsterCount() > 0 && Bot.GetMonsterCount() > 0
&& Bot.HasInExtra(CardId.CrystronNeedlefiber); && Bot.HasInExtra(CardId.CrystronNeedlefiber);
} }
private bool CrystronNeedlefiberSummon() private bool CrystronNeedlefiberSummon()
{ {
return !AI.Utils.IsTurn1OrMain2(); return !Util.IsTurn1OrMain2();
} }
private bool CrystronNeedlefiberEffect() private bool CrystronNeedlefiberEffect()
...@@ -701,15 +701,15 @@ namespace WindBot.Game.AI.Decks ...@@ -701,15 +701,15 @@ namespace WindBot.Game.AI.Decks
{ {
return CardId.HornetDrones; return CardId.HornetDrones;
} }
else if (AI.Utils.GetProblematicEnemyMonster() != null && Bot.GetRemainingCount(CardId.WidowAnchor, 3) > 0) else if (Util.GetProblematicEnemyMonster() != null && Bot.GetRemainingCount(CardId.WidowAnchor, 3) > 0)
{ {
return CardId.WidowAnchor; return CardId.WidowAnchor;
} }
else if (EmptyMainMonsterZone() && AI.Utils.GetProblematicEnemyMonster() != null && Bot.GetRemainingCount(CardId.Afterburners, 1) > 0) else if (EmptyMainMonsterZone() && Util.GetProblematicEnemyMonster() != null && Bot.GetRemainingCount(CardId.Afterburners, 1) > 0)
{ {
return CardId.Afterburners; return CardId.Afterburners;
} }
else if (EmptyMainMonsterZone() && AI.Utils.GetProblematicEnemySpell() != null && Bot.GetRemainingCount(CardId.JammingWave, 1) > 0) else if (EmptyMainMonsterZone() && Util.GetProblematicEnemySpell() != null && Bot.GetRemainingCount(CardId.JammingWave, 1) > 0)
{ {
return CardId.JammingWave; return CardId.JammingWave;
} }
......
...@@ -413,7 +413,7 @@ namespace WindBot.Game.AI.Decks ...@@ -413,7 +413,7 @@ namespace WindBot.Game.AI.Decks
private bool CatSharkSummon() private bool CatSharkSummon()
{ {
if (Bot.HasInMonstersZone(CardId.ToadallyAwesome) if (Bot.HasInMonstersZone(CardId.ToadallyAwesome)
&& ((AI.Utils.IsOneEnemyBetter(true) && ((Util.IsOneEnemyBetter(true)
&& !Bot.HasInMonstersZone(new[] && !Bot.HasInMonstersZone(new[]
{ {
CardId.CatShark, CardId.CatShark,
...@@ -470,8 +470,8 @@ namespace WindBot.Game.AI.Decks ...@@ -470,8 +470,8 @@ namespace WindBot.Game.AI.Decks
num++; num++;
} }
} }
return AI.Utils.IsOneEnemyBetter(true) return Util.IsOneEnemyBetter(true)
&& AI.Utils.GetBestAttack(Enemy) > 2200 && Util.GetBestAttack(Enemy) > 2200
&& num < 4 && num < 4
&& !Bot.HasInMonstersZone(new[] && !Bot.HasInMonstersZone(new[]
{ {
...@@ -496,7 +496,7 @@ namespace WindBot.Game.AI.Decks ...@@ -496,7 +496,7 @@ namespace WindBot.Game.AI.Decks
{ {
defence += monster.GetDefensePower(); defence += monster.GetDefensePower();
} }
if (attack - 2000 - defence > Enemy.LifePoints && !AI.Utils.IsOneEnemyBetter(true)) if (attack - 2000 - defence > Enemy.LifePoints && !Util.IsOneEnemyBetter(true))
return true; return true;
} }
return false; return false;
...@@ -512,7 +512,7 @@ namespace WindBot.Game.AI.Decks ...@@ -512,7 +512,7 @@ namespace WindBot.Game.AI.Decks
{ {
if (Card.IsFacedown()) if (Card.IsFacedown())
return true; return true;
if (Card.IsDefense() && !AI.Utils.IsAllEnemyBetter(true) && Card.Attack >= Card.Defense) if (Card.IsDefense() && !Util.IsAllEnemyBetter(true) && Card.Attack >= Card.Defense)
return true; return true;
return false; return false;
} }
......
This diff is collapsed.
...@@ -181,8 +181,8 @@ namespace WindBot.Game.AI.Decks ...@@ -181,8 +181,8 @@ namespace WindBot.Game.AI.Decks
public override IList<ClientCard> OnSelectXyzMaterial(IList<ClientCard> cards, int min, int max) public override IList<ClientCard> OnSelectXyzMaterial(IList<ClientCard> cards, int min, int max)
{ {
IList<ClientCard> result = AI.Utils.SelectPreferredCards(CardId.YosenjuTsujik, cards, min, max); IList<ClientCard> result = Util.SelectPreferredCards(CardId.YosenjuTsujik, cards, min, max);
return AI.Utils.CheckSelectCount(result, cards, min, max); return Util.CheckSelectCount(result, cards, min, max);
} }
private bool PotOfDualityEffect() private bool PotOfDualityEffect()
...@@ -227,7 +227,7 @@ namespace WindBot.Game.AI.Decks ...@@ -227,7 +227,7 @@ namespace WindBot.Game.AI.Decks
private bool CardOfDemiseEffect() private bool CardOfDemiseEffect()
{ {
if (AI.Utils.IsTurn1OrMain2()) if (Util.IsTurn1OrMain2())
{ {
CardOfDemiseUsed = true; CardOfDemiseUsed = true;
return true; return true;
...@@ -292,15 +292,15 @@ namespace WindBot.Game.AI.Decks ...@@ -292,15 +292,15 @@ namespace WindBot.Game.AI.Decks
private bool DarkRebellionXyzDragonSummon() private bool DarkRebellionXyzDragonSummon()
{ {
int selfBestAttack = AI.Utils.GetBestAttack(Bot); int selfBestAttack = Util.GetBestAttack(Bot);
int oppoBestAttack = AI.Utils.GetBestAttack(Enemy); int oppoBestAttack = Util.GetBestAttack(Enemy);
return selfBestAttack <= oppoBestAttack; return selfBestAttack <= oppoBestAttack;
} }
private bool DarkRebellionXyzDragonEffect() private bool DarkRebellionXyzDragonEffect()
{ {
int oppoBestAttack = AI.Utils.GetBestAttack(Enemy); int oppoBestAttack = Util.GetBestAttack(Enemy);
ClientCard target = AI.Utils.GetOneEnemyBetterThanValue(oppoBestAttack, true); ClientCard target = Util.GetOneEnemyBetterThanValue(oppoBestAttack, true);
if (target != null) if (target != null)
{ {
AI.SelectCard(0); AI.SelectCard(0);
......
...@@ -139,31 +139,31 @@ namespace WindBot.Game.AI.Decks ...@@ -139,31 +139,31 @@ namespace WindBot.Game.AI.Decks
public override IList<ClientCard> OnSelectXyzMaterial(IList<ClientCard> cards, int min, int max) public override IList<ClientCard> OnSelectXyzMaterial(IList<ClientCard> cards, int min, int max)
{ {
IList<ClientCard> result = AI.Utils.SelectPreferredCards(new[] { IList<ClientCard> result = Util.SelectPreferredCards(new[] {
CardId.StarDrawing, CardId.StarDrawing,
CardId.SolarWindJammer, CardId.SolarWindJammer,
CardId.Goblindbergh CardId.Goblindbergh
}, cards, min, max); }, cards, min, max);
return AI.Utils.CheckSelectCount(result, cards, min, max); return Util.CheckSelectCount(result, cards, min, max);
} }
private bool Number39Utopia() private bool Number39Utopia()
{ {
if (!AI.Utils.HasChainedTrap(0) && Duel.Player == 1 && Duel.Phase == DuelPhase.BattleStart && Card.HasXyzMaterial(2)) if (!Util.HasChainedTrap(0) && Duel.Player == 1 && Duel.Phase == DuelPhase.BattleStart && Card.HasXyzMaterial(2))
return true; return true;
return false; return false;
} }
private bool Number61Volcasaurus() private bool Number61Volcasaurus()
{ {
return AI.Utils.IsOneEnemyBetterThanValue(2000, false); return Util.IsOneEnemyBetterThanValue(2000, false);
} }
private bool ZwLionArms() private bool ZwLionArms()
{ {
if (ActivateDescription == AI.Utils.GetStringId(CardId.ZwLionArms, 0)) if (ActivateDescription == Util.GetStringId(CardId.ZwLionArms, 0))
return true; return true;
if (ActivateDescription == AI.Utils.GetStringId(CardId.ZwLionArms, 1)) if (ActivateDescription == Util.GetStringId(CardId.ZwLionArms, 1))
return !Card.IsDisabled(); return !Card.IsDisabled();
return false; return false;
} }
...@@ -234,7 +234,7 @@ namespace WindBot.Game.AI.Decks ...@@ -234,7 +234,7 @@ namespace WindBot.Game.AI.Decks
private bool KagetokageEffect() private bool KagetokageEffect()
{ {
var lastChainCard = AI.Utils.GetLastChainCard(); var lastChainCard = Util.GetLastChainCard();
if (lastChainCard == null) return true; if (lastChainCard == null) return true;
return !lastChainCard.IsCode(CardId.Goblindbergh, CardId.TinGoldfish); return !lastChainCard.IsCode(CardId.Goblindbergh, CardId.TinGoldfish);
} }
......
...@@ -157,7 +157,7 @@ namespace WindBot.Game.AI.Decks ...@@ -157,7 +157,7 @@ namespace WindBot.Game.AI.Decks
|| Duel.Phase == DuelPhase.Damage)) || Duel.Phase == DuelPhase.Damage))
return false; return false;
return Duel.Player==0 return Duel.Player==0
|| AI.Utils.IsOneEnemyBetter(); || Util.IsOneEnemyBetter();
} }
return true; return true;
} }
...@@ -419,7 +419,7 @@ namespace WindBot.Game.AI.Decks ...@@ -419,7 +419,7 @@ namespace WindBot.Game.AI.Decks
private bool RatpierMaterialEffect() private bool RatpierMaterialEffect()
{ {
if (ActivateDescription == AI.Utils.GetStringId(CardId.Ratpier, 1)) if (ActivateDescription == Util.GetStringId(CardId.Ratpier, 1))
{ {
AI.SelectPosition(CardPosition.FaceUpDefence); AI.SelectPosition(CardPosition.FaceUpDefence);
return true; return true;
...@@ -479,7 +479,7 @@ namespace WindBot.Game.AI.Decks ...@@ -479,7 +479,7 @@ namespace WindBot.Game.AI.Decks
{ {
if (Duel.LastChainPlayer == 0) if (Duel.LastChainPlayer == 0)
return false; return false;
ClientCard target = AI.Utils.GetBestEnemyCard(true); ClientCard target = Util.GetBestEnemyCard(true);
if (target == null) if (target == null)
return false; return false;
AI.SelectCard( AI.SelectCard(
......
This diff is collapsed.
...@@ -14,6 +14,7 @@ namespace WindBot.Game.AI ...@@ -14,6 +14,7 @@ namespace WindBot.Game.AI
public Duel Duel { get; private set; } public Duel Duel { get; private set; }
public IList<CardExecutor> Executors { get; private set; } public IList<CardExecutor> Executors { get; private set; }
public GameAI AI { get; private set; } public GameAI AI { get; private set; }
public AIUtil Util { get; private set; }
protected MainPhase Main { get; private set; } protected MainPhase Main { get; private set; }
protected BattlePhase Battle { get; private set; } protected BattlePhase Battle { get; private set; }
...@@ -29,6 +30,7 @@ namespace WindBot.Game.AI ...@@ -29,6 +30,7 @@ namespace WindBot.Game.AI
{ {
Duel = duel; Duel = duel;
AI = ai; AI = ai;
Util = new AIUtil(duel);
Executors = new List<CardExecutor>(); Executors = new List<CardExecutor>();
Bot = Duel.Fields[0]; Bot = Duel.Fields[0];
......
...@@ -10,7 +10,6 @@ namespace WindBot.Game ...@@ -10,7 +10,6 @@ namespace WindBot.Game
public GameClient Game { get; private set; } public GameClient Game { get; private set; }
public Duel Duel { get; private set; } public Duel Duel { get; private set; }
public Executor Executor { get; set; } public Executor Executor { get; set; }
public AIFunctions Utils { get; private set; }
private Dialogs _dialogs; private Dialogs _dialogs;
...@@ -18,7 +17,6 @@ namespace WindBot.Game ...@@ -18,7 +17,6 @@ namespace WindBot.Game
{ {
Game = game; Game = game;
Duel = duel; Duel = duel;
Utils = new AIFunctions(duel);
_dialogs = new Dialogs(game); _dialogs = new Dialogs(game);
} }
...@@ -165,11 +163,11 @@ namespace WindBot.Game ...@@ -165,11 +163,11 @@ namespace WindBot.Game
// Sort the attackers and defenders, make monster with higher attack go first. // Sort the attackers and defenders, make monster with higher attack go first.
List<ClientCard> attackers = new List<ClientCard>(battle.AttackableCards); List<ClientCard> attackers = new List<ClientCard>(battle.AttackableCards);
attackers.Sort(AIFunctions.CompareCardAttack); attackers.Sort(CardContainer.CompareCardAttack);
attackers.Reverse(); attackers.Reverse();
List<ClientCard> defenders = new List<ClientCard>(Duel.Fields[1].GetMonsters()); List<ClientCard> defenders = new List<ClientCard>(Duel.Fields[1].GetMonsters());
defenders.Sort(AIFunctions.CompareDefensePower); defenders.Sort(CardContainer.CompareDefensePower);
defenders.Reverse(); defenders.Reverse();
// Let executor decide which card should attack first. // Let executor decide which card should attack first.
...@@ -440,7 +438,7 @@ namespace WindBot.Game ...@@ -440,7 +438,7 @@ namespace WindBot.Game
} }
if (ShouldExecute(exec, card, ExecutorType.SummonOrSet)) if (ShouldExecute(exec, card, ExecutorType.SummonOrSet))
{ {
if (Utils.IsAllEnemyBetter(true) && Utils.IsAllEnemyBetterThanValue(card.Attack + 300, false) && if (Executor.Util.IsAllEnemyBetter(true) && Executor.Util.IsAllEnemyBetterThanValue(card.Attack + 300, false) &&
main.MonsterSetableCards.Contains(card)) main.MonsterSetableCards.Contains(card))
{ {
_dialogs.SendSetMonster(); _dialogs.SendSetMonster();
...@@ -702,7 +700,7 @@ namespace WindBot.Game ...@@ -702,7 +700,7 @@ namespace WindBot.Game
// Always choose the minimum and lowest atk. // Always choose the minimum and lowest atk.
List<ClientCard> sorted = new List<ClientCard>(); List<ClientCard> sorted = new List<ClientCard>();
sorted.AddRange(cards); sorted.AddRange(cards);
sorted.Sort(AIFunctions.CompareCardAttack); sorted.Sort(CardContainer.CompareCardAttack);
IList<ClientCard> selected = new List<ClientCard>(); IList<ClientCard> selected = new List<ClientCard>();
......
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Config.cs" /> <Compile Include="Config.cs" />
<Compile Include="Game\AI\AIFunctions.cs" /> <Compile Include="Game\AI\AIUtil.cs" />
<Compile Include="Game\AI\CardContainer.cs" /> <Compile Include="Game\AI\CardContainer.cs" />
<Compile Include="Game\AI\CardExecutor.cs" /> <Compile Include="Game\AI\CardExecutor.cs" />
<Compile Include="Game\AI\CardExtension.cs" /> <Compile Include="Game\AI\CardExtension.cs" />
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment