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
YSP
windbot
Commits
e4fd80a7
Commit
e4fd80a7
authored
Mar 21, 2024
by
wind2009
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'upstream/master' into mc_master
parents
ec4143e5
a75d41f0
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
1255 additions
and
2 deletions
+1255
-2
BotWrapper/bot.conf
BotWrapper/bot.conf
+5
-0
Decks/AI_SuperheavySamurai.ydk
Decks/AI_SuperheavySamurai.ydk
+59
-0
Dialogs/superheavysamurai.zh-CN.json
Dialogs/superheavysamurai.zh-CN.json
+45
-0
Game/AI/AIUtil.cs
Game/AI/AIUtil.cs
+9
-0
Game/AI/Decks/SuperheavySamuraiExecutor.cs
Game/AI/Decks/SuperheavySamuraiExecutor.cs
+1134
-0
WindBot.csproj
WindBot.csproj
+3
-2
No files found.
BotWrapper/bot.conf
View file @
e4fd80a7
...
...
@@ -233,3 +233,8 @@ AI_LV3 SUPPORT_MASTER_RULE_2020
Name
=神数不神
Deck
=
Zefra
Dialog
=
Zefra
.
zh
-
CN
神数卡组。
AI_LV3
SUPPORT_MASTER_RULE_2020
!今晚有宵夜吗-超重武者
Name
=今晚有宵夜吗
Deck
=
SuperheavySamurai
Dialog
=
superheavysamurai
.
zh
-
CN
超重武者卡组。
AI_LV3
SUPPORT_MASTER_RULE_2020
Decks/AI_SuperheavySamurai.ydk
0 → 100644
View file @
e4fd80a7
#created by ...
#main
83334932
83334932
83334932
82112494
82112494
82112494
19510093
19510093
34496660
34496660
34496660
90361010
90361010
90361010
78391364
78391364
56727340
56727340
14624296
95500396
10604644
23434538
23434538
23434538
14558127
14558127
14558127
49036338
38814750
38814750
97268402
97268402
73642296
73642296
59438930
59438930
59438930
94145021
94145021
94145021
#extra
64193046
84815190
30983281
44508094
27548199
76471944
74586817
28912357
38342335
27381364
22423493
65741786
33918636
33918636
33918636
!side
Dialogs/superheavysamurai.zh-CN.json
0 → 100644
View file @
e4fd80a7
{
"welcome"
:
[
"是宵夜哒哟!"
,
"什么灵摆卡组都会玩的哟!"
,
"什么?你说超重不是灵摆卡组?"
],
"deckerror"
:
[
"{0}的数量不对!快去改成无禁限模式!。"
],
"duelstart"
:
[
"给你展现一下超重的魅力!"
],
"newturn"
:
[
"抽卡!弁庆你别上手救我了!"
,
"抽卡!P身子你别上手救我了!"
],
"endturn"
:
[
"哼哼,到你的回合了!"
,
"喜不喜欢我的展开呢?"
],
"directattack"
:
[
"我用{0}直接攻击!"
],
"attack"
:
[
"我用{0}攻击{1}!"
],
"ondirectattack"
:
[
"不许打!不许打呀!"
,
"呜哇!要被打倒惹~"
],
"facedownmonstername"
:
"怪兽"
,
"activate"
:
[
"呼呼呼,{0}的效果太厉害了!"
,
"呼呼呼,我使用{0}的效果。"
],
"summon"
:
[
"呼呼呼,我召唤{0}!"
],
"setmonster"
:
[
"呼呼呼,我盖放了一只怪兽。"
],
"chaining"
:
[
"此刻!{0}的效果发动!"
]
}
Game/AI/AIUtil.cs
View file @
e4fd80a7
...
...
@@ -434,6 +434,15 @@ namespace WindBot.Game.AI
if
(
selected
.
Count
>=
max
)
break
;
}
if
(
selected
.
Count
<
min
)
{
#if DEBUG
throw
new
Exception
(
"Not enough cards to CheckSelectCount"
);
#else
Logger
.
WriteErrorLine
(
"Not enough cards to CheckSelectCount, using default"
);
return
null
;
#endif
}
}
while
(
selected
.
Count
>
max
)
{
...
...
Game/AI/Decks/SuperheavySamuraiExecutor.cs
0 → 100644
View file @
e4fd80a7
using
YGOSharp.OCGWrapper
;
using
YGOSharp.OCGWrapper.Enums
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System
;
using
WindBot
;
using
WindBot.Game
;
using
WindBot.Game.AI
;
namespace
WindBot.Game.AI.Decks
{
[
Deck
(
"SuperheavySamurai"
,
"AI_SuperheavySamurai"
)]
public
class
SuperheavySamuraiExecutor
:
DefaultExecutor
{
public
class
CardId
{
public
const
int
Benkei
=
19510093
;
//弁庆
public
const
int
Wagon
=
34496660
;
//大八
public
const
int
Soulpiercer
=
90361010
;
//岩融
public
const
int
Wakaushi
=
82112494
;
//牛若
public
const
int
Scales
=
78391364
;
//天秤
public
const
int
Booster
=
56727340
;
//地铠
public
const
int
Motorbike
=
83334932
;
//摩托
public
const
int
Soulhorns
=
14624296
;
//双角
public
const
int
Soulpeacemaker
=
95500396
;
//仲裁
public
const
int
Regulus
=
10604644
;
//轩辕十四
public
const
int
MaxxG
=
23434538
;
//增殖的G
public
const
int
JoyousSpring
=
14558127
;
//灰流丽
public
const
int
PsyFrameDriver
=
49036338
;
//PSY骨架驱动者
public
const
int
PsyFramegearGamma
=
38814750
;
//PSY骨架装备·γ
public
const
int
EffectVeiler
=
97268402
;
//效果遮蒙者
public
const
int
HauntedMansion
=
73642296
;
//屋敷童
public
const
int
SnowRabbit
=
59438930
;
//幽鬼兔
public
const
int
LockBird
=
94145021
;
//小丑与锁鸟
//extra
public
const
int
Masurawo
=
64193046
;
//益荒男
public
const
int
Fleur
=
84815190
;
//鲜花女男爵
public
const
int
ASStardustDragon
=
30983281
;
//加速同调星尘龙
public
const
int
StardustDragon
=
30983281
;
//星尘龙
public
const
int
SavageDragon
=
27548199
;
//狞猛龙
public
const
int
Sarutobi
=
76471944
;
//猿飞
public
const
int
PSYFramelordOmega
=
74586817
;
//PSY骨架王·Ω
public
const
int
GearGigant
=
28912357
;
//齿轮齿巨人
public
const
int
Unicorn
=
38342335
;
//独角兽
public
const
int
Elf
=
27381364
;
//卫星闪灵·淘气精灵
public
const
int
Genius
=
22423493
;
//路径灵
public
const
int
IP
=
65741786
;
//I:P伪装舞会莱娜
public
const
int
Scarecrow
=
33918636
;
//案山子
}
private
bool
normal_summon
=
false
;
private
bool
p_summoned
=
false
;
private
bool
p_summoning
=
false
;
private
bool
activate_Motorbike
=
false
;
//摩托
private
bool
activate_Wakaushi
=
false
;
//神童
private
bool
activate_Scales
=
false
;
//天秤
private
bool
activate_Wagon
=
false
;
//大巴
private
bool
activate_Booster
=
false
;
//地铠
private
bool
activate_Soulpeacemaker
=
false
;
//仲裁
private
bool
activate_Benkei
=
false
;
//弁庆
private
bool
need_Gear
=
false
;
//齿轮齿巨人
//案山子
private
bool
activate_Scarecrow
=
false
;
private
bool
summon_Scarecrow
=
false
;
private
bool
activate_Sarutobi
=
false
;
//猿飞
private
bool
activate_Genius
=
false
;
//路径灵
//淘气精灵
private
bool
activate_Elf
=
false
;
private
bool
summon_Elf
=
false
;
//手坑
private
bool
activate_MaxxG
=
false
;
//增殖的G
private
bool
activate_PSY
=
false
;
//PSY
private
bool
activate_LockBird
=
false
;
//小丑与锁鸟
private
bool
to_deck
=
false
;
public
SuperheavySamuraiExecutor
(
GameAI
ai
,
Duel
duel
)
:
base
(
ai
,
duel
)
{
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
PSYFramelordOmega
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
IP
,
IPFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Sarutobi
,
SarutobiFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Unicorn
,
UnicornFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MaxxG
,
MaxxCFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
JoyousSpring
,
DefaultAshBlossomAndJoyousSpring
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SnowRabbit
,
DefaultGhostOgreAndSnowRabbit
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
EffectVeiler
,
DefaultBreakthroughSkill
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
LockBird
,
LockBirdFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
PsyFramegearGamma
,
FunctionInHand
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
HauntedMansion
,
FunctionInHand
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Masurawo
,
MasurawoFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Genius
,
GeniusFunction
);
//Motorbike's Effect
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Motorbike
,
MotorbikeFunction
);
//Scales's Effect
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Scales
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Scales
,
ScalesFunction
);
//Synchron
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
ASStardustDragon
,
ASStardustDragonSynchronFunction2
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Fleur
,
FleurSynchronFunction2
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Wakaushi
,
WakaushiFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Wakaushi
,
WakaushiEffectFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Benkei
,
BenkeiEffectFunction
);
//Normal Summon & Effect
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Soulpiercer
,
NormalSummonFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Soulpiercer
,
SoulpiercerFunction
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Wagon
,
NormalSummonFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Wagon
,
WagonFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Wagon
,
WagonFunction
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Booster
,
BoosterNormalSummonFunction
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Scales
,
ScalesNormalSummonFunction
);
//boost & Gear
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Booster
,
BoosterEquipFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Booster
,
BoosterFunction
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
GearGigant
,
GearGigantXyzFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
GearGigant
,
GearGigantFunction
);
//equip Soulpiercer
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Soulpiercer
,
SoulpiercerEquipFunction
);
//Link Scarecrow
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Scarecrow
,
ScarecrowLinkFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Scarecrow
,
ScarecrowFunction
);
//Synchron
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
ASStardustDragon
,
ASStardustDragonSynchronFunction
);
//Effect After Synchron
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SavageDragon
,
SavageDragonFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ASStardustDragon
,
ASStardustDragonFunction
);
//Wakaushi's Effect After Synchron
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Wakaushi
,
WakaushiReturnPFunction
);
//Synchron
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Fleur
,
FleurSynchronFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Fleur
,
FleurFunction
);
//equip Soulpeacemaker
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Soulpeacemaker
,
SoulpeacemakerEquipFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Soulpeacemaker
,
SoulpeacemakerFunction
);
//Link
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Genius
,
GeniusLinkFunction
);
AddExecutor
(
ExecutorType
.
SpSummon
,
Psummon
);
//Link
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Elf
,
ElfLinkFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Elf
,
ElfFunction
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Motorbike
,
MotorbikeFunction
);
//Regulus's Effect
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Regulus
,
RegulusFunction
);
//Synchron
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
SavageDragon
,
SavageDragonSynchronFunction
);
//Link
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
IP
,
IPLinkFunction
);
//Synchron
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Masurawo
,
MasurawoSynchronFunction
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Sarutobi
,
DeSynchronFunction
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
PSYFramelordOmega
);
//equip Soulhorns
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Soulhorns
,
SoulhornsEquipFunction
);
//booster
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Booster
,
BoosterEquipFunction2
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Booster
,
BoosterFunction
);
}
public
override
void
OnNewTurn
()
{
normal_summon
=
false
;
p_summoned
=
false
;
p_summoning
=
false
;
activate_Motorbike
=
false
;
activate_Wakaushi
=
false
;
activate_Scales
=
false
;
activate_Wagon
=
false
;
activate_Booster
=
false
;
activate_Soulpeacemaker
=
false
;
activate_Benkei
=
false
;
need_Gear
=
false
;
activate_Scarecrow
=
false
;
summon_Scarecrow
=
false
;
activate_Elf
=
false
;
summon_Elf
=
false
;
activate_MaxxG
=
false
;
activate_PSY
=
false
;
activate_LockBird
=
false
;
activate_Genius
=
false
;
activate_Sarutobi
=
false
;
to_deck
=
false
;
}
public
override
bool
OnSelectHand
()
{
return
true
;
}
public
override
int
OnSelectPlace
(
int
cardId
,
int
player
,
CardLocation
location
,
int
available
)
{
if
(
player
==
0
&&
location
==
CardLocation
.
MonsterZone
)
{
if
(
cardId
==
CardId
.
Scarecrow
)
{
int
a
=(
Zones
.
z6
&
available
);
int
b
=(
Zones
.
z5
&
available
);
if
(
Bot
.
MonsterZone
[
2
]
!=
null
&&
Bot
.
MonsterZone
[
2
].
Controller
==
0
&&
!
FinalCards
(
Bot
.
MonsterZone
[
2
].
Id
))
a
=
0
;
else
if
(
Bot
.
MonsterZone
[
0
]
!=
null
&&
Bot
.
MonsterZone
[
0
].
Controller
==
0
&&
!
FinalCards
(
Bot
.
MonsterZone
[
0
].
Id
))
b
=
0
;
if
(
b
>
0
)
return
Zones
.
z5
;
if
(
a
>
0
)
return
Zones
.
z6
;
}
else
if
(
cardId
==
CardId
.
Unicorn
||
cardId
==
CardId
.
Elf
||
cardId
==
CardId
.
IP
)
{
if
((
Zones
.
z6
&
available
)
>
0
)
return
Zones
.
z6
;
if
((
Zones
.
z5
&
available
)
>
0
)
return
Zones
.
z5
;
}
else
if
(
cardId
==
CardId
.
Genius
)
{
int
a
=(
Zones
.
z6
&
available
);
int
b
=(
Zones
.
z5
&
available
);
if
(
Bot
.
MonsterZone
[
4
]
!=
null
&&
Bot
.
MonsterZone
[
4
].
Controller
==
0
&&
!
FinalCards
(
Bot
.
MonsterZone
[
4
].
Id
))
a
=
0
;
else
if
(
Bot
.
MonsterZone
[
0
]
!=
null
&&
Bot
.
MonsterZone
[
0
].
Controller
==
0
&&
!
FinalCards
(
Bot
.
MonsterZone
[
0
].
Id
))
b
=
0
;
if
(
a
>
0
)
return
Zones
.
z6
;
if
(
b
>
0
)
return
Zones
.
z5
;
}
else
if
(
cardId
==
CardId
.
Regulus
||
cardId
==
CardId
.
GearGigant
)
{
if
((
Zones
.
z3
&
available
)
>
0
)
return
Zones
.
z3
;
}
else
{
if
((
Zones
.
z1
&
available
)
>
0
)
return
Zones
.
z1
;
if
((
Zones
.
z4
&
available
)
>
0
)
return
Zones
.
z4
;
if
((
Zones
.
z2
&
available
)
>
0
)
return
Zones
.
z2
;
if
((
Zones
.
z3
&
available
)
>
0
)
return
Zones
.
z3
;
if
((
Zones
.
z0
&
available
)
>
0
)
return
Zones
.
z0
;
}
}
return
base
.
OnSelectPlace
(
cardId
,
player
,
location
,
available
);
}
public
override
IList
<
ClientCard
>
OnSelectCard
(
IList
<
ClientCard
>
cards
,
int
min
,
int
max
,
int
hint
,
bool
cancelable
)
{
if
(
AI
.
HaveSelectedCards
())
return
null
;
if
(
p_summoning
||
((
Card
==
Bot
.
SpellZone
[
0
]
||
Card
==
Bot
.
SpellZone
[
4
])
&&
hint
==
HintMsg
.
SpSummon
&&
Card
.
HasType
(
CardType
.
Pendulum
)))
{
List
<
ClientCard
>
result
=
new
List
<
ClientCard
>();
List
<
ClientCard
>
scards
=
cards
.
Where
(
card
=>
card
!=
null
&&
card
.
HasSetcode
(
0x9a
)
&&
card
.
Level
==
4
).
ToList
();
if
(
scards
.
Count
<
2
)
scards
=
cards
.
Where
(
card
=>
card
!=
null
&&
card
.
HasSetcode
(
0x9a
)).
ToList
();
p_summoning
=
false
;
if
(
scards
.
Count
>
0
)
return
Util
.
CheckSelectCount
(
result
,
scards
,
1
,
1
);
else
if
(
min
==
0
)
return
result
;
// empty
}
return
base
.
OnSelectCard
(
cards
,
min
,
max
,
hint
,
cancelable
);
}
private
List
<
ClientCard
>
GetZoneCards
(
CardLocation
loc
,
ClientField
player
)
{
List
<
ClientCard
>
res
=
new
List
<
ClientCard
>();
List
<
ClientCard
>
temp
=
new
List
<
ClientCard
>();
if
((
loc
&
CardLocation
.
Hand
)
>
0
)
{
temp
=
player
.
Hand
.
Where
(
card
=>
card
!=
null
).
ToList
();
if
(
temp
.
Count
()
>
0
)
res
.
AddRange
(
temp
);
}
if
((
loc
&
CardLocation
.
MonsterZone
)
>
0
)
{
temp
=
player
.
GetMonsters
();
if
(
temp
.
Count
()
>
0
)
res
.
AddRange
(
temp
);
}
if
((
loc
&
CardLocation
.
SpellZone
)
>
0
)
{
temp
=
player
.
GetSpells
();
if
(
temp
.
Count
()
>
0
)
res
.
AddRange
(
temp
);
}
if
((
loc
&
CardLocation
.
Grave
)
>
0
)
{
temp
=
player
.
Graveyard
.
Where
(
card
=>
card
!=
null
).
ToList
();
if
(
temp
.
Count
()
>
0
)
res
.
AddRange
(
temp
);
}
if
((
loc
&
CardLocation
.
Removed
)
>
0
)
{
temp
=
player
.
Banished
.
Where
(
card
=>
card
!=
null
).
ToList
();
if
(
temp
.
Count
()
>
0
)
res
.
AddRange
(
temp
);
}
if
((
loc
&
CardLocation
.
Extra
)
>
0
)
{
temp
=
player
.
ExtraDeck
.
Where
(
card
=>
card
!=
null
).
ToList
();
if
(
temp
.
Count
()
>
0
)
res
.
AddRange
(
temp
);
}
return
res
;
}
private
bool
FinalCards
(
int
cname
)
{
int
[]
cardsname
=
new
[]
{
CardId
.
Masurawo
,
CardId
.
Fleur
,
CardId
.
SavageDragon
,
CardId
.
Sarutobi
,
CardId
.
Regulus
,
CardId
.
IP
};
foreach
(
var
cardname
in
cardsname
)
{
if
(
cname
==
cardname
)
return
true
;
}
return
false
;
}
private
bool
TurnerCards
(
int
cname
)
{
int
[]
cardsname
=
new
[]
{
CardId
.
PsyFramegearGamma
,
CardId
.
Wakaushi
,
CardId
.
Motorbike
};
foreach
(
var
cardname
in
cardsname
)
{
if
(
cname
==
cardname
)
return
true
;
}
return
false
;
}
private
bool
Psummon
()
{
List
<
ClientCard
>
cards
=
GetZoneCards
(
CardLocation
.
Hand
,
Bot
).
Where
(
card
=>
card
!=
null
&&
card
.
HasSetcode
(
0x9a
)
&&
card
.
Level
>
1
&&
card
.
Level
<
8
).
ToList
();
if
(
cards
.
Count
>
0
&&
Card
.
Location
==
CardLocation
.
SpellZone
)
{
p_summoning
=
true
;
p_summoned
=
true
;
return
true
;
}
return
false
;
}
private
bool
MaxxCFunction
()
{
activate_MaxxG
=
true
;
return
DefaultMaxxC
()
&&
!
activate_LockBird
;
}
private
bool
FunctionInHand
()
{
return
Duel
.
LastChainPlayer
==
1
;
}
private
bool
LockBirdFunction
()
{
if
(
Duel
.
Player
==
0
)
{
return
false
;
}
activate_LockBird
=
true
;
return
!
activate_MaxxG
;
}
private
bool
MotorbikeFunction
()
{
if
(
Card
.
Location
==
CardLocation
.
Hand
)
{
int
targetid
=
-
1
;
if
(!(
Bot
.
HasInHand
(
CardId
.
Wakaushi
)||
Bot
.
HasInMonstersZone
(
CardId
.
Wakaushi
)||
Bot
.
HasInSpellZone
(
CardId
.
Wakaushi
))&&!
activate_Wakaushi
)
{
targetid
=
CardId
.
Wakaushi
;
}
else
if
(!
Bot
.
HasInHand
(
CardId
.
Soulpeacemaker
)
&&
!
activate_Soulpeacemaker
&&
!
normal_summon
)
{
targetid
=
CardId
.
Soulpeacemaker
;
}
else
{
targetid
=
CardId
.
Soulpiercer
;
}
if
(
targetid
>
0
)
AI
.
SelectCard
(
targetid
);
activate_Motorbike
=
true
;
return
true
;
}
else
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
&&
activate_Elf
)
{
AI
.
SelectCard
(
Card
);
activate_Elf
=
false
;
return
true
;
}
return
false
;
}
private
bool
BoosterNormalSummonFunction
()
{
List
<
ClientCard
>
cards
=
Bot
.
Hand
.
GetMonsters
().
Where
(
card
=>
card
!=
null
&&
card
.
Id
==
CardId
.
Booster
).
ToList
();
return
(
NormalSummonFunction
()
&&
!
activate_Booster
&&
cards
.
Count
>=
2
);
}
private
bool
ScalesNormalSummonFunction
()
{
return
(
NormalSummonFunction
()
&&
(
Bot
.
HasInGraveyard
(
new
[]
{
CardId
.
Soulpiercer
,
CardId
.
Motorbike
,
CardId
.
Wakaushi
,
CardId
.
Wagon
,
CardId
.
Booster
,
})
||
(
Bot
.
HasInHand
(
CardId
.
Booster
)
&&
!
activate_Booster
)));
}
private
bool
NormalSummonFunction
()
{
normal_summon
=
true
;
return
DefaultMonsterSummon
();
}
private
bool
ScalesFunction
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Soulpiercer
,
CardId
.
Motorbike
,
CardId
.
Wakaushi
,
CardId
.
Wagon
,
CardId
.
Booster
,
});
activate_Scales
=
true
;
return
true
;
}
private
bool
WagonFunction
()
{
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
Wagon
,
0
))
return
Card
.
IsAttack
();
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
Wagon
,
1
))
{
int
targetid
=
-
1
;
if
(!(
Bot
.
HasInHand
(
CardId
.
Soulpiercer
)||
Bot
.
HasInMonstersZone
(
CardId
.
Soulpiercer
)))
{
targetid
=
CardId
.
Soulpiercer
;
}
else
if
(!
Bot
.
HasInHand
(
CardId
.
Soulpeacemaker
)
&&
!
activate_Soulpeacemaker
)
{
targetid
=
CardId
.
Soulpeacemaker
;
}
else
if
(!
Bot
.
HasInHand
(
CardId
.
Booster
)
&&
!
activate_Booster
)
{
targetid
=
CardId
.
Booster
;
}
if
(
targetid
>
0
)
AI
.
SelectCard
(
targetid
);
activate_Wagon
=
true
;
return
true
;
}
else
{
return
true
;
}
}
private
bool
SoulpiercerFunction
()
{
if
(
Card
.
Location
==
CardLocation
.
Grave
)
{
int
CardCount
=
GetZoneCards
(
CardLocation
.
Hand
,
Bot
).
Count
(
card
=>
card
!=
null
&&
card
.
HasSetcode
(
0x9a
)
&&
card
.
Level
>=
2
&&
card
.
Level
<=
7
);
int
targetid
=
-
1
;
if
(!
Bot
.
HasInHand
(
CardId
.
Motorbike
)
&&
!
activate_Motorbike
)
{
targetid
=
CardId
.
Motorbike
;
}
else
if
(!(
Bot
.
HasInHand
(
CardId
.
Wakaushi
)
||
Bot
.
HasInMonstersZone
(
CardId
.
Wakaushi
)
||
Bot
.
HasInSpellZone
(
CardId
.
Wakaushi
))
&&
!
activate_Wakaushi
)
{
targetid
=
CardId
.
Wakaushi
;
}
else
if
(!
Bot
.
HasInHand
(
CardId
.
Soulpeacemaker
)
&&
!
activate_Soulpeacemaker
)
{
targetid
=
CardId
.
Soulpeacemaker
;
}
else
if
(!
Bot
.
HasInHand
(
CardId
.
Scales
)
&&
!
activate_Scales
&&
(!
normal_summon
||
!
p_summoned
)
&&
(
activate_Soulpeacemaker
||
(!
Bot
.
HasInHand
(
CardId
.
Soulpeacemaker
)
&&
!
Bot
.
HasInSpellZone
(
CardId
.
Soulpeacemaker
))))
{
targetid
=
CardId
.
Scales
;
}
else
if
(!
Bot
.
HasInHand
(
CardId
.
Wagon
)
&&
!
activate_Wagon
)
{
targetid
=
CardId
.
Wagon
;
}
else
if
(
CardCount
<
2
&&
!
p_summoned
)
{
targetid
=
CardId
.
Wakaushi
;
}
else
if
(!
Bot
.
HasInHand
(
CardId
.
Booster
)
&&
!
activate_Booster
)
{
targetid
=
CardId
.
Booster
;
}
else
if
(!
Bot
.
HasInHand
(
CardId
.
Soulhorns
)
&&
!
Bot
.
HasInSpellZone
(
CardId
.
Soulhorns
)
&&
(
Bot
.
HasInMonstersZone
(
CardId
.
Sarutobi
)
||
Bot
.
HasInMonstersZone
(
CardId
.
Masurawo
)))
{
targetid
=
CardId
.
Soulhorns
;
}
else
{
targetid
=
CardId
.
Wakaushi
;}
if
(
targetid
>
0
)
AI
.
SelectCard
(
targetid
);
return
true
;
}
return
false
;
}
private
bool
WakaushiFunction
()
{
if
(
Card
.
Location
!=
CardLocation
.
Hand
||
Bot
.
HasInMonstersZone
(
CardId
.
Wakaushi
))
return
false
;
ClientCard
l
=
Util
.
GetPZone
(
0
,
0
);
ClientCard
r
=
Util
.
GetPZone
(
0
,
1
);
if
(
l
==
null
&&
r
==
null
)
return
true
;
if
(
l
==
null
&&
r
.
RScale
!=
Card
.
LScale
)
return
true
;
if
(
r
==
null
&&
l
.
LScale
!=
Card
.
RScale
)
return
true
;
return
false
;
}
private
bool
WakaushiEffectFunction
()
{
if
(
Card
.
Location
==
CardLocation
.
SpellZone
)
{
AI
.
SelectCard
(
CardId
.
Benkei
);
activate_Wakaushi
=
true
;
return
true
;
}
return
false
;
}
private
bool
BenkeiEffectFunction
()
{
if
(
Card
.
Location
==
CardLocation
.
SpellZone
)
{
int
targetid
=
-
1
;
if
(!(
Bot
.
HasInHand
(
CardId
.
Soulpiercer
)||
Bot
.
HasInMonstersZone
(
CardId
.
Soulpiercer
)))
{
targetid
=
CardId
.
Soulpiercer
;
}
else
if
(!
Bot
.
HasInHand
(
CardId
.
Soulpeacemaker
)
&&
!
activate_Soulpeacemaker
)
{
targetid
=
CardId
.
Soulpeacemaker
;
}
else
if
(!
Bot
.
HasInHand
(
CardId
.
Booster
)
&&
!
activate_Booster
)
{
targetid
=
CardId
.
Booster
;
}
if
(
targetid
>
0
)
AI
.
SelectCard
(
targetid
);
activate_Benkei
=
true
;
return
true
;
}
return
false
;
}
private
bool
WakaushiReturnPFunction
()
{
if
(
Card
.
Location
==
CardLocation
.
Extra
||
Card
.
Location
==
CardLocation
.
Removed
)
{
ClientCard
l
=
Util
.
GetPZone
(
0
,
0
);
ClientCard
r
=
Util
.
GetPZone
(
0
,
1
);
if
(
l
==
null
&&
r
==
null
)
return
true
;
if
(
l
==
null
&&
r
.
RScale
!=
Card
.
LScale
)
return
true
;
if
(
r
==
null
&&
l
.
LScale
!=
Card
.
RScale
)
return
true
;
}
return
false
;
}
private
bool
MasurawoFunction
()
{
if
(
ActivateDescription
==
96
)
{
List
<
ClientCard
>
cards
=
GetZoneCards
(
CardLocation
.
SpellZone
,
Bot
).
Where
(
card
=>
card
!=
null
&&
card
.
HasSetcode
(
0x9a
)).
ToList
();
if
(
cards
.
Count
>
0
)
{
AI
.
SelectCard
(
cards
);
return
true
;
}
else
{
cards
=
GetZoneCards
(
CardLocation
.
MonsterZone
,
Bot
).
Where
(
card
=>
card
!=
null
&&
card
.
HasSetcode
(
0x9a
)
&&
!
FinalCards
(
card
.
Id
)).
ToList
();
if
(
cards
.
Count
>
0
)
{
AI
.
SelectCard
(
cards
);
return
true
;
}
}
}
return
true
;
}
private
bool
MasurawoSynchronFunction
()
{
bool
chk
=
true
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
ASStardustDragon
)
||
Bot
.
HasInMonstersZone
(
CardId
.
Benkei
))
chk
=
false
;
var
materials_lists
=
Util
.
GetSynchroMaterials
(
Bot
.
MonsterZone
,
12
,
1
,
1
,
false
,
chk
,
null
,
card
=>
{
return
!
FinalCards
(
card
.
Id
);
});
if
(
materials_lists
.
Count
<=
0
)
return
false
;
AI
.
SelectMaterials
(
materials_lists
[
0
]);
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
}
private
bool
FleurSynchronFunction
()
{
bool
chk
=
true
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
Motorbike
)
&&
(
Bot
.
HasInMonstersZone
(
CardId
.
ASStardustDragon
)
||
Bot
.
HasInMonstersZone
(
CardId
.
Benkei
)))
chk
=
false
;
var
materials_lists
=
Util
.
GetSynchroMaterials
(
Bot
.
MonsterZone
,
10
,
1
,
1
,
false
,
chk
,
null
,
card
=>
{
return
!
FinalCards
(
card
.
Id
);
});
if
(
materials_lists
.
Count
<=
0
)
return
false
;
AI
.
SelectMaterials
(
materials_lists
[
0
]);
return
true
;
}
private
bool
FleurSynchronFunction2
()
{
var
materials_lists
=
Util
.
GetSynchroMaterials
(
Bot
.
MonsterZone
,
10
,
1
,
1
,
false
,
false
,
null
,
card
=>
{
return
!
FinalCards
(
card
.
Id
);
});
if
(
materials_lists
.
Count
<=
0
)
return
false
;
AI
.
SelectMaterials
(
materials_lists
[
0
]);
return
true
;
}
private
bool
DeSynchronFunction
()
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
}
private
bool
SavageDragonSynchronFunction
()
{
if
(
Bot
.
HasInGraveyard
(
new
[]
{
CardId
.
Scarecrow
,
CardId
.
IP
,
CardId
.
Genius
,
CardId
.
Unicorn
,
CardId
.
Elf
,
}))
{
return
true
;
}
return
false
;
}
private
bool
ASStardustDragonSynchronFunction
()
{
if
(
Bot
.
HasInGraveyard
(
CardId
.
Motorbike
)
||
Bot
.
HasInGraveyard
(
CardId
.
PsyFramegearGamma
))
{
return
(
Bot
.
HasInExtra
(
CardId
.
Fleur
)
||
Bot
.
HasInExtra
(
CardId
.
Masurawo
));
}
return
false
;
}
private
bool
ASStardustDragonSynchronFunction2
()
{
if
(!
activate_Scales
||
!
activate_PSY
)
return
false
;
if
(
Bot
.
HasInGraveyard
(
CardId
.
Motorbike
)
||
Bot
.
HasInGraveyard
(
CardId
.
PsyFramegearGamma
))
{
return
(
Bot
.
HasInExtra
(
CardId
.
Fleur
)
||
Bot
.
HasInExtra
(
CardId
.
Masurawo
));
}
return
false
;
}
private
bool
SavageDragonFunction
()
{
if
(
Duel
.
LastChainPlayer
==
1
)
return
true
;
AI
.
SelectCard
(
new
[]
{
CardId
.
Unicorn
,
CardId
.
Genius
,
CardId
.
Elf
,
CardId
.
IP
,
CardId
.
Scarecrow
});
return
true
;
}
private
bool
ASStardustDragonFunction
()
{
if
(
Duel
.
LastChainPlayer
==
1
&&
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
ASStardustDragon
,
0
))
{
return
true
;
}
else
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
ASStardustDragon
,
0
))
{
int
targetid
=
-
1
;
if
(
Bot
.
HasInGraveyard
(
CardId
.
Motorbike
))
{
targetid
=
CardId
.
Motorbike
;
}
else
if
(
Bot
.
HasInGraveyard
(
CardId
.
PsyFramegearGamma
))
{
targetid
=
CardId
.
PsyFramegearGamma
;
}
if
(
targetid
>
0
)
AI
.
SelectCard
(
targetid
);
if
(
targetid
==
CardId
.
Motorbike
&&
!
Bot
.
HasInExtra
(
CardId
.
Fleur
)
&&
Bot
.
HasInExtra
(
CardId
.
Masurawo
))
activate_Elf
=
true
;
return
true
;
}
return
false
;
}
private
bool
ScarecrowLinkFunction
()
{
List
<
ClientCard
>
material
=
new
List
<
ClientCard
>();
List
<
ClientCard
>
cards
=
Bot
.
GetMonstersInExtraZone
().
Where
(
card
=>
card
!=
null
&&
card
.
Id
==
CardId
.
Scarecrow
).
ToList
();
if
(
cards
.
Count
>
0
||
summon_Scarecrow
||
activate_Scarecrow
)
return
false
;
int
targetid
=
-
1
;
if
(
Bot
.
MonsterZone
[
0
]
!=
null
&&
Bot
.
MonsterZone
[
2
]
!=
null
)
{
if
(
Bot
.
MonsterZone
[
0
].
Id
==
CardId
.
Soulpiercer
)
material
.
Add
(
Bot
.
MonsterZone
[
0
]);
else
if
(
Bot
.
MonsterZone
[
2
].
Id
==
CardId
.
Soulpiercer
)
material
.
Add
(
Bot
.
MonsterZone
[
2
]);
else
if
(!
FinalCards
(
Bot
.
MonsterZone
[
0
].
Id
)
&&
Bot
.
MonsterZone
[
0
].
HasSetcode
(
0x9a
))
material
.
Add
(
Bot
.
MonsterZone
[
0
]);
else
if
(!
FinalCards
(
Bot
.
MonsterZone
[
2
].
Id
)
&&
Bot
.
MonsterZone
[
2
].
HasSetcode
(
0x9a
))
material
.
Add
(
Bot
.
MonsterZone
[
2
]);
}
else
if
(
Bot
.
HasInMonstersZone
(
CardId
.
Soulpiercer
))
{
targetid
=
CardId
.
Soulpiercer
;
}
else
if
(
Bot
.
HasInMonstersZone
(
CardId
.
Wagon
))
{
targetid
=
CardId
.
Wagon
;
}
if
(
material
.
Count
>
0
)
AI
.
SelectMaterials
(
material
);
else
if
(
targetid
>
0
)
AI
.
SelectMaterials
(
targetid
);
summon_Scarecrow
=
true
;
return
(
Bot
.
HasInGraveyard
(
new
[]
{
CardId
.
Soulpiercer
,
CardId
.
Wakaushi
,
CardId
.
Benkei
,
CardId
.
Wagon
,
})||
Bot
.
HasInMonstersZone
(
new
[]
{
CardId
.
Soulpiercer
,
CardId
.
Wagon
,
CardId
.
Wakaushi
,
}));
}
private
bool
DragonRavineField
()
{
if
(
Card
.
Location
==
CardLocation
.
Hand
)
return
DefaultField
();
return
false
;
}
private
bool
ScarecrowFunction
()
{
int
tributeId
=
-
1
;
if
(
Bot
.
HasInHand
(
CardId
.
PsyFrameDriver
))
{
tributeId
=
CardId
.
PsyFrameDriver
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
PsyFramegearGamma
))
{
tributeId
=
CardId
.
PsyFramegearGamma
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
Benkei
))
{
tributeId
=
CardId
.
Benkei
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
HauntedMansion
))
{
tributeId
=
CardId
.
HauntedMansion
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
EffectVeiler
))
{
tributeId
=
CardId
.
EffectVeiler
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
SnowRabbit
))
{
tributeId
=
CardId
.
SnowRabbit
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
JoyousSpring
))
{
tributeId
=
CardId
.
JoyousSpring
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
Booster
))
{
tributeId
=
CardId
.
Booster
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
Wagon
))
{
tributeId
=
CardId
.
Wagon
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
Scales
))
{
tributeId
=
CardId
.
Scales
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
LockBird
))
{
tributeId
=
CardId
.
LockBird
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
MaxxG
))
{
tributeId
=
CardId
.
MaxxG
;}
int
needId
=
-
1
;
if
(
Bot
.
HasInGraveyard
(
CardId
.
Soulpiercer
))
{
if
(
Bot
.
HasInGraveyard
(
CardId
.
Scales
)
&&
!
activate_Scales
)
{
needId
=
CardId
.
Scales
;}
else
{
needId
=
CardId
.
Soulpiercer
;}
}
else
if
(
Bot
.
HasInGraveyard
(
CardId
.
Masurawo
))
{
needId
=
CardId
.
Masurawo
;}
else
if
(
Bot
.
HasInGraveyard
(
CardId
.
Sarutobi
))
{
needId
=
CardId
.
Sarutobi
;}
else
if
(
Bot
.
HasInMonstersZone
(
CardId
.
Soulpiercer
))
{
if
(
Bot
.
HasInGraveyard
(
CardId
.
Wakaushi
))
{
needId
=
CardId
.
Wakaushi
;}
if
(
Bot
.
HasInGraveyard
(
CardId
.
Motorbike
))
{
needId
=
CardId
.
Motorbike
;}
}
if
(
GetZoneCards
(
CardLocation
.
Hand
,
Bot
).
Count
(
card
=>
card
!=
null
&&
card
.
Id
==
CardId
.
Scales
)
+
GetZoneCards
(
CardLocation
.
Grave
,
Bot
).
Count
(
card
=>
card
!=
null
&&
card
.
Id
==
CardId
.
Scales
)
+
GetZoneCards
(
CardLocation
.
Onfield
,
Bot
).
Count
(
card
=>
card
!=
null
&&
card
.
Id
==
CardId
.
Scales
)
==
2
&&
GetZoneCards
(
CardLocation
.
Hand
,
Bot
).
Count
(
card
=>
card
!=
null
&&
card
.
Id
==
CardId
.
Scales
)>=
1
&&
!
activate_Scales
)
{
tributeId
=
CardId
.
Scales
;
needId
=
CardId
.
Scales
;
}
AI
.
SelectCard
(
tributeId
);
AI
.
SelectNextCard
(
needId
);
activate_Scarecrow
=
true
;
if
(!
summon_Scarecrow
&&
((
Bot
.
HasInHand
(
CardId
.
Wakaushi
)
||
Bot
.
HasInSpellZone
(
CardId
.
Wakaushi
))
&&
!
activate_Wakaushi
)
&&
(
Bot
.
HasInHand
(
CardId
.
Motorbike
)
&&
!
activate_Motorbike
)
&&
((
Bot
.
HasInHand
(
CardId
.
Soulpeacemaker
)
||
Bot
.
HasInSpellZone
(
CardId
.
Soulpeacemaker
))
&&
!
activate_Soulpeacemaker
)
&&
(
Bot
.
HasInSpellZone
(
CardId
.
Benkei
)
&&
!
activate_Benkei
)
&&
(
Bot
.
HasInHand
(
CardId
.
Soulpiercer
)
&&
!
normal_summon
)
&&
((
Bot
.
HasInGraveyard
(
CardId
.
Scales
)
||
Bot
.
HasInHand
(
CardId
.
Soulpiercer
))
&&
!
activate_Scales
&&
!
normal_summon
)
)
{
activate_Scarecrow
=
false
;
summon_Scarecrow
=
false
;
}
else
if
(
needId
!=
CardId
.
Soulpiercer
)
{
activate_Scarecrow
=
false
;
summon_Scarecrow
=
false
;
}
return
true
;
}
private
bool
UnicornFunction
()
{
List
<
ClientCard
>
Enemycards
=
GetZoneCards
(
CardLocation
.
Onfield
,
Enemy
);
if
(
Bot
.
Hand
.
Count
==
0
||
Enemycards
.
Count
(
card
=>
card
!=
null
&&
!
card
.
IsShouldNotBeTarget
())
==
0
)
{
if
(
to_deck
)
to_deck
=
false
;
return
false
;
}
int
tributeId
=
-
1
;
if
(
Bot
.
HasInHand
(
CardId
.
PsyFrameDriver
))
{
tributeId
=
CardId
.
PsyFrameDriver
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
PsyFramegearGamma
))
{
tributeId
=
CardId
.
PsyFramegearGamma
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
Benkei
))
{
tributeId
=
CardId
.
Benkei
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
HauntedMansion
))
{
tributeId
=
CardId
.
HauntedMansion
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
EffectVeiler
))
{
tributeId
=
CardId
.
EffectVeiler
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
SnowRabbit
))
{
tributeId
=
CardId
.
SnowRabbit
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
JoyousSpring
))
{
tributeId
=
CardId
.
JoyousSpring
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
Booster
))
{
tributeId
=
CardId
.
Booster
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
Wagon
))
{
tributeId
=
CardId
.
Wagon
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
Scales
))
{
tributeId
=
CardId
.
Scales
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
LockBird
))
{
tributeId
=
CardId
.
LockBird
;}
else
if
(
Bot
.
HasInHand
(
CardId
.
MaxxG
))
{
tributeId
=
CardId
.
MaxxG
;}
if
(
to_deck
)
to_deck
=
false
;
AI
.
SelectCard
(
tributeId
);
return
true
;
}
private
bool
BoosterEquipFunction
()
{
if
(
Card
.
Location
!=
CardLocation
.
Hand
||
activate_Booster
)
return
false
;
List
<
ClientCard
>
ChkCardsHand
=
Bot
.
Hand
.
GetMonsters
().
ToList
();
foreach
(
var
card
in
ChkCardsHand
)
{
if
(
card
.
Id
==
CardId
.
Motorbike
&&
!
activate_Motorbike
)
return
false
;
else
if
(
card
.
Id
==
CardId
.
Soulpiercer
)
return
false
;
else
if
(
card
.
Id
==
CardId
.
Soulpeacemaker
&&
!
activate_Soulpeacemaker
)
return
false
;
else
if
(
card
.
Id
==
CardId
.
Wakaushi
&&
!
activate_Wakaushi
)
return
false
;
else
if
(
card
.
Id
==
CardId
.
Wagon
&&
(!
activate_Wagon
||
!
normal_summon
))
return
false
;
else
if
(
card
.
Id
==
CardId
.
Benkei
&&
!
activate_Benkei
)
return
false
;
}
List
<
ClientCard
>
ChkCardsSpell
=
GetZoneCards
(
CardLocation
.
SpellZone
,
Bot
).
Where
(
card
=>
card
!=
null
&&
card
.
IsFaceup
()).
ToList
();
foreach
(
var
card
in
ChkCardsSpell
)
{
if
(
card
.
Id
==
CardId
.
Wakaushi
&&
!
activate_Wakaushi
)
return
false
;
else
if
(
card
.
Id
==
CardId
.
Soulpiercer
)
return
false
;
else
if
(
card
.
Id
==
CardId
.
Soulpeacemaker
&&
!
activate_Soulpeacemaker
)
return
false
;
else
if
(
card
.
Id
==
CardId
.
Wakaushi
&&
!
activate_Wakaushi
)
return
false
;
else
if
(
card
.
Id
==
CardId
.
Benkei
&&
!
activate_Benkei
)
return
false
;
}
List
<
ClientCard
>
ChkCardsMonster
=
GetZoneCards
(
CardLocation
.
MonsterZone
,
Bot
).
Where
(
card
=>
card
!=
null
&&
card
.
IsFaceup
()
&&
card
.
Level
==
4
).
ToList
();
if
(
ChkCardsMonster
.
Count
==
0
)
return
false
;
foreach
(
var
card
in
ChkCardsMonster
)
{
if
(
card
.
Id
==
CardId
.
Soulpiercer
)
return
false
;
}
List
<
ClientCard
>
ChkCardsGrave
=
GetZoneCards
(
CardLocation
.
Grave
,
Bot
).
ToList
();
foreach
(
var
card
in
ChkCardsGrave
)
{
if
(
card
.
Id
==
CardId
.
Soulpiercer
&&
(
Bot
.
HasInMonstersZone
(
CardId
.
Scarecrow
)
||
Bot
.
HasInExtra
(
CardId
.
Scarecrow
)))
return
false
;
else
if
(
card
.
Level
==
4
&&
card
.
HasRace
(
CardRace
.
Machine
)
&&
Bot
.
HasInHand
(
CardId
.
Scales
)
&&
!
normal_summon
)
return
false
;
}
if
(
Bot
.
HasInExtra
(
CardId
.
IP
)
&&
p_summoned
)
return
true
;
need_Gear
=
true
;
return
true
;
}
private
bool
BoosterEquipFunction2
()
{
if
(
Bot
.
HasInExtra
(
CardId
.
IP
)
&&
p_summoned
)
return
true
;
return
false
;
}
private
bool
BoosterFunction
()
{
if
(
Card
.
Location
==
CardLocation
.
SpellZone
)
{
activate_Booster
=
true
;
return
true
;
}
return
false
;
}
private
bool
GearGigantXyzFunction
()
{
if
(
need_Gear
)
{
need_Gear
=
false
;
return
true
;
}
return
false
;
}
private
bool
GearGigantFunction
()
{
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
List
<
ClientCard
>
ChkCards
=
GetZoneCards
(
CardLocation
.
MonsterZone
,
Bot
).
Where
(
card
=>
card
!=
null
&&
card
.
IsFaceup
()
&&
card
.
HasSetcode
(
0x9a
)).
ToList
();
int
targetid
=
-
1
;
if
(!
Bot
.
HasInHand
(
CardId
.
Motorbike
)
&&
!
activate_Motorbike
)
{
targetid
=
CardId
.
Motorbike
;
}
else
if
(!(
Bot
.
HasInHand
(
CardId
.
Wakaushi
)
||
Bot
.
HasInSpellZone
(
CardId
.
Wakaushi
))
&&
!
activate_Wakaushi
)
{
targetid
=
CardId
.
Wakaushi
;
}
else
if
(!
Bot
.
HasInHand
(
CardId
.
Soulpiercer
)
&&
(!
normal_summon
||
(
ChkCards
.
Count
>=
1
)))
{
targetid
=
CardId
.
Soulpiercer
;
}
if
(
targetid
>
0
)
AI
.
SelectCard
(
targetid
);
return
true
;
}
return
false
;
}
private
bool
SoulpiercerEquipFunction
()
{
if
(
Card
.
Location
!=
CardLocation
.
Hand
)
return
false
;
int
tributeId
=
-
1
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
Wagon
))
{
tributeId
=
CardId
.
Wagon
;}
else
if
(
Bot
.
HasInMonstersZone
(
CardId
.
Wakaushi
))
{
tributeId
=
CardId
.
Wakaushi
;}
AI
.
SelectCard
(
tributeId
);
return
Bot
.
HasInMonstersZone
(
new
[]
{
CardId
.
Wakaushi
,
CardId
.
Wagon
,
});
}
private
bool
SoulpeacemakerEquipFunction
()
{
if
(
Card
.
Location
!=
CardLocation
.
Hand
)
return
false
;
int
tributeId
=
-
1
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
Scarecrow
))
{
tributeId
=
CardId
.
Scarecrow
;}
else
if
(
Bot
.
HasInMonstersZone
(
CardId
.
Soulpiercer
))
{
tributeId
=
CardId
.
Soulpiercer
;}
AI
.
SelectCard
(
tributeId
);
return
Bot
.
HasInMonstersZone
(
new
[]
{
CardId
.
Scarecrow
,
CardId
.
Soulpiercer
,
});
}
private
bool
SoulhornsEquipFunction
()
{
if
(
Card
.
Location
!=
CardLocation
.
Hand
)
return
false
;
int
tributeId
=
-
1
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
Masurawo
))
{
tributeId
=
CardId
.
Masurawo
;}
else
if
(
Bot
.
HasInMonstersZone
(
CardId
.
Sarutobi
))
{
tributeId
=
CardId
.
Sarutobi
;}
AI
.
SelectCard
(
tributeId
);
return
Bot
.
HasInMonstersZone
(
new
[]
{
CardId
.
Masurawo
,
CardId
.
Sarutobi
,
});
}
private
bool
SoulpeacemakerFunction
()
{
if
(
Card
.
Location
==
CardLocation
.
SpellZone
)
{
int
tributeId
=
-
1
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
Soulpiercer
))
{
tributeId
=
CardId
.
Wakaushi
;}
else
if
(
Bot
.
HasInGraveyard
(
CardId
.
Soulpiercer
)||!
activate_Scales
)
{
tributeId
=
CardId
.
Scales
;}
else
if
(!
Bot
.
HasInGraveyard
(
CardId
.
Soulpiercer
)||
activate_Scales
)
{
tributeId
=
CardId
.
Soulpiercer
;}
AI
.
SelectCard
(
tributeId
);
activate_Soulpeacemaker
=
true
;
return
true
;
}
return
false
;
}
private
bool
GeniusLinkFunction
()
{
if
((
Bot
.
MonsterZone
[
4
]
!=
null
&&
Bot
.
MonsterZone
[
4
].
Controller
==
0
&&
!
FinalCards
(
Bot
.
MonsterZone
[
4
].
Id
))
&&
(
Bot
.
MonsterZone
[
0
]
!=
null
&&
Bot
.
MonsterZone
[
0
].
Controller
==
0
&&
!
FinalCards
(
Bot
.
MonsterZone
[
0
].
Id
)))
return
false
;
int
CardCount
=
0
;
foreach
(
ClientCard
card
in
Bot
.
Hand
.
GetMonsters
())
{
if
(
card
.
HasRace
(
CardRace
.
Machine
)
&&
(
card
.
Level
>=
2
&&
card
.
Level
<=
7
))
{
CardCount
++;}
}
if
(
CardCount
<
2
&&
!
Bot
.
HasInMonstersZone
(
CardId
.
Soulpiercer
)){
return
false
;}
if
(
Bot
.
HasInHand
(
CardId
.
Regulus
)
||
Bot
.
HasInGraveyard
(
CardId
.
Regulus
)
||
Bot
.
HasInSpellZone
(
CardId
.
Regulus
)
||
Bot
.
HasInMonstersZone
(
CardId
.
Regulus
))
return
false
;
bool
linkchk
=
false
;
List
<
ClientCard
>
materials
=
new
List
<
ClientCard
>();
if
(
Bot
.
MonsterZone
[
6
]
!=
null
&&
Bot
.
MonsterZone
[
6
].
Controller
==
0
&&
Bot
.
MonsterZone
[
6
].
Id
!=
CardId
.
Scarecrow
&&
!
FinalCards
(
Bot
.
MonsterZone
[
6
].
Id
))
{
materials
.
Add
(
Bot
.
MonsterZone
[
6
]);
linkchk
=
true
;
}
else
if
(
Bot
.
MonsterZone
[
5
]
!=
null
&&
Bot
.
MonsterZone
[
5
].
Controller
==
0
&&
Bot
.
MonsterZone
[
5
].
Id
!=
CardId
.
Scarecrow
&&
!
FinalCards
(
Bot
.
MonsterZone
[
6
].
Id
))
{
materials
.
Add
(
Bot
.
MonsterZone
[
5
]);
linkchk
=
true
;
}
List
<
ClientCard
>
cards
=
Bot
.
GetMonstersInMainZone
().
Where
(
card
=>
card
!=
null
&&
card
.
IsFaceup
()
&&
card
.
HasRace
(
CardRace
.
Machine
)).
ToList
();
foreach
(
var
card
in
cards
)
{
if
(
card
==
null
||
FinalCards
(
card
.
Id
))
continue
;
else
materials
.
Add
(
card
);
}
if
(
materials
.
Count
<=
1
)
return
false
;
AI
.
SelectMaterials
(
materials
);
return
((
Bot
.
GetMonstersInExtraZone
().
Count
==
0
||
linkchk
)
&&
!
p_summoned
&&
!
activate_Genius
);
}
private
bool
GeniusFunction
()
{
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
Genius
,
1
))
{
AI
.
SelectCard
(
CardId
.
Regulus
);
activate_Genius
=
true
;
return
true
;
}
return
false
;
}
private
bool
ElfLinkFunction
()
{
if
(!
Bot
.
HasInGraveyard
(
CardId
.
Motorbike
))
return
false
;
List
<
ClientCard
>
materials
=
new
List
<
ClientCard
>();
if
(
Bot
.
MonsterZone
[
6
]
!=
null
&&
Bot
.
MonsterZone
[
6
].
Controller
==
0
&&
!
FinalCards
(
Bot
.
MonsterZone
[
6
].
Id
))
{
materials
.
Add
(
Bot
.
MonsterZone
[
6
]);
}
else
if
(
Bot
.
MonsterZone
[
5
]
!=
null
&&
Bot
.
MonsterZone
[
5
].
Controller
==
0
&&
!
FinalCards
(
Bot
.
MonsterZone
[
5
].
Id
))
{
materials
.
Add
(
Bot
.
MonsterZone
[
5
]);
}
List
<
ClientCard
>
TunrerCards
=
Bot
.
GetMonstersInMainZone
().
Where
(
card
=>
card
!=
null
&&
card
.
IsFaceup
()
&&
TurnerCards
(
card
.
Id
)
&&
!
FinalCards
(
card
.
Id
)).
ToList
();
List
<
ClientCard
>
UnTunrercards
=
Bot
.
GetMonstersInMainZone
().
Where
(
card
=>
card
!=
null
&&
card
.
IsFaceup
()
&&
!
TurnerCards
(
card
.
Id
)
&&
!
FinalCards
(
card
.
Id
)).
ToList
();
if
(
UnTunrercards
.
Count
==
0
)
return
false
;
else
if
(
TunrerCards
.
Count
>=
UnTunrercards
.
Count
&&
UnTunrercards
.
Count
>
0
)
{
foreach
(
var
card
in
TunrerCards
)
{
if
(
card
==
null
)
continue
;
else
if
(
materials
.
Count
(
ccard
=>
ccard
!=
null
&&
ccard
.
Id
==
card
.
Id
)
<=
0
)
materials
.
Add
(
card
);
}
}
else
{
foreach
(
var
card
in
UnTunrercards
)
{
if
(
card
==
null
)
continue
;
else
if
(
materials
.
Count
(
ccard
=>
ccard
!=
null
&&
ccard
.
Id
==
card
.
Id
)
<=
0
)
materials
.
Add
(
card
);
}
}
if
(
materials
.
Count
<=
1
)
return
false
;
AI
.
SelectMaterials
(
materials
);
summon_Elf
=
true
;
return
true
;
}
private
bool
ElfFunction
()
{
AI
.
SelectCard
(
CardId
.
Motorbike
);
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
activate_Elf
=
true
;
return
Bot
.
HasInGraveyard
(
CardId
.
Motorbike
);
}
private
bool
RegulusFunction
()
{
if
(
Card
.
Location
==
CardLocation
.
Hand
)
{
int
tributeId
=
-
1
;
if
(
Bot
.
HasInGraveyard
(
CardId
.
Soulpiercer
))
{
tributeId
=
CardId
.
Soulpiercer
;}
else
if
(
Bot
.
HasInGraveyard
(
CardId
.
Motorbike
))
{
tributeId
=
CardId
.
Motorbike
;}
AI
.
SelectCard
(
tributeId
);
activate_Genius
=
true
;
return
true
;
}
else
if
(
Duel
.
LastChainPlayer
==
1
)
{
return
true
;
}
return
false
;
}
private
bool
FleurFunction
()
{
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
Fleur
,
0
))
{
ClientCard
card
=
Util
.
GetProblematicEnemyMonster
(
0
,
true
);
if
(
card
!=
null
)
{
AI
.
SelectCard
(
card
);
return
true
;
}
card
=
Util
.
GetBestEnemySpell
(
true
);
if
(
card
!=
null
)
{
AI
.
SelectCard
(
card
);
return
true
;
}
List
<
ClientCard
>
cards
=
GetZoneCards
(
CardLocation
.
Onfield
,
Enemy
);
cards
=
cards
.
Where
(
tcard
=>
tcard
!=
null
&&
!
tcard
.
IsShouldNotBeTarget
()).
ToList
();
if
(
cards
.
Count
<=
0
)
return
false
;
AI
.
SelectCard
(
cards
);
return
true
;
}
else
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
Fleur
,
1
))
{
return
Duel
.
LastChainPlayer
==
1
;
}
return
false
;
}
private
bool
IPLinkFunction
()
{
List
<
ClientCard
>
cards
=
GetZoneCards
(
CardLocation
.
MonsterZone
,
Bot
).
Where
(
card
=>
card
!=
null
&&
card
.
IsFaceup
()
&&
card
.
Id
!=
CardId
.
Scarecrow
&&
(
card
.
Id
!=
CardId
.
Elf
||
(
card
.
Id
==
CardId
.
Elf
&&
!
summon_Elf
))
&&
!
FinalCards
(
card
.
Id
)).
ToList
();
if
(
cards
.
Count
<=
1
)
return
false
;
AI
.
SelectMaterials
(
cards
);
return
true
;
}
private
bool
IPFunction
()
{
if
(
Duel
.
LastChainPlayer
==
0
)
return
false
;
if
(
Bot
.
HasInExtra
(
CardId
.
Unicorn
))
{
List
<
ClientCard
>
material
=
new
List
<
ClientCard
>();
List
<
ClientCard
>
cards
=
GetZoneCards
(
CardLocation
.
MonsterZone
,
Bot
).
Where
(
card
=>
card
!=
null
&&
card
!=
Card
&&
card
.
IsFaceup
()
&&
!
FinalCards
(
card
.
Id
)
&&
card
.
Id
!=
CardId
.
IP
&&
card
.
Id
!=
CardId
.
Scarecrow
).
ToList
();
List
<
ClientCard
>
Enemycards
=
GetZoneCards
(
CardLocation
.
MonsterZone
,
Enemy
);
if
(
activate_Sarutobi
)
Enemycards
=
GetZoneCards
(
CardLocation
.
Onfield
,
Enemy
);
if
(
Bot
.
Hand
.
Count
==
0
||
Enemycards
.
Count
(
card
=>
card
!=
null
&&
!
card
.
IsShouldNotBeTarget
())
==
0
||
cards
.
Count
==
0
)
return
false
;
bool
linkchk
=
false
;
foreach
(
var
card
in
cards
)
{
if
(
card
!=
null
&&
(
card
.
Id
!=
CardId
.
Elf
||
(
card
.
Id
==
CardId
.
Elf
&&
!
summon_Elf
)))
{
material
.
Add
(
card
);
linkchk
=
true
;
break
;
}
}
AI
.
SelectCard
(
CardId
.
Unicorn
);
material
.
Insert
(
0
,
Card
);
AI
.
SelectMaterials
(
material
);
if
(!
to_deck
)
to_deck
=
true
;
return
linkchk
;
}
return
false
;
}
private
bool
SarutobiFunction
()
{
List
<
ClientCard
>
Enemycards
=
GetZoneCards
(
CardLocation
.
SpellZone
,
Enemy
);
if
(
Enemycards
.
Count
(
card
=>
card
!=
null
&&
!
card
.
IsShouldNotBeTarget
())
==
0
||
to_deck
)
return
false
;
AI
.
SelectCard
(
Enemycards
);
activate_Sarutobi
=
true
;
return
true
;
}
}
}
WindBot.csproj
View file @
e4fd80a7
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project
ToolsVersion=
"12.0"
DefaultTargets=
"Build"
xmlns=
"http://schemas.microsoft.com/developer/msbuild/2003"
>
<Import
Project=
"$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props"
Condition=
"Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')"
/>
<PropertyGroup>
...
...
@@ -108,6 +108,7 @@
<Compile
Include=
"Game\AI\Decks\PhantasmExecutor.cs"
/>
<Compile
Include=
"Game\AI\Decks\QliphortExecutor.cs"
/>
<Compile
Include=
"Game\AI\Decks\ST1732Executor.cs"
/>
<Compile
Include=
"Game\AI\Decks\SuperheavySamuraiExecutor.cs"
/>
<Compile
Include=
"Game\AI\Decks\SwordsoulExecutor.cs"
/>
<Compile
Include=
"Game\AI\Decks\TrickstarExecutor.cs"
/>
<Compile
Include=
"Game\AI\Decks\WitchcraftExecutor.cs"
/>
...
...
@@ -186,4 +187,4 @@
<Target Name="AfterBuild">
</Target>
-->
</Project>
\ No newline at end of file
</Project>
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