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