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
3f572de6
Commit
3f572de6
authored
Aug 24, 2018
by
handsomekiwi
Committed by
mercury233
Aug 24, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update GrenMajuThunderBoarder (#88)
parent
f84924f5
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
208 additions
and
140 deletions
+208
-140
Decks/AI_GrenMajuThunderBoarder.ydk
Decks/AI_GrenMajuThunderBoarder.ydk
+7
-10
Game/AI/Decks/GrenMajuThunderBoarderExecutor.cs
Game/AI/Decks/GrenMajuThunderBoarderExecutor.cs
+201
-130
No files found.
Decks/AI_GrenMajuThunderBoarder.ydk
View file @
3f572de6
...
@@ -6,6 +6,8 @@
...
@@ -6,6 +6,8 @@
71564252
71564252
71564252
71564252
71564252
71564252
14558127
14558127
36584821
36584821
36584821
36584821
36584821
36584821
...
@@ -20,9 +22,6 @@
...
@@ -20,9 +22,6 @@
35261759
35261759
59750328
59750328
59750328
59750328
70368879
70368879
70368879
98645731
98645731
98645731
98645731
98645731
98645731
...
@@ -30,22 +29,22 @@
...
@@ -30,22 +29,22 @@
73915051
73915051
10045474
10045474
10045474
10045474
10045474
10813327
10813327
15693423
15693423
23924608
23924608
47475363
47475363
30241314
30241314
30241314
30241314
58921041
58921041
58921041
58921041
61740673
61740673
61936647
69452756
69452756
40605147
40605147
40605147
40605147
77538567
77538567
77538567
77538567
84749824
84749824
#extra
#extra
86221741
86221741
31833038
31833038
...
@@ -65,13 +64,11 @@
...
@@ -65,13 +64,11 @@
!side
!side
10000080
10000080
86937530
86937530
14558127
62015408
62015408
9742784
9742784
67441435
70368879
72529749
43898403
19508728
19508728
10045474
15693423
15693423
24207889
24207889
69452756
69452756
...
...
Game/AI/Decks/GrenMajuThunderBoarderExecutor.cs
View file @
3f572de6
...
@@ -13,6 +13,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -13,6 +13,7 @@ namespace WindBot.Game.AI.Decks
{
{
public
const
int
InspectBoarder
=
15397015
;
public
const
int
InspectBoarder
=
15397015
;
public
const
int
ThunderKingRaiOh
=
71564252
;
public
const
int
ThunderKingRaiOh
=
71564252
;
public
const
int
AshBlossomAndJoyousSpring
=
14558127
;
public
const
int
GhostReaperAndWinterCherries
=
62015408
;
public
const
int
GhostReaperAndWinterCherries
=
62015408
;
public
const
int
GrenMajuDaEizo
=
36584821
;
public
const
int
GrenMajuDaEizo
=
36584821
;
public
const
int
MaxxC
=
23434538
;
public
const
int
MaxxC
=
23434538
;
...
@@ -29,9 +30,11 @@ namespace WindBot.Game.AI.Decks
...
@@ -29,9 +30,11 @@ namespace WindBot.Game.AI.Decks
public
const
int
WakingTheDragon
=
10813327
;
public
const
int
WakingTheDragon
=
10813327
;
public
const
int
EvenlyMatched
=
15693423
;
public
const
int
EvenlyMatched
=
15693423
;
public
const
int
HeavyStormDuster
=
23924608
;
public
const
int
HeavyStormDuster
=
23924608
;
public
const
int
DrowningMirrorForce
=
47475363
;
public
const
int
MacroCosmos
=
30241314
;
public
const
int
MacroCosmos
=
30241314
;
public
const
int
AntiSpellFragrance
=
58921041
;
public
const
int
AntiSpellFragrance
=
58921041
;
public
const
int
ImperialOrder
=
61740673
;
public
const
int
ImperialOrder
=
61740673
;
public
const
int
PhatomKnightsSword
=
61936647
;
public
const
int
UnendingNightmare
=
69452756
;
public
const
int
UnendingNightmare
=
69452756
;
public
const
int
SolemnWarning
=
84749824
;
public
const
int
SolemnWarning
=
84749824
;
public
const
int
SolemStrike
=
40605147
;
public
const
int
SolemStrike
=
40605147
;
...
@@ -42,7 +45,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -42,7 +45,7 @@ namespace WindBot.Game.AI.Decks
public
const
int
BorreloadDragon
=
31833038
;
public
const
int
BorreloadDragon
=
31833038
;
public
const
int
BirrelswordDragon
=
85289965
;
public
const
int
BirrelswordDragon
=
85289965
;
public
const
int
FirewallDragon
=
5043010
;
public
const
int
FirewallDragon
=
5043010
;
public
const
int
B
ingirsuTheWorldChaliceWarrior
=
30194529
;
public
const
int
N
ingirsuTheWorldChaliceWarrior
=
30194529
;
public
const
int
TopologicTrisbaena
=
72529749
;
public
const
int
TopologicTrisbaena
=
72529749
;
public
const
int
KnightmareUnicorn
=
38342335
;
public
const
int
KnightmareUnicorn
=
38342335
;
public
const
int
KnightmarePhoenix
=
2857636
;
public
const
int
KnightmarePhoenix
=
2857636
;
...
@@ -53,61 +56,68 @@ namespace WindBot.Game.AI.Decks
...
@@ -53,61 +56,68 @@ namespace WindBot.Game.AI.Decks
public
const
int
BrandishMaidenKagari
=
63288573
;
public
const
int
BrandishMaidenKagari
=
63288573
;
public
const
int
LinkSpider
=
98978921
;
public
const
int
LinkSpider
=
98978921
;
public
const
int
Linkuriboh
=
41999284
;
public
const
int
Linkuriboh
=
41999284
;
public
const
int
KnightmareGryphon
=
65330383
;
}
}
public
GrenMajuThunderBoarderExecutor
(
GameAI
ai
,
Duel
duel
)
public
GrenMajuThunderBoarderExecutor
(
GameAI
ai
,
Duel
duel
)
:
base
(
ai
,
duel
)
:
base
(
ai
,
duel
)
{
{
AddExecutor
(
ExecutorType
.
GoToBattlePhase
,
EvenlyMatchedToBP
);
AddExecutor
(
ExecutorType
.
GoToBattlePhase
,
GoToBattlePhase
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
EvenlyMatched
,
EvenlyMatchedeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
EvenlyMatched
,
EvenlyMatchedeff
);
//Sticker
//Sticker
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MacroCosmos
,
MacroCosmoseff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MacroCosmos
,
MacroCosmoseff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
AntiSpellFragrance
,
AntiSpellFragranceeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
AntiSpellFragrance
,
AntiSpellFragranceeff
);
//counter
//counter
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MaxxC
,
MaxxCeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
AshBlossomAndJoyousSpring
,
DefaultAshBlossomAndJoyousSpring
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
InfiniteImpermanence
,
InfiniteImpermanenceeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MaxxC
,
DefaultMaxxC
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
InfiniteImpermanence
,
DefaultInfiniteImpermanence
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SolemnWarning
,
DefaultSolemnWarning
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SolemnWarning
,
DefaultSolemnWarning
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SolemStrike
,
DefaultSolemnStrike
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SolemStrike
,
DefaultSolemnStrike
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ImperialOrder
,
ImperialOrderfirst
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
HeavyStormDuster
,
HeavyStormDustereff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
HeavyStormDuster
,
HeavyStormDustereff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
UnendingNightmare
,
UnendingNightmareeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
UnendingNightmare
,
UnendingNightmareeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
DarkBribe
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
DarkBribe
,
DarkBribeeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ImperialOrder
,
ImperialOrdereff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ImperialOrder
,
ImperialOrdereff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ThunderKingRaiOh
,
ThunderKingRaiOheff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
ThunderKingRaiOh
,
ThunderKingRaiOheff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SolemnJudgment
,
DefaultSolemnJudgment
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
SolemnJudgment
,
DefaultSolemnJudgment
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
DrowningMirrorForce
,
DrowningMirrorForceeff
);
//first do
//first do
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
UpstartGoblin
,
UpstartGoblineff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
UpstartGoblin
,
UpstartGoblineff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
HarpieFeatherDuster
,
DefaultHarpiesFeatherDusterFirst
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
HarpieFeatherDuster
,
DefaultHarpiesFeatherDusterFirst
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
PotOfDuality
,
PotOfDualityeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
PotOfDuality
,
PotOfDualityeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
PotOfDesires
,
PotOfDesireseff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
PotOfDesires
,
PotOfDesireseff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
CardOfDemise
,
CardOfDemiseeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
CardOfDemise
,
CardOfDemiseeff
);
//sp
//sp
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
BorreloadDragon
,
BorreloadDragonsp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
BorreloadDragon
,
BorreloadDragoneff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
EaterOfMillions
,
EaterOfMillionseff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
WakingTheDragon
,
WakingTheDragoneff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
MissusRadiant
,
MissusRadiantsp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
MissusRadiant
,
MissusRadiantsp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MissusRadiant
,
MissusRadianteff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MissusRadiant
,
MissusRadianteff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Linkuriboh
,
Linkuriboheff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Linkuriboh
,
Linkuriboheff
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Linkuriboh
,
Linkuribohsp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
Linkuriboh
,
Linkuribohsp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
LinkSpider
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
LinkSpider
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
BorreloadDragon
,
BorreloadDragonsp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
BorreloadDragon
,
BorreloadDragoneff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
EaterOfMillions
,
EaterOfMillionseff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
WakingTheDragon
,
WakingTheDragoneff
);
// normal summon
// normal summon
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
InspectBoarder
,
InspectBoardersummon
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
InspectBoarder
,
InspectBoardersummon
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
GrenMajuDaEizo
,
GrenMajuDaEizosummon
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
GrenMajuDaEizo
,
GrenMajuDaEizosummon
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
ThunderKingRaiOh
,
ThunderKingRaiOhsummon
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
ThunderKingRaiOh
,
ThunderKingRaiOhsummon
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
BorreloadDragon
,
BorreloadDragonspsecond
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
EaterOfMillions
,
EaterOfMillionssp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
EaterOfMillions
,
EaterOfMillionssp
);
//spell
//spell
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MoonMirrorShield
,
MoonMirrorShieldeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MoonMirrorShield
,
MoonMirrorShieldeff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Scapegoat
,
Scapegoateff
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Scapegoat
,
DefaultScapegoat
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
PhatomKnightsSword
,
PhatomKnightsSwordeff
);
AddExecutor
(
ExecutorType
.
Repos
,
MonsterRepos
);
AddExecutor
(
ExecutorType
.
Repos
,
MonsterRepos
);
//set
//set
AddExecutor
(
ExecutorType
.
SpellSet
,
SpellSet
);
AddExecutor
(
ExecutorType
.
SpellSet
,
SpellSet
);
}
}
bool
CardOfDemiseeff_used
=
false
;
bool
CardOfDemiseeff_used
=
false
;
bool
eater_eff
=
false
;
bool
eater_eff
=
false
;
public
override
void
OnNewTurn
()
public
override
void
OnNewTurn
()
{
{
eater_eff
=
false
;
eater_eff
=
false
;
CardOfDemiseeff_used
=
false
;
CardOfDemiseeff_used
=
false
;
}
}
public
override
void
OnNewPhase
()
public
override
void
OnNewPhase
()
...
@@ -135,22 +145,11 @@ namespace WindBot.Game.AI.Decks
...
@@ -135,22 +145,11 @@ namespace WindBot.Game.AI.Decks
base
.
OnNewPhase
();
base
.
OnNewPhase
();
}
}
private
bool
SpellWillBeNegated
()
private
bool
GoToBattlePhase
()
{
{
ClientCard
card
=
null
;
return
Bot
.
HasInHand
(
CardId
.
EvenlyMatched
)
&&
Duel
.
Turn
>=
2
&&
Enemy
.
GetFieldCount
()
>=
2
&&
Bot
.
GetFieldCount
()
==
0
;
foreach
(
ClientCard
check
in
Bot
.
GetSpells
())
}
{
if
(
check
.
Id
==
CardId
.
ImperialOrder
&&
!
check
.
IsDisabled
())
card
=
check
;
}
if
(
card
!=
null
&&
card
.
IsFaceup
())
return
true
;
if
(
Enemy
.
HasInSpellZone
(
CardId
.
ImperialOrder
,
true
))
return
true
;
return
false
;
}
private
bool
MacroCosmoseff
()
private
bool
MacroCosmoseff
()
{
{
...
@@ -169,49 +168,12 @@ namespace WindBot.Game.AI.Decks
...
@@ -169,49 +168,12 @@ namespace WindBot.Game.AI.Decks
if
(
spell_count
>=
2
)
return
false
;
if
(
spell_count
>=
2
)
return
false
;
return
Duel
.
Player
==
1
&&
UniqueFaceupSpell
();
return
Duel
.
Player
==
1
&&
UniqueFaceupSpell
();
}
}
private
bool
MaxxCeff
()
{
return
Duel
.
Player
==
1
;
}
private
bool
EvenlyMatchedToBP
()
{
return
Bot
.
HasInHand
(
CardId
.
EvenlyMatched
)
&&
Bot
.
GetFieldCount
()
<=
1
&&
Duel
.
Turn
>=
2
&&
Enemy
.
GetFieldCount
()
-
Bot
.
GetFieldCount
()
>=
2
;
}
private
bool
EvenlyMatchedeff
()
private
bool
EvenlyMatchedeff
()
{
{
return
true
;
return
Enemy
.
GetFieldCount
()-
Bot
.
GetFieldCount
()
>
1
;
}
private
bool
InfiniteImpermanenceeff
()
{
AI
.
SelectPlace
(
Zones
.
z2
);
ClientCard
target
=
Enemy
.
MonsterZone
.
GetShouldBeDisabledBeforeItUseEffectMonster
();
if
(
target
!=
null
)
{
AI
.
SelectCard
(
target
);
return
true
;
}
if
(
Duel
.
LastChainPlayer
==
1
)
{
foreach
(
ClientCard
check
in
Enemy
.
GetMonsters
())
{
if
(
AI
.
Utils
.
GetLastChainCard
()==
check
)
{
target
=
check
;
break
;
}
}
if
(
target
!=
null
)
{
AI
.
SelectCard
(
target
);
return
true
;
}
}
return
false
;
}
}
private
bool
HeavyStormDustereff
()
private
bool
HeavyStormDustereff
()
{
{
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
...
@@ -219,6 +181,16 @@ namespace WindBot.Game.AI.Decks
...
@@ -219,6 +181,16 @@ namespace WindBot.Game.AI.Decks
{
{
if
(
check
.
HasType
(
CardType
.
Continuous
)
||
check
.
HasType
(
CardType
.
Field
))
if
(
check
.
HasType
(
CardType
.
Continuous
)
||
check
.
HasType
(
CardType
.
Field
))
targets
.
Add
(
check
);
targets
.
Add
(
check
);
}
if
(
AI
.
Utils
.
GetPZone
(
1
,
0
)
!=
null
&&
AI
.
Utils
.
GetPZone
(
1
,
0
).
Type
==
16777218
)
{
targets
.
Add
(
AI
.
Utils
.
GetPZone
(
1
,
0
));
}
if
(
AI
.
Utils
.
GetPZone
(
1
,
1
)
!=
null
&&
AI
.
Utils
.
GetPZone
(
1
,
1
).
Type
==
16777218
)
{
targets
.
Add
(
AI
.
Utils
.
GetPZone
(
1
,
1
));
}
}
foreach
(
ClientCard
check
in
Enemy
.
GetSpells
())
foreach
(
ClientCard
check
in
Enemy
.
GetSpells
())
{
{
...
@@ -230,9 +202,15 @@ namespace WindBot.Game.AI.Decks
...
@@ -230,9 +202,15 @@ namespace WindBot.Game.AI.Decks
AI
.
SelectCard
(
targets
);
AI
.
SelectCard
(
targets
);
return
true
;
return
true
;
}
}
int
count
=
0
;
foreach
(
ClientCard
check
in
Enemy
.
GetSpells
())
{
if
(
check
.
Type
==
16777218
)
count
++;
}
if
(
AI
.
Utils
.
GetLastChainCard
()!=
null
&&
if
(
AI
.
Utils
.
GetLastChainCard
()!=
null
&&
(
AI
.
Utils
.
GetLastChainCard
().
HasType
(
CardType
.
Continuous
)||
(
AI
.
Utils
.
GetLastChainCard
().
HasType
(
CardType
.
Continuous
)||
AI
.
Utils
.
GetLastChainCard
().
HasType
(
CardType
.
Field
))
&&
AI
.
Utils
.
GetLastChainCard
().
HasType
(
CardType
.
Field
)
||
count
==
2
)
&&
Duel
.
LastChainPlayer
==
1
)
Duel
.
LastChainPlayer
==
1
)
{
{
AI
.
SelectCard
(
targets
);
AI
.
SelectCard
(
targets
);
...
@@ -242,7 +220,6 @@ namespace WindBot.Game.AI.Decks
...
@@ -242,7 +220,6 @@ namespace WindBot.Game.AI.Decks
}
}
private
bool
UnendingNightmareeff
()
private
bool
UnendingNightmareeff
()
{
{
ClientCard
card
=
null
;
ClientCard
card
=
null
;
foreach
(
ClientCard
check
in
Enemy
.
GetSpells
())
foreach
(
ClientCard
check
in
Enemy
.
GetSpells
())
{
{
...
@@ -250,7 +227,21 @@ namespace WindBot.Game.AI.Decks
...
@@ -250,7 +227,21 @@ namespace WindBot.Game.AI.Decks
card
=
check
;
card
=
check
;
break
;
break
;
}
}
if
(
card
!=
null
&&
Bot
.
LifePoints
>
1000
)
int
count
=
0
;
foreach
(
ClientCard
check
in
Enemy
.
GetSpells
())
{
if
(
check
.
Type
==
16777218
)
count
++;
}
if
(
count
==
2
)
{
if
(
AI
.
Utils
.
GetPZone
(
1
,
1
)
!=
null
&&
AI
.
Utils
.
GetPZone
(
1
,
1
).
Type
==
16777218
)
{
card
=
AI
.
Utils
.
GetPZone
(
1
,
1
);
}
}
if
(
card
!=
null
&&
Bot
.
LifePoints
>
1000
)
{
{
AI
.
SelectCard
(
card
);
AI
.
SelectCard
(
card
);
return
true
;
return
true
;
...
@@ -258,12 +249,27 @@ namespace WindBot.Game.AI.Decks
...
@@ -258,12 +249,27 @@ namespace WindBot.Game.AI.Decks
return
false
;
return
false
;
}
}
private
bool
DarkBribeeff
()
{
if
(
AI
.
Utils
.
GetLastChainCard
()!=
null
&&
AI
.
Utils
.
GetLastChainCard
().
Id
==
CardId
.
UpstartGoblin
)
return
false
;
return
true
;
}
private
bool
ImperialOrderfirst
()
{
if
(
AI
.
Utils
.
GetLastChainCard
()
!=
null
&&
AI
.
Utils
.
GetLastChainCard
().
Id
==
CardId
.
UpstartGoblin
)
return
false
;
return
DefaultOnBecomeTarget
()
&&
AI
.
Utils
.
GetLastChainCard
().
HasType
(
CardType
.
Spell
);
}
private
bool
ImperialOrdereff
()
private
bool
ImperialOrdereff
()
{
{
if
(
AI
.
Utils
.
GetLastChainCard
()
!=
null
&&
AI
.
Utils
.
GetLastChainCard
().
Id
==
CardId
.
UpstartGoblin
)
return
false
;
if
(
Duel
.
LastChainPlayer
==
1
)
if
(
Duel
.
LastChainPlayer
==
1
)
{
{
foreach
(
ClientCard
check
in
Enemy
.
SpellZone
)
foreach
(
ClientCard
check
in
Enemy
.
GetSpells
()
)
{
{
if
(
AI
.
Utils
.
GetLastChainCard
()
==
check
)
if
(
AI
.
Utils
.
GetLastChainCard
()
==
check
)
return
true
;
return
true
;
...
@@ -271,16 +277,28 @@ namespace WindBot.Game.AI.Decks
...
@@ -271,16 +277,28 @@ namespace WindBot.Game.AI.Decks
}
}
return
false
;
return
false
;
}
}
private
bool
DrowningMirrorForceeff
()
{
if
(
Enemy
.
GetMonsterCount
()
==
1
)
{
if
(
Enemy
.
BattlingMonster
.
Attack
-
Bot
.
LifePoints
>=
1000
)
return
DefaultUniqueTrap
();
}
if
(
AI
.
Utils
.
GetTotalAttackingMonsterAttack
(
1
)
>=
Bot
.
LifePoints
)
return
DefaultUniqueTrap
();
if
(
Enemy
.
GetMonsterCount
()
>=
2
)
return
DefaultUniqueTrap
();
return
false
;
}
private
bool
UpstartGoblineff
()
private
bool
UpstartGoblineff
()
{
{
return
!
SpellWillBeNegated
();
return
!
Default
SpellWillBeNegated
();
}
}
private
bool
PotOfDualityeff
()
private
bool
PotOfDualityeff
()
{
{
if
(
SpellWillBeNegated
())
if
(
Default
SpellWillBeNegated
())
return
false
;
return
false
;
int
count
=
0
;
int
count
=
0
;
if
(
Bot
.
GetMonsterCount
()
>
0
)
if
(
Bot
.
GetMonsterCount
()
>
0
)
count
=
1
;
count
=
1
;
...
@@ -289,6 +307,20 @@ namespace WindBot.Game.AI.Decks
...
@@ -289,6 +307,20 @@ namespace WindBot.Game.AI.Decks
if
(
card
.
HasType
(
CardType
.
Monster
))
if
(
card
.
HasType
(
CardType
.
Monster
))
count
++;
count
++;
}
}
if
(
AI
.
Utils
.
GetBestEnemyMonster
()!=
null
&&
AI
.
Utils
.
GetBestEnemyMonster
().
Attack
>=
1900
)
AI
.
SelectCard
(
new
[]
{
CardId
.
EaterOfMillions
,
CardId
.
PotOfDesires
,
CardId
.
GrenMajuDaEizo
,
CardId
.
InspectBoarder
,
CardId
.
ThunderKingRaiOh
,
CardId
.
Scapegoat
,
CardId
.
SolemnJudgment
,
CardId
.
SolemnWarning
,
CardId
.
SolemStrike
,
CardId
.
InfiniteImpermanence
,
});
if
(
count
==
0
)
if
(
count
==
0
)
AI
.
SelectCard
(
new
[]
AI
.
SelectCard
(
new
[]
{
{
...
@@ -297,6 +329,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -297,6 +329,7 @@ namespace WindBot.Game.AI.Decks
CardId
.
ThunderKingRaiOh
,
CardId
.
ThunderKingRaiOh
,
CardId
.
EaterOfMillions
,
CardId
.
EaterOfMillions
,
CardId
.
GrenMajuDaEizo
,
CardId
.
GrenMajuDaEizo
,
CardId
.
Scapegoat
,
});
});
else
else
{
{
...
@@ -308,6 +341,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -308,6 +341,7 @@ namespace WindBot.Game.AI.Decks
CardId
.
SolemnWarning
,
CardId
.
SolemnWarning
,
CardId
.
SolemStrike
,
CardId
.
SolemStrike
,
CardId
.
InfiniteImpermanence
,
CardId
.
InfiniteImpermanence
,
CardId
.
Scapegoat
,
});
});
}
}
return
true
;
return
true
;
...
@@ -315,12 +349,13 @@ namespace WindBot.Game.AI.Decks
...
@@ -315,12 +349,13 @@ namespace WindBot.Game.AI.Decks
private
bool
PotOfDesireseff
()
private
bool
PotOfDesireseff
()
{
{
return
Bot
.
Deck
.
Count
>
14
&&
!
SpellWillBeNegated
();
if
(
CardOfDemiseeff_used
)
return
false
;
return
Bot
.
Deck
.
Count
>
14
&&
!
DefaultSpellWillBeNegated
();
}
}
private
bool
CardOfDemiseeff
()
private
bool
CardOfDemiseeff
()
{
{
if
(
Bot
.
Hand
.
Count
==
1
&&
Bot
.
GetSpellCountWithoutField
()
<=
3
&&
!
SpellWillBeNegated
())
if
(
Bot
.
Hand
.
Count
==
1
&&
Bot
.
GetSpellCountWithoutField
()
<=
3
&&
!
Default
SpellWillBeNegated
())
{
{
CardOfDemiseeff_used
=
true
;
CardOfDemiseeff_used
=
true
;
return
true
;
return
true
;
...
@@ -333,7 +368,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -333,7 +368,7 @@ namespace WindBot.Game.AI.Decks
if
(
Card
.
Location
==
CardLocation
.
Hand
)
if
(
Card
.
Location
==
CardLocation
.
Hand
)
{
{
if
(
Bot
.
GetMonsterCount
()
==
0
)
return
false
;
if
(
Bot
.
GetMonsterCount
()
==
0
)
return
false
;
return
!
SpellWillBeNegated
();
return
!
Default
SpellWillBeNegated
();
}
}
if
(
Card
.
Location
==
CardLocation
.
Grave
)
if
(
Card
.
Location
==
CardLocation
.
Grave
)
{
{
...
@@ -342,59 +377,67 @@ namespace WindBot.Game.AI.Decks
...
@@ -342,59 +377,67 @@ namespace WindBot.Game.AI.Decks
return
false
;
return
false
;
}
}
private
bool
Scapegoat
eff
()
private
bool
PhatomKnightsSword
eff
()
{
{
if
(
SpellWillBeNegated
())
return
false
;
if
(
Card
.
IsFaceup
())
if
(
Duel
.
Player
==
0
)
return
false
;
return
true
;
if
(
Duel
.
Phase
==
DuelPhase
.
End
)
return
true
;
if
(
Duel
.
Phase
==
DuelPhase
.
BattleStart
&&
Bot
.
BattlingMonster
!=
null
&&
Enemy
.
BattlingMonster
!=
null
)
if
(
Duel
.
LastChainPlayer
==
1
&&
(
AI
.
Utils
.
IsChainTarget
(
Card
)
||
(
DefaultOnBecomeTarget
()
&&
!
Bot
.
HasInSpellZone
(
CardId
.
WakingTheDragon
))))
return
true
;
{
if
(
Duel
.
Phase
>
DuelPhase
.
Main1
&&
Duel
.
Phase
<
DuelPhase
.
Main2
)
if
(
Bot
.
BattlingMonster
.
Attack
+
800
>=
Enemy
.
BattlingMonster
.
GetDefensePower
())
{
int
total_atk
=
0
;
List
<
ClientCard
>
enemy_monster
=
Enemy
.
GetMonsters
();
foreach
(
ClientCard
m
in
enemy_monster
)
{
{
if
(
m
.
IsAttack
()
&&
!
m
.
Attacked
)
total_atk
+=
m
.
Attack
;
AI
.
SelectCard
(
Bot
.
BattlingMonster
)
;
}
return
DefaultUniqueTrap
();
if
(
total_atk
>=
Bot
.
LifePoints
)
return
true
;
}
}
}
return
false
;
return
false
;
}
}
private
bool
InspectBoardersummon
()
private
bool
InspectBoardersummon
()
{
{
AI
.
SelectPlace
(
Zones
.
z4
|
Zones
.
z0
);
if
(
Bot
.
MonsterZone
[
0
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z0
);
else
AI
.
SelectPlace
(
Zones
.
z4
);
return
true
;
return
true
;
}
}
private
bool
GrenMajuDaEizosummon
()
private
bool
GrenMajuDaEizosummon
()
{
{
if
(
Duel
.
Turn
==
1
)
return
false
;
if
(
Duel
.
Turn
==
1
)
return
false
;
AI
.
SelectPlace
(
Zones
.
z4
|
Zones
.
z0
);
if
(
Bot
.
MonsterZone
[
0
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z0
);
else
AI
.
SelectPlace
(
Zones
.
z4
);
return
Bot
.
Banished
.
Count
>=
6
;
return
Bot
.
Banished
.
Count
>=
6
;
}
}
private
bool
ThunderKingRaiOhsummon
()
private
bool
ThunderKingRaiOhsummon
()
{
{
AI
.
SelectPlace
(
Zones
.
z4
|
Zones
.
z0
);
if
(
Bot
.
MonsterZone
[
0
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z0
);
else
AI
.
SelectPlace
(
Zones
.
z4
);
return
true
;
return
true
;
}
}
private
bool
ThunderKingRaiOheff
()
private
bool
ThunderKingRaiOheff
()
{
{
foreach
(
ClientCard
card
in
Duel
.
SummoningCards
)
if
(
Duel
.
SummoningCards
.
Count
>
0
)
{
{
if
(
card
.
Attack
>=
1900
)
foreach
(
ClientCard
m
in
Duel
.
SummoningCards
)
return
true
;
{
}
if
(
m
.
Attack
>=
1900
)
return
true
;
}
}
return
false
;
return
false
;
}
}
private
bool
BorreloadDragonsp
()
private
bool
BorreloadDragonsp
()
{
{
if
(!
Bot
.
HasInMonstersZone
(
CardId
.
MissusRadiant
))
return
false
;
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
{
if
(
monster
.
Id
!=
CardId
.
EaterOfMillions
)
if
(
monster
.
Id
==
CardId
.
MissusRadiant
||
monster
.
Id
==
CardId
.
LinkSpider
||
monster
.
Id
==
CardId
.
Linkuriboh
)
material_list
.
Add
(
monster
);
material_list
.
Add
(
monster
);
if
(
material_list
.
Count
==
3
)
break
;
if
(
material_list
.
Count
==
3
)
break
;
}
}
...
@@ -405,10 +448,29 @@ namespace WindBot.Game.AI.Decks
...
@@ -405,10 +448,29 @@ namespace WindBot.Game.AI.Decks
}
}
return
false
;
return
false
;
}
}
private
bool
BorreloadDragonspsecond
()
{
if
(!
Bot
.
HasInMonstersZone
(
CardId
.
MissusRadiant
))
return
false
;
IList
<
ClientCard
>
material_list
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
monster
in
Bot
.
GetMonsters
())
{
if
((
monster
.
Id
==
CardId
.
MissusRadiant
||
monster
.
Id
==
CardId
.
LinkSpider
||
monster
.
Id
==
CardId
.
Linkuriboh
)&&
monster
.
Id
!=
CardId
.
EaterOfMillions
)
material_list
.
Add
(
monster
);
if
(
material_list
.
Count
==
3
)
break
;
}
if
(
material_list
.
Count
>=
3
)
{
AI
.
SelectMaterials
(
material_list
);
return
true
;
}
return
false
;
}
public
bool
BorreloadDragoneff
()
public
bool
BorreloadDragoneff
()
{
{
if
(
ActivateDescription
==
-
1
)
if
(
ActivateDescription
==
-
1
&&
(
Duel
.
Phase
==
DuelPhase
.
BattleStart
||
Duel
.
Phase
==
DuelPhase
.
End
)
)
{
{
ClientCard
enemy_monster
=
Enemy
.
BattlingMonster
;
ClientCard
enemy_monster
=
Enemy
.
BattlingMonster
;
if
(
enemy_monster
!=
null
&&
enemy_monster
.
HasPosition
(
CardPosition
.
Attack
))
if
(
enemy_monster
!=
null
&&
enemy_monster
.
HasPosition
(
CardPosition
.
Attack
))
...
@@ -431,15 +493,20 @@ namespace WindBot.Game.AI.Decks
...
@@ -431,15 +493,20 @@ namespace WindBot.Game.AI.Decks
private
bool
EaterOfMillionssp
()
private
bool
EaterOfMillionssp
()
{
{
if
(
Bot
.
HasInMonstersZone
(
CardId
.
InspectBoarder
)
&&
!
eater_eff
)
return
false
;
if
(
Bot
.
MonsterZone
[
0
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z0
);
else
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
(
AI
.
Utils
.
GetProblematicEnemyMonster
()
==
null
&&
Bot
.
ExtraDeck
.
Count
<
5
)
return
false
;
if
(
Bot
.
GetMonstersInMainZone
().
Count
>=
5
)
return
false
;
if
(
Bot
.
GetMonstersInMainZone
().
Count
>=
5
)
return
false
;
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
return
false
;
if
(
AI
.
Utils
.
IsTurn1OrMain2
())
return
false
;
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
AI
.
SelectPosition
(
CardPosition
.
FaceUpAttack
);
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
foreach
(
ClientCard
e_c
in
Bot
.
ExtraDeck
)
foreach
(
ClientCard
e_c
in
Bot
.
ExtraDeck
)
{
{
targets
.
Add
(
e_c
);
targets
.
Add
(
e_c
);
if
(
targets
.
Count
>=
5
)
if
(
targets
.
Count
>=
5
)
{
{
AI
.
SelectCard
(
targets
);
AI
.
SelectCard
(
targets
);
...
@@ -456,6 +523,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -456,6 +523,7 @@ namespace WindBot.Game.AI.Decks
CardId.BirrelswordDragon,
CardId.BirrelswordDragon,
CardId.RaidraptorUltimateFalcon,
CardId.RaidraptorUltimateFalcon,
});*/
});*/
AI
.
SelectPlace
(
Zones
.
z4
|
Zones
.
z0
);
AI
.
SelectPlace
(
Zones
.
z4
|
Zones
.
z0
);
return
true
;
return
true
;
}
}
...
@@ -475,7 +543,8 @@ namespace WindBot.Game.AI.Decks
...
@@ -475,7 +543,8 @@ namespace WindBot.Game.AI.Decks
private
bool
EaterOfMillionseff
()
private
bool
EaterOfMillionseff
()
{
{
//if (Enemy.BattlingMonster.HasPosition(CardPosition.Attack) && (Bot.BattlingMonster.Attack - Enemy.BattlingMonster.GetDefensePower() >= Enemy.LifePoints)) return false;
if
(
Enemy
.
BattlingMonster
.
HasPosition
(
CardPosition
.
Attack
)
&&
(
Bot
.
BattlingMonster
.
Attack
-
Enemy
.
BattlingMonster
.
GetDefensePower
()
>=
Enemy
.
LifePoints
))
return
false
;
return
true
;
return
true
;
}
}
...
@@ -497,7 +566,10 @@ namespace WindBot.Game.AI.Decks
...
@@ -497,7 +566,10 @@ namespace WindBot.Game.AI.Decks
if
(
material_list
.
Count
<
2
)
return
false
;
if
(
material_list
.
Count
<
2
)
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
MissusRadiant
))
return
false
;
if
(
Bot
.
HasInMonstersZone
(
CardId
.
MissusRadiant
))
return
false
;
AI
.
SelectMaterials
(
material_list
);
AI
.
SelectMaterials
(
material_list
);
AI
.
SelectPlace
(
Zones
.
z5
|
Zones
.
z6
);
if
(
Bot
.
MonsterZone
[
0
]
==
null
&&
Bot
.
MonsterZone
[
2
]
==
null
&&
Bot
.
MonsterZone
[
5
]
==
null
)
AI
.
SelectPlace
(
Zones
.
z5
);
else
AI
.
SelectPlace
(
Zones
.
z6
);
return
true
;
return
true
;
}
}
...
@@ -512,13 +584,12 @@ namespace WindBot.Game.AI.Decks
...
@@ -512,13 +584,12 @@ namespace WindBot.Game.AI.Decks
}
}
private
bool
Linkuribohsp
()
private
bool
Linkuribohsp
()
{
{
foreach
(
ClientCard
c
in
Bot
.
GetMonsters
())
foreach
(
ClientCard
c
in
Bot
.
GetMonsters
())
{
{
if
(
c
.
Id
!=
CardId
.
EaterOfMillions
&&
c
.
Level
==
1
&&
c
.
Id
!=
CardId
.
Linkuriboh
&&
c
.
Id
!=
CardId
.
LinkSpider
)
if
(
c
.
Id
!=
CardId
.
EaterOfMillions
&&
c
.
Id
!=
CardId
.
Linkuriboh
&&
c
.
Level
==
1
)
{
{
AI
.
Select
Card
(
c
);
AI
.
Select
Materials
(
c
);
return
true
;
return
true
;
}
}
}
}
...
@@ -537,7 +608,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -537,7 +608,7 @@ namespace WindBot.Game.AI.Decks
}
}
private
bool
SpellSet
()
private
bool
SpellSet
()
{
{
int
count
=
0
;
int
count
=
0
;
foreach
(
ClientCard
check
in
Bot
.
Hand
)
foreach
(
ClientCard
check
in
Bot
.
Hand
)
{
{
...
@@ -548,11 +619,12 @@ namespace WindBot.Game.AI.Decks
...
@@ -548,11 +619,12 @@ namespace WindBot.Game.AI.Decks
return
true
;
return
true
;
if
(
Card
.
Id
==
CardId
.
MacroCosmos
&&
Bot
.
HasInSpellZone
(
CardId
.
MacroCosmos
))
return
false
;
if
(
Card
.
Id
==
CardId
.
MacroCosmos
&&
Bot
.
HasInSpellZone
(
CardId
.
MacroCosmos
))
return
false
;
if
(
Card
.
Id
==
CardId
.
AntiSpellFragrance
&&
Bot
.
HasInSpellZone
(
CardId
.
AntiSpellFragrance
))
return
false
;
if
(
Card
.
Id
==
CardId
.
AntiSpellFragrance
&&
Bot
.
HasInSpellZone
(
CardId
.
AntiSpellFragrance
))
return
false
;
if
(
CardOfDemiseeff_used
)
return
true
;
if
(
CardOfDemiseeff_used
)
return
true
;
//if (Duel.Turn > 1 && Duel.Phase != DuelPhase.Main2) return false;
if
(
Card
.
Id
==
CardId
.
EvenlyMatched
&&
(
Enemy
.
GetFieldCount
()
-
Bot
.
GetFieldCount
())
<
0
)
return
false
;
if
(
Card
.
Id
==
CardId
.
EvenlyMatched
&&
(
Enemy
.
GetFieldCount
()
-
Bot
.
GetFieldCount
())
<
0
)
return
false
;
if
(
Card
.
Id
==
CardId
.
AntiSpellFragrance
&&
Bot
.
HasInSpellZone
(
CardId
.
AntiSpellFragrance
))
return
false
;
if
(
Card
.
Id
==
CardId
.
AntiSpellFragrance
&&
Bot
.
HasInSpellZone
(
CardId
.
AntiSpellFragrance
))
return
false
;
if
(
Card
.
Id
==
CardId
.
MacroCosmos
&&
Bot
.
HasInSpellZone
(
CardId
.
MacroCosmos
))
return
false
;
if
(
Card
.
Id
==
CardId
.
MacroCosmos
&&
Bot
.
HasInSpellZone
(
CardId
.
MacroCosmos
))
return
false
;
if
(
Duel
.
Turn
>
1
&&
Duel
.
Phase
==
DuelPhase
.
Main1
&&
Bot
.
HasAttackingMonster
())
return
false
;
if
(
Card
.
Id
==
CardId
.
InfiniteImpermanence
)
if
(
Card
.
Id
==
CardId
.
InfiniteImpermanence
)
return
Bot
.
GetFieldCount
()
>
0
&&
Bot
.
GetSpellCountWithoutField
()
<
4
;
return
Bot
.
GetFieldCount
()
>
0
&&
Bot
.
GetSpellCountWithoutField
()
<
4
;
if
(
Card
.
Id
==
CardId
.
Scapegoat
)
if
(
Card
.
Id
==
CardId
.
Scapegoat
)
...
@@ -569,18 +641,17 @@ namespace WindBot.Game.AI.Decks
...
@@ -569,18 +641,17 @@ namespace WindBot.Game.AI.Decks
return
false
;
return
false
;
}
}
public
override
bool
OnPreBattleBetween
(
ClientCard
attacker
,
ClientCard
defender
)
public
override
bool
OnPreBattleBetween
(
ClientCard
attacker
,
ClientCard
defender
)
{
{
if
(
attacker
.
Id
==
_CardId
.
EaterOfMillions
&&
(
Bot
.
HasInMonstersZone
(
CardId
.
InspectBoarder
)
&&
eater_eff
)
&&
!
attacker
.
IsDisabled
())
if
(
attacker
.
Id
==
CardId
.
EaterOfMillions
&&
(
Bot
.
HasInMonstersZone
(
CardId
.
InspectBoarder
)
&&
eater_eff
))
{
{
attacker
.
RealPower
=
9999
;
attacker
.
RealPower
=
9999
;
return
true
;
return
true
;
}
}
if
(
attacker
.
Id
==
CardId
.
EaterOfMillions
&&
!
Bot
.
HasInMonstersZone
(
CardId
.
InspectBoarder
))
if
(
attacker
.
Id
==
_CardId
.
EaterOfMillions
&&
!
Bot
.
HasInMonstersZone
(
CardId
.
InspectBoarder
)
&&
!
attacker
.
IsDisabled
(
))
{
{
attacker
.
RealPower
=
9999
;
attacker
.
RealPower
=
9999
;
return
true
;
return
true
;
}
}
return
base
.
OnPreBattleBetween
(
attacker
,
defender
);
return
base
.
OnPreBattleBetween
(
attacker
,
defender
);
}
}
public
override
ClientCard
OnSelectAttacker
(
IList
<
ClientCard
>
attackers
,
IList
<
ClientCard
>
defenders
)
public
override
ClientCard
OnSelectAttacker
(
IList
<
ClientCard
>
attackers
,
IList
<
ClientCard
>
defenders
)
...
...
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