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
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
MyCard
windbot
Commits
cb9047f1
Commit
cb9047f1
authored
Apr 27, 2018
by
mercury233
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add ShouldNotBeTarget and ShouldBeDisabledBeforeItUseEffectMonster enum
fix #47 need more changes to executors
parent
3674b020
Changes
12
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
218 additions
and
41 deletions
+218
-41
Game/AI/AIFunctions.cs
Game/AI/AIFunctions.cs
+21
-21
Game/AI/CardContainer.cs
Game/AI/CardContainer.cs
+14
-14
Game/AI/CardExtension.cs
Game/AI/CardExtension.cs
+32
-0
Game/AI/Decks/BlueEyesExecutor.cs
Game/AI/Decks/BlueEyesExecutor.cs
+1
-1
Game/AI/Decks/ChainBurnExecutor.cs
Game/AI/Decks/ChainBurnExecutor.cs
+1
-1
Game/AI/Decks/LightswornShaddoldinosourExecutor.cs
Game/AI/Decks/LightswornShaddoldinosourExecutor.cs
+2
-2
Game/AI/DefaultExecutor.cs
Game/AI/DefaultExecutor.cs
+18
-2
Game/AI/Enums/ShouldBeDisabledBeforeItUseEffectMonster.cs
Game/AI/Enums/ShouldBeDisabledBeforeItUseEffectMonster.cs
+46
-0
Game/AI/Enums/ShouldNotBeMonsterTarget.cs
Game/AI/Enums/ShouldNotBeMonsterTarget.cs
+17
-0
Game/AI/Enums/ShouldNotBeSpellTarget.cs
Game/AI/Enums/ShouldNotBeSpellTarget.cs
+14
-0
Game/AI/Enums/ShouldNotBeTarget.cs
Game/AI/Enums/ShouldNotBeTarget.cs
+48
-0
WindBot.csproj
WindBot.csproj
+4
-0
No files found.
Game/AI/AIFunctions.cs
View file @
cb9047f1
...
@@ -151,14 +151,14 @@ namespace WindBot.Game.AI
...
@@ -151,14 +151,14 @@ namespace WindBot.Game.AI
return
bestMonster
;
return
bestMonster
;
}
}
public
ClientCard
GetOneEnemyBetterThanValue
(
int
value
,
bool
onlyATK
=
false
)
public
ClientCard
GetOneEnemyBetterThanValue
(
int
value
,
bool
onlyATK
=
false
,
bool
canBeTarget
=
false
)
{
{
ClientCard
bestCard
=
null
;
ClientCard
bestCard
=
null
;
int
bestValue
=
value
;
int
bestValue
=
value
;
for
(
int
i
=
0
;
i
<
7
;
++
i
)
for
(
int
i
=
0
;
i
<
7
;
++
i
)
{
{
ClientCard
card
=
Enemy
.
MonsterZone
[
i
];
ClientCard
card
=
Enemy
.
MonsterZone
[
i
];
if
(
card
==
null
||
card
.
Data
==
null
)
continue
;
if
(
card
==
null
||
card
.
Data
==
null
||
(
canBeTarget
&&
card
.
IsShouldNotBeTarget
())
)
continue
;
if
(
onlyATK
&&
card
.
IsDefense
())
continue
;
if
(
onlyATK
&&
card
.
IsDefense
())
continue
;
int
enemyValue
=
card
.
GetDefensePower
();
int
enemyValue
=
card
.
GetDefensePower
();
if
(
enemyValue
>=
bestValue
)
if
(
enemyValue
>=
bestValue
)
...
@@ -170,52 +170,52 @@ namespace WindBot.Game.AI
...
@@ -170,52 +170,52 @@ namespace WindBot.Game.AI
return
bestCard
;
return
bestCard
;
}
}
public
ClientCard
GetOneEnemyBetterThanMyBest
(
bool
onlyATK
=
false
)
public
ClientCard
GetOneEnemyBetterThanMyBest
(
bool
onlyATK
=
false
,
bool
canBeTarget
=
false
)
{
{
int
bestBotPower
=
GetBestPower
(
Bot
,
onlyATK
);
int
bestBotPower
=
GetBestPower
(
Bot
,
onlyATK
);
return
GetOneEnemyBetterThanValue
(
bestBotPower
,
onlyATK
);
return
GetOneEnemyBetterThanValue
(
bestBotPower
,
onlyATK
,
canBeTarget
);
}
}
public
ClientCard
GetProblematicEnemyCard
(
int
attack
=
0
)
public
ClientCard
GetProblematicEnemyCard
(
int
attack
=
0
,
bool
canBeTarget
=
false
)
{
{
ClientCard
card
=
Enemy
.
MonsterZone
.
GetFloodgate
();
ClientCard
card
=
Enemy
.
MonsterZone
.
GetFloodgate
(
canBeTarget
);
if
(
card
!=
null
)
if
(
card
!=
null
)
return
card
;
return
card
;
card
=
Enemy
.
SpellZone
.
GetFloodgate
();
card
=
Enemy
.
SpellZone
.
GetFloodgate
(
canBeTarget
);
if
(
card
!=
null
)
if
(
card
!=
null
)
return
card
;
return
card
;
card
=
Enemy
.
MonsterZone
.
GetDangerousMonster
();
card
=
Enemy
.
MonsterZone
.
GetDangerousMonster
(
canBeTarget
);
if
(
card
!=
null
)
if
(
card
!=
null
)
return
card
;
return
card
;
card
=
Enemy
.
MonsterZone
.
GetInvincibleMonster
();
card
=
Enemy
.
MonsterZone
.
GetInvincibleMonster
(
canBeTarget
);
if
(
card
!=
null
)
if
(
card
!=
null
)
return
card
;
return
card
;
if
(
attack
==
0
)
if
(
attack
==
0
)
attack
=
GetBestAttack
(
Bot
);
attack
=
GetBestAttack
(
Bot
);
return
GetOneEnemyBetterThanValue
(
attack
,
true
);
return
GetOneEnemyBetterThanValue
(
attack
,
true
,
canBeTarget
);
}
}
public
ClientCard
GetProblematicEnemyMonster
(
int
attack
=
0
)
public
ClientCard
GetProblematicEnemyMonster
(
int
attack
=
0
,
bool
canBeTarget
=
false
)
{
{
ClientCard
card
=
Enemy
.
MonsterZone
.
GetFloodgate
();
ClientCard
card
=
Enemy
.
MonsterZone
.
GetFloodgate
(
canBeTarget
);
if
(
card
!=
null
)
if
(
card
!=
null
)
return
card
;
return
card
;
card
=
Enemy
.
MonsterZone
.
GetDangerousMonster
();
card
=
Enemy
.
MonsterZone
.
GetDangerousMonster
(
canBeTarget
);
if
(
card
!=
null
)
if
(
card
!=
null
)
return
card
;
return
card
;
card
=
Enemy
.
MonsterZone
.
GetInvincibleMonster
();
card
=
Enemy
.
MonsterZone
.
GetInvincibleMonster
(
canBeTarget
);
if
(
card
!=
null
)
if
(
card
!=
null
)
return
card
;
return
card
;
if
(
attack
==
0
)
if
(
attack
==
0
)
attack
=
GetBestAttack
(
Bot
);
attack
=
GetBestAttack
(
Bot
);
return
GetOneEnemyBetterThanValue
(
attack
,
true
);
return
GetOneEnemyBetterThanValue
(
attack
,
true
,
canBeTarget
);
}
}
public
ClientCard
GetProblematicEnemySpell
()
public
ClientCard
GetProblematicEnemySpell
()
...
@@ -224,9 +224,9 @@ namespace WindBot.Game.AI
...
@@ -224,9 +224,9 @@ namespace WindBot.Game.AI
return
card
;
return
card
;
}
}
public
ClientCard
GetBestEnemyCard
(
bool
onlyFaceup
=
false
)
public
ClientCard
GetBestEnemyCard
(
bool
onlyFaceup
=
false
,
bool
canBeTarget
=
false
)
{
{
ClientCard
card
=
GetBestEnemyMonster
(
onlyFaceup
);
ClientCard
card
=
GetBestEnemyMonster
(
onlyFaceup
,
canBeTarget
);
if
(
card
!=
null
)
if
(
card
!=
null
)
return
card
;
return
card
;
...
@@ -237,20 +237,20 @@ namespace WindBot.Game.AI
...
@@ -237,20 +237,20 @@ namespace WindBot.Game.AI
return
null
;
return
null
;
}
}
public
ClientCard
GetBestEnemyMonster
(
bool
onlyFaceup
=
false
)
public
ClientCard
GetBestEnemyMonster
(
bool
onlyFaceup
=
false
,
bool
canBeTarget
=
false
)
{
{
ClientCard
card
=
GetProblematicEnemyMonster
();
ClientCard
card
=
GetProblematicEnemyMonster
(
0
,
canBeTarget
);
if
(
card
!=
null
)
if
(
card
!=
null
)
return
card
;
return
card
;
card
=
Enemy
.
MonsterZone
.
GetHighestAttackMonster
();
card
=
Enemy
.
MonsterZone
.
GetHighestAttackMonster
(
canBeTarget
);
if
(
card
!=
null
)
if
(
card
!=
null
)
return
card
;
return
card
;
List
<
ClientCard
>
monsters
=
Enemy
.
GetMonsters
();
List
<
ClientCard
>
monsters
=
Enemy
.
GetMonsters
();
// after GetHighestAttackMonster, the left monsters must be face-down.
// after GetHighestAttackMonster, the left monsters must be face-down.
if
(
monsters
.
Count
>
0
&&
!
onlyFaceup
)
if
(
monsters
.
Count
>
0
&&
!
onlyFaceup
&&
(!
canBeTarget
||
!
card
.
IsShouldNotBeTarget
())
)
return
monsters
[
0
];
return
monsters
[
0
];
return
null
;
return
null
;
...
...
Game/AI/CardContainer.cs
View file @
cb9047f1
...
@@ -6,13 +6,13 @@ namespace WindBot.Game.AI
...
@@ -6,13 +6,13 @@ namespace WindBot.Game.AI
{
{
public
static
class
CardContainer
public
static
class
CardContainer
{
{
public
static
ClientCard
GetHighestAttackMonster
(
this
IEnumerable
<
ClientCard
>
cards
)
public
static
ClientCard
GetHighestAttackMonster
(
this
IEnumerable
<
ClientCard
>
cards
,
bool
canBeTarget
=
false
)
{
{
int
highestAtk
=
0
;
int
highestAtk
=
0
;
ClientCard
selected
=
null
;
ClientCard
selected
=
null
;
foreach
(
ClientCard
card
in
cards
)
foreach
(
ClientCard
card
in
cards
)
{
{
if
(
card
==
null
||
card
.
Data
==
null
||
card
.
IsFacedown
())
continue
;
if
(
card
==
null
||
card
.
Data
==
null
||
card
.
IsFacedown
()
||
(
canBeTarget
&&
card
.
IsShouldNotBeTarget
())
)
continue
;
if
(
card
.
HasType
(
CardType
.
Monster
)
&&
card
.
Attack
>
highestAtk
)
if
(
card
.
HasType
(
CardType
.
Monster
)
&&
card
.
Attack
>
highestAtk
)
{
{
highestAtk
=
card
.
Attack
;
highestAtk
=
card
.
Attack
;
...
@@ -22,13 +22,13 @@ namespace WindBot.Game.AI
...
@@ -22,13 +22,13 @@ namespace WindBot.Game.AI
return
selected
;
return
selected
;
}
}
public
static
ClientCard
GetHighestDefenseMonster
(
this
IEnumerable
<
ClientCard
>
cards
)
public
static
ClientCard
GetHighestDefenseMonster
(
this
IEnumerable
<
ClientCard
>
cards
,
bool
canBeTarget
=
false
)
{
{
int
highestDef
=
0
;
int
highestDef
=
0
;
ClientCard
selected
=
null
;
ClientCard
selected
=
null
;
foreach
(
ClientCard
card
in
cards
)
foreach
(
ClientCard
card
in
cards
)
{
{
if
(
card
==
null
||
card
.
Data
==
null
||
card
.
IsFacedown
())
continue
;
if
(
card
==
null
||
card
.
Data
==
null
||
card
.
IsFacedown
()
||
(
canBeTarget
&&
card
.
IsShouldNotBeTarget
())
)
continue
;
if
(
card
.
HasType
(
CardType
.
Monster
)
&&
card
.
Defense
>
highestDef
)
if
(
card
.
HasType
(
CardType
.
Monster
)
&&
card
.
Defense
>
highestDef
)
{
{
highestDef
=
card
.
Defense
;
highestDef
=
card
.
Defense
;
...
@@ -38,13 +38,13 @@ namespace WindBot.Game.AI
...
@@ -38,13 +38,13 @@ namespace WindBot.Game.AI
return
selected
;
return
selected
;
}
}
public
static
ClientCard
GetLowestAttackMonster
(
this
IEnumerable
<
ClientCard
>
cards
)
public
static
ClientCard
GetLowestAttackMonster
(
this
IEnumerable
<
ClientCard
>
cards
,
bool
canBeTarget
=
false
)
{
{
int
lowestAtk
=
0
;
int
lowestAtk
=
0
;
ClientCard
selected
=
null
;
ClientCard
selected
=
null
;
foreach
(
ClientCard
card
in
cards
)
foreach
(
ClientCard
card
in
cards
)
{
{
if
(
card
==
null
||
card
.
Data
==
null
||
card
.
IsFacedown
())
continue
;
if
(
card
==
null
||
card
.
Data
==
null
||
card
.
IsFacedown
()
||
(
canBeTarget
&&
card
.
IsShouldNotBeTarget
())
)
continue
;
if
(
lowestAtk
==
0
&&
card
.
HasType
(
CardType
.
Monster
)
||
if
(
lowestAtk
==
0
&&
card
.
HasType
(
CardType
.
Monster
)
||
card
.
HasType
(
CardType
.
Monster
)
&&
card
.
Attack
<
lowestAtk
)
card
.
HasType
(
CardType
.
Monster
)
&&
card
.
Attack
<
lowestAtk
)
{
{
...
@@ -55,13 +55,13 @@ namespace WindBot.Game.AI
...
@@ -55,13 +55,13 @@ namespace WindBot.Game.AI
return
selected
;
return
selected
;
}
}
public
static
ClientCard
GetLowestDefenseMonster
(
this
IEnumerable
<
ClientCard
>
cards
)
public
static
ClientCard
GetLowestDefenseMonster
(
this
IEnumerable
<
ClientCard
>
cards
,
bool
canBeTarget
=
false
)
{
{
int
lowestDef
=
0
;
int
lowestDef
=
0
;
ClientCard
selected
=
null
;
ClientCard
selected
=
null
;
foreach
(
ClientCard
card
in
cards
)
foreach
(
ClientCard
card
in
cards
)
{
{
if
(
card
==
null
||
card
.
Data
==
null
||
card
.
IsFacedown
())
continue
;
if
(
card
==
null
||
card
.
Data
==
null
||
card
.
IsFacedown
()
||
(
canBeTarget
&&
card
.
IsShouldNotBeTarget
())
)
continue
;
if
(
lowestDef
==
0
&&
card
.
HasType
(
CardType
.
Monster
)
||
if
(
lowestDef
==
0
&&
card
.
HasType
(
CardType
.
Monster
)
||
card
.
HasType
(
CardType
.
Monster
)
&&
card
.
Defense
<
lowestDef
)
card
.
HasType
(
CardType
.
Monster
)
&&
card
.
Defense
<
lowestDef
)
{
{
...
@@ -149,31 +149,31 @@ namespace WindBot.Game.AI
...
@@ -149,31 +149,31 @@ namespace WindBot.Game.AI
return
cardlist
;
return
cardlist
;
}
}
public
static
ClientCard
GetInvincibleMonster
(
this
IEnumerable
<
ClientCard
>
cards
)
public
static
ClientCard
GetInvincibleMonster
(
this
IEnumerable
<
ClientCard
>
cards
,
bool
canBeTarget
=
false
)
{
{
foreach
(
ClientCard
card
in
cards
)
foreach
(
ClientCard
card
in
cards
)
{
{
if
(
card
!=
null
&&
card
.
IsMonsterInvincible
()
&&
card
.
IsFaceup
())
if
(
card
!=
null
&&
card
.
IsMonsterInvincible
()
&&
card
.
IsFaceup
()
&&
(!
canBeTarget
||
!
card
.
IsShouldNotBeTarget
())
)
return
card
;
return
card
;
}
}
return
null
;
return
null
;
}
}
public
static
ClientCard
GetDangerousMonster
(
this
IEnumerable
<
ClientCard
>
cards
)
public
static
ClientCard
GetDangerousMonster
(
this
IEnumerable
<
ClientCard
>
cards
,
bool
canBeTarget
=
false
)
{
{
foreach
(
ClientCard
card
in
cards
)
foreach
(
ClientCard
card
in
cards
)
{
{
if
(
card
!=
null
&&
card
.
IsMonsterDangerous
()
&&
card
.
IsFaceup
())
if
(
card
!=
null
&&
card
.
IsMonsterDangerous
()
&&
card
.
IsFaceup
()
&&
(!
canBeTarget
||
!
card
.
IsShouldNotBeTarget
())
)
return
card
;
return
card
;
}
}
return
null
;
return
null
;
}
}
public
static
ClientCard
GetFloodgate
(
this
IEnumerable
<
ClientCard
>
cards
)
public
static
ClientCard
GetFloodgate
(
this
IEnumerable
<
ClientCard
>
cards
,
bool
canBeTarget
=
false
)
{
{
foreach
(
ClientCard
card
in
cards
)
foreach
(
ClientCard
card
in
cards
)
{
{
if
(
card
!=
null
&&
card
.
IsFloodgate
()
&&
card
.
IsFaceup
())
if
(
card
!=
null
&&
card
.
IsFloodgate
()
&&
card
.
IsFaceup
()
&&
(!
canBeTarget
||
!
card
.
IsShouldNotBeTarget
())
)
return
card
;
return
card
;
}
}
return
null
;
return
null
;
...
...
Game/AI/CardExtension.cs
View file @
cb9047f1
...
@@ -29,6 +29,38 @@ namespace WindBot.Game.AI
...
@@ -29,6 +29,38 @@ namespace WindBot.Game.AI
return
!
card
.
IsDisabled
()
&&
Enum
.
IsDefined
(
typeof
(
PreventActivationEffectInBattle
),
card
.
Id
);
return
!
card
.
IsDisabled
()
&&
Enum
.
IsDefined
(
typeof
(
PreventActivationEffectInBattle
),
card
.
Id
);
}
}
/// <summary>
/// Is this card shouldn't be tried to be selected as target?
/// </summary>
public
static
bool
IsShouldNotBeTarget
(
this
ClientCard
card
)
{
return
!
card
.
IsDisabled
()
&&
Enum
.
IsDefined
(
typeof
(
ShouldNotBeTarget
),
card
.
Id
);
}
/// <summary>
/// Is this card shouldn't be tried to be selected as target of monster?
/// </summary>
public
static
bool
IsShouldNotBeMonsterTarget
(
this
ClientCard
card
)
{
return
!
card
.
IsDisabled
()
&&
Enum
.
IsDefined
(
typeof
(
ShouldNotBeMonsterTarget
),
card
.
Id
);
}
/// <summary>
/// Is this card shouldn't be tried to be selected as target of spell & trap?
/// </summary>
public
static
bool
IsShouldNotBeSpellTrapTarget
(
this
ClientCard
card
)
{
return
!
card
.
IsDisabled
()
&&
Enum
.
IsDefined
(
typeof
(
ShouldNotBeSpellTrapTarget
),
card
.
Id
);
}
/// <summary>
/// Is this monster should be disabled (with Breakthrough Skill) before it use effect and release or banish itself?
/// </summary>
public
static
bool
IsMonsterShouldBeDisabledBeforeItUseEffect
(
this
ClientCard
card
)
{
return
!
card
.
IsDisabled
()
&&
Enum
.
IsDefined
(
typeof
(
ShouldBeDisabledBeforeItUseEffectMonster
),
card
.
Id
);
}
public
static
bool
IsFloodgate
(
this
ClientCard
card
)
public
static
bool
IsFloodgate
(
this
ClientCard
card
)
{
{
return
Enum
.
IsDefined
(
typeof
(
Floodgate
),
card
.
Id
);
return
Enum
.
IsDefined
(
typeof
(
Floodgate
),
card
.
Id
);
...
...
Game/AI/Decks/BlueEyesExecutor.cs
View file @
cb9047f1
...
@@ -292,7 +292,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -292,7 +292,7 @@ namespace WindBot.Game.AI.Decks
}
}
if
(
CanDealWithUsedAlternativeWhiteDragon
())
if
(
CanDealWithUsedAlternativeWhiteDragon
())
{
{
target
=
AI
.
Utils
.
GetBestEnemyMonster
();
target
=
AI
.
Utils
.
GetBestEnemyMonster
(
false
,
true
);
AI
.
SelectCard
(
target
);
AI
.
SelectCard
(
target
);
UsedAlternativeWhiteDragon
.
Add
(
Card
);
UsedAlternativeWhiteDragon
.
Add
(
Card
);
return
true
;
return
true
;
...
...
Game/AI/Decks/ChainBurnExecutor.cs
View file @
cb9047f1
...
@@ -497,7 +497,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -497,7 +497,7 @@ namespace WindBot.Game.AI.Decks
ClientCard
target
=
AI
.
Utils
.
GetProblematicEnemyMonster
();
ClientCard
target
=
AI
.
Utils
.
GetProblematicEnemyMonster
();
if
(
target
==
null
&&
AI
.
Utils
.
IsChainTarget
(
Card
))
if
(
target
==
null
&&
AI
.
Utils
.
IsChainTarget
(
Card
))
{
{
target
=
AI
.
Utils
.
GetBestEnemyMonster
();
target
=
AI
.
Utils
.
GetBestEnemyMonster
(
true
,
true
);
}
}
if
(
target
!=
null
)
if
(
target
!=
null
)
{
{
...
...
Game/AI/Decks/LightswornShaddoldinosourExecutor.cs
View file @
cb9047f1
...
@@ -527,7 +527,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -527,7 +527,7 @@ namespace WindBot.Game.AI.Decks
private
bool
FairyTailSnowsummon
()
private
bool
FairyTailSnowsummon
()
{
{
ClientCard
target
=
AI
.
Utils
.
GetBestEnemyMonster
(
true
);
ClientCard
target
=
AI
.
Utils
.
GetBestEnemyMonster
(
true
,
true
);
if
(
target
!=
null
)
if
(
target
!=
null
)
{
{
return
true
;
return
true
;
...
@@ -541,7 +541,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -541,7 +541,7 @@ namespace WindBot.Game.AI.Decks
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
{
AI
.
SelectCard
(
AI
.
Utils
.
GetBestEnemyMonster
(
true
));
AI
.
SelectCard
(
AI
.
Utils
.
GetBestEnemyMonster
(
true
,
true
));
return
true
;
return
true
;
}
}
else
else
...
...
Game/AI/DefaultExecutor.cs
View file @
cb9047f1
...
@@ -310,15 +310,31 @@ namespace WindBot.Game.AI
...
@@ -310,15 +310,31 @@ namespace WindBot.Game.AI
}
}
/// <summary>
/// <summary>
/// Chain the enemy monster.
/// Chain the enemy monster
, or disable monster like Rescue Rabbit
.
/// </summary>
/// </summary>
protected
bool
DefaultBreakthroughSkill
()
protected
bool
DefaultBreakthroughSkill
()
{
{
if
(!
DefaultUniqueTrap
())
return
false
;
if
(
Duel
.
Player
==
1
)
{
foreach
(
ClientCard
target
in
Enemy
.
GetMonsters
())
{
if
(
target
.
IsMonsterShouldBeDisabledBeforeItUseEffect
())
{
AI
.
SelectCard
(
target
);
return
true
;
}
}
}
ClientCard
LastChainCard
=
AI
.
Utils
.
GetLastChainCard
();
ClientCard
LastChainCard
=
AI
.
Utils
.
GetLastChainCard
();
if
(
LastChainCard
==
null
)
if
(
LastChainCard
==
null
)
return
false
;
return
false
;
if
(
LastChainCard
.
Controller
!=
1
||
LastChainCard
.
Location
!=
CardLocation
.
MonsterZone
||
!
DefaultUniqueTrap
())
if
(
LastChainCard
.
Controller
!=
1
||
LastChainCard
.
Location
!=
CardLocation
.
MonsterZone
||
LastChainCard
.
IsDisabled
()
||
LastChainCard
.
IsShouldNotBeTarget
()
||
LastChainCard
.
IsShouldNotBeSpellTrapTarget
())
return
false
;
return
false
;
AI
.
SelectCard
(
LastChainCard
);
AI
.
SelectCard
(
LastChainCard
);
return
true
;
return
true
;
...
...
Game/AI/Enums/ShouldBeDisabledBeforeItUseEffectMonster.cs
0 → 100644
View file @
cb9047f1
namespace
WindBot.Game.AI.Enums
{
/// <summary>
/// Monsters that release or banish itself to use effect. So them should be disabled (with Breakthrough Skill) before it use effect.
/// </summary>
public
enum
ShouldBeDisabledBeforeItUseEffectMonster
{
MachinaMegaform
=
51617185
,
DarkSummoningBeast
=
87917187
,
GemKnightAlexandrite
=
90019393
,
RedEyesRetroDragon
=
53485634
,
DeepSweeper
=
8649148
,
BeastWarriorPuma
=
16796157
,
ZefrasaberSwordmasteroftheNekroz
=
84388461
,
CipherWing
=
81974607
,
MadolcheAnjelly
=
34680482
,
PlanetPathfinder
=
97526666
,
RescueCat
=
14878871
,
RescueHamster
=
50485594
,
RescueFerret
=
56343672
,
RescueRabbit
=
85138716
,
GalaxyWizard
=
98555327
,
Backlinker
=
71172240
,
Merlin
=
3580032
,
CrystalVanguard
=
87475570
,
Kuribandit
=
16404809
,
PhotonLizard
=
38973775
,
SuperheavySamuraiFlutist
=
27978707
,
ConstellarRasalhague
=
70624184
,
CardcarD
=
45812361
,
UnifloraMysticalBeastoftheForest
=
36318200
,
BusterWhelpoftheDestructionSwordsman
=
49823708
,
GalaxyEyesCloudragon
=
9260791
,
SylvanPrincessprout
=
20579538
,
AltergeistPixiel
=
57769391
,
AbyssActorExtras
=
88412339
,
PerformapalTrumpWitch
=
91584698
,
RaidraptorLastStrix
=
97219708
,
TimeMaiden
=
27107590
,
SuperQuantalFairyAlphan
=
58753372
,
TheBlackStoneofLegend
=
66574418
,
PaladinofDarkDragon
=
71408082
,
PaladinofPhotonDragon
=
85346853
,
TwinPhotonLizard
=
29455728
}
}
Game/AI/Enums/ShouldNotBeMonsterTarget.cs
0 → 100644
View file @
cb9047f1
namespace
WindBot.Game.AI.Enums
{
/// <summary>
/// Cards that are can't be selected as target of monster's effect, or immuned to monster's effect.
/// So them shouldn't be tried to be selected as target of monster at most times.
/// </summary>
public
enum
ShouldNotBeMonsterTarget
{
TheLegendaryFishermanII
=
19801646
,
FirstoftheDragons
=
10817524
,
Tatsunoko
=
55863245
,
CXyzSimontheGreatMoralLeader
=
41147577
,
PaleozoicAnomalocaris
=
61307542
,
PaleozoicOpabinia
=
37649320
,
BorreloadDragon
=
31833038
}
}
Game/AI/Enums/ShouldNotBeSpellTarget.cs
0 → 100644
View file @
cb9047f1
namespace
WindBot.Game.AI.Enums
{
/// <summary>
/// Cards that are can't be selected as target of spell&trap's effect, or immuned to spell&trap's effect.
/// So them shouldn't be tried to be selected as target of spell&trap at most times.
/// </summary>
public
enum
ShouldNotBeSpellTrapTarget
{
ApoqliphortTowers
=
27279764
,
ApoqliphortSkybase
=
40061558
,
TheLegendaryFishermanIII
=
44968687
,
ChaosAncientGearGiant
=
51788412
}
}
Game/AI/Enums/ShouldNotBeTarget.cs
0 → 100644
View file @
cb9047f1
namespace
WindBot.Game.AI.Enums
{
/// <summary>
/// Cards that are can't be selected as target, or immuned to most effect.
/// So them shouldn't be tried to be selected as target at most times.
/// </summary>
public
enum
ShouldNotBeTarget
{
DivineSerpentGeh
=
82103466
,
ObelisktheTormentor
=
10000000
,
TheWingedDragonofRaSphereMode
=
10000080
,
TheWingedDragonofRaImmortalPhoenix
=
10000090
,
KozmoDarkPlanet
=
85991529
,
ZushintheSleepingGiant
=
67547370
,
TheLegendaryExodiaIncarnate
=
58604027
,
KozmoDarkEclipser
=
64063868
,
KozmoDarkDestroyer
=
55885348
,
KozmoForerunner
=
20849090
,
MajespecterUnicornKirin
=
31178212
,
WorldLegacyWorldShield
=
55787576
,
KiwiMagicianGirl
=
82627406
,
MajespecterFoxKyubi
=
94784213
,
MajespecterToadOgama
=
645794
,
MajespecterCrowYata
=
68395509
,
MajespecterRaccoonBunbuku
=
31991800
,
MajespecterCatNekomata
=
5506791
,
HazyFlameHydra
=
8696773
,
HazyFlameMantikor
=
96051150
,
HazyFlameHyppogrif
=
31303283
,
HazyFlameCerbereus
=
38525760
,
HazyFlameSphynx
=
1409474
,
HazyFlamePeryton
=
37803172
,
HazyFlameGriffin
=
74010769
,
BlueEyesChaosMAXDragon
=
55410871
,
SupremeKingZARC
=
13331639
,
CrimsonNovaTrinitytheDarkCubicLord
=
72664875
,
LunalightLeoDancer
=
24550676
,
TimaeustheKnightofDestiny
=
53315891
,
DantePilgrimoftheBurningAbyss
=
18386170
,
AncientGearHowitzer
=
87182127
,
InvokedCocytus
=
85908279
,
LyriluscIndependentNightingale
=
76815942
,
FlowerCardianLightshower
=
42291297
,
YaziEviloftheYangZing
=
43202238
,
RaidraptorUltimateFalcon
=
86221741
,
DisdainfulBirdofParadise
=
27240101
}
}
WindBot.csproj
View file @
cb9047f1
...
@@ -98,6 +98,10 @@
...
@@ -98,6 +98,10 @@
<Compile
Include=
"Game\AI\Dialogs.cs"
/>
<Compile
Include=
"Game\AI\Dialogs.cs"
/>
<Compile
Include=
"Game\AI\Enums\DangerousMonster.cs"
/>
<Compile
Include=
"Game\AI\Enums\DangerousMonster.cs"
/>
<Compile
Include=
"Game\AI\Enums\FusionSpell.cs"
/>
<Compile
Include=
"Game\AI\Enums\FusionSpell.cs"
/>
<Compile
Include=
"Game\AI\Enums\ShouldBeDisabledBeforeItUseEffectMonster.cs"
/>
<Compile
Include=
"Game\AI\Enums\ShouldNotBeSpellTarget.cs"
/>
<Compile
Include=
"Game\AI\Enums\ShouldNotBeMonsterTarget.cs"
/>
<Compile
Include=
"Game\AI\Enums\ShouldNotBeTarget.cs"
/>
<Compile
Include=
"Game\AI\Enums\PreventActivationEffectInBattle.cs"
/>
<Compile
Include=
"Game\AI\Enums\PreventActivationEffectInBattle.cs"
/>
<Compile
Include=
"Game\AI\Enums\OneForXyz.cs"
/>
<Compile
Include=
"Game\AI\Enums\OneForXyz.cs"
/>
<Compile
Include=
"Game\AI\Enums\InvincibleMonster.cs"
/>
<Compile
Include=
"Game\AI\Enums\InvincibleMonster.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