Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
W
Windbot-408
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
神之吹息
Windbot-408
Commits
486ccf0b
Commit
486ccf0b
authored
Jun 18, 2023
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://github.com/IceYGO/windbot
parents
b74434b8
cfbdc0de
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
328 additions
and
218 deletions
+328
-218
BotWrapper/bot.conf
BotWrapper/bot.conf
+5
-0
Dialogs/Zefra.zh-CN.json
Dialogs/Zefra.zh-CN.json
+5
-0
Game/AI/Decks/ZefraExecutor.cs
Game/AI/Decks/ZefraExecutor.cs
+294
-216
Game/AI/Dialogs.cs
Game/AI/Dialogs.cs
+15
-2
Game/AI/Executor.cs
Game/AI/Executor.cs
+1
-0
Game/GameAI.cs
Game/GameAI.cs
+8
-0
No files found.
BotWrapper/bot.conf
View file @
486ccf0b
...
@@ -213,3 +213,8 @@ SUPPORT_MASTER_RULE_2020
...
@@ -213,3 +213,8 @@ SUPPORT_MASTER_RULE_2020
Name
=神数不神
Deck
=
Tearlaments
Dialog
=
Zefra
.
zh
-
CN
Name
=神数不神
Deck
=
Tearlaments
Dialog
=
Zefra
.
zh
-
CN
旧式地天使珠泪哀歌族卡组。
旧式地天使珠泪哀歌族卡组。
AI_LV3
SUPPORT_MASTER_RULE_2020
AI_LV3
SUPPORT_MASTER_RULE_2020
!神数不神-神数
Name
=神数不神
Deck
=
Zefra
Dialog
=
Zefra
.
zh
-
CN
神数卡组。
AI_LV3
SUPPORT_MASTER_RULE_2020
Dialogs/Zefra.zh-CN.json
View file @
486ccf0b
...
@@ -50,5 +50,10 @@
...
@@ -50,5 +50,10 @@
"乎,我发动{0}!"
,
"乎,我发动{0}!"
,
"不好意思拉,我有{0}"
,
"不好意思拉,我有{0}"
,
"哈哈,发动{0}的效果!"
"哈哈,发动{0}的效果!"
],
"custom"
:
[
"呱!本体出征!"
,
"凸(艹皿艹 )卡手不玩拉!!!"
,
"嘿不慌,还有摆子场( ̄y▽ ̄)╭"
]
]
}
}
Game/AI/Decks/ZefraExecutor.cs
View file @
486ccf0b
...
@@ -106,6 +106,16 @@ namespace WindBot.Game.AI.Decks
...
@@ -106,6 +106,16 @@ namespace WindBot.Game.AI.Decks
private
bool
HeavymetalfoesElectrumite_activate
=
false
;
private
bool
HeavymetalfoesElectrumite_activate
=
false
;
private
bool
should_destory
=
false
;
private
bool
should_destory
=
false
;
private
List
<
ClientCard
>
Odd_EyesMeteorburstDragon_materials
=
new
List
<
ClientCard
>();
private
List
<
ClientCard
>
Odd_EyesMeteorburstDragon_materials
=
new
List
<
ClientCard
>();
private
bool
duel_start
=
true
;
private
int
activate_count
=
0
;
private
int
summon_count
=
0
;
private
bool
enemy_activate
=
false
;
private
enum
CustomMessage
{
Happy
,
Angry
,
Surprise
}
private
static
class
Toos
private
static
class
Toos
{
{
public
delegate
bool
Delegate
(
ClientCard
card
);
public
delegate
bool
Delegate
(
ClientCard
card
);
...
@@ -437,21 +447,21 @@ namespace WindBot.Game.AI.Decks
...
@@ -437,21 +447,21 @@ namespace WindBot.Game.AI.Decks
{
{
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
CalledbytheGrave
,
CalledbytheGraveEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
CalledbytheGrave
,
CalledbytheGraveEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
BorreloadSavageDragon
,
BorreloadSavageDragonEffect_2
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
BorreloadSavageDragon
,
BorreloadSavageDragonEffect_2
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
F_A_DawnDragster
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
F_A_DawnDragster
,
ResetFlag
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
NinePillarsofYangZing
,
NinePillarsofYangZingEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
NinePillarsofYangZing
,
NinePillarsofYangZingEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ZefraDivineStrike
,
ZefraDivineStrikeEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ZefraDivineStrike
,
ZefraDivineStrikeEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
HeraldoftheArcLight
,
HeraldoftheArcLightEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
HeraldoftheArcLight
,
HeraldoftheArcLightEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
TruKingofAllCalamities
,
TruKingofAllCalamitiesEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
TruKingofAllCalamities
,
TruKingofAllCalamitiesEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
PSY_FramegearGamma
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
PSY_FramegearGamma
,
ResetFlag
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MaxxC
,
DefaultMaxxC
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MaxxC
,
DefaultMaxxC
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SupremeKingDragonDarkwurm
,
SupremeKingDragonDarkwurmEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SupremeKingDragonDarkwurm
,
SupremeKingDragonDarkwurmEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ServantofEndymion
,
ServantofEndymionEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ServantofEndymion
,
ServantofEndymionEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Terraforming
,
TerraformingEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Terraforming
,
TerraformingEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SpellPowerMastery
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SpellPowerMastery
,
ResetFlag
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
DragonShrine
,
DragonShrineEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
DragonShrine
,
DragonShrineEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
FoolishBurial
,
FoolishBurialEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
FoolishBurial
,
FoolishBurialEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
DarkContractwiththGate
,
DarkContractwiththGateEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
DarkContractwiththGate
,
DarkContractwiththGateEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Terraforming
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Terraforming
,
ResetFlag
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
OracleofZefra
,
OracleofZefraEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
OracleofZefra
,
OracleofZefraEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ZefraProvidence
,
ZefraProvidenceEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ZefraProvidence
,
ZefraProvidenceEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
AstrographSorcerer
,
AstrographSorcererEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
AstrographSorcerer
,
AstrographSorcererEffect
);
...
@@ -487,7 +497,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -487,7 +497,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Blackwing_ZephyrostheElite
,
Blackwing_ZephyrostheEliteEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Blackwing_ZephyrostheElite
,
Blackwing_ZephyrostheEliteEffect
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Raidraptor_ForceStrix
,
Raidraptor_ForceStrixSummon
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Raidraptor_ForceStrix
,
Raidraptor_ForceStrixSummon
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Raidraptor_ForceStrix
,
Raidraptor_ForceStrixEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Raidraptor_ForceStrix
,
Raidraptor_ForceStrixEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Rank_Up_MagicSoulShaveForce
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Rank_Up_MagicSoulShaveForce
,
ResetFlag
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Raider_Wing
,
Raider_WingEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Raider_Wing
,
Raider_WingEffect
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Raidraptor_SingingLanius
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Raidraptor_SingingLanius
);
//xyz mode
//xyz mode
...
@@ -520,7 +530,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -520,7 +530,7 @@ namespace WindBot.Game.AI.Decks
CardId
.
DDSavantKepler
,
CardId
.
StellarknightZefraxciton
,
CardId
.
ShaddollZefracore
,
CardId
.
SupremeKingDragonDarkwurm
};
CardId
.
DDSavantKepler
,
CardId
.
StellarknightZefraxciton
,
CardId
.
ShaddollZefracore
,
CardId
.
SupremeKingDragonDarkwurm
};
for
(
int
i
=
0
;
i
<
p_summon_ids
.
Count
;
++
i
)
AddExecutor
(
ExecutorType
.
Summon
,
p_summon_ids
[
i
],
DefaultSummon
);
for
(
int
i
=
0
;
i
<
p_summon_ids
.
Count
;
++
i
)
AddExecutor
(
ExecutorType
.
Summon
,
p_summon_ids
[
i
],
DefaultSummon
);
AddExecutor
(
ExecutorType
.
Summon
,
DefaultSummon
);
AddExecutor
(
ExecutorType
.
Summon
,
DefaultSummon
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Deskbot001
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Deskbot001
,
ResetFlag
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
TheMightyMasterofMagic
,
TheMightyMasterofMagicEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
TheMightyMasterofMagic
,
TheMightyMasterofMagicEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
DestrudotheLostDragon_Frisson
,
DestrudotheLostDragon_FrissonEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
DestrudotheLostDragon_Frisson
,
DestrudotheLostDragon_FrissonEffect
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Blackwing_ZephyrostheElite
,
DefaultSummon_2
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Blackwing_ZephyrostheElite
,
DefaultSummon_2
);
...
@@ -530,9 +540,15 @@ namespace WindBot.Game.AI.Decks
...
@@ -530,9 +540,15 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
SpellSet
,
SpellSet_2
);
AddExecutor
(
ExecutorType
.
SpellSet
,
SpellSet_2
);
AddExecutor
(
ExecutorType
.
Repos
,
DefaultMonsterRepos
);
AddExecutor
(
ExecutorType
.
Repos
,
DefaultMonsterRepos
);
AddExecutor
(
ExecutorType
.
Activate
,
DefaultPActivate
);
AddExecutor
(
ExecutorType
.
Activate
,
DefaultPActivate
);
AddExecutor
(
ExecutorType
.
GoToEndPhase
,
GoToEndPhase
);
}
}
public
override
void
OnNewTurn
()
public
override
void
OnNewTurn
()
{
{
if
(
duel_start
)
{
duel_start
=
false
;
AI
.
SendCustomChat
((
int
)
CustomMessage
.
Happy
);
}
activate_SupremeKingDragonDarkwurm_1
=
false
;
activate_SupremeKingDragonDarkwurm_1
=
false
;
activate_SupremeKingDragonDarkwurm_2
=
false
;
activate_SupremeKingDragonDarkwurm_2
=
false
;
activate_JetSynchron
=
false
;
activate_JetSynchron
=
false
;
...
@@ -554,17 +570,25 @@ namespace WindBot.Game.AI.Decks
...
@@ -554,17 +570,25 @@ namespace WindBot.Game.AI.Decks
HeavymetalfoesElectrumite_activate
=
false
;
HeavymetalfoesElectrumite_activate
=
false
;
spell_activate_count
=
0
;
spell_activate_count
=
0
;
p_count
=
0
;
p_count
=
0
;
activate_count
=
0
;
summon_count
=
0
;
enemy_activate
=
false
;
}
}
private
bool
ZefraProvidenceEffect
()
private
bool
ZefraProvidenceEffect
()
{
{
if
(
Card
.
Location
==
CardLocation
.
Grave
)
if
(
ActivateDescription
==
96
)
{
{
return
true
;
if
(
should_destory
)
{
should_destory
=
false
;
return
false
;
}
return
BeforeResult
(
ExecutorType
.
Activate
);
}
}
else
else
{
{
activate_ZefraProvidence
=
true
;
activate_ZefraProvidence
=
true
;
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
}
}
...
@@ -589,7 +613,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -589,7 +613,7 @@ namespace WindBot.Game.AI.Decks
List
<
ClientCard
>
pSpsummonMonster
=
func
.
CardsCheckWhere
(
spSummonMonster
,
func
.
HasType
,
CardType
.
Pendulum
);
List
<
ClientCard
>
pSpsummonMonster
=
func
.
CardsCheckWhere
(
spSummonMonster
,
func
.
HasType
,
CardType
.
Pendulum
);
List
<
ClientCard
>
monsterCards
=
func
.
CardsCheckWhere
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
),
card
=>
List
<
ClientCard
>
monsterCards
=
func
.
CardsCheckWhere
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
),
card
=>
{
return
card
.
IsFaceup
()
&&
card
.
HasType
(
CardType
.
Pendulum
);
});
{
return
card
.
IsFaceup
()
&&
card
.
HasType
(
CardType
.
Pendulum
);
});
if
(
Func
.
MergeList
(
pSpsummonMonster
,
monsterCards
).
Count
<=
0
)
extra_ids
.
Remove
(
CardId
.
HeavymetalfoesElectrumite
);
if
(
Func
.
MergeList
(
pSpsummonMonster
,
monsterCards
).
Count
<=
0
)
extra_ids
.
Remove
(
CardId
.
HeavymetalfoesElectrumite
);
}
}
else
else
...
@@ -615,7 +639,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -615,7 +639,7 @@ namespace WindBot.Game.AI.Decks
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
,
true
).
Count
>
0
))
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
,
true
).
Count
>
0
))
{
{
summoned
=
true
;
summoned
=
true
;
return
true
;
return
BeforeResult
(
ExecutorType
.
Summon
)
;
}
}
return
false
;
return
false
;
}
}
...
@@ -630,11 +654,11 @@ namespace WindBot.Game.AI.Decks
...
@@ -630,11 +654,11 @@ namespace WindBot.Game.AI.Decks
{
{
AI
.
SelectCard
(
CardId
.
Raider_Wing
);
AI
.
SelectCard
(
CardId
.
Raider_Wing
);
AI
.
SelectNextCard
(
CardId
.
Raidraptor_SingingLanius
);
AI
.
SelectNextCard
(
CardId
.
Raidraptor_SingingLanius
);
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
Raidraptor_ForceStrixSummon
()
private
bool
Raidraptor_ForceStrixSummon
()
{
{
return
xyz_mode
;
return
xyz_mode
&&
BeforeResult
(
ExecutorType
.
Summon
)
;
}
}
private
bool
Blackwing_ZephyrostheEliteEffect_2
()
private
bool
Blackwing_ZephyrostheEliteEffect_2
()
...
@@ -642,22 +666,22 @@ namespace WindBot.Game.AI.Decks
...
@@ -642,22 +666,22 @@ namespace WindBot.Game.AI.Decks
if
(!
xyz_mode
&&
Bot
.
GetMonstersInMainZone
().
Count
>
4
)
return
false
;
if
(!
xyz_mode
&&
Bot
.
GetMonstersInMainZone
().
Count
>
4
)
return
false
;
List
<
ClientCard
>
cards
=
func
.
CardsCheckWhere
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
Onfield
,
true
),
card
=>
{
List
<
ClientCard
>
cards
=
func
.
CardsCheckWhere
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
Onfield
,
true
),
card
=>
{
return
!
IsNoLinkCards
(
card
)
&&
!
card
.
IsExtraCard
()
&&
!(
card
.
Location
==
CardLocation
.
SpellZone
return
!
IsNoLinkCards
(
card
)
&&
!
card
.
IsExtraCard
()
&&
!(
card
.
Location
==
CardLocation
.
SpellZone
&&
Func
.
IsCode
(
card
,
CardId
.
SaryujaSkullDread
,
CardId
.
MechaPhantomBeastAuroradon
,
CardId
.
HeavymetalfoesElectrumite
,
CardId
.
CrystronHalqifibrax
,
CardId
.
Raidraptor_WiseStrix
,
&&
Func
.
IsCode
(
card
,
CardId
.
SaryujaSkullDread
,
CardId
.
MechaPhantomBeastAuroradon
,
CardId
.
HeavymetalfoesElectrumite
,
CardId
.
CrystronHalqifibrax
,
CardId
.
Raidraptor_WiseStrix
,
CardId
.
Linkuriboh
));
CardId
.
Linkuriboh
));
});
});
if
(
cards
.
Count
<=
0
||
(
cards
.
Count
<
2
&&
func
.
CardsCheckCount
(
cards
,
func
.
HasLevel
,
4
)
==
cards
.
Count
))
if
(
cards
.
Count
<=
0
||
(
cards
.
Count
<
2
&&
func
.
CardsCheckCount
(
cards
,
func
.
HasLevel
,
4
)
==
cards
.
Count
))
{
{
Blackwing_ZephyrostheElite_activate
=
true
;
Blackwing_ZephyrostheElite_activate
=
true
;
return
false
;
return
false
;
}
}
cards
.
Sort
((
cardA
,
cardB
)
=>
cards
.
Sort
((
cardA
,
cardB
)
=>
{
{
if
(
cardA
.
Location
!=
CardLocation
.
MonsterZone
&&
cardB
.
Location
==
CardLocation
.
MonsterZone
)
return
-
1
;
if
(
cardA
.
Location
!=
CardLocation
.
MonsterZone
&&
cardB
.
Location
==
CardLocation
.
MonsterZone
)
return
-
1
;
if
(
cardA
.
Location
==
CardLocation
.
MonsterZone
&&
cardB
.
Location
!=
CardLocation
.
MonsterZone
)
return
1
;
if
(
cardA
.
Location
==
CardLocation
.
MonsterZone
&&
cardB
.
Location
!=
CardLocation
.
MonsterZone
)
return
1
;
if
(
cardA
.
Location
==
CardLocation
.
SpellZone
&&
cardB
.
Location
==
CardLocation
.
SpellZone
)
if
(
cardA
.
Location
==
CardLocation
.
SpellZone
&&
cardB
.
Location
==
CardLocation
.
SpellZone
)
{
{
if
(
cardA
.
IsCode
(
CardId
.
OracleofZefra
)
&&
!
cardB
.
IsCode
(
CardId
.
OracleofZefra
))
return
-
1
;
if
(
cardA
.
IsCode
(
CardId
.
OracleofZefra
)
&&
!
cardB
.
IsCode
(
CardId
.
OracleofZefra
))
return
-
1
;
if
(!
cardA
.
IsCode
(
CardId
.
OracleofZefra
)
&&
cardB
.
IsCode
(
CardId
.
OracleofZefra
))
return
1
;
if
(!
cardA
.
IsCode
(
CardId
.
OracleofZefra
)
&&
cardB
.
IsCode
(
CardId
.
OracleofZefra
))
return
1
;
return
0
;
return
0
;
}
}
if
(
xyz_mode
)
if
(
xyz_mode
)
...
@@ -673,14 +697,46 @@ namespace WindBot.Game.AI.Decks
...
@@ -673,14 +697,46 @@ namespace WindBot.Game.AI.Decks
});
});
Blackwing_ZephyrostheElite_activate
=
false
;
Blackwing_ZephyrostheElite_activate
=
false
;
AI
.
SelectCard
(
cards
);
AI
.
SelectCard
(
cards
);
return
BeforeResult
(
ExecutorType
.
Activate
);
}
public
override
void
OnChaining
(
int
player
,
ClientCard
card
)
{
if
(
card
==
null
)
return
;
if
(
player
==
1
&&
Func
.
IsCode
(
card
,
14558127
,
59438930
,
94145021
,
38814750
,
73642296
,
97268402
))
enemy_activate
=
true
;
base
.
OnChaining
(
player
,
card
);
}
private
bool
BeforeResult
(
ExecutorType
type
)
{
if
(
type
==
ExecutorType
.
Activate
)
{
ResetFlag
();
++
activate_count
;
}
if
(
type
==
ExecutorType
.
Summon
)
{
++
summon_count
;
}
return
true
;
return
true
;
}
}
private
bool
GoToEndPhase
()
{
if
(
Duel
.
Player
==
0
&&
Duel
.
Turn
==
1
&&
func
.
CardsCheckCount
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
,
true
),
IsNoLinkCards
)
<=
0
&&
activate_count
+
summon_count
<
5
&&
!
enemy_activate
)
{
AI
.
SendCustomChat
((
int
)
CustomMessage
.
Angry
);
return
true
;
}
return
false
;
}
private
bool
DefaultPActivate
()
private
bool
DefaultPActivate
()
{
{
if
(
PendulumActivate
()
&&
Func
.
IsCode
(
Card
,
CardId
.
Zefraxi_TreasureoftheYangZing
,
CardId
.
SecretoftheYangZing
))
if
(
PendulumActivate
()
&&
Func
.
IsCode
(
Card
,
CardId
.
Zefraxi_TreasureoftheYangZing
,
CardId
.
SecretoftheYangZing
))
{
{
return
Bot
.
HasInHandOrInSpellZone
(
CardId
.
NinePillarsofYangZing
)
&&
func
.
CardsCheckCount
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
SpellZone
,
return
Bot
.
HasInHandOrInSpellZone
(
CardId
.
NinePillarsofYangZing
)
&&
func
.
CardsCheckCount
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
SpellZone
,
true
),
card
=>
{
return
Func
.
IsCode
(
Card
,
CardId
.
Zefraxi_TreasureoftheYangZing
,
CardId
.
SecretoftheYangZing
);
})
<=
0
;
true
),
card
=>
{
return
Func
.
IsCode
(
Card
,
CardId
.
Zefraxi_TreasureoftheYangZing
,
CardId
.
SecretoftheYangZing
);
})
<=
0
&&
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
return
false
;
return
false
;
}
}
...
@@ -693,7 +749,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -693,7 +749,7 @@ namespace WindBot.Game.AI.Decks
{
{
if
(!
xyz_mode
)
return
false
;
if
(!
xyz_mode
)
return
false
;
AI
.
SelectMaterials
(
CardId
.
Raidraptor_ArsenalFalcon
,
CardId
.
Blackwing_ZephyrostheElite
);
AI
.
SelectMaterials
(
CardId
.
Raidraptor_ArsenalFalcon
,
CardId
.
Blackwing_ZephyrostheElite
);
return
true
;
return
BeforeResult
(
ExecutorType
.
Summon
)
;
}
}
private
bool
Raidraptor_WiseStrixEffect
()
private
bool
Raidraptor_WiseStrixEffect
()
{
{
...
@@ -705,17 +761,17 @@ namespace WindBot.Game.AI.Decks
...
@@ -705,17 +761,17 @@ namespace WindBot.Game.AI.Decks
if
(
HasInDeck
(
CardId
.
Raider_Wing
))
++
count
;
if
(
HasInDeck
(
CardId
.
Raider_Wing
))
++
count
;
if
(
count
<=
1
)
return
false
;
if
(
count
<=
1
)
return
false
;
AI
.
SelectCard
(
CardId
.
Raider_Wing
);
AI
.
SelectCard
(
CardId
.
Raider_Wing
);
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
Raidraptor_ArsenalFalconEffect
()
private
bool
Raidraptor_ArsenalFalconEffect
()
{
{
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
{
AI
.
SelectCard
(
CardId
.
SupremeKingGateZero
);
AI
.
SelectCard
(
CardId
.
SupremeKingGateZero
);
AI
.
SelectNextCard
(
new
int
[]
{
CardId
.
Blackwing_ZephyrostheElite
,
CardId
.
Raider_Wing
,
CardId
.
Raidraptor_SingingLanius
});
AI
.
SelectNextCard
(
new
int
[]
{
CardId
.
Blackwing_ZephyrostheElite
,
CardId
.
Raider_Wing
,
CardId
.
Raidraptor_SingingLanius
});
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
return
false
;
return
false
;
}
}
...
@@ -727,7 +783,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -727,7 +783,7 @@ namespace WindBot.Game.AI.Decks
if
(
materials_lists
.
Count
<=
0
)
return
false
;
if
(
materials_lists
.
Count
<=
0
)
return
false
;
AI
.
SelectMaterials
(
materials_lists
[
0
]);
AI
.
SelectMaterials
(
materials_lists
[
0
]);
xyz_mode
=
true
;
xyz_mode
=
true
;
return
true
;
return
BeforeResult
(
ExecutorType
.
Summon
)
;
}
}
private
bool
Odd_EyesMeteorburstDragonCheck
()
private
bool
Odd_EyesMeteorburstDragonCheck
()
{
{
...
@@ -740,6 +796,14 @@ namespace WindBot.Game.AI.Decks
...
@@ -740,6 +796,14 @@ namespace WindBot.Game.AI.Decks
var
materials_sy_lists
=
Util
.
GetSynchroMaterials
(
pre_materials
,
7
,
1
,
1
,
false
,
true
,
null
,
card
=>
{
return
!
card
.
IsCode
(
CardId
.
MythicalBeastJackalKing
)
&&
!
card
.
IsCode
(
CardId
.
HeraldoftheArcLight
);
});
var
materials_sy_lists
=
Util
.
GetSynchroMaterials
(
pre_materials
,
7
,
1
,
1
,
false
,
true
,
null
,
card
=>
{
return
!
card
.
IsCode
(
CardId
.
MythicalBeastJackalKing
)
&&
!
card
.
IsCode
(
CardId
.
HeraldoftheArcLight
);
});
if
(
materials_sy_lists
.
Count
<=
0
)
return
false
;
if
(
materials_sy_lists
.
Count
<=
0
)
return
false
;
Odd_EyesMeteorburstDragon_materials
.
Clear
();
Odd_EyesMeteorburstDragon_materials
.
Clear
();
foreach
(
var
materials
in
materials_sy_lists
)
{
if
(
func
.
CardsCheckCount
(
materials
,
func
.
IsCode
,
CardId
.
SupremeKingGateZero
)
>
0
)
{
Odd_EyesMeteorburstDragon_materials
.
AddRange
(
materials
);
return
true
;
}
}
Odd_EyesMeteorburstDragon_materials
.
AddRange
(
materials_sy_lists
[
0
]);
Odd_EyesMeteorburstDragon_materials
.
AddRange
(
materials_sy_lists
[
0
]);
return
true
;
return
true
;
}
}
...
@@ -747,38 +811,38 @@ namespace WindBot.Game.AI.Decks
...
@@ -747,38 +811,38 @@ namespace WindBot.Game.AI.Decks
{
{
if
(!
Odd_EyesMeteorburstDragonCheck
())
return
false
;
if
(!
Odd_EyesMeteorburstDragonCheck
())
return
false
;
AI
.
SelectMaterials
(
Odd_EyesMeteorburstDragon_materials
);
AI
.
SelectMaterials
(
Odd_EyesMeteorburstDragon_materials
);
return
true
;
return
BeforeResult
(
ExecutorType
.
Summon
)
;
}
}
private
bool
Odd_EyesMeteorburstDragonEffect
()
private
bool
Odd_EyesMeteorburstDragonEffect
()
{
{
AI
.
SelectCard
(
CardId
.
SupremeKingGateZero
);
AI
.
SelectCard
(
CardId
.
SupremeKingGateZero
);
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
DDSavantKeplerSummon
()
private
bool
DDSavantKeplerSummon
()
{
{
if
(
HasInDeck
(
CardId
.
DarkContractwiththGate
))
if
(
HasInDeck
(
CardId
.
DarkContractwiththGate
))
{
{
summoned
=
true
;
summoned
=
true
;
return
true
;
return
BeforeResult
(
ExecutorType
.
Summon
)
;
}
}
return
false
;
return
false
;
}
}
// private void DebugCards(string msg, IList<ClientCard> cards)
// private void DebugCards(string msg, IList<ClientCard> cards)
// {
// {
//#if DEBUG
//#if DEBUG
// Logger.DebugWriteLine(cards.Count + msg);
// Logger.DebugWriteLine(cards.Count + msg);
// foreach (var card in cards)
// foreach (var card in cards)
// {
// {
// if (card == null) continue;
// if (card == null) continue;
// NamedCard namedCard = NamedCard.Get(card.Id);
// NamedCard namedCard = NamedCard.Get(card.Id);
// if (namedCard == null) continue;
// if (namedCard == null) continue;
// Logger.DebugWriteLine(msg + namedCard.Name);
// Logger.DebugWriteLine(msg + namedCard.Name);
// }
// }
//#endif
//#endif
// }
// }
private
bool
ServantofEndymionEffect_2
()
private
bool
ServantofEndymionEffect_2
()
{
{
if
(
Card
.
Location
==
CardLocation
.
SpellZone
)
return
true
;
if
(
Card
.
Location
==
CardLocation
.
SpellZone
)
return
BeforeResult
(
ExecutorType
.
Activate
)
;
return
false
;
return
false
;
}
}
private
bool
IsSpsummonPMonster
(
ClientCard
card
)
private
bool
IsSpsummonPMonster
(
ClientCard
card
)
...
@@ -808,7 +872,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -808,7 +872,7 @@ namespace WindBot.Game.AI.Decks
if
(!
activate_OracleofZefra
&&
func
.
CardsCheckAny
(
Bot
.
Hand
,
func
.
IsCode
,
CardId
.
OracleofZefra
))
++
count
;
if
(!
activate_OracleofZefra
&&
func
.
CardsCheckAny
(
Bot
.
Hand
,
func
.
IsCode
,
CardId
.
OracleofZefra
))
++
count
;
if
(
func
.
CardsCheckAny
(
Bot
.
Hand
,
func
.
IsCode
,
CardId
.
Terraforming
)
&&
HasInDeck
(
CardId
.
OracleofZefra
))
++
count
;
if
(
func
.
CardsCheckAny
(
Bot
.
Hand
,
func
.
IsCode
,
CardId
.
Terraforming
)
&&
HasInDeck
(
CardId
.
OracleofZefra
))
++
count
;
if
(
func
.
CardsCheckAny
(
Bot
.
Hand
,
func
.
IsCode
,
CardId
.
FoolishBurial
))
++
count
;
if
(
func
.
CardsCheckAny
(
Bot
.
Hand
,
func
.
IsCode
,
CardId
.
FoolishBurial
))
++
count
;
if
(
func
.
CardsCheckCount
(
Bot
.
Hand
,
func
.
HasType
,
CardType
.
Pendulum
)
>
1
&&
Bot
.
SpellZone
[
0
]
==
null
&&
if
(
func
.
CardsCheckCount
(
Bot
.
Hand
,
func
.
HasType
,
CardType
.
Pendulum
)
>
1
&&
Bot
.
SpellZone
[
0
]
==
null
&&
Bot
.
SpellZone
[
4
]
==
null
)
++
count
;
Bot
.
SpellZone
[
4
]
==
null
)
++
count
;
if
(!
summoned
&&
Bot
.
HasInHand
(
CardId
.
DDSavantKepler
)
&&
HasInDeck
(
CardId
.
DarkContractwiththGate
))
++
count
;
if
(!
summoned
&&
Bot
.
HasInHand
(
CardId
.
DDSavantKepler
)
&&
HasInDeck
(
CardId
.
DarkContractwiththGate
))
++
count
;
return
count
;
return
count
;
...
@@ -817,7 +881,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -817,7 +881,7 @@ namespace WindBot.Game.AI.Decks
{
{
if
(
PendulumActivate
())
if
(
PendulumActivate
())
{
{
return
PendulumDefaultActivate
();
return
PendulumDefaultActivate
()
&&
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
return
false
;
return
false
;
}
}
...
@@ -826,15 +890,16 @@ namespace WindBot.Game.AI.Decks
...
@@ -826,15 +890,16 @@ namespace WindBot.Game.AI.Decks
if
(
Duel
.
LastChainPlayer
==
0
)
return
false
;
if
(
Duel
.
LastChainPlayer
==
0
)
return
false
;
AI
.
SelectCard
(
CardId
.
RitualBeastTamerZeframpilica
,
CardId
.
SatellarknightZefrathuban
,
CardId
.
StellarknightZefraxciton
,
CardId
.
FlameBeastoftheNekroz
,
CardId
.
ShaddollZefracore
,
AI
.
SelectCard
(
CardId
.
RitualBeastTamerZeframpilica
,
CardId
.
SatellarknightZefrathuban
,
CardId
.
StellarknightZefraxciton
,
CardId
.
FlameBeastoftheNekroz
,
CardId
.
ShaddollZefracore
,
CardId
.
SecretoftheYangZing
,
CardId
.
Zefraxi_TreasureoftheYangZing
);
CardId
.
SecretoftheYangZing
,
CardId
.
Zefraxi_TreasureoftheYangZing
);
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
NinePillarsofYangZingEffect
()
private
bool
NinePillarsofYangZingEffect
()
{
{
if
(
Duel
.
LastChainPlayer
==
0
)
return
false
;
if
(
Duel
.
LastChainPlayer
==
0
)
return
false
;
List
<
ClientCard
>
cards
=
func
.
CardsIdToClientCards
(
new
List
<
int
>
{
CardId
.
SecretoftheYangZing
},
Bot
.
MonsterZone
);
List
<
ClientCard
>
cards
=
func
.
CardsIdToClientCards
(
new
List
<
int
>
{
CardId
.
SecretoftheYangZing
},
Bot
.
MonsterZone
);
cards
.
AddRange
(
func
.
CardsIdToClientCards
(
new
List
<
int
>
{
CardId
.
SecretoftheYangZing
,
CardId
.
Zefraxi_TreasureoftheYangZing
},
Bot
.
SpellZone
));
cards
.
AddRange
(
func
.
CardsIdToClientCards
(
new
List
<
int
>
{
CardId
.
SecretoftheYangZing
,
CardId
.
Zefraxi_TreasureoftheYangZing
},
Bot
.
SpellZone
));
AI
.
SelectCard
(
cards
);
AI
.
SelectCard
(
cards
);
return
true
;
should_destory
=
true
;
return
BeforeResult
(
ExecutorType
.
Activate
);
}
}
private
bool
IsActivateBlackwing_ZephyrostheElite
()
private
bool
IsActivateBlackwing_ZephyrostheElite
()
{
{
...
@@ -848,19 +913,19 @@ namespace WindBot.Game.AI.Decks
...
@@ -848,19 +913,19 @@ namespace WindBot.Game.AI.Decks
{
{
if
(
PendulumActivate
())
if
(
PendulumActivate
())
{
{
if
(
IsActivateBlackwing_ZephyrostheElite
())
return
true
;
if
(
IsActivateBlackwing_ZephyrostheElite
())
return
BeforeResult
(
ExecutorType
.
Activate
)
;
if
((!
HasInDeck
(
CardId
.
TheMightyMasterofMagic
)
&&
!
HasInDeck
(
CardId
.
MythicalBeastJackalKing
)
||
GetSpellActivateCount
()
<
2
))
return
false
;
if
((!
HasInDeck
(
CardId
.
TheMightyMasterofMagic
)
&&
!
HasInDeck
(
CardId
.
MythicalBeastJackalKing
)
||
GetSpellActivateCount
()
<
2
))
return
false
;
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
else
if
(
Card
.
Location
==
CardLocation
.
SpellZone
)
else
if
(
Card
.
Location
==
CardLocation
.
SpellZone
)
{
{
if
(
func
.
HasInZone
(
Bot
,
CardLocation
.
Hand
|
CardLocation
.
PendulumZone
,
CardId
.
Zefraath
,
true
))
if
(
func
.
HasInZone
(
Bot
,
CardLocation
.
Hand
|
CardLocation
.
PendulumZone
,
CardId
.
Zefraath
,
true
))
{
{
return
func
.
CardsCheckAny
(
Bot
.
Hand
,
IsSpsummonPMonster
);
return
func
.
CardsCheckAny
(
Bot
.
Hand
,
IsSpsummonPMonster
)
&&
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
else
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
return
true
;
else
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
return
BeforeResult
(
ExecutorType
.
Activate
)
;
else
return
false
;
else
return
false
;
}
}
private
bool
IsZefraScaleAbove
(
ClientCard
card
)
private
bool
IsZefraScaleAbove
(
ClientCard
card
)
...
@@ -873,16 +938,16 @@ namespace WindBot.Game.AI.Decks
...
@@ -873,16 +938,16 @@ namespace WindBot.Game.AI.Decks
}
}
private
bool
TerraformingEffect
()
private
bool
TerraformingEffect
()
{
{
return
Bot
.
HasInHand
(
CardId
.
OracleofZefra
);
return
Bot
.
HasInHand
(
CardId
.
OracleofZefra
)
&&
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
DDSavantKeplerEffect
()
private
bool
DDSavantKeplerEffect
()
{
{
if
(
PendulumActivate
())
return
false
;
if
(
PendulumActivate
())
return
false
;
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
FoolishBurialEffect
()
private
bool
FoolishBurialEffect
()
{
{
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
List
<
ClientCard
>
GetSynchroMaterials
()
private
List
<
ClientCard
>
GetSynchroMaterials
()
{
{
...
@@ -892,28 +957,31 @@ namespace WindBot.Game.AI.Decks
...
@@ -892,28 +957,31 @@ namespace WindBot.Game.AI.Decks
}
}
private
bool
DestrudotheLostDragon_FrissonEffect
()
private
bool
DestrudotheLostDragon_FrissonEffect
()
{
{
if
(
Bot
.
HasInExtra
(
CardId
.
CrystronHalqifibrax
))
return
true
;
if
(
Bot
.
HasInExtra
(
CardId
.
CrystronHalqifibrax
))
return
BeforeResult
(
ExecutorType
.
Activate
)
;
if
(!
Bot
.
HasInExtra
(
CardId
.
F_A_DawnDragster
)
&&
!
Bot
.
HasInExtra
(
CardId
.
Odd_EyesMeteorburstDragon
))
return
false
;
if
(!
Bot
.
HasInExtra
(
CardId
.
F_A_DawnDragster
)
&&
!
Bot
.
HasInExtra
(
CardId
.
Odd_EyesMeteorburstDragon
))
return
false
;
List
<
ClientCard
>
pre_materials
=
func
.
CardsCheckWhere
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
,
true
),
card
=>
{
return
SecretoftheYangZingCheck
(
card
)
&&
!
IsNoLinkCards
(
card
)
&&
!
card
.
HasType
(
CardType
.
Tuner
)
&&
card
.
Level
>
0
;
});
List
<
ClientCard
>
pre_materials
=
func
.
CardsCheckWhere
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
,
true
),
card
=>
{
return
SecretoftheYangZingCheck
(
card
)
&&
!
IsNoLinkCards
(
card
)
&&
!
card
.
HasType
(
CardType
.
Tuner
)
&&
card
.
Level
>
0
;
});
if
(
pre_materials
.
Count
<=
0
)
return
false
;
if
(
pre_materials
.
Count
<=
0
)
return
false
;
List
<
ClientCard
>
cards
=
func
.
CardsCheckWhere
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
,
true
),
card
=>
List
<
ClientCard
>
cards
=
func
.
CardsCheckWhere
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
,
true
),
card
=>
{
{
return
!
IsNoLinkCards
(
card
)
&&
card
.
Level
>
0
&&
!
card
.
HasType
(
CardType
.
Tuner
);
return
!
IsNoLinkCards
(
card
)
&&
card
.
Level
>
0
&&
!
card
.
HasType
(
CardType
.
Tuner
);
});
});
if
(
cards
.
Count
<=
0
)
return
false
;
if
(
cards
.
Count
<=
0
)
return
false
;
AI
.
SelectCard
(
cards
);
AI
.
SelectCard
(
cards
);
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
IsCanSynchroSummon
(
int
level
)
private
bool
IsCanSynchroSummon
(
int
level
)
{
{
return
func
.
CardsCheckAny
(
GetSynchroMaterials
(),
card
=>
{
return
(
card
.
Level
+
level
==
8
return
func
.
CardsCheckAny
(
GetSynchroMaterials
(),
card
=>
{
&&
func
.
CardsCheckAny
(
Bot
.
ExtraDeck
,
synchro_card
=>
{
return
Func
.
IsCode
(
synchro_card
,
CardId
.
BorreloadSavageDragon
,
CardId
.
PSY_FramelordOmega
);
}))
return
(
card
.
Level
+
level
==
8
||
(
card
.
Level
+
level
==
7
&&
SecretoftheYangZingCheck
(
card
)
&&
func
.
CardsCheckAny
(
Bot
.
ExtraDeck
,
synchro_card
=>
{
return
Func
.
IsCode
(
synchro_card
,
CardId
.
Odd_EyesMeteorburstDragon
,
CardId
.
F_A_DawnDragster
);
}))
&&
func
.
CardsCheckAny
(
Bot
.
ExtraDeck
,
synchro_card
=>
{
return
Func
.
IsCode
(
synchro_card
,
CardId
.
BorreloadSavageDragon
,
CardId
.
PSY_FramelordOmega
);
}))
||
(
card
.
Level
+
level
==
5
&&
Bot
.
HasInExtra
(
CardId
.
Denglong_FirstoftheYangZing
))
||
(
card
.
Level
+
level
==
7
&&
SecretoftheYangZingCheck
(
card
)
&&
func
.
CardsCheckAny
(
Bot
.
ExtraDeck
,
synchro_card
=>
{
return
Func
.
IsCode
(
synchro_card
,
CardId
.
Odd_EyesMeteorburstDragon
,
CardId
.
F_A_DawnDragster
);
}))
||
(
card
.
Level
+
level
==
4
&&
Bot
.
HasInExtra
(
CardId
.
HeraldoftheArcLight
));
});
||
(
card
.
Level
+
level
==
5
&&
Bot
.
HasInExtra
(
CardId
.
Denglong_FirstoftheYangZing
))
||
(
card
.
Level
+
level
==
4
&&
Bot
.
HasInExtra
(
CardId
.
HeraldoftheArcLight
));
});
}
}
private
bool
DDLamiaEffect
()
private
bool
DDLamiaEffect
()
{
{
if
(
Bot
.
HasInExtra
(
CardId
.
MechaPhantomBeastAuroradon
)
&&
Bot
.
GetMonstersInMainZone
().
Count
>=
3
)
return
false
;
if
(!
Bot
.
HasInExtra
(
CardId
.
CrystronHalqifibrax
)
&&
!
IsCanSynchroSummon
(
Card
.
Level
))
return
false
;
if
(!
Bot
.
HasInExtra
(
CardId
.
CrystronHalqifibrax
)
&&
!
IsCanSynchroSummon
(
Card
.
Level
))
return
false
;
AI
.
SelectCard
(
CardId
.
DarkContractwiththGate
,
CardId
.
DDSavantKepler
);
AI
.
SelectCard
(
CardId
.
DarkContractwiththGate
,
CardId
.
DDSavantKepler
);
activate_DDLamia
=
true
;
activate_DDLamia
=
true
;
...
@@ -921,15 +989,15 @@ namespace WindBot.Game.AI.Decks
...
@@ -921,15 +989,15 @@ namespace WindBot.Game.AI.Decks
}
}
private
bool
DragonShrineEffect
()
private
bool
DragonShrineEffect
()
{
{
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
ZefraathEffect
()
private
bool
ZefraathEffect
()
{
{
if
(
PendulumActivate
())
return
!
activate_p_Zefraath
||
IsActivateBlackwing_ZephyrostheElite
();
if
(
PendulumActivate
())
return
!
activate_p_Zefraath
||
IsActivateBlackwing_ZephyrostheElite
();
if
(
Card
.
Location
==
CardLocation
.
SpellZone
)
if
(
Card
.
Location
==
CardLocation
.
SpellZone
)
{
{
activate_p_Zefraath
=
true
;
activate_p_Zefraath
=
true
;
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
return
false
;
return
false
;
}
}
...
@@ -937,9 +1005,9 @@ namespace WindBot.Game.AI.Decks
...
@@ -937,9 +1005,9 @@ namespace WindBot.Game.AI.Decks
{
{
if
(
PendulumActivate
())
if
(
PendulumActivate
())
{
{
return
PendulumDefaultActivate
();
return
PendulumDefaultActivate
()
&&
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
BorreloadSavageDragonSummon_2
()
private
bool
BorreloadSavageDragonSummon_2
()
{
{
...
@@ -948,19 +1016,19 @@ namespace WindBot.Game.AI.Decks
...
@@ -948,19 +1016,19 @@ namespace WindBot.Game.AI.Decks
}
}
private
bool
BorreloadSavageDragonSummon
()
private
bool
BorreloadSavageDragonSummon
()
{
{
var
materials_lists
=
Util
.
GetSynchroMaterials
(
Bot
.
MonsterZone
,
Card
.
Level
,
1
,
1
,
false
,
true
,
null
,
var
materials_lists
=
Util
.
GetSynchroMaterials
(
Bot
.
MonsterZone
,
Card
.
Level
,
1
,
1
,
false
,
true
,
null
,
card
=>
{
return
!
card
.
IsCode
(
CardId
.
F_A_DawnDragster
)
&&
!
card
.
IsCode
(
CardId
.
TheMightyMasterofMagic
)
&&
!
card
.
IsCode
(
CardId
.
HeraldoftheArcLight
);
});
card
=>
{
return
!
card
.
IsCode
(
CardId
.
F_A_DawnDragster
)
&&
!
card
.
IsCode
(
CardId
.
TheMightyMasterofMagic
)
&&
!
card
.
IsCode
(
CardId
.
HeraldoftheArcLight
);
});
if
(
materials_lists
.
Count
<=
0
)
return
false
;
if
(
materials_lists
.
Count
<=
0
)
return
false
;
foreach
(
var
materials
in
materials_lists
)
foreach
(
var
materials
in
materials_lists
)
{
{
if
(
func
.
CardsCheckAny
(
materials
,
func
.
IsCode
,
CardId
.
MechaPhantomBeastToken
))
if
(
func
.
CardsCheckAny
(
materials
,
func
.
IsCode
,
CardId
.
MechaPhantomBeastToken
))
{
{
AI
.
SelectMaterials
(
materials
);
AI
.
SelectMaterials
(
materials
);
return
true
;
return
BeforeResult
(
ExecutorType
.
Summon
)
;
}
}
}
}
AI
.
SelectMaterials
(
materials_lists
[
0
]);
AI
.
SelectMaterials
(
materials_lists
[
0
]);
return
true
;
return
BeforeResult
(
ExecutorType
.
Summon
)
;
}
}
private
bool
BorreloadSavageDragonEffect
()
private
bool
BorreloadSavageDragonEffect
()
{
{
...
@@ -976,23 +1044,23 @@ namespace WindBot.Game.AI.Decks
...
@@ -976,23 +1044,23 @@ namespace WindBot.Game.AI.Decks
CardId
.
CrystronHalqifibrax
,
CardId
.
CrystronHalqifibrax
,
CardId
.
Raidraptor_WiseStrix
CardId
.
Raidraptor_WiseStrix
});
});
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
TheMightyMasterofMagicEffect
()
private
bool
TheMightyMasterofMagicEffect
()
{
{
if
(
PendulumActivate
())
if
(
PendulumActivate
())
{
{
return
PendulumDefaultActivate
();
return
PendulumDefaultActivate
()
&&
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
else
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
else
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
{
if
(
Duel
.
LastChainPlayer
==
0
)
return
false
;
if
(
Duel
.
LastChainPlayer
==
0
)
return
false
;
AI
.
SelectCard
(
CardId
.
ServantofEndymion
,
CardId
.
TheMightyMasterofMagic
);
AI
.
SelectCard
(
CardId
.
ServantofEndymion
,
CardId
.
TheMightyMasterofMagic
);
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
else
else
{
{
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
}
}
private
bool
checkPActivate
()
private
bool
checkPActivate
()
...
@@ -1002,31 +1070,33 @@ namespace WindBot.Game.AI.Decks
...
@@ -1002,31 +1070,33 @@ namespace WindBot.Game.AI.Decks
if
(
Bot
.
HasInHand
(
CardId
.
Zefraath
)
&&
(
Bot
.
SpellZone
[
0
]
!=
null
||
Bot
.
SpellZone
[
4
]
!=
null
))
return
false
;
if
(
Bot
.
HasInHand
(
CardId
.
Zefraath
)
&&
(
Bot
.
SpellZone
[
0
]
!=
null
||
Bot
.
SpellZone
[
4
]
!=
null
))
return
false
;
if
(
Bot
.
SpellZone
[
0
]
==
null
&&
Bot
.
SpellZone
[
4
]
==
null
)
if
(
Bot
.
SpellZone
[
0
]
==
null
&&
Bot
.
SpellZone
[
4
]
==
null
)
{
{
if
(!
Bot
.
HasInHand
(
CardId
.
Zefraath
)
&&
!
func
.
CardsCheckAny
(
Bot
.
Hand
,
card
=>
{
return
IsSpsummonPMonster
(
card
)
&&
if
(!
Bot
.
HasInHand
(
CardId
.
Zefraath
)
&&
!
func
.
CardsCheckAny
(
Bot
.
Hand
,
card
=>
{
(
Card
.
LScale
>=
5
?
card
.
LScale
<
5
:
card
.
LScale
>
5
)
&&
func
.
GetPSpSummonMonster
(
Bot
,
card
,
Card
)?.
Count
>
0
;
}))
return
false
;
return
IsSpsummonPMonster
(
card
)
&&
(
Card
.
LScale
>=
5
?
card
.
LScale
<
5
:
card
.
LScale
>
5
)
&&
func
.
GetPSpSummonMonster
(
Bot
,
card
,
Card
)?.
Count
>
0
;
}))
return
false
;
}
}
else
else
{
{
if
(
func
.
GetPSpSummonMonster
(
Bot
,
Bot
.
SpellZone
[
0
],
Card
)?.
Count
<=
0
&&
func
.
GetPSpSummonMonster
(
Bot
,
Bot
.
SpellZone
[
4
],
Card
)?.
Count
<=
0
)
return
false
;
if
(
func
.
GetPSpSummonMonster
(
Bot
,
Bot
.
SpellZone
[
0
],
Card
)?.
Count
<=
0
&&
func
.
GetPSpSummonMonster
(
Bot
,
Bot
.
SpellZone
[
4
],
Card
)?.
Count
<=
0
)
return
false
;
}
}
return
true
;
return
true
;
}
}
private
bool
SecretoftheYangZingEffect
()
private
bool
SecretoftheYangZingEffect
()
{
{
if
(
PendulumActivate
())
if
(
PendulumActivate
())
{
{
return
PendulumDefaultActivate
();
return
PendulumDefaultActivate
()
&&
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
activate_SecretoftheYangZing
=
true
;
activate_SecretoftheYangZing
=
true
;
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
SatellarknightZefrathubanEffect
()
private
bool
SatellarknightZefrathubanEffect
()
{
{
if
(
PendulumActivate
())
if
(
PendulumActivate
())
{
{
return
PendulumDefaultActivate
();
return
PendulumDefaultActivate
()
&&
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
return
false
;
return
false
;
}
}
...
@@ -1035,7 +1105,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -1035,7 +1105,7 @@ namespace WindBot.Game.AI.Decks
if
(
Duel
.
LastChainPlayer
==
1
)
if
(
Duel
.
LastChainPlayer
==
1
)
{
{
ClientCard
card
=
Util
.
GetLastChainCard
();
ClientCard
card
=
Util
.
GetLastChainCard
();
return
card
!=
null
&&
!
card
.
HasType
(
CardType
.
Continuous
|
CardType
.
Field
)
&&
card
.
HasType
(
CardType
.
Spell
|
CardType
.
Trap
);
return
card
!=
null
&&
!
card
.
HasType
(
CardType
.
Continuous
|
CardType
.
Field
)
&&
card
.
HasType
(
CardType
.
Spell
|
CardType
.
Trap
)
&&
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
return
false
;
return
false
;
}
}
...
@@ -1043,42 +1113,42 @@ namespace WindBot.Game.AI.Decks
...
@@ -1043,42 +1113,42 @@ namespace WindBot.Game.AI.Decks
{
{
if
(
PendulumActivate
())
if
(
PendulumActivate
())
{
{
return
PendulumDefaultActivate
();
return
PendulumDefaultActivate
()
&&
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
OracleofZefraEffect
()
private
bool
OracleofZefraEffect
()
{
{
activate_OracleofZefra
=
true
;
activate_OracleofZefra
=
true
;
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
FlameBeastoftheNekrozEffect
()
private
bool
FlameBeastoftheNekrozEffect
()
{
{
if
(
PendulumActivate
())
if
(
PendulumActivate
())
{
{
return
PendulumDefaultActivate
();
return
PendulumDefaultActivate
()
&&
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
else
else
{
{
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
}
}
private
bool
AstrographSorcererEffect
()
private
bool
AstrographSorcererEffect
()
{
{
if
(
PendulumActivate
())
return
false
;
if
(
PendulumActivate
())
return
false
;
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
StellarknightZefraxcitonEffect
()
private
bool
StellarknightZefraxcitonEffect
()
{
{
if
(
PendulumActivate
())
if
(
PendulumActivate
())
{
{
return
PendulumDefaultActivate
();
return
PendulumDefaultActivate
()
&&
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
else
else
{
{
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
}
}
private
bool
IsNoLinkCards
(
ClientCard
card
)
private
bool
IsNoLinkCards
(
ClientCard
card
)
...
@@ -1090,7 +1160,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -1090,7 +1160,7 @@ namespace WindBot.Game.AI.Decks
}
}
private
bool
LinkuribohSummon
()
private
bool
LinkuribohSummon
()
{
{
List
<
ClientCard
>
materials
=
func
.
CardsCheckWhere
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
,
true
),
func
.
HasLevel
,
1
);
List
<
ClientCard
>
materials
=
func
.
CardsCheckWhere
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
,
true
),
func
.
HasLevel
,
1
);
if
(
func
.
CardsCheckCount
(
materials
,
Func
.
NegateFunc
(
func
.
HasType
),
CardType
.
Tuner
)
<=
0
&&
if
(
func
.
CardsCheckCount
(
materials
,
Func
.
NegateFunc
(
func
.
HasType
),
CardType
.
Tuner
)
<=
0
&&
func
.
CardsCheckCount
(
materials
,
func
.
HasType
,
CardType
.
Tuner
)
<=
1
)
return
false
;
func
.
CardsCheckCount
(
materials
,
func
.
HasType
,
CardType
.
Tuner
)
<=
1
)
return
false
;
materials
.
Sort
((
cardA
,
cardB
)
=>
materials
.
Sort
((
cardA
,
cardB
)
=>
...
@@ -1106,7 +1176,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -1106,7 +1176,7 @@ namespace WindBot.Game.AI.Decks
{
{
if
(
Card
.
HasType
(
CardType
.
Trap
))
if
(
Card
.
HasType
(
CardType
.
Trap
))
{
{
AI
.
SelectPlace
(
Zones
.
z1
|
Zones
.
z2
|
Zones
.
z3
|
Zones
.
z4
|
Zones
.
z0
);
AI
.
SelectPlace
(
Zones
.
z1
|
Zones
.
z2
|
Zones
.
z3
|
Zones
.
z4
|
Zones
.
z0
);
return
true
;
return
true
;
}
}
return
false
;
return
false
;
...
@@ -1124,30 +1194,30 @@ namespace WindBot.Game.AI.Decks
...
@@ -1124,30 +1194,30 @@ namespace WindBot.Game.AI.Decks
{
{
if
(
PendulumActivate
())
if
(
PendulumActivate
())
{
{
return
PendulumDefaultActivate
();
return
PendulumDefaultActivate
()
&&
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
else
else
{
{
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
}
}
private
bool
PSY_FramelordOmegaEffect
()
private
bool
PSY_FramelordOmegaEffect
()
{
{
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
{
if
(
Duel
.
Player
==
0
)
return
true
;
if
(
Duel
.
Player
==
0
)
return
BeforeResult
(
ExecutorType
.
Activate
)
;
else
else
{
{
if
(
Bot
.
Banished
.
Count
<=
0
)
return
false
;
if
(
Bot
.
Banished
.
Count
<=
0
)
return
false
;
AI
.
SelectCard
(
func
.
CardsIdToClientCards
(
new
List
<
int
>
{
CardId
.
JetSynchron
,
CardId
.
DDLamia
},
Bot
.
Banished
));
AI
.
SelectCard
(
func
.
CardsIdToClientCards
(
new
List
<
int
>
{
CardId
.
JetSynchron
,
CardId
.
DDLamia
},
Bot
.
Banished
));
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
}
}
else
else
{
{
if
(
Bot
.
Graveyard
.
Count
<=
0
)
return
false
;
if
(
Bot
.
Graveyard
.
Count
<=
0
)
return
false
;
AI
.
SelectCard
(
func
.
CardsIdToClientCards
(
new
List
<
int
>
{
CardId
.
Zefraath
,
CardId
.
CrystronHalqifibrax
,
CardId
.
Denglong_FirstoftheYangZing
,
CardId
.
BorreloadSavageDragon
,
CardId
.
DDLamia
},
Bot
.
Graveyard
));
AI
.
SelectCard
(
func
.
CardsIdToClientCards
(
new
List
<
int
>
{
CardId
.
Zefraath
,
CardId
.
CrystronHalqifibrax
,
CardId
.
Denglong_FirstoftheYangZing
,
CardId
.
BorreloadSavageDragon
,
CardId
.
DDLamia
},
Bot
.
Graveyard
));
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
}
}
private
bool
Psummon
()
private
bool
Psummon
()
...
@@ -1176,7 +1246,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -1176,7 +1246,7 @@ namespace WindBot.Game.AI.Decks
List
<
ClientCard
>
materials
=
func
.
CardsCheckWhere
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
,
true
),
func
.
HasType
,
CardType
.
Pendulum
);
List
<
ClientCard
>
materials
=
func
.
CardsCheckWhere
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
,
true
),
func
.
HasType
,
CardType
.
Pendulum
);
if
(
materials
.
Count
>
0
)
if
(
materials
.
Count
>
0
)
{
{
materials
.
Sort
((
cardA
,
cardB
)
=>
materials
.
Sort
((
cardA
,
cardB
)
=>
{
{
if
((
cardA
.
Level
==
3
||
cardA
.
HasType
(
CardType
.
Tuner
))
&&
cardB
.
Level
!=
3
&&
!
cardB
.
HasType
(
CardType
.
Tuner
))
return
-
1
;
if
((
cardA
.
Level
==
3
||
cardA
.
HasType
(
CardType
.
Tuner
))
&&
cardB
.
Level
!=
3
&&
!
cardB
.
HasType
(
CardType
.
Tuner
))
return
-
1
;
if
(
cardA
.
Level
!=
3
&&
!
cardA
.
HasType
(
CardType
.
Tuner
)
&&
(
cardB
.
Level
==
3
||
cardB
.
HasType
(
CardType
.
Tuner
)))
return
1
;
if
(
cardA
.
Level
!=
3
&&
!
cardA
.
HasType
(
CardType
.
Tuner
)
&&
(
cardB
.
Level
==
3
||
cardB
.
HasType
(
CardType
.
Tuner
)))
return
1
;
...
@@ -1188,12 +1258,12 @@ namespace WindBot.Game.AI.Decks
...
@@ -1188,12 +1258,12 @@ namespace WindBot.Game.AI.Decks
{
{
if
(
IsExtraZoneCard
(
material
))
result
.
Insert
(
0
,
material
);
if
(
IsExtraZoneCard
(
material
))
result
.
Insert
(
0
,
material
);
else
if
(
IsNoLinkCards
(
material
)
||
(
material
.
HasType
(
CardType
.
Tuner
)
&&
Bot
.
HasInExtra
(
CardId
.
CrystronHalqifibrax
)
else
if
(
IsNoLinkCards
(
material
)
||
(
material
.
HasType
(
CardType
.
Tuner
)
&&
Bot
.
HasInExtra
(
CardId
.
CrystronHalqifibrax
)
&&
func
.
CardsCheckCount
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
,
true
),
func
.
HasType
,
CardType
.
Tuner
)
<=
0
))
continue
;
&&
func
.
CardsCheckCount
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
,
true
),
func
.
HasType
,
CardType
.
Tuner
)
<=
0
))
continue
;
else
result
.
Add
(
material
);
else
result
.
Add
(
material
);
}
}
if
(
result
.
Count
<
2
)
return
false
;
if
(
result
.
Count
<
2
)
return
false
;
AI
.
SelectMaterials
(
result
);
AI
.
SelectMaterials
(
result
);
return
true
;
return
BeforeResult
(
ExecutorType
.
Summon
)
;
}
}
return
false
;
return
false
;
}
}
...
@@ -1202,37 +1272,38 @@ namespace WindBot.Game.AI.Decks
...
@@ -1202,37 +1272,38 @@ namespace WindBot.Game.AI.Decks
if
(
card
.
IsCode
(
CardId
.
SecretoftheYangZing
)
&&
Bot
.
HasInHandOrInSpellZone
(
CardId
.
NinePillarsofYangZing
))
if
(
card
.
IsCode
(
CardId
.
SecretoftheYangZing
)
&&
Bot
.
HasInHandOrInSpellZone
(
CardId
.
NinePillarsofYangZing
))
{
{
return
func
.
CardsCheckCount
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
Hand
|
CardLocation
.
PendulumZone
|
CardLocation
.
MonsterZone
,
true
),
p_card
=>
{
return
func
.
CardsCheckCount
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
Hand
|
CardLocation
.
PendulumZone
|
CardLocation
.
MonsterZone
,
true
),
p_card
=>
{
return
p_card
.
HasSetcode
(
0xc4
)
&&
p_card
.
HasType
(
CardType
.
Pendulum
);})
<=
0
;
return
p_card
.
HasSetcode
(
0xc4
)
&&
p_card
.
HasType
(
CardType
.
Pendulum
);
})
<=
0
;
}
}
return
true
;
return
true
;
}
}
private
bool
F_A_DawnDragsterSummon
()
private
bool
F_A_DawnDragsterSummon
()
{
{
List
<
ClientCard
>
pre_materials
=
func
.
CardsCheckWhere
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
,
true
),
SecretoftheYangZingCheck
);
List
<
ClientCard
>
pre_materials
=
func
.
CardsCheckWhere
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
,
true
),
SecretoftheYangZingCheck
);
var
materials_lists
=
Util
.
GetSynchroMaterials
(
pre_materials
,
7
,
1
,
1
,
false
,
true
,
null
,
card
=>
{
return
!
card
.
IsCode
(
CardId
.
MythicalBeastJackalKing
)
&&
!
card
.
IsCode
(
CardId
.
HeraldoftheArcLight
);
});
var
materials_lists
=
Util
.
GetSynchroMaterials
(
pre_materials
,
7
,
1
,
1
,
false
,
true
,
null
,
card
=>
{
return
!
card
.
IsCode
(
CardId
.
MythicalBeastJackalKing
)
&&
!
card
.
IsCode
(
CardId
.
HeraldoftheArcLight
);
});
if
(
materials_lists
.
Count
<=
0
)
return
false
;
if
(
materials_lists
.
Count
<=
0
)
return
false
;
foreach
(
var
materials
in
materials_lists
)
foreach
(
var
materials
in
materials_lists
)
{
{
if
(
func
.
CardsCheckCount
(
materials
,
card
=>
if
(
func
.
CardsCheckCount
(
materials
,
card
=>
{
{
return
card
.
HasType
(
CardType
.
Tuner
)
&&
card
.
HasRace
(
CardRace
.
Machine
);
return
card
.
HasType
(
CardType
.
Tuner
)
&&
card
.
HasRace
(
CardRace
.
Machine
);
})
<=
0
)
})
<=
0
)
{
{
AI
.
SelectMaterials
(
materials
);
AI
.
SelectMaterials
(
materials
);
return
true
;
return
BeforeResult
(
ExecutorType
.
Summon
)
;
}
}
}
}
AI
.
SelectMaterials
(
materials_lists
[
0
]);
AI
.
SelectMaterials
(
materials_lists
[
0
]);
return
true
;
return
BeforeResult
(
ExecutorType
.
Summon
)
;
}
}
private
bool
CrystronHalqifibraxEffect
()
private
bool
CrystronHalqifibraxEffect
()
{
{
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
MechaPhantomBeastAuroradonSummon
()
private
bool
MechaPhantomBeastAuroradonSummon
()
{
{
if
(
Bot
.
GetMonstersInMainZone
().
Count
>=
4
||
(!
HasInDeck
(
CardId
.
MechaPhantomBeastO_Lion
)
&&
!
IsCanSPSummonTunerLevel1
()
if
(
Bot
.
GetMonstersInMainZone
().
Count
>=
4
||
(!
HasInDeck
(
CardId
.
MechaPhantomBeastO_Lion
)
&&
!
IsCanSPSummonTunerLevel1
()
&&
!
func
.
CardsCheckAny
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
|
CardLocation
.
Grave
,
true
),
func
.
IsCode
,
CardId
.
Deskbot001
)))
return
false
;
&&
!
func
.
CardsCheckAny
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
|
CardLocation
.
Grave
,
true
),
func
.
IsCode
,
CardId
.
Deskbot001
)))
return
false
;
if
(
XyzModeCheck
())
if
(
XyzModeCheck
())
{
{
List
<
ClientCard
>
pre_materials
=
new
List
<
ClientCard
>();
List
<
ClientCard
>
pre_materials
=
new
List
<
ClientCard
>();
...
@@ -1243,10 +1314,14 @@ namespace WindBot.Game.AI.Decks
...
@@ -1243,10 +1314,14 @@ namespace WindBot.Game.AI.Decks
List
<
ClientCard
>
key_materials_2
=
func
.
CardsCheckWhere
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
Grave
),
card
=>
{
return
card
.
IsCode
(
CardId
.
JetSynchron
)
&&
!
activate_JetSynchron
;
});
List
<
ClientCard
>
key_materials_2
=
func
.
CardsCheckWhere
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
Grave
),
card
=>
{
return
card
.
IsCode
(
CardId
.
JetSynchron
)
&&
!
activate_JetSynchron
;
});
pre_materials
.
AddRange
(
key_materials
);
pre_materials
.
AddRange
(
key_materials
);
pre_materials
.
AddRange
(
key_materials_2
);
pre_materials
.
AddRange
(
key_materials_2
);
if
(!
summoned
)
pre_materials
.
AddRange
(
func
.
CardsCheckWhere
(
Bot
.
Hand
,
Func
.
NegateFunc
(
func
.
IsCode
),
CardId
.
DestrudotheLostDragon_Frisson
));
if
(!
summoned
)
pre_materials
.
AddRange
(
func
.
CardsCheckWhere
(
Bot
.
Hand
,
card
=>
{
return
!
card
.
IsCode
(
CardId
.
DestrudotheLostDragon_Frisson
)
&&
card
.
Level
<
5
;
}
));
pre_materials
.
AddRange
(
Bot
.
MonsterZone
);
pre_materials
.
AddRange
(
Bot
.
MonsterZone
);
var
materials_lists
=
Util
.
GetSynchroMaterials
(
pre_materials
,
7
,
1
,
1
,
false
,
true
,
null
,
card
=>
{
return
!
card
.
IsCode
(
CardId
.
MythicalBeastJackalKing
);});
var
synchro_materials_lists
=
Util
.
GetSynchroMaterials
(
pre_materials
,
7
,
1
,
1
,
false
,
true
,
null
,
card
=>
{
return
!
card
.
IsCode
(
CardId
.
MythicalBeastJackalKing
);
});
if
(
materials_lists
.
Count
>
0
)
return
false
;
var
xyz_materials_lists
=
Util
.
GetXyzMaterials
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
|
CardLocation
.
PendulumZone
),
7
,
1
,
false
,
card
=>
{
return
!
card
.
IsCode
(
CardId
.
F_A_DawnDragster
)
&&
!
card
.
IsCode
(
CardId
.
TheMightyMasterofMagic
);
});
var
xyz_materials_lists_2
=
Util
.
GetXyzMaterials
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
),
7
,
2
,
false
,
card
=>
{
return
!
card
.
IsCode
(
CardId
.
F_A_DawnDragster
)
&&
!
card
.
IsCode
(
CardId
.
TheMightyMasterofMagic
);
});
if
((
synchro_materials_lists
.
Count
>
0
&&
xyz_materials_lists
.
Count
>
0
)
||
xyz_materials_lists_2
.
Count
>
0
)
return
false
;
}
}
List
<
ClientCard
>
m
=
new
List
<
ClientCard
>();
List
<
ClientCard
>
m
=
new
List
<
ClientCard
>();
int
link_count
=
0
;
int
link_count
=
0
;
...
@@ -1267,12 +1342,12 @@ namespace WindBot.Game.AI.Decks
...
@@ -1267,12 +1342,12 @@ namespace WindBot.Game.AI.Decks
}
}
private
bool
SaryujaSkullDreadEffect
()
private
bool
SaryujaSkullDreadEffect
()
{
{
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
SaryujaSkullDread
,
2
))
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
SaryujaSkullDread
,
2
))
{
{
AI
.
SelectCard
(
GetSendToDeckIds
());
AI
.
SelectCard
(
GetSendToDeckIds
());
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
SaryujaSkullDreadSummon
()
private
bool
SaryujaSkullDreadSummon
()
{
{
...
@@ -1285,7 +1360,8 @@ namespace WindBot.Game.AI.Decks
...
@@ -1285,7 +1360,8 @@ namespace WindBot.Game.AI.Decks
temp_materials
.
Sort
((
cardA
,
cardB
)
=>
temp_materials
.
Sort
((
cardA
,
cardB
)
=>
{
{
if
((
cardA
.
HasType
(
CardType
.
Tuner
)
&&
cardB
.
HasType
(
CardType
.
Tuner
))
if
((
cardA
.
HasType
(
CardType
.
Tuner
)
&&
cardB
.
HasType
(
CardType
.
Tuner
))
||
(!
cardA
.
HasType
(
CardType
.
Tuner
)
&&
!
cardB
.
HasType
(
CardType
.
Tuner
)))
{
||
(!
cardA
.
HasType
(
CardType
.
Tuner
)
&&
!
cardB
.
HasType
(
CardType
.
Tuner
)))
{
return
CardContainer
.
CompareCardLevel
(
cardA
,
cardB
);
return
CardContainer
.
CompareCardLevel
(
cardA
,
cardB
);
}
}
else
if
(
cardA
.
HasType
(
CardType
.
Tuner
)
&&
!
cardB
.
HasType
(
CardType
.
Tuner
))
return
1
;
else
if
(
cardA
.
HasType
(
CardType
.
Tuner
)
&&
!
cardB
.
HasType
(
CardType
.
Tuner
))
return
1
;
...
@@ -1294,15 +1370,15 @@ namespace WindBot.Game.AI.Decks
...
@@ -1294,15 +1370,15 @@ namespace WindBot.Game.AI.Decks
foreach
(
var
material
in
temp_materials
)
foreach
(
var
material
in
temp_materials
)
{
{
++
materials_count
;
++
materials_count
;
if
(
IsExtraZoneCard
(
material
))
materials
.
Insert
(
0
,
material
);
if
(
IsExtraZoneCard
(
material
))
materials
.
Insert
(
0
,
material
);
else
if
(
IsNoLinkCards
(
material
))
{
--
materials_count
;
continue
;
}
else
if
(
IsNoLinkCards
(
material
))
{
--
materials_count
;
continue
;
}
else
materials
.
Add
(
material
);
else
materials
.
Add
(
material
);
link_count
+=
material
.
HasType
(
CardType
.
Link
)
?
material
.
LinkCount
:
1
;
link_count
+=
material
.
HasType
(
CardType
.
Link
)
?
material
.
LinkCount
:
1
;
if
(
link_count
>=
4
)
if
(
link_count
>=
4
)
{
{
if
(
materials_count
==
3
&&
Bot
.
Deck
.
Count
>
4
&&
((
func
.
CardsCheckCount
(
Bot
.
Hand
,
func
.
HasType
,
CardType
.
Tuner
)
>
0
if
(
materials_count
==
3
&&
Bot
.
Deck
.
Count
>
4
&&
((
func
.
CardsCheckCount
(
Bot
.
Hand
,
func
.
HasType
,
CardType
.
Tuner
)
>
0
||
(
Bot
.
HasInMonstersZone
(
CardId
.
DDLamia
,
false
,
false
,
true
)
&&
!
activate_DDLamia
&&
func
.
CardsCheckCount
(
Func
.
GetZoneCards
||
(
Bot
.
HasInMonstersZone
(
CardId
.
DDLamia
,
false
,
false
,
true
)
&&
!
activate_DDLamia
&&
func
.
CardsCheckCount
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
Onfield
|
CardLocation
.
Hand
,
true
),
card
=>
{
return
Func
.
HasSetCode
(
card
,
0xaf
,
0xae
)
&&
card
.
Id
!=
CardId
.
DDLamia
;
})
(
Bot
,
CardLocation
.
Onfield
|
CardLocation
.
Hand
,
true
),
card
=>
{
return
Func
.
HasSetCode
(
card
,
0xaf
,
0xae
)
&&
card
.
Id
!=
CardId
.
DDLamia
;
})
>
0
)
||
(
Bot
.
HasInMonstersZone
(
CardId
.
JetSynchron
,
false
,
false
,
true
)
&&
!
activate_JetSynchron
))
||
xyz_mode
))
>
0
)
||
(
Bot
.
HasInMonstersZone
(
CardId
.
JetSynchron
,
false
,
false
,
true
)
&&
!
activate_JetSynchron
))
||
xyz_mode
))
{
{
--
link_count
;
--
link_count
;
...
@@ -1313,7 +1389,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -1313,7 +1389,7 @@ namespace WindBot.Game.AI.Decks
}
}
if
(
materials
.
Count
<
3
)
return
false
;
if
(
materials
.
Count
<
3
)
return
false
;
AI
.
SelectMaterials
(
materials
);
AI
.
SelectMaterials
(
materials
);
return
true
;
return
BeforeResult
(
ExecutorType
.
Summon
)
;
}
}
private
bool
CrystronHalqifibraxSummon
()
private
bool
CrystronHalqifibraxSummon
()
{
{
...
@@ -1327,6 +1403,10 @@ namespace WindBot.Game.AI.Decks
...
@@ -1327,6 +1403,10 @@ namespace WindBot.Game.AI.Decks
mainMonsters
.
Sort
(
CardContainer
.
CompareCardAttack
);
mainMonsters
.
Sort
(
CardContainer
.
CompareCardAttack
);
materials
.
AddRange
(
mainMonsters
);
materials
.
AddRange
(
mainMonsters
);
AI
.
SelectMaterials
(
materials
);
AI
.
SelectMaterials
(
materials
);
if
(
materials
.
Distinct
().
Count
()
<=
3
)
{
AI
.
SendCustomChat
((
int
)
CustomMessage
.
Surprise
);
}
return
true
;
return
true
;
}
}
private
bool
PendulumActivate
()
private
bool
PendulumActivate
()
...
@@ -1343,13 +1423,13 @@ namespace WindBot.Game.AI.Decks
...
@@ -1343,13 +1423,13 @@ namespace WindBot.Game.AI.Decks
}
}
private
bool
SupremeKingGateZeroEffect
()
private
bool
SupremeKingGateZeroEffect
()
{
{
if
(
PendulumActivate
())
return
PendulumDefaultActivate
();
if
(
PendulumActivate
())
return
PendulumDefaultActivate
()
&&
BeforeResult
(
ExecutorType
.
Activate
)
;
return
false
;
return
false
;
}
}
private
bool
MythicalBeastJackalKingEffect
()
private
bool
MythicalBeastJackalKingEffect
()
{
{
if
(
PendulumActivate
())
return
PendulumDefaultActivate
();
if
(
PendulumActivate
())
return
PendulumDefaultActivate
()
&&
BeforeResult
(
ExecutorType
.
Activate
)
;
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
Denglong_FirstoftheYangZingSummon_2
()
private
bool
Denglong_FirstoftheYangZingSummon_2
()
{
{
...
@@ -1362,7 +1442,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -1362,7 +1442,7 @@ namespace WindBot.Game.AI.Decks
card
=>
{
return
!
card
.
IsCode
(
CardId
.
HeraldoftheArcLight
);
});
card
=>
{
return
!
card
.
IsCode
(
CardId
.
HeraldoftheArcLight
);
});
if
(
materials_lists
.
Count
<=
0
)
return
false
;
if
(
materials_lists
.
Count
<=
0
)
return
false
;
AI
.
SelectMaterials
(
materials_lists
[
0
]);
AI
.
SelectMaterials
(
materials_lists
[
0
]);
return
true
;
return
BeforeResult
(
ExecutorType
.
Summon
)
;
}
}
private
bool
Denglong_FirstoftheYangZingEffect
()
private
bool
Denglong_FirstoftheYangZingEffect
()
{
{
...
@@ -1373,7 +1453,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -1373,7 +1453,7 @@ namespace WindBot.Game.AI.Decks
}
}
else
else
{
{
AI
.
SelectCard
(
CardId
.
SecretoftheYangZing
,
CardId
.
Zefraxi_TreasureoftheYangZing
,
CardId
.
LightoftheYangZing
);
AI
.
SelectCard
(
CardId
.
SecretoftheYangZing
,
CardId
.
Zefraxi_TreasureoftheYangZing
,
CardId
.
LightoftheYangZing
);
}
}
return
true
;
return
true
;
}
}
...
@@ -1381,17 +1461,17 @@ namespace WindBot.Game.AI.Decks
...
@@ -1381,17 +1461,17 @@ namespace WindBot.Game.AI.Decks
{
{
if
(
SpellActivate
())
if
(
SpellActivate
())
{
{
return
HasInDeck
(
CardId
.
DDLamia
)
||
func
.
HasInZone
(
Bot
,
CardLocation
.
PendulumZone
,
CardId
.
ServantofEndymion
,
true
,
tru
e
);
return
(
HasInDeck
(
CardId
.
DDLamia
)
||
func
.
HasInZone
(
Bot
,
CardLocation
.
PendulumZone
,
CardId
.
ServantofEndymion
,
true
,
true
))
&&
BeforeResult
(
ExecutorType
.
Activat
e
);
}
}
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
int
DisabledSort
(
ClientCard
cardA
,
ClientCard
cardB
)
private
int
DisabledSort
(
ClientCard
cardA
,
ClientCard
cardB
)
{
{
bool
RitualBeastTamerZeframpilica_flag
=
!
summoned
&&
Bot
.
HasInExtra
(
CardId
.
HeraldoftheArcLight
)
&&
IsCanSPSummonTunerLevel1
();
bool
RitualBeastTamerZeframpilica_flag
=
!
summoned
&&
Bot
.
HasInExtra
(
CardId
.
HeraldoftheArcLight
)
&&
IsCanSPSummonTunerLevel1
();
if
(((
cardA
.
IsCode
(
CardId
.
RitualBeastTamerZeframpilica
)
&&
RitualBeastTamerZeframpilica_flag
)
||
Func
.
IsCode
(
cardA
,
CardId
.
MaxxC
,
CardId
.
Zefraath
,
CardId
.
MythicalBeastJackalKing
,
CardId
.
TheMightyMasterofMagic
)
||
cardA
.
HasType
(
CardType
.
Trap
)
||
cardA
.
HasType
(
CardType
.
Tuner
))
if
(((
cardA
.
IsCode
(
CardId
.
RitualBeastTamerZeframpilica
)
&&
RitualBeastTamerZeframpilica_flag
)
||
Func
.
IsCode
(
cardA
,
CardId
.
MaxxC
,
CardId
.
Zefraath
,
CardId
.
MythicalBeastJackalKing
,
CardId
.
TheMightyMasterofMagic
)
||
cardA
.
HasType
(
CardType
.
Trap
)
||
cardA
.
HasType
(
CardType
.
Tuner
))
&&
!
cardB
.
IsCode
(
CardId
.
RitualBeastTamerZeframpilica
)
&&
!
cardB
.
HasType
(
CardType
.
Trap
)
&&
!
Func
.
IsCode
(
cardB
,
CardId
.
MaxxC
,
CardId
.
Zefraath
,
CardId
.
MythicalBeastJackalKing
,
CardId
.
TheMightyMasterofMagic
)
&&
!
cardB
.
HasType
(
CardType
.
Tuner
))
return
1
;
&&
!
cardB
.
IsCode
(
CardId
.
RitualBeastTamerZeframpilica
)
&&
!
cardB
.
HasType
(
CardType
.
Trap
)
&&
!
Func
.
IsCode
(
cardB
,
CardId
.
MaxxC
,
CardId
.
Zefraath
,
CardId
.
MythicalBeastJackalKing
,
CardId
.
TheMightyMasterofMagic
)
&&
!
cardB
.
HasType
(
CardType
.
Tuner
))
return
1
;
else
if
(!
cardA
.
IsCode
(
CardId
.
RitualBeastTamerZeframpilica
)
&&
!
cardA
.
HasType
(
CardType
.
Trap
)
&&
!
Func
.
IsCode
(
cardA
,
CardId
.
MaxxC
,
CardId
.
Zefraath
,
CardId
.
MythicalBeastJackalKing
,
CardId
.
TheMightyMasterofMagic
)
&&
!
cardA
.
HasType
(
CardType
.
Tuner
)
else
if
(!
cardA
.
IsCode
(
CardId
.
RitualBeastTamerZeframpilica
)
&&
!
cardA
.
HasType
(
CardType
.
Trap
)
&&
!
Func
.
IsCode
(
cardA
,
CardId
.
MaxxC
,
CardId
.
Zefraath
,
CardId
.
MythicalBeastJackalKing
,
CardId
.
TheMightyMasterofMagic
)
&&
!
cardA
.
HasType
(
CardType
.
Tuner
)
&&
((
cardB
.
IsCode
(
CardId
.
RitualBeastTamerZeframpilica
)
&&
RitualBeastTamerZeframpilica_flag
)
||
Func
.
IsCode
(
cardB
,
CardId
.
MaxxC
,
CardId
.
Zefraath
,
CardId
.
MythicalBeastJackalKing
,
CardId
.
TheMightyMasterofMagic
)
||
cardB
.
HasType
(
CardType
.
Trap
)
||
cardB
.
HasType
(
CardType
.
Tuner
)))
return
-
1
;
&&
((
cardB
.
IsCode
(
CardId
.
RitualBeastTamerZeframpilica
)
&&
RitualBeastTamerZeframpilica_flag
)
||
Func
.
IsCode
(
cardB
,
CardId
.
MaxxC
,
CardId
.
Zefraath
,
CardId
.
MythicalBeastJackalKing
,
CardId
.
TheMightyMasterofMagic
)
||
cardB
.
HasType
(
CardType
.
Trap
)
||
cardB
.
HasType
(
CardType
.
Tuner
)))
return
-
1
;
return
0
;
return
0
;
}
}
private
List
<
int
>
GetDisabledIds
()
private
List
<
int
>
GetDisabledIds
()
...
@@ -1426,21 +1506,21 @@ namespace WindBot.Game.AI.Decks
...
@@ -1426,21 +1506,21 @@ namespace WindBot.Game.AI.Decks
ids
.
Add
(
CardId
.
LightoftheYangZing
);
ids
.
Add
(
CardId
.
LightoftheYangZing
);
ids
.
Add
(
CardId
.
Rank_Up_MagicSoulShaveForce
);
ids
.
Add
(
CardId
.
Rank_Up_MagicSoulShaveForce
);
if
(
activate_ZefraProvidence
)
ids
.
Add
(
CardId
.
ZefraProvidence
);
if
(
activate_ZefraProvidence
)
ids
.
Add
(
CardId
.
ZefraProvidence
);
if
(
activate_OracleofZefra
)
ids
.
Add
(
CardId
.
OracleofZefra
);
if
(
activate_OracleofZefra
)
ids
.
Add
(
CardId
.
OracleofZefra
);
if
(
activate_DragonShrine
)
ids
.
Add
(
CardId
.
DragonShrine
);
if
(
activate_DragonShrine
)
ids
.
Add
(
CardId
.
DragonShrine
);
if
(
activate_SpellPowerMastery
)
ids
.
Add
(
CardId
.
SpellPowerMastery
);
if
(
activate_SpellPowerMastery
)
ids
.
Add
(
CardId
.
SpellPowerMastery
);
List
<
ClientCard
>
hands
=
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
Hand
);
List
<
ClientCard
>
hands
=
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
Hand
);
hands
.
Sort
(
DisabledSort
);
hands
.
Sort
(
DisabledSort
);
List
<
int
>
hand_ids
=
Func
.
ClientCardsToCardsId
(
hands
,
true
);
List
<
int
>
hand_ids
=
Func
.
ClientCardsToCardsId
(
hands
,
true
);
ids
.
AddRange
(
hand_ids
);
ids
.
AddRange
(
hand_ids
);
return
ids
;
return
ids
;
}
}
private
bool
TruKingofAllCalamitiesEffect
()
private
bool
TruKingofAllCalamitiesEffect
()
{
{
if
(
Duel
.
Player
==
1
)
if
(
Duel
.
Player
==
1
)
{
{
AI
.
SelectAttributes
(
new
CardAttribute
[]
{
CardAttribute
.
Divine
});
AI
.
SelectAttributes
(
new
CardAttribute
[]
{
CardAttribute
.
Divine
});
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
return
false
;
return
false
;
}
}
...
@@ -1456,18 +1536,18 @@ namespace WindBot.Game.AI.Decks
...
@@ -1456,18 +1536,18 @@ namespace WindBot.Game.AI.Decks
List
<
ClientCard
>
dcards
=
func
.
CardsIdToClientCards
(
GetDisabledIds
(),
Bot
.
Hand
);
List
<
ClientCard
>
dcards
=
func
.
CardsIdToClientCards
(
GetDisabledIds
(),
Bot
.
Hand
);
if
(!
Bot
.
HasInExtra
(
CardId
.
CrystronHalqifibrax
)
&&
dcards
.
Count
<=
0
)
return
false
;
if
(!
Bot
.
HasInExtra
(
CardId
.
CrystronHalqifibrax
)
&&
dcards
.
Count
<=
0
)
return
false
;
AI
.
SelectCard
(
dcards
);
AI
.
SelectCard
(
dcards
);
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
}
}
return
false
;
return
false
;
}
}
private
bool
MechaPhantomBeastAuroradonEffect
()
private
bool
MechaPhantomBeastAuroradonEffect
()
{
{
if
(
ActivateDescription
==
-
1
)
{
link_summoned
=
true
;
return
true
;
}
if
(
ActivateDescription
==
-
1
)
{
link_summoned
=
true
;
return
true
;
}
else
else
{
{
if
(!
HasInDeck
(
CardId
.
MechaPhantomBeastO_Lion
)
if
(!
HasInDeck
(
CardId
.
MechaPhantomBeastO_Lion
)
&&
Func
.
GetZoneCards
(
Enemy
,
CardLocation
.
Onfield
).
Count
<=
0
&&
func
.
CardsCheckCount
(
Bot
.
Graveyard
,
func
.
HasType
,
CardType
.
Trap
)
<=
0
)
return
false
;
&&
Func
.
GetZoneCards
(
Enemy
,
CardLocation
.
Onfield
).
Count
<=
0
)
return
false
;
List
<
ClientCard
>
tRelease
=
new
List
<
ClientCard
>();
List
<
ClientCard
>
tRelease
=
new
List
<
ClientCard
>();
List
<
ClientCard
>
nRelease
=
new
List
<
ClientCard
>();
List
<
ClientCard
>
nRelease
=
new
List
<
ClientCard
>();
foreach
(
var
card
in
Bot
.
GetMonsters
())
foreach
(
var
card
in
Bot
.
GetMonsters
())
...
@@ -1491,39 +1571,41 @@ namespace WindBot.Game.AI.Decks
...
@@ -1491,39 +1571,41 @@ namespace WindBot.Game.AI.Decks
if
(
Card
.
Location
==
CardLocation
.
Grave
)
if
(
Card
.
Location
==
CardLocation
.
Grave
)
{
{
activate_SupremeKingDragonDarkwurm_1
=
true
;
activate_SupremeKingDragonDarkwurm_1
=
true
;
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
{
activate_SupremeKingDragonDarkwurm_2
=
true
;
activate_SupremeKingDragonDarkwurm_2
=
true
;
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
return
false
;
return
false
;
}
}
private
bool
SupremeKingDragonDarkwurmSummon
()
private
bool
SupremeKingDragonDarkwurmSummon
()
{
{
if
((!
activate_p_Zefraath
&&
Bot
.
HasInHand
(
CardId
.
Zefraath
)
&&
!
activate_SupremeKingDragonDarkwurm_1
&&
HasInDeck
(
CardId
.
SupremeKingGateZero
)
&&
func
.
CardsCheckAny
(
Bot
.
Hand
,
func
.
HasType
,
CardType
.
Tuner
))
if
((!
activate_p_Zefraath
&&
Bot
.
HasInHand
(
CardId
.
Zefraath
)
&&
!
activate_SupremeKingDragonDarkwurm_1
&&
HasInDeck
(
CardId
.
SupremeKingGateZero
)
&&
func
.
CardsCheckAny
(
Bot
.
Hand
,
func
.
HasType
,
CardType
.
Tuner
))
||(
func
.
CardsCheckAny
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
Hand
),
card
=>
{
return
card
.
LinkCount
>
5
;
})
&&
||
(
func
.
CardsCheckAny
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
Hand
),
card
=>
{
return
card
.
LinkCount
>
5
;
})
&&
!
Bot
.
HasInHand
(
CardId
.
SupremeKingGateZero
)
&&
!
activate_SupremeKingDragonDarkwurm_2
))
!
Bot
.
HasInHand
(
CardId
.
SupremeKingGateZero
)
&&
!
activate_SupremeKingDragonDarkwurm_2
))
{
{
summoned
=
true
;
summoned
=
true
;
return
true
;
return
BeforeResult
(
ExecutorType
.
Summon
)
;
}
}
return
false
;
return
false
;
}
}
private
bool
DefaultSummon_2
()
private
bool
DefaultSummon_2
()
{
{
if
(
Card
.
Location
==
CardLocation
.
Hand
&&
Card
.
Level
<=
4
if
(
Card
.
Location
==
CardLocation
.
Hand
&&
Card
.
Level
<=
4
&&
Bot
.
HasInExtra
(
CardId
.
CrystronHalqifibrax
)
&&
(
func
.
CardsCheckAny
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
,
true
),
card
=>
{
return
Card
.
HasType
(
CardType
.
Tuner
)
?
true
:
card
.
HasType
(
CardType
.
Tuner
);
})))
{
&&
Bot
.
HasInExtra
(
CardId
.
CrystronHalqifibrax
)
&&
(
func
.
CardsCheckAny
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
,
true
),
card
=>
{
return
Card
.
HasType
(
CardType
.
Tuner
)
?
true
:
card
.
HasType
(
CardType
.
Tuner
);
})))
{
summoned
=
true
;
summoned
=
true
;
return
true
;
return
BeforeResult
(
ExecutorType
.
Summon
)
;
}
}
return
false
;
return
false
;
}
}
private
bool
IsCanSPSummonTunerLevel1
()
{
private
bool
IsCanSPSummonTunerLevel1
()
{
return
func
.
CardsCheckAny
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
|
CardLocation
.
Grave
,
true
),
card
=>
{
return
func
.
CardsCheckAny
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
MonsterZone
|
CardLocation
.
Grave
,
true
),
card
=>
{
return
(
card
.
IsCode
(
CardId
.
DDLamia
)
&&
!
activate_DDLamia
&&
func
.
CardsCheckCount
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
Onfield
|
CardLocation
.
Hand
,
true
),
scard
=>
{
return
Func
.
HasSetCode
(
scard
,
0xaf
,
0xae
)
&&
scard
.
Id
!=
CardId
.
DDLamia
;
})
return
(
card
.
IsCode
(
CardId
.
DDLamia
)
&&
!
activate_DDLamia
&&
func
.
CardsCheckCount
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
Onfield
|
CardLocation
.
Hand
,
true
),
scard
=>
{
return
Func
.
HasSetCode
(
scard
,
0xaf
,
0xae
)
&&
scard
.
Id
!=
CardId
.
DDLamia
;
})
>
0
)
||
(
card
.
IsCode
(
CardId
.
JetSynchron
)
&&
!
activate_JetSynchron
)
&&
Bot
.
GetMonstersInMainZone
().
Count
<=
3
;
>
0
)
||
(
card
.
IsCode
(
CardId
.
JetSynchron
)
&&
!
activate_JetSynchron
)
&&
Bot
.
GetMonstersInMainZone
().
Count
<=
3
;
});
});
}
}
private
bool
DefaultSummon
()
private
bool
DefaultSummon
()
...
@@ -1534,20 +1616,20 @@ namespace WindBot.Game.AI.Decks
...
@@ -1534,20 +1616,20 @@ namespace WindBot.Game.AI.Decks
||
(
IsCanSPSummonTunerLevel1
()
&&
((
Card
.
Level
==
3
&&
Bot
.
HasInExtra
(
CardId
.
HeraldoftheArcLight
))
||
(
||
(
IsCanSPSummonTunerLevel1
()
&&
((
Card
.
Level
==
3
&&
Bot
.
HasInExtra
(
CardId
.
HeraldoftheArcLight
))
||
(
Card
.
Level
==
4
&&
Bot
.
HasInExtra
(
CardId
.
Denglong_FirstoftheYangZing
))))
||
Card
.
Level
==
4
&&
Bot
.
HasInExtra
(
CardId
.
Denglong_FirstoftheYangZing
))))
||
(
Card
.
Id
==
CardId
.
SupremeKingDragonDarkwurm
&&
!
activate_SupremeKingDragonDarkwurm_2
)
(
Card
.
Id
==
CardId
.
SupremeKingDragonDarkwurm
&&
!
activate_SupremeKingDragonDarkwurm_2
)
||(
Bot
.
HasInExtra
(
CardId
.
CrystronHalqifibrax
)
&&
Bot
.
HasInHandOrInGraveyard
(
CardId
.
DestrudotheLostDragon_Frisson
)
&&
!
activate_DestrudotheLostDragon_Frisson
))
||
(
Bot
.
HasInExtra
(
CardId
.
CrystronHalqifibrax
)
&&
Bot
.
HasInHandOrInGraveyard
(
CardId
.
DestrudotheLostDragon_Frisson
)
&&
!
activate_DestrudotheLostDragon_Frisson
))
{
{
summoned
=
true
;
summoned
=
true
;
return
true
;
return
BeforeResult
(
ExecutorType
.
Summon
)
;
}
}
return
false
;
return
false
;
}
}
private
bool
OneforOneEffect
()
private
bool
OneforOneEffect
()
{
{
AI
.
SelectCard
(
GetDisabledIds
());
AI
.
SelectCard
(
GetDisabledIds
());
AI
.
SelectNextCard
(
CardId
.
JetSynchron
,
CardId
.
LightoftheYangZing
,
CardId
.
DDLamia
);
AI
.
SelectNextCard
(
CardId
.
JetSynchron
,
CardId
.
LightoftheYangZing
,
CardId
.
DDLamia
);
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
void
HeavymetalfoesElectrumiteAddIds
(
List
<
int
>
ids
)
private
void
HeavymetalfoesElectrumiteAddIds
(
List
<
int
>
ids
)
{
{
if
(!
summoned
&&
HasInDeck
(
CardId
.
DarkContractwiththGate
)
&&
HasInDeck
(
CardId
.
DDLamia
))
if
(!
summoned
&&
HasInDeck
(
CardId
.
DarkContractwiththGate
)
&&
HasInDeck
(
CardId
.
DDLamia
))
{
{
...
@@ -1569,47 +1651,52 @@ namespace WindBot.Game.AI.Decks
...
@@ -1569,47 +1651,52 @@ namespace WindBot.Game.AI.Decks
{
{
if
(
Card
.
Location
==
CardLocation
.
Grave
)
if
(
Card
.
Location
==
CardLocation
.
Grave
)
{
{
if
(
Duel
.
Player
!=
0
)
return
true
;
if
(
Duel
.
Player
!=
0
)
return
BeforeResult
(
ExecutorType
.
Activate
)
;
return
false
;
return
false
;
}
}
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
Raider_WingEffect
()
private
bool
Raider_WingEffect
()
{
{
if
(!
Bot
.
HasInMonstersZone
(
CardId
.
Raidraptor_ForceStrix
,
false
,
true
,
true
))
return
false
;
if
(!
Bot
.
HasInMonstersZone
(
CardId
.
Raidraptor_ForceStrix
,
false
,
true
,
true
))
return
false
;
AI
.
SelectCard
(
CardId
.
Raidraptor_ForceStrix
);
AI
.
SelectCard
(
CardId
.
Raidraptor_ForceStrix
);
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
private
bool
HeavymetalfoesElectrumiteEffect
()
private
bool
HeavymetalfoesElectrumiteEffect
()
{
{
if
(
ActivateDescription
!=
-
1
)
if
(
ActivateDescription
!=
-
1
)
{
{
List
<
ClientCard
>
cards
=
func
.
CardsCheckWhere
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
SpellZone
,
true
),
Func
.
NegateFunc
(
func
.
IsCode
),
CardId
.
DarkContractwiththGate
);
List
<
ClientCard
>
cards
=
func
.
CardsCheckWhere
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
SpellZone
,
true
),
Func
.
NegateFunc
(
func
.
IsCode
),
CardId
.
DarkContractwiththGate
);
if
(
cards
.
Count
<=
0
)
if
(
cards
.
Count
<=
0
)
{
{
HeavymetalfoesElectrumite_activate
=
true
;
HeavymetalfoesElectrumite_activate
=
true
;
return
false
;
return
false
;
}
}
HeavymetalfoesElectrumite_activate
=
false
;
HeavymetalfoesElectrumite_activate
=
false
;
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
public
override
bool
OnSelectHand
()
public
override
bool
OnSelectHand
()
{
{
return
true
;
return
true
;
}
}
private
bool
ResetFlag
()
{
should_destory
=
false
;
return
true
;
}
private
bool
HeraldoftheArcLightEffect
()
private
bool
HeraldoftheArcLightEffect
()
{
{
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
{
return
Duel
.
LastChainPlayer
!=
0
;
return
Duel
.
LastChainPlayer
!=
0
&&
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
return
false
;
return
false
;
}
}
private
bool
CalledbytheGraveEffect
()
private
bool
CalledbytheGraveEffect
()
{
{
if
((
Bot
.
SpellZone
[
5
]
==
Card
||
Bot
.
SpellZone
[
0
]
==
Card
)
&&
Duel
.
Player
==
0
)
return
true
;
if
((
Bot
.
SpellZone
[
5
]
==
Card
||
Bot
.
SpellZone
[
0
]
==
Card
)
&&
Duel
.
Player
==
0
)
return
BeforeResult
(
ExecutorType
.
Activate
)
;
ClientCard
card
=
Util
.
GetLastChainCard
();
ClientCard
card
=
Util
.
GetLastChainCard
();
if
(
card
==
null
)
return
false
;
if
(
card
==
null
)
return
false
;
int
id
=
card
.
Id
;
int
id
=
card
.
Id
;
...
@@ -1619,23 +1706,16 @@ namespace WindBot.Game.AI.Decks
...
@@ -1619,23 +1706,16 @@ namespace WindBot.Game.AI.Decks
if
(
card
.
Location
==
CardLocation
.
Grave
&&
card
.
HasType
(
CardType
.
Monster
))
if
(
card
.
Location
==
CardLocation
.
Grave
&&
card
.
HasType
(
CardType
.
Monster
))
{
{
AI
.
SelectCard
(
card
);
AI
.
SelectCard
(
card
);
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
else
if
(
g_cards
.
Count
()
>
0
&&
card
.
HasType
(
CardType
.
Monster
))
else
if
(
g_cards
.
Count
()
>
0
&&
card
.
HasType
(
CardType
.
Monster
))
{
{
AI
.
SelectCard
(
g_cards
);
AI
.
SelectCard
(
g_cards
);
return
true
;
return
BeforeResult
(
ExecutorType
.
Activate
)
;
}
}
}
}
return
false
;
return
false
;
}
}
public
override
bool
OnSelectYesNo
(
int
desc
)
{
/*
can't get code 74580251 Duel.SelectEffectYesNo(tp,e:GetHandler(),96)
*/
return
base
.
OnSelectYesNo
(
desc
);
}
public
override
CardPosition
OnSelectPosition
(
int
cardId
,
IList
<
CardPosition
>
positions
)
public
override
CardPosition
OnSelectPosition
(
int
cardId
,
IList
<
CardPosition
>
positions
)
{
{
NamedCard
card
=
NamedCard
.
Get
(
cardId
);
NamedCard
card
=
NamedCard
.
Get
(
cardId
);
...
@@ -1653,7 +1733,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -1653,7 +1733,7 @@ namespace WindBot.Game.AI.Decks
}
}
return
base
.
OnSelectOption
(
options
);
return
base
.
OnSelectOption
(
options
);
}
}
public
override
int
OnSelectPlace
(
int
cardId
,
int
player
,
CardLocation
location
,
int
available
)
public
override
int
OnSelectPlace
(
int
cardId
,
int
player
,
CardLocation
location
,
int
available
)
{
{
NamedCard
card
=
NamedCard
.
Get
(
cardId
);
NamedCard
card
=
NamedCard
.
Get
(
cardId
);
...
@@ -1691,31 +1771,23 @@ namespace WindBot.Game.AI.Decks
...
@@ -1691,31 +1771,23 @@ namespace WindBot.Game.AI.Decks
return
base
.
OnSelectPlace
(
cardId
,
player
,
location
,
available
);
return
base
.
OnSelectPlace
(
cardId
,
player
,
location
,
available
);
}
}
public
override
void
OnChainEnd
()
private
IList
<
ClientCard
>
_OnSelectPendulumSummon
(
IList
<
ClientCard
>
cards
,
int
min
,
int
max
)
{
should_destory
=
false
;
base
.
OnChainEnd
();
}
public
override
IList
<
ClientCard
>
OnSelectSynchroMaterial
(
IList
<
ClientCard
>
cards
,
int
sum
,
int
min
,
int
max
)
{
return
base
.
OnSelectSynchroMaterial
(
cards
,
sum
,
min
,
max
);
}
private
IList
<
ClientCard
>
_OnSelectPendulumSummon
(
IList
<
ClientCard
>
cards
,
int
min
,
int
max
)
{
{
List
<
int
>
ids
=
func
.
GetSelectCardIdList
();
List
<
int
>
ids
=
func
.
GetSelectCardIdList
();
List
<
ClientCard
>
result
=
func
.
GetSelectCardList
();
List
<
ClientCard
>
result
=
func
.
GetSelectCardList
();
List
<
ClientCard
>
exs
=
func
.
CardsCheckWhere
(
cards
,
func
.
IsLocation
,
CardLocation
.
Extra
);
List
<
ClientCard
>
exs
=
func
.
CardsCheckWhere
(
cards
,
func
.
IsLocation
,
CardLocation
.
Extra
);
List
<
ClientCard
>
hs
=
func
.
CardsCheckWhere
(
cards
,
Func
.
NegateFunc
(
func
.
IsLocation
),
CardLocation
.
Extra
);
List
<
ClientCard
>
hs
=
func
.
CardsCheckWhere
(
cards
,
Func
.
NegateFunc
(
func
.
IsLocation
),
CardLocation
.
Extra
);
if
(
func
.
CardsCheckAny
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
PendulumZone
,
true
),
card
=>
{
if
(
func
.
CardsCheckAny
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
PendulumZone
,
true
),
card
=>
{
return
card
.
HasSetcode
(
0xc4
)
&&
!
card
.
IsCode
(
CardId
.
Zefraath
);})
&&
func
.
CardsCheckAny
(
exs
,
func
.
IsCode
,
CardId
.
ShaddollZefracore
))
ids
.
Add
(
CardId
.
ShaddollZefracore
);
return
card
.
HasSetcode
(
0xc4
)
&&
!
card
.
IsCode
(
CardId
.
Zefraath
);
result
=
func
.
CardsIdToClientCards
(
ids
,
cards
);
})
&&
func
.
CardsCheckAny
(
exs
,
func
.
IsCode
,
CardId
.
ShaddollZefracore
))
ids
.
Add
(
CardId
.
ShaddollZefracore
);
result
=
func
.
CardsIdToClientCards
(
ids
,
cards
);
List
<
ClientCard
>
temp_cards
=
func
.
CardsCheckWhere
(
cards
,
Func
.
NegateFunc
(
func
.
IsCode
),
CardId
.
MaxxC
);
List
<
ClientCard
>
temp_cards
=
func
.
CardsCheckWhere
(
cards
,
Func
.
NegateFunc
(
func
.
IsCode
),
CardId
.
MaxxC
);
result
.
AddRange
(
temp_cards
);
result
.
AddRange
(
temp_cards
);
if
(
result
.
Count
<=
0
)
return
Func
.
CheckSelectCount
(
Util
,
result
,
cards
,
min
,
min
);
if
(
result
.
Count
<=
0
)
return
Func
.
CheckSelectCount
(
Util
,
result
,
cards
,
min
,
min
);
if
(
result
[
0
]
!=
null
&&
result
[
0
].
Location
!=
CardLocation
.
Extra
)
++
p_count
;
if
(
result
[
0
]
!=
null
&&
result
[
0
].
Location
!=
CardLocation
.
Extra
)
++
p_count
;
return
Func
.
CheckSelectCount
(
Util
,
result
,
cards
,
max
,
max
);
return
Func
.
CheckSelectCount
(
Util
,
result
,
cards
,
max
,
max
);
}
}
public
override
IList
<
ClientCard
>
OnSelectCard
(
IList
<
ClientCard
>
cards
,
int
min
,
int
max
,
int
hint
,
bool
cancelable
)
public
override
IList
<
ClientCard
>
OnSelectCard
(
IList
<
ClientCard
>
cards
,
int
min
,
int
max
,
int
hint
,
bool
cancelable
)
{
{
if
(
AI
.
HaveSelectedCards
())
return
null
;
if
(
AI
.
HaveSelectedCards
())
return
null
;
...
@@ -1735,7 +1807,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -1735,7 +1807,7 @@ namespace WindBot.Game.AI.Decks
ids
.
AddRange
(
pre_ids
);
ids
.
AddRange
(
pre_ids
);
}
}
ids
.
Add
(
CardId
.
ZefraDivineStrike
);
ids
.
Add
(
CardId
.
ZefraDivineStrike
);
}
}
if
(!
activate_OracleofZefra
)
ids
.
Add
(
CardId
.
OracleofZefra
);
if
(!
activate_OracleofZefra
)
ids
.
Add
(
CardId
.
OracleofZefra
);
if
(!
activate_p_Zefraath
&&
!
func
.
HasInZone
(
Bot
,
CardLocation
.
Hand
|
CardLocation
.
PendulumZone
,
CardId
.
Zefraath
,
true
))
ids
.
Add
(
CardId
.
Zefraath
);
if
(!
activate_p_Zefraath
&&
!
func
.
HasInZone
(
Bot
,
CardLocation
.
Hand
|
CardLocation
.
PendulumZone
,
CardId
.
Zefraath
,
true
))
ids
.
Add
(
CardId
.
Zefraath
);
if
(
func
.
HasInZone
(
Bot
,
CardLocation
.
Hand
|
CardLocation
.
PendulumZone
,
CardId
.
SupremeKingGateZero
,
true
)
&&
!
func
.
CardsCheckAny
(
Bot
.
Hand
,
func
.
HasType
,
CardType
.
Tuner
)
if
(
func
.
HasInZone
(
Bot
,
CardLocation
.
Hand
|
CardLocation
.
PendulumZone
,
CardId
.
SupremeKingGateZero
,
true
)
&&
!
func
.
CardsCheckAny
(
Bot
.
Hand
,
func
.
HasType
,
CardType
.
Tuner
)
...
@@ -1848,9 +1920,9 @@ namespace WindBot.Game.AI.Decks
...
@@ -1848,9 +1920,9 @@ namespace WindBot.Game.AI.Decks
result
=
func
.
CardsIdToClientCards
(
ids
,
cards
);
result
=
func
.
CardsIdToClientCards
(
ids
,
cards
);
}
}
}
}
else
if
(
hint
==
HintMsg
.
ToDeck
&&
func
.
CardsCheckALL
(
cards
,
func
.
IsLocation
,
true
,
CardLocation
.
Hand
)
&&
min
==
3
&&
max
==
3
)
else
if
(
hint
==
HintMsg
.
ToDeck
&&
func
.
CardsCheckALL
(
cards
,
func
.
IsLocation
,
true
,
CardLocation
.
Hand
)
&&
min
==
3
&&
max
==
3
)
{
{
result
=
func
.
CardsIdToClientCards
(
GetSendToDeckIds
(),
cards
);
result
=
func
.
CardsIdToClientCards
(
GetSendToDeckIds
(),
cards
);
}
}
else
if
(
hint
==
HintMsg
.
ToGrave
&&
func
.
CardsCheckALL
(
cards
,
func
.
IsLocation
,
true
,
CardLocation
.
Deck
))
else
if
(
hint
==
HintMsg
.
ToGrave
&&
func
.
CardsCheckALL
(
cards
,
func
.
IsLocation
,
true
,
CardLocation
.
Deck
))
{
{
...
@@ -1933,8 +2005,9 @@ namespace WindBot.Game.AI.Decks
...
@@ -1933,8 +2005,9 @@ namespace WindBot.Game.AI.Decks
HeavymetalfoesElectrumiteAddIds
(
ids
);
HeavymetalfoesElectrumiteAddIds
(
ids
);
result
=
func
.
CardsIdToClientCards
(
ids
,
cards
);
result
=
func
.
CardsIdToClientCards
(
ids
,
cards
);
}
}
else
if
(!(
IS_YGOPRO
&
!(
hint
==
HintMsg
.
SpSummon
))
&&
func
.
CardsCheckALL
(
cards
,
card
=>{
return
card
.
IsCode
(
CardId
.
TheMightyMasterofMagic
)
||
card
.
IsCode
(
CardId
.
MythicalBeastJackalKing
);
else
if
(!(
IS_YGOPRO
&
!(
hint
==
HintMsg
.
SpSummon
))
&&
func
.
CardsCheckALL
(
cards
,
card
=>
{
},
true
))
return
card
.
IsCode
(
CardId
.
TheMightyMasterofMagic
)
||
card
.
IsCode
(
CardId
.
MythicalBeastJackalKing
);
},
true
))
{
{
ids
.
Add
(
CardId
.
MythicalBeastJackalKing
);
ids
.
Add
(
CardId
.
MythicalBeastJackalKing
);
ids
.
Add
(
CardId
.
TheMightyMasterofMagic
);
ids
.
Add
(
CardId
.
TheMightyMasterofMagic
);
...
@@ -1945,7 +2018,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -1945,7 +2018,7 @@ namespace WindBot.Game.AI.Decks
{
{
p_summoning
=
false
;
p_summoning
=
false
;
if
(
p_count
>=
3
&&
!
Bot
.
HasInExtra
(
CardId
.
SaryujaSkullDread
)
&&
Bot
.
HasInExtra
(
CardId
.
MechaPhantomBeastAuroradon
))
return
Func
.
CheckSelectCount
(
Util
,
result
,
cards
,
min
,
min
);
if
(
p_count
>=
3
&&
!
Bot
.
HasInExtra
(
CardId
.
SaryujaSkullDread
)
&&
Bot
.
HasInExtra
(
CardId
.
MechaPhantomBeastAuroradon
))
return
Func
.
CheckSelectCount
(
Util
,
result
,
cards
,
min
,
min
);
return
_OnSelectPendulumSummon
(
cards
,
min
,
max
);
return
_OnSelectPendulumSummon
(
cards
,
min
,
max
);
}
}
else
if
(
hint
==
HintMsg
.
Destroy
)
else
if
(
hint
==
HintMsg
.
Destroy
)
{
{
...
@@ -1955,7 +2028,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -1955,7 +2028,7 @@ namespace WindBot.Game.AI.Decks
if
(
func
.
CardsCheckALL
(
cards
,
func
.
HasSetCode
,
true
,
0x9e
))
if
(
func
.
CardsCheckALL
(
cards
,
func
.
HasSetCode
,
true
,
0x9e
))
{
{
if
(!
activate_SecretoftheYangZing
)
result
=
func
.
CardsIdToClientCards
(
new
List
<
int
>
{
CardId
.
SecretoftheYangZing
},
func
.
CardsCheckWhere
(
cards
,
if
(!
activate_SecretoftheYangZing
)
result
=
func
.
CardsIdToClientCards
(
new
List
<
int
>
{
CardId
.
SecretoftheYangZing
},
func
.
CardsCheckWhere
(
cards
,
func
.
IsLocation
,
CardLocation
.
MonsterZone
));
func
.
IsLocation
,
CardLocation
.
MonsterZone
));
result
.
AddRange
(
func
.
CardsIdToClientCards
(
new
List
<
int
>
{
CardId
.
SecretoftheYangZing
,
CardId
.
Zefraxi_TreasureoftheYangZing
},
func
.
CardsCheckWhere
(
cards
,
result
.
AddRange
(
func
.
CardsIdToClientCards
(
new
List
<
int
>
{
CardId
.
SecretoftheYangZing
,
CardId
.
Zefraxi_TreasureoftheYangZing
},
func
.
CardsCheckWhere
(
cards
,
Func
.
NegateFunc
(
func
.
IsLocation
),
CardLocation
.
MonsterZone
)));
Func
.
NegateFunc
(
func
.
IsLocation
),
CardLocation
.
MonsterZone
)));
}
}
...
@@ -1970,7 +2043,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -1970,7 +2043,7 @@ namespace WindBot.Game.AI.Decks
});
});
result
.
AddRange
(
scards
);
result
.
AddRange
(
scards
);
}
}
}
}
else
if
(
func
.
CardsCheckAny
(
cards
,
card
=>
{
return
card
.
Controller
==
1
&&
(
card
.
Location
&
CardLocation
.
Onfield
)
>
0
;
})
&&
min
==
1
&&
max
==
1
)
else
if
(
func
.
CardsCheckAny
(
cards
,
card
=>
{
return
card
.
Controller
==
1
&&
(
card
.
Location
&
CardLocation
.
Onfield
)
>
0
;
})
&&
min
==
1
&&
max
==
1
)
{
{
...
@@ -1995,13 +2068,15 @@ namespace WindBot.Game.AI.Decks
...
@@ -1995,13 +2068,15 @@ namespace WindBot.Game.AI.Decks
{
{
CardId
.
TheMightyMasterofMagic
,
CardId
.
MythicalBeastJackalKing
,
CardId
.
SecretoftheYangZing
CardId
.
TheMightyMasterofMagic
,
CardId
.
MythicalBeastJackalKing
,
CardId
.
SecretoftheYangZing
};
};
if
(
func
.
CardsCheckALL
(
cards
,
func
.
IsLocation
,
true
,
CardLocation
.
Hand
))
if
(
func
.
CardsCheckALL
(
cards
,
func
.
IsLocation
,
true
,
CardLocation
.
Hand
))
{
{
if
(
summoned
&&
Bot
.
HasInExtra
(
CardId
.
CrystronHalqifibrax
)
&&
func
.
CardsCheckCount
(
Bot
.
MonsterZone
,
card
=>
{
return
card
.
IsFaceup
()
if
(
summoned
&&
Bot
.
HasInExtra
(
CardId
.
CrystronHalqifibrax
)
&&
func
.
CardsCheckCount
(
Bot
.
MonsterZone
,
card
=>
{
&&
card
.
HasType
(
CardType
.
Tuner
);})
<=
0
&&
!(
Bot
.
HasInGraveyard
(
CardId
.
DDLamia
)
&&
!
activate_DDLamia
return
card
.
IsFaceup
()
&&
card
.
HasType
(
CardType
.
Tuner
);
&&
func
.
CardsCheckCount
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
Onfield
|
CardLocation
.
Hand
,
true
),
card
=>
{
return
Func
.
HasSetCode
(
card
,
0xaf
,
0xae
)
&&
card
.
Id
!=
CardId
.
DDLamia
;
})
})
<=
0
&&
!(
Bot
.
HasInGraveyard
(
CardId
.
DDLamia
)
&&
!
activate_DDLamia
&&
func
.
CardsCheckCount
(
Func
.
GetZoneCards
(
Bot
,
CardLocation
.
Onfield
|
CardLocation
.
Hand
,
true
),
card
=>
{
return
Func
.
HasSetCode
(
card
,
0xaf
,
0xae
)
&&
card
.
Id
!=
CardId
.
DDLamia
;
})
<=
0
)
&&
!(
Bot
.
HasInGraveyard
(
CardId
.
JetSynchron
)
&&
!
activate_JetSynchron
)
<=
0
)
&&
!(
Bot
.
HasInGraveyard
(
CardId
.
JetSynchron
)
&&
!
activate_JetSynchron
)
&&
!(
Bot
.
HasInGraveyard
(
CardId
.
DestrudotheLostDragon_Frisson
)
&&
!
activate_DestrudotheLostDragon_Frisson
)){
&&
!(
Bot
.
HasInGraveyard
(
CardId
.
DestrudotheLostDragon_Frisson
)
&&
!
activate_DestrudotheLostDragon_Frisson
))
{
ids
.
AddRange
(
tuner_ids
);
ids
.
AddRange
(
tuner_ids
);
ids
.
AddRange
(
no_tuner_ids
);
ids
.
AddRange
(
no_tuner_ids
);
}
}
...
@@ -2012,8 +2087,11 @@ namespace WindBot.Game.AI.Decks
...
@@ -2012,8 +2087,11 @@ namespace WindBot.Game.AI.Decks
}
}
result
=
func
.
CardsIdToClientCards
(
ids
,
cards
);
result
=
func
.
CardsIdToClientCards
(
ids
,
cards
);
}
}
else
if
(
func
.
CardsCheckALL
(
cards
,
card
=>
{
return
Func
.
IsCode
(
card
,
CardId
.
LightoftheYangZing
,
CardId
.
PSY_FramegearGamma
,
else
if
(
func
.
CardsCheckALL
(
cards
,
card
=>
{
CardId
.
MechaPhantomBeastO_Lion
,
CardId
.
JetSynchron
,
CardId
.
Deskbot001
,
CardId
.
DDLamia
);
})){
return
Func
.
IsCode
(
card
,
CardId
.
LightoftheYangZing
,
CardId
.
PSY_FramegearGamma
,
CardId
.
MechaPhantomBeastO_Lion
,
CardId
.
JetSynchron
,
CardId
.
Deskbot001
,
CardId
.
DDLamia
);
}))
{
if
(
Bot
.
GetMonstersInMainZone
().
Count
<=
1
)
ids
.
Add
(
CardId
.
Deskbot001
);
if
(
Bot
.
GetMonstersInMainZone
().
Count
<=
1
)
ids
.
Add
(
CardId
.
Deskbot001
);
ids
.
Add
(
CardId
.
JetSynchron
);
ids
.
Add
(
CardId
.
JetSynchron
);
ids
.
Add
(
CardId
.
Deskbot001
);
ids
.
Add
(
CardId
.
Deskbot001
);
...
@@ -2021,7 +2099,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -2021,7 +2099,7 @@ namespace WindBot.Game.AI.Decks
ids
.
Add
(
CardId
.
PSY_FramegearGamma
);
ids
.
Add
(
CardId
.
PSY_FramegearGamma
);
result
=
func
.
CardsIdToClientCards
(
ids
,
cards
);
result
=
func
.
CardsIdToClientCards
(
ids
,
cards
);
}
}
}
}
else
if
(
hint
==
HintMsg
.
Release
&&
func
.
CardsCheckAny
(
cards
,
func
.
IsLocation
,
CardLocation
.
MonsterZone
))
else
if
(
hint
==
HintMsg
.
Release
&&
func
.
CardsCheckAny
(
cards
,
func
.
IsLocation
,
CardLocation
.
MonsterZone
))
{
{
...
@@ -2031,13 +2109,13 @@ namespace WindBot.Game.AI.Decks
...
@@ -2031,13 +2109,13 @@ namespace WindBot.Game.AI.Decks
{
{
if
(
card
==
null
||
IsNoLinkCards
(
card
))
continue
;
if
(
card
==
null
||
IsNoLinkCards
(
card
))
continue
;
if
(
card
.
Id
==
CardId
.
MechaPhantomBeastToken
)
tRelease
.
Add
(
card
);
if
(
card
.
Id
==
CardId
.
MechaPhantomBeastToken
)
tRelease
.
Add
(
card
);
else
if
(
card
.
Id
==
CardId
.
Raidraptor_WiseStrix
)
tRelease
.
Insert
(
0
,
card
);
else
if
(
card
.
Id
==
CardId
.
Raidraptor_WiseStrix
)
tRelease
.
Insert
(
0
,
card
);
else
nRelease
.
Add
(
card
);
else
nRelease
.
Add
(
card
);
}
}
result
.
AddRange
(
tRelease
);
result
.
AddRange
(
tRelease
);
result
.
AddRange
(
nRelease
);
result
.
AddRange
(
nRelease
);
}
}
return
Func
.
CheckSelectCount
(
Util
,
result
,
cards
,
min
,
max
);
return
Func
.
CheckSelectCount
(
Util
,
result
,
cards
,
min
,
max
);
}
}
private
bool
HasInDeck
(
int
id
)
private
bool
HasInDeck
(
int
id
)
{
{
...
...
Game/AI/Dialogs.cs
View file @
486ccf0b
...
@@ -34,7 +34,9 @@ namespace WindBot.Game.AI
...
@@ -34,7 +34,9 @@ namespace WindBot.Game.AI
[
DataMember
]
[
DataMember
]
public
string
[]
setmonster
{
get
;
set
;
}
public
string
[]
setmonster
{
get
;
set
;
}
[
DataMember
]
[
DataMember
]
public
string
[]
chaining
{
get
;
set
;
}
public
string
[]
chaining
{
get
;
set
;
}
[
DataMember
]
public
string
[]
custom
{
get
;
set
;
}
}
}
public
class
Dialogs
public
class
Dialogs
{
{
...
@@ -53,7 +55,8 @@ namespace WindBot.Game.AI
...
@@ -53,7 +55,8 @@ namespace WindBot.Game.AI
private
string
[]
_summon
;
private
string
[]
_summon
;
private
string
[]
_setmonster
;
private
string
[]
_setmonster
;
private
string
[]
_chaining
;
private
string
[]
_chaining
;
private
string
[]
_custom
;
public
Dialogs
(
GameClient
game
)
public
Dialogs
(
GameClient
game
)
{
{
_game
=
game
;
_game
=
game
;
...
@@ -75,6 +78,7 @@ namespace WindBot.Game.AI
...
@@ -75,6 +78,7 @@ namespace WindBot.Game.AI
_summon
=
data
.
summon
;
_summon
=
data
.
summon
;
_setmonster
=
data
.
setmonster
;
_setmonster
=
data
.
setmonster
;
_chaining
=
data
.
chaining
;
_chaining
=
data
.
chaining
;
_custom
=
data
.
custom
;
}
}
}
}
...
@@ -173,5 +177,14 @@ namespace WindBot.Game.AI
...
@@ -173,5 +177,14 @@ namespace WindBot.Game.AI
if
(
message
!=
""
)
if
(
message
!=
""
)
_game
.
Chat
(
message
);
_game
.
Chat
(
message
);
}
}
public
void
SendCustomChat
(
int
index
,
params
object
[]
opts
)
{
if
(!
_game
.
_chat
||
_custom
==
null
)
return
;
string
message
=
string
.
Format
(
_custom
[
index
],
opts
);
if
(
message
!=
""
)
_game
.
Chat
(
message
);
}
}
}
}
}
Game/AI/Executor.cs
View file @
486ccf0b
...
@@ -165,6 +165,7 @@ namespace WindBot.Game.AI
...
@@ -165,6 +165,7 @@ namespace WindBot.Game.AI
// For overriding
// For overriding
return
null
;
return
null
;
}
}
public
virtual
void
OnSelectChain
(
IList
<
ClientCard
>
cards
)
public
virtual
void
OnSelectChain
(
IList
<
ClientCard
>
cards
)
{
{
return
;
return
;
...
...
Game/GameAI.cs
View file @
486ccf0b
...
@@ -54,6 +54,14 @@ namespace WindBot.Game
...
@@ -54,6 +54,14 @@ namespace WindBot.Game
_dialogs
.
SendDuelStart
();
_dialogs
.
SendDuelStart
();
}
}
/// <summary>
/// Customized called when the AI do something in a duel.
/// </summary>
public
void
SendCustomChat
(
int
index
,
params
object
[]
opts
)
{
_dialogs
.
SendCustomChat
(
index
,
opts
);
}
/// <summary>
/// <summary>
/// Called when the AI do the rock-paper-scissors.
/// Called when the AI do the rock-paper-scissors.
/// </summary>
/// </summary>
...
...
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