Commit 3f262905 authored by mercury233's avatar mercury233

fix

parent 00e70310
...@@ -17,7 +17,7 @@ namespace WindBot.Game.AI.Decks ...@@ -17,7 +17,7 @@ namespace WindBot.Game.AI.Decks
public const int Wagon = 34496660;//大八 public const int Wagon = 34496660;//大八
public const int Soulpiercer = 90361010;//岩融 public const int Soulpiercer = 90361010;//岩融
public const int Wakaushi = 82112494;//牛若 public const int Wakaushi = 82112494;//牛若
public const int Scales = 78391364;//天秤 public const int Scales = 78391364;//天秤
public const int Booster = 56727340;//地铠 public const int Booster = 56727340;//地铠
public const int Motorbike = 83334932;//摩托 public const int Motorbike = 83334932;//摩托
public const int Soulhorns = 14624296;//双角 public const int Soulhorns = 14624296;//双角
...@@ -60,11 +60,12 @@ namespace WindBot.Game.AI.Decks ...@@ -60,11 +60,12 @@ namespace WindBot.Game.AI.Decks
private bool activate_Wagon = false;//大巴 private bool activate_Wagon = false;//大巴
private bool activate_Booster = false;//地铠 private bool activate_Booster = false;//地铠
private bool activate_Soulpeacemaker = false;//仲裁 private bool activate_Soulpeacemaker = false;//仲裁
private bool activate_Benkei = false;//弁庆 private bool activate_Benkei = false;//弁庆
private bool need_Gear = false;//齿轮齿巨人 private bool need_Gear = false;//齿轮齿巨人
//案山子 //案山子
private bool activate_Scarecrow = false; private bool activate_Scarecrow=false;
private bool summon_Scarecrow = false; private bool summon_Scarecrow=false;
private bool summon_Scarecrow2=true;
private bool activate_Sarutobi = false;//猿飞 private bool activate_Sarutobi = false;//猿飞
private bool activate_Genius = false;//路径灵 private bool activate_Genius = false;//路径灵
//淘气精灵 //淘气精灵
...@@ -80,107 +81,112 @@ namespace WindBot.Game.AI.Decks ...@@ -80,107 +81,112 @@ namespace WindBot.Game.AI.Decks
: base(ai, duel) : base(ai, duel)
{ {
AddExecutor(ExecutorType.Activate, CardId.PSYFramelordOmega); AddExecutor(ExecutorType.Activate, CardId.PSYFramelordOmega);
AddExecutor(ExecutorType.Activate, CardId.IP, IPFunction); AddExecutor(ExecutorType.Activate, CardId.IP,IPFunction);
AddExecutor(ExecutorType.Activate, CardId.Sarutobi, SarutobiFunction); AddExecutor(ExecutorType.Activate, CardId.Sarutobi,SarutobiFunction);
AddExecutor(ExecutorType.Activate, CardId.Unicorn, UnicornFunction); AddExecutor(ExecutorType.Activate, CardId.Unicorn,UnicornFunction);
AddExecutor(ExecutorType.Activate, CardId.MaxxG, MaxxCFunction); AddExecutor(ExecutorType.Activate, CardId.MaxxG,MaxxCFunction);
AddExecutor(ExecutorType.Activate, CardId.JoyousSpring, DefaultAshBlossomAndJoyousSpring); AddExecutor(ExecutorType.Activate, CardId.JoyousSpring,DefaultAshBlossomAndJoyousSpring);
AddExecutor(ExecutorType.Activate, CardId.SnowRabbit, DefaultGhostOgreAndSnowRabbit); AddExecutor(ExecutorType.Activate, CardId.SnowRabbit,DefaultGhostOgreAndSnowRabbit);
AddExecutor(ExecutorType.Activate, CardId.EffectVeiler, DefaultBreakthroughSkill); AddExecutor(ExecutorType.Activate, CardId.EffectVeiler,DefaultBreakthroughSkill);
AddExecutor(ExecutorType.Activate, CardId.LockBird, LockBirdFunction); AddExecutor(ExecutorType.Activate, CardId.LockBird,LockBirdFunction);
AddExecutor(ExecutorType.Activate, CardId.PsyFramegearGamma, FunctionInHand); AddExecutor(ExecutorType.Activate, CardId.PsyFramegearGamma,FunctionInHand);
AddExecutor(ExecutorType.Activate, CardId.HauntedMansion, FunctionInHand); AddExecutor(ExecutorType.Activate, CardId.HauntedMansion,FunctionInHand);
AddExecutor(ExecutorType.Activate, CardId.Masurawo, MasurawoFunction); AddExecutor(ExecutorType.Activate, CardId.Masurawo,MasurawoFunction);
AddExecutor(ExecutorType.Activate, CardId.Genius, GeniusFunction); AddExecutor(ExecutorType.Activate, CardId.Genius,GeniusFunction);
//Motorbike's Effect //Motorbike's Effect
AddExecutor(ExecutorType.Activate, CardId.Motorbike, MotorbikeFunction); AddExecutor(ExecutorType.Activate, CardId.Motorbike,MotorbikeFunction);
//Scales's Effect //Scales's Effect
AddExecutor(ExecutorType.SpSummon, CardId.Scales); AddExecutor(ExecutorType.SpSummon, CardId.Scales);
AddExecutor(ExecutorType.Activate, CardId.Scales, ScalesFunction); AddExecutor(ExecutorType.Activate, CardId.Scales,ScalesFunction);
//Synchron //Synchron
AddExecutor(ExecutorType.SpSummon, CardId.ASStardustDragon, ASStardustDragonSynchronFunction2); AddExecutor(ExecutorType.SpSummon, CardId.ASStardustDragon,ASStardustDragonSynchronFunction2);
AddExecutor(ExecutorType.SpSummon, CardId.Fleur, FleurSynchronFunction2); AddExecutor(ExecutorType.SpSummon, CardId.Fleur,FleurSynchronFunction2);
//Pendulum
AddExecutor(ExecutorType.Activate, CardId.Wakaushi,WakaushiFunction);
AddExecutor(ExecutorType.Activate, CardId.Wakaushi,WakaushiEffectFunction);
AddExecutor(ExecutorType.Activate, CardId.Benkei,BenkeiFunction);
AddExecutor(ExecutorType.Activate, CardId.Benkei,BenkeiEffectFunction);
//Normal Summon & Effect
AddExecutor(ExecutorType.Summon, CardId.Soulpiercer,NormalSummonFunction);
AddExecutor(ExecutorType.Activate, CardId.Soulpiercer,SoulpiercerFunction);
AddExecutor(ExecutorType.Summon, CardId.Wagon,NormalSummonFunction);
AddExecutor(ExecutorType.Activate, CardId.Wagon,WagonFunction);
AddExecutor(ExecutorType.Activate, CardId.Wagon,WagonFunction);
AddExecutor(ExecutorType.Summon, CardId.Booster,BoosterNormalSummonFunction);
AddExecutor(ExecutorType.Summon, CardId.Scales,ScalesNormalSummonFunction);
//boost & Gear
AddExecutor(ExecutorType.Activate, CardId.Booster,BoosterEquipFunction);
AddExecutor(ExecutorType.Activate, CardId.Booster,BoosterFunction);
AddExecutor(ExecutorType.SpSummon, CardId.GearGigant,GearGigantXyzFunction);
AddExecutor(ExecutorType.Activate, CardId.GearGigant,GearGigantFunction);
//equip Soulpiercer
AddExecutor(ExecutorType.Activate, CardId.Soulpiercer,SoulpiercerEquipFunction);
//Link Scarecrow
AddExecutor(ExecutorType.SpSummon, CardId.Scarecrow,ScarecrowLinkFunction);
AddExecutor(ExecutorType.Activate, CardId.Scarecrow,ScarecrowFunction);
AddExecutor(ExecutorType.SpSummon, CardId.Scarecrow,ScarecrowLinkFunction2);
//Synchron
AddExecutor(ExecutorType.SpSummon, CardId.ASStardustDragon,ASStardustDragonSynchronFunction);
//Effect After Synchron
AddExecutor(ExecutorType.Activate, CardId.SavageDragon,SavageDragonFunction);
AddExecutor(ExecutorType.Activate, CardId.ASStardustDragon,ASStardustDragonFunction);
//Wakaushi's Effect After Synchron
AddExecutor(ExecutorType.Activate, CardId.Wakaushi,WakaushiReturnPFunction);
//Synchron
AddExecutor(ExecutorType.SpSummon, CardId.Fleur,FleurSynchronFunction);
AddExecutor(ExecutorType.Activate, CardId.Fleur,FleurFunction);
//equip Soulpeacemaker
AddExecutor(ExecutorType.Activate, CardId.Soulpeacemaker,SoulpeacemakerEquipFunction);
AddExecutor(ExecutorType.Activate, CardId.Soulpeacemaker,SoulpeacemakerFunction);
//Link
AddExecutor(ExecutorType.SpSummon, CardId.Genius,GeniusLinkFunction);
AddExecutor(ExecutorType.SpSummon, Psummon);
//Link
AddExecutor(ExecutorType.SpSummon, CardId.Elf,ElfLinkFunction);
AddExecutor(ExecutorType.Activate, CardId.Elf,ElfFunction);
AddExecutor(ExecutorType.Activate, CardId.Wakaushi, WakaushiFunction); AddExecutor(ExecutorType.Activate, CardId.Motorbike,MotorbikeFunction);
AddExecutor(ExecutorType.Activate, CardId.Wakaushi, WakaushiEffectFunction);
AddExecutor(ExecutorType.Activate, CardId.Benkei, BenkeiEffectFunction);
//Normal Summon & Effect
AddExecutor(ExecutorType.Summon, CardId.Soulpiercer, NormalSummonFunction);
AddExecutor(ExecutorType.Activate, CardId.Soulpiercer, SoulpiercerFunction);
AddExecutor(ExecutorType.Summon, CardId.Wagon, NormalSummonFunction); //Synchron
AddExecutor(ExecutorType.Activate, CardId.Wagon, WagonFunction); AddExecutor(ExecutorType.SpSummon, CardId.SavageDragon,SavageDragonSynchronFunction);
AddExecutor(ExecutorType.Activate, CardId.Wagon, WagonFunction);
AddExecutor(ExecutorType.Summon, CardId.Booster, BoosterNormalSummonFunction); //Link
AddExecutor(ExecutorType.Summon, CardId.Scales, ScalesNormalSummonFunction); AddExecutor(ExecutorType.SpSummon, CardId.IP,IPLinkFunction);
//boost & Gear
AddExecutor(ExecutorType.Activate, CardId.Booster, BoosterEquipFunction);
AddExecutor(ExecutorType.Activate, CardId.Booster, BoosterFunction);
AddExecutor(ExecutorType.SpSummon, CardId.GearGigant, GearGigantXyzFunction);
AddExecutor(ExecutorType.Activate, CardId.GearGigant, GearGigantFunction);
//equip Soulpiercer
AddExecutor(ExecutorType.Activate, CardId.Soulpiercer, SoulpiercerEquipFunction);
//Link Scarecrow
AddExecutor(ExecutorType.SpSummon, CardId.Scarecrow, ScarecrowLinkFunction);
AddExecutor(ExecutorType.Activate, CardId.Scarecrow, ScarecrowFunction);
//Synchron
AddExecutor(ExecutorType.SpSummon, CardId.ASStardustDragon, ASStardustDragonSynchronFunction);
//Effect After Synchron
AddExecutor(ExecutorType.Activate, CardId.SavageDragon, SavageDragonFunction);
AddExecutor(ExecutorType.Activate, CardId.ASStardustDragon, ASStardustDragonFunction);
//Wakaushi's Effect After Synchron
AddExecutor(ExecutorType.Activate, CardId.Wakaushi, WakaushiReturnPFunction);
//Synchron
AddExecutor(ExecutorType.SpSummon, CardId.Fleur, FleurSynchronFunction);
AddExecutor(ExecutorType.Activate, CardId.Fleur, FleurFunction);
//equip Soulpeacemaker
AddExecutor(ExecutorType.Activate, CardId.Soulpeacemaker, SoulpeacemakerEquipFunction);
AddExecutor(ExecutorType.Activate, CardId.Soulpeacemaker, SoulpeacemakerFunction);
//Link
AddExecutor(ExecutorType.SpSummon, CardId.Genius, GeniusLinkFunction);
AddExecutor(ExecutorType.SpSummon, Psummon); //Regulus's Effect
AddExecutor(ExecutorType.Activate, CardId.Regulus,RegulusFunction);
//Link
AddExecutor(ExecutorType.SpSummon, CardId.Elf, ElfLinkFunction);
AddExecutor(ExecutorType.Activate, CardId.Elf, ElfFunction);
AddExecutor(ExecutorType.Activate, CardId.Motorbike, MotorbikeFunction); //booster
AddExecutor(ExecutorType.Activate, CardId.Booster,BoosterEquipFunction2);
//Regulus's Effect AddExecutor(ExecutorType.Activate, CardId.Booster,BoosterFunction);
AddExecutor(ExecutorType.Activate, CardId.Regulus, RegulusFunction); AddExecutor(ExecutorType.Activate, CardId.Booster,BoosterEquipFunction3);
AddExecutor(ExecutorType.Activate, CardId.Booster,BoosterFunction);
//Synchron
AddExecutor(ExecutorType.SpSummon, CardId.SavageDragon, SavageDragonSynchronFunction); //Synchron
AddExecutor(ExecutorType.SpSummon, CardId.Masurawo,MasurawoSynchronFunction);
//Link AddExecutor(ExecutorType.SpSummon, CardId.Sarutobi,DeSynchronFunction);
AddExecutor(ExecutorType.SpSummon, CardId.IP, IPLinkFunction); AddExecutor(ExecutorType.SpSummon, CardId.PSYFramelordOmega);
//Synchron //equip Soulhorns
AddExecutor(ExecutorType.SpSummon, CardId.Masurawo, MasurawoSynchronFunction); AddExecutor(ExecutorType.Activate, CardId.Soulhorns,SoulhornsEquipFunction);
AddExecutor(ExecutorType.SpSummon, CardId.Sarutobi, DeSynchronFunction);
AddExecutor(ExecutorType.SpSummon, CardId.PSYFramelordOmega);
//equip Soulhorns
AddExecutor(ExecutorType.Activate, CardId.Soulhorns, SoulhornsEquipFunction);
//booster
AddExecutor(ExecutorType.Activate, CardId.Booster, BoosterEquipFunction2);
AddExecutor(ExecutorType.Activate, CardId.Booster, BoosterFunction);
} }
public override void OnNewTurn() public override void OnNewTurn()
...@@ -196,8 +202,9 @@ namespace WindBot.Game.AI.Decks ...@@ -196,8 +202,9 @@ namespace WindBot.Game.AI.Decks
activate_Soulpeacemaker = false; activate_Soulpeacemaker = false;
activate_Benkei = false; activate_Benkei = false;
need_Gear = false; need_Gear = false;
activate_Scarecrow = false; activate_Scarecrow=false;
summon_Scarecrow = false; summon_Scarecrow=false;
summon_Scarecrow2=true;
activate_Elf = false; activate_Elf = false;
summon_Elf = false; summon_Elf = false;
activate_MaxxG = false; activate_MaxxG = false;
...@@ -218,8 +225,8 @@ namespace WindBot.Game.AI.Decks ...@@ -218,8 +225,8 @@ namespace WindBot.Game.AI.Decks
{ {
if (cardId == CardId.Scarecrow) if (cardId == CardId.Scarecrow)
{ {
int a = (Zones.z6 & available); int a=(Zones.z6 & available);
int b = (Zones.z5 & available); int b=(Zones.z5 & available);
if (Bot.MonsterZone[2] != null && Bot.MonsterZone[2].Controller == 0 && !FinalCards(Bot.MonsterZone[2].Id)) if (Bot.MonsterZone[2] != null && Bot.MonsterZone[2].Controller == 0 && !FinalCards(Bot.MonsterZone[2].Id))
a = 0; a = 0;
else if (Bot.MonsterZone[0] != null && Bot.MonsterZone[0].Controller == 0 && !FinalCards(Bot.MonsterZone[0].Id)) else if (Bot.MonsterZone[0] != null && Bot.MonsterZone[0].Controller == 0 && !FinalCards(Bot.MonsterZone[0].Id))
...@@ -234,8 +241,8 @@ namespace WindBot.Game.AI.Decks ...@@ -234,8 +241,8 @@ namespace WindBot.Game.AI.Decks
} }
else if (cardId == CardId.Genius) else if (cardId == CardId.Genius)
{ {
int a = (Zones.z6 & available); int a=(Zones.z6 & available);
int b = (Zones.z5 & available); int b=(Zones.z5 & available);
if (Bot.MonsterZone[4] != null && Bot.MonsterZone[4].Controller == 0 && !FinalCards(Bot.MonsterZone[4].Id)) if (Bot.MonsterZone[4] != null && Bot.MonsterZone[4].Controller == 0 && !FinalCards(Bot.MonsterZone[4].Id))
a = 0; a = 0;
else if (Bot.MonsterZone[0] != null && Bot.MonsterZone[0].Controller == 0 && !FinalCards(Bot.MonsterZone[0].Id)) else if (Bot.MonsterZone[0] != null && Bot.MonsterZone[0].Controller == 0 && !FinalCards(Bot.MonsterZone[0].Id))
...@@ -266,7 +273,7 @@ namespace WindBot.Game.AI.Decks ...@@ -266,7 +273,7 @@ namespace WindBot.Game.AI.Decks
{ {
List<ClientCard> result = new List<ClientCard>(); List<ClientCard> result = new List<ClientCard>();
List<ClientCard> scards = cards.Where(card => card != null && card.HasSetcode(0x9a) && card.Level == 4).ToList(); List<ClientCard> scards = cards.Where(card => card != null && card.HasSetcode(0x9a) && card.Level == 4).ToList();
if (scards.Count < 2) scards = cards.Where(card => card != null && card.HasSetcode(0x9a)).ToList(); if (scards.Count <2) scards = cards.Where(card => card != null && card.HasSetcode(0x9a)).ToList();
p_summoning = false; p_summoning = false;
if (scards.Count > 0) return Util.CheckSelectCount(result, scards, 1, 1); if (scards.Count > 0) return Util.CheckSelectCount(result, scards, 1, 1);
else if (min == 0) return result; // empty else if (min == 0) return result; // empty
...@@ -287,8 +294,8 @@ namespace WindBot.Game.AI.Decks ...@@ -287,8 +294,8 @@ namespace WindBot.Game.AI.Decks
} }
private bool FinalCards(int cname) private bool FinalCards(int cname)
{ {
int[] cardsname = new[] { CardId.Masurawo, CardId.Fleur, CardId.SavageDragon, CardId.Sarutobi, CardId.Regulus, CardId.IP }; int[] cardsname = new[] {CardId.Masurawo,CardId.Fleur,CardId.SavageDragon,CardId.Sarutobi,CardId.Regulus,CardId.IP};
foreach (var cardname in cardsname) foreach(var cardname in cardsname)
{ {
if (cname == cardname) return true; if (cname == cardname) return true;
} }
...@@ -296,10 +303,10 @@ namespace WindBot.Game.AI.Decks ...@@ -296,10 +303,10 @@ namespace WindBot.Game.AI.Decks
} }
private bool TurnerCards(int cname) private bool TurnerCards(int cname)
{ {
int[] cardsname = new[] { CardId.PsyFramegearGamma, CardId.Wakaushi, CardId.Motorbike }; int[] cardsname =new[] {CardId.PsyFramegearGamma,CardId.Wakaushi,CardId.Motorbike};
foreach (var cardname in cardsname) foreach(var cardname in cardsname)
{ {
if (cname == cardname) return true; if (cname == cardname) return true;
} }
return false; return false;
} }
...@@ -340,11 +347,16 @@ namespace WindBot.Game.AI.Decks ...@@ -340,11 +347,16 @@ namespace WindBot.Game.AI.Decks
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false; if (DefaultCheckWhetherCardIsNegated(Card)) return false;
int targetid = -1; int targetid = -1;
List<ClientCard> cards = GetZoneCards(CardLocation.MonsterZone, Bot).Where(card => card != null && card.IsFaceup()).ToList();
if (!(Bot.HasInHand(CardId.Wakaushi) || Bot.HasInMonstersZone(CardId.Wakaushi) || Bot.HasInSpellZone(CardId.Wakaushi)) && !activate_Wakaushi) if (!(Bot.HasInHand(CardId.Wakaushi) || Bot.HasInMonstersZone(CardId.Wakaushi) || Bot.HasInSpellZone(CardId.Wakaushi)) && !activate_Wakaushi)
{ {
targetid = CardId.Wakaushi; targetid = CardId.Wakaushi;
} }
else if (!Bot.HasInHand(CardId.Soulpeacemaker) && !activate_Soulpeacemaker && !normal_summon) else if (cards.Count() == 0 && !normal_summon)
{
targetid = CardId.Soulpiercer;
}
else if (!Bot.HasInHand(CardId.Soulpeacemaker) && !Bot.HasInSpellZone(CardId.Soulpeacemaker) && !activate_Soulpeacemaker && (normal_summon || Bot.HasInMonstersZone(CardId.Scarecrow)))
{ {
targetid = CardId.Soulpeacemaker; targetid = CardId.Soulpeacemaker;
} }
...@@ -403,7 +415,7 @@ namespace WindBot.Game.AI.Decks ...@@ -403,7 +415,7 @@ namespace WindBot.Game.AI.Decks
if (ActivateDescription == Util.GetStringId(CardId.Wagon, 1)) if (ActivateDescription == Util.GetStringId(CardId.Wagon, 1))
{ {
int targetid = -1; int targetid = -1;
if (!(Bot.HasInHand(CardId.Soulpiercer) || Bot.HasInMonstersZone(CardId.Soulpiercer))) if (!(Bot.HasInHand(CardId.Soulpiercer)||Bot.HasInMonstersZone(CardId.Soulpiercer)))
{ {
targetid = CardId.Soulpiercer; targetid = CardId.Soulpiercer;
} }
...@@ -462,7 +474,7 @@ namespace WindBot.Game.AI.Decks ...@@ -462,7 +474,7 @@ namespace WindBot.Game.AI.Decks
{ {
targetid = CardId.Soulhorns; targetid = CardId.Soulhorns;
} }
else { targetid = CardId.Wakaushi; } else {targetid = CardId.Wakaushi;}
if (targetid > 0) AI.SelectCard(targetid); if (targetid > 0) AI.SelectCard(targetid);
return true; return true;
} }
...@@ -470,7 +482,7 @@ namespace WindBot.Game.AI.Decks ...@@ -470,7 +482,7 @@ namespace WindBot.Game.AI.Decks
} }
private bool WakaushiFunction() private bool WakaushiFunction()
{ {
if (Card.Location != CardLocation.Hand || Bot.HasInMonstersZone(CardId.Wakaushi)) if (Card.Location != CardLocation.Hand||Bot.HasInMonstersZone(CardId.Wakaushi))
return false; return false;
ClientCard l = Util.GetPZone(0, 0); ClientCard l = Util.GetPZone(0, 0);
ClientCard r = Util.GetPZone(0, 1); ClientCard r = Util.GetPZone(0, 1);
...@@ -492,12 +504,21 @@ namespace WindBot.Game.AI.Decks ...@@ -492,12 +504,21 @@ namespace WindBot.Game.AI.Decks
} }
return false; return false;
} }
private bool BenkeiFunction()
{
if (Card.Location != CardLocation.Hand || Bot.HasInSpellZone(CardId.Benkei)) return false;
List<ClientCard> cards1 = GetZoneCards(CardLocation.Hand, Bot).Where(card => card != null && card.Id == CardId.Benkei).ToList();
List<ClientCard> cards2 = GetZoneCards(CardLocation.Removed, Bot).Where(card => card != null && card.Id == CardId.Benkei).ToList();
if (cards1.Count() >= 2 || Bot.HasInGraveyard(CardId.Benkei) || Bot.HasInExtra(CardId.Benkei) || cards2.Count() > 0)
return true;
return false;
}
private bool BenkeiEffectFunction() private bool BenkeiEffectFunction()
{ {
if (Card.Location == CardLocation.SpellZone) if (Card.Location == CardLocation.SpellZone)
{ {
int targetid = -1; int targetid = -1;
if (!(Bot.HasInHand(CardId.Soulpiercer) || Bot.HasInMonstersZone(CardId.Soulpiercer))) if (!(Bot.HasInHand(CardId.Soulpiercer) || Bot.HasInMonstersZone(CardId.Soulpiercer) || Bot.HasInSpellZone(CardId.Soulpiercer)) && !(Bot.HasInMonstersZone(CardId.Scarecrow) && !activate_Soulpeacemaker))
{ {
targetid = CardId.Soulpiercer; targetid = CardId.Soulpiercer;
} }
...@@ -517,7 +538,7 @@ namespace WindBot.Game.AI.Decks ...@@ -517,7 +538,7 @@ namespace WindBot.Game.AI.Decks
} }
private bool WakaushiReturnPFunction() private bool WakaushiReturnPFunction()
{ {
if (Card.Location == CardLocation.Extra || Card.Location == CardLocation.Removed) if (Card.Location == CardLocation.Extra||Card.Location == CardLocation.Removed)
{ {
ClientCard l = Util.GetPZone(0, 0); ClientCard l = Util.GetPZone(0, 0);
ClientCard r = Util.GetPZone(0, 1); ClientCard r = Util.GetPZone(0, 1);
...@@ -558,7 +579,7 @@ namespace WindBot.Game.AI.Decks ...@@ -558,7 +579,7 @@ namespace WindBot.Game.AI.Decks
bool chk = true; bool chk = true;
if (Bot.HasInMonstersZone(CardId.ASStardustDragon) || Bot.HasInMonstersZone(CardId.Benkei)) if (Bot.HasInMonstersZone(CardId.ASStardustDragon) || Bot.HasInMonstersZone(CardId.Benkei))
chk = false; chk = false;
var materials_lists = Util.GetSynchroMaterials(Bot.MonsterZone, 12, 1, 1, false, chk, null, var materials_lists = Util.GetSynchroMaterials(Bot.MonsterZone,12,1,1,false,chk,null,
card => { return !FinalCards(card.Id); }); card => { return !FinalCards(card.Id); });
if (materials_lists.Count <= 0) return false; if (materials_lists.Count <= 0) return false;
AI.SelectMaterials(materials_lists[0]); AI.SelectMaterials(materials_lists[0]);
...@@ -570,7 +591,7 @@ namespace WindBot.Game.AI.Decks ...@@ -570,7 +591,7 @@ namespace WindBot.Game.AI.Decks
bool chk = true; bool chk = true;
if (Bot.HasInMonstersZone(CardId.Motorbike) && (Bot.HasInMonstersZone(CardId.ASStardustDragon) || Bot.HasInMonstersZone(CardId.Benkei))) if (Bot.HasInMonstersZone(CardId.Motorbike) && (Bot.HasInMonstersZone(CardId.ASStardustDragon) || Bot.HasInMonstersZone(CardId.Benkei)))
chk = false; chk = false;
var materials_lists = Util.GetSynchroMaterials(Bot.MonsterZone, 10, 1, 1, false, chk, null, var materials_lists = Util.GetSynchroMaterials(Bot.MonsterZone,10,1,1,false,chk,null,
card => { return !FinalCards(card.Id); }); card => { return !FinalCards(card.Id); });
if (materials_lists.Count <= 0) return false; if (materials_lists.Count <= 0) return false;
AI.SelectMaterials(materials_lists[0]); AI.SelectMaterials(materials_lists[0]);
...@@ -578,7 +599,7 @@ namespace WindBot.Game.AI.Decks ...@@ -578,7 +599,7 @@ namespace WindBot.Game.AI.Decks
} }
private bool FleurSynchronFunction2() private bool FleurSynchronFunction2()
{ {
var materials_lists = Util.GetSynchroMaterials(Bot.MonsterZone, 10, 1, 1, false, false, null, var materials_lists = Util.GetSynchroMaterials(Bot.MonsterZone,10,1,1,false,false,null,
card => { return !FinalCards(card.Id); }); card => { return !FinalCards(card.Id); });
if (materials_lists.Count <= 0) return false; if (materials_lists.Count <= 0) return false;
AI.SelectMaterials(materials_lists[0]); AI.SelectMaterials(materials_lists[0]);
...@@ -636,7 +657,7 @@ namespace WindBot.Game.AI.Decks ...@@ -636,7 +657,7 @@ namespace WindBot.Game.AI.Decks
} }
private bool ASStardustDragonFunction() private bool ASStardustDragonFunction()
{ {
if (Duel.LastChainPlayer == 1 && ActivateDescription == Util.GetStringId(CardId.ASStardustDragon, 0)) if (Duel.LastChainPlayer == 1 && ActivateDescription == Util.GetStringId(CardId.ASStardustDragon, 1))
{ {
return true; return true;
} }
...@@ -663,10 +684,9 @@ namespace WindBot.Game.AI.Decks ...@@ -663,10 +684,9 @@ namespace WindBot.Game.AI.Decks
{ {
List<ClientCard> material = new List<ClientCard>(); List<ClientCard> material = new List<ClientCard>();
List<ClientCard> cards = Bot.GetMonstersInExtraZone().Where(card => card != null && card.Id == CardId.Scarecrow).ToList(); List<ClientCard> cards = Bot.GetMonstersInExtraZone().Where(card => card != null && card.Id == CardId.Scarecrow).ToList();
if (cards.Count > 0 || summon_Scarecrow || activate_Scarecrow) return false; if ((cards.Count() > 0 && !summon_Scarecrow) || summon_Scarecrow || activate_Scarecrow) return false;
int targetid = -1; int targetid = -1;
if (Bot.MonsterZone[0] != null && Bot.MonsterZone[2] != null) if (Bot.MonsterZone[0] != null && Bot.MonsterZone[2] != null) {
{
if (Bot.MonsterZone[0].Id == CardId.Soulpiercer) material.Add(Bot.MonsterZone[0]); if (Bot.MonsterZone[0].Id == CardId.Soulpiercer) material.Add(Bot.MonsterZone[0]);
else if (Bot.MonsterZone[2].Id == CardId.Soulpiercer) material.Add(Bot.MonsterZone[2]); else if (Bot.MonsterZone[2].Id == CardId.Soulpiercer) material.Add(Bot.MonsterZone[2]);
else if (!FinalCards(Bot.MonsterZone[0].Id) && Bot.MonsterZone[0].HasSetcode(0x9a)) material.Add(Bot.MonsterZone[0]); else if (!FinalCards(Bot.MonsterZone[0].Id) && Bot.MonsterZone[0].HasSetcode(0x9a)) material.Add(Bot.MonsterZone[0]);
...@@ -682,13 +702,13 @@ namespace WindBot.Game.AI.Decks ...@@ -682,13 +702,13 @@ namespace WindBot.Game.AI.Decks
} }
if (material.Count > 0) AI.SelectMaterials(material); if (material.Count > 0) AI.SelectMaterials(material);
else if (targetid > 0) AI.SelectMaterials(targetid); else if (targetid > 0) AI.SelectMaterials(targetid);
summon_Scarecrow = true; summon_Scarecrow=true;
return (Bot.HasInGraveyard(new[] { return (Bot.HasInGraveyard(new[] {
CardId.Soulpiercer, CardId.Soulpiercer,
CardId.Wakaushi, CardId.Wakaushi,
CardId.Benkei, CardId.Benkei,
CardId.Wagon, CardId.Wagon,
}) || Bot.HasInMonstersZone(new[] { })||Bot.HasInMonstersZone(new[] {
CardId.Soulpiercer, CardId.Soulpiercer,
CardId.Wagon, CardId.Wagon,
CardId.Wakaushi, CardId.Wakaushi,
...@@ -705,78 +725,80 @@ namespace WindBot.Game.AI.Decks ...@@ -705,78 +725,80 @@ namespace WindBot.Game.AI.Decks
{ {
int tributeId = -1; int tributeId = -1;
if (Bot.HasInHand(CardId.PsyFrameDriver)) if (Bot.HasInHand(CardId.PsyFrameDriver))
{ tributeId = CardId.PsyFrameDriver; } {tributeId = CardId.PsyFrameDriver;}
else if (Bot.HasInHand(CardId.PsyFramegearGamma)) else if (Bot.HasInHand(CardId.PsyFramegearGamma))
{ tributeId = CardId.PsyFramegearGamma; } {tributeId = CardId.PsyFramegearGamma;}
else if (Bot.HasInHand(CardId.Benkei)) else if (Bot.HasInHand(CardId.Benkei))
{ tributeId = CardId.Benkei; } {tributeId = CardId.Benkei;}
else if (Bot.HasInHand(CardId.HauntedMansion)) else if (Bot.HasInHand(CardId.HauntedMansion))
{ tributeId = CardId.HauntedMansion; } {tributeId = CardId.HauntedMansion;}
else if (Bot.HasInHand(CardId.EffectVeiler)) else if (Bot.HasInHand(CardId.EffectVeiler))
{ tributeId = CardId.EffectVeiler; } {tributeId = CardId.EffectVeiler;}
else if (Bot.HasInHand(CardId.SnowRabbit)) else if (Bot.HasInHand(CardId.SnowRabbit))
{ tributeId = CardId.SnowRabbit; } {tributeId = CardId.SnowRabbit;}
else if (Bot.HasInHand(CardId.JoyousSpring)) else if (Bot.HasInHand(CardId.JoyousSpring))
{ tributeId = CardId.JoyousSpring; } {tributeId = CardId.JoyousSpring;}
else if (Bot.HasInHand(CardId.Booster)) else if (Bot.HasInHand(CardId.Booster))
{ tributeId = CardId.Booster; } {tributeId = CardId.Booster;}
else if (Bot.HasInHand(CardId.Wagon)) else if (Bot.HasInHand(CardId.Wagon))
{ tributeId = CardId.Wagon; } {tributeId = CardId.Wagon;}
else if (Bot.HasInHand(CardId.Scales)) else if (Bot.HasInHand(CardId.Scales))
{ tributeId = CardId.Scales; } {tributeId = CardId.Scales;}
else if (Bot.HasInHand(CardId.LockBird)) else if (Bot.HasInHand(CardId.LockBird))
{ tributeId = CardId.LockBird; } {tributeId = CardId.LockBird;}
else if (Bot.HasInHand(CardId.MaxxG)) else if (Bot.HasInHand(CardId.MaxxG))
{ tributeId = CardId.MaxxG; } {tributeId = CardId.MaxxG;}
int needId = -1; int needId = -1;
if (Bot.HasInGraveyard(CardId.Soulpiercer)) if (Bot.HasInGraveyard(CardId.Soulpiercer))
{ {
if (Bot.HasInGraveyard(CardId.Scales) && !activate_Scales) if (Bot.HasInGraveyard(CardId.Scales) && !activate_Scales)
{ needId = CardId.Scales; } {needId = CardId.Scales;}
else else
{ needId = CardId.Soulpiercer; } {needId = CardId.Soulpiercer;}
} }
else if (Bot.HasInGraveyard(CardId.Masurawo)) else if (Bot.HasInGraveyard(CardId.Masurawo))
{ needId = CardId.Masurawo; } {needId = CardId.Masurawo;}
else if (Bot.HasInGraveyard(CardId.Sarutobi)) else if (Bot.HasInGraveyard(CardId.Sarutobi))
{ needId = CardId.Sarutobi; } {needId = CardId.Sarutobi;}
else if (Bot.HasInMonstersZone(CardId.Soulpiercer)) else if (Bot.HasInMonstersZone(CardId.Soulpiercer))
{ {
if (Bot.HasInGraveyard(CardId.Wakaushi)) if (Bot.HasInGraveyard(CardId.Wakaushi))
{ needId = CardId.Wakaushi; } {needId = CardId.Wakaushi;}
if (Bot.HasInGraveyard(CardId.Motorbike)) if (Bot.HasInGraveyard(CardId.Motorbike))
{ needId = CardId.Motorbike; } {needId = CardId.Motorbike;}
} }
if (GetZoneCards(CardLocation.Hand, Bot).Count(card => card != null && card.Id == CardId.Scales) + GetZoneCards(CardLocation.Grave, Bot).Count(card => card != null && card.Id == CardId.Scales) + GetZoneCards(CardLocation.Onfield, Bot).Count(card => card != null && card.Id == CardId.Scales) == 2 && GetZoneCards(CardLocation.Hand, Bot).Count(card => card != null && card.Id == CardId.Scales) >= 1 && !activate_Scales) if (GetZoneCards(CardLocation.Hand, Bot).Count(card => card != null && card.Id == CardId.Scales) + GetZoneCards(CardLocation.Grave, Bot).Count(card => card != null && card.Id == CardId.Scales) + GetZoneCards(CardLocation.Onfield, Bot).Count(card => card != null && card.Id == CardId.Scales) == 2 && GetZoneCards(CardLocation.Hand, Bot).Count(card => card != null && card.Id == CardId.Scales)>=1 && !activate_Scales)
{ {
tributeId = CardId.Scales; tributeId = CardId.Scales;
needId = CardId.Scales; needId = CardId.Scales;
} }
AI.SelectCard(tributeId); AI.SelectCard(tributeId);
AI.SelectNextCard(needId); AI.SelectNextCard(needId);
activate_Scarecrow = true; if (((!Bot.HasInHand(CardId.Wakaushi) && !Bot.HasInSpellZone(CardId.Wakaushi)) || activate_Wakaushi)
if (!summon_Scarecrow && (!Bot.HasInHand(CardId.Motorbike) || activate_Motorbike)
&& ((Bot.HasInHand(CardId.Wakaushi) || Bot.HasInSpellZone(CardId.Wakaushi)) && !activate_Wakaushi) && ((!Bot.HasInHand(CardId.Soulpeacemaker) && !Bot.HasInSpellZone(CardId.Soulpeacemaker)) || activate_Soulpeacemaker)
&& (Bot.HasInHand(CardId.Motorbike) && !activate_Motorbike) && (!Bot.HasInSpellZone(CardId.Benkei) || activate_Benkei)
&& ((Bot.HasInHand(CardId.Soulpeacemaker) || Bot.HasInSpellZone(CardId.Soulpeacemaker)) && !activate_Soulpeacemaker) && (needId == CardId.Soulpiercer)
&& (Bot.HasInSpellZone(CardId.Benkei) && !activate_Benkei) && (!activate_Wakaushi || !activate_Motorbike || !activate_Soulpeacemaker || !activate_Benkei)
&& (Bot.HasInHand(CardId.Soulpiercer) && !normal_summon)
&& ((Bot.HasInGraveyard(CardId.Scales) || Bot.HasInHand(CardId.Soulpiercer)) && !activate_Scales && !normal_summon)
) )
{ {
activate_Scarecrow = false; summon_Scarecrow2 = false;
summon_Scarecrow = false;
} }
else if (needId != CardId.Soulpiercer) activate_Scarecrow = true;
return true;
}
private bool ScarecrowLinkFunction2()
{
if (!summon_Scarecrow2)
{ {
activate_Scarecrow = false; summon_Scarecrow2 = true;
summon_Scarecrow = false; return true;
} }
return true; return false;
} }
private bool UnicornFunction() private bool UnicornFunction()
{ {
List<ClientCard> Enemycards = GetZoneCards(CardLocation.Onfield, Enemy); List<ClientCard> Enemycards = GetZoneCards(CardLocation.Onfield,Enemy);
if (Bot.Hand.Count == 0 || Enemycards.Count(card => card != null && !card.IsShouldNotBeTarget()) == 0) if (Bot.Hand.Count == 0 || Enemycards.Count(card => card != null && !card.IsShouldNotBeTarget()) == 0)
{ {
if (to_deck) to_deck = false; if (to_deck) to_deck = false;
...@@ -784,29 +806,29 @@ namespace WindBot.Game.AI.Decks ...@@ -784,29 +806,29 @@ namespace WindBot.Game.AI.Decks
} }
int tributeId = -1; int tributeId = -1;
if (Bot.HasInHand(CardId.PsyFrameDriver)) if (Bot.HasInHand(CardId.PsyFrameDriver))
{ tributeId = CardId.PsyFrameDriver; } {tributeId = CardId.PsyFrameDriver;}
else if (Bot.HasInHand(CardId.PsyFramegearGamma)) else if (Bot.HasInHand(CardId.PsyFramegearGamma))
{ tributeId = CardId.PsyFramegearGamma; } {tributeId = CardId.PsyFramegearGamma;}
else if (Bot.HasInHand(CardId.Benkei)) else if (Bot.HasInHand(CardId.Benkei))
{ tributeId = CardId.Benkei; } {tributeId = CardId.Benkei;}
else if (Bot.HasInHand(CardId.HauntedMansion)) else if (Bot.HasInHand(CardId.HauntedMansion))
{ tributeId = CardId.HauntedMansion; } {tributeId = CardId.HauntedMansion;}
else if (Bot.HasInHand(CardId.EffectVeiler)) else if (Bot.HasInHand(CardId.EffectVeiler))
{ tributeId = CardId.EffectVeiler; } {tributeId = CardId.EffectVeiler;}
else if (Bot.HasInHand(CardId.SnowRabbit)) else if (Bot.HasInHand(CardId.SnowRabbit))
{ tributeId = CardId.SnowRabbit; } {tributeId = CardId.SnowRabbit;}
else if (Bot.HasInHand(CardId.JoyousSpring)) else if (Bot.HasInHand(CardId.JoyousSpring))
{ tributeId = CardId.JoyousSpring; } {tributeId = CardId.JoyousSpring;}
else if (Bot.HasInHand(CardId.Booster)) else if (Bot.HasInHand(CardId.Booster))
{ tributeId = CardId.Booster; } {tributeId = CardId.Booster;}
else if (Bot.HasInHand(CardId.Wagon)) else if (Bot.HasInHand(CardId.Wagon))
{ tributeId = CardId.Wagon; } {tributeId = CardId.Wagon;}
else if (Bot.HasInHand(CardId.Scales)) else if (Bot.HasInHand(CardId.Scales))
{ tributeId = CardId.Scales; } {tributeId = CardId.Scales;}
else if (Bot.HasInHand(CardId.LockBird)) else if (Bot.HasInHand(CardId.LockBird))
{ tributeId = CardId.LockBird; } {tributeId = CardId.LockBird;}
else if (Bot.HasInHand(CardId.MaxxG)) else if (Bot.HasInHand(CardId.MaxxG))
{ tributeId = CardId.MaxxG; } {tributeId = CardId.MaxxG;}
if (to_deck) to_deck = false; if (to_deck) to_deck = false;
AI.SelectCard(tributeId); AI.SelectCard(tributeId);
return true; return true;
...@@ -815,7 +837,7 @@ namespace WindBot.Game.AI.Decks ...@@ -815,7 +837,7 @@ namespace WindBot.Game.AI.Decks
{ {
if (Card.Location != CardLocation.Hand || activate_Booster) if (Card.Location != CardLocation.Hand || activate_Booster)
return false; return false;
List<ClientCard> ChkCardsHand = Bot.Hand.GetMonsters().ToList(); List<ClientCard> ChkCardsHand = Bot.Hand.GetMonsters().ToList();
foreach (var card in ChkCardsHand) foreach (var card in ChkCardsHand)
{ {
if (card.Id == CardId.Motorbike && !activate_Motorbike) return false; if (card.Id == CardId.Motorbike && !activate_Motorbike) return false;
...@@ -825,7 +847,7 @@ namespace WindBot.Game.AI.Decks ...@@ -825,7 +847,7 @@ namespace WindBot.Game.AI.Decks
else if (card.Id == CardId.Wagon && (!activate_Wagon || !normal_summon)) return false; else if (card.Id == CardId.Wagon && (!activate_Wagon || !normal_summon)) return false;
else if (card.Id == CardId.Benkei && !activate_Benkei) return false; else if (card.Id == CardId.Benkei && !activate_Benkei) return false;
} }
List<ClientCard> ChkCardsSpell = GetZoneCards(CardLocation.SpellZone, Bot).Where(card => card != null && card.IsFaceup()).ToList(); List<ClientCard> ChkCardsSpell = GetZoneCards(CardLocation.SpellZone,Bot).Where(card => card != null && card.IsFaceup()).ToList();
foreach (var card in ChkCardsSpell) foreach (var card in ChkCardsSpell)
{ {
if (card.Id == CardId.Wakaushi && !activate_Wakaushi) return false; if (card.Id == CardId.Wakaushi && !activate_Wakaushi) return false;
...@@ -834,13 +856,13 @@ namespace WindBot.Game.AI.Decks ...@@ -834,13 +856,13 @@ namespace WindBot.Game.AI.Decks
else if (card.Id == CardId.Wakaushi && !activate_Wakaushi) return false; else if (card.Id == CardId.Wakaushi && !activate_Wakaushi) return false;
else if (card.Id == CardId.Benkei && !activate_Benkei) return false; else if (card.Id == CardId.Benkei && !activate_Benkei) return false;
} }
List<ClientCard> ChkCardsMonster = GetZoneCards(CardLocation.MonsterZone, Bot).Where(card => card != null && card.IsFaceup() && card.Level == 4).ToList(); List<ClientCard> ChkCardsMonster = GetZoneCards(CardLocation.MonsterZone,Bot).Where(card => card != null && card.IsFaceup() && card.Level == 4).ToList();
if (ChkCardsMonster.Count == 0) return false; if (ChkCardsMonster.Count == 0) return false;
foreach (var card in ChkCardsMonster) foreach (var card in ChkCardsMonster)
{ {
if (card.Id == CardId.Soulpiercer) return false; if (card.Id == CardId.Soulpiercer) return false;
} }
List<ClientCard> ChkCardsGrave = GetZoneCards(CardLocation.Grave, Bot).ToList(); List<ClientCard> ChkCardsGrave = GetZoneCards(CardLocation.Grave,Bot).ToList();
foreach (var card in ChkCardsGrave) foreach (var card in ChkCardsGrave)
{ {
if (card.Id == CardId.Soulpiercer && (Bot.HasInMonstersZone(CardId.Scarecrow) || Bot.HasInExtra(CardId.Scarecrow))) return false; if (card.Id == CardId.Soulpiercer && (Bot.HasInMonstersZone(CardId.Scarecrow) || Bot.HasInExtra(CardId.Scarecrow))) return false;
...@@ -852,7 +874,13 @@ namespace WindBot.Game.AI.Decks ...@@ -852,7 +874,13 @@ namespace WindBot.Game.AI.Decks
} }
private bool BoosterEquipFunction2() private bool BoosterEquipFunction2()
{ {
if (Bot.HasInExtra(CardId.IP) && p_summoned) return true; if (Bot.HasInExtra(CardId.IP) && p_summoned && !activate_Booster) return true;
return false;
}
private bool BoosterEquipFunction3()
{
List<ClientCard> cards = GetZoneCards(CardLocation.MonsterZone,Bot).Where(card => card != null && card.IsFaceup() && !FinalCards(card.Id) && card.Id != CardId.Scarecrow).ToList();
if (Bot.HasInMonstersZone(CardId.IP) && p_summoned && !activate_Booster && cards.Count() == 0) return true;
return false; return false;
} }
private bool BoosterFunction() private bool BoosterFunction()
...@@ -877,7 +905,7 @@ namespace WindBot.Game.AI.Decks ...@@ -877,7 +905,7 @@ namespace WindBot.Game.AI.Decks
{ {
if (Card.Location == CardLocation.MonsterZone) if (Card.Location == CardLocation.MonsterZone)
{ {
List<ClientCard> ChkCards = GetZoneCards(CardLocation.MonsterZone, Bot).Where(card => card != null && card.IsFaceup() && card.HasSetcode(0x9a)).ToList(); List<ClientCard> ChkCards = GetZoneCards(CardLocation.MonsterZone,Bot).Where(card => card != null && card.IsFaceup() && card.HasSetcode(0x9a)).ToList();
int targetid = -1; int targetid = -1;
if (!Bot.HasInHand(CardId.Motorbike) && !activate_Motorbike) if (!Bot.HasInHand(CardId.Motorbike) && !activate_Motorbike)
{ {
...@@ -902,9 +930,9 @@ namespace WindBot.Game.AI.Decks ...@@ -902,9 +930,9 @@ namespace WindBot.Game.AI.Decks
return false; return false;
int tributeId = -1; int tributeId = -1;
if (Bot.HasInMonstersZone(CardId.Wagon)) if (Bot.HasInMonstersZone(CardId.Wagon))
{ tributeId = CardId.Wagon; } {tributeId = CardId.Wagon;}
else if (Bot.HasInMonstersZone(CardId.Wakaushi)) else if (Bot.HasInMonstersZone(CardId.Wakaushi))
{ tributeId = CardId.Wakaushi; } {tributeId = CardId.Wakaushi;}
AI.SelectCard(tributeId); AI.SelectCard(tributeId);
return Bot.HasInMonstersZone(new[] { return Bot.HasInMonstersZone(new[] {
CardId.Wakaushi, CardId.Wakaushi,
...@@ -916,11 +944,17 @@ namespace WindBot.Game.AI.Decks ...@@ -916,11 +944,17 @@ namespace WindBot.Game.AI.Decks
if (Card.Location != CardLocation.Hand) if (Card.Location != CardLocation.Hand)
return false; return false;
int tributeId = -1; int tributeId = -1;
if (Bot.HasInMonstersZone(CardId.Scarecrow)) List<ClientCard> cards = Bot.GetMonstersInExtraZone().Where(card => card != null && card.Id == CardId.Scarecrow).ToList();
{ tributeId = CardId.Scarecrow; } if (cards.Count() > 0)
else if (Bot.HasInMonstersZone(CardId.Soulpiercer)) AI.SelectCard(cards);
{ tributeId = CardId.Soulpiercer; } else
AI.SelectCard(tributeId); {
if (Bot.HasInMonstersZone(CardId.Scarecrow))
{tributeId = CardId.Scarecrow;}
else if (Bot.HasInMonstersZone(CardId.Soulpiercer))
{tributeId = CardId.Soulpiercer;}
AI.SelectCard(tributeId);
}
return Bot.HasInMonstersZone(new[] { return Bot.HasInMonstersZone(new[] {
CardId.Scarecrow, CardId.Scarecrow,
CardId.Soulpiercer, CardId.Soulpiercer,
...@@ -932,9 +966,9 @@ namespace WindBot.Game.AI.Decks ...@@ -932,9 +966,9 @@ namespace WindBot.Game.AI.Decks
return false; return false;
int tributeId = -1; int tributeId = -1;
if (Bot.HasInMonstersZone(CardId.Masurawo)) if (Bot.HasInMonstersZone(CardId.Masurawo))
{ tributeId = CardId.Masurawo; } {tributeId = CardId.Masurawo;}
else if (Bot.HasInMonstersZone(CardId.Sarutobi)) else if (Bot.HasInMonstersZone(CardId.Sarutobi))
{ tributeId = CardId.Sarutobi; } {tributeId = CardId.Sarutobi;}
AI.SelectCard(tributeId); AI.SelectCard(tributeId);
return Bot.HasInMonstersZone(new[] { return Bot.HasInMonstersZone(new[] {
CardId.Masurawo, CardId.Masurawo,
...@@ -947,11 +981,11 @@ namespace WindBot.Game.AI.Decks ...@@ -947,11 +981,11 @@ namespace WindBot.Game.AI.Decks
{ {
int tributeId = -1; int tributeId = -1;
if (Bot.HasInMonstersZone(CardId.Soulpiercer)) if (Bot.HasInMonstersZone(CardId.Soulpiercer))
{ tributeId = CardId.Wakaushi; } {tributeId = CardId.Wakaushi;}
else if (Bot.HasInGraveyard(CardId.Soulpiercer) || !activate_Scales) else if (Bot.HasInGraveyard(CardId.Soulpiercer)||!activate_Scales)
{ tributeId = CardId.Scales; } {tributeId = CardId.Scales;}
else if (!Bot.HasInGraveyard(CardId.Soulpiercer) || activate_Scales) else if (!Bot.HasInGraveyard(CardId.Soulpiercer)||activate_Scales)
{ tributeId = CardId.Soulpiercer; } {tributeId = CardId.Soulpiercer;}
AI.SelectCard(tributeId); AI.SelectCard(tributeId);
activate_Soulpeacemaker = true; activate_Soulpeacemaker = true;
return true; return true;
...@@ -962,14 +996,10 @@ namespace WindBot.Game.AI.Decks ...@@ -962,14 +996,10 @@ namespace WindBot.Game.AI.Decks
{ {
if ((Bot.MonsterZone[4] != null && Bot.MonsterZone[4].Controller == 0 && !FinalCards(Bot.MonsterZone[4].Id)) && (Bot.MonsterZone[0] != null && Bot.MonsterZone[0].Controller == 0 && !FinalCards(Bot.MonsterZone[0].Id))) if ((Bot.MonsterZone[4] != null && Bot.MonsterZone[4].Controller == 0 && !FinalCards(Bot.MonsterZone[4].Id)) && (Bot.MonsterZone[0] != null && Bot.MonsterZone[0].Controller == 0 && !FinalCards(Bot.MonsterZone[0].Id)))
return false; return false;
int CardCount = 0; List<ClientCard> Pcards = GetZoneCards(CardLocation.Hand, Bot).Where(card => card != null && card.HasSetcode(0x9a) && card.Level > 1 && card.Level < 8).ToList();
foreach (ClientCard card in Bot.Hand.GetMonsters()) if (Pcards.Count() < 2 && !Bot.HasInMonstersZone(CardId.Soulpiercer)) return false;
{ List<ClientCard> Rcards = GetZoneCards(CardLocation.Removed, Bot).Where(card => card != null && card.Id == CardId.Regulus).ToList();
if (card.HasRace(CardRace.Machine) && (card.Level >= 2 && card.Level <= 7)) if (Bot.HasInHand(CardId.Regulus) || Bot.HasInGraveyard(CardId.Regulus) || Bot.HasInSpellZone(CardId.Regulus) || Bot.HasInMonstersZone(CardId.Regulus) || Rcards.Count() > 0) return false;
{ CardCount++; }
}
if (CardCount < 2 && !Bot.HasInMonstersZone(CardId.Soulpiercer)) { return false; }
if (Bot.HasInHand(CardId.Regulus) || Bot.HasInGraveyard(CardId.Regulus) || Bot.HasInSpellZone(CardId.Regulus) || Bot.HasInMonstersZone(CardId.Regulus)) return false;
bool linkchk = false; bool linkchk = false;
List<ClientCard> materials = new List<ClientCard>(); List<ClientCard> materials = new List<ClientCard>();
if (Bot.MonsterZone[6] != null && Bot.MonsterZone[6].Controller == 0 && Bot.MonsterZone[6].Id != CardId.Scarecrow && !FinalCards(Bot.MonsterZone[6].Id)) if (Bot.MonsterZone[6] != null && Bot.MonsterZone[6].Controller == 0 && Bot.MonsterZone[6].Id != CardId.Scarecrow && !FinalCards(Bot.MonsterZone[6].Id))
...@@ -988,13 +1018,13 @@ namespace WindBot.Game.AI.Decks ...@@ -988,13 +1018,13 @@ namespace WindBot.Game.AI.Decks
if (card == null || FinalCards(card.Id)) continue; if (card == null || FinalCards(card.Id)) continue;
else materials.Add(card); else materials.Add(card);
} }
if (materials.Count <= 1) return false; if (materials.Count <=1) return false;
AI.SelectMaterials(materials); AI.SelectMaterials(materials);
return ((Bot.GetMonstersInExtraZone().Count == 0 || linkchk) && !p_summoned && !activate_Genius); return ((Bot.GetMonstersInExtraZone().Count == 0 || linkchk) && !p_summoned && !activate_Genius);
} }
private bool GeniusFunction() private bool GeniusFunction()
{ {
if (ActivateDescription == Util.GetStringId(CardId.Genius, 1)) if (ActivateDescription == Util.GetStringId(CardId.Genius,1))
{ {
AI.SelectCard(CardId.Regulus); AI.SelectCard(CardId.Regulus);
activate_Genius = true; activate_Genius = true;
...@@ -1022,28 +1052,45 @@ namespace WindBot.Game.AI.Decks ...@@ -1022,28 +1052,45 @@ namespace WindBot.Game.AI.Decks
foreach (var card in TunrerCards) foreach (var card in TunrerCards)
{ {
if (card == null) continue; if (card == null) continue;
else if (materials.Count(ccard => ccard != null && ccard.Id == card.Id) <= 0) materials.Add(card); else if (materials.Count(ccard =>ccard != null && ccard.Id == card.Id) <= 0) materials.Add(card);
} }
} }
else else
{ {
foreach (var card in UnTunrercards) foreach (var card in UnTunrercards)
{ {
if (card == null) continue; if (card == null) continue;
else if (materials.Count(ccard => ccard != null && ccard.Id == card.Id) <= 0) materials.Add(card); else if (materials.Count(ccard =>ccard != null && ccard.Id == card.Id) <= 0) materials.Add(card);
} }
} }
if (materials.Count <= 1) return false; if (materials.Count <=1) return false;
AI.SelectMaterials(materials); AI.SelectMaterials(materials);
summon_Elf = true; summon_Elf = true;
return true; return true;
} }
private bool ElfFunction() private bool ElfFunction()
{ {
AI.SelectCard(CardId.Motorbike); if (Duel.Player == 0)
AI.SelectPosition(CardPosition.FaceUpDefence); {
activate_Elf = true; activate_Elf = true;
return Bot.HasInGraveyard(CardId.Motorbike); AI.SelectCard(CardId.Motorbike);
return Bot.HasInGraveyard(CardId.Motorbike);
}
List<ClientCard> cards1 = GetZoneCards(CardLocation.MonsterZone, Enemy);
List<ClientCard> cards2 = GetZoneCards(CardLocation.SpellZone, Enemy);
if (cards1.Count() > 0 || cards2.Count() >= 3)
{
if (Bot.HasInExtra(CardId.Unicorn) && Bot.HasInGraveyard(CardId.IP))
AI.SelectCard(CardId.IP);
else
{
AI.SelectCard(CardId.Motorbike);
AI.SelectPosition(CardPosition.FaceUpDefence);
}
activate_Elf = true;
return Bot.HasInGraveyard(CardId.Motorbike) || Bot.HasInGraveyard(CardId.IP);
}
return false;
} }
private bool RegulusFunction() private bool RegulusFunction()
{ {
...@@ -1051,9 +1098,9 @@ namespace WindBot.Game.AI.Decks ...@@ -1051,9 +1098,9 @@ namespace WindBot.Game.AI.Decks
{ {
int tributeId = -1; int tributeId = -1;
if (Bot.HasInGraveyard(CardId.Soulpiercer)) if (Bot.HasInGraveyard(CardId.Soulpiercer))
{ tributeId = CardId.Soulpiercer; } {tributeId = CardId.Soulpiercer;}
else if (Bot.HasInGraveyard(CardId.Motorbike)) else if (Bot.HasInGraveyard(CardId.Motorbike))
{ tributeId = CardId.Motorbike; } {tributeId = CardId.Motorbike;}
AI.SelectCard(tributeId); AI.SelectCard(tributeId);
activate_Genius = true; activate_Genius = true;
return true; return true;
...@@ -1094,9 +1141,19 @@ namespace WindBot.Game.AI.Decks ...@@ -1094,9 +1141,19 @@ namespace WindBot.Game.AI.Decks
} }
private bool IPLinkFunction() private bool IPLinkFunction()
{ {
List<ClientCard> cards = GetZoneCards(CardLocation.MonsterZone, Bot).Where(card => card != null && card.IsFaceup() && card.Id != CardId.Scarecrow && (card.Id != CardId.Elf || (card.Id == CardId.Elf && !summon_Elf)) && !FinalCards(card.Id)).ToList(); List<ClientCard> materials = GetZoneCards(CardLocation.MonsterZone,Bot).Where(card => card != null && card.IsFaceup() && card.Id != CardId.Scarecrow && (card.Id != CardId.Elf || (card.Id == CardId.Elf && !summon_Elf)) && !FinalCards(card.Id)).ToList();
if (cards.Count <= 1) return false; if (materials.Count <=1) return false;
AI.SelectMaterials(cards); if (Bot.MonsterZone[6] != null && Bot.MonsterZone[6].Controller == 0 && Bot.MonsterZone[6].HasType(CardType.Link))
{
if (Bot.MonsterZone[2] != null && FinalCards(Bot.MonsterZone[2].Id) && Bot.MonsterZone[4] != null && FinalCards(Bot.MonsterZone[4].Id))
return false;
}
else if (Bot.MonsterZone[5] != null && Bot.MonsterZone[5].Controller == 0 && Bot.MonsterZone[5].HasType(CardType.Link))
{
if (Bot.MonsterZone[2] != null && FinalCards(Bot.MonsterZone[2].Id) && Bot.MonsterZone[0] != null && FinalCards(Bot.MonsterZone[0].Id))
return false;
}
AI.SelectMaterials(materials);
return true; return true;
} }
private bool IPFunction() private bool IPFunction()
...@@ -1105,9 +1162,9 @@ namespace WindBot.Game.AI.Decks ...@@ -1105,9 +1162,9 @@ namespace WindBot.Game.AI.Decks
if (Bot.HasInExtra(CardId.Unicorn)) if (Bot.HasInExtra(CardId.Unicorn))
{ {
List<ClientCard> material = new List<ClientCard>(); List<ClientCard> material = new List<ClientCard>();
List<ClientCard> cards = GetZoneCards(CardLocation.MonsterZone, Bot).Where(card => card != null && card != Card && card.IsFaceup() && !FinalCards(card.Id) && card.Id != CardId.IP && card.Id != CardId.Scarecrow).ToList(); List<ClientCard> cards = GetZoneCards(CardLocation.MonsterZone,Bot).Where(card => card != null && card != Card && card.IsFaceup() && !FinalCards(card.Id) && card.Id != CardId.IP && card.Id != CardId.Scarecrow).ToList();
List<ClientCard> Enemycards = GetZoneCards(CardLocation.MonsterZone, Enemy); List<ClientCard> Enemycards = GetZoneCards(CardLocation.MonsterZone,Enemy);
if (activate_Sarutobi) Enemycards = GetZoneCards(CardLocation.Onfield, Enemy); if (activate_Sarutobi) Enemycards = GetZoneCards(CardLocation.Onfield,Enemy);
if (Bot.Hand.Count == 0 || Enemycards.Count(card => card != null && !card.IsShouldNotBeTarget()) == 0 || cards.Count == 0) return false; if (Bot.Hand.Count == 0 || Enemycards.Count(card => card != null && !card.IsShouldNotBeTarget()) == 0 || cards.Count == 0) return false;
bool linkchk = false; bool linkchk = false;
foreach (var card in cards) foreach (var card in cards)
...@@ -1120,7 +1177,7 @@ namespace WindBot.Game.AI.Decks ...@@ -1120,7 +1177,7 @@ namespace WindBot.Game.AI.Decks
} }
} }
AI.SelectCard(CardId.Unicorn); AI.SelectCard(CardId.Unicorn);
material.Insert(0, Card); material.Insert(0,Card);
AI.SelectMaterials(material); AI.SelectMaterials(material);
if (!to_deck) to_deck = true; if (!to_deck) to_deck = true;
return linkchk; return linkchk;
...@@ -1129,7 +1186,7 @@ namespace WindBot.Game.AI.Decks ...@@ -1129,7 +1186,7 @@ namespace WindBot.Game.AI.Decks
} }
private bool SarutobiFunction() private bool SarutobiFunction()
{ {
List<ClientCard> Enemycards = GetZoneCards(CardLocation.SpellZone, Enemy); List<ClientCard> Enemycards = GetZoneCards(CardLocation.SpellZone,Enemy);
if (Enemycards.Count(card => card != null && !card.IsShouldNotBeTarget()) == 0 || to_deck) return false; if (Enemycards.Count(card => card != null && !card.IsShouldNotBeTarget()) == 0 || to_deck) return false;
AI.SelectCard(Enemycards); AI.SelectCard(Enemycards);
activate_Sarutobi = true; activate_Sarutobi = true;
......
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