Commit 05925209 authored by mercury233's avatar mercury233

Merge branch 'master' of https://github.com/IceYGO/windbot

parents 096bd7ed eab7b31c
using System; using System;
using WindBot.Game.AI.Enums; using WindBot.Game.AI.Enums;
using YGOSharp.OCGWrapper.Enums;
namespace WindBot.Game.AI namespace WindBot.Game.AI
{ {
...@@ -34,7 +35,7 @@ namespace WindBot.Game.AI ...@@ -34,7 +35,7 @@ namespace WindBot.Game.AI
/// </summary> /// </summary>
public static bool IsShouldNotBeTarget(this ClientCard card) public static bool IsShouldNotBeTarget(this ClientCard card)
{ {
return !card.IsDisabled() && Enum.IsDefined(typeof(ShouldNotBeTarget), card.Id); return !card.IsDisabled() && !card.HasType(CardType.Normal) && Enum.IsDefined(typeof(ShouldNotBeTarget), card.Id);
} }
/// <summary> /// <summary>
......
...@@ -184,7 +184,7 @@ namespace WindBot.Game.AI.Decks ...@@ -184,7 +184,7 @@ namespace WindBot.Game.AI.Decks
private bool RedEyesFusionEffect() private bool RedEyesFusionEffect()
{ {
if (Bot.HasInMonstersZone(CardId.DragunofRedEyes)) if (Bot.HasInMonstersZone(new[] { CardId.DragunofRedEyes, CardId.RedEyesBDragon }))
{ // you don't want to use DragunofRedEyes which is treated as RedEyesBDragon as fusion material { // you don't want to use DragunofRedEyes which is treated as RedEyesBDragon as fusion material
if (Util.GetBotAvailZonesFromExtraDeck() == 0) if (Util.GetBotAvailZonesFromExtraDeck() == 0)
return false; return false;
...@@ -319,7 +319,15 @@ namespace WindBot.Game.AI.Decks ...@@ -319,7 +319,15 @@ namespace WindBot.Game.AI.Decks
} }
else else
{ {
// TODO int[] costs = new[] {
CardId.RedEyesInsight,
CardId.RedEyesFusion
};
if (Bot.HasInHand(costs))
{
AI.SelectCard(costs);
return true;
}
return false; return false;
} }
} }
...@@ -354,7 +362,7 @@ namespace WindBot.Game.AI.Decks ...@@ -354,7 +362,7 @@ namespace WindBot.Game.AI.Decks
private bool MagicalizedFusionEffect() private bool MagicalizedFusionEffect()
{ {
if (Bot.HasInMonstersZone(CardId.DragunofRedEyes)) if (Bot.HasInMonstersZone(new[] { CardId.DragunofRedEyes, CardId.RedEyesBDragon }))
{ // you don't want to use DragunofRedEyes which is treated as RedEyesBDragon as fusion material { // you don't want to use DragunofRedEyes which is treated as RedEyesBDragon as fusion material
if (Util.GetBotAvailZonesFromExtraDeck() == 0) if (Util.GetBotAvailZonesFromExtraDeck() == 0)
return false; return false;
...@@ -367,6 +375,8 @@ namespace WindBot.Game.AI.Decks ...@@ -367,6 +375,8 @@ namespace WindBot.Game.AI.Decks
private bool PredaplantVerteAnacondaEffect() private bool PredaplantVerteAnacondaEffect()
{ {
if (ActivateDescription == Util.GetStringId(CardId.PredaplantVerteAnaconda, 0))
return false;
AI.SelectCard(CardId.RedEyesFusion); AI.SelectCard(CardId.RedEyesFusion);
AI.SelectMaterials(CardLocation.Deck); AI.SelectMaterials(CardLocation.Deck);
return true; return true;
...@@ -450,7 +460,6 @@ namespace WindBot.Game.AI.Decks ...@@ -450,7 +460,6 @@ namespace WindBot.Game.AI.Decks
CardId.AshBlossomJoyousSpring, CardId.AshBlossomJoyousSpring,
CardId.SeaMonsterofTheseus, CardId.SeaMonsterofTheseus,
CardId.MechaPhantomBeastOLionToken, CardId.MechaPhantomBeastOLionToken,
CardId.RedEyesBDragon,
CardId.DarkMagician, CardId.DarkMagician,
CardId.ImdukTheWorldChaliceDragon, CardId.ImdukTheWorldChaliceDragon,
CardId.Sangan, CardId.Sangan,
...@@ -486,7 +495,7 @@ namespace WindBot.Game.AI.Decks ...@@ -486,7 +495,7 @@ namespace WindBot.Game.AI.Decks
private bool TrapSet() private bool TrapSet()
{ {
if (Bot.HasInMonstersZone(CardId.DragunofRedEyes) && Bot.GetHandCount() == 1) if (Bot.HasInMonstersZone(new[] { CardId.DragunofRedEyes, CardId.RedEyesBDragon }) && Bot.GetHandCount() == 1)
return false; return false;
AI.SelectPlace(Zones.z0 + Zones.z1 + Zones.z3 + Zones.z4); AI.SelectPlace(Zones.z0 + Zones.z1 + Zones.z3 + Zones.z4);
return true; return true;
......
...@@ -184,6 +184,7 @@ namespace WindBot.Game.AI.Decks ...@@ -184,6 +184,7 @@ namespace WindBot.Game.AI.Decks
private bool JetSynchronUsed = false; private bool JetSynchronUsed = false;
private bool ScrapWyvernUsed = false; private bool ScrapWyvernUsed = false;
private bool MaskedChameleonUsed = false; private bool MaskedChameleonUsed = false;
private int ShootingRiserDragonCount = 0;
private int[] HandCosts = new[] private int[] HandCosts = new[]
{ {
...@@ -217,6 +218,7 @@ namespace WindBot.Game.AI.Decks ...@@ -217,6 +218,7 @@ namespace WindBot.Game.AI.Decks
JetSynchronUsed = false; JetSynchronUsed = false;
ScrapWyvernUsed = false; ScrapWyvernUsed = false;
MaskedChameleonUsed = false; MaskedChameleonUsed = false;
ShootingRiserDragonCount = 0;
} }
public override void OnChainEnd() public override void OnChainEnd()
...@@ -843,12 +845,15 @@ namespace WindBot.Game.AI.Decks ...@@ -843,12 +845,15 @@ namespace WindBot.Game.AI.Decks
} }
else else
{ {
if (Duel.LastChainPlayer == 0 || ShootingRiserDragonCount >= 10)
return false;
ShootingRiserDragonCount++;
AI.SelectCard(new[] { AI.SelectCard(new[] {
CardId.BlackRoseMoonlightDragon, CardId.BlackRoseMoonlightDragon,
CardId.ScrapDragon, CardId.ScrapDragon,
CardId.PSYFramelordOmega CardId.PSYFramelordOmega
}); });
return Duel.LastChainPlayer != 0; return true;
} }
} }
......
...@@ -106,7 +106,7 @@ namespace WindBot.Game.AI.Decks ...@@ -106,7 +106,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor(ExecutorType.Activate, CardId.Lumina, Luminaeff); AddExecutor(ExecutorType.Activate, CardId.Lumina, Luminaeff);
//activate //activate
AddExecutor(ExecutorType.Activate, CardId.GlowUpBulb, GlowUpBulbeff); AddExecutor(ExecutorType.Activate, CardId.GlowUpBulb, GlowUpBulbeff);
AddExecutor(ExecutorType.Activate, CardId.TG_WonderMagician); AddExecutor(ExecutorType.Activate, CardId.TG_WonderMagician, TG_WonderMagicianeff);
AddExecutor(ExecutorType.Activate, CardId.CoralDragon, CoralDragoneff); AddExecutor(ExecutorType.Activate, CardId.CoralDragon, CoralDragoneff);
AddExecutor(ExecutorType.Activate, CardId.RedWyvern, RedWyverneff); AddExecutor(ExecutorType.Activate, CardId.RedWyvern, RedWyverneff);
AddExecutor(ExecutorType.Activate, CardId.CrystalWingSynchroDragon, CrystalWingSynchroDragoneff); AddExecutor(ExecutorType.Activate, CardId.CrystalWingSynchroDragon, CrystalWingSynchroDragoneff);
...@@ -230,6 +230,7 @@ namespace WindBot.Game.AI.Decks ...@@ -230,6 +230,7 @@ namespace WindBot.Game.AI.Decks
} }
int Ultimate_ss = 0; int Ultimate_ss = 0;
int Enemy_atk = 0; int Enemy_atk = 0;
int TG_WonderMagician_count = 0;
bool Pillused = false; bool Pillused = false;
bool CrystronNeedlefibereff_used = false; bool CrystronNeedlefibereff_used = false;
bool OvertexCoatlseff_used = false; bool OvertexCoatlseff_used = false;
...@@ -274,6 +275,7 @@ namespace WindBot.Game.AI.Decks ...@@ -274,6 +275,7 @@ namespace WindBot.Game.AI.Decks
ShaddollSquamata_used = false; ShaddollSquamata_used = false;
ShaddollDragon_used = false; ShaddollDragon_used = false;
ShaddollHedgehog_used = false; ShaddollHedgehog_used = false;
TG_WonderMagician_count = 0;
} }
private bool Luminasummon() private bool Luminasummon()
...@@ -572,7 +574,11 @@ namespace WindBot.Game.AI.Decks ...@@ -572,7 +574,11 @@ namespace WindBot.Game.AI.Decks
return false; return false;
} }
private bool TG_WonderMagicianeff()
{
TG_WonderMagician_count++;
return TG_WonderMagician_count <= 10;
}
private bool AllureofDarkness() private bool AllureofDarkness()
{ {
IList<ClientCard> materials = Bot.Hand; IList<ClientCard> materials = Bot.Hand;
......
...@@ -181,6 +181,7 @@ namespace WindBot.Game.AI.Decks ...@@ -181,6 +181,7 @@ namespace WindBot.Game.AI.Decks
private bool CymbalSkeletonUsed = false; private bool CymbalSkeletonUsed = false;
private bool BorrelswordDragonUsed = false; private bool BorrelswordDragonUsed = false;
private ClientCard RustyBardicheTarget = null; private ClientCard RustyBardicheTarget = null;
private int ShootingRiserDragonCount = 0;
private int[] HandCosts = new[] private int[] HandCosts = new[]
{ {
...@@ -214,6 +215,7 @@ namespace WindBot.Game.AI.Decks ...@@ -214,6 +215,7 @@ namespace WindBot.Game.AI.Decks
CymbalSkeletonUsed = false; CymbalSkeletonUsed = false;
BorrelswordDragonUsed = false; BorrelswordDragonUsed = false;
RustyBardicheTarget = null; RustyBardicheTarget = null;
ShootingRiserDragonCount = 0;
} }
public override void OnChainEnd() public override void OnChainEnd()
...@@ -609,7 +611,10 @@ namespace WindBot.Game.AI.Decks ...@@ -609,7 +611,10 @@ namespace WindBot.Game.AI.Decks
} }
else else
{ {
return Duel.LastChainPlayer != 0; if (Duel.LastChainPlayer == 0)
return false;
ShootingRiserDragonCount++;
return ShootingRiserDragonCount <= 10;
} }
} }
......
...@@ -1096,6 +1096,7 @@ namespace WindBot.Game.AI.Decks ...@@ -1096,6 +1096,7 @@ namespace WindBot.Game.AI.Decks
{ {
if (Duel.Phase != DuelPhase.Main1) return false; if (Duel.Phase != DuelPhase.Main1) return false;
if (Duel.Turn == 1) return false; if (Duel.Turn == 1) return false;
if (wasStallioActivated) return false;
List<ClientCard> material_list = new List<ClientCard>(); List<ClientCard> material_list = new List<ClientCard>();
List<ClientCard> bot_monster = Bot.GetMonsters(); List<ClientCard> bot_monster = Bot.GetMonsters();
......
...@@ -6,7 +6,7 @@ using WindBot.Game.AI; ...@@ -6,7 +6,7 @@ using WindBot.Game.AI;
namespace WindBot.Game.AI.Decks namespace WindBot.Game.AI.Decks
{ {
[Deck("Toadally Awesome", "AI_ToadallyAwesome", "OutDated")] [Deck("Toadally Awesome", "AI_ToadallyAwesome")]
public class ToadallyAwesomeExecutor : DefaultExecutor public class ToadallyAwesomeExecutor : DefaultExecutor
{ {
public class CardId public class CardId
......
...@@ -6,7 +6,7 @@ using WindBot.Game.AI; ...@@ -6,7 +6,7 @@ using WindBot.Game.AI;
namespace WindBot.Game.AI.Decks namespace WindBot.Game.AI.Decks
{ {
[Deck("Zoodiac", "AI_Zoodiac", "OutDated")] [Deck("Zoodiac", "AI_Zoodiac")]
class ZoodiacExecutor : DefaultExecutor class ZoodiacExecutor : DefaultExecutor
{ {
public class CardId public class CardId
......
...@@ -54,5 +54,6 @@ ...@@ -54,5 +54,6 @@
PyroxeneFusion = 55824220, PyroxeneFusion = 55824220,
FragmentFusion = 72029628, FragmentFusion = 72029628,
NecroFusion = 81223446, NecroFusion = 81223446,
PredaplantVerteAnaconda = 70369116,
} }
} }
...@@ -46,6 +46,8 @@ ...@@ -46,6 +46,8 @@
RaidraptorUltimateFalcon = 86221741, RaidraptorUltimateFalcon = 86221741,
DisdainfulBirdofParadise = 27240101, DisdainfulBirdofParadise = 27240101,
DarkestDiabolosLordOfTheLair = 50383626, DarkestDiabolosLordOfTheLair = 50383626,
Blackwing_FullArmoredWing = 54082269 Blackwing_FullArmoredWing = 54082269,
DragunofRedEyes = 37818794,
RedEyesBDragon = 74677422, // sometimes the name of DragunofRedEyes will be changed to RedEyesBDragon
} }
} }
...@@ -336,6 +336,11 @@ namespace WindBot.Game ...@@ -336,6 +336,11 @@ namespace WindBot.Game
return ids.Contains(Id) || Alias != 0 && ids.Contains(Alias); return ids.Contains(Id) || Alias != 0 && ids.Contains(Alias);
} }
public bool IsOriginalCode(int id)
{
return Id == id || Alias - Id < 10 && Alias == id;
}
public bool HasXyzMaterial() public bool HasXyzMaterial()
{ {
return Overlays.Count > 0; return Overlays.Count > 0;
......
...@@ -306,10 +306,11 @@ namespace WindBot.Game ...@@ -306,10 +306,11 @@ namespace WindBot.Game
public int GetRemainingCount(int cardId, int initialCount) public int GetRemainingCount(int cardId, int initialCount)
{ {
int remaining = initialCount; int remaining = initialCount;
remaining = remaining - Hand.Count(card => card != null && card.IsCode(cardId)); remaining = remaining - Hand.Count(card => card != null && card.IsOriginalCode(cardId));
remaining = remaining - SpellZone.Count(card => card != null && card.IsCode(cardId)); remaining = remaining - SpellZone.Count(card => card != null && card.IsOriginalCode(cardId));
remaining = remaining - Graveyard.Count(card => card != null && card.IsCode(cardId)); remaining = remaining - MonsterZone.Count(card => card != null && card.IsOriginalCode(cardId));
remaining = remaining - Banished.Count(card => card != null && card.IsCode(cardId)); remaining = remaining - Graveyard.Count(card => card != null && card.IsOriginalCode(cardId));
remaining = remaining - Banished.Count(card => card != null && card.IsOriginalCode(cardId));
return (remaining < 0) ? 0 : remaining; return (remaining < 0) ? 0 : remaining;
} }
......
...@@ -75,6 +75,8 @@ WindBot can run as a "server", provide a http interface to create bot. ...@@ -75,6 +75,8 @@ WindBot can run as a "server", provide a http interface to create bot.
* DarkMagician * DarkMagician
* Dragun
* Dragunity * Dragunity
* GrenMajuThunderBoarder * GrenMajuThunderBoarder
...@@ -99,7 +101,7 @@ WindBot can run as a "server", provide a http interface to create bot. ...@@ -99,7 +101,7 @@ WindBot can run as a "server", provide a http interface to create bot.
* ST1732 * ST1732
* Toadally Awesome (old lflist, master rule 3 only) * Toadally Awesome
* Trickstar * Trickstar
...@@ -107,7 +109,7 @@ WindBot can run as a "server", provide a http interface to create bot. ...@@ -107,7 +109,7 @@ WindBot can run as a "server", provide a http interface to create bot.
* Zexal Weapons * Zexal Weapons
* Zoodiac (old lflist, master rule 3 only) * Zoodiac
### Unfinished decks ### Unfinished decks
......
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