Commit 36a817aa authored by Momobako's avatar Momobako

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

parents 34f1c0db b489285e
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
70368879 70368879
71490127 71490127
73628505 73628505
73628505
81439173 81439173
5318639 5318639
5318639 5318639
...@@ -32,6 +31,7 @@ ...@@ -32,6 +31,7 @@
60004971 60004971
62265044 62265044
62265044 62265044
62265044
44095762 44095762
58120309 58120309
58120309 58120309
......
...@@ -6,6 +6,9 @@ ...@@ -6,6 +6,9 @@
74852097 74852097
74852097 74852097
74852097 74852097
81823360
81823360
81823360
75195825 75195825
75195825 75195825
75195825 75195825
...@@ -15,9 +18,6 @@ ...@@ -15,9 +18,6 @@
33256280 33256280
33256280 33256280
33256280 33256280
51934376
51934376
51934376
85138716 85138716
85138716 85138716
85138716 85138716
......
...@@ -121,9 +121,9 @@ namespace WindBot.Game.AI ...@@ -121,9 +121,9 @@ namespace WindBot.Game.AI
return count; return count;
} }
public static IList<ClientCard> GetMonsters(this IEnumerable<ClientCard> cards) public static List<ClientCard> GetMonsters(this IEnumerable<ClientCard> cards)
{ {
IList<ClientCard> cardlist = new List<ClientCard>(); List<ClientCard> cardlist = new List<ClientCard>();
foreach (ClientCard card in cards) foreach (ClientCard card in cards)
{ {
...@@ -135,9 +135,9 @@ namespace WindBot.Game.AI ...@@ -135,9 +135,9 @@ namespace WindBot.Game.AI
return cardlist; return cardlist;
} }
public static IList<ClientCard> GetFaceupPendulumMonsters(this IEnumerable<ClientCard> cards) public static List<ClientCard> GetFaceupPendulumMonsters(this IEnumerable<ClientCard> cards)
{ {
IList<ClientCard> cardlist = new List<ClientCard>(); List<ClientCard> cardlist = new List<ClientCard>();
foreach (ClientCard card in cards) foreach (ClientCard card in cards)
{ {
......
...@@ -10,7 +10,7 @@ namespace WindBot.Game.AI ...@@ -10,7 +10,7 @@ namespace WindBot.Game.AI
/// </summary> /// </summary>
public static bool IsMonsterInvincible(this ClientCard card) public static bool IsMonsterInvincible(this ClientCard card)
{ {
return Enum.IsDefined(typeof(InvincibleMonster), card.Id); return !card.IsDisabled() && Enum.IsDefined(typeof(InvincibleMonster), card.Id);
} }
/// <summary> /// <summary>
...@@ -18,7 +18,15 @@ namespace WindBot.Game.AI ...@@ -18,7 +18,15 @@ namespace WindBot.Game.AI
/// </summary> /// </summary>
public static bool IsMonsterDangerous(this ClientCard card) public static bool IsMonsterDangerous(this ClientCard card)
{ {
return Enum.IsDefined(typeof(DangerousMonster), card.Id); return !card.IsDisabled() && Enum.IsDefined(typeof(DangerousMonster), card.Id);
}
/// <summary>
/// Do this monster prevents activation of opponent's effect monsters in battle?
/// </summary>
public static bool IsMonsterHasPreventActivationEffectInBattle(this ClientCard card)
{
return !card.IsDisabled() && Enum.IsDefined(typeof(PreventActivationEffectInBattle), card.Id);
} }
public static bool IsFloodgate(this ClientCard card) public static bool IsFloodgate(this ClientCard card)
......
...@@ -12,26 +12,26 @@ namespace WindBot.Game.AI.Decks ...@@ -12,26 +12,26 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int KrisTheCrackOfDawn = 81105204; public const int KrisTheCrackOfDawn = 81105204;
public static int SiroccoTheDawn = 75498415; public const int SiroccoTheDawn = 75498415;
public static int ShuraTheBlueFlame = 58820853; public const int ShuraTheBlueFlame = 58820853;
public static int BoraTheSpear = 49003716; public const int BoraTheSpear = 49003716;
public static int KalutTheMoonShadow = 85215458; public const int KalutTheMoonShadow = 85215458;
public static int GaleTheWhirlwind = 2009101; public const int GaleTheWhirlwind = 2009101;
public static int BlizzardTheFarNorth = 22835145; public const int BlizzardTheFarNorth = 22835145;
public static int MistralTheSilverShield = 46710683; public const int MistralTheSilverShield = 46710683;
public static int Raigeki = 12580477; public const int Raigeki = 12580477;
public static int DarkHole = 53129443; public const int DarkHole = 53129443;
public static int MysticalSpaceTyphoon = 5318639; public const int MysticalSpaceTyphoon = 5318639;
public static int BlackWhirlwind = 91351370; public const int BlackWhirlwind = 91351370;
public static int MirrorForce = 44095762; public const int MirrorForce = 44095762;
public static int DeltaCrowAntiReverse = 59839761; public const int DeltaCrowAntiReverse = 59839761;
public static int DimensionalPrison = 70342110; public const int DimensionalPrison = 70342110;
public static int SilverwindTheAscendant = 33236860; public const int SilverwindTheAscendant = 33236860;
public static int BlackWingedDragon = 9012916; public const int BlackWingedDragon = 9012916;
public static int ArmorMaster = 69031175; public const int ArmorMaster = 69031175;
public static int ArmedWing = 76913983; public const int ArmedWing = 76913983;
public static int GramTheShiningStar = 17377751; public const int GramTheShiningStar = 17377751;
} }
public BlackwingExecutor(GameAI ai, Duel duel) public BlackwingExecutor(GameAI ai, Duel duel)
...@@ -82,13 +82,6 @@ namespace WindBot.Game.AI.Decks ...@@ -82,13 +82,6 @@ namespace WindBot.Game.AI.Decks
AddExecutor(ExecutorType.Repos, DefaultMonsterRepos); AddExecutor(ExecutorType.Repos, DefaultMonsterRepos);
} }
public override bool OnPreBattleBetween(ClientCard attacker, ClientCard defender)
{
if (defender.IsMonsterInvincible() && !defender.IsMonsterDangerous() && attacker.Id == 83104731)
return true;
return base.OnPreBattleBetween(attacker, defender);
}
private bool ShuraTheBlueFlameSummon() private bool ShuraTheBlueFlameSummon()
{ {
if (Bot.HasInMonstersZone(CardId.SiroccoTheDawn) && Bot.GetMonsters().GetHighestAttackMonster().Attack < 3800) if (Bot.HasInMonstersZone(CardId.SiroccoTheDawn) && Bot.GetMonsters().GetHighestAttackMonster().Attack < 3800)
......
This diff is collapsed.
...@@ -11,28 +11,28 @@ namespace WindBot.Game.AI.Decks ...@@ -11,28 +11,28 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int LavaGolem = 102380; public const int LavaGolem = 102380;
public static int ReflectBounder = 2851070; public const int ReflectBounder = 2851070;
public static int FencingFireFerret = 97396380; public const int FencingFireFerret = 97396380;
public static int BlastSphere = 26302522; public const int BlastSphere = 26302522;
public static int Marshmallon = 31305911; public const int Marshmallon = 31305911;
public static int SpiritReaper = 23205979; public const int SpiritReaper = 23205979;
public static int NaturiaBeans = 44789585; public const int NaturiaBeans = 44789585;
public static int ThunderShort = 20264508; public const int ThunderShort = 20264508;
public static int Ookazi = 19523799; public const int Ookazi = 19523799;
public static int GoblinThief = 45311864; public const int GoblinThief = 45311864;
public static int TremendousFire = 46918794; public const int TremendousFire = 46918794;
public static int SwordsOfRevealingLight = 72302403; public const int SwordsOfRevealingLight = 72302403;
public static int SupremacyBerry = 98380593; public const int SupremacyBerry = 98380593;
public static int ChainEnergy = 79323590; public const int ChainEnergy = 79323590;
public static int DarkRoomofNightmare = 85562745; public const int DarkRoomofNightmare = 85562745;
public static int PoisonOfTheOldMan = 8842266; public const int PoisonOfTheOldMan = 8842266;
public static int OjamaTrio = 29843091; public const int OjamaTrio = 29843091;
public static int Ceasefire = 36468556; public const int Ceasefire = 36468556;
public static int MagicCylinder = 62279055; public const int MagicCylinder = 62279055;
public static int MinorGoblinOfficial = 1918087; public const int MinorGoblinOfficial = 1918087;
public static int ChainBurst = 48276469; public const int ChainBurst = 48276469;
public static int SkullInvitation = 98139712; public const int SkullInvitation = 98139712;
} }
public BurnExecutor(GameAI ai, Duel duel) public BurnExecutor(GameAI ai, Duel duel)
......
...@@ -14,33 +14,33 @@ namespace WindBot.Game.AI.Decks ...@@ -14,33 +14,33 @@ namespace WindBot.Game.AI.Decks
public class CardId public class CardId
{ {
public static int CyberLaserDragon = 4162088; public const int CyberLaserDragon = 4162088;
public static int CyberBarrierDragon = 68774379; public const int CyberBarrierDragon = 68774379;
public static int CyberDragon = 70095154; public const int CyberDragon = 70095154;
public static int CyberDragonDrei = 59281922; public const int CyberDragonDrei = 59281922;
public static int CyberPhoenix = 3370104; public const int CyberPhoenix = 3370104;
public static int ArmoredCybern = 67159705; public const int ArmoredCybern = 67159705;
public static int ProtoCyberDragon = 26439287; public const int ProtoCyberDragon = 26439287;
public static int CyberKirin = 76986005; public const int CyberKirin = 76986005;
public static int CyberDragonCore = 23893227; public const int CyberDragonCore = 23893227;
public static int CyberValley = 3657444; public const int CyberValley = 3657444;
public static int Raigeki = 12580477; public const int Raigeki = 12580477;
public static int DarkHole = 53129443; public const int DarkHole = 53129443;
public static int DifferentDimensionCapsule = 11961740; public const int DifferentDimensionCapsule = 11961740;
public static int Polymerization = 24094653; public const int Polymerization = 24094653;
public static int PowerBond = 37630732; public const int PowerBond = 37630732;
public static int EvolutionBurst = 52875873; public const int EvolutionBurst = 52875873;
public static int PhotonGeneratorUnit = 66607691; public const int PhotonGeneratorUnit = 66607691;
public static int DeFusion = 95286165; public const int DeFusion = 95286165;
public static int BottomlessTrapHole = 29401950; public const int BottomlessTrapHole = 29401950;
public static int MirrorForce = 44095762; public const int MirrorForce = 44095762;
public static int AttackReflectorUnit = 91989718; public const int AttackReflectorUnit = 91989718;
public static int CyberneticHiddenTechnology = 92773018; public const int CyberneticHiddenTechnology = 92773018;
public static int CallOfTheHaunted = 97077563; public const int CallOfTheHaunted = 97077563;
public static int SevenToolsOfTheBandit = 3819470; public const int SevenToolsOfTheBandit = 3819470;
public static int CyberTwinDragon = 74157028; public const int CyberTwinDragon = 74157028;
public static int CyberEndDragon = 1546123; public const int CyberEndDragon = 1546123;
public static int CyberDragonNova = 58069384; public const int CyberDragonNova = 58069384;
} }
public CyberDragonExecutor(GameAI ai, Duel duel) public CyberDragonExecutor(GameAI ai, Duel duel)
...@@ -96,7 +96,7 @@ namespace WindBot.Game.AI.Decks ...@@ -96,7 +96,7 @@ namespace WindBot.Game.AI.Decks
private bool Capsule() private bool Capsule()
{ {
List<int> SelectedCard = new List<int>(); IList<int> SelectedCard = new List<int>();
SelectedCard.Add(CardId.PowerBond); SelectedCard.Add(CardId.PowerBond);
SelectedCard.Add(CardId.DarkHole); SelectedCard.Add(CardId.DarkHole);
SelectedCard.Add(CardId.Raigeki); SelectedCard.Add(CardId.Raigeki);
......
...@@ -11,8 +11,8 @@ namespace WindBot.Game.AI.Decks ...@@ -11,8 +11,8 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int LeoWizard = 4392470; public const int LeoWizard = 4392470;
public static int Bunilla = 69380702; public const int Bunilla = 69380702;
} }
public DoEverythingExecutor(GameAI ai, Duel duel) public DoEverythingExecutor(GameAI ai, Duel duel)
......
...@@ -11,32 +11,32 @@ namespace WindBot.Game.AI.Decks ...@@ -11,32 +11,32 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int StardustDragonAssaultMode = 61257789; public const int StardustDragonAssaultMode = 61257789;
public static int DragunityArmaMysletainn = 876330; public const int DragunityArmaMysletainn = 876330;
public static int AssaultBeast = 3431737; public const int AssaultBeast = 3431737;
public static int DragunityDux = 28183605; public const int DragunityDux = 28183605;
public static int DragunityPhalanx = 59755122; public const int DragunityPhalanx = 59755122;
public static int AssaultTeleport = 29863101; public const int AssaultTeleport = 29863101;
public static int CardsOfConsonance = 39701395; public const int CardsOfConsonance = 39701395;
public static int UpstartGoblin = 70368879; public const int UpstartGoblin = 70368879;
public static int DragonsMirror = 71490127; public const int DragonsMirror = 71490127;
public static int Terraforming = 73628505; public const int Terraforming = 73628505;
public static int FoolishBurial = 81439173; public const int FoolishBurial = 81439173;
public static int MonsterReborn = 83764718; public const int MonsterReborn = 83764718;
public static int MysticalSpaceTyphoon = 5318639; public const int MysticalSpaceTyphoon = 5318639;
public static int FireFormationTenki = 57103969; public const int FireFormationTenki = 57103969;
public static int DragunitySpearOfDestiny = 60004971; public const int DragunitySpearOfDestiny = 60004971;
public static int DragonRavine = 62265044; public const int DragonRavine = 62265044;
public static int MirrorForce = 44095762; public const int MirrorForce = 44095762;
public static int StarlightRoad = 58120309; public const int StarlightRoad = 58120309;
public static int DimensionalPrison = 70342110; public const int DimensionalPrison = 70342110;
public static int AssaultModeActivate = 80280737; public const int AssaultModeActivate = 80280737;
public static int FiveHeadedDragon = 99267150; public const int FiveHeadedDragon = 99267150;
public static int CrystalWingSynchroDragon = 50954680; public const int CrystalWingSynchroDragon = 50954680;
public static int ScrapDragon = 76774528; public const int ScrapDragon = 76774528;
public static int StardustDragon = 44508094; public const int StardustDragon = 44508094;
public static int DragunityKnightGaeDearg = 34116027; public const int DragunityKnightGaeDearg = 34116027;
public static int DragunityKnightVajrayana = 21249921; public const int DragunityKnightVajrayana = 21249921;
} }
public DragunityExecutor(GameAI ai, Duel duel) public DragunityExecutor(GameAI ai, Duel duel)
...@@ -200,7 +200,7 @@ namespace WindBot.Game.AI.Decks ...@@ -200,7 +200,7 @@ namespace WindBot.Game.AI.Decks
else else
option = 1; option = 1;
if (ActivateDescription != CardId.DragonRavine*16 + option) if (ActivateDescription != AI.Utils.GetStringId(CardId.DragonRavine, option))
return false; return false;
AI.SelectCard(tributeId); AI.SelectCard(tributeId);
...@@ -243,20 +243,13 @@ namespace WindBot.Game.AI.Decks ...@@ -243,20 +243,13 @@ namespace WindBot.Game.AI.Decks
private bool FoolishBurial() private bool FoolishBurial()
{ {
if (Bot.HasInGraveyard(CardId.DragunityPhalanx)) AI.SelectCard(new[]
return false;
if (Bot.HasInHand(CardId.DragunityPhalanx))
return false;
int remaining = 3;
foreach (ClientCard card in Bot.Banished)
if (card.Id == CardId.DragunityPhalanx)
remaining--;
if (remaining > 0)
{ {
AI.SelectCard(CardId.DragunityPhalanx); CardId.DragunityPhalanx,
return true; CardId.AssaultBeast,
} CardId.StardustDragonAssaultMode
return false; });
return true;
} }
private bool MonsterReborn() private bool MonsterReborn()
...@@ -344,13 +337,13 @@ namespace WindBot.Game.AI.Decks ...@@ -344,13 +337,13 @@ namespace WindBot.Game.AI.Decks
{ {
//if (AI.Utils.IsOneEnemyBetterThanValue(2500, true)) //if (AI.Utils.IsOneEnemyBetterThanValue(2500, true))
// return true; // return true;
ClientCard invincible = AI.Utils.GetProblematicEnemyCard(); ClientCard invincible = AI.Utils.GetProblematicEnemyCard(3000);
return invincible != null; return invincible != null;
} }
private bool ScrapDragonEffect() private bool ScrapDragonEffect()
{ {
ClientCard invincible = AI.Utils.GetProblematicEnemyCard(); ClientCard invincible = AI.Utils.GetProblematicEnemyCard(3000);
if (invincible == null && !AI.Utils.IsOneEnemyBetterThanValue(2800 - 1, false)) if (invincible == null && !AI.Utils.IsOneEnemyBetterThanValue(2800 - 1, false))
return false; return false;
......
...@@ -12,12 +12,12 @@ namespace WindBot.Game.AI.Decks ...@@ -12,12 +12,12 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int DarkHole = 53129443; public const int DarkHole = 53129443;
public static int CosmicCyclone = 8267140; public const int CosmicCyclone = 8267140;
public static int InfestationPandemic = 27541267; public const int InfestationPandemic = 27541267;
public static int SolemnJudgment = 41420027; public const int SolemnJudgment = 41420027;
public static int SolemnWarning = 84749824; public const int SolemnWarning = 84749824;
public static int SolemnStrike = 40605147; public const int SolemnStrike = 40605147;
} }
public EvilswarmExecutor(GameAI ai, Duel duel) public EvilswarmExecutor(GameAI ai, Duel duel)
......
...@@ -11,25 +11,25 @@ namespace WindBot.Game.AI.Decks ...@@ -11,25 +11,25 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int CryomancerOfTheIceBarrier = 23950192; public const int CryomancerOfTheIceBarrier = 23950192;
public static int DewdarkOfTheIceBarrier = 90311614; public const int DewdarkOfTheIceBarrier = 90311614;
public static int SubmarineFrog = 63948258; public const int SubmarineFrog = 63948258;
public static int SwapFrog = 9126351; public const int SwapFrog = 9126351;
public static int FlipFlopFrog = 81278754; public const int FlipFlopFrog = 81278754;
public static int Unifrog = 56052205; public const int Unifrog = 56052205;
public static int Ronintoadin = 1357146; public const int Ronintoadin = 1357146;
public static int DupeFrog = 46239604; public const int DupeFrog = 46239604;
public static int Tradetoad = 23408872; public const int Tradetoad = 23408872;
public static int TreebornFrog = 12538374; public const int TreebornFrog = 12538374;
public static int DarkHole = 53129443; public const int DarkHole = 53129443;
public static int Raigeki = 12580477; public const int Raigeki = 12580477;
public static int Terraforming = 73628505; public const int Terraforming = 73628505;
public static int PotOfDuality = 98645731; public const int PotOfDuality = 98645731;
public static int Solidarity = 86780027; public const int Solidarity = 86780027;
public static int Wetlands = 2084239; public const int Wetlands = 2084239;
public static int FroggyForcefield = 34351849; public const int FroggyForcefield = 34351849;
public static int GravityBind = 85742772; public const int GravityBind = 85742772;
public static int TheHugeRevolutionIsOver = 99188141; public const int TheHugeRevolutionIsOver = 99188141;
} }
public FrogExecutor(GameAI ai, Duel duel) public FrogExecutor(GameAI ai, Duel duel)
...@@ -84,15 +84,6 @@ namespace WindBot.Game.AI.Decks ...@@ -84,15 +84,6 @@ namespace WindBot.Game.AI.Decks
private int m_swapFrogSummoned; private int m_swapFrogSummoned;
private int m_flipFlopFrogSummoned; private int m_flipFlopFrogSummoned;
public override bool OnPreBattleBetween(ClientCard attacker, ClientCard defender)
{
if (attacker.Id == CardId.Unifrog || attacker.Id == CardId.DewdarkOfTheIceBarrier)
return true;
if (defender.IsMonsterInvincible() && !defender.IsMonsterDangerous() && attacker.Id == CardId.SubmarineFrog)
return true;
return base.OnPreBattleBetween(attacker, defender);
}
private bool SwapFrogSummon() private bool SwapFrogSummon()
{ {
int atk = Card.Attack + GetSpellBonus(); int atk = Card.Attack + GetSpellBonus();
......
...@@ -12,30 +12,30 @@ namespace WindBot.Game.AI.Decks ...@@ -12,30 +12,30 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int GravekeepersOracle = 25524823; public const int GravekeepersOracle = 25524823;
public static int MaleficStardustDragon = 36521459; public const int MaleficStardustDragon = 36521459;
public static int GravekeepersVisionary = 3825890; public const int GravekeepersVisionary = 3825890;
public static int GravekeepersChief = 62473983; public const int GravekeepersChief = 62473983;
public static int ThunderKingRaiOh = 71564252; public const int ThunderKingRaiOh = 71564252;
public static int GravekeepersCommandant = 17393207; public const int GravekeepersCommandant = 17393207;
public static int GravekeepersAssailant = 25262697; public const int GravekeepersAssailant = 25262697;
public static int GravekeepersDescendant = 30213599; public const int GravekeepersDescendant = 30213599;
public static int GravekeepersSpy = 24317029; public const int GravekeepersSpy = 24317029;
public static int GravekeepersRecruiter = 93023479; public const int GravekeepersRecruiter = 93023479;
public static int AllureOfDarkness = 1475311; public const int AllureOfDarkness = 1475311;
public static int DarkHole = 53129443; public const int DarkHole = 53129443;
public static int RoyalTribute = 72405967; public const int RoyalTribute = 72405967;
public static int GravekeepersStele = 99523325; public const int GravekeepersStele = 99523325;
public static int MysticalSpaceTyphoon = 5318639; public const int MysticalSpaceTyphoon = 5318639;
public static int BookofMoon = 14087893; public const int BookofMoon = 14087893;
public static int HiddenTemplesOfNecrovalley = 70000776; public const int HiddenTemplesOfNecrovalley = 70000776;
public static int Necrovalley = 47355498; public const int Necrovalley = 47355498;
public static int BottomlessTrapHole = 29401950; public const int BottomlessTrapHole = 29401950;
public static int RiteOfSpirit = 30450531; public const int RiteOfSpirit = 30450531;
public static int TorrentialTribute = 53582587; public const int TorrentialTribute = 53582587;
public static int DimensionalPrison = 70342110; public const int DimensionalPrison = 70342110;
public static int SolemnWarning = 84749824; public const int SolemnWarning = 84749824;
public static int ImperialTombsOfNecrovalley = 90434657; public const int ImperialTombsOfNecrovalley = 90434657;
} }
public GravekeeperExecutor(GameAI ai, Duel duel) public GravekeeperExecutor(GameAI ai, Duel duel)
......
...@@ -12,11 +12,11 @@ namespace WindBot.Game.AI.Decks ...@@ -12,11 +12,11 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int DarkHole = 53129443; public const int DarkHole = 53129443;
public static int CosmicCyclone = 8267140; public const int CosmicCyclone = 8267140;
public static int SolemnJudgment = 41420027; public const int SolemnJudgment = 41420027;
public static int SolemnWarning = 84749824; public const int SolemnWarning = 84749824;
public static int SolemnStrike = 40605147; public const int SolemnStrike = 40605147;
} }
public GraydleExecutor(GameAI ai, Duel duel) public GraydleExecutor(GameAI ai, Duel duel)
......
...@@ -11,28 +11,28 @@ namespace WindBot.Game.AI.Decks ...@@ -11,28 +11,28 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int AlexandriteDragon = 43096270; public const int AlexandriteDragon = 43096270;
public static int LusterDragon = 11091375; public const int LusterDragon = 11091375;
public static int WhiteNightDragon = 79473793; public const int WhiteNightDragon = 79473793;
public static int HorusTheBlackFlameDragonLv8 = 48229808; public const int HorusTheBlackFlameDragonLv8 = 48229808;
public static int HorusTheBlackFlameDragonLv6 = 11224103; public const int HorusTheBlackFlameDragonLv6 = 11224103;
public static int CyberDragon = 70095154; public const int CyberDragon = 70095154;
public static int AxeDragonute = 84914462; public const int AxeDragonute = 84914462;
public static int DodgerDragon = 47013502; public const int DodgerDragon = 47013502;
public static int GolemDragon = 9666558; public const int GolemDragon = 9666558;
public static int Raigeki = 12580477; public const int Raigeki = 12580477;
public static int HammerShot = 26412047; public const int HammerShot = 26412047;
public static int DarkHole = 53129443; public const int DarkHole = 53129443;
public static int Fissure = 66788016; public const int Fissure = 66788016;
public static int StampingDestruction = 81385346; public const int StampingDestruction = 81385346;
public static int FoolishBurial = 81439173; public const int FoolishBurial = 81439173;
public static int MonsterReborn = 83764718; public const int MonsterReborn = 83764718;
public static int MysticalSpaceTyphoon = 5318639; public const int MysticalSpaceTyphoon = 5318639;
public static int BellowOfTheSilverDragon = 80600103; public const int BellowOfTheSilverDragon = 80600103;
public static int Mountain = 50913601; public const int Mountain = 50913601;
public static int DragonsRebirth = 20638610; public const int DragonsRebirth = 20638610;
public static int MirrorForce = 44095762; public const int MirrorForce = 44095762;
public static int DimensionalPrison = 70342110; public const int DimensionalPrison = 70342110;
} }
public HorusExecutor(GameAI ai, Duel duel) : base(ai, duel) public HorusExecutor(GameAI ai, Duel duel) : base(ai, duel)
......
...@@ -12,41 +12,41 @@ namespace WindBot.Game.AI.Decks ...@@ -12,41 +12,41 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int JudgmentDragon = 57774843; public const int JudgmentDragon = 57774843;
public static int Wulf = 58996430; public const int Wulf = 58996430;
public static int Garoth = 59019082; public const int Garoth = 59019082;
public static int Raiden = 77558536; public const int Raiden = 77558536;
public static int Lyla = 22624373; public const int Lyla = 22624373;
public static int Felis = 73176465; public const int Felis = 73176465;
public static int Lumina = 95503687; public const int Lumina = 95503687;
public static int Minerva = 40164421; public const int Minerva = 40164421;
public static int Ryko = 21502796; public const int Ryko = 21502796;
public static int PerformageTrickClown = 67696066; public const int PerformageTrickClown = 67696066;
public static int Goblindbergh = 25259669; public const int Goblindbergh = 25259669;
public static int ThousandBlades = 1833916; public const int ThousandBlades = 1833916;
public static int Honest = 37742478; public const int Honest = 37742478;
public static int GlowUpBulb = 67441435; public const int GlowUpBulb = 67441435;
public static int SolarRecharge = 691925; public const int SolarRecharge = 691925;
public static int GalaxyCyclone = 5133471; public const int GalaxyCyclone = 5133471;
public static int HarpiesFeatherDuster = 18144506; public const int HarpiesFeatherDuster = 18144506;
public static int ReinforcementOfTheArmy = 32807846; public const int ReinforcementOfTheArmy = 32807846;
public static int MetalfoesFusion = 73594093; public const int MetalfoesFusion = 73594093;
public static int ChargeOfTheLightBrigade = 94886282; public const int ChargeOfTheLightBrigade = 94886282;
public static int Michael = 4779823; public const int Michael = 4779823;
public static int MinervaTheExalted = 30100551; public const int MinervaTheExalted = 30100551;
public static int TrishulaDragonOfTheIceBarrier = 52687916; public const int TrishulaDragonOfTheIceBarrier = 52687916;
public static int ScarlightRedDragonArchfiend = 80666118; public const int ScarlightRedDragonArchfiend = 80666118;
public static int PSYFramelordOmega = 74586817; public const int PSYFramelordOmega = 74586817;
public static int PSYFramelordZeta = 37192109; public const int PSYFramelordZeta = 37192109;
public static int NumberS39UtopiatheLightning = 56832966; public const int NumberS39UtopiatheLightning = 56832966;
public static int Number39Utopia = 84013237; public const int Number39Utopia = 84013237;
public static int CastelTheSkyblasterMusketeer = 82633039; public const int CastelTheSkyblasterMusketeer = 82633039;
public static int EvilswarmExcitonKnight = 46772449; public const int EvilswarmExcitonKnight = 46772449;
public static int DanteTravelerOfTheBurningAbyss = 83531441; public const int DanteTravelerOfTheBurningAbyss = 83531441;
public static int DecodeTalker = 1861629; public const int DecodeTalker = 1861629;
public static int MissusRadiant = 3987233; public const int MissusRadiant = 3987233;
} }
bool ClownUsed = false; bool ClownUsed = false;
...@@ -95,19 +95,12 @@ namespace WindBot.Game.AI.Decks ...@@ -95,19 +95,12 @@ namespace WindBot.Game.AI.Decks
public override bool OnPreBattleBetween(ClientCard attacker, ClientCard defender) public override bool OnPreBattleBetween(ClientCard attacker, ClientCard defender)
{ {
if (defender.IsMonsterInvincible()) if (!defender.IsMonsterHasPreventActivationEffectInBattle())
{
if (defender.IsMonsterDangerous() || defender.IsDefense())
return false;
}
if (!(defender.Id == CardId.NumberS39UtopiatheLightning))
{ {
if (attacker.Attribute == (int)CardAttribute.Light && Bot.HasInHand(CardId.Honest)) if (attacker.Attribute == (int)CardAttribute.Light && Bot.HasInHand(CardId.Honest))
attacker.RealPower = attacker.RealPower + defender.Attack; attacker.RealPower = attacker.RealPower + defender.Attack;
if (attacker.Id == CardId.NumberS39UtopiatheLightning && !attacker.IsDisabled() && attacker.HasXyzMaterial(2, CardId.Number39Utopia))
attacker.RealPower = 5000;
} }
return attacker.RealPower > defender.GetDefensePower(); return base.OnPreBattleBetween(attacker, defender);
} }
public override IList<ClientCard> OnSelectCard(IList<ClientCard> cards, int min, int max, bool cancelable) public override IList<ClientCard> OnSelectCard(IList<ClientCard> cards, int min, int max, bool cancelable)
......
...@@ -11,8 +11,8 @@ namespace WindBot.Game.AI.Decks ...@@ -11,8 +11,8 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int LeoWizard = 4392470; public const int LeoWizard = 4392470;
public static int Bunilla = 69380702; public const int Bunilla = 69380702;
} }
private int RockCount = 0; private int RockCount = 0;
...@@ -33,10 +33,5 @@ namespace WindBot.Game.AI.Decks ...@@ -33,10 +33,5 @@ namespace WindBot.Game.AI.Decks
else else
return base.OnRockPaperScissors(); return base.OnRockPaperScissors();
} }
public override bool OnPreBattleBetween(ClientCard attacker, ClientCard defender)
{
return attacker.Attack > 0;
}
} }
} }
\ No newline at end of file
...@@ -11,8 +11,8 @@ namespace WindBot.Game.AI.Decks ...@@ -11,8 +11,8 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int LeoWizard = 4392470; public const int LeoWizard = 4392470;
public static int Bunilla = 69380702; public const int Bunilla = 69380702;
} }
private int RockCount = 0; private int RockCount = 0;
......
...@@ -12,31 +12,31 @@ namespace WindBot.Game.AI.Decks ...@@ -12,31 +12,31 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int DancePrincess = 52738610; public const int DancePrincess = 52738610;
public static int ThousandHands = 23401839; public const int ThousandHands = 23401839;
public static int TenThousandHands = 95492061; public const int TenThousandHands = 95492061;
public static int Shurit = 90307777; public const int Shurit = 90307777;
public static int MaxxC = 23434538; public const int MaxxC = 23434538;
public static int DecisiveArmor = 88240999; public const int DecisiveArmor = 88240999;
public static int Trishula = 52068432; public const int Trishula = 52068432;
public static int Valkyrus = 25857246; public const int Valkyrus = 25857246;
public static int Gungnir = 74122412; public const int Gungnir = 74122412;
public static int Brionac = 26674724; public const int Brionac = 26674724;
public static int Unicore = 89463537; public const int Unicore = 89463537;
public static int Clausolas = 99185129; public const int Clausolas = 99185129;
public static int PhantomOfChaos = 30312361; public const int PhantomOfChaos = 30312361;
public static int DarkHole = 53129443; public const int DarkHole = 53129443;
public static int ReinforcementOfTheArmy = 32807846; public const int ReinforcementOfTheArmy = 32807846;
public static int TradeIn = 38120068; public const int TradeIn = 38120068;
public static int PreparationOfRites = 96729612; public const int PreparationOfRites = 96729612;
public static int Mirror = 14735698; public const int Mirror = 14735698;
public static int Kaleidoscope = 51124303; public const int Kaleidoscope = 51124303;
public static int Cycle = 97211663; public const int Cycle = 97211663;
public static int MysticalSpaceTyphoon = 5318639; public const int MysticalSpaceTyphoon = 5318639;
public static int RoyalDecree = 51452091; public const int RoyalDecree = 51452091;
public static int EvilswarmExcitonKnight = 46772449; public const int EvilswarmExcitonKnight = 46772449;
public static int HeraldOfTheArcLight = 79606837; public const int HeraldOfTheArcLight = 79606837;
} }
List<int> NekrozRituelCard = new List<int>(); List<int> NekrozRituelCard = new List<int>();
......
...@@ -11,26 +11,26 @@ namespace WindBot.Game.AI.Decks ...@@ -11,26 +11,26 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int AncientGearGolem = 83104731; public const int AncientGearGolem = 83104731;
public static int Frostosaurus = 6631034; public const int Frostosaurus = 6631034;
public static int AlexandriteDragon = 43096270; public const int AlexandriteDragon = 43096270;
public static int GeneWarpedWarwolf = 69247929; public const int GeneWarpedWarwolf = 69247929;
public static int GearGolemTheMovingFortress = 30190809; public const int GearGolemTheMovingFortress = 30190809;
public static int EvilswarmHeliotrope = 77542832; public const int EvilswarmHeliotrope = 77542832;
public static int LusterDragon = 11091375; public const int LusterDragon = 11091375;
public static int InsectKnight = 35052053; public const int InsectKnight = 35052053;
public static int ArchfiendSoldier = 49881766; public const int ArchfiendSoldier = 49881766;
public static int HeavyStorm = 19613556; public const int HeavyStorm = 19613556;
public static int DarkHole = 53129443; public const int DarkHole = 53129443;
public static int Raigeki = 12580477; public const int Raigeki = 12580477;
public static int HammerShot = 26412047; public const int HammerShot = 26412047;
public static int Fissure = 66788016; public const int Fissure = 66788016;
public static int SwordsOfRevealingLight = 72302403; public const int SwordsOfRevealingLight = 72302403;
public static int DoubleSummon = 43422537; public const int DoubleSummon = 43422537;
public static int MirrorForce = 44095762; public const int MirrorForce = 44095762;
public static int DimensionalPrison = 70342110; public const int DimensionalPrison = 70342110;
} }
...@@ -64,13 +64,6 @@ namespace WindBot.Game.AI.Decks ...@@ -64,13 +64,6 @@ namespace WindBot.Game.AI.Decks
private int _lastDoubleSummon; private int _lastDoubleSummon;
public override bool OnPreBattleBetween(ClientCard attacker, ClientCard defender)
{
if (defender.IsMonsterInvincible() && !defender.IsMonsterDangerous() && attacker.Id == CardId.AncientGearGolem)
return true;
return base.OnPreBattleBetween(attacker, defender);
}
private bool DoubleSummon() private bool DoubleSummon()
{ {
if (_lastDoubleSummon == Duel.Turn) if (_lastDoubleSummon == Duel.Turn)
......
...@@ -11,34 +11,36 @@ namespace WindBot.Game.AI.Decks ...@@ -11,34 +11,36 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int Scout = 65518099; public const int Scout = 65518099;
public static int Stealth = 13073850; public const int Stealth = 13073850;
public static int Shell = 90885155; public const int Shell = 90885155;
public static int Helix = 37991342; public const int Helix = 37991342;
public static int Carrier = 91907707; public const int Carrier = 91907707;
public static int DarkHole = 53129443;
public static int CardOfDemise = 59750328; public const int DarkHole = 53129443;
public static int SummonersArt = 79816536; public const int CardOfDemise = 59750328;
public static int PotOfDuality = 98645731; public const int SummonersArt = 79816536;
public static int Saqlifice = 17639150; public const int PotOfDuality = 98645731;
public static int MirrorForce = 44095762; public const int Saqlifice = 17639150;
public static int TorrentialTribute = 53582587;
public static int DimensionalBarrier = 83326048; public const int MirrorForce = 44095762;
public static int CompulsoryEvacuationDevice = 94192409; public const int TorrentialTribute = 53582587;
public static int VanitysEmptiness = 5851097; public const int DimensionalBarrier = 83326048;
public static int SkillDrain = 82732705; public const int CompulsoryEvacuationDevice = 94192409;
public static int SolemnStrike = 40605147; public const int VanitysEmptiness = 5851097;
public static int TheHugeRevolutionIsOver = 99188141; public const int SkillDrain = 82732705;
public const int SolemnStrike = 40605147;
public const int TheHugeRevolutionIsOver = 99188141;
} }
bool CardOfDemiseUsed = false; bool CardOfDemiseUsed = false;
List<int> LowScaleCards = new List<int> IList<int> LowScaleCards = new[]
{ {
CardId.Stealth, CardId.Stealth,
CardId.Carrier CardId.Carrier
}; };
List<int> HighScaleCards = new List<int> IList<int> HighScaleCards = new[]
{ {
CardId.Scout, CardId.Scout,
CardId.Shell, CardId.Shell,
...@@ -136,11 +138,18 @@ namespace WindBot.Game.AI.Decks ...@@ -136,11 +138,18 @@ namespace WindBot.Game.AI.Decks
{ {
return null; return null;
} }
IList<ClientCard> selected = new List<ClientCard>();
// select the last cards // pendulum summon, select the last cards
IList<ClientCard> selected = new List<ClientCard>();
for (int i = 1; i <= max; ++i) for (int i = 1; i <= max; ++i)
selected.Add(cards[cards.Count - i]); {
ClientCard card = cards[cards.Count - i];
if (card.Id != CardId.Scout || (card.Location == CardLocation.Extra && !Duel.IsNewRule))
selected.Add(card);
}
if (selected.Count == 0)
selected.Add(cards[cards.Count - 1]);
return selected; return selected;
} }
...@@ -189,9 +198,9 @@ namespace WindBot.Game.AI.Decks ...@@ -189,9 +198,9 @@ namespace WindBot.Game.AI.Decks
private bool TrapSetUnique() private bool TrapSetUnique()
{ {
foreach (ClientCard card in Bot.SpellZone) foreach (ClientCard card in Bot.GetSpells())
{ {
if (card != null && card.Id == Card.Id) if (card.Id == Card.Id)
return false; return false;
} }
return TrapSetWhenZoneFree(); return TrapSetWhenZoneFree();
......
This diff is collapsed.
This diff is collapsed.
...@@ -11,44 +11,44 @@ namespace WindBot.Game.AI.Decks ...@@ -11,44 +11,44 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int Digitron = 32295838; public const int Digitron = 32295838;
public static int Bitron = 36211150; public const int Bitron = 36211150;
public static int DualAssembloom = 7445307; public const int DualAssembloom = 7445307;
public static int BootStagguard = 70950698; public const int BootStagguard = 70950698;
public static int Linkslayer = 35595518; public const int Linkslayer = 35595518;
public static int RAMClouder = 9190563; public const int RAMClouder = 9190563;
public static int ROMCloudia = 44956694; public const int ROMCloudia = 44956694;
public static int BalancerLord = 8567955; public const int BalancerLord = 8567955;
public static int Backlinker = 71172240; public const int Backlinker = 71172240;
public static int Kleinant = 45778242; public const int Kleinant = 45778242;
public static int Draconnet = 62706865; public const int Draconnet = 62706865;
public static int DotScaper = 18789533; public const int DotScaper = 18789533;
public static int MindControl = 37520316; public const int MindControl = 37520316;
public static int DarkHole = 53129443; public const int DarkHole = 53129443;
public static int MonsterReborn = 83764718; public const int MonsterReborn = 83764718;
public static int MysticalSpaceTyphoon = 5318639; public const int MysticalSpaceTyphoon = 5318639;
public static int CosmicCyclone = 8267140; public const int CosmicCyclone = 8267140;
public static int BookOfMoon = 14087893; public const int BookOfMoon = 14087893;
public static int CynetBackdoor = 43839002; public const int CynetBackdoor = 43839002;
public static int MoonMirrorShield = 19508728; public const int MoonMirrorShield = 19508728;
public static int CynetUniverse = 61583217; public const int CynetUniverse = 61583217;
public static int BottomlessTrapHole = 29401950; public const int BottomlessTrapHole = 29401950;
public static int MirrorForce = 44095762; public const int MirrorForce = 44095762;
public static int TorrentialTribute = 53582587; public const int TorrentialTribute = 53582587;
public static int RecodedAlive = 70238111; public const int RecodedAlive = 70238111;
public static int DimensionalBarrier = 83326048; public const int DimensionalBarrier = 83326048;
public static int CompulsoryEvacuationDevice = 94192409; public const int CompulsoryEvacuationDevice = 94192409;
public static int SolemnStrike = 40605147; public const int SolemnStrike = 40605147;
public static int DecodeTalker = 1861629; public const int DecodeTalker = 1861629;
public static int EncodeTalker = 6622715; public const int EncodeTalker = 6622715;
public static int TriGateWizard = 32617464; public const int TriGateWizard = 32617464;
public static int Honeybot = 34472920; public const int Honeybot = 34472920;
public static int BinarySorceress = 79016563; public const int BinarySorceress = 79016563;
public static int LinkSpider = 98978921; public const int LinkSpider = 98978921;
public static int StagToken = 70950699; public const int StagToken = 70950699;
} }
bool BalancerLordUsed = false; bool BalancerLordUsed = false;
...@@ -212,7 +212,7 @@ namespace WindBot.Game.AI.Decks ...@@ -212,7 +212,7 @@ namespace WindBot.Game.AI.Decks
private bool MonsterRebornEffect() private bool MonsterRebornEffect()
{ {
List<int> targets = new List<int> { IList<int> targets = new[] {
CardId.DecodeTalker, CardId.DecodeTalker,
CardId.EncodeTalker, CardId.EncodeTalker,
CardId.TriGateWizard, CardId.TriGateWizard,
...@@ -237,8 +237,7 @@ namespace WindBot.Game.AI.Decks ...@@ -237,8 +237,7 @@ namespace WindBot.Game.AI.Decks
private bool MoonMirrorShieldEffect() private bool MoonMirrorShieldEffect()
{ {
List<ClientCard> monsters = Bot.GetMonsters(); foreach (ClientCard monster in Bot.GetMonsters())
foreach (ClientCard monster in monsters)
{ {
AI.SelectCard(monster); AI.SelectCard(monster);
return true; return true;
...@@ -250,8 +249,7 @@ namespace WindBot.Game.AI.Decks ...@@ -250,8 +249,7 @@ namespace WindBot.Game.AI.Decks
{ {
if (Card.Location == CardLocation.Hand) if (Card.Location == CardLocation.Hand)
return DefaultField(); return DefaultField();
IList<ClientCard> cards = Enemy.Graveyard; foreach (ClientCard card in Enemy.Graveyard)
foreach (ClientCard card in cards)
{ {
if (card.IsMonster()) if (card.IsMonster())
{ {
...@@ -269,16 +267,10 @@ namespace WindBot.Game.AI.Decks ...@@ -269,16 +267,10 @@ namespace WindBot.Game.AI.Decks
{ {
return false; return false;
} }
foreach (ClientCard card in Bot.SpellZone) if (!UniqueFaceupSpell())
{ return false;
if (card != null &&
card.Id == Card.Id &&
card.HasPosition(CardPosition.FaceUp))
return false;
}
bool selected = false; bool selected = false;
List<ClientCard> monsters = Bot.GetMonstersInExtraZone(); foreach (ClientCard monster in Bot.GetMonstersInExtraZone())
foreach (ClientCard monster in monsters)
{ {
if (monster.Attack > 1000) if (monster.Attack > 1000)
{ {
...@@ -289,7 +281,7 @@ namespace WindBot.Game.AI.Decks ...@@ -289,7 +281,7 @@ namespace WindBot.Game.AI.Decks
} }
if (!selected) if (!selected)
{ {
monsters = Bot.GetMonsters(); List<ClientCard> monsters = Bot.GetMonsters();
foreach (ClientCard monster in monsters) foreach (ClientCard monster in monsters)
{ {
if (monster.Id == CardId.BalancerLord) if (monster.Id == CardId.BalancerLord)
...@@ -336,7 +328,7 @@ namespace WindBot.Game.AI.Decks ...@@ -336,7 +328,7 @@ namespace WindBot.Game.AI.Decks
{ {
if (Card.Location == CardLocation.Removed) if (Card.Location == CardLocation.Removed)
return true; return true;
bool hastarget = Bot.HasInHand(new List<int> { bool hastarget = Bot.HasInHand(new[] {
CardId.Draconnet, CardId.Draconnet,
CardId.Kleinant, CardId.Kleinant,
CardId.BalancerLord, CardId.BalancerLord,
...@@ -354,7 +346,7 @@ namespace WindBot.Game.AI.Decks ...@@ -354,7 +346,7 @@ namespace WindBot.Game.AI.Decks
private bool ROMCloudiaSummon() private bool ROMCloudiaSummon()
{ {
return Bot.HasInGraveyard(new List<int> { return Bot.HasInGraveyard(new[] {
CardId.BootStagguard, CardId.BootStagguard,
CardId.BalancerLord, CardId.BalancerLord,
CardId.Kleinant, CardId.Kleinant,
......
This diff is collapsed.
...@@ -11,40 +11,40 @@ namespace WindBot.Game.AI.Decks ...@@ -11,40 +11,40 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int YosenjuKama1 = 65247798; public const int YosenjuKama1 = 65247798;
public static int YosenjuKama2 = 92246806; public const int YosenjuKama2 = 92246806;
public static int YosenjuKama3 = 28630501; public const int YosenjuKama3 = 28630501;
public static int YosenjuTsujik = 25244515; public const int YosenjuTsujik = 25244515;
public static int HarpiesFeatherDuster = 18144507; public const int HarpiesFeatherDuster = 18144507;
public static int DarkHole = 53129443; public const int DarkHole = 53129443;
public static int CardOfDemise = 59750328; public const int CardOfDemise = 59750328;
public static int PotOfDuality = 98645731; public const int PotOfDuality = 98645731;
public static int CosmicCyclone = 8267140; public const int CosmicCyclone = 8267140;
public static int QuakingMirrorForce = 40838625; public const int QuakingMirrorForce = 40838625;
public static int DrowningMirrorForce = 47475363; public const int DrowningMirrorForce = 47475363;
public static int StarlightRoad = 58120309; public const int StarlightRoad = 58120309;
public static int VanitysEmptiness = 5851097; public const int VanitysEmptiness = 5851097;
public static int MacroCosmos = 30241314; public const int MacroCosmos = 30241314;
public static int SolemnStrike = 40605147; public const int SolemnStrike = 40605147;
public static int SolemnWarning = 84749824; public const int SolemnWarning = 84749824;
public static int SolemnJudgment = 41420027; public const int SolemnJudgment = 41420027;
public static int MagicDrain = 59344077; public const int MagicDrain = 59344077;
public static int StardustDragon = 44508094; public const int StardustDragon = 44508094;
public static int NumberS39UtopiatheLightning = 56832966; public const int NumberS39UtopiatheLightning = 56832966;
public static int NumberS39UtopiaOne = 86532744; public const int NumberS39UtopiaOne = 86532744;
public static int DarkRebellionXyzDragon = 16195942; public const int DarkRebellionXyzDragon = 16195942;
public static int Number39Utopia = 84013237; public const int Number39Utopia = 84013237;
public static int Number103Ragnazero = 94380860; public const int Number103Ragnazero = 94380860;
public static int BrotherhoodOfTheFireFistTigerKing = 96381979; public const int BrotherhoodOfTheFireFistTigerKing = 96381979;
public static int Number106GiantHand = 63746411; public const int Number106GiantHand = 63746411;
public static int CastelTheSkyblasterMusketeer = 82633039; public const int CastelTheSkyblasterMusketeer = 82633039;
public static int DiamondDireWolf = 95169481; public const int DiamondDireWolf = 95169481;
public static int LightningChidori = 22653490; public const int LightningChidori = 22653490;
public static int EvilswarmExcitonKnight = 46772449; public const int EvilswarmExcitonKnight = 46772449;
public static int AbyssDweller = 21044178; public const int AbyssDweller = 21044178;
public static int GagagaCowboy = 12014404; public const int GagagaCowboy = 12014404;
} }
bool CardOfDemiseUsed = false; bool CardOfDemiseUsed = false;
...@@ -171,19 +171,12 @@ namespace WindBot.Game.AI.Decks ...@@ -171,19 +171,12 @@ namespace WindBot.Game.AI.Decks
public override bool OnPreBattleBetween(ClientCard attacker, ClientCard defender) public override bool OnPreBattleBetween(ClientCard attacker, ClientCard defender)
{ {
if (defender.IsMonsterInvincible()) if (!defender.IsMonsterHasPreventActivationEffectInBattle())
{
if (defender.IsMonsterDangerous() || defender.IsDefense())
return false;
}
if (!(defender.Id == CardId.NumberS39UtopiatheLightning))
{ {
if (attacker.Attribute == (int)CardAttribute.Wind && Bot.HasInHand(CardId.YosenjuTsujik)) if (attacker.Attribute == (int)CardAttribute.Wind && Bot.HasInHand(CardId.YosenjuTsujik))
attacker.RealPower = attacker.RealPower + 1000; attacker.RealPower = attacker.RealPower + 1000;
if (attacker.Id == CardId.NumberS39UtopiatheLightning && !attacker.IsDisabled() && attacker.HasXyzMaterial(2, CardId.Number39Utopia))
attacker.RealPower = 5000;
} }
return attacker.RealPower > defender.GetDefensePower(); return base.OnPreBattleBetween(attacker, defender);
} }
private bool PotOfDualityEffect() private bool PotOfDualityEffect()
...@@ -240,9 +233,9 @@ namespace WindBot.Game.AI.Decks ...@@ -240,9 +233,9 @@ namespace WindBot.Game.AI.Decks
private bool HaveAnotherYosenjuWithSameNameInHand() private bool HaveAnotherYosenjuWithSameNameInHand()
{ {
foreach (ClientCard card in Bot.Hand) foreach (ClientCard card in Bot.Hand.GetMonsters())
{ {
if (card != null && !card.Equals(Card) && card.Id == Card.Id) if (!card.Equals(Card) && card.Id == Card.Id)
return true; return true;
} }
return false; return false;
...@@ -250,9 +243,9 @@ namespace WindBot.Game.AI.Decks ...@@ -250,9 +243,9 @@ namespace WindBot.Game.AI.Decks
private bool TrapSetUnique() private bool TrapSetUnique()
{ {
foreach (ClientCard card in Bot.SpellZone) foreach (ClientCard card in Bot.GetSpells())
{ {
if (card != null && card.Id == Card.Id) if (card.Id == Card.Id)
return false; return false;
} }
return TrapSetWhenZoneFree(); return TrapSetWhenZoneFree();
...@@ -315,12 +308,5 @@ namespace WindBot.Game.AI.Decks ...@@ -315,12 +308,5 @@ namespace WindBot.Game.AI.Decks
} }
return true; return true;
} }
private bool NumberS39UtopiatheLightningSummon()
{
int selfBestAttack = AI.Utils.GetBestAttack(Bot);
int oppoBestAttack = AI.Utils.GetBestPower(Enemy);
return selfBestAttack <= oppoBestAttack;
}
} }
} }
\ No newline at end of file
...@@ -11,42 +11,42 @@ namespace WindBot.Game.AI.Decks ...@@ -11,42 +11,42 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int CyberDragon = 70095155; public const int CyberDragon = 70095155;
public static int ZwTornadoBringer = 81471108; public const int ZwTornadoBringer = 81471108;
public static int ZwLightningBlade = 45082499; public const int ZwLightningBlade = 45082499;
public static int ZwAsuraStrike = 40941889; public const int ZwAsuraStrike = 40941889;
public static int SolarWindJammer = 33911264; public const int SolarWindJammer = 33911264;
public static int PhotonTrasher = 65367484; public const int PhotonTrasher = 65367484;
public static int StarDrawing = 24610207; public const int StarDrawing = 24610207;
public static int SacredCrane = 30914564; public const int SacredCrane = 30914564;
public static int Goblindbergh = 25259669; public const int Goblindbergh = 25259669;
public static int Honest = 37742478; public const int Honest = 37742478;
public static int Kagetokage = 94656263; public const int Kagetokage = 94656263;
public static int HeroicChallengerExtraSword = 34143852; public const int HeroicChallengerExtraSword = 34143852;
public static int TinGoldfish = 18063928; public const int TinGoldfish = 18063928;
public static int SummonerMonk = 423585; public const int SummonerMonk = 423585;
public static int InstantFusion = 1845204; public const int InstantFusion = 1845204;
public static int Raigeki = 12580477; public const int Raigeki = 12580477;
public static int ReinforcementOfTheArmy = 32807846; public const int ReinforcementOfTheArmy = 32807846;
public static int DarkHole = 53129443; public const int DarkHole = 53129443;
public static int MysticalSpaceTyphoon = 5318639; public const int MysticalSpaceTyphoon = 5318639;
public static int BreakthroughSkill = 78474168; public const int BreakthroughSkill = 78474168;
public static int SolemnWarning = 84749824; public const int SolemnWarning = 84749824;
public static int SolemnStrike = 40605147; public const int SolemnStrike = 40605147;
public static int XyzChangeTactics = 11705261; public const int XyzChangeTactics = 11705261;
public static int FlameSwordsman = 45231177; public const int FlameSwordsman = 45231177;
public static int DarkfireDragon = 17881964; public const int DarkfireDragon = 17881964;
public static int GaiaDragonTheThunderCharger = 91949988; public const int GaiaDragonTheThunderCharger = 91949988;
public static int ZwLionArms = 60992364; public const int ZwLionArms = 60992364;
public static int AdreusKeeperOfArmageddon = 94119480; public const int AdreusKeeperOfArmageddon = 94119480;
public static int Number61Volcasaurus = 29669359; public const int Number61Volcasaurus = 29669359;
public static int GemKnightPearl = 71594310; public const int GemKnightPearl = 71594310;
public static int Number39Utopia = 84013237; public const int Number39Utopia = 84013237;
public static int NumberS39UtopiaOne = 86532744; public const int NumberS39UtopiaOne = 86532744;
public static int NumberS39UtopiatheLightning = 56832966; public const int NumberS39UtopiatheLightning = 56832966;
public static int MaestrokeTheSymphonyDjinn = 25341652; public const int MaestrokeTheSymphonyDjinn = 25341652;
public static int GagagaCowboy = 12014404; public const int GagagaCowboy = 12014404;
} }
public ZexalWeaponsExecutor(GameAI ai, Duel duel) public ZexalWeaponsExecutor(GameAI ai, Duel duel)
...@@ -128,19 +128,12 @@ namespace WindBot.Game.AI.Decks ...@@ -128,19 +128,12 @@ namespace WindBot.Game.AI.Decks
public override bool OnPreBattleBetween(ClientCard attacker, ClientCard defender) public override bool OnPreBattleBetween(ClientCard attacker, ClientCard defender)
{ {
if (defender.IsMonsterInvincible()) if (!defender.IsMonsterHasPreventActivationEffectInBattle())
{
if (defender.IsMonsterDangerous() || defender.IsDefense())
return false;
}
if (!(defender.Id == CardId.NumberS39UtopiatheLightning))
{ {
if (attacker.Attribute == (int)CardAttribute.Light && Bot.HasInHand(CardId.Honest)) if (attacker.Attribute == (int)CardAttribute.Light && Bot.HasInHand(CardId.Honest))
attacker.RealPower = attacker.RealPower + defender.Attack; attacker.RealPower = attacker.RealPower + defender.Attack;
if (attacker.Id == CardId.NumberS39UtopiatheLightning && !attacker.IsDisabled() && attacker.HasXyzMaterial(2, CardId.Number39Utopia))
attacker.RealPower = 5000;
} }
return attacker.RealPower > defender.GetDefensePower(); return base.OnPreBattleBetween(attacker, defender);
} }
private bool Number39Utopia() private bool Number39Utopia()
...@@ -181,10 +174,9 @@ namespace WindBot.Game.AI.Decks ...@@ -181,10 +174,9 @@ namespace WindBot.Game.AI.Decks
{ {
if (Duel.LifePoints[0] <= 1000) if (Duel.LifePoints[0] <= 1000)
return false; return false;
List<ClientCard> monsters = Bot.GetMonsters();
int count4 = 0; int count4 = 0;
int count5 = 0; int count5 = 0;
foreach (ClientCard card in monsters) foreach (ClientCard card in Bot.GetMonsters())
{ {
if (card.Level == 5) if (card.Level == 5)
++count5; ++count5;
...@@ -221,10 +213,9 @@ namespace WindBot.Game.AI.Decks ...@@ -221,10 +213,9 @@ namespace WindBot.Game.AI.Decks
private bool GoblindberghFirst() private bool GoblindberghFirst()
{ {
IList<ClientCard> hand = Bot.Hand; foreach (ClientCard card in Bot.Hand.GetMonsters())
foreach (ClientCard card in hand)
{ {
if (card != Card && card.IsMonster() && card.Level == 4) if (!card.Equals(Card) && card.Level == 4)
return true; return true;
} }
return false; return false;
...@@ -244,30 +235,32 @@ namespace WindBot.Game.AI.Decks ...@@ -244,30 +235,32 @@ namespace WindBot.Game.AI.Decks
private bool SummonerMonkEffect() private bool SummonerMonkEffect()
{ {
if (Bot.HasInHand(CardId.InstantFusion) || IList<int> costs = new[]
Bot.HasInHand(CardId.MysticalSpaceTyphoon)) {
CardId.XyzChangeTactics,
CardId.DarkHole,
CardId.MysticalSpaceTyphoon,
CardId.InstantFusion
};
if (Bot.HasInHand(costs))
{ {
AI.SelectCard(new[] AI.SelectCard(costs);
AI.SelectNextCard(new[]
{ {
CardId.InstantFusion, CardId.SacredCrane,
CardId.MysticalSpaceTyphoon CardId.StarDrawing,
CardId.Goblindbergh,
CardId.TinGoldfish
}); });
AI.SelectPosition(CardPosition.FaceUpDefence);
return true; return true;
} }
AI.SelectNextCard(new[]
{
CardId.Goblindbergh,
CardId.TinGoldfish,
CardId.StarDrawing,
CardId.Kagetokage,
CardId.SacredCrane
});
return false; return false;
} }
private bool SolarWindJammer() private bool SolarWindJammer()
{ {
if (!Bot.HasInHand(new List<int> { if (!Bot.HasInHand(new[] {
CardId.StarDrawing, CardId.StarDrawing,
CardId.InstantFusion CardId.InstantFusion
})) }))
......
...@@ -11,37 +11,37 @@ namespace WindBot.Game.AI.Decks ...@@ -11,37 +11,37 @@ namespace WindBot.Game.AI.Decks
{ {
public class CardId public class CardId
{ {
public static int JizukirutheStarDestroyingKaiju = 63941210; public const int JizukirutheStarDestroyingKaiju = 63941210;
public static int GadarlatheMysteryDustKaiju = 36956512; public const int GadarlatheMysteryDustKaiju = 36956512;
public static int GamecieltheSeaTurtleKaiju = 55063751; public const int GamecieltheSeaTurtleKaiju = 55063751;
public static int RadiantheMultidimensionalKaiju = 28674152; public const int RadiantheMultidimensionalKaiju = 28674152;
public static int KumongoustheStickyStringKaiju = 29726552; public const int KumongoustheStickyStringKaiju = 29726552;
public static int PhotonThrasher = 65367484; public const int PhotonThrasher = 65367484;
public static int Thoroughblade = 77150143; public const int Thoroughblade = 77150143;
public static int Whiptail = 31755044; public const int Whiptail = 31755044;
public static int Ratpier = 78872731; public const int Ratpier = 78872731;
public static int AleisterTheInvoker = 86120751; public const int AleisterTheInvoker = 86120751;
public static int HarpiesFeatherDuster = 18144506; public const int HarpiesFeatherDuster = 18144506;
public static int DarkHole = 53129443; public const int DarkHole = 53129443;
public static int Terraforming = 73628505; public const int Terraforming = 73628505;
public static int Invocation = 74063034; public const int Invocation = 74063034;
public static int MonsterReborn = 83764718; public const int MonsterReborn = 83764718;
public static int InterruptedKaijuSlumber = 99330325; public const int InterruptedKaijuSlumber = 99330325;
public static int ZoodiacBarrage = 46060017; public const int ZoodiacBarrage = 46060017;
public static int FireFormationTenki = 57103969; public const int FireFormationTenki = 57103969;
public static int MagicalMeltdown = 47679935; public const int MagicalMeltdown = 47679935;
public static int ZoodiacCombo = 73881652; public const int ZoodiacCombo = 73881652;
public static int InvokedMechaba = 75286621; public const int InvokedMechaba = 75286621;
public static int InvokedMagellanica = 48791583; public const int InvokedMagellanica = 48791583;
public static int NumberS39UtopiatheLightning = 56832966; public const int NumberS39UtopiatheLightning = 56832966;
public static int Number39Utopia = 84013237; public const int Number39Utopia = 84013237;
public static int DaigustoEmeral = 581014; public const int DaigustoEmeral = 581014;
public static int Tigermortar = 11510448; public const int Tigermortar = 11510448;
public static int Chakanine = 41375811; public const int Chakanine = 41375811;
public static int Drident = 48905153; public const int Drident = 48905153;
public static int Broadbull = 85115440; public const int Broadbull = 85115440;
} }
bool TigermortarSpsummoned = false; bool TigermortarSpsummoned = false;
...@@ -133,19 +133,12 @@ namespace WindBot.Game.AI.Decks ...@@ -133,19 +133,12 @@ namespace WindBot.Game.AI.Decks
public override bool OnPreBattleBetween(ClientCard attacker, ClientCard defender) public override bool OnPreBattleBetween(ClientCard attacker, ClientCard defender)
{ {
if (defender.IsMonsterInvincible()) if (!defender.IsMonsterHasPreventActivationEffectInBattle())
{ {
if (defender.IsMonsterDangerous() || defender.IsDefense()) if (attacker.HasType(CardType.Fusion) && Bot.HasInHand(CardId.AleisterTheInvoker))
return false; attacker.RealPower = attacker.RealPower + 1000;
}
if (!(defender.Id == CardId.NumberS39UtopiatheLightning))
{
//if (attacker.HasType(CardType.Fusion) && Bot.HasInHand(CardId.AleisterTheInvoker))
// attacker.RealPower = attacker.RealPower + 1000;
if (attacker.Id == CardId.NumberS39UtopiatheLightning && !attacker.IsDisabled() && attacker.HasXyzMaterial(2, CardId.Number39Utopia))
attacker.RealPower = 5000;
} }
return attacker.RealPower > defender.GetDefensePower(); return base.OnPreBattleBetween(attacker, defender);
} }
private bool PhotonThrasherSummon() private bool PhotonThrasherSummon()
...@@ -229,9 +222,7 @@ namespace WindBot.Game.AI.Decks ...@@ -229,9 +222,7 @@ namespace WindBot.Game.AI.Decks
private void SelectAleisterInGrave() private void SelectAleisterInGrave()
{ {
IList<ClientCard> materials0 = Bot.Graveyard; foreach (ClientCard card in Enemy.Graveyard)
IList<ClientCard> materials1 = Enemy.Graveyard;
foreach (ClientCard card in materials1)
{ {
if (card.Id == CardId.AleisterTheInvoker) if (card.Id == CardId.AleisterTheInvoker)
{ {
...@@ -239,7 +230,7 @@ namespace WindBot.Game.AI.Decks ...@@ -239,7 +230,7 @@ namespace WindBot.Game.AI.Decks
return; return;
} }
} }
foreach (ClientCard card in materials0) foreach (ClientCard card in Bot.Graveyard)
{ {
if (card.Id == CardId.AleisterTheInvoker) if (card.Id == CardId.AleisterTheInvoker)
{ {
...@@ -313,7 +304,7 @@ namespace WindBot.Game.AI.Decks ...@@ -313,7 +304,7 @@ namespace WindBot.Game.AI.Decks
return true; return true;
} }
if (Bot.HasInMonstersZone(CardId.Thoroughblade) && !TigermortarSpsummoned if (Bot.HasInMonstersZone(CardId.Thoroughblade) && !TigermortarSpsummoned
&& Bot.HasInGraveyard(new List<int> && Bot.HasInGraveyard(new[]
{ {
CardId.Whiptail, CardId.Whiptail,
CardId.Ratpier CardId.Ratpier
...@@ -548,8 +539,7 @@ namespace WindBot.Game.AI.Decks ...@@ -548,8 +539,7 @@ namespace WindBot.Game.AI.Decks
private bool ZoodiacBarrageEffect() private bool ZoodiacBarrageEffect()
{ {
IList<ClientCard> spells = Bot.GetSpells(); foreach (ClientCard spell in Bot.GetSpells())
foreach (ClientCard spell in spells)
{ {
if (spell.Id == CardId.ZoodiacBarrage && !Card.Equals(spell)) if (spell.Id == CardId.ZoodiacBarrage && !Card.Equals(spell))
return false; return false;
......
...@@ -11,20 +11,28 @@ namespace WindBot.Game.AI ...@@ -11,20 +11,28 @@ namespace WindBot.Game.AI
{ {
protected class _CardId protected class _CardId
{ {
public static int JizukirutheStarDestroyingKaiju = 63941210; public const int JizukirutheStarDestroyingKaiju = 63941210;
public static int GadarlatheMysteryDustKaiju = 36956512; public const int GadarlatheMysteryDustKaiju = 36956512;
public static int GamecieltheSeaTurtleKaiju = 55063751; public const int GamecieltheSeaTurtleKaiju = 55063751;
public static int RadiantheMultidimensionalKaiju = 28674152; public const int RadiantheMultidimensionalKaiju = 28674152;
public static int KumongoustheStickyStringKaiju = 29726552; public const int KumongoustheStickyStringKaiju = 29726552;
public static int ThunderKingtheLightningstrikeKaiju = 48770333; public const int ThunderKingtheLightningstrikeKaiju = 48770333;
public static int DogorantheMadFlameKaiju = 93332803; public const int DogorantheMadFlameKaiju = 93332803;
public static int SuperAntiKaijuWarMachineMechaDogoran = 84769941; public const int SuperAntiKaijuWarMachineMechaDogoran = 84769941;
public static int MysticalSpaceTyphoon = 5318639; public const int DupeFrog = 46239604;
public static int CosmicCyclone = 8267140; public const int MaraudingCaptain = 2460565;
public static int ChickenGame = 67616300;
public const int MysticalSpaceTyphoon = 5318639;
public const int CosmicCyclone = 8267140;
public const int ChickenGame = 67616300;
public const int CastelTheSkyblasterMusketeer = 82633039;
public const int CrystalWingSynchroDragon = 50954680;
public const int NumberS39UtopiaTheLightning = 56832966;
public const int Number39Utopia = 84013237;
public const int UltimayaTzolkin = 1686814;
public static int CastelTheSkyblasterMusketeer = 82633039;
} }
protected DefaultExecutor(GameAI ai, Duel duel) protected DefaultExecutor(GameAI ai, Duel duel)
...@@ -33,6 +41,55 @@ namespace WindBot.Game.AI ...@@ -33,6 +41,55 @@ namespace WindBot.Game.AI
AddExecutor(ExecutorType.Activate, _CardId.ChickenGame, DefaultChickenGame); AddExecutor(ExecutorType.Activate, _CardId.ChickenGame, DefaultChickenGame);
} }
/// <summary>
/// Decide whether to declare attack between attacker and defender.
/// Can be overrided to update the RealPower of attacker for cards like Honest.
/// </summary>
/// <param name="attacker">Card that attack.</param>
/// <param name="defender">Card that defend.</param>
/// <returns>false if the attack can't be done.</returns>
public override bool OnPreBattleBetween(ClientCard attacker, ClientCard defender)
{
if (attacker.RealPower <= 0)
return false;
if (!attacker.IsMonsterHasPreventActivationEffectInBattle())
{
if (defender.IsMonsterDangerous() || (defender.IsMonsterInvincible() && defender.IsDefense()))
return false;
if (defender.Id == _CardId.CrystalWingSynchroDragon && !defender.IsDisabled() && attacker.Level >= 5)
return false;
if (defender.Id == _CardId.NumberS39UtopiaTheLightning && !defender.IsDisabled() && defender.HasXyzMaterial(2, _CardId.Number39Utopia))
defender.RealPower = 5000;
}
if (!defender.IsMonsterHasPreventActivationEffectInBattle())
{
if (attacker.Id == _CardId.NumberS39UtopiaTheLightning && !attacker.IsDisabled() && attacker.HasXyzMaterial(2, _CardId.Number39Utopia))
attacker.RealPower = 5000;
}
if (Enemy.HasInMonstersZone(_CardId.DupeFrog, true) && defender.Id != _CardId.DupeFrog)
return false;
if (Enemy.HasInMonstersZone(_CardId.MaraudingCaptain, true) && defender.Id != _CardId.MaraudingCaptain && defender.Race == (int)CardRace.Warrior)
return false;
if (defender.Id == _CardId.UltimayaTzolkin && !defender.IsDisabled())
{
List<ClientCard> monsters = Enemy.GetMonsters();
foreach (ClientCard monster in monsters)
{
if (monster.HasType(CardType.Synchro))
return false;
}
}
return true;
}
/// <summary> /// <summary>
/// Destroy face-down cards first, in our turn. /// Destroy face-down cards first, in our turn.
/// </summary> /// </summary>
...@@ -297,13 +354,8 @@ namespace WindBot.Game.AI ...@@ -297,13 +354,8 @@ namespace WindBot.Game.AI
/// </summary> /// </summary>
protected bool DefaultTributeSummon() protected bool DefaultTributeSummon()
{ {
foreach (ClientCard card in Bot.MonsterZone) if (!UniqueFaceupMonster())
{ return false;
if (card != null &&
card.Id == Card.Id &&
card.HasPosition(CardPosition.FaceUp))
return false;
}
int tributecount = (int)Math.Ceiling((Card.Level - 4.0d) / 2.0d); int tributecount = (int)Math.Ceiling((Card.Level - 4.0d) / 2.0d);
for (int j = 0; j < 7; ++j) for (int j = 0; j < 7; ++j)
{ {
...@@ -353,14 +405,32 @@ namespace WindBot.Game.AI ...@@ -353,14 +405,32 @@ namespace WindBot.Game.AI
if (HasChainedTrap(0)) if (HasChainedTrap(0))
return false; return false;
foreach (ClientCard card in Bot.SpellZone) return UniqueFaceupSpell();
}
/// <summary>
/// Check no other our spell or trap card with same name face-up.
/// </summary>
protected bool UniqueFaceupSpell()
{
foreach (ClientCard card in Bot.GetSpells())
{ {
if (card != null && if (card.Id == Card.Id && card.IsFaceup())
card.Id == Card.Id &&
card.HasPosition(CardPosition.FaceUp))
return false; return false;
} }
return true;
}
/// <summary>
/// Check no other our monster card with same name face-up.
/// </summary>
protected bool UniqueFaceupMonster()
{
foreach (ClientCard card in Bot.GetMonsters())
{
if (card.Id == Card.Id && card.IsFaceup())
return false;
}
return true; return true;
} }
......
...@@ -9,6 +9,11 @@ ...@@ -9,6 +9,11 @@
Yubel = 78371393, Yubel = 78371393,
YubelIncarnate = 4779091, YubelIncarnate = 4779091,
YubelNightmare = 31764700, YubelNightmare = 31764700,
MetaionTheTimelord = 74530899 ZaphionTheTimelord = 28929131,
SadionTheTimelord = 65314286,
MetaionTheTimelord = 74530899,
KamionTheTimelord = 91712985,
LazionTheTimelord = 92435533,
EaterOfMillions = 63845230
} }
} }
namespace WindBot.Game.AI.Enums
{
public enum PreventActivationEffectInBattle
{
Deskbot009 = 25494711,
ArchfiendBlackSkullDragon = 45349196,
FrightfurChimera = 83866861,
GladiatorBeastNerokius = 29357956,
GemKnightCitrine = 67985943,
FrightfurSheep = 57477163,
ArmadesKeeperOfBoundaries = 88033975,
NumberS39UtopiaTheLightning = 56832966,
}
}
...@@ -62,50 +62,48 @@ namespace WindBot.Game.AI ...@@ -62,50 +62,48 @@ namespace WindBot.Game.AI
return AI.ToMainPhase2(); return AI.ToMainPhase2();
if (defenders.Count == 0) if (defenders.Count == 0)
return AI.Attack(attackers[0], null);
for (int i = defenders.Count - 1; i >= 0; --i)
{ {
ClientCard defender = defenders[i]; for (int i = attackers.Count - 1; i >= 0; --i)
int def = defender.GetDefensePower();
for (int j = 0; j < attackers.Count; ++j)
{ {
ClientCard attacker = attackers[j]; ClientCard attacker = attackers[i];
attacker.RealPower = attacker.Attack; if (attacker.Attack > 0)
if (!OnPreBattleBetween(attacker, defender)) return AI.Attack(attacker, null);
continue;
if (attacker.RealPower > def || (attacker.RealPower >= def && j == attackers.Count - 1))
return AI.Attack(attacker, defender);
} }
} }
else
for (int i = attackers.Count - 1; i >= 0; --i)
{ {
ClientCard attacker = attackers[i]; for (int i = defenders.Count - 1; i >= 0; --i)
if (attacker.CanDirectAttack) {
return AI.Attack(attacker, null); ClientCard defender = defenders[i];
for (int j = 0; j < attackers.Count; ++j)
{
ClientCard attacker = attackers[j];
attacker.RealPower = attacker.Attack;
defender.RealPower = defender.GetDefensePower();
if (!OnPreBattleBetween(attacker, defender))
continue;
if (attacker.RealPower > defender.RealPower || (attacker.RealPower >= defender.RealPower && j == attackers.Count - 1))
return AI.Attack(attacker, defender);
}
}
for (int i = attackers.Count - 1; i >= 0; --i)
{
ClientCard attacker = attackers[i];
if (attacker.CanDirectAttack)
return AI.Attack(attacker, null);
}
} }
if (!Battle.CanMainPhaseTwo) if (!Battle.CanMainPhaseTwo)
return AI.Attack(attackers[attackers.Count - 1], defenders[0]); return AI.Attack(attackers[0], (defenders.Count == 0) ? null : defenders[0]);
return AI.ToMainPhase2(); return AI.ToMainPhase2();
} }
/// <summary>
/// Decide whether to declare attack between attacker and defender.
/// Can be overrided to update the RealPower of attacker for cards like Honest.
/// </summary>
/// <param name="attacker">Card that attack.</param>
/// <param name="defender">Card that defend.</param>
/// <returns>true if the attack can be done.</returns>
public virtual bool OnPreBattleBetween(ClientCard attacker, ClientCard defender) public virtual bool OnPreBattleBetween(ClientCard attacker, ClientCard defender)
{ {
if (defender.IsMonsterInvincible()) // Overrided in DefalultExecutor
{
if (defender.IsMonsterDangerous() || defender.IsDefense())
return false;
}
return true; return true;
} }
......
...@@ -99,12 +99,23 @@ namespace WindBot.Game ...@@ -99,12 +99,23 @@ namespace WindBot.Game
return cards; return cards;
} }
public List<ClientCard> GetMonstersInMainZone()
{
List<ClientCard> cards = new List<ClientCard>();
for (int i = 0; i < 5; i++)
{
if (MonsterZone[i] != null)
cards.Add(MonsterZone[i]);
}
return cards;
}
public bool HasInHand(int cardId) public bool HasInHand(int cardId)
{ {
return HasInCards(Hand, cardId); return HasInCards(Hand, cardId);
} }
public bool HasInHand(List<int> cardId) public bool HasInHand(IList<int> cardId)
{ {
return HasInCards(Hand, cardId); return HasInCards(Hand, cardId);
} }
...@@ -114,7 +125,7 @@ namespace WindBot.Game ...@@ -114,7 +125,7 @@ namespace WindBot.Game
return HasInCards(Graveyard, cardId); return HasInCards(Graveyard, cardId);
} }
public bool HasInGraveyard(List<int> cardId) public bool HasInGraveyard(IList<int> cardId)
{ {
return HasInCards(Graveyard, cardId); return HasInCards(Graveyard, cardId);
} }
...@@ -124,7 +135,7 @@ namespace WindBot.Game ...@@ -124,7 +135,7 @@ namespace WindBot.Game
return HasInCards(Banished, cardId); return HasInCards(Banished, cardId);
} }
public bool HasInBanished(List<int> cardId) public bool HasInBanished(IList<int> cardId)
{ {
return HasInCards(Banished, cardId); return HasInCards(Banished, cardId);
} }
...@@ -134,7 +145,7 @@ namespace WindBot.Game ...@@ -134,7 +145,7 @@ namespace WindBot.Game
return HasInCards(ExtraDeck, cardId); return HasInCards(ExtraDeck, cardId);
} }
public bool HasInExtra(List<int> cardId) public bool HasInExtra(IList<int> cardId)
{ {
return HasInCards(ExtraDeck, cardId); return HasInCards(ExtraDeck, cardId);
} }
...@@ -166,7 +177,7 @@ namespace WindBot.Game ...@@ -166,7 +177,7 @@ namespace WindBot.Game
return HasInCards(MonsterZone, cardId, notDisabled, hasXyzMaterial); return HasInCards(MonsterZone, cardId, notDisabled, hasXyzMaterial);
} }
public bool HasInMonstersZone(List<int> cardId, bool notDisabled = false, bool hasXyzMaterial = false) public bool HasInMonstersZone(IList<int> cardId, bool notDisabled = false, bool hasXyzMaterial = false)
{ {
return HasInCards(MonsterZone, cardId, notDisabled, hasXyzMaterial); return HasInCards(MonsterZone, cardId, notDisabled, hasXyzMaterial);
} }
...@@ -176,7 +187,7 @@ namespace WindBot.Game ...@@ -176,7 +187,7 @@ namespace WindBot.Game
return HasInCards(SpellZone, cardId, notDisabled); return HasInCards(SpellZone, cardId, notDisabled);
} }
public bool HasInSpellZone(List<int> cardId, bool notDisabled = false) public bool HasInSpellZone(IList<int> cardId, bool notDisabled = false)
{ {
return HasInCards(SpellZone, cardId, notDisabled); return HasInCards(SpellZone, cardId, notDisabled);
} }
...@@ -264,7 +275,7 @@ namespace WindBot.Game ...@@ -264,7 +275,7 @@ namespace WindBot.Game
return false; return false;
} }
private static bool HasInCards(IEnumerable<ClientCard> cards, List<int> cardId, bool notDisabled = false, bool hasXyzMaterial = false) private static bool HasInCards(IEnumerable<ClientCard> cards, IList<int> cardId, bool notDisabled = false, bool hasXyzMaterial = false)
{ {
foreach (ClientCard card in cards) foreach (ClientCard card in cards)
{ {
......
...@@ -522,7 +522,7 @@ namespace WindBot.Game ...@@ -522,7 +522,7 @@ namespace WindBot.Game
public bool OnSelectYesNo(int desc) public bool OnSelectYesNo(int desc)
{ {
if (m_yesno != -1) if (m_yesno != -1)
return m_yesno>0; return m_yesno > 0;
return Executor.OnSelectYesNo(desc); return Executor.OnSelectYesNo(desc);
} }
...@@ -691,7 +691,7 @@ namespace WindBot.Game ...@@ -691,7 +691,7 @@ namespace WindBot.Game
public void SelectYesNo(bool opt) public void SelectYesNo(bool opt)
{ {
m_yesno = opt?1:0; m_yesno = opt ? 1 : 0;
} }
/// <summary> /// <summary>
......
...@@ -351,7 +351,6 @@ namespace WindBot.Game ...@@ -351,7 +351,6 @@ namespace WindBot.Game
private void OnTagSwap(BinaryReader packet) private void OnTagSwap(BinaryReader packet)
{ {
int player = GetLocalPlayer(packet.ReadByte()); int player = GetLocalPlayer(packet.ReadByte());
//Logger.DebugWriteLine("swap " + player);
int mcount = packet.ReadByte(); int mcount = packet.ReadByte();
int ecount = packet.ReadByte(); int ecount = packet.ReadByte();
/*int pcount = */ packet.ReadByte(); /*int pcount = */ packet.ReadByte();
...@@ -768,7 +767,7 @@ namespace WindBot.Game ...@@ -768,7 +767,7 @@ namespace WindBot.Game
} }
IList<int> used = _ai.OnSelectCounter(type, quantity, cards, counters); IList<int> used = _ai.OnSelectCounter(type, quantity, cards, counters);
byte[] result = new byte[used.Count*2]; byte[] result = new byte[used.Count * 2];
for (int i = 0; i < used.Count; ++i) for (int i = 0; i < used.Count; ++i)
{ {
result[i * 2] = (byte)(used[i] & 0xff); result[i * 2] = (byte)(used[i] & 0xff);
......
The MIT License (MIT)
Copyright (c) 2015-2017 IceYGO
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
...@@ -6,11 +6,11 @@ using System.Runtime.InteropServices; ...@@ -6,11 +6,11 @@ using System.Runtime.InteropServices;
// set of attributes. Change these attribute values to modify the information // set of attributes. Change these attribute values to modify the information
// associated with an assembly. // associated with an assembly.
[assembly: AssemblyTitle("WindBot")] [assembly: AssemblyTitle("WindBot")]
[assembly: AssemblyDescription("A C# bot for ygopro, compatible with ygosharp.")] [assembly: AssemblyDescription("A C# bot for YGOPro.")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Ice")] [assembly: AssemblyCompany("IceYGO")]
[assembly: AssemblyProduct("WindBot")] [assembly: AssemblyProduct("WindBot")]
[assembly: AssemblyCopyright("Copyright © Ice 2015")] [assembly: AssemblyCopyright("Copyright © IceYGO 2015-2017")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
......
# WindBot # WindBot
A C# bot for ygopro, compatible with the [YGOSharp](https://github.com/IceYGO/ygosharp) and [SRVPro](https://github.com/moecube/srvpro) server. A C# bot for YGOPro, compatible with the [YGOSharp](https://github.com/IceYGO/ygosharp) and [SRVPro](https://github.com/moecube/srvpro) server.
### How to use: ### How to use:
...@@ -107,8 +107,6 @@ The parameters are same as commandlines, but low cased. ...@@ -107,8 +107,6 @@ The parameters are same as commandlines, but low cased.
### Known issues ### Known issues
* The bot will attack synchro monsters next to _Ultimaya Tzolkin_ because it don't know _Ultimaya Tzolkin_ can't be attacked.
* The attack won't be canceled when battle replay happens. * The attack won't be canceled when battle replay happens.
* If one chain includes two activation that use `AI.SelectCard`, the second one won't select correctly. * If one chain includes two activation that use `AI.SelectCard`, the second one won't select correctly.
...@@ -125,6 +123,12 @@ The parameters are same as commandlines, but low cased. ...@@ -125,6 +123,12 @@ The parameters are same as commandlines, but low cased.
* `AI.SelectTribute` * `AI.SelectTribute`
* Select cards to pendulum summon in executor.
* Get equip of card.
* Get attack target.
* Better new master rule support * Better new master rule support
* Update the known card enums * Update the known card enums
......
...@@ -111,6 +111,7 @@ ...@@ -111,6 +111,7 @@
<Compile Include="Game\AI\Dialogs.cs" /> <Compile Include="Game\AI\Dialogs.cs" />
<Compile Include="Game\AI\Enums\DangerousMonster.cs" /> <Compile Include="Game\AI\Enums\DangerousMonster.cs" />
<Compile Include="Game\AI\Enums\FusionSpell.cs" /> <Compile Include="Game\AI\Enums\FusionSpell.cs" />
<Compile Include="Game\AI\Enums\PreventActivationEffectInBattle.cs" />
<Compile Include="Game\AI\Enums\OneForXyz.cs" /> <Compile Include="Game\AI\Enums\OneForXyz.cs" />
<Compile Include="Game\AI\Enums\InvincibleMonster.cs" /> <Compile Include="Game\AI\Enums\InvincibleMonster.cs" />
<Compile Include="Game\AI\Enums\Floodgate.cs" /> <Compile Include="Game\AI\Enums\Floodgate.cs" />
......
using System; using System;
namespace WindBot namespace WindBot
{ {
public class WindBotInfo public class WindBotInfo
{ {
public string Name { get; set; } public string Name { get; set; }
public string Deck { get; set; } public string Deck { get; set; }
public string Dialog { get; set; } public string Dialog { get; set; }
public string Host { get; set; } public string Host { get; set; }
public int Port { get; set; } public int Port { get; set; }
public string HostInfo { get; set; } public string HostInfo { get; set; }
public int Version { get; set; } public int Version { get; set; }
public int Hand { get; set; } public int Hand { get; set; }
public WindBotInfo() public WindBotInfo()
{ {
Name = "WindBot"; Name = "WindBot";
Deck = null; Deck = null;
Dialog = "default"; Dialog = "default";
Host = "127.0.0.1"; Host = "127.0.0.1";
Port = 7911; Port = 7911;
HostInfo = ""; HostInfo = "";
Version = 0x233C; Version = 0x1340;
Hand = 0; Hand = 0;
} }
} }
} }
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