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
bdd2c5de
Commit
bdd2c5de
authored
Mar 19, 2021
by
nanahira
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of github.com:IceYGO/windbot
parents
e6585bbf
94847929
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
328 additions
and
93 deletions
+328
-93
BotWrapper/bot.conf
BotWrapper/bot.conf
+18
-8
Dialogs/gugugu.zh-CN.json
Dialogs/gugugu.zh-CN.json
+59
-0
Game/AI/CardExtension.cs
Game/AI/CardExtension.cs
+3
-1
Game/AI/Decks/AltergeistExecutor.cs
Game/AI/Decks/AltergeistExecutor.cs
+1
-3
Game/AI/Decks/LuckyExecutor.cs
Game/AI/Decks/LuckyExecutor.cs
+54
-5
Game/AI/Decks/WitchcraftExecutor.cs
Game/AI/Decks/WitchcraftExecutor.cs
+6
-6
Game/AI/DefaultExecutor.cs
Game/AI/DefaultExecutor.cs
+67
-18
Game/AI/Enums/InvincibleMonster.cs
Game/AI/Enums/InvincibleMonster.cs
+28
-1
Game/AI/Executor.cs
Game/AI/Executor.cs
+11
-5
Game/AI/HintMsg.cs
Game/AI/HintMsg.cs
+62
-0
Game/ClientCard.cs
Game/ClientCard.cs
+1
-1
Game/Duel.cs
Game/Duel.cs
+3
-24
Game/GameAI.cs
Game/GameAI.cs
+14
-21
WindBot.csproj
WindBot.csproj
+1
-0
No files found.
BotWrapper/bot.conf
View file @
bdd2c5de
...
@@ -2,22 +2,32 @@
...
@@ -2,22 +2,32 @@
# !name
# !name
# command
# command
# description
# description
# flags (avail flags: SUPPORT_MASTER_RULE_3, SUPPORT_NEW_MASTER_RULE, SUPPORT_MASTER_RULE_2020)
# flags (avail flags: SUPPORT_MASTER_RULE_3, SUPPORT_NEW_MASTER_RULE, SUPPORT_MASTER_RULE_2020
, SELECT_DECKFILE
)
!随机-非常简单
!随机-非常简单
Random
=
AI_LV1
Random
=
AI_LV1
主要是一些沙包。
主要是一些沙包。
SUPPORT_
NEW_MASTER_RULE
SUPPORT_
MASTER_RULE_2020
SUPPORT_MASTER_RULE_2020
!随机-简单
!随机-简单
Random
=
AI_LV2
Random
=
AI_LV2
一些比较弱的卡组。
一些比较弱的卡组。
SUPPORT_
NEW_MASTER_RULE
SUPPORT_
MASTER_RULE_2020
SUPPORT_MASTER_RULE_2020
!随机-普通
!随机-普通
Random
=
AI_LV3
Random
=
AI_LV3
一些环境里可以看到的卡组。
一些环境里可以看到的卡组。
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
SUPPORT_MASTER_RULE_2020
!随机-报社
Random
=
AI_ANTI_META
一些报复社会(针对主流卡组的弱点)的卡组。
SUPPORT_MASTER_RULE_2020
!
P2
-自选卡组
Name
=
P2
Deck
=
Lucky
Dialog
=
gugugu
.
zh
-
CN
人机卡组由你选择。随缘出牌。可将你的卡组文件(.
ydk
)复制到
WindBot
的对应文件夹。
SELECT_DECKFILE
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
!谜之剑士
LV4
-龙骑星爆
!谜之剑士
LV4
-龙骑星爆
Name
=谜之剑士
LV4
Deck
=
Dragunity
Dialog
=
swordsman
.
zh
-
CN
Name
=谜之剑士
LV4
Deck
=
Dragunity
Dialog
=
swordsman
.
zh
-
CN
...
@@ -27,12 +37,12 @@ AI_LV2 SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
...
@@ -27,12 +37,12 @@ AI_LV2 SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
!谜之剑士
LV4
-
R5
!谜之剑士
LV4
-
R5
Name
=谜之剑士
LV4
Deck
=
'Rank V'
Dialog
=
swordsman
.
zh
-
CN
Name
=谜之剑士
LV4
Deck
=
'Rank V'
Dialog
=
swordsman
.
zh
-
CN
5
阶超量卡组。
5
阶超量卡组。
AI_LV2
SUPPORT_MASTER_RULE_3
SUPPORT_
NEW_MASTER_RULE
SUPPORT_
MASTER_RULE_2020
AI_LV2
SUPPORT_MASTER_RULE_3
SUPPORT_MASTER_RULE_2020
!谜之剑士
LV4
-异热同心武器
!谜之剑士
LV4
-异热同心武器
Name
=谜之剑士
LV4
Deck
=
'Zexal Weapons'
Dialog
=
swordsman
.
zh
-
CN
Name
=谜之剑士
LV4
Deck
=
'Zexal Weapons'
Dialog
=
swordsman
.
zh
-
CN
神装电光皇卡组。
神装电光皇卡组。
AI_LV2
SUPPORT_MASTER_RULE_3
SUPPORT_
NEW_MASTER_RULE
SUPPORT_
MASTER_RULE_2020
AI_LV2
SUPPORT_MASTER_RULE_3
SUPPORT_MASTER_RULE_2020
!谜之剑士
LV4
-
8
星同调
!谜之剑士
LV4
-
8
星同调
Name
=谜之剑士
LV4
Deck
=
'Level VIII'
Dialog
=
swordsman
.
zh
-
CN
Name
=谜之剑士
LV4
Deck
=
'Level VIII'
Dialog
=
swordsman
.
zh
-
CN
...
@@ -42,7 +52,7 @@ AI_LV2 SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
...
@@ -42,7 +52,7 @@ AI_LV2 SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
!琪露诺-彩虹
!琪露诺-彩虹
Name
=琪露诺
Deck
=
Rainbow
Dialog
=
cirno
.
zh
-
CN
Name
=琪露诺
Deck
=
Rainbow
Dialog
=
cirno
.
zh
-
CN
全属性凡骨卡组。
全属性凡骨卡组。
AI_LV2
SUPPORT_MASTER_RULE_3
SUPPORT_
NEW_MASTER_RULE
SUPPORT_
MASTER_RULE_2020
AI_LV2
SUPPORT_MASTER_RULE_3
SUPPORT_MASTER_RULE_2020
!琪露诺-饼蛙
!琪露诺-饼蛙
Name
=琪露诺
Deck
=
'Toadally Awesome'
Dialog
=
cirno
.
zh
-
CN
Name
=琪露诺
Deck
=
'Toadally Awesome'
Dialog
=
cirno
.
zh
-
CN
...
@@ -52,7 +62,7 @@ AI_LV2 SUPPORT_MASTER_RULE_3 SUPPORT_MASTER_RULE_2020
...
@@ -52,7 +62,7 @@ AI_LV2 SUPPORT_MASTER_RULE_3 SUPPORT_MASTER_RULE_2020
!复制植物-青眼
!复制植物-青眼
Name
=复制植物
Deck
=
Blue
-
Eyes
Dialog
=
copy
.
zh
-
CN
Name
=复制植物
Deck
=
Blue
-
Eyes
Dialog
=
copy
.
zh
-
CN
青眼卡组。
青眼卡组。
AI_LV3
SUPPORT_MASTER_RULE_3
SUPPORT_
NEW_MASTER_RULE
SUPPORT_
MASTER_RULE_2020
AI_LV3
SUPPORT_MASTER_RULE_3
SUPPORT_MASTER_RULE_2020
!复制植物-十二兽
!复制植物-十二兽
Name
=复制植物
Deck
=
Zoodiac
Dialog
=
copy
.
zh
-
CN
Name
=复制植物
Deck
=
Zoodiac
Dialog
=
copy
.
zh
-
CN
...
...
Dialogs/gugugu.zh-CN.json
0 → 100644
View file @
bdd2c5de
{
"welcome"
:
[
"大家好我是新人"
,
"游戏王是怎么玩来着?"
,
"还好我不玩游戏王"
],
"deckerror"
:
[
"卡组里{0}鸽了"
],
"duelstart"
:
[
"不想干活怎么办"
,
"智商欠费不想干活怎么办"
],
"newturn"
:
[
"好多可怕的新卡啊"
,
"这游戏好难玩"
,
"so lazy cant move"
],
"endturn"
:
[
"搞得我只能鸽了"
,
"不是在此时,不知在何时"
,
"too hot need ice cream"
],
"directattack"
:
[
"听起来很鸽"
,
"老鸽,稳"
],
"attack"
:
[
"听起来不是很鸽"
,
"可怕"
],
"ondirectattack"
:
[
"哇!"
,
"这么可怕的吗"
,
"听起来非常鸽"
,
"承受不住"
],
"facedownmonstername"
:
"鸽子"
,
"activate"
:
[
"不明觉鸽"
,
"鸽了,爽"
],
"summon"
:
[
"可怕"
,
"不关我事"
,
"那还是不关我事"
,
"鸽了,爽"
],
"setmonster"
:
[
"摸鱼中,不想更新"
,
"那还是鸽置吧"
],
"chaining"
:
[
"那是什么"
,
"但我鸽了"
,
"无此服务"
,
"可怕"
]
}
Game/AI/CardExtension.cs
View file @
bdd2c5de
...
@@ -11,7 +11,9 @@ namespace WindBot.Game.AI
...
@@ -11,7 +11,9 @@ namespace WindBot.Game.AI
/// </summary>
/// </summary>
public
static
bool
IsMonsterInvincible
(
this
ClientCard
card
)
public
static
bool
IsMonsterInvincible
(
this
ClientCard
card
)
{
{
return
!
card
.
IsDisabled
()
&&
Enum
.
IsDefined
(
typeof
(
InvincibleMonster
),
card
.
Id
);
return
!
card
.
IsDisabled
()
&&
(
card
.
Controller
==
0
&&
Enum
.
IsDefined
(
typeof
(
InvincibleBotMonster
),
card
.
Id
)
||
card
.
Controller
==
1
&&
Enum
.
IsDefined
(
typeof
(
InvincibleEnemyMonster
),
card
.
Id
));
}
}
/// <summary>
/// <summary>
...
...
Game/AI/Decks/AltergeistExecutor.cs
View file @
bdd2c5de
...
@@ -2742,8 +2742,6 @@ namespace WindBot.Game.AI.Decks
...
@@ -2742,8 +2742,6 @@ namespace WindBot.Game.AI.Decks
public
override
IList
<
ClientCard
>
OnSelectCard
(
IList
<
ClientCard
>
cards
,
int
min
,
int
max
,
int
hint
,
bool
cancelable
)
public
override
IList
<
ClientCard
>
OnSelectCard
(
IList
<
ClientCard
>
cards
,
int
min
,
int
max
,
int
hint
,
bool
cancelable
)
{
{
int
HIINT_TOGRAVE
=
504
;
if
(
max
==
1
&&
cards
[
0
].
Location
==
CardLocation
.
Deck
if
(
max
==
1
&&
cards
[
0
].
Location
==
CardLocation
.
Deck
&&
Util
.
GetLastChainCard
()
!=
null
&&
Util
.
GetLastChainCard
().
IsCode
(
23002292
)
&&
Bot
.
GetRemainingCount
(
CardId
.
WakingtheDragon
,
1
)
>
0
)
&&
Util
.
GetLastChainCard
()
!=
null
&&
Util
.
GetLastChainCard
().
IsCode
(
23002292
)
&&
Bot
.
GetRemainingCount
(
CardId
.
WakingtheDragon
,
1
)
>
0
)
{
{
...
@@ -2764,7 +2762,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -2764,7 +2762,7 @@ namespace WindBot.Game.AI.Decks
Logger
.
DebugWriteLine
(
"EvenlyMatched: min="
+
min
.
ToString
()
+
", max="
+
max
.
ToString
());
Logger
.
DebugWriteLine
(
"EvenlyMatched: min="
+
min
.
ToString
()
+
", max="
+
max
.
ToString
());
}
}
else
if
(
cards
[
0
].
Location
==
CardLocation
.
Hand
&&
cards
[
cards
.
Count
-
1
].
Location
==
CardLocation
.
Hand
else
if
(
cards
[
0
].
Location
==
CardLocation
.
Hand
&&
cards
[
cards
.
Count
-
1
].
Location
==
CardLocation
.
Hand
&&
(
hint
==
501
||
hint
==
HIINT_TOGRAVE
)
&&
min
==
max
)
&&
(
hint
==
HintMsg
.
Discard
||
hint
==
HintMsg
.
ToGrave
)
&&
min
==
max
)
{
{
if
(
Duel
.
LastChainPlayer
==
0
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
OneForOne
))
return
null
;
if
(
Duel
.
LastChainPlayer
==
0
&&
Util
.
GetLastChainCard
().
IsCode
(
CardId
.
OneForOne
))
return
null
;
Logger
.
DebugWriteLine
(
"Hand drop except OneForOne"
);
Logger
.
DebugWriteLine
(
"Hand drop except OneForOne"
);
...
...
Game/AI/Decks/LuckyExecutor.cs
View file @
bdd2c5de
using
YGOSharp.OCGWrapper.Enums
;
using
YGOSharp.OCGWrapper.Enums
;
using
System.Collections.Generic
;
using
System.Collections.Generic
;
using
System.Linq
;
using
WindBot
;
using
WindBot
;
using
WindBot.Game
;
using
WindBot.Game
;
using
WindBot.Game.AI
;
using
WindBot.Game.AI
;
...
@@ -18,7 +19,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -18,7 +19,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
SpSummon
,
ImFeelingUnlucky
);
AddExecutor
(
ExecutorType
.
SpSummon
,
ImFeelingUnlucky
);
AddExecutor
(
ExecutorType
.
Activate
,
ImFeelingUnlucky
);
AddExecutor
(
ExecutorType
.
Activate
,
ImFeelingUnlucky
);
AddExecutor
(
ExecutorType
.
SummonOrSet
,
DefaultMonsterSummon
);
AddExecutor
(
ExecutorType
.
SummonOrSet
,
ImFeelingLazy
);
AddExecutor
(
ExecutorType
.
SpellSet
,
DefaultSpellSet
);
AddExecutor
(
ExecutorType
.
SpellSet
,
DefaultSpellSet
);
AddExecutor
(
ExecutorType
.
Repos
,
DefaultMonsterRepos
);
AddExecutor
(
ExecutorType
.
Repos
,
DefaultMonsterRepos
);
...
@@ -63,8 +64,31 @@ namespace WindBot.Game.AI.Decks
...
@@ -63,8 +64,31 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
SpSummon
,
_CardId
.
EvilswarmExcitonKnight
,
DefaultEvilswarmExcitonKnightSummon
);
AddExecutor
(
ExecutorType
.
SpSummon
,
_CardId
.
EvilswarmExcitonKnight
,
DefaultEvilswarmExcitonKnightSummon
);
AddExecutor
(
ExecutorType
.
Activate
,
_CardId
.
EvilswarmExcitonKnight
,
DefaultEvilswarmExcitonKnightEffect
);
AddExecutor
(
ExecutorType
.
Activate
,
_CardId
.
EvilswarmExcitonKnight
,
DefaultEvilswarmExcitonKnightEffect
);
AddExecutor
(
ExecutorType
.
Summon
,
_CardId
.
SandaionTheTimelord
);
AddExecutor
(
ExecutorType
.
Summon
,
_CardId
.
GabrionTheTimelord
);
AddExecutor
(
ExecutorType
.
Summon
,
_CardId
.
MichionTheTimelord
);
AddExecutor
(
ExecutorType
.
Summon
,
_CardId
.
ZaphionTheTimelord
);
AddExecutor
(
ExecutorType
.
Summon
,
_CardId
.
HailonTheTimelord
);
AddExecutor
(
ExecutorType
.
Summon
,
_CardId
.
RaphionTheTimelord
);
AddExecutor
(
ExecutorType
.
Summon
,
_CardId
.
SadionTheTimelord
);
AddExecutor
(
ExecutorType
.
Summon
,
_CardId
.
MetaionTheTimelord
);
AddExecutor
(
ExecutorType
.
Summon
,
_CardId
.
KamionTheTimelord
);
AddExecutor
(
ExecutorType
.
Summon
,
_CardId
.
LazionTheTimelord
);
AddExecutor
(
ExecutorType
.
Summon
,
_CardId
.
LeftArmofTheForbiddenOne
,
JustDontIt
);
AddExecutor
(
ExecutorType
.
Summon
,
_CardId
.
RightLegofTheForbiddenOne
,
JustDontIt
);
AddExecutor
(
ExecutorType
.
Summon
,
_CardId
.
LeftLegofTheForbiddenOne
,
JustDontIt
);
AddExecutor
(
ExecutorType
.
Summon
,
_CardId
.
RightArmofTheForbiddenOne
,
JustDontIt
);
AddExecutor
(
ExecutorType
.
Summon
,
_CardId
.
ExodiaTheForbiddenOne
,
JustDontIt
);
}
}
private
List
<
int
>
HintMsgForRemove
=
new
List
<
int
>
{
HintMsg
.
Release
,
HintMsg
.
Destroy
,
HintMsg
.
Remove
,
HintMsg
.
ToGrave
,
HintMsg
.
ReturnToHand
,
HintMsg
.
ToDeck
,
HintMsg
.
FusionMaterial
,
HintMsg
.
SynchroMaterial
,
HintMsg
.
XyzMaterial
,
HintMsg
.
LinkMaterial
,
HintMsg
.
Disable
};
public
override
IList
<
ClientCard
>
OnSelectCard
(
IList
<
ClientCard
>
_cards
,
int
min
,
int
max
,
int
hint
,
bool
cancelable
)
public
override
IList
<
ClientCard
>
OnSelectCard
(
IList
<
ClientCard
>
_cards
,
int
min
,
int
max
,
int
hint
,
bool
cancelable
)
{
{
if
(
Duel
.
Phase
==
DuelPhase
.
BattleStart
)
if
(
Duel
.
Phase
==
DuelPhase
.
BattleStart
)
...
@@ -72,14 +96,27 @@ namespace WindBot.Game.AI.Decks
...
@@ -72,14 +96,27 @@ namespace WindBot.Game.AI.Decks
if
(
AI
.
HaveSelectedCards
())
if
(
AI
.
HaveSelectedCards
())
return
null
;
return
null
;
IList
<
ClientCard
>
cards
=
new
List
<
ClientCard
>(
_cards
);
IList
<
ClientCard
>
selected
=
new
List
<
ClientCard
>();
IList
<
ClientCard
>
selected
=
new
List
<
ClientCard
>();
IList
<
ClientCard
>
cards
=
new
List
<
ClientCard
>(
_cards
);
if
(
max
>
cards
.
Count
)
if
(
max
>
cards
.
Count
)
max
=
cards
.
Count
;
max
=
cards
.
Count
;
if
(
HintMsgForRemove
.
Contains
(
hint
))
{
IList
<
ClientCard
>
enemyCards
=
cards
.
Where
(
card
=>
card
.
Controller
==
1
).
ToList
();
// select enemy's card first
while
(
enemyCards
.
Count
>
0
&&
selected
.
Count
<
max
)
{
ClientCard
card
=
enemyCards
[
Program
.
Rand
.
Next
(
enemyCards
.
Count
)];
selected
.
Add
(
card
);
enemyCards
.
Remove
(
card
);
cards
.
Remove
(
card
);
}
}
// select random cards
// select random cards
while
(
selected
.
Count
<
m
ax
)
while
(
selected
.
Count
<
m
in
)
{
{
ClientCard
card
=
cards
[
Program
.
Rand
.
Next
(
cards
.
Count
)];
ClientCard
card
=
cards
[
Program
.
Rand
.
Next
(
cards
.
Count
)];
selected
.
Add
(
card
);
selected
.
Add
(
card
);
...
@@ -107,12 +144,24 @@ namespace WindBot.Game.AI.Decks
...
@@ -107,12 +144,24 @@ namespace WindBot.Game.AI.Decks
private
bool
ImFeelingLucky
()
private
bool
ImFeelingLucky
()
{
{
return
Program
.
Rand
.
Next
(
9
)
>=
6
&&
DefaultDontChainMyself
();
return
Program
.
Rand
.
Next
(
10
)
>=
5
&&
DefaultDontChainMyself
();
}
}
private
bool
ImFeelingUnlucky
()
private
bool
ImFeelingUnlucky
()
{
{
return
DefaultDontChainMyself
();
return
DefaultDontChainMyself
();
}
}
private
bool
ImFeelingLazy
()
{
if
(
Executors
.
Any
(
exec
=>
(
exec
.
Type
==
ExecutorType
.
SummonOrSet
||
exec
.
Type
==
ExecutorType
.
Summon
||
exec
.
Type
==
ExecutorType
.
MonsterSet
)
&&
exec
.
CardId
==
Card
.
Id
))
return
false
;
return
DefaultMonsterSummon
();
}
private
bool
JustDontIt
()
{
return
false
;
}
}
}
}
}
\ No newline at end of file
Game/AI/Decks/WitchcraftExecutor.cs
View file @
bdd2c5de
...
@@ -309,8 +309,8 @@ namespace WindBot.Game.AI.Decks
...
@@ -309,8 +309,8 @@ namespace WindBot.Game.AI.Decks
// overwrite OnSelectCard to act normally in SelectUnselect
// overwrite OnSelectCard to act normally in SelectUnselect
public
override
IList
<
ClientCard
>
OnSelectCard
(
IList
<
ClientCard
>
cards
,
int
min
,
int
max
,
int
hint
,
bool
cancelable
)
public
override
IList
<
ClientCard
>
OnSelectCard
(
IList
<
ClientCard
>
cards
,
int
min
,
int
max
,
int
hint
,
bool
cancelable
)
{
{
// Patronus
HINTMSG_ATOHAND
// Patronus
if
(
hint
==
506
)
if
(
hint
==
HintMsg
.
AddToHand
)
{
{
bool
flag
=
true
;
bool
flag
=
true
;
foreach
(
ClientCard
card
in
cards
)
foreach
(
ClientCard
card
in
cards
)
...
@@ -334,8 +334,8 @@ namespace WindBot.Game.AI.Decks
...
@@ -334,8 +334,8 @@ namespace WindBot.Game.AI.Decks
return
selected
;
return
selected
;
}
}
}
}
// MaxxC
HINTMSG_SPSUMMON
// MaxxC
solution
if
(
hint
==
509
&&
enemy_activate_MaxxC
)
if
(
hint
==
HintMsg
.
SpSummon
&&
enemy_activate_MaxxC
)
{
{
// check whether SS from deck while using effect
// check whether SS from deck while using effect
bool
flag
=
true
;
bool
flag
=
true
;
...
@@ -392,8 +392,8 @@ namespace WindBot.Game.AI.Decks
...
@@ -392,8 +392,8 @@ namespace WindBot.Game.AI.Decks
}
}
}
}
}
}
// MadameVerre
HINTMSG_CONFIRM
// MadameVerre
if
(
hint
==
526
)
if
(
hint
==
HintMsg
.
Confirm
)
{
{
Logger
.
DebugWriteLine
(
"** min-max: "
+
min
.
ToString
()
+
" / "
+
max
.
ToString
());
Logger
.
DebugWriteLine
(
"** min-max: "
+
min
.
ToString
()
+
" / "
+
max
.
ToString
());
foreach
(
ClientCard
card
in
cards
)
foreach
(
ClientCard
card
in
cards
)
...
...
Game/AI/DefaultExecutor.cs
View file @
bdd2c5de
...
@@ -21,6 +21,23 @@ namespace WindBot.Game.AI
...
@@ -21,6 +21,23 @@ namespace WindBot.Game.AI
public
const
int
GamecieltheSeaTurtleKaiju
=
55063751
;
public
const
int
GamecieltheSeaTurtleKaiju
=
55063751
;
public
const
int
SuperAntiKaijuWarMachineMechaDogoran
=
84769941
;
public
const
int
SuperAntiKaijuWarMachineMechaDogoran
=
84769941
;
public
const
int
SandaionTheTimelord
=
33015627
;
public
const
int
GabrionTheTimelord
=
6616912
;
public
const
int
MichionTheTimelord
=
7733560
;
public
const
int
ZaphionTheTimelord
=
28929131
;
public
const
int
HailonTheTimelord
=
34137269
;
public
const
int
RaphionTheTimelord
=
60222213
;
public
const
int
SadionTheTimelord
=
65314286
;
public
const
int
MetaionTheTimelord
=
74530899
;
public
const
int
KamionTheTimelord
=
91712985
;
public
const
int
LazionTheTimelord
=
92435533
;
public
const
int
LeftArmofTheForbiddenOne
=
7902349
;
public
const
int
RightLegofTheForbiddenOne
=
8124921
;
public
const
int
LeftLegofTheForbiddenOne
=
44519536
;
public
const
int
RightArmofTheForbiddenOne
=
70903634
;
public
const
int
ExodiaTheForbiddenOne
=
33396948
;
public
const
int
UltimateConductorTytanno
=
18940556
;
public
const
int
UltimateConductorTytanno
=
18940556
;
public
const
int
ElShaddollConstruct
=
20366274
;
public
const
int
ElShaddollConstruct
=
20366274
;
public
const
int
AllyOfJusticeCatastor
=
26593852
;
public
const
int
AllyOfJusticeCatastor
=
26593852
;
...
@@ -99,6 +116,7 @@ namespace WindBot.Game.AI
...
@@ -99,6 +116,7 @@ namespace WindBot.Game.AI
public
const
int
RedDragonArchfiend
=
70902743
;
public
const
int
RedDragonArchfiend
=
70902743
;
public
const
int
ImperialOrder
=
61740673
;
public
const
int
ImperialOrder
=
61740673
;
public
const
int
RoyalDecreel
=
51452091
;
public
const
int
NaturiaBeast
=
33198837
;
public
const
int
NaturiaBeast
=
33198837
;
public
const
int
AntiSpellFragrance
=
58921041
;
public
const
int
AntiSpellFragrance
=
58921041
;
...
@@ -146,9 +164,6 @@ namespace WindBot.Game.AI
...
@@ -146,9 +164,6 @@ namespace WindBot.Game.AI
/// <returns>false if the attack shouldn't be done.</returns>
/// <returns>false if the attack shouldn't be done.</returns>
public
override
bool
OnPreBattleBetween
(
ClientCard
attacker
,
ClientCard
defender
)
public
override
bool
OnPreBattleBetween
(
ClientCard
attacker
,
ClientCard
defender
)
{
{
if
(
attacker
.
RealPower
<=
0
)
return
false
;
if
(!
attacker
.
IsMonsterHasPreventActivationEffectInBattle
())
if
(!
attacker
.
IsMonsterHasPreventActivationEffectInBattle
())
{
{
if
(
defender
.
IsMonsterInvincible
()
&&
defender
.
IsDefense
())
if
(
defender
.
IsMonsterInvincible
()
&&
defender
.
IsDefense
())
...
@@ -199,6 +214,12 @@ namespace WindBot.Game.AI
...
@@ -199,6 +214,12 @@ namespace WindBot.Game.AI
if
(
attacker
.
IsCode
(
_CardId
.
NumberS39UtopiaTheLightning
)
&&
!
attacker
.
IsDisabled
()
&&
attacker
.
HasXyzMaterial
(
2
,
_CardId
.
Number39Utopia
))
if
(
attacker
.
IsCode
(
_CardId
.
NumberS39UtopiaTheLightning
)
&&
!
attacker
.
IsDisabled
()
&&
attacker
.
HasXyzMaterial
(
2
,
_CardId
.
Number39Utopia
))
attacker
.
RealPower
=
5000
;
attacker
.
RealPower
=
5000
;
if
(
attacker
.
IsCode
(
_CardId
.
EaterOfMillions
)
&&
!
attacker
.
IsDisabled
())
attacker
.
RealPower
=
9999
;
if
(
attacker
.
IsMonsterInvincible
())
attacker
.
RealPower
=
9999
;
foreach
(
ClientCard
equip
in
attacker
.
EquipCards
)
foreach
(
ClientCard
equip
in
attacker
.
EquipCards
)
{
{
if
(
equip
.
IsCode
(
_CardId
.
MoonMirrorShield
)
&&
!
equip
.
IsDisabled
())
if
(
equip
.
IsCode
(
_CardId
.
MoonMirrorShield
)
&&
!
equip
.
IsDisabled
())
...
@@ -229,6 +250,29 @@ namespace WindBot.Game.AI
...
@@ -229,6 +250,29 @@ namespace WindBot.Game.AI
return
true
;
return
true
;
}
}
public
override
bool
OnPreActivate
(
ClientCard
card
)
{
ClientCard
LastChainCard
=
Util
.
GetLastChainCard
();
if
(
LastChainCard
!=
null
&&
Duel
.
Phase
==
DuelPhase
.
Standby
&&
LastChainCard
.
IsCode
(
_CardId
.
SandaionTheTimelord
,
_CardId
.
GabrionTheTimelord
,
_CardId
.
MichionTheTimelord
,
_CardId
.
ZaphionTheTimelord
,
_CardId
.
HailonTheTimelord
,
_CardId
.
RaphionTheTimelord
,
_CardId
.
SadionTheTimelord
,
_CardId
.
MetaionTheTimelord
,
_CardId
.
KamionTheTimelord
,
_CardId
.
LazionTheTimelord
))
return
false
;
if
((
card
.
Location
==
CardLocation
.
Hand
||
card
.
Location
==
CardLocation
.
SpellZone
&&
card
.
IsFacedown
())
&&
(
card
.
IsSpell
()
&&
DefaultSpellWillBeNegated
()
||
card
.
IsTrap
()
&&
DefaultTrapWillBeNegated
()))
return
false
;
return
true
;
}
/// <summary>
/// <summary>
/// Called when the AI has to select a card position.
/// Called when the AI has to select a card position.
/// </summary>
/// </summary>
...
@@ -266,7 +310,7 @@ namespace WindBot.Game.AI
...
@@ -266,7 +310,7 @@ namespace WindBot.Game.AI
/// </summary>
/// </summary>
public
override
bool
OnSelectMonsterSummonOrSet
(
ClientCard
card
)
public
override
bool
OnSelectMonsterSummonOrSet
(
ClientCard
card
)
{
{
return
card
.
Level
<=
4
&&
Util
.
IsAllEnemyBetter
(
true
)
&&
Util
.
IsAllEnemyBetterThanValue
(
card
.
Attack
+
300
,
fals
e
);
return
card
.
Level
<=
4
&&
Bot
.
GetMonsters
().
Count
(
m
=>
m
.
IsFaceup
())
==
0
&&
Util
.
IsAllEnemyBetterThanValue
(
card
.
Attack
,
tru
e
);
}
}
/// <summary>
/// <summary>
...
@@ -644,7 +688,7 @@ namespace WindBot.Game.AI
...
@@ -644,7 +688,7 @@ namespace WindBot.Game.AI
/// </summary>
/// </summary>
protected
bool
DefaultSpellSet
()
protected
bool
DefaultSpellSet
()
{
{
return
(
Card
.
IsTrap
()
||
Card
.
HasType
(
CardType
.
QuickPlay
))
&&
Bot
.
GetSpellCountWithoutField
()
<
4
;
return
(
Card
.
IsTrap
()
||
Card
.
HasType
(
CardType
.
QuickPlay
)
||
DefaultSpellMustSetFirst
()
)
&&
Bot
.
GetSpellCountWithoutField
()
<
4
;
}
}
/// <summary>
/// <summary>
...
@@ -681,8 +725,13 @@ namespace WindBot.Game.AI
...
@@ -681,8 +725,13 @@ namespace WindBot.Game.AI
/// </summary>
/// </summary>
protected
bool
DefaultMonsterRepos
()
protected
bool
DefaultMonsterRepos
()
{
{
if
(
Card
.
IsFaceup
()
&&
Card
.
IsDefense
()
&&
Card
.
Attack
==
0
)
if
(
Card
.
Attack
==
0
)
return
false
;
{
if
(
Card
.
IsFaceup
()
&&
Card
.
IsAttack
())
return
true
;
if
(
Card
.
IsFaceup
()
&&
Card
.
IsDefense
())
return
false
;
}
if
(
Enemy
.
HasInMonstersZone
(
_CardId
.
BlueEyesChaosMAXDragon
,
true
)
&&
if
(
Enemy
.
HasInMonstersZone
(
_CardId
.
BlueEyesChaosMAXDragon
,
true
)
&&
Card
.
IsAttack
()
&&
(
4000
-
Card
.
Defense
)
*
2
>
(
4000
-
Card
.
Attack
))
Card
.
IsAttack
()
&&
(
4000
-
Card
.
Defense
)
*
2
>
(
4000
-
Card
.
Attack
))
...
@@ -695,7 +744,7 @@ namespace WindBot.Game.AI
...
@@ -695,7 +744,7 @@ namespace WindBot.Game.AI
bool
enemyBetter
=
Util
.
IsAllEnemyBetter
(
true
);
bool
enemyBetter
=
Util
.
IsAllEnemyBetter
(
true
);
if
(
Card
.
IsAttack
()
&&
enemyBetter
)
if
(
Card
.
IsAttack
()
&&
enemyBetter
)
return
true
;
return
true
;
if
(
Card
.
IsDefense
()
&&
!
enemyBetter
&&
Card
.
Attack
>=
Card
.
Defense
)
if
(
Card
.
IsDefense
()
&&
!
enemyBetter
&&
(
Card
.
Attack
>=
Card
.
Defense
||
Card
.
Attack
>=
Util
.
GetBestPower
(
Enemy
))
)
return
true
;
return
true
;
return
false
;
return
false
;
...
@@ -706,7 +755,15 @@ namespace WindBot.Game.AI
...
@@ -706,7 +755,15 @@ namespace WindBot.Game.AI
/// </summary>
/// </summary>
protected
bool
DefaultSpellWillBeNegated
()
protected
bool
DefaultSpellWillBeNegated
()
{
{
return
Bot
.
HasInSpellZone
(
_CardId
.
ImperialOrder
,
true
,
true
)
||
Enemy
.
HasInSpellZone
(
_CardId
.
ImperialOrder
,
true
)
||
Enemy
.
HasInMonstersZone
(
_CardId
.
NaturiaBeast
,
true
);
return
(
Bot
.
HasInSpellZone
(
_CardId
.
ImperialOrder
,
true
,
true
)
||
Enemy
.
HasInSpellZone
(
_CardId
.
ImperialOrder
,
true
))
&&
!
Util
.
ChainContainsCard
(
_CardId
.
ImperialOrder
);
}
/// <summary>
/// If trap will be negated
/// </summary>
protected
bool
DefaultTrapWillBeNegated
()
{
return
(
Bot
.
HasInSpellZone
(
_CardId
.
RoyalDecreel
,
true
,
true
)
||
Enemy
.
HasInSpellZone
(
_CardId
.
RoyalDecreel
,
true
))
&&
!
Util
.
ChainContainsCard
(
_CardId
.
RoyalDecreel
);
}
}
/// <summary>
/// <summary>
...
@@ -714,15 +771,7 @@ namespace WindBot.Game.AI
...
@@ -714,15 +771,7 @@ namespace WindBot.Game.AI
/// </summary>
/// </summary>
protected
bool
DefaultSpellMustSetFirst
()
protected
bool
DefaultSpellMustSetFirst
()
{
{
ClientCard
card
=
null
;
return
Bot
.
HasInSpellZone
(
_CardId
.
AntiSpellFragrance
,
true
,
true
)
||
Enemy
.
HasInSpellZone
(
_CardId
.
AntiSpellFragrance
,
true
);
foreach
(
ClientCard
check
in
Bot
.
GetSpells
())
{
if
(
check
.
IsCode
(
_CardId
.
AntiSpellFragrance
)
&&
!
check
.
IsDisabled
())
card
=
check
;
}
if
(
card
!=
null
&&
card
.
IsFaceup
())
return
true
;
return
Bot
.
HasInSpellZone
(
_CardId
.
AntiSpellFragrance
,
true
,
true
)
||
Enemy
.
HasInSpellZone
(
_CardId
.
AntiSpellFragrance
,
true
);
}
}
/// <summary>
/// <summary>
...
...
Game/AI/Enums/InvincibleMonster.cs
View file @
bdd2c5de
namespace
WindBot.Game.AI.Enums
namespace
WindBot.Game.AI.Enums
{
{
/// <summary>
/// Cards that are invincible to battle and should always attack to use effect.
/// </summary>
public
enum
InvincibleBotMonster
{
YubelTheUltimateNightmare
=
31764700
,
YubelTerrorIncarnate
=
4779091
,
SandaionTheTimelord
=
33015627
,
GabrionTheTimelord
=
6616912
,
MichionTheTimelord
=
7733560
,
ZaphionTheTimelord
=
28929131
,
HailonTheTimelord
=
34137269
,
RaphionTheTimelord
=
60222213
,
SadionTheTimelord
=
65314286
,
MetaionTheTimelord
=
74530899
,
KamionTheTimelord
=
91712985
,
LazionTheTimelord
=
92435533
,
TimelordProgenitorVorpgate
=
67508932
,
RocketWarrior
=
30860696
,
GoDDDDivineZeroKingRage
=
40227329
,
BloomDivaTheMelodiousChoir
=
84988419
,
BlackwingArmorMaster
=
69031175
,
DaigustoSphreez
=
29552709
,
Number92HearteartHDragon
=
97403510
,
NumberC96DarkStorm
=
77205367
,
Number54LionHeart
=
54366836
}
/// <summary>
/// <summary>
/// Cards that are invincible to battle.
/// Cards that are invincible to battle.
/// </summary>
/// </summary>
public
enum
InvincibleMonster
public
enum
Invincible
Enemy
Monster
{
{
SpiritReaper
=
23205979
,
SpiritReaper
=
23205979
,
YubelTheUltimateNightmare
=
31764700
,
YubelTheUltimateNightmare
=
31764700
,
...
...
Game/AI/Executor.cs
View file @
bdd2c5de
...
@@ -73,13 +73,19 @@ namespace WindBot.Game.AI
...
@@ -73,13 +73,19 @@ namespace WindBot.Game.AI
public
virtual
BattlePhaseAction
OnSelectAttackTarget
(
ClientCard
attacker
,
IList
<
ClientCard
>
defenders
)
public
virtual
BattlePhaseAction
OnSelectAttackTarget
(
ClientCard
attacker
,
IList
<
ClientCard
>
defenders
)
{
{
// Overrided in Defa
l
ultExecutor
// Overrided in DefaultExecutor
return
null
;
return
null
;
}
}
public
virtual
bool
OnPreBattleBetween
(
ClientCard
attacker
,
ClientCard
defender
)
public
virtual
bool
OnPreBattleBetween
(
ClientCard
attacker
,
ClientCard
defender
)
{
{
// Overrided in DefalultExecutor
// Overrided in DefaultExecutor
return
true
;
}
public
virtual
bool
OnPreActivate
(
ClientCard
card
)
{
// Overrided in DefaultExecutor
return
true
;
return
true
;
}
}
...
@@ -178,13 +184,13 @@ namespace WindBot.Game.AI
...
@@ -178,13 +184,13 @@ namespace WindBot.Game.AI
public
virtual
CardPosition
OnSelectPosition
(
int
cardId
,
IList
<
CardPosition
>
positions
)
public
virtual
CardPosition
OnSelectPosition
(
int
cardId
,
IList
<
CardPosition
>
positions
)
{
{
// Overrided in Defa
l
ultExecutor
// Overrided in DefaultExecutor
return
0
;
return
0
;
}
}
public
virtual
bool
OnSelectBattleReplay
()
public
virtual
bool
OnSelectBattleReplay
()
{
{
// Overrided in Defa
l
ultExecutor
// Overrided in DefaultExecutor
return
false
;
return
false
;
}
}
...
@@ -194,7 +200,7 @@ namespace WindBot.Game.AI
...
@@ -194,7 +200,7 @@ namespace WindBot.Game.AI
/// <returns>True if select to set the monster.</returns>
/// <returns>True if select to set the monster.</returns>
public
virtual
bool
OnSelectMonsterSummonOrSet
(
ClientCard
card
)
public
virtual
bool
OnSelectMonsterSummonOrSet
(
ClientCard
card
)
{
{
// Overrided in Defa
l
ultExecutor
// Overrided in DefaultExecutor
return
false
;
return
false
;
}
}
...
...
Game/AI/HintMsg.cs
0 → 100644
View file @
bdd2c5de
namespace
WindBot.Game.AI
{
public
static
class
HintMsg
{
public
const
int
Release
=
500
,
Discard
=
501
,
Destroy
=
502
,
Remove
=
503
,
ToGrave
=
504
,
ReturnToHand
=
505
,
AddToHand
=
506
,
ToDeck
=
507
,
Summon
=
508
,
SpSummon
=
509
,
Set
=
510
,
FusionMaterial
=
511
,
SynchroMaterial
=
512
,
XyzMaterial
=
513
,
Faceup
=
514
,
Facedown
=
515
,
Attack
=
516
,
Defense
=
517
,
Equip
=
518
,
RemoveXyz
=
519
,
Control
=
520
,
DestroyReplace
=
521
,
FaceupAttack
=
522
,
FaceupDefense
=
523
,
FacedownAttack
=
524
,
FacedownDefense
=
525
,
Confirm
=
526
,
ToField
=
527
,
PosChange
=
528
,
Self
=
529
,
Oppo
=
530
,
Tribute
=
531
,
DeattachFrom
=
532
,
LinkMaterial
=
533
,
AttackTarget
=
549
,
Effect
=
550
,
Target
=
551
,
Coin
=
552
,
Dice
=
553
,
CardType
=
554
,
Option
=
555
,
ResolveEffect
=
556
,
Select
=
560
,
Position
=
561
,
Attribute
=
562
,
Race
=
563
,
Code
=
564
,
Number
=
565
,
LvRank
=
567
,
ResolveCard
=
568
,
Zone
=
569
,
DisableZone
=
570
,
ToZone
=
571
,
Counter
=
572
,
Disable
=
573
,
OperateCard
=
574
;
}
}
\ No newline at end of file
Game/ClientCard.cs
View file @
bdd2c5de
...
@@ -32,7 +32,7 @@ namespace WindBot.Game
...
@@ -32,7 +32,7 @@ namespace WindBot.Game
public
int
RealPower
{
get
;
set
;
}
public
int
RealPower
{
get
;
set
;
}
public
List
<
int
>
Overlays
{
get
;
private
set
;
}
public
List
<
int
>
Overlays
{
get
;
private
set
;
}
public
int
Owner
{
get
;
private
set
;
}
public
int
Owner
{
get
;
private
set
;
}
public
int
Controller
{
get
;
private
set
;
}
public
int
Controller
{
get
;
set
;
}
public
int
Disabled
{
get
;
private
set
;
}
public
int
Disabled
{
get
;
private
set
;
}
public
int
ProcCompleted
{
get
;
private
set
;
}
public
int
ProcCompleted
{
get
;
private
set
;
}
public
int
SelectSeq
{
get
;
set
;
}
public
int
SelectSeq
{
get
;
set
;
}
...
...
Game/Duel.cs
View file @
bdd2c5de
...
@@ -96,30 +96,8 @@ namespace WindBot.Game
...
@@ -96,30 +96,8 @@ namespace WindBot.Game
public
void
AddCard
(
CardLocation
loc
,
int
cardId
,
int
player
,
int
seq
,
int
pos
)
public
void
AddCard
(
CardLocation
loc
,
int
cardId
,
int
player
,
int
seq
,
int
pos
)
{
{
switch
(
loc
)
ClientCard
card
=
new
ClientCard
(
cardId
,
loc
,
seq
,
pos
);
{
AddCard
(
loc
,
card
,
player
,
seq
,
pos
,
cardId
);
case
CardLocation
.
Hand
:
Fields
[
player
].
Hand
.
Add
(
new
ClientCard
(
cardId
,
loc
,
-
1
,
pos
));
break
;
case
CardLocation
.
Grave
:
Fields
[
player
].
Graveyard
.
Add
(
new
ClientCard
(
cardId
,
loc
,-
1
,
pos
));
break
;
case
CardLocation
.
Removed
:
Fields
[
player
].
Banished
.
Add
(
new
ClientCard
(
cardId
,
loc
,
-
1
,
pos
));
break
;
case
CardLocation
.
MonsterZone
:
Fields
[
player
].
MonsterZone
[
seq
]
=
new
ClientCard
(
cardId
,
loc
,
seq
,
pos
);
break
;
case
CardLocation
.
SpellZone
:
Fields
[
player
].
SpellZone
[
seq
]
=
new
ClientCard
(
cardId
,
loc
,
seq
,
pos
);
break
;
case
CardLocation
.
Deck
:
Fields
[
player
].
Deck
.
Add
(
new
ClientCard
(
cardId
,
loc
,
-
1
,
pos
));
break
;
case
CardLocation
.
Extra
:
Fields
[
player
].
ExtraDeck
.
Add
(
new
ClientCard
(
cardId
,
loc
,
-
1
,
pos
));
break
;
}
}
}
public
void
AddCard
(
CardLocation
loc
,
ClientCard
card
,
int
player
,
int
seq
,
int
pos
,
int
id
)
public
void
AddCard
(
CardLocation
loc
,
ClientCard
card
,
int
player
,
int
seq
,
int
pos
,
int
id
)
...
@@ -127,6 +105,7 @@ namespace WindBot.Game
...
@@ -127,6 +105,7 @@ namespace WindBot.Game
card
.
Location
=
loc
;
card
.
Location
=
loc
;
card
.
Sequence
=
seq
;
card
.
Sequence
=
seq
;
card
.
Position
=
pos
;
card
.
Position
=
pos
;
card
.
Controller
=
player
;
card
.
SetId
(
id
);
card
.
SetId
(
id
);
switch
(
loc
)
switch
(
loc
)
{
{
...
...
Game/GameAI.cs
View file @
bdd2c5de
...
@@ -231,18 +231,12 @@ namespace WindBot.Game
...
@@ -231,18 +231,12 @@ namespace WindBot.Game
/// <returns>A new list containing the selected cards.</returns>
/// <returns>A new list containing the selected cards.</returns>
public
IList
<
ClientCard
>
OnSelectCard
(
IList
<
ClientCard
>
cards
,
int
min
,
int
max
,
int
hint
,
bool
cancelable
)
public
IList
<
ClientCard
>
OnSelectCard
(
IList
<
ClientCard
>
cards
,
int
min
,
int
max
,
int
hint
,
bool
cancelable
)
{
{
const
int
HINTMSG_FMATERIAL
=
511
;
const
int
HINTMSG_SMATERIAL
=
512
;
const
int
HINTMSG_XMATERIAL
=
513
;
const
int
HINTMSG_LMATERIAL
=
533
;
const
int
HINTMSG_SPSUMMON
=
509
;
// Check for the executor.
// Check for the executor.
IList
<
ClientCard
>
result
=
Executor
.
OnSelectCard
(
cards
,
min
,
max
,
hint
,
cancelable
);
IList
<
ClientCard
>
result
=
Executor
.
OnSelectCard
(
cards
,
min
,
max
,
hint
,
cancelable
);
if
(
result
!=
null
)
if
(
result
!=
null
)
return
result
;
return
result
;
if
(
hint
==
H
INTMSG_SPSUMMON
&&
min
==
1
&&
max
>
min
)
// pendulum summon
if
(
hint
==
H
intMsg
.
SpSummon
&&
min
==
1
&&
max
>
min
)
// pendulum summon
{
{
result
=
Executor
.
OnSelectPendulumSummon
(
cards
,
max
);
result
=
Executor
.
OnSelectPendulumSummon
(
cards
,
max
);
if
(
result
!=
null
)
if
(
result
!=
null
)
...
@@ -250,7 +244,7 @@ namespace WindBot.Game
...
@@ -250,7 +244,7 @@ namespace WindBot.Game
}
}
CardSelector
selector
=
null
;
CardSelector
selector
=
null
;
if
(
hint
==
H
INTMSG_FMATERIAL
||
hint
==
HINTMSG_SMATERIAL
||
hint
==
HINTMSG_XMATERIAL
||
hint
==
HINTMSG_LMATERIAL
)
if
(
hint
==
H
intMsg
.
FusionMaterial
||
hint
==
HintMsg
.
SynchroMaterial
||
hint
==
HintMsg
.
XyzMaterial
||
hint
==
HintMsg
.
LinkMaterial
)
{
{
if
(
m_materialSelector
!=
null
)
if
(
m_materialSelector
!=
null
)
{
{
...
@@ -259,13 +253,13 @@ namespace WindBot.Game
...
@@ -259,13 +253,13 @@ namespace WindBot.Game
}
}
else
else
{
{
if
(
hint
==
H
INTMSG_FMATERIAL
)
if
(
hint
==
H
intMsg
.
FusionMaterial
)
result
=
Executor
.
OnSelectFusionMaterial
(
cards
,
min
,
max
);
result
=
Executor
.
OnSelectFusionMaterial
(
cards
,
min
,
max
);
if
(
hint
==
H
INTMSG_SMATERIAL
)
if
(
hint
==
H
intMsg
.
SynchroMaterial
)
result
=
Executor
.
OnSelectSynchroMaterial
(
cards
,
0
,
min
,
max
);
result
=
Executor
.
OnSelectSynchroMaterial
(
cards
,
0
,
min
,
max
);
if
(
hint
==
H
INTMSG_XMATERIAL
)
if
(
hint
==
H
intMsg
.
XyzMaterial
)
result
=
Executor
.
OnSelectXyzMaterial
(
cards
,
min
,
max
);
result
=
Executor
.
OnSelectXyzMaterial
(
cards
,
min
,
max
);
if
(
hint
==
H
INTMSG_LMATERIAL
)
if
(
hint
==
H
intMsg
.
LinkMaterial
)
result
=
Executor
.
OnSelectLinkMaterial
(
cards
,
min
,
max
);
result
=
Executor
.
OnSelectLinkMaterial
(
cards
,
min
,
max
);
if
(
result
!=
null
)
if
(
result
!=
null
)
...
@@ -533,16 +527,13 @@ namespace WindBot.Game
...
@@ -533,16 +527,13 @@ namespace WindBot.Game
/// <returns></returns>
/// <returns></returns>
public
IList
<
ClientCard
>
OnSelectSum
(
IList
<
ClientCard
>
cards
,
int
sum
,
int
min
,
int
max
,
int
hint
,
bool
mode
)
public
IList
<
ClientCard
>
OnSelectSum
(
IList
<
ClientCard
>
cards
,
int
sum
,
int
min
,
int
max
,
int
hint
,
bool
mode
)
{
{
const
int
HINTMSG_RELEASE
=
500
;
const
int
HINTMSG_SMATERIAL
=
512
;
IList
<
ClientCard
>
selected
=
Executor
.
OnSelectSum
(
cards
,
sum
,
min
,
max
,
hint
,
mode
);
IList
<
ClientCard
>
selected
=
Executor
.
OnSelectSum
(
cards
,
sum
,
min
,
max
,
hint
,
mode
);
if
(
selected
!=
null
)
if
(
selected
!=
null
)
{
{
return
selected
;
return
selected
;
}
}
if
(
hint
==
H
INTMSG_RELEASE
||
hint
==
HINTMSG_SMATERIAL
)
if
(
hint
==
H
intMsg
.
Release
||
hint
==
HintMsg
.
SynchroMaterial
)
{
{
if
(
m_materialSelector
!=
null
)
if
(
m_materialSelector
!=
null
)
{
{
...
@@ -552,10 +543,10 @@ namespace WindBot.Game
...
@@ -552,10 +543,10 @@ namespace WindBot.Game
{
{
switch
(
hint
)
switch
(
hint
)
{
{
case
H
INTMSG_SMATERIAL
:
case
H
intMsg
.
SynchroMaterial
:
selected
=
Executor
.
OnSelectSynchroMaterial
(
cards
,
sum
,
min
,
max
);
selected
=
Executor
.
OnSelectSynchroMaterial
(
cards
,
sum
,
min
,
max
);
break
;
break
;
case
H
INTMSG_RELEASE
:
case
H
intMsg
.
Release
:
selected
=
Executor
.
OnSelectRitualTribute
(
cards
,
sum
,
min
,
max
);
selected
=
Executor
.
OnSelectRitualTribute
(
cards
,
sum
,
min
,
max
);
break
;
break
;
}
}
...
@@ -1111,10 +1102,12 @@ namespace WindBot.Game
...
@@ -1111,10 +1102,12 @@ namespace WindBot.Game
private
bool
ShouldExecute
(
CardExecutor
exec
,
ClientCard
card
,
ExecutorType
type
,
int
desc
=
-
1
)
private
bool
ShouldExecute
(
CardExecutor
exec
,
ClientCard
card
,
ExecutorType
type
,
int
desc
=
-
1
)
{
{
if
(
card
.
Id
!=
0
&&
type
==
ExecutorType
.
Activate
&&
if
(
card
.
Id
!=
0
&&
type
==
ExecutorType
.
Activate
)
_activatedCards
.
ContainsKey
(
card
.
Id
)
&&
_activatedCards
[
card
.
Id
]
>=
9
)
{
{
return
false
;
if
(
_activatedCards
.
ContainsKey
(
card
.
Id
)
&&
_activatedCards
[
card
.
Id
]
>=
9
)
return
false
;
if
(!
Executor
.
OnPreActivate
(
card
))
return
false
;
}
}
Executor
.
SetCard
(
type
,
card
,
desc
);
Executor
.
SetCard
(
type
,
card
,
desc
);
bool
result
=
card
!=
null
&&
exec
.
Type
==
type
&&
bool
result
=
card
!=
null
&&
exec
.
Type
==
type
&&
...
...
WindBot.csproj
View file @
bdd2c5de
...
@@ -125,6 +125,7 @@
...
@@ -125,6 +125,7 @@
<Compile
Include=
"Game\AI\Enums\InvincibleMonster.cs"
/>
<Compile
Include=
"Game\AI\Enums\InvincibleMonster.cs"
/>
<Compile
Include=
"Game\AI\Enums\Floodgate.cs"
/>
<Compile
Include=
"Game\AI\Enums\Floodgate.cs"
/>
<Compile
Include=
"Game\AI\Executor.cs"
/>
<Compile
Include=
"Game\AI\Executor.cs"
/>
<Compile
Include=
"Game\AI\HintMsg.cs"
/>
<Compile
Include=
"Game\AI\Opcodes.cs"
/>
<Compile
Include=
"Game\AI\Opcodes.cs"
/>
<Compile
Include=
"Game\AI\Zones.cs"
/>
<Compile
Include=
"Game\AI\Zones.cs"
/>
<Compile
Include=
"Game\AI\ExecutorType.cs"
/>
<Compile
Include=
"Game\AI\ExecutorType.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