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
......
......@@ -271,7 +271,7 @@ namespace WindBot.Game.AI.Decks
public bool is_should_not_negate()
{
ClientCard last_card = AI.Utils.GetLastChainCard();
ClientCard last_card = Util.GetLastChainCard();
if (last_card != null
&& last_card.Controller == 1 && last_card.IsCode(should_not_negate))
return true;
......@@ -479,7 +479,7 @@ namespace WindBot.Game.AI.Decks
if (card != null)
return card;
List<ClientCard> enemy_monsters = Enemy.GetMonsters();
enemy_monsters.Sort(AIFunctions.CompareCardAttack);
enemy_monsters.Sort(CardContainer.CompareCardAttack);
enemy_monsters.Reverse();
foreach(ClientCard target in enemy_monsters)
{
......@@ -496,10 +496,10 @@ namespace WindBot.Game.AI.Decks
public ClientCard GetBestEnemyCard_random()
{
// monsters
ClientCard card = AI.Utils.GetProblematicEnemyMonster(0, true);
ClientCard card = Util.GetProblematicEnemyMonster(0, true);
if (card != null)
return card;
if (AI.Utils.GetOneEnemyBetterThanMyBest() != null)
if (Util.GetOneEnemyBetterThanMyBest() != null)
{
card = Enemy.MonsterZone.GetHighestAttackMonster(true);
if (card != null)
......@@ -619,11 +619,11 @@ namespace WindBot.Game.AI.Decks
if (!spell_trap_activate()) return false;
if (Bot.LifePoints <= 1000)
return false;
if (Bot.LifePoints - 1000 <= Enemy.LifePoints && ActivateDescription == AI.Utils.GetStringId(_CardId.ChickenGame, 0))
if (Bot.LifePoints - 1000 <= Enemy.LifePoints && ActivateDescription == Util.GetStringId(_CardId.ChickenGame, 0))
{
return true;
}
if (Bot.LifePoints - 1000 > Enemy.LifePoints && ActivateDescription == AI.Utils.GetStringId(_CardId.ChickenGame, 1))
if (Bot.LifePoints - 1000 > Enemy.LifePoints && ActivateDescription == Util.GetStringId(_CardId.ChickenGame, 1))
{
return true;
}
......@@ -693,11 +693,11 @@ namespace WindBot.Game.AI.Decks
public bool SolemnJudgment_activate()
{
if (AI.Utils.IsChainTargetOnly(Card) && (Bot.HasInHand(CardId.Multifaker) || Multifaker_candeckss())) return false;
if (Util.IsChainTargetOnly(Card) && (Bot.HasInHand(CardId.Multifaker) || Multifaker_candeckss())) return false;
if (!Should_counter()) return false;
if ((DefaultSolemnJudgment() && spell_trap_activate(true)))
{
ClientCard target = AI.Utils.GetLastChainCard();
ClientCard target = Util.GetLastChainCard();
if (target != null && !target.IsMonster() && !spell_trap_activate(false, target)) return false;
return true;
}
......@@ -733,7 +733,7 @@ namespace WindBot.Game.AI.Decks
}
}
ClientCard LastChainCard = AI.Utils.GetLastChainCard();
ClientCard LastChainCard = Util.GetLastChainCard();
if (LastChainCard == null
&& !(Duel.Player == 1 && Duel.Phase > DuelPhase.Main2 && Bot.HasInHand(CardId.Multifaker) && Multifaker_candeckss() && !Multifaker_ssfromhand))
......@@ -748,16 +748,16 @@ namespace WindBot.Game.AI.Decks
if (Bot.SpellZone[i] == Card) this_seq = i;
if (LastChainCard != null
&& LastChainCard.Controller == 1 && LastChainCard.Location == CardLocation.SpellZone && Enemy.SpellZone[i] == LastChainCard) that_seq = i;
else if (Duel.Player == 0 && AI.Utils.GetProblematicEnemySpell() != null
else if (Duel.Player == 0 && Util.GetProblematicEnemySpell() != null
&& Enemy.SpellZone[i] != null && Enemy.SpellZone[i].IsFloodgate()) that_seq = i;
}
if ( (this_seq * that_seq >= 0 && this_seq + that_seq == 4)
|| (AI.Utils.IsChainTarget(Card))
|| (Util.IsChainTarget(Card))
|| (LastChainCard != null && LastChainCard.Controller == 1 && LastChainCard.IsCode(_CardId.HarpiesFeatherDuster))
|| (Duel.Player == 1 && Duel.Phase > DuelPhase.Main2 && Bot.HasInHand(CardId.Multifaker) && Multifaker_candeckss() && !Multifaker_ssfromhand))
{
List<ClientCard> enemy_monsters = Enemy.GetMonsters();
enemy_monsters.Sort(AIFunctions.CompareCardAttack);
enemy_monsters.Sort(CardContainer.CompareCardAttack);
enemy_monsters.Reverse();
foreach(ClientCard card in enemy_monsters)
{
......@@ -795,7 +795,7 @@ namespace WindBot.Game.AI.Decks
else
{
List<ClientCard> enemy_monsters = Enemy.GetMonsters();
enemy_monsters.Sort(AIFunctions.CompareCardAttack);
enemy_monsters.Sort(CardContainer.CompareCardAttack);
enemy_monsters.Reverse();
foreach (ClientCard card in enemy_monsters)
{
......@@ -990,7 +990,7 @@ namespace WindBot.Game.AI.Decks
public bool Feather_activate()
{
if (!spell_trap_activate()) return false;
if (AI.Utils.GetProblematicEnemySpell() != null)
if (Util.GetProblematicEnemySpell() != null)
{
AI.SelectPlace(SelectSTPlace(Card, true));
return true;
......@@ -1039,8 +1039,8 @@ namespace WindBot.Game.AI.Decks
}
if (Duel.Phase == DuelPhase.End
|| activate_immediately >= 2
|| (AI.Utils.IsChainTarget(Card)
|| (AI.Utils.GetLastChainCard() != null && AI.Utils.GetLastChainCard().Controller == 1 && AI.Utils.GetLastChainCard().IsCode(_CardId.HarpiesFeatherDuster))))
|| (Util.IsChainTarget(Card)
|| (Util.GetLastChainCard() != null && Util.GetLastChainCard().Controller == 1 && Util.GetLastChainCard().IsCode(_CardId.HarpiesFeatherDuster))))
{
if (select_list.Count > 0)
{
......@@ -1057,7 +1057,7 @@ namespace WindBot.Game.AI.Decks
{
if (Duel.Phase > DuelPhase.Main1 && Duel.Phase < DuelPhase.Main2)
{
if (AI.Utils.ChainContainsCard(CardId.Linkuriboh)) return false;
if (Util.ChainContainsCard(CardId.Linkuriboh)) return false;
if (Bot.BattlingMonster == null || (Enemy.BattlingMonster.Attack >= Bot.BattlingMonster.GetDefensePower()) || Enemy.BattlingMonster.IsMonsterDangerous())
{
AI.SelectPosition(CardPosition.FaceUpDefence);
......@@ -1137,19 +1137,19 @@ namespace WindBot.Game.AI.Decks
}
}
}
if (!AI.Utils.IsTurn1OrMain2())
if (!Util.IsTurn1OrMain2())
{
ClientCard self_best = AI.Utils.GetBestBotMonster();
ClientCard enemy_best = AI.Utils.GetProblematicEnemyCard(self_best.Attack, true);
ClientCard self_best = Util.GetBestBotMonster();
ClientCard enemy_best = Util.GetProblematicEnemyCard(self_best.Attack, true);
ClientCard enemy_target = GetProblematicEnemyCard_Alter(true,false);
if ((enemy_best != null || enemy_target != null)
&& Bot.HasInGraveyard(CardId.Meluseek)) next_card = CardId.Meluseek;
else if (Enemy.GetMonsterCount() <= 1 && Bot.HasInGraveyard(CardId.Meluseek) && Enemy.GetFieldCount() > 0) next_card = CardId.Meluseek;
else if (Bot.HasInGraveyard(CardId.Hexstia) && AI.Utils.GetProblematicEnemySpell() == null && AI.Utils.GetOneEnemyBetterThanValue(3100, true) == null && can_choose_other)
else if (Bot.HasInGraveyard(CardId.Hexstia) && Util.GetProblematicEnemySpell() == null && Util.GetOneEnemyBetterThanValue(3100, true) == null && can_choose_other)
{
next_card = CardId.Hexstia;
choose_other = (AI.Utils.GetOneEnemyBetterThanMyBest(true) != null);
choose_other = (Util.GetOneEnemyBetterThanMyBest(true) != null);
}
}
else
......@@ -1210,18 +1210,18 @@ namespace WindBot.Game.AI.Decks
AI.SelectCard(CardId.Protocol);
AI.SelectNextCard(next_card);
Marionetter_reborn = true;
if (next_card == CardId.Meluseek && AI.Utils.IsTurn1OrMain2()) AI.SelectPosition(CardPosition.FaceUpDefence);
if (next_card == CardId.Meluseek && Util.IsTurn1OrMain2()) AI.SelectPosition(CardPosition.FaceUpDefence);
return true;
}
List<ClientCard> list = Bot.GetMonsters();
list.Sort(AIFunctions.CompareCardAttack);
list.Sort(CardContainer.CompareCardAttack);
foreach (ClientCard card in list)
{
if (isAltergeist(card) && !(choose_other && card == Card))
{
AI.SelectCard(card);
AI.SelectNextCard(next_card);
if (next_card == CardId.Meluseek && AI.Utils.IsTurn1OrMain2()) AI.SelectPosition(CardPosition.FaceUpDefence);
if (next_card == CardId.Meluseek && Util.IsTurn1OrMain2()) AI.SelectPosition(CardPosition.FaceUpDefence);
Marionetter_reborn = true;
return true;
}
......@@ -1239,7 +1239,7 @@ namespace WindBot.Game.AI.Decks
{
if (Card.Location == CardLocation.MonsterZone && Duel.LastChainPlayer != 0 && (Protocol_activing() || !Card.IsDisabled()))
{
ClientCard target = AI.Utils.GetLastChainCard();
ClientCard target = Util.GetLastChainCard();
if (target != null && !spell_trap_activate(false, target)) return false;
if (!Should_counter()) return false;
// check
......@@ -1256,7 +1256,7 @@ namespace WindBot.Game.AI.Decks
}
return true;
}
if (ActivateDescription == AI.Utils.GetStringId(CardId.Hexstia,0)) return false;
if (ActivateDescription == Util.GetStringId(CardId.Hexstia,0)) return false;
if (Enemy.HasInSpellZone(82732705) && Bot.GetRemainingCount(CardId.Protocol,3) > 0 && !Bot.HasInHandOrInSpellZone(CardId.Protocol))
{
AI.SelectCard(CardId.Protocol);
......@@ -1301,7 +1301,7 @@ namespace WindBot.Game.AI.Decks
public bool Meluseek_eff()
{
if (ActivateDescription == AI.Utils.GetStringId(CardId.Meluseek,0)
if (ActivateDescription == Util.GetStringId(CardId.Meluseek,0)
|| (ActivateDescription == -1 && Card.Location == CardLocation.MonsterZone))
{
attacked_Meluseek.Add(Card);
......@@ -1311,7 +1311,7 @@ namespace WindBot.Game.AI.Decks
AI.SelectCard(target);
return true;
}
target = AI.Utils.GetOneEnemyBetterThanMyBest(true, true);
target = Util.GetOneEnemyBetterThanMyBest(true, true);
if (target != null)
{
AI.SelectCard(target);
......@@ -1384,7 +1384,7 @@ namespace WindBot.Game.AI.Decks
{
if (!Multifaker_candeckss() || Card.Location != CardLocation.Hand) return false;
Multifaker_ssfromhand = true;
if (Duel.Player != 0 && AI.Utils.GetOneEnemyBetterThanMyBest() != null) AI.SelectPosition(CardPosition.FaceUpDefence);
if (Duel.Player != 0 && Util.GetOneEnemyBetterThanMyBest() != null) AI.SelectPosition(CardPosition.FaceUpDefence);
return true;
}
......@@ -1429,7 +1429,7 @@ namespace WindBot.Game.AI.Decks
public bool Silquitous_eff()
{
if (ActivateDescription != AI.Utils.GetStringId(CardId.Silquitous,0))
if (ActivateDescription != Util.GetStringId(CardId.Silquitous,0))
{
if (!Bot.HasInHandOrInSpellZone(CardId.Manifestation) && Bot.HasInGraveyard(CardId.Manifestation))
{
......@@ -1461,7 +1461,7 @@ namespace WindBot.Game.AI.Decks
}
}
if (spell.IsCode(CardId.Manifestation) && spell.IsFaceup()) faceup_Manifestation = spell;
if (Duel.LastChainPlayer != 0 && AI.Utils.IsChainTarget(spell) && spell.IsFaceup() && isAltergeist(spell))
if (Duel.LastChainPlayer != 0 && Util.IsChainTarget(spell) && spell.IsFaceup() && isAltergeist(spell))
{
selected_target = spell;
}
......@@ -1479,12 +1479,12 @@ namespace WindBot.Game.AI.Decks
ClientCard faceup_Multifaker = null;
ClientCard faceup_monster = null;
List<ClientCard> monster_list = Bot.GetMonsters();
monster_list.Sort(AIFunctions.CompareCardAttack);
monster_list.Sort(CardContainer.CompareCardAttack);
foreach(ClientCard card in monster_list)
{
if (card.IsFaceup() && isAltergeist(card) && card != Card)
{
if (Duel.LastChainPlayer != 0 && AI.Utils.IsChainTarget(card) && card.IsFaceup())
if (Duel.LastChainPlayer != 0 && Util.IsChainTarget(card) && card.IsFaceup())
{
selected_target = card;
}
......@@ -1512,13 +1512,13 @@ namespace WindBot.Game.AI.Decks
if (Duel.LastChainPlayer != 0)
{
Logger.DebugWriteLine("Silquitous: battle");
if (AI.Utils.ChainContainsCard(CardId.Linkuriboh) || Bot.HasInHand(CardId.Kunquery)) return false;
if (Util.ChainContainsCard(CardId.Linkuriboh) || Bot.HasInHand(CardId.Kunquery)) return false;
if (Enemy.BattlingMonster != null && Bot.BattlingMonster != null && Enemy.BattlingMonster.GetDefensePower() >= Bot.BattlingMonster.GetDefensePower())
{
if (Bot.HasInMonstersZone(CardId.Kunquery)) AI.SelectCard(CardId.Kunquery);
else AI.SelectCard(bounce_self);
List<ClientCard> enemy_list = Enemy.GetMonsters();
enemy_list.Sort(AIFunctions.CompareCardAttack);
enemy_list.Sort(CardContainer.CompareCardAttack);
enemy_list.Reverse();
foreach(ClientCard target in enemy_list)
{
......@@ -1567,8 +1567,8 @@ namespace WindBot.Game.AI.Decks
{
if (Card.Location == CardLocation.Grave)
{
if (AI.Utils.ChainContainsCard(CardId.Silquitous)) return false;
if (!Bot.HasInHandOrInSpellZone(CardId.Protocol) && !AI.Utils.ChainContainsCard(CardId.Protocol))
if (Util.ChainContainsCard(CardId.Silquitous)) return false;
if (!Bot.HasInHandOrInSpellZone(CardId.Protocol) && !Util.ChainContainsCard(CardId.Protocol))
{
AI.SelectCard(CardId.Protocol);
return true;
......@@ -1577,8 +1577,8 @@ namespace WindBot.Game.AI.Decks
}
else
{
if (AI.Utils.ChainContainsCard(CardId.Manifestation) || AI.Utils.ChainContainsCard(CardId.Spoofing)) return false;
if (Duel.LastChainPlayer == 0 && !(AI.Utils.GetLastChainCard() != null && AI.Utils.GetLastChainCard().IsCode(CardId.Hexstia))) return false;
if (Util.ChainContainsCard(CardId.Manifestation) || Util.ChainContainsCard(CardId.Spoofing)) return false;
if (Duel.LastChainPlayer == 0 && !(Util.GetLastChainCard() != null && Util.GetLastChainCard().IsCode(CardId.Hexstia))) return false;
if (Bot.HasInMonstersZone(CardId.Hexstia))
{
......@@ -1644,9 +1644,9 @@ namespace WindBot.Game.AI.Decks
public bool Protocol_negate_better()
{
// skip if no one of enemy's monsters is better
if (ActivateDescription == AI.Utils.GetStringId(CardId.Protocol, 1))
if (ActivateDescription == Util.GetStringId(CardId.Protocol, 1))
{
if (AI.Utils.GetOneEnemyBetterThanMyBest(true) == null) return false;
if (Util.GetOneEnemyBetterThanMyBest(true) == null) return false;
}
return Protocol_negate();
}
......@@ -1654,7 +1654,7 @@ namespace WindBot.Game.AI.Decks
public bool Protocol_negate()
{
// negate
if (ActivateDescription == AI.Utils.GetStringId(CardId.Protocol, 1) && (!Card.IsDisabled() || Protocol_activing()))
if (ActivateDescription == Util.GetStringId(CardId.Protocol, 1) && (!Card.IsDisabled() || Protocol_activing()))
{
if (!Should_counter()) return false;
if (is_should_not_negate()) return false;
......@@ -1690,7 +1690,7 @@ namespace WindBot.Game.AI.Decks
}
}
List<int> cost_list = new List<int>();
if (AI.Utils.ChainContainsCard(CardId.Manifestation)) cost_list.Add(CardId.Manifestation);
if (Util.ChainContainsCard(CardId.Manifestation)) cost_list.Add(CardId.Manifestation);
if (!Card.IsDisabled()) cost_list.Add(CardId.Protocol);
cost_list.Add(CardId.Multifaker);
cost_list.Add(CardId.Marionetter);
......@@ -1718,7 +1718,7 @@ namespace WindBot.Game.AI.Decks
}
if (!Silquitous_bounced) cost_list.Add(CardId.Silquitous);
if (!Meluseek_searched) cost_list.Add(CardId.Meluseek);
if (!AI.Utils.ChainContainsCard(CardId.Manifestation)) cost_list.Add(CardId.Manifestation);
if (!Util.ChainContainsCard(CardId.Manifestation)) cost_list.Add(CardId.Manifestation);
AI.SelectCard(cost_list);
return true;
}
......@@ -1727,10 +1727,10 @@ namespace WindBot.Game.AI.Decks
public bool Protocol_activate_not_use()
{
if (AI.Utils.GetLastChainCard() != null && AI.Utils.GetLastChainCard().Controller == 0 && AI.Utils.GetLastChainCard().IsTrap()) return false;
if (ActivateDescription != AI.Utils.GetStringId(CardId.Protocol, 1))
if (Util.GetLastChainCard() != null && Util.GetLastChainCard().Controller == 0 && Util.GetLastChainCard().IsTrap()) return false;
if (ActivateDescription != Util.GetStringId(CardId.Protocol, 1))
{
if (AI.Utils.IsChainTarget(Card) && Card.IsFacedown()) return true;
if (Util.IsChainTarget(Card) && Card.IsFacedown()) return true;
if (Should_activate_Protocol()) return true;
if (!Multifaker_ssfromhand && Multifaker_candeckss() && (Bot.HasInHand(CardId.Multifaker) || Bot.HasInSpellZone(CardId.Spoofing)))
{
......@@ -1760,7 +1760,7 @@ namespace WindBot.Game.AI.Decks
}
}
if (can_bounce == 10 || should_disnegate) return true;
if (Duel.Phase > DuelPhase.Main1 && Duel.Phase < DuelPhase.Main2 && Bot.HasInHand(CardId.Kunquery) && AI.Utils.GetOneEnemyBetterThanMyBest() != null) return true;
if (Duel.Phase > DuelPhase.Main1 && Duel.Phase < DuelPhase.Main2 && Bot.HasInHand(CardId.Kunquery) && Util.GetOneEnemyBetterThanMyBest() != null) return true;
}
return false;
}
......@@ -1783,7 +1783,7 @@ namespace WindBot.Game.AI.Decks
{
foreach (int id in list)
{
if (card.IsCode(id) && !(id == CardId.Multifaker && AI.Utils.GetLastChainCard() == card))
if (card.IsCode(id) && !(id == CardId.Multifaker && Util.GetLastChainCard() == card))
{
AI.SelectCard(card);
return;
......@@ -1817,9 +1817,9 @@ namespace WindBot.Game.AI.Decks
public bool Spoofing_eff()
{
if (AI.Utils.ChainContainsCard(CardId.Spoofing)) return false;
if (Util.ChainContainsCard(CardId.Spoofing)) return false;
if (Card.IsDisabled()) return false;
if (!AI.Utils.ChainContainPlayer(0) && !Multifaker_ssfromhand && Multifaker_candeckss() && Bot.HasInHand(CardId.Multifaker) && Card.HasPosition(CardPosition.FaceDown))
if (!Util.ChainContainPlayer(0) && !Multifaker_ssfromhand && Multifaker_candeckss() && Bot.HasInHand(CardId.Multifaker) && Card.HasPosition(CardPosition.FaceDown))
{
AI.SelectYesNo(false);
return true;
......@@ -1913,9 +1913,9 @@ namespace WindBot.Game.AI.Decks
}
else
{
ClientCard self_best = AI.Utils.GetBestBotMonster();
ClientCard self_best = Util.GetBestBotMonster();
int best_atk = self_best == null ? 0 : self_best.Attack;
ClientCard enemy_best = AI.Utils.GetProblematicEnemyCard(best_atk, true);
ClientCard enemy_best = Util.GetProblematicEnemyCard(best_atk, true);
ClientCard enemy_target = GetProblematicEnemyCard_Alter(true, false);
if (!Multifaker_ssfromhand && Multifaker_candeckss() && can_ss_Multifaker)
......@@ -2019,7 +2019,7 @@ namespace WindBot.Game.AI.Decks
bool go = false;
foreach(ClientCard card in Bot.GetSpells())
{
if ( (AI.Utils.ChainContainsCard(_CardId.HarpiesFeatherDuster) || AI.Utils.IsChainTarget(card))
if ( (Util.ChainContainsCard(_CardId.HarpiesFeatherDuster) || Util.IsChainTarget(card))
&& card.IsFaceup() && Duel.LastChainPlayer != 0 && isAltergeist(card))
{
AI.SelectCard(card);
......@@ -2031,7 +2031,7 @@ namespace WindBot.Game.AI.Decks
{
foreach (ClientCard card in Bot.GetMonsters())
{
if ( (AI.Utils.IsChainTarget(card) || AI.Utils.ChainContainsCard(CardId.DarkHole) || (!Protocol_activing() && card.IsDisabled()))
if ( (Util.IsChainTarget(card) || Util.ChainContainsCard(CardId.DarkHole) || (!Protocol_activing() && card.IsDisabled()))
&& card.IsFaceup() && Duel.LastChainPlayer != 0 && isAltergeist(card))
{
Logger.DebugWriteLine("Spoofing target:" + card?.Name);
......@@ -2065,7 +2065,7 @@ namespace WindBot.Game.AI.Decks
CardId.Kunquery,
CardId.GO_SR
);
if (AI.Utils.IsTurn1OrMain2()) AI.SelectPosition(CardPosition.FaceUpDefence);
if (Util.IsTurn1OrMain2()) AI.SelectPosition(CardPosition.FaceUpDefence);
return true;
}
if (!summoned && !Meluseek_searched && !Bot.HasInHand(CardId.Marionetter))
......@@ -2272,7 +2272,7 @@ namespace WindBot.Game.AI.Decks
public bool Linkuriboh_ss()
{
if (Bot.GetMonstersExtraZoneCount() > 0) return false;
if (AI.Utils.IsTurn1OrMain2() && !Meluseek_searched)
if (Util.IsTurn1OrMain2() && !Meluseek_searched)
{
AI.SelectPlace(Zones.z5);
ss_other_monster = true;
......@@ -2283,8 +2283,8 @@ namespace WindBot.Game.AI.Decks
public bool Linkuriboh_eff()
{
if (AI.Utils.ChainContainsCard(CardId.Linkuriboh)) return false;
if (AI.Utils.ChainContainsCard(CardId.Multifaker)) return false;
if (Util.ChainContainsCard(CardId.Linkuriboh)) return false;
if (Util.ChainContainsCard(CardId.Multifaker)) return false;
if (Duel.Player == 1)
{
if (Card.Location == CardLocation.Grave)
......@@ -2311,7 +2311,7 @@ namespace WindBot.Game.AI.Decks
AI.SelectPlace(Zones.z0 | Zones.z4);
return true;
}
else if (AI.Utils.IsTurn1OrMain2())
else if (Util.IsTurn1OrMain2())
{
AI.SelectCard(new[] { CardId.Meluseek });
ss_other_monster = true;
......@@ -2340,7 +2340,7 @@ namespace WindBot.Game.AI.Decks
{
List<ClientCard> targets = new List<ClientCard>();
List<ClientCard> list = Bot.GetMonsters();
list.Sort(AIFunctions.CompareCardAttack);
list.Sort(CardContainer.CompareCardAttack);
//list.Reverse();
bool Meluseek_selected = false;
bool Silquitous_selected = false;
......@@ -2405,7 +2405,7 @@ namespace WindBot.Game.AI.Decks
public bool TripleBurstDragon_eff()
{
if (ActivateDescription != AI.Utils.GetStringId(CardId.TripleBurstDragon,0)) return false;
if (ActivateDescription != Util.GetStringId(CardId.TripleBurstDragon,0)) return false;
return (Duel.LastChainPlayer != 0);
}
......@@ -2413,9 +2413,9 @@ namespace WindBot.Game.AI.Decks
{
if (!Enemy.HasInGraveyard(CardId.Raye))
{
ClientCard self_best = AI.Utils.GetBestBotMonster(true);
ClientCard self_best = Util.GetBestBotMonster(true);
int self_power = (self_best != null) ? self_best.Attack : 0;
ClientCard enemy_best = AI.Utils.GetBestEnemyMonster(true);
ClientCard enemy_best = Util.GetBestEnemyMonster(true);
int enemy_power = (enemy_best != null) ? enemy_best.GetDefensePower() : 0;
if (enemy_power <= self_power) return false;
Logger.DebugWriteLine("Three: enemy: " + enemy_power.ToString() + ", bot: " + self_power.ToString());
......@@ -2440,7 +2440,7 @@ namespace WindBot.Game.AI.Decks
}
}
List<ClientCard> monsters = Bot.GetMonsters();
monsters.Sort(AIFunctions.CompareCardAttack);
monsters.Sort(CardContainer.CompareCardAttack);
//monsters.Reverse();
foreach(ClientCard card in monsters)
{
......@@ -2465,9 +2465,9 @@ namespace WindBot.Game.AI.Decks
{
if (!Enemy.HasInGraveyard(CardId.Raye))
{
ClientCard self_best = AI.Utils.GetBestBotMonster(true);
ClientCard self_best = Util.GetBestBotMonster(true);
int self_power = (self_best != null) ? self_best.Attack : 0;
ClientCard enemy_best = AI.Utils.GetBestEnemyMonster(true);
ClientCard enemy_best = Util.GetBestEnemyMonster(true);
int enemy_power = (enemy_best != null) ? enemy_best.GetDefensePower() : 0;
if (enemy_power < self_power) return false;
if (Bot.GetMonsterCount() <= 2 && enemy_power >= 2401) return false;
......@@ -2478,7 +2478,7 @@ namespace WindBot.Game.AI.Decks
}
List<ClientCard> material_list = new List<ClientCard>();
List<ClientCard> monsters = Bot.GetMonsters();
monsters.Sort(AIFunctions.CompareCardAttack);
monsters.Sort(CardContainer.CompareCardAttack);
//monsters.Reverse();
foreach(ClientCard t in monsters)
{
......@@ -2515,9 +2515,9 @@ namespace WindBot.Game.AI.Decks
{
if (Duel.Phase != DuelPhase.Main1) return false;
ClientCard self_best = AI.Utils.GetBestBotMonster(true);
ClientCard self_best = Util.GetBestBotMonster(true);
int self_power = (self_best != null) ? self_best.Attack : 0;
ClientCard enemy_best = AI.Utils.GetBestEnemyMonster(true);
ClientCard enemy_best = Util.GetBestEnemyMonster(true);
int enemy_power = (enemy_best != null) ? enemy_best.GetDefensePower() : 0;
if (enemy_power < self_power) return false;
......@@ -2528,7 +2528,7 @@ namespace WindBot.Game.AI.Decks
List<ClientCard> material_list = new List<ClientCard>();
List<ClientCard> bot_monster = Bot.GetMonsters();
bot_monster.Sort(AIFunctions.CompareCardAttack);
bot_monster.Sort(CardContainer.CompareCardAttack);
//bot_monster.Reverse();
int link_count = 0;
foreach(ClientCard card in bot_monster)
......@@ -2553,10 +2553,10 @@ namespace WindBot.Game.AI.Decks
public bool Borrelsword_eff()
{
if (ActivateDescription == -1) return true;
else if ((Duel.Phase > DuelPhase.Main1 && Duel.Phase < DuelPhase.Main2) || AI.Utils.IsChainTarget(Card))
else if ((Duel.Phase > DuelPhase.Main1 && Duel.Phase < DuelPhase.Main2) || Util.IsChainTarget(Card))
{
List<ClientCard> enemy_list = Enemy.GetMonsters();
enemy_list.Sort(AIFunctions.CompareCardAttack);
enemy_list.Sort(CardContainer.CompareCardAttack);
enemy_list.Reverse();
foreach(ClientCard card in enemy_list)
{
......@@ -2567,7 +2567,7 @@ namespace WindBot.Game.AI.Decks
}
}
List<ClientCard> bot_list = Bot.GetMonsters();
bot_list.Sort(AIFunctions.CompareCardAttack);
bot_list.Sort(CardContainer.CompareCardAttack);
//bot_list.Reverse();
foreach (ClientCard card in bot_list)
{
......@@ -2590,9 +2590,9 @@ namespace WindBot.Game.AI.Decks
}
if (!Enemy.HasInGraveyard(CardId.Raye))
{
ClientCard self_best = AI.Utils.GetBestBotMonster(true);
ClientCard self_best = Util.GetBestBotMonster(true);
int self_power = (self_best != null) ? self_best.Attack : 0;
ClientCard enemy_best = AI.Utils.GetBestEnemyMonster(true);
ClientCard enemy_best = Util.GetBestEnemyMonster(true);
int enemy_power = (enemy_best != null) ? enemy_best.GetDefensePower() : 0;
Logger.DebugWriteLine("Tuner: enemy: " + enemy_power.ToString() + ", bot: " + self_power.ToString());
if (enemy_power < self_power || enemy_power == 0) return false;
......@@ -2671,7 +2671,7 @@ namespace WindBot.Game.AI.Decks
if (isAltergeist(Card) && Bot.HasInHandOrInSpellZone(CardId.Protocol) && Card.IsFacedown())
return true;
bool enemyBetter = AI.Utils.IsAllEnemyBetter(true);
bool enemyBetter = Util.IsAllEnemyBetter(true);
if (Card.IsAttack() && enemyBetter)
return true;
if (Card.IsDefense() && !enemyBetter)
......@@ -2681,12 +2681,12 @@ namespace WindBot.Game.AI.Decks
public bool MonsterSet()
{
if (AI.Utils.GetOneEnemyBetterThanMyBest() == null && Bot.GetMonsterCount() > 0) return false;
if (Util.GetOneEnemyBetterThanMyBest() == null && Bot.GetMonsterCount() > 0) return false;
if (Card.Level > 4) return false;
int rest_lp = Bot.LifePoints;
int count = Bot.GetMonsterCount();
List<ClientCard> list = Enemy.GetMonsters();
list.Sort(AIFunctions.CompareCardAttack);
list.Sort(CardContainer.CompareCardAttack);
foreach(ClientCard card in list)
{
if (!card.HasPosition(CardPosition.Attack)) continue;
......@@ -2712,7 +2712,7 @@ namespace WindBot.Game.AI.Decks
if (EvenlyMatched_ready())
{
List<ClientCard> enemy_m = Enemy.GetMonsters();
enemy_m.Sort(AIFunctions.CompareCardAttack);
enemy_m.Sort(CardContainer.CompareCardAttack);
//enemy_m.Reverse();
foreach (ClientCard e_card in enemy_m)
{
......@@ -2748,7 +2748,7 @@ namespace WindBot.Game.AI.Decks
int HIINT_TOGRAVE = 504;
if (max == 1 && cards[0].Location == CardLocation.Deck
&& AI.Utils.GetLastChainCard() != null && AI.Utils.GetLastChainCard().IsCode(23002292) && Bot.GetRemainingCount(CardId.WakingtheDragon,1) > 0)
&& Util.GetLastChainCard() != null && Util.GetLastChainCard().IsCode(23002292) && Bot.GetRemainingCount(CardId.WakingtheDragon,1) > 0)
{
IList<ClientCard> result = new List<ClientCard>();
foreach (ClientCard card in cards)
......@@ -2762,14 +2762,14 @@ namespace WindBot.Game.AI.Decks
}
if (result.Count > 0) return result;
}
else if (AI.Utils.GetLastChainCard() != null && AI.Utils.GetLastChainCard().IsCode(CardId.EvenlyMatched) && Duel.LastChainPlayer != 0)
else if (Util.GetLastChainCard() != null && Util.GetLastChainCard().IsCode(CardId.EvenlyMatched) && Duel.LastChainPlayer != 0)
{
Logger.DebugWriteLine("EvenlyMatched: min=" + min.ToString() + ", max=" + max.ToString());
}
else if (cards[0].Location == CardLocation.Hand && cards[cards.Count - 1].Location == CardLocation.Hand
&& (hint == 501 || hint == HIINT_TOGRAVE) && min == max)
{
if (Duel.LastChainPlayer == 0 && AI.Utils.GetLastChainCard().IsCode(CardId.OneForOne)) return null;
if (Duel.LastChainPlayer == 0 && Util.GetLastChainCard().IsCode(CardId.OneForOne)) return null;
Logger.DebugWriteLine("Hand drop except OneForOne");
int todrop = min;
IList<ClientCard> result = new List<ClientCard>();
......@@ -2807,7 +2807,7 @@ namespace WindBot.Game.AI.Decks
public override CardPosition OnSelectPosition(int cardId, IList<CardPosition> positions)
{
if (AI.Utils.IsTurn1OrMain2()
if (Util.IsTurn1OrMain2()
&& (cardId == CardId.Meluseek || cardId == CardId.Silquitous))
{
return CardPosition.FaceUpDefence;
......
......@@ -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;
}
......
......@@ -235,7 +235,7 @@ namespace WindBot.Game.AI.Decks
bool CrystalWingSynchroDragon_used = false;
public override void OnNewPhase()
{
//AI.Utils.UpdateLinkedZone();
//Util.UpdateLinkedZone();
//Logger.DebugWriteLine("Zones.CheckLinkedPointZones= " + Zones.CheckLinkedPointZones);
//Logger.DebugWriteLine("Zones.CheckMutualEnemyZoneCount= " + Zones.CheckMutualEnemyZoneCount);
plan_C = false;
......@@ -478,12 +478,12 @@ namespace WindBot.Game.AI.Decks
private bool OddEyesAbsoluteDragoneff()
{
Logger.DebugWriteLine("OddEyesAbsoluteDragonef 1");
if (Card.Location == CardLocation.MonsterZone/*ActivateDescription == AI.Utils.GetStringId(CardId.OddEyesAbsoluteDragon, 0)*/)
if (Card.Location == CardLocation.MonsterZone/*ActivateDescription == Util.GetStringId(CardId.OddEyesAbsoluteDragon, 0)*/)
{
Logger.DebugWriteLine("OddEyesAbsoluteDragonef 2");
return Duel.Player == 1;
}
else if (Card.Location == CardLocation.Grave/*ActivateDescription == AI.Utils.GetStringId(CardId.OddEyesAbsoluteDragon, 0)*/)
else if (Card.Location == CardLocation.Grave/*ActivateDescription == Util.GetStringId(CardId.OddEyesAbsoluteDragon, 0)*/)
{
Logger.DebugWriteLine("OddEyesAbsoluteDragonef 3");
AI.SelectCard(CardId.OddEyesWingDragon);
......@@ -501,8 +501,8 @@ namespace WindBot.Game.AI.Decks
private bool ChainEnemy()
{
if (AI.Utils.GetLastChainCard() != null &&
AI.Utils.GetLastChainCard().IsCode(CardId.UpstartGoblin))
if (Util.GetLastChainCard() != null &&
Util.GetLastChainCard().IsCode(CardId.UpstartGoblin))
return false;
return Duel.LastChainPlayer == 1;
}
......@@ -589,7 +589,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;
if (Bot.HasInMonstersZone(CardId.WindwitchSnowBell)) return false;
return true;
}
......@@ -617,7 +617,7 @@ namespace WindBot.Game.AI.Decks
}
return true;
};
ClientCard BestEnemy = AI.Utils.GetBestEnemyMonster(true,true);
ClientCard BestEnemy = Util.GetBestEnemyMonster(true,true);
if (BestEnemy == null || BestEnemy.HasPosition(CardPosition.FaceDown)) return false;
AI.SelectCard(BestEnemy);
return true;
......@@ -641,12 +641,12 @@ namespace WindBot.Game.AI.Decks
magician.Add(check);
}
}
if (AI.Utils.IsChainTarget(Card) && Bot.GetMonsterCount() == 0)
if (Util.IsChainTarget(Card) && Bot.GetMonsterCount() == 0)
{
AI.SelectYesNo(false);
return true;
}
if (AI.Utils.ChainCountPlayer(0) > 0) return false;
if (Util.ChainCountPlayer(0) > 0) return false;
if (Enemy.HasInSpellZone(CardId.HarpiesFeatherDuster) && Card.IsFacedown())
return false;
......@@ -782,7 +782,7 @@ namespace WindBot.Game.AI.Decks
{
foreach (ClientCard check in Enemy.GetSpells())
{
if (AI.Utils.GetLastChainCard() == check)
if (Util.GetLastChainCard() == check)
{
spell.Add(check);
spell_act = true;
......@@ -804,11 +804,11 @@ namespace WindBot.Game.AI.Decks
AI.SelectCard(spell);
return true;
}
if (AI.Utils.IsChainTarget(Card))
if (Util.IsChainTarget(Card))
{
AI.SelectPlace(Zones.z0 | Zones.z4);
AI.SelectCard(CardId.DarkMagician);
ClientCard check = AI.Utils.GetOneEnemyBetterThanValue(2500, true);
ClientCard check = Util.GetOneEnemyBetterThanValue(2500, true);
if (check != null)
AI.SelectNextCard(CardId.ApprenticeLllusionMagician, CardId.DarkMagician, CardId.MagicianOfLllusion);
else
......@@ -820,7 +820,7 @@ namespace WindBot.Game.AI.Decks
{
AI.SelectPlace(Zones.z0 | Zones.z4);
AI.SelectCard(CardId.DarkMagician);
ClientCard check = AI.Utils.GetOneEnemyBetterThanValue(2500, true);
ClientCard check = Util.GetOneEnemyBetterThanValue(2500, true);
if (check != null)
AI.SelectNextCard(CardId.ApprenticeLllusionMagician, CardId.DarkMagician, CardId.MagicianOfLllusion);
else
......@@ -832,7 +832,7 @@ namespace WindBot.Game.AI.Decks
{
AI.SelectPlace(Zones.z0 | Zones.z4);
AI.SelectCard(CardId.DarkMagician);
ClientCard check = AI.Utils.GetOneEnemyBetterThanValue(2500, true);
ClientCard check = Util.GetOneEnemyBetterThanValue(2500, true);
if (check != null)
AI.SelectNextCard(CardId.ApprenticeLllusionMagician, CardId.DarkMagician, CardId.MagicianOfLllusion);
else
......@@ -846,7 +846,7 @@ namespace WindBot.Game.AI.Decks
{
AI.SelectPlace(Zones.z0 | Zones.z4);
AI.SelectCard(CardId.DarkMagician);
ClientCard check = AI.Utils.GetOneEnemyBetterThanValue(2500, true);
ClientCard check = Util.GetOneEnemyBetterThanValue(2500, true);
if (check != null)
AI.SelectNextCard(CardId.ApprenticeLllusionMagician, CardId.DarkMagician, CardId.MagicianOfLllusion);
else
......@@ -860,7 +860,7 @@ namespace WindBot.Game.AI.Decks
{
AI.SelectPlace(Zones.z0 | Zones.z4);
AI.SelectCard(CardId.DarkMagician);
ClientCard check = AI.Utils.GetOneEnemyBetterThanValue(2500, true);
ClientCard check = Util.GetOneEnemyBetterThanValue(2500, true);
if (check != null)
AI.SelectNextCard(CardId.ApprenticeLllusionMagician, CardId.DarkMagician, CardId.MagicianOfLllusion);
else
......@@ -884,9 +884,9 @@ namespace WindBot.Game.AI.Decks
{
if (magician_sp)
{
AI.SelectCard(AI.Utils.GetBestEnemyCard(false, true));
if (AI.Utils.GetBestEnemyCard(false, true) != null)
Logger.DebugWriteLine("*************SelectCard= " + AI.Utils.GetBestEnemyCard(false, true).Id);
AI.SelectCard(Util.GetBestEnemyCard(false, true));
if (Util.GetBestEnemyCard(false, true) != null)
Logger.DebugWriteLine("*************SelectCard= " + Util.GetBestEnemyCard(false, true).Id);
magician_sp = false;
}
}
......@@ -932,7 +932,7 @@ namespace WindBot.Game.AI.Decks
}
if (ghost_count != ghost_done)
{
if (Duel.CurrentChain.Count >= 2 && AI.Utils.GetLastChainCard().IsCode(0))
if (Duel.CurrentChain.Count >= 2 && Util.GetLastChainCard().IsCode(0))
{
AI.SelectCard(CardId.MagiciansRod);
AI.SelectNextCard(CardId.DarkMagician, CardId.DarkMagician);
......@@ -942,7 +942,7 @@ namespace WindBot.Game.AI.Decks
int count = 0;
foreach (ClientCard m in Bot.GetMonsters())
{
if (AI.Utils.IsChainTarget(m))
if (Util.IsChainTarget(m))
{
count++;
target = m;
......@@ -1128,14 +1128,14 @@ namespace WindBot.Game.AI.Decks
if (Duel.Turn != 1)
{
if (Duel.Phase == DuelPhase.Main1 && Enemy.GetSpellCountWithoutField() == 0 &&
AI.Utils.GetBestEnemyMonster(true, true) == null)
Util.GetBestEnemyMonster(true, true) == null)
return false;
if (Duel.Phase == DuelPhase.Main1 && Enemy.GetSpellCountWithoutField() == 0 &&
AI.Utils.GetBestEnemyMonster().IsFacedown())
Util.GetBestEnemyMonster().IsFacedown())
return true;
if (Duel.Phase == DuelPhase.Main1 && Enemy.GetSpellCountWithoutField() == 0 &&
AI.Utils.GetBestBotMonster(true) != null &&
AI.Utils.GetBestBotMonster(true).Attack > AI.Utils.GetBestEnemyMonster(true).Attack)
Util.GetBestBotMonster(true) != null &&
Util.GetBestBotMonster(true).Attack > Util.GetBestEnemyMonster(true).Attack)
return false;
}
return true;
......@@ -1209,7 +1209,7 @@ namespace WindBot.Game.AI.Decks
}
private bool ApprenticeLllusionMagicianeff()
{
if (AI.Utils.ChainContainsCard(CardId.ApprenticeLllusionMagician)) return false;
if (Util.ChainContainsCard(CardId.ApprenticeLllusionMagician)) return false;
if (Duel.Phase == DuelPhase.Battle ||
Duel.Phase == DuelPhase.BattleStart ||
Duel.Phase == DuelPhase.BattleStep ||
......@@ -1434,9 +1434,9 @@ namespace WindBot.Game.AI.Decks
IList<ClientCard> list_1 = new List<ClientCard>();
foreach (ClientCard monster in Bot.GetMonsters())
{
if (AI.Utils.GetWorstBotMonster(true) != null)
if (Util.GetWorstBotMonster(true) != null)
{
if (monster.IsAttack() && monster.Id != AI.Utils.GetWorstBotMonster(true).Id)
if (monster.IsAttack() && monster.Id != Util.GetWorstBotMonster(true).Id)
list_1.Add(monster);
}
}
......@@ -1477,7 +1477,7 @@ namespace WindBot.Game.AI.Decks
private bool BigEyesp()
{
if (plan_C) return false;
if (AI.Utils.IsOneEnemyBetterThanValue(2500, false) &&
if (Util.IsOneEnemyBetterThanValue(2500, false) &&
!Bot.HasInHandOrHasInMonstersZone(CardId.ApprenticeLllusionMagician))
{
//AI.SelectPlace(Zones.z5, Zones.ExtraMonsterZones);
......@@ -1489,7 +1489,7 @@ namespace WindBot.Game.AI.Decks
private bool BigEyeeff()
{
ClientCard target = AI.Utils.GetBestEnemyMonster(false, true);
ClientCard target = Util.GetBestEnemyMonster(false, true);
if (target != null && target.Attack >= 2500)
{
AI.SelectCard(CardId.DarkMagician);
......@@ -1502,7 +1502,7 @@ namespace WindBot.Game.AI.Decks
private bool Dracossacksp()
{
if (plan_C) return false;
if (AI.Utils.IsOneEnemyBetterThanValue(2500, false) &&
if (Util.IsOneEnemyBetterThanValue(2500, false) &&
!Bot.HasInHandOrHasInMonstersZone(CardId.ApprenticeLllusionMagician))
{
//AI.SelectPlace(Zones.z5, Zones.ExtraMonsterZones);
......@@ -1514,13 +1514,13 @@ namespace WindBot.Game.AI.Decks
private bool Dracossackeff()
{
if (ActivateDescription == AI.Utils.GetStringId(CardId.Dracossack, 0))
if (ActivateDescription == Util.GetStringId(CardId.Dracossack, 0))
{
AI.SelectCard(CardId.DarkMagician);
return true;
}
ClientCard target = AI.Utils.GetBestEnemyCard(false, true);
ClientCard target = Util.GetBestEnemyCard(false, true);
if (target != null)
{
AI.SelectCard(CardId.Dracossack + 1);
......@@ -1624,11 +1624,11 @@ namespace WindBot.Game.AI.Decks
Logger.DebugWriteLine("++++++++SpellZone[" + i + "]= " + Bot.SpellZone[i].Id);
}*/
if ((Duel.CurrentChain.Count >= 1 && AI.Utils.GetLastChainCard().Id == 0) ||
(Duel.CurrentChain.Count == 2 && !AI.Utils.ChainContainPlayer(0) && Duel.CurrentChain[0].Id == 0))
if ((Duel.CurrentChain.Count >= 1 && Util.GetLastChainCard().Id == 0) ||
(Duel.CurrentChain.Count == 2 && !Util.ChainContainPlayer(0) && Duel.CurrentChain[0].Id == 0))
{
Logger.DebugWriteLine("current chain = " + Duel.CurrentChain.Count);
Logger.DebugWriteLine("******last chain card= " + AI.Utils.GetLastChainCard().Id);
Logger.DebugWriteLine("******last chain card= " + Util.GetLastChainCard().Id);
int maxxc_count = 0;
foreach (ClientCard check in Enemy.Graveyard)
{
......@@ -1637,7 +1637,7 @@ namespace WindBot.Game.AI.Decks
}
if (maxxc_count != maxxc_done)
{
Logger.DebugWriteLine("************************last chain card= " + AI.Utils.GetLastChainCard().Id);
Logger.DebugWriteLine("************************last chain card= " + Util.GetLastChainCard().Id);
maxxc_used = true;
}
int lockbird_count = 0;
......@@ -1648,7 +1648,7 @@ namespace WindBot.Game.AI.Decks
}
if (lockbird_count != lockbird_done)
{
Logger.DebugWriteLine("************************last chain card= " + AI.Utils.GetLastChainCard().Id);
Logger.DebugWriteLine("************************last chain card= " + Util.GetLastChainCard().Id);
lockbird_used = true;
}
int ghost_count = 0;
......@@ -1659,10 +1659,10 @@ namespace WindBot.Game.AI.Decks
}
if (ghost_count != ghost_done)
{
Logger.DebugWriteLine("************************last chain card= " + AI.Utils.GetLastChainCard().Id);
Logger.DebugWriteLine("************************last chain card= " + Util.GetLastChainCard().Id);
ghost_used = true;
}
if (ghost_used && AI.Utils.ChainContainsCard(CardId.WindwitchGlassBell))
if (ghost_used && Util.ChainContainsCard(CardId.WindwitchGlassBell))
{
AI.SelectCard(CardId.WindwitchIceBell);
Logger.DebugWriteLine("***********WindwitchGlassBell*********************");
......
......@@ -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;
}
......
......@@ -325,7 +325,7 @@ namespace WindBot.Game.AI.Decks
// can ss from exdeck
if (judge)
{
bool fornextss = AI.Utils.ChainContainsCard(CardId.Awaken);
bool fornextss = Util.ChainContainsCard(CardId.Awaken);
IList<ClientCard> ex = Bot.ExtraDeck;
ClientCard ex_best = null;
foreach (ClientCard ex_card in ex)
......@@ -389,7 +389,7 @@ namespace WindBot.Game.AI.Decks
AI.SelectCard(ex_best);
}
}
if (!judge || AI.Utils.ChainContainsCard(CardId.Awaken))
if (!judge || Util.ChainContainsCard(CardId.Awaken))
{
// cannot ss from exdeck or have more than 1 grass in chain
int[] secondselect = new[]
......@@ -405,7 +405,7 @@ namespace WindBot.Game.AI.Decks
CardId.Yellow,
CardId.Pink
};
if (!AI.Utils.ChainContainsCard(CardId.Awaken))
if (!Util.ChainContainsCard(CardId.Awaken))
{
if (!judge && Bot.GetRemainingCount(CardId.Ghost, 2) > 0)
{
......@@ -437,12 +437,12 @@ namespace WindBot.Game.AI.Decks
// counter
if (!Enemy.HasInMonstersZone(CardId.Ghost) || Enemy.GetHandCount() <= 1)
{
ClientCard tosolve = AI.Utils.GetProblematicEnemyCard();
ClientCard tosolve = Util.GetProblematicEnemyCard();
if (tosolve == null)
{
if (Duel.LastChainPlayer == 1 && AI.Utils.GetLastChainCard() != null)
if (Duel.LastChainPlayer == 1 && Util.GetLastChainCard() != null)
{
ClientCard target = AI.Utils.GetLastChainCard();
ClientCard target = Util.GetLastChainCard();
if (target.HasPosition(CardPosition.FaceUp) && (target.Location == CardLocation.MonsterZone || target.Location == CardLocation.SpellZone)) tosolve = target;
}
}
......@@ -494,7 +494,7 @@ namespace WindBot.Game.AI.Decks
ClientCard selected = null;
if (Card.Location == CardLocation.Grave)
{
selected = AI.Utils.GetBestEnemySpell(true);
selected = Util.GetBestEnemySpell(true);
}
else
{
......@@ -524,7 +524,7 @@ namespace WindBot.Game.AI.Decks
public bool Feather_Act()
{
if (!spell_trap_activate()) return false;
if (AI.Utils.GetProblematicEnemySpell() != null)
if (Util.GetProblematicEnemySpell() != null)
{
List<ClientCard> grave = Bot.GetGraveyardSpells();
foreach (ClientCard self_card in grave)
......@@ -547,7 +547,7 @@ namespace WindBot.Game.AI.Decks
if (!spell_trap_activate()) return false;
if (Duel.Player == 0) return false;
if (Duel.Phase == DuelPhase.End) return true;
if (Duel.LastChainPlayer == 1 && (AI.Utils.IsChainTarget(Card) || (AI.Utils.GetLastChainCard().IsCode(CardId.Feather) && !Bot.HasInSpellZone(CardId.Awaken)))) return true;
if (Duel.LastChainPlayer == 1 && (Util.IsChainTarget(Card) || (Util.GetLastChainCard().IsCode(CardId.Feather) && !Bot.HasInSpellZone(CardId.Awaken)))) return true;
if (Duel.Phase > DuelPhase.Main1 && Duel.Phase < DuelPhase.Main2)
{
int total_atk = 0;
......@@ -585,7 +585,7 @@ namespace WindBot.Game.AI.Decks
stage_locked = null;
return true;
}
else if (Enemy.GetMonsterCount() > 0 && AI.Utils.GetBestEnemyMonster().Attack >= AI.Utils.GetBestAttack(Bot))
else if (Enemy.GetMonsterCount() > 0 && Util.GetBestEnemyMonster().Attack >= Util.GetBestAttack(Bot))
{
AI.SelectCard(CardId.White, CardId.Yellow, CardId.Pink, CardId.Red);
stage_locked = null;
......@@ -608,7 +608,7 @@ namespace WindBot.Game.AI.Decks
stage_locked = null;
return true;
}
if (Enemy.GetMonsterCount() > 0 && AI.Utils.GetBestEnemyMonster().Attack >= AI.Utils.GetBestAttack(Bot) && !Bot.HasInHand(CardId.White))
if (Enemy.GetMonsterCount() > 0 && Util.GetBestEnemyMonster().Attack >= Util.GetBestAttack(Bot) && !Bot.HasInHand(CardId.White))
{
AI.SelectCard(CardId.White, CardId.Yellow, CardId.Pink, CardId.Red);
stage_locked = null;
......@@ -674,7 +674,7 @@ namespace WindBot.Game.AI.Decks
pink_ss = true;
return true;
}
else if (Enemy.GetMonsterCount() > 0 && (AI.Utils.GetBestEnemyMonster().Attack - 800 >= Bot.LifePoints)) return false;
else if (Enemy.GetMonsterCount() > 0 && (Util.GetBestEnemyMonster().Attack - 800 >= Bot.LifePoints)) return false;
pink_ss = true;
return true;
}
......@@ -695,9 +695,9 @@ namespace WindBot.Game.AI.Decks
public bool Eater_ss()
{
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>();
if (Bot.SpellZone[5] != null && !Bot.SpellZone[5].IsCode(CardId.Stage))
......@@ -742,7 +742,7 @@ namespace WindBot.Game.AI.Decks
if (Duel.Player == 0)
{
List<ClientCard> monster_list = Bot.GetMonsters();
monster_list.Sort(AIFunctions.CompareCardAttack);
monster_list.Sort(CardContainer.CompareCardAttack);
monster_list.Reverse();
foreach(ClientCard card in monster_list)
{
......@@ -753,7 +753,7 @@ namespace WindBot.Game.AI.Decks
} else if (card.RealPower >= self_power) self_power = card.RealPower;
}
}
ClientCard bestenemy = AI.Utils.GetOneEnemyBetterThanValue(self_power, true);
ClientCard bestenemy = Util.GetOneEnemyBetterThanValue(self_power, true);
if (bestenemy != null) AI.SelectPosition(CardPosition.FaceUpDefence);
else AI.SelectPosition(CardPosition.FaceUpAttack);
return;
......@@ -762,12 +762,12 @@ namespace WindBot.Game.AI.Decks
public bool Red_ss()
{
if (red_ss_count >= 6) return false;
if ((AI.Utils.ChainContainsCard(CardId.DarkHole) || AI.Utils.ChainContainsCard(99330325) || AI.Utils.ChainContainsCard(53582587)) && AI.Utils.ChainContainsCard(CardId.Red)) return false;
if (Duel.LastChainPlayer == 0 && AI.Utils.GetLastChainCard().IsCode(CardId.Red))
if ((Util.ChainContainsCard(CardId.DarkHole) || Util.ChainContainsCard(99330325) || Util.ChainContainsCard(53582587)) && Util.ChainContainsCard(CardId.Red)) return false;
if (Duel.LastChainPlayer == 0 && Util.GetLastChainCard().IsCode(CardId.Red))
{
foreach (ClientCard m in Bot.GetMonsters())
{
if (AI.Utils.IsChainTarget(m) && IsTrickstar(m.Id))
if (Util.IsChainTarget(m) && IsTrickstar(m.Id))
{
red_ss_count += 1;
AI.SelectCard(m);
......@@ -779,11 +779,11 @@ namespace WindBot.Game.AI.Decks
if (Duel.LastChainPlayer == 1) return true;
if (Duel.Player == 0)
{
if (AI.Utils.IsTurn1OrMain2()) return false;
if (Util.IsTurn1OrMain2()) return false;
if (Duel.Phase > DuelPhase.Main1 && Duel.Phase < DuelPhase.Main2)
{
List<ClientCard> self_m = Bot.GetMonsters();
ClientCard tosolve_enemy = AI.Utils.GetOneEnemyBetterThanMyBest();
ClientCard tosolve_enemy = Util.GetOneEnemyBetterThanMyBest();
foreach (ClientCard c in self_m)
{
if (IsTrickstar(c.Id) && !c.IsCode(CardId.Red))
......@@ -838,10 +838,10 @@ namespace WindBot.Game.AI.Decks
{
if (Duel.Phase > DuelPhase.Main1 && Duel.Phase < DuelPhase.Main2)
{
if (AI.Utils.GetOneEnemyBetterThanMyBest() != null)
if (Util.GetOneEnemyBetterThanMyBest() != null)
{
List<ClientCard> self_monster = Bot.GetMonsters();
self_monster.Sort(AIFunctions.CompareDefensePower);
self_monster.Sort(CardContainer.CompareDefensePower);
foreach(ClientCard card in self_monster)
{
if (IsTrickstar(card.Id) && !card.IsCode(CardId.Red))
......@@ -878,7 +878,7 @@ namespace WindBot.Game.AI.Decks
return true;
}
}
if (Enemy.GetMonsterCount() == 0 && !AI.Utils.IsTurn1OrMain2())
if (Enemy.GetMonsterCount() == 0 && !Util.IsTurn1OrMain2())
{
if (Bot.HasInGraveyard(CardId.Red) && Bot.GetRemainingCount(CardId.Pink, 1) > 0 && !pink_ss)
{
......@@ -902,9 +902,9 @@ namespace WindBot.Game.AI.Decks
}
return true;
}
if (AI.Utils.GetProblematicEnemyMonster() != null)
if (Util.GetProblematicEnemyMonster() != null)
{
int power = AI.Utils.GetProblematicEnemyMonster().GetDefensePower();
int power = Util.GetProblematicEnemyMonster().GetDefensePower();
if (power >= 1800 && power <= 3600 && Bot.GetRemainingCount(CardId.White, 2) > 0 && !Bot.HasInHand(CardId.White))
{
AI.SelectCard(CardId.White, CardId.Red, CardId.Pink, CardId.Re, CardId.Stage, CardId.Crown, CardId.Yellow);
......@@ -937,13 +937,13 @@ namespace WindBot.Game.AI.Decks
return false;
} else
{
if (Enemy.GetMonsterCount() == 0 && !AI.Utils.IsTurn1OrMain2()) {
if (Enemy.GetMonsterCount() == 0 && !Util.IsTurn1OrMain2()) {
white_eff_used = true;
return true;
}
else if (Enemy.GetMonsterCount() != 0)
{
ClientCard tosolve = AI.Utils.GetBestEnemyMonster(true);
ClientCard tosolve = Util.GetBestEnemyMonster(true);
ClientCard self_card = Bot.GetMonsters().GetHighestAttackMonster();
if (tosolve == null || self_card == null || (tosolve != null && self_card != null && !IsTrickstar(self_card.Id)))
{
......@@ -985,8 +985,8 @@ namespace WindBot.Game.AI.Decks
lockbird_useful = true;
if (Bot.HasInSpellZone(CardId.Re))
{
if (AI.Utils.ChainContainsCard(CardId.Re)) lockbird_used = true;
return AI.Utils.ChainContainsCard(CardId.Re);
if (Util.ChainContainsCard(CardId.Re)) lockbird_used = true;
return Util.ChainContainsCard(CardId.Re);
}
lockbird_used = true;
return true;
......@@ -998,7 +998,7 @@ namespace WindBot.Game.AI.Decks
if (!spell_trap_activate()) return false;
if (Bot.HasInHand(CardId.LockBird))
{
if (lockbird_useful || AI.Utils.IsChainTarget(Card) || (Duel.Player == 1 && AI.Utils.ChainContainsCard(CardId.Feather))) {
if (lockbird_useful || Util.IsChainTarget(Card) || (Duel.Player == 1 && Util.ChainContainsCard(CardId.Feather))) {
lockbird_useful = false;
return true;
}
......@@ -1033,7 +1033,7 @@ namespace WindBot.Game.AI.Decks
if (hand.Attack >= Enemy.LifePoints) return true;
if (!hand.IsCode(CardId.Yellow))
{
if (AI.Utils.GetOneEnemyBetterThanValue(hand.Attack, false) == null) return true;
if (Util.GetOneEnemyBetterThanValue(hand.Attack, false) == null) return true;
}
}
}
......@@ -1043,7 +1043,7 @@ namespace WindBot.Game.AI.Decks
public bool Ts_reborn()
{
if (AI.Utils.IsTurn1OrMain2()) return false;
if (Util.IsTurn1OrMain2()) return false;
if (Duel.Player == 0 && Enemy.LifePoints <= 1000)
{
AI.SelectCard(CardId.Pink);
......@@ -1094,7 +1094,7 @@ namespace WindBot.Game.AI.Decks
NormalSummoned = true;
return true;
}
else if (!AI.Utils.IsTurn1OrMain2() && (Bot.HasInGraveyard(CardId.Yellow) || Bot.HasInGraveyard(CardId.Red)))
else if (!Util.IsTurn1OrMain2() && (Bot.HasInGraveyard(CardId.Yellow) || Bot.HasInGraveyard(CardId.Red)))
{
NormalSummoned = true;
return true;
......@@ -1140,12 +1140,12 @@ namespace WindBot.Game.AI.Decks
public bool Ring_act()
{
if (Duel.LastChainPlayer == 0 && AI.Utils.GetLastChainCard() != null && AI.Utils.GetLastChainCard().IsCode(CardId.Ghost)) return false;
if (Duel.LastChainPlayer == 0 && Util.GetLastChainCard() != null && Util.GetLastChainCard().IsCode(CardId.Ghost)) return false;
if (!spell_trap_activate()) return false;
ClientCard target = AI.Utils.GetProblematicEnemyMonster();
if (target == null && AI.Utils.IsChainTarget(Card))
ClientCard target = Util.GetProblematicEnemyMonster();
if (target == null && Util.IsChainTarget(Card))
{
target = AI.Utils.GetBestEnemyMonster();
target = Util.GetBestEnemyMonster();
}
if (target != null)
{
......@@ -1171,7 +1171,7 @@ namespace WindBot.Game.AI.Decks
public bool Linkuri_eff()
{
if (Duel.LastChainPlayer == 0 && AI.Utils.GetLastChainCard().IsCode(CardId.Linkuri)) return false;
if (Duel.LastChainPlayer == 0 && Util.GetLastChainCard().IsCode(CardId.Linkuri)) return false;
AI.SelectCard(CardId.Tuner, CardId.BF + 1);
return true;
}
......@@ -1200,7 +1200,7 @@ namespace WindBot.Game.AI.Decks
}
if (targets.Count == 0) return false;
List<ClientCard> m_list = new List<ClientCard>(Bot.GetMonsters());
m_list.Sort(AIFunctions.CompareCardAttack);
m_list.Sort(CardContainer.CompareCardAttack);
foreach (ClientCard e_check in m_list)
{
if (e_check.IsFacedown()) continue;
......@@ -1223,9 +1223,9 @@ namespace WindBot.Game.AI.Decks
AI.SelectCard(CardId.Tuner, CardId.Ghost, CardId.Urara);
return true;
}
else if (AI.Utils.IsChainTarget(Card) || AI.Utils.GetProblematicEnemySpell() != null) return true;
else if (Duel.Player == 1 && Duel.Phase == DuelPhase.BattleStart && AI.Utils.IsOneEnemyBetterThanValue(1500,true)) {
if (AI.Utils.IsOneEnemyBetterThanValue(1900, true))
else if (Util.IsChainTarget(Card) || Util.GetProblematicEnemySpell() != null) return true;
else if (Duel.Player == 1 && Duel.Phase == DuelPhase.BattleStart && Util.IsOneEnemyBetterThanValue(1500,true)) {
if (Util.IsOneEnemyBetterThanValue(1900, true))
{
AI.SelectPosition(CardPosition.FaceUpDefence);
}
......@@ -1241,7 +1241,7 @@ namespace WindBot.Game.AI.Decks
public bool TG_eff()
{
if (Card.Location != CardLocation.MonsterZone) return true;
ClientCard target = AI.Utils.GetProblematicEnemySpell();
ClientCard target = Util.GetProblematicEnemySpell();
IList<ClientCard> list = new List<ClientCard>();
if (target != null) list.Add(target);
foreach(ClientCard spells in Enemy.GetSpells())
......@@ -1254,8 +1254,8 @@ namespace WindBot.Game.AI.Decks
public bool Safedragon_ss()
{
if (AI.Utils.IsTurn1OrMain2()) return false;
ClientCard m = AI.Utils.GetProblematicEnemyMonster();
if (Util.IsTurn1OrMain2()) return false;
ClientCard m = Util.GetProblematicEnemyMonster();
foreach(ClientCard ex_m in Bot.GetMonstersInExtraZone())
{
if (getLinkMarker(ex_m.Id) >= 4) return false;
......@@ -1302,14 +1302,14 @@ namespace WindBot.Game.AI.Decks
public bool Phoneix_ss()
{
ClientCard m = AI.Utils.GetProblematicEnemySpell();
ClientCard m = Util.GetProblematicEnemySpell();
if (m == null)
{
if (Enemy.GetMonsterCount() == 0 && Enemy.LifePoints <= 1900 && Duel.Phase == DuelPhase.Main1)
{
IList<ClientCard> m_list = new List<ClientCard>();
List<ClientCard> list = new List<ClientCard>(Bot.GetMonsters());
list.Sort(AIFunctions.CompareCardAttack);
list.Sort(CardContainer.CompareCardAttack);
foreach(ClientCard monster in list)
{
if (getLinkMarker(monster.Id) == 1 && monster.IsFaceup()) m_list.Add(monster);
......@@ -1326,7 +1326,7 @@ namespace WindBot.Game.AI.Decks
if (Bot.Hand.Count == 0) return false;
IList<ClientCard> targets = new List<ClientCard>();
List<ClientCard> main_list = new List<ClientCard>(Bot.GetMonstersInMainZone());
main_list.Sort(AIFunctions.CompareCardAttack);
main_list.Sort(CardContainer.CompareCardAttack);
foreach (ClientCard s_m in main_list)
{
if (s_m.IsFacedown()) continue;
......@@ -1356,7 +1356,7 @@ namespace WindBot.Game.AI.Decks
public bool Phoneix_eff()
{
AI.SelectCard(Useless_List());
ClientCard target = AI.Utils.GetProblematicEnemySpell();
ClientCard target = Util.GetProblematicEnemySpell();
if (target != null)
{
AI.SelectNextCard(target);
......@@ -1373,7 +1373,7 @@ namespace WindBot.Game.AI.Decks
}
public bool Unicorn_ss() {
ClientCard m = AI.Utils.GetProblematicEnemyCard();
ClientCard m = Util.GetProblematicEnemyCard();
int link_count = 0;
if (m == null)
{
......@@ -1381,7 +1381,7 @@ namespace WindBot.Game.AI.Decks
{
IList<ClientCard> m_list = new List<ClientCard>();
List<ClientCard> _sort_list = new List<ClientCard>(Bot.GetMonsters());
_sort_list.Sort(AIFunctions.CompareCardAttack);
_sort_list.Sort(CardContainer.CompareCardAttack);
foreach(ClientCard monster in _sort_list)
{
if (getLinkMarker(monster.Id) == 2)
......@@ -1406,7 +1406,7 @@ namespace WindBot.Game.AI.Decks
if (Bot.Hand.Count == 0) return false;
IList<ClientCard> targets = new List<ClientCard>();
List<ClientCard> sort_list = Bot.GetMonsters();
sort_list.Sort(AIFunctions.CompareCardAttack);
sort_list.Sort(CardContainer.CompareCardAttack);
foreach (ClientCard s_m in sort_list)
{
if ((!s_m.IsCode(CardId.Eater) || (s_m.IsCode(CardId.Eater) && m.IsMonsterHasPreventActivationEffectInBattle())) && getLinkMarker(s_m.Id) <= 2 && s_m.IsFaceup())
......@@ -1426,7 +1426,7 @@ namespace WindBot.Game.AI.Decks
public bool Unicorn_eff()
{
ClientCard m = AI.Utils.GetProblematicEnemyCard();
ClientCard m = Util.GetProblematicEnemyCard();
if (m == null) return false;
// avoid cards that cannot target.
AI.SelectCard(Useless_List());
......@@ -1466,7 +1466,7 @@ namespace WindBot.Game.AI.Decks
}
}
List<ClientCard> sort_main_list = new List<ClientCard>(Bot.GetMonstersInMainZone());
sort_main_list.Sort(AIFunctions.CompareCardAttack);
sort_main_list.Sort(CardContainer.CompareCardAttack);
foreach (ClientCard m in sort_main_list)
{
if (m.Attack < 1900 && !targets.ContainsCardWithId(m.Id) && m.IsFaceup())
......@@ -1493,8 +1493,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)
{
......@@ -1525,11 +1525,11 @@ namespace WindBot.Game.AI.Decks
if (material_list.Count == 2) break;
}
if (material_list.Count < 2) return false;
if (Enemy.GetMonsterCount() == 0 || AI.Utils.GetProblematicEnemyMonster(2000) == null)
if (Enemy.GetMonsterCount() == 0 || Util.GetProblematicEnemyMonster(2000) == null)
{
AI.SelectMaterials(material_list);
return true;
} else if (AI.Utils.GetProblematicEnemyMonster(2000) != null && Bot.HasInExtra(CardId.Borrel) && !Bot.HasInMonstersZone(CardId.Missus))
} else if (Util.GetProblematicEnemyMonster(2000) != null && Bot.HasInExtra(CardId.Borrel) && !Bot.HasInMonstersZone(CardId.Missus))
{
AI.SelectMaterials(material_list);
return true;
......@@ -1547,9 +1547,9 @@ namespace WindBot.Game.AI.Decks
{
bool already_link2 = false;
IList<ClientCard> material_list = new List<ClientCard>();
if (AI.Utils.GetProblematicEnemyMonster(2000) == null) Logger.DebugWriteLine("***borrel:null");
else Logger.DebugWriteLine("***borrel:" + (AI.Utils.GetProblematicEnemyMonster(2000).Name ?? "unknown"));
if (AI.Utils.GetProblematicEnemyMonster(2000) != null || (Enemy.GetMonsterCount() == 0 && Duel.Phase == DuelPhase.Main1 && Enemy.LifePoints <= 3000))
if (Util.GetProblematicEnemyMonster(2000) == null) Logger.DebugWriteLine("***borrel:null");
else Logger.DebugWriteLine("***borrel:" + (Util.GetProblematicEnemyMonster(2000).Name ?? "unknown"));
if (Util.GetProblematicEnemyMonster(2000) != null || (Enemy.GetMonsterCount() == 0 && Duel.Phase == DuelPhase.Main1 && Enemy.LifePoints <= 3000))
{
foreach(ClientCard e_m in Bot.GetMonstersInExtraZone())
{
......@@ -1560,7 +1560,7 @@ namespace WindBot.Game.AI.Decks
}
}
List<ClientCard> sort_list = new List<ClientCard>(Bot.GetMonstersInMainZone());
sort_list.Sort(AIFunctions.CompareCardAttack);
sort_list.Sort(CardContainer.CompareCardAttack);
foreach(ClientCard m in sort_list)
{
......@@ -1600,7 +1600,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;
......@@ -1618,9 +1618,9 @@ namespace WindBot.Game.AI.Decks
if (!spell_trap_activate()) return false;
if (Duel.LastChainPlayer == 1)
{
if (AI.Utils.GetLastChainCard().IsMonster() && Enemy.HasInGraveyard(AI.Utils.GetLastChainCard().Id))
if (Util.GetLastChainCard().IsMonster() && Enemy.HasInGraveyard(Util.GetLastChainCard().Id))
{
GraveCall_id = AI.Utils.GetLastChainCard().Id;
GraveCall_id = Util.GetLastChainCard().Id;
GraveCall_count = 2;
AI.SelectCard(GraveCall_id);
return true;
......@@ -1671,7 +1671,7 @@ namespace WindBot.Game.AI.Decks
if (newPower > bestPower)
bestPower = newPower;
}
return AI.Utils.IsAllEnemyBetterThanValue(bestPower,true);
return Util.IsAllEnemyBetterThanValue(bestPower,true);
}
public bool MonsterRepos()
......
......@@ -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(
......
......@@ -216,7 +216,7 @@ namespace WindBot.Game.AI
if (Bot.BattlingMonster == null)
return false;
List<ClientCard> defenders = new List<ClientCard>(Duel.Fields[1].GetMonsters());
defenders.Sort(AIFunctions.CompareDefensePower);
defenders.Sort(CardContainer.CompareDefensePower);
defenders.Reverse();
BattlePhaseAction result = OnSelectAttackTarget(Bot.BattlingMonster, defenders);
if (result != null && result.Action == BattlePhaseAction.BattleAction.Attack)
......@@ -285,7 +285,7 @@ namespace WindBot.Game.AI
if (Card.Location == CardLocation.Grave)
{
selected = AI.Utils.GetBestEnemySpell(true);
selected = Util.GetBestEnemySpell(true);
}
else
{
......@@ -304,7 +304,7 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultBookOfMoon()
{
if (AI.Utils.IsAllEnemyBetter(true))
if (Util.IsAllEnemyBetter(true))
{
ClientCard monster = Enemy.GetMonsters().GetHighestAttackMonster(true);
if (monster != null && monster.HasType(CardType.Effect) && !monster.HasType(CardType.Link) && (monster.HasType(CardType.Xyz) || monster.Level > 4))
......@@ -321,15 +321,15 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultCompulsoryEvacuationDevice()
{
ClientCard target = AI.Utils.GetProblematicEnemyMonster(0, true);
ClientCard target = Util.GetProblematicEnemyMonster(0, true);
if (target != null)
{
AI.SelectCard(target);
return true;
}
if (AI.Utils.IsChainTarget(Card))
if (Util.IsChainTarget(Card))
{
ClientCard monster = AI.Utils.GetBestEnemyMonster(false, true);
ClientCard monster = Util.GetBestEnemyMonster(false, true);
if (monster != null)
{
AI.SelectCard(monster);
......@@ -344,7 +344,7 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultCallOfTheHaunted()
{
if (!AI.Utils.IsAllEnemyBetter(true))
if (!Util.IsAllEnemyBetter(true))
return false;
ClientCard selected = Bot.Graveyard.OrderByDescending(card => card.Attack).FirstOrDefault();
AI.SelectCard(selected);
......@@ -370,7 +370,7 @@ namespace WindBot.Game.AI
_CardId.UltimateAncientGearGolem,
_CardId.RedDragonArchfiend
}, true)) return false;
if (AI.Utils.GetTotalAttackingMonsterAttack(1) >= Bot.LifePoints) return true;
if (Util.GetTotalAttackingMonsterAttack(1) >= Bot.LifePoints) return true;
}
return false;
}
......@@ -391,7 +391,7 @@ namespace WindBot.Game.AI
_CardId.UpstartGoblin,
_CardId.CyberEmergency
};
if (AI.Utils.GetLastChainCard().IsCode(ignoreList))
if (Util.GetLastChainCard().IsCode(ignoreList))
return false;
return Duel.LastChainPlayer == 1;
}
......@@ -400,7 +400,7 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultGhostOgreAndSnowRabbit()
{
if (AI.Utils.GetLastChainCard() != null && AI.Utils.GetLastChainCard().IsDisabled())
if (Util.GetLastChainCard() != null && Util.GetLastChainCard().IsDisabled())
return false;
return DefaultTrap();
}
......@@ -416,8 +416,8 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultEffectVeiler()
{
if (AI.Utils.GetLastChainCard() != null && AI.Utils.GetLastChainCard().IsCode(_CardId.GalaxySoldier) && Enemy.Hand.Count >= 3) return false;
if (AI.Utils.ChainContainsCard(_CardId.EffectVeiler))
if (Util.GetLastChainCard() != null && Util.GetLastChainCard().IsCode(_CardId.GalaxySoldier) && Enemy.Hand.Count >= 3) return false;
if (Util.ChainContainsCard(_CardId.EffectVeiler))
return false;
return DefaultBreakthroughSkill();
}
......@@ -438,7 +438,7 @@ namespace WindBot.Game.AI
{
foreach (int id in targetList)
{
if (AI.Utils.GetLastChainCard().IsCode(id))
if (Util.GetLastChainCard().IsCode(id))
{
AI.SelectCard(id);
return UniqueFaceupSpell();
......@@ -473,7 +473,7 @@ namespace WindBot.Game.AI
}
}
ClientCard LastChainCard = AI.Utils.GetLastChainCard();
ClientCard LastChainCard = Util.GetLastChainCard();
if (LastChainCard != null && LastChainCard.Controller == 1 && LastChainCard.Location == CardLocation.MonsterZone &&
!LastChainCard.IsDisabled() && !LastChainCard.IsShouldNotBeTarget() && !LastChainCard.IsShouldNotBeSpellTrapTarget())
......@@ -506,7 +506,7 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultSolemnJudgment()
{
return !AI.Utils.IsChainTargetOnly(Card) && !(Duel.Player == 0 && Duel.LastChainPlayer == -1) && DefaultTrap();
return !Util.IsChainTargetOnly(Card) && !(Duel.Player == 0 && Duel.LastChainPlayer == -1) && DefaultTrap();
}
/// <summary>
......@@ -530,7 +530,7 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultTorrentialTribute()
{
return !AI.Utils.HasChainedTrap(0) && AI.Utils.IsAllEnemyBetter(true);
return !Util.HasChainedTrap(0) && Util.IsAllEnemyBetter(true);
}
/// <summary>
......@@ -554,7 +554,7 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultHammerShot()
{
return AI.Utils.IsOneEnemyBetter(true);
return Util.IsOneEnemyBetter(true);
}
/// <summary>
......@@ -562,7 +562,7 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultDarkHole()
{
return AI.Utils.IsOneEnemyBetter();
return Util.IsOneEnemyBetter();
}
/// <summary>
......@@ -570,7 +570,7 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultRaigeki()
{
return AI.Utils.IsOneEnemyBetter();
return Util.IsOneEnemyBetter();
}
/// <summary>
......@@ -578,7 +578,7 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultSmashingGround()
{
return AI.Utils.IsOneEnemyBetter();
return Util.IsOneEnemyBetter();
}
/// <summary>
......@@ -639,7 +639,7 @@ namespace WindBot.Game.AI
(4000 - Card.Defense) * 2 > (4000 - Card.Attack))
return true;
bool enemyBetter = AI.Utils.IsAllEnemyBetter(true);
bool enemyBetter = Util.IsAllEnemyBetter(true);
if (Card.IsAttack() && enemyBetter)
return true;
if (Card.IsDefense() && !enemyBetter && Card.Attack >= Card.Defense)
......@@ -677,7 +677,7 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultOnBecomeTarget()
{
if (AI.Utils.IsChainTarget(Card)) return true;
if (Util.IsChainTarget(Card)) return true;
int[] destroyAllList =
{
_CardId.EvilswarmExcitonKnight,
......@@ -691,7 +691,7 @@ namespace WindBot.Game.AI
_CardId.DarkMagicAttack
};
if (AI.Utils.ChainContainsCard(destroyAllList)) return true;
if (Util.ChainContainsCard(destroyAllList)) return true;
if (Enemy.HasInSpellZone(destroyAllOpponentList, true)) return true;
// TODO: ChainContainsCard(id, player)
return false;
......@@ -709,7 +709,7 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultUniqueTrap()
{
if (AI.Utils.HasChainedTrap(0))
if (Util.HasChainedTrap(0))
return false;
return UniqueFaceupSpell();
......@@ -750,9 +750,9 @@ namespace WindBot.Game.AI
return false;
if (Bot.LifePoints <= 1000)
return false;
if (Bot.LifePoints <= Enemy.LifePoints && ActivateDescription == AI.Utils.GetStringId(_CardId.ChickenGame, 0))
if (Bot.LifePoints <= Enemy.LifePoints && ActivateDescription == Util.GetStringId(_CardId.ChickenGame, 0))
return true;
if (Bot.LifePoints > Enemy.LifePoints && ActivateDescription == AI.Utils.GetStringId(_CardId.ChickenGame, 1))
if (Bot.LifePoints > Enemy.LifePoints && ActivateDescription == Util.GetStringId(_CardId.ChickenGame, 1))
return true;
return false;
}
......@@ -819,7 +819,7 @@ namespace WindBot.Game.AI
return true;
}
}
ClientCard lastchaincard = AI.Utils.GetLastChainCard();
ClientCard lastchaincard = Util.GetLastChainCard();
if (Duel.LastChainPlayer == 1 && lastchaincard != null && !lastchaincard.IsDisabled())
{
if (lastchaincard.HasType(CardType.Ritual))
......@@ -848,7 +848,7 @@ namespace WindBot.Game.AI
return true;
}
}
if (AI.Utils.IsChainTarget(Card))
if (Util.IsChainTarget(Card))
{
AI.SelectOption(XYZ);
return true;
......@@ -933,7 +933,7 @@ namespace WindBot.Game.AI
AI.SelectCard(card);
return true;
}
card = AI.Utils.GetOneEnemyBetterThanValue(Card.GetDefensePower());
card = Util.GetOneEnemyBetterThanValue(Card.GetDefensePower());
if (card != null)
{
AI.SelectCard(card);
......@@ -947,8 +947,8 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultNumberS39UtopiaTheLightningSummon()
{
int bestBotAttack = AI.Utils.GetBestAttack(Bot);
return AI.Utils.IsOneEnemyBetterThanValue(bestBotAttack, false);
int bestBotAttack = Util.GetBestAttack(Bot);
return Util.IsOneEnemyBetterThanValue(bestBotAttack, false);
}
/// <summary>
......@@ -991,9 +991,9 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultStardustDragonSummon()
{
int selfBestAttack = AI.Utils.GetBestAttack(Bot);
int oppoBestAttack = AI.Utils.GetBestPower(Enemy);
return (selfBestAttack <= oppoBestAttack && oppoBestAttack <= 2500) || AI.Utils.IsTurn1OrMain2();
int selfBestAttack = Util.GetBestAttack(Bot);
int oppoBestAttack = Util.GetBestPower(Enemy);
return (selfBestAttack <= oppoBestAttack && oppoBestAttack <= 2500) || Util.IsTurn1OrMain2();
}
/// <summary>
......@@ -1009,7 +1009,7 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultCastelTheSkyblasterMusketeerSummon()
{
return AI.Utils.GetProblematicEnemyCard() != null;
return Util.GetProblematicEnemyCard() != null;
}
/// <summary>
......@@ -1017,9 +1017,9 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultCastelTheSkyblasterMusketeerEffect()
{
if (ActivateDescription == AI.Utils.GetStringId(_CardId.CastelTheSkyblasterMusketeer, 0))
if (ActivateDescription == Util.GetStringId(_CardId.CastelTheSkyblasterMusketeer, 0))
return false;
ClientCard target = AI.Utils.GetProblematicEnemyCard();
ClientCard target = Util.GetProblematicEnemyCard();
if (target != null)
{
AI.SelectCard(0);
......@@ -1034,8 +1034,8 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultScarlightRedDragonArchfiendSummon()
{
int selfBestAttack = AI.Utils.GetBestAttack(Bot);
int oppoBestAttack = AI.Utils.GetBestPower(Enemy);
int selfBestAttack = Util.GetBestAttack(Bot);
int oppoBestAttack = Util.GetBestPower(Enemy);
return (selfBestAttack <= oppoBestAttack && oppoBestAttack <= 3000) || DefaultScarlightRedDragonArchfiendEffect();
}
......@@ -1061,7 +1061,7 @@ namespace WindBot.Game.AI
|| ((Bot.BattlingMonster.Attack < Enemy.BattlingMonster.Defense) && (Bot.BattlingMonster.Attack + Enemy.BattlingMonster.Attack > Enemy.BattlingMonster.Defense)));
}
if (AI.Utils.IsTurn1OrMain2() && HonestEffectCount <= 5)
if (Util.IsTurn1OrMain2() && HonestEffectCount <= 5)
{
HonestEffectCount++;
return true;
......
......@@ -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