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
78fff73f
Commit
78fff73f
authored
May 11, 2024
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://github.com/IceYGO/windbot
parents
96490bd2
d18e943d
Changes
18
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
186 additions
and
40 deletions
+186
-40
.github/workflows/test-build.yml
.github/workflows/test-build.yml
+4
-4
BotWrapper/bot.conf
BotWrapper/bot.conf
+34
-24
Dialogs/default.json
Dialogs/default.json
+6
-0
Dialogs/gugugu.zh-CN.json
Dialogs/gugugu.zh-CN.json
+5
-0
Dialogs/zh-CN.json
Dialogs/zh-CN.json
+4
-0
Game/AI/Decks/AltergeistExecutor.cs
Game/AI/Decks/AltergeistExecutor.cs
+10
-0
Game/AI/Decks/DogmatikaExecutor.cs
Game/AI/Decks/DogmatikaExecutor.cs
+10
-0
Game/AI/Decks/ExosisterExecutor.cs
Game/AI/Decks/ExosisterExecutor.cs
+10
-0
Game/AI/Decks/SwordsoulExecutor.cs
Game/AI/Decks/SwordsoulExecutor.cs
+9
-0
Game/AI/Decks/TearlamentsExecutor.cs
Game/AI/Decks/TearlamentsExecutor.cs
+1
-1
Game/AI/Decks/TrickstarExecutor.cs
Game/AI/Decks/TrickstarExecutor.cs
+10
-0
Game/AI/Decks/WitchcraftExecutor.cs
Game/AI/Decks/WitchcraftExecutor.cs
+10
-0
Game/AI/DefaultExecutor.cs
Game/AI/DefaultExecutor.cs
+39
-10
Game/AI/Dialogs.cs
Game/AI/Dialogs.cs
+11
-0
Game/AI/ExecutorType.cs
Game/AI/ExecutorType.cs
+2
-1
Game/GameAI.cs
Game/GameAI.cs
+16
-0
Game/GameClient.cs
Game/GameClient.cs
+5
-0
sqlite3.dll
sqlite3.dll
+0
-0
No files found.
.github/workflows/test-build.yml
View file @
78fff73f
...
@@ -15,12 +15,12 @@ jobs:
...
@@ -15,12 +15,12 @@ jobs:
steps
:
steps
:
-
name
:
Checkout
-
name
:
Checkout
uses
:
actions/checkout@v
3
uses
:
actions/checkout@v
4
with
:
with
:
fetch-depth
:
0
fetch-depth
:
0
-
name
:
Setup MSBuild.exe
-
name
:
Setup MSBuild.exe
uses
:
microsoft/setup-msbuild@v
1
uses
:
microsoft/setup-msbuild@v
2
-
name
:
Build!
-
name
:
Build!
run
:
msbuild $env:Solution_Name /t:Build /p:Configuration=Release
run
:
msbuild $env:Solution_Name /t:Build /p:Configuration=Release
...
@@ -36,7 +36,7 @@ jobs:
...
@@ -36,7 +36,7 @@ jobs:
cd ..
cd ..
-
name
:
Upload build artifacts
-
name
:
Upload build artifacts
uses
:
actions/upload-artifact@v
3
uses
:
actions/upload-artifact@v
4
with
:
with
:
path
:
dist\WindBot.7z
path
:
dist\WindBot.7z
...
@@ -46,7 +46,7 @@ jobs:
...
@@ -46,7 +46,7 @@ jobs:
with
:
with
:
repo_token
:
"
${{
secrets.GITHUB_TOKEN
}}"
repo_token
:
"
${{
secrets.GITHUB_TOKEN
}}"
automatic_release_tag
:
"
latest"
automatic_release_tag
:
"
latest"
prerelease
:
tru
e
prerelease
:
fals
e
title
:
"
Development
Build"
title
:
"
Development
Build"
files
:
|
files
:
|
dist/WindBot.7z
dist/WindBot.7z
BotWrapper/bot.conf
View file @
78fff73f
...
@@ -14,9 +14,19 @@ Random=AI_LV2
...
@@ -14,9 +14,19 @@ Random=AI_LV2
一些比较弱的卡组。
一些比较弱的卡组。
SUPPORT_MASTER_RULE_2020
SUPPORT_MASTER_RULE_2020
!随机-
普通
!随机-
一般
Random
=
AI_LV3
Random
=
AI_LV3
一些环境里可以看到的卡组。
一些不是很弱的卡组。
SUPPORT_MASTER_RULE_2020
!随机-普通
Random
=
AI_LV4
一些可以(或者曾经可以)在竞技环境里看到的卡组。
SUPPORT_MASTER_RULE_2020
!随机-狂野
Random
=
AI_WILD
普通的人机的卡组会符合其使用的卡池对应的环境的禁限卡表,但狂野模式的人机的卡组一般不符合任何禁限卡表。
SUPPORT_MASTER_RULE_2020
SUPPORT_MASTER_RULE_2020
!随机-报社
!随机-报社
...
@@ -67,17 +77,17 @@ AI_LV2 SUPPORT_MASTER_RULE_3 SUPPORT_MASTER_RULE_2020
...
@@ -67,17 +77,17 @@ 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
大师规则三的全盛饼蛙卡组。
大师规则三的全盛饼蛙卡组。
SUPPORT_MASTER_RULE_3
SUPPORT_MASTER_RULE_2020
AI_LV3
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_LV
2
SUPPORT_MASTER_RULE_3
SUPPORT_MASTER_RULE_2020
AI_LV
3
SUPPORT_MASTER_RULE_3
SUPPORT_MASTER_RULE_2020
!复制植物-十二兽
!复制植物-十二兽
Name
=复制植物
Deck
=
Zoodiac
Dialog
=
copy
.
zh
-
CN
Name
=复制植物
Deck
=
Zoodiac
Dialog
=
copy
.
zh
-
CN
大师规则三的十四兽卡组。
大师规则三的十四兽卡组。
SUPPORT_MASTER_RULE_3
SUPPORT_MASTER_RULE_2020
AI_LV4
SUPPORT_MASTER_RULE_3
SUPPORT_MASTER_RULE_2020
!尼亚-妖仙兽
!尼亚-妖仙兽
Name
=尼亚
Deck
=
Yosenju
Dialog
=
near
.
zh
-
CN
Name
=尼亚
Deck
=
Yosenju
Dialog
=
near
.
zh
-
CN
...
@@ -92,17 +102,17 @@ AI_ANTI_META SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2
...
@@ -92,17 +102,17 @@ AI_ANTI_META SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2
!尼亚-淘气仙星
!尼亚-淘气仙星
Name
=尼亚
Deck
=
Trickstar
Dialog
=
near
.
zh
-
CN
Name
=尼亚
Deck
=
Trickstar
Dialog
=
near
.
zh
-
CN
旧式淘气仙星卡组。
旧式淘气仙星卡组。
AI_LV
3
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
AI_LV
4
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
!尼亚-幻变骚灵
!尼亚-幻变骚灵
Name
=尼亚
Deck
=
Altergeist
Dialog
=
near
.
zh
-
CN
Name
=尼亚
Deck
=
Altergeist
Dialog
=
near
.
zh
-
CN
幻变骚灵卡组。
幻变骚灵卡组。
AI_LV
3
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
AI_LV
4
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
!尼亚-拉比林斯迷宫
!尼亚-拉比林斯迷宫
Name
=尼亚
Deck
=
Labrynth
Dialog
=
near
.
zh
-
CN
Name
=尼亚
Deck
=
Labrynth
Dialog
=
near
.
zh
-
CN
拉比林斯迷宫卡组。
拉比林斯迷宫卡组。
AI_LV
3
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
AI_LV
4
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
!复制梁龙-闪刀姬
!复制梁龙-闪刀姬
Name
=复制梁龙
Deck
=
SkyStriker
Dialog
=
anothercopy
.
zh
-
CN
Name
=复制梁龙
Deck
=
SkyStriker
Dialog
=
anothercopy
.
zh
-
CN
...
@@ -112,7 +122,7 @@ AI_LV3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
...
@@ -112,7 +122,7 @@ AI_LV3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
!复制梁龙-自奏圣乐
!复制梁龙-自奏圣乐
Name
=复制梁龙
Deck
=
Orcust
Dialog
=
anothercopy
.
zh
-
CN
Name
=复制梁龙
Deck
=
Orcust
Dialog
=
anothercopy
.
zh
-
CN
旧式自奏圣乐卡组。
旧式自奏圣乐卡组。
AI_LV
3
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
AI_LV
4
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
!复制梁龙-转生炎兽
!复制梁龙-转生炎兽
Name
=复制梁龙
Deck
=
Salamangreat
Dialog
=
anothercopy
.
zh
-
CN
Name
=复制梁龙
Deck
=
Salamangreat
Dialog
=
anothercopy
.
zh
-
CN
...
@@ -152,7 +162,7 @@ AI_LV2 SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
...
@@ -152,7 +162,7 @@ AI_LV2 SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
!试作型机器人
1732
!试作型机器人
1732
Name
=试作型机器人
1732
Deck
=
ST1732
Dialog
=
zh
-
CN
Name
=试作型机器人
1732
Deck
=
ST1732
Dialog
=
zh
-
CN
由三盒
ST17
和三盒
SD32
组成的卡组。
由三盒
ST17
和三盒
SD32
组成的卡组。
AI_LV
2
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
AI_LV
1
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
!奇異果
!奇異果
Name
=奇異果
Deck
=
LightswornShaddoldinosour
Dialog
=
kiwi
.
zh
-
TW
Name
=奇異果
Deck
=
LightswornShaddoldinosour
Dialog
=
kiwi
.
zh
-
TW
...
@@ -167,7 +177,7 @@ AI_LV3 SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
...
@@ -167,7 +177,7 @@ AI_LV3 SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
!
MAX
龍果
!
MAX
龍果
Name
=
MAX
龍果
Deck
=
BlueEyesMaxDragon
Dialog
=
kiwi
.
zh
-
TW
Name
=
MAX
龍果
Deck
=
BlueEyesMaxDragon
Dialog
=
kiwi
.
zh
-
TW
青眼混沌极龙卡组。
青眼混沌极龙卡组。
AI_LV
2
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
AI_LV
3
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
!幻煌果
!幻煌果
Name
=幻煌果
Deck
=
Phantasm
Dialog
=
kiwi
.
zh
-
TW
Name
=幻煌果
Deck
=
Phantasm
Dialog
=
kiwi
.
zh
-
TW
...
@@ -187,54 +197,54 @@ AI_ANTI_META SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2
...
@@ -187,54 +197,54 @@ AI_ANTI_META SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2
!我太帅了-真红眼龙骑士
!我太帅了-真红眼龙骑士
Name
=我太帅了
Deck
=
Dragun
Dialog
=
smart
.
zh
-
CN
Name
=我太帅了
Deck
=
Dragun
Dialog
=
smart
.
zh
-
CN
超魔导真红眼龙骑士卡组。
超魔导真红眼龙骑士卡组。
AI_LV
3
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
AI_LV
4
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
!我太帅了-水百凤凰勇者
!我太帅了-水百凤凰勇者
Name
=我太帅了
Deck
=
Brave
Dialog
=
smart
.
zh
-
CN
Name
=我太帅了
Deck
=
Brave
Dialog
=
smart
.
zh
-
CN
水机百头龙凤凰人勇者卡组。
水机百头龙凤凰人勇者卡组。
AI_LV
3
SUPPORT_MASTER_RULE_2020
AI_LV
4
SUPPORT_MASTER_RULE_2020
!玻璃女巫-魔女术
!玻璃女巫-魔女术
Name
=玻璃女巫
Deck
=
Witchcraft
Dialog
=
verre
.
zh
-
CN
Name
=玻璃女巫
Deck
=
Witchcraft
Dialog
=
verre
.
zh
-
CN
魔女术卡组。
魔女术卡组。
AI_LV
3
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
AI_LV
4
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
!玻璃女巫-救祓少女
!玻璃女巫-救祓少女
Name
=玻璃女巫
Deck
=
Exosister
Dialog
=
verre
.
zh
-
CN
Name
=玻璃女巫
Deck
=
Exosister
Dialog
=
verre
.
zh
-
CN
救祓少女卡组。
救祓少女卡组。
AI_LV
3
SUPPORT_MASTER_RULE_3
SUPPORT_MASTER_RULE_2020
AI_LV
4
SUPPORT_MASTER_RULE_3
SUPPORT_MASTER_RULE_2020
!艾克莉西娅-相剑
!艾克莉西娅-相剑
Name
=艾克莉西娅
Deck
=
Swordsoul
Dialog
=
ecclesia
.
zh
-
CN
Name
=艾克莉西娅
Deck
=
Swordsoul
Dialog
=
ecclesia
.
zh
-
CN
相剑卡组。
相剑卡组。
AI_LV
3
SUPPORT_MASTER_RULE_3
SUPPORT_MASTER_RULE_2020
AI_LV
4
SUPPORT_MASTER_RULE_3
SUPPORT_MASTER_RULE_2020
!艾克莉西娅-教导
!艾克莉西娅-教导
Name
=艾克莉西娅
Deck
=
Dogmatika
Dialog
=
ecclesia
.
zh
-
CN
Name
=艾克莉西娅
Deck
=
Dogmatika
Dialog
=
ecclesia
.
zh
-
CN
教导卡组。
教导卡组。
AI_LV
3
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
AI_LV
4
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
SUPPORT_MASTER_RULE_2020
!神数不神-刹帝利
!神数不神-刹帝利
Name
=神数不神
Deck
=
Kashtira
Dialog
=
Zefra
.
zh
-
CN
Name
=神数不神
Deck
=
Kashtira
Dialog
=
Zefra
.
zh
-
CN
俱舍怒威族卡组。
俱舍怒威族卡组。
AI_LV
3
SUPPORT_MASTER_RULE_2020
AI_LV
4
SUPPORT_MASTER_RULE_2020
![狂野
模式
]神数不神-雷龙
![狂野]神数不神-雷龙
Name
=神数不神
Deck
=
ThunderDragon
Dialog
=
Zefra
.
zh
-
CN
Name
=神数不神
Deck
=
ThunderDragon
Dialog
=
Zefra
.
zh
-
CN
深渊混沌雷龙卡组。
(普通模式的人机的卡组会符合其使用的卡池对应的环境的禁限卡表,但在狂野模式中,人机的卡组不符合任何禁限卡表。)
深渊混沌雷龙卡组。
SUPPORT_MASTER_RULE_2020
AI_WILD
SUPPORT_MASTER_RULE_2020
!神数不神-珠泪哀歌
!神数不神-珠泪哀歌
Name
=神数不神
Deck
=
Tearlaments
Dialog
=
Zefra
.
zh
-
CN
Name
=神数不神
Deck
=
Tearlaments
Dialog
=
Zefra
.
zh
-
CN
旧式地天使珠泪哀歌族卡组。
旧式地天使珠泪哀歌族卡组。
AI_LV
3
SUPPORT_MASTER_RULE_2020
AI_LV
4
AI_WILD
SUPPORT_MASTER_RULE_2020
!神数不神-神数
!神数不神-神数
Name
=神数不神
Deck
=
Zefra
Dialog
=
Zefra
.
zh
-
CN
Name
=神数不神
Deck
=
Zefra
Dialog
=
Zefra
.
zh
-
CN
神数卡组。
神数卡组。
AI_LV
3
SUPPORT_MASTER_RULE_2020
AI_LV
4
SUPPORT_MASTER_RULE_2020
!今晚有宵夜吗-超重武者
!今晚有宵夜吗-超重武者
Name
=今晚有宵夜吗
Deck
=
SuperheavySamurai
Dialog
=
superheavysamurai
.
zh
-
CN
Name
=今晚有宵夜吗
Deck
=
SuperheavySamurai
Dialog
=
superheavysamurai
.
zh
-
CN
超重武者卡组。
超重武者卡组。
AI_LV
3
SUPPORT_MASTER_RULE_2020
AI_LV
4
SUPPORT_MASTER_RULE_2020
Dialogs/default.json
View file @
78fff73f
...
@@ -64,5 +64,11 @@
...
@@ -64,5 +64,11 @@
"Before you do that, I'll chain {0}!"
,
"Before you do that, I'll chain {0}!"
,
"Nice try, but I have {0}!"
,
"Nice try, but I have {0}!"
,
"Didn't expect {0}, did you?"
"Didn't expect {0}, did you?"
],
"surrender"
:
[
"I surrender."
,
"You win this time."
,
"I can't win this duel."
,
"Good game."
]
]
}
}
\ No newline at end of file
Dialogs/gugugu.zh-CN.json
View file @
78fff73f
...
@@ -55,5 +55,10 @@
...
@@ -55,5 +55,10 @@
"但我鸽了"
,
"但我鸽了"
,
"无此服务"
,
"无此服务"
,
"可怕"
"可怕"
],
"surrender"
:
[
"太可怕了(跑路"
,
"这游戏好难玩(跑路"
,
"还好我不玩游戏王(跑路"
]
]
}
}
Dialogs/zh-CN.json
View file @
78fff73f
...
@@ -71,5 +71,9 @@
...
@@ -71,5 +71,9 @@
"我不认同。{0},发动!"
,
"我不认同。{0},发动!"
,
"看样子你忘了我的{0}!"
,
"看样子你忘了我的{0}!"
,
"你考虑过我有{0}吗?"
"你考虑过我有{0}吗?"
],
"surrender"
:
[
"我认输。"
,
"我承认你的胜利。"
]
]
}
}
Game/AI/Decks/AltergeistExecutor.cs
View file @
78fff73f
...
@@ -2916,5 +2916,15 @@ namespace WindBot.Game.AI.Decks
...
@@ -2916,5 +2916,15 @@ namespace WindBot.Game.AI.Decks
}
}
return
base
.
OnSelectPlace
(
cardId
,
player
,
location
,
available
);
return
base
.
OnSelectPlace
(
cardId
,
player
,
location
,
available
);
}
}
protected
override
bool
DefaultSetForDiabellze
()
{
if
(
base
.
DefaultSetForDiabellze
())
{
AI
.
SelectPlace
(
SelectSTPlace
(
Card
,
true
));
return
true
;
}
return
false
;
}
}
}
}
}
\ No newline at end of file
Game/AI/Decks/DogmatikaExecutor.cs
View file @
78fff73f
...
@@ -2888,5 +2888,15 @@ namespace WindBot.Game.AI.Decks
...
@@ -2888,5 +2888,15 @@ namespace WindBot.Game.AI.Decks
return
false
;
return
false
;
}
}
protected
override
bool
DefaultSetForDiabellze
()
{
if
(
base
.
DefaultSetForDiabellze
())
{
SelectSTPlace
(
null
,
true
);
return
true
;
}
return
false
;
}
}
}
}
}
\ No newline at end of file
Game/AI/Decks/ExosisterExecutor.cs
View file @
78fff73f
...
@@ -2976,5 +2976,15 @@ namespace WindBot.Game.AI.Decks
...
@@ -2976,5 +2976,15 @@ namespace WindBot.Game.AI.Decks
return
false
;
return
false
;
}
}
protected
override
bool
DefaultSetForDiabellze
()
{
if
(
base
.
DefaultSetForDiabellze
())
{
SelectSTPlace
(
null
,
true
);
return
true
;
}
return
false
;
}
}
}
}
}
\ No newline at end of file
Game/AI/Decks/SwordsoulExecutor.cs
View file @
78fff73f
...
@@ -3105,5 +3105,14 @@ namespace WindBot.Game.AI.Decks
...
@@ -3105,5 +3105,14 @@ namespace WindBot.Game.AI.Decks
return
false
;
return
false
;
}
}
protected
override
bool
DefaultSetForDiabellze
()
{
if
(
base
.
DefaultSetForDiabellze
())
{
SelectSTPlace
(
null
,
true
);
return
true
;
}
return
false
;
}
}
}
}
}
\ No newline at end of file
Game/AI/Decks/TearlamentsExecutor.cs
View file @
78fff73f
...
@@ -1705,7 +1705,7 @@ namespace WindBot.Game.AI.Decks
...
@@ -1705,7 +1705,7 @@ namespace WindBot.Game.AI.Decks
if
(
Duel
.
Turn
==
1
||
Enemy
.
GetMonsterCount
()
<=
0
)
return
false
;
if
(
Duel
.
Turn
==
1
||
Enemy
.
GetMonsterCount
()
<=
0
)
return
false
;
List
<
ClientCard
>
e_cards
=
Enemy
.
GetMonsters
().
Where
(
card
=>
card
!=
null
&&
card
.
IsFaceup
()
&&
card
.
IsAttack
()).
ToList
();
List
<
ClientCard
>
e_cards
=
Enemy
.
GetMonsters
().
Where
(
card
=>
card
!=
null
&&
card
.
IsFaceup
()
&&
card
.
IsAttack
()).
ToList
();
List
<
ClientCard
>
b_cards
=
Bot
.
GetMonsters
().
Where
(
card
=>
card
!=
null
&&
card
.
IsFaceup
()
&&
card
.
IsAttack
()).
ToList
();
List
<
ClientCard
>
b_cards
=
Bot
.
GetMonsters
().
Where
(
card
=>
card
!=
null
&&
card
.
IsFaceup
()
&&
card
.
IsAttack
()).
ToList
();
if
(
(
e_cards
.
Count
<=
0
||
b_cards
.
Count
<=
0
)
&&
Enemy
.
MonsterZone
.
GetDangerousMonster
()
==
null
)
return
false
;
if
(
e_cards
.
Count
<=
0
||
b_cards
.
Count
<=
0
||
Enemy
.
MonsterZone
.
GetDangerousMonster
()
==
null
)
return
false
;
e_cards
.
Sort
(
CardContainer
.
CompareCardAttack
);
e_cards
.
Sort
(
CardContainer
.
CompareCardAttack
);
e_cards
.
Reverse
();
e_cards
.
Reverse
();
b_cards
.
Sort
(
CardContainer
.
CompareCardAttack
);
b_cards
.
Sort
(
CardContainer
.
CompareCardAttack
);
...
...
Game/AI/Decks/TrickstarExecutor.cs
View file @
78fff73f
...
@@ -1823,5 +1823,15 @@ namespace WindBot.Game.AI.Decks
...
@@ -1823,5 +1823,15 @@ namespace WindBot.Game.AI.Decks
}
}
return
base
.
OnPreBattleBetween
(
attacker
,
defender
);
return
base
.
OnPreBattleBetween
(
attacker
,
defender
);
}
}
protected
override
bool
DefaultSetForDiabellze
()
{
if
(
base
.
DefaultSetForDiabellze
())
{
AI
.
SelectPlace
(
SelectSTPlace
(
Card
,
true
));
return
true
;
}
return
false
;
}
}
}
}
}
Game/AI/Decks/WitchcraftExecutor.cs
View file @
78fff73f
...
@@ -2899,5 +2899,15 @@ namespace WindBot.Game.AI.Decks
...
@@ -2899,5 +2899,15 @@ namespace WindBot.Game.AI.Decks
}
}
return
false
;
return
false
;
}
}
protected
override
bool
DefaultSetForDiabellze
()
{
if
(
base
.
DefaultSetForDiabellze
())
{
SelectSTPlace
(
null
,
true
);
return
true
;
}
return
false
;
}
}
}
}
}
\ No newline at end of file
Game/AI/DefaultExecutor.cs
View file @
78fff73f
...
@@ -192,6 +192,9 @@ namespace WindBot.Game.AI
...
@@ -192,6 +192,9 @@ namespace WindBot.Game.AI
public
const
int
NovoxTheSilenforcerDisciple
=
25801745
;
public
const
int
NovoxTheSilenforcerDisciple
=
25801745
;
public
const
int
SilenforcingBarrier
=
98477480
;
public
const
int
SilenforcingBarrier
=
98477480
;
public
const
int
DiabellzeOfTheOriginalSin
=
53765052
;
public
const
int
PotOfExtravagance
=
49238328
;
}
}
protected
class
_Setcode
protected
class
_Setcode
...
@@ -224,6 +227,7 @@ namespace WindBot.Game.AI
...
@@ -224,6 +227,7 @@ namespace WindBot.Game.AI
AddExecutor
(
ExecutorType
.
Activate
,
_CardId
.
VaylantzWorld_ShinraBansho
,
DefaultVaylantzWorld_ShinraBansho
);
AddExecutor
(
ExecutorType
.
Activate
,
_CardId
.
VaylantzWorld_ShinraBansho
,
DefaultVaylantzWorld_ShinraBansho
);
AddExecutor
(
ExecutorType
.
Activate
,
_CardId
.
VaylantzWorld_KonigWissen
,
DefaultVaylantzWorld_KonigWissen
);
AddExecutor
(
ExecutorType
.
Activate
,
_CardId
.
VaylantzWorld_KonigWissen
,
DefaultVaylantzWorld_KonigWissen
);
AddExecutor
(
ExecutorType
.
Activate
,
_CardId
.
SantaClaws
);
AddExecutor
(
ExecutorType
.
Activate
,
_CardId
.
SantaClaws
);
AddExecutor
(
ExecutorType
.
SpellSet
,
DefaultSetForDiabellze
);
}
}
protected
int
lightningStormOption
=
-
1
;
protected
int
lightningStormOption
=
-
1
;
...
@@ -343,7 +347,7 @@ namespace WindBot.Game.AI
...
@@ -343,7 +347,7 @@ namespace WindBot.Game.AI
if
(
defender
.
IsMonsterDangerous
())
if
(
defender
.
IsMonsterDangerous
())
{
{
bool
canIgnoreIt
=
!
attacker
.
IsDisabled
()
&&
(
bool
canIgnoreIt
=
!
attacker
.
IsDisabled
()
&&
(
attacker
.
IsCode
(
_CardId
.
UltimateConductorTytanno
)
&&
defender
.
IsDefense
()
||
attacker
.
IsCode
(
_CardId
.
UltimateConductorTytanno
)
&&
defender
.
IsDefense
()
||
attacker
.
IsCode
(
_CardId
.
ElShaddollConstruct
)
&&
defender
.
IsSpecialSummoned
||
attacker
.
IsCode
(
_CardId
.
ElShaddollConstruct
)
&&
defender
.
IsSpecialSummoned
||
attacker
.
IsCode
(
_CardId
.
AllyOfJusticeCatastor
)
&&
!
defender
.
HasAttribute
(
CardAttribute
.
Dark
));
attacker
.
IsCode
(
_CardId
.
AllyOfJusticeCatastor
)
&&
!
defender
.
HasAttribute
(
CardAttribute
.
Dark
));
if
(!
canIgnoreIt
)
if
(!
canIgnoreIt
)
...
@@ -385,7 +389,7 @@ namespace WindBot.Game.AI
...
@@ -385,7 +389,7 @@ namespace WindBot.Game.AI
if
(
attacker
.
IsMonsterInvincible
())
if
(
attacker
.
IsMonsterInvincible
())
attacker
.
RealPower
=
9999
;
attacker
.
RealPower
=
9999
;
if
(
attacker
.
EquipCards
.
Any
(
equip
=>
equip
.
IsCode
(
_CardId
.
MoonMirrorShield
)
&&
!
equip
.
IsDisabled
()))
if
(
attacker
.
EquipCards
.
Any
(
equip
=>
equip
.
IsCode
(
_CardId
.
MoonMirrorShield
)
&&
!
equip
.
IsDisabled
()))
attacker
.
RealPower
=
defender
.
RealPower
+
100
;
attacker
.
RealPower
=
defender
.
RealPower
+
100
;
}
}
...
@@ -419,13 +423,13 @@ namespace WindBot.Game.AI
...
@@ -419,13 +423,13 @@ namespace WindBot.Game.AI
if
(
defender
.
OwnTargets
.
Any
(
card
=>
card
.
IsCode
(
_CardId
.
PhantomKnightsFogBlade
)
&&
!
card
.
IsDisabled
()))
if
(
defender
.
OwnTargets
.
Any
(
card
=>
card
.
IsCode
(
_CardId
.
PhantomKnightsFogBlade
)
&&
!
card
.
IsDisabled
()))
return
false
;
return
false
;
if
(
defender
.
HasSetcode
(
_Setcode
.
EarthboundImmortal
)
&&
!
defender
.
IsDisabled
())
if
(
defender
.
HasSetcode
(
_Setcode
.
EarthboundImmortal
)
&&
!
defender
.
IsDisabled
())
return
false
;
return
false
;
bool
attackHighestMonster
=
bool
attackHighestMonster
=
Enemy
.
HasInMonstersZone
(
_CardId
.
RockOfTheVanquisher
,
true
)
&&
Enemy
.
GetMonsters
().
Any
(
card
=>
card
.
HasSetcode
(
_Setcode
.
VanquishSoul
))
||
Enemy
.
HasInMonstersZone
(
_CardId
.
RockOfTheVanquisher
,
true
)
&&
Enemy
.
GetMonsters
().
Any
(
card
=>
card
.
HasSetcode
(
_Setcode
.
VanquishSoul
))
||
Enemy
.
HasInMonstersZone
(
_CardId
.
GladiatorBeastDomitianus
,
true
)
||
Enemy
.
HasInMonstersZone
(
_CardId
.
PatricianOfDarkness
)
||
Enemy
.
HasInMonstersZone
(
_CardId
.
GladiatorBeastDomitianus
,
true
)
||
Enemy
.
HasInMonstersZone
(
_CardId
.
PatricianOfDarkness
)
||
Enemy
.
HasInMonstersZone
(
_CardId
.
DictatorOfD
,
true
)
&&
Enemy
.
GetMonsters
().
Any
(
card
=>
card
.
HasSetcode
(
_Setcode
.
BlueEyes
));
Enemy
.
HasInMonstersZone
(
_CardId
.
DictatorOfD
,
true
)
&&
Enemy
.
GetMonsters
().
Any
(
card
=>
card
.
HasSetcode
(
_Setcode
.
BlueEyes
));
if
(
attackHighestMonster
)
if
(
attackHighestMonster
)
{
{
...
@@ -437,16 +441,16 @@ namespace WindBot.Game.AI
...
@@ -437,16 +441,16 @@ namespace WindBot.Game.AI
if
(
Enemy
.
HasInSpellZone
(
_CardId
.
SpiralDischarge
,
true
)
&&
Enemy
.
HasInMonstersZone
(
_CardId
.
GaiaTheDragonChampion
)
&&
!
defender
.
IsCode
(
_CardId
.
GaiaTheDragonChampion
))
if
(
Enemy
.
HasInSpellZone
(
_CardId
.
SpiralDischarge
,
true
)
&&
Enemy
.
HasInMonstersZone
(
_CardId
.
GaiaTheDragonChampion
)
&&
!
defender
.
IsCode
(
_CardId
.
GaiaTheDragonChampion
))
return
false
;
return
false
;
if
(
Enemy
.
HasInSpellZone
(
_CardId
.
CrusadiaVanguard
,
true
)
&&
Enemy
.
GetMonsters
().
Any
(
card
=>
card
.
HasSetcode
(
_Setcode
.
Crusadia
)
&&
card
.
HasType
(
CardType
.
Link
))
&&
!
defender
.
HasType
(
CardType
.
Link
))
if
(
Enemy
.
HasInSpellZone
(
_CardId
.
CrusadiaVanguard
,
true
)
&&
Enemy
.
GetMonsters
().
Any
(
card
=>
card
.
HasSetcode
(
_Setcode
.
Crusadia
)
&&
card
.
HasType
(
CardType
.
Link
))
&&
!
defender
.
HasType
(
CardType
.
Link
))
return
false
;
return
false
;
if
(
defender
.
IsCode
(
_CardId
.
RescueACEHydrant
)
&&
!
defender
.
IsDisabled
()
&&
Enemy
.
GetMonsters
().
Any
(
monster
=>
monster
.
HasSetcode
(
_Setcode
.
RescueACE
)
&&
!
monster
.
IsCode
(
_CardId
.
RescueACEHydrant
)))
if
(
defender
.
IsCode
(
_CardId
.
RescueACEHydrant
)
&&
!
defender
.
IsDisabled
()
&&
Enemy
.
GetMonsters
().
Any
(
monster
=>
monster
.
HasSetcode
(
_Setcode
.
RescueACE
)
&&
!
monster
.
IsCode
(
_CardId
.
RescueACEHydrant
)))
return
false
;
return
false
;
if
(
Enemy
.
HasInSpellZone
(
_CardId
.
SilenforcingBarrier
,
true
)
&&
Enemy
.
HasInMonstersZone
(
_CardId
.
NovoxTheSilenforcerDisciple
,
faceUp
:
true
)
&&
!
defender
.
HasType
(
CardType
.
Ritual
))
if
(
Enemy
.
HasInSpellZone
(
_CardId
.
SilenforcingBarrier
,
true
)
&&
Enemy
.
HasInMonstersZone
(
_CardId
.
NovoxTheSilenforcerDisciple
,
faceUp
:
true
)
&&
!
defender
.
HasType
(
CardType
.
Ritual
))
return
false
;
return
false
;
return
true
;
return
true
;
}
}
...
@@ -540,7 +544,7 @@ namespace WindBot.Game.AI
...
@@ -540,7 +544,7 @@ namespace WindBot.Game.AI
extraDeck
[
shuffleCount
]
=
extraDeck
[
index
];
extraDeck
[
shuffleCount
]
=
extraDeck
[
index
];
extraDeck
[
index
]
=
tempCard
;
extraDeck
[
index
]
=
tempCard
;
}
}
return
Util
.
CheckSelectCount
(
extraDeck
,
cards
,
min
,
max
);
return
Util
.
CheckSelectCount
(
extraDeck
,
cards
,
min
,
max
);
}
}
...
@@ -1580,5 +1584,30 @@ namespace WindBot.Game.AI
...
@@ -1580,5 +1584,30 @@ namespace WindBot.Game.AI
return
crossoutDesignatorIdList
.
Contains
(
cardId
)
return
crossoutDesignatorIdList
.
Contains
(
cardId
)
||
(
calledbytheGraveIdCountMap
.
ContainsKey
(
cardId
)
&&
calledbytheGraveIdCountMap
[
cardId
]
>
0
);
||
(
calledbytheGraveIdCountMap
.
ContainsKey
(
cardId
)
&&
calledbytheGraveIdCountMap
[
cardId
]
>
0
);
}
}
protected
virtual
bool
DefaultSetForDiabellze
()
{
if
(
Card
==
null
)
return
false
;
if
(
Card
.
Id
==
_CardId
.
PotOfExtravagance
)
return
false
;
if
(
Enemy
.
HasInMonstersZone
(
_CardId
.
DiabellzeOfTheOriginalSin
,
true
,
faceUp
:
true
)
&&
Card
.
HasType
(
CardType
.
Spell
)
&&
!
Card
.
HasType
(
CardType
.
QuickPlay
))
{
if
(
Bot
.
SpellZone
.
Any
(
c
=>
c
!=
null
&&
Duel
.
MainPhase
.
ActivableCards
.
Contains
(
c
)
&&
c
.
HasType
(
CardType
.
Spell
)
&&
!
Card
.
HasType
(
CardType
.
QuickPlay
)
&&
c
.
IsFacedown
()))
{
return
false
;
}
foreach
(
CardExecutor
exec
in
Executors
)
{
if
(
exec
.
Type
==
ExecutorType
.
Activate
&&
exec
.
CardId
==
Card
.
Id
)
{
if
(
exec
.
Func
==
null
||
exec
.
Func
())
{
return
true
;
}
}
}
}
return
false
;
}
}
}
}
}
Game/AI/Dialogs.cs
View file @
78fff73f
...
@@ -36,6 +36,8 @@ namespace WindBot.Game.AI
...
@@ -36,6 +36,8 @@ namespace WindBot.Game.AI
[
DataMember
]
[
DataMember
]
public
string
[]
chaining
{
get
;
set
;
}
public
string
[]
chaining
{
get
;
set
;
}
[
DataMember
]
[
DataMember
]
public
string
[]
surrender
{
get
;
set
;
}
[
DataMember
]
public
string
[]
custom
{
get
;
set
;
}
public
string
[]
custom
{
get
;
set
;
}
}
}
public
class
Dialogs
public
class
Dialogs
...
@@ -55,6 +57,7 @@ namespace WindBot.Game.AI
...
@@ -55,6 +57,7 @@ namespace WindBot.Game.AI
private
string
[]
_summon
;
private
string
[]
_summon
;
private
string
[]
_setmonster
;
private
string
[]
_setmonster
;
private
string
[]
_chaining
;
private
string
[]
_chaining
;
private
string
[]
_surrender
;
private
string
[]
_custom
;
private
string
[]
_custom
;
public
Dialogs
(
GameClient
game
)
public
Dialogs
(
GameClient
game
)
...
@@ -78,6 +81,7 @@ namespace WindBot.Game.AI
...
@@ -78,6 +81,7 @@ namespace WindBot.Game.AI
_summon
=
data
.
summon
;
_summon
=
data
.
summon
;
_setmonster
=
data
.
setmonster
;
_setmonster
=
data
.
setmonster
;
_chaining
=
data
.
chaining
;
_chaining
=
data
.
chaining
;
_surrender
=
data
.
surrender
;
_custom
=
data
.
custom
;
_custom
=
data
.
custom
;
}
}
}
}
...
@@ -162,10 +166,17 @@ namespace WindBot.Game.AI
...
@@ -162,10 +166,17 @@ namespace WindBot.Game.AI
InternalSendMessage
(
_chaining
,
card
);
InternalSendMessage
(
_chaining
,
card
);
}
}
public
void
SendSurrender
()
{
InternalSendMessage
(
_surrender
);
}
private
void
InternalSendMessage
(
IList
<
string
>
array
,
params
object
[]
opts
)
private
void
InternalSendMessage
(
IList
<
string
>
array
,
params
object
[]
opts
)
{
{
if
(!
_game
.
_chat
)
if
(!
_game
.
_chat
)
return
;
return
;
if
(
array
==
null
||
array
.
Count
==
0
)
return
;
string
message
=
string
.
Format
(
array
[
Program
.
Rand
.
Next
(
array
.
Count
)],
opts
);
string
message
=
string
.
Format
(
array
[
Program
.
Rand
.
Next
(
array
.
Count
)],
opts
);
if
(
message
!=
""
)
if
(
message
!=
""
)
_game
.
Chat
(
message
);
_game
.
Chat
(
message
);
...
...
Game/AI/ExecutorType.cs
View file @
78fff73f
...
@@ -11,6 +11,7 @@
...
@@ -11,6 +11,7 @@
SummonOrSet
,
SummonOrSet
,
GoToBattlePhase
,
GoToBattlePhase
,
GoToMainPhase2
,
GoToMainPhase2
,
GoToEndPhase
GoToEndPhase
,
Surrender
}
}
}
}
\ No newline at end of file
Game/GameAI.cs
View file @
78fff73f
...
@@ -25,6 +25,18 @@ namespace WindBot.Game
...
@@ -25,6 +25,18 @@ namespace WindBot.Game
_activatedCards
=
new
Dictionary
<
int
,
int
>();
_activatedCards
=
new
Dictionary
<
int
,
int
>();
}
}
private
void
CheckSurrender
()
{
foreach
(
CardExecutor
exec
in
Executor
.
Executors
)
{
if
(
exec
.
Type
==
ExecutorType
.
Surrender
&&
exec
.
Func
())
{
_dialogs
.
SendSurrender
();
Game
.
Surrender
();
}
}
}
/// <summary>
/// <summary>
/// Called when the AI got the error message.
/// Called when the AI got the error message.
/// </summary>
/// </summary>
...
@@ -117,6 +129,7 @@ namespace WindBot.Game
...
@@ -117,6 +129,7 @@ namespace WindBot.Game
_dialogs
.
SendNewTurn
();
_dialogs
.
SendNewTurn
();
}
}
Executor
.
OnNewPhase
();
Executor
.
OnNewPhase
();
CheckSurrender
();
}
}
public
void
OnMove
(
ClientCard
card
,
int
previousControler
,
int
previousLocation
,
int
currentControler
,
int
currentLocation
)
public
void
OnMove
(
ClientCard
card
,
int
previousControler
,
int
previousLocation
,
int
currentControler
,
int
currentLocation
)
...
@@ -130,6 +143,7 @@ namespace WindBot.Game
...
@@ -130,6 +143,7 @@ namespace WindBot.Game
public
void
OnDirectAttack
(
ClientCard
card
)
public
void
OnDirectAttack
(
ClientCard
card
)
{
{
_dialogs
.
SendOnDirectAttack
(
card
.
Name
);
_dialogs
.
SendOnDirectAttack
(
card
.
Name
);
CheckSurrender
();
}
}
/// <summary>
/// <summary>
...
@@ -155,6 +169,7 @@ namespace WindBot.Game
...
@@ -155,6 +169,7 @@ namespace WindBot.Game
m_selector
.
Clear
();
m_selector
.
Clear
();
m_selector_pointer
=
-
1
;
m_selector_pointer
=
-
1
;
Executor
.
OnChainEnd
();
Executor
.
OnChainEnd
();
CheckSurrender
();
}
}
/// <summary>
/// <summary>
...
@@ -422,6 +437,7 @@ namespace WindBot.Game
...
@@ -422,6 +437,7 @@ namespace WindBot.Game
public
MainPhaseAction
OnSelectIdleCmd
(
MainPhase
main
)
public
MainPhaseAction
OnSelectIdleCmd
(
MainPhase
main
)
{
{
Executor
.
SetMain
(
main
);
Executor
.
SetMain
(
main
);
CheckSurrender
();
foreach
(
CardExecutor
exec
in
Executor
.
Executors
)
foreach
(
CardExecutor
exec
in
Executor
.
Executors
)
{
{
if
(
exec
.
Type
==
ExecutorType
.
GoToEndPhase
&&
main
.
CanEndPhase
&&
exec
.
Func
())
// check if should enter end phase directly
if
(
exec
.
Type
==
ExecutorType
.
GoToEndPhase
&&
main
.
CanEndPhase
&&
exec
.
Func
())
// check if should enter end phase directly
...
...
Game/GameClient.cs
View file @
78fff73f
...
@@ -90,6 +90,11 @@ namespace WindBot.Game
...
@@ -90,6 +90,11 @@ namespace WindBot.Game
Connection
.
Send
(
chat
);
Connection
.
Send
(
chat
);
}
}
public
void
Surrender
()
{
Connection
.
Send
(
CtosMessage
.
Surrender
);
}
private
void
OnPacketReceived
(
BinaryReader
reader
)
private
void
OnPacketReceived
(
BinaryReader
reader
)
{
{
_behavior
.
OnPacket
(
reader
);
_behavior
.
OnPacket
(
reader
);
...
...
sqlite3.dll
View file @
78fff73f
No preview for this file type
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