Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
W
windbot
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
神之吹息
windbot
Commits
97ef826c
Commit
97ef826c
authored
Oct 24, 2016
by
mercury233
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update decks
parent
9881ad0c
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
444 additions
and
217 deletions
+444
-217
Decks/AI_Burn.ydk
Decks/AI_Burn.ydk
+11
-11
Decks/AI_Rank5.ydk
Decks/AI_Rank5.ydk
+29
-29
Dialogs/soul.zh-CN.json
Dialogs/soul.zh-CN.json
+72
-0
Dialogs/swordsman.zh-CN.json
Dialogs/swordsman.zh-CN.json
+1
-1
Game/AI/Decks/BurnExecutor.cs
Game/AI/Decks/BurnExecutor.cs
+34
-15
Game/AI/Decks/Rank5Executor.cs
Game/AI/Decks/Rank5Executor.cs
+280
-159
Game/AI/Decks/ToadallyAwesomeExecutor.cs
Game/AI/Decks/ToadallyAwesomeExecutor.cs
+1
-1
bots.json
bots.json
+16
-1
No files found.
Decks/AI_Burn.ydk
View file @
97ef826c
...
...
@@ -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
Decks/AI_Rank5.ydk
View file @
97ef826c
...
...
@@ -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
Dialogs/soul.zh-CN.json
0 → 100644
View file @
97ef826c
{
"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}吗?"
]
}
Dialogs/swordsman.zh-CN.json
View file @
97ef826c
...
...
@@ -2,7 +2,7 @@
"welcome"
:
[
"你好,我是一个机器人。"
,
"AI功能正在测试中,遇到问题请及时反馈。"
,
"新的风暴已经出现,怎么能够停滞不前!我的
希望皇卡组和龙骑星爆卡组都
得到了加强!"
"新的风暴已经出现,怎么能够停滞不前!我的
R5卡组也
得到了加强!"
],
"duelstart"
:
[
"好戏才正要开始呢!"
,
...
...
Game/AI/Decks/BurnExecutor.cs
View file @
97ef826c
...
...
@@ -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
()
...
...
Game/AI/Decks/Rank5Executor.cs
View file @
97ef826c
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
.
Select
Card
((
int
)
CardId
.
XyzEffect
);
AI
.
Select
Position
(
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
tru
e
;
return
fals
e
;
}
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
();
...
...
Game/AI/Decks/ToadallyAwesomeExecutor.cs
View file @
97ef826c
...
...
@@ -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
...
...
bots.json
View file @
97ef826c
...
...
@@ -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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment