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
神之吹息
windbot
Commits
c2a94e8e
Commit
c2a94e8e
authored
Apr 26, 2019
by
mercury233
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rename AI.Utils to Util
parent
d2bdb15f
Changes
33
Show whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
501 additions
and
501 deletions
+501
-501
Game/AI/AIUtil.cs
Game/AI/AIUtil.cs
+2
-28
Game/AI/CardContainer.cs
Game/AI/CardContainer.cs
+26
-0
Game/AI/Decks/AltergeistExecutor.cs
Game/AI/Decks/AltergeistExecutor.cs
+85
-85
Game/AI/Decks/BlackwingExecutor.cs
Game/AI/Decks/BlackwingExecutor.cs
+1
-1
Game/AI/Decks/BlueEyesExecutor.cs
Game/AI/Decks/BlueEyesExecutor.cs
+20
-20
Game/AI/Decks/BlueEyesMaxDragonExecutor.cs
Game/AI/Decks/BlueEyesMaxDragonExecutor.cs
+11
-11
Game/AI/Decks/ChainBurnExecutor.cs
Game/AI/Decks/ChainBurnExecutor.cs
+9
-9
Game/AI/Decks/CyberDragonExecutor.cs
Game/AI/Decks/CyberDragonExecutor.cs
+5
-5
Game/AI/Decks/DarkMagicianExecutor.cs
Game/AI/Decks/DarkMagicianExecutor.cs
+40
-40
Game/AI/Decks/DragunityExecutor.cs
Game/AI/Decks/DragunityExecutor.cs
+10
-10
Game/AI/Decks/FrogExecutor.cs
Game/AI/Decks/FrogExecutor.cs
+5
-5
Game/AI/Decks/GravekeeperExecutor.cs
Game/AI/Decks/GravekeeperExecutor.cs
+1
-1
Game/AI/Decks/GrenMajuThunderBoarderExecutor.cs
Game/AI/Decks/GrenMajuThunderBoarderExecutor.cs
+20
-20
Game/AI/Decks/HorusExecutor.cs
Game/AI/Decks/HorusExecutor.cs
+6
-6
Game/AI/Decks/LightswornExecutor.cs
Game/AI/Decks/LightswornExecutor.cs
+3
-3
Game/AI/Decks/LightswornShaddoldinosourExecutor.cs
Game/AI/Decks/LightswornShaddoldinosourExecutor.cs
+25
-25
Game/AI/Decks/NekrozExecutor.cs
Game/AI/Decks/NekrozExecutor.cs
+7
-7
Game/AI/Decks/OldSchoolExecutor.cs
Game/AI/Decks/OldSchoolExecutor.cs
+1
-1
Game/AI/Decks/PhantasmExecutor.cs
Game/AI/Decks/PhantasmExecutor.cs
+19
-19
Game/AI/Decks/QliphortExecutor.cs
Game/AI/Decks/QliphortExecutor.cs
+12
-12
Game/AI/Decks/RainbowExecutor.cs
Game/AI/Decks/RainbowExecutor.cs
+18
-18
Game/AI/Decks/Rank5Executor.cs
Game/AI/Decks/Rank5Executor.cs
+8
-8
Game/AI/Decks/ST1732Executor.cs
Game/AI/Decks/ST1732Executor.cs
+3
-3
Game/AI/Decks/SkyStrikerExecutor.cs
Game/AI/Decks/SkyStrikerExecutor.cs
+28
-28
Game/AI/Decks/ToadallyAwesomeExecutor.cs
Game/AI/Decks/ToadallyAwesomeExecutor.cs
+5
-5
Game/AI/Decks/TrickstarExecutor.cs
Game/AI/Decks/TrickstarExecutor.cs
+67
-67
Game/AI/Decks/YosenjuExecutor.cs
Game/AI/Decks/YosenjuExecutor.cs
+7
-7
Game/AI/Decks/ZexalWeaponsExecutor.cs
Game/AI/Decks/ZexalWeaponsExecutor.cs
+7
-7
Game/AI/Decks/ZoodiacExecutor.cs
Game/AI/Decks/ZoodiacExecutor.cs
+3
-3
Game/AI/DefaultExecutor.cs
Game/AI/DefaultExecutor.cs
+40
-40
Game/AI/Executor.cs
Game/AI/Executor.cs
+2
-0
Game/GameAI.cs
Game/GameAI.cs
+4
-6
WindBot.csproj
WindBot.csproj
+1
-1
No files found.
Game/AI/AI
Functions
.cs
→
Game/AI/AI
Util
.cs
View file @
c2a94e8e
...
...
@@ -4,45 +4,19 @@ using System.Linq;
using
YGOSharp.OCGWrapper.Enums
;
namespace
WindBot.Game.AI
{
public
class
AI
Functions
public
class
AI
Util
{
public
Duel
Duel
{
get
;
private
set
;
}
public
ClientField
Bot
{
get
;
private
set
;
}
public
ClientField
Enemy
{
get
;
private
set
;
}
public
AI
Functions
(
Duel
duel
)
public
AI
Util
(
Duel
duel
)
{
Duel
=
duel
;
Bot
=
Duel
.
Fields
[
0
];
Enemy
=
Duel
.
Fields
[
1
];
}
public
static
int
CompareCardAttack
(
ClientCard
cardA
,
ClientCard
cardB
)
{
if
(
cardA
.
Attack
<
cardB
.
Attack
)
return
-
1
;
if
(
cardA
.
Attack
==
cardB
.
Attack
)
return
0
;
return
1
;
}
public
static
int
CompareDefensePower
(
ClientCard
cardA
,
ClientCard
cardB
)
{
if
(
cardA
==
null
&&
cardB
==
null
)
return
0
;
if
(
cardA
==
null
)
return
-
1
;
if
(
cardB
==
null
)
return
1
;
int
powerA
=
cardA
.
GetDefensePower
();
int
powerB
=
cardB
.
GetDefensePower
();
if
(
powerA
<
powerB
)
return
-
1
;
if
(
powerA
==
powerB
)
return
0
;
return
1
;
}
/// <summary>
/// Get the total ATK Monster of the player.
/// </summary>
...
...
Game/AI/CardContainer.cs
View file @
c2a94e8e
...
...
@@ -7,6 +7,32 @@ namespace WindBot.Game.AI
{
public
static
class
CardContainer
{
public
static
int
CompareCardAttack
(
ClientCard
cardA
,
ClientCard
cardB
)
{
if
(
cardA
.
Attack
<
cardB
.
Attack
)
return
-
1
;
if
(
cardA
.
Attack
==
cardB
.
Attack
)
return
0
;
return
1
;
}
public
static
int
CompareDefensePower
(
ClientCard
cardA
,
ClientCard
cardB
)
{
if
(
cardA
==
null
&&
cardB
==
null
)
return
0
;
if
(
cardA
==
null
)
return
-
1
;
if
(
cardB
==
null
)
return
1
;
int
powerA
=
cardA
.
GetDefensePower
();
int
powerB
=
cardB
.
GetDefensePower
();
if
(
powerA
<
powerB
)
return
-
1
;
if
(
powerA
==
powerB
)
return
0
;
return
1
;
}
public
static
ClientCard
GetHighestAttackMonster
(
this
IEnumerable
<
ClientCard
>
cards
,
bool
canBeTarget
=
false
)
{
return
cards
...
...
Game/AI/Decks/AltergeistExecutor.cs
View file @
c2a94e8e
...
...
@@ -271,7 +271,7 @@ namespace WindBot.Game.AI.Decks
public
bool
is_should_not_negate
()
{
ClientCard
last_card
=
AI
.
Utils
.
GetLastChainCard
();
ClientCard
last_card
=
Util
.
GetLastChainCard
();
if
(
last_card
!=
null
&&
last_card
.
Controller
==
1
&&
last_card
.
IsCode
(
should_not_negate
))
return
true
;
...
...
@@ -479,7 +479,7 @@ namespace WindBot.Game.AI.Decks
if
(
card
!=
null
)
return
card
;
List
<
ClientCard
>
enemy_monsters
=
Enemy
.
GetMonsters
();
enemy_monsters
.
Sort
(
AIFunctions
.
CompareCardAttack
);
enemy_monsters
.
Sort
(
CardContainer
.
CompareCardAttack
);
enemy_monsters
.
Reverse
();
foreach
(
ClientCard
target
in
enemy_monsters
)
{
...
...
@@ -496,10 +496,10 @@ namespace WindBot.Game.AI.Decks
public
ClientCard
GetBestEnemyCard_random
()
{
// monsters
ClientCard
card
=
AI
.
Utils
.
GetProblematicEnemyMonster
(
0
,
true
);
ClientCard
card
=
Util
.
GetProblematicEnemyMonster
(
0
,
true
);
if
(
card
!=
null
)
return
card
;
if
(
AI
.
Utils
.
GetOneEnemyBetterThanMyBest
()
!=
null
)
if
(
Util
.
GetOneEnemyBetterThanMyBest
()
!=
null
)
{
card
=
Enemy
.
MonsterZone
.
GetHighestAttackMonster
(
true
);
if
(
card
!=
null
)
...
...
@@ -619,11 +619,11 @@ namespace WindBot.Game.AI.Decks
if
(!
spell_trap_activate
())
return
false
;
if
(
Bot
.
LifePoints
<=
1000
)
return
false
;
if
(
Bot
.
LifePoints
-
1000
<=
Enemy
.
LifePoints
&&
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
_CardId
.
ChickenGame
,
0
))
if
(
Bot
.
LifePoints
-
1000
<=
Enemy
.
LifePoints
&&
ActivateDescription
==
Util
.
GetStringId
(
_CardId
.
ChickenGame
,
0
))
{
return
true
;
}
if
(
Bot
.
LifePoints
-
1000
>
Enemy
.
LifePoints
&&
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
_CardId
.
ChickenGame
,
1
))
if
(
Bot
.
LifePoints
-
1000
>
Enemy
.
LifePoints
&&
ActivateDescription
==
Util
.
GetStringId
(
_CardId
.
ChickenGame
,
1
))
{
return
true
;
}
...
...
@@ -693,11 +693,11 @@ namespace WindBot.Game.AI.Decks
public
bool
SolemnJudgment_activate
()
{
if
(
AI
.
Utils
.
IsChainTargetOnly
(
Card
)
&&
(
Bot
.
HasInHand
(
CardId
.
Multifaker
)
||
Multifaker_candeckss
()))
return
false
;
if
(
Util
.
IsChainTargetOnly
(
Card
)
&&
(
Bot
.
HasInHand
(
CardId
.
Multifaker
)
||
Multifaker_candeckss
()))
return
false
;
if
(!
Should_counter
())
return
false
;
if
((
DefaultSolemnJudgment
()
&&
spell_trap_activate
(
true
)))
{
ClientCard
target
=
AI
.
Utils
.
GetLastChainCard
();
ClientCard
target
=
Util
.
GetLastChainCard
();
if
(
target
!=
null
&&
!
target
.
IsMonster
()
&&
!
spell_trap_activate
(
false
,
target
))
return
false
;
return
true
;
}
...
...
@@ -733,7 +733,7 @@ namespace WindBot.Game.AI.Decks
}
}
ClientCard
LastChainCard
=
AI
.
Utils
.
GetLastChainCard
();
ClientCard
LastChainCard
=
Util
.
GetLastChainCard
();
if
(
LastChainCard
==
null
&&
!(
Duel
.
Player
==
1
&&
Duel
.
Phase
>
DuelPhase
.
Main2
&&
Bot
.
HasInHand
(
CardId
.
Multifaker
)
&&
Multifaker_candeckss
()
&&
!
Multifaker_ssfromhand
))
...
...
@@ -748,16 +748,16 @@ namespace WindBot.Game.AI.Decks
if
(
Bot
.
SpellZone
[
i
]
==
Card
)
this_seq
=
i
;
if
(
LastChainCard
!=
null
&&
LastChainCard
.
Controller
==
1
&&
LastChainCard
.
Location
==
CardLocation
.
SpellZone
&&
Enemy
.
SpellZone
[
i
]
==
LastChainCard
)
that_seq
=
i
;
else
if
(
Duel
.
Player
==
0
&&
AI
.
Utils
.
GetProblematicEnemySpell
()
!=
null
else
if
(
Duel
.
Player
==
0
&&
Util
.
GetProblematicEnemySpell
()
!=
null
&&
Enemy
.
SpellZone
[
i
]
!=
null
&&
Enemy
.
SpellZone
[
i
].
IsFloodgate
())
that_seq
=
i
;
}
if
(
(
this_seq
*
that_seq
>=
0
&&
this_seq
+
that_seq
==
4
)
||
(
AI
.
Utils
.
IsChainTarget
(
Card
))
||
(
Util
.
IsChainTarget
(
Card
))
||
(
LastChainCard
!=
null
&&
LastChainCard
.
Controller
==
1
&&
LastChainCard
.
IsCode
(
_CardId
.
HarpiesFeatherDuster
))
||
(
Duel
.
Player
==
1
&&
Duel
.
Phase
>
DuelPhase
.
Main2
&&
Bot
.
HasInHand
(
CardId
.
Multifaker
)
&&
Multifaker_candeckss
()
&&
!
Multifaker_ssfromhand
))
{
List
<
ClientCard
>
enemy_monsters
=
Enemy
.
GetMonsters
();
enemy_monsters
.
Sort
(
AIFunctions
.
CompareCardAttack
);
enemy_monsters
.
Sort
(
CardContainer
.
CompareCardAttack
);
enemy_monsters
.
Reverse
();
foreach
(
ClientCard
card
in
enemy_monsters
)
{
...
...
@@ -795,7 +795,7 @@ namespace WindBot.Game.AI.Decks
else
{
List
<
ClientCard
>
enemy_monsters
=
Enemy
.
GetMonsters
();
enemy_monsters
.
Sort
(
AIFunctions
.
CompareCardAttack
);
enemy_monsters
.
Sort
(
CardContainer
.
CompareCardAttack
);
enemy_monsters
.
Reverse
();
foreach
(
ClientCard
card
in
enemy_monsters
)
{
...
...
@@ -990,7 +990,7 @@ namespace WindBot.Game.AI.Decks
public
bool
Feather_activate
()
{
if
(!
spell_trap_activate
())
return
false
;
if
(
AI
.
Utils
.
GetProblematicEnemySpell
()
!=
null
)
if
(
Util
.
GetProblematicEnemySpell
()
!=
null
)
{
AI
.
SelectPlace
(
SelectSTPlace
(
Card
,
true
));
return
true
;
...
...
@@ -1039,8 +1039,8 @@ namespace WindBot.Game.AI.Decks
}
if
(
Duel
.
Phase
==
DuelPhase
.
End
||
activate_immediately
>=
2
||
(
AI
.
Utils
.
IsChainTarget
(
Card
)
||
(
AI
.
Utils
.
GetLastChainCard
()
!=
null
&&
AI
.
Utils
.
GetLastChainCard
().
Controller
==
1
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
_CardId
.
HarpiesFeatherDuster
))))
||
(
Util
.
IsChainTarget
(
Card
)
||
(
Util
.
GetLastChainCard
()
!=
null
&&
Util
.
GetLastChainCard
().
Controller
==
1
&&
Util
.
GetLastChainCard
().
IsCode
(
_CardId
.
HarpiesFeatherDuster
))))
{
if
(
select_list
.
Count
>
0
)
{
...
...
@@ -1057,7 +1057,7 @@ namespace WindBot.Game.AI.Decks
{
if
(
Duel
.
Phase
>
DuelPhase
.
Main1
&&
Duel
.
Phase
<
DuelPhase
.
Main2
)
{
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Linkuriboh
))
return
false
;
if
(
Util
.
ChainContainsCard
(
CardId
.
Linkuriboh
))
return
false
;
if
(
Bot
.
BattlingMonster
==
null
||
(
Enemy
.
BattlingMonster
.
Attack
>=
Bot
.
BattlingMonster
.
GetDefensePower
())
||
Enemy
.
BattlingMonster
.
IsMonsterDangerous
())
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
...
...
@@ -1137,19 +1137,19 @@ namespace WindBot.Game.AI.Decks
}
}
}
if
(!
AI
.
Utils
.
IsTurn1OrMain2
())
if
(!
Util
.
IsTurn1OrMain2
())
{
ClientCard
self_best
=
AI
.
Utils
.
GetBestBotMonster
();
ClientCard
enemy_best
=
AI
.
Utils
.
GetProblematicEnemyCard
(
self_best
.
Attack
,
true
);
ClientCard
self_best
=
Util
.
GetBestBotMonster
();
ClientCard
enemy_best
=
Util
.
GetProblematicEnemyCard
(
self_best
.
Attack
,
true
);
ClientCard
enemy_target
=
GetProblematicEnemyCard_Alter
(
true
,
false
);
if
((
enemy_best
!=
null
||
enemy_target
!=
null
)
&&
Bot
.
HasInGraveyard
(
CardId
.
Meluseek
))
next_card
=
CardId
.
Meluseek
;
else
if
(
Enemy
.
GetMonsterCount
()
<=
1
&&
Bot
.
HasInGraveyard
(
CardId
.
Meluseek
)
&&
Enemy
.
GetFieldCount
()
>
0
)
next_card
=
CardId
.
Meluseek
;
else
if
(
Bot
.
HasInGraveyard
(
CardId
.
Hexstia
)
&&
AI
.
Utils
.
GetProblematicEnemySpell
()
==
null
&&
AI
.
Utils
.
GetOneEnemyBetterThanValue
(
3100
,
true
)
==
null
&&
can_choose_other
)
else
if
(
Bot
.
HasInGraveyard
(
CardId
.
Hexstia
)
&&
Util
.
GetProblematicEnemySpell
()
==
null
&&
Util
.
GetOneEnemyBetterThanValue
(
3100
,
true
)
==
null
&&
can_choose_other
)
{
next_card
=
CardId
.
Hexstia
;
choose_other
=
(
AI
.
Utils
.
GetOneEnemyBetterThanMyBest
(
true
)
!=
null
);
choose_other
=
(
Util
.
GetOneEnemyBetterThanMyBest
(
true
)
!=
null
);
}
}
else
...
...
@@ -1210,18 +1210,18 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
CardId
.
Protocol
);
AI
.
SelectNextCard
(
next_card
);
Marionetter_reborn
=
true
;
if
(
next_card
==
CardId
.
Meluseek
&&
AI
.
Utils
.
IsTurn1OrMain2
())
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
if
(
next_card
==
CardId
.
Meluseek
&&
Util
.
IsTurn1OrMain2
())
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
}
List
<
ClientCard
>
list
=
Bot
.
GetMonsters
();
list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
list
.
Sort
(
CardContainer
.
CompareCardAttack
);
foreach
(
ClientCard
card
in
list
)
{
if
(
isAltergeist
(
card
)
&&
!(
choose_other
&&
card
==
Card
))
{
AI
.
SelectCard
(
card
);
AI
.
SelectNextCard
(
next_card
);
if
(
next_card
==
CardId
.
Meluseek
&&
AI
.
Utils
.
IsTurn1OrMain2
())
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
if
(
next_card
==
CardId
.
Meluseek
&&
Util
.
IsTurn1OrMain2
())
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
Marionetter_reborn
=
true
;
return
true
;
}
...
...
@@ -1239,7 +1239,7 @@ namespace WindBot.Game.AI.Decks
{
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
&&
Duel
.
LastChainPlayer
!=
0
&&
(
Protocol_activing
()
||
!
Card
.
IsDisabled
()))
{
ClientCard
target
=
AI
.
Utils
.
GetLastChainCard
();
ClientCard
target
=
Util
.
GetLastChainCard
();
if
(
target
!=
null
&&
!
spell_trap_activate
(
false
,
target
))
return
false
;
if
(!
Should_counter
())
return
false
;
// check
...
...
@@ -1256,7 +1256,7 @@ namespace WindBot.Game.AI.Decks
}
return
true
;
}
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
Hexstia
,
0
))
return
false
;
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
Hexstia
,
0
))
return
false
;
if
(
Enemy
.
HasInSpellZone
(
82732705
)
&&
Bot
.
GetRemainingCount
(
CardId
.
Protocol
,
3
)
>
0
&&
!
Bot
.
HasInHandOrInSpellZone
(
CardId
.
Protocol
))
{
AI
.
SelectCard
(
CardId
.
Protocol
);
...
...
@@ -1301,7 +1301,7 @@ namespace WindBot.Game.AI.Decks
public
bool
Meluseek_eff
()
{
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
Meluseek
,
0
)
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
Meluseek
,
0
)
||
(
ActivateDescription
==
-
1
&&
Card
.
Location
==
CardLocation
.
MonsterZone
))
{
attacked_Meluseek
.
Add
(
Card
);
...
...
@@ -1311,7 +1311,7 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
target
);
return
true
;
}
target
=
AI
.
Utils
.
GetOneEnemyBetterThanMyBest
(
true
,
true
);
target
=
Util
.
GetOneEnemyBetterThanMyBest
(
true
,
true
);
if
(
target
!=
null
)
{
AI
.
SelectCard
(
target
);
...
...
@@ -1384,7 +1384,7 @@ namespace WindBot.Game.AI.Decks
{
if
(!
Multifaker_candeckss
()
||
Card
.
Location
!=
CardLocation
.
Hand
)
return
false
;
Multifaker_ssfromhand
=
true
;
if
(
Duel
.
Player
!=
0
&&
AI
.
Utils
.
GetOneEnemyBetterThanMyBest
()
!=
null
)
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
if
(
Duel
.
Player
!=
0
&&
Util
.
GetOneEnemyBetterThanMyBest
()
!=
null
)
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
}
...
...
@@ -1429,7 +1429,7 @@ namespace WindBot.Game.AI.Decks
public
bool
Silquitous_eff
()
{
if
(
ActivateDescription
!=
AI
.
Utils
.
GetStringId
(
CardId
.
Silquitous
,
0
))
if
(
ActivateDescription
!=
Util
.
GetStringId
(
CardId
.
Silquitous
,
0
))
{
if
(!
Bot
.
HasInHandOrInSpellZone
(
CardId
.
Manifestation
)
&&
Bot
.
HasInGraveyard
(
CardId
.
Manifestation
))
{
...
...
@@ -1461,7 +1461,7 @@ namespace WindBot.Game.AI.Decks
}
}
if
(
spell
.
IsCode
(
CardId
.
Manifestation
)
&&
spell
.
IsFaceup
())
faceup_Manifestation
=
spell
;
if
(
Duel
.
LastChainPlayer
!=
0
&&
AI
.
Utils
.
IsChainTarget
(
spell
)
&&
spell
.
IsFaceup
()
&&
isAltergeist
(
spell
))
if
(
Duel
.
LastChainPlayer
!=
0
&&
Util
.
IsChainTarget
(
spell
)
&&
spell
.
IsFaceup
()
&&
isAltergeist
(
spell
))
{
selected_target
=
spell
;
}
...
...
@@ -1479,12 +1479,12 @@ namespace WindBot.Game.AI.Decks
ClientCard
faceup_Multifaker
=
null
;
ClientCard
faceup_monster
=
null
;
List
<
ClientCard
>
monster_list
=
Bot
.
GetMonsters
();
monster_list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
monster_list
.
Sort
(
CardContainer
.
CompareCardAttack
);
foreach
(
ClientCard
card
in
monster_list
)
{
if
(
card
.
IsFaceup
()
&&
isAltergeist
(
card
)
&&
card
!=
Card
)
{
if
(
Duel
.
LastChainPlayer
!=
0
&&
AI
.
Utils
.
IsChainTarget
(
card
)
&&
card
.
IsFaceup
())
if
(
Duel
.
LastChainPlayer
!=
0
&&
Util
.
IsChainTarget
(
card
)
&&
card
.
IsFaceup
())
{
selected_target
=
card
;
}
...
...
@@ -1512,13 +1512,13 @@ namespace WindBot.Game.AI.Decks
if
(
Duel
.
LastChainPlayer
!=
0
)
{
Logger
.
DebugWriteLine
(
"Silquitous: battle"
);
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Linkuriboh
)
||
Bot
.
HasInHand
(
CardId
.
Kunquery
))
return
false
;
if
(
Util
.
ChainContainsCard
(
CardId
.
Linkuriboh
)
||
Bot
.
HasInHand
(
CardId
.
Kunquery
))
return
false
;
if
(
Enemy
.
BattlingMonster
!=
null
&&
Bot
.
BattlingMonster
!=
null
&&
Enemy
.
BattlingMonster
.
GetDefensePower
()
>=
Bot
.
BattlingMonster
.
GetDefensePower
())
{
if
(
Bot
.
HasInMonstersZone
(
CardId
.
Kunquery
))
AI
.
SelectCard
(
CardId
.
Kunquery
);
else
AI
.
SelectCard
(
bounce_self
);
List
<
ClientCard
>
enemy_list
=
Enemy
.
GetMonsters
();
enemy_list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
enemy_list
.
Sort
(
CardContainer
.
CompareCardAttack
);
enemy_list
.
Reverse
();
foreach
(
ClientCard
target
in
enemy_list
)
{
...
...
@@ -1567,8 +1567,8 @@ namespace WindBot.Game.AI.Decks
{
if
(
Card
.
Location
==
CardLocation
.
Grave
)
{
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Silquitous
))
return
false
;
if
(!
Bot
.
HasInHandOrInSpellZone
(
CardId
.
Protocol
)
&&
!
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Protocol
))
if
(
Util
.
ChainContainsCard
(
CardId
.
Silquitous
))
return
false
;
if
(!
Bot
.
HasInHandOrInSpellZone
(
CardId
.
Protocol
)
&&
!
Util
.
ChainContainsCard
(
CardId
.
Protocol
))
{
AI
.
SelectCard
(
CardId
.
Protocol
);
return
true
;
...
...
@@ -1577,8 +1577,8 @@ namespace WindBot.Game.AI.Decks
}
else
{
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Manifestation
)
||
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Spoofing
))
return
false
;
if
(
Duel
.
LastChainPlayer
==
0
&&
!(
AI
.
Utils
.
GetLastChainCard
()
!=
null
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
CardId
.
Hexstia
)))
return
false
;
if
(
Util
.
ChainContainsCard
(
CardId
.
Manifestation
)
||
Util
.
ChainContainsCard
(
CardId
.
Spoofing
))
return
false
;
if
(
Duel
.
LastChainPlayer
==
0
&&
!(
Util
.
GetLastChainCard
()
!=
null
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
Hexstia
)))
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
Hexstia
))
{
...
...
@@ -1644,9 +1644,9 @@ namespace WindBot.Game.AI.Decks
public
bool
Protocol_negate_better
()
{
// skip if no one of enemy's monsters is better
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
Protocol
,
1
))
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
Protocol
,
1
))
{
if
(
AI
.
Utils
.
GetOneEnemyBetterThanMyBest
(
true
)
==
null
)
return
false
;
if
(
Util
.
GetOneEnemyBetterThanMyBest
(
true
)
==
null
)
return
false
;
}
return
Protocol_negate
();
}
...
...
@@ -1654,7 +1654,7 @@ namespace WindBot.Game.AI.Decks
public
bool
Protocol_negate
()
{
// negate
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
Protocol
,
1
)
&&
(!
Card
.
IsDisabled
()
||
Protocol_activing
()))
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
Protocol
,
1
)
&&
(!
Card
.
IsDisabled
()
||
Protocol_activing
()))
{
if
(!
Should_counter
())
return
false
;
if
(
is_should_not_negate
())
return
false
;
...
...
@@ -1690,7 +1690,7 @@ namespace WindBot.Game.AI.Decks
}
}
List
<
int
>
cost_list
=
new
List
<
int
>();
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Manifestation
))
cost_list
.
Add
(
CardId
.
Manifestation
);
if
(
Util
.
ChainContainsCard
(
CardId
.
Manifestation
))
cost_list
.
Add
(
CardId
.
Manifestation
);
if
(!
Card
.
IsDisabled
())
cost_list
.
Add
(
CardId
.
Protocol
);
cost_list
.
Add
(
CardId
.
Multifaker
);
cost_list
.
Add
(
CardId
.
Marionetter
);
...
...
@@ -1718,7 +1718,7 @@ namespace WindBot.Game.AI.Decks
}
if
(!
Silquitous_bounced
)
cost_list
.
Add
(
CardId
.
Silquitous
);
if
(!
Meluseek_searched
)
cost_list
.
Add
(
CardId
.
Meluseek
);
if
(!
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Manifestation
))
cost_list
.
Add
(
CardId
.
Manifestation
);
if
(!
Util
.
ChainContainsCard
(
CardId
.
Manifestation
))
cost_list
.
Add
(
CardId
.
Manifestation
);
AI
.
SelectCard
(
cost_list
);
return
true
;
}
...
...
@@ -1727,10 +1727,10 @@ namespace WindBot.Game.AI.Decks
public
bool
Protocol_activate_not_use
()
{
if
(
AI
.
Utils
.
GetLastChainCard
()
!=
null
&&
AI
.
Utils
.
GetLastChainCard
().
Controller
==
0
&&
AI
.
Utils
.
GetLastChainCard
().
IsTrap
())
return
false
;
if
(
ActivateDescription
!=
AI
.
Utils
.
GetStringId
(
CardId
.
Protocol
,
1
))
if
(
Util
.
GetLastChainCard
()
!=
null
&&
Util
.
GetLastChainCard
().
Controller
==
0
&&
Util
.
GetLastChainCard
().
IsTrap
())
return
false
;
if
(
ActivateDescription
!=
Util
.
GetStringId
(
CardId
.
Protocol
,
1
))
{
if
(
AI
.
Utils
.
IsChainTarget
(
Card
)
&&
Card
.
IsFacedown
())
return
true
;
if
(
Util
.
IsChainTarget
(
Card
)
&&
Card
.
IsFacedown
())
return
true
;
if
(
Should_activate_Protocol
())
return
true
;
if
(!
Multifaker_ssfromhand
&&
Multifaker_candeckss
()
&&
(
Bot
.
HasInHand
(
CardId
.
Multifaker
)
||
Bot
.
HasInSpellZone
(
CardId
.
Spoofing
)))
{
...
...
@@ -1760,7 +1760,7 @@ namespace WindBot.Game.AI.Decks
}
}
if
(
can_bounce
==
10
||
should_disnegate
)
return
true
;
if
(
Duel
.
Phase
>
DuelPhase
.
Main1
&&
Duel
.
Phase
<
DuelPhase
.
Main2
&&
Bot
.
HasInHand
(
CardId
.
Kunquery
)
&&
AI
.
Utils
.
GetOneEnemyBetterThanMyBest
()
!=
null
)
return
true
;
if
(
Duel
.
Phase
>
DuelPhase
.
Main1
&&
Duel
.
Phase
<
DuelPhase
.
Main2
&&
Bot
.
HasInHand
(
CardId
.
Kunquery
)
&&
Util
.
GetOneEnemyBetterThanMyBest
()
!=
null
)
return
true
;
}
return
false
;
}
...
...
@@ -1783,7 +1783,7 @@ namespace WindBot.Game.AI.Decks
{
foreach
(
int
id
in
list
)
{
if
(
card
.
IsCode
(
id
)
&&
!(
id
==
CardId
.
Multifaker
&&
AI
.
Utils
.
GetLastChainCard
()
==
card
))
if
(
card
.
IsCode
(
id
)
&&
!(
id
==
CardId
.
Multifaker
&&
Util
.
GetLastChainCard
()
==
card
))
{
AI
.
SelectCard
(
card
);
return
;
...
...
@@ -1817,9 +1817,9 @@ namespace WindBot.Game.AI.Decks
public
bool
Spoofing_eff
()
{
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Spoofing
))
return
false
;
if
(
Util
.
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
))
if
(!
Util
.
ChainContainPlayer
(
0
)
&&
!
Multifaker_ssfromhand
&&
Multifaker_candeckss
()
&&
Bot
.
HasInHand
(
CardId
.
Multifaker
)
&&
Card
.
HasPosition
(
CardPosition
.
FaceDown
))
{
AI
.
SelectYesNo
(
false
);
return
true
;
...
...
@@ -1913,9 +1913,9 @@ namespace WindBot.Game.AI.Decks
}
else
{
ClientCard
self_best
=
AI
.
Utils
.
GetBestBotMonster
();
ClientCard
self_best
=
Util
.
GetBestBotMonster
();
int
best_atk
=
self_best
==
null
?
0
:
self_best
.
Attack
;
ClientCard
enemy_best
=
AI
.
Utils
.
GetProblematicEnemyCard
(
best_atk
,
true
);
ClientCard
enemy_best
=
Util
.
GetProblematicEnemyCard
(
best_atk
,
true
);
ClientCard
enemy_target
=
GetProblematicEnemyCard_Alter
(
true
,
false
);
if
(!
Multifaker_ssfromhand
&&
Multifaker_candeckss
()
&&
can_ss_Multifaker
)
...
...
@@ -2019,7 +2019,7 @@ namespace WindBot.Game.AI.Decks
bool
go
=
false
;
foreach
(
ClientCard
card
in
Bot
.
GetSpells
())
{
if
(
(
AI
.
Utils
.
ChainContainsCard
(
_CardId
.
HarpiesFeatherDuster
)
||
AI
.
Utils
.
IsChainTarget
(
card
))
if
(
(
Util
.
ChainContainsCard
(
_CardId
.
HarpiesFeatherDuster
)
||
Util
.
IsChainTarget
(
card
))
&&
card
.
IsFaceup
()
&&
Duel
.
LastChainPlayer
!=
0
&&
isAltergeist
(
card
))
{
AI
.
SelectCard
(
card
);
...
...
@@ -2031,7 +2031,7 @@ namespace WindBot.Game.AI.Decks
{
foreach
(
ClientCard
card
in
Bot
.
GetMonsters
())
{
if
(
(
AI
.
Utils
.
IsChainTarget
(
card
)
||
AI
.
Utils
.
ChainContainsCard
(
CardId
.
DarkHole
)
||
(!
Protocol_activing
()
&&
card
.
IsDisabled
()))
if
(
(
Util
.
IsChainTarget
(
card
)
||
Util
.
ChainContainsCard
(
CardId
.
DarkHole
)
||
(!
Protocol_activing
()
&&
card
.
IsDisabled
()))
&&
card
.
IsFaceup
()
&&
Duel
.
LastChainPlayer
!=
0
&&
isAltergeist
(
card
))
{
Logger
.
DebugWriteLine
(
"Spoofing target:"
+
card
?.
Name
);
...
...
@@ -2065,7 +2065,7 @@ namespace WindBot.Game.AI.Decks
CardId
.
Kunquery
,
CardId
.
GO_SR
);
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
if
(
Util
.
IsTurn1OrMain2
())
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
}
if
(!
summoned
&&
!
Meluseek_searched
&&
!
Bot
.
HasInHand
(
CardId
.
Marionetter
))
...
...
@@ -2272,7 +2272,7 @@ namespace WindBot.Game.AI.Decks
public
bool
Linkuriboh_ss
()
{
if
(
Bot
.
GetMonstersExtraZoneCount
()
>
0
)
return
false
;
if
(
AI
.
Utils
.
IsTurn1OrMain2
()
&&
!
Meluseek_searched
)
if
(
Util
.
IsTurn1OrMain2
()
&&
!
Meluseek_searched
)
{
AI
.
SelectPlace
(
Zones
.
z5
);
ss_other_monster
=
true
;
...
...
@@ -2283,8 +2283,8 @@ namespace WindBot.Game.AI.Decks
public
bool
Linkuriboh_eff
()
{
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Linkuriboh
))
return
false
;
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Multifaker
))
return
false
;
if
(
Util
.
ChainContainsCard
(
CardId
.
Linkuriboh
))
return
false
;
if
(
Util
.
ChainContainsCard
(
CardId
.
Multifaker
))
return
false
;
if
(
Duel
.
Player
==
1
)
{
if
(
Card
.
Location
==
CardLocation
.
Grave
)
...
...
@@ -2311,7 +2311,7 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectPlace
(
Zones
.
z0
|
Zones
.
z4
);
return
true
;
}
else
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
else
if
(
Util
.
IsTurn1OrMain2
())
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Meluseek
});
ss_other_monster
=
true
;
...
...
@@ -2340,7 +2340,7 @@ namespace WindBot.Game.AI.Decks
{
List
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
List
<
ClientCard
>
list
=
Bot
.
GetMonsters
();
list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
list
.
Sort
(
CardContainer
.
CompareCardAttack
);
//list.Reverse();
bool
Meluseek_selected
=
false
;
bool
Silquitous_selected
=
false
;
...
...
@@ -2405,7 +2405,7 @@ namespace WindBot.Game.AI.Decks
public
bool
TripleBurstDragon_eff
()
{
if
(
ActivateDescription
!=
AI
.
Utils
.
GetStringId
(
CardId
.
TripleBurstDragon
,
0
))
return
false
;
if
(
ActivateDescription
!=
Util
.
GetStringId
(
CardId
.
TripleBurstDragon
,
0
))
return
false
;
return
(
Duel
.
LastChainPlayer
!=
0
);
}
...
...
@@ -2413,9 +2413,9 @@ namespace WindBot.Game.AI.Decks
{
if
(!
Enemy
.
HasInGraveyard
(
CardId
.
Raye
))
{
ClientCard
self_best
=
AI
.
Utils
.
GetBestBotMonster
(
true
);
ClientCard
self_best
=
Util
.
GetBestBotMonster
(
true
);
int
self_power
=
(
self_best
!=
null
)
?
self_best
.
Attack
:
0
;
ClientCard
enemy_best
=
AI
.
Utils
.
GetBestEnemyMonster
(
true
);
ClientCard
enemy_best
=
Util
.
GetBestEnemyMonster
(
true
);
int
enemy_power
=
(
enemy_best
!=
null
)
?
enemy_best
.
GetDefensePower
()
:
0
;
if
(
enemy_power
<=
self_power
)
return
false
;
Logger
.
DebugWriteLine
(
"Three: enemy: "
+
enemy_power
.
ToString
()
+
", bot: "
+
self_power
.
ToString
());
...
...
@@ -2440,7 +2440,7 @@ namespace WindBot.Game.AI.Decks
}
}
List
<
ClientCard
>
monsters
=
Bot
.
GetMonsters
();
monsters
.
Sort
(
AIFunctions
.
CompareCardAttack
);
monsters
.
Sort
(
CardContainer
.
CompareCardAttack
);
//monsters.Reverse();
foreach
(
ClientCard
card
in
monsters
)
{
...
...
@@ -2465,9 +2465,9 @@ namespace WindBot.Game.AI.Decks
{
if
(!
Enemy
.
HasInGraveyard
(
CardId
.
Raye
))
{
ClientCard
self_best
=
AI
.
Utils
.
GetBestBotMonster
(
true
);
ClientCard
self_best
=
Util
.
GetBestBotMonster
(
true
);
int
self_power
=
(
self_best
!=
null
)
?
self_best
.
Attack
:
0
;
ClientCard
enemy_best
=
AI
.
Utils
.
GetBestEnemyMonster
(
true
);
ClientCard
enemy_best
=
Util
.
GetBestEnemyMonster
(
true
);
int
enemy_power
=
(
enemy_best
!=
null
)
?
enemy_best
.
GetDefensePower
()
:
0
;
if
(
enemy_power
<
self_power
)
return
false
;
if
(
Bot
.
GetMonsterCount
()
<=
2
&&
enemy_power
>=
2401
)
return
false
;
...
...
@@ -2478,7 +2478,7 @@ namespace WindBot.Game.AI.Decks
}
List
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
List
<
ClientCard
>
monsters
=
Bot
.
GetMonsters
();
monsters
.
Sort
(
AIFunctions
.
CompareCardAttack
);
monsters
.
Sort
(
CardContainer
.
CompareCardAttack
);
//monsters.Reverse();
foreach
(
ClientCard
t
in
monsters
)
{
...
...
@@ -2515,9 +2515,9 @@ namespace WindBot.Game.AI.Decks
{
if
(
Duel
.
Phase
!=
DuelPhase
.
Main1
)
return
false
;
ClientCard
self_best
=
AI
.
Utils
.
GetBestBotMonster
(
true
);
ClientCard
self_best
=
Util
.
GetBestBotMonster
(
true
);
int
self_power
=
(
self_best
!=
null
)
?
self_best
.
Attack
:
0
;
ClientCard
enemy_best
=
AI
.
Utils
.
GetBestEnemyMonster
(
true
);
ClientCard
enemy_best
=
Util
.
GetBestEnemyMonster
(
true
);
int
enemy_power
=
(
enemy_best
!=
null
)
?
enemy_best
.
GetDefensePower
()
:
0
;
if
(
enemy_power
<
self_power
)
return
false
;
...
...
@@ -2528,7 +2528,7 @@ namespace WindBot.Game.AI.Decks
List
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
List
<
ClientCard
>
bot_monster
=
Bot
.
GetMonsters
();
bot_monster
.
Sort
(
AIFunctions
.
CompareCardAttack
);
bot_monster
.
Sort
(
CardContainer
.
CompareCardAttack
);
//bot_monster.Reverse();
int
link_count
=
0
;
foreach
(
ClientCard
card
in
bot_monster
)
...
...
@@ -2553,10 +2553,10 @@ namespace WindBot.Game.AI.Decks
public
bool
Borrelsword_eff
()
{
if
(
ActivateDescription
==
-
1
)
return
true
;
else
if
((
Duel
.
Phase
>
DuelPhase
.
Main1
&&
Duel
.
Phase
<
DuelPhase
.
Main2
)
||
AI
.
Utils
.
IsChainTarget
(
Card
))
else
if
((
Duel
.
Phase
>
DuelPhase
.
Main1
&&
Duel
.
Phase
<
DuelPhase
.
Main2
)
||
Util
.
IsChainTarget
(
Card
))
{
List
<
ClientCard
>
enemy_list
=
Enemy
.
GetMonsters
();
enemy_list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
enemy_list
.
Sort
(
CardContainer
.
CompareCardAttack
);
enemy_list
.
Reverse
();
foreach
(
ClientCard
card
in
enemy_list
)
{
...
...
@@ -2567,7 +2567,7 @@ namespace WindBot.Game.AI.Decks
}
}
List
<
ClientCard
>
bot_list
=
Bot
.
GetMonsters
();
bot_list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
bot_list
.
Sort
(
CardContainer
.
CompareCardAttack
);
//bot_list.Reverse();
foreach
(
ClientCard
card
in
bot_list
)
{
...
...
@@ -2590,9 +2590,9 @@ namespace WindBot.Game.AI.Decks
}
if
(!
Enemy
.
HasInGraveyard
(
CardId
.
Raye
))
{
ClientCard
self_best
=
AI
.
Utils
.
GetBestBotMonster
(
true
);
ClientCard
self_best
=
Util
.
GetBestBotMonster
(
true
);
int
self_power
=
(
self_best
!=
null
)
?
self_best
.
Attack
:
0
;
ClientCard
enemy_best
=
AI
.
Utils
.
GetBestEnemyMonster
(
true
);
ClientCard
enemy_best
=
Util
.
GetBestEnemyMonster
(
true
);
int
enemy_power
=
(
enemy_best
!=
null
)
?
enemy_best
.
GetDefensePower
()
:
0
;
Logger
.
DebugWriteLine
(
"Tuner: enemy: "
+
enemy_power
.
ToString
()
+
", bot: "
+
self_power
.
ToString
());
if
(
enemy_power
<
self_power
||
enemy_power
==
0
)
return
false
;
...
...
@@ -2671,7 +2671,7 @@ namespace WindBot.Game.AI.Decks
if
(
isAltergeist
(
Card
)
&&
Bot
.
HasInHandOrInSpellZone
(
CardId
.
Protocol
)
&&
Card
.
IsFacedown
())
return
true
;
bool
enemyBetter
=
AI
.
Utils
.
IsAllEnemyBetter
(
true
);
bool
enemyBetter
=
Util
.
IsAllEnemyBetter
(
true
);
if
(
Card
.
IsAttack
()
&&
enemyBetter
)
return
true
;
if
(
Card
.
IsDefense
()
&&
!
enemyBetter
)
...
...
@@ -2681,12 +2681,12 @@ namespace WindBot.Game.AI.Decks
public
bool
MonsterSet
()
{
if
(
AI
.
Utils
.
GetOneEnemyBetterThanMyBest
()
==
null
&&
Bot
.
GetMonsterCount
()
>
0
)
return
false
;
if
(
Util
.
GetOneEnemyBetterThanMyBest
()
==
null
&&
Bot
.
GetMonsterCount
()
>
0
)
return
false
;
if
(
Card
.
Level
>
4
)
return
false
;
int
rest_lp
=
Bot
.
LifePoints
;
int
count
=
Bot
.
GetMonsterCount
();
List
<
ClientCard
>
list
=
Enemy
.
GetMonsters
();
list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
list
.
Sort
(
CardContainer
.
CompareCardAttack
);
foreach
(
ClientCard
card
in
list
)
{
if
(!
card
.
HasPosition
(
CardPosition
.
Attack
))
continue
;
...
...
@@ -2712,7 +2712,7 @@ namespace WindBot.Game.AI.Decks
if
(
EvenlyMatched_ready
())
{
List
<
ClientCard
>
enemy_m
=
Enemy
.
GetMonsters
();
enemy_m
.
Sort
(
AIFunctions
.
CompareCardAttack
);
enemy_m
.
Sort
(
CardContainer
.
CompareCardAttack
);
//enemy_m.Reverse();
foreach
(
ClientCard
e_card
in
enemy_m
)
{
...
...
@@ -2748,7 +2748,7 @@ namespace WindBot.Game.AI.Decks
int
HIINT_TOGRAVE
=
504
;
if
(
max
==
1
&&
cards
[
0
].
Location
==
CardLocation
.
Deck
&&
AI
.
Utils
.
GetLastChainCard
()
!=
null
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
23002292
)
&&
Bot
.
GetRemainingCount
(
CardId
.
WakingtheDragon
,
1
)
>
0
)
&&
Util
.
GetLastChainCard
()
!=
null
&&
Util
.
GetLastChainCard
().
IsCode
(
23002292
)
&&
Bot
.
GetRemainingCount
(
CardId
.
WakingtheDragon
,
1
)
>
0
)
{
IList
<
ClientCard
>
result
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
card
in
cards
)
...
...
@@ -2762,14 +2762,14 @@ namespace WindBot.Game.AI.Decks
}
if
(
result
.
Count
>
0
)
return
result
;
}
else
if
(
AI
.
Utils
.
GetLastChainCard
()
!=
null
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
CardId
.
EvenlyMatched
)
&&
Duel
.
LastChainPlayer
!=
0
)
else
if
(
Util
.
GetLastChainCard
()
!=
null
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
EvenlyMatched
)
&&
Duel
.
LastChainPlayer
!=
0
)
{
Logger
.
DebugWriteLine
(
"EvenlyMatched: min="
+
min
.
ToString
()
+
", max="
+
max
.
ToString
());
}
else
if
(
cards
[
0
].
Location
==
CardLocation
.
Hand
&&
cards
[
cards
.
Count
-
1
].
Location
==
CardLocation
.
Hand
&&
(
hint
==
501
||
hint
==
HIINT_TOGRAVE
)
&&
min
==
max
)
{
if
(
Duel
.
LastChainPlayer
==
0
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
CardId
.
OneForOne
))
return
null
;
if
(
Duel
.
LastChainPlayer
==
0
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
OneForOne
))
return
null
;
Logger
.
DebugWriteLine
(
"Hand drop except OneForOne"
);
int
todrop
=
min
;
IList
<
ClientCard
>
result
=
new
List
<
ClientCard
>();
...
...
@@ -2807,7 +2807,7 @@ namespace WindBot.Game.AI.Decks
public
override
CardPosition
OnSelectPosition
(
int
cardId
,
IList
<
CardPosition
>
positions
)
{
if
(
AI
.
Utils
.
IsTurn1OrMain2
()
if
(
Util
.
IsTurn1OrMain2
()
&&
(
cardId
==
CardId
.
Meluseek
||
cardId
==
CardId
.
Silquitous
))
{
return
CardPosition
.
FaceUpDefence
;
...
...
Game/AI/Decks/BlackwingExecutor.cs
View file @
c2a94e8e
...
...
@@ -93,7 +93,7 @@ namespace WindBot.Game.AI.Decks
{
if
(
Card
.
Location
==
CardLocation
.
Hand
&&
Bot
.
HasInSpellZone
(
Card
.
Id
))
return
false
;
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
((
int
)
Card
.
Id
,
0
))
if
(
ActivateDescription
==
Util
.
GetStringId
((
int
)
Card
.
Id
,
0
))
AI
.
SelectCard
(
CardId
.
GaleTheWhirlwind
);
return
true
;
}
...
...
Game/AI/Decks/BlueEyesExecutor.cs
View file @
c2a94e8e
...
...
@@ -143,7 +143,7 @@ namespace WindBot.Game.AI.Decks
if
(!
Bot
.
HasInHand
(
CardId
.
WhiteDragon
))
result
.
AddRange
(
cards
.
Where
(
card
=>
card
.
IsCode
(
CardId
.
WhiteDragon
)).
Take
(
1
));
result
.
AddRange
(
cards
.
Where
(
card
=>
card
.
IsCode
(
CardId
.
AlternativeWhiteDragon
)));
return
AI
.
Utils
.
CheckSelectCount
(
result
,
cards
,
min
,
max
);
return
Util
.
CheckSelectCount
(
result
,
cards
,
min
,
max
);
}
Logger
.
DebugWriteLine
(
"Use default."
);
return
null
;
...
...
@@ -152,8 +152,8 @@ namespace WindBot.Game.AI.Decks
public
override
IList
<
ClientCard
>
OnSelectXyzMaterial
(
IList
<
ClientCard
>
cards
,
int
min
,
int
max
)
{
Logger
.
DebugWriteLine
(
"OnSelectXyzMaterial "
+
cards
.
Count
+
" "
+
min
+
" "
+
max
);
IList
<
ClientCard
>
result
=
AI
.
Utils
.
SelectPreferredCards
(
UsedAlternativeWhiteDragon
,
cards
,
min
,
max
);
return
AI
.
Utils
.
CheckSelectCount
(
result
,
cards
,
min
,
max
);
IList
<
ClientCard
>
result
=
Util
.
SelectPreferredCards
(
UsedAlternativeWhiteDragon
,
cards
,
min
,
max
);
return
Util
.
CheckSelectCount
(
result
,
cards
,
min
,
max
);
}
public
override
IList
<
ClientCard
>
OnSelectSynchroMaterial
(
IList
<
ClientCard
>
cards
,
int
sum
,
int
min
,
int
max
)
...
...
@@ -259,7 +259,7 @@ namespace WindBot.Game.AI.Decks
private
bool
AlternativeWhiteDragonEffect
()
{
ClientCard
target
=
AI
.
Utils
.
GetProblematicEnemyMonster
(
Card
.
GetDefensePower
());
ClientCard
target
=
Util
.
GetProblematicEnemyMonster
(
Card
.
GetDefensePower
());
if
(
target
!=
null
)
{
AI
.
SelectCard
(
target
);
...
...
@@ -268,7 +268,7 @@ namespace WindBot.Game.AI.Decks
}
if
(
CanDealWithUsedAlternativeWhiteDragon
())
{
target
=
AI
.
Utils
.
GetBestEnemyMonster
(
false
,
true
);
target
=
Util
.
GetBestEnemyMonster
(
false
,
true
);
AI
.
SelectCard
(
target
);
UsedAlternativeWhiteDragon
.
Add
(
Card
);
return
true
;
...
...
@@ -389,7 +389,7 @@ namespace WindBot.Game.AI.Decks
{
if
(
ActivateDescription
==
-
1
)
{
ClientCard
target
=
AI
.
Utils
.
GetBestEnemySpell
();
ClientCard
target
=
Util
.
GetBestEnemySpell
();
AI
.
SelectCard
(
target
);
return
true
;
}
...
...
@@ -405,7 +405,7 @@ namespace WindBot.Game.AI.Decks
&&
!
Bot
.
HasInGraveyard
(
CardId
.
DragonSpiritOfWhite
)
&&
!
Bot
.
HasInGraveyard
(
CardId
.
WhiteDragon
);
}
if
(
AI
.
Utils
.
IsChainTarget
(
Card
))
if
(
Util
.
IsChainTarget
(
Card
))
{
return
true
;
}
...
...
@@ -415,7 +415,7 @@ namespace WindBot.Game.AI.Decks
private
bool
BlueEyesSpiritDragonEffect
()
{
if
(
ActivateDescription
==
-
1
||
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
BlueEyesSpiritDragon
,
0
))
if
(
ActivateDescription
==
-
1
||
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
BlueEyesSpiritDragon
,
0
))
{
return
Duel
.
LastChainPlayer
==
1
;
}
...
...
@@ -426,7 +426,7 @@ namespace WindBot.Game.AI.Decks
}
else
{
if
(
AI
.
Utils
.
IsChainTarget
(
Card
))
if
(
Util
.
IsChainTarget
(
Card
))
{
AI
.
SelectCard
(
CardId
.
AzureEyesSilverDragon
);
return
true
;
...
...
@@ -437,7 +437,7 @@ namespace WindBot.Game.AI.Decks
private
bool
HopeHarbingerDragonTitanicGalaxyEffect
()
{
if
(
ActivateDescription
==
-
1
||
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
HopeHarbingerDragonTitanicGalaxy
,
0
))
if
(
ActivateDescription
==
-
1
||
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
HopeHarbingerDragonTitanicGalaxy
,
0
))
{
return
Duel
.
LastChainPlayer
==
1
;
}
...
...
@@ -446,7 +446,7 @@ namespace WindBot.Game.AI.Decks
private
bool
WhiteStoneOfAncientsEffect
()
{
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
WhiteStoneOfAncients
,
0
))
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
WhiteStoneOfAncients
,
0
))
{
if
(
Bot
.
HasInHand
(
CardId
.
TradeIn
)
&&
!
Bot
.
HasInHand
(
CardId
.
WhiteDragon
)
...
...
@@ -538,7 +538,7 @@ namespace WindBot.Game.AI.Decks
{
return
false
;
}
if
(
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
2999
,
false
))
if
(
Util
.
IsOneEnemyBetterThanValue
(
2999
,
false
))
{
return
true
;
}
...
...
@@ -561,7 +561,7 @@ namespace WindBot.Game.AI.Decks
}
if
(
Bot
.
HasInMonstersZone
(
CardId
.
GalaxyEyesPrimePhotonDragon
))
{
if
(!
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
4000
,
false
))
if
(!
Util
.
IsOneEnemyBetterThanValue
(
4000
,
false
))
{
AI
.
SelectCard
(
CardId
.
GalaxyEyesPrimePhotonDragon
);
return
true
;
...
...
@@ -572,7 +572,7 @@ namespace WindBot.Game.AI.Decks
private
bool
GalaxyEyesCipherBladeDragonSummon
()
{
if
(
Bot
.
HasInMonstersZone
(
CardId
.
GalaxyEyesFullArmorPhotonDragon
)
&&
AI
.
Utils
.
GetProblematicEnemyCard
()
!=
null
)
if
(
Bot
.
HasInMonstersZone
(
CardId
.
GalaxyEyesFullArmorPhotonDragon
)
&&
Util
.
GetProblematicEnemyCard
()
!=
null
)
{
AI
.
SelectCard
(
CardId
.
GalaxyEyesFullArmorPhotonDragon
);
return
true
;
...
...
@@ -622,13 +622,13 @@ namespace WindBot.Game.AI.Decks
private
bool
GalaxyEyesFullArmorPhotonDragonEffect
()
{
ClientCard
target
=
AI
.
Utils
.
GetProblematicEnemySpell
();
ClientCard
target
=
Util
.
GetProblematicEnemySpell
();
if
(
target
!=
null
)
{
AI
.
SelectCard
(
target
);
return
true
;
}
target
=
AI
.
Utils
.
GetProblematicEnemyMonster
();
target
=
Util
.
GetProblematicEnemyMonster
();
if
(
target
!=
null
)
{
AI
.
SelectCard
(
target
);
...
...
@@ -679,7 +679,7 @@ namespace WindBot.Game.AI.Decks
{
return
true
;
}
ClientCard
target
=
AI
.
Utils
.
GetProblematicEnemyCard
();
ClientCard
target
=
Util
.
GetProblematicEnemyCard
();
if
(
target
!=
null
)
{
AI
.
SelectCard
(
target
);
...
...
@@ -737,8 +737,8 @@ namespace WindBot.Game.AI.Decks
{
if
(
Duel
.
Phase
!=
DuelPhase
.
Main1
||
Duel
.
Turn
==
1
||
SoulChargeUsed
)
return
false
;
int
bestSelfAttack
=
AI
.
Utils
.
GetBestAttack
(
Bot
);
int
bestEnemyAttack
=
AI
.
Utils
.
GetBestPower
(
Enemy
);
int
bestSelfAttack
=
Util
.
GetBestAttack
(
Bot
);
int
bestEnemyAttack
=
Util
.
GetBestPower
(
Enemy
);
return
bestSelfAttack
<=
bestEnemyAttack
&&
bestEnemyAttack
>
2500
&&
bestEnemyAttack
<=
3100
;
}
...
...
@@ -856,7 +856,7 @@ namespace WindBot.Game.AI.Decks
private
bool
Repos
()
{
bool
enemyBetter
=
AI
.
Utils
.
IsAllEnemyBetter
(
true
);
bool
enemyBetter
=
Util
.
IsAllEnemyBetter
(
true
);
if
(
Card
.
IsAttack
()
&&
enemyBetter
)
return
true
;
...
...
Game/AI/Decks/BlueEyesMaxDragonExecutor.cs
View file @
c2a94e8e
...
...
@@ -128,32 +128,32 @@ namespace WindBot.Game.AI.Decks
{
if
(
Duel
.
LastChainPlayer
==
1
)
{
ClientCard
lastCard
=
AI
.
Utils
.
GetLastChainCard
();
ClientCard
lastCard
=
Util
.
GetLastChainCard
();
if
(
lastCard
.
IsCode
(
CardId
.
MaxxC
))
{
AI
.
SelectCard
(
CardId
.
MaxxC
);
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
TheMelodyOfAwakeningDragon
))
if
(
Util
.
ChainContainsCard
(
CardId
.
TheMelodyOfAwakeningDragon
))
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
))
if
(
Util
.
ChainContainsCard
(
CardId
.
TheMelodyOfAwakeningDragon
))
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
))
if
(
Util
.
ChainContainsCard
(
CardId
.
TheMelodyOfAwakeningDragon
))
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
))
if
(
Util
.
ChainContainsCard
(
CardId
.
TheMelodyOfAwakeningDragon
))
AI
.
SelectNextCard
(
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesChaosMaxDragon
,
CardId
.
BlueEyesAlternativeWhiteDragon
);
return
UniqueFaceupSpell
();
}
...
...
@@ -170,9 +170,9 @@ namespace WindBot.Game.AI.Decks
}
else
{
if
(
AI
.
Utils
.
GetProblematicEnemyMonster
(
3000
,
true
)!=
null
)
if
(
Util
.
GetProblematicEnemyMonster
(
3000
,
true
)!=
null
)
{
AI
.
SelectCard
(
AI
.
Utils
.
GetProblematicEnemyMonster
(
3000
,
true
));
AI
.
SelectCard
(
Util
.
GetProblematicEnemyMonster
(
3000
,
true
));
return
true
;
}
}
...
...
@@ -464,7 +464,7 @@ namespace WindBot.Game.AI.Decks
private
bool
Linkuriboheff
()
{
if
(
Duel
.
LastChainPlayer
==
0
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
CardId
.
Linkuriboh
))
return
false
;
if
(
Duel
.
LastChainPlayer
==
0
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
Linkuriboh
))
return
false
;
return
true
;
}
private
bool
BirrelswordDragonsp
()
...
...
@@ -498,11 +498,11 @@ namespace WindBot.Game.AI.Decks
private
bool
BirrelswordDragoneff
()
{
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
BirrelswordDragon
,
0
))
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
BirrelswordDragon
,
0
))
{
if
(
AI
.
Utils
.
IsChainTarget
(
Card
)
&&
AI
.
Utils
.
GetBestEnemyMonster
(
true
,
true
)
!=
null
)
if
(
Util
.
IsChainTarget
(
Card
)
&&
Util
.
GetBestEnemyMonster
(
true
,
true
)
!=
null
)
{
AI
.
SelectCard
(
AI
.
Utils
.
GetBestEnemyMonster
(
true
,
true
));
AI
.
SelectCard
(
Util
.
GetBestEnemyMonster
(
true
,
true
));
return
true
;
}
if
(
Duel
.
Player
==
1
&&
Bot
.
BattlingMonster
==
Card
)
...
...
Game/AI/Decks/ChainBurnExecutor.cs
View file @
c2a94e8e
...
...
@@ -415,7 +415,7 @@ namespace WindBot.Game.AI.Decks
private
bool
must_chain
()
{
if
(
AI
.
Utils
.
IsChainTarget
(
Card
))
return
true
;
if
(
Util
.
IsChainTarget
(
Card
))
return
true
;
foreach
(
ClientCard
card
in
Enemy
.
GetSpells
())
{
if
(
card
.
IsCode
(
CardId
.
HarpiesFeatherDuster
)&&
card
.
IsFaceup
())
...
...
@@ -509,7 +509,7 @@ namespace WindBot.Game.AI.Decks
}
private
bool
BattleFadereff
()
{
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
BlazingMirrorForce
)
||
AI
.
Utils
.
ChainContainsCard
(
CardId
.
MagicCylinder
))
if
(
Util
.
ChainContainsCard
(
CardId
.
BlazingMirrorForce
)
||
Util
.
ChainContainsCard
(
CardId
.
MagicCylinder
))
return
false
;
if
(
prevent_used
||
Duel
.
Player
==
0
)
return
false
;
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
...
...
@@ -545,11 +545,11 @@ namespace WindBot.Game.AI.Decks
}
public
bool
Ring_act
()
{
if
(
Duel
.
LastChainPlayer
==
0
&&
AI
.
Utils
.
GetLastChainCard
()
!=
null
)
return
false
;
ClientCard
target
=
AI
.
Utils
.
GetProblematicEnemyMonster
();
if
(
target
==
null
&&
AI
.
Utils
.
IsChainTarget
(
Card
))
if
(
Duel
.
LastChainPlayer
==
0
&&
Util
.
GetLastChainCard
()
!=
null
)
return
false
;
ClientCard
target
=
Util
.
GetProblematicEnemyMonster
();
if
(
target
==
null
&&
Util
.
IsChainTarget
(
Card
))
{
target
=
AI
.
Utils
.
GetBestEnemyMonster
(
true
,
true
);
target
=
Util
.
GetBestEnemyMonster
(
true
,
true
);
}
if
(
target
!=
null
)
{
...
...
@@ -569,7 +569,7 @@ namespace WindBot.Game.AI.Decks
count
++;
}
bool
Demiseused
=
AI
.
Utils
.
ChainContainsCard
(
CardId
.
CardOfDemise
);
bool
Demiseused
=
Util
.
ChainContainsCard
(
CardId
.
CardOfDemise
);
if
(
drawfirst
)
return
UniqueFaceupSpell
();
if
(
DefaultOnBecomeTarget
()
&&
count
>
1
)
return
true
;
if
(
Demiseused
)
return
false
;
...
...
@@ -724,8 +724,8 @@ namespace WindBot.Game.AI.Decks
return
true
;
if
(
GetTotalATK
(
newlist
)
/
2
>=
Enemy
.
LifePoints
&&
Bot
.
HasInSpellZone
(
CardId
.
BlazingMirrorForce
))
return
false
;
if
(
AI
.
Utils
.
GetLastChainCard
()
==
null
)
return
true
;
if
(
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
CardId
.
Linkuriboh
))
return
false
;
if
(
Util
.
GetLastChainCard
()
==
null
)
return
true
;
if
(
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
Linkuriboh
))
return
false
;
return
true
;
}
public
bool
MonsterRepos
()
...
...
Game/AI/Decks/CyberDragonExecutor.cs
View file @
c2a94e8e
...
...
@@ -126,7 +126,7 @@ namespace WindBot.Game.AI.Decks
private
bool
EvolutionBurstEffect
()
{
ClientCard
bestMy
=
Bot
.
GetMonsters
().
GetHighestAttackMonster
();
if
(
bestMy
==
null
||
!
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
bestMy
.
Attack
,
false
))
if
(
bestMy
==
null
||
!
Util
.
IsOneEnemyBetterThanValue
(
bestMy
.
Attack
,
false
))
return
false
;
else
AI
.
SelectCard
(
Enemy
.
MonsterZone
.
GetHighestAttackMonster
());
...
...
@@ -142,7 +142,7 @@ namespace WindBot.Game.AI.Decks
private
bool
ArmoredCybernSet
()
{
if
(
CyberDragonInHand
()
&&
(
Bot
.
GetMonsterCount
()
==
0
&&
Enemy
.
GetMonsterCount
()
!=
0
)
||
(
Bot
.
HasInHand
(
CardId
.
CyberDragonDrei
)
||
Bot
.
HasInHand
(
CardId
.
CyberPhoenix
))
&&
!
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
1800
,
true
))
if
(
CyberDragonInHand
()
&&
(
Bot
.
GetMonsterCount
()
==
0
&&
Enemy
.
GetMonsterCount
()
!=
0
)
||
(
Bot
.
HasInHand
(
CardId
.
CyberDragonDrei
)
||
Bot
.
HasInHand
(
CardId
.
CyberPhoenix
))
&&
!
Util
.
IsOneEnemyBetterThanValue
(
1800
,
true
))
return
false
;
return
true
;
}
...
...
@@ -151,7 +151,7 @@ namespace WindBot.Game.AI.Decks
{
if
(
Bot
.
GetCountCardInZone
(
Bot
.
Hand
,
CardId
.
CyberDragon
)
+
Bot
.
GetCountCardInZone
(
Bot
.
MonsterZone
,
CardId
.
CyberDragon
)
+
Bot
.
GetCountCardInZone
(
Bot
.
MonsterZone
,
CardId
.
CyberDragonCore
)
>=
1
&&
Bot
.
HasInHand
(
CardId
.
Polymerization
)
||
Bot
.
GetCountCardInZone
(
Bot
.
Hand
,
CardId
.
CyberDragon
)
+
Bot
.
GetCountCardInZone
(
Bot
.
MonsterZone
,
CardId
.
CyberDragon
)
+
Bot
.
GetCountCardInZone
(
Bot
.
Graveyard
,
CardId
.
CyberDragon
)
+
Bot
.
GetCountCardInZone
(
Bot
.
Graveyard
,
CardId
.
CyberDragonCore
)
>=
1
&&
Bot
.
HasInHand
(
CardId
.
PowerBond
))
return
true
;
if
(
CyberDragonInHand
()
&&
(
Bot
.
GetMonsterCount
()
==
0
&&
Enemy
.
GetMonsterCount
()
!=
0
)
||
(
Bot
.
HasInHand
(
CardId
.
CyberDragonDrei
)
||
Bot
.
HasInHand
(
CardId
.
CyberPhoenix
))
&&
!
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
1800
,
true
))
if
(
CyberDragonInHand
()
&&
(
Bot
.
GetMonsterCount
()
==
0
&&
Enemy
.
GetMonsterCount
()
!=
0
)
||
(
Bot
.
HasInHand
(
CardId
.
CyberDragonDrei
)
||
Bot
.
HasInHand
(
CardId
.
CyberPhoenix
))
&&
!
Util
.
IsOneEnemyBetterThanValue
(
1800
,
true
))
return
false
;
return
true
;
}
...
...
@@ -167,8 +167,8 @@ namespace WindBot.Game.AI.Decks
return
true
;
else
if
(
Card
.
Location
==
CardLocation
.
SpellZone
)
{
if
(
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
Bot
.
GetMonsters
().
GetHighestAttackMonster
().
Attack
,
true
))
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
ArmoredCybern
,
2
))
if
(
Util
.
IsOneEnemyBetterThanValue
(
Bot
.
GetMonsters
().
GetHighestAttackMonster
().
Attack
,
true
))
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
ArmoredCybern
,
2
))
return
true
;
return
false
;
}
...
...
Game/AI/Decks/DarkMagicianExecutor.cs
View file @
c2a94e8e
...
...
@@ -235,7 +235,7 @@ namespace WindBot.Game.AI.Decks
bool
CrystalWingSynchroDragon_used
=
false
;
public
override
void
OnNewPhase
()
{
//
AI.Utils
.UpdateLinkedZone();
//
Util
.UpdateLinkedZone();
//Logger.DebugWriteLine("Zones.CheckLinkedPointZones= " + Zones.CheckLinkedPointZones);
//Logger.DebugWriteLine("Zones.CheckMutualEnemyZoneCount= " + Zones.CheckMutualEnemyZoneCount);
plan_C
=
false
;
...
...
@@ -478,12 +478,12 @@ namespace WindBot.Game.AI.Decks
private
bool
OddEyesAbsoluteDragoneff
()
{
Logger
.
DebugWriteLine
(
"OddEyesAbsoluteDragonef 1"
);
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
/*ActivateDescription ==
AI.Utils
.GetStringId(CardId.OddEyesAbsoluteDragon, 0)*/
)
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
/*ActivateDescription ==
Util
.GetStringId(CardId.OddEyesAbsoluteDragon, 0)*/
)
{
Logger
.
DebugWriteLine
(
"OddEyesAbsoluteDragonef 2"
);
return
Duel
.
Player
==
1
;
}
else
if
(
Card
.
Location
==
CardLocation
.
Grave
/*ActivateDescription ==
AI.Utils
.GetStringId(CardId.OddEyesAbsoluteDragon, 0)*/
)
else
if
(
Card
.
Location
==
CardLocation
.
Grave
/*ActivateDescription ==
Util
.GetStringId(CardId.OddEyesAbsoluteDragon, 0)*/
)
{
Logger
.
DebugWriteLine
(
"OddEyesAbsoluteDragonef 3"
);
AI
.
SelectCard
(
CardId
.
OddEyesWingDragon
);
...
...
@@ -501,8 +501,8 @@ namespace WindBot.Game.AI.Decks
private
bool
ChainEnemy
()
{
if
(
AI
.
Utils
.
GetLastChainCard
()
!=
null
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
CardId
.
UpstartGoblin
))
if
(
Util
.
GetLastChainCard
()
!=
null
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
UpstartGoblin
))
return
false
;
return
Duel
.
LastChainPlayer
==
1
;
}
...
...
@@ -589,7 +589,7 @@ namespace WindBot.Game.AI.Decks
private bool Linkuriboheff()
{
if (Duel.LastChainPlayer == 0 &&
AI.Utils
.GetLastChainCard().IsCode(CardId.Linkuriboh)) return false;
if (Duel.LastChainPlayer == 0 &&
Util
.GetLastChainCard().IsCode(CardId.Linkuriboh)) return false;
if (Bot.HasInMonstersZone(CardId.WindwitchSnowBell)) return false;
return true;
}
...
...
@@ -617,7 +617,7 @@ namespace WindBot.Game.AI.Decks
}
return true;
};
ClientCard BestEnemy =
AI.Utils
.GetBestEnemyMonster(true,true);
ClientCard BestEnemy =
Util
.GetBestEnemyMonster(true,true);
if (BestEnemy == null || BestEnemy.HasPosition(CardPosition.FaceDown)) return false;
AI.SelectCard(BestEnemy);
return true;
...
...
@@ -641,12 +641,12 @@ namespace WindBot.Game.AI.Decks
magician
.
Add
(
check
);
}
}
if
(
AI
.
Utils
.
IsChainTarget
(
Card
)
&&
Bot
.
GetMonsterCount
()
==
0
)
if
(
Util
.
IsChainTarget
(
Card
)
&&
Bot
.
GetMonsterCount
()
==
0
)
{
AI
.
SelectYesNo
(
false
);
return
true
;
}
if
(
AI
.
Utils
.
ChainCountPlayer
(
0
)
>
0
)
return
false
;
if
(
Util
.
ChainCountPlayer
(
0
)
>
0
)
return
false
;
if
(
Enemy
.
HasInSpellZone
(
CardId
.
HarpiesFeatherDuster
)
&&
Card
.
IsFacedown
())
return
false
;
...
...
@@ -782,7 +782,7 @@ namespace WindBot.Game.AI.Decks
{
foreach
(
ClientCard
check
in
Enemy
.
GetSpells
())
{
if
(
AI
.
Utils
.
GetLastChainCard
()
==
check
)
if
(
Util
.
GetLastChainCard
()
==
check
)
{
spell
.
Add
(
check
);
spell_act
=
true
;
...
...
@@ -804,11 +804,11 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
spell
);
return
true
;
}
if
(
AI
.
Utils
.
IsChainTarget
(
Card
))
if
(
Util
.
IsChainTarget
(
Card
))
{
AI
.
SelectPlace
(
Zones
.
z0
|
Zones
.
z4
);
AI
.
SelectCard
(
CardId
.
DarkMagician
);
ClientCard
check
=
AI
.
Utils
.
GetOneEnemyBetterThanValue
(
2500
,
true
);
ClientCard
check
=
Util
.
GetOneEnemyBetterThanValue
(
2500
,
true
);
if
(
check
!=
null
)
AI
.
SelectNextCard
(
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
);
else
...
...
@@ -820,7 +820,7 @@ namespace WindBot.Game.AI.Decks
{
AI
.
SelectPlace
(
Zones
.
z0
|
Zones
.
z4
);
AI
.
SelectCard
(
CardId
.
DarkMagician
);
ClientCard
check
=
AI
.
Utils
.
GetOneEnemyBetterThanValue
(
2500
,
true
);
ClientCard
check
=
Util
.
GetOneEnemyBetterThanValue
(
2500
,
true
);
if
(
check
!=
null
)
AI
.
SelectNextCard
(
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
);
else
...
...
@@ -832,7 +832,7 @@ namespace WindBot.Game.AI.Decks
{
AI
.
SelectPlace
(
Zones
.
z0
|
Zones
.
z4
);
AI
.
SelectCard
(
CardId
.
DarkMagician
);
ClientCard
check
=
AI
.
Utils
.
GetOneEnemyBetterThanValue
(
2500
,
true
);
ClientCard
check
=
Util
.
GetOneEnemyBetterThanValue
(
2500
,
true
);
if
(
check
!=
null
)
AI
.
SelectNextCard
(
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
);
else
...
...
@@ -846,7 +846,7 @@ namespace WindBot.Game.AI.Decks
{
AI
.
SelectPlace
(
Zones
.
z0
|
Zones
.
z4
);
AI
.
SelectCard
(
CardId
.
DarkMagician
);
ClientCard
check
=
AI
.
Utils
.
GetOneEnemyBetterThanValue
(
2500
,
true
);
ClientCard
check
=
Util
.
GetOneEnemyBetterThanValue
(
2500
,
true
);
if
(
check
!=
null
)
AI
.
SelectNextCard
(
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
);
else
...
...
@@ -860,7 +860,7 @@ namespace WindBot.Game.AI.Decks
{
AI
.
SelectPlace
(
Zones
.
z0
|
Zones
.
z4
);
AI
.
SelectCard
(
CardId
.
DarkMagician
);
ClientCard
check
=
AI
.
Utils
.
GetOneEnemyBetterThanValue
(
2500
,
true
);
ClientCard
check
=
Util
.
GetOneEnemyBetterThanValue
(
2500
,
true
);
if
(
check
!=
null
)
AI
.
SelectNextCard
(
CardId
.
ApprenticeLllusionMagician
,
CardId
.
DarkMagician
,
CardId
.
MagicianOfLllusion
);
else
...
...
@@ -884,9 +884,9 @@ namespace WindBot.Game.AI.Decks
{
if
(
magician_sp
)
{
AI
.
SelectCard
(
AI
.
Utils
.
GetBestEnemyCard
(
false
,
true
));
if
(
AI
.
Utils
.
GetBestEnemyCard
(
false
,
true
)
!=
null
)
Logger
.
DebugWriteLine
(
"*************SelectCard= "
+
AI
.
Utils
.
GetBestEnemyCard
(
false
,
true
).
Id
);
AI
.
SelectCard
(
Util
.
GetBestEnemyCard
(
false
,
true
));
if
(
Util
.
GetBestEnemyCard
(
false
,
true
)
!=
null
)
Logger
.
DebugWriteLine
(
"*************SelectCard= "
+
Util
.
GetBestEnemyCard
(
false
,
true
).
Id
);
magician_sp
=
false
;
}
}
...
...
@@ -932,7 +932,7 @@ namespace WindBot.Game.AI.Decks
}
if
(
ghost_count
!=
ghost_done
)
{
if
(
Duel
.
CurrentChain
.
Count
>=
2
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
0
))
if
(
Duel
.
CurrentChain
.
Count
>=
2
&&
Util
.
GetLastChainCard
().
IsCode
(
0
))
{
AI
.
SelectCard
(
CardId
.
MagiciansRod
);
AI
.
SelectNextCard
(
CardId
.
DarkMagician
,
CardId
.
DarkMagician
);
...
...
@@ -942,7 +942,7 @@ namespace WindBot.Game.AI.Decks
int
count
=
0
;
foreach
(
ClientCard
m
in
Bot
.
GetMonsters
())
{
if
(
AI
.
Utils
.
IsChainTarget
(
m
))
if
(
Util
.
IsChainTarget
(
m
))
{
count
++;
target
=
m
;
...
...
@@ -1128,14 +1128,14 @@ namespace WindBot.Game.AI.Decks
if
(
Duel
.
Turn
!=
1
)
{
if
(
Duel
.
Phase
==
DuelPhase
.
Main1
&&
Enemy
.
GetSpellCountWithoutField
()
==
0
&&
AI
.
Utils
.
GetBestEnemyMonster
(
true
,
true
)
==
null
)
Util
.
GetBestEnemyMonster
(
true
,
true
)
==
null
)
return
false
;
if
(
Duel
.
Phase
==
DuelPhase
.
Main1
&&
Enemy
.
GetSpellCountWithoutField
()
==
0
&&
AI
.
Utils
.
GetBestEnemyMonster
().
IsFacedown
())
Util
.
GetBestEnemyMonster
().
IsFacedown
())
return
true
;
if
(
Duel
.
Phase
==
DuelPhase
.
Main1
&&
Enemy
.
GetSpellCountWithoutField
()
==
0
&&
AI
.
Utils
.
GetBestBotMonster
(
true
)
!=
null
&&
AI
.
Utils
.
GetBestBotMonster
(
true
).
Attack
>
AI
.
Utils
.
GetBestEnemyMonster
(
true
).
Attack
)
Util
.
GetBestBotMonster
(
true
)
!=
null
&&
Util
.
GetBestBotMonster
(
true
).
Attack
>
Util
.
GetBestEnemyMonster
(
true
).
Attack
)
return
false
;
}
return
true
;
...
...
@@ -1209,7 +1209,7 @@ namespace WindBot.Game.AI.Decks
}
private
bool
ApprenticeLllusionMagicianeff
()
{
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
ApprenticeLllusionMagician
))
return
false
;
if
(
Util
.
ChainContainsCard
(
CardId
.
ApprenticeLllusionMagician
))
return
false
;
if
(
Duel
.
Phase
==
DuelPhase
.
Battle
||
Duel
.
Phase
==
DuelPhase
.
BattleStart
||
Duel
.
Phase
==
DuelPhase
.
BattleStep
||
...
...
@@ -1434,9 +1434,9 @@ namespace WindBot.Game.AI.Decks
IList
<
ClientCard
>
list_1
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
if
(
AI
.
Utils
.
GetWorstBotMonster
(
true
)
!=
null
)
if
(
Util
.
GetWorstBotMonster
(
true
)
!=
null
)
{
if
(
monster
.
IsAttack
()
&&
monster
.
Id
!=
AI
.
Utils
.
GetWorstBotMonster
(
true
).
Id
)
if
(
monster
.
IsAttack
()
&&
monster
.
Id
!=
Util
.
GetWorstBotMonster
(
true
).
Id
)
list_1
.
Add
(
monster
);
}
}
...
...
@@ -1477,7 +1477,7 @@ namespace WindBot.Game.AI.Decks
private
bool
BigEyesp
()
{
if
(
plan_C
)
return
false
;
if
(
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
2500
,
false
)
&&
if
(
Util
.
IsOneEnemyBetterThanValue
(
2500
,
false
)
&&
!
Bot
.
HasInHandOrHasInMonstersZone
(
CardId
.
ApprenticeLllusionMagician
))
{
//AI.SelectPlace(Zones.z5, Zones.ExtraMonsterZones);
...
...
@@ -1489,7 +1489,7 @@ namespace WindBot.Game.AI.Decks
private
bool
BigEyeeff
()
{
ClientCard
target
=
AI
.
Utils
.
GetBestEnemyMonster
(
false
,
true
);
ClientCard
target
=
Util
.
GetBestEnemyMonster
(
false
,
true
);
if
(
target
!=
null
&&
target
.
Attack
>=
2500
)
{
AI
.
SelectCard
(
CardId
.
DarkMagician
);
...
...
@@ -1502,7 +1502,7 @@ namespace WindBot.Game.AI.Decks
private
bool
Dracossacksp
()
{
if
(
plan_C
)
return
false
;
if
(
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
2500
,
false
)
&&
if
(
Util
.
IsOneEnemyBetterThanValue
(
2500
,
false
)
&&
!
Bot
.
HasInHandOrHasInMonstersZone
(
CardId
.
ApprenticeLllusionMagician
))
{
//AI.SelectPlace(Zones.z5, Zones.ExtraMonsterZones);
...
...
@@ -1514,13 +1514,13 @@ namespace WindBot.Game.AI.Decks
private
bool
Dracossackeff
()
{
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
Dracossack
,
0
))
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
Dracossack
,
0
))
{
AI
.
SelectCard
(
CardId
.
DarkMagician
);
return
true
;
}
ClientCard
target
=
AI
.
Utils
.
GetBestEnemyCard
(
false
,
true
);
ClientCard
target
=
Util
.
GetBestEnemyCard
(
false
,
true
);
if
(
target
!=
null
)
{
AI
.
SelectCard
(
CardId
.
Dracossack
+
1
);
...
...
@@ -1624,11 +1624,11 @@ namespace WindBot.Game.AI.Decks
Logger.DebugWriteLine("++++++++SpellZone[" + i + "]= " + Bot.SpellZone[i].Id);
}*/
if
((
Duel
.
CurrentChain
.
Count
>=
1
&&
AI
.
Utils
.
GetLastChainCard
().
Id
==
0
)
||
(
Duel
.
CurrentChain
.
Count
==
2
&&
!
AI
.
Utils
.
ChainContainPlayer
(
0
)
&&
Duel
.
CurrentChain
[
0
].
Id
==
0
))
if
((
Duel
.
CurrentChain
.
Count
>=
1
&&
Util
.
GetLastChainCard
().
Id
==
0
)
||
(
Duel
.
CurrentChain
.
Count
==
2
&&
!
Util
.
ChainContainPlayer
(
0
)
&&
Duel
.
CurrentChain
[
0
].
Id
==
0
))
{
Logger
.
DebugWriteLine
(
"current chain = "
+
Duel
.
CurrentChain
.
Count
);
Logger
.
DebugWriteLine
(
"******last chain card= "
+
AI
.
Utils
.
GetLastChainCard
().
Id
);
Logger
.
DebugWriteLine
(
"******last chain card= "
+
Util
.
GetLastChainCard
().
Id
);
int
maxxc_count
=
0
;
foreach
(
ClientCard
check
in
Enemy
.
Graveyard
)
{
...
...
@@ -1637,7 +1637,7 @@ namespace WindBot.Game.AI.Decks
}
if
(
maxxc_count
!=
maxxc_done
)
{
Logger
.
DebugWriteLine
(
"************************last chain card= "
+
AI
.
Utils
.
GetLastChainCard
().
Id
);
Logger
.
DebugWriteLine
(
"************************last chain card= "
+
Util
.
GetLastChainCard
().
Id
);
maxxc_used
=
true
;
}
int
lockbird_count
=
0
;
...
...
@@ -1648,7 +1648,7 @@ namespace WindBot.Game.AI.Decks
}
if
(
lockbird_count
!=
lockbird_done
)
{
Logger
.
DebugWriteLine
(
"************************last chain card= "
+
AI
.
Utils
.
GetLastChainCard
().
Id
);
Logger
.
DebugWriteLine
(
"************************last chain card= "
+
Util
.
GetLastChainCard
().
Id
);
lockbird_used
=
true
;
}
int
ghost_count
=
0
;
...
...
@@ -1659,10 +1659,10 @@ namespace WindBot.Game.AI.Decks
}
if
(
ghost_count
!=
ghost_done
)
{
Logger
.
DebugWriteLine
(
"************************last chain card= "
+
AI
.
Utils
.
GetLastChainCard
().
Id
);
Logger
.
DebugWriteLine
(
"************************last chain card= "
+
Util
.
GetLastChainCard
().
Id
);
ghost_used
=
true
;
}
if
(
ghost_used
&&
AI
.
Utils
.
ChainContainsCard
(
CardId
.
WindwitchGlassBell
))
if
(
ghost_used
&&
Util
.
ChainContainsCard
(
CardId
.
WindwitchGlassBell
))
{
AI
.
SelectCard
(
CardId
.
WindwitchIceBell
);
Logger
.
DebugWriteLine
(
"***********WindwitchGlassBell*********************"
);
...
...
Game/AI/Decks/DragunityExecutor.cs
View file @
c2a94e8e
...
...
@@ -170,7 +170,7 @@ namespace WindBot.Game.AI.Decks
break;
}
}
if (!hasRealMonster ||
AI.Utils
.GetProblematicCard() != null)*/
if (!hasRealMonster ||
Util
.GetProblematicCard() != null)*/
needId
=
CardId
.
DragunityDux
;
}
...
...
@@ -200,7 +200,7 @@ namespace WindBot.Game.AI.Decks
else
option
=
1
;
if
(
ActivateDescription
!=
AI
.
Utils
.
GetStringId
(
CardId
.
DragonRavine
,
option
))
if
(
ActivateDescription
!=
Util
.
GetStringId
(
CardId
.
DragonRavine
,
option
))
return
false
;
AI
.
SelectCard
(
tributeId
);
...
...
@@ -254,7 +254,7 @@ namespace WindBot.Game.AI.Decks
private
bool
MonsterReborn
()
{
List
<
ClientCard
>
cards
=
new
List
<
ClientCard
>(
Bot
.
Graveyard
);
cards
.
Sort
(
AIFunctions
.
CompareCardAttack
);
cards
.
Sort
(
CardContainer
.
CompareCardAttack
);
ClientCard
selectedCard
=
null
;
for
(
int
i
=
cards
.
Count
-
1
;
i
>=
0
;
--
i
)
{
...
...
@@ -270,7 +270,7 @@ namespace WindBot.Game.AI.Decks
}
}
cards
=
new
List
<
ClientCard
>(
Enemy
.
Graveyard
);
cards
.
Sort
(
AIFunctions
.
CompareCardAttack
);
cards
.
Sort
(
CardContainer
.
CompareCardAttack
);
for
(
int
i
=
cards
.
Count
-
1
;
i
>=
0
;
--
i
)
{
ClientCard
card
=
cards
[
i
];
...
...
@@ -333,16 +333,16 @@ namespace WindBot.Game.AI.Decks
private
bool
ScrapDragonSummon
()
{
//if (
AI.Utils
.IsOneEnemyBetterThanValue(2500, true))
//if (
Util
.IsOneEnemyBetterThanValue(2500, true))
// return true;
ClientCard
invincible
=
AI
.
Utils
.
GetProblematicEnemyCard
(
3000
);
ClientCard
invincible
=
Util
.
GetProblematicEnemyCard
(
3000
);
return
invincible
!=
null
;
}
private
bool
ScrapDragonEffect
()
{
ClientCard
invincible
=
AI
.
Utils
.
GetProblematicEnemyCard
(
3000
);
if
(
invincible
==
null
&&
!
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
2800
-
1
,
false
))
ClientCard
invincible
=
Util
.
GetProblematicEnemyCard
(
3000
);
if
(
invincible
==
null
&&
!
Util
.
IsOneEnemyBetterThanValue
(
2800
-
1
,
false
))
return
false
;
int
tributeId
=
-
1
;
...
...
@@ -362,7 +362,7 @@ namespace WindBot.Game.AI.Decks
tributeId
=
CardId
.
DragonRavine
;
List
<
ClientCard
>
monsters
=
Enemy
.
GetMonsters
();
monsters
.
Sort
(
AIFunctions
.
CompareCardAttack
);
monsters
.
Sort
(
CardContainer
.
CompareCardAttack
);
ClientCard
destroyCard
=
invincible
;
if
(
destroyCard
==
null
)
...
...
@@ -432,7 +432,7 @@ namespace WindBot.Game.AI.Decks
||
Bot
.
HasInHand
(
CardId
.
DragunitySpearOfDestiny
))
{
List
<
ClientCard
>
monster_sorted
=
Bot
.
GetMonsters
();
monster_sorted
.
Sort
(
AIFunctions
.
CompareCardAttack
);
monster_sorted
.
Sort
(
CardContainer
.
CompareCardAttack
);
foreach
(
ClientCard
monster
in
monster_sorted
)
{
AI
.
SelectMaterials
(
monster
);
...
...
Game/AI/Decks/FrogExecutor.cs
View file @
c2a94e8e
...
...
@@ -87,7 +87,7 @@ namespace WindBot.Game.AI.Decks
private
bool
SwapFrogSummon
()
{
int
atk
=
Card
.
Attack
+
GetSpellBonus
();
if
(
AI
.
Utils
.
IsAllEnemyBetterThanValue
(
atk
,
true
))
if
(
Util
.
IsAllEnemyBetterThanValue
(
atk
,
true
))
return
false
;
AI
.
SelectCard
(
CardId
.
Ronintoadin
);
...
...
@@ -120,7 +120,7 @@ namespace WindBot.Game.AI.Decks
{
m_flipFlopFrogSummoned
=
-
1
;
List
<
ClientCard
>
monsters
=
Enemy
.
GetMonsters
();
monsters
.
Sort
(
AIFunctions
.
CompareCardAttack
);
monsters
.
Sort
(
CardContainer
.
CompareCardAttack
);
monsters
.
Reverse
();
AI
.
SelectCard
(
monsters
);
return
true
;
...
...
@@ -144,7 +144,7 @@ namespace WindBot.Game.AI.Decks
{
int
atk
=
Card
.
Attack
+
GetSpellBonus
();
if
(
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
atk
,
true
))
if
(
Util
.
IsOneEnemyBetterThanValue
(
atk
,
true
))
return
false
;
if
(
Card
.
IsCode
(
CardId
.
SwapFrog
))
...
...
@@ -156,7 +156,7 @@ namespace WindBot.Game.AI.Decks
{
List
<
int
>
cards
=
new
List
<
int
>();
if
(
AI
.
Utils
.
IsOneEnemyBetter
())
if
(
Util
.
IsOneEnemyBetter
())
{
cards
.
Add
(
CardId
.
FlipFlopFrog
);
}
...
...
@@ -213,7 +213,7 @@ namespace WindBot.Game.AI.Decks
if
(
Card
.
IsCode
(
CardId
.
DewdarkOfTheIceBarrier
))
return
Card
.
IsDefense
();
bool
enemyBetter
=
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
Card
.
Attack
+
(
Card
.
IsFacedown
()
?
GetSpellBonus
()
:
0
),
true
);
bool
enemyBetter
=
Util
.
IsOneEnemyBetterThanValue
(
Card
.
Attack
+
(
Card
.
IsFacedown
()
?
GetSpellBonus
()
:
0
),
true
);
if
(
Card
.
Attack
<
800
)
enemyBetter
=
true
;
bool
result
=
false
;
...
...
Game/AI/Decks/GravekeeperExecutor.cs
View file @
c2a94e8e
...
...
@@ -130,7 +130,7 @@ namespace WindBot.Game.AI.Decks
private
bool
GravekeepersDescendantEffect
()
{
int
bestatk
=
Bot
.
GetMonsters
().
GetHighestAttackMonster
().
Attack
;
if
(
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
bestatk
,
true
))
if
(
Util
.
IsOneEnemyBetterThanValue
(
bestatk
,
true
))
{
AI
.
SelectCard
(
Enemy
.
GetMonsters
().
GetHighestAttackMonster
());
return
true
;
...
...
Game/AI/Decks/GrenMajuThunderBoarderExecutor.cs
View file @
c2a94e8e
...
...
@@ -183,14 +183,14 @@ namespace WindBot.Game.AI.Decks
targets
.
Add
(
check
);
}
if
(
AI
.
Utils
.
GetPZone
(
1
,
0
)
!=
null
&&
AI
.
Utils
.
GetPZone
(
1
,
0
).
Type
==
16777218
)
if
(
Util
.
GetPZone
(
1
,
0
)
!=
null
&&
Util
.
GetPZone
(
1
,
0
).
Type
==
16777218
)
{
targets
.
Add
(
AI
.
Utils
.
GetPZone
(
1
,
0
));
targets
.
Add
(
Util
.
GetPZone
(
1
,
0
));
}
if
(
AI
.
Utils
.
GetPZone
(
1
,
1
)
!=
null
&&
AI
.
Utils
.
GetPZone
(
1
,
1
).
Type
==
16777218
)
if
(
Util
.
GetPZone
(
1
,
1
)
!=
null
&&
Util
.
GetPZone
(
1
,
1
).
Type
==
16777218
)
{
targets
.
Add
(
AI
.
Utils
.
GetPZone
(
1
,
1
));
targets
.
Add
(
Util
.
GetPZone
(
1
,
1
));
}
foreach
(
ClientCard
check
in
Enemy
.
GetSpells
())
{
...
...
@@ -208,9 +208,9 @@ namespace WindBot.Game.AI.Decks
if
(
check
.
Type
==
16777218
)
count
++;
}
if
(
AI
.
Utils
.
GetLastChainCard
()!=
null
&&
(
AI
.
Utils
.
GetLastChainCard
().
HasType
(
CardType
.
Continuous
)||
AI
.
Utils
.
GetLastChainCard
().
HasType
(
CardType
.
Field
)
||
count
==
2
)
&&
if
(
Util
.
GetLastChainCard
()!=
null
&&
(
Util
.
GetLastChainCard
().
HasType
(
CardType
.
Continuous
)||
Util
.
GetLastChainCard
().
HasType
(
CardType
.
Field
)
||
count
==
2
)
&&
Duel
.
LastChainPlayer
==
1
)
{
AI
.
SelectCard
(
targets
);
...
...
@@ -235,9 +235,9 @@ namespace WindBot.Game.AI.Decks
}
if
(
count
==
2
)
{
if
(
AI
.
Utils
.
GetPZone
(
1
,
1
)
!=
null
&&
AI
.
Utils
.
GetPZone
(
1
,
1
).
Type
==
16777218
)
if
(
Util
.
GetPZone
(
1
,
1
)
!=
null
&&
Util
.
GetPZone
(
1
,
1
).
Type
==
16777218
)
{
card
=
AI
.
Utils
.
GetPZone
(
1
,
1
);
card
=
Util
.
GetPZone
(
1
,
1
);
}
}
...
...
@@ -251,27 +251,27 @@ namespace WindBot.Game.AI.Decks
private
bool
DarkBribeeff
()
{
if
(
AI
.
Utils
.
GetLastChainCard
()!=
null
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
CardId
.
UpstartGoblin
))
if
(
Util
.
GetLastChainCard
()!=
null
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
UpstartGoblin
))
return
false
;
return
true
;
}
private
bool
ImperialOrderfirst
()
{
if
(
AI
.
Utils
.
GetLastChainCard
()
!=
null
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
CardId
.
UpstartGoblin
))
if
(
Util
.
GetLastChainCard
()
!=
null
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
UpstartGoblin
))
return
false
;
return
DefaultOnBecomeTarget
()
&&
AI
.
Utils
.
GetLastChainCard
().
HasType
(
CardType
.
Spell
);
return
DefaultOnBecomeTarget
()
&&
Util
.
GetLastChainCard
().
HasType
(
CardType
.
Spell
);
}
private
bool
ImperialOrdereff
()
{
if
(
AI
.
Utils
.
GetLastChainCard
()
!=
null
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
CardId
.
UpstartGoblin
))
if
(
Util
.
GetLastChainCard
()
!=
null
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
UpstartGoblin
))
return
false
;
if
(
Duel
.
LastChainPlayer
==
1
)
{
foreach
(
ClientCard
check
in
Enemy
.
GetSpells
())
{
if
(
AI
.
Utils
.
GetLastChainCard
()
==
check
)
if
(
Util
.
GetLastChainCard
()
==
check
)
return
true
;
}
}
...
...
@@ -284,7 +284,7 @@ namespace WindBot.Game.AI.Decks
if
(
Enemy
.
BattlingMonster
.
Attack
-
Bot
.
LifePoints
>=
1000
)
return
DefaultUniqueTrap
();
}
if
(
AI
.
Utils
.
GetTotalAttackingMonsterAttack
(
1
)
>=
Bot
.
LifePoints
)
if
(
Util
.
GetTotalAttackingMonsterAttack
(
1
)
>=
Bot
.
LifePoints
)
return
DefaultUniqueTrap
();
if
(
Enemy
.
GetMonsterCount
()
>=
2
)
return
DefaultUniqueTrap
();
...
...
@@ -307,7 +307,7 @@ namespace WindBot.Game.AI.Decks
if
(
card
.
HasType
(
CardType
.
Monster
))
count
++;
}
if
(
AI
.
Utils
.
GetBestEnemyMonster
()!=
null
&&
AI
.
Utils
.
GetBestEnemyMonster
().
Attack
>=
1900
)
if
(
Util
.
GetBestEnemyMonster
()!=
null
&&
Util
.
GetBestEnemyMonster
().
Attack
>=
1900
)
AI
.
SelectCard
(
CardId
.
EaterOfMillions
,
CardId
.
PotOfDesires
,
...
...
@@ -473,7 +473,7 @@ namespace WindBot.Game.AI.Decks
}
return
true
;
};
ClientCard
BestEnemy
=
AI
.
Utils
.
GetBestEnemyMonster
(
true
);
ClientCard
BestEnemy
=
Util
.
GetBestEnemyMonster
(
true
);
ClientCard
WorstBot
=
Bot
.
GetMonsters
().
GetLowestAttackMonster
();
if
(
BestEnemy
==
null
||
BestEnemy
.
HasPosition
(
CardPosition
.
FaceDown
))
return
false
;
if
(
WorstBot
==
null
||
WorstBot
.
HasPosition
(
CardPosition
.
FaceDown
))
return
false
;
...
...
@@ -493,9 +493,9 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectPlace
(
Zones
.
z4
);
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
KnightmareGryphon
,
true
))
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
InspectBoarder
)
&&
!
eater_eff
)
return
false
;
if
(
AI
.
Utils
.
GetProblematicEnemyMonster
()
==
null
&&
Bot
.
ExtraDeck
.
Count
<
5
)
return
false
;
if
(
Util
.
GetProblematicEnemyMonster
()
==
null
&&
Bot
.
ExtraDeck
.
Count
<
5
)
return
false
;
if
(
Bot
.
GetMonstersInMainZone
().
Count
>=
5
)
return
false
;
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
return
false
;
if
(
Util
.
IsTurn1OrMain2
())
return
false
;
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
e_c
in
Bot
.
ExtraDeck
)
...
...
@@ -588,7 +588,7 @@ namespace WindBot.Game.AI.Decks
private
bool
Linkuriboheff
()
{
if
(
Duel
.
LastChainPlayer
==
0
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
CardId
.
Linkuriboh
))
return
false
;
if
(
Duel
.
LastChainPlayer
==
0
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
Linkuriboh
))
return
false
;
return
true
;
}
private
bool
MonsterRepos
()
...
...
Game/AI/Decks/HorusExecutor.cs
View file @
c2a94e8e
...
...
@@ -97,7 +97,7 @@ namespace WindBot.Game.AI.Decks
return
false
;
List
<
ClientCard
>
cards
=
new
List
<
ClientCard
>(
Bot
.
Graveyard
);
cards
.
Sort
(
AIFunctions
.
CompareCardAttack
);
cards
.
Sort
(
CardContainer
.
CompareCardAttack
);
for
(
int
i
=
cards
.
Count
-
1
;
i
>=
0
;
--
i
)
{
ClientCard
card
=
cards
[
i
];
...
...
@@ -115,7 +115,7 @@ namespace WindBot.Game.AI.Decks
private
bool
MonsterReborn
()
{
List
<
ClientCard
>
cards
=
new
List
<
ClientCard
>(
Bot
.
Graveyard
);
cards
.
Sort
(
AIFunctions
.
CompareCardAttack
);
cards
.
Sort
(
CardContainer
.
CompareCardAttack
);
ClientCard
selectedCard
=
null
;
for
(
int
i
=
cards
.
Count
-
1
;
i
>=
0
;
--
i
)
{
...
...
@@ -129,7 +129,7 @@ namespace WindBot.Game.AI.Decks
}
}
cards
=
new
List
<
ClientCard
>(
Enemy
.
Graveyard
);
cards
.
Sort
(
AIFunctions
.
CompareCardAttack
);
cards
.
Sort
(
CardContainer
.
CompareCardAttack
);
for
(
int
i
=
cards
.
Count
-
1
;
i
>=
0
;
--
i
)
{
ClientCard
card
=
cards
[
i
];
...
...
@@ -152,7 +152,7 @@ namespace WindBot.Game.AI.Decks
private
bool
WhiteNightDragon
()
{
// We should summon Horus the Black Flame Dragon LV6 if he can lvlup.
if
(
Enemy
.
GetMonsterCount
()
!=
0
&&
!
AI
.
Utils
.
IsAllEnemyBetterThanValue
(
2300
-
1
,
false
))
if
(
Enemy
.
GetMonsterCount
()
!=
0
&&
!
Util
.
IsAllEnemyBetterThanValue
(
2300
-
1
,
false
))
foreach
(
ClientCard
card
in
Main
.
SummonableCards
)
if
(
card
.
IsCode
(
11224103
))
return
false
;
...
...
@@ -170,7 +170,7 @@ namespace WindBot.Game.AI.Decks
List
<
ClientCard
>
cards
=
new
List
<
ClientCard
>(
Bot
.
GetMonsters
());
if
(
cards
.
Count
==
0
)
return
false
;
cards
.
Sort
(
AIFunctions
.
CompareCardAttack
);
cards
.
Sort
(
CardContainer
.
CompareCardAttack
);
ClientCard
tributeCard
=
null
;
foreach
(
ClientCard
monster
in
cards
)
{
...
...
@@ -190,7 +190,7 @@ namespace WindBot.Game.AI.Decks
cards
.
AddRange
(
Bot
.
Graveyard
);
if
(
cards
.
Count
==
0
)
return
false
;
cards
.
Sort
(
AIFunctions
.
CompareCardAttack
);
cards
.
Sort
(
CardContainer
.
CompareCardAttack
);
ClientCard
summonCard
=
null
;
for
(
int
i
=
cards
.
Count
-
1
;
i
>=
0
;
--
i
)
{
...
...
Game/AI/Decks/LightswornExecutor.cs
View file @
c2a94e8e
...
...
@@ -116,7 +116,7 @@ namespace WindBot.Game.AI.Decks
break
;
}
return
AI
.
Utils
.
CheckSelectCount
(
result
,
cards
,
min
,
max
);
return
Util
.
CheckSelectCount
(
result
,
cards
,
min
,
max
);
}
private
bool
ReinforcementOfTheArmyEffect
()
...
...
@@ -222,10 +222,10 @@ namespace WindBot.Game.AI.Decks
{
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
ClientCard
target1
=
AI
.
Utils
.
GetBestEnemyMonster
();
ClientCard
target1
=
Util
.
GetBestEnemyMonster
();
if
(
target1
!=
null
)
targets
.
Add
(
target1
);
ClientCard
target2
=
AI
.
Utils
.
GetBestEnemySpell
();
ClientCard
target2
=
Util
.
GetBestEnemySpell
();
if
(
target2
!=
null
)
targets
.
Add
(
target2
);
...
...
Game/AI/Decks/LightswornShaddoldinosourExecutor.cs
View file @
c2a94e8e
...
...
@@ -479,7 +479,7 @@ namespace WindBot.Game.AI.Decks
private
bool
FairyTailSnowsummon
()
{
ClientCard
target
=
AI
.
Utils
.
GetBestEnemyMonster
(
true
,
true
);
ClientCard
target
=
Util
.
GetBestEnemyMonster
(
true
,
true
);
if
(
target
!=
null
)
{
return
true
;
...
...
@@ -493,7 +493,7 @@ namespace WindBot.Game.AI.Decks
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
AI
.
SelectCard
(
AI
.
Utils
.
GetBestEnemyMonster
(
true
,
true
));
AI
.
SelectCard
(
Util
.
GetBestEnemyMonster
(
true
,
true
));
return
true
;
}
else
...
...
@@ -524,14 +524,14 @@ namespace WindBot.Game.AI.Decks
all
.
Add
(
check
);
}
}
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
FairyTailSnow
))
return
false
;
if
(
Util
.
ChainContainsCard
(
CardId
.
FairyTailSnow
))
return
false
;
if
(
Duel
.
Player
==
1
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
Bot
.
BattlingMonster
==
null
&&
Enemy_atk
>=
Bot
.
LifePoints
||
Duel
.
Player
==
0
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
Enemy
.
BattlingMonster
==
null
&&
Enemy
.
LifePoints
<=
1850
)
{
AI
.
SelectCard
(
all
);
AI
.
SelectNextCard
(
AI
.
Utils
.
GetBestEnemyMonster
());
AI
.
SelectNextCard
(
Util
.
GetBestEnemyMonster
());
return
true
;
}
}
...
...
@@ -602,7 +602,7 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
CardId
.
UltimateConductorTytanno
);
return
true
;
}
if
(!
AI
.
Utils
.
IsOneEnemyBetter
(
true
))
return
false
;
if
(!
Util
.
IsOneEnemyBetter
(
true
))
return
false
;
IList
<
int
>
targets
=
new
[]
{
CardId
.
ElShaddollConstruct
,
CardId
.
DogorantheMadFlameKaiju
,
...
...
@@ -752,7 +752,7 @@ namespace WindBot.Game.AI.Decks
return
true
;
}
}
if
(!
AI
.
Utils
.
IsOneEnemyBetter
())
return
false
;
if
(!
Util
.
IsOneEnemyBetter
())
return
false
;
foreach
(
ClientCard
monster
in
Bot
.
Hand
)
...
...
@@ -830,7 +830,7 @@ namespace WindBot.Game.AI.Decks
ShaddollSquamata_used
=
true
;
if
(
Card
.
Location
!=
CardLocation
.
MonsterZone
)
{
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
ElShaddollConstruct
))
if
(
Util
.
ChainContainsCard
(
CardId
.
ElShaddollConstruct
))
{
if
(!
Bot
.
HasInHand
(
CardId
.
ShaddollFusion
)
&&
Bot
.
HasInGraveyard
(
CardId
.
ShaddollFusion
))
AI
.
SelectNextCard
(
CardId
.
ShaddollCore
);
...
...
@@ -851,7 +851,7 @@ namespace WindBot.Game.AI.Decks
else
{
if
(
Enemy
.
GetMonsterCount
()
==
0
)
return
false
;
ClientCard
target
=
AI
.
Utils
.
GetBestEnemyMonster
();
ClientCard
target
=
Util
.
GetBestEnemyMonster
();
AI
.
SelectCard
(
target
);
}
return
true
;
...
...
@@ -890,7 +890,7 @@ namespace WindBot.Game.AI.Decks
ShaddollHedgehog_used
=
true
;
if
(
Card
.
Location
!=
CardLocation
.
MonsterZone
)
{
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
ElShaddollConstruct
))
if
(
Util
.
ChainContainsCard
(
CardId
.
ElShaddollConstruct
))
{
AI
.
SelectNextCard
(
CardId
.
ShaddollFalco
,
...
...
@@ -924,14 +924,14 @@ namespace WindBot.Game.AI.Decks
ShaddollDragon_used
=
true
;
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
ClientCard
target
=
AI
.
Utils
.
GetBestEnemyCard
();
ClientCard
target
=
Util
.
GetBestEnemyCard
();
AI
.
SelectCard
(
target
);
return
true
;
}
else
{
if
(
Enemy
.
GetSpellCount
()
==
0
)
return
false
;
ClientCard
target
=
AI
.
Utils
.
GetBestEnemySpell
();
ClientCard
target
=
Util
.
GetBestEnemySpell
();
AI
.
SelectCard
(
target
);
return
true
;
}
...
...
@@ -996,7 +996,7 @@ namespace WindBot.Game.AI.Decks
if
(
Card
.
Location
==
CardLocation
.
Grave
)
return
true
;
if
(
Bot
.
LifePoints
<=
1000
)
return
false
;
ClientCard
select
=
AI
.
Utils
.
GetBestEnemyCard
();
ClientCard
select
=
Util
.
GetBestEnemyCard
();
if
(
select
==
null
)
return
false
;
if
(
select
!=
null
)
{
...
...
@@ -1018,10 +1018,10 @@ namespace WindBot.Game.AI.Decks
{
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
ClientCard
target1
=
AI
.
Utils
.
GetBestEnemyMonster
();
ClientCard
target1
=
Util
.
GetBestEnemyMonster
();
if
(
target1
!=
null
)
targets
.
Add
(
target1
);
ClientCard
target2
=
AI
.
Utils
.
GetBestEnemySpell
();
ClientCard
target2
=
Util
.
GetBestEnemySpell
();
if
(
target2
!=
null
)
targets
.
Add
(
target2
);
...
...
@@ -1106,16 +1106,16 @@ namespace WindBot.Game.AI.Decks
return
true
;
}
else
if
(
DarkHole
||
AI
.
Utils
.
IsChainTarget
(
Card
)
||
AI
.
Utils
.
GetProblematicEnemySpell
()
!=
null
)
else
if
(
DarkHole
||
Util
.
IsChainTarget
(
Card
)
||
Util
.
GetProblematicEnemySpell
()
!=
null
)
{
AI
.
SelectCard
(
CardId
.
TG_WonderMagician
);
return
true
;
}
else
if
(
Duel
.
Player
==
1
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
1500
,
true
))
else
if
(
Duel
.
Player
==
1
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
Util
.
IsOneEnemyBetterThanValue
(
1500
,
true
))
{
AI
.
SelectCard
(
CardId
.
TG_WonderMagician
);
if
(
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
1900
,
true
))
if
(
Util
.
IsOneEnemyBetterThanValue
(
1900
,
true
))
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
}
...
...
@@ -1136,7 +1136,7 @@ namespace WindBot.Game.AI.Decks
private
bool
ScarlightRedDragoneff
()
{
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
ClientCard
target1
=
AI
.
Utils
.
GetBestEnemyMonster
();
ClientCard
target1
=
Util
.
GetBestEnemyMonster
();
if
(
target1
!=
null
)
{
targets
.
Add
(
target1
);
...
...
@@ -1160,8 +1160,8 @@ namespace WindBot.Game.AI.Decks
AI.SelectCard(Useless_List());
return true;
}
//if (ActivateDescription ==
AI.Utils
.GetStringId(CardId.snake, 2)) return true;
if (ActivateDescription ==
AI.Utils
.GetStringId(CardId.snake, 1))
//if (ActivateDescription ==
Util
.GetStringId(CardId.snake, 2)) return true;
if (ActivateDescription ==
Util
.GetStringId(CardId.snake, 1))
{
foreach (ClientCard hand in Bot.Hand)
{
...
...
@@ -1186,7 +1186,7 @@ namespace WindBot.Game.AI.Decks
private
bool
BlackRoseMoonlightDragoneff
()
{
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
ClientCard
target1
=
AI
.
Utils
.
GetBestEnemyMonster
();
ClientCard
target1
=
Util
.
GetBestEnemyMonster
();
if
(
target1
!=
null
)
{
targets
.
Add
(
target1
);
...
...
@@ -1224,18 +1224,18 @@ namespace WindBot.Game.AI.Decks
return
true
;
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
ClientCard
target1
=
AI
.
Utils
.
GetBestEnemyMonster
();
ClientCard
target1
=
Util
.
GetBestEnemyMonster
();
if
(
target1
!=
null
)
targets
.
Add
(
target1
);
ClientCard
target2
=
AI
.
Utils
.
GetBestEnemySpell
();
ClientCard
target2
=
Util
.
GetBestEnemySpell
();
if
(
target2
!=
null
)
targets
.
Add
(
target2
);
else
if
(
AI
.
Utils
.
IsChainTarget
(
Card
)
||
AI
.
Utils
.
GetProblematicEnemySpell
()
!=
null
)
else
if
(
Util
.
IsChainTarget
(
Card
)
||
Util
.
GetProblematicEnemySpell
()
!=
null
)
{
AI
.
SelectCard
(
targets
);
return
true
;
}
else
if
(
Duel
.
Player
==
1
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
2400
,
true
))
else
if
(
Duel
.
Player
==
1
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
Util
.
IsOneEnemyBetterThanValue
(
2400
,
true
))
{
AI
.
SelectCard
(
targets
);
return
true
;
...
...
Game/AI/Decks/NekrozExecutor.cs
View file @
c2a94e8e
...
...
@@ -159,7 +159,7 @@ namespace WindBot.Game.AI.Decks
private
bool
DecisiveArmorEffect
()
{
if
(
AI
.
Utils
.
IsAllEnemyBetterThanValue
(
3300
,
true
))
if
(
Util
.
IsAllEnemyBetterThanValue
(
3300
,
true
))
{
AI
.
SelectCard
(
CardId
.
DecisiveArmor
);
return
true
;
...
...
@@ -176,7 +176,7 @@ namespace WindBot.Game.AI.Decks
private
bool
GungnirEffect
()
{
if
(
AI
.
Utils
.
IsOneEnemyBetter
(
true
)
&&
Duel
.
Phase
==
DuelPhase
.
Main1
)
if
(
Util
.
IsOneEnemyBetter
(
true
)
&&
Duel
.
Phase
==
DuelPhase
.
Main1
)
{
AI
.
SelectCard
(
Enemy
.
GetMonsters
().
GetHighestAttackMonster
());
return
true
;
...
...
@@ -196,12 +196,12 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
CardId
.
Mirror
);
return
true
;
}
else
if
(
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
3300
,
true
)
&&
!
Bot
.
HasInHand
(
CardId
.
Trishula
))
else
if
(
Util
.
IsOneEnemyBetterThanValue
(
3300
,
true
)
&&
!
Bot
.
HasInHand
(
CardId
.
Trishula
))
{
AI
.
SelectCard
(
CardId
.
Trishula
);
return
true
;
}
else
if
(
AI
.
Utils
.
IsAllEnemyBetterThanValue
(
2700
,
true
)
&&
!
Bot
.
HasInHand
(
CardId
.
DecisiveArmor
))
else
if
(
Util
.
IsAllEnemyBetterThanValue
(
2700
,
true
)
&&
!
Bot
.
HasInHand
(
CardId
.
DecisiveArmor
))
{
AI
.
SelectCard
(
CardId
.
DecisiveArmor
);
return
true
;
...
...
@@ -221,12 +221,12 @@ namespace WindBot.Game.AI.Decks
private
bool
ThousandHandsEffect
()
{
if
(
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
3300
,
true
)
&&
!
Bot
.
HasInHand
(
CardId
.
Trishula
))
if
(
Util
.
IsOneEnemyBetterThanValue
(
3300
,
true
)
&&
!
Bot
.
HasInHand
(
CardId
.
Trishula
))
{
AI
.
SelectCard
(
CardId
.
Trishula
);
return
true
;
}
else
if
(
AI
.
Utils
.
IsAllEnemyBetterThanValue
(
2700
,
true
)
&&
!
Bot
.
HasInHand
(
CardId
.
DecisiveArmor
))
else
if
(
Util
.
IsAllEnemyBetterThanValue
(
2700
,
true
)
&&
!
Bot
.
HasInHand
(
CardId
.
DecisiveArmor
))
{
AI
.
SelectCard
(
CardId
.
DecisiveArmor
);
return
true
;
...
...
@@ -277,7 +277,7 @@ namespace WindBot.Game.AI.Decks
foreach
(
int
Id
in
NekrozCard
)
{
if
(
Id
==
CardId
.
Trishula
&&
AI
.
Utils
.
IsAllEnemyBetterThanValue
(
2700
,
true
)
&&
Bot
.
HasInHand
(
CardId
.
DecisiveArmor
))
if
(
Id
==
CardId
.
Trishula
&&
Util
.
IsAllEnemyBetterThanValue
(
2700
,
true
)
&&
Bot
.
HasInHand
(
CardId
.
DecisiveArmor
))
{
AI
.
SelectCard
(
CardId
.
Trishula
);
return
true
;
...
...
Game/AI/Decks/OldSchoolExecutor.cs
View file @
c2a94e8e
...
...
@@ -104,7 +104,7 @@ namespace WindBot.Game.AI.Decks
if
(
handCard
.
IsFacedown
())
return
true
;
}
return
AI
.
Utils
.
IsOneEnemyBetter
(
true
);
return
Util
.
IsOneEnemyBetter
(
true
);
}
}
}
\ No newline at end of file
Game/AI/Decks/PhantasmExecutor.cs
View file @
c2a94e8e
...
...
@@ -133,7 +133,7 @@ namespace WindBot.Game.AI.Decks
{
if
(
Enemy
.
GetMonsterCount
()
==
0
)
{
if
(
AI
.
Utils
.
GetTotalAttackingMonsterAttack
(
0
)
>=
Enemy
.
LifePoints
)
if
(
Util
.
GetTotalAttackingMonsterAttack
(
0
)
>=
Enemy
.
LifePoints
)
{
return
true
;
}
...
...
@@ -145,7 +145,7 @@ namespace WindBot.Game.AI.Decks
{
if
(
DefaultOnBecomeTarget
()
&&
Card
.
Location
==
CardLocation
.
SpellZone
)
{
AI
.
SelectCard
(
AI
.
Utils
.
GetBestEnemyCard
(
false
,
true
));
AI
.
SelectCard
(
Util
.
GetBestEnemyCard
(
false
,
true
));
return
true
;
}
if
(
Enemy
.
HasInSpellZone
(
CardId
.
EternalSoul
))
...
...
@@ -159,17 +159,17 @@ namespace WindBot.Game.AI.Decks
return
UniqueFaceupSpell
();
}
if
(
Bot
.
GetMonsterCount
()
>
0
&&
!
Bot
.
HasInSpellZone
(
CardId
.
SeaStealthAttack
)
&&
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
2000
,
false
)
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
)
Util
.
IsOneEnemyBetterThanValue
(
2000
,
false
)
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
)
{
AI
.
SelectCard
(
AI
.
Utils
.
GetBestEnemyMonster
(
true
,
true
));
AI
.
SelectCard
(
Util
.
GetBestEnemyMonster
(
true
,
true
));
return
UniqueFaceupSpell
();
}
if
(
AI
.
Utils
.
GetProblematicEnemyCard
(
9999
,
true
)!=
null
)
if
(
Util
.
GetProblematicEnemyCard
(
9999
,
true
)!=
null
)
{
if
(
AI
.
Utils
.
GetProblematicEnemyCard
(
9999
,
true
).
IsCode
(
CardId
.
ElShaddollWinda
)
&&
!
AI
.
Utils
.
GetProblematicEnemyCard
(
9999
,
true
).
IsDisabled
())
if
(
Util
.
GetProblematicEnemyCard
(
9999
,
true
).
IsCode
(
CardId
.
ElShaddollWinda
)
&&
!
Util
.
GetProblematicEnemyCard
(
9999
,
true
).
IsDisabled
())
return
false
;
AI
.
SelectCard
(
AI
.
Utils
.
GetProblematicEnemyCard
(
9999
,
true
));
AI
.
SelectCard
(
Util
.
GetProblematicEnemyCard
(
9999
,
true
));
return
UniqueFaceupSpell
();
}
return
false
;
...
...
@@ -201,7 +201,7 @@ namespace WindBot.Game.AI.Decks
{
if
(
m
.
IsAttack
())
count
++;
}
if
(
AI
.
Utils
.
GetTotalAttackingMonsterAttack
(
1
)
>=
Bot
.
LifePoints
)
if
(
Util
.
GetTotalAttackingMonsterAttack
(
1
)
>=
Bot
.
LifePoints
)
return
true
;
return
count
>=
2
;
}
...
...
@@ -239,7 +239,7 @@ namespace WindBot.Game.AI.Decks
private
bool
SkillDraineff
()
{
if
(
Duel
.
LastChainPlayer
==
1
&&
AI
.
Utils
.
GetLastChainCard
().
Location
==
CardLocation
.
MonsterZone
)
if
(
Duel
.
LastChainPlayer
==
1
&&
Util
.
GetLastChainCard
().
Location
==
CardLocation
.
MonsterZone
)
return
UniqueFaceupSpell
();
return
false
;
}
...
...
@@ -369,7 +369,7 @@ namespace WindBot.Game.AI.Decks
{
if
(
target
!=
null
&&
!
SeaStealthAttackeff_used
)
{
if
(
AI
.
Utils
.
IsChainTarget
(
Card
)
||
AI
.
Utils
.
IsChainTarget
(
target
))
if
(
Util
.
IsChainTarget
(
Card
)
||
Util
.
IsChainTarget
(
target
))
return
false
;
}
break
;
...
...
@@ -421,11 +421,11 @@ namespace WindBot.Game.AI.Decks
private
bool
BorrelswordDragoneff
()
{
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
BorrelswordDragon
,
0
))
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
BorrelswordDragon
,
0
))
{
if
(
AI
.
Utils
.
IsChainTarget
(
Card
)
&&
AI
.
Utils
.
GetBestEnemyMonster
(
true
,
true
)
!=
null
)
if
(
Util
.
IsChainTarget
(
Card
)
&&
Util
.
GetBestEnemyMonster
(
true
,
true
)
!=
null
)
{
AI
.
SelectCard
(
AI
.
Utils
.
GetBestEnemyMonster
(
true
,
true
));
AI
.
SelectCard
(
Util
.
GetBestEnemyMonster
(
true
,
true
));
return
true
;
}
if
(
Duel
.
Player
==
1
&&
Bot
.
BattlingMonster
==
Card
)
...
...
@@ -461,9 +461,9 @@ namespace WindBot.Game.AI.Decks
else
AI
.
SelectPlace
(
Zones
.
z3
);
if
(
Enemy
.
HasInMonstersZone
(
CardId
.
KnightmareGryphon
,
true
))
return
false
;
if
(
AI
.
Utils
.
GetProblematicEnemyMonster
()
==
null
&&
Bot
.
ExtraDeck
.
Count
<
5
)
return
false
;
if
(
Util
.
GetProblematicEnemyMonster
()
==
null
&&
Bot
.
ExtraDeck
.
Count
<
5
)
return
false
;
if
(
Bot
.
GetMonstersInMainZone
().
Count
>=
5
)
return
false
;
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
return
false
;
if
(
Util
.
IsTurn1OrMain2
())
return
false
;
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
if
(
Bot
.
HasInExtra
(
CardId
.
BorreloadDragon
))
...
...
@@ -538,7 +538,7 @@ namespace WindBot.Game.AI.Decks
private
bool
Linkuriboheff
()
{
if
(
Duel
.
LastChainPlayer
==
0
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
CardId
.
Linkuriboh
))
return
false
;
if
(
Duel
.
LastChainPlayer
==
0
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
Linkuriboh
))
return
false
;
return
true
;
}
private
bool
SeaStealthAttackeff
()
...
...
@@ -591,12 +591,12 @@ namespace WindBot.Game.AI.Decks
if
(
s
.
IsCode
(
CardId
.
PacifisThePhantasmCity
))
target
=
s
;
}
if
(
target
!=
null
&&
AI
.
Utils
.
IsChainTarget
(
target
))
if
(
target
!=
null
&&
Util
.
IsChainTarget
(
target
))
{
SeaStealthAttackeff_used
=
true
;
return
true
;
}
target
=
AI
.
Utils
.
GetLastChainCard
();
target
=
Util
.
GetLastChainCard
();
if
(
target
!=
null
)
{
if
(
target
.
IsCode
(
CardId
.
BrandishSkillAfterburner
))
...
...
Game/AI/Decks/QliphortExecutor.cs
View file @
c2a94e8e
...
...
@@ -183,7 +183,7 @@ namespace WindBot.Game.AI.Decks
private
bool
CardOfDemiseEffect
()
{
if
(
AI
.
Utils
.
IsTurn1OrMain2
()
&&
!
ShouldPendulum
())
if
(
Util
.
IsTurn1OrMain2
()
&&
!
ShouldPendulum
())
{
CardOfDemiseUsed
=
true
;
return
true
;
...
...
@@ -215,8 +215,8 @@ namespace WindBot.Game.AI.Decks
{
if
(
Card
.
Location
==
CardLocation
.
Grave
)
{
ClientCard
l
=
AI
.
Utils
.
GetPZone
(
0
,
0
);
ClientCard
r
=
AI
.
Utils
.
GetPZone
(
0
,
1
);
ClientCard
l
=
Util
.
GetPZone
(
0
,
0
);
ClientCard
r
=
Util
.
GetPZone
(
0
,
1
);
if
(
l
==
null
&&
r
==
null
)
AI
.
SelectCard
(
CardId
.
Scout
);
}
...
...
@@ -227,8 +227,8 @@ namespace WindBot.Game.AI.Decks
{
if
(
Card
.
Location
!=
CardLocation
.
Hand
)
return
false
;
ClientCard
l
=
AI
.
Utils
.
GetPZone
(
0
,
0
);
ClientCard
r
=
AI
.
Utils
.
GetPZone
(
0
,
1
);
ClientCard
l
=
Util
.
GetPZone
(
0
,
0
);
ClientCard
r
=
Util
.
GetPZone
(
0
,
1
);
if
(
l
==
null
&&
r
==
null
)
return
true
;
if
(
l
==
null
&&
r
.
RScale
!=
Card
.
LScale
)
...
...
@@ -252,8 +252,8 @@ namespace WindBot.Game.AI.Decks
{
count
++;
}
ClientCard
l
=
AI
.
Utils
.
GetPZone
(
0
,
0
);
ClientCard
r
=
AI
.
Utils
.
GetPZone
(
0
,
1
);
ClientCard
l
=
Util
.
GetPZone
(
0
,
0
);
ClientCard
r
=
Util
.
GetPZone
(
0
,
1
);
if
(
l
==
null
&&
r
==
null
)
{
if
(
CardOfDemiseUsed
)
...
...
@@ -316,7 +316,7 @@ namespace WindBot.Game.AI.Decks
{
if
(
Card
.
Location
==
CardLocation
.
Hand
)
return
false
;
ClientCard
target
=
AI
.
Utils
.
GetBestEnemyCard
();
ClientCard
target
=
Util
.
GetBestEnemyCard
();
if
(
target
!=
null
)
{
AI
.
SelectCard
(
target
);
...
...
@@ -329,7 +329,7 @@ namespace WindBot.Game.AI.Decks
{
if
(
Card
.
Location
==
CardLocation
.
Hand
)
return
false
;
ClientCard
target
=
AI
.
Utils
.
GetBestEnemyMonster
();
ClientCard
target
=
Util
.
GetBestEnemyMonster
();
if
(
target
!=
null
)
{
AI
.
SelectCard
(
target
);
...
...
@@ -342,7 +342,7 @@ namespace WindBot.Game.AI.Decks
{
if
(
Card
.
Location
==
CardLocation
.
Hand
)
return
false
;
ClientCard
target
=
AI
.
Utils
.
GetBestEnemySpell
();
ClientCard
target
=
Util
.
GetBestEnemySpell
();
if
(
target
!=
null
)
{
AI
.
SelectCard
(
target
);
...
...
@@ -353,8 +353,8 @@ namespace WindBot.Game.AI.Decks
private
bool
ShouldPendulum
()
{
ClientCard
l
=
AI
.
Utils
.
GetPZone
(
0
,
0
);
ClientCard
r
=
AI
.
Utils
.
GetPZone
(
0
,
1
);
ClientCard
l
=
Util
.
GetPZone
(
0
,
0
);
ClientCard
r
=
Util
.
GetPZone
(
0
,
1
);
if
(
l
!=
null
&&
r
!=
null
&&
l
.
LScale
!=
r
.
RScale
)
{
int
count
=
0
;
...
...
Game/AI/Decks/RainbowExecutor.cs
View file @
c2a94e8e
...
...
@@ -174,7 +174,7 @@ namespace WindBot.Game.AI.Decks
break
;
}
return
AI
.
Utils
.
CheckSelectCount
(
result
,
cards
,
min
,
max
);
return
Util
.
CheckSelectCount
(
result
,
cards
,
min
,
max
);
}
private
bool
UnexpectedDaiEffect
()
...
...
@@ -185,7 +185,7 @@ namespace WindBot.Game.AI.Decks
CardId
.
PhantomGryphon
,
CardId
.
MegalosmasherX
);
else
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
else
if
(
Util
.
IsTurn1OrMain2
())
{
if
(
Bot
.
HasInHand
(
CardId
.
MysteryShellDragon
))
AI
.
SelectCard
(
CardId
.
MysteryShellDragon
);
...
...
@@ -210,14 +210,14 @@ namespace WindBot.Game.AI.Decks
private
bool
RescueRabbitSummon
()
{
return
AI
.
Utils
.
GetBotAvailZonesFromExtraDeck
()
>
0
||
AI
.
Utils
.
GetMatchingCards
(
Enemy
.
MonsterZone
,
card
=>
card
.
GetDefensePower
()
>=
1900
).
Count
==
0
||
AI
.
Utils
.
GetMatchingCards
(
Enemy
.
MonsterZone
,
card
=>
card
.
GetDefensePower
()
<
1900
).
Count
>
AI
.
Utils
.
GetMatchingCards
(
Bot
.
MonsterZone
,
card
=>
card
.
Attack
>=
1900
).
Count
;
return
Util
.
GetBotAvailZonesFromExtraDeck
()
>
0
||
Util
.
GetMatchingCards
(
Enemy
.
MonsterZone
,
card
=>
card
.
GetDefensePower
()
>=
1900
).
Count
==
0
||
Util
.
GetMatchingCards
(
Enemy
.
MonsterZone
,
card
=>
card
.
GetDefensePower
()
<
1900
).
Count
>
Util
.
GetMatchingCards
(
Bot
.
MonsterZone
,
card
=>
card
.
Attack
>=
1900
).
Count
;
}
private
bool
RescueRabbitEffect
()
{
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
if
(
Util
.
IsTurn1OrMain2
())
{
AI
.
SelectCard
(
CardId
.
MegalosmasherX
,
...
...
@@ -278,15 +278,15 @@ namespace WindBot.Game.AI.Decks
private
bool
IgnisterProminenceTheBlastingDracoslayerSummon
()
{
return
AI
.
Utils
.
GetProblematicEnemyCard
()
!=
null
;
return
Util
.
GetProblematicEnemyCard
()
!=
null
;
}
private
bool
IgnisterProminenceTheBlastingDracoslayerEffect
()
{
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
IgnisterProminenceTheBlastingDracoslayer
,
1
))
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
IgnisterProminenceTheBlastingDracoslayer
,
1
))
return
true
;
ClientCard
target1
=
null
;
ClientCard
target2
=
AI
.
Utils
.
GetProblematicEnemyCard
();
ClientCard
target2
=
Util
.
GetProblematicEnemyCard
();
List
<
ClientCard
>
spells
=
Enemy
.
GetSpells
();
foreach
(
ClientCard
spell
in
spells
)
{
...
...
@@ -333,7 +333,7 @@ namespace WindBot.Game.AI.Decks
private
bool
Number37HopeWovenDragonSpiderSharkSummon
()
{
return
AI
.
Utils
.
IsAllEnemyBetterThanValue
(
1700
,
false
)
&&
!
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
3600
,
true
);
return
Util
.
IsAllEnemyBetterThanValue
(
1700
,
false
)
&&
!
Util
.
IsOneEnemyBetterThanValue
(
3600
,
true
);
}
private
bool
LightningChidoriSummon
()
...
...
@@ -353,12 +353,12 @@ namespace WindBot.Game.AI.Decks
}
}
return
AI
.
Utils
.
GetProblematicEnemyCard
()
!=
null
;
return
Util
.
GetProblematicEnemyCard
()
!=
null
;
}
private
bool
LightningChidoriEffect
()
{
ClientCard
problematicCard
=
AI
.
Utils
.
GetProblematicEnemyCard
();
ClientCard
problematicCard
=
Util
.
GetProblematicEnemyCard
();
AI
.
SelectCard
(
0
);
AI
.
SelectNextCard
(
problematicCard
);
return
true
;
...
...
@@ -366,12 +366,12 @@ namespace WindBot.Game.AI.Decks
private
bool
EvolzarLaggiaSummon
()
{
return
(
AI
.
Utils
.
IsAllEnemyBetterThanValue
(
2000
,
false
)
&&
!
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
2400
,
true
))
||
AI
.
Utils
.
IsTurn1OrMain2
();
return
(
Util
.
IsAllEnemyBetterThanValue
(
2000
,
false
)
&&
!
Util
.
IsOneEnemyBetterThanValue
(
2400
,
true
))
||
Util
.
IsTurn1OrMain2
();
}
private
bool
EvilswarmNightmareSummon
()
{
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
if
(
Util
.
IsTurn1OrMain2
())
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
...
...
@@ -381,7 +381,7 @@ namespace WindBot.Game.AI.Decks
private
bool
TraptrixRafflesiaSummon
()
{
if
(
AI
.
Utils
.
IsTurn1OrMain2
()
&&
(
Bot
.
GetRemainingCount
(
CardId
.
BottomlessTrapHole
,
1
)
+
Bot
.
GetRemainingCount
(
CardId
.
TraptrixTrapHoleNightmare
,
1
))
>
0
)
if
(
Util
.
IsTurn1OrMain2
()
&&
(
Bot
.
GetRemainingCount
(
CardId
.
BottomlessTrapHole
,
1
)
+
Bot
.
GetRemainingCount
(
CardId
.
TraptrixTrapHoleNightmare
,
1
))
>
0
)
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
...
...
@@ -392,14 +392,14 @@ namespace WindBot.Game.AI.Decks
private
bool
Number59CrookedCookSummon
()
{
return
((
Bot
.
GetMonsterCount
()
+
Bot
.
GetSpellCount
()
-
2
)
<=
1
)
&&
((
AI
.
Utils
.
IsOneEnemyBetter
()
&&
!
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
2300
,
true
))
||
AI
.
Utils
.
IsTurn1OrMain2
());
((
Util
.
IsOneEnemyBetter
()
&&
!
Util
.
IsOneEnemyBetterThanValue
(
2300
,
true
))
||
Util
.
IsTurn1OrMain2
());
}
private
bool
Number59CrookedCookEffect
()
{
if
(
Duel
.
Player
==
0
)
{
if
(
AI
.
Utils
.
IsChainTarget
(
Card
))
if
(
Util
.
IsChainTarget
(
Card
))
return
true
;
}
else
...
...
@@ -422,7 +422,7 @@ namespace WindBot.Game.AI.Decks
private
bool
StarliegePaladynamoEffect
()
{
ClientCard
result
=
AI
.
Utils
.
GetOneEnemyBetterThanValue
(
2000
,
true
);
ClientCard
result
=
Util
.
GetOneEnemyBetterThanValue
(
2000
,
true
);
if
(
result
!=
null
)
{
AI
.
SelectCard
(
0
);
...
...
Game/AI/Decks/Rank5Executor.cs
View file @
c2a94e8e
...
...
@@ -120,13 +120,13 @@ namespace WindBot.Game.AI.Decks
public
override
IList
<
ClientCard
>
OnSelectXyzMaterial
(
IList
<
ClientCard
>
cards
,
int
min
,
int
max
)
{
IList
<
ClientCard
>
result
=
AI
.
Utils
.
SelectPreferredCards
(
new
[]
{
IList
<
ClientCard
>
result
=
Util
.
SelectPreferredCards
(
new
[]
{
CardId
.
MistArchfiend
,
CardId
.
PanzerDragon
,
CardId
.
SolarWindJammer
,
CardId
.
StarDrawing
},
cards
,
min
,
max
);
return
AI
.
Utils
.
CheckSelectCount
(
result
,
cards
,
min
,
max
);
return
Util
.
CheckSelectCount
(
result
,
cards
,
min
,
max
);
}
private
bool
NormalSummon
()
...
...
@@ -236,7 +236,7 @@ namespace WindBot.Game.AI.Decks
private
bool
CyberDragonNovaEffect
()
{
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
CyberDragonNova
,
0
))
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
CyberDragonNova
,
0
))
{
return
true
;
}
...
...
@@ -282,12 +282,12 @@ namespace WindBot.Game.AI.Decks
private
bool
Number61VolcasaurusSummon
()
{
return
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
2000
,
false
);
return
Util
.
IsOneEnemyBetterThanValue
(
2000
,
false
);
}
private
bool
Number61VolcasaurusEffect
()
{
ClientCard
target
=
AI
.
Utils
.
GetProblematicEnemyMonster
(
2000
);
ClientCard
target
=
Util
.
GetProblematicEnemyMonster
(
2000
);
if
(
target
!=
null
)
{
AI
.
SelectCard
(
CardId
.
CyberDragon
);
...
...
@@ -300,9 +300,9 @@ namespace WindBot.Game.AI.Decks
private
bool
TirasKeeperOfGenesisEffect
()
{
ClientCard
target
=
AI
.
Utils
.
GetProblematicEnemyCard
();
ClientCard
target
=
Util
.
GetProblematicEnemyCard
();
if
(
target
==
null
)
target
=
AI
.
Utils
.
GetBestEnemyCard
();
target
=
Util
.
GetBestEnemyCard
();
if
(
target
!=
null
)
{
AI
.
SelectCard
(
target
);
...
...
@@ -357,7 +357,7 @@ namespace WindBot.Game.AI.Decks
private
bool
PanzerDragonEffect
()
{
ClientCard
target
=
AI
.
Utils
.
GetBestEnemyCard
();
ClientCard
target
=
Util
.
GetBestEnemyCard
();
if
(
target
!=
null
)
{
AI
.
SelectCard
(
target
);
...
...
Game/AI/Decks/ST1732Executor.cs
View file @
c2a94e8e
...
...
@@ -189,7 +189,7 @@ namespace WindBot.Game.AI.Decks
private
bool
MindControlEffect
()
{
ClientCard
target
=
AI
.
Utils
.
GetBestEnemyMonster
();
ClientCard
target
=
Util
.
GetBestEnemyMonster
();
if
(
target
!=
null
)
{
AI
.
SelectCard
(
target
);
...
...
@@ -461,8 +461,8 @@ namespace WindBot.Game.AI.Decks
private
bool
LinkSummon
()
{
return
(
AI
.
Utils
.
IsTurn1OrMain2
()
||
AI
.
Utils
.
IsOneEnemyBetter
())
&&
AI
.
Utils
.
GetBestAttack
(
Bot
)
<
Card
.
Attack
;
return
(
Util
.
IsTurn1OrMain2
()
||
Util
.
IsOneEnemyBetter
())
&&
Util
.
GetBestAttack
(
Bot
)
<
Card
.
Attack
;
}
}
}
\ No newline at end of file
Game/AI/Decks/SkyStrikerExecutor.cs
View file @
c2a94e8e
...
...
@@ -114,7 +114,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Hayate
,
HayateSummon
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Hayate
,
HayateEffect
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
TopologicBomberDragon
,
AI
.
Utils
.
IsTurn1OrMain2
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
TopologicBomberDragon
,
Util
.
IsTurn1OrMain2
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Raye
,
RayeSummon
);
...
...
@@ -160,15 +160,15 @@ namespace WindBot.Game.AI.Decks
public
override
bool
OnSelectYesNo
(
int
desc
)
{
if
(
desc
==
AI
.
Utils
.
GetStringId
(
CardId
.
SummonSorceress
,
2
))
// summon to the field of opponent?
if
(
desc
==
Util
.
GetStringId
(
CardId
.
SummonSorceress
,
2
))
// summon to the field of opponent?
return
false
;
if
(
desc
==
AI
.
Utils
.
GetStringId
(
CardId
.
Engage
,
0
))
// draw card?
if
(
desc
==
Util
.
GetStringId
(
CardId
.
Engage
,
0
))
// draw card?
return
true
;
if
(
desc
==
AI
.
Utils
.
GetStringId
(
CardId
.
WidowAnchor
,
0
))
// get control?
if
(
desc
==
Util
.
GetStringId
(
CardId
.
WidowAnchor
,
0
))
// get control?
return
true
;
if
(
desc
==
AI
.
Utils
.
GetStringId
(
CardId
.
JammingWave
,
0
))
// destroy monster?
if
(
desc
==
Util
.
GetStringId
(
CardId
.
JammingWave
,
0
))
// destroy monster?
{
ClientCard
target
=
AI
.
Utils
.
GetBestEnemyMonster
();
ClientCard
target
=
Util
.
GetBestEnemyMonster
();
if
(
target
!=
null
)
{
AI
.
SelectCard
(
target
);
...
...
@@ -177,9 +177,9 @@ namespace WindBot.Game.AI.Decks
else
return
false
;
}
if
(
desc
==
AI
.
Utils
.
GetStringId
(
CardId
.
Afterburners
,
0
))
// destroy spell & trap?
if
(
desc
==
Util
.
GetStringId
(
CardId
.
Afterburners
,
0
))
// destroy spell & trap?
{
ClientCard
target
=
AI
.
Utils
.
GetBestEnemySpell
();
ClientCard
target
=
Util
.
GetBestEnemySpell
();
if
(
target
!=
null
)
{
AI
.
SelectCard
(
target
);
...
...
@@ -199,7 +199,7 @@ namespace WindBot.Game.AI.Decks
private
bool
TwinTwistersEffect
()
{
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
TwinTwisters
))
if
(
Util
.
ChainContainsCard
(
CardId
.
TwinTwisters
))
return
false
;
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
target
in
Enemy
.
GetSpells
())
...
...
@@ -261,7 +261,7 @@ namespace WindBot.Game.AI.Decks
private
bool
AfterburnersEffect
()
{
ClientCard
target
=
AI
.
Utils
.
GetBestEnemyMonster
(
true
,
true
);
ClientCard
target
=
Util
.
GetBestEnemyMonster
(
true
,
true
);
if
(
target
!=
null
)
{
AI
.
SelectCard
(
target
);
...
...
@@ -291,9 +291,9 @@ namespace WindBot.Game.AI.Decks
private
bool
WidowAnchorEffectFirst
()
{
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
WidowAnchor
))
if
(
Util
.
ChainContainsCard
(
CardId
.
WidowAnchor
))
return
false
;
ClientCard
target
=
AI
.
Utils
.
GetProblematicEnemyMonster
(
0
,
true
);
ClientCard
target
=
Util
.
GetProblematicEnemyMonster
(
0
,
true
);
if
(
target
!=
null
)
{
WidowAnchorTarget
=
target
;
...
...
@@ -359,7 +359,7 @@ namespace WindBot.Game.AI.Decks
return
true
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
TopologicBomberDragon
)
&&
Enemy
.
GetMonsterCount
()
>
1
)
return
true
;
if
(!
AI
.
Utils
.
IsTurn1OrMain2
())
if
(!
Util
.
IsTurn1OrMain2
())
{
foreach
(
ClientCard
card
in
Bot
.
Hand
)
{
...
...
@@ -375,14 +375,14 @@ namespace WindBot.Game.AI.Decks
{
if
(
DefaultBreakthroughSkill
())
{
WidowAnchorTarget
=
AI
.
Utils
.
GetLastChainCard
();
WidowAnchorTarget
=
Util
.
GetLastChainCard
();
return
true
;
}
if
(!
HaveThreeSpellsInGrave
()
||
Duel
.
Player
==
1
||
Duel
.
Phase
<
DuelPhase
.
Main1
||
Duel
.
Phase
>=
DuelPhase
.
Main2
||
AI
.
Utils
.
ChainContainsCard
(
CardId
.
WidowAnchor
))
if
(!
HaveThreeSpellsInGrave
()
||
Duel
.
Player
==
1
||
Duel
.
Phase
<
DuelPhase
.
Main1
||
Duel
.
Phase
>=
DuelPhase
.
Main2
||
Util
.
ChainContainsCard
(
CardId
.
WidowAnchor
))
return
false
;
ClientCard
target
=
AI
.
Utils
.
GetBestEnemyMonster
(
true
,
true
);
ClientCard
target
=
Util
.
GetBestEnemyMonster
(
true
,
true
);
if
(
target
!=
null
&&
!
target
.
IsDisabled
()
&&
!
target
.
HasType
(
CardType
.
Normal
))
{
WidowAnchorTarget
=
target
;
...
...
@@ -410,9 +410,9 @@ namespace WindBot.Game.AI.Decks
}
else
{
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
if
(
Util
.
IsTurn1OrMain2
())
return
false
;
ClientCard
bestBotMonster
=
AI
.
Utils
.
GetBestBotMonster
(
true
);
ClientCard
bestBotMonster
=
Util
.
GetBestBotMonster
(
true
);
if
(
bestBotMonster
!=
null
)
{
int
bestPower
=
bestBotMonster
.
Attack
;
...
...
@@ -527,7 +527,7 @@ namespace WindBot.Game.AI.Decks
{
return
false
;
}
if
(
AI
.
Utils
.
IsChainTarget
(
Card
))
if
(
Util
.
IsChainTarget
(
Card
))
{
RayeSelectTarget
();
return
true
;
...
...
@@ -582,11 +582,11 @@ namespace WindBot.Game.AI.Decks
private
bool
KagariEffect
()
{
if
(
EmptyMainMonsterZone
()
&&
AI
.
Utils
.
GetProblematicEnemyMonster
()
!=
null
&&
Bot
.
HasInGraveyard
(
CardId
.
Afterburners
))
if
(
EmptyMainMonsterZone
()
&&
Util
.
GetProblematicEnemyMonster
()
!=
null
&&
Bot
.
HasInGraveyard
(
CardId
.
Afterburners
))
{
AI
.
SelectCard
(
CardId
.
Afterburners
);
}
else
if
(
EmptyMainMonsterZone
()
&&
AI
.
Utils
.
GetProblematicEnemySpell
()
!=
null
&&
Bot
.
HasInGraveyard
(
CardId
.
JammingWave
))
else
if
(
EmptyMainMonsterZone
()
&&
Util
.
GetProblematicEnemySpell
()
!=
null
&&
Bot
.
HasInGraveyard
(
CardId
.
JammingWave
))
{
AI
.
SelectCard
(
CardId
.
JammingWave
);
}
...
...
@@ -597,7 +597,7 @@ namespace WindBot.Game.AI.Decks
private
bool
ShizukuSummon
()
{
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
if
(
Util
.
IsTurn1OrMain2
())
{
ShizukuSummoned
=
true
;
return
true
;
...
...
@@ -617,7 +617,7 @@ namespace WindBot.Game.AI.Decks
private
bool
HayateSummon
()
{
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
if
(
Util
.
IsTurn1OrMain2
())
return
false
;
HayateSummoned
=
true
;
return
true
;
...
...
@@ -641,14 +641,14 @@ namespace WindBot.Game.AI.Decks
CardId
.
EffectVeiler
,
CardId
.
GhostRabbit
,
CardId
.
JetSynchron
})
&&
!
AI
.
Utils
.
IsTurn1OrMain2
()
})
&&
!
Util
.
IsTurn1OrMain2
()
&&
Bot
.
GetMonsterCount
()
>
0
&&
Bot
.
HasInExtra
(
CardId
.
CrystronNeedlefiber
);
}
private
bool
CrystronNeedlefiberSummon
()
{
return
!
AI
.
Utils
.
IsTurn1OrMain2
();
return
!
Util
.
IsTurn1OrMain2
();
}
private
bool
CrystronNeedlefiberEffect
()
...
...
@@ -701,15 +701,15 @@ namespace WindBot.Game.AI.Decks
{
return
CardId
.
HornetDrones
;
}
else
if
(
AI
.
Utils
.
GetProblematicEnemyMonster
()
!=
null
&&
Bot
.
GetRemainingCount
(
CardId
.
WidowAnchor
,
3
)
>
0
)
else
if
(
Util
.
GetProblematicEnemyMonster
()
!=
null
&&
Bot
.
GetRemainingCount
(
CardId
.
WidowAnchor
,
3
)
>
0
)
{
return
CardId
.
WidowAnchor
;
}
else
if
(
EmptyMainMonsterZone
()
&&
AI
.
Utils
.
GetProblematicEnemyMonster
()
!=
null
&&
Bot
.
GetRemainingCount
(
CardId
.
Afterburners
,
1
)
>
0
)
else
if
(
EmptyMainMonsterZone
()
&&
Util
.
GetProblematicEnemyMonster
()
!=
null
&&
Bot
.
GetRemainingCount
(
CardId
.
Afterburners
,
1
)
>
0
)
{
return
CardId
.
Afterburners
;
}
else
if
(
EmptyMainMonsterZone
()
&&
AI
.
Utils
.
GetProblematicEnemySpell
()
!=
null
&&
Bot
.
GetRemainingCount
(
CardId
.
JammingWave
,
1
)
>
0
)
else
if
(
EmptyMainMonsterZone
()
&&
Util
.
GetProblematicEnemySpell
()
!=
null
&&
Bot
.
GetRemainingCount
(
CardId
.
JammingWave
,
1
)
>
0
)
{
return
CardId
.
JammingWave
;
}
...
...
Game/AI/Decks/ToadallyAwesomeExecutor.cs
View file @
c2a94e8e
...
...
@@ -413,7 +413,7 @@ namespace WindBot.Game.AI.Decks
private
bool
CatSharkSummon
()
{
if
(
Bot
.
HasInMonstersZone
(
CardId
.
ToadallyAwesome
)
&&
((
AI
.
Utils
.
IsOneEnemyBetter
(
true
)
&&
((
Util
.
IsOneEnemyBetter
(
true
)
&&
!
Bot
.
HasInMonstersZone
(
new
[]
{
CardId
.
CatShark
,
...
...
@@ -470,8 +470,8 @@ namespace WindBot.Game.AI.Decks
num
++;
}
}
return
AI
.
Utils
.
IsOneEnemyBetter
(
true
)
&&
AI
.
Utils
.
GetBestAttack
(
Enemy
)
>
2200
return
Util
.
IsOneEnemyBetter
(
true
)
&&
Util
.
GetBestAttack
(
Enemy
)
>
2200
&&
num
<
4
&&
!
Bot
.
HasInMonstersZone
(
new
[]
{
...
...
@@ -496,7 +496,7 @@ namespace WindBot.Game.AI.Decks
{
defence
+=
monster
.
GetDefensePower
();
}
if
(
attack
-
2000
-
defence
>
Enemy
.
LifePoints
&&
!
AI
.
Utils
.
IsOneEnemyBetter
(
true
))
if
(
attack
-
2000
-
defence
>
Enemy
.
LifePoints
&&
!
Util
.
IsOneEnemyBetter
(
true
))
return
true
;
}
return
false
;
...
...
@@ -512,7 +512,7 @@ namespace WindBot.Game.AI.Decks
{
if
(
Card
.
IsFacedown
())
return
true
;
if
(
Card
.
IsDefense
()
&&
!
AI
.
Utils
.
IsAllEnemyBetter
(
true
)
&&
Card
.
Attack
>=
Card
.
Defense
)
if
(
Card
.
IsDefense
()
&&
!
Util
.
IsAllEnemyBetter
(
true
)
&&
Card
.
Attack
>=
Card
.
Defense
)
return
true
;
return
false
;
}
...
...
Game/AI/Decks/TrickstarExecutor.cs
View file @
c2a94e8e
...
...
@@ -325,7 +325,7 @@ namespace WindBot.Game.AI.Decks
// can ss from exdeck
if
(
judge
)
{
bool
fornextss
=
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Awaken
);
bool
fornextss
=
Util
.
ChainContainsCard
(
CardId
.
Awaken
);
IList
<
ClientCard
>
ex
=
Bot
.
ExtraDeck
;
ClientCard
ex_best
=
null
;
foreach
(
ClientCard
ex_card
in
ex
)
...
...
@@ -389,7 +389,7 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
ex_best
);
}
}
if
(!
judge
||
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Awaken
))
if
(!
judge
||
Util
.
ChainContainsCard
(
CardId
.
Awaken
))
{
// cannot ss from exdeck or have more than 1 grass in chain
int
[]
secondselect
=
new
[]
...
...
@@ -405,7 +405,7 @@ namespace WindBot.Game.AI.Decks
CardId
.
Yellow
,
CardId
.
Pink
};
if
(!
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Awaken
))
if
(!
Util
.
ChainContainsCard
(
CardId
.
Awaken
))
{
if
(!
judge
&&
Bot
.
GetRemainingCount
(
CardId
.
Ghost
,
2
)
>
0
)
{
...
...
@@ -437,12 +437,12 @@ namespace WindBot.Game.AI.Decks
// counter
if
(!
Enemy
.
HasInMonstersZone
(
CardId
.
Ghost
)
||
Enemy
.
GetHandCount
()
<=
1
)
{
ClientCard
tosolve
=
AI
.
Utils
.
GetProblematicEnemyCard
();
ClientCard
tosolve
=
Util
.
GetProblematicEnemyCard
();
if
(
tosolve
==
null
)
{
if
(
Duel
.
LastChainPlayer
==
1
&&
AI
.
Utils
.
GetLastChainCard
()
!=
null
)
if
(
Duel
.
LastChainPlayer
==
1
&&
Util
.
GetLastChainCard
()
!=
null
)
{
ClientCard
target
=
AI
.
Utils
.
GetLastChainCard
();
ClientCard
target
=
Util
.
GetLastChainCard
();
if
(
target
.
HasPosition
(
CardPosition
.
FaceUp
)
&&
(
target
.
Location
==
CardLocation
.
MonsterZone
||
target
.
Location
==
CardLocation
.
SpellZone
))
tosolve
=
target
;
}
}
...
...
@@ -494,7 +494,7 @@ namespace WindBot.Game.AI.Decks
ClientCard
selected
=
null
;
if
(
Card
.
Location
==
CardLocation
.
Grave
)
{
selected
=
AI
.
Utils
.
GetBestEnemySpell
(
true
);
selected
=
Util
.
GetBestEnemySpell
(
true
);
}
else
{
...
...
@@ -524,7 +524,7 @@ namespace WindBot.Game.AI.Decks
public
bool
Feather_Act
()
{
if
(!
spell_trap_activate
())
return
false
;
if
(
AI
.
Utils
.
GetProblematicEnemySpell
()
!=
null
)
if
(
Util
.
GetProblematicEnemySpell
()
!=
null
)
{
List
<
ClientCard
>
grave
=
Bot
.
GetGraveyardSpells
();
foreach
(
ClientCard
self_card
in
grave
)
...
...
@@ -547,7 +547,7 @@ namespace WindBot.Game.AI.Decks
if
(!
spell_trap_activate
())
return
false
;
if
(
Duel
.
Player
==
0
)
return
false
;
if
(
Duel
.
Phase
==
DuelPhase
.
End
)
return
true
;
if
(
Duel
.
LastChainPlayer
==
1
&&
(
AI
.
Utils
.
IsChainTarget
(
Card
)
||
(
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
CardId
.
Feather
)
&&
!
Bot
.
HasInSpellZone
(
CardId
.
Awaken
))))
return
true
;
if
(
Duel
.
LastChainPlayer
==
1
&&
(
Util
.
IsChainTarget
(
Card
)
||
(
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
Feather
)
&&
!
Bot
.
HasInSpellZone
(
CardId
.
Awaken
))))
return
true
;
if
(
Duel
.
Phase
>
DuelPhase
.
Main1
&&
Duel
.
Phase
<
DuelPhase
.
Main2
)
{
int
total_atk
=
0
;
...
...
@@ -585,7 +585,7 @@ namespace WindBot.Game.AI.Decks
stage_locked
=
null
;
return
true
;
}
else
if
(
Enemy
.
GetMonsterCount
()
>
0
&&
AI
.
Utils
.
GetBestEnemyMonster
().
Attack
>=
AI
.
Utils
.
GetBestAttack
(
Bot
))
else
if
(
Enemy
.
GetMonsterCount
()
>
0
&&
Util
.
GetBestEnemyMonster
().
Attack
>=
Util
.
GetBestAttack
(
Bot
))
{
AI
.
SelectCard
(
CardId
.
White
,
CardId
.
Yellow
,
CardId
.
Pink
,
CardId
.
Red
);
stage_locked
=
null
;
...
...
@@ -608,7 +608,7 @@ namespace WindBot.Game.AI.Decks
stage_locked
=
null
;
return
true
;
}
if
(
Enemy
.
GetMonsterCount
()
>
0
&&
AI
.
Utils
.
GetBestEnemyMonster
().
Attack
>=
AI
.
Utils
.
GetBestAttack
(
Bot
)
&&
!
Bot
.
HasInHand
(
CardId
.
White
))
if
(
Enemy
.
GetMonsterCount
()
>
0
&&
Util
.
GetBestEnemyMonster
().
Attack
>=
Util
.
GetBestAttack
(
Bot
)
&&
!
Bot
.
HasInHand
(
CardId
.
White
))
{
AI
.
SelectCard
(
CardId
.
White
,
CardId
.
Yellow
,
CardId
.
Pink
,
CardId
.
Red
);
stage_locked
=
null
;
...
...
@@ -674,7 +674,7 @@ namespace WindBot.Game.AI.Decks
pink_ss
=
true
;
return
true
;
}
else
if
(
Enemy
.
GetMonsterCount
()
>
0
&&
(
AI
.
Utils
.
GetBestEnemyMonster
().
Attack
-
800
>=
Bot
.
LifePoints
))
return
false
;
else
if
(
Enemy
.
GetMonsterCount
()
>
0
&&
(
Util
.
GetBestEnemyMonster
().
Attack
-
800
>=
Bot
.
LifePoints
))
return
false
;
pink_ss
=
true
;
return
true
;
}
...
...
@@ -695,9 +695,9 @@ namespace WindBot.Game.AI.Decks
public
bool
Eater_ss
()
{
if
(
AI
.
Utils
.
GetProblematicEnemyMonster
()
==
null
&&
Bot
.
ExtraDeck
.
Count
<
5
)
return
false
;
if
(
Util
.
GetProblematicEnemyMonster
()
==
null
&&
Bot
.
ExtraDeck
.
Count
<
5
)
return
false
;
if
(
Bot
.
GetMonstersInMainZone
().
Count
>=
5
)
return
false
;
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
return
false
;
if
(
Util
.
IsTurn1OrMain2
())
return
false
;
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
if
(
Bot
.
SpellZone
[
5
]
!=
null
&&
!
Bot
.
SpellZone
[
5
].
IsCode
(
CardId
.
Stage
))
...
...
@@ -742,7 +742,7 @@ namespace WindBot.Game.AI.Decks
if
(
Duel
.
Player
==
0
)
{
List
<
ClientCard
>
monster_list
=
Bot
.
GetMonsters
();
monster_list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
monster_list
.
Sort
(
CardContainer
.
CompareCardAttack
);
monster_list
.
Reverse
();
foreach
(
ClientCard
card
in
monster_list
)
{
...
...
@@ -753,7 +753,7 @@ namespace WindBot.Game.AI.Decks
}
else
if
(
card
.
RealPower
>=
self_power
)
self_power
=
card
.
RealPower
;
}
}
ClientCard
bestenemy
=
AI
.
Utils
.
GetOneEnemyBetterThanValue
(
self_power
,
true
);
ClientCard
bestenemy
=
Util
.
GetOneEnemyBetterThanValue
(
self_power
,
true
);
if
(
bestenemy
!=
null
)
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
else
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
return
;
...
...
@@ -762,12 +762,12 @@ namespace WindBot.Game.AI.Decks
public
bool
Red_ss
()
{
if
(
red_ss_count
>=
6
)
return
false
;
if
((
AI
.
Utils
.
ChainContainsCard
(
CardId
.
DarkHole
)
||
AI
.
Utils
.
ChainContainsCard
(
99330325
)
||
AI
.
Utils
.
ChainContainsCard
(
53582587
))
&&
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Red
))
return
false
;
if
(
Duel
.
LastChainPlayer
==
0
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
CardId
.
Red
))
if
((
Util
.
ChainContainsCard
(
CardId
.
DarkHole
)
||
Util
.
ChainContainsCard
(
99330325
)
||
Util
.
ChainContainsCard
(
53582587
))
&&
Util
.
ChainContainsCard
(
CardId
.
Red
))
return
false
;
if
(
Duel
.
LastChainPlayer
==
0
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
Red
))
{
foreach
(
ClientCard
m
in
Bot
.
GetMonsters
())
{
if
(
AI
.
Utils
.
IsChainTarget
(
m
)
&&
IsTrickstar
(
m
.
Id
))
if
(
Util
.
IsChainTarget
(
m
)
&&
IsTrickstar
(
m
.
Id
))
{
red_ss_count
+=
1
;
AI
.
SelectCard
(
m
);
...
...
@@ -779,11 +779,11 @@ namespace WindBot.Game.AI.Decks
if
(
Duel
.
LastChainPlayer
==
1
)
return
true
;
if
(
Duel
.
Player
==
0
)
{
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
return
false
;
if
(
Util
.
IsTurn1OrMain2
())
return
false
;
if
(
Duel
.
Phase
>
DuelPhase
.
Main1
&&
Duel
.
Phase
<
DuelPhase
.
Main2
)
{
List
<
ClientCard
>
self_m
=
Bot
.
GetMonsters
();
ClientCard
tosolve_enemy
=
AI
.
Utils
.
GetOneEnemyBetterThanMyBest
();
ClientCard
tosolve_enemy
=
Util
.
GetOneEnemyBetterThanMyBest
();
foreach
(
ClientCard
c
in
self_m
)
{
if
(
IsTrickstar
(
c
.
Id
)
&&
!
c
.
IsCode
(
CardId
.
Red
))
...
...
@@ -838,10 +838,10 @@ namespace WindBot.Game.AI.Decks
{
if
(
Duel
.
Phase
>
DuelPhase
.
Main1
&&
Duel
.
Phase
<
DuelPhase
.
Main2
)
{
if
(
AI
.
Utils
.
GetOneEnemyBetterThanMyBest
()
!=
null
)
if
(
Util
.
GetOneEnemyBetterThanMyBest
()
!=
null
)
{
List
<
ClientCard
>
self_monster
=
Bot
.
GetMonsters
();
self_monster
.
Sort
(
AIFunctions
.
CompareDefensePower
);
self_monster
.
Sort
(
CardContainer
.
CompareDefensePower
);
foreach
(
ClientCard
card
in
self_monster
)
{
if
(
IsTrickstar
(
card
.
Id
)
&&
!
card
.
IsCode
(
CardId
.
Red
))
...
...
@@ -878,7 +878,7 @@ namespace WindBot.Game.AI.Decks
return
true
;
}
}
if
(
Enemy
.
GetMonsterCount
()
==
0
&&
!
AI
.
Utils
.
IsTurn1OrMain2
())
if
(
Enemy
.
GetMonsterCount
()
==
0
&&
!
Util
.
IsTurn1OrMain2
())
{
if
(
Bot
.
HasInGraveyard
(
CardId
.
Red
)
&&
Bot
.
GetRemainingCount
(
CardId
.
Pink
,
1
)
>
0
&&
!
pink_ss
)
{
...
...
@@ -902,9 +902,9 @@ namespace WindBot.Game.AI.Decks
}
return
true
;
}
if
(
AI
.
Utils
.
GetProblematicEnemyMonster
()
!=
null
)
if
(
Util
.
GetProblematicEnemyMonster
()
!=
null
)
{
int
power
=
AI
.
Utils
.
GetProblematicEnemyMonster
().
GetDefensePower
();
int
power
=
Util
.
GetProblematicEnemyMonster
().
GetDefensePower
();
if
(
power
>=
1800
&&
power
<=
3600
&&
Bot
.
GetRemainingCount
(
CardId
.
White
,
2
)
>
0
&&
!
Bot
.
HasInHand
(
CardId
.
White
))
{
AI
.
SelectCard
(
CardId
.
White
,
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Stage
,
CardId
.
Crown
,
CardId
.
Yellow
);
...
...
@@ -937,13 +937,13 @@ namespace WindBot.Game.AI.Decks
return
false
;
}
else
{
if
(
Enemy
.
GetMonsterCount
()
==
0
&&
!
AI
.
Utils
.
IsTurn1OrMain2
())
{
if
(
Enemy
.
GetMonsterCount
()
==
0
&&
!
Util
.
IsTurn1OrMain2
())
{
white_eff_used
=
true
;
return
true
;
}
else
if
(
Enemy
.
GetMonsterCount
()
!=
0
)
{
ClientCard
tosolve
=
AI
.
Utils
.
GetBestEnemyMonster
(
true
);
ClientCard
tosolve
=
Util
.
GetBestEnemyMonster
(
true
);
ClientCard
self_card
=
Bot
.
GetMonsters
().
GetHighestAttackMonster
();
if
(
tosolve
==
null
||
self_card
==
null
||
(
tosolve
!=
null
&&
self_card
!=
null
&&
!
IsTrickstar
(
self_card
.
Id
)))
{
...
...
@@ -985,8 +985,8 @@ namespace WindBot.Game.AI.Decks
lockbird_useful
=
true
;
if
(
Bot
.
HasInSpellZone
(
CardId
.
Re
))
{
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Re
))
lockbird_used
=
true
;
return
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Re
);
if
(
Util
.
ChainContainsCard
(
CardId
.
Re
))
lockbird_used
=
true
;
return
Util
.
ChainContainsCard
(
CardId
.
Re
);
}
lockbird_used
=
true
;
return
true
;
...
...
@@ -998,7 +998,7 @@ namespace WindBot.Game.AI.Decks
if
(!
spell_trap_activate
())
return
false
;
if
(
Bot
.
HasInHand
(
CardId
.
LockBird
))
{
if
(
lockbird_useful
||
AI
.
Utils
.
IsChainTarget
(
Card
)
||
(
Duel
.
Player
==
1
&&
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Feather
)))
{
if
(
lockbird_useful
||
Util
.
IsChainTarget
(
Card
)
||
(
Duel
.
Player
==
1
&&
Util
.
ChainContainsCard
(
CardId
.
Feather
)))
{
lockbird_useful
=
false
;
return
true
;
}
...
...
@@ -1033,7 +1033,7 @@ namespace WindBot.Game.AI.Decks
if
(
hand
.
Attack
>=
Enemy
.
LifePoints
)
return
true
;
if
(!
hand
.
IsCode
(
CardId
.
Yellow
))
{
if
(
AI
.
Utils
.
GetOneEnemyBetterThanValue
(
hand
.
Attack
,
false
)
==
null
)
return
true
;
if
(
Util
.
GetOneEnemyBetterThanValue
(
hand
.
Attack
,
false
)
==
null
)
return
true
;
}
}
}
...
...
@@ -1043,7 +1043,7 @@ namespace WindBot.Game.AI.Decks
public
bool
Ts_reborn
()
{
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
return
false
;
if
(
Util
.
IsTurn1OrMain2
())
return
false
;
if
(
Duel
.
Player
==
0
&&
Enemy
.
LifePoints
<=
1000
)
{
AI
.
SelectCard
(
CardId
.
Pink
);
...
...
@@ -1094,7 +1094,7 @@ namespace WindBot.Game.AI.Decks
NormalSummoned
=
true
;
return
true
;
}
else
if
(!
AI
.
Utils
.
IsTurn1OrMain2
()
&&
(
Bot
.
HasInGraveyard
(
CardId
.
Yellow
)
||
Bot
.
HasInGraveyard
(
CardId
.
Red
)))
else
if
(!
Util
.
IsTurn1OrMain2
()
&&
(
Bot
.
HasInGraveyard
(
CardId
.
Yellow
)
||
Bot
.
HasInGraveyard
(
CardId
.
Red
)))
{
NormalSummoned
=
true
;
return
true
;
...
...
@@ -1140,12 +1140,12 @@ namespace WindBot.Game.AI.Decks
public
bool
Ring_act
()
{
if
(
Duel
.
LastChainPlayer
==
0
&&
AI
.
Utils
.
GetLastChainCard
()
!=
null
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
CardId
.
Ghost
))
return
false
;
if
(
Duel
.
LastChainPlayer
==
0
&&
Util
.
GetLastChainCard
()
!=
null
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
Ghost
))
return
false
;
if
(!
spell_trap_activate
())
return
false
;
ClientCard
target
=
AI
.
Utils
.
GetProblematicEnemyMonster
();
if
(
target
==
null
&&
AI
.
Utils
.
IsChainTarget
(
Card
))
ClientCard
target
=
Util
.
GetProblematicEnemyMonster
();
if
(
target
==
null
&&
Util
.
IsChainTarget
(
Card
))
{
target
=
AI
.
Utils
.
GetBestEnemyMonster
();
target
=
Util
.
GetBestEnemyMonster
();
}
if
(
target
!=
null
)
{
...
...
@@ -1171,7 +1171,7 @@ namespace WindBot.Game.AI.Decks
public
bool
Linkuri_eff
()
{
if
(
Duel
.
LastChainPlayer
==
0
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
CardId
.
Linkuri
))
return
false
;
if
(
Duel
.
LastChainPlayer
==
0
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
Linkuri
))
return
false
;
AI
.
SelectCard
(
CardId
.
Tuner
,
CardId
.
BF
+
1
);
return
true
;
}
...
...
@@ -1200,7 +1200,7 @@ namespace WindBot.Game.AI.Decks
}
if
(
targets
.
Count
==
0
)
return
false
;
List
<
ClientCard
>
m_list
=
new
List
<
ClientCard
>(
Bot
.
GetMonsters
());
m_list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
m_list
.
Sort
(
CardContainer
.
CompareCardAttack
);
foreach
(
ClientCard
e_check
in
m_list
)
{
if
(
e_check
.
IsFacedown
())
continue
;
...
...
@@ -1223,9 +1223,9 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
CardId
.
Tuner
,
CardId
.
Ghost
,
CardId
.
Urara
);
return
true
;
}
else
if
(
AI
.
Utils
.
IsChainTarget
(
Card
)
||
AI
.
Utils
.
GetProblematicEnemySpell
()
!=
null
)
return
true
;
else
if
(
Duel
.
Player
==
1
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
1500
,
true
))
{
if
(
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
1900
,
true
))
else
if
(
Util
.
IsChainTarget
(
Card
)
||
Util
.
GetProblematicEnemySpell
()
!=
null
)
return
true
;
else
if
(
Duel
.
Player
==
1
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
Util
.
IsOneEnemyBetterThanValue
(
1500
,
true
))
{
if
(
Util
.
IsOneEnemyBetterThanValue
(
1900
,
true
))
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
}
...
...
@@ -1241,7 +1241,7 @@ namespace WindBot.Game.AI.Decks
public
bool
TG_eff
()
{
if
(
Card
.
Location
!=
CardLocation
.
MonsterZone
)
return
true
;
ClientCard
target
=
AI
.
Utils
.
GetProblematicEnemySpell
();
ClientCard
target
=
Util
.
GetProblematicEnemySpell
();
IList
<
ClientCard
>
list
=
new
List
<
ClientCard
>();
if
(
target
!=
null
)
list
.
Add
(
target
);
foreach
(
ClientCard
spells
in
Enemy
.
GetSpells
())
...
...
@@ -1254,8 +1254,8 @@ namespace WindBot.Game.AI.Decks
public
bool
Safedragon_ss
()
{
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
return
false
;
ClientCard
m
=
AI
.
Utils
.
GetProblematicEnemyMonster
();
if
(
Util
.
IsTurn1OrMain2
())
return
false
;
ClientCard
m
=
Util
.
GetProblematicEnemyMonster
();
foreach
(
ClientCard
ex_m
in
Bot
.
GetMonstersInExtraZone
())
{
if
(
getLinkMarker
(
ex_m
.
Id
)
>=
4
)
return
false
;
...
...
@@ -1302,14 +1302,14 @@ namespace WindBot.Game.AI.Decks
public
bool
Phoneix_ss
()
{
ClientCard
m
=
AI
.
Utils
.
GetProblematicEnemySpell
();
ClientCard
m
=
Util
.
GetProblematicEnemySpell
();
if
(
m
==
null
)
{
if
(
Enemy
.
GetMonsterCount
()
==
0
&&
Enemy
.
LifePoints
<=
1900
&&
Duel
.
Phase
==
DuelPhase
.
Main1
)
{
IList
<
ClientCard
>
m_list
=
new
List
<
ClientCard
>();
List
<
ClientCard
>
list
=
new
List
<
ClientCard
>(
Bot
.
GetMonsters
());
list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
list
.
Sort
(
CardContainer
.
CompareCardAttack
);
foreach
(
ClientCard
monster
in
list
)
{
if
(
getLinkMarker
(
monster
.
Id
)
==
1
&&
monster
.
IsFaceup
())
m_list
.
Add
(
monster
);
...
...
@@ -1326,7 +1326,7 @@ namespace WindBot.Game.AI.Decks
if
(
Bot
.
Hand
.
Count
==
0
)
return
false
;
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
List
<
ClientCard
>
main_list
=
new
List
<
ClientCard
>(
Bot
.
GetMonstersInMainZone
());
main_list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
main_list
.
Sort
(
CardContainer
.
CompareCardAttack
);
foreach
(
ClientCard
s_m
in
main_list
)
{
if
(
s_m
.
IsFacedown
())
continue
;
...
...
@@ -1356,7 +1356,7 @@ namespace WindBot.Game.AI.Decks
public
bool
Phoneix_eff
()
{
AI
.
SelectCard
(
Useless_List
());
ClientCard
target
=
AI
.
Utils
.
GetProblematicEnemySpell
();
ClientCard
target
=
Util
.
GetProblematicEnemySpell
();
if
(
target
!=
null
)
{
AI
.
SelectNextCard
(
target
);
...
...
@@ -1373,7 +1373,7 @@ namespace WindBot.Game.AI.Decks
}
public
bool
Unicorn_ss
()
{
ClientCard
m
=
AI
.
Utils
.
GetProblematicEnemyCard
();
ClientCard
m
=
Util
.
GetProblematicEnemyCard
();
int
link_count
=
0
;
if
(
m
==
null
)
{
...
...
@@ -1381,7 +1381,7 @@ namespace WindBot.Game.AI.Decks
{
IList
<
ClientCard
>
m_list
=
new
List
<
ClientCard
>();
List
<
ClientCard
>
_sort_list
=
new
List
<
ClientCard
>(
Bot
.
GetMonsters
());
_sort_list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
_sort_list
.
Sort
(
CardContainer
.
CompareCardAttack
);
foreach
(
ClientCard
monster
in
_sort_list
)
{
if
(
getLinkMarker
(
monster
.
Id
)
==
2
)
...
...
@@ -1406,7 +1406,7 @@ namespace WindBot.Game.AI.Decks
if
(
Bot
.
Hand
.
Count
==
0
)
return
false
;
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
List
<
ClientCard
>
sort_list
=
Bot
.
GetMonsters
();
sort_list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
sort_list
.
Sort
(
CardContainer
.
CompareCardAttack
);
foreach
(
ClientCard
s_m
in
sort_list
)
{
if
((!
s_m
.
IsCode
(
CardId
.
Eater
)
||
(
s_m
.
IsCode
(
CardId
.
Eater
)
&&
m
.
IsMonsterHasPreventActivationEffectInBattle
()))
&&
getLinkMarker
(
s_m
.
Id
)
<=
2
&&
s_m
.
IsFaceup
())
...
...
@@ -1426,7 +1426,7 @@ namespace WindBot.Game.AI.Decks
public
bool
Unicorn_eff
()
{
ClientCard
m
=
AI
.
Utils
.
GetProblematicEnemyCard
();
ClientCard
m
=
Util
.
GetProblematicEnemyCard
();
if
(
m
==
null
)
return
false
;
// avoid cards that cannot target.
AI
.
SelectCard
(
Useless_List
());
...
...
@@ -1466,7 +1466,7 @@ namespace WindBot.Game.AI.Decks
}
}
List
<
ClientCard
>
sort_main_list
=
new
List
<
ClientCard
>(
Bot
.
GetMonstersInMainZone
());
sort_main_list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
sort_main_list
.
Sort
(
CardContainer
.
CompareCardAttack
);
foreach
(
ClientCard
m
in
sort_main_list
)
{
if
(
m
.
Attack
<
1900
&&
!
targets
.
ContainsCardWithId
(
m
.
Id
)
&&
m
.
IsFaceup
())
...
...
@@ -1493,8 +1493,8 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
Useless_List
());
return
true
;
}
//if (ActivateDescription ==
AI.Utils
.GetStringId(CardId.Snake, 2)) return true;
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
Snake
,
1
))
//if (ActivateDescription ==
Util
.GetStringId(CardId.Snake, 2)) return true;
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
Snake
,
1
))
{
foreach
(
ClientCard
hand
in
Bot
.
Hand
)
{
...
...
@@ -1525,11 +1525,11 @@ namespace WindBot.Game.AI.Decks
if
(
material_list
.
Count
==
2
)
break
;
}
if
(
material_list
.
Count
<
2
)
return
false
;
if
(
Enemy
.
GetMonsterCount
()
==
0
||
AI
.
Utils
.
GetProblematicEnemyMonster
(
2000
)
==
null
)
if
(
Enemy
.
GetMonsterCount
()
==
0
||
Util
.
GetProblematicEnemyMonster
(
2000
)
==
null
)
{
AI
.
SelectMaterials
(
material_list
);
return
true
;
}
else
if
(
AI
.
Utils
.
GetProblematicEnemyMonster
(
2000
)
!=
null
&&
Bot
.
HasInExtra
(
CardId
.
Borrel
)
&&
!
Bot
.
HasInMonstersZone
(
CardId
.
Missus
))
}
else
if
(
Util
.
GetProblematicEnemyMonster
(
2000
)
!=
null
&&
Bot
.
HasInExtra
(
CardId
.
Borrel
)
&&
!
Bot
.
HasInMonstersZone
(
CardId
.
Missus
))
{
AI
.
SelectMaterials
(
material_list
);
return
true
;
...
...
@@ -1547,9 +1547,9 @@ namespace WindBot.Game.AI.Decks
{
bool
already_link2
=
false
;
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
if
(
AI
.
Utils
.
GetProblematicEnemyMonster
(
2000
)
==
null
)
Logger
.
DebugWriteLine
(
"***borrel:null"
);
else
Logger
.
DebugWriteLine
(
"***borrel:"
+
(
AI
.
Utils
.
GetProblematicEnemyMonster
(
2000
).
Name
??
"unknown"
));
if
(
AI
.
Utils
.
GetProblematicEnemyMonster
(
2000
)
!=
null
||
(
Enemy
.
GetMonsterCount
()
==
0
&&
Duel
.
Phase
==
DuelPhase
.
Main1
&&
Enemy
.
LifePoints
<=
3000
))
if
(
Util
.
GetProblematicEnemyMonster
(
2000
)
==
null
)
Logger
.
DebugWriteLine
(
"***borrel:null"
);
else
Logger
.
DebugWriteLine
(
"***borrel:"
+
(
Util
.
GetProblematicEnemyMonster
(
2000
).
Name
??
"unknown"
));
if
(
Util
.
GetProblematicEnemyMonster
(
2000
)
!=
null
||
(
Enemy
.
GetMonsterCount
()
==
0
&&
Duel
.
Phase
==
DuelPhase
.
Main1
&&
Enemy
.
LifePoints
<=
3000
))
{
foreach
(
ClientCard
e_m
in
Bot
.
GetMonstersInExtraZone
())
{
...
...
@@ -1560,7 +1560,7 @@ namespace WindBot.Game.AI.Decks
}
}
List
<
ClientCard
>
sort_list
=
new
List
<
ClientCard
>(
Bot
.
GetMonstersInMainZone
());
sort_list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
sort_list
.
Sort
(
CardContainer
.
CompareCardAttack
);
foreach
(
ClientCard
m
in
sort_list
)
{
...
...
@@ -1600,7 +1600,7 @@ namespace WindBot.Game.AI.Decks
}
return
true
;
};
ClientCard
BestEnemy
=
AI
.
Utils
.
GetBestEnemyMonster
(
true
);
ClientCard
BestEnemy
=
Util
.
GetBestEnemyMonster
(
true
);
ClientCard
WorstBot
=
Bot
.
GetMonsters
().
GetLowestAttackMonster
();
if
(
BestEnemy
==
null
||
BestEnemy
.
HasPosition
(
CardPosition
.
FaceDown
))
return
false
;
if
(
WorstBot
==
null
||
WorstBot
.
HasPosition
(
CardPosition
.
FaceDown
))
return
false
;
...
...
@@ -1618,9 +1618,9 @@ namespace WindBot.Game.AI.Decks
if
(!
spell_trap_activate
())
return
false
;
if
(
Duel
.
LastChainPlayer
==
1
)
{
if
(
AI
.
Utils
.
GetLastChainCard
().
IsMonster
()
&&
Enemy
.
HasInGraveyard
(
AI
.
Utils
.
GetLastChainCard
().
Id
))
if
(
Util
.
GetLastChainCard
().
IsMonster
()
&&
Enemy
.
HasInGraveyard
(
Util
.
GetLastChainCard
().
Id
))
{
GraveCall_id
=
AI
.
Utils
.
GetLastChainCard
().
Id
;
GraveCall_id
=
Util
.
GetLastChainCard
().
Id
;
GraveCall_count
=
2
;
AI
.
SelectCard
(
GraveCall_id
);
return
true
;
...
...
@@ -1671,7 +1671,7 @@ namespace WindBot.Game.AI.Decks
if
(
newPower
>
bestPower
)
bestPower
=
newPower
;
}
return
AI
.
Utils
.
IsAllEnemyBetterThanValue
(
bestPower
,
true
);
return
Util
.
IsAllEnemyBetterThanValue
(
bestPower
,
true
);
}
public
bool
MonsterRepos
()
...
...
Game/AI/Decks/YosenjuExecutor.cs
View file @
c2a94e8e
...
...
@@ -181,8 +181,8 @@ namespace WindBot.Game.AI.Decks
public
override
IList
<
ClientCard
>
OnSelectXyzMaterial
(
IList
<
ClientCard
>
cards
,
int
min
,
int
max
)
{
IList
<
ClientCard
>
result
=
AI
.
Utils
.
SelectPreferredCards
(
CardId
.
YosenjuTsujik
,
cards
,
min
,
max
);
return
AI
.
Utils
.
CheckSelectCount
(
result
,
cards
,
min
,
max
);
IList
<
ClientCard
>
result
=
Util
.
SelectPreferredCards
(
CardId
.
YosenjuTsujik
,
cards
,
min
,
max
);
return
Util
.
CheckSelectCount
(
result
,
cards
,
min
,
max
);
}
private
bool
PotOfDualityEffect
()
...
...
@@ -227,7 +227,7 @@ namespace WindBot.Game.AI.Decks
private
bool
CardOfDemiseEffect
()
{
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
if
(
Util
.
IsTurn1OrMain2
())
{
CardOfDemiseUsed
=
true
;
return
true
;
...
...
@@ -292,15 +292,15 @@ namespace WindBot.Game.AI.Decks
private
bool
DarkRebellionXyzDragonSummon
()
{
int
selfBestAttack
=
AI
.
Utils
.
GetBestAttack
(
Bot
);
int
oppoBestAttack
=
AI
.
Utils
.
GetBestAttack
(
Enemy
);
int
selfBestAttack
=
Util
.
GetBestAttack
(
Bot
);
int
oppoBestAttack
=
Util
.
GetBestAttack
(
Enemy
);
return
selfBestAttack
<=
oppoBestAttack
;
}
private
bool
DarkRebellionXyzDragonEffect
()
{
int
oppoBestAttack
=
AI
.
Utils
.
GetBestAttack
(
Enemy
);
ClientCard
target
=
AI
.
Utils
.
GetOneEnemyBetterThanValue
(
oppoBestAttack
,
true
);
int
oppoBestAttack
=
Util
.
GetBestAttack
(
Enemy
);
ClientCard
target
=
Util
.
GetOneEnemyBetterThanValue
(
oppoBestAttack
,
true
);
if
(
target
!=
null
)
{
AI
.
SelectCard
(
0
);
...
...
Game/AI/Decks/ZexalWeaponsExecutor.cs
View file @
c2a94e8e
...
...
@@ -139,31 +139,31 @@ namespace WindBot.Game.AI.Decks
public
override
IList
<
ClientCard
>
OnSelectXyzMaterial
(
IList
<
ClientCard
>
cards
,
int
min
,
int
max
)
{
IList
<
ClientCard
>
result
=
AI
.
Utils
.
SelectPreferredCards
(
new
[]
{
IList
<
ClientCard
>
result
=
Util
.
SelectPreferredCards
(
new
[]
{
CardId
.
StarDrawing
,
CardId
.
SolarWindJammer
,
CardId
.
Goblindbergh
},
cards
,
min
,
max
);
return
AI
.
Utils
.
CheckSelectCount
(
result
,
cards
,
min
,
max
);
return
Util
.
CheckSelectCount
(
result
,
cards
,
min
,
max
);
}
private
bool
Number39Utopia
()
{
if
(!
AI
.
Utils
.
HasChainedTrap
(
0
)
&&
Duel
.
Player
==
1
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
Card
.
HasXyzMaterial
(
2
))
if
(!
Util
.
HasChainedTrap
(
0
)
&&
Duel
.
Player
==
1
&&
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
Card
.
HasXyzMaterial
(
2
))
return
true
;
return
false
;
}
private
bool
Number61Volcasaurus
()
{
return
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
2000
,
false
);
return
Util
.
IsOneEnemyBetterThanValue
(
2000
,
false
);
}
private
bool
ZwLionArms
()
{
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
ZwLionArms
,
0
))
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
ZwLionArms
,
0
))
return
true
;
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
ZwLionArms
,
1
))
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
ZwLionArms
,
1
))
return
!
Card
.
IsDisabled
();
return
false
;
}
...
...
@@ -234,7 +234,7 @@ namespace WindBot.Game.AI.Decks
private
bool
KagetokageEffect
()
{
var
lastChainCard
=
AI
.
Utils
.
GetLastChainCard
();
var
lastChainCard
=
Util
.
GetLastChainCard
();
if
(
lastChainCard
==
null
)
return
true
;
return
!
lastChainCard
.
IsCode
(
CardId
.
Goblindbergh
,
CardId
.
TinGoldfish
);
}
...
...
Game/AI/Decks/ZoodiacExecutor.cs
View file @
c2a94e8e
...
...
@@ -157,7 +157,7 @@ namespace WindBot.Game.AI.Decks
||
Duel
.
Phase
==
DuelPhase
.
Damage
))
return
false
;
return
Duel
.
Player
==
0
||
AI
.
Utils
.
IsOneEnemyBetter
();
||
Util
.
IsOneEnemyBetter
();
}
return
true
;
}
...
...
@@ -419,7 +419,7 @@ namespace WindBot.Game.AI.Decks
private
bool
RatpierMaterialEffect
()
{
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
CardId
.
Ratpier
,
1
))
if
(
ActivateDescription
==
Util
.
GetStringId
(
CardId
.
Ratpier
,
1
))
{
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
return
true
;
...
...
@@ -479,7 +479,7 @@ namespace WindBot.Game.AI.Decks
{
if
(
Duel
.
LastChainPlayer
==
0
)
return
false
;
ClientCard
target
=
AI
.
Utils
.
GetBestEnemyCard
(
true
);
ClientCard
target
=
Util
.
GetBestEnemyCard
(
true
);
if
(
target
==
null
)
return
false
;
AI
.
SelectCard
(
...
...
Game/AI/DefaultExecutor.cs
View file @
c2a94e8e
...
...
@@ -216,7 +216,7 @@ namespace WindBot.Game.AI
if
(
Bot
.
BattlingMonster
==
null
)
return
false
;
List
<
ClientCard
>
defenders
=
new
List
<
ClientCard
>(
Duel
.
Fields
[
1
].
GetMonsters
());
defenders
.
Sort
(
AIFunctions
.
CompareDefensePower
);
defenders
.
Sort
(
CardContainer
.
CompareDefensePower
);
defenders
.
Reverse
();
BattlePhaseAction
result
=
OnSelectAttackTarget
(
Bot
.
BattlingMonster
,
defenders
);
if
(
result
!=
null
&&
result
.
Action
==
BattlePhaseAction
.
BattleAction
.
Attack
)
...
...
@@ -285,7 +285,7 @@ namespace WindBot.Game.AI
if
(
Card
.
Location
==
CardLocation
.
Grave
)
{
selected
=
AI
.
Utils
.
GetBestEnemySpell
(
true
);
selected
=
Util
.
GetBestEnemySpell
(
true
);
}
else
{
...
...
@@ -304,7 +304,7 @@ namespace WindBot.Game.AI
/// </summary>
protected
bool
DefaultBookOfMoon
()
{
if
(
AI
.
Utils
.
IsAllEnemyBetter
(
true
))
if
(
Util
.
IsAllEnemyBetter
(
true
))
{
ClientCard
monster
=
Enemy
.
GetMonsters
().
GetHighestAttackMonster
(
true
);
if
(
monster
!=
null
&&
monster
.
HasType
(
CardType
.
Effect
)
&&
!
monster
.
HasType
(
CardType
.
Link
)
&&
(
monster
.
HasType
(
CardType
.
Xyz
)
||
monster
.
Level
>
4
))
...
...
@@ -321,15 +321,15 @@ namespace WindBot.Game.AI
/// </summary>
protected
bool
DefaultCompulsoryEvacuationDevice
()
{
ClientCard
target
=
AI
.
Utils
.
GetProblematicEnemyMonster
(
0
,
true
);
ClientCard
target
=
Util
.
GetProblematicEnemyMonster
(
0
,
true
);
if
(
target
!=
null
)
{
AI
.
SelectCard
(
target
);
return
true
;
}
if
(
AI
.
Utils
.
IsChainTarget
(
Card
))
if
(
Util
.
IsChainTarget
(
Card
))
{
ClientCard
monster
=
AI
.
Utils
.
GetBestEnemyMonster
(
false
,
true
);
ClientCard
monster
=
Util
.
GetBestEnemyMonster
(
false
,
true
);
if
(
monster
!=
null
)
{
AI
.
SelectCard
(
monster
);
...
...
@@ -344,7 +344,7 @@ namespace WindBot.Game.AI
/// </summary>
protected
bool
DefaultCallOfTheHaunted
()
{
if
(!
AI
.
Utils
.
IsAllEnemyBetter
(
true
))
if
(!
Util
.
IsAllEnemyBetter
(
true
))
return
false
;
ClientCard
selected
=
Bot
.
Graveyard
.
OrderByDescending
(
card
=>
card
.
Attack
).
FirstOrDefault
();
AI
.
SelectCard
(
selected
);
...
...
@@ -370,7 +370,7 @@ namespace WindBot.Game.AI
_CardId
.
UltimateAncientGearGolem
,
_CardId
.
RedDragonArchfiend
},
true
))
return
false
;
if
(
AI
.
Utils
.
GetTotalAttackingMonsterAttack
(
1
)
>=
Bot
.
LifePoints
)
return
true
;
if
(
Util
.
GetTotalAttackingMonsterAttack
(
1
)
>=
Bot
.
LifePoints
)
return
true
;
}
return
false
;
}
...
...
@@ -391,7 +391,7 @@ namespace WindBot.Game.AI
_CardId
.
UpstartGoblin
,
_CardId
.
CyberEmergency
};
if
(
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
ignoreList
))
if
(
Util
.
GetLastChainCard
().
IsCode
(
ignoreList
))
return
false
;
return
Duel
.
LastChainPlayer
==
1
;
}
...
...
@@ -400,7 +400,7 @@ namespace WindBot.Game.AI
/// </summary>
protected
bool
DefaultGhostOgreAndSnowRabbit
()
{
if
(
AI
.
Utils
.
GetLastChainCard
()
!=
null
&&
AI
.
Utils
.
GetLastChainCard
().
IsDisabled
())
if
(
Util
.
GetLastChainCard
()
!=
null
&&
Util
.
GetLastChainCard
().
IsDisabled
())
return
false
;
return
DefaultTrap
();
}
...
...
@@ -416,8 +416,8 @@ namespace WindBot.Game.AI
/// </summary>
protected
bool
DefaultEffectVeiler
()
{
if
(
AI
.
Utils
.
GetLastChainCard
()
!=
null
&&
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
_CardId
.
GalaxySoldier
)
&&
Enemy
.
Hand
.
Count
>=
3
)
return
false
;
if
(
AI
.
Utils
.
ChainContainsCard
(
_CardId
.
EffectVeiler
))
if
(
Util
.
GetLastChainCard
()
!=
null
&&
Util
.
GetLastChainCard
().
IsCode
(
_CardId
.
GalaxySoldier
)
&&
Enemy
.
Hand
.
Count
>=
3
)
return
false
;
if
(
Util
.
ChainContainsCard
(
_CardId
.
EffectVeiler
))
return
false
;
return
DefaultBreakthroughSkill
();
}
...
...
@@ -438,7 +438,7 @@ namespace WindBot.Game.AI
{
foreach
(
int
id
in
targetList
)
{
if
(
AI
.
Utils
.
GetLastChainCard
().
IsCode
(
id
))
if
(
Util
.
GetLastChainCard
().
IsCode
(
id
))
{
AI
.
SelectCard
(
id
);
return
UniqueFaceupSpell
();
...
...
@@ -473,7 +473,7 @@ namespace WindBot.Game.AI
}
}
ClientCard
LastChainCard
=
AI
.
Utils
.
GetLastChainCard
();
ClientCard
LastChainCard
=
Util
.
GetLastChainCard
();
if
(
LastChainCard
!=
null
&&
LastChainCard
.
Controller
==
1
&&
LastChainCard
.
Location
==
CardLocation
.
MonsterZone
&&
!
LastChainCard
.
IsDisabled
()
&&
!
LastChainCard
.
IsShouldNotBeTarget
()
&&
!
LastChainCard
.
IsShouldNotBeSpellTrapTarget
())
...
...
@@ -506,7 +506,7 @@ namespace WindBot.Game.AI
/// </summary>
protected
bool
DefaultSolemnJudgment
()
{
return
!
AI
.
Utils
.
IsChainTargetOnly
(
Card
)
&&
!(
Duel
.
Player
==
0
&&
Duel
.
LastChainPlayer
==
-
1
)
&&
DefaultTrap
();
return
!
Util
.
IsChainTargetOnly
(
Card
)
&&
!(
Duel
.
Player
==
0
&&
Duel
.
LastChainPlayer
==
-
1
)
&&
DefaultTrap
();
}
/// <summary>
...
...
@@ -530,7 +530,7 @@ namespace WindBot.Game.AI
/// </summary>
protected
bool
DefaultTorrentialTribute
()
{
return
!
AI
.
Utils
.
HasChainedTrap
(
0
)
&&
AI
.
Utils
.
IsAllEnemyBetter
(
true
);
return
!
Util
.
HasChainedTrap
(
0
)
&&
Util
.
IsAllEnemyBetter
(
true
);
}
/// <summary>
...
...
@@ -554,7 +554,7 @@ namespace WindBot.Game.AI
/// </summary>
protected
bool
DefaultHammerShot
()
{
return
AI
.
Utils
.
IsOneEnemyBetter
(
true
);
return
Util
.
IsOneEnemyBetter
(
true
);
}
/// <summary>
...
...
@@ -562,7 +562,7 @@ namespace WindBot.Game.AI
/// </summary>
protected
bool
DefaultDarkHole
()
{
return
AI
.
Utils
.
IsOneEnemyBetter
();
return
Util
.
IsOneEnemyBetter
();
}
/// <summary>
...
...
@@ -570,7 +570,7 @@ namespace WindBot.Game.AI
/// </summary>
protected
bool
DefaultRaigeki
()
{
return
AI
.
Utils
.
IsOneEnemyBetter
();
return
Util
.
IsOneEnemyBetter
();
}
/// <summary>
...
...
@@ -578,7 +578,7 @@ namespace WindBot.Game.AI
/// </summary>
protected
bool
DefaultSmashingGround
()
{
return
AI
.
Utils
.
IsOneEnemyBetter
();
return
Util
.
IsOneEnemyBetter
();
}
/// <summary>
...
...
@@ -639,7 +639,7 @@ namespace WindBot.Game.AI
(
4000
-
Card
.
Defense
)
*
2
>
(
4000
-
Card
.
Attack
))
return
true
;
bool
enemyBetter
=
AI
.
Utils
.
IsAllEnemyBetter
(
true
);
bool
enemyBetter
=
Util
.
IsAllEnemyBetter
(
true
);
if
(
Card
.
IsAttack
()
&&
enemyBetter
)
return
true
;
if
(
Card
.
IsDefense
()
&&
!
enemyBetter
&&
Card
.
Attack
>=
Card
.
Defense
)
...
...
@@ -677,7 +677,7 @@ namespace WindBot.Game.AI
/// </summary>
protected
bool
DefaultOnBecomeTarget
()
{
if
(
AI
.
Utils
.
IsChainTarget
(
Card
))
return
true
;
if
(
Util
.
IsChainTarget
(
Card
))
return
true
;
int
[]
destroyAllList
=
{
_CardId
.
EvilswarmExcitonKnight
,
...
...
@@ -691,7 +691,7 @@ namespace WindBot.Game.AI
_CardId
.
DarkMagicAttack
};
if
(
AI
.
Utils
.
ChainContainsCard
(
destroyAllList
))
return
true
;
if
(
Util
.
ChainContainsCard
(
destroyAllList
))
return
true
;
if
(
Enemy
.
HasInSpellZone
(
destroyAllOpponentList
,
true
))
return
true
;
// TODO: ChainContainsCard(id, player)
return
false
;
...
...
@@ -709,7 +709,7 @@ namespace WindBot.Game.AI
/// </summary>
protected
bool
DefaultUniqueTrap
()
{
if
(
AI
.
Utils
.
HasChainedTrap
(
0
))
if
(
Util
.
HasChainedTrap
(
0
))
return
false
;
return
UniqueFaceupSpell
();
...
...
@@ -750,9 +750,9 @@ namespace WindBot.Game.AI
return
false
;
if
(
Bot
.
LifePoints
<=
1000
)
return
false
;
if
(
Bot
.
LifePoints
<=
Enemy
.
LifePoints
&&
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
_CardId
.
ChickenGame
,
0
))
if
(
Bot
.
LifePoints
<=
Enemy
.
LifePoints
&&
ActivateDescription
==
Util
.
GetStringId
(
_CardId
.
ChickenGame
,
0
))
return
true
;
if
(
Bot
.
LifePoints
>
Enemy
.
LifePoints
&&
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
_CardId
.
ChickenGame
,
1
))
if
(
Bot
.
LifePoints
>
Enemy
.
LifePoints
&&
ActivateDescription
==
Util
.
GetStringId
(
_CardId
.
ChickenGame
,
1
))
return
true
;
return
false
;
}
...
...
@@ -819,7 +819,7 @@ namespace WindBot.Game.AI
return
true
;
}
}
ClientCard
lastchaincard
=
AI
.
Utils
.
GetLastChainCard
();
ClientCard
lastchaincard
=
Util
.
GetLastChainCard
();
if
(
Duel
.
LastChainPlayer
==
1
&&
lastchaincard
!=
null
&&
!
lastchaincard
.
IsDisabled
())
{
if
(
lastchaincard
.
HasType
(
CardType
.
Ritual
))
...
...
@@ -848,7 +848,7 @@ namespace WindBot.Game.AI
return
true
;
}
}
if
(
AI
.
Utils
.
IsChainTarget
(
Card
))
if
(
Util
.
IsChainTarget
(
Card
))
{
AI
.
SelectOption
(
XYZ
);
return
true
;
...
...
@@ -933,7 +933,7 @@ namespace WindBot.Game.AI
AI
.
SelectCard
(
card
);
return
true
;
}
card
=
AI
.
Utils
.
GetOneEnemyBetterThanValue
(
Card
.
GetDefensePower
());
card
=
Util
.
GetOneEnemyBetterThanValue
(
Card
.
GetDefensePower
());
if
(
card
!=
null
)
{
AI
.
SelectCard
(
card
);
...
...
@@ -947,8 +947,8 @@ namespace WindBot.Game.AI
/// </summary>
protected
bool
DefaultNumberS39UtopiaTheLightningSummon
()
{
int
bestBotAttack
=
AI
.
Utils
.
GetBestAttack
(
Bot
);
return
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
bestBotAttack
,
false
);
int
bestBotAttack
=
Util
.
GetBestAttack
(
Bot
);
return
Util
.
IsOneEnemyBetterThanValue
(
bestBotAttack
,
false
);
}
/// <summary>
...
...
@@ -991,9 +991,9 @@ namespace WindBot.Game.AI
/// </summary>
protected
bool
DefaultStardustDragonSummon
()
{
int
selfBestAttack
=
AI
.
Utils
.
GetBestAttack
(
Bot
);
int
oppoBestAttack
=
AI
.
Utils
.
GetBestPower
(
Enemy
);
return
(
selfBestAttack
<=
oppoBestAttack
&&
oppoBestAttack
<=
2500
)
||
AI
.
Utils
.
IsTurn1OrMain2
();
int
selfBestAttack
=
Util
.
GetBestAttack
(
Bot
);
int
oppoBestAttack
=
Util
.
GetBestPower
(
Enemy
);
return
(
selfBestAttack
<=
oppoBestAttack
&&
oppoBestAttack
<=
2500
)
||
Util
.
IsTurn1OrMain2
();
}
/// <summary>
...
...
@@ -1009,7 +1009,7 @@ namespace WindBot.Game.AI
/// </summary>
protected
bool
DefaultCastelTheSkyblasterMusketeerSummon
()
{
return
AI
.
Utils
.
GetProblematicEnemyCard
()
!=
null
;
return
Util
.
GetProblematicEnemyCard
()
!=
null
;
}
/// <summary>
...
...
@@ -1017,9 +1017,9 @@ namespace WindBot.Game.AI
/// </summary>
protected
bool
DefaultCastelTheSkyblasterMusketeerEffect
()
{
if
(
ActivateDescription
==
AI
.
Utils
.
GetStringId
(
_CardId
.
CastelTheSkyblasterMusketeer
,
0
))
if
(
ActivateDescription
==
Util
.
GetStringId
(
_CardId
.
CastelTheSkyblasterMusketeer
,
0
))
return
false
;
ClientCard
target
=
AI
.
Utils
.
GetProblematicEnemyCard
();
ClientCard
target
=
Util
.
GetProblematicEnemyCard
();
if
(
target
!=
null
)
{
AI
.
SelectCard
(
0
);
...
...
@@ -1034,8 +1034,8 @@ namespace WindBot.Game.AI
/// </summary>
protected
bool
DefaultScarlightRedDragonArchfiendSummon
()
{
int
selfBestAttack
=
AI
.
Utils
.
GetBestAttack
(
Bot
);
int
oppoBestAttack
=
AI
.
Utils
.
GetBestPower
(
Enemy
);
int
selfBestAttack
=
Util
.
GetBestAttack
(
Bot
);
int
oppoBestAttack
=
Util
.
GetBestPower
(
Enemy
);
return
(
selfBestAttack
<=
oppoBestAttack
&&
oppoBestAttack
<=
3000
)
||
DefaultScarlightRedDragonArchfiendEffect
();
}
...
...
@@ -1061,7 +1061,7 @@ namespace WindBot.Game.AI
||
((
Bot
.
BattlingMonster
.
Attack
<
Enemy
.
BattlingMonster
.
Defense
)
&&
(
Bot
.
BattlingMonster
.
Attack
+
Enemy
.
BattlingMonster
.
Attack
>
Enemy
.
BattlingMonster
.
Defense
)));
}
if
(
AI
.
Utils
.
IsTurn1OrMain2
()
&&
HonestEffectCount
<=
5
)
if
(
Util
.
IsTurn1OrMain2
()
&&
HonestEffectCount
<=
5
)
{
HonestEffectCount
++;
return
true
;
...
...
Game/AI/Executor.cs
View file @
c2a94e8e
...
...
@@ -14,6 +14,7 @@ namespace WindBot.Game.AI
public
Duel
Duel
{
get
;
private
set
;
}
public
IList
<
CardExecutor
>
Executors
{
get
;
private
set
;
}
public
GameAI
AI
{
get
;
private
set
;
}
public
AIUtil
Util
{
get
;
private
set
;
}
protected
MainPhase
Main
{
get
;
private
set
;
}
protected
BattlePhase
Battle
{
get
;
private
set
;
}
...
...
@@ -29,6 +30,7 @@ namespace WindBot.Game.AI
{
Duel
=
duel
;
AI
=
ai
;
Util
=
new
AIUtil
(
duel
);
Executors
=
new
List
<
CardExecutor
>();
Bot
=
Duel
.
Fields
[
0
];
...
...
Game/GameAI.cs
View file @
c2a94e8e
...
...
@@ -10,7 +10,6 @@ namespace WindBot.Game
public
GameClient
Game
{
get
;
private
set
;
}
public
Duel
Duel
{
get
;
private
set
;
}
public
Executor
Executor
{
get
;
set
;
}
public
AIFunctions
Utils
{
get
;
private
set
;
}
private
Dialogs
_dialogs
;
...
...
@@ -18,7 +17,6 @@ namespace WindBot.Game
{
Game
=
game
;
Duel
=
duel
;
Utils
=
new
AIFunctions
(
duel
);
_dialogs
=
new
Dialogs
(
game
);
}
...
...
@@ -165,11 +163,11 @@ namespace WindBot.Game
// Sort the attackers and defenders, make monster with higher attack go first.
List
<
ClientCard
>
attackers
=
new
List
<
ClientCard
>(
battle
.
AttackableCards
);
attackers
.
Sort
(
AIFunctions
.
CompareCardAttack
);
attackers
.
Sort
(
CardContainer
.
CompareCardAttack
);
attackers
.
Reverse
();
List
<
ClientCard
>
defenders
=
new
List
<
ClientCard
>(
Duel
.
Fields
[
1
].
GetMonsters
());
defenders
.
Sort
(
AIFunctions
.
CompareDefensePower
);
defenders
.
Sort
(
CardContainer
.
CompareDefensePower
);
defenders
.
Reverse
();
// Let executor decide which card should attack first.
...
...
@@ -440,7 +438,7 @@ namespace WindBot.Game
}
if
(
ShouldExecute
(
exec
,
card
,
ExecutorType
.
SummonOrSet
))
{
if
(
Utils
.
IsAllEnemyBetter
(
true
)
&&
Utils
.
IsAllEnemyBetterThanValue
(
card
.
Attack
+
300
,
false
)
&&
if
(
Executor
.
Util
.
IsAllEnemyBetter
(
true
)
&&
Executor
.
Util
.
IsAllEnemyBetterThanValue
(
card
.
Attack
+
300
,
false
)
&&
main
.
MonsterSetableCards
.
Contains
(
card
))
{
_dialogs
.
SendSetMonster
();
...
...
@@ -702,7 +700,7 @@ namespace WindBot.Game
// Always choose the minimum and lowest atk.
List
<
ClientCard
>
sorted
=
new
List
<
ClientCard
>();
sorted
.
AddRange
(
cards
);
sorted
.
Sort
(
AIFunctions
.
CompareCardAttack
);
sorted
.
Sort
(
CardContainer
.
CompareCardAttack
);
IList
<
ClientCard
>
selected
=
new
List
<
ClientCard
>();
...
...
WindBot.csproj
View file @
c2a94e8e
...
...
@@ -59,7 +59,7 @@
</ItemGroup>
<ItemGroup>
<Compile
Include=
"Config.cs"
/>
<Compile
Include=
"Game\AI\AI
Functions
.cs"
/>
<Compile
Include=
"Game\AI\AI
Util
.cs"
/>
<Compile
Include=
"Game\AI\CardContainer.cs"
/>
<Compile
Include=
"Game\AI\CardExecutor.cs"
/>
<Compile
Include=
"Game\AI\CardExtension.cs"
/>
...
...
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