Commit 97ef826c authored by mercury233's avatar mercury233

update decks

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