Commit 97ef826c authored by mercury233's avatar mercury233

update decks

parent 9881ad0c
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
2851070 2851070
97396380 97396380
97396380 97396380
97396380
26302522 26302522
26302522 26302522
26302522 26302522
...@@ -19,26 +20,25 @@ ...@@ -19,26 +20,25 @@
44789585 44789585
44789585 44789585
44789585 44789585
19523799 20264508
19523799 20264508
19523799
45311864
45311864
45311864
46918794 46918794
46918794 46918794
46918794 46918794
72302403 72302403
72302403 72302403
72302403 72302403
98380593 79323590
8842266 79323590
85562745
85562745
29843091
36468556
62279055 62279055
62279055 62279055
62279055 62279055
1918087 98139712
1918087 98139712
48276469
98139712 98139712
#extra #extra
!side !side
...@@ -2,26 +2,27 @@ ...@@ -2,26 +2,27 @@
#main #main
28601770 28601770
28601770 28601770
18842395 28601770
18842395 70095154
18842395 70095154
70095155 70095154
70095155 29353756
70095155 29353756
54343893 33911264
54343893 33911264
54343893 33911264
14778250 20932152
14778250 20932152
20932152
12299841 12299841
12299841 12299841
12299841 12299841
24610207 24610207
24610207 24610207
24610207 24610207
26082117 88552992
26082117 88552992
26082117 88552992
1845204 1845204
1845204 1845204
1845204 1845204
...@@ -33,27 +34,26 @@ ...@@ -33,27 +34,26 @@
14087893 14087893
13032689 13032689
26708437 26708437
26708437
44095762
44095762 44095762
53582587 53582587
56120475
58628539
58628539
96457619 96457619
96457619 96457619
#extra #extra
45231177 72959823
45231177 72959823
45231177 72959823
29515122 91949988
29515122 91949988
10443957
10443957
10443957
31386180 31386180
31386180
94119480
94119480
29669359
29669359 29669359
29669359 29669359
55067058 50449881
55067058 58069384
55067058 58069384
58069384
!side !side
{
"welcome": [
"你好,我是一个机器人。",
"AI功能正在测试中,遇到问题请及时反馈。"
],
"duelstart": [
"这套卡组好旧啊……",
"使用过这套卡组的孩子身上发生了什么呢……"
],
"newturn": [
"到我的回合了,抽卡!",
"我的回合,抽卡!",
"我抽了一张卡。"
],
"endturn": [
"回合结束。",
"我的回合结束了。",
"轮到你了。"
],
"directattack": [
"{0},直接攻击!",
"{0},直接攻击对手!",
"{0},没有防守的地方,攻击!",
"{0},攻击对手的生命值!",
"{0},直接攻击对手的生命值!",
"{0},通过直接攻击打倒对手!",
"{0},使用直接攻击打倒对手!",
"{0},直接攻击释放你的力量吧!",
"我的{0}将会粉碎你的生命值!",
"向对手展示你的力量吧,{0}!",
"你已经无法阻止我了。{0},攻击!"
],
"attack": [
"{0},攻击这只{1}!",
"{0},消灭这只{1}!",
"{0},打倒{1}!",
"{0},冲向那只{1}!",
"{0},把你的力量释放到{1}上吧!"
],
"ondirectattack": [
"可恶……",
"不过是{0}而已!",
"咳咳……"
],
"facedownmonstername": "怪兽",
"activate": [
"我发动{0}。",
"我使用{0}的效果。",
"我使用{0}的力量。"
],
"summon": [
"我召唤{0}。",
"出来吧,{0}!",
"出现吧,{0}!",
"我召唤了强大的{0}!",
"我呼唤{0}参加战斗!",
"我呼唤出{0}。",
"让我召唤{0}。"
],
"setmonster": [
"我放置了一只怪兽。",
"我里侧表示放置了一只怪兽。"
],
"chaining": [
"看这里!我发动{0}!",
"我使用{0}的力量。",
"准备!我使用{0}!",
"我不认同。{0},发动!",
"看样子你忘了我的{0}!",
"你考虑过我有{0}吗?"
]
}
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
"welcome": [ "welcome": [
"你好,我是一个机器人。", "你好,我是一个机器人。",
"AI功能正在测试中,遇到问题请及时反馈。", "AI功能正在测试中,遇到问题请及时反馈。",
"新的风暴已经出现,怎么能够停滞不前!我的希望皇卡组和龙骑星爆卡组都得到了加强!" "新的风暴已经出现,怎么能够停滞不前!我的R5卡组也得到了加强!"
], ],
"duelstart": [ "duelstart": [
"好戏才正要开始呢!", "好戏才正要开始呢!",
......
...@@ -15,12 +15,17 @@ namespace DevBot.Game.AI.Decks ...@@ -15,12 +15,17 @@ namespace DevBot.Game.AI.Decks
Marshmallon = 31305911, Marshmallon = 31305911,
SpiritReaper = 23205979, SpiritReaper = 23205979,
NaturiaBeans = 44789585, NaturiaBeans = 44789585,
ThunderShort = 20264508,
Ookazi = 19523799, Ookazi = 19523799,
GoblinThief = 45311864, GoblinThief = 45311864,
TremendousFire = 46918794, TremendousFire = 46918794,
SwordsOfRevealingLight = 72302403, SwordsOfRevealingLight = 72302403,
SupremacyBerry = 98380593, SupremacyBerry = 98380593,
ChainEnergy = 79323590,
DarkRoomofNightmare = 85562745,
PoisonOfTheOldMan = 8842266, PoisonOfTheOldMan = 8842266,
OjamaTrio = 29843091,
Ceasefire = 36468556,
MagicCylinder = 62279055, MagicCylinder = 62279055,
MinorGoblinOfficial = 1918087, MinorGoblinOfficial = 1918087,
ChainBurst = 48276469, ChainBurst = 48276469,
...@@ -34,25 +39,26 @@ namespace DevBot.Game.AI.Decks ...@@ -34,25 +39,26 @@ namespace DevBot.Game.AI.Decks
AddExecutor(ExecutorType.SpellSet, DefaultSpellSet); AddExecutor(ExecutorType.SpellSet, DefaultSpellSet);
// Activate Spells // Activate Spells
AddExecutor(ExecutorType.Activate, (int)CardId.DarkRoomofNightmare);
AddExecutor(ExecutorType.Activate, (int)CardId.Ookazi); AddExecutor(ExecutorType.Activate, (int)CardId.Ookazi);
AddExecutor(ExecutorType.Activate, (int)CardId.GoblinThief); AddExecutor(ExecutorType.Activate, (int)CardId.GoblinThief);
AddExecutor(ExecutorType.Activate, (int)CardId.TremendousFire); AddExecutor(ExecutorType.Activate, (int)CardId.TremendousFire);
AddExecutor(ExecutorType.Activate, (int)CardId.SwordsOfRevealingLight, SwordsOfRevealingLight); AddExecutor(ExecutorType.Activate, (int)CardId.SwordsOfRevealingLight, SwordsOfRevealingLight);
AddExecutor(ExecutorType.Activate, (int)CardId.SupremacyBerry, SupremacyBerry); AddExecutor(ExecutorType.Activate, (int)CardId.SupremacyBerry, SupremacyBerry);
AddExecutor(ExecutorType.Activate, (int)CardId.PoisonOfTheOldMan, PoisonOfTheOldMan); AddExecutor(ExecutorType.Activate, (int)CardId.PoisonOfTheOldMan, PoisonOfTheOldMan);
AddExecutor(ExecutorType.Activate, (int)CardId.ThunderShort, ThunderShort);
// Hello, my name is Lava Golem
AddExecutor(ExecutorType.SpSummon, (int)CardId.LavaGolem, LavaGolem);
// Set an invincible monster // Set an invincible monster
AddExecutor(ExecutorType.MonsterSet, (int)CardId.Marshmallon, SetInvincibleMonster); AddExecutor(ExecutorType.MonsterSet, (int)CardId.Marshmallon, SetInvincibleMonster);
AddExecutor(ExecutorType.MonsterSet, (int)CardId.SpiritReaper, SetInvincibleMonster); AddExecutor(ExecutorType.MonsterSet, (int)CardId.SpiritReaper, SetInvincibleMonster);
AddExecutor(ExecutorType.MonsterSet, (int)CardId.NaturiaBeans, SetInvincibleMonster); AddExecutor(ExecutorType.MonsterSet, (int)CardId.BlastSphere);
// Hello, my name is Lava Golem
AddExecutor(ExecutorType.SpSummon, (int)CardId.LavaGolem, LavaGolem);
// Set other monsters // Set other monsters
AddExecutor(ExecutorType.Summon, (int)CardId.ReflectBounder);
AddExecutor(ExecutorType.SummonOrSet, (int)CardId.FencingFireFerret); AddExecutor(ExecutorType.SummonOrSet, (int)CardId.FencingFireFerret);
AddExecutor(ExecutorType.MonsterSet, (int)CardId.BlastSphere); AddExecutor(ExecutorType.Summon, (int)CardId.ReflectBounder);
AddExecutor(ExecutorType.MonsterSet, (int)CardId.NaturiaBeans); AddExecutor(ExecutorType.MonsterSet, (int)CardId.NaturiaBeans);
// We're a coward // We're a coward
...@@ -60,9 +66,17 @@ namespace DevBot.Game.AI.Decks ...@@ -60,9 +66,17 @@ namespace DevBot.Game.AI.Decks
// Chain traps // Chain traps
AddExecutor(ExecutorType.Activate, (int)CardId.MagicCylinder, DefaultTrap); AddExecutor(ExecutorType.Activate, (int)CardId.MagicCylinder, DefaultTrap);
AddExecutor(ExecutorType.Activate, (int)CardId.Ceasefire, Ceasefire);
AddExecutor(ExecutorType.Activate, (int)CardId.OjamaTrio);
AddExecutor(ExecutorType.Activate, (int)CardId.MinorGoblinOfficial); AddExecutor(ExecutorType.Activate, (int)CardId.MinorGoblinOfficial);
AddExecutor(ExecutorType.Activate, (int)CardId.ChainBurst); AddExecutor(ExecutorType.Activate, (int)CardId.ChainBurst);
AddExecutor(ExecutorType.Activate, (int)CardId.SkullInvitation); AddExecutor(ExecutorType.Activate, (int)CardId.SkullInvitation);
AddExecutor(ExecutorType.Activate, (int)CardId.ChainEnergy);
}
public override bool OnSelectHand()
{
return true;
} }
private bool SwordsOfRevealingLight() private bool SwordsOfRevealingLight()
...@@ -82,13 +96,16 @@ namespace DevBot.Game.AI.Decks ...@@ -82,13 +96,16 @@ namespace DevBot.Game.AI.Decks
return true; return true;
} }
private bool ThunderShort()
{
return Duel.Fields[1].GetMonsterCount() >= 3;
}
private bool SetInvincibleMonster() private bool SetInvincibleMonster()
{ {
foreach (ClientCard card in Duel.Fields[0].GetMonsters()) foreach (ClientCard card in Duel.Fields[0].GetMonsters())
{ {
if (card.Id == (int)CardId.Marshmallon || if (card.Id == (int)CardId.Marshmallon || card.Id == (int)CardId.SpiritReaper)
card.Id == (int)CardId.SpiritReaper ||
(card.Id == (int)CardId.NaturiaBeans && Card.Id == (int)CardId.NaturiaBeans))
{ {
return false; return false;
} }
...@@ -99,15 +116,17 @@ namespace DevBot.Game.AI.Decks ...@@ -99,15 +116,17 @@ namespace DevBot.Game.AI.Decks
private bool LavaGolem() private bool LavaGolem()
{ {
bool found = false; bool found = false;
foreach (ClientCard card in Duel.Fields[0].GetMonsters()) foreach (ClientCard card in Duel.Fields[1].GetMonsters())
{ {
if (card.Id == (int)CardId.Marshmallon || if (card.Attack > 2000)
card.Id == (int)CardId.SpiritReaper)
found = true; found = true;
} }
if (!found && Duel.LifePoints[1] > 1000) return found;
return false; }
return true;
private bool Ceasefire()
{
return Duel.Fields[0].GetMonsterCount() + Duel.Fields[1].GetMonsterCount() >= 3;
} }
private bool ReposEverything() private bool ReposEverything()
......
using YGOSharp.OCGWrapper.Enums; using YGOSharp.OCGWrapper.Enums;
using System.Collections.Generic; using System.Collections.Generic;
using WindBot;
using WindBot.Game; using WindBot.Game;
using WindBot.Game.AI; using WindBot.Game.AI;
...@@ -10,77 +11,86 @@ namespace DevBot.Game.AI.Decks ...@@ -10,77 +11,86 @@ namespace DevBot.Game.AI.Decks
{ {
public enum CardId public enum CardId
{ {
MistArchfiend = 28601770, 迷雾恶魔 = 28601770,
PowerInvader = 18842395, 电子龙 = 70095154,
CyberDragon = 70095155, 异热同心武器荒鹫激神爪 = 29353756,
ViceDragon = 54343893, 太阳风帆船 = 33911264,
TheTricky = 14778250, 速攻同调士 = 20932152,
WindUpSoldier = 12299841, 发条士兵 = 12299841,
StarDrawing = 24610207, 画星宝宝 = 24610207,
GagagaMagician = 26082117, 先史遗产黄金航天飞机 = 88552992,
InstantFusion = 1845204, 简易融合 = 1845204,
DoubleSummon = 43422537, 二重召唤 = 43422537,
MysticalSpaceTyphoon = 5318639, 旋风 = 5318639,
BookOfMoon = 14087893, 月之书 = 14087893,
XyzUnit = 13032689, 超量组件 = 13032689,
XyzReborn = 26708437, 超量苏生 = 26708437,
MirrorForce = 44095762, 神圣防护罩反射镜力 = 44095762,
TorrentialTribute = 53582587, 激流葬 = 53582587,
SakuretsuArmor = 56120475, 超量遮护罩 = 96457619,
XyzEffect = 58628539,
XyzVeil = 96457619, 重装机甲装甲车龙 = 72959823,
迅雷之骑士盖亚龙骑士 = 91949988,
FlameSwordsman = 45231177, 电子龙无限 = 10443957,
DigvorzhakKingOfHeavyIndustry = 29515122, 始祖守护者提拉斯 = 31386180,
TirasKeeperOfGenesis = 31386180, No61火山恐龙 = 29669359,
AdreusKeeperOfArmageddon = 94119480, 鲨鱼要塞 = 50449881,
Number61Volcasaurus = 29669359, 电子龙新星 = 58069384
Number19Freezerdon = 55067058
} }
private bool 已通常召唤 = false;
private bool 已发动简易融合 = false;
private bool 已发动二重召唤 = false;
private bool 已特殊召唤电子龙无限 = false;
private bool 已发动火山恐龙 = false;
public Rank5Executor(GameAI ai, Duel duel) public Rank5Executor(GameAI ai, Duel duel)
: base(ai, duel) : base(ai, duel)
{ {
// Quick spells // Quick spells
AddExecutor(ExecutorType.Activate, (int)CardId.BookOfMoon, DefaultBookOfMoon); AddExecutor(ExecutorType.Activate, (int)CardId.月之书, DefaultBookOfMoon);
AddExecutor(ExecutorType.Activate, (int)CardId.MysticalSpaceTyphoon, DefaultMysticalSpaceTyphoon); AddExecutor(ExecutorType.Activate, (int)CardId.旋风, DefaultMysticalSpaceTyphoon);
// XYZ Monsters: Effect // 优先出的超量怪兽
AddExecutor(ExecutorType.Activate, (int)CardId.DigvorzhakKingOfHeavyIndustry); AddExecutor(ExecutorType.SpSummon, (int)CardId.电子龙新星, 电子龙新星特殊召唤);
AddExecutor(ExecutorType.Activate, (int)CardId.TirasKeeperOfGenesis); AddExecutor(ExecutorType.Activate, (int)CardId.电子龙新星, 电子龙新星效果);
AddExecutor(ExecutorType.Activate, (int)CardId.AdreusKeeperOfArmageddon); AddExecutor(ExecutorType.SpSummon, (int)CardId.电子龙无限, 电子龙无限特殊召唤);
AddExecutor(ExecutorType.Activate, (int)CardId.Number61Volcasaurus); AddExecutor(ExecutorType.Activate, (int)CardId.电子龙无限, 电子龙无限效果);
AddExecutor(ExecutorType.Activate, (int)CardId.Number19Freezerdon);
// Summon LV.5 Monsters // 无副作用的5星怪兽
AddExecutor(ExecutorType.SpSummon, (int)CardId.CyberDragon); AddExecutor(ExecutorType.SpSummon, (int)CardId.电子龙);
AddExecutor(ExecutorType.SpSummon, (int)CardId.ViceDragon); AddExecutor(ExecutorType.SpSummon, (int)CardId.太阳风帆船, 太阳风帆船特殊召唤);
AddExecutor(ExecutorType.Summon, (int)CardId.PowerInvader, PowerInvader); AddExecutor(ExecutorType.SpSummon, (int)CardId.异热同心武器荒鹫激神爪);
AddExecutor(ExecutorType.Summon, (int)CardId.WindUpSoldier); AddExecutor(ExecutorType.Summon, (int)CardId.先史遗产黄金航天飞机, 通常召唤);
AddExecutor(ExecutorType.Summon, (int)CardId.StarDrawing); AddExecutor(ExecutorType.Activate, (int)CardId.先史遗产黄金航天飞机, 先史遗产黄金航天飞机效果);
AddExecutor(ExecutorType.Summon, (int)CardId.GagagaMagician); AddExecutor(ExecutorType.Summon, (int)CardId.画星宝宝, 通常召唤);
AddExecutor(ExecutorType.Summon, (int)CardId.发条士兵, 通常召唤);
AddExecutor(ExecutorType.Activate, (int)CardId.发条士兵, 发条士兵效果);
AddExecutor(ExecutorType.SpSummon, (int)CardId.TheTricky, TheTricky); // XYZ Monsters: Summon
AddExecutor(ExecutorType.SpSummon, (int)CardId.No61火山恐龙, No61火山恐龙特殊召唤);
AddExecutor(ExecutorType.Activate, (int)CardId.No61火山恐龙, No61火山恐龙效果);
AddExecutor(ExecutorType.SpSummon, (int)CardId.始祖守护者提拉斯);
AddExecutor(ExecutorType.Activate, (int)CardId.始祖守护者提拉斯, 始祖守护者提拉斯效果);
AddExecutor(ExecutorType.SpSummon, (int)CardId.鲨鱼要塞);
AddExecutor(ExecutorType.Activate, (int)CardId.鲨鱼要塞);
AddExecutor(ExecutorType.Summon, (int)CardId.MistArchfiend, MistArchfiend); AddExecutor(ExecutorType.SpSummon, (int)CardId.迅雷之骑士盖亚龙骑士, 迅雷之骑士盖亚龙骑士特殊召唤);
AddExecutor(ExecutorType.Activate, (int)CardId.InstantFusion, IsAnotherRank5Available);
AddExecutor(ExecutorType.Activate, (int)CardId.GagagaMagician, GagagaMagicianEffect);
AddExecutor(ExecutorType.Activate, (int)CardId.WindUpSoldier, WindUpSoldierEffect); // 有副作用的5星怪兽
AddExecutor(ExecutorType.SpSummon, (int)CardId.速攻同调士, 速攻同调士特殊召唤);
AddExecutor(ExecutorType.Summon, (int)CardId.迷雾恶魔, 迷雾恶魔通常召唤);
AddExecutor(ExecutorType.Activate, (int)CardId.简易融合, 简易融合效果);
// Useful spells // Useful spells
AddExecutor(ExecutorType.Activate, (int)CardId.DoubleSummon, DoubleSummon); AddExecutor(ExecutorType.Activate, (int)CardId.二重召唤, 二重召唤效果);
AddExecutor(ExecutorType.Activate, (int)CardId.XyzUnit, XyzUnit); AddExecutor(ExecutorType.Activate, (int)CardId.超量组件);
// XYZ Monsters: Summon
AddExecutor(ExecutorType.SpSummon, (int)CardId.DigvorzhakKingOfHeavyIndustry, SummonXYZ);
AddExecutor(ExecutorType.SpSummon, (int)CardId.TirasKeeperOfGenesis, SummonXYZ);
AddExecutor(ExecutorType.SpSummon, (int)CardId.AdreusKeeperOfArmageddon, SummonXYZ);
AddExecutor(ExecutorType.SpSummon, (int)CardId.Number61Volcasaurus, SummonXYZ);
AddExecutor(ExecutorType.SpSummon, (int)CardId.Number19Freezerdon, SummonXYZ);
// Xyz Reborn AddExecutor(ExecutorType.Activate, (int)CardId.超量苏生, 超量苏生效果);
AddExecutor(ExecutorType.Activate, (int)CardId.XyzReborn);
AddExecutor(ExecutorType.Activate, (int)CardId.重装机甲装甲车龙, 重装机甲装甲车龙效果);
// Reposition // Reposition
AddExecutor(ExecutorType.Repos, DefaultMonsterRepos); AddExecutor(ExecutorType.Repos, DefaultMonsterRepos);
...@@ -88,11 +98,9 @@ namespace DevBot.Game.AI.Decks ...@@ -88,11 +98,9 @@ namespace DevBot.Game.AI.Decks
// Set and activate traps // Set and activate traps
AddExecutor(ExecutorType.SpellSet, DefaultSpellSet); AddExecutor(ExecutorType.SpellSet, DefaultSpellSet);
AddExecutor(ExecutorType.Activate, (int)CardId.XyzVeil, XyzVeil); AddExecutor(ExecutorType.Activate, (int)CardId.超量遮护罩, 超量遮护罩效果);
AddExecutor(ExecutorType.Activate, (int)CardId.XyzEffect, XyzEffect); AddExecutor(ExecutorType.Activate, (int)CardId.激流葬, DefaultTorrentialTribute);
AddExecutor(ExecutorType.Activate, (int)CardId.TorrentialTribute, DefaultTorrentialTribute); AddExecutor(ExecutorType.Activate, (int)CardId.神圣防护罩反射镜力, DefaultTrap);
AddExecutor(ExecutorType.Activate, (int)CardId.MirrorForce, DefaultTrap);
AddExecutor(ExecutorType.Activate, (int)CardId.SakuretsuArmor, DefaultTrap);
} }
public override bool OnSelectHand() public override bool OnSelectHand()
...@@ -100,7 +108,17 @@ namespace DevBot.Game.AI.Decks ...@@ -100,7 +108,17 @@ namespace DevBot.Game.AI.Decks
return false; return false;
} }
private bool SummonXYZ() public override void OnNewTurn()
{
// 回合开始时重置状况
已通常召唤 = false;
已发动简易融合 = false;
已发动二重召唤 = false;
已特殊召唤电子龙无限 = false;
已发动火山恐龙 = false;
}
private bool 特殊召唤不重复的超量怪兽()
{ {
List<ClientCard> monsters = Duel.Fields[0].GetMonsters(); List<ClientCard> monsters = Duel.Fields[0].GetMonsters();
foreach (ClientCard monster in monsters) foreach (ClientCard monster in monsters)
...@@ -109,153 +127,263 @@ namespace DevBot.Game.AI.Decks ...@@ -109,153 +127,263 @@ namespace DevBot.Game.AI.Decks
return true; return true;
} }
private bool PowerInvader() private bool 通常召唤()
{ {
if (Duel.Fields[1].GetMonsterCount() >= 2) 已通常召唤 = true;
{ return true;
AI.SelectOption(1); }
private bool 太阳风帆船特殊召唤()
{
AI.SelectPosition(CardPosition.FaceUpDefence);
return true;
}
private bool 速攻同调士特殊召唤()
{
if (!需要出5())
return false;
AI.SelectCard(new[]
{
(int)CardId.速攻同调士,
(int)CardId.异热同心武器荒鹫激神爪,
(int)CardId.太阳风帆船,
(int)CardId.电子龙,
(int)CardId.迷雾恶魔,
(int)CardId.发条士兵,
(int)CardId.画星宝宝,
(int)CardId.先史遗产黄金航天飞机
});
return true;
}
private bool 迷雾恶魔通常召唤()
{
if (!需要出5())
return false;
AI.SelectOption(1);
已通常召唤 = true;
return true;
}
private bool 简易融合效果()
{
if (!需要出5())
return false;
已发动简易融合 = true;
return true;
}
private bool 需要出5()
{
if (场上有5星怪兽())
return true; return true;
int 其他的5星资源数量 = 0;
IList<ClientCard> hand = Duel.Fields[0].Hand;
foreach (ClientCard card in hand)
{
if (card.Id == (int)CardId.简易融合 && !已发动简易融合)
++其他的5星资源数量;
if (card.Id == (int)CardId.速攻同调士 && Duel.Fields[0].Hand.ContainsMonsterWithLevel(4))
++其他的5星资源数量;
if (card.Id == (int)CardId.迷雾恶魔 && !已通常召唤)
++其他的5星资源数量;
if (card.Id == (int)CardId.二重召唤 && 二重召唤效果())
++其他的5星资源数量;
} }
if (其他的5星资源数量 >= 2)
return true;
return false; return false;
} }
private bool TheTricky() private bool 发条士兵效果()
{
return 场上有5星怪兽();
}
private bool 先史遗产黄金航天飞机效果()
{
return Card.Level == 4;
}
private bool 二重召唤效果()
{ {
if (!已通常召唤 || 已发动二重召唤)
return false;
IList<ClientCard> hand = Duel.Fields[0].Hand; IList<ClientCard> hand = Duel.Fields[0].Hand;
foreach (ClientCard card in hand) foreach (ClientCard card in hand)
{ {
if (card.Id == (int)CardId.TheTricky && card != Card) if (card.Id == (int)CardId.迷雾恶魔 ||
card.Id == (int)CardId.发条士兵 ||
card.Id == (int)CardId.画星宝宝 ||
card.Id == (int)CardId.先史遗产黄金航天飞机)
{ {
AI.SelectCard(card); 已通常召唤 = false;
已发动二重召唤 = true;
return true; return true;
} }
} }
if (Duel.Fields[0].HasInHand((int)CardId.PowerInvader)) return false;
{ }
AI.SelectCard((int)CardId.PowerInvader);
return true; private bool 电子龙新星特殊召唤()
} {
if (Duel.Fields[0].HasInHand((int)CardId.CyberDragon)) return !已特殊召唤电子龙无限;
{ }
AI.SelectCard((int)CardId.CyberDragon);
return true; private bool 电子龙新星效果()
} {
if (Duel.Fields[0].HasInHand((int)CardId.ViceDragon)) if (ActivateDescription == AI.Utils.GetStringId((int)CardId.电子龙新星, 0))
{
AI.SelectCard((int)CardId.ViceDragon);
return true;
}
if (Duel.Fields[0].HasInHand((int)CardId.XyzVeil))
{ {
AI.SelectCard((int)CardId.XyzVeil);
return true; return true;
} }
if (Duel.Fields[0].HasInHand((int)CardId.XyzEffect)) else if (Card.Location == CardLocation.Grave)
{ {
AI.SelectCard((int)CardId.XyzEffect); AI.SelectPosition(CardPosition.FaceUpDefence);
return true; return true;
} }
if (Duel.Fields[0].HasInHand((int)CardId.MysticalSpaceTyphoon)) else
{ {
AI.SelectCard((int)CardId.MysticalSpaceTyphoon); return false;
return true;
} }
return false;
} }
private bool MistArchfiend() private bool 电子龙无限特殊召唤()
{ {
if (!IsAnotherRank5Available()) 已特殊召唤电子龙无限 = true;
return false;
AI.SelectOption(1);
return true; return true;
} }
private bool IsAnotherRank5Available() private bool 电子龙无限效果()
{ {
List<ClientCard> monsters = Duel.Fields[0].GetMonsters(); if (CurrentChain.Count > 0)
foreach (ClientCard monster in monsters)
{ {
if (monster.HasType(CardType.Monster) && return LastChainPlayer == 1;
!monster.HasType(CardType.Xyz) &&
(monster.Level == 5 ||
monster.Id == (int)CardId.WindUpSoldier) ||
monster.Id == (int)CardId.StarDrawing ||
monster.Id == (int)CardId.GagagaMagician)
return true;
} }
int mistCount = 0; else
IList<ClientCard> hand = Duel.Fields[0].Hand;
foreach (ClientCard card in hand)
{ {
if (card.Id == (int)CardId.InstantFusion && Card.Id != card.Id) List<ClientCard> monsters = Duel.Fields[1].GetMonsters();
return true; ClientCard bestmonster = null;
if (card.Id == (int)CardId.MistArchfiend && Card.Id != card.Id) foreach (ClientCard monster in monsters)
{
if (monster.IsAttack() && (bestmonster == null || monster.Attack >= bestmonster.Attack))
bestmonster = monster;
}
if (bestmonster != null)
{
AI.SelectCard(bestmonster);
return true; return true;
if (card.Id == (int)CardId.MistArchfiend) }
++mistCount;
} }
if (mistCount >= 2)
return true;
return false; return false;
} }
private bool WindUpSoldierEffect() private bool No61火山恐龙特殊召唤()
{ {
List<ClientCard> monsters = Duel.Fields[0].GetMonsters(); return AI.Utils.IsOneEnnemyBetterThanValue(2000, false);
foreach (ClientCard monster in monsters) }
private bool No61火山恐龙效果()
{
ClientCard target = Duel.Fields[1].MonsterZone.GetFloodgate();
if (target == null)
target = AI.Utils.GetOneEnnemyBetterThanValue(2000, false);
if (target != null)
{ {
if (monster.HasType(CardType.Monster) && AI.SelectCard((int)CardId.电子龙);
!monster.HasType(CardType.Xyz) && AI.SelectNextCard(target);
(monster.Level == 5 || 已发动火山恐龙 = true;
monster.Id == (int)CardId.StarDrawing) || return true;
monster.Id == (int)CardId.GagagaMagician)
return true;
} }
return false; return false;
} }
private bool GagagaMagicianEffect() private bool 始祖守护者提拉斯效果()
{ {
AI.SelectNumber(5); ClientCard target = AI.Utils.GetProblematicCard();
if (target != null)
{
AI.SelectCard(target);
}
return true; return true;
} }
private bool DoubleSummon() private bool 迅雷之骑士盖亚龙骑士特殊召唤()
{ {
IList<ClientCard> hand = Duel.Fields[0].Hand; if (已发动火山恐龙 && Duel.Fields[0].HasInMonstersZone((int)CardId.No61火山恐龙))
foreach (ClientCard card in hand)
{ {
if (card.Id == (int)CardId.PowerInvader && Duel.Fields[1].GetMonsterCount() >= 2) AI.SelectCard((int)CardId.No61火山恐龙);
return true; return true;
if (card.Id == (int)CardId.WindUpSoldier || }
card.Id == (int)CardId.StarDrawing || List<ClientCard> monsters = Duel.Fields[0].GetMonsters();
card.Id == (int)CardId.GagagaMagician) foreach (ClientCard monster in monsters)
{
if (monster.HasType(CardType.Xyz) && !monster.HasXyzMaterial())
{
AI.SelectCard(monster);
return true; return true;
}
} }
return false; return false;
} }
private bool XyzUnit() private bool 超量苏生效果()
{ {
List<ClientCard> monsters = Duel.Fields[0].GetMonsters(); foreach (ClientCard card in Duel.Fields[0].SpellZone)
{
if (card != null &&
card.Id == Card.Id &&
card.HasPosition(CardPosition.FaceUp))
return false;
}
AI.SelectCard(new[]
{
(int)CardId.电子龙无限,
(int)CardId.电子龙新星,
(int)CardId.始祖守护者提拉斯,
(int)CardId.鲨鱼要塞,
(int)CardId.No61火山恐龙
});
return true;
}
private bool 重装机甲装甲车龙效果()
{
ClientCard target = AI.Utils.GetProblematicCard();
if (target != null)
{
AI.SelectCard(target);
return true;
}
List<ClientCard> monsters = Duel.Fields[1].GetMonsters();
foreach (ClientCard monster in monsters) foreach (ClientCard monster in monsters)
{ {
if (monster.HasType(CardType.Xyz)) AI.SelectCard(monster);
return true;
}
List<ClientCard> spells = Duel.Fields[1].GetSpells();
foreach (ClientCard spell in spells)
{
if (spell.IsFacedown())
{ {
AI.SelectCard(monster); AI.SelectCard(spell);
return true; return true;
} }
} }
foreach (ClientCard spell in spells)
{
AI.SelectCard(spell);
return true;
}
return false; return false;
} }
private bool XyzVeil() private bool 超量遮护罩效果()
{ {
List<ClientCard> spells = Duel.Fields[0].GetSpells(); List<ClientCard> spells = Duel.Fields[0].GetSpells();
foreach (ClientCard spell in spells) foreach (ClientCard spell in spells)
{ {
if (spell.Id == (int)CardId.XyzVeil && spell != Card) if (spell.Id == (int)CardId.超量遮护罩 && !spell.IsFacedown())
return false; return false;
} }
List<ClientCard> monsters = Duel.Fields[0].GetMonsters(); List<ClientCard> monsters = Duel.Fields[0].GetMonsters();
...@@ -264,34 +392,27 @@ namespace DevBot.Game.AI.Decks ...@@ -264,34 +392,27 @@ namespace DevBot.Game.AI.Decks
if (monster.HasType(CardType.Xyz)) if (monster.HasType(CardType.Xyz))
return true; return true;
} }
return true; return false;
} }
private bool XyzEffect() private bool 场上有5星怪兽()
{ {
ClientCard card = GetBestEnnemyCard(); List<ClientCard> monsters = Duel.Fields[0].GetMonsters();
if (card != null) foreach (ClientCard monster in monsters)
{ {
AI.SelectCard(card); if (monster.HasType(CardType.Monster) &&
return true; !monster.HasType(CardType.Xyz) &&
(monster.Level == 5
|| monster.Id == (int)CardId.画星宝宝
|| (monster.Id == (int)CardId.发条士兵) && !monster.Equals(Card)))
return true;
} }
return false; return false;
} }
private ClientCard GetProblematicCard()
{
ClientCard card = Duel.Fields[1].MonsterZone.GetInvincibleMonster();
if (card != null)
return card;
card = Duel.Fields[1].SpellZone.GetNegateAttackSpell();
if (card != null)
return card;
return null;
}
private ClientCard GetBestEnnemyCard() private ClientCard GetBestEnnemyCard()
{ {
ClientCard card = GetProblematicCard(); ClientCard card = AI.Utils.GetProblematicCard();
if (card != null) if (card != null)
return card; return card;
card = Duel.Fields[1].MonsterZone.GetHighestAttackMonster(); card = Duel.Fields[1].MonsterZone.GetHighestAttackMonster();
......
...@@ -6,7 +6,7 @@ using WindBot.Game.AI; ...@@ -6,7 +6,7 @@ using WindBot.Game.AI;
namespace WindBot.Game.AI.Decks namespace WindBot.Game.AI.Decks
{ {
[Deck("ToadallyAwesome", "AI_ToadallyAwesome")] [Deck("Toadally Awesome", "AI_ToadallyAwesome")]
public class ToadallyAwesomeExecutor : DefaultExecutor public class ToadallyAwesomeExecutor : DefaultExecutor
{ {
public enum CardId public enum CardId
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
"windbots": [ "windbots": [
{ {
"name": "琪露诺", "name": "琪露诺",
"deck": "ToadallyAwesome", "deck": "Toadally Awesome",
"dialog": "cirno.zh-CN" "dialog": "cirno.zh-CN"
}, },
{ {
...@@ -59,6 +59,21 @@ ...@@ -59,6 +59,21 @@
"name": "尼亚", "name": "尼亚",
"deck": "Yosenju", "deck": "Yosenju",
"dialog": "near.zh-CN" "dialog": "near.zh-CN"
},
{
"name": "永远之魂",
"deck": "Burn",
"dialog": "zh-CN"
},
{
"name": "永远之魂",
"deck": "Frog",
"dialog": "zh-CN"
},
{
"name": "永远之魂",
"deck": "Horus",
"dialog": "zh-CN"
} }
] ]
} }
\ No newline at end of file
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