Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
W
Windbot-408
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
神之吹息
Windbot-408
Commits
3f0e0200
Commit
3f0e0200
authored
Apr 04, 2018
by
mercury233
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update Trickstar deck
parent
5b861398
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
397 additions
and
127 deletions
+397
-127
Game/AI/Decks/TrickstarExecutor.cs
Game/AI/Decks/TrickstarExecutor.cs
+397
-127
No files found.
Game/AI/Decks/TrickstarExecutor.cs
View file @
3f0e0200
...
@@ -30,6 +30,8 @@ namespace WindBot.Game.AI.Decks
...
@@ -30,6 +30,8 @@ namespace WindBot.Game.AI.Decks
public
const
int
Sheep
=
73915051
;
public
const
int
Sheep
=
73915051
;
public
const
int
Crown
=
22159429
;
public
const
int
Crown
=
22159429
;
public
const
int
Stage
=
35371948
;
public
const
int
Stage
=
35371948
;
public
const
int
GraveCall
=
24224830
;
public
const
int
DarkHole
=
53129443
;
public
const
int
Re
=
21076084
;
public
const
int
Re
=
21076084
;
public
const
int
Ring
=
83555666
;
public
const
int
Ring
=
83555666
;
...
@@ -50,6 +52,8 @@ namespace WindBot.Game.AI.Decks
...
@@ -50,6 +52,8 @@ namespace WindBot.Game.AI.Decks
public
const
int
Beelze
=
34408491
;
public
const
int
Beelze
=
34408491
;
public
const
int
Abyss
=
9753964
;
public
const
int
Abyss
=
9753964
;
public
const
int
Exterio
=
99916754
;
public
const
int
Exterio
=
99916754
;
public
const
int
Ultimate
=
86221741
;
public
const
int
Cardian
=
87460579
;
public
const
int
Missus
=
3987233
;
public
const
int
Missus
=
3987233
;
}
}
...
@@ -57,6 +61,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -57,6 +61,7 @@ namespace WindBot.Game.AI.Decks
public
int
getLinkMarker
(
int
id
)
public
int
getLinkMarker
(
int
id
)
{
{
if
(
id
==
CardId
.
borrel
||
id
==
CardId
.
snake
)
return
4
;
if
(
id
==
CardId
.
borrel
||
id
==
CardId
.
snake
)
return
4
;
else
if
(
id
==
CardId
.
Abyss
||
id
==
CardId
.
Beelze
||
id
==
CardId
.
Exterio
||
id
==
CardId
.
Ultimate
)
return
5
;
else
if
(
id
==
CardId
.
unicorn
)
return
3
;
else
if
(
id
==
CardId
.
unicorn
)
return
3
;
else
if
(
id
==
CardId
.
Crystal
||
id
==
CardId
.
phoneix
||
id
==
CardId
.
SafeDra
||
id
==
CardId
.
Missus
)
return
2
;
else
if
(
id
==
CardId
.
Crystal
||
id
==
CardId
.
phoneix
||
id
==
CardId
.
SafeDra
||
id
==
CardId
.
Missus
)
return
2
;
return
1
;
return
1
;
...
@@ -71,6 +76,9 @@ namespace WindBot.Game.AI.Decks
...
@@ -71,6 +76,9 @@ namespace WindBot.Game.AI.Decks
int
red_ss_count
=
0
;
int
red_ss_count
=
0
;
bool
white_eff_used
=
false
;
bool
white_eff_used
=
false
;
bool
lockbird_useful
=
false
;
bool
lockbird_useful
=
false
;
bool
lockbird_used
=
false
;
int
GraveCall_id
=
0
;
int
GraveCall_count
=
0
;
public
TrickstarExecutor
(
GameAI
ai
,
Duel
duel
)
public
TrickstarExecutor
(
GameAI
ai
,
Duel
duel
)
:
base
(
ai
,
duel
)
:
base
(
ai
,
duel
)
...
@@ -82,50 +90,54 @@ namespace WindBot.Game.AI.Decks
...
@@ -82,50 +90,54 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Grass
,
Grass_ss
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Grass
,
Grass_ss
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Urara
,
Hand_act_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Urara
,
Hand_act_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Ghost
,
Hand_act_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Ghost
,
Hand_act_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Ring
,
DefaultCompulsoryEvacuationDevice
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Ring
,
Ring_act
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Abyss
,
Abyss_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Abyss
,
Abyss_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Exterio
,
Exterio_counter
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Exterio
,
Exterio_counter
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Cardian
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
GraveCall
,
GraveCall_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
DarkHole
,
DarkHole_eff
);
// spell clean
// spell clean
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Stage
,
Stage_Lock
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Stage
,
Stage_Lock
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Feather
,
Feather_Act
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Feather
,
Feather_Act
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Stage
,
Stage_act
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Galaxy
,
GalaxyCyclone
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Galaxy
,
GalaxyCyclone
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
TG
,
TG_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
TG
,
TG_eff
);
// ex_monster act
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Beelze
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Missus
,
Missus_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Crystal
,
Crystal_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SafeDra
,
DefaultCompulsoryEvacuationDevice
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Linkuri
,
Linkuri_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
phoneix
,
Phoneix_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
unicorn
,
Unicorn_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
snake
,
Snake_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
borrel
,
Borrel_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Tuner
,
Tuner_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Tuner
,
Tuner_eff
);
// ex ss
// ex ss
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
snake
,
Snake_ss
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Missus
,
Missus_ss
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
borrel
,
Borrel_ss
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
borrel
,
Borrel_ss
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Missus
,
Missus_ss
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
phoneix
,
Phoneix_ss
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
phoneix
,
Phoneix_ss
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
unicorn
,
Unicorn
_ss
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
snake
,
Snake
_ss
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Crystal
,
Crystal_ss
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Crystal
,
Crystal_ss
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
SafeDra
,
Safedragon_ss
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
SafeDra
,
Safedragon_ss
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Linkuri
,
Linkuri_eff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Linkuri
,
Linkuri_ss
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Linkuri
,
Linkuri_ss
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
unicorn
,
Unicorn_ss
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Linkspi
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Linkspi
);
// ex_monster act
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Beelze
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Missus
,
Missus_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Crystal
,
Crystal_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SafeDra
,
DefaultCompulsoryEvacuationDevice
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
phoneix
,
Phoneix_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
unicorn
,
Unicorn_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
snake
,
Snake_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
borrel
,
Borrel_eff
);
// normal act
// normal act
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Trans
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Trans
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
BF
,
BF_pos
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
BF
,
BF_pos
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
BF
,
BF_pos
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
BF
,
BF_pos
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Sheep
,
Sheep_Act
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Sheep
,
Sheep_Act
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Eater
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Eater
,
Eater_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
LockBird
,
LockBird_act
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
LockBird
,
LockBird_act
);
// ts
// ts
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Stage
,
Stage_act
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Pink
,
Pink_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Pink
,
Pink_eff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Re
,
Reincarnation
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Re
,
Reincarnation
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Red
,
Red_ss
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Red
,
Red_ss
);
...
@@ -235,6 +247,14 @@ namespace WindBot.Game.AI.Decks
...
@@ -235,6 +247,14 @@ namespace WindBot.Game.AI.Decks
if
(!
Enemy
.
HasInMonstersZone
(
CardId
.
Ghost
)
||
Enemy
.
GetHandCount
()
<=
1
)
if
(!
Enemy
.
HasInMonstersZone
(
CardId
.
Ghost
)
||
Enemy
.
GetHandCount
()
<=
1
)
{
{
ClientCard
tosolve
=
AI
.
Utils
.
GetProblematicEnemyCard
();
ClientCard
tosolve
=
AI
.
Utils
.
GetProblematicEnemyCard
();
if
(
tosolve
==
null
)
{
if
(
Duel
.
LastChainPlayer
==
1
&&
AI
.
Utils
.
GetLastChainCard
()
!=
null
)
{
ClientCard
target
=
AI
.
Utils
.
GetLastChainCard
();
if
(
target
.
HasPosition
(
CardPosition
.
FaceUp
)
&&
(
target
.
Location
==
CardLocation
.
MonsterZone
||
target
.
Location
==
CardLocation
.
SpellZone
))
tosolve
=
target
;
}
}
if
(
tosolve
!=
null
)
if
(
tosolve
!=
null
)
{
{
AI
.
SelectCard
(
tosolve
);
AI
.
SelectCard
(
tosolve
);
...
@@ -317,7 +337,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -317,7 +337,7 @@ namespace WindBot.Game.AI.Decks
{
{
if
(
Duel
.
Player
==
0
)
return
false
;
if
(
Duel
.
Player
==
0
)
return
false
;
if
(
Duel
.
Phase
==
DuelPhase
.
End
)
return
true
;
if
(
Duel
.
Phase
==
DuelPhase
.
End
)
return
true
;
if
(
LastChainPlayer
==
1
&&
(
AI
.
Utils
.
IsChainTarget
(
Card
)
||
(
GetLastChainCard
().
Id
==
CardId
.
Feather
&&
!
Bot
.
HasInSpellZone
(
CardId
.
Grass
))))
return
true
;
if
(
Duel
.
LastChainPlayer
==
1
&&
(
AI
.
Utils
.
IsChainTarget
(
Card
)
||
(
AI
.
Utils
.
GetLastChainCard
().
Id
==
CardId
.
Feather
&&
!
Bot
.
HasInSpellZone
(
CardId
.
Grass
))))
return
true
;
if
(
Duel
.
Phase
==
DuelPhase
.
BattleStart
)
if
(
Duel
.
Phase
==
DuelPhase
.
BattleStart
)
{
{
int
total_atk
=
0
;
int
total_atk
=
0
;
...
@@ -349,7 +369,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -349,7 +369,7 @@ namespace WindBot.Game.AI.Decks
stage_locked
=
null
;
stage_locked
=
null
;
return
true
;
return
true
;
}
}
else
if
(
Enemy
.
LifePoints
<=
1000
&&
!
pink_ss
)
else
if
(
Enemy
.
LifePoints
<=
1000
&&
Bot
.
GetRemainingCount
(
CardId
.
Pink
,
1
)
>
0
)
{
{
AI
.
SelectCard
(
new
[]
AI
.
SelectCard
(
new
[]
{
{
...
@@ -403,44 +423,42 @@ namespace WindBot.Game.AI.Decks
...
@@ -403,44 +423,42 @@ namespace WindBot.Game.AI.Decks
if
(
NormalSummoned
)
if
(
NormalSummoned
)
{
{
if
(
Bot
.
HasInMonstersZone
(
CardId
.
Yellow
)
&&
!
Bot
.
HasInHand
(
CardId
.
Red
)
)
if
(
Enemy
.
LifePoints
<=
1000
&&
!
pink_ss
&&
Bot
.
GetRemainingCount
(
CardId
.
Pink
,
1
)
>
0
)
{
{
AI
.
SelectCard
(
new
[]
AI
.
SelectCard
(
new
[]
{
{
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Pink
,
CardId
.
Yellow
,
CardId
.
Yellow
,
CardId
.
Red
,
CardId
.
White
CardId
.
White
});
});
stage_locked
=
null
;
stage_locked
=
null
;
return
true
;
return
true
;
}
}
else
if
(
Enemy
.
LifePoints
<=
1000
&&
!
pink_ss
)
if
(
Enemy
.
GetMonsterCount
()
>
0
&&
AI
.
Utils
.
GetBestEnemyMonster
().
Attack
>=
AI
.
Utils
.
GetBestAttack
(
Bot
)
&&
!
Bot
.
HasInHand
(
CardId
.
White
)
)
{
{
AI
.
SelectCard
(
new
[]
AI
.
SelectCard
(
new
[]
{
{
CardId
.
Pink
,
CardId
.
White
,
CardId
.
Yellow
,
CardId
.
Yellow
,
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
White
CardId
.
Red
});
});
stage_locked
=
null
;
stage_locked
=
null
;
return
true
;
return
true
;
}
}
else
if
(
Enemy
.
GetMonsterCount
()
>
0
&&
AI
.
Utils
.
GetBestEnemyMonster
().
Attack
>=
AI
.
Utils
.
GetBestAttack
(
Bot
))
if
(
Bot
.
HasInMonstersZone
(
CardId
.
Yellow
)
&&
!
Bot
.
HasInHand
(
CardId
.
Red
))
{
{
AI
.
SelectCard
(
new
[]
AI
.
SelectCard
(
new
[]
{
{
CardId
.
White
,
CardId
.
Red
,
CardId
.
Yellow
,
CardId
.
Pink
,
CardId
.
Pink
,
CardId
.
Red
CardId
.
Yellow
,
CardId
.
White
});
});
stage_locked
=
null
;
stage_locked
=
null
;
return
true
;
return
true
;
}
}
else
if
(!
Bot
.
HasInSpellZone
(
CardId
.
Stage
))
{
AI
.
SelectCard
(
new
[]
AI
.
SelectCard
(
new
[]
{
{
CardId
.
Yellow
,
CardId
.
Yellow
,
...
@@ -451,7 +469,6 @@ namespace WindBot.Game.AI.Decks
...
@@ -451,7 +469,6 @@ namespace WindBot.Game.AI.Decks
stage_locked
=
null
;
stage_locked
=
null
;
return
true
;
return
true
;
}
}
}
stage_locked
=
null
;
stage_locked
=
null
;
return
false
;
return
false
;
}
}
...
@@ -463,14 +480,15 @@ namespace WindBot.Game.AI.Decks
...
@@ -463,14 +480,15 @@ namespace WindBot.Game.AI.Decks
public
bool
Hand_act_eff
()
public
bool
Hand_act_eff
()
{
{
if
(
GraveCall_count
>
0
&&
GraveCall_id
==
Card
.
Id
)
return
false
;
if
(
Card
.
Id
==
CardId
.
Urara
&&
Bot
.
HasInHand
(
CardId
.
LockBird
)
&&
Bot
.
HasInSpellZone
(
CardId
.
Re
))
return
false
;
if
(
Card
.
Id
==
CardId
.
Urara
&&
Bot
.
HasInHand
(
CardId
.
LockBird
)
&&
Bot
.
HasInSpellZone
(
CardId
.
Re
))
return
false
;
if
(
Card
.
Id
==
CardId
.
Ghost
&&
Card
.
Location
==
CardLocation
.
Hand
&&
Bot
.
HasInMonstersZone
(
CardId
.
Ghost
))
return
false
;
if
(
Card
.
Id
==
CardId
.
Ghost
&&
Card
.
Location
==
CardLocation
.
Hand
&&
Bot
.
HasInMonstersZone
(
CardId
.
Ghost
))
return
false
;
return
(
LastChainPlayer
==
1
);
return
(
Duel
.
LastChainPlayer
==
1
);
}
}
public
bool
Exterio_counter
()
public
bool
Exterio_counter
()
{
{
if
(
LastChainPlayer
==
1
)
if
(
Duel
.
LastChainPlayer
==
1
)
{
{
AI
.
SelectCard
(
Useless_List
());
AI
.
SelectCard
(
Useless_List
());
return
true
;
return
true
;
...
@@ -480,7 +498,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -480,7 +498,7 @@ namespace WindBot.Game.AI.Decks
public
bool
G_act
()
public
bool
G_act
()
{
{
return
(
Duel
.
Player
==
1
);
return
(
Duel
.
Player
==
1
&&
!(
GraveCall_count
>
0
&&
GraveCall_id
==
Card
.
Id
)
);
}
}
public
bool
Pink_eff
()
public
bool
Pink_eff
()
...
@@ -526,7 +544,9 @@ namespace WindBot.Game.AI.Decks
...
@@ -526,7 +544,9 @@ namespace WindBot.Game.AI.Decks
public
bool
Eater_ss
()
public
bool
Eater_ss
()
{
{
if
(
AI
.
Utils
.
GetProblematicEnemyMonster
()
==
null
&&
Bot
.
ExtraDeck
.
Count
<
5
)
return
false
;
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
return
false
;
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
return
false
;
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
if
(
Bot
.
SpellZone
[
5
]
!=
null
&&
Bot
.
SpellZone
[
5
].
IsFacedown
())
if
(
Bot
.
SpellZone
[
5
]
!=
null
&&
Bot
.
SpellZone
[
5
].
IsFacedown
())
{
{
...
@@ -545,7 +565,8 @@ namespace WindBot.Game.AI.Decks
...
@@ -545,7 +565,8 @@ namespace WindBot.Game.AI.Decks
return
true
;
return
true
;
}
}
}
}
foreach
(
ClientCard
s_c
in
Bot
.
SpellZone
)
Logger
.
DebugWriteLine
(
"*** Eater use up the extra deck."
);
foreach
(
ClientCard
s_c
in
Bot
.
GetSpells
())
{
{
targets
.
Add
(
s_c
);
targets
.
Add
(
s_c
);
if
(
targets
.
Count
>=
5
)
if
(
targets
.
Count
>=
5
)
...
@@ -557,14 +578,22 @@ namespace WindBot.Game.AI.Decks
...
@@ -557,14 +578,22 @@ namespace WindBot.Game.AI.Decks
return
false
;
return
false
;
}
}
public
bool
Eater_eff
()
{
if
(
Enemy
.
BattlingMonster
.
HasPosition
(
CardPosition
.
FaceDown
))
return
true
;
if
(
Enemy
.
BattlingMonster
.
HasPosition
(
CardPosition
.
Attack
)
&&
(
Bot
.
BattlingMonster
.
Attack
-
Enemy
.
BattlingMonster
.
GetDefensePower
()
>=
Enemy
.
LifePoints
))
return
true
;
return
(
Bot
.
BattlingMonster
.
Attack
<=
(
Enemy
.
BattlingMonster
.
GetDefensePower
()
*
2
));
}
public
bool
Red_ss
()
public
bool
Red_ss
()
{
{
if
(
red_ss_count
>=
6
)
return
false
;
if
(
red_ss_count
>=
6
)
return
false
;
if
(
LastChainPlayer
==
0
&&
GetLastChainCard
().
Id
==
CardId
.
Red
)
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
().
Id
==
CardId
.
Red
)
{
{
foreach
(
ClientCard
m
in
Bot
.
GetMonsters
())
foreach
(
ClientCard
m
in
Bot
.
GetMonsters
())
{
{
if
(
AI
.
Utils
.
IsChainTarget
(
m
))
if
(
AI
.
Utils
.
IsChainTarget
(
m
)
&&
IsTrickstar
(
m
.
Id
)
)
{
{
red_ss_count
+=
1
;
red_ss_count
+=
1
;
AI
.
SelectCard
(
m
);
AI
.
SelectCard
(
m
);
...
@@ -572,7 +601,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -572,7 +601,7 @@ namespace WindBot.Game.AI.Decks
}
}
}
}
}
}
if
(
LastChainPlayer
==
1
)
return
true
;
if
(
Duel
.
LastChainPlayer
==
1
)
return
true
;
if
(
Duel
.
Player
==
0
)
if
(
Duel
.
Player
==
0
)
{
{
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
return
false
;
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
return
false
;
...
@@ -582,9 +611,9 @@ namespace WindBot.Game.AI.Decks
...
@@ -582,9 +611,9 @@ namespace WindBot.Game.AI.Decks
ClientCard
tosolve_enemy
=
AI
.
Utils
.
GetOneEnemyBetterThanMyBest
();
ClientCard
tosolve_enemy
=
AI
.
Utils
.
GetOneEnemyBetterThanMyBest
();
foreach
(
ClientCard
c
in
self_m
)
foreach
(
ClientCard
c
in
self_m
)
{
{
if
(
IsTrickstar
(
c
.
Id
))
if
(
IsTrickstar
(
c
.
Id
)
&&
c
.
Id
!=
CardId
.
Red
)
{
{
if
(
c
.
Attacked
&&
c
.
Id
!=
CardId
.
Red
)
if
(
c
.
Attacked
)
{
{
AI
.
SelectCard
(
c
);
AI
.
SelectCard
(
c
);
red_ss_count
+=
1
;
red_ss_count
+=
1
;
...
@@ -592,7 +621,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -592,7 +621,7 @@ namespace WindBot.Game.AI.Decks
}
}
if
(
tosolve_enemy
!=
null
)
if
(
tosolve_enemy
!=
null
)
{
{
if
(
Bot
.
HasInHand
(
CardId
.
White
)
&&
c
.
Attack
*
2
<
tosolve_enemy
.
Attack
)
if
(
Bot
.
HasInHand
(
CardId
.
White
)
&&
c
.
Attack
+
c
.
BaseAttack
<
tosolve_enemy
.
Attack
)
{
{
if
(
tosolve_enemy
.
Attack
>
3200
)
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
if
(
tosolve_enemy
.
Attack
>
3200
)
AI
.
SelectPosition
(
CardPosition
.
FaceUpDefence
);
AI
.
SelectCard
(
c
);
AI
.
SelectCard
(
c
);
...
@@ -627,7 +656,6 @@ namespace WindBot.Game.AI.Decks
...
@@ -627,7 +656,6 @@ namespace WindBot.Game.AI.Decks
}
}
}
else
}
else
{
{
if
((
ChainContainsCard
(
53129443
)
||
ChainContainsCard
(
99330325
))
&&
ChainContainsCard
(
CardId
.
Red
))
return
false
;
if
(
Duel
.
Phase
>
DuelPhase
.
Main1
&&
Duel
.
Phase
<
DuelPhase
.
Main2
)
if
(
Duel
.
Phase
>
DuelPhase
.
Main1
&&
Duel
.
Phase
<
DuelPhase
.
Main2
)
{
{
if
(!
Bot
.
HasInHand
(
CardId
.
White
)
&&
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
1600
,
true
))
if
(!
Bot
.
HasInHand
(
CardId
.
White
)
&&
AI
.
Utils
.
IsOneEnemyBetterThanValue
(
1600
,
true
))
...
@@ -659,12 +687,43 @@ namespace WindBot.Game.AI.Decks
...
@@ -659,12 +687,43 @@ namespace WindBot.Game.AI.Decks
CardId
.
White
,
CardId
.
White
,
CardId
.
Pink
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Re
,
CardId
.
Ring
,
CardId
.
Crown
,
CardId
.
Yellow
});
return
true
;
}
if
(
Enemy
.
LifePoints
<=
1000
)
{
if
(
Bot
.
GetRemainingCount
(
CardId
.
Pink
,
1
)
>
0
&&
!
pink_ss
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Pink
,
CardId
.
Stage
,
CardId
.
Red
,
CardId
.
White
,
CardId
.
Re
,
CardId
.
Crown
,
CardId
.
Yellow
});
return
true
;
}
else
if
(
Bot
.
HasInGraveyard
(
CardId
.
Pink
)
&&
Bot
.
GetRemainingCount
(
CardId
.
Crown
,
1
)
>
0
)
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Crown
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Stage
,
CardId
.
Red
,
CardId
.
White
,
CardId
.
Yellow
CardId
.
Yellow
});
});
return
true
;
return
true
;
}
}
else
if
(
Enemy
.
GetMonsterCount
()
==
0
&&
!
AI
.
Utils
.
IsTurn1OrMain2
())
}
if
(
Enemy
.
GetMonsterCount
()
==
0
&&
!
AI
.
Utils
.
IsTurn1OrMain2
())
{
{
if
(
Bot
.
HasInGraveyard
(
CardId
.
Red
)
&&
Bot
.
GetRemainingCount
(
CardId
.
Pink
,
1
)
>
0
&&
!
pink_ss
)
if
(
Bot
.
HasInGraveyard
(
CardId
.
Red
)
&&
Bot
.
GetRemainingCount
(
CardId
.
Pink
,
1
)
>
0
&&
!
pink_ss
)
{
{
...
@@ -675,7 +734,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -675,7 +734,7 @@ namespace WindBot.Game.AI.Decks
CardId
.
White
,
CardId
.
White
,
CardId
.
Re
,
CardId
.
Re
,
CardId
.
Stage
,
CardId
.
Stage
,
CardId
.
Ring
,
CardId
.
Crown
,
CardId
.
Yellow
CardId
.
Yellow
});
});
}
}
...
@@ -683,7 +742,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -683,7 +742,7 @@ namespace WindBot.Game.AI.Decks
{
{
AI
.
SelectCard
(
new
[]
AI
.
SelectCard
(
new
[]
{
{
CardId
.
Ring
,
CardId
.
Crown
,
CardId
.
Red
,
CardId
.
Red
,
CardId
.
White
,
CardId
.
White
,
CardId
.
Re
,
CardId
.
Re
,
...
@@ -701,15 +760,15 @@ namespace WindBot.Game.AI.Decks
...
@@ -701,15 +760,15 @@ namespace WindBot.Game.AI.Decks
CardId
.
Pink
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Re
,
CardId
.
Stage
,
CardId
.
Stage
,
CardId
.
Ring
,
CardId
.
Crown
,
CardId
.
Yellow
CardId
.
Yellow
});
});
}
}
else
if
(
Bot
.
HasInGraveyard
(
CardId
.
White
)
&&
Bot
.
GetRemainingCount
(
CardId
.
Ring
,
1
)
>
0
)
else
if
(
Bot
.
HasInGraveyard
(
CardId
.
White
)
&&
Bot
.
GetRemainingCount
(
CardId
.
Crown
,
1
)
>
0
)
{
{
AI
.
SelectCard
(
new
[]
AI
.
SelectCard
(
new
[]
{
{
CardId
.
Ring
,
CardId
.
Crown
,
CardId
.
Red
,
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Re
,
...
@@ -725,7 +784,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -725,7 +784,7 @@ namespace WindBot.Game.AI.Decks
CardId
.
Red
,
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Re
,
CardId
.
Ring
,
CardId
.
Crown
,
CardId
.
Stage
,
CardId
.
Stage
,
CardId
.
White
,
CardId
.
White
,
CardId
.
Yellow
CardId
.
Yellow
...
@@ -733,10 +792,10 @@ namespace WindBot.Game.AI.Decks
...
@@ -733,10 +792,10 @@ namespace WindBot.Game.AI.Decks
}
}
return
true
;
return
true
;
}
}
else
if
(
AI
.
Utils
.
GetProblematicEnemyMonster
()
!=
null
)
if
(
AI
.
Utils
.
GetProblematicEnemyMonster
()
!=
null
)
{
{
int
atk
=
AI
.
Utils
.
GetProblematicEnemyMonster
().
Attack
;
int
atk
=
AI
.
Utils
.
GetProblematicEnemyMonster
().
Attack
;
if
(
atk
>=
1800
&&
atk
<=
3600
&&
Bot
.
GetRemainingCount
(
CardId
.
White
,
2
)
>
0
)
if
(
atk
>=
1800
&&
atk
<=
3600
&&
Bot
.
GetRemainingCount
(
CardId
.
White
,
2
)
>
0
&&
!
Bot
.
HasInHand
(
CardId
.
White
)
)
{
{
AI
.
SelectCard
(
new
[]
AI
.
SelectCard
(
new
[]
{
{
...
@@ -745,7 +804,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -745,7 +804,7 @@ namespace WindBot.Game.AI.Decks
CardId
.
Pink
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Re
,
CardId
.
Stage
,
CardId
.
Stage
,
CardId
.
Ring
,
CardId
.
Crown
,
CardId
.
Yellow
CardId
.
Yellow
});
});
}
}
...
@@ -756,46 +815,47 @@ namespace WindBot.Game.AI.Decks
...
@@ -756,46 +815,47 @@ namespace WindBot.Game.AI.Decks
CardId
.
Red
,
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Re
,
CardId
.
Ring
,
CardId
.
Crown
,
CardId
.
Stage
,
CardId
.
Stage
,
CardId
.
White
,
CardId
.
White
,
CardId
.
Yellow
CardId
.
Yellow
});
});
}
}
return
true
;
return
true
;
}
else
if
((
Bot
.
HasInHand
(
CardId
.
Red
)
||
Bot
.
HasInHand
(
CardId
.
Stage
))
&&
Bot
.
GetRemainingCount
(
CardId
.
Re
,
1
)
>
0
&&
Bot
.
HasInHand
(
CardId
.
LockBird
))
{
}
if
((
Bot
.
HasInHand
(
CardId
.
Red
)
||
Bot
.
HasInHand
(
CardId
.
Stage
)
||
Bot
.
HasInHand
(
CardId
.
Yellow
))
&&
Bot
.
GetRemainingCount
(
CardId
.
Re
,
1
)
>
0
)
{
Logger
.
DebugWriteLine
(
"to search reincarnation"
);
AI
.
SelectCard
(
new
[]
AI
.
SelectCard
(
new
[]
{
{
CardId
.
Re
,
CardId
.
Re
,
CardId
.
Red
,
CardId
.
Red
,
CardId
.
White
,
CardId
.
White
,
CardId
.
Ring
,
CardId
.
Crown
,
CardId
.
Pink
,
CardId
.
Pink
,
CardId
.
Stage
,
CardId
.
Stage
,
CardId
.
Yellow
CardId
.
Yellow
});
});
return
true
;
return
true
;
}
else
}
{
AI
.
SelectCard
(
new
[]
AI
.
SelectCard
(
new
[]
{
{
CardId
.
Red
,
CardId
.
Red
,
CardId
.
Pink
,
CardId
.
Pink
,
CardId
.
Re
,
CardId
.
Re
,
CardId
.
Ring
,
CardId
.
Crown
,
CardId
.
Stage
,
CardId
.
Stage
,
CardId
.
White
,
CardId
.
White
,
CardId
.
Yellow
CardId
.
Yellow
});
});
return
true
;
return
true
;
}
}
}
public
bool
White_eff
()
public
bool
White_eff
()
{
{
if
(
Duel
.
Phase
>
DuelPhase
.
Main1
&&
Duel
.
Phase
<
DuelPhase
.
Main2
)
if
(
Duel
.
Phase
>
DuelPhase
.
Main1
&&
Duel
.
Phase
<
DuelPhase
.
Main2
)
{
{
// from blackwing
// from blackwing
/*
ClientCard bestMy = Bot.GetMonsters().GetHighestAttackMonster();
ClientCard bestMy = Bot.GetMonsters().GetHighestAttackMonster();
ClientCard bestEnemyATK = Enemy.GetMonsters().GetHighestAttackMonster();
ClientCard bestEnemyATK = Enemy.GetMonsters().GetHighestAttackMonster();
ClientCard bestEnemyDEF = Enemy.GetMonsters().GetHighestDefenseMonster();
ClientCard bestEnemyDEF = Enemy.GetMonsters().GetHighestDefenseMonster();
...
@@ -811,6 +871,13 @@ namespace WindBot.Game.AI.Decks
...
@@ -811,6 +871,13 @@ namespace WindBot.Game.AI.Decks
white_eff_used = true;
white_eff_used = true;
return true;
return true;
}
}
*/
if
(
Bot
.
BattlingMonster
==
null
||
Enemy
.
BattlingMonster
==
null
||
!
IsTrickstar
(
Bot
.
BattlingMonster
.
Id
)
||
Bot
.
BattlingMonster
.
HasPosition
(
CardPosition
.
Defence
))
return
false
;
if
(
Bot
.
BattlingMonster
.
Attack
<=
Enemy
.
BattlingMonster
.
RealPower
&&
Bot
.
BattlingMonster
.
Attack
+
Bot
.
BattlingMonster
.
BaseAttack
>=
Enemy
.
BattlingMonster
.
RealPower
)
{
white_eff_used
=
true
;
return
true
;
}
return
false
;
return
false
;
}
else
}
else
{
{
...
@@ -824,24 +891,32 @@ namespace WindBot.Game.AI.Decks
...
@@ -824,24 +891,32 @@ namespace WindBot.Game.AI.Decks
ClientCard
self_card
=
Bot
.
GetMonsters
().
GetHighestAttackMonster
();
ClientCard
self_card
=
Bot
.
GetMonsters
().
GetHighestAttackMonster
();
if
(
tosolve
==
null
||
self_card
==
null
||
(
tosolve
!=
null
&&
self_card
!=
null
&&
!
IsTrickstar
(
self_card
.
Id
)))
if
(
tosolve
==
null
||
self_card
==
null
||
(
tosolve
!=
null
&&
self_card
!=
null
&&
!
IsTrickstar
(
self_card
.
Id
)))
{
{
if
(
Enemy
.
GetMonsters
().
Get
LowestAttackMonster
()
==
null
||
if
(
Enemy
.
GetMonsters
().
Get
HighestAttackMonster
()
==
null
||
Enemy
.
GetMonsters
().
Get
Low
estDefenseMonster
()
==
null
||
Enemy
.
GetMonsters
().
Get
High
estDefenseMonster
()
==
null
||
Enemy
.
GetMonsters
().
Get
LowestAttackMonster
().
Attack
<
2000
||
Enemy
.
GetMonsters
().
Get
HighestAttackMonster
().
GetDefensePower
()
<
2000
||
Enemy
.
GetMonsters
().
Get
LowestDefenseMonster
().
Defense
<
2000
)
Enemy
.
GetMonsters
().
Get
HighestDefenseMonster
().
GetDefensePower
()
<
2000
)
{
{
white_eff_used
=
true
;
white_eff_used
=
true
;
return
true
;
return
true
;
}
}
else
return
false
;
else
return
false
;
}
}
if
(
tosolve
!=
null
&&
self_card
!=
null
&&
IsTrickstar
(
self_card
.
Id
))
if
(
tosolve
!=
null
&&
self_card
!=
null
&&
IsTrickstar
(
self_card
.
Id
)
&&
!
tosolve
.
IsMonsterHasPreventActivationEffectInBattle
()
)
{
{
int
attacker_atk
=
self_card
.
Attack
;
int
defender_power
=
tosolve
.
GetDefensePower
();
int
defender_power
=
tosolve
.
GetDefensePower
();
if
(
attacker_atk
<=
defender_power
&&
attacker_atk
*
2
>=
defender_power
)
Logger
.
DebugWriteLine
(
"battle check 0:"
+
Duel
.
Phase
.
ToString
());
Logger
.
DebugWriteLine
(
"battle check 1:"
+
self_card
.
Attack
.
ToString
());
Logger
.
DebugWriteLine
(
"battle check 2:"
+
(
self_card
.
Attack
+
self_card
.
BaseAttack
).
ToString
());
Logger
.
DebugWriteLine
(
"battle check 3:"
+
defender_power
.
ToString
());
if
(
self_card
.
Attack
<=
defender_power
&&
self_card
.
Attack
+
self_card
.
BaseAttack
>=
defender_power
)
{
{
return
false
;
return
false
;
}
}
else
if
(
defender_power
<=
2000
)
{
white_eff_used
=
true
;
return
true
;
}
}
}
}
}
return
false
;
return
false
;
...
@@ -850,9 +925,14 @@ namespace WindBot.Game.AI.Decks
...
@@ -850,9 +925,14 @@ namespace WindBot.Game.AI.Decks
public
bool
LockBird_act
()
public
bool
LockBird_act
()
{
{
if
(
Duel
.
Player
==
0
)
return
false
;
if
(
Duel
.
Player
==
0
||
lockbird_used
)
return
false
;
lockbird_useful
=
true
;
lockbird_useful
=
true
;
if
(
Bot
.
HasInSpellZone
(
CardId
.
Re
))
return
ChainContainsCard
(
CardId
.
Re
);
if
(
Bot
.
HasInSpellZone
(
CardId
.
Re
))
{
if
(
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Re
))
lockbird_used
=
true
;
return
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Re
);
}
lockbird_used
=
true
;
return
true
;
return
true
;
}
}
...
@@ -861,7 +941,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -861,7 +941,7 @@ namespace WindBot.Game.AI.Decks
if
(
Card
.
Location
==
CardLocation
.
Grave
)
return
Ts_reborn
();
if
(
Card
.
Location
==
CardLocation
.
Grave
)
return
Ts_reborn
();
if
(
Bot
.
HasInHand
(
CardId
.
LockBird
))
if
(
Bot
.
HasInHand
(
CardId
.
LockBird
))
{
{
if
(
lockbird_useful
||
AI
.
Utils
.
IsChainTarget
(
Card
)
||
(
Duel
.
Player
==
1
&&
ChainContainsCard
(
CardId
.
Feather
)))
{
if
(
lockbird_useful
||
AI
.
Utils
.
IsChainTarget
(
Card
)
||
(
Duel
.
Player
==
1
&&
AI
.
Utils
.
ChainContainsCard
(
CardId
.
Feather
)))
{
lockbird_useful
=
false
;
lockbird_useful
=
false
;
return
true
;
return
true
;
}
}
...
@@ -872,8 +952,12 @@ namespace WindBot.Game.AI.Decks
...
@@ -872,8 +952,12 @@ namespace WindBot.Game.AI.Decks
public
bool
Crown_eff
()
public
bool
Crown_eff
()
{
{
if
(
Card
.
Location
==
CardLocation
.
Hand
)
return
Ts_reborn
();
if
(
Card
.
Location
==
CardLocation
.
Hand
)
if
(
Bot
.
HasInHand
(
CardId
.
Pink
))
{
if
(
Duel
.
Phase
<=
DuelPhase
.
Main1
)
return
Ts_reborn
();
return
false
;
}
if
(
Bot
.
HasInHand
(
CardId
.
Pink
)
&&
GraveCall_id
!=
CardId
.
Pink
)
{
{
AI
.
SelectCard
(
CardId
.
Pink
);
AI
.
SelectCard
(
CardId
.
Pink
);
return
true
;
return
true
;
...
@@ -897,6 +981,11 @@ namespace WindBot.Game.AI.Decks
...
@@ -897,6 +981,11 @@ namespace WindBot.Game.AI.Decks
public
bool
Ts_reborn
()
public
bool
Ts_reborn
()
{
{
if
(
Duel
.
Player
==
0
&&
Enemy
.
LifePoints
<=
1000
)
{
AI
.
SelectCard
(
CardId
.
Pink
);
return
true
;
}
bool
can_summon
=
(
Duel
.
Player
==
0
&&
NormalSummoned
);
bool
can_summon
=
(
Duel
.
Player
==
0
&&
NormalSummoned
);
if
(
can_summon
)
if
(
can_summon
)
{
{
...
@@ -919,6 +1008,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -919,6 +1008,7 @@ namespace WindBot.Game.AI.Decks
}
}
else
else
{
{
AI
.
SelectCard
(
new
[]
AI
.
SelectCard
(
new
[]
{
{
CardId
.
Red
,
CardId
.
Red
,
...
@@ -973,8 +1063,9 @@ namespace WindBot.Game.AI.Decks
...
@@ -973,8 +1063,9 @@ namespace WindBot.Game.AI.Decks
public
bool
Tuner_ss
()
public
bool
Tuner_ss
()
{
{
if
(
crystal_eff_used
)
return
false
;
if
(
crystal_eff_used
||
Bot
.
HasInMonstersZone
(
CardId
.
Crystal
)
)
return
false
;
if
(
Bot
.
GetMonsterCount
()
==
0
||
!
Bot
.
HasInExtra
(
CardId
.
Crystal
))
return
false
;
if
(
Bot
.
GetMonsterCount
()
==
0
||
!
Bot
.
HasInExtra
(
CardId
.
Crystal
))
return
false
;
if
(
Card
.
Id
==
CardId
.
Ghost
&&
Bot
.
GetRemainingCount
(
CardId
.
Ghost
,
2
)
<=
0
)
return
false
;
int
count
=
0
;
int
count
=
0
;
if
(
Card
.
Id
!=
CardId
.
Urara
)
count
+=
1
;
if
(
Card
.
Id
!=
CardId
.
Urara
)
count
+=
1
;
foreach
(
ClientCard
hand
in
Bot
.
Hand
)
foreach
(
ClientCard
hand
in
Bot
.
Hand
)
...
@@ -996,6 +1087,23 @@ namespace WindBot.Game.AI.Decks
...
@@ -996,6 +1087,23 @@ namespace WindBot.Game.AI.Decks
return
true
;
return
true
;
}
}
public
bool
Ring_act
()
{
if
(
Duel
.
LastChainPlayer
==
0
&&
AI
.
Utils
.
GetLastChainCard
()
!=
null
&&
AI
.
Utils
.
GetLastChainCard
().
Id
==
CardId
.
Ghost
)
return
false
;
ClientCard
target
=
AI
.
Utils
.
GetProblematicEnemyMonster
();
if
(
target
==
null
&&
AI
.
Utils
.
IsChainTarget
(
Card
))
{
target
=
AI
.
Utils
.
GetBestEnemyMonster
();
}
if
(
target
!=
null
)
{
if
(
Bot
.
LifePoints
<=
target
.
Attack
)
return
false
;
AI
.
SelectCard
(
target
);
return
true
;
}
return
false
;
}
public
bool
Linkuri_ss
()
public
bool
Linkuri_ss
()
{
{
foreach
(
ClientCard
c
in
Bot
.
GetMonsters
())
foreach
(
ClientCard
c
in
Bot
.
GetMonsters
())
...
@@ -1011,7 +1119,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -1011,7 +1119,7 @@ namespace WindBot.Game.AI.Decks
public
bool
Linkuri_eff
()
public
bool
Linkuri_eff
()
{
{
if
(
LastChainPlayer
==
0
&&
GetLastChainCard
().
Id
==
CardId
.
Linkuri
)
return
false
;
if
(
Duel
.
LastChainPlayer
==
0
&&
AI
.
Utils
.
GetLastChainCard
().
Id
==
CardId
.
Linkuri
)
return
false
;
AI
.
SelectCard
(
new
[]
{
CardId
.
Tuner
,
CardId
.
BF
+
1
});
AI
.
SelectCard
(
new
[]
{
CardId
.
Tuner
,
CardId
.
BF
+
1
});
return
true
;
return
true
;
}
}
...
@@ -1027,9 +1135,14 @@ namespace WindBot.Game.AI.Decks
...
@@ -1027,9 +1135,14 @@ namespace WindBot.Game.AI.Decks
});
});
return
true
;
return
true
;
}
}
foreach
(
ClientCard
extra_card
in
Bot
.
GetMonstersInExtraZone
())
{
if
(
getLinkMarker
(
extra_card
.
Id
)
>=
5
)
return
false
;
}
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
t_check
in
Bot
.
GetMonsters
())
foreach
(
ClientCard
t_check
in
Bot
.
GetMonsters
())
{
{
if
(
t_check
.
IsFacedown
())
continue
;
if
(
t_check
.
Id
==
CardId
.
BF
||
t_check
.
Id
==
CardId
.
Tuner
||
t_check
.
Id
==
CardId
.
Urara
||
t_check
.
Id
==
CardId
.
Ghost
)
if
(
t_check
.
Id
==
CardId
.
BF
||
t_check
.
Id
==
CardId
.
Tuner
||
t_check
.
Id
==
CardId
.
Urara
||
t_check
.
Id
==
CardId
.
Ghost
)
{
{
targets
.
Add
(
t_check
);
targets
.
Add
(
t_check
);
...
@@ -1037,8 +1150,11 @@ namespace WindBot.Game.AI.Decks
...
@@ -1037,8 +1150,11 @@ namespace WindBot.Game.AI.Decks
}
}
}
}
if
(
targets
.
Count
==
0
)
return
false
;
if
(
targets
.
Count
==
0
)
return
false
;
foreach
(
ClientCard
e_check
in
Bot
.
GetMonsters
())
List
<
ClientCard
>
m_list
=
new
List
<
ClientCard
>(
Bot
.
GetMonsters
());
m_list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
foreach
(
ClientCard
e_check
in
m_list
)
{
{
if
(
e_check
.
IsFacedown
())
continue
;
if
(
targets
[
0
]
!=
e_check
&&
getLinkMarker
(
e_check
.
Id
)
<=
2
&&
e_check
.
Id
!=
CardId
.
Eater
&&
e_check
.
Id
!=
CardId
.
Crystal
)
if
(
targets
[
0
]
!=
e_check
&&
getLinkMarker
(
e_check
.
Id
)
<=
2
&&
e_check
.
Id
!=
CardId
.
Eater
&&
e_check
.
Id
!=
CardId
.
Crystal
)
{
{
targets
.
Add
(
e_check
);
targets
.
Add
(
e_check
);
...
@@ -1046,7 +1162,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -1046,7 +1162,7 @@ namespace WindBot.Game.AI.Decks
}
}
}
}
if
(
targets
.
Count
<=
1
)
return
false
;
if
(
targets
.
Count
<=
1
)
return
false
;
AI
.
Select
Card
(
targets
);
AI
.
Select
Materials
(
targets
);
return
true
;
return
true
;
}
}
...
@@ -1077,24 +1193,40 @@ namespace WindBot.Game.AI.Decks
...
@@ -1077,24 +1193,40 @@ namespace WindBot.Game.AI.Decks
{
{
if
(
Card
.
Location
!=
CardLocation
.
MonsterZone
)
return
true
;
if
(
Card
.
Location
!=
CardLocation
.
MonsterZone
)
return
true
;
ClientCard
target
=
AI
.
Utils
.
GetProblematicEnemySpell
();
ClientCard
target
=
AI
.
Utils
.
GetProblematicEnemySpell
();
if
(
target
!=
null
)
AI
.
SelectCard
(
target
);
IList
<
ClientCard
>
list
=
new
List
<
ClientCard
>();
if
(
target
!=
null
)
list
.
Add
(
target
);
foreach
(
ClientCard
spells
in
Enemy
.
GetSpells
())
{
if
(
spells
!=
null
&&
!
list
.
Contains
(
spells
))
list
.
Add
(
spells
);
}
AI
.
SelectCard
(
list
);
return
true
;
return
true
;
}
}
public
bool
Safedragon_ss
()
public
bool
Safedragon_ss
()
{
{
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
return
false
;
ClientCard
m
=
AI
.
Utils
.
GetProblematicEnemyMonster
();
ClientCard
m
=
AI
.
Utils
.
GetProblematicEnemyMonster
();
if
(
m
==
null
)
foreach
(
ClientCard
ex_m
in
Bot
.
GetMonstersInExtraZone
()
)
{
{
if
(
Enemy
.
GetMonsterCount
()
==
0
&&
Enemy
.
LifePoints
<=
1100
&&
Duel
.
Phase
<
DuelPhase
.
Battle
)
if
(
getLinkMarker
(
ex_m
.
Id
)
>=
4
)
return
false
;
}
if
((
m
==
null
||
m
.
HasPosition
(
CardPosition
.
FaceDown
))
&&
Enemy
.
LifePoints
<=
1100
)
{
if
(
Enemy
.
GetMonsterCount
()
==
0
&&
Duel
.
Phase
<
DuelPhase
.
Battle
)
{
{
IList
<
ClientCard
>
list
=
new
List
<
ClientCard
>();
IList
<
ClientCard
>
list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
{
if
(
getLinkMarker
(
monster
.
Id
)
<=
2
)
list
.
Add
(
monster
);
if
(
getLinkMarker
(
monster
.
Id
)
<=
2
)
list
.
Add
(
monster
);
if
(
list
.
Count
>
=
2
)
break
;
if
(
list
.
Count
=
=
2
)
break
;
}
}
return
(
list
.
Count
>=
2
&&
GetTotalATK
(
list
)
<=
1100
);
if
(
list
.
Count
==
2
&&
GetTotalATK
(
list
)
<=
1100
)
{
AI
.
SelectMaterials
(
list
);
return
true
;
}
return
false
;
}
}
}
}
ClientCard
ex_1
=
Bot
.
MonsterZone
[
5
];
ClientCard
ex_1
=
Bot
.
MonsterZone
[
5
];
...
@@ -1107,12 +1239,13 @@ namespace WindBot.Game.AI.Decks
...
@@ -1107,12 +1239,13 @@ namespace WindBot.Game.AI.Decks
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
s_m
in
Bot
.
GetMonsters
())
foreach
(
ClientCard
s_m
in
Bot
.
GetMonsters
())
{
{
if
(
s_m
.
Id
==
CardId
.
Eater
)
continue
;
if
(
s_m
!=
Bot
.
MonsterZone
[
5
]
&&
s_m
!=
Bot
.
MonsterZone
[
6
])
targets
.
Add
(
s_m
);
if
(
s_m
!=
Bot
.
MonsterZone
[
5
]
&&
s_m
!=
Bot
.
MonsterZone
[
6
])
targets
.
Add
(
s_m
);
if
(
targets
.
Count
>
=
2
)
break
;
if
(
targets
.
Count
=
=
2
)
break
;
}
}
if
(
targets
.
Count
>
=
2
)
if
(
targets
.
Count
=
=
2
)
{
{
AI
.
Select
Card
(
targets
);
AI
.
Select
Materials
(
targets
);
return
true
;
return
true
;
}
}
return
false
;
return
false
;
...
@@ -1126,37 +1259,47 @@ namespace WindBot.Game.AI.Decks
...
@@ -1126,37 +1259,47 @@ namespace WindBot.Game.AI.Decks
if
(
Enemy
.
GetMonsterCount
()
==
0
&&
Enemy
.
LifePoints
<=
1900
&&
Duel
.
Phase
==
DuelPhase
.
Main1
)
if
(
Enemy
.
GetMonsterCount
()
==
0
&&
Enemy
.
LifePoints
<=
1900
&&
Duel
.
Phase
==
DuelPhase
.
Main1
)
{
{
IList
<
ClientCard
>
m_list
=
new
List
<
ClientCard
>();
IList
<
ClientCard
>
m_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
List
<
ClientCard
>
list
=
new
List
<
ClientCard
>(
Bot
.
GetMonsters
());
list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
foreach
(
ClientCard
monster
in
list
)
{
{
if
(
getLinkMarker
(
monster
.
Id
)
==
1
)
m_list
.
Add
(
monster
);
if
(
getLinkMarker
(
monster
.
Id
)
==
1
&&
monster
.
IsFaceup
()
)
m_list
.
Add
(
monster
);
if
(
m_list
.
Count
==
2
)
break
;
if
(
m_list
.
Count
==
2
)
break
;
}
}
return
(
m_list
.
Count
==
2
&&
GetTotalATK
(
m_list
)
<=
1900
);
if
(
m_list
.
Count
==
2
&&
GetTotalATK
(
m_list
)
<=
1900
)
{
AI
.
SelectMaterials
(
m_list
);
return
true
;
}
}
}
return
false
;
return
false
;
}
}
if
(
Bot
.
Hand
.
Count
==
0
)
return
false
;
if
(
Bot
.
Hand
.
Count
==
0
)
return
false
;
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
ClientCard
ex_zone
=
null
;
List
<
ClientCard
>
main_list
=
new
List
<
ClientCard
>(
Bot
.
GetMonstersInMainZone
());
foreach
(
ClientCard
s_m
in
Bot
.
GetMonsters
())
main_list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
foreach
(
ClientCard
s_m
in
main_list
)
{
{
if
(
s_m
==
Bot
.
MonsterZone
[
5
]
&&
s_m
!=
Bot
.
MonsterZone
[
6
])
if
(
s_m
.
IsFacedown
())
continue
;
if
((
s_m
.
Id
!=
CardId
.
Eater
||
(
s_m
.
Id
==
CardId
.
Eater
&&
s_m
.
IsDisabled
()))
&&
!
targets
.
ContainsCardWithId
(
s_m
.
Id
))
{
{
ex_zone
=
s_m
;
targets
.
Add
(
s_m
);
};
if
(
targets
.
Count
==
2
)
break
;
}
}
else
if
(
targets
.
Count
<
2
)
{
{
foreach
(
ClientCard
s_m
in
Bot
.
GetMonstersInExtraZone
())
{
if
(
s_m
.
IsFacedown
())
continue
;
if
(
s_m
.
Id
!=
CardId
.
Eater
&&
!
targets
.
ContainsCardWithId
(
s_m
.
Id
))
if
(
s_m
.
Id
!=
CardId
.
Eater
&&
!
targets
.
ContainsCardWithId
(
s_m
.
Id
))
{
{
targets
.
Add
(
s_m
);
targets
.
Add
(
s_m
);
};
};
};
if
(
targets
.
Count
==
2
)
break
;
if
(
targets
.
Count
>=
2
)
break
;
}
}
if
(
targets
.
Count
<
2
)
{
targets
.
Add
(
ex_zone
);
}
}
if
(
targets
.
Count
<
2
)
return
false
;
AI
.
SelectMaterials
(
targets
);
AI
.
SelectMaterials
(
targets
);
return
true
;
return
true
;
}
}
...
@@ -1175,28 +1318,36 @@ namespace WindBot.Game.AI.Decks
...
@@ -1175,28 +1318,36 @@ namespace WindBot.Game.AI.Decks
if
(
Enemy
.
GetMonsterCount
()
==
0
&&
Enemy
.
LifePoints
<=
2200
&&
Duel
.
Phase
==
DuelPhase
.
Main1
)
if
(
Enemy
.
GetMonsterCount
()
==
0
&&
Enemy
.
LifePoints
<=
2200
&&
Duel
.
Phase
==
DuelPhase
.
Main1
)
{
{
IList
<
ClientCard
>
m_list
=
new
List
<
ClientCard
>();
IList
<
ClientCard
>
m_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
List
<
ClientCard
>
_sort_list
=
new
List
<
ClientCard
>(
Bot
.
GetMonsters
());
_sort_list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
foreach
(
ClientCard
monster
in
_sort_list
)
{
{
if
(
getLinkMarker
(
monster
.
Id
)
==
2
)
if
(
getLinkMarker
(
monster
.
Id
)
==
2
)
{
{
link_count
+=
2
;
link_count
+=
2
;
m_list
.
Add
(
monster
);
m_list
.
Add
(
monster
);
}
else
if
(
getLinkMarker
(
monster
.
Id
)
==
1
)
}
else
if
(
getLinkMarker
(
monster
.
Id
)
==
1
&&
monster
.
IsFaceup
()
)
{
{
link_count
+=
1
;
link_count
+=
1
;
m_list
.
Add
(
monster
);
m_list
.
Add
(
monster
);
}
}
if
(
link_count
>=
3
)
break
;
if
(
link_count
>=
3
)
break
;
}
}
return
(
link_count
>=
3
&&
GetTotalATK
(
m_list
)
<=
2200
);
if
(
link_count
>=
3
&&
GetTotalATK
(
m_list
)
<=
2200
)
{
AI
.
SelectMaterials
(
m_list
);
return
true
;
}
}
}
return
false
;
return
false
;
}
}
if
(
Bot
.
Hand
.
Count
==
0
)
return
false
;
if
(
Bot
.
Hand
.
Count
==
0
)
return
false
;
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
s_m
in
Bot
.
GetMonsters
())
List
<
ClientCard
>
sort_list
=
Bot
.
GetMonsters
();
sort_list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
foreach
(
ClientCard
s_m
in
sort_list
)
{
{
if
(
s_m
.
Id
!=
CardId
.
Eater
&&
getLinkMarker
(
s_m
.
Id
)
<=
2
)
if
(
(
s_m
.
Id
!=
CardId
.
Eater
||
(
s_m
.
Id
==
CardId
.
Eater
&&
m
.
IsMonsterHasPreventActivationEffectInBattle
()))
&&
getLinkMarker
(
s_m
.
Id
)
<=
2
&&
s_m
.
IsFaceup
()
)
{
{
if
(!
targets
.
ContainsCardWithId
(
s_m
.
Id
))
if
(!
targets
.
ContainsCardWithId
(
s_m
.
Id
))
{
{
...
@@ -1215,8 +1366,23 @@ namespace WindBot.Game.AI.Decks
...
@@ -1215,8 +1366,23 @@ namespace WindBot.Game.AI.Decks
{
{
ClientCard
m
=
AI
.
Utils
.
GetProblematicEnemyCard
();
ClientCard
m
=
AI
.
Utils
.
GetProblematicEnemyCard
();
if
(
m
==
null
)
return
false
;
if
(
m
==
null
)
return
false
;
// avoid cards that cannot target.
AI
.
SelectCard
(
Useless_List
());
AI
.
SelectCard
(
Useless_List
());
AI
.
SelectNextCard
(
m
);
IList
<
ClientCard
>
enemy_list
=
new
List
<
ClientCard
>();
enemy_list
.
Add
(
m
);
foreach
(
ClientCard
enemy
in
Enemy
.
GetMonstersInExtraZone
())
{
if
(
enemy
!=
null
&&
!
enemy_list
.
Contains
(
enemy
))
enemy_list
.
Add
(
enemy
);
}
foreach
(
ClientCard
enemy
in
Enemy
.
GetMonstersInMainZone
())
{
if
(
enemy
!=
null
&&
!
enemy_list
.
Contains
(
enemy
))
enemy_list
.
Add
(
enemy
);
}
foreach
(
ClientCard
enemy
in
Enemy
.
GetSpells
())
{
if
(
enemy
!=
null
&&
!
enemy_list
.
Contains
(
enemy
))
enemy_list
.
Add
(
enemy
);
}
AI
.
SelectNextCard
(
enemy_list
);
return
true
;
return
true
;
}
}
...
@@ -1226,14 +1392,16 @@ namespace WindBot.Game.AI.Decks
...
@@ -1226,14 +1392,16 @@ namespace WindBot.Game.AI.Decks
// exzone fo first
// exzone fo first
foreach
(
ClientCard
e_m
in
Bot
.
GetMonstersInExtraZone
())
foreach
(
ClientCard
e_m
in
Bot
.
GetMonstersInExtraZone
())
{
{
if
(
e_m
.
Attack
<
1900
&&
!
targets
.
ContainsCardWithId
(
e_m
.
Id
))
if
(
e_m
.
Attack
<
1900
&&
!
targets
.
ContainsCardWithId
(
e_m
.
Id
)
&&
e_m
.
IsFaceup
()
)
{
{
targets
.
Add
(
e_m
);
targets
.
Add
(
e_m
);
}
}
}
}
foreach
(
ClientCard
m
in
Bot
.
GetMonstersInMainZone
())
List
<
ClientCard
>
sort_main_list
=
new
List
<
ClientCard
>(
Bot
.
GetMonstersInMainZone
());
sort_main_list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
foreach
(
ClientCard
m
in
sort_main_list
)
{
{
if
(
m
.
Attack
<
1900
&&
!
targets
.
ContainsCardWithId
(
m
.
Id
))
if
(
m
.
Attack
<
1900
&&
!
targets
.
ContainsCardWithId
(
m
.
Id
)
&&
m
.
IsFaceup
()
)
{
{
targets
.
Add
(
m
);
targets
.
Add
(
m
);
}
}
...
@@ -1286,9 +1454,10 @@ namespace WindBot.Game.AI.Decks
...
@@ -1286,9 +1454,10 @@ namespace WindBot.Game.AI.Decks
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
{
if
(
monster
.
HasAttribute
(
CardAttribute
.
Earth
)
&&
getLinkMarker
(
monster
.
Id
)
==
1
)
material_list
.
Add
(
monster
);
if
(
monster
.
HasAttribute
(
CardAttribute
.
Earth
)
&&
getLinkMarker
(
monster
.
Id
)
==
1
)
material_list
.
Add
(
monster
);
if
(
material_list
.
Count
==
2
)
break
;
}
}
if
(
material_list
.
Count
<
2
)
return
false
;
if
(
material_list
.
Count
<
2
)
return
false
;
if
(
Enemy
.
GetMonsterCount
()
==
0
)
if
(
Enemy
.
GetMonsterCount
()
==
0
||
AI
.
Utils
.
GetProblematicEnemyMonster
(
2000
)
==
null
)
{
{
AI
.
SelectMaterials
(
material_list
);
AI
.
SelectMaterials
(
material_list
);
return
true
;
return
true
;
...
@@ -1315,6 +1484,8 @@ namespace WindBot.Game.AI.Decks
...
@@ -1315,6 +1484,8 @@ namespace WindBot.Game.AI.Decks
{
{
bool
already_link2
=
false
;
bool
already_link2
=
false
;
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
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
(
AI
.
Utils
.
GetProblematicEnemyMonster
(
2000
)
!=
null
||
(
Enemy
.
GetMonsterCount
()
==
0
&&
Duel
.
Phase
==
DuelPhase
.
Main1
&&
Enemy
.
LifePoints
<=
3000
))
{
{
foreach
(
ClientCard
e_m
in
Bot
.
GetMonstersInExtraZone
())
foreach
(
ClientCard
e_m
in
Bot
.
GetMonstersInExtraZone
())
...
@@ -1325,7 +1496,10 @@ namespace WindBot.Game.AI.Decks
...
@@ -1325,7 +1496,10 @@ namespace WindBot.Game.AI.Decks
material_list
.
Add
(
e_m
);
material_list
.
Add
(
e_m
);
}
}
}
}
foreach
(
ClientCard
m
in
Bot
.
GetMonstersInMainZone
())
List
<
ClientCard
>
sort_list
=
new
List
<
ClientCard
>(
Bot
.
GetMonstersInMainZone
());
sort_list
.
Sort
(
AIFunctions
.
CompareCardAttack
);
foreach
(
ClientCard
m
in
sort_list
)
{
{
if
(
getLinkMarker
(
m
.
Id
)
<
3
)
if
(
getLinkMarker
(
m
.
Id
)
<
3
)
{
{
...
@@ -1355,7 +1529,10 @@ namespace WindBot.Game.AI.Decks
...
@@ -1355,7 +1529,10 @@ namespace WindBot.Game.AI.Decks
public
bool
Borrel_eff
()
public
bool
Borrel_eff
()
{
{
if
(
ActivateDescription
==
-
1
)
return
true
;
if
(
ActivateDescription
==
-
1
)
{
Logger
.
DebugWriteLine
(
"borrel's ntr effect"
);
return
true
;
};
ClientCard
BestEnemy
=
AI
.
Utils
.
GetBestEnemyMonster
(
true
);
ClientCard
BestEnemy
=
AI
.
Utils
.
GetBestEnemyMonster
(
true
);
ClientCard
WorstBot
=
Bot
.
GetMonsters
().
GetLowestAttackMonster
();
ClientCard
WorstBot
=
Bot
.
GetMonsters
().
GetLowestAttackMonster
();
if
(
BestEnemy
==
null
||
BestEnemy
.
HasPosition
(
CardPosition
.
FaceDown
))
return
false
;
if
(
BestEnemy
==
null
||
BestEnemy
.
HasPosition
(
CardPosition
.
FaceDown
))
return
false
;
...
@@ -1368,10 +1545,51 @@ namespace WindBot.Game.AI.Decks
...
@@ -1368,10 +1545,51 @@ namespace WindBot.Game.AI.Decks
return
false
;
return
false
;
}
}
public
bool
GraveCall_eff
()
{
if
(
Duel
.
LastChainPlayer
==
1
)
{
Logger
.
DebugWriteLine
(
AI
.
Utils
.
GetLastChainCard
().
Name
.
ToString
());
Logger
.
DebugWriteLine
(
AI
.
Utils
.
GetLastChainCard
().
IsMonster
().
ToString
());
Logger
.
DebugWriteLine
(
Enemy
.
HasInGraveyard
(
AI
.
Utils
.
GetLastChainCard
().
Id
).
ToString
());
if
(
AI
.
Utils
.
GetLastChainCard
().
IsMonster
()
&&
Enemy
.
HasInGraveyard
(
AI
.
Utils
.
GetLastChainCard
().
Id
))
{
GraveCall_id
=
AI
.
Utils
.
GetLastChainCard
().
Id
;
GraveCall_count
=
2
;
AI
.
SelectCard
(
GraveCall_id
);
return
true
;
}
}
return
false
;
}
public
bool
DarkHole_eff
()
{
if
(
Bot
.
GetMonsterCount
()
==
0
)
{
int
bestPower
=
-
1
;
foreach
(
ClientCard
hand
in
Bot
.
Hand
)
{
if
(
hand
.
IsMonster
()
&&
hand
.
Attack
>
bestPower
)
bestPower
=
hand
.
Attack
;
}
int
bestenemy
=
-
1
;
foreach
(
ClientCard
enemy
in
Enemy
.
GetMonsters
())
{
if
(
enemy
.
IsMonsterDangerous
())
return
true
;
if
(
enemy
.
IsFaceup
()
&&
(
enemy
.
GetDefensePower
()
>
bestenemy
))
bestenemy
=
enemy
.
GetDefensePower
();
}
return
(
bestPower
<=
bestenemy
);
}
return
false
;
}
public
bool
MonsterRepos
()
public
bool
MonsterRepos
()
{
{
if
(
Card
.
Id
==
CardId
.
Eater
&&
Card
.
IsAttack
())
return
false
;
if
(
Card
.
Id
==
CardId
.
Eater
&&
Card
.
IsAttack
())
return
false
;
if
(
IsTrickstar
(
Card
.
Id
)
&&
!
white_eff_used
&&
Bot
.
HasInHand
(
CardId
.
White
)
&&
Card
.
IsAttack
()
&&
Duel
.
Phase
==
DuelPhase
.
Main1
)
return
false
;
if
(
Card
.
IsFaceup
()
&&
Card
.
IsDefense
()
&&
Card
.
Attack
==
0
)
if
(
Card
.
IsFaceup
()
&&
Card
.
IsDefense
()
&&
Card
.
Attack
==
0
)
return
false
;
return
false
;
bool
enemyBetter
=
AI
.
Utils
.
IsAllEnemyBetter
(
true
);
bool
enemyBetter
=
AI
.
Utils
.
IsAllEnemyBetter
(
true
);
...
@@ -1399,6 +1617,60 @@ namespace WindBot.Game.AI.Decks
...
@@ -1399,6 +1617,60 @@ namespace WindBot.Game.AI.Decks
red_ss_count
=
0
;
red_ss_count
=
0
;
white_eff_used
=
false
;
white_eff_used
=
false
;
lockbird_useful
=
false
;
lockbird_useful
=
false
;
lockbird_used
=
false
;
if
(
GraveCall_count
>
0
)
{
if
(--
GraveCall_count
<=
0
)
{
GraveCall_id
=
0
;
}
}
}
public
override
BattlePhaseAction
OnBattle
(
IList
<
ClientCard
>
attackers
,
IList
<
ClientCard
>
defenders
)
{
if
(
attackers
.
Count
==
0
)
return
AI
.
ToMainPhase2
();
if
(
defenders
.
Count
==
0
)
{
for
(
int
i
=
attackers
.
Count
-
1
;
i
>=
0
;
--
i
)
{
ClientCard
attacker
=
attackers
[
i
];
if
(
attacker
.
Attack
>
0
)
return
AI
.
Attack
(
attacker
,
null
);
}
}
else
{
for
(
int
i
=
defenders
.
Count
-
1
;
i
>=
0
;
--
i
)
{
ClientCard
defender
=
defenders
[
i
];
for
(
int
j
=
0
;
j
<
attackers
.
Count
;
++
j
)
{
ClientCard
attacker
=
attackers
[
j
];
attacker
.
RealPower
=
attacker
.
Attack
;
defender
.
RealPower
=
defender
.
GetDefensePower
();
if
(!
defender
.
IsMonsterHasPreventActivationEffectInBattle
()
&&
!
attacker
.
IsDisabled
())
{
if
((
attacker
.
Id
==
CardId
.
Eater
&&
!
defender
.
HasType
(
CardType
.
Token
)
&&
GraveCall_id
!=
CardId
.
Eater
)
||
attacker
.
Id
==
CardId
.
borrel
)
return
AI
.
Attack
(
attacker
,
defender
);
}
if
(!
OnPreBattleBetween
(
attacker
,
defender
))
continue
;
if
(
attacker
.
RealPower
>
defender
.
RealPower
||
(
attacker
.
RealPower
>=
defender
.
RealPower
&&
j
==
attackers
.
Count
-
1
))
return
AI
.
Attack
(
attacker
,
defender
);
}
}
for
(
int
i
=
attackers
.
Count
-
1
;
i
>=
0
;
--
i
)
{
ClientCard
attacker
=
attackers
[
i
];
if
(
attacker
.
CanDirectAttack
)
return
AI
.
Attack
(
attacker
,
null
);
}
}
if
(!
Battle
.
CanMainPhaseTwo
)
return
AI
.
Attack
(
attackers
[
0
],
(
defenders
.
Count
==
0
)
?
null
:
defenders
[
0
]);
return
AI
.
ToMainPhase2
();
}
}
public
override
bool
OnPreBattleBetween
(
ClientCard
attacker
,
ClientCard
defender
)
public
override
bool
OnPreBattleBetween
(
ClientCard
attacker
,
ClientCard
defender
)
...
@@ -1407,8 +1679,6 @@ namespace WindBot.Game.AI.Decks
...
@@ -1407,8 +1679,6 @@ namespace WindBot.Game.AI.Decks
{
{
if
(
IsTrickstar
(
attacker
.
Id
)
&&
Bot
.
HasInHand
(
CardId
.
White
)
&&
!
white_eff_used
)
if
(
IsTrickstar
(
attacker
.
Id
)
&&
Bot
.
HasInHand
(
CardId
.
White
)
&&
!
white_eff_used
)
attacker
.
RealPower
=
attacker
.
RealPower
*
2
;
attacker
.
RealPower
=
attacker
.
RealPower
*
2
;
else
if
(
attacker
.
Id
==
CardId
.
Eater
)
attacker
.
RealPower
=
99999
;
}
}
return
base
.
OnPreBattleBetween
(
attacker
,
defender
);
return
base
.
OnPreBattleBetween
(
attacker
,
defender
);
}
}
...
...
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