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
xiaoye
windbot
Commits
3e8635b7
Commit
3e8635b7
authored
Mar 17, 2021
by
mercury233
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
format CRLF
parent
f79e942c
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
2164 additions
and
2164 deletions
+2164
-2164
Game/AI/Decks/FamiliarPossessedExecutor.cs
Game/AI/Decks/FamiliarPossessedExecutor.cs
+557
-557
Game/AI/Decks/LightswornShaddoldinosourExecutor.cs
Game/AI/Decks/LightswornShaddoldinosourExecutor.cs
+1273
-1273
Game/AI/Decks/TimeThiefExecutor.cs
Game/AI/Decks/TimeThiefExecutor.cs
+334
-334
No files found.
Game/AI/Decks/FamiliarPossessedExecutor.cs
View file @
3e8635b7
using
YGOSharp.OCGWrapper
;
using
YGOSharp.OCGWrapper.Enums
;
using
System.Collections.Generic
;
using
WindBot
;
using
WindBot.Game
;
using
WindBot.Game.AI
;
using
System.Linq
;
namespace
WindBot.Game.AI.Decks
{
[
Deck
(
"FamiliarPossessed"
,
"AI_FamiliarPossessed"
)]
public
class
FamiliarPossessedExecutor
:
DefaultExecutor
{
public
class
CardId
{
public
const
int
MetalSnake
=
71197066
;
public
const
int
InspectBoarder
=
15397015
;
public
const
int
AshBlossomAndJoyousSpring
=
14558127
;
public
const
int
GrenMajuDaEizo
=
36584821
;
using
YGOSharp.OCGWrapper
;
using
YGOSharp.OCGWrapper.Enums
;
using
System.Collections.Generic
;
using
WindBot
;
using
WindBot.Game
;
using
WindBot.Game.AI
;
using
System.Linq
;
namespace
WindBot.Game.AI.Decks
{
[
Deck
(
"FamiliarPossessed"
,
"AI_FamiliarPossessed"
)]
public
class
FamiliarPossessedExecutor
:
DefaultExecutor
{
public
class
CardId
{
public
const
int
MetalSnake
=
71197066
;
public
const
int
InspectBoarder
=
15397015
;
public
const
int
AshBlossomAndJoyousSpring
=
14558127
;
public
const
int
GrenMajuDaEizo
=
36584821
;
public
const
int
MaxxC
=
23434538
;
public
const
int
Aussa
=
31887906
;
...
...
@@ -27,31 +27,31 @@ namespace WindBot.Game.AI.Decks
public
const
int
Awakening
=
62256492
;
public
const
int
Unpossessed
=
25704359
;
public
const
int
NaturalExterio
=
99916754
;
public
const
int
NaturalBeast
=
33198837
;
public
const
int
SwordsmanLV7
=
37267041
;
public
const
int
RoyalDecreel
=
51452091
;
public
const
int
HarpieFeatherDuster
=
18144506
;
public
const
int
NaturalExterio
=
99916754
;
public
const
int
NaturalBeast
=
33198837
;
public
const
int
SwordsmanLV7
=
37267041
;
public
const
int
RoyalDecreel
=
51452091
;
public
const
int
HarpieFeatherDuster
=
18144506
;
public
const
int
PotOfDesires
=
35261759
;
public
const
int
PotofExtravagance
=
49238328
;
public
const
int
Scapegoat
=
73915051
;
public
const
int
MacroCosmos
=
30241314
;
public
const
int
Crackdown
=
36975314
;
public
const
int
ImperialOrder
=
61740673
;
public
const
int
SolemnWarning
=
84749824
;
public
const
int
SolemStrike
=
40605147
;
public
const
int
PotofExtravagance
=
49238328
;
public
const
int
Scapegoat
=
73915051
;
public
const
int
MacroCosmos
=
30241314
;
public
const
int
Crackdown
=
36975314
;
public
const
int
ImperialOrder
=
61740673
;
public
const
int
SolemnWarning
=
84749824
;
public
const
int
SolemStrike
=
40605147
;
public
const
int
SolemnJudgment
=
41420027
;
public
const
int
SkillDrain
=
82732705
;
public
const
int
Mistake
=
59305593
;
public
const
int
BorreloadDragon
=
31833038
;
public
const
int
Mistake
=
59305593
;
public
const
int
BorreloadDragon
=
31833038
;
public
const
int
BirrelswordDragon
=
85289965
;
public
const
int
KnightmareGryphon
=
65330383
;
public
const
int
KnightmareUnicorn
=
38342335
;
public
const
int
KnightmarePhoenix
=
2857636
;
public
const
int
KnightmareCerberus
=
75452921
;
public
const
int
LinkSpider
=
98978921
;
public
const
int
KnightmareGryphon
=
65330383
;
public
const
int
KnightmareUnicorn
=
38342335
;
public
const
int
KnightmarePhoenix
=
2857636
;
public
const
int
KnightmareCerberus
=
75452921
;
public
const
int
LinkSpider
=
98978921
;
public
const
int
Linkuriboh
=
41999284
;
public
const
int
GagagaCowboy
=
12014404
;
...
...
@@ -61,569 +61,569 @@ namespace WindBot.Game.AI.Decks
public
const
int
HiitaP
=
48815792
;
public
const
int
LynaP
=
9839945
;
}
public
FamiliarPossessedExecutor
(
GameAI
ai
,
Duel
duel
)
:
base
(
ai
,
duel
)
}
public
FamiliarPossessedExecutor
(
GameAI
ai
,
Duel
duel
)
:
base
(
ai
,
duel
)
{
// do first
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
PotofExtravagance
,
PotofExtravaganceActivate
);
// burn if enemy's LP is below 800
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
GagagaCowboy
,
GagagaCowboySummon
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
GagagaCowboy
);
//Sticker
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MacroCosmos
,
MacroCosmoseff
);
//counter
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
AshBlossomAndJoyousSpring
,
DefaultAshBlossomAndJoyousSpring
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
PotofExtravagance
,
PotofExtravaganceActivate
);
// burn if enemy's LP is below 800
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
GagagaCowboy
,
GagagaCowboySummon
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
GagagaCowboy
);
//Sticker
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MacroCosmos
,
MacroCosmoseff
);
//counter
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
AshBlossomAndJoyousSpring
,
DefaultAshBlossomAndJoyousSpring
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MaxxC
,
DefaultMaxxC
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SolemnWarning
,
DefaultSolemnWarning
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SolemStrike
,
DefaultSolemnStrike
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ImperialOrder
,
ImperialOrderfirst
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ImperialOrder
,
ImperialOrdereff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SolemnWarning
,
DefaultSolemnWarning
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SolemStrike
,
DefaultSolemnStrike
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ImperialOrder
,
ImperialOrderfirst
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ImperialOrder
,
ImperialOrdereff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SolemnJudgment
,
DefaultSolemnJudgment
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SkillDrain
,
SkillDrainEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Mistake
,
DefaultUniqueTrap
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Awakening
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Unpossessed
,
UnpossessedEffect
);
//first do
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
HarpieFeatherDuster
,
DefaultHarpiesFeatherDusterFirst
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
PotOfDesires
,
PotOfDesireseff
);
//sp
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Linkuriboh
,
Linkuriboheff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Linkuriboh
,
Linkuribohsp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
KnightmareCerberus
,
Knightmaresp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
KnightmarePhoenix
,
Knightmaresp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
AussaP
,
AussaPsp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Unpossessed
,
UnpossessedEffect
);
//first do
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
HarpieFeatherDuster
,
DefaultHarpiesFeatherDusterFirst
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
PotOfDesires
,
PotOfDesireseff
);
//sp
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Linkuriboh
,
Linkuriboheff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Linkuriboh
,
Linkuribohsp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
KnightmareCerberus
,
Knightmaresp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
KnightmarePhoenix
,
Knightmaresp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
AussaP
,
AussaPsp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
AussaP
,
AussaPeff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
EriaP
,
EriaPsp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
EriaP
,
EriaPsp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
EriaP
,
EriaPeff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
WynnP
,
WynnPsp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
WynnP
,
WynnPsp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
WynnP
,
WynnPeff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
HiitaP
,
HiitaPsp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
HiitaP
,
HiitaPsp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
HiitaP
,
HiitaPeff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
LynaP
,
LynaPsp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
LynaP
,
LynaPsp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
LynaP
,
LynaPeff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Linkuriboh
,
Linkuribohsp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
LinkSpider
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
BorreloadDragon
,
BorreloadDragonsp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Linkuriboh
,
Linkuribohsp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
LinkSpider
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
BorreloadDragon
,
BorreloadDragonsp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
BorreloadDragon
,
BorreloadDragoneff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
BirrelswordDragon
,
BirrelswordDragonsp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
BirrelswordDragon
,
BirrelswordDragonsp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
BirrelswordDragon
,
BirrelswordDragoneff
);
// normal summon
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
InspectBoarder
,
InspectBoardersummon
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
GrenMajuDaEizo
,
GrenMajuDaEizosummon
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
InspectBoarder
,
InspectBoardersummon
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
GrenMajuDaEizo
,
GrenMajuDaEizosummon
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
BorreloadDragon
,
BorreloadDragonspsecond
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Aussa
,
FamiliarPossessedsummon
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Eria
,
FamiliarPossessedsummon
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Wynn
,
FamiliarPossessedsummon
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Hiita
,
FamiliarPossessedsummon
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Lyna
,
FamiliarPossessedsummon
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MetalSnake
,
MetalSnakesp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MetalSnake
,
MetalSnakeeff
);
//spell
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Crackdown
,
Crackdowneff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Scapegoat
,
DefaultScapegoat
);
AddExecutor
(
ExecutorType
.
Repos
,
DefaultMonsterRepos
);
//set
AddExecutor
(
ExecutorType
.
SpellSet
,
SpellSet
);
}
public
void
SelectSTPlace
(
ClientCard
card
=
null
,
bool
avoid_Impermanence
=
false
,
List
<
int
>
avoid_list
=
null
)
{
List
<
int
>
list
=
new
List
<
int
>
{
0
,
1
,
2
,
3
,
4
};
int
n
=
list
.
Count
;
while
(
n
--
>
1
)
{
int
index
=
Program
.
Rand
.
Next
(
n
+
1
);
int
temp
=
list
[
index
];
list
[
index
]
=
list
[
n
];
list
[
n
]
=
temp
;
}
foreach
(
int
seq
in
list
)
{
int
zone
=
(
int
)
System
.
Math
.
Pow
(
2
,
seq
);
if
(
Bot
.
SpellZone
[
seq
]
==
null
)
{
if
(
card
!=
null
&&
card
.
Location
==
CardLocation
.
Hand
&&
avoid_Impermanence
)
continue
;
if
(
avoid_list
!=
null
&&
avoid_list
.
Contains
(
seq
))
continue
;
AI
.
SelectPlace
(
zone
);
return
;
};
}
AI
.
SelectPlace
(
0
);
}
public
bool
SpellNegatable
(
bool
isCounter
=
false
,
ClientCard
target
=
null
)
{
// target default set
if
(
target
==
null
)
target
=
Card
;
// won't negate if not on field
if
(
target
.
Location
!=
CardLocation
.
SpellZone
&&
target
.
Location
!=
CardLocation
.
Hand
)
return
false
;
// negate judge
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
NaturalExterio
,
true
)
&&
!
isCounter
)
return
true
;
if
(
target
.
IsSpell
())
{
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
NaturalBeast
,
true
))
return
true
;
if
(
Enemy
.
HasInSpellZone
(
CardId
.
ImperialOrder
,
true
)
||
Bot
.
HasInSpellZone
(
CardId
.
ImperialOrder
,
true
))
return
true
;
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
SwordsmanLV7
,
true
)
||
Bot
.
HasInMonstersZone
(
CardId
.
SwordsmanLV7
,
true
))
return
true
;
}
if
(
target
.
IsTrap
())
{
if
(
Enemy
.
HasInSpellZone
(
CardId
.
RoyalDecreel
,
true
)
||
Bot
.
HasInSpellZone
(
CardId
.
RoyalDecreel
,
true
))
return
true
;
}
// how to get here?
return
false
;
}
private
bool
MacroCosmoseff
()
{
return
(
Duel
.
LastChainPlayer
==
1
||
Duel
.
LastSummonPlayer
==
1
||
Duel
.
Player
==
0
)
&&
UniqueFaceupSpell
();
}
private
bool
ImperialOrderfirst
()
{
if
(
Util
.
GetLastChainCard
()
!=
null
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
PotOfDesires
))
return
false
;
return
DefaultOnBecomeTarget
()
&&
Util
.
GetLastChainCard
().
HasType
(
CardType
.
Spell
);
}
private
bool
ImperialOrdereff
()
{
if
(
Util
.
GetLastChainCard
()
!=
null
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
PotOfDesires
))
return
false
;
if
(
Duel
.
LastChainPlayer
==
1
)
{
foreach
(
ClientCard
check
in
Enemy
.
GetSpells
())
{
if
(
Util
.
GetLastChainCard
()
==
check
)
return
true
;
}
}
return
false
;
}
private
bool
PotOfDesireseff
()
{
return
Bot
.
Deck
.
Count
>
14
&&
!
DefaultSpellWillBeNegated
();
}
// activate of PotofExtravagance
public
bool
PotofExtravaganceActivate
()
{
// won't activate if it'll be negate
if
(
SpellNegatable
())
return
false
;
SelectSTPlace
(
Card
,
true
);
AI
.
SelectOption
(
1
);
return
true
;
}
private
bool
Crackdowneff
()
{
if
(
Util
.
GetOneEnemyBetterThanMyBest
(
true
,
true
)
!=
null
&&
Bot
.
UnderAttack
)
AI
.
SelectCard
(
Util
.
GetOneEnemyBetterThanMyBest
(
true
,
true
));
return
Util
.
GetOneEnemyBetterThanMyBest
(
true
,
true
)
!=
null
&&
Bot
.
UnderAttack
;
}
private
bool
SkillDrainEffect
()
{
return
(
Bot
.
LifePoints
>
1000
)
&&
DefaultUniqueTrap
();
}
private
bool
UnpossessedEffect
()
{
AI
.
SelectCard
(
new
List
<
int
>()
{
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Lyna
,
FamiliarPossessedsummon
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MetalSnake
,
MetalSnakesp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MetalSnake
,
MetalSnakeeff
);
//spell
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Crackdown
,
Crackdowneff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Scapegoat
,
DefaultScapegoat
);
AddExecutor
(
ExecutorType
.
Repos
,
DefaultMonsterRepos
);
//set
AddExecutor
(
ExecutorType
.
SpellSet
,
SpellSet
);
}
public
void
SelectSTPlace
(
ClientCard
card
=
null
,
bool
avoid_Impermanence
=
false
,
List
<
int
>
avoid_list
=
null
)
{
List
<
int
>
list
=
new
List
<
int
>
{
0
,
1
,
2
,
3
,
4
};
int
n
=
list
.
Count
;
while
(
n
--
>
1
)
{
int
index
=
Program
.
Rand
.
Next
(
n
+
1
);
int
temp
=
list
[
index
];
list
[
index
]
=
list
[
n
];
list
[
n
]
=
temp
;
}
foreach
(
int
seq
in
list
)
{
int
zone
=
(
int
)
System
.
Math
.
Pow
(
2
,
seq
);
if
(
Bot
.
SpellZone
[
seq
]
==
null
)
{
if
(
card
!=
null
&&
card
.
Location
==
CardLocation
.
Hand
&&
avoid_Impermanence
)
continue
;
if
(
avoid_list
!=
null
&&
avoid_list
.
Contains
(
seq
))
continue
;
AI
.
SelectPlace
(
zone
);
return
;
};
}
AI
.
SelectPlace
(
0
);
}
public
bool
SpellNegatable
(
bool
isCounter
=
false
,
ClientCard
target
=
null
)
{
// target default set
if
(
target
==
null
)
target
=
Card
;
// won't negate if not on field
if
(
target
.
Location
!=
CardLocation
.
SpellZone
&&
target
.
Location
!=
CardLocation
.
Hand
)
return
false
;
// negate judge
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
NaturalExterio
,
true
)
&&
!
isCounter
)
return
true
;
if
(
target
.
IsSpell
())
{
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
NaturalBeast
,
true
))
return
true
;
if
(
Enemy
.
HasInSpellZone
(
CardId
.
ImperialOrder
,
true
)
||
Bot
.
HasInSpellZone
(
CardId
.
ImperialOrder
,
true
))
return
true
;
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
SwordsmanLV7
,
true
)
||
Bot
.
HasInMonstersZone
(
CardId
.
SwordsmanLV7
,
true
))
return
true
;
}
if
(
target
.
IsTrap
())
{
if
(
Enemy
.
HasInSpellZone
(
CardId
.
RoyalDecreel
,
true
)
||
Bot
.
HasInSpellZone
(
CardId
.
RoyalDecreel
,
true
))
return
true
;
}
// how to get here?
return
false
;
}
private
bool
MacroCosmoseff
()
{
return
(
Duel
.
LastChainPlayer
==
1
||
Duel
.
LastSummonPlayer
==
1
||
Duel
.
Player
==
0
)
&&
UniqueFaceupSpell
();
}
private
bool
ImperialOrderfirst
()
{
if
(
Util
.
GetLastChainCard
()
!=
null
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
PotOfDesires
))
return
false
;
return
DefaultOnBecomeTarget
()
&&
Util
.
GetLastChainCard
().
HasType
(
CardType
.
Spell
);
}
private
bool
ImperialOrdereff
()
{
if
(
Util
.
GetLastChainCard
()
!=
null
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
PotOfDesires
))
return
false
;
if
(
Duel
.
LastChainPlayer
==
1
)
{
foreach
(
ClientCard
check
in
Enemy
.
GetSpells
())
{
if
(
Util
.
GetLastChainCard
()
==
check
)
return
true
;
}
}
return
false
;
}
private
bool
PotOfDesireseff
()
{
return
Bot
.
Deck
.
Count
>
14
&&
!
DefaultSpellWillBeNegated
();
}
// activate of PotofExtravagance
public
bool
PotofExtravaganceActivate
()
{
// won't activate if it'll be negate
if
(
SpellNegatable
())
return
false
;
SelectSTPlace
(
Card
,
true
);
AI
.
SelectOption
(
1
);
return
true
;
}
private
bool
Crackdowneff
()
{
if
(
Util
.
GetOneEnemyBetterThanMyBest
(
true
,
true
)
!=
null
&&
Bot
.
UnderAttack
)
AI
.
SelectCard
(
Util
.
GetOneEnemyBetterThanMyBest
(
true
,
true
));
return
Util
.
GetOneEnemyBetterThanMyBest
(
true
,
true
)
!=
null
&&
Bot
.
UnderAttack
;
}
private
bool
SkillDrainEffect
()
{
return
(
Bot
.
LifePoints
>
1000
)
&&
DefaultUniqueTrap
();
}
private
bool
UnpossessedEffect
()
{
AI
.
SelectCard
(
new
List
<
int
>()
{
CardId
.
Lyna
,
CardId
.
Hiita
,
CardId
.
Wynn
,
CardId
.
Eria
,
CardId
.
Aussa
});
return
true
;
}
private
bool
InspectBoardersummon
()
{
if
(
Bot
.
MonsterZone
[
0
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z0
);
else
AI
.
SelectPlace
(
Zones
.
z4
);
return
true
;
}
private
bool
GrenMajuDaEizosummon
()
{
CardId
.
Aussa
});
return
true
;
}
private
bool
InspectBoardersummon
()
{
if
(
Bot
.
MonsterZone
[
0
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z0
);
else
AI
.
SelectPlace
(
Zones
.
z4
);
return
true
;
}
private
bool
GrenMajuDaEizosummon
()
{
if
(
Duel
.
Turn
==
1
)
return
false
;
if
(
Bot
.
HasInSpellZone
(
CardId
.
SkillDrain
)
||
Enemy
.
HasInSpellZone
(
CardId
.
SkillDrain
))
return
false
;
if
(
Bot
.
MonsterZone
[
0
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z0
);
else
AI
.
SelectPlace
(
Zones
.
z4
);
return
Bot
.
Banished
.
Count
>=
6
;
}
private
bool
FamiliarPossessedsummon
()
{
if
(
Bot
.
MonsterZone
[
0
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z0
);
else
AI
.
SelectPlace
(
Zones
.
z4
);
return
true
;
}
private
bool
BorreloadDragonsp
()
{
if
(!(
Bot
.
HasInMonstersZone
(
new
[]
{
CardId
.
KnightmareCerberus
,
CardId
.
KnightmarePhoenix
,
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
})))
return
false
;
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
if
(
monster
.
IsCode
(
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
,
CardId
.
KnightmareCerberus
,
CardId
.
KnightmarePhoenix
,
CardId
.
LinkSpider
,
CardId
.
Linkuriboh
))
material_list
.
Add
(
monster
);
if
(
material_list
.
Count
==
3
)
break
;
}
if
(
material_list
.
Count
>=
3
)
{
AI
.
SelectMaterials
(
material_list
);
return
true
;
}
return
false
;
}
private
bool
BorreloadDragonspsecond
()
{
if
(!(
Bot
.
HasInMonstersZone
(
new
[]
{
CardId
.
KnightmareCerberus
,
CardId
.
KnightmarePhoenix
,
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
})))
return
false
;
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
if
(
monster
.
IsCode
(
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
,
CardId
.
KnightmareCerberus
,
CardId
.
KnightmarePhoenix
,
CardId
.
LinkSpider
,
CardId
.
Linkuriboh
))
material_list
.
Add
(
monster
);
if
(
material_list
.
Count
==
3
)
break
;
}
if
(
material_list
.
Count
>=
3
)
{
AI
.
SelectMaterials
(
material_list
);
return
true
;
}
return
false
;
}
public
bool
BorreloadDragoneff
()
{
if
(
ActivateDescription
==
-
1
&&
(
Duel
.
Phase
==
DuelPhase
.
BattleStart
||
Duel
.
Phase
==
DuelPhase
.
End
))
{
ClientCard
enemy_monster
=
Enemy
.
BattlingMonster
;
if
(
enemy_monster
!=
null
&&
enemy_monster
.
HasPosition
(
CardPosition
.
Attack
))
{
return
(
Card
.
Attack
-
enemy_monster
.
Attack
<
Enemy
.
LifePoints
);
}
return
true
;
};
ClientCard
BestEnemy
=
Util
.
GetBestEnemyMonster
(
true
);
ClientCard
WorstBot
=
Bot
.
GetMonsters
().
GetLowestAttackMonster
();
if
(
BestEnemy
==
null
||
BestEnemy
.
HasPosition
(
CardPosition
.
FaceDown
))
return
false
;
if
(
WorstBot
==
null
||
WorstBot
.
HasPosition
(
CardPosition
.
FaceDown
))
return
false
;
if
(
BestEnemy
.
Attack
>=
WorstBot
.
RealPower
)
{
AI
.
SelectCard
(
BestEnemy
);
return
true
;
}
return
false
;
}
private
bool
BirrelswordDragonsp
()
{
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
m
in
Bot
.
GetMonsters
())
{
if
(
m
.
IsCode
(
CardId
.
KnightmareCerberus
,
CardId
.
KnightmarePhoenix
,
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
))
{
material_list
.
Add
(
m
);
break
;
}
}
foreach
(
ClientCard
m
in
Bot
.
GetMonsters
())
{
if
(
m
.
IsCode
(
CardId
.
Linkuriboh
)
||
m
.
Level
==
1
)
{
material_list
.
Add
(
m
);
if
(
material_list
.
Count
==
3
)
break
;
}
}
if
(
material_list
.
Count
==
3
)
{
AI
.
SelectMaterials
(
material_list
);
return
true
;
}
return
false
;
}
private
bool
BirrelswordDragoneff
()
{
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
BirrelswordDragon
,
0
))
if
(
Bot
.
MonsterZone
[
0
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z0
);
else
AI
.
SelectPlace
(
Zones
.
z4
);
return
Bot
.
Banished
.
Count
>=
6
;
}
private
bool
FamiliarPossessedsummon
()
{
if
(
Bot
.
MonsterZone
[
0
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z0
);
else
AI
.
SelectPlace
(
Zones
.
z4
);
return
true
;
}
private
bool
BorreloadDragonsp
()
{
if
(!(
Bot
.
HasInMonstersZone
(
new
[]
{
CardId
.
KnightmareCerberus
,
CardId
.
KnightmarePhoenix
,
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
})))
return
false
;
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
if
(
monster
.
IsCode
(
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
,
CardId
.
KnightmareCerberus
,
CardId
.
KnightmarePhoenix
,
CardId
.
LinkSpider
,
CardId
.
Linkuriboh
))
material_list
.
Add
(
monster
);
if
(
material_list
.
Count
==
3
)
break
;
}
if
(
material_list
.
Count
>=
3
)
{
AI
.
SelectMaterials
(
material_list
);
return
true
;
}
return
false
;
}
private
bool
BorreloadDragonspsecond
()
{
if
(!(
Bot
.
HasInMonstersZone
(
new
[]
{
CardId
.
KnightmareCerberus
,
CardId
.
KnightmarePhoenix
,
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
})))
return
false
;
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
if
(
Util
.
IsChainTarget
(
Card
)
&&
Util
.
GetBestEnemyMonster
(
true
,
true
)
!=
null
)
{
AI
.
SelectCard
(
Util
.
GetBestEnemyMonster
(
true
,
true
));
return
true
;
}
if
(
Duel
.
Player
==
1
&&
Bot
.
BattlingMonster
==
Card
)
{
AI
.
SelectCard
(
Enemy
.
BattlingMonster
);
return
true
;
}
if
(
Duel
.
Player
==
1
&&
Bot
.
BattlingMonster
!=
null
&&
(
Enemy
.
BattlingMonster
.
Attack
-
Bot
.
BattlingMonster
.
Attack
)
>=
Bot
.
LifePoints
)
{
AI
.
SelectCard
(
Enemy
.
BattlingMonster
);
return
true
;
}
if
(
Duel
.
Player
==
0
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
)
{
foreach
(
ClientCard
check
in
Enemy
.
GetMonsters
())
{
if
(
check
.
IsAttack
())
{
AI
.
SelectCard
(
check
);
return
true
;
}
}
}
return
false
;
}
return
true
;
}
private
bool
MetalSnakesp
()
{
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
MetalSnake
,
0
)
&&
!
Bot
.
HasInMonstersZone
(
CardId
.
MetalSnake
))
{
if
(
Duel
.
Player
==
1
&&
Duel
.
Phase
>=
DuelPhase
.
BattleStart
)
return
Bot
.
Deck
.
Count
>=
12
;
if
(
Duel
.
Player
==
0
&&
Duel
.
Phase
>=
DuelPhase
.
Main1
)
return
Bot
.
Deck
.
Count
>=
12
;
if
(
monster
.
IsCode
(
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
,
CardId
.
KnightmareCerberus
,
CardId
.
KnightmarePhoenix
,
CardId
.
LinkSpider
,
CardId
.
Linkuriboh
))
material_list
.
Add
(
monster
);
if
(
material_list
.
Count
==
3
)
break
;
}
return
false
;
}
private
bool
MetalSnakeeff
()
{
ClientCard
target
=
Util
.
GetOneEnemyBetterThanMyBest
(
true
,
true
);
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
MetalSnake
,
1
)
&&
target
!=
null
)
{
AI
.
SelectCard
(
new
[]
if
(
material_list
.
Count
>=
3
)
{
AI
.
SelectMaterials
(
material_list
);
return
true
;
}
return
false
;
}
public
bool
BorreloadDragoneff
()
{
if
(
ActivateDescription
==
-
1
&&
(
Duel
.
Phase
==
DuelPhase
.
BattleStart
||
Duel
.
Phase
==
DuelPhase
.
End
))
{
ClientCard
enemy_monster
=
Enemy
.
BattlingMonster
;
if
(
enemy_monster
!=
null
&&
enemy_monster
.
HasPosition
(
CardPosition
.
Attack
))
{
return
(
Card
.
Attack
-
enemy_monster
.
Attack
<
Enemy
.
LifePoints
);
}
return
true
;
};
ClientCard
BestEnemy
=
Util
.
GetBestEnemyMonster
(
true
);
ClientCard
WorstBot
=
Bot
.
GetMonsters
().
GetLowestAttackMonster
();
if
(
BestEnemy
==
null
||
BestEnemy
.
HasPosition
(
CardPosition
.
FaceDown
))
return
false
;
if
(
WorstBot
==
null
||
WorstBot
.
HasPosition
(
CardPosition
.
FaceDown
))
return
false
;
if
(
BestEnemy
.
Attack
>=
WorstBot
.
RealPower
)
{
AI
.
SelectCard
(
BestEnemy
);
return
true
;
}
return
false
;
}
private
bool
BirrelswordDragonsp
()
{
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
m
in
Bot
.
GetMonsters
())
{
if
(
m
.
IsCode
(
CardId
.
KnightmareCerberus
,
CardId
.
KnightmarePhoenix
,
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
))
{
material_list
.
Add
(
m
);
break
;
}
}
foreach
(
ClientCard
m
in
Bot
.
GetMonsters
())
{
if
(
m
.
IsCode
(
CardId
.
Linkuriboh
)
||
m
.
Level
==
1
)
{
material_list
.
Add
(
m
);
if
(
material_list
.
Count
==
3
)
break
;
}
}
if
(
material_list
.
Count
==
3
)
{
AI
.
SelectMaterials
(
material_list
);
return
true
;
}
return
false
;
}
private
bool
BirrelswordDragoneff
()
{
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
BirrelswordDragon
,
0
))
{
if
(
Util
.
IsChainTarget
(
Card
)
&&
Util
.
GetBestEnemyMonster
(
true
,
true
)
!=
null
)
{
AI
.
SelectCard
(
Util
.
GetBestEnemyMonster
(
true
,
true
));
return
true
;
}
if
(
Duel
.
Player
==
1
&&
Bot
.
BattlingMonster
==
Card
)
{
AI
.
SelectCard
(
Enemy
.
BattlingMonster
);
return
true
;
}
if
(
Duel
.
Player
==
1
&&
Bot
.
BattlingMonster
!=
null
&&
(
Enemy
.
BattlingMonster
.
Attack
-
Bot
.
BattlingMonster
.
Attack
)
>=
Bot
.
LifePoints
)
{
AI
.
SelectCard
(
Enemy
.
BattlingMonster
);
return
true
;
}
if
(
Duel
.
Player
==
0
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
)
{
foreach
(
ClientCard
check
in
Enemy
.
GetMonsters
())
{
if
(
check
.
IsAttack
())
{
AI
.
SelectCard
(
check
);
return
true
;
}
}
}
return
false
;
}
return
true
;
}
private
bool
MetalSnakesp
()
{
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
MetalSnake
,
0
)
&&
!
Bot
.
HasInMonstersZone
(
CardId
.
MetalSnake
))
{
if
(
Duel
.
Player
==
1
&&
Duel
.
Phase
>=
DuelPhase
.
BattleStart
)
return
Bot
.
Deck
.
Count
>=
12
;
if
(
Duel
.
Player
==
0
&&
Duel
.
Phase
>=
DuelPhase
.
Main1
)
return
Bot
.
Deck
.
Count
>=
12
;
}
return
false
;
}
private
bool
MetalSnakeeff
()
{
ClientCard
target
=
Util
.
GetOneEnemyBetterThanMyBest
(
true
,
true
);
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
MetalSnake
,
1
)
&&
target
!=
null
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
KnightmareGryphon
CardId
.
KnightmareGryphon
});
AI
.
SelectNextCard
(
target
);
return
true
;
}
AI
.
SelectNextCard
(
target
);
return
true
;
}
return
false
;
}
private
bool
AussaPsp
()
{
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
if
(
monster
.
HasAttribute
(
CardAttribute
.
Earth
)
&&
!
monster
.
IsCode
(
CardId
.
KnightmareCerberus
,
CardId
.
InspectBoarder
,
CardId
.
GrenMajuDaEizo
,
CardId
.
KnightmarePhoenix
,
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
,
CardId
.
KnightmareUnicorn
,
CardId
.
KnightmareGryphon
,
CardId
.
BorreloadDragon
,
CardId
.
BirrelswordDragon
))
material_list
.
Add
(
monster
);
if
(
material_list
.
Count
==
2
)
break
;
}
if
(
material_list
.
Count
<
2
)
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
AussaP
))
return
false
;
AI
.
SelectMaterials
(
material_list
);
if
(
Bot
.
MonsterZone
[
0
]
==
null
&&
Bot
.
MonsterZone
[
2
]
==
null
&&
Bot
.
MonsterZone
[
5
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z5
);
else
AI
.
SelectPlace
(
Zones
.
z6
);
return
true
;
}
private
bool
AussaPeff
()
{
AI
.
SelectCard
(
CardId
.
MaxxC
,
CardId
.
Aussa
);
return
true
;
}
private
bool
EriaPsp
()
{
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
if
(
monster
.
HasAttribute
(
CardAttribute
.
Water
)
&&
!
monster
.
IsCode
(
CardId
.
KnightmareCerberus
,
CardId
.
InspectBoarder
,
CardId
.
GrenMajuDaEizo
,
CardId
.
KnightmarePhoenix
,
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
,
CardId
.
KnightmareUnicorn
,
CardId
.
KnightmareGryphon
,
CardId
.
BorreloadDragon
,
CardId
.
BirrelswordDragon
))
material_list
.
Add
(
monster
);
if
(
material_list
.
Count
==
2
)
break
;
}
if
(
material_list
.
Count
<
2
)
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
EriaP
))
return
false
;
AI
.
SelectMaterials
(
material_list
);
if
(
Bot
.
MonsterZone
[
0
]
==
null
&&
Bot
.
MonsterZone
[
2
]
==
null
&&
Bot
.
MonsterZone
[
5
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z5
);
else
AI
.
SelectPlace
(
Zones
.
z6
);
return
true
;
}
private
bool
EriaPeff
()
{
AI
.
SelectCard
(
CardId
.
Eria
);
return
true
;
}
private
bool
WynnPsp
()
{
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
if
(
monster
.
HasAttribute
(
CardAttribute
.
Wind
)
&&
!
monster
.
IsCode
(
CardId
.
KnightmareCerberus
,
CardId
.
InspectBoarder
,
CardId
.
GrenMajuDaEizo
,
CardId
.
KnightmarePhoenix
,
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
,
CardId
.
KnightmareUnicorn
,
CardId
.
KnightmareGryphon
,
CardId
.
BorreloadDragon
,
CardId
.
BirrelswordDragon
))
material_list
.
Add
(
monster
);
if
(
material_list
.
Count
==
2
)
break
;
}
if
(
material_list
.
Count
<
2
)
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
WynnP
))
return
false
;
AI
.
SelectMaterials
(
material_list
);
if
(
Bot
.
MonsterZone
[
0
]
==
null
&&
Bot
.
MonsterZone
[
2
]
==
null
&&
Bot
.
MonsterZone
[
5
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z5
);
else
AI
.
SelectPlace
(
Zones
.
z6
);
return
true
;
}
private
bool
WynnPeff
()
{
AI
.
SelectCard
(
CardId
.
Wynn
);
return
true
;
}
private
bool
HiitaPsp
()
{
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
if
(
monster
.
HasAttribute
(
CardAttribute
.
Fire
)
&&
!
monster
.
IsCode
(
CardId
.
KnightmareCerberus
,
CardId
.
InspectBoarder
,
CardId
.
GrenMajuDaEizo
,
CardId
.
KnightmarePhoenix
,
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
,
CardId
.
KnightmareUnicorn
,
CardId
.
KnightmareGryphon
,
CardId
.
BorreloadDragon
,
CardId
.
BirrelswordDragon
))
material_list
.
Add
(
monster
);
if
(
material_list
.
Count
==
2
)
break
;
}
if
(
material_list
.
Count
<
2
)
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
HiitaP
))
return
false
;
AI
.
SelectMaterials
(
material_list
);
if
(
Bot
.
MonsterZone
[
0
]
==
null
&&
Bot
.
MonsterZone
[
2
]
==
null
&&
Bot
.
MonsterZone
[
5
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z5
);
else
AI
.
SelectPlace
(
Zones
.
z6
);
return
true
;
}
private
bool
HiitaPeff
()
{
AI
.
SelectCard
(
CardId
.
Hiita
);
return
true
;
}
private
bool
LynaPsp
()
{
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
if
(
monster
.
HasAttribute
(
CardAttribute
.
Light
)
&&
!
monster
.
IsCode
(
CardId
.
KnightmareCerberus
,
CardId
.
InspectBoarder
,
CardId
.
GrenMajuDaEizo
,
CardId
.
KnightmarePhoenix
,
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
,
CardId
.
KnightmareUnicorn
,
CardId
.
KnightmareGryphon
,
CardId
.
BorreloadDragon
,
CardId
.
BirrelswordDragon
))
material_list
.
Add
(
monster
);
if
(
material_list
.
Count
==
2
)
break
;
}
if
(
material_list
.
Count
<
2
)
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
LynaP
))
return
false
;
AI
.
SelectMaterials
(
material_list
);
if
(
Bot
.
MonsterZone
[
0
]
==
null
&&
Bot
.
MonsterZone
[
2
]
==
null
&&
Bot
.
MonsterZone
[
5
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z5
);
else
AI
.
SelectPlace
(
Zones
.
z6
);
return
true
;
}
private
bool
LynaPeff
()
{
AI
.
SelectCard
(
CardId
.
Lyna
);
return
true
;
}
private
bool
Linkuribohsp
()
{
foreach
(
ClientCard
c
in
Bot
.
GetMonsters
())
}
private
bool
AussaPsp
()
{
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
if
(
monster
.
HasAttribute
(
CardAttribute
.
Earth
)
&&
!
monster
.
IsCode
(
CardId
.
KnightmareCerberus
,
CardId
.
InspectBoarder
,
CardId
.
GrenMajuDaEizo
,
CardId
.
KnightmarePhoenix
,
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
,
CardId
.
KnightmareUnicorn
,
CardId
.
KnightmareGryphon
,
CardId
.
BorreloadDragon
,
CardId
.
BirrelswordDragon
))
material_list
.
Add
(
monster
);
if
(
material_list
.
Count
==
2
)
break
;
}
if
(
material_list
.
Count
<
2
)
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
AussaP
))
return
false
;
AI
.
SelectMaterials
(
material_list
);
if
(
Bot
.
MonsterZone
[
0
]
==
null
&&
Bot
.
MonsterZone
[
2
]
==
null
&&
Bot
.
MonsterZone
[
5
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z5
);
else
AI
.
SelectPlace
(
Zones
.
z6
);
return
true
;
}
private
bool
AussaPeff
()
{
AI
.
SelectCard
(
CardId
.
MaxxC
,
CardId
.
Aussa
);
return
true
;
}
private
bool
EriaPsp
()
{
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
if
(
c
.
Level
==
1
)
{
AI
.
SelectMaterials
(
c
);
return
true
;
}
}
return
false
;
}
private
bool
Knightmaresp
()
{
int
[]
firstMats
=
new
[]
{
CardId
.
KnightmareCerberus
,
CardId
.
KnightmarePhoenix
};
if
(
Bot
.
MonsterZone
.
GetMatchingCardsCount
(
card
=>
card
.
IsCode
(
firstMats
))
>=
1
)
return
false
;
foreach
(
ClientCard
c
in
Bot
.
GetMonsters
())
{
if
(
c
.
Level
==
1
)
{
AI
.
SelectMaterials
(
c
);
return
true
;
}
}
return
false
;
}
private
bool
Linkuriboheff
()
{
if
(
monster
.
HasAttribute
(
CardAttribute
.
Water
)
&&
!
monster
.
IsCode
(
CardId
.
KnightmareCerberus
,
CardId
.
InspectBoarder
,
CardId
.
GrenMajuDaEizo
,
CardId
.
KnightmarePhoenix
,
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
,
CardId
.
KnightmareUnicorn
,
CardId
.
KnightmareGryphon
,
CardId
.
BorreloadDragon
,
CardId
.
BirrelswordDragon
))
material_list
.
Add
(
monster
);
if
(
material_list
.
Count
==
2
)
break
;
}
if
(
material_list
.
Count
<
2
)
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
EriaP
))
return
false
;
AI
.
SelectMaterials
(
material_list
);
if
(
Bot
.
MonsterZone
[
0
]
==
null
&&
Bot
.
MonsterZone
[
2
]
==
null
&&
Bot
.
MonsterZone
[
5
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z5
);
else
AI
.
SelectPlace
(
Zones
.
z6
);
return
true
;
}
private
bool
EriaPeff
()
{
AI
.
SelectCard
(
CardId
.
Eria
);
return
true
;
}
private
bool
WynnPsp
()
{
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
if
(
monster
.
HasAttribute
(
CardAttribute
.
Wind
)
&&
!
monster
.
IsCode
(
CardId
.
KnightmareCerberus
,
CardId
.
InspectBoarder
,
CardId
.
GrenMajuDaEizo
,
CardId
.
KnightmarePhoenix
,
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
,
CardId
.
KnightmareUnicorn
,
CardId
.
KnightmareGryphon
,
CardId
.
BorreloadDragon
,
CardId
.
BirrelswordDragon
))
material_list
.
Add
(
monster
);
if
(
material_list
.
Count
==
2
)
break
;
}
if
(
material_list
.
Count
<
2
)
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
WynnP
))
return
false
;
AI
.
SelectMaterials
(
material_list
);
if
(
Bot
.
MonsterZone
[
0
]
==
null
&&
Bot
.
MonsterZone
[
2
]
==
null
&&
Bot
.
MonsterZone
[
5
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z5
);
else
AI
.
SelectPlace
(
Zones
.
z6
);
return
true
;
}
private
bool
WynnPeff
()
{
AI
.
SelectCard
(
CardId
.
Wynn
);
return
true
;
}
private
bool
HiitaPsp
()
{
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
if
(
monster
.
HasAttribute
(
CardAttribute
.
Fire
)
&&
!
monster
.
IsCode
(
CardId
.
KnightmareCerberus
,
CardId
.
InspectBoarder
,
CardId
.
GrenMajuDaEizo
,
CardId
.
KnightmarePhoenix
,
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
,
CardId
.
KnightmareUnicorn
,
CardId
.
KnightmareGryphon
,
CardId
.
BorreloadDragon
,
CardId
.
BirrelswordDragon
))
material_list
.
Add
(
monster
);
if
(
material_list
.
Count
==
2
)
break
;
}
if
(
material_list
.
Count
<
2
)
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
HiitaP
))
return
false
;
AI
.
SelectMaterials
(
material_list
);
if
(
Bot
.
MonsterZone
[
0
]
==
null
&&
Bot
.
MonsterZone
[
2
]
==
null
&&
Bot
.
MonsterZone
[
5
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z5
);
else
AI
.
SelectPlace
(
Zones
.
z6
);
return
true
;
}
private
bool
HiitaPeff
()
{
AI
.
SelectCard
(
CardId
.
Hiita
);
return
true
;
}
private
bool
LynaPsp
()
{
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
if
(
monster
.
HasAttribute
(
CardAttribute
.
Light
)
&&
!
monster
.
IsCode
(
CardId
.
KnightmareCerberus
,
CardId
.
InspectBoarder
,
CardId
.
GrenMajuDaEizo
,
CardId
.
KnightmarePhoenix
,
CardId
.
LynaP
,
CardId
.
HiitaP
,
CardId
.
WynnP
,
CardId
.
EriaP
,
CardId
.
AussaP
,
CardId
.
KnightmareUnicorn
,
CardId
.
KnightmareGryphon
,
CardId
.
BorreloadDragon
,
CardId
.
BirrelswordDragon
))
material_list
.
Add
(
monster
);
if
(
material_list
.
Count
==
2
)
break
;
}
if
(
material_list
.
Count
<
2
)
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
LynaP
))
return
false
;
AI
.
SelectMaterials
(
material_list
);
if
(
Bot
.
MonsterZone
[
0
]
==
null
&&
Bot
.
MonsterZone
[
2
]
==
null
&&
Bot
.
MonsterZone
[
5
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z5
);
else
AI
.
SelectPlace
(
Zones
.
z6
);
return
true
;
}
private
bool
LynaPeff
()
{
AI
.
SelectCard
(
CardId
.
Lyna
);
return
true
;
}
private
bool
Linkuribohsp
()
{
foreach
(
ClientCard
c
in
Bot
.
GetMonsters
())
{
if
(
c
.
Level
==
1
)
{
AI
.
SelectMaterials
(
c
);
return
true
;
}
}
return
false
;
}
private
bool
Knightmaresp
()
{
int
[]
firstMats
=
new
[]
{
CardId
.
KnightmareCerberus
,
CardId
.
KnightmarePhoenix
};
if
(
Bot
.
MonsterZone
.
GetMatchingCardsCount
(
card
=>
card
.
IsCode
(
firstMats
))
>=
1
)
return
false
;
foreach
(
ClientCard
c
in
Bot
.
GetMonsters
())
{
if
(
c
.
Level
==
1
)
{
AI
.
SelectMaterials
(
c
);
return
true
;
}
}
return
false
;
}
private
bool
Linkuriboheff
()
{
if
(
Duel
.
LastChainPlayer
==
0
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
Linkuriboh
))
return
false
;
return
true
;
return
true
;
}
private
bool
GagagaCowboySummon
()
{
if
(
Enemy
.
LifePoints
<=
800
||
(
Bot
.
GetMonsterCount
()
>=
4
&&
Enemy
.
LifePoints
<=
1600
))
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
}
return
false
;
}
private
bool
SpellSet
()
private
bool
GagagaCowboySummon
()
{
if
(
Enemy
.
LifePoints
<=
800
||
(
Bot
.
GetMonsterCount
()
>=
4
&&
Enemy
.
LifePoints
<=
1600
))
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
}
return
false
;
}
private
bool
SpellSet
()
{
if
(
Card
.
IsCode
(
CardId
.
MacroCosmos
)
&&
Bot
.
HasInSpellZone
(
CardId
.
MacroCosmos
))
return
false
;
if
(
Card
.
IsCode
(
CardId
.
Unpossessed
)
&&
Bot
.
HasInSpellZone
(
CardId
.
Unpossessed
))
return
false
;
if
(
Card
.
IsCode
(
CardId
.
Crackdown
)
&&
Bot
.
HasInSpellZone
(
CardId
.
Crackdown
))
return
false
;
if
(
Card
.
IsCode
(
CardId
.
SkillDrain
)
&&
Bot
.
HasInSpellZone
(
CardId
.
SkillDrain
))
return
false
;
if
(
Card
.
IsCode
(
CardId
.
Mistake
)
&&
Bot
.
HasInSpellZone
(
CardId
.
Mistake
))
return
false
;
if
(
Card
.
IsCode
(
CardId
.
Scapegoat
))
return
true
;
if
(
Card
.
HasType
(
CardType
.
Trap
))
if
(
Card
.
IsCode
(
CardId
.
Mistake
)
&&
Bot
.
HasInSpellZone
(
CardId
.
Mistake
))
return
false
;
if
(
Card
.
IsCode
(
CardId
.
Scapegoat
))
return
true
;
if
(
Card
.
HasType
(
CardType
.
Trap
))
return
Bot
.
GetSpellCountWithoutField
()
<
4
;
return
false
;
}
public
override
ClientCard
OnSelectAttacker
(
IList
<
ClientCard
>
attackers
,
IList
<
ClientCard
>
defenders
)
{
for
(
int
i
=
0
;
i
<
attackers
.
Count
;
++
i
)
{
ClientCard
attacker
=
attackers
[
i
];
if
(
attacker
.
IsCode
(
CardId
.
BirrelswordDragon
,
CardId
.
BorreloadDragon
))
return
attacker
;
}
return
null
;
}
public
override
bool
OnSelectHand
()
{
return
true
;
}
}
return
false
;
}
public
override
ClientCard
OnSelectAttacker
(
IList
<
ClientCard
>
attackers
,
IList
<
ClientCard
>
defenders
)
{
for
(
int
i
=
0
;
i
<
attackers
.
Count
;
++
i
)
{
ClientCard
attacker
=
attackers
[
i
];
if
(
attacker
.
IsCode
(
CardId
.
BirrelswordDragon
,
CardId
.
BorreloadDragon
))
return
attacker
;
}
return
null
;
}
public
override
bool
OnSelectHand
()
{
return
true
;
}
}
}
\ No newline at end of file
Game/AI/Decks/LightswornShaddoldinosourExecutor.cs
View file @
3e8635b7
using
YGOSharp.OCGWrapper.Enums
;
using
System.Collections.Generic
;
using
WindBot
;
using
WindBot.Game
;
using
WindBot.Game.AI
;
namespace
WindBot.Game.AI.Decks
{
[
Deck
(
"LightswornShaddoldinosour"
,
"AI_LightswornShaddoldinosour"
)]
public
class
LightswornShaddoldinosour
:
DefaultExecutor
{
public
class
CardId
{
//monster
public
const
int
UltimateConductorTytanno
=
18940556
;
public
const
int
DogorantheMadFlameKaiju
=
93332803
;
public
const
int
GamecieltheSeaTurtleKaiju
=
55063751
;
public
const
int
RadiantheMultidimensionalKaiju
=
28674152
;
public
const
int
OvertexCoatls
=
41782653
;
public
const
int
ShaddollBeast
=
3717252
;
public
const
int
GiantRex
=
80280944
;
public
const
int
ShaddollDragon
=
77723643
;
public
const
int
FairyTailSnow
=
55623480
;
public
const
int
KeeperOfDragonicMagic
=
48048590
;
public
const
int
ShaddollSquamata
=
30328508
;
public
const
int
SouleatingOviraptor
=
44335251
;
public
const
int
Raiden
=
77558536
;
public
const
int
Lumina
=
95503687
;
public
const
int
ShaddollHedgehog
=
4939890
;
public
const
int
AshBlossom
=
14558127
;
public
const
int
GhostOgre
=
59438930
;
public
const
int
ShaddollFalco
=
37445295
;
public
const
int
MaxxC
=
23434538
;
public
const
int
PlaguespreaderZombie
=
33420078
;
public
const
int
GlowUpBulb
=
67441435
;
//spell
public
const
int
AllureofDarkness
=
1475311
;
public
const
int
ThatGrassLooksgreener
=
11110587
;
public
const
int
HarpiesFeatherDuster
=
18144506
;
public
const
int
DoubleEvolutionPill
=
38179121
;
public
const
int
ShaddollFusion
=
44394295
;
public
const
int
PotOfAvarice
=
67169062
;
public
const
int
FoolishBurial
=
81439173
;
public
const
int
MonsterReborn
=
83764718
;
public
const
int
ChargeOfTheLightBrigade
=
94886282
;
public
const
int
InterruptedKaijuSlumber
=
99330325
;
//public const int ElShaddollFusion = 6417578;
//trap
public
const
int
infiniteTransience
=
10045474
;
public
const
int
LostWind
=
74003290
;
public
const
int
SinisterShadowGames
=
77505534
;
public
const
int
ShaddollCore
=
4904633
;
//extra
public
const
int
ElShaddollShekhinaga
=
74822425
;
public
const
int
ElShaddollConstruct
=
20366274
;
public
const
int
ElShaddollGrysra
=
48424886
;
public
const
int
ElShaddollWinda
=
94977269
;
public
const
int
CrystalWingSynchroDragon
=
50954680
;
public
const
int
ScarlightRedDragon
=
80666118
;
public
const
int
Michael
=
4779823
;
public
const
int
BlackRoseMoonlightDragon
=
33698022
;
public
const
int
RedWyvern
=
76547525
;
public
const
int
CoralDragon
=
42566602
;
public
const
int
TG_WonderMagician
=
98558751
;
public
const
int
MinervaTheExalte
=
30100551
;
public
const
int
Sdulldeat
=
74997493
;
public
const
int
CrystronNeedlefiber
=
50588353
;
}
public
LightswornShaddoldinosour
(
GameAI
ai
,
Duel
duel
)
:
base
(
ai
,
duel
)
{
//counter
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
GhostOgre
,
Hand_act_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
AshBlossom
,
Hand_act_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MaxxC
,
MaxxC
);
//first do
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
HarpiesFeatherDuster
,
DefaultHarpiesFeatherDusterFirst
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
infiniteTransience
,
DefaultBreakthroughSkill
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ThatGrassLooksgreener
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
SouleatingOviraptor
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SouleatingOviraptor
,
SouleatingOviraptoreff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
AllureofDarkness
,
DefaultAllureofDarkness
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
PotOfAvarice
,
PotofAvariceeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ChargeOfTheLightBrigade
,
ChargeOfTheLightBrigadeEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
FoolishBurial
,
FoolishBurialEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
InterruptedKaijuSlumber
,
InterruptedKaijuSlumbereff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ShaddollFusion
,
ShaddollFusioneff
);
//Normal Summon
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Raiden
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Raiden
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
KeeperOfDragonicMagic
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
KeeperOfDragonicMagic
,
KeeperOfDragonicMagiceff
);
AddExecutor
(
ExecutorType
.
MonsterSet
,
CardId
.
ShaddollSquamata
);
AddExecutor
(
ExecutorType
.
MonsterSet
,
CardId
.
GlowUpBulb
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Lumina
,
Luminasummon
);
AddExecutor
(
ExecutorType
.
MonsterSet
,
CardId
.
ShaddollHedgehog
);
AddExecutor
(
ExecutorType
.
MonsterSet
,
CardId
.
ShaddollDragon
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
FairyTailSnow
,
FairyTailSnowsummon
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
FairyTailSnow
,
FairyTailSnoweff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Lumina
,
Luminaeff
);
//activate
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
GlowUpBulb
,
GlowUpBulbeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
TG_WonderMagician
,
TG_WonderMagicianeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
CoralDragon
,
CoralDragoneff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
RedWyvern
,
RedWyverneff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
CrystalWingSynchroDragon
,
CrystalWingSynchroDragoneff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
BlackRoseMoonlightDragon
,
BlackRoseMoonlightDragoneff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Sdulldeat
,
Sdulldeateff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Michael
,
Michaeleff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ScarlightRedDragon
,
ScarlightRedDragoneff
);
//Sp Summon
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
CrystronNeedlefiber
,
CrystronNeedlefibereff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
UltimateConductorTytanno
,
UltimateConductorTytannosp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
UltimateConductorTytanno
,
UltimateConductorTytannoeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
DoubleEvolutionPill
,
DoubleEvolutionPilleff
);
//extra
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
CrystalWingSynchroDragon
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
CrystalWingSynchroDragon
,
CrystalWingSynchroDragoneff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
ScarlightRedDragon
,
ScarlightRedDragonsp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ScarlightRedDragon
,
ScarlightRedDragoneff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Michael
,
Michaelsp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Michael
,
Michaeleff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
RedWyvern
,
RedWyvernsp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
RedWyvern
,
RedWyverneff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
MinervaTheExalte
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MinervaTheExalte
,
MinervaTheExaltedEffect
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
CrystronNeedlefiber
,
CrystronNeedlefibersp
);
//Kaiju
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
GamecieltheSeaTurtleKaiju
,
GamecieltheSeaTurtleKaijusp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
RadiantheMultidimensionalKaiju
,
RadiantheMultidimensionalKaijusp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
DogorantheMadFlameKaiju
,
DogorantheMadFlameKaijusp
);
//Reborn
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MonsterReborn
,
Reborneff
);
//activate chain
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
OvertexCoatls
,
OvertexCoatlseff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ShaddollCore
,
ShaddollCoreeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ShaddollBeast
,
ShaddollBeasteff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ShaddollFalco
,
ShaddollFalcoeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ShaddollDragon
,
ShaddollDragoneff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ShaddollHedgehog
,
ShaddollHedgehogeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ShaddollSquamata
,
ShaddollSquamataeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
GiantRex
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ElShaddollConstruct
,
ElShaddollConstructeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ElShaddollGrysra
,
ElShaddollGrysraeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ElShaddollShekhinaga
,
ElShaddollShekhinagaeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ElShaddollWinda
);
//spellset
AddExecutor
(
ExecutorType
.
SpellSet
,
CardId
.
ThatGrassLooksgreener
,
SpellSetZone
);
AddExecutor
(
ExecutorType
.
SpellSet
,
SpellSetZone
);
//trapset
AddExecutor
(
ExecutorType
.
SpellSet
,
CardId
.
LostWind
);
AddExecutor
(
ExecutorType
.
SpellSet
,
CardId
.
SinisterShadowGames
);
AddExecutor
(
ExecutorType
.
SpellSet
,
CardId
.
ShaddollCore
);
AddExecutor
(
ExecutorType
.
SpellSet
,
CardId
.
infiniteTransience
,
SetIsFieldEmpty
);
//trap activate
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
LostWind
,
LostWindeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SinisterShadowGames
,
SinisterShadowGameseff
);
AddExecutor
(
ExecutorType
.
Repos
,
MonsterRepos
);
}
public
int
[]
all_List
()
{
return
new
[]
{
CardId
.
UltimateConductorTytanno
,
CardId
.
DogorantheMadFlameKaiju
,
CardId
.
GamecieltheSeaTurtleKaiju
,
CardId
.
RadiantheMultidimensionalKaiju
,
CardId
.
OvertexCoatls
,
CardId
.
ShaddollBeast
,
CardId
.
GiantRex
,
CardId
.
ShaddollDragon
,
CardId
.
FairyTailSnow
,
CardId
.
KeeperOfDragonicMagic
,
CardId
.
ShaddollSquamata
,
CardId
.
SouleatingOviraptor
,
CardId
.
Raiden
,
CardId
.
Lumina
,
CardId
.
ShaddollHedgehog
,
CardId
.
AshBlossom
,
CardId
.
GhostOgre
,
CardId
.
ShaddollFalco
,
CardId
.
MaxxC
,
CardId
.
PlaguespreaderZombie
,
CardId
.
GlowUpBulb
,
CardId
.
AllureofDarkness
,
CardId
.
ThatGrassLooksgreener
,
CardId
.
HarpiesFeatherDuster
,
CardId
.
DoubleEvolutionPill
,
CardId
.
ShaddollFusion
,
CardId
.
PotOfAvarice
,
CardId
.
FoolishBurial
,
CardId
.
MonsterReborn
,
CardId
.
ChargeOfTheLightBrigade
,
CardId
.
InterruptedKaijuSlumber
,
//CardId.ElShaddollFusion,
CardId
.
infiniteTransience
,
CardId
.
LostWind
,
CardId
.
SinisterShadowGames
,
CardId
.
ShaddollCore
,
};
}
public
int
[]
Useless_List
()
{
return
new
[]
{
CardId
.
GlowUpBulb
,
CardId
.
PlaguespreaderZombie
,
CardId
.
ChargeOfTheLightBrigade
,
CardId
.
ThatGrassLooksgreener
,
CardId
.
HarpiesFeatherDuster
,
CardId
.
FairyTailSnow
,
CardId
.
GiantRex
,
CardId
.
Lumina
,
CardId
.
OvertexCoatls
,
CardId
.
InterruptedKaijuSlumber
,
CardId
.
FoolishBurial
,
};
}
int
Ultimate_ss
=
0
;
int
Enemy_atk
=
0
;
bool
Pillused
=
false
;
bool
CrystronNeedlefibereff_used
=
false
;
bool
OvertexCoatlseff_used
=
false
;
bool
ShaddollBeast_used
=
false
;
bool
ShaddollFalco_used
=
false
;
bool
ShaddollSquamata_used
=
false
;
bool
ShaddollDragon_used
=
false
;
bool
ShaddollHedgehog_used
=
false
;
public
int
GetTotalATK
(
IList
<
ClientCard
>
list
)
{
int
atk
=
0
;
foreach
(
ClientCard
c
in
list
)
{
if
(
c
==
null
)
continue
;
atk
+=
c
.
Attack
;
}
return
atk
;
}
public
override
void
OnNewPhase
()
{
Enemy_atk
=
0
;
IList
<
ClientCard
>
list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Enemy
.
GetMonsters
())
{
if
(
monster
.
IsAttack
())
list
.
Add
(
monster
);
}
//if (GetTotalATK(list) / 2 >= Bot.LifePoints) return false;
Enemy_atk
=
GetTotalATK
(
list
);
//SLogger.DebugWriteLine("++++++++++++++++++" + Enemy_atk + "++++++++++++");
}
public
override
void
OnNewTurn
()
{
Pillused
=
false
;
OvertexCoatlseff_used
=
false
;
CrystronNeedlefibereff_used
=
false
;
ShaddollBeast_used
=
false
;
ShaddollFalco_used
=
false
;
ShaddollSquamata_used
=
false
;
ShaddollDragon_used
=
false
;
ShaddollHedgehog_used
=
false
;
}
private
bool
Luminasummon
()
{
if
(
Bot
.
Deck
.
Count
>=
20
)
return
true
;
IList
<
ClientCard
>
extra
=
Bot
.
GetMonstersInExtraZone
();
if
(
extra
!=
null
)
foreach
(
ClientCard
monster
in
extra
)
if
(!
monster
.
HasType
(
CardType
.
Link
))
return
false
;
if
(
Bot
.
LifePoints
<=
3000
)
return
true
;
if
(
Bot
.
HasInGraveyard
(
CardId
.
Raiden
))
return
true
;
return
false
;
}
private
bool
Luminaeff
()
{
if
(
Bot
.
HasInGraveyard
(
CardId
.
Raiden
))
{
AI
.
SelectCard
(
Useless_List
());
AI
.
SelectNextCard
(
CardId
.
Raiden
);
return
true
;
}
return
false
;
}
private
bool
UltimateConductorTytannoeff
()
{
IList
<
int
>
targets
=
new
[]
{
CardId
.
OvertexCoatls
,
CardId
.
ShaddollBeast
,
CardId
.
ShaddollSquamata
,
CardId
.
ShaddollHedgehog
,
CardId
.
ShaddollDragon
,
CardId
.
ShaddollFalco
,
CardId
.
GlowUpBulb
,
CardId
.
PlaguespreaderZombie
,
CardId
.
FairyTailSnow
,
CardId
.
KeeperOfDragonicMagic
,
CardId
.
DogorantheMadFlameKaiju
,
CardId
.
GamecieltheSeaTurtleKaiju
,
CardId
.
RadiantheMultidimensionalKaiju
,
CardId
.
GiantRex
,
CardId
.
ShaddollCore
,
CardId
.
SouleatingOviraptor
,
CardId
.
Raiden
,
CardId
.
Lumina
,
CardId
.
AshBlossom
,
CardId
.
GhostOgre
,
CardId
.
MaxxC
,
};
if
(
Duel
.
Phase
==
DuelPhase
.
Main1
)
{
if
(
Duel
.
Player
==
0
)
{
int
count
=
0
;
IList
<
ClientCard
>
check
=
Enemy
.
GetMonsters
();
foreach
(
ClientCard
monster
in
check
)
if
(
monster
.
Attack
>
2500
||
monster
==
Enemy
.
MonsterZone
.
GetDangerousMonster
())
count
++;
if
(
count
==
0
)
return
false
;
}
if
(!
Bot
.
HasInHand
(
targets
))
{
if
(!
Bot
.
HasInMonstersZone
(
targets
))
return
false
;
}
AI
.
SelectCard
(
targets
);
return
true
;
}
if
(
Duel
.
Phase
==
DuelPhase
.
BattleStart
)
{
AI
.
SelectYesNo
(
true
);
return
true
;
}
return
false
;
}
private
bool
GamecieltheSeaTurtleKaijusp
()
{
if
(!
Bot
.
HasInMonstersZone
(
CardId
.
UltimateConductorTytanno
))
return
DefaultKaijuSpsummon
();
return
false
;
}
private
bool
RadiantheMultidimensionalKaijusp
()
{
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
GamecieltheSeaTurtleKaiju
))
return
true
;
if
(
Bot
.
HasInHand
(
CardId
.
DogorantheMadFlameKaiju
)
&&
!
Bot
.
HasInMonstersZone
(
CardId
.
UltimateConductorTytanno
))
return
DefaultKaijuSpsummon
();
return
false
;
}
private
bool
DogorantheMadFlameKaijusp
()
{
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
GamecieltheSeaTurtleKaiju
))
return
true
;
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
RadiantheMultidimensionalKaiju
))
return
true
;
return
false
;
}
private
bool
InterruptedKaijuSlumbereff
()
{
if
(
Enemy
.
GetMonsterCount
()
-
Bot
.
GetMonsterCount
()
>=
2
)
return
DefaultInterruptedKaijuSlumber
();
return
false
;
}
private
bool
UltimateConductorTytannosp
()
{
Pillused
=
true
;
foreach
(
ClientCard
card
in
Bot
.
GetMonsters
())
{
if
(
card
.
IsCode
(
CardId
.
UltimateConductorTytanno
)
&&
card
.
IsFaceup
())
return
false
;
}
Ultimate_ss
++;
return
true
;
}
private
bool
KeeperOfDragonicMagiceff
()
{
if
(
ActivateDescription
==
-
1
)
{
AI
.
SelectCard
(
Useless_List
());
return
true
;
}
return
true
;
}
private
bool
MonsterRepos
()
{
if
(
Card
.
IsCode
(
CardId
.
UltimateConductorTytanno
)
&&
Card
.
IsFacedown
())
return
true
;
if
(
Card
.
IsCode
(
CardId
.
ElShaddollConstruct
)
&&
Card
.
IsFacedown
())
return
true
;
if
(
Card
.
IsCode
(
CardId
.
ElShaddollConstruct
)
&&
Card
.
IsAttack
())
return
false
;
if
(
Card
.
IsCode
(
CardId
.
GlowUpBulb
)
&&
Card
.
IsDefense
())
return
false
;
if
(
Card
.
IsCode
(
CardId
.
ShaddollDragon
)
&&
Card
.
IsFacedown
()
&&
Enemy
.
GetMonsterCount
()
>=
0
)
return
true
;
if
(
Card
.
IsCode
(
CardId
.
ShaddollSquamata
)
&&
Card
.
IsFacedown
()
&&
Enemy
.
GetMonsterCount
()
>=
0
)
return
true
;
return
base
.
DefaultMonsterRepos
();
}
private
bool
OvertexCoatlseff
()
{
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
return
false
;
OvertexCoatlseff_used
=
true
;
return
true
;
}
private
bool
DoubleEvolutionPilleff
()
{
foreach
(
ClientCard
card
in
Bot
.
GetMonsters
())
{
if
(
card
.
IsCode
(
CardId
.
UltimateConductorTytanno
)
&&
card
.
IsFaceup
())
return
false
;
}
if
(
Pillused
==
true
)
return
false
;
Pillused
=
true
;
IList
<
int
>
targets
=
new
[]
{
CardId
.
GiantRex
,
CardId
.
DogorantheMadFlameKaiju
,
CardId
.
GamecieltheSeaTurtleKaiju
,
CardId
.
RadiantheMultidimensionalKaiju
,
CardId
.
OvertexCoatls
,
CardId
.
SouleatingOviraptor
,
CardId
.
UltimateConductorTytanno
,
};
if
(
Bot
.
HasInGraveyard
(
targets
))
{
AI
.
SelectCard
(
CardId
.
GiantRex
,
CardId
.
DogorantheMadFlameKaiju
,
CardId
.
OvertexCoatls
,
CardId
.
GamecieltheSeaTurtleKaiju
,
CardId
.
RadiantheMultidimensionalKaiju
,
CardId
.
SouleatingOviraptor
,
CardId
.
UltimateConductorTytanno
);
}
else
{
AI
.
SelectCard
(
CardId
.
GiantRex
,
CardId
.
DogorantheMadFlameKaiju
,
CardId
.
GamecieltheSeaTurtleKaiju
,
CardId
.
RadiantheMultidimensionalKaiju
,
CardId
.
OvertexCoatls
,
CardId
.
SouleatingOviraptor
,
CardId
.
UltimateConductorTytanno
);
}
IList
<
int
>
targets2
=
new
[]
{
CardId
.
GiantRex
,
CardId
.
DogorantheMadFlameKaiju
,
CardId
.
GamecieltheSeaTurtleKaiju
,
CardId
.
RadiantheMultidimensionalKaiju
,
CardId
.
OvertexCoatls
,
CardId
.
SouleatingOviraptor
,
CardId
.
UltimateConductorTytanno
,
};
if
(
Bot
.
HasInGraveyard
(
targets
))
{
AI
.
SelectNextCard
(
CardId
.
ShaddollBeast
,
CardId
.
ShaddollDragon
,
CardId
.
KeeperOfDragonicMagic
,
CardId
.
ShaddollSquamata
,
CardId
.
SouleatingOviraptor
,
CardId
.
Raiden
,
CardId
.
Lumina
,
CardId
.
ShaddollHedgehog
,
CardId
.
AshBlossom
,
CardId
.
GhostOgre
,
CardId
.
ShaddollFalco
,
CardId
.
MaxxC
,
CardId
.
PlaguespreaderZombie
,
CardId
.
GlowUpBulb
,
CardId
.
FairyTailSnow
);
}
else
AI
.
SelectNextCard
(
CardId
.
ShaddollBeast
,
CardId
.
ShaddollDragon
,
CardId
.
KeeperOfDragonicMagic
,
CardId
.
ShaddollSquamata
,
CardId
.
SouleatingOviraptor
,
CardId
.
Raiden
,
CardId
.
Lumina
,
CardId
.
ShaddollHedgehog
,
CardId
.
AshBlossom
,
CardId
.
GhostOgre
,
CardId
.
ShaddollFalco
,
CardId
.
MaxxC
,
CardId
.
PlaguespreaderZombie
,
CardId
.
GlowUpBulb
,
CardId
.
FairyTailSnow
);
AI
.
SelectThirdCard
(
new
[]
{
CardId
.
UltimateConductorTytanno
,
});
return
Enemy
.
GetMonsterCount
()
>=
1
;
}
private
bool
FairyTailSnowsummon
()
{
ClientCard
target
=
Util
.
GetBestEnemyMonster
(
true
,
true
);
if
(
target
!=
null
)
{
return
true
;
}
return
false
;
}
private
bool
FairyTailSnoweff
()
{
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
AI
.
SelectCard
(
Util
.
GetBestEnemyMonster
(
true
,
true
));
return
true
;
}
else
{
int
spell_count
=
0
;
IList
<
ClientCard
>
grave
=
Bot
.
Graveyard
;
IList
<
ClientCard
>
all
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
check
in
grave
)
{
if
(
check
.
IsCode
(
CardId
.
GiantRex
))
{
all
.
Add
(
check
);
}
}
foreach
(
ClientCard
check
in
grave
)
{
if
(
check
.
HasType
(
CardType
.
Spell
)||
check
.
HasType
(
CardType
.
Trap
))
{
spell_count
++;
all
.
Add
(
check
);
}
}
foreach
(
ClientCard
check
in
grave
)
{
if
(
check
.
HasType
(
CardType
.
Monster
))
{
all
.
Add
(
check
);
}
}
if
(
Util
.
ChainContainsCard
(
CardId
.
FairyTailSnow
))
return
false
;
if
(
Duel
.
Player
==
1
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
Bot
.
BattlingMonster
==
null
&&
Enemy_atk
>=
Bot
.
LifePoints
||
Duel
.
Player
==
0
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
Enemy
.
BattlingMonster
==
null
&&
Enemy
.
LifePoints
<=
1850
)
{
AI
.
SelectCard
(
all
);
AI
.
SelectNextCard
(
Util
.
GetBestEnemyMonster
());
return
true
;
}
}
return
false
;
}
private
bool
SouleatingOviraptoreff
()
{
if
(!
OvertexCoatlseff_used
&&
Bot
.
GetRemainingCount
(
CardId
.
OvertexCoatls
,
3
)
>
0
)
{
AI
.
SelectCard
(
CardId
.
OvertexCoatls
);
AI
.
SelectOption
(
0
);
}
else
{
AI
.
SelectCard
(
CardId
.
UltimateConductorTytanno
);
AI
.
SelectOption
(
1
);
}
return
true
;
}
private
bool
GlowUpBulbeff
()
{
IList
<
ClientCard
>
check
=
Bot
.
GetMonstersInExtraZone
();
foreach
(
ClientCard
monster
in
check
)
if
(
monster
.
HasType
(
CardType
.
Fusion
))
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
Lumina
)
||
Bot
.
HasInMonstersZone
(
CardId
.
FairyTailSnow
)
||
Bot
.
HasInMonstersZone
(
CardId
.
KeeperOfDragonicMagic
)
||
Bot
.
HasInMonstersZone
(
CardId
.
SouleatingOviraptor
)
||
Bot
.
HasInMonstersZone
(
CardId
.
GiantRex
)
||
Bot
.
HasInMonstersZone
(
CardId
.
Raiden
)
)
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
}
return
false
;
}
using
YGOSharp.OCGWrapper.Enums
;
using
System.Collections.Generic
;
using
WindBot
;
using
WindBot.Game
;
using
WindBot.Game.AI
;
namespace
WindBot.Game.AI.Decks
{
[
Deck
(
"LightswornShaddoldinosour"
,
"AI_LightswornShaddoldinosour"
)]
public
class
LightswornShaddoldinosour
:
DefaultExecutor
{
public
class
CardId
{
//monster
public
const
int
UltimateConductorTytanno
=
18940556
;
public
const
int
DogorantheMadFlameKaiju
=
93332803
;
public
const
int
GamecieltheSeaTurtleKaiju
=
55063751
;
public
const
int
RadiantheMultidimensionalKaiju
=
28674152
;
public
const
int
OvertexCoatls
=
41782653
;
public
const
int
ShaddollBeast
=
3717252
;
public
const
int
GiantRex
=
80280944
;
public
const
int
ShaddollDragon
=
77723643
;
public
const
int
FairyTailSnow
=
55623480
;
public
const
int
KeeperOfDragonicMagic
=
48048590
;
public
const
int
ShaddollSquamata
=
30328508
;
public
const
int
SouleatingOviraptor
=
44335251
;
public
const
int
Raiden
=
77558536
;
public
const
int
Lumina
=
95503687
;
public
const
int
ShaddollHedgehog
=
4939890
;
public
const
int
AshBlossom
=
14558127
;
public
const
int
GhostOgre
=
59438930
;
public
const
int
ShaddollFalco
=
37445295
;
public
const
int
MaxxC
=
23434538
;
public
const
int
PlaguespreaderZombie
=
33420078
;
public
const
int
GlowUpBulb
=
67441435
;
//spell
public
const
int
AllureofDarkness
=
1475311
;
public
const
int
ThatGrassLooksgreener
=
11110587
;
public
const
int
HarpiesFeatherDuster
=
18144506
;
public
const
int
DoubleEvolutionPill
=
38179121
;
public
const
int
ShaddollFusion
=
44394295
;
public
const
int
PotOfAvarice
=
67169062
;
public
const
int
FoolishBurial
=
81439173
;
public
const
int
MonsterReborn
=
83764718
;
public
const
int
ChargeOfTheLightBrigade
=
94886282
;
public
const
int
InterruptedKaijuSlumber
=
99330325
;
//public const int ElShaddollFusion = 6417578;
//trap
public
const
int
infiniteTransience
=
10045474
;
public
const
int
LostWind
=
74003290
;
public
const
int
SinisterShadowGames
=
77505534
;
public
const
int
ShaddollCore
=
4904633
;
//extra
public
const
int
ElShaddollShekhinaga
=
74822425
;
public
const
int
ElShaddollConstruct
=
20366274
;
public
const
int
ElShaddollGrysra
=
48424886
;
public
const
int
ElShaddollWinda
=
94977269
;
public
const
int
CrystalWingSynchroDragon
=
50954680
;
public
const
int
ScarlightRedDragon
=
80666118
;
public
const
int
Michael
=
4779823
;
public
const
int
BlackRoseMoonlightDragon
=
33698022
;
public
const
int
RedWyvern
=
76547525
;
public
const
int
CoralDragon
=
42566602
;
public
const
int
TG_WonderMagician
=
98558751
;
public
const
int
MinervaTheExalte
=
30100551
;
public
const
int
Sdulldeat
=
74997493
;
public
const
int
CrystronNeedlefiber
=
50588353
;
}
public
LightswornShaddoldinosour
(
GameAI
ai
,
Duel
duel
)
:
base
(
ai
,
duel
)
{
//counter
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
GhostOgre
,
Hand_act_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
AshBlossom
,
Hand_act_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MaxxC
,
MaxxC
);
//first do
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
HarpiesFeatherDuster
,
DefaultHarpiesFeatherDusterFirst
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
infiniteTransience
,
DefaultBreakthroughSkill
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ThatGrassLooksgreener
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
SouleatingOviraptor
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SouleatingOviraptor
,
SouleatingOviraptoreff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
AllureofDarkness
,
DefaultAllureofDarkness
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
PotOfAvarice
,
PotofAvariceeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ChargeOfTheLightBrigade
,
ChargeOfTheLightBrigadeEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
FoolishBurial
,
FoolishBurialEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
InterruptedKaijuSlumber
,
InterruptedKaijuSlumbereff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ShaddollFusion
,
ShaddollFusioneff
);
//Normal Summon
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Raiden
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Raiden
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
KeeperOfDragonicMagic
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
KeeperOfDragonicMagic
,
KeeperOfDragonicMagiceff
);
AddExecutor
(
ExecutorType
.
MonsterSet
,
CardId
.
ShaddollSquamata
);
AddExecutor
(
ExecutorType
.
MonsterSet
,
CardId
.
GlowUpBulb
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Lumina
,
Luminasummon
);
AddExecutor
(
ExecutorType
.
MonsterSet
,
CardId
.
ShaddollHedgehog
);
AddExecutor
(
ExecutorType
.
MonsterSet
,
CardId
.
ShaddollDragon
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
FairyTailSnow
,
FairyTailSnowsummon
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
FairyTailSnow
,
FairyTailSnoweff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Lumina
,
Luminaeff
);
//activate
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
GlowUpBulb
,
GlowUpBulbeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
TG_WonderMagician
,
TG_WonderMagicianeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
CoralDragon
,
CoralDragoneff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
RedWyvern
,
RedWyverneff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
CrystalWingSynchroDragon
,
CrystalWingSynchroDragoneff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
BlackRoseMoonlightDragon
,
BlackRoseMoonlightDragoneff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Sdulldeat
,
Sdulldeateff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Michael
,
Michaeleff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ScarlightRedDragon
,
ScarlightRedDragoneff
);
//Sp Summon
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
CrystronNeedlefiber
,
CrystronNeedlefibereff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
UltimateConductorTytanno
,
UltimateConductorTytannosp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
UltimateConductorTytanno
,
UltimateConductorTytannoeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
DoubleEvolutionPill
,
DoubleEvolutionPilleff
);
//extra
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
CrystalWingSynchroDragon
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
CrystalWingSynchroDragon
,
CrystalWingSynchroDragoneff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
ScarlightRedDragon
,
ScarlightRedDragonsp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ScarlightRedDragon
,
ScarlightRedDragoneff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Michael
,
Michaelsp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Michael
,
Michaeleff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
RedWyvern
,
RedWyvernsp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
RedWyvern
,
RedWyverneff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
MinervaTheExalte
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MinervaTheExalte
,
MinervaTheExaltedEffect
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
CrystronNeedlefiber
,
CrystronNeedlefibersp
);
//Kaiju
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
GamecieltheSeaTurtleKaiju
,
GamecieltheSeaTurtleKaijusp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
RadiantheMultidimensionalKaiju
,
RadiantheMultidimensionalKaijusp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
DogorantheMadFlameKaiju
,
DogorantheMadFlameKaijusp
);
//Reborn
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MonsterReborn
,
Reborneff
);
//activate chain
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
OvertexCoatls
,
OvertexCoatlseff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ShaddollCore
,
ShaddollCoreeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ShaddollBeast
,
ShaddollBeasteff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ShaddollFalco
,
ShaddollFalcoeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ShaddollDragon
,
ShaddollDragoneff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ShaddollHedgehog
,
ShaddollHedgehogeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ShaddollSquamata
,
ShaddollSquamataeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
GiantRex
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ElShaddollConstruct
,
ElShaddollConstructeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ElShaddollGrysra
,
ElShaddollGrysraeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ElShaddollShekhinaga
,
ElShaddollShekhinagaeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ElShaddollWinda
);
//spellset
AddExecutor
(
ExecutorType
.
SpellSet
,
CardId
.
ThatGrassLooksgreener
,
SpellSetZone
);
AddExecutor
(
ExecutorType
.
SpellSet
,
SpellSetZone
);
//trapset
AddExecutor
(
ExecutorType
.
SpellSet
,
CardId
.
LostWind
);
AddExecutor
(
ExecutorType
.
SpellSet
,
CardId
.
SinisterShadowGames
);
AddExecutor
(
ExecutorType
.
SpellSet
,
CardId
.
ShaddollCore
);
AddExecutor
(
ExecutorType
.
SpellSet
,
CardId
.
infiniteTransience
,
SetIsFieldEmpty
);
//trap activate
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
LostWind
,
LostWindeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SinisterShadowGames
,
SinisterShadowGameseff
);
AddExecutor
(
ExecutorType
.
Repos
,
MonsterRepos
);
}
public
int
[]
all_List
()
{
return
new
[]
{
CardId
.
UltimateConductorTytanno
,
CardId
.
DogorantheMadFlameKaiju
,
CardId
.
GamecieltheSeaTurtleKaiju
,
CardId
.
RadiantheMultidimensionalKaiju
,
CardId
.
OvertexCoatls
,
CardId
.
ShaddollBeast
,
CardId
.
GiantRex
,
CardId
.
ShaddollDragon
,
CardId
.
FairyTailSnow
,
CardId
.
KeeperOfDragonicMagic
,
CardId
.
ShaddollSquamata
,
CardId
.
SouleatingOviraptor
,
CardId
.
Raiden
,
CardId
.
Lumina
,
CardId
.
ShaddollHedgehog
,
CardId
.
AshBlossom
,
CardId
.
GhostOgre
,
CardId
.
ShaddollFalco
,
CardId
.
MaxxC
,
CardId
.
PlaguespreaderZombie
,
CardId
.
GlowUpBulb
,
CardId
.
AllureofDarkness
,
CardId
.
ThatGrassLooksgreener
,
CardId
.
HarpiesFeatherDuster
,
CardId
.
DoubleEvolutionPill
,
CardId
.
ShaddollFusion
,
CardId
.
PotOfAvarice
,
CardId
.
FoolishBurial
,
CardId
.
MonsterReborn
,
CardId
.
ChargeOfTheLightBrigade
,
CardId
.
InterruptedKaijuSlumber
,
//CardId.ElShaddollFusion,
CardId
.
infiniteTransience
,
CardId
.
LostWind
,
CardId
.
SinisterShadowGames
,
CardId
.
ShaddollCore
,
};
}
public
int
[]
Useless_List
()
{
return
new
[]
{
CardId
.
GlowUpBulb
,
CardId
.
PlaguespreaderZombie
,
CardId
.
ChargeOfTheLightBrigade
,
CardId
.
ThatGrassLooksgreener
,
CardId
.
HarpiesFeatherDuster
,
CardId
.
FairyTailSnow
,
CardId
.
GiantRex
,
CardId
.
Lumina
,
CardId
.
OvertexCoatls
,
CardId
.
InterruptedKaijuSlumber
,
CardId
.
FoolishBurial
,
};
}
int
Ultimate_ss
=
0
;
int
Enemy_atk
=
0
;
bool
Pillused
=
false
;
bool
CrystronNeedlefibereff_used
=
false
;
bool
OvertexCoatlseff_used
=
false
;
bool
ShaddollBeast_used
=
false
;
bool
ShaddollFalco_used
=
false
;
bool
ShaddollSquamata_used
=
false
;
bool
ShaddollDragon_used
=
false
;
bool
ShaddollHedgehog_used
=
false
;
public
int
GetTotalATK
(
IList
<
ClientCard
>
list
)
{
int
atk
=
0
;
foreach
(
ClientCard
c
in
list
)
{
if
(
c
==
null
)
continue
;
atk
+=
c
.
Attack
;
}
return
atk
;
}
public
override
void
OnNewPhase
()
{
Enemy_atk
=
0
;
IList
<
ClientCard
>
list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Enemy
.
GetMonsters
())
{
if
(
monster
.
IsAttack
())
list
.
Add
(
monster
);
}
//if (GetTotalATK(list) / 2 >= Bot.LifePoints) return false;
Enemy_atk
=
GetTotalATK
(
list
);
//SLogger.DebugWriteLine("++++++++++++++++++" + Enemy_atk + "++++++++++++");
}
public
override
void
OnNewTurn
()
{
Pillused
=
false
;
OvertexCoatlseff_used
=
false
;
CrystronNeedlefibereff_used
=
false
;
ShaddollBeast_used
=
false
;
ShaddollFalco_used
=
false
;
ShaddollSquamata_used
=
false
;
ShaddollDragon_used
=
false
;
ShaddollHedgehog_used
=
false
;
}
private
bool
Luminasummon
()
{
if
(
Bot
.
Deck
.
Count
>=
20
)
return
true
;
IList
<
ClientCard
>
extra
=
Bot
.
GetMonstersInExtraZone
();
if
(
extra
!=
null
)
foreach
(
ClientCard
monster
in
extra
)
if
(!
monster
.
HasType
(
CardType
.
Link
))
return
false
;
if
(
Bot
.
LifePoints
<=
3000
)
return
true
;
if
(
Bot
.
HasInGraveyard
(
CardId
.
Raiden
))
return
true
;
return
false
;
}
private
bool
Luminaeff
()
{
if
(
Bot
.
HasInGraveyard
(
CardId
.
Raiden
))
{
AI
.
SelectCard
(
Useless_List
());
AI
.
SelectNextCard
(
CardId
.
Raiden
);
return
true
;
}
return
false
;
}
private
bool
UltimateConductorTytannoeff
()
{
IList
<
int
>
targets
=
new
[]
{
CardId
.
OvertexCoatls
,
CardId
.
ShaddollBeast
,
CardId
.
ShaddollSquamata
,
CardId
.
ShaddollHedgehog
,
CardId
.
ShaddollDragon
,
CardId
.
ShaddollFalco
,
CardId
.
GlowUpBulb
,
CardId
.
PlaguespreaderZombie
,
CardId
.
FairyTailSnow
,
CardId
.
KeeperOfDragonicMagic
,
CardId
.
DogorantheMadFlameKaiju
,
CardId
.
GamecieltheSeaTurtleKaiju
,
CardId
.
RadiantheMultidimensionalKaiju
,
CardId
.
GiantRex
,
CardId
.
ShaddollCore
,
CardId
.
SouleatingOviraptor
,
CardId
.
Raiden
,
CardId
.
Lumina
,
CardId
.
AshBlossom
,
CardId
.
GhostOgre
,
CardId
.
MaxxC
,
};
if
(
Duel
.
Phase
==
DuelPhase
.
Main1
)
{
if
(
Duel
.
Player
==
0
)
{
int
count
=
0
;
IList
<
ClientCard
>
check
=
Enemy
.
GetMonsters
();
foreach
(
ClientCard
monster
in
check
)
if
(
monster
.
Attack
>
2500
||
monster
==
Enemy
.
MonsterZone
.
GetDangerousMonster
())
count
++;
if
(
count
==
0
)
return
false
;
}
if
(!
Bot
.
HasInHand
(
targets
))
{
if
(!
Bot
.
HasInMonstersZone
(
targets
))
return
false
;
}
AI
.
SelectCard
(
targets
);
return
true
;
}
if
(
Duel
.
Phase
==
DuelPhase
.
BattleStart
)
{
AI
.
SelectYesNo
(
true
);
return
true
;
}
return
false
;
}
private
bool
GamecieltheSeaTurtleKaijusp
()
{
if
(!
Bot
.
HasInMonstersZone
(
CardId
.
UltimateConductorTytanno
))
return
DefaultKaijuSpsummon
();
return
false
;
}
private
bool
RadiantheMultidimensionalKaijusp
()
{
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
GamecieltheSeaTurtleKaiju
))
return
true
;
if
(
Bot
.
HasInHand
(
CardId
.
DogorantheMadFlameKaiju
)
&&
!
Bot
.
HasInMonstersZone
(
CardId
.
UltimateConductorTytanno
))
return
DefaultKaijuSpsummon
();
return
false
;
}
private
bool
DogorantheMadFlameKaijusp
()
{
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
GamecieltheSeaTurtleKaiju
))
return
true
;
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
RadiantheMultidimensionalKaiju
))
return
true
;
return
false
;
}
private
bool
InterruptedKaijuSlumbereff
()
{
if
(
Enemy
.
GetMonsterCount
()
-
Bot
.
GetMonsterCount
()
>=
2
)
return
DefaultInterruptedKaijuSlumber
();
return
false
;
}
private
bool
UltimateConductorTytannosp
()
{
Pillused
=
true
;
foreach
(
ClientCard
card
in
Bot
.
GetMonsters
())
{
if
(
card
.
IsCode
(
CardId
.
UltimateConductorTytanno
)
&&
card
.
IsFaceup
())
return
false
;
}
Ultimate_ss
++;
return
true
;
}
private
bool
KeeperOfDragonicMagiceff
()
{
if
(
ActivateDescription
==
-
1
)
{
AI
.
SelectCard
(
Useless_List
());
return
true
;
}
return
true
;
}
private
bool
MonsterRepos
()
{
if
(
Card
.
IsCode
(
CardId
.
UltimateConductorTytanno
)
&&
Card
.
IsFacedown
())
return
true
;
if
(
Card
.
IsCode
(
CardId
.
ElShaddollConstruct
)
&&
Card
.
IsFacedown
())
return
true
;
if
(
Card
.
IsCode
(
CardId
.
ElShaddollConstruct
)
&&
Card
.
IsAttack
())
return
false
;
if
(
Card
.
IsCode
(
CardId
.
GlowUpBulb
)
&&
Card
.
IsDefense
())
return
false
;
if
(
Card
.
IsCode
(
CardId
.
ShaddollDragon
)
&&
Card
.
IsFacedown
()
&&
Enemy
.
GetMonsterCount
()
>=
0
)
return
true
;
if
(
Card
.
IsCode
(
CardId
.
ShaddollSquamata
)
&&
Card
.
IsFacedown
()
&&
Enemy
.
GetMonsterCount
()
>=
0
)
return
true
;
return
base
.
DefaultMonsterRepos
();
}
private
bool
OvertexCoatlseff
()
{
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
return
false
;
OvertexCoatlseff_used
=
true
;
return
true
;
}
private
bool
DoubleEvolutionPilleff
()
{
foreach
(
ClientCard
card
in
Bot
.
GetMonsters
())
{
if
(
card
.
IsCode
(
CardId
.
UltimateConductorTytanno
)
&&
card
.
IsFaceup
())
return
false
;
}
if
(
Pillused
==
true
)
return
false
;
Pillused
=
true
;
IList
<
int
>
targets
=
new
[]
{
CardId
.
GiantRex
,
CardId
.
DogorantheMadFlameKaiju
,
CardId
.
GamecieltheSeaTurtleKaiju
,
CardId
.
RadiantheMultidimensionalKaiju
,
CardId
.
OvertexCoatls
,
CardId
.
SouleatingOviraptor
,
CardId
.
UltimateConductorTytanno
,
};
if
(
Bot
.
HasInGraveyard
(
targets
))
{
AI
.
SelectCard
(
CardId
.
GiantRex
,
CardId
.
DogorantheMadFlameKaiju
,
CardId
.
OvertexCoatls
,
CardId
.
GamecieltheSeaTurtleKaiju
,
CardId
.
RadiantheMultidimensionalKaiju
,
CardId
.
SouleatingOviraptor
,
CardId
.
UltimateConductorTytanno
);
}
else
{
AI
.
SelectCard
(
CardId
.
GiantRex
,
CardId
.
DogorantheMadFlameKaiju
,
CardId
.
GamecieltheSeaTurtleKaiju
,
CardId
.
RadiantheMultidimensionalKaiju
,
CardId
.
OvertexCoatls
,
CardId
.
SouleatingOviraptor
,
CardId
.
UltimateConductorTytanno
);
}
IList
<
int
>
targets2
=
new
[]
{
CardId
.
GiantRex
,
CardId
.
DogorantheMadFlameKaiju
,
CardId
.
GamecieltheSeaTurtleKaiju
,
CardId
.
RadiantheMultidimensionalKaiju
,
CardId
.
OvertexCoatls
,
CardId
.
SouleatingOviraptor
,
CardId
.
UltimateConductorTytanno
,
};
if
(
Bot
.
HasInGraveyard
(
targets
))
{
AI
.
SelectNextCard
(
CardId
.
ShaddollBeast
,
CardId
.
ShaddollDragon
,
CardId
.
KeeperOfDragonicMagic
,
CardId
.
ShaddollSquamata
,
CardId
.
SouleatingOviraptor
,
CardId
.
Raiden
,
CardId
.
Lumina
,
CardId
.
ShaddollHedgehog
,
CardId
.
AshBlossom
,
CardId
.
GhostOgre
,
CardId
.
ShaddollFalco
,
CardId
.
MaxxC
,
CardId
.
PlaguespreaderZombie
,
CardId
.
GlowUpBulb
,
CardId
.
FairyTailSnow
);
}
else
AI
.
SelectNextCard
(
CardId
.
ShaddollBeast
,
CardId
.
ShaddollDragon
,
CardId
.
KeeperOfDragonicMagic
,
CardId
.
ShaddollSquamata
,
CardId
.
SouleatingOviraptor
,
CardId
.
Raiden
,
CardId
.
Lumina
,
CardId
.
ShaddollHedgehog
,
CardId
.
AshBlossom
,
CardId
.
GhostOgre
,
CardId
.
ShaddollFalco
,
CardId
.
MaxxC
,
CardId
.
PlaguespreaderZombie
,
CardId
.
GlowUpBulb
,
CardId
.
FairyTailSnow
);
AI
.
SelectThirdCard
(
new
[]
{
CardId
.
UltimateConductorTytanno
,
});
return
Enemy
.
GetMonsterCount
()
>=
1
;
}
private
bool
FairyTailSnowsummon
()
{
ClientCard
target
=
Util
.
GetBestEnemyMonster
(
true
,
true
);
if
(
target
!=
null
)
{
return
true
;
}
return
false
;
}
private
bool
FairyTailSnoweff
()
{
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
AI
.
SelectCard
(
Util
.
GetBestEnemyMonster
(
true
,
true
));
return
true
;
}
else
{
int
spell_count
=
0
;
IList
<
ClientCard
>
grave
=
Bot
.
Graveyard
;
IList
<
ClientCard
>
all
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
check
in
grave
)
{
if
(
check
.
IsCode
(
CardId
.
GiantRex
))
{
all
.
Add
(
check
);
}
}
foreach
(
ClientCard
check
in
grave
)
{
if
(
check
.
HasType
(
CardType
.
Spell
)||
check
.
HasType
(
CardType
.
Trap
))
{
spell_count
++;
all
.
Add
(
check
);
}
}
foreach
(
ClientCard
check
in
grave
)
{
if
(
check
.
HasType
(
CardType
.
Monster
))
{
all
.
Add
(
check
);
}
}
if
(
Util
.
ChainContainsCard
(
CardId
.
FairyTailSnow
))
return
false
;
if
(
Duel
.
Player
==
1
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
Bot
.
BattlingMonster
==
null
&&
Enemy_atk
>=
Bot
.
LifePoints
||
Duel
.
Player
==
0
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
Enemy
.
BattlingMonster
==
null
&&
Enemy
.
LifePoints
<=
1850
)
{
AI
.
SelectCard
(
all
);
AI
.
SelectNextCard
(
Util
.
GetBestEnemyMonster
());
return
true
;
}
}
return
false
;
}
private
bool
SouleatingOviraptoreff
()
{
if
(!
OvertexCoatlseff_used
&&
Bot
.
GetRemainingCount
(
CardId
.
OvertexCoatls
,
3
)
>
0
)
{
AI
.
SelectCard
(
CardId
.
OvertexCoatls
);
AI
.
SelectOption
(
0
);
}
else
{
AI
.
SelectCard
(
CardId
.
UltimateConductorTytanno
);
AI
.
SelectOption
(
1
);
}
return
true
;
}
private
bool
GlowUpBulbeff
()
{
IList
<
ClientCard
>
check
=
Bot
.
GetMonstersInExtraZone
();
foreach
(
ClientCard
monster
in
check
)
if
(
monster
.
HasType
(
CardType
.
Fusion
))
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
Lumina
)
||
Bot
.
HasInMonstersZone
(
CardId
.
FairyTailSnow
)
||
Bot
.
HasInMonstersZone
(
CardId
.
KeeperOfDragonicMagic
)
||
Bot
.
HasInMonstersZone
(
CardId
.
SouleatingOviraptor
)
||
Bot
.
HasInMonstersZone
(
CardId
.
GiantRex
)
||
Bot
.
HasInMonstersZone
(
CardId
.
Raiden
)
)
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
}
return
false
;
}
private
bool
TG_WonderMagicianeff
()
{
return
true
;
}
private
bool
AllureofDarkness
()
{
IList
<
ClientCard
>
materials
=
Bot
.
Hand
;
// IList<ClientCard> check = new List<ClientCard>();
ClientCard
mat
=
null
;
foreach
(
ClientCard
card
in
materials
)
{
if
(
card
.
HasAttribute
(
CardAttribute
.
Dark
))
{
mat
=
card
;
break
;
}
}
if
(
mat
!=
null
)
{
return
true
;
}
return
false
;
}
private
bool
Reborneff
()
{
if
(
Bot
.
HasInGraveyard
(
CardId
.
UltimateConductorTytanno
)&&
Ultimate_ss
>
0
)
{
AI
.
SelectCard
(
CardId
.
UltimateConductorTytanno
);
return
true
;
}
if
(!
Util
.
IsOneEnemyBetter
(
true
))
return
false
;
IList
<
int
>
targets
=
new
[]
{
CardId
.
ElShaddollConstruct
,
CardId
.
DogorantheMadFlameKaiju
,
CardId
.
GamecieltheSeaTurtleKaiju
,
CardId
.
SouleatingOviraptor
,
};
if
(!
Bot
.
HasInGraveyard
(
targets
))
{
return
false
;
}
AI
.
SelectCard
(
targets
);
return
true
;
}
private
bool
PotofAvariceeff
()
{
return
true
;
}
private
bool
MaxxC
()
{
return
Duel
.
Player
==
1
;
}
private
bool
SetIsFieldEmpty
()
{
return
!
Bot
.
IsFieldEmpty
();
}
private
bool
SpellSetZone
()
{
return
(
Bot
.
GetHandCount
()>
6
&&
Duel
.
Phase
==
DuelPhase
.
Main2
);
}
private
bool
ChargeOfTheLightBrigadeEffect
()
{
if
(
Bot
.
HasInGraveyard
(
CardId
.
Raiden
)
||
Bot
.
HasInHand
(
CardId
.
Raiden
))
AI
.
SelectCard
(
CardId
.
Lumina
);
else
AI
.
SelectCard
(
CardId
.
Raiden
);
return
true
;
}
// all Shaddoll
private
bool
SinisterShadowGameseff
()
{
if
(
Bot
.
HasInGraveyard
(
CardId
.
ShaddollFusion
))
AI
.
SelectCard
(
CardId
.
ShaddollCore
);
else
AI
.
SelectCard
(
new
[]
{
CardId
.
ShaddollBeast
,
});
return
true
;
}
private
bool
ShaddollCoreeff
()
{
if
(
Card
.
Location
==
CardLocation
.
SpellZone
)
{
if
(
Duel
.
Player
==
1
&&
Bot
.
BattlingMonster
==
null
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
||
DefaultOnBecomeTarget
())
{
Logger
.
DebugWriteLine
(
"+++++++++++ShaddollCoreeffdododoo++++++++++"
);
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
}
return
false
;
}
return
true
;
}
private
bool
ShaddollFusioneff
()
{
List
<
ClientCard
>
extra_zone_check
=
Bot
.
GetMonstersInExtraZone
();
foreach
(
ClientCard
extra_monster
in
extra_zone_check
)
if
(
extra_monster
.
HasType
(
CardType
.
Xyz
)
||
extra_monster
.
HasType
(
CardType
.
Fusion
)
||
extra_monster
.
HasType
(
CardType
.
Synchro
))
return
false
;
bool
deck_check
=
false
;
List
<
ClientCard
>
monsters
=
Enemy
.
GetMonsters
();
foreach
(
ClientCard
monster
in
monsters
)
{
if
(
monster
.
HasType
(
CardType
.
Synchro
)
||
monster
.
HasType
(
CardType
.
Fusion
)
||
monster
.
HasType
(
CardType
.
Xyz
)
||
monster
.
HasType
(
CardType
.
Link
))
deck_check
=
true
;
}
if
(
deck_check
)
{
AI
.
SelectCard
(
CardId
.
ElShaddollConstruct
,
CardId
.
ElShaddollShekhinaga
,
CardId
.
ElShaddollGrysra
,
CardId
.
ElShaddollWinda
);
AI
.
SelectNextCard
(
CardId
.
ShaddollSquamata
,
CardId
.
ShaddollBeast
,
CardId
.
ShaddollHedgehog
,
CardId
.
ShaddollDragon
,
CardId
.
ShaddollFalco
,
CardId
.
FairyTailSnow
);
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
return
true
;
}
if
(
Enemy
.
GetMonsterCount
()
==
0
)
{
int
dark_count
=
0
;
IList
<
ClientCard
>
m0
=
Bot
.
Hand
;
IList
<
ClientCard
>
m1
=
Bot
.
MonsterZone
;
IList
<
ClientCard
>
all
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
m0
)
{
if
(
dark_count
==
2
)
break
;
if
(
monster
.
HasAttribute
(
CardAttribute
.
Dark
))
{
dark_count
++;
all
.
Add
(
monster
);
}
}
foreach
(
ClientCard
monster
in
m1
)
{
if
(
dark_count
==
2
)
break
;
if
(
monster
!=
null
)
{
if
(
monster
.
HasAttribute
(
CardAttribute
.
Dark
))
{
dark_count
++;
all
.
Add
(
monster
);
}
}
}
if
(
dark_count
==
2
)
{
AI
.
SelectCard
(
CardId
.
ElShaddollWinda
);
AI
.
SelectMaterials
(
all
);
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
return
true
;
}
}
if
(!
Util
.
IsOneEnemyBetter
())
return
false
;
foreach
(
ClientCard
monster
in
Bot
.
Hand
)
{
if
(
monster
.
HasAttribute
(
CardAttribute
.
Light
))
{
AI
.
SelectCard
(
CardId
.
ElShaddollConstruct
);
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
return
true
;
}
}
List
<
ClientCard
>
material_1
=
Bot
.
GetMonsters
();
foreach
(
ClientCard
monster
in
material_1
)
{
if
(
monster
==
null
)
break
;
if
(
monster
.
HasAttribute
(
CardAttribute
.
Light
))
{
AI
.
SelectCard
(
CardId
.
ElShaddollConstruct
);
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
return
true
;
}
}
return
false
;
}
private
bool
ElShaddollShekhinagaeff
()
{
if
(
Card
.
Location
!=
CardLocation
.
MonsterZone
)
return
true
;
else
{
if
(
DefaultBreakthroughSkill
())
{
AI
.
SelectCard
(
CardId
.
ShaddollBeast
,
CardId
.
ShaddollSquamata
,
CardId
.
ShaddollHedgehog
,
CardId
.
ShaddollDragon
,
CardId
.
ShaddollFalco
);
}
else
return
false
;
}
return
true
;
}
private
bool
ElShaddollGrysraeff
()
{
if
(
Card
.
Location
!=
CardLocation
.
MonsterZone
)
return
true
;
return
true
;
}
private
bool
ElShaddollConstructeff
()
{
if
(!
ShaddollBeast_used
)
AI
.
SelectCard
(
CardId
.
ShaddollBeast
);
else
AI
.
SelectCard
(
CardId
.
ShaddollFalco
);
return
true
;
}
private
bool
ShaddollSquamataeff
()
{
ShaddollSquamata_used
=
true
;
if
(
Card
.
Location
!=
CardLocation
.
MonsterZone
)
{
if
(
Util
.
ChainContainsCard
(
CardId
.
ElShaddollConstruct
))
{
if
(!
Bot
.
HasInHand
(
CardId
.
ShaddollFusion
)
&&
Bot
.
HasInGraveyard
(
CardId
.
ShaddollFusion
))
AI
.
SelectNextCard
(
CardId
.
ShaddollCore
);
if
(!
ShaddollBeast_used
)
AI
.
SelectNextCard
(
CardId
.
ShaddollBeast
);
else
if
(!
ShaddollFalco_used
)
AI
.
SelectNextCard
(
CardId
.
ShaddollFalco
);
else
if
(!
ShaddollHedgehog_used
)
AI
.
SelectNextCard
(
CardId
.
ShaddollHedgehog
);
}
else
{
if
(!
Bot
.
HasInHand
(
CardId
.
ShaddollFusion
)
&&
Bot
.
HasInGraveyard
(
CardId
.
ShaddollFusion
))
AI
.
SelectCard
(
CardId
.
ShaddollCore
);
if
(!
ShaddollBeast_used
)
AI
.
SelectCard
(
CardId
.
ShaddollBeast
);
else
if
(!
ShaddollFalco_used
)
AI
.
SelectCard
(
CardId
.
ShaddollFalco
);
else
if
(!
ShaddollHedgehog_used
)
AI
.
SelectCard
(
CardId
.
ShaddollHedgehog
);
}
}
else
{
if
(
Enemy
.
GetMonsterCount
()
==
0
)
return
false
;
ClientCard
target
=
Util
.
GetBestEnemyMonster
();
AI
.
SelectCard
(
target
);
}
return
true
;
}
private
bool
ShaddollBeasteff
()
{
ShaddollBeast_used
=
true
;
return
true
;
}
private
bool
ShaddollFalcoeff
()
{
ShaddollFalco_used
=
true
;
if
(
Card
.
Location
!=
CardLocation
.
MonsterZone
)
return
true
;
else
{
AI
.
SelectCard
(
CardId
.
ElShaddollConstruct
,
CardId
.
ElShaddollShekhinaga
,
CardId
.
ElShaddollGrysra
,
CardId
.
ElShaddollWinda
,
CardId
.
ShaddollSquamata
);
}
return
true
;
}
private
bool
ShaddollHedgehogeff
()
{
ShaddollHedgehog_used
=
true
;
if
(
Card
.
Location
!=
CardLocation
.
MonsterZone
)
{
if
(
Util
.
ChainContainsCard
(
CardId
.
ElShaddollConstruct
))
{
AI
.
SelectNextCard
(
CardId
.
ShaddollFalco
,
CardId
.
ShaddollSquamata
,
CardId
.
ShaddollDragon
);
}
else
{
AI
.
SelectCard
(
CardId
.
ShaddollSquamata
,
CardId
.
ShaddollDragon
);
}
}
else
{
AI
.
SelectCard
(
CardId
.
ShaddollFusion
,
CardId
.
SinisterShadowGames
);
}
return
true
;
}
private
bool
ShaddollDragoneff
()
{
ShaddollDragon_used
=
true
;
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
ClientCard
target
=
Util
.
GetBestEnemyCard
();
AI
.
SelectCard
(
target
);
return
true
;
}
else
{
if
(
Enemy
.
GetSpellCount
()
==
0
)
return
false
;
ClientCard
target
=
Util
.
GetBestEnemySpell
();
AI
.
SelectCard
(
target
);
return
true
;
}
}
private
bool
LostWindeff
()
{
if
(
Card
.
Location
==
CardLocation
.
Grave
)
return
true
;
List
<
ClientCard
>
check
=
Enemy
.
GetMonsters
();
foreach
(
ClientCard
m
in
check
)
{
if
(
m
.
Attack
>=
2000
)
return
DefaultBreakthroughSkill
();
}
return
false
;
}
private
bool
FoolishBurialEffect
()
{
if
(
Bot
.
GetRemainingCount
(
CardId
.
DoubleEvolutionPill
,
3
)
>
0
)
{
if
(!
OvertexCoatlseff_used
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
OvertexCoatls
,
});
return
true
;
}
return
false
;
}
else
{
AI
.
SelectCard
(
CardId
.
ShaddollSquamata
,
CardId
.
FairyTailSnow
);
}
return
true
;
}
public
bool
Hand_act_eff
()
{
//if (Card.IsCode(CardId.Urara) && Bot.HasInHand(CardId.LockBird) && Bot.HasInSpellZone(CardId.Re)) return false;
if
(
Card
.
IsCode
(
CardId
.
GhostOgre
)
&&
Card
.
Location
==
CardLocation
.
Hand
&&
Bot
.
HasInMonstersZone
(
CardId
.
GhostOgre
))
return
false
;
return
(
Duel
.
LastChainPlayer
==
1
);
}
//other extra
private
bool
Michaelsp
()
{
IList
<
int
>
targets
=
new
[]
{
CardId
.
Raiden
,
CardId
.
Lumina
};
if
(!
Bot
.
HasInMonstersZone
(
targets
))
return
false
;
AI
.
SelectCard
(
targets
);
return
true
;
}
private
bool
Michaeleff
()
{
if
(
Card
.
Location
==
CardLocation
.
Grave
)
return
true
;
if
(
Bot
.
LifePoints
<=
1000
)
return
false
;
ClientCard
select
=
Util
.
GetBestEnemyCard
();
if
(
select
==
null
)
return
false
;
if
(
select
!=
null
)
{
AI
.
SelectCard
(
select
);
return
true
;
}
return
false
;
}
private
bool
MinervaTheExaltedEffect
()
{
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
if
(
Bot
.
Deck
.
Count
<=
10
)
return
false
;
return
true
;
}
else
{
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
ClientCard
target1
=
Util
.
GetBestEnemyMonster
();
if
(
target1
!=
null
)
targets
.
Add
(
target1
);
ClientCard
target2
=
Util
.
GetBestEnemySpell
();
if
(
target2
!=
null
)
targets
.
Add
(
target2
);
foreach
(
ClientCard
target
in
Enemy
.
GetMonsters
())
{
if
(
targets
.
Count
>=
3
)
break
;
if
(!
targets
.
Contains
(
target
))
targets
.
Add
(
target
);
}
foreach
(
ClientCard
target
in
Enemy
.
GetSpells
())
{
if
(
targets
.
Count
>=
3
)
break
;
if
(!
targets
.
Contains
(
target
))
targets
.
Add
(
target
);
}
if
(
targets
.
Count
==
0
)
return
false
;
AI
.
SelectCard
(
0
);
AI
.
SelectNextCard
(
targets
);
return
true
;
}
}
public
bool
CrystronNeedlefibersp
()
{
if
(
Bot
.
HasInMonstersZone
(
CardId
.
ElShaddollConstruct
)
||
Bot
.
HasInMonstersZone
(
CardId
.
ElShaddollGrysra
)
||
Bot
.
HasInMonstersZone
(
CardId
.
ElShaddollShekhinaga
)
||
Bot
.
HasInMonstersZone
(
CardId
.
ElShaddollWinda
))
return
false
;
if
(
CrystronNeedlefibereff_used
)
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
CrystronNeedlefiber
))
return
false
;
IList
<
int
>
check
=
new
[]
{
CardId
.
GlowUpBulb
,
CardId
.
FairyTailSnow
,
CardId
.
KeeperOfDragonicMagic
,
CardId
.
SouleatingOviraptor
,
CardId
.
GiantRex
,
CardId
.
Lumina
,
CardId
.
Raiden
,
};
int
count
=
0
;
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
if
(
monster
.
IsCode
(
CardId
.
GlowUpBulb
,
CardId
.
FairyTailSnow
,
CardId
.
KeeperOfDragonicMagic
,
CardId
.
SouleatingOviraptor
,
CardId
.
GiantRex
,
CardId
.
Lumina
,
CardId
.
Raiden
))
count
++;
if
(!
Bot
.
HasInMonstersZone
(
CardId
.
GlowUpBulb
)
||
count
<
2
)
return
false
;
AI
.
SelectCard
(
check
);
AI
.
SelectNextCard
(
check
);
return
true
;
}
public
bool
CrystronNeedlefibereff
()
{
bool
DarkHole
=
false
;
foreach
(
ClientCard
card
in
Enemy
.
GetSpells
())
{
if
(
card
.
IsCode
(
53129443
)
&&
card
.
IsFaceup
())
{
DarkHole
=
true
;
}
}
if
(
Duel
.
Player
==
0
)
{
CrystronNeedlefibereff_used
=
true
;
AI
.
SelectCard
(
CardId
.
GhostOgre
,
CardId
.
GlowUpBulb
,
CardId
.
PlaguespreaderZombie
,
CardId
.
ShaddollFalco
);
return
true
;
}
else
if
(
DarkHole
||
Util
.
IsChainTarget
(
Card
)
||
Util
.
GetProblematicEnemySpell
()
!=
null
)
{
AI
.
SelectCard
(
CardId
.
TG_WonderMagician
);
return
true
;
}
else
if
(
Duel
.
Player
==
1
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
Util
.
IsOneEnemyBetterThanValue
(
1500
,
true
))
{
AI
.
SelectCard
(
CardId
.
TG_WonderMagician
);
if
(
Util
.
IsOneEnemyBetterThanValue
(
1900
,
true
))
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
}
else
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
}
return
true
;
}
return
false
;
}
private
bool
ScarlightRedDragonsp
()
{
return
false
;
}
private
bool
ScarlightRedDragoneff
()
{
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
ClientCard
target1
=
Util
.
GetBestEnemyMonster
();
if
(
target1
!=
null
)
{
targets
.
Add
(
target1
);
AI
.
SelectCard
(
targets
);
return
true
;
}
return
false
;
}
private
bool
CrystalWingSynchroDragoneff
()
{
return
Duel
.
LastChainPlayer
!=
0
;
}
private
bool
Sdulldeateff
()
{
/* if (snake_four_s)
{
snake_four_s = false;
AI.SelectCard(Useless_List());
return true;
}
//if (ActivateDescription == Util.GetStringId(CardId.snake, 2)) return true;
if (ActivateDescription == Util.GetStringId(CardId.snake, 1))
{
foreach (ClientCard hand in Bot.Hand)
{
if (hand.IsCode(CardId.Red, CardId.Pink))
{
AI.SelectCard(hand);
return true;
}
if (hand.IsCode(CardId.Urara, CardId.Ghost))
{
if (Tuner_ss())
{
AI.SelectCard(hand);
return true;
}
}
}
}*/
return
false
;
}
private
bool
BlackRoseMoonlightDragoneff
()
{
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
ClientCard
target1
=
Util
.
GetBestEnemyMonster
();
if
(
target1
!=
null
)
{
targets
.
Add
(
target1
);
AI
.
SelectCard
(
targets
);
return
true
;
}
return
false
;
}
private
bool
RedWyvernsp
()
{
return
false
;
}
private
bool
RedWyverneff
()
{
IList
<
ClientCard
>
check
=
Enemy
.
GetMonsters
();
ClientCard
best
=
null
;
foreach
(
ClientCard
monster
in
check
)
{
if
(
monster
.
Attack
>=
2400
)
best
=
monster
;
}
if
(
best
!=
null
)
{
AI
.
SelectCard
(
best
);
return
true
;
}
return
false
;
}
private
bool
CoralDragoneff
()
{
if
(
Card
.
Location
!=
CardLocation
.
MonsterZone
)
return
true
;
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
ClientCard
target1
=
Util
.
GetBestEnemyMonster
();
if
(
target1
!=
null
)
targets
.
Add
(
target1
);
ClientCard
target2
=
Util
.
GetBestEnemySpell
();
if
(
target2
!=
null
)
targets
.
Add
(
target2
);
else
if
(
Util
.
IsChainTarget
(
Card
)
||
Util
.
GetProblematicEnemySpell
()
!=
null
)
{
AI
.
SelectCard
(
targets
);
return
true
;
}
else
if
(
Duel
.
Player
==
1
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
Util
.
IsOneEnemyBetterThanValue
(
2400
,
true
))
{
AI
.
SelectCard
(
targets
);
return
true
;
}
return
false
;
}
public
override
bool
OnPreBattleBetween
(
ClientCard
attacker
,
ClientCard
defender
)
{
if
(!
defender
.
IsMonsterHasPreventActivationEffectInBattle
())
{
if
(
attacker
.
IsCode
(
CardId
.
ElShaddollConstruct
)
&&
!
attacker
.
IsDisabled
())
// TODO: && defender.IsSpecialSummoned
attacker
.
RealPower
=
9999
;
if
(
attacker
.
IsCode
(
CardId
.
UltimateConductorTytanno
)
&&
!
attacker
.
IsDisabled
()
&&
defender
.
IsDefense
())
attacker
.
RealPower
=
9999
;
}
return
base
.
OnPreBattleBetween
(
attacker
,
defender
);
}
public
override
bool
OnSelectHand
()
{
return
true
;
}
/*
private bool GoblindberghSummon()
{
foreach (ClientCard card in Bot.Hand.GetMonsters())
{
if (!card.Equals(Card) && card.Level == 4)
return true;
}
return false;
}*/
}
}
private
bool
AllureofDarkness
()
{
IList
<
ClientCard
>
materials
=
Bot
.
Hand
;
// IList<ClientCard> check = new List<ClientCard>();
ClientCard
mat
=
null
;
foreach
(
ClientCard
card
in
materials
)
{
if
(
card
.
HasAttribute
(
CardAttribute
.
Dark
))
{
mat
=
card
;
break
;
}
}
if
(
mat
!=
null
)
{
return
true
;
}
return
false
;
}
private
bool
Reborneff
()
{
if
(
Bot
.
HasInGraveyard
(
CardId
.
UltimateConductorTytanno
)&&
Ultimate_ss
>
0
)
{
AI
.
SelectCard
(
CardId
.
UltimateConductorTytanno
);
return
true
;
}
if
(!
Util
.
IsOneEnemyBetter
(
true
))
return
false
;
IList
<
int
>
targets
=
new
[]
{
CardId
.
ElShaddollConstruct
,
CardId
.
DogorantheMadFlameKaiju
,
CardId
.
GamecieltheSeaTurtleKaiju
,
CardId
.
SouleatingOviraptor
,
};
if
(!
Bot
.
HasInGraveyard
(
targets
))
{
return
false
;
}
AI
.
SelectCard
(
targets
);
return
true
;
}
private
bool
PotofAvariceeff
()
{
return
true
;
}
private
bool
MaxxC
()
{
return
Duel
.
Player
==
1
;
}
private
bool
SetIsFieldEmpty
()
{
return
!
Bot
.
IsFieldEmpty
();
}
private
bool
SpellSetZone
()
{
return
(
Bot
.
GetHandCount
()>
6
&&
Duel
.
Phase
==
DuelPhase
.
Main2
);
}
private
bool
ChargeOfTheLightBrigadeEffect
()
{
if
(
Bot
.
HasInGraveyard
(
CardId
.
Raiden
)
||
Bot
.
HasInHand
(
CardId
.
Raiden
))
AI
.
SelectCard
(
CardId
.
Lumina
);
else
AI
.
SelectCard
(
CardId
.
Raiden
);
return
true
;
}
// all Shaddoll
private
bool
SinisterShadowGameseff
()
{
if
(
Bot
.
HasInGraveyard
(
CardId
.
ShaddollFusion
))
AI
.
SelectCard
(
CardId
.
ShaddollCore
);
else
AI
.
SelectCard
(
new
[]
{
CardId
.
ShaddollBeast
,
});
return
true
;
}
private
bool
ShaddollCoreeff
()
{
if
(
Card
.
Location
==
CardLocation
.
SpellZone
)
{
if
(
Duel
.
Player
==
1
&&
Bot
.
BattlingMonster
==
null
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
||
DefaultOnBecomeTarget
())
{
Logger
.
DebugWriteLine
(
"+++++++++++ShaddollCoreeffdododoo++++++++++"
);
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
}
return
false
;
}
return
true
;
}
private
bool
ShaddollFusioneff
()
{
List
<
ClientCard
>
extra_zone_check
=
Bot
.
GetMonstersInExtraZone
();
foreach
(
ClientCard
extra_monster
in
extra_zone_check
)
if
(
extra_monster
.
HasType
(
CardType
.
Xyz
)
||
extra_monster
.
HasType
(
CardType
.
Fusion
)
||
extra_monster
.
HasType
(
CardType
.
Synchro
))
return
false
;
bool
deck_check
=
false
;
List
<
ClientCard
>
monsters
=
Enemy
.
GetMonsters
();
foreach
(
ClientCard
monster
in
monsters
)
{
if
(
monster
.
HasType
(
CardType
.
Synchro
)
||
monster
.
HasType
(
CardType
.
Fusion
)
||
monster
.
HasType
(
CardType
.
Xyz
)
||
monster
.
HasType
(
CardType
.
Link
))
deck_check
=
true
;
}
if
(
deck_check
)
{
AI
.
SelectCard
(
CardId
.
ElShaddollConstruct
,
CardId
.
ElShaddollShekhinaga
,
CardId
.
ElShaddollGrysra
,
CardId
.
ElShaddollWinda
);
AI
.
SelectNextCard
(
CardId
.
ShaddollSquamata
,
CardId
.
ShaddollBeast
,
CardId
.
ShaddollHedgehog
,
CardId
.
ShaddollDragon
,
CardId
.
ShaddollFalco
,
CardId
.
FairyTailSnow
);
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
return
true
;
}
if
(
Enemy
.
GetMonsterCount
()
==
0
)
{
int
dark_count
=
0
;
IList
<
ClientCard
>
m0
=
Bot
.
Hand
;
IList
<
ClientCard
>
m1
=
Bot
.
MonsterZone
;
IList
<
ClientCard
>
all
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
m0
)
{
if
(
dark_count
==
2
)
break
;
if
(
monster
.
HasAttribute
(
CardAttribute
.
Dark
))
{
dark_count
++;
all
.
Add
(
monster
);
}
}
foreach
(
ClientCard
monster
in
m1
)
{
if
(
dark_count
==
2
)
break
;
if
(
monster
!=
null
)
{
if
(
monster
.
HasAttribute
(
CardAttribute
.
Dark
))
{
dark_count
++;
all
.
Add
(
monster
);
}
}
}
if
(
dark_count
==
2
)
{
AI
.
SelectCard
(
CardId
.
ElShaddollWinda
);
AI
.
SelectMaterials
(
all
);
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
return
true
;
}
}
if
(!
Util
.
IsOneEnemyBetter
())
return
false
;
foreach
(
ClientCard
monster
in
Bot
.
Hand
)
{
if
(
monster
.
HasAttribute
(
CardAttribute
.
Light
))
{
AI
.
SelectCard
(
CardId
.
ElShaddollConstruct
);
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
return
true
;
}
}
List
<
ClientCard
>
material_1
=
Bot
.
GetMonsters
();
foreach
(
ClientCard
monster
in
material_1
)
{
if
(
monster
==
null
)
break
;
if
(
monster
.
HasAttribute
(
CardAttribute
.
Light
))
{
AI
.
SelectCard
(
CardId
.
ElShaddollConstruct
);
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
return
true
;
}
}
return
false
;
}
private
bool
ElShaddollShekhinagaeff
()
{
if
(
Card
.
Location
!=
CardLocation
.
MonsterZone
)
return
true
;
else
{
if
(
DefaultBreakthroughSkill
())
{
AI
.
SelectCard
(
CardId
.
ShaddollBeast
,
CardId
.
ShaddollSquamata
,
CardId
.
ShaddollHedgehog
,
CardId
.
ShaddollDragon
,
CardId
.
ShaddollFalco
);
}
else
return
false
;
}
return
true
;
}
private
bool
ElShaddollGrysraeff
()
{
if
(
Card
.
Location
!=
CardLocation
.
MonsterZone
)
return
true
;
return
true
;
}
private
bool
ElShaddollConstructeff
()
{
if
(!
ShaddollBeast_used
)
AI
.
SelectCard
(
CardId
.
ShaddollBeast
);
else
AI
.
SelectCard
(
CardId
.
ShaddollFalco
);
return
true
;
}
private
bool
ShaddollSquamataeff
()
{
ShaddollSquamata_used
=
true
;
if
(
Card
.
Location
!=
CardLocation
.
MonsterZone
)
{
if
(
Util
.
ChainContainsCard
(
CardId
.
ElShaddollConstruct
))
{
if
(!
Bot
.
HasInHand
(
CardId
.
ShaddollFusion
)
&&
Bot
.
HasInGraveyard
(
CardId
.
ShaddollFusion
))
AI
.
SelectNextCard
(
CardId
.
ShaddollCore
);
if
(!
ShaddollBeast_used
)
AI
.
SelectNextCard
(
CardId
.
ShaddollBeast
);
else
if
(!
ShaddollFalco_used
)
AI
.
SelectNextCard
(
CardId
.
ShaddollFalco
);
else
if
(!
ShaddollHedgehog_used
)
AI
.
SelectNextCard
(
CardId
.
ShaddollHedgehog
);
}
else
{
if
(!
Bot
.
HasInHand
(
CardId
.
ShaddollFusion
)
&&
Bot
.
HasInGraveyard
(
CardId
.
ShaddollFusion
))
AI
.
SelectCard
(
CardId
.
ShaddollCore
);
if
(!
ShaddollBeast_used
)
AI
.
SelectCard
(
CardId
.
ShaddollBeast
);
else
if
(!
ShaddollFalco_used
)
AI
.
SelectCard
(
CardId
.
ShaddollFalco
);
else
if
(!
ShaddollHedgehog_used
)
AI
.
SelectCard
(
CardId
.
ShaddollHedgehog
);
}
}
else
{
if
(
Enemy
.
GetMonsterCount
()
==
0
)
return
false
;
ClientCard
target
=
Util
.
GetBestEnemyMonster
();
AI
.
SelectCard
(
target
);
}
return
true
;
}
private
bool
ShaddollBeasteff
()
{
ShaddollBeast_used
=
true
;
return
true
;
}
private
bool
ShaddollFalcoeff
()
{
ShaddollFalco_used
=
true
;
if
(
Card
.
Location
!=
CardLocation
.
MonsterZone
)
return
true
;
else
{
AI
.
SelectCard
(
CardId
.
ElShaddollConstruct
,
CardId
.
ElShaddollShekhinaga
,
CardId
.
ElShaddollGrysra
,
CardId
.
ElShaddollWinda
,
CardId
.
ShaddollSquamata
);
}
return
true
;
}
private
bool
ShaddollHedgehogeff
()
{
ShaddollHedgehog_used
=
true
;
if
(
Card
.
Location
!=
CardLocation
.
MonsterZone
)
{
if
(
Util
.
ChainContainsCard
(
CardId
.
ElShaddollConstruct
))
{
AI
.
SelectNextCard
(
CardId
.
ShaddollFalco
,
CardId
.
ShaddollSquamata
,
CardId
.
ShaddollDragon
);
}
else
{
AI
.
SelectCard
(
CardId
.
ShaddollSquamata
,
CardId
.
ShaddollDragon
);
}
}
else
{
AI
.
SelectCard
(
CardId
.
ShaddollFusion
,
CardId
.
SinisterShadowGames
);
}
return
true
;
}
private
bool
ShaddollDragoneff
()
{
ShaddollDragon_used
=
true
;
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
ClientCard
target
=
Util
.
GetBestEnemyCard
();
AI
.
SelectCard
(
target
);
return
true
;
}
else
{
if
(
Enemy
.
GetSpellCount
()
==
0
)
return
false
;
ClientCard
target
=
Util
.
GetBestEnemySpell
();
AI
.
SelectCard
(
target
);
return
true
;
}
}
private
bool
LostWindeff
()
{
if
(
Card
.
Location
==
CardLocation
.
Grave
)
return
true
;
List
<
ClientCard
>
check
=
Enemy
.
GetMonsters
();
foreach
(
ClientCard
m
in
check
)
{
if
(
m
.
Attack
>=
2000
)
return
DefaultBreakthroughSkill
();
}
return
false
;
}
private
bool
FoolishBurialEffect
()
{
if
(
Bot
.
GetRemainingCount
(
CardId
.
DoubleEvolutionPill
,
3
)
>
0
)
{
if
(!
OvertexCoatlseff_used
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
OvertexCoatls
,
});
return
true
;
}
return
false
;
}
else
{
AI
.
SelectCard
(
CardId
.
ShaddollSquamata
,
CardId
.
FairyTailSnow
);
}
return
true
;
}
public
bool
Hand_act_eff
()
{
//if (Card.IsCode(CardId.Urara) && Bot.HasInHand(CardId.LockBird) && Bot.HasInSpellZone(CardId.Re)) return false;
if
(
Card
.
IsCode
(
CardId
.
GhostOgre
)
&&
Card
.
Location
==
CardLocation
.
Hand
&&
Bot
.
HasInMonstersZone
(
CardId
.
GhostOgre
))
return
false
;
return
(
Duel
.
LastChainPlayer
==
1
);
}
//other extra
private
bool
Michaelsp
()
{
IList
<
int
>
targets
=
new
[]
{
CardId
.
Raiden
,
CardId
.
Lumina
};
if
(!
Bot
.
HasInMonstersZone
(
targets
))
return
false
;
AI
.
SelectCard
(
targets
);
return
true
;
}
private
bool
Michaeleff
()
{
if
(
Card
.
Location
==
CardLocation
.
Grave
)
return
true
;
if
(
Bot
.
LifePoints
<=
1000
)
return
false
;
ClientCard
select
=
Util
.
GetBestEnemyCard
();
if
(
select
==
null
)
return
false
;
if
(
select
!=
null
)
{
AI
.
SelectCard
(
select
);
return
true
;
}
return
false
;
}
private
bool
MinervaTheExaltedEffect
()
{
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
if
(
Bot
.
Deck
.
Count
<=
10
)
return
false
;
return
true
;
}
else
{
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
ClientCard
target1
=
Util
.
GetBestEnemyMonster
();
if
(
target1
!=
null
)
targets
.
Add
(
target1
);
ClientCard
target2
=
Util
.
GetBestEnemySpell
();
if
(
target2
!=
null
)
targets
.
Add
(
target2
);
foreach
(
ClientCard
target
in
Enemy
.
GetMonsters
())
{
if
(
targets
.
Count
>=
3
)
break
;
if
(!
targets
.
Contains
(
target
))
targets
.
Add
(
target
);
}
foreach
(
ClientCard
target
in
Enemy
.
GetSpells
())
{
if
(
targets
.
Count
>=
3
)
break
;
if
(!
targets
.
Contains
(
target
))
targets
.
Add
(
target
);
}
if
(
targets
.
Count
==
0
)
return
false
;
AI
.
SelectCard
(
0
);
AI
.
SelectNextCard
(
targets
);
return
true
;
}
}
public
bool
CrystronNeedlefibersp
()
{
if
(
Bot
.
HasInMonstersZone
(
CardId
.
ElShaddollConstruct
)
||
Bot
.
HasInMonstersZone
(
CardId
.
ElShaddollGrysra
)
||
Bot
.
HasInMonstersZone
(
CardId
.
ElShaddollShekhinaga
)
||
Bot
.
HasInMonstersZone
(
CardId
.
ElShaddollWinda
))
return
false
;
if
(
CrystronNeedlefibereff_used
)
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
CrystronNeedlefiber
))
return
false
;
IList
<
int
>
check
=
new
[]
{
CardId
.
GlowUpBulb
,
CardId
.
FairyTailSnow
,
CardId
.
KeeperOfDragonicMagic
,
CardId
.
SouleatingOviraptor
,
CardId
.
GiantRex
,
CardId
.
Lumina
,
CardId
.
Raiden
,
};
int
count
=
0
;
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
if
(
monster
.
IsCode
(
CardId
.
GlowUpBulb
,
CardId
.
FairyTailSnow
,
CardId
.
KeeperOfDragonicMagic
,
CardId
.
SouleatingOviraptor
,
CardId
.
GiantRex
,
CardId
.
Lumina
,
CardId
.
Raiden
))
count
++;
if
(!
Bot
.
HasInMonstersZone
(
CardId
.
GlowUpBulb
)
||
count
<
2
)
return
false
;
AI
.
SelectCard
(
check
);
AI
.
SelectNextCard
(
check
);
return
true
;
}
public
bool
CrystronNeedlefibereff
()
{
bool
DarkHole
=
false
;
foreach
(
ClientCard
card
in
Enemy
.
GetSpells
())
{
if
(
card
.
IsCode
(
53129443
)
&&
card
.
IsFaceup
())
{
DarkHole
=
true
;
}
}
if
(
Duel
.
Player
==
0
)
{
CrystronNeedlefibereff_used
=
true
;
AI
.
SelectCard
(
CardId
.
GhostOgre
,
CardId
.
GlowUpBulb
,
CardId
.
PlaguespreaderZombie
,
CardId
.
ShaddollFalco
);
return
true
;
}
else
if
(
DarkHole
||
Util
.
IsChainTarget
(
Card
)
||
Util
.
GetProblematicEnemySpell
()
!=
null
)
{
AI
.
SelectCard
(
CardId
.
TG_WonderMagician
);
return
true
;
}
else
if
(
Duel
.
Player
==
1
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
Util
.
IsOneEnemyBetterThanValue
(
1500
,
true
))
{
AI
.
SelectCard
(
CardId
.
TG_WonderMagician
);
if
(
Util
.
IsOneEnemyBetterThanValue
(
1900
,
true
))
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
}
else
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
}
return
true
;
}
return
false
;
}
private
bool
ScarlightRedDragonsp
()
{
return
false
;
}
private
bool
ScarlightRedDragoneff
()
{
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
ClientCard
target1
=
Util
.
GetBestEnemyMonster
();
if
(
target1
!=
null
)
{
targets
.
Add
(
target1
);
AI
.
SelectCard
(
targets
);
return
true
;
}
return
false
;
}
private
bool
CrystalWingSynchroDragoneff
()
{
return
Duel
.
LastChainPlayer
!=
0
;
}
private
bool
Sdulldeateff
()
{
/* if (snake_four_s)
{
snake_four_s = false;
AI.SelectCard(Useless_List());
return true;
}
//if (ActivateDescription == Util.GetStringId(CardId.snake, 2)) return true;
if (ActivateDescription == Util.GetStringId(CardId.snake, 1))
{
foreach (ClientCard hand in Bot.Hand)
{
if (hand.IsCode(CardId.Red, CardId.Pink))
{
AI.SelectCard(hand);
return true;
}
if (hand.IsCode(CardId.Urara, CardId.Ghost))
{
if (Tuner_ss())
{
AI.SelectCard(hand);
return true;
}
}
}
}*/
return
false
;
}
private
bool
BlackRoseMoonlightDragoneff
()
{
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
ClientCard
target1
=
Util
.
GetBestEnemyMonster
();
if
(
target1
!=
null
)
{
targets
.
Add
(
target1
);
AI
.
SelectCard
(
targets
);
return
true
;
}
return
false
;
}
private
bool
RedWyvernsp
()
{
return
false
;
}
private
bool
RedWyverneff
()
{
IList
<
ClientCard
>
check
=
Enemy
.
GetMonsters
();
ClientCard
best
=
null
;
foreach
(
ClientCard
monster
in
check
)
{
if
(
monster
.
Attack
>=
2400
)
best
=
monster
;
}
if
(
best
!=
null
)
{
AI
.
SelectCard
(
best
);
return
true
;
}
return
false
;
}
private
bool
CoralDragoneff
()
{
if
(
Card
.
Location
!=
CardLocation
.
MonsterZone
)
return
true
;
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
ClientCard
target1
=
Util
.
GetBestEnemyMonster
();
if
(
target1
!=
null
)
targets
.
Add
(
target1
);
ClientCard
target2
=
Util
.
GetBestEnemySpell
();
if
(
target2
!=
null
)
targets
.
Add
(
target2
);
else
if
(
Util
.
IsChainTarget
(
Card
)
||
Util
.
GetProblematicEnemySpell
()
!=
null
)
{
AI
.
SelectCard
(
targets
);
return
true
;
}
else
if
(
Duel
.
Player
==
1
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
Util
.
IsOneEnemyBetterThanValue
(
2400
,
true
))
{
AI
.
SelectCard
(
targets
);
return
true
;
}
return
false
;
}
public
override
bool
OnPreBattleBetween
(
ClientCard
attacker
,
ClientCard
defender
)
{
if
(!
defender
.
IsMonsterHasPreventActivationEffectInBattle
())
{
if
(
attacker
.
IsCode
(
CardId
.
ElShaddollConstruct
)
&&
!
attacker
.
IsDisabled
())
// TODO: && defender.IsSpecialSummoned
attacker
.
RealPower
=
9999
;
if
(
attacker
.
IsCode
(
CardId
.
UltimateConductorTytanno
)
&&
!
attacker
.
IsDisabled
()
&&
defender
.
IsDefense
())
attacker
.
RealPower
=
9999
;
}
return
base
.
OnPreBattleBetween
(
attacker
,
defender
);
}
public
override
bool
OnSelectHand
()
{
return
true
;
}
/*
private bool GoblindberghSummon()
{
foreach (ClientCard card in Bot.Hand.GetMonsters())
{
if (!card.Equals(Card) && card.Level == 4)
return true;
}
return false;
}*/
}
}
\ No newline at end of file
Game/AI/Decks/TimeThiefExecutor.cs
View file @
3e8635b7
using
YGOSharp.OCGWrapper
;
using
YGOSharp.OCGWrapper.Enums
;
using
System.Collections.Generic
;
using
WindBot
;
using
WindBot.Game
;
using
WindBot.Game.AI
;
using
System.Linq
;
namespace
WindBot.Game.AI.Decks
{
[
Deck
(
"TimeThief"
,
"AI_Timethief"
)]
public
class
TimeThiefExecutor
:
DefaultExecutor
{
public
class
Monsters
{
//monsters
public
const
int
TimeThiefWinder
=
56308388
;
public
const
int
TimeThiefBezelShip
=
82496079
;
public
const
int
TimeThiefCronocorder
=
74578720
;
public
const
int
TimeThiefRegulator
=
19891131
;
public
const
int
PhotonTrasher
=
65367484
;
using
YGOSharp.OCGWrapper
;
using
YGOSharp.OCGWrapper.Enums
;
using
System.Collections.Generic
;
using
WindBot
;
using
WindBot.Game
;
using
WindBot.Game.AI
;
using
System.Linq
;
namespace
WindBot.Game.AI.Decks
{
[
Deck
(
"TimeThief"
,
"AI_Timethief"
)]
public
class
TimeThiefExecutor
:
DefaultExecutor
{
public
class
Monsters
{
//monsters
public
const
int
TimeThiefWinder
=
56308388
;
public
const
int
TimeThiefBezelShip
=
82496079
;
public
const
int
TimeThiefCronocorder
=
74578720
;
public
const
int
TimeThiefRegulator
=
19891131
;
public
const
int
PhotonTrasher
=
65367484
;
public
const
int
PerformTrickClown
=
67696066
;
public
const
int
ThunderKingRaiOh
=
71564252
;
public
const
int
MaxxC
=
23434538
;
public
const
int
AshBlossomAndJoyousSpring
=
14558127
;
public
const
int
MaxxC
=
23434538
;
public
const
int
AshBlossomAndJoyousSpring
=
14558127
;
}
public
class
CardId
public
class
CardId
{
public
const
int
ImperialOrder
=
61740673
;
public
const
int
NaturalExterio
=
99916754
;
public
const
int
NaturalBeast
=
33198837
;
public
const
int
SwordsmanLV7
=
37267041
;
public
const
int
NaturalExterio
=
99916754
;
public
const
int
NaturalBeast
=
33198837
;
public
const
int
SwordsmanLV7
=
37267041
;
public
const
int
RoyalDecreel
=
51452091
;
}
public
class
Spells
{
// spells
public
const
int
Raigeki
=
12580477
;
public
const
int
FoolishBurial
=
81439173
;
public
const
int
TimeThiefStartup
=
10877309
;
public
class
Spells
{
// spells
public
const
int
Raigeki
=
12580477
;
public
const
int
FoolishBurial
=
81439173
;
public
const
int
TimeThiefStartup
=
10877309
;
public
const
int
TimeThiefHack
=
81670445
;
public
const
int
HarpieFeatherDuster
=
18144506
;
public
const
int
HarpieFeatherDuster
=
18144506
;
public
const
int
PotOfDesires
=
35261759
;
public
const
int
PotofExtravagance
=
49238328
;
}
public
class
Traps
{
//traps
public
const
int
SolemnWarning
=
84749824
;
public
const
int
SolemStrike
=
40605147
;
public
const
int
SolemnJudgment
=
41420027
;
public
const
int
TimeThiefRetrograte
=
76587747
;
public
const
int
PhantomKnightsShade
=
98827725
;
public
const
int
PotofExtravagance
=
49238328
;
}
public
class
Traps
{
//traps
public
const
int
SolemnWarning
=
84749824
;
public
const
int
SolemStrike
=
40605147
;
public
const
int
SolemnJudgment
=
41420027
;
public
const
int
TimeThiefRetrograte
=
76587747
;
public
const
int
PhantomKnightsShade
=
98827725
;
public
const
int
TimeThiefFlyBack
=
18678554
;
public
const
int
Crackdown
=
36975314
;
}
public
class
XYZs
{
//xyz
public
const
int
TimeThiefRedoer
=
55285840
;
public
const
int
TimeThiefPerpetua
=
59208943
;
public
const
int
Crackdown
=
36975314
;
}
public
class
XYZs
{
//xyz
public
const
int
TimeThiefRedoer
=
55285840
;
public
const
int
TimeThiefPerpetua
=
59208943
;
public
const
int
CrazyBox
=
42421606
;
public
const
int
GagagaCowboy
=
12014404
;
public
const
int
Number39Utopia
=
84013237
;
public
const
int
NumberS39UtopiatheLightning
=
56832966
;
public
const
int
NumberS39UtopiaOne
=
86532744
;
public
const
int
NumberS39UtopiatheLightning
=
56832966
;
public
const
int
NumberS39UtopiaOne
=
86532744
;
public
const
int
DarkRebellionXyzDragon
=
16195942
;
public
const
int
EvilswarmExcitonKnight
=
46772449
;
public
const
int
EvilswarmExcitonKnight
=
46772449
;
}
public
TimeThiefExecutor
(
GameAI
ai
,
Duel
duel
)
:
base
(
ai
,
duel
)
public
TimeThiefExecutor
(
GameAI
ai
,
Duel
duel
)
:
base
(
ai
,
duel
)
{
// executors
//Spell activate
AddExecutor
(
ExecutorType
.
Activate
,
Spells
.
Raigeki
,
DefaultDarkHole
);
AddExecutor
(
ExecutorType
.
Activate
,
Spells
.
FoolishBurial
,
FoolishBurialTarget
);
AddExecutor
(
ExecutorType
.
Activate
,
Spells
.
TimeThiefStartup
,
TimeThiefStartupEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
Spells
.
Raigeki
,
DefaultDarkHole
);
AddExecutor
(
ExecutorType
.
Activate
,
Spells
.
FoolishBurial
,
FoolishBurialTarget
);
AddExecutor
(
ExecutorType
.
Activate
,
Spells
.
TimeThiefStartup
,
TimeThiefStartupEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
Spells
.
TimeThiefHack
);
AddExecutor
(
ExecutorType
.
Activate
,
Spells
.
PotofExtravagance
,
PotofExtravaganceActivate
);
AddExecutor
(
ExecutorType
.
Activate
,
Spells
.
HarpieFeatherDuster
,
DefaultHarpiesFeatherDusterFirst
);
AddExecutor
(
ExecutorType
.
Activate
,
Spells
.
PotOfDesires
,
PotOfDesireseff
);
// trap executors set
AddExecutor
(
ExecutorType
.
SpellSet
,
Traps
.
PhantomKnightsShade
);
AddExecutor
(
ExecutorType
.
SpellSet
,
Traps
.
TimeThiefRetrograte
);
AddExecutor
(
ExecutorType
.
Activate
,
Spells
.
HarpieFeatherDuster
,
DefaultHarpiesFeatherDusterFirst
);
AddExecutor
(
ExecutorType
.
Activate
,
Spells
.
PotOfDesires
,
PotOfDesireseff
);
// trap executors set
AddExecutor
(
ExecutorType
.
SpellSet
,
Traps
.
PhantomKnightsShade
);
AddExecutor
(
ExecutorType
.
SpellSet
,
Traps
.
TimeThiefRetrograte
);
AddExecutor
(
ExecutorType
.
SpellSet
,
Traps
.
TimeThiefFlyBack
);
AddExecutor
(
ExecutorType
.
SpellSet
,
Traps
.
SolemnWarning
);
AddExecutor
(
ExecutorType
.
SpellSet
,
Traps
.
SolemnWarning
);
AddExecutor
(
ExecutorType
.
SpellSet
,
Traps
.
SolemStrike
);
AddExecutor
(
ExecutorType
.
SpellSet
,
Traps
.
SolemnJudgment
);
AddExecutor
(
ExecutorType
.
SpellSet
,
Traps
.
Crackdown
);
//normal summons
AddExecutor
(
ExecutorType
.
Summon
,
Monsters
.
TimeThiefRegulator
);
AddExecutor
(
ExecutorType
.
SpSummon
,
Monsters
.
PhotonTrasher
,
SummonToDef
);
AddExecutor
(
ExecutorType
.
Summon
,
Monsters
.
TimeThiefWinder
);
AddExecutor
(
ExecutorType
.
Summon
,
Monsters
.
TimeThiefBezelShip
);
AddExecutor
(
ExecutorType
.
Summon
,
Monsters
.
PerformTrickClown
);
AddExecutor
(
ExecutorType
.
SpellSet
,
Traps
.
Crackdown
);
//normal summons
AddExecutor
(
ExecutorType
.
Summon
,
Monsters
.
TimeThiefRegulator
);
AddExecutor
(
ExecutorType
.
SpSummon
,
Monsters
.
PhotonTrasher
,
SummonToDef
);
AddExecutor
(
ExecutorType
.
Summon
,
Monsters
.
TimeThiefWinder
);
AddExecutor
(
ExecutorType
.
Summon
,
Monsters
.
TimeThiefBezelShip
);
AddExecutor
(
ExecutorType
.
Summon
,
Monsters
.
PerformTrickClown
);
AddExecutor
(
ExecutorType
.
Summon
,
Monsters
.
TimeThiefCronocorder
);
AddExecutor
(
ExecutorType
.
Summon
,
Monsters
.
ThunderKingRaiOh
,
ThunderKingRaiOhsummon
);
//xyz summons
AddExecutor
(
ExecutorType
.
SpSummon
,
XYZs
.
TimeThiefRedoer
);
AddExecutor
(
ExecutorType
.
Summon
,
Monsters
.
ThunderKingRaiOh
,
ThunderKingRaiOhsummon
);
//xyz summons
AddExecutor
(
ExecutorType
.
SpSummon
,
XYZs
.
TimeThiefRedoer
);
AddExecutor
(
ExecutorType
.
SpSummon
,
XYZs
.
TimeThiefPerpetua
);
AddExecutor
(
ExecutorType
.
SpSummon
,
XYZs
.
EvilswarmExcitonKnight
,
DefaultEvilswarmExcitonKnightSummon
);
AddExecutor
(
ExecutorType
.
SpSummon
,
XYZs
.
EvilswarmExcitonKnight
,
DefaultEvilswarmExcitonKnightSummon
);
AddExecutor
(
ExecutorType
.
SpSummon
,
XYZs
.
GagagaCowboy
,
GagagaCowboySummon
);
AddExecutor
(
ExecutorType
.
SpSummon
,
XYZs
.
Number39Utopia
,
DefaultNumberS39UtopiaTheLightningSummon
);
AddExecutor
(
ExecutorType
.
SpSummon
,
XYZs
.
NumberS39UtopiaOne
);
AddExecutor
(
ExecutorType
.
SpSummon
,
XYZs
.
Number39Utopia
,
DefaultNumberS39UtopiaTheLightningSummon
);
AddExecutor
(
ExecutorType
.
SpSummon
,
XYZs
.
NumberS39UtopiaOne
);
AddExecutor
(
ExecutorType
.
SpSummon
,
XYZs
.
NumberS39UtopiatheLightning
);
AddExecutor
(
ExecutorType
.
SpSummon
,
XYZs
.
DarkRebellionXyzDragon
,
DarkRebellionXyzDragonSummon
);
//activate trap
AddExecutor
(
ExecutorType
.
Activate
,
Traps
.
PhantomKnightsShade
);
AddExecutor
(
ExecutorType
.
Activate
,
Traps
.
TimeThiefRetrograte
,
RetrograteEffect
);
AddExecutor
(
ExecutorType
.
SpSummon
,
XYZs
.
DarkRebellionXyzDragon
,
DarkRebellionXyzDragonSummon
);
//activate trap
AddExecutor
(
ExecutorType
.
Activate
,
Traps
.
PhantomKnightsShade
);
AddExecutor
(
ExecutorType
.
Activate
,
Traps
.
TimeThiefRetrograte
,
RetrograteEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
Traps
.
TimeThiefFlyBack
);
AddExecutor
(
ExecutorType
.
Activate
,
Traps
.
SolemnWarning
,
DefaultSolemnWarning
);
AddExecutor
(
ExecutorType
.
Activate
,
Traps
.
SolemnWarning
,
DefaultSolemnWarning
);
AddExecutor
(
ExecutorType
.
Activate
,
Traps
.
SolemStrike
,
DefaultSolemnStrike
);
AddExecutor
(
ExecutorType
.
Activate
,
Traps
.
SolemnJudgment
,
DefaultSolemnJudgment
);
AddExecutor
(
ExecutorType
.
Activate
,
Traps
.
Crackdown
,
Crackdowneff
);
//xyz effects
AddExecutor
(
ExecutorType
.
Activate
,
XYZs
.
TimeThiefRedoer
,
RedoerEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
Traps
.
SolemnJudgment
,
DefaultSolemnJudgment
);
AddExecutor
(
ExecutorType
.
Activate
,
Traps
.
Crackdown
,
Crackdowneff
);
//xyz effects
AddExecutor
(
ExecutorType
.
Activate
,
XYZs
.
TimeThiefRedoer
,
RedoerEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
XYZs
.
TimeThiefPerpetua
,
PerpertuaEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
XYZs
.
EvilswarmExcitonKnight
,
DefaultEvilswarmExcitonKnightEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
XYZs
.
EvilswarmExcitonKnight
,
DefaultEvilswarmExcitonKnightEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
XYZs
.
GagagaCowboy
);
AddExecutor
(
ExecutorType
.
Activate
,
XYZs
.
NumberS39UtopiatheLightning
,
DefaultNumberS39UtopiaTheLightningEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
XYZs
.
NumberS39UtopiatheLightning
,
DefaultNumberS39UtopiaTheLightningEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
XYZs
.
DarkRebellionXyzDragon
,
DarkRebellionXyzDragonEffect
);
//monster effects
AddExecutor
(
ExecutorType
.
Activate
,
Monsters
.
TimeThiefRegulator
,
RegulatorEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
Monsters
.
TimeThiefWinder
);
AddExecutor
(
ExecutorType
.
Activate
,
Monsters
.
TimeThiefCronocorder
);
AddExecutor
(
ExecutorType
.
Activate
,
Monsters
.
PerformTrickClown
,
TrickClownEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
Monsters
.
TimeThiefRegulator
,
RegulatorEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
Monsters
.
TimeThiefWinder
);
AddExecutor
(
ExecutorType
.
Activate
,
Monsters
.
TimeThiefCronocorder
);
AddExecutor
(
ExecutorType
.
Activate
,
Monsters
.
PerformTrickClown
,
TrickClownEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
Monsters
.
TimeThiefBezelShip
);
AddExecutor
(
ExecutorType
.
Activate
,
Monsters
.
ThunderKingRaiOh
,
ThunderKingRaiOheff
);
AddExecutor
(
ExecutorType
.
Activate
,
Monsters
.
AshBlossomAndJoyousSpring
,
DefaultAshBlossomAndJoyousSpring
);
AddExecutor
(
ExecutorType
.
Activate
,
Monsters
.
MaxxC
,
DefaultMaxxC
);
AddExecutor
(
ExecutorType
.
Activate
,
Monsters
.
AshBlossomAndJoyousSpring
,
DefaultAshBlossomAndJoyousSpring
);
AddExecutor
(
ExecutorType
.
Activate
,
Monsters
.
MaxxC
,
DefaultMaxxC
);
}
public
void
SelectSTPlace
(
ClientCard
card
=
null
,
bool
avoid_Impermanence
=
false
,
List
<
int
>
avoid_list
=
null
)
{
List
<
int
>
list
=
new
List
<
int
>
{
0
,
1
,
2
,
3
,
4
};
int
n
=
list
.
Count
;
while
(
n
--
>
1
)
{
int
index
=
Program
.
Rand
.
Next
(
n
+
1
);
int
temp
=
list
[
index
];
list
[
index
]
=
list
[
n
];
list
[
n
]
=
temp
;
}
foreach
(
int
seq
in
list
)
{
int
zone
=
(
int
)
System
.
Math
.
Pow
(
2
,
seq
);
if
(
Bot
.
SpellZone
[
seq
]
==
null
)
{
if
(
card
!=
null
&&
card
.
Location
==
CardLocation
.
Hand
&&
avoid_Impermanence
)
continue
;
if
(
avoid_list
!=
null
&&
avoid_list
.
Contains
(
seq
))
continue
;
AI
.
SelectPlace
(
zone
);
return
;
};
}
AI
.
SelectPlace
(
0
);
}
public
bool
SpellNegatable
(
bool
isCounter
=
false
,
ClientCard
target
=
null
)
{
// target default set
if
(
target
==
null
)
target
=
Card
;
// won't negate if not on field
if
(
target
.
Location
!=
CardLocation
.
SpellZone
&&
target
.
Location
!=
CardLocation
.
Hand
)
return
false
;
// negate judge
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
NaturalExterio
,
true
)
&&
!
isCounter
)
return
true
;
if
(
target
.
IsSpell
())
{
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
NaturalBeast
,
true
))
return
true
;
if
(
Enemy
.
HasInSpellZone
(
CardId
.
ImperialOrder
,
true
)
||
Bot
.
HasInSpellZone
(
CardId
.
ImperialOrder
,
true
))
return
true
;
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
SwordsmanLV7
,
true
)
||
Bot
.
HasInMonstersZone
(
CardId
.
SwordsmanLV7
,
true
))
return
true
;
}
if
(
target
.
IsTrap
())
{
if
(
Enemy
.
HasInSpellZone
(
CardId
.
RoyalDecreel
,
true
)
||
Bot
.
HasInSpellZone
(
CardId
.
RoyalDecreel
,
true
))
return
true
;
}
// how to get here?
return
false
;
}
private
bool
SummonToDef
()
{
AI
.
SelectPosition
(
CardPosition
.
Defence
);
return
true
;
}
private
bool
RegulatorEffect
()
{
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
AI
.
SelectCard
(
Monsters
.
TimeThiefCronocorder
);
AI
.
SelectCard
(
Monsters
.
TimeThiefWinder
);
return
true
;
}
if
(
Card
.
Location
==
CardLocation
.
Grave
)
{
return
true
;
}
return
false
;
}
public
void
SelectSTPlace
(
ClientCard
card
=
null
,
bool
avoid_Impermanence
=
false
,
List
<
int
>
avoid_list
=
null
)
{
List
<
int
>
list
=
new
List
<
int
>
{
0
,
1
,
2
,
3
,
4
};
int
n
=
list
.
Count
;
while
(
n
--
>
1
)
{
int
index
=
Program
.
Rand
.
Next
(
n
+
1
);
int
temp
=
list
[
index
];
list
[
index
]
=
list
[
n
];
list
[
n
]
=
temp
;
}
foreach
(
int
seq
in
list
)
{
int
zone
=
(
int
)
System
.
Math
.
Pow
(
2
,
seq
);
if
(
Bot
.
SpellZone
[
seq
]
==
null
)
{
if
(
card
!=
null
&&
card
.
Location
==
CardLocation
.
Hand
&&
avoid_Impermanence
)
continue
;
if
(
avoid_list
!=
null
&&
avoid_list
.
Contains
(
seq
))
continue
;
AI
.
SelectPlace
(
zone
);
return
;
};
}
AI
.
SelectPlace
(
0
);
private
bool
PerpertuaEffect
()
{
if
(
Bot
.
HasInGraveyard
(
XYZs
.
TimeThiefRedoer
))
{
AI
.
SelectCard
(
XYZs
.
TimeThiefRedoer
);
return
true
;
}
if
(
Bot
.
HasInMonstersZone
(
XYZs
.
TimeThiefRedoer
))
{
AI
.
SelectCard
(
Monsters
.
TimeThiefBezelShip
);
AI
.
SelectNextCard
(
XYZs
.
TimeThiefRedoer
);
return
true
;
}
return
false
;
}
public
bool
SpellNegatable
(
bool
isCounter
=
false
,
ClientCard
target
=
null
)
{
// target default set
if
(
target
==
null
)
target
=
Card
;
// won't negate if not on field
if
(
target
.
Location
!=
CardLocation
.
SpellZone
&&
target
.
Location
!=
CardLocation
.
Hand
)
return
false
;
// negate judge
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
NaturalExterio
,
true
)
&&
!
isCounter
)
return
true
;
if
(
target
.
IsSpell
())
{
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
NaturalBeast
,
true
))
return
true
;
if
(
Enemy
.
HasInSpellZone
(
CardId
.
ImperialOrder
,
true
)
||
Bot
.
HasInSpellZone
(
CardId
.
ImperialOrder
,
true
))
return
true
;
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
SwordsmanLV7
,
true
)
||
Bot
.
HasInMonstersZone
(
CardId
.
SwordsmanLV7
,
true
))
return
true
;
}
if
(
target
.
IsTrap
())
{
if
(
Enemy
.
HasInSpellZone
(
CardId
.
RoyalDecreel
,
true
)
||
Bot
.
HasInSpellZone
(
CardId
.
RoyalDecreel
,
true
))
return
true
;
}
// how to get here?
return
false
;
}
private
bool
SummonToDef
()
{
AI
.
SelectPosition
(
CardPosition
.
Defence
);
return
true
;
}
private
bool
RegulatorEffect
()
{
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
AI
.
SelectCard
(
Monsters
.
TimeThiefCronocorder
);
AI
.
SelectCard
(
Monsters
.
TimeThiefWinder
);
return
true
;
}
if
(
Card
.
Location
==
CardLocation
.
Grave
)
{
return
true
;
}
return
false
;
}
private
bool
PerpertuaEffect
()
{
if
(
Bot
.
HasInGraveyard
(
XYZs
.
TimeThiefRedoer
))
{
AI
.
SelectCard
(
XYZs
.
TimeThiefRedoer
);
return
true
;
}
if
(
Bot
.
HasInMonstersZone
(
XYZs
.
TimeThiefRedoer
))
{
AI
.
SelectCard
(
Monsters
.
TimeThiefBezelShip
);
AI
.
SelectNextCard
(
XYZs
.
TimeThiefRedoer
);
return
true
;
}
return
false
;
}
private
int
_totalAttack
;
private
int
_totalBotAttack
;
private
bool
RedoerEffect
()
{
List
<
ClientCard
>
enemy
=
Enemy
.
GetMonstersInMainZone
();
List
<
int
>
units
=
Card
.
Overlays
;
if
(
Duel
.
Phase
==
DuelPhase
.
Standby
&&
(
AI
.
Executor
.
Util
.
GetStringId
(
XYZs
.
TimeThiefRedoer
,
0
)
==
ActivateDescription
))
private
int
_totalAttack
;
private
int
_totalBotAttack
;
private
bool
RedoerEffect
()
{
List
<
ClientCard
>
enemy
=
Enemy
.
GetMonstersInMainZone
();
List
<
int
>
units
=
Card
.
Overlays
;
if
(
Duel
.
Phase
==
DuelPhase
.
Standby
&&
(
AI
.
Executor
.
Util
.
GetStringId
(
XYZs
.
TimeThiefRedoer
,
0
)
==
ActivateDescription
))
{
return
true
;
}
try
{
for
(
int
i
=
0
;
i
<
enemy
.
Count
;
i
++)
{
_totalAttack
+=
enemy
[
i
].
Attack
;
}
foreach
(
var
t
in
Bot
.
GetMonsters
())
{
_totalBotAttack
+=
t
.
Attack
;
}
if
(
_totalAttack
>
Bot
.
LifePoints
+
_totalBotAttack
)
{
return
false
;
return
true
;
}
try
{
for
(
int
i
=
0
;
i
<
enemy
.
Count
;
i
++)
{
_totalAttack
+=
enemy
[
i
].
Attack
;
}
foreach
(
var
t
in
Bot
.
GetMonsters
())
{
_totalBotAttack
+=
t
.
Attack
;
}
if
(
_totalAttack
>
Bot
.
LifePoints
+
_totalBotAttack
)
{
return
false
;
}
foreach
(
var
t
in
enemy
)
{
if
(
t
.
Attack
<
2400
||
!
t
.
IsAttack
())
continue
;
try
{
AI
.
SelectCard
(
t
.
Id
);
AI
.
SelectCard
(
t
.
Id
);
}
catch
{
}
return
true
;
}
}
catch
{
}
if
(
Bot
.
UnderAttack
)
{
//AI.SelectCard(Util.GetBestEnemyMonster());
return
true
;
}
foreach
(
var
t
in
enemy
)
{
if
(
t
.
Attack
<
2400
||
!
t
.
IsAttack
())
continue
;
try
{
AI
.
SelectCard
(
t
.
Id
);
AI
.
SelectCard
(
t
.
Id
);
}
catch
{
}
return
true
;
}
}
catch
{
}
if
(
Bot
.
UnderAttack
)
{
//AI.SelectCard(Util.GetBestEnemyMonster());
return
true
;
}
return
false
;
}
private
bool
RetrograteEffect
()
{
if
(
Card
.
Owner
==
1
)
{
return
true
;
}
}
private
bool
RetrograteEffect
()
{
if
(
Card
.
Owner
==
1
)
{
return
true
;
}
return
false
;
}
private
bool
TimeThiefStartupEffect
()
{
if
(
Card
.
Location
==
CardLocation
.
Hand
)
{
if
(
Bot
.
HasInHand
(
Monsters
.
TimeThiefRegulator
)
&&
!(
Bot
.
GetMonsterCount
()
>
0
))
{
AI
.
SelectCard
(
Monsters
.
TimeThiefRegulator
);
return
true
;
}
if
(
Bot
.
HasInHand
(
Monsters
.
TimeThiefWinder
)
&&
Bot
.
GetMonsterCount
()
>
1
)
{
AI
.
SelectCard
(
Monsters
.
TimeThiefWinder
);
return
true
;
}
}
private
bool
TimeThiefStartupEffect
()
{
if
(
Card
.
Location
==
CardLocation
.
Hand
)
{
if
(
Bot
.
HasInHand
(
Monsters
.
TimeThiefRegulator
)
&&
!(
Bot
.
GetMonsterCount
()
>
0
))
{
AI
.
SelectCard
(
Monsters
.
TimeThiefRegulator
);
return
true
;
}
if
(
Bot
.
HasInHand
(
Monsters
.
TimeThiefWinder
)
&&
Bot
.
GetMonsterCount
()
>
1
)
{
AI
.
SelectCard
(
Monsters
.
TimeThiefWinder
);
return
true
;
}
return
true
;
}
if
(
Card
.
Location
==
CardLocation
.
Grave
)
{
AI
.
SelectCard
(
Monsters
.
TimeThiefCronocorder
);
AI
.
SelectCard
(
Spells
.
TimeThiefHack
);
AI
.
SelectCard
(
Traps
.
TimeThiefFlyBack
);
return
true
;
}
if
(
Card
.
Location
==
CardLocation
.
Grave
)
{
AI
.
SelectCard
(
Monsters
.
TimeThiefCronocorder
);
AI
.
SelectCard
(
Spells
.
TimeThiefHack
);
AI
.
SelectCard
(
Traps
.
TimeThiefFlyBack
);
return
true
;
}
return
false
;
}
private
bool
FoolishBurialTarget
()
{
AI
.
SelectCard
(
Monsters
.
PerformTrickClown
);
return
true
;
}
private
bool
FoolishBurialTarget
()
{
AI
.
SelectCard
(
Monsters
.
PerformTrickClown
);
return
true
;
}
private
bool
TrickClownEffect
()
{
if
(
Bot
.
LifePoints
<=
1000
)
{
return
false
;
}
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
}
private
bool
GagagaCowboySummon
()
{
if
(
Enemy
.
LifePoints
<=
800
||
(
Bot
.
GetMonsterCount
()
>=
4
&&
Enemy
.
LifePoints
<=
1600
))
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
}
return
false
;
}
private
bool
TrickClownEffect
()
{
if
(
Bot
.
LifePoints
<=
1000
)
{
return
false
;
}
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
private
bool
DarkRebellionXyzDragonSummon
()
{
int
selfBestAttack
=
Util
.
GetBestAttack
(
Bot
);
int
oppoBestAttack
=
Util
.
GetBestAttack
(
Enemy
);
return
selfBestAttack
<=
oppoBestAttack
;
}
private
bool
GagagaCowboySummon
()
{
if
(
Enemy
.
LifePoints
<=
800
||
(
Bot
.
GetMonsterCount
()
>=
4
&&
Enemy
.
LifePoints
<=
1600
))
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
}
return
false
;
}
private
bool
DarkRebellionXyzDragonSummon
()
{
int
selfBestAttack
=
Util
.
GetBestAttack
(
Bot
);
int
oppoBestAttack
=
Util
.
GetBestAttack
(
Enemy
);
return
selfBestAttack
<=
oppoBestAttack
;
}
private
bool
DarkRebellionXyzDragonEffect
()
{
int
oppoBestAttack
=
Util
.
GetBestAttack
(
Enemy
);
ClientCard
target
=
Util
.
GetOneEnemyBetterThanValue
(
oppoBestAttack
,
true
);
if
(
target
!=
null
)
{
AI
.
SelectCard
(
0
);
AI
.
SelectNextCard
(
target
);
}
private
bool
DarkRebellionXyzDragonEffect
()
{
int
oppoBestAttack
=
Util
.
GetBestAttack
(
Enemy
);
ClientCard
target
=
Util
.
GetOneEnemyBetterThanValue
(
oppoBestAttack
,
true
);
if
(
target
!=
null
)
{
AI
.
SelectCard
(
0
);
AI
.
SelectNextCard
(
target
);
}
return
true
;
}
private
bool
ThunderKingRaiOhsummon
()
}
private
bool
ThunderKingRaiOhsummon
()
{
if
(
Bot
.
MonsterZone
[
0
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z0
);
else
AI
.
SelectPlace
(
Zones
.
z4
);
return
true
;
}
private
bool
ThunderKingRaiOheff
()
if
(
Bot
.
MonsterZone
[
0
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z0
);
else
AI
.
SelectPlace
(
Zones
.
z4
);
return
true
;
}
private
bool
ThunderKingRaiOheff
()
{
if
(
Duel
.
SummoningCards
.
Count
>
0
)
{
foreach
(
ClientCard
m
in
Duel
.
SummoningCards
)
{
if
(
m
.
Attack
>=
1900
)
return
true
;
{
foreach
(
ClientCard
m
in
Duel
.
SummoningCards
)
{
if
(
m
.
Attack
>=
1900
)
return
true
;
}
}
return
false
;
return
false
;
}
private
bool
Crackdowneff
()
{
if
(
Util
.
GetOneEnemyBetterThanMyBest
(
true
,
true
)
!=
null
&&
Bot
.
UnderAttack
)
AI
.
SelectCard
(
Util
.
GetOneEnemyBetterThanMyBest
(
true
,
true
));
return
Util
.
GetOneEnemyBetterThanMyBest
(
true
,
true
)
!=
null
&&
Bot
.
UnderAttack
;
}
private
bool
Crackdowneff
()
{
if
(
Util
.
GetOneEnemyBetterThanMyBest
(
true
,
true
)
!=
null
&&
Bot
.
UnderAttack
)
AI
.
SelectCard
(
Util
.
GetOneEnemyBetterThanMyBest
(
true
,
true
));
return
Util
.
GetOneEnemyBetterThanMyBest
(
true
,
true
)
!=
null
&&
Bot
.
UnderAttack
;
private
bool
PotOfDesireseff
()
{
return
Bot
.
Deck
.
Count
>
14
&&
!
DefaultSpellWillBeNegated
();
}
private
bool
PotOfDesireseff
()
// activate of PotofExtravagance
public
bool
PotofExtravaganceActivate
()
{
return
Bot
.
Deck
.
Count
>
14
&&
!
DefaultSpellWillBeNegated
();
}
// activate of PotofExtravagance
public
bool
PotofExtravaganceActivate
()
{
// won't activate if it'll be negate
if
(
SpellNegatable
())
return
false
;
SelectSTPlace
(
Card
,
true
);
AI
.
SelectOption
(
1
);
return
true
;
}
}
}
// won't activate if it'll be negate
if
(
SpellNegatable
())
return
false
;
SelectSTPlace
(
Card
,
true
);
AI
.
SelectOption
(
1
);
return
true
;
}
}
}
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