Commit 36a817aa authored by Momobako's avatar Momobako

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

parents 34f1c0db b489285e
......@@ -23,7 +23,6 @@
70368879
71490127
73628505
73628505
81439173
5318639
5318639
......@@ -32,6 +31,7 @@
60004971
62265044
62265044
62265044
44095762
58120309
58120309
......
......@@ -6,6 +6,9 @@
74852097
74852097
74852097
81823360
81823360
81823360
75195825
75195825
75195825
......@@ -15,9 +18,6 @@
33256280
33256280
33256280
51934376
51934376
51934376
85138716
85138716
85138716
......
......@@ -121,9 +121,9 @@ namespace WindBot.Game.AI
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)
{
......@@ -135,9 +135,9 @@ namespace WindBot.Game.AI
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)
{
......
......@@ -10,7 +10,7 @@ namespace WindBot.Game.AI
/// </summary>
public static bool IsMonsterInvincible(this ClientCard card)
{
return Enum.IsDefined(typeof(InvincibleMonster), card.Id);
return !card.IsDisabled() && Enum.IsDefined(typeof(InvincibleMonster), card.Id);
}
/// <summary>
......@@ -18,7 +18,15 @@ namespace WindBot.Game.AI
/// </summary>
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)
......
......@@ -12,26 +12,26 @@ namespace WindBot.Game.AI.Decks
{
public class CardId
{
public static int KrisTheCrackOfDawn = 81105204;
public static int SiroccoTheDawn = 75498415;
public static int ShuraTheBlueFlame = 58820853;
public static int BoraTheSpear = 49003716;
public static int KalutTheMoonShadow = 85215458;
public static int GaleTheWhirlwind = 2009101;
public static int BlizzardTheFarNorth = 22835145;
public static int MistralTheSilverShield = 46710683;
public static int Raigeki = 12580477;
public static int DarkHole = 53129443;
public static int MysticalSpaceTyphoon = 5318639;
public static int BlackWhirlwind = 91351370;
public static int MirrorForce = 44095762;
public static int DeltaCrowAntiReverse = 59839761;
public static int DimensionalPrison = 70342110;
public static int SilverwindTheAscendant = 33236860;
public static int BlackWingedDragon = 9012916;
public static int ArmorMaster = 69031175;
public static int ArmedWing = 76913983;
public static int GramTheShiningStar = 17377751;
public const int KrisTheCrackOfDawn = 81105204;
public const int SiroccoTheDawn = 75498415;
public const int ShuraTheBlueFlame = 58820853;
public const int BoraTheSpear = 49003716;
public const int KalutTheMoonShadow = 85215458;
public const int GaleTheWhirlwind = 2009101;
public const int BlizzardTheFarNorth = 22835145;
public const int MistralTheSilverShield = 46710683;
public const int Raigeki = 12580477;
public const int DarkHole = 53129443;
public const int MysticalSpaceTyphoon = 5318639;
public const int BlackWhirlwind = 91351370;
public const int MirrorForce = 44095762;
public const int DeltaCrowAntiReverse = 59839761;
public const int DimensionalPrison = 70342110;
public const int SilverwindTheAscendant = 33236860;
public const int BlackWingedDragon = 9012916;
public const int ArmorMaster = 69031175;
public const int ArmedWing = 76913983;
public const int GramTheShiningStar = 17377751;
}
public BlackwingExecutor(GameAI ai, Duel duel)
......@@ -82,13 +82,6 @@ namespace WindBot.Game.AI.Decks
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()
{
if (Bot.HasInMonstersZone(CardId.SiroccoTheDawn) && Bot.GetMonsters().GetHighestAttackMonster().Attack < 3800)
......
This diff is collapsed.
......@@ -11,28 +11,28 @@ namespace WindBot.Game.AI.Decks
{
public class CardId
{
public static int LavaGolem = 102380;
public static int ReflectBounder = 2851070;
public static int FencingFireFerret = 97396380;
public static int BlastSphere = 26302522;
public static int Marshmallon = 31305911;
public static int SpiritReaper = 23205979;
public static int NaturiaBeans = 44789585;
public static int ThunderShort = 20264508;
public static int Ookazi = 19523799;
public static int GoblinThief = 45311864;
public static int TremendousFire = 46918794;
public static int SwordsOfRevealingLight = 72302403;
public static int SupremacyBerry = 98380593;
public static int ChainEnergy = 79323590;
public static int DarkRoomofNightmare = 85562745;
public static int PoisonOfTheOldMan = 8842266;
public static int OjamaTrio = 29843091;
public static int Ceasefire = 36468556;
public static int MagicCylinder = 62279055;
public static int MinorGoblinOfficial = 1918087;
public static int ChainBurst = 48276469;
public static int SkullInvitation = 98139712;
public const int LavaGolem = 102380;
public const int ReflectBounder = 2851070;
public const int FencingFireFerret = 97396380;
public const int BlastSphere = 26302522;
public const int Marshmallon = 31305911;
public const int SpiritReaper = 23205979;
public const int NaturiaBeans = 44789585;
public const int ThunderShort = 20264508;
public const int Ookazi = 19523799;
public const int GoblinThief = 45311864;
public const int TremendousFire = 46918794;
public const int SwordsOfRevealingLight = 72302403;
public const int SupremacyBerry = 98380593;
public const int ChainEnergy = 79323590;
public const int DarkRoomofNightmare = 85562745;
public const int PoisonOfTheOldMan = 8842266;
public const int OjamaTrio = 29843091;
public const int Ceasefire = 36468556;
public const int MagicCylinder = 62279055;
public const int MinorGoblinOfficial = 1918087;
public const int ChainBurst = 48276469;
public const int SkullInvitation = 98139712;
}
public BurnExecutor(GameAI ai, Duel duel)
......
......@@ -14,33 +14,33 @@ namespace WindBot.Game.AI.Decks
public class CardId
{
public static int CyberLaserDragon = 4162088;
public static int CyberBarrierDragon = 68774379;
public static int CyberDragon = 70095154;
public static int CyberDragonDrei = 59281922;
public static int CyberPhoenix = 3370104;
public static int ArmoredCybern = 67159705;
public static int ProtoCyberDragon = 26439287;
public static int CyberKirin = 76986005;
public static int CyberDragonCore = 23893227;
public static int CyberValley = 3657444;
public static int Raigeki = 12580477;
public static int DarkHole = 53129443;
public static int DifferentDimensionCapsule = 11961740;
public static int Polymerization = 24094653;
public static int PowerBond = 37630732;
public static int EvolutionBurst = 52875873;
public static int PhotonGeneratorUnit = 66607691;
public static int DeFusion = 95286165;
public static int BottomlessTrapHole = 29401950;
public static int MirrorForce = 44095762;
public static int AttackReflectorUnit = 91989718;
public static int CyberneticHiddenTechnology = 92773018;
public static int CallOfTheHaunted = 97077563;
public static int SevenToolsOfTheBandit = 3819470;
public static int CyberTwinDragon = 74157028;
public static int CyberEndDragon = 1546123;
public static int CyberDragonNova = 58069384;
public const int CyberLaserDragon = 4162088;
public const int CyberBarrierDragon = 68774379;
public const int CyberDragon = 70095154;
public const int CyberDragonDrei = 59281922;
public const int CyberPhoenix = 3370104;
public const int ArmoredCybern = 67159705;
public const int ProtoCyberDragon = 26439287;
public const int CyberKirin = 76986005;
public const int CyberDragonCore = 23893227;
public const int CyberValley = 3657444;
public const int Raigeki = 12580477;
public const int DarkHole = 53129443;
public const int DifferentDimensionCapsule = 11961740;
public const int Polymerization = 24094653;
public const int PowerBond = 37630732;
public const int EvolutionBurst = 52875873;
public const int PhotonGeneratorUnit = 66607691;
public const int DeFusion = 95286165;
public const int BottomlessTrapHole = 29401950;
public const int MirrorForce = 44095762;
public const int AttackReflectorUnit = 91989718;
public const int CyberneticHiddenTechnology = 92773018;
public const int CallOfTheHaunted = 97077563;
public const int SevenToolsOfTheBandit = 3819470;
public const int CyberTwinDragon = 74157028;
public const int CyberEndDragon = 1546123;
public const int CyberDragonNova = 58069384;
}
public CyberDragonExecutor(GameAI ai, Duel duel)
......@@ -96,7 +96,7 @@ namespace WindBot.Game.AI.Decks
private bool Capsule()
{
List<int> SelectedCard = new List<int>();
IList<int> SelectedCard = new List<int>();
SelectedCard.Add(CardId.PowerBond);
SelectedCard.Add(CardId.DarkHole);
SelectedCard.Add(CardId.Raigeki);
......
......@@ -11,8 +11,8 @@ namespace WindBot.Game.AI.Decks
{
public class CardId
{
public static int LeoWizard = 4392470;
public static int Bunilla = 69380702;
public const int LeoWizard = 4392470;
public const int Bunilla = 69380702;
}
public DoEverythingExecutor(GameAI ai, Duel duel)
......
......@@ -11,32 +11,32 @@ namespace WindBot.Game.AI.Decks
{
public class CardId
{
public static int StardustDragonAssaultMode = 61257789;
public static int DragunityArmaMysletainn = 876330;
public static int AssaultBeast = 3431737;
public static int DragunityDux = 28183605;
public static int DragunityPhalanx = 59755122;
public static int AssaultTeleport = 29863101;
public static int CardsOfConsonance = 39701395;
public static int UpstartGoblin = 70368879;
public static int DragonsMirror = 71490127;
public static int Terraforming = 73628505;
public static int FoolishBurial = 81439173;
public static int MonsterReborn = 83764718;
public static int MysticalSpaceTyphoon = 5318639;
public static int FireFormationTenki = 57103969;
public static int DragunitySpearOfDestiny = 60004971;
public static int DragonRavine = 62265044;
public static int MirrorForce = 44095762;
public static int StarlightRoad = 58120309;
public static int DimensionalPrison = 70342110;
public static int AssaultModeActivate = 80280737;
public static int FiveHeadedDragon = 99267150;
public static int CrystalWingSynchroDragon = 50954680;
public static int ScrapDragon = 76774528;
public static int StardustDragon = 44508094;
public static int DragunityKnightGaeDearg = 34116027;
public static int DragunityKnightVajrayana = 21249921;
public const int StardustDragonAssaultMode = 61257789;
public const int DragunityArmaMysletainn = 876330;
public const int AssaultBeast = 3431737;
public const int DragunityDux = 28183605;
public const int DragunityPhalanx = 59755122;
public const int AssaultTeleport = 29863101;
public const int CardsOfConsonance = 39701395;
public const int UpstartGoblin = 70368879;
public const int DragonsMirror = 71490127;
public const int Terraforming = 73628505;
public const int FoolishBurial = 81439173;
public const int MonsterReborn = 83764718;
public const int MysticalSpaceTyphoon = 5318639;
public const int FireFormationTenki = 57103969;
public const int DragunitySpearOfDestiny = 60004971;
public const int DragonRavine = 62265044;
public const int MirrorForce = 44095762;
public const int StarlightRoad = 58120309;
public const int DimensionalPrison = 70342110;
public const int AssaultModeActivate = 80280737;
public const int FiveHeadedDragon = 99267150;
public const int CrystalWingSynchroDragon = 50954680;
public const int ScrapDragon = 76774528;
public const int StardustDragon = 44508094;
public const int DragunityKnightGaeDearg = 34116027;
public const int DragunityKnightVajrayana = 21249921;
}
public DragunityExecutor(GameAI ai, Duel duel)
......@@ -200,7 +200,7 @@ namespace WindBot.Game.AI.Decks
else
option = 1;
if (ActivateDescription != CardId.DragonRavine*16 + option)
if (ActivateDescription != AI.Utils.GetStringId(CardId.DragonRavine, option))
return false;
AI.SelectCard(tributeId);
......@@ -243,20 +243,13 @@ namespace WindBot.Game.AI.Decks
private bool FoolishBurial()
{
if (Bot.HasInGraveyard(CardId.DragunityPhalanx))
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(new[]
{
AI.SelectCard(CardId.DragunityPhalanx);
return true;
}
return false;
CardId.DragunityPhalanx,
CardId.AssaultBeast,
CardId.StardustDragonAssaultMode
});
return true;
}
private bool MonsterReborn()
......@@ -344,13 +337,13 @@ namespace WindBot.Game.AI.Decks
{
//if (AI.Utils.IsOneEnemyBetterThanValue(2500, true))
// return true;
ClientCard invincible = AI.Utils.GetProblematicEnemyCard();
ClientCard invincible = AI.Utils.GetProblematicEnemyCard(3000);
return invincible != null;
}
private bool ScrapDragonEffect()
{
ClientCard invincible = AI.Utils.GetProblematicEnemyCard();
ClientCard invincible = AI.Utils.GetProblematicEnemyCard(3000);
if (invincible == null && !AI.Utils.IsOneEnemyBetterThanValue(2800 - 1, false))
return false;
......
......@@ -12,12 +12,12 @@ namespace WindBot.Game.AI.Decks
{
public class CardId
{
public static int DarkHole = 53129443;
public static int CosmicCyclone = 8267140;
public static int InfestationPandemic = 27541267;
public static int SolemnJudgment = 41420027;
public static int SolemnWarning = 84749824;
public static int SolemnStrike = 40605147;
public const int DarkHole = 53129443;
public const int CosmicCyclone = 8267140;
public const int InfestationPandemic = 27541267;
public const int SolemnJudgment = 41420027;
public const int SolemnWarning = 84749824;
public const int SolemnStrike = 40605147;
}
public EvilswarmExecutor(GameAI ai, Duel duel)
......
......@@ -11,25 +11,25 @@ namespace WindBot.Game.AI.Decks
{
public class CardId
{
public static int CryomancerOfTheIceBarrier = 23950192;
public static int DewdarkOfTheIceBarrier = 90311614;
public static int SubmarineFrog = 63948258;
public static int SwapFrog = 9126351;
public static int FlipFlopFrog = 81278754;
public static int Unifrog = 56052205;
public static int Ronintoadin = 1357146;
public static int DupeFrog = 46239604;
public static int Tradetoad = 23408872;
public static int TreebornFrog = 12538374;
public static int DarkHole = 53129443;
public static int Raigeki = 12580477;
public static int Terraforming = 73628505;
public static int PotOfDuality = 98645731;
public static int Solidarity = 86780027;
public static int Wetlands = 2084239;
public static int FroggyForcefield = 34351849;
public static int GravityBind = 85742772;
public static int TheHugeRevolutionIsOver = 99188141;
public const int CryomancerOfTheIceBarrier = 23950192;
public const int DewdarkOfTheIceBarrier = 90311614;
public const int SubmarineFrog = 63948258;
public const int SwapFrog = 9126351;
public const int FlipFlopFrog = 81278754;
public const int Unifrog = 56052205;
public const int Ronintoadin = 1357146;
public const int DupeFrog = 46239604;
public const int Tradetoad = 23408872;
public const int TreebornFrog = 12538374;
public const int DarkHole = 53129443;
public const int Raigeki = 12580477;
public const int Terraforming = 73628505;
public const int PotOfDuality = 98645731;
public const int Solidarity = 86780027;
public const int Wetlands = 2084239;
public const int FroggyForcefield = 34351849;
public const int GravityBind = 85742772;
public const int TheHugeRevolutionIsOver = 99188141;
}
public FrogExecutor(GameAI ai, Duel duel)
......@@ -84,15 +84,6 @@ namespace WindBot.Game.AI.Decks
private int m_swapFrogSummoned;
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()
{
int atk = Card.Attack + GetSpellBonus();
......
......@@ -12,30 +12,30 @@ namespace WindBot.Game.AI.Decks
{
public class CardId
{
public static int GravekeepersOracle = 25524823;
public static int MaleficStardustDragon = 36521459;
public static int GravekeepersVisionary = 3825890;
public static int GravekeepersChief = 62473983;
public static int ThunderKingRaiOh = 71564252;
public static int GravekeepersCommandant = 17393207;
public static int GravekeepersAssailant = 25262697;
public static int GravekeepersDescendant = 30213599;
public static int GravekeepersSpy = 24317029;
public static int GravekeepersRecruiter = 93023479;
public static int AllureOfDarkness = 1475311;
public static int DarkHole = 53129443;
public static int RoyalTribute = 72405967;
public static int GravekeepersStele = 99523325;
public static int MysticalSpaceTyphoon = 5318639;
public static int BookofMoon = 14087893;
public static int HiddenTemplesOfNecrovalley = 70000776;
public static int Necrovalley = 47355498;
public static int BottomlessTrapHole = 29401950;
public static int RiteOfSpirit = 30450531;
public static int TorrentialTribute = 53582587;
public static int DimensionalPrison = 70342110;
public static int SolemnWarning = 84749824;
public static int ImperialTombsOfNecrovalley = 90434657;
public const int GravekeepersOracle = 25524823;
public const int MaleficStardustDragon = 36521459;
public const int GravekeepersVisionary = 3825890;
public const int GravekeepersChief = 62473983;
public const int ThunderKingRaiOh = 71564252;
public const int GravekeepersCommandant = 17393207;
public const int GravekeepersAssailant = 25262697;
public const int GravekeepersDescendant = 30213599;
public const int GravekeepersSpy = 24317029;
public const int GravekeepersRecruiter = 93023479;
public const int AllureOfDarkness = 1475311;
public const int DarkHole = 53129443;
public const int RoyalTribute = 72405967;
public const int GravekeepersStele = 99523325;
public const int MysticalSpaceTyphoon = 5318639;
public const int BookofMoon = 14087893;
public const int HiddenTemplesOfNecrovalley = 70000776;
public const int Necrovalley = 47355498;
public const int BottomlessTrapHole = 29401950;
public const int RiteOfSpirit = 30450531;
public const int TorrentialTribute = 53582587;
public const int DimensionalPrison = 70342110;
public const int SolemnWarning = 84749824;
public const int ImperialTombsOfNecrovalley = 90434657;
}
public GravekeeperExecutor(GameAI ai, Duel duel)
......
......@@ -12,11 +12,11 @@ namespace WindBot.Game.AI.Decks
{
public class CardId
{
public static int DarkHole = 53129443;
public static int CosmicCyclone = 8267140;
public static int SolemnJudgment = 41420027;
public static int SolemnWarning = 84749824;
public static int SolemnStrike = 40605147;
public const int DarkHole = 53129443;
public const int CosmicCyclone = 8267140;
public const int SolemnJudgment = 41420027;
public const int SolemnWarning = 84749824;
public const int SolemnStrike = 40605147;
}
public GraydleExecutor(GameAI ai, Duel duel)
......
......@@ -11,28 +11,28 @@ namespace WindBot.Game.AI.Decks
{
public class CardId
{
public static int AlexandriteDragon = 43096270;
public static int LusterDragon = 11091375;
public static int WhiteNightDragon = 79473793;
public static int HorusTheBlackFlameDragonLv8 = 48229808;
public static int HorusTheBlackFlameDragonLv6 = 11224103;
public static int CyberDragon = 70095154;
public static int AxeDragonute = 84914462;
public static int DodgerDragon = 47013502;
public static int GolemDragon = 9666558;
public static int Raigeki = 12580477;
public static int HammerShot = 26412047;
public static int DarkHole = 53129443;
public static int Fissure = 66788016;
public static int StampingDestruction = 81385346;
public static int FoolishBurial = 81439173;
public static int MonsterReborn = 83764718;
public static int MysticalSpaceTyphoon = 5318639;
public static int BellowOfTheSilverDragon = 80600103;
public static int Mountain = 50913601;
public static int DragonsRebirth = 20638610;
public static int MirrorForce = 44095762;
public static int DimensionalPrison = 70342110;
public const int AlexandriteDragon = 43096270;
public const int LusterDragon = 11091375;
public const int WhiteNightDragon = 79473793;
public const int HorusTheBlackFlameDragonLv8 = 48229808;
public const int HorusTheBlackFlameDragonLv6 = 11224103;
public const int CyberDragon = 70095154;
public const int AxeDragonute = 84914462;
public const int DodgerDragon = 47013502;
public const int GolemDragon = 9666558;
public const int Raigeki = 12580477;
public const int HammerShot = 26412047;
public const int DarkHole = 53129443;
public const int Fissure = 66788016;
public const int StampingDestruction = 81385346;
public const int FoolishBurial = 81439173;
public const int MonsterReborn = 83764718;
public const int MysticalSpaceTyphoon = 5318639;
public const int BellowOfTheSilverDragon = 80600103;
public const int Mountain = 50913601;
public const int DragonsRebirth = 20638610;
public const int MirrorForce = 44095762;
public const int DimensionalPrison = 70342110;
}
public HorusExecutor(GameAI ai, Duel duel) : base(ai, duel)
......
......@@ -12,41 +12,41 @@ namespace WindBot.Game.AI.Decks
{
public class CardId
{
public static int JudgmentDragon = 57774843;
public static int Wulf = 58996430;
public static int Garoth = 59019082;
public static int Raiden = 77558536;
public static int Lyla = 22624373;
public static int Felis = 73176465;
public static int Lumina = 95503687;
public static int Minerva = 40164421;
public static int Ryko = 21502796;
public static int PerformageTrickClown = 67696066;
public static int Goblindbergh = 25259669;
public static int ThousandBlades = 1833916;
public static int Honest = 37742478;
public static int GlowUpBulb = 67441435;
public static int SolarRecharge = 691925;
public static int GalaxyCyclone = 5133471;
public static int HarpiesFeatherDuster = 18144506;
public static int ReinforcementOfTheArmy = 32807846;
public static int MetalfoesFusion = 73594093;
public static int ChargeOfTheLightBrigade = 94886282;
public static int Michael = 4779823;
public static int MinervaTheExalted = 30100551;
public static int TrishulaDragonOfTheIceBarrier = 52687916;
public static int ScarlightRedDragonArchfiend = 80666118;
public static int PSYFramelordOmega = 74586817;
public static int PSYFramelordZeta = 37192109;
public static int NumberS39UtopiatheLightning = 56832966;
public static int Number39Utopia = 84013237;
public static int CastelTheSkyblasterMusketeer = 82633039;
public static int EvilswarmExcitonKnight = 46772449;
public static int DanteTravelerOfTheBurningAbyss = 83531441;
public static int DecodeTalker = 1861629;
public static int MissusRadiant = 3987233;
public const int JudgmentDragon = 57774843;
public const int Wulf = 58996430;
public const int Garoth = 59019082;
public const int Raiden = 77558536;
public const int Lyla = 22624373;
public const int Felis = 73176465;
public const int Lumina = 95503687;
public const int Minerva = 40164421;
public const int Ryko = 21502796;
public const int PerformageTrickClown = 67696066;
public const int Goblindbergh = 25259669;
public const int ThousandBlades = 1833916;
public const int Honest = 37742478;
public const int GlowUpBulb = 67441435;
public const int SolarRecharge = 691925;
public const int GalaxyCyclone = 5133471;
public const int HarpiesFeatherDuster = 18144506;
public const int ReinforcementOfTheArmy = 32807846;
public const int MetalfoesFusion = 73594093;
public const int ChargeOfTheLightBrigade = 94886282;
public const int Michael = 4779823;
public const int MinervaTheExalted = 30100551;
public const int TrishulaDragonOfTheIceBarrier = 52687916;
public const int ScarlightRedDragonArchfiend = 80666118;
public const int PSYFramelordOmega = 74586817;
public const int PSYFramelordZeta = 37192109;
public const int NumberS39UtopiatheLightning = 56832966;
public const int Number39Utopia = 84013237;
public const int CastelTheSkyblasterMusketeer = 82633039;
public const int EvilswarmExcitonKnight = 46772449;
public const int DanteTravelerOfTheBurningAbyss = 83531441;
public const int DecodeTalker = 1861629;
public const int MissusRadiant = 3987233;
}
bool ClownUsed = false;
......@@ -95,19 +95,12 @@ namespace WindBot.Game.AI.Decks
public override bool OnPreBattleBetween(ClientCard attacker, ClientCard defender)
{
if (defender.IsMonsterInvincible())
{
if (defender.IsMonsterDangerous() || defender.IsDefense())
return false;
}
if (!(defender.Id == CardId.NumberS39UtopiatheLightning))
if (!defender.IsMonsterHasPreventActivationEffectInBattle())
{
if (attacker.Attribute == (int)CardAttribute.Light && Bot.HasInHand(CardId.Honest))
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)
......
......@@ -11,8 +11,8 @@ namespace WindBot.Game.AI.Decks
{
public class CardId
{
public static int LeoWizard = 4392470;
public static int Bunilla = 69380702;
public const int LeoWizard = 4392470;
public const int Bunilla = 69380702;
}
private int RockCount = 0;
......@@ -33,10 +33,5 @@ namespace WindBot.Game.AI.Decks
else
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
{
public class CardId
{
public static int LeoWizard = 4392470;
public static int Bunilla = 69380702;
public const int LeoWizard = 4392470;
public const int Bunilla = 69380702;
}
private int RockCount = 0;
......
......@@ -12,31 +12,31 @@ namespace WindBot.Game.AI.Decks
{
public class CardId
{
public static int DancePrincess = 52738610;
public static int ThousandHands = 23401839;
public static int TenThousandHands = 95492061;
public static int Shurit = 90307777;
public static int MaxxC = 23434538;
public static int DecisiveArmor = 88240999;
public static int Trishula = 52068432;
public static int Valkyrus = 25857246;
public static int Gungnir = 74122412;
public static int Brionac = 26674724;
public static int Unicore = 89463537;
public static int Clausolas = 99185129;
public static int PhantomOfChaos = 30312361;
public const int DancePrincess = 52738610;
public const int ThousandHands = 23401839;
public const int TenThousandHands = 95492061;
public const int Shurit = 90307777;
public const int MaxxC = 23434538;
public const int DecisiveArmor = 88240999;
public const int Trishula = 52068432;
public const int Valkyrus = 25857246;
public const int Gungnir = 74122412;
public const int Brionac = 26674724;
public const int Unicore = 89463537;
public const int Clausolas = 99185129;
public const int PhantomOfChaos = 30312361;
public static int DarkHole = 53129443;
public static int ReinforcementOfTheArmy = 32807846;
public static int TradeIn = 38120068;
public static int PreparationOfRites = 96729612;
public static int Mirror = 14735698;
public static int Kaleidoscope = 51124303;
public static int Cycle = 97211663;
public static int MysticalSpaceTyphoon = 5318639;
public static int RoyalDecree = 51452091;
public static int EvilswarmExcitonKnight = 46772449;
public static int HeraldOfTheArcLight = 79606837;
public const int DarkHole = 53129443;
public const int ReinforcementOfTheArmy = 32807846;
public const int TradeIn = 38120068;
public const int PreparationOfRites = 96729612;
public const int Mirror = 14735698;
public const int Kaleidoscope = 51124303;
public const int Cycle = 97211663;
public const int MysticalSpaceTyphoon = 5318639;
public const int RoyalDecree = 51452091;
public const int EvilswarmExcitonKnight = 46772449;
public const int HeraldOfTheArcLight = 79606837;
}
List<int> NekrozRituelCard = new List<int>();
......
......@@ -11,26 +11,26 @@ namespace WindBot.Game.AI.Decks
{
public class CardId
{
public static int AncientGearGolem = 83104731;
public static int Frostosaurus = 6631034;
public static int AlexandriteDragon = 43096270;
public static int GeneWarpedWarwolf = 69247929;
public static int GearGolemTheMovingFortress = 30190809;
public static int EvilswarmHeliotrope = 77542832;
public static int LusterDragon = 11091375;
public static int InsectKnight = 35052053;
public static int ArchfiendSoldier = 49881766;
public static int HeavyStorm = 19613556;
public static int DarkHole = 53129443;
public static int Raigeki = 12580477;
public static int HammerShot = 26412047;
public static int Fissure = 66788016;
public static int SwordsOfRevealingLight = 72302403;
public static int DoubleSummon = 43422537;
public static int MirrorForce = 44095762;
public static int DimensionalPrison = 70342110;
public const int AncientGearGolem = 83104731;
public const int Frostosaurus = 6631034;
public const int AlexandriteDragon = 43096270;
public const int GeneWarpedWarwolf = 69247929;
public const int GearGolemTheMovingFortress = 30190809;
public const int EvilswarmHeliotrope = 77542832;
public const int LusterDragon = 11091375;
public const int InsectKnight = 35052053;
public const int ArchfiendSoldier = 49881766;
public const int HeavyStorm = 19613556;
public const int DarkHole = 53129443;
public const int Raigeki = 12580477;
public const int HammerShot = 26412047;
public const int Fissure = 66788016;
public const int SwordsOfRevealingLight = 72302403;
public const int DoubleSummon = 43422537;
public const int MirrorForce = 44095762;
public const int DimensionalPrison = 70342110;
}
......@@ -64,13 +64,6 @@ namespace WindBot.Game.AI.Decks
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()
{
if (_lastDoubleSummon == Duel.Turn)
......
......@@ -11,34 +11,36 @@ namespace WindBot.Game.AI.Decks
{
public class CardId
{
public static int Scout = 65518099;
public static int Stealth = 13073850;
public static int Shell = 90885155;
public static int Helix = 37991342;
public static int Carrier = 91907707;
public static int DarkHole = 53129443;
public static int CardOfDemise = 59750328;
public static int SummonersArt = 79816536;
public static int PotOfDuality = 98645731;
public static int Saqlifice = 17639150;
public static int MirrorForce = 44095762;
public static int TorrentialTribute = 53582587;
public static int DimensionalBarrier = 83326048;
public static int CompulsoryEvacuationDevice = 94192409;
public static int VanitysEmptiness = 5851097;
public static int SkillDrain = 82732705;
public static int SolemnStrike = 40605147;
public static int TheHugeRevolutionIsOver = 99188141;
public const int Scout = 65518099;
public const int Stealth = 13073850;
public const int Shell = 90885155;
public const int Helix = 37991342;
public const int Carrier = 91907707;
public const int DarkHole = 53129443;
public const int CardOfDemise = 59750328;
public const int SummonersArt = 79816536;
public const int PotOfDuality = 98645731;
public const int Saqlifice = 17639150;
public const int MirrorForce = 44095762;
public const int TorrentialTribute = 53582587;
public const int DimensionalBarrier = 83326048;
public const int CompulsoryEvacuationDevice = 94192409;
public const int VanitysEmptiness = 5851097;
public const int SkillDrain = 82732705;
public const int SolemnStrike = 40605147;
public const int TheHugeRevolutionIsOver = 99188141;
}
bool CardOfDemiseUsed = false;
List<int> LowScaleCards = new List<int>
IList<int> LowScaleCards = new[]
{
CardId.Stealth,
CardId.Carrier
};
List<int> HighScaleCards = new List<int>
IList<int> HighScaleCards = new[]
{
CardId.Scout,
CardId.Shell,
......@@ -136,11 +138,18 @@ namespace WindBot.Game.AI.Decks
{
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)
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;
}
......@@ -189,9 +198,9 @@ namespace WindBot.Game.AI.Decks
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 TrapSetWhenZoneFree();
......
This diff is collapsed.
This diff is collapsed.
......@@ -11,44 +11,44 @@ namespace WindBot.Game.AI.Decks
{
public class CardId
{
public static int Digitron = 32295838;
public static int Bitron = 36211150;
public static int DualAssembloom = 7445307;
public static int BootStagguard = 70950698;
public static int Linkslayer = 35595518;
public static int RAMClouder = 9190563;
public static int ROMCloudia = 44956694;
public static int BalancerLord = 8567955;
public static int Backlinker = 71172240;
public static int Kleinant = 45778242;
public static int Draconnet = 62706865;
public static int DotScaper = 18789533;
public static int MindControl = 37520316;
public static int DarkHole = 53129443;
public static int MonsterReborn = 83764718;
public static int MysticalSpaceTyphoon = 5318639;
public static int CosmicCyclone = 8267140;
public static int BookOfMoon = 14087893;
public static int CynetBackdoor = 43839002;
public static int MoonMirrorShield = 19508728;
public static int CynetUniverse = 61583217;
public static int BottomlessTrapHole = 29401950;
public static int MirrorForce = 44095762;
public static int TorrentialTribute = 53582587;
public static int RecodedAlive = 70238111;
public static int DimensionalBarrier = 83326048;
public static int CompulsoryEvacuationDevice = 94192409;
public static int SolemnStrike = 40605147;
public static int DecodeTalker = 1861629;
public static int EncodeTalker = 6622715;
public static int TriGateWizard = 32617464;
public static int Honeybot = 34472920;
public static int BinarySorceress = 79016563;
public static int LinkSpider = 98978921;
public static int StagToken = 70950699;
public const int Digitron = 32295838;
public const int Bitron = 36211150;
public const int DualAssembloom = 7445307;
public const int BootStagguard = 70950698;
public const int Linkslayer = 35595518;
public const int RAMClouder = 9190563;
public const int ROMCloudia = 44956694;
public const int BalancerLord = 8567955;
public const int Backlinker = 71172240;
public const int Kleinant = 45778242;
public const int Draconnet = 62706865;
public const int DotScaper = 18789533;
public const int MindControl = 37520316;
public const int DarkHole = 53129443;
public const int MonsterReborn = 83764718;
public const int MysticalSpaceTyphoon = 5318639;
public const int CosmicCyclone = 8267140;
public const int BookOfMoon = 14087893;
public const int CynetBackdoor = 43839002;
public const int MoonMirrorShield = 19508728;
public const int CynetUniverse = 61583217;
public const int BottomlessTrapHole = 29401950;
public const int MirrorForce = 44095762;
public const int TorrentialTribute = 53582587;
public const int RecodedAlive = 70238111;
public const int DimensionalBarrier = 83326048;
public const int CompulsoryEvacuationDevice = 94192409;
public const int SolemnStrike = 40605147;
public const int DecodeTalker = 1861629;
public const int EncodeTalker = 6622715;
public const int TriGateWizard = 32617464;
public const int Honeybot = 34472920;
public const int BinarySorceress = 79016563;
public const int LinkSpider = 98978921;
public const int StagToken = 70950699;
}
bool BalancerLordUsed = false;
......@@ -212,7 +212,7 @@ namespace WindBot.Game.AI.Decks
private bool MonsterRebornEffect()
{
List<int> targets = new List<int> {
IList<int> targets = new[] {
CardId.DecodeTalker,
CardId.EncodeTalker,
CardId.TriGateWizard,
......@@ -237,8 +237,7 @@ namespace WindBot.Game.AI.Decks
private bool MoonMirrorShieldEffect()
{
List<ClientCard> monsters = Bot.GetMonsters();
foreach (ClientCard monster in monsters)
foreach (ClientCard monster in Bot.GetMonsters())
{
AI.SelectCard(monster);
return true;
......@@ -250,8 +249,7 @@ namespace WindBot.Game.AI.Decks
{
if (Card.Location == CardLocation.Hand)
return DefaultField();
IList<ClientCard> cards = Enemy.Graveyard;
foreach (ClientCard card in cards)
foreach (ClientCard card in Enemy.Graveyard)
{
if (card.IsMonster())
{
......@@ -269,16 +267,10 @@ namespace WindBot.Game.AI.Decks
{
return false;
}
foreach (ClientCard card in Bot.SpellZone)
{
if (card != null &&
card.Id == Card.Id &&
card.HasPosition(CardPosition.FaceUp))
return false;
}
if (!UniqueFaceupSpell())
return false;
bool selected = false;
List<ClientCard> monsters = Bot.GetMonstersInExtraZone();
foreach (ClientCard monster in monsters)
foreach (ClientCard monster in Bot.GetMonstersInExtraZone())
{
if (monster.Attack > 1000)
{
......@@ -289,7 +281,7 @@ namespace WindBot.Game.AI.Decks
}
if (!selected)
{
monsters = Bot.GetMonsters();
List<ClientCard> monsters = Bot.GetMonsters();
foreach (ClientCard monster in monsters)
{
if (monster.Id == CardId.BalancerLord)
......@@ -336,7 +328,7 @@ namespace WindBot.Game.AI.Decks
{
if (Card.Location == CardLocation.Removed)
return true;
bool hastarget = Bot.HasInHand(new List<int> {
bool hastarget = Bot.HasInHand(new[] {
CardId.Draconnet,
CardId.Kleinant,
CardId.BalancerLord,
......@@ -354,7 +346,7 @@ namespace WindBot.Game.AI.Decks
private bool ROMCloudiaSummon()
{
return Bot.HasInGraveyard(new List<int> {
return Bot.HasInGraveyard(new[] {
CardId.BootStagguard,
CardId.BalancerLord,
CardId.Kleinant,
......
This diff is collapsed.
......@@ -11,40 +11,40 @@ namespace WindBot.Game.AI.Decks
{
public class CardId
{
public static int YosenjuKama1 = 65247798;
public static int YosenjuKama2 = 92246806;
public static int YosenjuKama3 = 28630501;
public static int YosenjuTsujik = 25244515;
public static int HarpiesFeatherDuster = 18144507;
public static int DarkHole = 53129443;
public static int CardOfDemise = 59750328;
public static int PotOfDuality = 98645731;
public static int CosmicCyclone = 8267140;
public static int QuakingMirrorForce = 40838625;
public static int DrowningMirrorForce = 47475363;
public static int StarlightRoad = 58120309;
public static int VanitysEmptiness = 5851097;
public static int MacroCosmos = 30241314;
public static int SolemnStrike = 40605147;
public static int SolemnWarning = 84749824;
public static int SolemnJudgment = 41420027;
public static int MagicDrain = 59344077;
public static int StardustDragon = 44508094;
public static int NumberS39UtopiatheLightning = 56832966;
public static int NumberS39UtopiaOne = 86532744;
public static int DarkRebellionXyzDragon = 16195942;
public static int Number39Utopia = 84013237;
public static int Number103Ragnazero = 94380860;
public static int BrotherhoodOfTheFireFistTigerKing = 96381979;
public static int Number106GiantHand = 63746411;
public static int CastelTheSkyblasterMusketeer = 82633039;
public static int DiamondDireWolf = 95169481;
public static int LightningChidori = 22653490;
public static int EvilswarmExcitonKnight = 46772449;
public static int AbyssDweller = 21044178;
public static int GagagaCowboy = 12014404;
public const int YosenjuKama1 = 65247798;
public const int YosenjuKama2 = 92246806;
public const int YosenjuKama3 = 28630501;
public const int YosenjuTsujik = 25244515;
public const int HarpiesFeatherDuster = 18144507;
public const int DarkHole = 53129443;
public const int CardOfDemise = 59750328;
public const int PotOfDuality = 98645731;
public const int CosmicCyclone = 8267140;
public const int QuakingMirrorForce = 40838625;
public const int DrowningMirrorForce = 47475363;
public const int StarlightRoad = 58120309;
public const int VanitysEmptiness = 5851097;
public const int MacroCosmos = 30241314;
public const int SolemnStrike = 40605147;
public const int SolemnWarning = 84749824;
public const int SolemnJudgment = 41420027;
public const int MagicDrain = 59344077;
public const int StardustDragon = 44508094;
public const int NumberS39UtopiatheLightning = 56832966;
public const int NumberS39UtopiaOne = 86532744;
public const int DarkRebellionXyzDragon = 16195942;
public const int Number39Utopia = 84013237;
public const int Number103Ragnazero = 94380860;
public const int BrotherhoodOfTheFireFistTigerKing = 96381979;
public const int Number106GiantHand = 63746411;
public const int CastelTheSkyblasterMusketeer = 82633039;
public const int DiamondDireWolf = 95169481;
public const int LightningChidori = 22653490;
public const int EvilswarmExcitonKnight = 46772449;
public const int AbyssDweller = 21044178;
public const int GagagaCowboy = 12014404;
}
bool CardOfDemiseUsed = false;
......@@ -171,19 +171,12 @@ namespace WindBot.Game.AI.Decks
public override bool OnPreBattleBetween(ClientCard attacker, ClientCard defender)
{
if (defender.IsMonsterInvincible())
{
if (defender.IsMonsterDangerous() || defender.IsDefense())
return false;
}
if (!(defender.Id == CardId.NumberS39UtopiatheLightning))
if (!defender.IsMonsterHasPreventActivationEffectInBattle())
{
if (attacker.Attribute == (int)CardAttribute.Wind && Bot.HasInHand(CardId.YosenjuTsujik))
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()
......@@ -240,9 +233,9 @@ namespace WindBot.Game.AI.Decks
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 false;
......@@ -250,9 +243,9 @@ namespace WindBot.Game.AI.Decks
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 TrapSetWhenZoneFree();
......@@ -315,12 +308,5 @@ namespace WindBot.Game.AI.Decks
}
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
{
public class CardId
{
public static int CyberDragon = 70095155;
public static int ZwTornadoBringer = 81471108;
public static int ZwLightningBlade = 45082499;
public static int ZwAsuraStrike = 40941889;
public static int SolarWindJammer = 33911264;
public static int PhotonTrasher = 65367484;
public static int StarDrawing = 24610207;
public static int SacredCrane = 30914564;
public static int Goblindbergh = 25259669;
public static int Honest = 37742478;
public static int Kagetokage = 94656263;
public static int HeroicChallengerExtraSword = 34143852;
public static int TinGoldfish = 18063928;
public static int SummonerMonk = 423585;
public static int InstantFusion = 1845204;
public static int Raigeki = 12580477;
public static int ReinforcementOfTheArmy = 32807846;
public static int DarkHole = 53129443;
public static int MysticalSpaceTyphoon = 5318639;
public static int BreakthroughSkill = 78474168;
public static int SolemnWarning = 84749824;
public static int SolemnStrike = 40605147;
public static int XyzChangeTactics = 11705261;
public const int CyberDragon = 70095155;
public const int ZwTornadoBringer = 81471108;
public const int ZwLightningBlade = 45082499;
public const int ZwAsuraStrike = 40941889;
public const int SolarWindJammer = 33911264;
public const int PhotonTrasher = 65367484;
public const int StarDrawing = 24610207;
public const int SacredCrane = 30914564;
public const int Goblindbergh = 25259669;
public const int Honest = 37742478;
public const int Kagetokage = 94656263;
public const int HeroicChallengerExtraSword = 34143852;
public const int TinGoldfish = 18063928;
public const int SummonerMonk = 423585;
public const int InstantFusion = 1845204;
public const int Raigeki = 12580477;
public const int ReinforcementOfTheArmy = 32807846;
public const int DarkHole = 53129443;
public const int MysticalSpaceTyphoon = 5318639;
public const int BreakthroughSkill = 78474168;
public const int SolemnWarning = 84749824;
public const int SolemnStrike = 40605147;
public const int XyzChangeTactics = 11705261;
public static int FlameSwordsman = 45231177;
public static int DarkfireDragon = 17881964;
public static int GaiaDragonTheThunderCharger = 91949988;
public static int ZwLionArms = 60992364;
public static int AdreusKeeperOfArmageddon = 94119480;
public static int Number61Volcasaurus = 29669359;
public static int GemKnightPearl = 71594310;
public static int Number39Utopia = 84013237;
public static int NumberS39UtopiaOne = 86532744;
public static int NumberS39UtopiatheLightning = 56832966;
public static int MaestrokeTheSymphonyDjinn = 25341652;
public static int GagagaCowboy = 12014404;
public const int FlameSwordsman = 45231177;
public const int DarkfireDragon = 17881964;
public const int GaiaDragonTheThunderCharger = 91949988;
public const int ZwLionArms = 60992364;
public const int AdreusKeeperOfArmageddon = 94119480;
public const int Number61Volcasaurus = 29669359;
public const int GemKnightPearl = 71594310;
public const int Number39Utopia = 84013237;
public const int NumberS39UtopiaOne = 86532744;
public const int NumberS39UtopiatheLightning = 56832966;
public const int MaestrokeTheSymphonyDjinn = 25341652;
public const int GagagaCowboy = 12014404;
}
public ZexalWeaponsExecutor(GameAI ai, Duel duel)
......@@ -128,19 +128,12 @@ namespace WindBot.Game.AI.Decks
public override bool OnPreBattleBetween(ClientCard attacker, ClientCard defender)
{
if (defender.IsMonsterInvincible())
{
if (defender.IsMonsterDangerous() || defender.IsDefense())
return false;
}
if (!(defender.Id == CardId.NumberS39UtopiatheLightning))
if (!defender.IsMonsterHasPreventActivationEffectInBattle())
{
if (attacker.Attribute == (int)CardAttribute.Light && Bot.HasInHand(CardId.Honest))
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()
......@@ -181,10 +174,9 @@ namespace WindBot.Game.AI.Decks
{
if (Duel.LifePoints[0] <= 1000)
return false;
List<ClientCard> monsters = Bot.GetMonsters();
int count4 = 0;
int count5 = 0;
foreach (ClientCard card in monsters)
foreach (ClientCard card in Bot.GetMonsters())
{
if (card.Level == 5)
++count5;
......@@ -221,10 +213,9 @@ namespace WindBot.Game.AI.Decks
private bool GoblindberghFirst()
{
IList<ClientCard> hand = Bot.Hand;
foreach (ClientCard card in hand)
foreach (ClientCard card in Bot.Hand.GetMonsters())
{
if (card != Card && card.IsMonster() && card.Level == 4)
if (!card.Equals(Card) && card.Level == 4)
return true;
}
return false;
......@@ -244,30 +235,32 @@ namespace WindBot.Game.AI.Decks
private bool SummonerMonkEffect()
{
if (Bot.HasInHand(CardId.InstantFusion) ||
Bot.HasInHand(CardId.MysticalSpaceTyphoon))
IList<int> costs = new[]
{
CardId.XyzChangeTactics,
CardId.DarkHole,
CardId.MysticalSpaceTyphoon,
CardId.InstantFusion
};
if (Bot.HasInHand(costs))
{
AI.SelectCard(new[]
AI.SelectCard(costs);
AI.SelectNextCard(new[]
{
CardId.InstantFusion,
CardId.MysticalSpaceTyphoon
CardId.SacredCrane,
CardId.StarDrawing,
CardId.Goblindbergh,
CardId.TinGoldfish
});
AI.SelectPosition(CardPosition.FaceUpDefence);
return true;
}
AI.SelectNextCard(new[]
{
CardId.Goblindbergh,
CardId.TinGoldfish,
CardId.StarDrawing,
CardId.Kagetokage,
CardId.SacredCrane
});
return false;
}
private bool SolarWindJammer()
{
if (!Bot.HasInHand(new List<int> {
if (!Bot.HasInHand(new[] {
CardId.StarDrawing,
CardId.InstantFusion
}))
......
......@@ -11,37 +11,37 @@ namespace WindBot.Game.AI.Decks
{
public class CardId
{
public static int JizukirutheStarDestroyingKaiju = 63941210;
public static int GadarlatheMysteryDustKaiju = 36956512;
public static int GamecieltheSeaTurtleKaiju = 55063751;
public static int RadiantheMultidimensionalKaiju = 28674152;
public static int KumongoustheStickyStringKaiju = 29726552;
public static int PhotonThrasher = 65367484;
public static int Thoroughblade = 77150143;
public static int Whiptail = 31755044;
public static int Ratpier = 78872731;
public static int AleisterTheInvoker = 86120751;
public static int HarpiesFeatherDuster = 18144506;
public static int DarkHole = 53129443;
public static int Terraforming = 73628505;
public static int Invocation = 74063034;
public static int MonsterReborn = 83764718;
public static int InterruptedKaijuSlumber = 99330325;
public static int ZoodiacBarrage = 46060017;
public static int FireFormationTenki = 57103969;
public static int MagicalMeltdown = 47679935;
public static int ZoodiacCombo = 73881652;
public static int InvokedMechaba = 75286621;
public static int InvokedMagellanica = 48791583;
public static int NumberS39UtopiatheLightning = 56832966;
public static int Number39Utopia = 84013237;
public static int DaigustoEmeral = 581014;
public static int Tigermortar = 11510448;
public static int Chakanine = 41375811;
public static int Drident = 48905153;
public static int Broadbull = 85115440;
public const int JizukirutheStarDestroyingKaiju = 63941210;
public const int GadarlatheMysteryDustKaiju = 36956512;
public const int GamecieltheSeaTurtleKaiju = 55063751;
public const int RadiantheMultidimensionalKaiju = 28674152;
public const int KumongoustheStickyStringKaiju = 29726552;
public const int PhotonThrasher = 65367484;
public const int Thoroughblade = 77150143;
public const int Whiptail = 31755044;
public const int Ratpier = 78872731;
public const int AleisterTheInvoker = 86120751;
public const int HarpiesFeatherDuster = 18144506;
public const int DarkHole = 53129443;
public const int Terraforming = 73628505;
public const int Invocation = 74063034;
public const int MonsterReborn = 83764718;
public const int InterruptedKaijuSlumber = 99330325;
public const int ZoodiacBarrage = 46060017;
public const int FireFormationTenki = 57103969;
public const int MagicalMeltdown = 47679935;
public const int ZoodiacCombo = 73881652;
public const int InvokedMechaba = 75286621;
public const int InvokedMagellanica = 48791583;
public const int NumberS39UtopiatheLightning = 56832966;
public const int Number39Utopia = 84013237;
public const int DaigustoEmeral = 581014;
public const int Tigermortar = 11510448;
public const int Chakanine = 41375811;
public const int Drident = 48905153;
public const int Broadbull = 85115440;
}
bool TigermortarSpsummoned = false;
......@@ -133,19 +133,12 @@ namespace WindBot.Game.AI.Decks
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.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;
if (attacker.HasType(CardType.Fusion) && Bot.HasInHand(CardId.AleisterTheInvoker))
attacker.RealPower = attacker.RealPower + 1000;
}
return attacker.RealPower > defender.GetDefensePower();
return base.OnPreBattleBetween(attacker, defender);
}
private bool PhotonThrasherSummon()
......@@ -229,9 +222,7 @@ namespace WindBot.Game.AI.Decks
private void SelectAleisterInGrave()
{
IList<ClientCard> materials0 = Bot.Graveyard;
IList<ClientCard> materials1 = Enemy.Graveyard;
foreach (ClientCard card in materials1)
foreach (ClientCard card in Enemy.Graveyard)
{
if (card.Id == CardId.AleisterTheInvoker)
{
......@@ -239,7 +230,7 @@ namespace WindBot.Game.AI.Decks
return;
}
}
foreach (ClientCard card in materials0)
foreach (ClientCard card in Bot.Graveyard)
{
if (card.Id == CardId.AleisterTheInvoker)
{
......@@ -313,7 +304,7 @@ namespace WindBot.Game.AI.Decks
return true;
}
if (Bot.HasInMonstersZone(CardId.Thoroughblade) && !TigermortarSpsummoned
&& Bot.HasInGraveyard(new List<int>
&& Bot.HasInGraveyard(new[]
{
CardId.Whiptail,
CardId.Ratpier
......@@ -548,8 +539,7 @@ namespace WindBot.Game.AI.Decks
private bool ZoodiacBarrageEffect()
{
IList<ClientCard> spells = Bot.GetSpells();
foreach (ClientCard spell in spells)
foreach (ClientCard spell in Bot.GetSpells())
{
if (spell.Id == CardId.ZoodiacBarrage && !Card.Equals(spell))
return false;
......
......@@ -11,20 +11,28 @@ namespace WindBot.Game.AI
{
protected class _CardId
{
public static int JizukirutheStarDestroyingKaiju = 63941210;
public static int GadarlatheMysteryDustKaiju = 36956512;
public static int GamecieltheSeaTurtleKaiju = 55063751;
public static int RadiantheMultidimensionalKaiju = 28674152;
public static int KumongoustheStickyStringKaiju = 29726552;
public static int ThunderKingtheLightningstrikeKaiju = 48770333;
public static int DogorantheMadFlameKaiju = 93332803;
public static int SuperAntiKaijuWarMachineMechaDogoran = 84769941;
public const int JizukirutheStarDestroyingKaiju = 63941210;
public const int GadarlatheMysteryDustKaiju = 36956512;
public const int GamecieltheSeaTurtleKaiju = 55063751;
public const int RadiantheMultidimensionalKaiju = 28674152;
public const int KumongoustheStickyStringKaiju = 29726552;
public const int ThunderKingtheLightningstrikeKaiju = 48770333;
public const int DogorantheMadFlameKaiju = 93332803;
public const int SuperAntiKaijuWarMachineMechaDogoran = 84769941;
public static int MysticalSpaceTyphoon = 5318639;
public static int CosmicCyclone = 8267140;
public static int ChickenGame = 67616300;
public const int DupeFrog = 46239604;
public const int MaraudingCaptain = 2460565;
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)
......@@ -33,6 +41,55 @@ namespace WindBot.Game.AI
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>
/// Destroy face-down cards first, in our turn.
/// </summary>
......@@ -297,13 +354,8 @@ namespace WindBot.Game.AI
/// </summary>
protected bool DefaultTributeSummon()
{
foreach (ClientCard card in Bot.MonsterZone)
{
if (card != null &&
card.Id == Card.Id &&
card.HasPosition(CardPosition.FaceUp))
return false;
}
if (!UniqueFaceupMonster())
return false;
int tributecount = (int)Math.Ceiling((Card.Level - 4.0d) / 2.0d);
for (int j = 0; j < 7; ++j)
{
......@@ -353,14 +405,32 @@ namespace WindBot.Game.AI
if (HasChainedTrap(0))
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 &&
card.Id == Card.Id &&
card.HasPosition(CardPosition.FaceUp))
if (card.Id == Card.Id && card.IsFaceup())
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;
}
......
......@@ -9,6 +9,11 @@
Yubel = 78371393,
YubelIncarnate = 4779091,
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
return AI.ToMainPhase2();
if (defenders.Count == 0)
return AI.Attack(attackers[0], null);
for (int i = defenders.Count - 1; i >= 0; --i)
{
ClientCard defender = defenders[i];
int def = defender.GetDefensePower();
for (int j = 0; j < attackers.Count; ++j)
for (int i = attackers.Count - 1; i >= 0; --i)
{
ClientCard attacker = attackers[j];
attacker.RealPower = attacker.Attack;
if (!OnPreBattleBetween(attacker, defender))
continue;
if (attacker.RealPower > def || (attacker.RealPower >= def && j == attackers.Count - 1))
return AI.Attack(attacker, defender);
ClientCard attacker = attackers[i];
if (attacker.Attack > 0)
return AI.Attack(attacker, null);
}
}
for (int i = attackers.Count - 1; i >= 0; --i)
else
{
ClientCard attacker = attackers[i];
if (attacker.CanDirectAttack)
return AI.Attack(attacker, null);
for (int i = defenders.Count - 1; i >= 0; --i)
{
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)
return AI.Attack(attackers[attackers.Count - 1], defenders[0]);
return AI.Attack(attackers[0], (defenders.Count == 0) ? null : defenders[0]);
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)
{
if (defender.IsMonsterInvincible())
{
if (defender.IsMonsterDangerous() || defender.IsDefense())
return false;
}
// Overrided in DefalultExecutor
return true;
}
......
......@@ -99,12 +99,23 @@ namespace WindBot.Game
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)
{
return HasInCards(Hand, cardId);
}
public bool HasInHand(List<int> cardId)
public bool HasInHand(IList<int> cardId)
{
return HasInCards(Hand, cardId);
}
......@@ -114,7 +125,7 @@ namespace WindBot.Game
return HasInCards(Graveyard, cardId);
}
public bool HasInGraveyard(List<int> cardId)
public bool HasInGraveyard(IList<int> cardId)
{
return HasInCards(Graveyard, cardId);
}
......@@ -124,7 +135,7 @@ namespace WindBot.Game
return HasInCards(Banished, cardId);
}
public bool HasInBanished(List<int> cardId)
public bool HasInBanished(IList<int> cardId)
{
return HasInCards(Banished, cardId);
}
......@@ -134,7 +145,7 @@ namespace WindBot.Game
return HasInCards(ExtraDeck, cardId);
}
public bool HasInExtra(List<int> cardId)
public bool HasInExtra(IList<int> cardId)
{
return HasInCards(ExtraDeck, cardId);
}
......@@ -166,7 +177,7 @@ namespace WindBot.Game
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);
}
......@@ -176,7 +187,7 @@ namespace WindBot.Game
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);
}
......@@ -264,7 +275,7 @@ namespace WindBot.Game
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)
{
......
......@@ -522,7 +522,7 @@ namespace WindBot.Game
public bool OnSelectYesNo(int desc)
{
if (m_yesno != -1)
return m_yesno>0;
return m_yesno > 0;
return Executor.OnSelectYesNo(desc);
}
......@@ -691,7 +691,7 @@ namespace WindBot.Game
public void SelectYesNo(bool opt)
{
m_yesno = opt?1:0;
m_yesno = opt ? 1 : 0;
}
/// <summary>
......
......@@ -351,7 +351,6 @@ namespace WindBot.Game
private void OnTagSwap(BinaryReader packet)
{
int player = GetLocalPlayer(packet.ReadByte());
//Logger.DebugWriteLine("swap " + player);
int mcount = packet.ReadByte();
int ecount = packet.ReadByte();
/*int pcount = */ packet.ReadByte();
......@@ -768,7 +767,7 @@ namespace WindBot.Game
}
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)
{
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;
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("WindBot")]
[assembly: AssemblyDescription("A C# bot for ygopro, compatible with ygosharp.")]
[assembly: AssemblyDescription("A C# bot for YGOPro.")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Ice")]
[assembly: AssemblyCompany("IceYGO")]
[assembly: AssemblyProduct("WindBot")]
[assembly: AssemblyCopyright("Copyright © Ice 2015")]
[assembly: AssemblyCopyright("Copyright © IceYGO 2015-2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
......
# 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:
......@@ -107,8 +107,6 @@ The parameters are same as commandlines, but low cased.
### 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.
* 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.
* `AI.SelectTribute`
* Select cards to pendulum summon in executor.
* Get equip of card.
* Get attack target.
* Better new master rule support
* Update the known card enums
......
......@@ -111,6 +111,7 @@
<Compile Include="Game\AI\Dialogs.cs" />
<Compile Include="Game\AI\Enums\DangerousMonster.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\InvincibleMonster.cs" />
<Compile Include="Game\AI\Enums\Floodgate.cs" />
......
using System;
namespace WindBot
{
public class WindBotInfo
{
public string Name { get; set; }
public string Deck { get; set; }
public string Dialog { get; set; }
public string Host { get; set; }
public int Port { get; set; }
public string HostInfo { get; set; }
public int Version { get; set; }
public int Hand { get; set; }
public WindBotInfo()
{
Name = "WindBot";
Deck = null;
Dialog = "default";
Host = "127.0.0.1";
Port = 7911;
HostInfo = "";
Version = 0x233C;
Hand = 0;
}
}
}
using System;
namespace WindBot
{
public class WindBotInfo
{
public string Name { get; set; }
public string Deck { get; set; }
public string Dialog { get; set; }
public string Host { get; set; }
public int Port { get; set; }
public string HostInfo { get; set; }
public int Version { get; set; }
public int Hand { get; set; }
public WindBotInfo()
{
Name = "WindBot";
Deck = null;
Dialog = "default";
Host = "127.0.0.1";
Port = 7911;
HostInfo = "";
Version = 0x1340;
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