Commit c2a94e8e authored by mercury233's avatar mercury233

rename AI.Utils to Util

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