Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
W
windbot
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
alstroemeria-silentlove
windbot
Commits
494fe10b
Commit
494fe10b
authored
Sep 01, 2018
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://github.com/IceYGO/windbot
parents
43086945
98971329
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
631 additions
and
1025 deletions
+631
-1025
Game/AI/AIFunctions.cs
Game/AI/AIFunctions.cs
+2
-1
Game/AI/Decks/AltergeistExecutor.cs
Game/AI/Decks/AltergeistExecutor.cs
+68
-64
Game/AI/Decks/BlueEyesExecutor.cs
Game/AI/Decks/BlueEyesExecutor.cs
+47
-66
Game/AI/Decks/BlueEyesMaxDragonExecutor.cs
Game/AI/Decks/BlueEyesMaxDragonExecutor.cs
+9
-13
Game/AI/Decks/DarkMagicianExecutor.cs
Game/AI/Decks/DarkMagicianExecutor.cs
+47
-131
Game/AI/Decks/DragunityExecutor.cs
Game/AI/Decks/DragunityExecutor.cs
+2
-3
Game/AI/Decks/GrenMajuThunderBoarderExecutor.cs
Game/AI/Decks/GrenMajuThunderBoarderExecutor.cs
+12
-19
Game/AI/Decks/LightswornExecutor.cs
Game/AI/Decks/LightswornExecutor.cs
+19
-25
Game/AI/Decks/LightswornShaddoldinosourExecutor.cs
Game/AI/Decks/LightswornShaddoldinosourExecutor.cs
+43
-94
Game/AI/Decks/PhantasmExecutor.cs
Game/AI/Decks/PhantasmExecutor.cs
+51
-61
Game/AI/Decks/QliphortExecutor.cs
Game/AI/Decks/QliphortExecutor.cs
+13
-19
Game/AI/Decks/RainbowExecutor.cs
Game/AI/Decks/RainbowExecutor.cs
+14
-21
Game/AI/Decks/Rank5Executor.cs
Game/AI/Decks/Rank5Executor.cs
+17
-19
Game/AI/Decks/ST1732Executor.cs
Game/AI/Decks/ST1732Executor.cs
+30
-31
Game/AI/Decks/SkyStrikerExecutor.cs
Game/AI/Decks/SkyStrikerExecutor.cs
+9
-21
Game/AI/Decks/ToadallyAwesomeExecutor.cs
Game/AI/Decks/ToadallyAwesomeExecutor.cs
+79
-90
Game/AI/Decks/TrickstarExecutor.cs
Game/AI/Decks/TrickstarExecutor.cs
+30
-230
Game/AI/Decks/YosenjuExecutor.cs
Game/AI/Decks/YosenjuExecutor.cs
+6
-13
Game/AI/Decks/ZexalWeaponsExecutor.cs
Game/AI/Decks/ZexalWeaponsExecutor.cs
+15
-18
Game/AI/Decks/ZoodiacExecutor.cs
Game/AI/Decks/ZoodiacExecutor.cs
+56
-72
Game/AI/DefaultExecutor.cs
Game/AI/DefaultExecutor.cs
+10
-14
Game/ClientField.cs
Game/ClientField.cs
+1
-0
Game/GameAI.cs
Game/GameAI.cs
+26
-0
Game/GameBehavior.cs
Game/GameBehavior.cs
+25
-0
No files found.
Game/AI/AIFunctions.cs
View file @
494fe10b
...
...
@@ -74,7 +74,8 @@ namespace WindBot.Game.AI
public
bool
IsAllEnemyBetterThanValue
(
int
value
,
bool
onlyATK
)
{
return
Enemy
.
MonsterZone
.
GetMonsters
()
List
<
ClientCard
>
monsters
=
Enemy
.
MonsterZone
.
GetMonsters
();
return
monsters
.
Count
>
0
&&
monsters
.
All
(
card
=>
card
.
GetDefensePower
()
>
value
&&
(!
onlyATK
||
card
.
IsAttack
()));
}
...
...
Game/AI/Decks/AltergeistExecutor.cs
View file @
494fe10b
...
...
@@ -156,13 +156,13 @@ namespace WindBot.Game.AI.Decks
// effect
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Spoofing
,
Spoofing_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Kunquery
,
Kunquery_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Marionetter
,
Marionetter_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Multifaker
,
Multifaker_deckss
);
// summon
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Hexstia
,
Hexstia_ss
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Linkuriboh
,
Linkuriboh_ss
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Linkuriboh
,
Linkuriboh_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Marionetter
,
Marionetter_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
OneForOne
,
OneForOne_activate
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Meluseek
,
Meluseek_summon
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Marionetter
,
Marionetter_summon
);
...
...
@@ -176,6 +176,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Silquitous
,
Silquitous_summon
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Multifaker
,
Multifaker_summon
);
AddExecutor
(
ExecutorType
.
Repos
,
MonsterRepos
);
AddExecutor
(
ExecutorType
.
Summon
,
MonsterSummon
);
AddExecutor
(
ExecutorType
.
MonsterSet
,
MonsterSet
);
AddExecutor
(
ExecutorType
.
SpellSet
,
SpellSet
);
}
...
...
@@ -658,8 +659,7 @@ namespace WindBot.Game.AI.Decks
{
if
(
Duel
.
LastChainPlayer
!=
0
)
{
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
_CardId
.
HarpiesFeatherDuster
,
CardId
.
PotofDesires
,
CardId
.
OneForOne
,
...
...
@@ -677,7 +677,7 @@ namespace WindBot.Game.AI.Decks
CardId
.
WakingtheDragon
,
CardId
.
Impermanence
,
CardId
.
Marionetter
}
);
);
return
true
;
}
return
false
;
...
...
@@ -932,6 +932,11 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
CardId
.
Needlefiber
);
return
true
;
}
if
(
has_level_1
&&
!
Enemy
.
HasInHandOrInMonstersZoneOrInGraveyard
(
CardId
.
Linkuriboh
)
&&
!
Enemy
.
HasInBanished
(
CardId
.
Linkuriboh
)
&&
Bot
.
HasInExtra
(
CardId
.
Linkuriboh
))
{
AI
.
SelectCard
(
CardId
.
Linkuriboh
);
return
true
;
}
if
(
altergeis_count
>
0
&&
!
Enemy
.
HasInBanished
(
CardId
.
Hexstia
)
&&
Bot
.
HasInExtra
(
CardId
.
Hexstia
))
{
AI
.
SelectCard
(
CardId
.
Hexstia
);
...
...
@@ -950,11 +955,6 @@ namespace WindBot.Game.AI.Decks
return
true
;
}
}
if
(
has_level_1
&&
!
Enemy
.
HasInHandOrInMonstersZoneOrInGraveyard
(
CardId
.
Linkuriboh
)
&&
!
Enemy
.
HasInBanished
(
CardId
.
Linkuriboh
)
&&
Bot
.
HasInExtra
(
CardId
.
Linkuriboh
))
{
AI
.
SelectCard
(
CardId
.
Linkuriboh
);
return
true
;
}
return
false
;
}
...
...
@@ -1102,18 +1102,12 @@ namespace WindBot.Game.AI.Decks
{
if
(!
Bot
.
HasInHandOrInSpellZone
(
CardId
.
Protocol
)
&&
Bot
.
GetRemainingCount
(
CardId
.
Protocol
,
2
)
>
0
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Protocol
,
CardId
.
Manifestation
});
AI
.
SelectCard
(
CardId
.
Protocol
,
CardId
.
Manifestation
);
AI
.
SelectPlace
(
SelectSetPlace
());
return
true
;
}
else
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Manifestation
,
CardId
.
Protocol
});
AI
.
SelectCard
(
CardId
.
Manifestation
,
CardId
.
Protocol
);
AI
.
SelectPlace
(
SelectSetPlace
());
return
true
;
}
...
...
@@ -1291,22 +1285,22 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
CardId
.
Protocol
);
return
true
;
}
AI
.
SelectCard
(
new
[]
{
CardId
.
Meluseek
,
CardId
.
Kunquery
,
CardId
.
Marionetter
,
CardId
.
Multifaker
,
CardId
.
Manifestation
,
CardId
.
Protocol
,
CardId
.
Silquitous
});
AI
.
SelectCard
(
CardId
.
Meluseek
,
CardId
.
Kunquery
,
CardId
.
Marionetter
,
CardId
.
Multifaker
,
CardId
.
Manifestation
,
CardId
.
Protocol
,
CardId
.
Silquitous
);
return
true
;
}
public
bool
Meluseek_eff
()
{
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
Meluseek
,
0
))
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
Meluseek
,
0
)
||
(
ActivateDescription
==
-
1
&&
Card
.
Location
==
CardLocation
.
MonsterZone
))
{
attacked_Meluseek
.
Add
(
Card
);
ClientCard
target
=
GetProblematicEnemyCard_Alter
(
true
);
...
...
@@ -1373,13 +1367,12 @@ namespace WindBot.Game.AI.Decks
return
true
;
}
}
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
CardId
.
Kunquery
,
CardId
.
Marionetter
,
CardId
.
Multifaker
,
CardId
.
Silquitous
}
);
);
return
true
;
}
return
false
;
...
...
@@ -1397,13 +1390,15 @@ namespace WindBot.Game.AI.Decks
{
if
(
Card
.
Location
!=
CardLocation
.
Hand
)
{
ClientCard
Silquitous_target
=
GetProblematicEnemyCard_Alter
(
true
);
if
(
Duel
.
Player
==
1
&&
Duel
.
Phase
>=
DuelPhase
.
Main2
&&
GetProblematicEnemyCard_Alter
(
true
)
==
null
&&
Bot
.
GetRemainingCount
(
CardId
.
Meluseek
,
3
)
>
0
)
{
AI
.
SelectCard
(
CardId
.
Meluseek
);
Multifaker_ssfromdeck
=
true
;
return
true
;
}
else
if
(!
Silquitous_bounced
&&
!
Bot
.
HasInMonstersZone
(
CardId
.
Silquitous
)
&&
Bot
.
GetRemainingCount
(
CardId
.
Silquitous
,
2
)
>
0
)
else
if
(!
Silquitous_bounced
&&
!
Bot
.
HasInMonstersZone
(
CardId
.
Silquitous
)
&&
Bot
.
GetRemainingCount
(
CardId
.
Silquitous
,
2
)
>
0
&&
!(
Duel
.
Player
==
0
&&
Silquitous_target
==
null
))
{
AI
.
SelectCard
(
CardId
.
Silquitous
);
Multifaker_ssfromdeck
=
true
;
...
...
@@ -1633,6 +1628,8 @@ namespace WindBot.Game.AI.Decks
foreach
(
int
id
in
choose_list
)
{
if
(
Bot
.
HasInGraveyard
(
id
)){
if
(
id
==
CardId
.
Kunquery
&&
(!
Bot
.
HasInHand
(
CardId
.
Multifaker
)
||
!
Multifaker_candeckss
()))
continue
;
AI
.
SelectCard
(
id
);
return
true
;
}
...
...
@@ -1819,6 +1816,7 @@ namespace WindBot.Game.AI.Decks
public
bool
Spoofing_eff
()
{
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Spoofing
))
return
false
;
if
(
Card
.
IsDisabled
())
return
false
;
if
(!
AI
.
Utils
.
ChainContainPlayer
(
0
)
&&
!
Multifaker_ssfromhand
&&
Multifaker_candeckss
()
&&
Bot
.
HasInHand
(
CardId
.
Multifaker
)
&&
Card
.
HasPosition
(
CardPosition
.
FaceDown
))
{
AI
.
SelectYesNo
(
false
);
...
...
@@ -1883,10 +1881,7 @@ namespace WindBot.Game.AI.Decks
if
(
card
.
IsCode
(
CardId
.
Silquitous
))
{
AI
.
SelectCard
(
card
);
AI
.
SelectNextCard
(
new
[]
{
CardId
.
Multifaker
,
CardId
.
Kunquery
});
AI
.
SelectNextCard
(
CardId
.
Multifaker
,
CardId
.
Kunquery
);
return
true
;
}
}
...
...
@@ -1903,13 +1898,13 @@ namespace WindBot.Game.AI.Decks
CardId
.
Protocol
,
CardId
.
Meluseek
});
AI
.
SelectNextCard
(
new
[]{
AI
.
SelectNextCard
(
CardId
.
Multifaker
,
CardId
.
Marionetter
,
CardId
.
Meluseek
,
CardId
.
Kunquery
,
CardId
.
Silquitous
}
);
);
return
true
;
}
}
...
...
@@ -1932,13 +1927,13 @@ namespace WindBot.Game.AI.Decks
CardId
.
Protocol
,
CardId
.
Meluseek
});
AI
.
SelectNextCard
(
new
[]{
AI
.
SelectNextCard
(
CardId
.
Multifaker
,
CardId
.
Marionetter
,
CardId
.
Meluseek
,
CardId
.
Kunquery
,
CardId
.
Silquitous
}
);
);
}
else
if
(!
summoned
&&
!
Bot
.
HasInGraveyard
(
CardId
.
Meluseek
)
&&
Bot
.
GetRemainingCount
(
CardId
.
Meluseek
,
3
)
>
0
&&
!
Bot
.
HasInHand
(
CardId
.
Meluseek
)
&&
(
enemy_best
!=
null
||
enemy_target
!=
null
)
)
...
...
@@ -1950,10 +1945,10 @@ namespace WindBot.Game.AI.Decks
if
(
card
.
IsCode
(
CardId
.
Silquitous
))
{
AI
.
SelectCard
(
card
);
AI
.
SelectNextCard
(
new
[]{
AI
.
SelectNextCard
(
CardId
.
Meluseek
,
CardId
.
Marionetter
}
);
);
return
true
;
}
}
...
...
@@ -1970,12 +1965,12 @@ namespace WindBot.Game.AI.Decks
CardId
.
Meluseek
,
CardId
.
Marionetter
,
});
AI
.
SelectNextCard
(
new
[]{
AI
.
SelectNextCard
(
CardId
.
Meluseek
,
CardId
.
Marionetter
,
CardId
.
Multifaker
,
CardId
.
Kunquery
}
);
);
return
true
;
}
}
...
...
@@ -1988,10 +1983,10 @@ namespace WindBot.Game.AI.Decks
if
(
card
.
IsCode
(
CardId
.
Silquitous
))
{
AI
.
SelectCard
(
card
);
AI
.
SelectNextCard
(
new
[]{
AI
.
SelectNextCard
(
CardId
.
Marionetter
,
CardId
.
Meluseek
}
);
);
return
true
;
}
}
...
...
@@ -2008,12 +2003,12 @@ namespace WindBot.Game.AI.Decks
CardId
.
Meluseek
,
CardId
.
Marionetter
,
});
AI
.
SelectNextCard
(
new
[]{
AI
.
SelectNextCard
(
CardId
.
Marionetter
,
CardId
.
Meluseek
,
CardId
.
Multifaker
,
CardId
.
Kunquery
}
);
);
return
true
;
}
}
...
...
@@ -2046,12 +2041,12 @@ namespace WindBot.Game.AI.Decks
}
if
(
go
)
{
AI
.
SelectNextCard
(
new
[]{
AI
.
SelectNextCard
(
CardId
.
Marionetter
,
CardId
.
Meluseek
,
CardId
.
Multifaker
,
CardId
.
Kunquery
}
);
);
return
true
;
}
return
false
;
...
...
@@ -2062,25 +2057,23 @@ namespace WindBot.Game.AI.Decks
if
(!
spell_trap_activate
())
return
false
;
if
(!
Bot
.
HasInHandOrInMonstersZoneOrInGraveyard
(
CardId
.
Meluseek
)
&&
!
Bot
.
HasInHandOrInMonstersZoneOrInGraveyard
(
CardId
.
Multifaker
))
{
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
CardId
.
GR_WC
,
CardId
.
MaxxC
,
CardId
.
Kunquery
,
CardId
.
GO_SR
}
);
);
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
}
if
(!
summoned
&&
!
Meluseek_searched
&&
!
Bot
.
HasInHand
(
CardId
.
Marionetter
))
{
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
CardId
.
GR_WC
,
CardId
.
MaxxC
,
CardId
.
Kunquery
,
CardId
.
GO_SR
}
);
);
return
true
;
}
return
false
;
...
...
@@ -2482,11 +2475,11 @@ namespace WindBot.Game.AI.Decks
public
bool
Needlefiber_eff
()
{
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
CardId
.
GR_WC
,
CardId
.
GO_SR
,
CardId
.
AB_JS
}
);
);
return
true
;
}
...
...
@@ -2647,11 +2640,12 @@ namespace WindBot.Game.AI.Decks
return
Card
.
HasPosition
(
CardPosition
.
Defence
);
}
if
(
isAltergeist
(
Card
)
&&
Bot
.
HasInHandOrInSpellZone
(
CardId
.
Protocol
)
&&
Card
.
IsFacedown
())
return
true
;
if
(
isAltergeist
(
Card
)
&&
Bot
.
HasInHandOrInSpellZone
(
CardId
.
Protocol
)
&&
Card
.
IsFacedown
())
return
true
;
bool
enemyBetter
=
AI
.
Utils
.
IsAllEnemyBetter
(
true
);
if
(
Card
.
IsAttack
()
&&
enemyBetter
)
return
true
;
return
true
;
if
(
Card
.
IsDefense
()
&&
!
enemyBetter
)
return
true
;
return
false
;
...
...
@@ -2659,7 +2653,7 @@ namespace WindBot.Game.AI.Decks
public
bool
MonsterSet
()
{
if
(
AI
.
Utils
.
GetOneEnemyBetterThanMyBest
()
==
null
)
return
false
;
if
(
AI
.
Utils
.
GetOneEnemyBetterThanMyBest
()
==
null
&&
Bot
.
GetMonsterCount
()
>
0
)
return
false
;
if
(
Card
.
Level
>
4
)
return
false
;
int
rest_lp
=
Bot
.
LifePoints
;
int
count
=
Bot
.
GetMonsterCount
();
...
...
@@ -2679,7 +2673,12 @@ namespace WindBot.Game.AI.Decks
return
false
;
}
// just a test
public
bool
MonsterSummon
()
{
if
(
Enemy
.
GetMonsterCount
()
+
Bot
.
GetMonsterCount
()
>
0
)
return
false
;
return
Card
.
Attack
>=
Enemy
.
LifePoints
;
}
public
override
BattlePhaseAction
OnSelectAttackTarget
(
ClientCard
attacker
,
IList
<
ClientCard
>
defenders
)
{
if
(
EvenlyMatched_ready
())
...
...
@@ -2700,7 +2699,11 @@ namespace WindBot.Game.AI.Decks
ClientCard
defender
=
defenders
[
i
];
attacker
.
RealPower
=
attacker
.
Attack
;
defender
.
RealPower
=
defender
.
GetDefensePower
();
if
(!
OnPreBattleBetween
(
attacker
,
defender
)
&&
!(
attacker
.
IsCode
(
CardId
.
Borrelsword
)
&&
!
attacker
.
IsDisabled
()))
if
(
attacker
.
IsCode
(
CardId
.
Borrelsword
)
&&
!
attacker
.
IsDisabled
())
return
AI
.
Attack
(
attacker
,
defender
);
if
(!
OnPreBattleBetween
(
attacker
,
defender
))
continue
;
if
(
attacker
.
RealPower
==
defender
.
RealPower
&&
Bot
.
GetMonsterCount
()
<
Enemy
.
GetMonsterCount
())
continue
;
if
(
attacker
.
RealPower
>
defender
.
RealPower
||
(
attacker
.
RealPower
>=
defender
.
RealPower
&&
attacker
.
IsLastAttacker
&&
defender
.
IsAttack
()))
return
AI
.
Attack
(
attacker
,
defender
);
...
...
@@ -2776,7 +2779,8 @@ namespace WindBot.Game.AI.Decks
public
override
CardPosition
OnSelectPosition
(
int
cardId
,
IList
<
CardPosition
>
positions
)
{
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
if
(
AI
.
Utils
.
IsTurn1OrMain2
()
&&
(
cardId
==
CardId
.
Meluseek
||
cardId
==
CardId
.
Silquitous
))
{
return
CardPosition
.
FaceUpDefence
;
}
...
...
Game/AI/Decks/BlueEyesExecutor.cs
View file @
494fe10b
...
...
@@ -177,41 +177,38 @@ namespace WindBot.Game.AI.Decks
private
bool
DragonShrineEffect
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
DragonSpiritOfWhite
,
CardId
.
WhiteDragon
,
CardId
.
WhiteStoneOfAncients
,
CardId
.
WhiteStoneOfLegend
});
AI
.
SelectCard
(
CardId
.
DragonSpiritOfWhite
,
CardId
.
WhiteDragon
,
CardId
.
WhiteStoneOfAncients
,
CardId
.
WhiteStoneOfLegend
);
if
(!
Bot
.
HasInHand
(
CardId
.
WhiteDragon
))
{
AI
.
SelectNextCard
(
CardId
.
WhiteStoneOfLegend
);
}
else
{
AI
.
SelectNextCard
(
new
[]
{
AI
.
SelectNextCard
(
CardId
.
WhiteStoneOfAncients
,
CardId
.
DragonSpiritOfWhite
,
CardId
.
WhiteStoneOfLegend
}
);
);
}
return
true
;
}
private
bool
MelodyOfAwakeningDragonEffect
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
WhiteStoneOfAncients
,
CardId
.
DragonSpiritOfWhite
,
CardId
.
WhiteStoneOfLegend
,
CardId
.
GalaxyCyclone
,
CardId
.
EffectVeiler
,
CardId
.
TradeIn
,
CardId
.
SageWithEyesOfBlue
});
AI
.
SelectCard
(
CardId
.
WhiteStoneOfAncients
,
CardId
.
DragonSpiritOfWhite
,
CardId
.
WhiteStoneOfLegend
,
CardId
.
GalaxyCyclone
,
CardId
.
EffectVeiler
,
CardId
.
TradeIn
,
CardId
.
SageWithEyesOfBlue
);
return
true
;
}
...
...
@@ -251,11 +248,7 @@ namespace WindBot.Game.AI.Decks
}
else
if
(!
Bot
.
HasInHand
(
CardId
.
WhiteDragon
)
||
!
Bot
.
HasInHand
(
CardId
.
AlternativeWhiteDragon
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
WhiteDragon
,
CardId
.
AlternativeWhiteDragon
});
AI
.
SelectCard
(
CardId
.
WhiteDragon
,
CardId
.
AlternativeWhiteDragon
);
return
true
;
}
else
...
...
@@ -348,12 +341,11 @@ namespace WindBot.Game.AI.Decks
{
return
false
;
}
AI
.
SelectCard
(
new
[]
{
CardId
.
WhiteStoneOfAncients
,
CardId
.
EffectVeiler
,
CardId
.
WhiteStoneOfLegend
});
AI
.
SelectCard
(
CardId
.
WhiteStoneOfAncients
,
CardId
.
EffectVeiler
,
CardId
.
WhiteStoneOfLegend
);
return
true
;
}
...
...
@@ -381,11 +373,7 @@ namespace WindBot.Game.AI.Decks
{
return
false
;
}
AI
.
SelectCard
(
new
[]
{
CardId
.
WhiteStoneOfLegend
,
CardId
.
WhiteStoneOfAncients
});
AI
.
SelectCard
(
CardId
.
WhiteStoneOfLegend
,
CardId
.
WhiteStoneOfAncients
);
if
(
Enemy
.
GetSpellCount
()
>
0
)
{
AI
.
SelectNextCard
(
CardId
.
DragonSpiritOfWhite
);
...
...
@@ -730,20 +718,18 @@ namespace WindBot.Game.AI.Decks
private
bool
GalaxyEyesDarkMatterDragonEffect
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
WhiteStoneOfAncients
,
CardId
.
WhiteStoneOfLegend
,
CardId
.
DragonSpiritOfWhite
,
CardId
.
WhiteDragon
});
AI
.
SelectNextCard
(
new
[]
{
CardId
.
WhiteStoneOfAncients
,
CardId
.
WhiteStoneOfLegend
,
CardId
.
DragonSpiritOfWhite
,
CardId
.
WhiteDragon
});
AI
.
SelectCard
(
CardId
.
WhiteStoneOfAncients
,
CardId
.
WhiteStoneOfLegend
,
CardId
.
DragonSpiritOfWhite
,
CardId
.
WhiteDragon
);
AI
.
SelectNextCard
(
CardId
.
WhiteStoneOfAncients
,
CardId
.
WhiteStoneOfLegend
,
CardId
.
DragonSpiritOfWhite
,
CardId
.
WhiteDragon
);
return
true
;
}
...
...
@@ -822,11 +808,7 @@ namespace WindBot.Game.AI.Decks
private
bool
SylvanPrincesspriteEffect
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
WhiteStoneOfLegend
,
CardId
.
WhiteStoneOfAncients
});
AI
.
SelectCard
(
CardId
.
WhiteStoneOfLegend
,
CardId
.
WhiteStoneOfAncients
);
return
true
;
}
...
...
@@ -858,17 +840,16 @@ namespace WindBot.Game.AI.Decks
if
(
attack
-
defence
>
Enemy
.
LifePoints
)
return
false
;
}
AI
.
SelectCard
(
new
[]
{
CardId
.
BlueEyesSpiritDragon
,
CardId
.
HopeHarbingerDragonTitanicGalaxy
,
CardId
.
AlternativeWhiteDragon
,
CardId
.
WhiteDragon
,
CardId
.
DragonSpiritOfWhite
,
CardId
.
AzureEyesSilverDragon
,
CardId
.
WhiteStoneOfAncients
,
CardId
.
WhiteStoneOfLegend
});
AI
.
SelectCard
(
CardId
.
BlueEyesSpiritDragon
,
CardId
.
HopeHarbingerDragonTitanicGalaxy
,
CardId
.
AlternativeWhiteDragon
,
CardId
.
WhiteDragon
,
CardId
.
DragonSpiritOfWhite
,
CardId
.
AzureEyesSilverDragon
,
CardId
.
WhiteStoneOfAncients
,
CardId
.
WhiteStoneOfLegend
);
SoulChargeUsed
=
true
;
return
true
;
}
...
...
Game/AI/Decks/BlueEyesMaxDragonExecutor.cs
View file @
494fe10b
...
...
@@ -133,28 +133,28 @@ namespace WindBot.Game.AI.Decks
{
AI
.
SelectCard
(
CardId
.
MaxxC
);
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
TheMelodyOfAwakeningDragon
))
AI
.
SelectNextCard
(
new
[]
{
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesAlternativeWhiteDragon
}
);
AI
.
SelectNextCard
(
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesAlternativeWhiteDragon
);
return
UniqueFaceupSpell
();
}
if
(
lastCard
.
IsCode
(
CardId
.
LockBird
))
{
AI
.
SelectCard
(
CardId
.
LockBird
);
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
TheMelodyOfAwakeningDragon
))
AI
.
SelectNextCard
(
new
[]
{
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesAlternativeWhiteDragon
}
);
AI
.
SelectNextCard
(
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesAlternativeWhiteDragon
);
return
UniqueFaceupSpell
();
}
if
(
lastCard
.
IsCode
(
CardId
.
Ghost
))
{
AI
.
SelectCard
(
CardId
.
Ghost
);
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
TheMelodyOfAwakeningDragon
))
AI
.
SelectNextCard
(
new
[]
{
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesAlternativeWhiteDragon
}
);
AI
.
SelectNextCard
(
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesAlternativeWhiteDragon
);
return
UniqueFaceupSpell
();
}
if
(
lastCard
.
IsCode
(
CardId
.
AshBlossom
))
{
AI
.
SelectCard
(
CardId
.
AshBlossom
);
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
TheMelodyOfAwakeningDragon
))
AI
.
SelectNextCard
(
new
[]
{
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesAlternativeWhiteDragon
}
);
AI
.
SelectNextCard
(
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesAlternativeWhiteDragon
);
return
UniqueFaceupSpell
();
}
}
...
...
@@ -184,7 +184,7 @@ namespace WindBot.Game.AI.Decks
if
(
Bot
.
HasInMonstersZone
(
CardId
.
BlueEyesChaosMaxDragon
,
true
)
&&
Duel
.
Phase
==
DuelPhase
.
Main1
&&
(
Bot
.
HasInMonstersZone
(
CardId
.
DeviritualTalismandra
)
||
Bot
.
HasInMonstersZone
(
CardId
.
DevirrtualCandoll
)))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
DevirrtualCandoll
,
CardId
.
DeviritualTalismandra
}
);
AI
.
SelectCard
(
CardId
.
DevirrtualCandoll
,
CardId
.
DeviritualTalismandra
);
return
true
;
}
return
false
;
...
...
@@ -195,13 +195,13 @@ namespace WindBot.Game.AI.Decks
if
(
TheMelody_count
>=
2
&&
Bot
.
GetRemainingCount
(
CardId
.
BlueEyesChaosMaxDragon
,
3
)>
0
)
{
AI
.
SelectCard
(
CardId
.
TheMelodyOfAwakeningDragon
);
AI
.
SelectNextCard
(
new
[]
{
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesAlternativeWhiteDragon
}
);
AI
.
SelectNextCard
(
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesAlternativeWhiteDragon
);
return
true
;
}
if
(
Bot
.
HasInHand
(
CardId
.
BlueEyesWhiteDragon
)
&&
Bot
.
GetRemainingCount
(
CardId
.
BlueEyesChaosMaxDragon
,
3
)
>
0
)
{
AI
.
SelectCard
(
CardId
.
BlueEyesWhiteDragon
);
AI
.
SelectNextCard
(
new
[]
{
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesAlternativeWhiteDragon
}
);
AI
.
SelectNextCard
(
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesAlternativeWhiteDragon
);
return
true
;
}
return
false
;
...
...
@@ -225,7 +225,7 @@ namespace WindBot.Game.AI.Decks
if
(!
m
.
IsCode
(
CardId
.
AdvancedRitualArt
))
AI
.
SelectCard
(
m
);
}
AI
.
SelectNextCard
(
new
[]
{
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesAlternativeWhiteDragon
}
);
AI
.
SelectNextCard
(
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesAlternativeWhiteDragon
);
return
true
;
}
return
false
;
...
...
@@ -445,11 +445,7 @@ namespace WindBot.Game.AI.Decks
private
bool
MissusRadianteff
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
MaxxC
,
CardId
.
MissusRadiant
,
});
AI
.
SelectCard
(
CardId
.
MaxxC
,
CardId
.
MissusRadiant
);
return
true
;
}
...
...
Game/AI/Decks/DarkMagicianExecutor.cs
View file @
494fe10b
...
...
@@ -385,7 +385,7 @@ namespace WindBot.Game.AI.Decks
Bot
.
HasInMonstersZone
(
CardId
.
WindwitchSnowBell
))
{
//AI.SelectPlace(Zones.z5, Zones.ExtraMonsterZones);
AI
.
SelectCard
(
new
[]
{
CardId
.
WindwitchIceBell
,
CardId
.
WindwitchGlassBell
}
);
AI
.
SelectCard
(
CardId
.
WindwitchIceBell
,
CardId
.
WindwitchGlassBell
);
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
return
true
;
}
...
...
@@ -810,15 +810,9 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
CardId
.
DarkMagician
);
ClientCard
check
=
AI
.
Utils
.
GetOneEnemyBetterThanValue
(
2500
,
true
);
if
(
check
!=
null
)
AI
.
SelectNextCard
(
new
[]
{
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
});
AI
.
SelectNextCard
(
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
);
else
AI
.
SelectNextCard
(
new
[]
{
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
});
AI
.
SelectNextCard
(
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
);
magician_sp
=
true
;
return
UniqueFaceupSpell
();
}
...
...
@@ -828,15 +822,9 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
CardId
.
DarkMagician
);
ClientCard
check
=
AI
.
Utils
.
GetOneEnemyBetterThanValue
(
2500
,
true
);
if
(
check
!=
null
)
AI
.
SelectNextCard
(
new
[]
{
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
});
AI
.
SelectNextCard
(
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
);
else
AI
.
SelectNextCard
(
new
[]
{
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
});
AI
.
SelectNextCard
(
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
);
magician_sp
=
true
;
return
true
;
}
...
...
@@ -846,15 +834,9 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
CardId
.
DarkMagician
);
ClientCard
check
=
AI
.
Utils
.
GetOneEnemyBetterThanValue
(
2500
,
true
);
if
(
check
!=
null
)
AI
.
SelectNextCard
(
new
[]
{
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
});
AI
.
SelectNextCard
(
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
);
else
AI
.
SelectNextCard
(
new
[]
{
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
});
AI
.
SelectNextCard
(
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
);
magician_sp
=
true
;
return
UniqueFaceupSpell
();
}
...
...
@@ -866,15 +848,9 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
CardId
.
DarkMagician
);
ClientCard
check
=
AI
.
Utils
.
GetOneEnemyBetterThanValue
(
2500
,
true
);
if
(
check
!=
null
)
AI
.
SelectNextCard
(
new
[]
{
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
});
AI
.
SelectNextCard
(
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
);
else
AI
.
SelectNextCard
(
new
[]
{
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
});
AI
.
SelectNextCard
(
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
);
magician_sp
=
true
;
return
UniqueFaceupSpell
();
}
...
...
@@ -886,15 +862,9 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
CardId
.
DarkMagician
);
ClientCard
check
=
AI
.
Utils
.
GetOneEnemyBetterThanValue
(
2500
,
true
);
if
(
check
!=
null
)
AI
.
SelectNextCard
(
new
[]
{
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
});
AI
.
SelectNextCard
(
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
);
else
AI
.
SelectNextCard
(
new
[]
{
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
});
AI
.
SelectNextCard
(
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
);
magician_sp
=
true
;
return
UniqueFaceupSpell
();
}
...
...
@@ -948,7 +918,7 @@ namespace WindBot.Game.AI.Decks
if
(
Bot
.
HasInMonstersZone
(
CardId
.
MagiciansRod
))
{
AI
.
SelectCard
(
CardId
.
MagiciansRod
);
AI
.
SelectNextCard
(
new
[]
{
CardId
.
DarkMagician
,
CardId
.
DarkMagician
}
);
AI
.
SelectNextCard
(
CardId
.
DarkMagician
,
CardId
.
DarkMagician
);
return
true
;
}
}
...
...
@@ -965,7 +935,7 @@ namespace WindBot.Game.AI.Decks
if
(
Duel
.
CurrentChain
.
Count
>=
2
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
0
))
{
AI
.
SelectCard
(
CardId
.
MagiciansRod
);
AI
.
SelectNextCard
(
new
[]
{
CardId
.
DarkMagician
,
CardId
.
DarkMagician
}
);
AI
.
SelectNextCard
(
CardId
.
DarkMagician
,
CardId
.
DarkMagician
);
return
true
;
}
}
...
...
@@ -986,45 +956,45 @@ namespace WindBot.Game.AI.Decks
Bot
.
HasInMonstersZone
(
CardId
.
WindwitchGlassBell
))
return
false
;
AI
.
SelectCard
(
target
);
AI
.
SelectNextCard
(
new
[]
{
CardId
.
DarkMagician
,
CardId
.
DarkMagician
}
);
AI
.
SelectNextCard
(
CardId
.
DarkMagician
,
CardId
.
DarkMagician
);
return
true
;
}
if
(
Bot
.
HasInMonstersZone
(
CardId
.
MagiciansRod
)
||
Bot
.
HasInMonstersZone
(
CardId
.
SpellbookMagicianOfProphecy
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
MagiciansRod
,
CardId
.
SpellbookMagicianOfProphecy
}
);
AI
.
SelectNextCard
(
new
[]
{
CardId
.
DarkMagician
,
CardId
.
DarkMagician
}
);
AI
.
SelectCard
(
CardId
.
MagiciansRod
,
CardId
.
SpellbookMagicianOfProphecy
);
AI
.
SelectNextCard
(
CardId
.
DarkMagician
,
CardId
.
DarkMagician
);
return
true
;
}
if
(
Duel
.
Player
==
1
&&
Bot
.
HasInMonstersZone
(
CardId
.
WindwitchGlassBell
))
{
AI
.
SelectCard
(
CardId
.
WindwitchGlassBell
);
AI
.
SelectNextCard
(
new
[]
{
CardId
.
DarkMagician
,
CardId
.
DarkMagician
}
);
AI
.
SelectNextCard
(
CardId
.
DarkMagician
,
CardId
.
DarkMagician
);
return
true
;
}
if
(
Duel
.
Player
==
1
&&
Bot
.
HasInMonstersZone
(
CardId
.
WindwitchIceBell
))
{
AI
.
SelectCard
(
CardId
.
WindwitchIceBell
);
AI
.
SelectNextCard
(
new
[]
{
CardId
.
DarkMagician
,
CardId
.
DarkMagician
}
);
AI
.
SelectNextCard
(
CardId
.
DarkMagician
,
CardId
.
DarkMagician
);
return
true
;
}
if
(
Duel
.
Player
==
1
&&
Bot
.
HasInMonstersZone
(
CardId
.
WindwitchSnowBell
))
{
AI
.
SelectCard
(
CardId
.
WindwitchSnowBell
);
AI
.
SelectNextCard
(
new
[]
{
CardId
.
DarkMagician
,
CardId
.
DarkMagician
}
);
AI
.
SelectNextCard
(
CardId
.
DarkMagician
,
CardId
.
DarkMagician
);
return
true
;
}
if
(
Duel
.
Player
==
1
&&
Bot
.
HasInMonstersZone
(
CardId
.
SpellbookMagicianOfProphecy
))
{
AI
.
SelectCard
(
CardId
.
SpellbookMagicianOfProphecy
);
AI
.
SelectNextCard
(
new
[]
{
CardId
.
DarkMagician
,
CardId
.
DarkMagician
}
);
AI
.
SelectNextCard
(
CardId
.
DarkMagician
,
CardId
.
DarkMagician
);
return
true
;
}
if
(
Duel
.
Player
==
1
&&
Bot
.
HasInMonstersZone
(
CardId
.
ApprenticeLllusionMagician
)
&&
(
Bot
.
HasInSpellZone
(
CardId
.
EternalSoul
)
||
Bot
.
HasInSpellZone
(
CardId
.
MagicianNavigation
)))
{
AI
.
SelectCard
(
CardId
.
ApprenticeLllusionMagician
);
AI
.
SelectNextCard
(
new
[]
{
CardId
.
DarkMagician
,
CardId
.
DarkMagician
}
);
AI
.
SelectNextCard
(
CardId
.
DarkMagician
,
CardId
.
DarkMagician
);
return
true
;
}
...
...
@@ -1033,8 +1003,8 @@ namespace WindBot.Game.AI.Decks
(
Bot
.
HasInMonstersZone
(
CardId
.
DarkMagician
)
||
Bot
.
HasInMonstersZone
(
CardId
.
ApprenticeLllusionMagician
))
&&
Duel
.
Player
==
1
&&
!
Bot
.
HasInHand
(
CardId
.
DarkMagician
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
DarkMagician
,
CardId
.
ApprenticeLllusionMagician
}
);
AI
.
SelectNextCard
(
new
[]
{
CardId
.
DarkMagician
,
CardId
.
DarkMagician
}
);
AI
.
SelectCard
(
CardId
.
DarkMagician
,
CardId
.
ApprenticeLllusionMagician
);
AI
.
SelectNextCard
(
CardId
.
DarkMagician
,
CardId
.
DarkMagician
);
return
true
;
}
return
false
;
...
...
@@ -1045,7 +1015,7 @@ namespace WindBot.Game.AI.Decks
if
(
Secret_used
)
AI
.
SelectCard
(
CardId
.
SpellbookOfKnowledge
);
else
AI
.
SelectCard
(
new
[]
{
CardId
.
SpellbookOfSecrets
,
CardId
.
SpellbookOfKnowledge
}
);
AI
.
SelectCard
(
CardId
.
SpellbookOfSecrets
,
CardId
.
SpellbookOfKnowledge
);
return
true
;
}
...
...
@@ -1090,12 +1060,7 @@ namespace WindBot.Game.AI.Decks
Bot
.
HasInMonstersZone
(
CardId
.
WindwitchGlassBell
)
||
Bot
.
HasInMonstersZone
(
CardId
.
WindwitchIceBell
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
SpellbookMagicianOfProphecy
,
CardId
.
MagiciansRod
,
CardId
.
WindwitchGlassBell
,
});
AI
.
SelectCard
(
CardId
.
SpellbookMagicianOfProphecy
,
CardId
.
MagiciansRod
,
CardId
.
WindwitchGlassBell
);
return
true
;
}
if
(
Bot
.
HasInMonstersZone
(
CardId
.
ApprenticeLllusionMagician
)
&&
Bot
.
GetSpellCount
()
<
2
&&
Duel
.
Phase
==
DuelPhase
.
Main2
)
...
...
@@ -1132,13 +1097,12 @@ namespace WindBot.Game.AI.Decks
Bot
.
HasInMonstersZone
(
CardId
.
WindwitchGlassBell
)
||
Bot
.
HasInMonstersZone
(
CardId
.
WindwitchIceBell
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
SpellbookMagicianOfProphecy
,
CardId
.
MagiciansRod
,
CardId
.
WindwitchGlassBell
,
CardId
.
WindwitchIceBell
,
});
AI
.
SelectCard
(
CardId
.
SpellbookMagicianOfProphecy
,
CardId
.
MagiciansRod
,
CardId
.
WindwitchGlassBell
,
CardId
.
WindwitchIceBell
);
return
UniqueFaceupSpell
();
}
...
...
@@ -1196,11 +1160,7 @@ namespace WindBot.Game.AI.Decks
Bot
.
HasInHand
(
CardId
.
DarkMagicAttack
)))
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
AI
.
SelectCard
(
new
[]
{
CardId
.
SpellbookOfSecrets
,
CardId
.
DarkMagicAttack
,
});
AI
.
SelectCard
(
CardId
.
SpellbookOfSecrets
,
CardId
.
DarkMagicAttack
);
return
true
;
}
if
(
Bot
.
HasInMonstersZone
(
CardId
.
ApprenticeLllusionMagician
))
...
...
@@ -1223,14 +1183,7 @@ namespace WindBot.Game.AI.Decks
Bot
.
GetMonsterCount
()==
0
)
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
AI
.
SelectCard
(
new
[]
{
CardId
.
MagicianOfLllusion
,
CardId
.
ApprenticeLllusionMagician
,
CardId
.
TheEyeOfTimaeus
,
CardId
.
DarkMagicInheritance
,
CardId
.
WonderWand
,
});
AI
.
SelectCard
(
CardId
.
MagicianOfLllusion
,
CardId
.
ApprenticeLllusionMagician
,
CardId
.
TheEyeOfTimaeus
,
CardId
.
DarkMagicInheritance
,
CardId
.
WonderWand
);
return
true
;
}
if
(!
Bot
.
HasInHandOrInMonstersZoneOrInGraveyard
(
CardId
.
DarkMagician
))
...
...
@@ -1249,14 +1202,7 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
CardId
.
MagicianNavigation
);
return
true
;
}
AI
.
SelectCard
(
new
[]
{
CardId
.
MagicianOfLllusion
,
CardId
.
ApprenticeLllusionMagician
,
CardId
.
TheEyeOfTimaeus
,
CardId
.
DarkMagicInheritance
,
CardId
.
WonderWand
,
});
AI
.
SelectCard
(
CardId
.
MagicianOfLllusion
,
CardId
.
ApprenticeLllusionMagician
,
CardId
.
TheEyeOfTimaeus
,
CardId
.
DarkMagicInheritance
,
CardId
.
WonderWand
);
return
true
;
}
return
false
;
...
...
@@ -1296,7 +1242,7 @@ namespace WindBot.Game.AI.Decks
if
(
Secret_used
)
AI
.
SelectCard
(
CardId
.
SpellbookOfKnowledge
);
else
AI
.
SelectCard
(
new
[]
{
CardId
.
SpellbookOfSecrets
,
CardId
.
SpellbookOfKnowledge
}
);
AI
.
SelectCard
(
CardId
.
SpellbookOfSecrets
,
CardId
.
SpellbookOfKnowledge
);
return
true
;
}
return
false
;
...
...
@@ -1371,35 +1317,18 @@ namespace WindBot.Game.AI.Decks
{
if
(
Bot
.
HasInGraveyard
(
CardId
.
MagicianNavigation
))
{
AI
.
SelectNextCard
(
new
[]
{
CardId
.
EternalSoul
,
CardId
.
MagicianNavigation
,
CardId
.
DarkMagicalCircle
});
AI
.
SelectNextCard
(
CardId
.
EternalSoul
,
CardId
.
MagicianNavigation
,
CardId
.
DarkMagicalCircle
);
}
else
AI
.
SelectNextCard
(
new
[]
{
CardId
.
EternalSoul
,
CardId
.
MagicianNavigation
,
CardId
.
DarkMagicalCircle
});
AI
.
SelectNextCard
(
CardId
.
EternalSoul
,
CardId
.
MagicianNavigation
,
CardId
.
DarkMagicalCircle
);
return
true
;
}
if
(
Bot
.
HasInGraveyard
(
CardId
.
MagicianNavigation
))
{
AI
.
SelectNextCard
(
new
[]
{
CardId
.
EternalSoul
,
CardId
.
DarkMagicalCircle
,
CardId
.
MagicianNavigation
,
});
AI
.
SelectNextCard
(
CardId
.
EternalSoul
,
CardId
.
DarkMagicalCircle
,
CardId
.
MagicianNavigation
);
}
else
AI
.
SelectNextCard
(
new
[]
{
CardId
.
MagicianNavigation
,
CardId
.
DarkMagicalCircle
,
CardId
.
EternalSoul
,
});
AI
.
SelectNextCard
(
CardId
.
MagicianNavigation
,
CardId
.
DarkMagicalCircle
,
CardId
.
EternalSoul
);
return
true
;
}
return
false
;
...
...
@@ -1483,11 +1412,7 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
CardId
.
EternalSoul
);
return
true
;
}
AI
.
SelectCard
(
new
[]
{
CardId
.
LllusionMagic
,
CardId
.
EternalSoul
,
CardId
.
DarkMagicalCircle
,
CardId
.
MagicianNavigation
});
AI
.
SelectCard
(
CardId
.
LllusionMagic
,
CardId
.
EternalSoul
,
CardId
.
DarkMagicalCircle
,
CardId
.
MagicianNavigation
);
return
true
;
}
else
...
...
@@ -1523,16 +1448,7 @@ namespace WindBot.Game.AI.Decks
Bot
.
GetMonsterCount
()
>
1
)
return
false
;
if
((
Bot
.
LifePoints
-
Enemy_atk
<=
1000
)
&&
Bot
.
GetMonsterCount
()
==
1
)
return
false
;
AI
.
SelectCard
(
new
[]
{
CardId
.
VentriloauistsClaraAndLucika
,
CardId
.
SpellbookMagicianOfProphecy
,
CardId
.
WindwitchGlassBell
,
CardId
.
WindwitchIceBell
,
CardId
.
MagiciansRod
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
});
AI
.
SelectCard
(
CardId
.
VentriloauistsClaraAndLucika
,
CardId
.
SpellbookMagicianOfProphecy
,
CardId
.
WindwitchGlassBell
,
CardId
.
WindwitchIceBell
,
CardId
.
MagiciansRod
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
);
return
true
;
}
}
...
...
@@ -1624,7 +1540,7 @@ namespace WindBot.Game.AI.Decks
}
if
(
rod_count
>=
2
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
MagiciansRod
,
CardId
.
MagiciansRod
}
);
AI
.
SelectCard
(
CardId
.
MagiciansRod
,
CardId
.
MagiciansRod
);
return
true
;
}
if
(
Bot
.
HasInMonstersZone
(
CardId
.
DarkMagician
)
&&
...
...
@@ -1633,9 +1549,9 @@ namespace WindBot.Game.AI.Decks
&&
Duel
.
Phase
==
DuelPhase
.
Main2
)
{
if
(
rod_count
>=
2
)
AI
.
SelectCard
(
new
[]
{
CardId
.
MagiciansRod
,
CardId
.
MagiciansRod
}
);
AI
.
SelectCard
(
CardId
.
MagiciansRod
,
CardId
.
MagiciansRod
);
else
AI
.
SelectCard
(
new
[]
{
CardId
.
MagiciansRod
,
CardId
.
DarkMagician
}
);
AI
.
SelectCard
(
CardId
.
MagiciansRod
,
CardId
.
DarkMagician
);
return
true
;
}
if
(
Bot
.
HasInMonstersZone
(
CardId
.
MagiciansRod
)
&&
...
...
@@ -1644,9 +1560,9 @@ namespace WindBot.Game.AI.Decks
&&
Duel
.
Phase
==
DuelPhase
.
Main2
)
{
if
(
rod_count
>=
2
)
AI
.
SelectCard
(
new
[]
{
CardId
.
MagiciansRod
,
CardId
.
MagiciansRod
}
);
AI
.
SelectCard
(
CardId
.
MagiciansRod
,
CardId
.
MagiciansRod
);
else
AI
.
SelectCard
(
new
[]
{
CardId
.
MagiciansRod
,
CardId
.
DarkMagician
}
);
AI
.
SelectCard
(
CardId
.
MagiciansRod
,
CardId
.
DarkMagician
);
return
true
;
}
return
false
;
...
...
@@ -1654,7 +1570,7 @@ namespace WindBot.Game.AI.Decks
private
bool
ApprenticeWitchlingeff
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
MagiciansRod
,
CardId
.
DarkMagician
,
CardId
.
ApprenticeLllusionMagician
}
);
AI
.
SelectCard
(
CardId
.
MagiciansRod
,
CardId
.
DarkMagician
,
CardId
.
ApprenticeLllusionMagician
);
return
true
;
}
public
override
bool
OnSelectHand
()
...
...
Game/AI/Decks/DragunityExecutor.cs
View file @
494fe10b
...
...
@@ -243,12 +243,11 @@ namespace WindBot.Game.AI.Decks
private
bool
FoolishBurial
()
{
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
CardId
.
DragunityPhalanx
,
CardId
.
AssaultBeast
,
CardId
.
StardustDragonAssaultMode
}
);
);
return
true
;
}
...
...
Game/AI/Decks/GrenMajuThunderBoarderExecutor.cs
View file @
494fe10b
...
...
@@ -308,41 +308,38 @@ namespace WindBot.Game.AI.Decks
count
++;
}
if
(
AI
.
Utils
.
GetBestEnemyMonster
()!=
null
&&
AI
.
Utils
.
GetBestEnemyMonster
().
Attack
>=
1900
)
AI
.
SelectCard
(
new
[]
{
CardId
.
EaterOfMillions
,
AI
.
SelectCard
(
CardId
.
EaterOfMillions
,
CardId
.
PotOfDesires
,
CardId
.
GrenMajuDaEizo
,
CardId
.
InspectBoarder
,
CardId
.
ThunderKingRaiOh
,
CardId
.
ThunderKingRaiOh
,
CardId
.
Scapegoat
,
CardId
.
SolemnJudgment
,
CardId
.
SolemnWarning
,
CardId
.
SolemStrike
,
CardId
.
InfiniteImpermanence
,
}
);
CardId
.
InfiniteImpermanence
);
if
(
count
==
0
)
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
CardId
.
PotOfDesires
,
CardId
.
InspectBoarder
,
CardId
.
ThunderKingRaiOh
,
CardId
.
EaterOfMillions
,
CardId
.
GrenMajuDaEizo
,
CardId
.
Scapegoat
,
}
);
CardId
.
Scapegoat
);
else
{
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
CardId
.
PotOfDesires
,
CardId
.
CardOfDemise
,
CardId
.
SolemnJudgment
,
CardId
.
SolemnWarning
,
CardId
.
SolemStrike
,
CardId
.
InfiniteImpermanence
,
CardId
.
Scapegoat
,
}
);
CardId
.
Scapegoat
);
}
return
true
;
}
...
...
@@ -572,11 +569,7 @@ namespace WindBot.Game.AI.Decks
private
bool
MissusRadianteff
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
MaxxC
,
CardId
.
MissusRadiant
,
});
AI
.
SelectCard
(
CardId
.
MaxxC
,
CardId
.
MissusRadiant
);
return
true
;
}
...
...
Game/AI/Decks/LightswornExecutor.cs
View file @
494fe10b
...
...
@@ -139,26 +139,24 @@ namespace WindBot.Game.AI.Decks
if
(!
Bot
.
HasInHand
(
CardId
.
Lumina
))
AI
.
SelectCard
(
CardId
.
Lumina
);
else
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
CardId
.
Raiden
,
CardId
.
Lumina
,
CardId
.
Minerva
,
CardId
.
Lyla
}
);
);
return
true
;
}
private
bool
SolarRechargeEffect
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Wulf
,
CardId
.
Felis
,
CardId
.
Minerva
,
CardId
.
Lyla
,
CardId
.
Raiden
});
AI
.
SelectCard
(
CardId
.
Wulf
,
CardId
.
Felis
,
CardId
.
Minerva
,
CardId
.
Lyla
,
CardId
.
Raiden
);
return
true
;
}
...
...
@@ -174,14 +172,13 @@ namespace WindBot.Game.AI.Decks
private
bool
GoblindberghEffect
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Felis
,
CardId
.
Wulf
,
CardId
.
Raiden
,
CardId
.
PerformageTrickClown
,
CardId
.
ThousandBlades
});
AI
.
SelectCard
(
CardId
.
Felis
,
CardId
.
Wulf
,
CardId
.
Raiden
,
CardId
.
PerformageTrickClown
,
CardId
.
ThousandBlades
);
return
true
;
}
...
...
@@ -197,17 +194,14 @@ namespace WindBot.Game.AI.Decks
}
else
{
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
CardId
.
Wulf
,
CardId
.
Felis
,
CardId
.
Minerva
,
CardId
.
ThousandBlades
}
);
);
}
AI
.
SelectNextCard
(
new
[]
{
CardId
.
Raiden
,
CardId
.
Felis
});
AI
.
SelectNextCard
(
CardId
.
Raiden
,
CardId
.
Felis
);
return
true
;
}
...
...
Game/AI/Decks/LightswornShaddoldinosourExecutor.cs
View file @
494fe10b
...
...
@@ -446,27 +446,11 @@ namespace WindBot.Game.AI.Decks
};
if
(
Bot
.
HasInGraveyard
(
targets
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
GiantRex
,
CardId
.
DogorantheMadFlameKaiju
,
CardId
.
OvertexCoatls
,
CardId
.
GamecieltheSeaTurtleKaiju
,
CardId
.
RadiantheMultidimensionalKaiju
,
CardId
.
SouleatingOviraptor
,
CardId
.
UltimateConductorTytanno
,
});
AI
.
SelectCard
(
CardId
.
GiantRex
,
CardId
.
DogorantheMadFlameKaiju
,
CardId
.
OvertexCoatls
,
CardId
.
GamecieltheSeaTurtleKaiju
,
CardId
.
RadiantheMultidimensionalKaiju
,
CardId
.
SouleatingOviraptor
,
CardId
.
UltimateConductorTytanno
);
}
else
{
AI
.
SelectCard
(
new
[]
{
CardId
.
GiantRex
,
CardId
.
DogorantheMadFlameKaiju
,
CardId
.
GamecieltheSeaTurtleKaiju
,
CardId
.
RadiantheMultidimensionalKaiju
,
CardId
.
OvertexCoatls
,
CardId
.
SouleatingOviraptor
,
CardId
.
UltimateConductorTytanno
,
});
AI
.
SelectCard
(
CardId
.
GiantRex
,
CardId
.
DogorantheMadFlameKaiju
,
CardId
.
GamecieltheSeaTurtleKaiju
,
CardId
.
RadiantheMultidimensionalKaiju
,
CardId
.
OvertexCoatls
,
CardId
.
SouleatingOviraptor
,
CardId
.
UltimateConductorTytanno
);
}
IList
<
int
>
targets2
=
new
[]
{
CardId
.
GiantRex
,
...
...
@@ -479,42 +463,10 @@ namespace WindBot.Game.AI.Decks
};
if
(
Bot
.
HasInGraveyard
(
targets
))
{
AI
.
SelectNextCard
(
new
[]
{
CardId
.
ShaddollBeast
,
CardId
.
ShaddollDragon
,
CardId
.
KeeperOfDragonicMagic
,
CardId
.
ShaddollSquamata
,
CardId
.
SouleatingOviraptor
,
CardId
.
Raiden
,
CardId
.
Lumina
,
CardId
.
ShaddollHedgehog
,
CardId
.
AshBlossom
,
CardId
.
GhostOgre
,
CardId
.
ShaddollFalco
,
CardId
.
MaxxC
,
CardId
.
PlaguespreaderZombie
,
CardId
.
GlowUpBulb
,
CardId
.
FairyTailSnow
,
});
AI
.
SelectNextCard
(
CardId
.
ShaddollBeast
,
CardId
.
ShaddollDragon
,
CardId
.
KeeperOfDragonicMagic
,
CardId
.
ShaddollSquamata
,
CardId
.
SouleatingOviraptor
,
CardId
.
Raiden
,
CardId
.
Lumina
,
CardId
.
ShaddollHedgehog
,
CardId
.
AshBlossom
,
CardId
.
GhostOgre
,
CardId
.
ShaddollFalco
,
CardId
.
MaxxC
,
CardId
.
PlaguespreaderZombie
,
CardId
.
GlowUpBulb
,
CardId
.
FairyTailSnow
);
}
else
AI
.
SelectNextCard
(
new
[]
{
CardId
.
ShaddollBeast
,
CardId
.
ShaddollDragon
,
CardId
.
KeeperOfDragonicMagic
,
CardId
.
ShaddollSquamata
,
CardId
.
SouleatingOviraptor
,
CardId
.
Raiden
,
CardId
.
Lumina
,
CardId
.
ShaddollHedgehog
,
CardId
.
AshBlossom
,
CardId
.
GhostOgre
,
CardId
.
ShaddollFalco
,
CardId
.
MaxxC
,
CardId
.
PlaguespreaderZombie
,
CardId
.
GlowUpBulb
,
CardId
.
FairyTailSnow
,
});
AI
.
SelectNextCard
(
CardId
.
ShaddollBeast
,
CardId
.
ShaddollDragon
,
CardId
.
KeeperOfDragonicMagic
,
CardId
.
ShaddollSquamata
,
CardId
.
SouleatingOviraptor
,
CardId
.
Raiden
,
CardId
.
Lumina
,
CardId
.
ShaddollHedgehog
,
CardId
.
AshBlossom
,
CardId
.
GhostOgre
,
CardId
.
ShaddollFalco
,
CardId
.
MaxxC
,
CardId
.
PlaguespreaderZombie
,
CardId
.
GlowUpBulb
,
CardId
.
FairyTailSnow
);
AI
.
SelectThirdCard
(
new
[]
{
CardId
.
UltimateConductorTytanno
,
...
...
@@ -745,23 +697,20 @@ namespace WindBot.Game.AI.Decks
if
(
deck_check
)
{
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
CardId
.
ElShaddollConstruct
,
CardId
.
ElShaddollShekhinaga
,
CardId
.
ElShaddollGrysra
,
CardId
.
ElShaddollWinda
});
AI
.
SelectNextCard
(
new
[]
{
);
AI
.
SelectNextCard
(
CardId
.
ShaddollSquamata
,
CardId
.
ShaddollBeast
,
CardId
.
ShaddollHedgehog
,
CardId
.
ShaddollDragon
,
CardId
.
ShaddollFalco
,
CardId
.
FairyTailSnow
,
}
);
CardId
.
FairyTailSnow
);
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
return
true
;
}
...
...
@@ -841,15 +790,13 @@ namespace WindBot.Game.AI.Decks
{
if
(
DefaultBreakthroughSkill
())
{
AI
.
SelectCard
(
new
[]
{
CardId
.
ShaddollBeast
,
CardId
.
ShaddollSquamata
,
CardId
.
ShaddollHedgehog
,
CardId
.
ShaddollDragon
,
CardId
.
ShaddollFalco
,
}
);
AI
.
SelectCard
(
CardId
.
ShaddollBeast
,
CardId
.
ShaddollSquamata
,
CardId
.
ShaddollHedgehog
,
CardId
.
ShaddollDragon
,
CardId
.
ShaddollFalco
);
}
else
return
false
;
...
...
@@ -925,15 +872,13 @@ namespace WindBot.Game.AI.Decks
return
true
;
else
{
AI
.
SelectCard
(
new
[]
{
CardId
.
ElShaddollConstruct
,
CardId
.
ElShaddollShekhinaga
,
CardId
.
ElShaddollGrysra
,
CardId
.
ElShaddollWinda
,
CardId
.
ShaddollSquamata
,
}
);
AI
.
SelectCard
(
CardId
.
ElShaddollConstruct
,
CardId
.
ElShaddollShekhinaga
,
CardId
.
ElShaddollGrysra
,
CardId
.
ElShaddollWinda
,
CardId
.
ShaddollSquamata
);
}
return
true
;
...
...
@@ -947,25 +892,28 @@ namespace WindBot.Game.AI.Decks
{
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
ElShaddollConstruct
))
{
AI
.
SelectNextCard
(
new
[]{
CardId
.
ShaddollFalco
,
CardId
.
ShaddollSquamata
,
CardId
.
ShaddollDragon
,
}
);
AI
.
SelectNextCard
(
CardId
.
ShaddollFalco
,
CardId
.
ShaddollSquamata
,
CardId
.
ShaddollDragon
);
}
else
{
AI
.
SelectCard
(
new
[]{
CardId
.
ShaddollSquamata
,
CardId
.
ShaddollDragon
,
}
);
AI
.
SelectCard
(
CardId
.
ShaddollSquamata
,
CardId
.
ShaddollDragon
);
}
}
else
{
AI
.
SelectCard
(
new
[]
{
CardId
.
ShaddollFusion
,
CardId
.
SinisterShadowGames
});
AI
.
SelectCard
(
CardId
.
ShaddollFusion
,
CardId
.
SinisterShadowGames
);
}
return
true
;
}
...
...
@@ -1018,11 +966,7 @@ namespace WindBot.Game.AI.Decks
}
else
{
AI
.
SelectCard
(
new
[]
{
CardId
.
ShaddollSquamata
,
CardId
.
FairyTailSnow
,
});
AI
.
SelectCard
(
CardId
.
ShaddollSquamata
,
CardId
.
FairyTailSnow
);
}
return
true
;
}
...
...
@@ -1153,7 +1097,12 @@ namespace WindBot.Game.AI.Decks
{
CrystronNeedlefibereff_used
=
true
;
AI
.
SelectCard
(
new
[]
{
CardId
.
GhostOgre
,
CardId
.
GlowUpBulb
,
CardId
.
PlaguespreaderZombie
,
CardId
.
ShaddollFalco
});
AI
.
SelectCard
(
CardId
.
GhostOgre
,
CardId
.
GlowUpBulb
,
CardId
.
PlaguespreaderZombie
,
CardId
.
ShaddollFalco
);
return
true
;
}
...
...
Game/AI/Decks/PhantasmExecutor.cs
View file @
494fe10b
...
...
@@ -61,7 +61,7 @@ namespace WindBot.Game.AI.Decks
:
base
(
ai
,
duel
)
{
//counter
//AddExecutor(ExecutorType.ToBattlePhase, ToBattlePhaseeff
);
AddExecutor
(
ExecutorType
.
GoToBattlePhase
,
GoToBattlePhase
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
StarlightRoad
,
PreventFeatherDustereff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
TheHugeRevolutionIsOver
,
PreventFeatherDustereff
);
AddExecutor
(
ExecutorType
.
Activate
,
_CardId
.
GhostBelle
,
DefaultGhostBelleAndHauntedMansion
);
...
...
@@ -100,7 +100,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
EaterOfMillions
,
EaterOfMillionseff
);
//other
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Scapegoat
,
Scapegoateff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Scapegoat
,
DefaultScapegoat
);
AddExecutor
(
ExecutorType
.
SpellSet
,
CardId
.
SeaStealthAttack
,
NoSetAlreadyDone
);
AddExecutor
(
ExecutorType
.
SpellSet
,
CardId
.
StarlightRoad
,
StarlightRoadset
);
AddExecutor
(
ExecutorType
.
SpellSet
,
CardId
.
TheHugeRevolutionIsOver
,
TheHugeRevolutionIsOverset
);
...
...
@@ -129,18 +129,17 @@ namespace WindBot.Game.AI.Decks
return
Duel
.
LastChainPlayer
==
1
;
}
/* private bool ToBattlePhaseeff
()
private
bool
GoToBattlePhase
()
{
if
(
Enemy
.
GetMonsterCount
()
==
0
)
{
if
(
AI
.
Utils
.
GetTotalAttackingMonsterAttack
(
0
)
>=
Enemy
.
LifePoints
)
{
AI.ManualPhaseChange = true;
{
return
true
;
}
}
return
false
;
}
*/
}
private
bool
PhantasmSprialBattleeff
()
{
...
...
@@ -154,8 +153,13 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
CardId
.
EternalSoul
);
return
UniqueFaceupSpell
();
}
if
(
Bot
.
GetMonsterCount
()>
0
&&
!
Bot
.
HasInSpellZone
(
CardId
.
SeaStealthAttack
)
&&
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
2000
,
true
)
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
)
if
(
Bot
.
UnderAttack
&&
Bot
.
BattlingMonster
!=
null
&&
Bot
.
BattlingMonster
.
IsCode
(
CardId
.
MegalosmasherX
))
{
AI
.
SelectCard
(
Enemy
.
BattlingMonster
);
return
UniqueFaceupSpell
();
}
if
(
Bot
.
GetMonsterCount
()
>
0
&&
!
Bot
.
HasInSpellZone
(
CardId
.
SeaStealthAttack
)
&&
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
2000
,
false
)
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
)
{
AI
.
SelectCard
(
AI
.
Utils
.
GetBestEnemyMonster
(
true
,
true
));
return
UniqueFaceupSpell
();
...
...
@@ -257,7 +261,7 @@ namespace WindBot.Game.AI.Decks
private
bool
CardOfDemiseeff
()
{
//
if (DefaultSpellWillBeNegated()) return false;
if
(
DefaultSpellWillBeNegated
())
return
false
;
AI
.
SelectPlace
(
Zones
.
z2
);
if
(
Card
.
Location
==
CardLocation
.
Hand
)
{
...
...
@@ -280,7 +284,7 @@ namespace WindBot.Game.AI.Decks
private
bool
FossilDigeff
()
{
//
if (DefaultSpellWillBeNegated()) return false;
if
(
DefaultSpellWillBeNegated
())
return
false
;
if
(
CardOfDemiseeff_used
&&
summon_used
)
return
false
;
return
true
;
}
...
...
@@ -292,52 +296,56 @@ namespace WindBot.Game.AI.Decks
{
if
(
Bot
.
HasInGraveyard
(
CardId
.
PacifisThePhantasmCity
)
&&
!
Bot
.
HasInHandOrInSpellZone
(
CardId
.
SeaStealthAttack
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
SeaStealthAttack
,
CardId
.
PacifisThePhantasmCity
,
CardId
.
Terraforming
,
CardId
.
Metaverse
,
CardId
.
CardOfDemise
,
CardId
.
Scapegoat
});
AI
.
SelectCard
(
CardId
.
SeaStealthAttack
,
CardId
.
PacifisThePhantasmCity
,
CardId
.
Terraforming
,
CardId
.
Metaverse
,
CardId
.
CardOfDemise
,
CardId
.
Scapegoat
);
}
else
{
AI
.
SelectCard
(
new
[]
{
CardId
.
PacifisThePhantasmCity
,
CardId
.
Terraforming
,
CardId
.
Metaverse
,
CardId
.
CardOfDemise
,
CardId
.
Scapegoat
});
AI
.
SelectCard
(
CardId
.
PacifisThePhantasmCity
,
CardId
.
Terraforming
,
CardId
.
Metaverse
,
CardId
.
CardOfDemise
,
CardId
.
Scapegoat
);
}
}
else
if
(!
Bot
.
HasInHandOrInSpellZone
(
CardId
.
SeaStealthAttack
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
SeaStealthAttack
,
CardId
.
CardOfDemise
,
CardId
.
PotOfDesires
,
CardId
.
Scapegoat
});
AI
.
SelectCard
(
CardId
.
SeaStealthAttack
,
CardId
.
CardOfDemise
,
CardId
.
PotOfDesires
,
CardId
.
Scapegoat
);
}
else
{
AI
.
SelectCard
(
new
[]
{
CardId
.
CardOfDemise
,
CardId
.
PotOfDesires
,
CardId
.
Scapegoat
});
AI
.
SelectCard
(
CardId
.
CardOfDemise
,
CardId
.
PotOfDesires
,
CardId
.
Scapegoat
);
}
return
true
;
}
private
bool
Terraformingeff
()
{
//
if (DefaultSpellWillBeNegated()) return false;
if
(
DefaultSpellWillBeNegated
())
return
false
;
if
(
CardOfDemiseeff_used
&&
Bot
.
HasInSpellZone
(
CardId
.
PacifisThePhantasmCity
))
return
false
;
return
true
;
}
private
bool
PacifisThePhantasmCityeff
()
{
//
if (DefaultSpellWillBeNegated()) return false;
if
(
DefaultSpellWillBeNegated
())
return
false
;
if
(
Card
.
Location
==
CardLocation
.
Hand
)
{
if
(
Bot
.
HasInSpellZone
(
CardId
.
PacifisThePhantasmCity
))
...
...
@@ -460,12 +468,13 @@ namespace WindBot.Game.AI.Decks
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
if
(
Bot
.
HasInExtra
(
CardId
.
BorreloadDragon
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
TopologicBomberDragon
,
CardId
.
TopologicTrisbaena
,
CardId
.
KnightmareGryphon
,
CardId
.
SummonSorceress
,
CardId
.
BorreloadDragon
});
AI
.
SelectCard
(
CardId
.
TopologicBomberDragon
,
CardId
.
TopologicTrisbaena
,
CardId
.
KnightmareGryphon
,
CardId
.
SummonSorceress
,
CardId
.
BorreloadDragon
);
}
else
{
...
...
@@ -610,26 +619,7 @@ namespace WindBot.Game.AI.Decks
private
bool
PotOfDesireseff
()
{
return
Bot
.
Deck
.
Count
>=
18
;
}
private
bool
Scapegoateff
()
{
// if (DefaultSpellWillBeNegated()) return false;
if
(
Duel
.
Player
==
0
)
return
false
;
if
(
Duel
.
Phase
==
DuelPhase
.
End
)
return
true
;
if
(
DefaultOnBecomeTarget
())
return
true
;
if
(
Duel
.
Phase
>
DuelPhase
.
Main1
&&
Duel
.
Phase
<
DuelPhase
.
Main2
)
{
int
total_atk
=
0
;
List
<
ClientCard
>
enemy_monster
=
Enemy
.
GetMonsters
();
foreach
(
ClientCard
m
in
enemy_monster
)
{
if
(
m
.
IsAttack
())
total_atk
+=
m
.
Attack
;
}
if
(
total_atk
>=
Bot
.
LifePoints
)
return
true
;
}
return
false
;
}
}
private
bool
StarlightRoadset
()
{
...
...
@@ -740,4 +730,4 @@ namespace WindBot.Game.AI.Decks
}
}
\ No newline at end of file
}
Game/AI/Decks/QliphortExecutor.cs
View file @
494fe10b
...
...
@@ -166,19 +166,18 @@ namespace WindBot.Game.AI.Decks
private
bool
PotOfDualityEffect
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Scout
,
CardId
.
SkillDrain
,
CardId
.
VanitysEmptiness
,
CardId
.
DimensionalBarrier
,
CardId
.
Stealth
,
CardId
.
Shell
,
CardId
.
Helix
,
CardId
.
Carrier
,
CardId
.
SolemnStrike
,
CardId
.
CardOfDemise
});
AI
.
SelectCard
(
CardId
.
Scout
,
CardId
.
SkillDrain
,
CardId
.
VanitysEmptiness
,
CardId
.
DimensionalBarrier
,
CardId
.
Stealth
,
CardId
.
Shell
,
CardId
.
Helix
,
CardId
.
Carrier
,
CardId
.
SolemnStrike
,
CardId
.
CardOfDemise
);
return
!
ShouldPendulum
();
}
...
...
@@ -304,12 +303,7 @@ namespace WindBot.Game.AI.Decks
}
else
if
(
handcount
>
0
||
fieldcount
>
0
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Saqlifice
,
CardId
.
Shell
,
CardId
.
Helix
});
AI
.
SelectCard
(
CardId
.
Saqlifice
,
CardId
.
Shell
,
CardId
.
Helix
);
}
else
{
...
...
Game/AI/Decks/RainbowExecutor.cs
View file @
494fe10b
...
...
@@ -179,12 +179,11 @@ namespace WindBot.Game.AI.Decks
private
bool
UnexpectedDaiEffect
()
{
if
(
Bot
.
HasInHand
(
CardId
.
RescueRabbit
)
||
NormalSummoned
)
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
CardId
.
MysteryShellDragon
,
CardId
.
PhantomGryphon
,
CardId
.
MegalosmasherX
}
);
);
else
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
{
if
(
Bot
.
HasInHand
(
CardId
.
MysteryShellDragon
))
...
...
@@ -203,11 +202,7 @@ namespace WindBot.Game.AI.Decks
else
if
(
Bot
.
HasInHand
(
CardId
.
PhantomGryphon
))
AI
.
SelectCard
(
CardId
.
PhantomGryphon
);
else
if
(
Bot
.
HasInHand
(
CardId
.
AngelTrumpeter
))
AI
.
SelectCard
(
new
[]
{
CardId
.
MetalfoesGoldriver
,
CardId
.
MasterPendulumTheDracoslayer
});
AI
.
SelectCard
(
CardId
.
MetalfoesGoldriver
,
CardId
.
MasterPendulumTheDracoslayer
);
}
return
true
;
}
...
...
@@ -216,22 +211,20 @@ namespace WindBot.Game.AI.Decks
{
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
{
AI
.
SelectCard
(
new
[]
{
CardId
.
MegalosmasherX
,
CardId
.
MysteryShellDragon
});
AI
.
SelectCard
(
CardId
.
MegalosmasherX
,
CardId
.
MysteryShellDragon
);
}
else
{
AI
.
SelectCard
(
new
[]
{
CardId
.
MasterPendulumTheDracoslayer
,
CardId
.
PhantomGryphon
,
CardId
.
MegalosmasherX
,
CardId
.
MetalfoesGoldriver
,
CardId
.
AngelTrumpeter
});
AI
.
SelectCard
(
CardId
.
MasterPendulumTheDracoslayer
,
CardId
.
PhantomGryphon
,
CardId
.
MegalosmasherX
,
CardId
.
MetalfoesGoldriver
,
CardId
.
AngelTrumpeter
);
}
return
true
;
}
...
...
Game/AI/Decks/Rank5Executor.cs
View file @
494fe10b
...
...
@@ -147,17 +147,16 @@ namespace WindBot.Game.AI.Decks
{
if
(!
NeedLV5
())
return
false
;
AI
.
SelectCard
(
new
[]
{
CardId
.
QuickdrawSynchron
,
CardId
.
ZWEagleClaw
,
CardId
.
SolarWindJammer
,
CardId
.
CyberDragon
,
CardId
.
MistArchfiend
,
CardId
.
WindUpSoldier
,
CardId
.
StarDrawing
,
CardId
.
ChronomalyGoldenJet
});
AI
.
SelectCard
(
CardId
.
QuickdrawSynchron
,
CardId
.
ZWEagleClaw
,
CardId
.
SolarWindJammer
,
CardId
.
CyberDragon
,
CardId
.
MistArchfiend
,
CardId
.
WindUpSoldier
,
CardId
.
StarDrawing
,
CardId
.
ChronomalyGoldenJet
);
return
true
;
}
...
...
@@ -333,14 +332,13 @@ namespace WindBot.Game.AI.Decks
{
if
(!
UniqueFaceupSpell
())
return
false
;
AI
.
SelectCard
(
new
[]
{
CardId
.
CyberDragonInfinity
,
CardId
.
CyberDragonNova
,
CardId
.
TirasKeeperOfGenesis
,
CardId
.
SharkFortress
,
CardId
.
Number61Volcasaurus
});
AI
.
SelectCard
(
CardId
.
CyberDragonInfinity
,
CardId
.
CyberDragonNova
,
CardId
.
TirasKeeperOfGenesis
,
CardId
.
SharkFortress
,
CardId
.
Number61Volcasaurus
);
return
true
;
}
...
...
Game/AI/Decks/ST1732Executor.cs
View file @
494fe10b
...
...
@@ -175,12 +175,12 @@ namespace WindBot.Game.AI.Decks
IList
<
ClientCard
>
targets
=
Enemy
.
GetSpells
();
if
(
targets
.
Count
>
0
)
{
AI
.
SelectCard
(
new
[]{
AI
.
SelectCard
(
CardId
.
DualAssembloom
,
CardId
.
Bitron
,
CardId
.
Digitron
,
CardId
.
RecodedAlive
}
);
);
AI
.
SelectNextCard
(
targets
);
return
true
;
}
...
...
@@ -306,14 +306,13 @@ namespace WindBot.Game.AI.Decks
}
if
(
selected
)
{
AI
.
SelectNextCard
(
new
[]
{
AI
.
SelectNextCard
(
CardId
.
ROMCloudia
,
CardId
.
BalancerLord
,
CardId
.
Kleinant
,
CardId
.
Draconnet
,
CardId
.
Backlinker
}
);
);
return
true
;
}
return
false
;
...
...
@@ -360,24 +359,24 @@ namespace WindBot.Game.AI.Decks
{
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
AI
.
SelectCard
(
new
[]{
AI
.
SelectCard
(
CardId
.
BootStagguard
,
CardId
.
BalancerLord
,
CardId
.
Kleinant
,
CardId
.
Linkslayer
,
CardId
.
Draconnet
,
CardId
.
RAMClouder
}
);
);
return
true
;
}
else
{
AI
.
SelectCard
(
new
[]{
AI
.
SelectCard
(
CardId
.
BalancerLord
,
CardId
.
Kleinant
,
CardId
.
RAMClouder
,
CardId
.
DotScaper
}
);
);
return
true
;
}
}
...
...
@@ -429,28 +428,28 @@ namespace WindBot.Game.AI.Decks
private
bool
RAMClouderEffect
()
{
AI
.
SelectCard
(
new
[]{
CardId
.
StagToken
,
CardId
.
Bitron
,
CardId
.
Digitron
,
CardId
.
DotScaper
,
CardId
.
Draconnet
,
CardId
.
Backlinker
,
CardId
.
RAMClouder
}
);
AI
.
SelectNextCard
(
new
[]{
CardId
.
DecodeTalker
,
CardId
.
EncodeTalker
,
CardId
.
TriGateWizard
,
CardId
.
BinarySorceress
,
CardId
.
Honeybot
,
CardId
.
DualAssembloom
,
CardId
.
BootStagguard
,
CardId
.
BalancerLord
,
CardId
.
ROMCloudia
,
CardId
.
Linkslayer
,
CardId
.
RAMClouder
}
);
AI
.
SelectCard
(
CardId
.
StagToken
,
CardId
.
Bitron
,
CardId
.
Digitron
,
CardId
.
DotScaper
,
CardId
.
Draconnet
,
CardId
.
Backlinker
,
CardId
.
RAMClouder
);
AI
.
SelectNextCard
(
CardId
.
DecodeTalker
,
CardId
.
EncodeTalker
,
CardId
.
TriGateWizard
,
CardId
.
BinarySorceress
,
CardId
.
Honeybot
,
CardId
.
DualAssembloom
,
CardId
.
BootStagguard
,
CardId
.
BalancerLord
,
CardId
.
ROMCloudia
,
CardId
.
Linkslayer
,
CardId
.
RAMClouder
);
return
true
;
}
...
...
Game/AI/Decks/SkyStrikerExecutor.cs
View file @
494fe10b
...
...
@@ -229,12 +229,12 @@ namespace WindBot.Game.AI.Decks
private
bool
FoolishBurialGoodsEffect
()
{
AI
.
SelectCard
(
new
[]{
AI
.
SelectCard
(
CardId
.
MetalfoesFusion
,
CardId
.
WidowAnchor
,
CardId
.
Engage
,
CardId
.
HornetDrones
}
);
);
return
true
;
}
...
...
@@ -312,13 +312,13 @@ namespace WindBot.Game.AI.Decks
if
(
target
>
0
)
AI
.
SelectCard
(
target
);
else
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
CardId
.
Multirole
,
CardId
.
AreaZero
,
CardId
.
Afterburners
,
CardId
.
JammingWave
,
CardId
.
Raye
}
);
);
return
true
;
}
...
...
@@ -330,13 +330,13 @@ namespace WindBot.Game.AI.Decks
if
(
target
>
0
)
AI
.
SelectCard
(
target
);
else
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
CardId
.
Multirole
,
CardId
.
AreaZero
,
CardId
.
Afterburners
,
CardId
.
JammingWave
,
CardId
.
Raye
}
);
);
return
true
;
}
...
...
@@ -562,11 +562,7 @@ namespace WindBot.Game.AI.Decks
}
else
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Shizuku
,
CardId
.
Kagari
,
CardId
.
Hayate
});
AI
.
SelectCard
(
CardId
.
Shizuku
,
CardId
.
Kagari
,
CardId
.
Hayate
);
}
}
...
...
@@ -595,11 +591,7 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
CardId
.
JammingWave
);
}
else
AI
.
SelectCard
(
new
[]
{
CardId
.
Engage
,
CardId
.
HornetDrones
,
CardId
.
WidowAnchor
});
AI
.
SelectCard
(
CardId
.
Engage
,
CardId
.
HornetDrones
,
CardId
.
WidowAnchor
);
return
true
;
}
...
...
@@ -619,11 +611,7 @@ namespace WindBot.Game.AI.Decks
if
(
target
!=
0
)
AI
.
SelectCard
(
target
);
else
AI
.
SelectCard
(
new
[]
{
CardId
.
Engage
,
CardId
.
HornetDrones
,
CardId
.
WidowAnchor
});
AI
.
SelectCard
(
CardId
.
Engage
,
CardId
.
HornetDrones
,
CardId
.
WidowAnchor
);
return
true
;
}
...
...
Game/AI/Decks/ToadallyAwesomeExecutor.cs
View file @
494fe10b
...
...
@@ -138,28 +138,26 @@ namespace WindBot.Game.AI.Decks
}
else
{
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
CardId
.
CryomancerOfTheIceBarrier
,
CardId
.
DewdarkOfTheIceBarrier
}
);
);
}
return
true
;
}
private
bool
SurfaceEffect
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
ToadallyAwesome
,
CardId
.
HeraldOfTheArcLight
,
CardId
.
SwapFrog
,
CardId
.
DewdarkOfTheIceBarrier
,
CardId
.
CryomancerOfTheIceBarrier
,
CardId
.
DupeFrog
,
CardId
.
Ronintoadin
,
CardId
.
GraydleSlimeJr
});
AI
.
SelectCard
(
CardId
.
ToadallyAwesome
,
CardId
.
HeraldOfTheArcLight
,
CardId
.
SwapFrog
,
CardId
.
DewdarkOfTheIceBarrier
,
CardId
.
CryomancerOfTheIceBarrier
,
CardId
.
DupeFrog
,
CardId
.
Ronintoadin
,
CardId
.
GraydleSlimeJr
);
return
true
;
}
...
...
@@ -182,27 +180,25 @@ namespace WindBot.Game.AI.Decks
else
if
(
Bot
.
HasInGraveyard
(
CardId
.
DupeFrog
)
&&
!
Bot
.
HasInGraveyard
(
CardId
.
Ronintoadin
))
AI
.
SelectCard
(
CardId
.
Ronintoadin
);
else
AI
.
SelectCard
(
new
[]
{
CardId
.
GraydleSlimeJr
,
CardId
.
Ronintoadin
,
CardId
.
DupeFrog
,
CardId
.
CryomancerOfTheIceBarrier
,
CardId
.
DewdarkOfTheIceBarrier
,
CardId
.
PriorOfTheIceBarrier
,
CardId
.
SwapFrog
});
AI
.
SelectCard
(
CardId
.
GraydleSlimeJr
,
CardId
.
Ronintoadin
,
CardId
.
DupeFrog
,
CardId
.
CryomancerOfTheIceBarrier
,
CardId
.
DewdarkOfTheIceBarrier
,
CardId
.
PriorOfTheIceBarrier
,
CardId
.
SwapFrog
);
return
true
;
}
private
bool
SalvageEffect
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
SwapFrog
,
CardId
.
PriorOfTheIceBarrier
,
CardId
.
GraydleSlimeJr
});
AI
.
SelectCard
(
CardId
.
SwapFrog
,
CardId
.
PriorOfTheIceBarrier
,
CardId
.
GraydleSlimeJr
);
return
true
;
}
...
...
@@ -215,16 +211,15 @@ namespace WindBot.Game.AI.Decks
else
if
(
Bot
.
HasInGraveyard
(
CardId
.
DupeFrog
)
&&
!
Bot
.
HasInGraveyard
(
CardId
.
Ronintoadin
))
AI
.
SelectCard
(
CardId
.
Ronintoadin
);
else
AI
.
SelectCard
(
new
[]
{
CardId
.
Ronintoadin
,
CardId
.
DupeFrog
,
CardId
.
CryomancerOfTheIceBarrier
,
CardId
.
DewdarkOfTheIceBarrier
,
CardId
.
PriorOfTheIceBarrier
,
CardId
.
GraydleSlimeJr
,
CardId
.
SwapFrog
});
AI
.
SelectCard
(
CardId
.
Ronintoadin
,
CardId
.
DupeFrog
,
CardId
.
CryomancerOfTheIceBarrier
,
CardId
.
DewdarkOfTheIceBarrier
,
CardId
.
PriorOfTheIceBarrier
,
CardId
.
GraydleSlimeJr
,
CardId
.
SwapFrog
);
return
true
;
}
...
...
@@ -238,12 +233,11 @@ namespace WindBot.Game.AI.Decks
{
if
(
Bot
.
HasInHand
(
CardId
.
DupeFrog
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
PriorOfTheIceBarrier
,
CardId
.
GraydleSlimeJr
,
CardId
.
SwapFrog
});
AI
.
SelectCard
(
CardId
.
PriorOfTheIceBarrier
,
CardId
.
GraydleSlimeJr
,
CardId
.
SwapFrog
);
return
true
;
}
}
...
...
@@ -259,16 +253,15 @@ namespace WindBot.Game.AI.Decks
{
AI
.
SelectCard
(
CardId
.
GraydleSlimeJr
);
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
AI
.
SelectNextCard
(
new
[]
{
CardId
.
SwapFrog
,
CardId
.
CryomancerOfTheIceBarrier
,
CardId
.
DewdarkOfTheIceBarrier
,
CardId
.
Ronintoadin
,
CardId
.
DupeFrog
,
CardId
.
PriorOfTheIceBarrier
,
CardId
.
GraydleSlimeJr
});
AI
.
SelectNextCard
(
CardId
.
SwapFrog
,
CardId
.
CryomancerOfTheIceBarrier
,
CardId
.
DewdarkOfTheIceBarrier
,
CardId
.
Ronintoadin
,
CardId
.
DupeFrog
,
CardId
.
PriorOfTheIceBarrier
,
CardId
.
GraydleSlimeJr
);
return
true
;
}
...
...
@@ -378,12 +371,11 @@ namespace WindBot.Game.AI.Decks
}
else
{
AI
.
SelectCard
(
new
[]
{
CardId
.
SwapFrog
,
CardId
.
PriorOfTheIceBarrier
,
CardId
.
GraydleSlimeJr
});
AI
.
SelectCard
(
CardId
.
SwapFrog
,
CardId
.
PriorOfTheIceBarrier
,
CardId
.
GraydleSlimeJr
);
}
return
true
;
}
...
...
@@ -392,27 +384,25 @@ namespace WindBot.Game.AI.Decks
SelectXYZDetach
(
Card
.
Overlays
);
if
(
Duel
.
Player
==
0
)
{
AI
.
SelectNextCard
(
new
[]
{
CardId
.
SwapFrog
,
CardId
.
CryomancerOfTheIceBarrier
,
CardId
.
DewdarkOfTheIceBarrier
,
CardId
.
Ronintoadin
,
CardId
.
DupeFrog
,
CardId
.
GraydleSlimeJr
});
AI
.
SelectNextCard
(
CardId
.
SwapFrog
,
CardId
.
CryomancerOfTheIceBarrier
,
CardId
.
DewdarkOfTheIceBarrier
,
CardId
.
Ronintoadin
,
CardId
.
DupeFrog
,
CardId
.
GraydleSlimeJr
);
}
else
{
AI
.
SelectNextCard
(
new
[]
{
CardId
.
DupeFrog
,
CardId
.
SwapFrog
,
CardId
.
Ronintoadin
,
CardId
.
GraydleSlimeJr
,
CardId
.
CryomancerOfTheIceBarrier
,
CardId
.
DewdarkOfTheIceBarrier
});
AI
.
SelectNextCard
(
CardId
.
DupeFrog
,
CardId
.
SwapFrog
,
CardId
.
Ronintoadin
,
CardId
.
GraydleSlimeJr
,
CardId
.
CryomancerOfTheIceBarrier
,
CardId
.
DewdarkOfTheIceBarrier
);
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
}
return
true
;
...
...
@@ -566,16 +556,15 @@ namespace WindBot.Game.AI.Decks
else
if
(
Overlays
.
Contains
(
CardId
.
Ronintoadin
)
&&
Bot
.
HasInGraveyard
(
CardId
.
DupeFrog
)
&&
!
Bot
.
HasInGraveyard
(
CardId
.
Ronintoadin
))
AI
.
SelectCard
(
CardId
.
Ronintoadin
);
else
AI
.
SelectCard
(
new
[]
{
CardId
.
GraydleSlimeJr
,
CardId
.
Ronintoadin
,
CardId
.
DupeFrog
,
CardId
.
CryomancerOfTheIceBarrier
,
CardId
.
DewdarkOfTheIceBarrier
,
CardId
.
PriorOfTheIceBarrier
,
CardId
.
SwapFrog
});
AI
.
SelectCard
(
CardId
.
GraydleSlimeJr
,
CardId
.
Ronintoadin
,
CardId
.
DupeFrog
,
CardId
.
CryomancerOfTheIceBarrier
,
CardId
.
DewdarkOfTheIceBarrier
,
CardId
.
PriorOfTheIceBarrier
,
CardId
.
SwapFrog
);
}
}
}
Game/AI/Decks/TrickstarExecutor.cs
View file @
494fe10b
...
...
@@ -431,14 +431,7 @@ namespace WindBot.Game.AI.Decks
// tuner ss
if
(
ActivateDescription
==
-
1
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Ghost
,
CardId
.
TG
,
CardId
.
Tuner
,
CardId
.
Urara
,
CardId
.
BF
});
AI
.
SelectCard
(
CardId
.
Ghost
,
CardId
.
TG
,
CardId
.
Tuner
,
CardId
.
Urara
,
CardId
.
BF
);
return
true
;
};
// counter
...
...
@@ -576,62 +569,31 @@ namespace WindBot.Game.AI.Decks
{
if
(!
Bot
.
HasInHand
(
CardId
.
Yellow
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Yellow
,
CardId
.
Pink
,
CardId
.
Red
,
CardId
.
White
});
AI
.
SelectCard
(
CardId
.
Yellow
,
CardId
.
Pink
,
CardId
.
Red
,
CardId
.
White
);
stage_locked
=
null
;
return
true
;
}
else
if
(
Enemy
.
LifePoints
<=
1000
&&
Bot
.
GetRemainingCount
(
CardId
.
Pink
,
1
)
>
0
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Pink
,
CardId
.
Yellow
,
CardId
.
Red
,
CardId
.
White
});
AI
.
SelectCard
(
CardId
.
Pink
,
CardId
.
Yellow
,
CardId
.
Red
,
CardId
.
White
);
stage_locked
=
null
;
return
true
;
}
else
if
(
Bot
.
HasInHand
(
CardId
.
Yellow
)
&&
!
Bot
.
HasInHand
(
CardId
.
Red
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Yellow
,
CardId
.
White
});
AI
.
SelectCard
(
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Yellow
,
CardId
.
White
);
stage_locked
=
null
;
return
true
;
}
else
if
(
Enemy
.
GetMonsterCount
()
>
0
&&
AI
.
Utils
.
GetBestEnemyMonster
().
Attack
>=
AI
.
Utils
.
GetBestAttack
(
Bot
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
White
,
CardId
.
Yellow
,
CardId
.
Pink
,
CardId
.
Red
});
AI
.
SelectCard
(
CardId
.
White
,
CardId
.
Yellow
,
CardId
.
Pink
,
CardId
.
Red
);
stage_locked
=
null
;
return
true
;
}
else
if
(!
Bot
.
HasInSpellZone
(
CardId
.
Stage
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Yellow
,
CardId
.
Pink
,
CardId
.
Red
,
CardId
.
White
});
AI
.
SelectCard
(
CardId
.
Yellow
,
CardId
.
Pink
,
CardId
.
Red
,
CardId
.
White
);
stage_locked
=
null
;
return
true
;
}
...
...
@@ -642,47 +604,23 @@ namespace WindBot.Game.AI.Decks
{
if
(
Enemy
.
LifePoints
<=
1000
&&
!
pink_ss
&&
Bot
.
GetRemainingCount
(
CardId
.
Pink
,
1
)
>
0
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Pink
,
CardId
.
Yellow
,
CardId
.
Red
,
CardId
.
White
});
AI
.
SelectCard
(
CardId
.
Pink
,
CardId
.
Yellow
,
CardId
.
Red
,
CardId
.
White
);
stage_locked
=
null
;
return
true
;
}
if
(
Enemy
.
GetMonsterCount
()
>
0
&&
AI
.
Utils
.
GetBestEnemyMonster
().
Attack
>=
AI
.
Utils
.
GetBestAttack
(
Bot
)
&&
!
Bot
.
HasInHand
(
CardId
.
White
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
White
,
CardId
.
Yellow
,
CardId
.
Pink
,
CardId
.
Red
});
AI
.
SelectCard
(
CardId
.
White
,
CardId
.
Yellow
,
CardId
.
Pink
,
CardId
.
Red
);
stage_locked
=
null
;
return
true
;
}
if
(
Bot
.
HasInMonstersZone
(
CardId
.
Yellow
)
&&
!
Bot
.
HasInHand
(
CardId
.
Red
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Yellow
,
CardId
.
White
});
AI
.
SelectCard
(
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Yellow
,
CardId
.
White
);
stage_locked
=
null
;
return
true
;
}
AI
.
SelectCard
(
new
[]
{
CardId
.
Yellow
,
CardId
.
Pink
,
CardId
.
Red
,
CardId
.
White
});
AI
.
SelectCard
(
CardId
.
Yellow
,
CardId
.
Pink
,
CardId
.
Red
,
CardId
.
White
);
stage_locked
=
null
;
return
true
;
}
...
...
@@ -744,21 +682,11 @@ namespace WindBot.Game.AI.Decks
{
if
(!
NormalSummoned
&&
Bot
.
HasInGraveyard
(
CardId
.
Yellow
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Yellow
,
CardId
.
Red
,
CardId
.
White
});
AI
.
SelectCard
(
CardId
.
Yellow
,
CardId
.
Red
,
CardId
.
White
);
return
true
;
}
else
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Red
,
CardId
.
Yellow
,
CardId
.
White
});
AI
.
SelectCard
(
CardId
.
Red
,
CardId
.
Yellow
,
CardId
.
White
);
return
true
;
}
}
...
...
@@ -934,46 +862,19 @@ namespace WindBot.Game.AI.Decks
{
if
(!
Bot
.
HasInHand
(
CardId
.
Stage
)
&&
!
Bot
.
HasInSpellZone
(
CardId
.
Stage
)
&&
Bot
.
GetRemainingCount
(
CardId
.
Stage
,
3
)
>
0
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Stage
,
CardId
.
Red
,
CardId
.
White
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Crown
,
CardId
.
Yellow
});
AI
.
SelectCard
(
CardId
.
Stage
,
CardId
.
Red
,
CardId
.
White
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Crown
,
CardId
.
Yellow
);
return
true
;
}
if
(
Enemy
.
LifePoints
<=
1000
)
{
if
(
Bot
.
GetRemainingCount
(
CardId
.
Pink
,
1
)
>
0
&&
!
pink_ss
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Pink
,
CardId
.
Stage
,
CardId
.
Red
,
CardId
.
White
,
CardId
.
Re
,
CardId
.
Crown
,
CardId
.
Yellow
});
AI
.
SelectCard
(
CardId
.
Pink
,
CardId
.
Stage
,
CardId
.
Red
,
CardId
.
White
,
CardId
.
Re
,
CardId
.
Crown
,
CardId
.
Yellow
);
return
true
;
}
else
if
(
Bot
.
HasInGraveyard
(
CardId
.
Pink
)
&&
Bot
.
GetRemainingCount
(
CardId
.
Crown
,
1
)
>
0
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Crown
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Stage
,
CardId
.
Red
,
CardId
.
White
,
CardId
.
Yellow
});
AI
.
SelectCard
(
CardId
.
Crown
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Stage
,
CardId
.
Red
,
CardId
.
White
,
CardId
.
Yellow
);
return
true
;
}
}
...
...
@@ -981,68 +882,23 @@ namespace WindBot.Game.AI.Decks
{
if
(
Bot
.
HasInGraveyard
(
CardId
.
Red
)
&&
Bot
.
GetRemainingCount
(
CardId
.
Pink
,
1
)
>
0
&&
!
pink_ss
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Pink
,
CardId
.
Red
,
CardId
.
White
,
CardId
.
Re
,
CardId
.
Stage
,
CardId
.
Crown
,
CardId
.
Yellow
});
AI
.
SelectCard
(
CardId
.
Pink
,
CardId
.
Red
,
CardId
.
White
,
CardId
.
Re
,
CardId
.
Stage
,
CardId
.
Crown
,
CardId
.
Yellow
);
}
else
if
(
Bot
.
HasInGraveyard
(
CardId
.
Pink
)
&&
Bot
.
HasInGraveyard
(
CardId
.
Red
)
&&
Bot
.
GetRemainingCount
(
CardId
.
Ring
,
1
)
>
0
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Crown
,
CardId
.
Red
,
CardId
.
White
,
CardId
.
Re
,
CardId
.
Stage
,
CardId
.
Pink
,
CardId
.
Yellow
});
AI
.
SelectCard
(
CardId
.
Crown
,
CardId
.
Red
,
CardId
.
White
,
CardId
.
Re
,
CardId
.
Stage
,
CardId
.
Pink
,
CardId
.
Yellow
);
}
else
if
(
Bot
.
GetRemainingCount
(
CardId
.
White
,
2
)
>
0
&&
Enemy
.
LifePoints
<=
4000
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
White
,
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Stage
,
CardId
.
Crown
,
CardId
.
Yellow
});
AI
.
SelectCard
(
CardId
.
White
,
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Stage
,
CardId
.
Crown
,
CardId
.
Yellow
);
}
else
if
(
Bot
.
HasInGraveyard
(
CardId
.
White
)
&&
Bot
.
GetRemainingCount
(
CardId
.
Crown
,
1
)
>
0
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Crown
,
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Stage
,
CardId
.
White
,
CardId
.
Yellow
});
AI
.
SelectCard
(
CardId
.
Crown
,
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Stage
,
CardId
.
White
,
CardId
.
Yellow
);
}
else
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Crown
,
CardId
.
Stage
,
CardId
.
White
,
CardId
.
Yellow
});
AI
.
SelectCard
(
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Crown
,
CardId
.
Stage
,
CardId
.
White
,
CardId
.
Yellow
);
}
return
true
;
}
...
...
@@ -1051,55 +907,19 @@ namespace WindBot.Game.AI.Decks
int
power
=
AI
.
Utils
.
GetProblematicEnemyMonster
().
GetDefensePower
();
if
(
power
>=
1800
&&
power
<=
3600
&&
Bot
.
GetRemainingCount
(
CardId
.
White
,
2
)
>
0
&&
!
Bot
.
HasInHand
(
CardId
.
White
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
White
,
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Stage
,
CardId
.
Crown
,
CardId
.
Yellow
});
AI
.
SelectCard
(
CardId
.
White
,
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Stage
,
CardId
.
Crown
,
CardId
.
Yellow
);
}
else
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Crown
,
CardId
.
Stage
,
CardId
.
White
,
CardId
.
Yellow
});
AI
.
SelectCard
(
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Crown
,
CardId
.
Stage
,
CardId
.
White
,
CardId
.
Yellow
);
}
return
true
;
}
if
((
Bot
.
HasInHand
(
CardId
.
Red
)
||
Bot
.
HasInHand
(
CardId
.
Stage
)
||
Bot
.
HasInHand
(
CardId
.
Yellow
))
&&
Bot
.
GetRemainingCount
(
CardId
.
Re
,
1
)
>
0
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Re
,
CardId
.
Red
,
CardId
.
White
,
CardId
.
Crown
,
CardId
.
Pink
,
CardId
.
Stage
,
CardId
.
Yellow
});
AI
.
SelectCard
(
CardId
.
Re
,
CardId
.
Red
,
CardId
.
White
,
CardId
.
Crown
,
CardId
.
Pink
,
CardId
.
Stage
,
CardId
.
Yellow
);
return
true
;
}
AI
.
SelectCard
(
new
[]
{
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Crown
,
CardId
.
Stage
,
CardId
.
White
,
CardId
.
Yellow
});
AI
.
SelectCard
(
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Crown
,
CardId
.
Stage
,
CardId
.
White
,
CardId
.
Yellow
);
return
true
;
}
...
...
@@ -1239,26 +1059,14 @@ namespace WindBot.Game.AI.Decks
}
else
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Red
,
CardId
.
White
,
CardId
.
Yellow
,
CardId
.
Pink
});
AI
.
SelectCard
(
CardId
.
Red
,
CardId
.
White
,
CardId
.
Yellow
,
CardId
.
Pink
);
return
true
;
}
}
else
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Red
,
CardId
.
White
,
CardId
.
Yellow
,
CardId
.
Pink
});
AI
.
SelectCard
(
CardId
.
Red
,
CardId
.
White
,
CardId
.
Yellow
,
CardId
.
Pink
);
return
true
;
}
}
...
...
@@ -1364,7 +1172,7 @@ namespace WindBot.Game.AI.Decks
public
bool
Linkuri_eff
()
{
if
(
Duel
.
LastChainPlayer
==
0
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
CardId
.
Linkuri
))
return
false
;
AI
.
SelectCard
(
new
[]
{
CardId
.
Tuner
,
CardId
.
BF
+
1
}
);
AI
.
SelectCard
(
CardId
.
Tuner
,
CardId
.
BF
+
1
);
return
true
;
}
...
...
@@ -1373,10 +1181,7 @@ namespace WindBot.Game.AI.Decks
if
(
crystal_eff_used
)
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
BF
)
&&
Bot
.
HasInMonstersZone
(
CardId
.
BF
+
1
))
{
AI
.
SelectCard
(
new
[]
{
CardId
.
BF
,
CardId
.
BF
+
1
});
AI
.
SelectCard
(
CardId
.
BF
,
CardId
.
BF
+
1
);
return
true
;
}
foreach
(
ClientCard
extra_card
in
Bot
.
GetMonstersInExtraZone
())
...
...
@@ -1415,7 +1220,7 @@ namespace WindBot.Game.AI.Decks
if
(
Duel
.
Player
==
0
)
{
crystal_eff_used
=
true
;
AI
.
SelectCard
(
new
[]
{
CardId
.
Tuner
,
CardId
.
Ghost
,
CardId
.
Urara
}
);
AI
.
SelectCard
(
CardId
.
Tuner
,
CardId
.
Ghost
,
CardId
.
Urara
);
return
true
;
}
else
if
(
AI
.
Utils
.
IsChainTarget
(
Card
)
||
AI
.
Utils
.
GetProblematicEnemySpell
()
!=
null
)
return
true
;
...
...
@@ -1734,12 +1539,7 @@ namespace WindBot.Game.AI.Decks
public
bool
Missus_eff
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
MG
,
CardId
.
Missus
,
CardId
.
Snake
});
AI
.
SelectCard
(
CardId
.
MG
,
CardId
.
Missus
,
CardId
.
Snake
);
return
true
;
}
...
...
Game/AI/Decks/YosenjuExecutor.cs
View file @
494fe10b
...
...
@@ -189,8 +189,7 @@ namespace WindBot.Game.AI.Decks
{
if
(
CardOfDemiseUsed
)
{
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
CardId
.
StarlightRoad
,
CardId
.
MagicDrain
,
CardId
.
SolemnJudgment
,
...
...
@@ -202,12 +201,11 @@ namespace WindBot.Game.AI.Decks
CardId
.
SolemnWarning
,
CardId
.
MacroCosmos
,
CardId
.
CardOfDemise
}
);
);
}
else
{
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
CardId
.
YosenjuKama3
,
CardId
.
YosenjuKama1
,
CardId
.
YosenjuKama2
,
...
...
@@ -221,8 +219,8 @@ namespace WindBot.Game.AI.Decks
CardId
.
SolemnJudgment
,
CardId
.
SolemnWarning
,
CardId
.
MacroCosmos
,
CardId
.
CardOfDemise
,
}
);
CardId
.
CardOfDemise
);
}
return
true
;
}
...
...
@@ -272,12 +270,7 @@ namespace WindBot.Game.AI.Decks
// Don't activate the return to hand effect first
if
(
Duel
.
Phase
==
DuelPhase
.
End
)
return
false
;
AI
.
SelectCard
(
new
[]
{
CardId
.
YosenjuKama1
,
CardId
.
YosenjuKama2
,
CardId
.
YosenjuKama3
});
AI
.
SelectCard
(
CardId
.
YosenjuKama1
,
CardId
.
YosenjuKama2
,
CardId
.
YosenjuKama3
);
return
true
;
}
...
...
Game/AI/Decks/ZexalWeaponsExecutor.cs
View file @
494fe10b
...
...
@@ -170,14 +170,13 @@ namespace WindBot.Game.AI.Decks
private
bool
ReinforcementOfTheArmy
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Goblindbergh
,
CardId
.
TinGoldfish
,
CardId
.
StarDrawing
,
CardId
.
Kagetokage
,
CardId
.
SacredCrane
});
AI
.
SelectCard
(
CardId
.
Goblindbergh
,
CardId
.
TinGoldfish
,
CardId
.
StarDrawing
,
CardId
.
Kagetokage
,
CardId
.
SacredCrane
);
return
true
;
}
...
...
@@ -224,13 +223,12 @@ namespace WindBot.Game.AI.Decks
private
bool
GoblindberghEffect
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
SacredCrane
,
CardId
.
HeroicChallengerExtraSword
,
CardId
.
StarDrawing
,
CardId
.
SummonerMonk
});
AI
.
SelectCard
(
CardId
.
SacredCrane
,
CardId
.
HeroicChallengerExtraSword
,
CardId
.
StarDrawing
,
CardId
.
SummonerMonk
);
return
true
;
}
...
...
@@ -253,13 +251,12 @@ namespace WindBot.Game.AI.Decks
if
(
Bot
.
HasInHand
(
costs
))
{
AI
.
SelectCard
(
costs
);
AI
.
SelectNextCard
(
new
[]
{
AI
.
SelectNextCard
(
CardId
.
SacredCrane
,
CardId
.
StarDrawing
,
CardId
.
Goblindbergh
,
CardId
.
TinGoldfish
}
);
);
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
}
...
...
Game/AI/Decks/ZoodiacExecutor.cs
View file @
494fe10b
...
...
@@ -270,20 +270,18 @@ namespace WindBot.Game.AI.Decks
{
if
(
Bot
.
HasInGraveyard
(
CardId
.
Whiptail
)
||
Bot
.
HasInGraveyard
(
CardId
.
Thoroughblade
))
{
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
CardId
.
Broadbull
,
CardId
.
Tigermortar
,
CardId
.
Chakanine
,
CardId
.
Thoroughblade
,
CardId
.
Ratpier
,
CardId
.
Whiptail
});
AI
.
SelectNextCard
(
new
[]
{
);
AI
.
SelectNextCard
(
CardId
.
Whiptail
,
CardId
.
Thoroughblade
}
);
);
return
true
;
}
return
false
;
...
...
@@ -336,12 +334,7 @@ namespace WindBot.Game.AI.Decks
// return false;
AI
.
SelectCard
(
CardId
.
Chakanine
);
AI
.
SelectNextCard
(
CardId
.
Tigermortar
);
AI
.
SelectThirdCard
(
new
[]
{
CardId
.
Ratpier
,
CardId
.
Whiptail
,
CardId
.
Thoroughblade
});
AI
.
SelectThirdCard
(
CardId
.
Ratpier
,
CardId
.
Whiptail
,
CardId
.
Thoroughblade
);
return
true
;
}
...
...
@@ -384,14 +377,13 @@ namespace WindBot.Game.AI.Decks
private
bool
BroadbullEffect
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Tigermortar
,
CardId
.
Chakanine
,
CardId
.
Drident
,
CardId
.
AleisterTheInvoker
,
CardId
.
PhotonThrasher
});
AI
.
SelectCard
(
CardId
.
Tigermortar
,
CardId
.
Chakanine
,
CardId
.
Drident
,
CardId
.
AleisterTheInvoker
,
CardId
.
PhotonThrasher
);
if
(
Bot
.
HasInHand
(
CardId
.
Whiptail
)
&&
!
Bot
.
HasInHand
(
CardId
.
Ratpier
))
AI
.
SelectNextCard
(
CardId
.
Ratpier
);
else
...
...
@@ -475,12 +467,11 @@ namespace WindBot.Game.AI.Decks
private
bool
RatpierEffect
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
ZoodiacCombo
,
CardId
.
Thoroughblade
,
CardId
.
ZoodiacBarrage
});
AI
.
SelectCard
(
CardId
.
ZoodiacCombo
,
CardId
.
Thoroughblade
,
CardId
.
ZoodiacBarrage
);
return
true
;
}
...
...
@@ -491,15 +482,14 @@ namespace WindBot.Game.AI.Decks
ClientCard
target
=
AI
.
Utils
.
GetBestEnemyCard
(
true
);
if
(
target
==
null
)
return
false
;
AI
.
SelectCard
(
new
[]
{
CardId
.
Broadbull
,
CardId
.
Tigermortar
,
CardId
.
Chakanine
,
CardId
.
Thoroughblade
,
CardId
.
Ratpier
,
CardId
.
Whiptail
});
AI
.
SelectCard
(
CardId
.
Broadbull
,
CardId
.
Tigermortar
,
CardId
.
Chakanine
,
CardId
.
Thoroughblade
,
CardId
.
Ratpier
,
CardId
.
Whiptail
);
AI
.
SelectNextCard
(
target
);
return
true
;
}
...
...
@@ -516,17 +506,15 @@ namespace WindBot.Game.AI.Decks
private
bool
DaigustoEmeralEffect
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Ratpier
,
CardId
.
AleisterTheInvoker
,
CardId
.
Whiptail
});
AI
.
SelectNextCard
(
new
[]
{
CardId
.
Ratpier
,
CardId
.
DaigustoEmeral
});
AI
.
SelectCard
(
CardId
.
Ratpier
,
CardId
.
AleisterTheInvoker
,
CardId
.
Whiptail
);
AI
.
SelectNextCard
(
CardId
.
Ratpier
,
CardId
.
DaigustoEmeral
);
return
true
;
}
...
...
@@ -553,18 +541,16 @@ namespace WindBot.Game.AI.Decks
if
(
spell
.
IsCode
(
CardId
.
ZoodiacBarrage
)
&&
!
Card
.
Equals
(
spell
))
return
false
;
}
AI
.
SelectCard
(
new
[]
{
CardId
.
FireFormationTenki
,
CardId
.
MagicalMeltdown
,
CardId
.
ZoodiacBarrage
});
AI
.
SelectNextCard
(
new
[]
{
CardId
.
Ratpier
,
CardId
.
Whiptail
,
CardId
.
Thoroughblade
});
AI
.
SelectCard
(
CardId
.
FireFormationTenki
,
CardId
.
MagicalMeltdown
,
CardId
.
ZoodiacBarrage
);
AI
.
SelectNextCard
(
CardId
.
Ratpier
,
CardId
.
Whiptail
,
CardId
.
Thoroughblade
);
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
}
...
...
@@ -576,29 +562,27 @@ namespace WindBot.Game.AI.Decks
if
(
Card
.
Location
!=
CardLocation
.
Grave
)
{
AI
.
SelectCard
(
CardId
.
Drident
);
AI
.
SelectNextCard
(
new
[]
{
AI
.
SelectNextCard
(
CardId
.
Whiptail
,
CardId
.
Ratpier
,
CardId
.
Thoroughblade
}
);
);
}
return
true
;
}
private
bool
MonsterRebornEffect
()
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Ratpier
,
CardId
.
Whiptail
,
CardId
.
InvokedMechaba
,
CardId
.
JizukirutheStarDestroyingKaiju
,
CardId
.
InvokedMagellanica
,
CardId
.
Tigermortar
,
CardId
.
Chakanine
,
CardId
.
Broadbull
});
AI
.
SelectCard
(
CardId
.
Ratpier
,
CardId
.
Whiptail
,
CardId
.
InvokedMechaba
,
CardId
.
JizukirutheStarDestroyingKaiju
,
CardId
.
InvokedMagellanica
,
CardId
.
Tigermortar
,
CardId
.
Chakanine
,
CardId
.
Broadbull
);
return
true
;
}
...
...
Game/AI/DefaultExecutor.cs
View file @
494fe10b
...
...
@@ -362,7 +362,7 @@ namespace WindBot.Game.AI
if
(
DefaultOnBecomeTarget
())
return
true
;
if
(
Duel
.
Phase
>
DuelPhase
.
Main1
&&
Duel
.
Phase
<
DuelPhase
.
Main2
)
{
if
(
Enemy
.
HasInMonstersZone
(
new
[]
if
(
Enemy
.
HasInMonstersZone
(
new
[]
{
_CardId
.
UltimateConductorTytanno
,
_CardId
.
InvokedPurgatrio
,
...
...
@@ -863,42 +863,38 @@ namespace WindBot.Game.AI
{
if
(
Card
.
Location
==
CardLocation
.
Grave
)
{
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
_CardId
.
GamecieltheSeaTurtleKaiju
,
_CardId
.
KumongoustheStickyStringKaiju
,
_CardId
.
GadarlatheMysteryDustKaiju
,
_CardId
.
RadiantheMultidimensionalKaiju
,
_CardId
.
DogorantheMadFlameKaiju
,
_CardId
.
ThunderKingtheLightningstrikeKaiju
,
_CardId
.
JizukirutheStarDestroyingKaiju
,
}
);
_CardId
.
JizukirutheStarDestroyingKaiju
);
return
true
;
}
if
(
DefaultDarkHole
())
{
AI
.
SelectCard
(
new
[]
{
AI
.
SelectCard
(
_CardId
.
JizukirutheStarDestroyingKaiju
,
_CardId
.
ThunderKingtheLightningstrikeKaiju
,
_CardId
.
DogorantheMadFlameKaiju
,
_CardId
.
RadiantheMultidimensionalKaiju
,
_CardId
.
GadarlatheMysteryDustKaiju
,
_CardId
.
KumongoustheStickyStringKaiju
,
_CardId
.
GamecieltheSeaTurtleKaiju
,
});
AI
.
SelectNextCard
(
new
[]
{
_CardId
.
GamecieltheSeaTurtleKaiju
);
AI
.
SelectNextCard
(
_CardId
.
SuperAntiKaijuWarMachineMechaDogoran
,
_CardId
.
GamecieltheSeaTurtleKaiju
,
_CardId
.
KumongoustheStickyStringKaiju
,
_CardId
.
GadarlatheMysteryDustKaiju
,
_CardId
.
RadiantheMultidimensionalKaiju
,
_CardId
.
DogorantheMadFlameKaiju
,
_CardId
.
ThunderKingtheLightningstrikeKaiju
,
});
_CardId
.
ThunderKingtheLightningstrikeKaiju
);
return
true
;
}
...
...
Game/ClientField.cs
View file @
494fe10b
...
...
@@ -17,6 +17,7 @@ namespace WindBot.Game
public
int
LifePoints
;
public
ClientCard
BattlingMonster
;
public
bool
UnderAttack
;
public
ClientField
()
{
...
...
Game/GameAI.cs
View file @
494fe10b
...
...
@@ -784,6 +784,12 @@ namespace WindBot.Game
m_selector
.
Add
(
new
CardSelector
(
ids
));
}
public
void
SelectCard
(
params
int
[]
ids
)
{
m_selector_pointer
=
m_selector
.
Count
();
m_selector
.
Add
(
new
CardSelector
(
ids
));
}
public
void
SelectCard
(
CardLocation
loc
)
{
m_selector_pointer
=
m_selector
.
Count
();
...
...
@@ -830,6 +836,16 @@ namespace WindBot.Game
m_selector
.
Insert
(
m_selector_pointer
,
new
CardSelector
(
ids
));
}
public
void
SelectNextCard
(
params
int
[]
ids
)
{
if
(
m_selector_pointer
==
-
1
)
{
Logger
.
WriteErrorLine
(
"Error: Call SelectNextCard() before SelectCard()"
);
m_selector_pointer
=
0
;
}
m_selector
.
Insert
(
m_selector_pointer
,
new
CardSelector
(
ids
));
}
public
void
SelectNextCard
(
CardLocation
loc
)
{
if
(
m_selector_pointer
==
-
1
)
...
...
@@ -880,6 +896,16 @@ namespace WindBot.Game
m_selector
.
Insert
(
m_selector_pointer
,
new
CardSelector
(
ids
));
}
public
void
SelectThirdCard
(
params
int
[]
ids
)
{
if
(
m_selector_pointer
==
-
1
)
{
Logger
.
WriteErrorLine
(
"Error: Call SelectThirdCard() before SelectCard()"
);
m_selector_pointer
=
0
;
}
m_selector
.
Insert
(
m_selector_pointer
,
new
CardSelector
(
ids
));
}
public
void
SelectThirdCard
(
CardLocation
loc
)
{
if
(
m_selector_pointer
==
-
1
)
...
...
Game/GameBehavior.cs
View file @
494fe10b
...
...
@@ -103,6 +103,8 @@ namespace WindBot.Game
_messages
.
Add
(
GameMessage
.
Move
,
OnMove
);
_messages
.
Add
(
GameMessage
.
Swap
,
OnSwap
);
_messages
.
Add
(
GameMessage
.
Attack
,
OnAttack
);
_messages
.
Add
(
GameMessage
.
Battle
,
OnBattle
);
_messages
.
Add
(
GameMessage
.
AttackDisabled
,
OnAttackDisabled
);
_messages
.
Add
(
GameMessage
.
PosChange
,
OnPosChange
);
_messages
.
Add
(
GameMessage
.
Chaining
,
OnChaining
);
_messages
.
Add
(
GameMessage
.
ChainEnd
,
OnChainEnd
);
...
...
@@ -326,6 +328,14 @@ namespace WindBot.Game
int
type
=
packet
.
ReadByte
();
int
player
=
packet
.
ReadByte
();
int
data
=
packet
.
ReadInt32
();
if
(
type
==
1
)
// HINT_EVENT
{
if
(
data
==
24
)
// battling
{
_duel
.
Fields
[
0
].
UnderAttack
=
false
;
_duel
.
Fields
[
1
].
UnderAttack
=
false
;
}
}
if
(
type
==
3
)
// HINT_SELECTMSG
{
_select_hint
=
data
;
...
...
@@ -492,6 +502,8 @@ namespace WindBot.Game
_duel
.
LastSummonedCards
.
Clear
();
_duel
.
Fields
[
0
].
BattlingMonster
=
null
;
_duel
.
Fields
[
1
].
BattlingMonster
=
null
;
_duel
.
Fields
[
0
].
UnderAttack
=
false
;
_duel
.
Fields
[
1
].
UnderAttack
=
false
;
_ai
.
OnNewPhase
();
}
...
...
@@ -621,6 +633,7 @@ namespace WindBot.Game
}
_duel
.
Fields
[
attackcard
.
Controller
].
BattlingMonster
=
attackcard
;
_duel
.
Fields
[
1
-
attackcard
.
Controller
].
BattlingMonster
=
defendcard
;
_duel
.
Fields
[
1
-
attackcard
.
Controller
].
UnderAttack
=
true
;
if
(
ld
==
0
&&
ca
!=
0
)
{
...
...
@@ -628,6 +641,18 @@ namespace WindBot.Game
}
}
private
void
OnBattle
(
BinaryReader
packet
)
{
_duel
.
Fields
[
0
].
UnderAttack
=
false
;
_duel
.
Fields
[
1
].
UnderAttack
=
false
;
}
private
void
OnAttackDisabled
(
BinaryReader
packet
)
{
_duel
.
Fields
[
0
].
UnderAttack
=
false
;
_duel
.
Fields
[
1
].
UnderAttack
=
false
;
}
private
void
OnPosChange
(
BinaryReader
packet
)
{
packet
.
ReadInt32
();
// card id
...
...
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