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
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
MyCard
windbot
Commits
9e9d7442
Commit
9e9d7442
authored
Aug 18, 2017
by
mercury233
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update common S&T executors
parent
aef57f18
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
309 additions
and
239 deletions
+309
-239
Game/AI/AIFunctions.cs
Game/AI/AIFunctions.cs
+29
-0
Game/AI/Decks/BlueEyesExecutor.cs
Game/AI/Decks/BlueEyesExecutor.cs
+2
-6
Game/AI/Decks/DoEveryThingExecutor.cs
Game/AI/Decks/DoEveryThingExecutor.cs
+1
-5
Game/AI/Decks/DragunityExecutor.cs
Game/AI/Decks/DragunityExecutor.cs
+3
-9
Game/AI/Decks/EvilswarmExecutor.cs
Game/AI/Decks/EvilswarmExecutor.cs
+5
-15
Game/AI/Decks/FrogExecutor.cs
Game/AI/Decks/FrogExecutor.cs
+0
-5
Game/AI/Decks/GravekeeperExecutor.cs
Game/AI/Decks/GravekeeperExecutor.cs
+1
-1
Game/AI/Decks/GraydleExecutor.cs
Game/AI/Decks/GraydleExecutor.cs
+5
-15
Game/AI/Decks/HorusExecutor.cs
Game/AI/Decks/HorusExecutor.cs
+1
-1
Game/AI/Decks/QliphortExecutor.cs
Game/AI/Decks/QliphortExecutor.cs
+1
-10
Game/AI/Decks/RainbowExecutor.cs
Game/AI/Decks/RainbowExecutor.cs
+2
-12
Game/AI/Decks/Rank5Executor.cs
Game/AI/Decks/Rank5Executor.cs
+0
-14
Game/AI/Decks/ToadallyAwesomeExecutor.cs
Game/AI/Decks/ToadallyAwesomeExecutor.cs
+1
-0
Game/AI/Decks/YosenjuExecutor.cs
Game/AI/Decks/YosenjuExecutor.cs
+5
-31
Game/AI/Decks/ZexalWeaponsExecutor.cs
Game/AI/Decks/ZexalWeaponsExecutor.cs
+3
-18
Game/AI/Decks/ZoodiacExecutor.cs
Game/AI/Decks/ZoodiacExecutor.cs
+7
-78
Game/AI/DefaultExecutor.cs
Game/AI/DefaultExecutor.cs
+243
-19
No files found.
Game/AI/AIFunctions.cs
View file @
9e9d7442
...
...
@@ -119,6 +119,21 @@ namespace WindBot.Game.AI
return
null
;
}
public
ClientCard
GetAnyEnemyMonster
()
{
List
<
ClientCard
>
monsters
=
Enemy
.
GetMonsters
();
ClientCard
hmonster
=
monsters
.
GetHighestAttackMonster
();
if
(
hmonster
!=
null
)
{
return
hmonster
;
}
foreach
(
ClientCard
monster
in
monsters
)
{
return
monster
;
}
return
null
;
}
public
ClientCard
GetProblematicCard
(
int
attack
=
0
)
{
ClientCard
card
=
Enemy
.
MonsterZone
.
GetInvincibleMonster
();
...
...
@@ -135,6 +150,20 @@ namespace WindBot.Game.AI
return
GetOneEnemyBetterThanValue
(
attack
,
true
);
}
public
ClientCard
GetBestEnemyCard
()
{
ClientCard
card
=
GetProblematicCard
();
if
(
card
!=
null
)
return
card
;
card
=
Enemy
.
MonsterZone
.
GetHighestAttackMonster
();
if
(
card
!=
null
)
return
card
;
List
<
ClientCard
>
spells
=
Enemy
.
GetSpells
();
if
(
spells
.
Count
>
0
)
return
spells
[
0
];
return
null
;
}
public
ClientCard
GetProblematicMonsterCard
(
int
attack
=
0
)
{
ClientCard
card
=
Enemy
.
MonsterZone
.
GetInvincibleMonster
();
...
...
Game/AI/Decks/BlueEyesExecutor.cs
View file @
9e9d7442
...
...
@@ -52,6 +52,7 @@ namespace WindBot.Game.AI.Decks
:
base
(
ai
,
duel
)
{
// 有坑先清
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
鹰身女妖的羽毛扫
,
DefaultHarpiesFeatherDusterFirst
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
银河旋风
,
DefaultGalaxyCyclone
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
鹰身女妖的羽毛扫
);
...
...
@@ -71,7 +72,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
抵价购物
,
抵价购物效果
);
// 吸一口
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
强欲而贪欲之壶
,
强欲而贪欲之壶效果
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
强欲而贪欲之壶
,
DefaultPotOfDesires
);
// 有亚白就跳
AddExecutor
(
ExecutorType
.
SpSummon
,
(
int
)
CardId
.
青眼亚白龙
,
青眼亚白龙特殊召唤
);
...
...
@@ -484,11 +485,6 @@ namespace WindBot.Game.AI.Decks
return
true
;
}
private
bool
强欲而贪欲之壶效果
()
{
return
Bot
.
Deck
.
Count
>
15
;
}
private
bool
苍眼银龙效果
()
{
Logger
.
DebugWriteLine
(
"苍眼银龙效果."
);
...
...
Game/AI/Decks/DoEveryThingExecutor.cs
View file @
9e9d7442
...
...
@@ -19,7 +19,7 @@ namespace WindBot.Game.AI.Decks
:
base
(
ai
,
duel
)
{
AddExecutor
(
ExecutorType
.
SpSummon
);
AddExecutor
(
ExecutorType
.
Activate
,
DontChainMyself
);
AddExecutor
(
ExecutorType
.
Activate
,
D
efaultD
ontChainMyself
);
AddExecutor
(
ExecutorType
.
SummonOrSet
);
AddExecutor
(
ExecutorType
.
Repos
,
DefaultMonsterRepos
);
AddExecutor
(
ExecutorType
.
SpellSet
);
...
...
@@ -41,9 +41,5 @@ namespace WindBot.Game.AI.Decks
return
Program
.
Rand
.
Next
(
options
.
Count
);
}
private
bool
DontChainMyself
()
{
return
LastChainPlayer
!=
0
;
}
}
}
\ No newline at end of file
Game/AI/Decks/DragunityExecutor.cs
View file @
9e9d7442
...
...
@@ -170,7 +170,7 @@ namespace WindBot.Game.AI.Decks
break;
}
}
if (!hasRealMonster || GetProblematicCard() != null)*/
if (!hasRealMonster ||
AI.Utils.
GetProblematicCard() != null)*/
needId
=
(
int
)
CardId
.
DragunityDux
;
}
...
...
@@ -344,13 +344,13 @@ namespace WindBot.Game.AI.Decks
{
//if (AI.Utils.IsOneEnemyBetterThanValue(2500, true))
// return true;
ClientCard
invincible
=
GetProblematicCard
();
ClientCard
invincible
=
AI
.
Utils
.
GetProblematicCard
();
return
invincible
!=
null
;
}
private
bool
ScrapDragonEffect
()
{
ClientCard
invincible
=
GetProblematicCard
();
ClientCard
invincible
=
AI
.
Utils
.
GetProblematicCard
();
if
(
invincible
==
null
&&
!
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
2800
-
1
,
false
))
return
false
;
...
...
@@ -489,11 +489,5 @@ namespace WindBot.Game.AI.Decks
}
return
Duel
.
Player
==
1
;
}
private
ClientCard
GetProblematicCard
()
{
ClientCard
card
=
Enemy
.
MonsterZone
.
GetInvincibleMonster
();
return
card
??
Enemy
.
SpellZone
.
GetFloodgate
();
}
}
}
\ No newline at end of file
Game/AI/Decks/EvilswarmExecutor.cs
View file @
9e9d7442
...
...
@@ -23,28 +23,18 @@ namespace WindBot.Game.AI.Decks
:
base
(
ai
,
duel
)
{
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
黑洞
,
DefaultDarkHole
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
宇宙旋风
,
Default
MysticalSpaceTyphoon
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之宣告
,
Default
Trap
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之警告
,
Default
Trap
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之通告
,
Default
Trap
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
宇宙旋风
,
Default
CosmicCyclone
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之宣告
,
Default
SolemnJudgment
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之警告
,
Default
SolemnWarning
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之通告
,
Default
SolemnStrike
);
AddExecutor
(
ExecutorType
.
SpellSet
,
(
int
)
CardId
.
侵略的泛发感染
);
AddExecutor
(
ExecutorType
.
Activate
,
DontChainMyself
);
AddExecutor
(
ExecutorType
.
Activate
,
D
efaultD
ontChainMyself
);
AddExecutor
(
ExecutorType
.
Summon
);
AddExecutor
(
ExecutorType
.
SpSummon
);
AddExecutor
(
ExecutorType
.
Repos
,
DefaultMonsterRepos
);
AddExecutor
(
ExecutorType
.
SpellSet
);
}
private
bool
DontChainMyself
()
{
foreach
(
CardExecutor
exec
in
Executors
)
{
if
(
exec
.
Type
==
Type
&&
exec
.
CardId
==
Card
.
Id
)
return
false
;
}
return
LastChainPlayer
!=
0
;
}
// will be added soon...?
}
}
\ No newline at end of file
Game/AI/Decks/FrogExecutor.cs
View file @
9e9d7442
...
...
@@ -189,11 +189,6 @@ namespace WindBot.Game.AI.Decks
return
false
;
}
private
bool
DarkHole
()
{
return
AI
.
Utils
.
IsEnemyBetter
(
false
,
false
);
}
private
bool
Terraforming
()
{
if
(
Bot
.
HasInHand
((
int
)
CardId
.
Wetlands
))
...
...
Game/AI/Decks/GravekeeperExecutor.cs
View file @
9e9d7442
...
...
@@ -52,7 +52,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
王家长眠之谷
,
王家长眠之谷
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
奈落的落穴
,
DefaultUniqueTrap
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之警告
,
Default
UniqueTrap
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之警告
,
Default
SolemnWarning
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
次元幽闭
,
DefaultUniqueTrap
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
降灵的仪式
,
DefaultUniqueTrap
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
王家长眠之谷的王墓
,
DefaultUniqueTrap
);
...
...
Game/AI/Decks/GraydleExecutor.cs
View file @
9e9d7442
...
...
@@ -22,27 +22,17 @@ namespace WindBot.Game.AI.Decks
:
base
(
ai
,
duel
)
{
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
黑洞
,
DefaultDarkHole
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
宇宙旋风
,
Default
MysticalSpaceTyphoon
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之宣告
,
Default
Trap
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之警告
,
Default
Trap
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之通告
,
Default
Trap
);
AddExecutor
(
ExecutorType
.
Activate
,
DontChainMyself
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
宇宙旋风
,
Default
CosmicCyclone
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之宣告
,
Default
SolemnJudgment
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之警告
,
Default
SolemnWarning
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之通告
,
Default
SolemnStrike
);
AddExecutor
(
ExecutorType
.
Activate
,
D
efaultD
ontChainMyself
);
AddExecutor
(
ExecutorType
.
MonsterSet
);
AddExecutor
(
ExecutorType
.
SpSummon
);
AddExecutor
(
ExecutorType
.
Repos
,
DefaultMonsterRepos
);
AddExecutor
(
ExecutorType
.
SpellSet
);
}
private
bool
DontChainMyself
()
{
foreach
(
CardExecutor
exec
in
Executors
)
{
if
(
exec
.
Type
==
Type
&&
exec
.
CardId
==
Card
.
Id
)
return
false
;
}
return
LastChainPlayer
!=
0
;
}
// will be added soon...?
}
}
\ No newline at end of file
Game/AI/Decks/HorusExecutor.cs
View file @
9e9d7442
...
...
@@ -40,7 +40,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
SpellSet
,
DefaultSpellSet
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
HorusTheBlackFlameDragonLv6
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
StampingDestruction
,
Default
StampingDestructi
on
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
StampingDestruction
,
Default
MysticalSpaceTypho
on
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
MysticalSpaceTyphoon
,
DefaultMysticalSpaceTyphoon
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
FoolishBurial
,
FoolishBurial
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
Mountain
,
DefaultField
);
...
...
Game/AI/Decks/QliphortExecutor.cs
View file @
9e9d7442
...
...
@@ -112,7 +112,7 @@ namespace WindBot.Game.AI.Decks
// 坑人
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
反大革命
,
DefaultTrap
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之通告
,
神之通告
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之通告
,
DefaultSolemnStrike
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
技能抽取
,
技能抽取
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
虚无空间
,
DefaultUniqueTrap
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
强制脱出装置
,
DefaultCompulsoryEvacuationDevice
);
...
...
@@ -159,11 +159,6 @@ namespace WindBot.Game.AI.Decks
return
true
;
}
private
bool
神之通告
()
{
return
(
Duel
.
LifePoints
[
0
]
>
1500
)
&&
!(
Duel
.
Player
==
0
&&
LastChainPlayer
==
-
1
)
&&
DefaultTrap
();
}
private
bool
技能抽取
()
{
return
(
Duel
.
LifePoints
[
0
]
>
1000
)
&&
DefaultUniqueTrap
();
...
...
@@ -425,9 +420,5 @@ namespace WindBot.Game.AI.Decks
return
false
;
}
private
bool
DontChainMyself
()
{
return
LastChainPlayer
!=
0
;
}
}
}
\ No newline at end of file
Game/AI/Decks/RainbowExecutor.cs
View file @
9e9d7442
...
...
@@ -64,7 +64,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
Summon
,
(
int
)
CardId
.
救援兔
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
救援兔
,
救援兔效果
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
强欲而贪欲之壶
,
强欲而贪欲之壶效果
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
强欲而贪欲之壶
,
DefaultPotOfDesires
);
AddExecutor
(
ExecutorType
.
Summon
,
(
int
)
CardId
.
曼陀罗天使号手
,
曼陀罗天使号手通常召唤
);
AddExecutor
(
ExecutorType
.
Summon
,
(
int
)
CardId
.
打喷嚏的河马龙
,
打喷嚏的河马龙通常召唤
);
...
...
@@ -94,7 +94,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
SpSummon
,
(
int
)
CardId
.
芙莉西亚之虫惑魔
,
芙莉西亚之虫惑魔特殊召唤
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
芙莉西亚之虫惑魔
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
地碎
,
地碎效果
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
地碎
,
DefaultSmashingGround
);
AddExecutor
(
ExecutorType
.
SpSummon
,
(
int
)
CardId
.
鸟铳士卡斯泰尔
,
鸟铳士卡斯泰尔特殊召唤
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
鸟铳士卡斯泰尔
,
鸟铳士卡斯泰尔效果
);
...
...
@@ -507,16 +507,6 @@ namespace WindBot.Game.AI.Decks
return
AI
.
Utils
.
IsEnemyBetter
(
false
,
false
);
}
private
bool
强欲而贪欲之壶效果
()
{
return
Bot
.
Deck
.
Count
>
15
;
}
private
bool
地碎效果
()
{
return
AI
.
Utils
.
IsEnemyBetter
(
false
,
false
);
}
private
bool
陷阱卡覆盖
()
{
return
!
Bot
.
HasInMonstersZone
((
int
)
CardId
.
No59
背反之料理人
,
true
,
true
);
...
...
Game/AI/Decks/Rank5Executor.cs
View file @
9e9d7442
...
...
@@ -415,19 +415,5 @@ namespace WindBot.Game.AI.Decks
}
return
false
;
}
private
ClientCard
GetBestEnemyCard
()
{
ClientCard
card
=
AI
.
Utils
.
GetProblematicCard
();
if
(
card
!=
null
)
return
card
;
card
=
Enemy
.
MonsterZone
.
GetHighestAttackMonster
();
if
(
card
!=
null
)
return
card
;
List
<
ClientCard
>
spells
=
Enemy
.
GetSpells
();
if
(
spells
.
Count
>
0
)
return
spells
[
0
];
return
null
;
}
}
}
Game/AI/Decks/ToadallyAwesomeExecutor.cs
View file @
9e9d7442
...
...
@@ -45,6 +45,7 @@ namespace WindBot.Game.AI.Decks
public
ToadallyAwesomeExecutor
(
GameAI
ai
,
Duel
duel
)
:
base
(
ai
,
duel
)
{
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
鹰身女妖的羽毛扫
,
DefaultHarpiesFeatherDusterFirst
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
银河旋风
,
DefaultGalaxyCyclone
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
鹰身女妖的羽毛扫
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
黑洞
,
DefaultDarkHole
);
...
...
Game/AI/Decks/YosenjuExecutor.cs
View file @
9e9d7442
...
...
@@ -58,7 +58,8 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
我我我枪手
);
// 清场
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
宇宙旋风
,
宇宙旋风
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
鹰身女妖的羽毛扫
,
DefaultHarpiesFeatherDusterFirst
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
宇宙旋风
,
DefaultCosmicCyclone
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
鹰身女妖的羽毛扫
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
黑洞
,
DefaultDarkHole
);
...
...
@@ -140,9 +141,9 @@ namespace WindBot.Game.AI.Decks
// 坑人
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
星光大道
,
DefaultTrap
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
魔力抽取
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之警告
,
神之警告
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之通告
,
神之通告
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之宣告
,
神之宣告
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之警告
,
DefaultSolemnWarning
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之通告
,
DefaultSolemnStrike
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
神之宣告
,
DefaultSolemnJudgment
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
大宇宙
,
DefaultUniqueTrap
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
虚无空间
,
DefaultUniqueTrap
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
波纹防护罩波浪之力
,
DefaultUniqueTrap
);
...
...
@@ -192,29 +193,6 @@ namespace WindBot.Game.AI.Decks
return
attacker
.
RealPower
>
defender
.
GetDefensePower
();
}
private
bool
宇宙旋风
()
{
foreach
(
ClientCard
card
in
CurrentChain
)
if
(
card
.
Id
==
(
int
)
CardId
.
宇宙旋风
)
return
false
;
return
(
Duel
.
LifePoints
[
0
]
>
1000
)
&&
DefaultMysticalSpaceTyphoon
();
}
private
bool
神之警告
()
{
return
(
Duel
.
LifePoints
[
0
]
>
2000
)
&&
!(
Duel
.
Player
==
0
&&
LastChainPlayer
==
-
1
)
&&
DefaultTrap
();
}
private
bool
神之通告
()
{
return
(
Duel
.
LifePoints
[
0
]
>
1500
)
&&
!(
Duel
.
Player
==
0
&&
LastChainPlayer
==
-
1
)
&&
DefaultTrap
();
}
private
bool
神之宣告
()
{
return
!(
Duel
.
ChainTargets
.
Count
==
1
&&
Card
.
Equals
(
Duel
.
ChainTargets
[
0
]))
&&
!(
Duel
.
Player
==
0
&&
LastChainPlayer
==
-
1
)
&&
DefaultTrap
();
}
private
bool
强欲而谦虚之壶
()
{
if
(
已发动削命
)
...
...
@@ -372,9 +350,5 @@ namespace WindBot.Game.AI.Decks
return
LastChainPlayer
==
1
;
}
private
bool
DontChainMyself
()
{
return
LastChainPlayer
!=
0
;
}
}
}
\ No newline at end of file
Game/AI/Decks/ZexalWeaponsExecutor.cs
View file @
9e9d7442
...
...
@@ -116,9 +116,9 @@ namespace WindBot.Game.AI.Decks
// Set and activate traps
AddExecutor
(
ExecutorType
.
SpellSet
,
DefaultSpellSet
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
BreakthroughSkill
,
BreakthroughSkill
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
SolemnWarning
,
SolemnWarning
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
SolemnStrike
,
SolemnStrike
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
BreakthroughSkill
,
Default
BreakthroughSkill
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
SolemnWarning
,
Default
SolemnWarning
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
SolemnStrike
,
Default
SolemnStrike
);
}
public
override
bool
OnSelectHand
()
...
...
@@ -276,21 +276,6 @@ namespace WindBot.Game.AI.Decks
return
true
;
}
private
bool
BreakthroughSkill
()
{
return
(
CurrentChain
.
Count
>
0
&&
DefaultTrap
());
}
private
bool
SolemnWarning
()
{
return
(
Duel
.
LifePoints
[
0
]
>
2000
)
&&
!(
Duel
.
Player
==
0
&&
LastChainPlayer
==
-
1
)
&&
DefaultTrap
();
}
private
bool
SolemnStrike
()
{
return
(
Duel
.
LifePoints
[
0
]
>
1500
)
&&
!(
Duel
.
Player
==
0
&&
LastChainPlayer
==
-
1
)
&&
DefaultTrap
();
}
private
bool
MonsterRepos
()
{
if
(
Card
.
Id
==
(
int
)
CardId
.
NumberS39UtopiatheLightning
)
...
...
Game/AI/Decks/ZoodiacExecutor.cs
View file @
9e9d7442
...
...
@@ -39,11 +39,7 @@ namespace WindBot.Game.AI.Decks
十二兽虎炮
=
11510448
,
十二兽狗环
=
41375811
,
十二兽龙枪
=
48905153
,
十二兽牛犄
=
85115440
,
雷击坏兽雷鸣龙王
=
48770333
,
怒炎坏兽多哥兰
=
93332803
,
对坏兽用决战兵器超级机械多哥兰
=
84769941
十二兽牛犄
=
85115440
}
bool
已特殊召唤虎炮
=
false
;
...
...
@@ -56,14 +52,14 @@ namespace WindBot.Game.AI.Decks
{
// Quick spells
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
鹰身女妖的羽毛扫
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
遭受妨碍的坏兽安眠
,
遭受妨碍的坏兽安眠效果
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
遭受妨碍的坏兽安眠
,
DefaultInterruptedKaijuSlumber
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
黑洞
,
DefaultDarkHole
);
AddExecutor
(
ExecutorType
.
SpSummon
,
(
int
)
CardId
.
海龟坏兽加美西耶勒
,
坏兽特殊召唤
);
AddExecutor
(
ExecutorType
.
SpSummon
,
(
int
)
CardId
.
黏丝坏兽库莫古斯
,
坏兽特殊召唤
);
AddExecutor
(
ExecutorType
.
SpSummon
,
(
int
)
CardId
.
怪粉坏兽加达拉
,
坏兽特殊召唤
);
AddExecutor
(
ExecutorType
.
SpSummon
,
(
int
)
CardId
.
多次元坏兽拉迪安
,
坏兽特殊召唤
);
AddExecutor
(
ExecutorType
.
SpSummon
,
(
int
)
CardId
.
坏星坏兽席兹奇埃鲁
,
坏兽特殊召唤
);
AddExecutor
(
ExecutorType
.
SpSummon
,
(
int
)
CardId
.
海龟坏兽加美西耶勒
,
DefaultKaijuSpsummon
);
AddExecutor
(
ExecutorType
.
SpSummon
,
(
int
)
CardId
.
黏丝坏兽库莫古斯
,
DefaultKaijuSpsummon
);
AddExecutor
(
ExecutorType
.
SpSummon
,
(
int
)
CardId
.
怪粉坏兽加达拉
,
DefaultKaijuSpsummon
);
AddExecutor
(
ExecutorType
.
SpSummon
,
(
int
)
CardId
.
多次元坏兽拉迪安
,
DefaultKaijuSpsummon
);
AddExecutor
(
ExecutorType
.
SpSummon
,
(
int
)
CardId
.
坏星坏兽席兹奇埃鲁
,
DefaultKaijuSpsummon
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
星球改造
);
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
暴走魔法阵
);
...
...
@@ -150,73 +146,6 @@ namespace WindBot.Game.AI.Decks
return
attacker
.
RealPower
>
defender
.
GetDefensePower
();
}
private
bool
遭受妨碍的坏兽安眠效果
()
{
if
(
Card
.
Location
==
CardLocation
.
Grave
)
{
AI
.
SelectCard
(
new
[]
{
(
int
)
CardId
.
海龟坏兽加美西耶勒
,
(
int
)
CardId
.
黏丝坏兽库莫古斯
,
(
int
)
CardId
.
多次元坏兽拉迪安
,
(
int
)
CardId
.
怪粉坏兽加达拉
});
return
true
;
}
AI
.
SelectCard
(
new
[]
{
(
int
)
CardId
.
坏星坏兽席兹奇埃鲁
,
(
int
)
CardId
.
多次元坏兽拉迪安
,
(
int
)
CardId
.
怪粉坏兽加达拉
,
(
int
)
CardId
.
黏丝坏兽库莫古斯
});
AI
.
SelectNextCard
(
new
[]
{
(
int
)
CardId
.
海龟坏兽加美西耶勒
,
(
int
)
CardId
.
黏丝坏兽库莫古斯
,
(
int
)
CardId
.
怪粉坏兽加达拉
,
(
int
)
CardId
.
多次元坏兽拉迪安
});
return
DefaultDarkHole
();
}
private
bool
坏兽特殊召唤
()
{
IList
<
int
>
kaijus
=
new
[]
{
(
int
)
CardId
.
坏星坏兽席兹奇埃鲁
,
(
int
)
CardId
.
怪粉坏兽加达拉
,
(
int
)
CardId
.
海龟坏兽加美西耶勒
,
(
int
)
CardId
.
多次元坏兽拉迪安
,
(
int
)
CardId
.
黏丝坏兽库莫古斯
,
(
int
)
CardId
.
雷击坏兽雷鸣龙王
,
(
int
)
CardId
.
怒炎坏兽多哥兰
,
(
int
)
CardId
.
对坏兽用决战兵器超级机械多哥兰
};
foreach
(
ClientCard
monster
in
Enemy
.
GetMonsters
())
{
if
(
kaijus
.
Contains
(
monster
.
Id
))
return
Card
.
GetDefensePower
()
>
monster
.
GetDefensePower
();
}
ClientCard
card
=
Enemy
.
MonsterZone
.
GetFloodgate
();
if
(
card
!=
null
)
{
AI
.
SelectCard
(
card
);
return
true
;
}
card
=
Enemy
.
MonsterZone
.
GetDangerousMonster
();
if
(
card
!=
null
)
{
AI
.
SelectCard
(
card
);
return
true
;
}
card
=
AI
.
Utils
.
GetOneEnemyBetterThanValue
(
Card
.
GetDefensePower
(),
false
);
if
(
card
!=
null
)
{
AI
.
SelectCard
(
card
);
return
true
;
}
return
false
;
}
private
bool
电光皇特殊召唤
()
{
...
...
Game/AI/DefaultExecutor.cs
View file @
9e9d7442
...
...
@@ -11,7 +11,16 @@ namespace WindBot.Game.AI
{
private
enum
CardId
{
JizukirutheStarDestroyingKaiju
=
63941210
,
GadarlatheMysteryDustKaiju
=
36956512
,
GamecieltheSeaTurtleKaiju
=
55063751
,
RadiantheMultidimensionalKaiju
=
28674152
,
KumongoustheStickyStringKaiju
=
29726552
,
ThunderKingtheLightningstrikeKaiju
=
48770333
,
DogorantheMadFlameKaiju
=
93332803
,
SuperAntiKaijuWarMachineMechaDogoran
=
84769941
,
MysticalSpaceTyphoon
=
5318639
,
CosmicCyclone
=
8267140
,
ChickenGame
=
67616300
}
...
...
@@ -21,17 +30,15 @@ namespace WindBot.Game.AI
AddExecutor
(
ExecutorType
.
Activate
,
(
int
)
CardId
.
ChickenGame
,
DefaultChickenGame
);
}
/// <summary>
/// Destroy face-down cards first, in our turn.
/// </summary>
protected
bool
DefaultMysticalSpaceTyphoon
()
{
foreach
(
ClientCard
card
in
CurrentChain
)
if
(
card
.
Id
==
(
int
)
CardId
.
MysticalSpaceTyphoon
)
return
false
;
return
DefaultStampingDestruction
();
}
protected
bool
DefaultStampingDestruction
()
{
List
<
ClientCard
>
spells
=
Enemy
.
GetSpells
();
if
(
spells
.
Count
==
0
)
return
false
;
...
...
@@ -56,11 +63,26 @@ namespace WindBot.Game.AI
return
true
;
}
/// <summary>
/// Destroy face-down cards first, in our turn.
/// </summary>
protected
bool
DefaultCosmicCyclone
()
{
foreach
(
ClientCard
card
in
CurrentChain
)
if
(
card
.
Id
==
(
int
)
CardId
.
CosmicCyclone
)
return
false
;
return
(
Duel
.
LifePoints
[
0
]
>
1000
)
&&
DefaultMysticalSpaceTyphoon
();
}
/// <summary>
/// Activate if avail.
/// </summary>
protected
bool
DefaultGalaxyCyclone
()
{
List
<
ClientCard
>
spells
=
Enemy
.
GetSpells
();
if
(
spells
.
Count
==
0
)
return
false
;
ClientCard
selected
=
null
;
if
(
Card
.
Location
==
CardLocation
.
Grave
)
...
...
@@ -97,6 +119,9 @@ namespace WindBot.Game.AI
return
true
;
}
/// <summary>
/// Set the highest ATK level 4+ effect enemy monster.
/// </summary>
protected
bool
DefaultBookOfMoon
()
{
if
(
AI
.
Utils
.
IsEnemyBetter
(
true
,
true
))
...
...
@@ -111,6 +136,9 @@ namespace WindBot.Game.AI
return
false
;
}
/// <summary>
/// Return problematic monster, and if this card become target, return any enemy monster.
/// </summary>
protected
bool
DefaultCompulsoryEvacuationDevice
()
{
ClientCard
target
=
AI
.
Utils
.
GetProblematicMonsterCard
();
...
...
@@ -123,8 +151,8 @@ namespace WindBot.Game.AI
{
if
(
Card
.
Equals
(
card
))
{
List
<
ClientCard
>
monsters
=
Enemy
.
GetMonsters
();
foreach
(
ClientCard
monster
in
monsters
)
ClientCard
monster
=
AI
.
Utils
.
GetAnyEnemyMonster
();
if
(
monster
!=
null
)
{
AI
.
SelectCard
(
monster
);
return
true
;
...
...
@@ -134,6 +162,9 @@ namespace WindBot.Game.AI
return
false
;
}
/// <summary>
/// Revive the best monster when we don't have better one in field.
/// </summary>
protected
bool
DefaultCallOfTheHaunted
()
{
if
(!
AI
.
Utils
.
IsEnemyBetter
(
true
,
true
))
...
...
@@ -152,39 +183,121 @@ namespace WindBot.Game.AI
return
true
;
}
/// <summary>
/// Chain the enemy monster.
/// </summary>
protected
bool
DefaultBreakthroughSkill
()
{
ClientCard
LastChainCard
=
GetLastChainCard
();
if
(
LastChainCard
==
null
)
return
false
;
return
LastChainCard
.
Controller
==
1
&&
LastChainCard
.
Location
==
CardLocation
.
MonsterZone
&&
DefaultUniqueTrap
();
}
/// <summary>
/// Activate only except this card is the target or we summon monsters.
/// </summary>
protected
bool
DefaultSolemnJudgment
()
{
return
!(
Duel
.
ChainTargets
.
Count
==
1
&&
Card
.
Equals
(
Duel
.
ChainTargets
[
0
]))
&&
!(
Duel
.
Player
==
0
&&
LastChainPlayer
==
-
1
)
&&
DefaultTrap
();
}
/// <summary>
/// Activate only except we summon monsters.
/// </summary>
protected
bool
DefaultSolemnWarning
()
{
return
(
Duel
.
LifePoints
[
0
]
>
2000
)
&&
!(
Duel
.
Player
==
0
&&
LastChainPlayer
==
-
1
)
&&
DefaultTrap
();
}
/// <summary>
/// Activate only except we summon monsters.
/// </summary>
protected
bool
DefaultSolemnStrike
()
{
return
(
Duel
.
LifePoints
[
0
]
>
1500
)
&&
!(
Duel
.
Player
==
0
&&
LastChainPlayer
==
-
1
)
&&
DefaultTrap
();
}
/// <summary>
/// Activate when all enemy monsters have better ATK.
/// </summary>
protected
bool
DefaultTorrentialTribute
()
{
return
(
AI
.
Utils
.
IsEnemyBetter
(
true
,
true
));
}
/// <summary>
/// Activate enemy have more S&T.
/// </summary>
protected
bool
DefaultHeavyStorm
()
{
return
Bot
.
GetSpellCount
()
<
Enemy
.
GetSpellCount
();
}
/// <summary>
/// Activate before other winds, if enemy have more than 2 S&T.
/// </summary>
protected
bool
DefaultHarpiesFeatherDusterFirst
()
{
return
Enemy
.
GetSpellCount
()
>=
2
;
}
/// <summary>
/// Activate when one enemy monsters have better ATK.
/// </summary>
protected
bool
DefaultHammerShot
()
{
return
AI
.
Utils
.
IsEnemyBetter
(
true
,
false
);
}
/// <summary>
/// Activate when one enemy monsters have better ATK or DEF.
/// </summary>
protected
bool
DefaultDarkHole
()
{
return
AI
.
Utils
.
IsEnemyBetter
(
false
,
false
);
}
/// <summary>
/// Activate when one enemy monsters have better ATK or DEF.
/// </summary>
protected
bool
DefaultRaigeki
()
{
return
AI
.
Utils
.
IsEnemyBetter
(
false
,
false
);
}
/// <summary>
/// Activate when one enemy monsters have better ATK or DEF.
/// </summary>
protected
bool
DefaultSmashingGround
()
{
return
AI
.
Utils
.
IsEnemyBetter
(
false
,
false
);
}
/// <summary>
/// Activate when we have more than 15 cards in deck.
/// </summary>
protected
bool
DefaultPotOfDesires
()
{
return
Bot
.
Deck
.
Count
>
15
;
}
/// <summary>
/// Set traps only and avoid block the activation of other cards.
/// </summary>
protected
bool
DefaultSpellSet
()
{
return
Card
.
IsTrap
()
&&
Bot
.
GetSpellCountWithoutField
()
<
4
;
}
/// <summary>
/// Summon with tributes ATK lower.
/// </summary>
protected
bool
DefaultTributeSummon
()
{
foreach
(
ClientCard
card
in
Bot
.
Spell
Zone
)
foreach
(
ClientCard
card
in
Bot
.
Monster
Zone
)
{
if
(
card
!=
null
&&
card
.
Id
==
Card
.
Id
&&
...
...
@@ -196,17 +309,23 @@ namespace WindBot.Game.AI
{
ClientCard
tributeCard
=
Bot
.
MonsterZone
[
j
];
if
(
tributeCard
==
null
)
continue
;
if
(
tributeCard
.
Attack
<
Card
.
Attack
)
if
(
tributeCard
.
GetDefensePower
()
<
Card
.
Attack
)
tributecount
--;
}
return
tributecount
<=
0
;
}
/// <summary>
/// Activate when we have no field.
/// </summary>
protected
bool
DefaultField
()
{
return
Bot
.
SpellZone
[
5
]
==
null
;
}
/// <summary>
/// Turn if all enemy is better.
/// </summary>
protected
bool
DefaultMonsterRepos
()
{
bool
enemyBetter
=
AI
.
Utils
.
IsEnemyBetter
(
true
,
true
);
...
...
@@ -218,11 +337,17 @@ namespace WindBot.Game.AI
return
false
;
}
/// <summary>
/// Chain enemy activation or summon.
/// </summary>
protected
bool
DefaultTrap
()
{
return
(
LastChainPlayer
==
-
1
&&
Duel
.
LastSummonPlayer
!=
0
)
||
LastChainPlayer
==
1
;
}
/// <summary>
/// Activate when avail and no other our trap card in this chain or face-up.
/// </summary>
protected
bool
DefaultUniqueTrap
()
{
if
(
HasChainedTrap
(
0
))
...
...
@@ -239,6 +364,22 @@ namespace WindBot.Game.AI
return
true
;
}
/// <summary>
/// Dumb way to avoid the bot chain in mess.
/// </summary>
protected
bool
DefaultDontChainMyself
()
{
foreach
(
CardExecutor
exec
in
Executors
)
{
if
(
exec
.
Type
==
Type
&&
exec
.
CardId
==
Card
.
Id
)
return
false
;
}
return
LastChainPlayer
!=
0
;
}
/// <summary>
/// Draw when we have lower LP, or destroy it. Can be overrided.
/// </summary>
protected
bool
DefaultChickenGame
()
{
int
count
=
0
;
...
...
@@ -256,8 +397,16 @@ namespace WindBot.Game.AI
return
false
;
}
/// <summary>
/// Clever enough.
/// </summary>
protected
bool
DefaultDimensionalBarrier
()
{
const
int
RITUAL
=
0
;
const
int
FUSION
=
1
;
const
int
SYNCHRO
=
2
;
const
int
XYZ
=
3
;
const
int
PENDULUM
=
4
;
if
(
Duel
.
Player
!=
0
)
{
List
<
ClientCard
>
monsters
=
Enemy
.
GetMonsters
();
...
...
@@ -272,21 +421,21 @@ namespace WindBot.Game.AI
nontuner
=
true
;
if
(
monster
.
IsOneForXyz
())
{
AI
.
SelectOption
(
3
);
AI
.
SelectOption
(
XYZ
);
return
true
;
}
levels
[
monster
.
Level
]
=
levels
[
monster
.
Level
]
+
1
;
}
if
(
tuner
&&
nontuner
)
{
AI
.
SelectOption
(
2
);
AI
.
SelectOption
(
SYNCHRO
);
return
true
;
}
for
(
int
i
=
1
;
i
<=
12
;
i
++)
{
if
(
levels
[
i
]>
1
)
{
AI
.
SelectOption
(
3
);
AI
.
SelectOption
(
XYZ
);
return
true
;
}
}
...
...
@@ -294,7 +443,7 @@ namespace WindBot.Game.AI
ClientCard
r
=
Enemy
.
SpellZone
[
7
];
if
(
l
!=
null
&&
r
!=
null
&&
l
.
LScale
!=
r
.
RScale
)
{
AI
.
SelectOption
(
4
);
AI
.
SelectOption
(
PENDULUM
);
return
true
;
}
}
...
...
@@ -303,27 +452,27 @@ namespace WindBot.Game.AI
{
if
(
lastchaincard
.
HasType
(
CardType
.
Ritual
))
{
AI
.
SelectOption
(
0
);
AI
.
SelectOption
(
RITUAL
);
return
true
;
}
if
(
lastchaincard
.
HasType
(
CardType
.
Fusion
))
{
AI
.
SelectOption
(
1
);
AI
.
SelectOption
(
FUSION
);
return
true
;
}
if
(
lastchaincard
.
HasType
(
CardType
.
Synchro
))
{
AI
.
SelectOption
(
2
);
AI
.
SelectOption
(
SYNCHRO
);
return
true
;
}
if
(
lastchaincard
.
HasType
(
CardType
.
Xyz
))
{
AI
.
SelectOption
(
3
);
AI
.
SelectOption
(
XYZ
);
return
true
;
}
if
(
lastchaincard
.
IsFusionSpell
())
{
AI
.
SelectOption
(
1
);
AI
.
SelectOption
(
FUSION
);
return
true
;
}
}
...
...
@@ -331,11 +480,86 @@ namespace WindBot.Game.AI
{
if
(
Card
.
Equals
(
card
))
{
AI
.
SelectOption
(
3
);
AI
.
SelectOption
(
XYZ
);
return
true
;
}
}
return
false
;
}
/// <summary>
/// Clever enough.
/// </summary>
protected
bool
DefaultInterruptedKaijuSlumber
()
{
if
(
Card
.
Location
==
CardLocation
.
Grave
)
{
AI
.
SelectCard
(
new
[]
{
(
int
)
CardId
.
GamecieltheSeaTurtleKaiju
,
(
int
)
CardId
.
KumongoustheStickyStringKaiju
,
(
int
)
CardId
.
RadiantheMultidimensionalKaiju
,
(
int
)
CardId
.
GadarlatheMysteryDustKaiju
});
return
true
;
}
AI
.
SelectCard
(
new
[]
{
(
int
)
CardId
.
JizukirutheStarDestroyingKaiju
,
(
int
)
CardId
.
RadiantheMultidimensionalKaiju
,
(
int
)
CardId
.
GadarlatheMysteryDustKaiju
,
(
int
)
CardId
.
KumongoustheStickyStringKaiju
});
AI
.
SelectNextCard
(
new
[]
{
(
int
)
CardId
.
GamecieltheSeaTurtleKaiju
,
(
int
)
CardId
.
KumongoustheStickyStringKaiju
,
(
int
)
CardId
.
GadarlatheMysteryDustKaiju
,
(
int
)
CardId
.
RadiantheMultidimensionalKaiju
});
return
DefaultDarkHole
();
}
/// <summary>
/// Clever enough.
/// </summary>
protected
bool
DefaultKaijuSpsummon
()
{
IList
<
int
>
kaijus
=
new
[]
{
(
int
)
CardId
.
JizukirutheStarDestroyingKaiju
,
(
int
)
CardId
.
GadarlatheMysteryDustKaiju
,
(
int
)
CardId
.
GamecieltheSeaTurtleKaiju
,
(
int
)
CardId
.
RadiantheMultidimensionalKaiju
,
(
int
)
CardId
.
KumongoustheStickyStringKaiju
,
(
int
)
CardId
.
ThunderKingtheLightningstrikeKaiju
,
(
int
)
CardId
.
DogorantheMadFlameKaiju
,
(
int
)
CardId
.
SuperAntiKaijuWarMachineMechaDogoran
};
foreach
(
ClientCard
monster
in
Enemy
.
GetMonsters
())
{
if
(
kaijus
.
Contains
(
monster
.
Id
))
return
Card
.
GetDefensePower
()
>
monster
.
GetDefensePower
();
}
ClientCard
card
=
Enemy
.
MonsterZone
.
GetFloodgate
();
if
(
card
!=
null
)
{
AI
.
SelectCard
(
card
);
return
true
;
}
card
=
Enemy
.
MonsterZone
.
GetDangerousMonster
();
if
(
card
!=
null
)
{
AI
.
SelectCard
(
card
);
return
true
;
}
card
=
AI
.
Utils
.
GetOneEnemyBetterThanValue
(
Card
.
GetDefensePower
(),
false
);
if
(
card
!=
null
)
{
AI
.
SelectCard
(
card
);
return
true
;
}
return
false
;
}
}
}
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