/// <summary> /// Chain the enemy monster, or disable monster like Rescue Rabbit. /// </summary> protected bool DefaultBreakthroughSkill() { if (!DefaultUniqueTrap()) { return(false); } if (Duel.Player == 1) { foreach (ClientCard target in Enemy.GetMonsters()) { if (target.IsMonsterShouldBeDisabledBeforeItUseEffect()) { AI.SelectCard(target); return(true); } } } ClientCard LastChainCard = AI.Utils.GetLastChainCard(); if (LastChainCard == null) { return(false); } if (LastChainCard.Controller != 1 || LastChainCard.Location != CardLocation.MonsterZone || LastChainCard.IsDisabled() || LastChainCard.IsShouldNotBeTarget() || LastChainCard.IsShouldNotBeSpellTrapTarget()) { return(false); } AI.SelectCard(LastChainCard); return(true); }
public ClientCard GetOneEnemyBetterThanValue(int value, bool onlyATK = false, bool canBeTarget = false) { ClientCard bestCard = null; int bestValue = value; for (int i = 0; i < 7; ++i) { ClientCard card = Enemy.MonsterZone[i]; if (card == null || card.Data == null || (canBeTarget && card.IsShouldNotBeTarget())) { continue; } if (onlyATK && card.IsDefense()) { continue; } int enemyValue = card.GetDefensePower(); if (enemyValue >= bestValue) { bestCard = card; bestValue = enemyValue; } } return(bestCard); }
public ClientCard GetBestEnemyMonster(bool onlyFaceup = false, bool canBeTarget = false) { ClientCard card = GetProblematicEnemyMonster(0, canBeTarget); if (card != null) { return(card); } card = Enemy.MonsterZone.GetHighestAttackMonster(canBeTarget); if (card != null) { return(card); } List <ClientCard> monsters = Enemy.GetMonsters(); // after GetHighestAttackMonster, the left monsters must be face-down. if (monsters.Count > 0 && !onlyFaceup && (!canBeTarget || !card.IsShouldNotBeTarget())) { return(monsters[0]); } return(null); }
/// <summary> /// Chain the enemy monster, or disable monster like Rescue Rabbit. /// </summary> protected bool DefaultDisableMonster() { if (Duel.Player == 1) { ClientCard target = Enemy.MonsterZone.GetShouldBeDisabledBeforeItUseEffectMonster(); if (target != null) { AI.SelectCard(target); return(true); } } ClientCard LastChainCard = Util.GetLastChainCard(); if (LastChainCard != null && LastChainCard.Controller == 1 && LastChainCard.Location == CardLocation.MonsterZone && !LastChainCard.IsDisabled() && !LastChainCard.IsShouldNotBeTarget() && !LastChainCard.IsShouldNotBeSpellTrapTarget()) { AI.SelectCard(LastChainCard); return(true); } if (Bot.BattlingMonster != null && Enemy.BattlingMonster != null) { if (!Enemy.BattlingMonster.IsDisabled() && Enemy.BattlingMonster.IsCode(_CardId.EaterOfMillions)) { AI.SelectCard(Enemy.BattlingMonster); return(true); } } if (Duel.Phase == DuelPhase.BattleStart && Duel.Player == 1 && Enemy.HasInMonstersZone(_CardId.NumberS39UtopiaTheLightning, true)) { AI.SelectCard(_CardId.NumberS39UtopiaTheLightning); return(true); } return(false); }
//无限泡影 public bool Impermanence_activate() { // negate before effect used foreach (ClientCard m in Enemy.GetMonsters()) { if (m.IsMonsterShouldBeDisabledBeforeItUseEffect() && !m.IsDisabled() && Duel.LastChainPlayer != 0) { if (Card.Location == CardLocation.SpellZone) { for (int i = 0; i < 5; ++i) { if (Bot.SpellZone[i] == Card) { Impermanence_list.Add(i); break; } } } if (Card.Location == CardLocation.Hand) { AI.SelectPlace(SelectSTPlace(Card, true)); } AI.SelectCard(m); return(true); } } ClientCard LastChainCard = Util.GetLastChainCard(); // negate spells if (Card.Location == CardLocation.SpellZone) { int this_seq = -1; int that_seq = -1; for (int i = 0; i < 5; ++i) { 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 && 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) || (Util.IsChainTarget(Card)) || (LastChainCard != null && LastChainCard.Controller == 1 && LastChainCard.IsCode(_CardId.HarpiesFeatherDuster))) { List <ClientCard> enemy_monsters = Enemy.GetMonsters(); enemy_monsters.Sort(CardContainer.CompareCardAttack); enemy_monsters.Reverse(); foreach (ClientCard card in enemy_monsters) { if (card.IsFaceup() && !card.IsShouldNotBeTarget() && !card.IsShouldNotBeSpellTrapTarget()) { AI.SelectCard(card); Impermanence_list.Add(this_seq); return(true); } } } } if ((LastChainCard == null || LastChainCard.Controller != 1 || LastChainCard.Location != CardLocation.MonsterZone || LastChainCard.IsDisabled() || LastChainCard.IsShouldNotBeTarget() || LastChainCard.IsShouldNotBeSpellTrapTarget())) { return(false); } // negate monsters if (is_should_not_negate() && LastChainCard.Location == CardLocation.MonsterZone) { return(false); } if (Card.Location == CardLocation.SpellZone) { for (int i = 0; i < 5; ++i) { if (Bot.SpellZone[i] == Card) { Impermanence_list.Add(i); break; } } } if (Card.Location == CardLocation.Hand) { AI.SelectPlace(SelectSTPlace(Card, true)); } if (LastChainCard != null) { AI.SelectCard(LastChainCard); } else { List <ClientCard> enemy_monsters = Enemy.GetMonsters(); enemy_monsters.Sort(CardContainer.CompareCardAttack); enemy_monsters.Reverse(); foreach (ClientCard card in enemy_monsters) { if (card.IsFaceup() && !card.IsShouldNotBeTarget() && !card.IsShouldNotBeSpellTrapTarget()) { AI.SelectCard(card); return(true); } } } return(true); }