Commit c5b7633f authored by nanahira's avatar nanahira

Merge branch 'master' into tricky

parents ed0dbcac 37e88fe3
Pipeline #38294 passed with stage
in 1 minute and 20 seconds
name: Automated Test Build
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
jobs:
build:
runs-on: windows-2022
env:
Solution_Name: WindBot.sln
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup MSBuild.exe
uses: microsoft/setup-msbuild@v2
- name: Build!
run: msbuild $env:Solution_Name /t:Build /p:Configuration=Release
- name: Pack
run: |
mkdir dist
xcopy /e /y bin\Release dist\WindBot\
xcopy /y BotWrapper\bin\Release\bot.conf dist\
xcopy /y BotWrapper\bin\Release\bot.exe dist\
cd dist
7z a WindBot.7z *
cd ..
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
path: dist\WindBot.7z
- name: GitHub Release
if: github.event_name == 'push'
uses: marvinpinto/action-automatic-releases@latest
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "latest"
prerelease: false
title: "Development Build"
files: |
dist/WindBot.7z
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<configuration> <configuration>
<startup> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup> </startup>
</configuration> </configuration>
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{0665CA3B-C14F-40EC-ABFB-AD46A695F5A3}</ProjectGuid> <ProjectGuid>{0665CA3B-C14F-40EC-ABFB-AD46A695F5A3}</ProjectGuid>
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>BotWrapper</RootNamespace> <RootNamespace>BotWrapper</RootNamespace>
<AssemblyName>Bot</AssemblyName> <AssemblyName>Bot</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<TargetFrameworkProfile /> <TargetFrameworkProfile />
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86'"> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86'">
<PlatformTarget>x86</PlatformTarget> <PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType> <DebugType>full</DebugType>
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath> <OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants> <DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
</PropertyGroup> <Prefer32Bit>false</Prefer32Bit>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86'"> </PropertyGroup>
<PlatformTarget>x86</PlatformTarget> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86'">
<DebugType>pdbonly</DebugType> <PlatformTarget>x86</PlatformTarget>
<Optimize>true</Optimize> <DebugType>pdbonly</DebugType>
<OutputPath>bin\Release\</OutputPath> <Optimize>true</Optimize>
<DefineConstants>TRACE</DefineConstants> <OutputPath>bin\Release\</OutputPath>
<ErrorReport>prompt</ErrorReport> <DefineConstants>TRACE</DefineConstants>
<WarningLevel>4</WarningLevel> <ErrorReport>prompt</ErrorReport>
</PropertyGroup> <WarningLevel>4</WarningLevel>
<PropertyGroup> <Prefer32Bit>false</Prefer32Bit>
<StartupObject>BotWrapper.BotWrapper</StartupObject> </PropertyGroup>
</PropertyGroup> <PropertyGroup>
<PropertyGroup> <StartupObject>BotWrapper.BotWrapper</StartupObject>
<ApplicationIcon>WindBot.ico</ApplicationIcon> </PropertyGroup>
</PropertyGroup> <PropertyGroup>
<ItemGroup> <ApplicationIcon>WindBot.ico</ApplicationIcon>
<Reference Include="System" /> </PropertyGroup>
<Reference Include="System.Data" /> <ItemGroup>
<Reference Include="System.Xml" /> <Reference Include="System" />
</ItemGroup> <Reference Include="System.Data" />
<ItemGroup> <Reference Include="System.Xml" />
<Compile Include="BotWrapper.cs" /> </ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" /> <ItemGroup>
</ItemGroup> <Compile Include="BotWrapper.cs" />
<ItemGroup> <Compile Include="Properties\AssemblyInfo.cs" />
<None Include="app.config" /> </ItemGroup>
<None Include="bot.conf"> <ItemGroup>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <None Include="app.config" />
</None> <None Include="bot.conf">
</ItemGroup> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ItemGroup> </None>
<Content Include="WindBot.ico" /> </ItemGroup>
</ItemGroup> <ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Content Include="WindBot.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild"> <Target Name="BeforeBuild">
</Target> </Target>
<Target Name="AfterBuild"> <Target Name="AfterBuild">
</Target> </Target>
--> -->
</Project> </Project>
\ No newline at end of file
...@@ -10,7 +10,7 @@ using System.Runtime.InteropServices; ...@@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("IceYGO")] [assembly: AssemblyCompany("IceYGO")]
[assembly: AssemblyProduct("WindBot")] [assembly: AssemblyProduct("WindBot")]
[assembly: AssemblyCopyright("Copyright © IceYGO 2017")] [assembly: AssemblyCopyright("Copyright © IceYGO 2015-2025")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<configuration> <configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup></configuration>
This diff is collapsed.
This diff is collapsed.
#created by ...
#main
32731036
25451383
60242223
62962630
62962630
62962630
68468459
68468459
45484331
45883110
95515789
19096726
14558127
14558127
14558127
23434538
23434538
23434538
36577931
1984618
1984618
6498706
6498706
34995106
44362883
75500286
81439173
24224830
24224830
29948294
36637374
65681983
82738008
18973184
10045474
10045474
10045474
19271881
32756828
17751597
#extra
11321089
38811586
44146295
44146295
92892239
70534340
3410461
24915933
72272462
1906812
41373230
51409648
87746184
87746184
53971455
!side
56787189
55273561
68468460
72554664
95515790
\ No newline at end of file
#created by ...
#main
51522296
51522296
62849088
69680031
69680031
95679145
72270339
60303688
60303688
60303688
14558127
14558127
14558127
23434538
23434538
23434538
10158145
10158145
10158145
1984618
1984618
1984618
31002402
60921537
16240772
24224830
24224830
65681983
80845034
80845034
80845034
35569555
35569555
35569555
10045474
10045474
10045474
82956214
82956214
82956214
#extra
24915933
41373230
11765832
11765832
80532587
80532587
80532587
53971455
53971455
74586817
79606837
93039339
2220237
24842059
60303245
!side
\ No newline at end of file
#created by ...
#main
37343995
37343995
37343995
16889337
16889337
16889337
16474916
16474916
16474916
67972302
67972302
67972302
79858629
79858629
43863925
43863925
43863925
5352328
5352328
14558127
14558127
14558127
23434538
23434538
23434538
84211599
84211599
4408198
24224830
24224830
77913594
77913594
77913594
197042
197042
10045474
10045474
77891946
77891946
77891946
#extra
90448279
59242457
59242457
9272381
42741437
42741437
42741437
78135071
78135071
41524885
41524885
46772449
5530780
58858807
8728498
!side
74689476
#created by ...
#main
27204311
68304193
68304193
68304193
32909498
32909498
32909498
4928565
78534861
78534861
91800273
91800273
72090076
31149212
31149212
31149212
14558127
14558127
14558127
23434538
23434538
31480215
34447918
34447918
34447918
73628505
84211599
84211599
24224830
24224830
65681983
69540484
69540484
69540484
71832012
71832012
71832012
10045474
10045474
33925864
#extra
15291624
27548199
21915012
48626373
48626373
95474755
95474755
95474755
10389142
73542331
73542331
21887175
44097050
22423493
65741786
!side
#created by ...
#main
81497285
81497285
2347656
41165831
73602965
73602965
75730490
1225009
1225009
1225009
37629703
37629703
37629703
14558127
14558127
14558127
23434538
23434538
23434538
74018812
74018812
74018812
2511
2511
2511
49238328
49238328
5380979
5380979
6351147
6351147
10045474
10045474
10045474
30748475
53417695
83326048
92714517
92714517
92714517
#extra
22850702
22850702
93039339
93039339
29479265
93084621
93084621
24269961
24269961
24269961
67680512
67680512
29301450
71607202
94259633
!side
#created by ... #created by ...
#main #main
39552864 60606759
39552864 60606759
39552864 22499463
22499463
15734813
15734813
15734813
27126980
27126980
27126980
18106132
18106132
18106132
72717433
72717433
72717433
44430454
60246171
60246171
60246171
36211150
11012154
11012154
11012154
20129614
20129614
20129614
95511642
95511642
95511642
12482652 12482652
12482652 12482652
12482652 12482652
...@@ -12,33 +39,26 @@ ...@@ -12,33 +39,26 @@
79335209 79335209
79335209 79335209
79335209 79335209
487395
487395
487395
99171160
99171160
99171160
53776525
53776525
53776525
32274490
32274490
32274490
27288416
27288416
27288416
80825553 80825553
80825553
80825553
7902349
8124921
44519536
70903634
69380702
69380702
69380702 69380702
13179332
13179332
21615956
21615956
86498013
86498013
24154052
24154052
57308711
57308711
3557275 3557275
3557275 3557275
3557275 3557275
27520594
27520594
27520594
27125110
27125110
27125110
#extra #extra
!side !side
#created by ... #created by ...
#main #main
5464695 59546797
5464695 17257342
5464695 85802526
39256679 85802526
39256679 85802526
39256679 71015787
11549357 71015787
11549357 54098121
11549357 54098121
99785935 54098121
99785935 31281980
99785935 31281980
91152256 31281980
91152256 64306248
91152256 64306248
76812113 64306248
76812113 13313278
76812113 13313278
85639257 86209650
85639257 86209650
85639257 54959865
74093656 54959865
74093656 54959865
74093656 81383947
68505803 81383947
68505803 81383947
68505803 22567609
27288416 22567609
27288416 22567609
27288416 85457355
19384334 85457355
22702055 87102774
23424603 87102774
35956022 87102774
45778932 11868825
50913601 11868825
56594520 11868825
82999629 20871001
86318356 20871001
87430998 20871001
38199696
38199696
38199696
47852925
47852925
47852925
58074572
58074572
58074572
66719324
66719324
84257639
84257639
84257639
12021072
12021072
51481927
51481927
94317736
94317736
#extra #extra
45815891 70780151
45815891 45379225
45815891 12954226
71594310 25862681
71594310 25862681
71594310 25862681
67598234 8690387
67598234 43385557
67598234 43385557
43385557
16259549
16259549
16259549
89642993
89642993
!side !side
#created by ...
#main
6631034
6631034
6631034
43096270
43096270
43096270
69247929
69247929
69247929
77542832
77542832
77542832
11091375
11091375
11091375
35052053
35052053
35052053
49881766
83104731
83104731
30190809
30190809
26412047
26412047
26412047
43422537
43422537
43422537
53129443
66788016
66788016
66788016
72302403
72302403
44095762
44095762
44095762
70342110
70342110
#extra
!side
#created by ...
#main
8633261
8633261
8633261
35844557
35844557
35844557
72238166
34022970
34022970
34022970
42141493
42141493
84192580
87126721
14558127
14558127
14558127
59438930
59438930
23434538
23434538
94145021
97268402
97268402
97268402
7477101
7477101
7477101
25311006
35261759
35261759
85106525
24224830
24224830
60394026
65681983
6798031
10045474
10045474
10045474
#extra
9940036
34909328
34909328
2061963
7511613
7511613
45852939
45852939
6983839
90590303
46772449
16643334
21044178
66011101
8728498
!side
20292186
34267821
34267821
34267821
67173574
18144507
19613556
35269904
15693423
83326048
83326048
83326048
41420027
41420027
41420027
#created by ...
#main
83334932
83334932
83334932
82112494
82112494
82112494
19510093
19510093
34496660
34496660
34496660
90361010
90361010
90361010
78391364
78391364
56727340
56727340
14624296
95500396
10604644
23434538
23434538
23434538
14558127
14558127
14558127
49036338
38814750
38814750
97268402
97268402
73642296
73642296
59438930
59438930
59438930
94145021
94145021
94145021
#extra
64193046
84815190
30983281
44508094
27548199
76471944
74586817
28912357
38342335
27381364
22423493
65741786
33918636
33918636
33918636
!side
#created by ...
#main
27204311
87052196
87052196
23431858
93490856
93490856
93490856
56495147
56495147
56495147
20001443
20001443
20001443
55273560
55273560
55273560
14558127
14558127
14558127
23434538
23434538
23434538
97268402
97268402
97268402
98159737
35261759
35261759
56465981
56465981
56465981
93850690
24224830
24224830
65681983
10045474
10045474
10045474
14821890
14821890
#extra
42632209
60465049
96633955
84815190
47710198
9464441
5041348
69248256
69248256
83755611
43202238
78917791
32519092
32519092
32519092
!side
#created by ...
#main
3717252
77723643
572850
572850
572850
73956664
73956664
25926710
25926710
25926710
99937011
99937011
99937011
62320425
62320425
62320425
63542003
63542003
97518132
37961969
37961969
37961969
74078255
74078255
74078255
92919429
92919429
92919429
17266660
17266660
17266660
21074344
21074344
21074344
40177746
6767771
77103950
77103950
74920585
74920585
#extra
28226490
84330567
69946549
92731385
92731385
94977269
80532587
84815190
33158448
21044178
98127546
21887175
38342335
27381364
65741786
!side
#created by ...
#main
5206415
32731036
32731036
90488465
6637331
6637331
33854624
33854624
29596581
29596581
83107873
83107873
31786629
31786629
31786629
56713174
56713174
56713174
61901281
61901281
99234526
99234526
92998610
92998610
44586426
44586426
44586426
14558127
14558127
23434538
23434538
23434538
76218313
20318029
20318029
20318029
1475311
1475311
1475311
75500286
95238394
95238394
99266988
99266988
99266988
24224830
24224830
34090915
10045474
10045474
#extra
41685633
41685633
15291624
21044178
98127546
21887175
86066372
4280258
38342335
83152482
65741786
50277355
70369116
73539069
41999284
!side
#created by ...
#main
49036338
29432356
29432356
29432356
3611830
76794549
5560911
96227613
96227613
27354732
58990362
58990362
58990362
20773176
22617205
69610326
14785765
95401059
31314549
96223501
52159691
21495657
21495657
57777714
92559258
92559258
92559258
38814750
38814750
38814750
72291078
23434538
23434538
23434538
94693857
9742784
19580308
11609969
61488417
2295440
23581825
38943357
38943357
38943357
41620959
41620959
41620959
73628505
74580251
74580251
74580251
81439173
24224830
24224830
46372010
32354768
32354768
32354768
35561352
57831349
#extra
27548199
74586817
80696379
33158448
65536818
79606837
88581108
96157835
73347079
74997493
44097050
24094258
50588353
36429703
41999284
!side
{
"welcome": [
"你好呀,打牌人",
"你好,欢迎和我耍牌"
],
"deckerror": [
"抱歉,我的卡组需要{0}才可以耍"
],
"duelstart": [
"嘿嘿,我要用二哥打爆你。",
"我的卡组不屁股,也就塞了几张禁卡捏",
"我只会耍简单的卡组,不要用禁卡和我打拉"
],
"newturn": [
"到我喽,抽卡!(裤裆偷偷掏出)",
"我抽一张卡"
],
"endturn": [
"我耍完了,到你了",
"到你回合了哦,不会是多线程决斗吧?"
],
"directattack": [
"{0},攻击对手!",
"{0},撞烂它!",
"{0},小拳揍它!"
],
"attack": [
"{0},把{1}打倒!",
"嘿嘿,{0},攻击{1}!"
],
"ondirectattack": [
"啊,不要打我,我放禁卡给你玩",
"呀,太强辣,可以带带我嘛",
"好痛...想拔电源"
],
"facedownmonstername": "怪兽",
"activate": [
"嘿嘿,我发动{0}",
"嘎嘎,我使用{0}的力量"
],
"summon": [
"我召唤(掏出){0}!",
"出来,我的小怪兽{0}!"
],
"setmonster": [
"我放置一只不知名怪兽。"
],
"chaining": [
"嘿,我能用禁卡气不气?",
"乎,我发动{0}!",
"不好意思拉,我有{0}",
"哈哈,发动{0}的效果!"
],
"custom": [
"呱!本体出征!",
"凸(艹皿艹 )卡手不玩拉!!!",
"嘿不慌,还有摆子场( ̄y▽ ̄)╭"
]
}
...@@ -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
{
"welcome": [
"这里就是大灵峰吗?",
"这里是教导龙国。",
"这里是开放的大地。"
],
"deckerror": [
"{0}被冰水咒缚了!"
],
"duelstart": [
"走了好久,肚子饿了……",
"前方会遇到怎样的同伴呢?",
"有阿不思在一起的话……"
],
"newturn": [
"我的回合!"
],
"endturn": [
"姐姐到底在哪里……",
"阿不思的干粮也吃完了啊。",
"什么时候开饭呢?"
],
"directattack": [
"{0},直接攻击!",
"开饭!"
],
"attack": [
"用{0}攻击{1}!"
],
"ondirectattack": [
"好饿……",
"呜呜……",
"姐姐……"
],
"facedownmonstername": "怪兽",
"activate": [
"发动{0}的效果!"
],
"summon": [
"{0}召唤!",
"出来吧,{0}!"
],
"setmonster": [
"……"
],
"chaining": [
"发动{0}的效果!",
"{0}!"
]
}
...@@ -55,5 +55,10 @@ ...@@ -55,5 +55,10 @@
"但我鸽了", "但我鸽了",
"无此服务", "无此服务",
"可怕" "可怕"
],
"surrender": [
"太可怕了(跑路",
"这游戏好难玩(跑路",
"还好我不玩游戏王(跑路"
] ]
} }
{
"welcome": [
"是宵夜哒哟!",
"什么灵摆卡组都会玩的哟!",
"什么?你说超重不是灵摆卡组?"
],
"deckerror": [
"{0}的数量不对!快去改成无禁限模式!。"
],
"duelstart": [
"给你展现一下超重的魅力!"
],
"newturn": [
"抽卡!弁庆你别上手救我了!",
"抽卡!P身子你别上手救我了!"
],
"endturn": [
"哼哼,到你的回合了!",
"喜不喜欢我的展开呢?"
],
"directattack": [
"我用{0}直接攻击!"
],
"attack": [
"我用{0}攻击{1}!"
],
"ondirectattack": [
"不许打!不许打呀!",
"呜哇!要被打倒惹~"
],
"facedownmonstername": "怪兽",
"activate": [
"呼呼呼,{0}的效果太厉害了!",
"呼呼呼,我使用{0}的效果。"
],
"summon": [
"呼呼呼,我召唤{0}!"
],
"setmonster": [
"呼呼呼,我盖放了一只怪兽。"
],
"chaining": [
"此刻!{0}的效果发动!"
]
}
...@@ -46,5 +46,8 @@ ...@@ -46,5 +46,8 @@
"chaining": [ "chaining": [
"千防万防防不住{0}。", "千防万防防不住{0}。",
"简单,看我见招拆招。" "简单,看我见招拆招。"
],
"surrender": [
"啊?!我居然……?!"
] ]
} }
\ No newline at end of file
...@@ -48,5 +48,8 @@ ...@@ -48,5 +48,8 @@
"chaining": [ "chaining": [
"啊!这下死定了!我发动{0}!", "啊!这下死定了!我发动{0}!",
"太贸然了,难道你没意识到{0}的存在吗?" "太贸然了,难道你没意识到{0}的存在吗?"
],
"surrender": [
"这次只不过是你运气太好了而已!"
] ]
} }
\ No newline at end of file
{
"welcome": [
"你运气不太好呢。"
],
"deckerror": [
"哎呀,{0}现在不在吗?"
],
"duelstart": [
"可……爱?别开玩笑了。",
"之后的计划……算了,管他呢。"
],
"newturn": [
"不要放松警惕。"
],
"endturn": [
"嗯……",
"……开了个好头呢。"
],
"directattack": [
"觉悟吧。",
"就这么简单。",
"你惹错人了。"
],
"attack": [
"重新振作,出发吧,{0}。",
"{0},目标变更。",
"希望一切顺利。"
],
"ondirectattack": [
"混蛋……",
"就这点本事?",
"嘁……"
],
"facedownmonstername": "怪兽",
"activate": [
"要是能灵验就好了。",
"不知道,{0}能不能回应期待。"
],
"summon": [
"连这种事都要{0}干……",
"该{0}出场了……?明白了。",
"这样准备就OK了。"
],
"setmonster": [
"没办法……"
],
"chaining": [
"利用这个机会。",
"这应该会改变战局。"
],
"surrender": [
"给我记住了。"
]
}
\ No newline at end of file
{
"welcome": [
"你想干嘛?"
],
"deckerror": [
"该碎觉了。"
],
"duelstart": [
"too hot need ice cream"
],
"newturn": [
""
],
"endturn": [
""
],
"directattack": [
""
],
"attack": [
""
],
"ondirectattack": [
""
],
"facedownmonstername": "怪兽",
"activate": [
""
],
"summon": [
""
],
"setmonster": [
""
],
"chaining": [
""
],
"surrender": [
""
]
}
{
"welcome": [
"嗯?又有谁上门拜访了吗?"
],
"deckerror": [
"我不知道什么疯狂星期四,但请你V我{0}。"
],
"duelstart": [
"别说我好话啊,我不吃这一套。"
],
"newturn": [
"Power Recover!",
"魔力恢复!"
],
"endturn": [
"容我先去看下天气如何……",
"醒醒,该你了。"
],
"directattack": [
"{0},安心去吧!",
"人类的力量已经无法阻止{0}了!",
"吃我一记天猫流星锤!"
],
"attack": [
"我觉得可以让{0}给{1}来一拳。",
"{0}去推倒那个{1}!",
"你瞧瞧{1}那个作死的样子。"
],
"ondirectattack": [
"我的妈耶!",
"这就是{0}的不自然之处吗……"
],
"facedownmonstername": "怪兽",
"activate": [
"{0}是解决问题的不错方法。",
"{0}的效果发动!"
],
"summon": [
"你看这{0},白白净净的,跟兔子似的。",
"啊……{0},来帮我一下。"
],
"setmonster": [
"啧……",
"关键时刻卡手……"
],
"chaining": [
"来点{0}不好吗?",
"到底是有多不小心才会忘了{0}……"
],
"surrender": [
"啊这…………"
]
}
...@@ -48,5 +48,8 @@ ...@@ -48,5 +48,8 @@
"{0}一言,驷马难追!", "{0}一言,驷马难追!",
"中国电信新出的{0}真的太快了!", "中国电信新出的{0}真的太快了!",
"快人一步!" "快人一步!"
],
"surrender": [
"该说是我老了吗……"
] ]
} }
\ No newline at end of file
...@@ -49,5 +49,8 @@ ...@@ -49,5 +49,8 @@
"不够硬的家伙!还没有{0}来得硬呢!", "不够硬的家伙!还没有{0}来得硬呢!",
"气氛的最高潮!{0}!芜湖!", "气氛的最高潮!{0}!芜湖!",
"{0}起飞啦!" "{0}起飞啦!"
],
"surrender": [
"哇啊……去了啦……"
] ]
} }
\ No newline at end of file
...@@ -46,5 +46,8 @@ ...@@ -46,5 +46,8 @@
"啊啊啊啊我要用{0}!", "啊啊啊啊我要用{0}!",
"等一下等一下先让我用{0}!", "等一下等一下先让我用{0}!",
"趁现在先把{0}用了再说!" "趁现在先把{0}用了再说!"
],
"surrender": [
"……这次算你运气好!!"
] ]
} }
\ No newline at end of file
...@@ -48,5 +48,8 @@ ...@@ -48,5 +48,8 @@
"chaining": [ "chaining": [
"这时候发动{0}看看?", "这时候发动{0}看看?",
"不知道{0}这时候能不能起作用,试试吧。" "不知道{0}这时候能不能起作用,试试吧。"
],
"surrender": [
"哇啊,没了……"
] ]
} }
\ No newline at end of file
...@@ -44,5 +44,8 @@ ...@@ -44,5 +44,8 @@
"chaining": [ "chaining": [
"等一下!先让我把{0}用了!", "等一下!先让我把{0}用了!",
"在此之前先让我用了{0}再说!" "在此之前先让我用了{0}再说!"
],
"surrender": [
"魔力不足的原因吗……"
] ]
} }
\ No newline at end of file
...@@ -42,5 +42,8 @@ ...@@ -42,5 +42,8 @@
"chaining": [ "chaining": [
"别急,先让我把{0}发动了再说。", "别急,先让我把{0}发动了再说。",
"这是发动{0}的绝佳机会。" "这是发动{0}的绝佳机会。"
],
"surrender": [
"头有点晕……"
] ]
} }
\ No newline at end of file
...@@ -47,5 +47,8 @@ ...@@ -47,5 +47,8 @@
"总之趁现在先把{0}用了就对了。", "总之趁现在先把{0}用了就对了。",
"说得好,我发动{0}。", "说得好,我发动{0}。",
"不知道{0}这时候能不能起作用,试试吧。" "不知道{0}这时候能不能起作用,试试吧。"
],
"surrender": [
"啊,我的薯条!!"
] ]
} }
\ No newline at end of file
{
"welcome": [
"木村殿下到家了吗?"
],
"deckerror": [
"谁把我的{0}丢到有害垃圾桶里了!"
],
"duelstart": [
"啊……你看起来很弱呢,不要紧吧?"
],
"newturn": [
"Qiu牌。"
],
"endturn": [
"不必软弱,毕竟笨蛋是轻松的。"
],
"directattack": [
"哎呀,这下可丢脸了呢……",
"暴力禁止!"
],
"attack": [
"{0}!虐杀{1}吧!",
"{0}的大鸟可是很锐利的哟!"
],
"ondirectattack": [
"最讨厌{0}了!",
"我还是处女啊!"
],
"facedownmonstername": "怪兽",
"activate": [
"当心哟!",
"这是爱的{0}哟!"
],
"summon": [
"{0}来咯!",
"我就不信了!{0}!"
],
"setmonster": [
"摸了。"
],
"chaining": [
"啊,不小心认真了呢。",
"拼手速我怎么会输。"
],
"surrender": [
"所以你想干嘛?!"
]
}
...@@ -42,5 +42,8 @@ ...@@ -42,5 +42,8 @@
"chaining": [ "chaining": [
"等一下!先让我把{0}用了喵!", "等一下!先让我把{0}用了喵!",
"在此之前先让我用了{0}再说喵!" "在此之前先让我用了{0}再说喵!"
],
"surrender": [
"喵……"
] ]
} }
\ No newline at end of file
...@@ -51,5 +51,8 @@ ...@@ -51,5 +51,8 @@
"啊!这情况我熟!用{0}就对了。", "啊!这情况我熟!用{0}就对了。",
"凡事总讲究先下手为强,这也不例外。", "凡事总讲究先下手为强,这也不例外。",
"啧……注意下{0}啊……" "啧……注意下{0}啊……"
],
"surrender": [
"呜啊……"
] ]
} }
\ No newline at end of file
{
"welcome": [
"唔……想吃布丁nano……"
],
"deckerror": [
"{0}被一月前辈偷走了nano!"
],
"duelstart": [
"走了好久,肚子饿了nano……",
"你看起来很弱啊nano……",
"有一花前辈在一起的话nano……"
],
"newturn": [
"到我了nano!"
],
"endturn": [
"想喝饮料了nano。",
"布丁吃完了nano。",
"什么时候开店nano?"
],
"directattack": [
"{0},直接攻击nano!",
"把我的布丁还给我nano!"
],
"attack": [
"用{0}攻击{1}nano!",
"可恶的{1},把我的布丁还给我nano!"
],
"ondirectattack": [
"好饿nano……",
],
"facedownmonstername": "怪兽",
"activate": [
"发动{0}的效果nano!"
],
"summon": [
"{0}nano!"
],
"setmonster": [
"nano……"
],
"chaining": [
"发动{0}的效果nano!",
"{0}nano!"
],
"surrender": [
"nano……"
]
}
...@@ -47,5 +47,8 @@ ...@@ -47,5 +47,8 @@
"发动{0}的效果进行连锁。", "发动{0}的效果进行连锁。",
"在你做那件事之前我先发动{0}!", "在你做那件事之前我先发动{0}!",
"17张牌你能秒我?!" "17张牌你能秒我?!"
],
"surrender": [
"(思考怎么吃电脑屏幕中)"
] ]
} }
\ No newline at end of file
...@@ -49,5 +49,8 @@ ...@@ -49,5 +49,8 @@
"急什么啊?", "急什么啊?",
"小老弟对{0}这么毫无防备的吗?", "小老弟对{0}这么毫无防备的吗?",
"这是发动{0}的超稀有机会。" "这是发动{0}的超稀有机会。"
],
"surrender": [
"(气晕)"
] ]
} }
\ No newline at end of file
...@@ -42,5 +42,8 @@ ...@@ -42,5 +42,8 @@
"chaining": [ "chaining": [
"啊啊啊啊我要用{0}!", "啊啊啊啊我要用{0}!",
"连{0}都不注意就你妈离谱。" "连{0}都不注意就你妈离谱。"
],
"surrender": [
"(优美的紫雨岛话)"
] ]
} }
\ No newline at end of file
...@@ -48,5 +48,8 @@ ...@@ -48,5 +48,8 @@
"chaining": [ "chaining": [
"要不是有{0},我都快齁死了。", "要不是有{0},我都快齁死了。",
"连{0}都不注意就你奶奶的离谱。" "连{0}都不注意就你奶奶的离谱。"
],
"surrender": [
"(超高速敲桌子中)"
] ]
} }
\ No newline at end of file
...@@ -50,5 +50,8 @@ ...@@ -50,5 +50,8 @@
"这个时候就该使出{0}!", "这个时候就该使出{0}!",
"没想到吧!我有{0}!我还藏了一手呢!", "没想到吧!我有{0}!我还藏了一手呢!",
"{0} YES!" "{0} YES!"
],
"surrender": [
"行吧行吧,给你一张礼品卡。"
] ]
} }
\ No newline at end of file
...@@ -48,5 +48,8 @@ ...@@ -48,5 +48,8 @@
"不够快!{0}!", "不够快!{0}!",
"不错的战术,但我有{0}!", "不错的战术,但我有{0}!",
"忘记了{0}了吗?" "忘记了{0}了吗?"
],
"surrender": [
"(散架)"
] ]
} }
\ No newline at end of file
{
"welcome": [
"嘶……似乎来了个极其麻烦的家伙啊……"
],
"deckerror": [
"艾蕾娜?{0}的库存看看是不是空了?"
],
"duelstart": [
"今天不是你付钱就是我没货。",
"从前有座山,山里有座庙,庙里有个老和尚……"
],
"newturn": [
"纯度太低了。",
"你这肥猪。"
],
"endturn": [
"撒,细数你的王牌吧!",
"开始你的行动吧,我无所谓!"
],
"directattack": [
"{0},再斩一刀!",
"我不想说的太失礼,你还是放弃吧。",
"你也不瞧瞧你那AC样……"
],
"attack": [
"你的{1}太软了。",
"暑期促销买{1}送{0}是吧……",
"如此{1},万不可长,必须制止。"
],
"ondirectattack": [
"必可活用于下一次……",
"这杀马特的{0}……",
"……没有爆衣可以看的!"
],
"facedownmonstername": "怪兽",
"activate": [
"{0},我的超人……",
"至福……",
"十八般武艺,此乃{0}。"
],
"summon": [
"这是便宜{0}。",
"{0}很大,你忍一下。",
"说得好,{0},谢谢。"
],
"setmonster": [
"法克。"
],
"chaining": [
"小老弟,根本不可能。",
"如果你非要做如此蠢事,就别用这种脑瘫办法。",
"本来想拒绝,但{0}实在是太强力了。"
],
"surrender": [
"(扶额)"
]
}
\ No newline at end of file
...@@ -50,5 +50,8 @@ ...@@ -50,5 +50,8 @@
"别急,先让我把{0}发动了再说。", "别急,先让我把{0}发动了再说。",
"此时不用{0}更待何时?", "此时不用{0}更待何时?",
"这是发动{0}的绝佳机会。" "这是发动{0}的绝佳机会。"
],
"surrender": [
"(记小本本中)"
] ]
} }
\ No newline at end of file
...@@ -47,5 +47,8 @@ ...@@ -47,5 +47,8 @@
"留一手也是必要的,尝尝这个{0}。", "留一手也是必要的,尝尝这个{0}。",
"机不可失,发动{0}。", "机不可失,发动{0}。",
"这是发动{0}的最佳机会。" "这是发动{0}的最佳机会。"
],
"surrender": [
"或许我真老了吧……"
] ]
} }
\ No newline at end of file
{
"welcome": [
"你好呀,不许摸尾巴哦。"
],
"deckerror": [
"总感觉少了点什么……"
],
"duelstart": [
"绝不让你欺负弱小!"
],
"newturn": [
"抽牌。"
],
"endturn": [
"到你回合了哦,不会空过吧?"
],
"directattack": [
"{0},攻击对手!",
"小拳拳捶你胸口!"
],
"attack": [
"{0},把{1}打倒!",
"{0},攻击{1}!"
],
"ondirectattack": [
"变态!",
"都说了不许碰尾巴了!"
],
"facedownmonstername": "怪兽",
"activate": [
"发动{0}。",
"使用{0}。"
],
"summon": [
"出来吧,{0}!",
"出现吧,{0}!",
"给我出来,{0}!"
],
"setmonster": [
"呀呀。"
],
"chaining": [
"看看这个{0}吧!",
"果然还是太拉了。"
],
"surrender": [
"呜啊!(被摸尾巴)"
]
}
...@@ -49,5 +49,8 @@ ...@@ -49,5 +49,8 @@
"我原以为你会注意到{0},是我高估你了。", "我原以为你会注意到{0},是我高估你了。",
"不错的想法,但在{0}面前还是欠缺。", "不错的想法,但在{0}面前还是欠缺。",
"Splash Sword!" "Splash Sword!"
],
"surrender": [
"这下没法跟八宫一月交代了……"
] ]
} }
\ No newline at end of file
{
"welcome": [
"呀嘞呀嘞,不来娱乐一把吗?"
],
"deckerror": [
"没有{0}就很不娱乐。"
],
"duelstart": [
"娱乐而已,顶多把你打残罢了。",
"娱乐时间到了!"
],
"newturn": [
"抽牌啦。"
],
"endturn": [
"点到为止。",
"回合结束。"
],
"directattack": [
"{0},直接攻击对手!",
"上吧,{0}!",
"怎么样!"
],
"attack": [
"{1}是不是没见识过{0}?",
"{1}是奈何不了{0}的,放弃吧。",
"总之{0}先给{1}来一刀就对了。"
],
"ondirectattack": [
"不是说好只娱乐的吗?",
"……我可没有害怕!",
"不过是{0}而已!"
],
"facedownmonstername": "怪兽",
"activate": [
"现在应该使用{0}的效果。",
"总之把{0}的效果用了就对了。"
],
"summon": [
"{0}不会临阵脱逃。",
"来吧,{0},展示你自己!"
],
"setmonster": [
"猜对了这是啥请你一碗孟婆汤。"
],
"chaining": [
"娱乐精神就是这时候该用{0}。",
"我原以为你会注意到{0},不过这也正常。",
"不错的想法,但在{0}面前还是欠缺。"
],
"surrender": [
"这也太不娱乐了吧!!!"
]
}
...@@ -48,5 +48,8 @@ ...@@ -48,5 +48,8 @@
"太慢了,还是{0}更胜一筹。", "太慢了,还是{0}更胜一筹。",
"看样子你忘了我的{0}!", "看样子你忘了我的{0}!",
"小心驶得万年船,记住咯!" "小心驶得万年船,记住咯!"
],
"surrender": [
"啊……"
] ]
} }
\ No newline at end of file
...@@ -50,5 +50,8 @@ ...@@ -50,5 +50,8 @@
"等一下等一下先让我用{0}!", "等一下等一下先让我用{0}!",
"总之趁没什么防备先把{0}用了……", "总之趁没什么防备先把{0}用了……",
"趁现在先把{0}用了再说吧……" "趁现在先把{0}用了再说吧……"
],
"surrender": [
"(光速逃离现场)"
] ]
} }
\ No newline at end of file
{
"welcome": [
"这里就是幻想仙境吗?"
],
"deckerror": [
"{0}!我的{0}!"
],
"duelstart": [
"还有多久才能到啊……",
"啊……想吃宽油竹鼠了。",
"啊……想吃冷吃兔了……"
],
"newturn": [
"我的回合!"
],
"endturn": [
"呀嘞呀嘞……",
"啊……想喝奶茶了……"
],
"directattack": [
"{0},直接攻击!",
"贴贴!"
],
"attack": [
"用{0}攻击{1}!"
],
"ondirectattack": [
"呀……",
"嗝……",
"喵……"
],
"facedownmonstername": "怪兽",
"activate": [
"发动{0}的效果!"
],
"summon": [
"{0}召唤!",
"出来吧,{0}!"
],
"setmonster": [
"……"
],
"chaining": [
"发动{0}的效果!",
"{0}喵!"
],
"surrender": [
"呜啊……"
]
}
...@@ -49,5 +49,8 @@ ...@@ -49,5 +49,8 @@
"这个时候就该使用{0}的效果。", "这个时候就该使用{0}的效果。",
"这时候,我使用{0}的效果。", "这时候,我使用{0}的效果。",
"我连锁发动{0}的效果。" "我连锁发动{0}的效果。"
],
"surrender": [
"到底是哪里出问题了呢……"
] ]
} }
\ No newline at end of file
...@@ -50,5 +50,8 @@ ...@@ -50,5 +50,8 @@
"chaining": [ "chaining": [
"这时候我使用{0}的效果。", "这时候我使用{0}的效果。",
"我连锁发动{0}的效果。" "我连锁发动{0}的效果。"
],
"surrender": [
"果然人不可貌相啊……"
] ]
} }
{
"welcome": [
"匠心蛋糕店开门啦!"
],
"deckerror": [
"啊,好像厨房里的{0}不够了,我去买点……"
],
"duelstart": [
"今天想吃什么呢?"
],
"newturn": [
"到我了吗?那就抽牌。",
"总之先抽卡。"
],
"endturn": [
"先去烤个蛋糕……",
"先去做个布丁……",
"先去倒杯牛奶。"
],
"directattack": [
"丢你{0}!",
"{0}好吃吗?",
"该{0}展示自己了。"
],
"attack": [
"{0},攻击这只{1}!",
"{0},消灭这只{1}!",
"{0},打倒{1}!"
],
"ondirectattack": [
"啊啊啊啊啊啊啊啊!",
"……我可没有害怕!",
"才不过是{0}而已!"
],
"facedownmonstername": "怪兽",
"activate": [
"先用这个{0}看看。",
"嗯……{0}在这个时候应该管用。",
"总之先试试{0}。"
],
"summon": [
"助手{0}来啦!",
"{0}来帮忙啦!",
"{0}也来了哦!"
],
"setmonster": [
"这小家伙似乎怕生呢。"
],
"chaining": [
"这个时候就该使出{0}!",
"没想到吧!我有{0}!我还藏了一手呢!",
"{0} YYDS!"
],
"surrender": [
"再来一局再来一局再来一局!"
]
}
...@@ -51,5 +51,8 @@ ...@@ -51,5 +51,8 @@
"等一下!我发动{0}!", "等一下!我发动{0}!",
"我连锁发动{0}!", "我连锁发动{0}!",
"没想到吧!我发动{0}!" "没想到吧!我发动{0}!"
],
"surrender": [
"汪?!"
] ]
} }
\ No newline at end of file
...@@ -46,5 +46,8 @@ ...@@ -46,5 +46,8 @@
"等一下,我发动{0}。", "等一下,我发动{0}。",
"送给你一个大惊喜。发动{0}!", "送给你一个大惊喜。发动{0}!",
"没留意吧!我要使用{0}了!" "没留意吧!我要使用{0}了!"
],
"surrender": [
"这算个啥啊!!!"
] ]
} }
...@@ -50,5 +50,8 @@ ...@@ -50,5 +50,8 @@
"居然对{0}一点防备都没有……", "居然对{0}一点防备都没有……",
"等一下!先让{0}亮个相!", "等一下!先让{0}亮个相!",
"在此之前先让我把{0}用了!" "在此之前先让我把{0}用了!"
],
"surrender": [
"…………"
] ]
} }
\ No newline at end of file
...@@ -49,5 +49,8 @@ ...@@ -49,5 +49,8 @@
"等一下!我发动{0}!", "等一下!我发动{0}!",
"我连锁发动{0}!", "我连锁发动{0}!",
"没想到吧!我发动{0}!" "没想到吧!我发动{0}!"
],
"surrender": [
"啧……"
] ]
} }
...@@ -46,5 +46,8 @@ ...@@ -46,5 +46,8 @@
"启动指令:连锁发动{0}的效果。", "启动指令:连锁发动{0}的效果。",
"连锁发动效果请求已发出,正在等待{0}回复。", "连锁发动效果请求已发出,正在等待{0}回复。",
"连锁发动效果程序启动。" "连锁发动效果程序启动。"
],
"surrender": [
"程序关闭中……"
] ]
} }
...@@ -48,5 +48,8 @@ ...@@ -48,5 +48,8 @@
"看这里!我发动{0}!", "看这里!我发动{0}!",
"我不认同。{0},发动!", "我不认同。{0},发动!",
"看样子你忘了我的{0}!" "看样子你忘了我的{0}!"
],
"surrender": [
"啊,这下完犊子了。"
] ]
} }
\ No newline at end of file
...@@ -49,5 +49,8 @@ ...@@ -49,5 +49,8 @@
"畏惧我的{0}吧!", "畏惧我的{0}吧!",
"等一下!先让我把{0}用了!", "等一下!先让我把{0}用了!",
"在此之前先让我用了{0}再说!" "在此之前先让我用了{0}再说!"
],
"surrender": [
"我居然也有失败的一次……"
] ]
} }
\ No newline at end of file
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
], ],
"duelstart": [ "duelstart": [
"对面看上去好像刚从情侣酒店出来的样子……", "对面看上去好像刚从情侣酒店出来的样子……",
"虽然这里的草有一米多高,不过也无所谓。" "虽然这里的草有几十厘米高,不过也无所谓。"
], ],
"newturn": [ "newturn": [
"Power Recover!", "Power Recover!",
...@@ -49,5 +49,8 @@ ...@@ -49,5 +49,8 @@
"来点{0}不好吗?", "来点{0}不好吗?",
"到底是有多不小心才会忘了{0}……", "到底是有多不小心才会忘了{0}……",
"Nova Bombs!" "Nova Bombs!"
],
"surrender": [
"看来我还得多练习啊……"
] ]
} }
\ No newline at end of file
...@@ -49,5 +49,8 @@ ...@@ -49,5 +49,8 @@
"{0}降价啦!", "{0}降价啦!",
"盖亚!!!!!!!!!!!", "盖亚!!!!!!!!!!!",
"像你这种情况如果不用{0}我会有多伤心……" "像你这种情况如果不用{0}我会有多伤心……"
],
"surrender": [
"啊,摸鱼被店长发现了。"
] ]
} }
\ No newline at end of file
{
"welcome": [
"Hello,摸摸哦。"
],
"deckerror": [
"啊,似乎表姐把我的{0}拿走了。"
],
"duelstart": [
"谁输了谁就要请客!",
"想吃烤全羊了……"
],
"newturn": [
"到我了,喵!",
"摸摸~"
],
"endturn": [
"摸了。",
"轮到你啦。"
],
"directattack": [
"是{0}哦!",
"众所周知{0}就是游戏王。",
"Bang!"
],
"attack": [
"{1}:我打{0}?真的假的……",
"{1}在{0}面前连下酒菜都不如。",
"{1}乖乖,上钩儿拳拳。"
],
"ondirectattack": [
"呜啊……",
"这个{0}欺负女孩子!"
],
"facedownmonstername": "怪兽",
"activate": [
"{0}哟!",
"首先我们把{0}烧热。"
],
"summon": [
"天空一声巨响,{0}闪亮登场!",
"是{0}哟!",
"{0}:会赢的。"
],
"setmonster": [
"呜啊。"
],
"chaining": [
"一刻也没有感到悲哀,即将到达战场的是{0}!",
"尝尝这个{0}!",
"别想着一键通关!"
],
"surrender": [
"好吧好吧,我给你炒两个菜总行了吧!"
]
}
...@@ -49,5 +49,8 @@ ...@@ -49,5 +49,8 @@
"小心{0}驶得万年船!", "小心{0}驶得万年船!",
"就这点程度?连{0}都不如。", "就这点程度?连{0}都不如。",
"秘技:{0}!" "秘技:{0}!"
],
"surrender": [
"这下鸡你太美了……"
] ]
} }
\ No newline at end of file
{
"welcome": [
"导航助手启动完成,工作正常,即将进入会话模式。"
],
"deckerror": [
"警报,警报,未检测到{0},导航助手正在关闭。"
],
"duelstart": [
"由依不在怎么办。",
"啊,到点了该吃饭了。"
],
"newturn": [
"自摸。"
],
"endturn": [
"还愣着干什么?"
],
"directattack": [
"你看看你,一动不动是王八。",
"这波太稳了。"
],
"attack": [
"你看那个{1},好像一条狗啊。",
"怎么说?{0}说……"
],
"ondirectattack": [
"我勒个去……",
"知不知道怜香惜玉啊你!"
],
"facedownmonstername": "怪兽",
"activate": [
"接下来发动{0}的效果。",
"是个人都知道现在要用{0}。"
],
"summon": [
"{0}发生什么事了?",
"来见见我的小宠物吧!"
],
"setmonster": [
"埋个地雷先。"
],
"chaining": [
"哈哈,少算了一步吧!",
"看招!"
],
"surrender": [
"这下在由依面前抬不起头了……"
]
}
...@@ -54,5 +54,8 @@ ...@@ -54,5 +54,8 @@
"对我的{0}没有戒心吗?", "对我的{0}没有戒心吗?",
"等一下!先让我把{0}用了!", "等一下!先让我把{0}用了!",
"在此之前先让我用了{0}再说!" "在此之前先让我用了{0}再说!"
],
"surrender": [
"人外有人,我认输。"
] ]
} }
\ No newline at end of file
{
"welcome": [
"欢迎来到北部边境!"
],
"deckerror": [
"喂喂喂!去办公室看看{0}是不是在桌子上!"
],
"duelstart": [
"听说现在的人都很需要感化教育……"
],
"newturn": [
"来咯!"
],
"endturn": [
"喜不喜欢我的展开呢?"
],
"directattack": [
"尝尝这个!",
"我用{0}直接攻击!"
],
"attack": [
"尝尝这个!",
"我用{0}攻击{1}!"
],
"ondirectattack": [
"君子动口不动手!",
"啊啊啊啊……"
],
"facedownmonstername": "怪兽",
"activate": [
"{0}的效果太厉害了!",
"我使用{0}的效果。"
],
"summon": [
"{0}是不是很适合这氛围呢?",
"我召唤{0}!"
],
"setmonster": [
"飒爽下班。"
],
"chaining": [
"此刻!{0}的效果发动!",
"果然还是太年轻了呀……"
],
"surrender": [
"这算个什么啊!!!!!"
]
}
...@@ -36,5 +36,8 @@ ...@@ -36,5 +36,8 @@
], ],
"chaining": [ "chaining": [
"……{0}!" "……{0}!"
],
"surrender": [
"……"
] ]
} }
\ No newline at end of file
...@@ -49,5 +49,8 @@ ...@@ -49,5 +49,8 @@
"{0}来咯~", "{0}来咯~",
"大哥吃{0}。", "大哥吃{0}。",
"和!{0},1番110符3600点!" "和!{0},1番110符3600点!"
],
"surrender": [
"是我跟不上步伐了吗……"
] ]
} }
\ No newline at end of file
...@@ -49,5 +49,8 @@ ...@@ -49,5 +49,8 @@
"别急,先让我把{0}发动了再说。", "别急,先让我把{0}发动了再说。",
"在此之前先让我用了{0}再说!", "在此之前先让我用了{0}再说!",
"这是发动{0}的绝佳机会。" "这是发动{0}的绝佳机会。"
],
"surrender": [
"呜啊……这算什么啦……"
] ]
} }
\ No newline at end of file
...@@ -71,5 +71,9 @@ ...@@ -71,5 +71,9 @@
"我不认同。{0},发动!", "我不认同。{0},发动!",
"看样子你忘了我的{0}!", "看样子你忘了我的{0}!",
"你考虑过我有{0}吗?" "你考虑过我有{0}吗?"
],
"surrender": [
"我认输。",
"我承认你的胜利。"
] ]
} }
...@@ -424,7 +424,7 @@ namespace WindBot.Game.AI ...@@ -424,7 +424,7 @@ namespace WindBot.Game.AI
/// </summary> /// </summary>
public IList<ClientCard> CheckSelectCount(IList<ClientCard> _selected, IList<ClientCard> cards, int min, int max) public IList<ClientCard> CheckSelectCount(IList<ClientCard> _selected, IList<ClientCard> cards, int min, int max)
{ {
var selected = _selected.ToList(); var selected = _selected.Distinct().ToList();
if (selected.Count < min) if (selected.Count < min)
{ {
foreach (ClientCard card in cards) foreach (ClientCard card in cards)
...@@ -434,6 +434,15 @@ namespace WindBot.Game.AI ...@@ -434,6 +434,15 @@ namespace WindBot.Game.AI
if (selected.Count >= max) if (selected.Count >= max)
break; break;
} }
if (selected.Count < min)
{
#if DEBUG
throw new Exception("Not enough cards to CheckSelectCount");
#else
Logger.WriteErrorLine("Not enough cards to CheckSelectCount, using default");
return null;
#endif
}
} }
while (selected.Count > max) while (selected.Count > max)
{ {
...@@ -442,5 +451,115 @@ namespace WindBot.Game.AI ...@@ -442,5 +451,115 @@ namespace WindBot.Game.AI
return selected; return selected;
} }
/// <summary>
/// Get all xyz materials lists that xyz monster required level in the 'pre_materials' list
/// </summary>
/// <param name="param_pre_materials">Original materials</param>
/// <param name="level">Xyz monster required level</param>
/// <param name="material_count">SpSummon rule:number of xyz materials</param>
/// <param name="material_count_above">More xyz materials</param>
/// <param name="material_func">Filter xyz materials func</param>
/// <returns></returns>
public List<List<ClientCard>> GetXyzMaterials(IList<ClientCard> param_pre_materials, int level, int material_count, bool material_count_above = false, Func<ClientCard, bool> material_func = null)
{
List<List<ClientCard>> result = new List<List<ClientCard>>();
List<ClientCard> pre_materials = param_pre_materials?.Where(card => card != null && !(card.IsFacedown() & card.Location == CardLocation.MonsterZone) && card.Level == level && !card.IsMonsterNotBeXyzMaterial()).ToList();
if (pre_materials?.Count() < material_count) return result;
Func<ClientCard, bool> default_func = card => true;
material_func = material_func ?? default_func;
for (int i = 1; i < Math.Pow(2, pre_materials.Count); i++)
{
List<ClientCard> temp_materials = new List<ClientCard>();
string binaryString = Convert.ToString(i, 2).PadLeft(pre_materials.Count, '0');
char[] reversedBinaryChars = binaryString.Reverse().ToArray();
for (int j = 0; j < pre_materials.Count; j++)
{
if (reversedBinaryChars[j] == '1' && material_func(pre_materials[j]))
{
temp_materials.Add(pre_materials[j]);
}
}
if (material_count_above ? temp_materials.Count >= material_count : temp_materials.Count == material_count)
{
result.Add(temp_materials);
}
}
return result;
}
/// <summary>
/// Get all synchro materials lists that synchro monster level == param 'level' in the 'pre_materials' list
/// </summary>
/// <param name="pre_materials">Original materials</param>
/// <param name="level">Synchro monster level</param>
/// <param name="tuner_count">SpSummon rule:number of tuner monsters </param>
/// <param name="n_tuner_count">SpSummon rule:number of non-tuner monsters count</param>
/// <param name="tuner_count_above">More tuner monsters</param>
/// <param name="n_tuner_count_above">More non-tuner monsters</param>
/// <param name="tuner_func">Filter tuner monsters func</param>
/// <param name="n_tuner_func">Filter non-tuner monsters func</param>
/// <returns></returns>
public List<List<ClientCard>> GetSynchroMaterials(IList<ClientCard> param_pre_materials, int level, int tuner_count, int n_tuner_count, bool tuner_count_above = false, bool n_tuner_count_above = true, Func<ClientCard, bool> tuner_func = null, Func<ClientCard, bool> n_tuner_func = null)
{
List<List<ClientCard>> t_result = new List<List<ClientCard>>();
List<ClientCard> pre_materials = param_pre_materials?.Where(card => card != null && !(card.IsFacedown() & card.Location == CardLocation.MonsterZone) && card.Level > 0 && !card.IsMonsterNotBeSynchroMaterial()).ToList();
if (pre_materials?.Count() < tuner_count + n_tuner_count) return t_result;
Func<ClientCard, bool> default_func = card => true;
tuner_func = tuner_func ?? default_func;
n_tuner_func = n_tuner_func ?? default_func;
pre_materials.Sort(CardContainer.CompareCardLevel);
Stack<object[]> materials_stack = new Stack<object[]>();
for (var i = 0; i < pre_materials.Count; i++)
{
if (pre_materials[i].Level > level) break;
materials_stack.Push(new object[] { pre_materials[i].Level, i, pre_materials[i].Level, new List<ClientCard> { pre_materials[i] } });
}
while (materials_stack.Count > 0)
{
object[] data = materials_stack.Pop();
int num = (int)data[0];
int index = (int)data[1];
int sum = (int)data[2];
List<ClientCard> temp_materials = (List<ClientCard>)data[3];
if (sum == level)
{
t_result.Add(temp_materials);
}
else if (sum < level)
{
for (var i = index + 1; i < pre_materials.Count; i++)
{
if (pre_materials[i].Level > level - sum) break;
if (i > index + 1 && pre_materials[i].Level == pre_materials[i - 1].Level) continue;
var new_temp_materials = new List<ClientCard>(temp_materials);
new_temp_materials.Add(pre_materials[i]);
materials_stack.Push(new object[] { pre_materials[i].Level, i, sum + pre_materials[i].Level, new_temp_materials });
}
}
}
List<List<ClientCard>> result = new List<List<ClientCard>>();
for (int i = 0; i < t_result.Count; i++)
{
List<ClientCard> materials = t_result[i];
List<ClientCard> tuner_materials = new List<ClientCard>();
List<ClientCard> n_tuner_materials = new List<ClientCard>();
foreach (ClientCard material in materials)
{
if (material.HasType(CardType.Tuner) && tuner_func(material))
{
tuner_materials.Add(material);
}
else if (material.Level > 0 && n_tuner_func(material))
{
n_tuner_materials.Add(material);
}
}
if ((tuner_count_above ? tuner_materials.Count >= tuner_count : tuner_materials.Count == tuner_count)
&& (n_tuner_count_above ? n_tuner_materials.Count >= n_tuner_count : n_tuner_materials.Count == n_tuner_count))
result.Add(materials);
}
return result;
}
} }
} }
\ No newline at end of file
...@@ -25,6 +25,15 @@ namespace WindBot.Game.AI ...@@ -25,6 +25,15 @@ namespace WindBot.Game.AI
return 1; return 1;
} }
public static int CompareCardLink(ClientCard cardA, ClientCard cardB)
{
if (cardA.LinkCount < cardB.LinkCount)
return -1;
if (cardA.LinkCount == cardB.LinkCount)
return 0;
return 1;
}
public static int CompareDefensePower(ClientCard cardA, ClientCard cardB) public static int CompareDefensePower(ClientCard cardA, ClientCard cardB)
{ {
if (cardA == null && cardB == null) if (cardA == null && cardB == null)
...@@ -46,28 +55,32 @@ namespace WindBot.Game.AI ...@@ -46,28 +55,32 @@ namespace WindBot.Game.AI
{ {
return cards return cards
.Where(card => card?.Data != null && card.HasType(CardType.Monster) && card.IsFaceup() && !(canBeTarget && card.IsShouldNotBeTarget())) .Where(card => card?.Data != null && card.HasType(CardType.Monster) && card.IsFaceup() && !(canBeTarget && card.IsShouldNotBeTarget()))
.OrderBy(card => card.Attack).FirstOrDefault(); .OrderByDescending(card => card.Attack)
.FirstOrDefault();
} }
public static ClientCard GetHighestDefenseMonster(this IEnumerable<ClientCard> cards, bool canBeTarget = false) public static ClientCard GetHighestDefenseMonster(this IEnumerable<ClientCard> cards, bool canBeTarget = false)
{ {
return cards return cards
.Where(card => card?.Data != null && card.HasType(CardType.Monster) && card.IsFaceup() && !(canBeTarget && card.IsShouldNotBeTarget())) .Where(card => card?.Data != null && card.HasType(CardType.Monster) && card.IsFaceup() && !(canBeTarget && card.IsShouldNotBeTarget()))
.OrderBy(card => card.Defense).FirstOrDefault(); .OrderByDescending(card => card.Defense)
.FirstOrDefault();
} }
public static ClientCard GetLowestAttackMonster(this IEnumerable<ClientCard> cards, bool canBeTarget = false) public static ClientCard GetLowestAttackMonster(this IEnumerable<ClientCard> cards, bool canBeTarget = false)
{ {
return cards return cards
.Where(card => card?.Data != null && card.HasType(CardType.Monster) && card.IsFaceup() && !(canBeTarget && card.IsShouldNotBeTarget())) .Where(card => card?.Data != null && card.HasType(CardType.Monster) && card.IsFaceup() && !(canBeTarget && card.IsShouldNotBeTarget()))
.OrderByDescending(card => card.Attack).FirstOrDefault(); .OrderBy(card => card.Attack)
.FirstOrDefault();
} }
public static ClientCard GetLowestDefenseMonster(this IEnumerable<ClientCard> cards, bool canBeTarget = false) public static ClientCard GetLowestDefenseMonster(this IEnumerable<ClientCard> cards, bool canBeTarget = false)
{ {
return cards return cards
.Where(card => card?.Data != null && card.HasType(CardType.Monster) && card.IsFaceup() && !(canBeTarget && card.IsShouldNotBeTarget())) .Where(card => card?.Data != null && card.HasType(CardType.Monster) && card.IsFaceup() && !(canBeTarget && card.IsShouldNotBeTarget()))
.OrderByDescending(card => card.Defense).FirstOrDefault(); .OrderBy(card => card.Defense)
.FirstOrDefault();
} }
public static bool ContainsMonsterWithLevel(this IEnumerable<ClientCard> cards, int level) public static bool ContainsMonsterWithLevel(this IEnumerable<ClientCard> cards, int level)
......
...@@ -21,7 +21,8 @@ namespace WindBot.Game.AI ...@@ -21,7 +21,8 @@ namespace WindBot.Game.AI
/// </summary> /// </summary>
public static bool IsMonsterDangerous(this ClientCard card) public static bool IsMonsterDangerous(this ClientCard card)
{ {
return !card.IsDisabled() && Enum.IsDefined(typeof(DangerousMonster), card.Id); return !card.IsDisabled() &&
(Enum.IsDefined(typeof(DangerousMonster), card.Id) || (card.HasSetcode(0x18d) && (card.HasType(CardType.Ritual) || card.EquipCards.Count > 0)));
} }
/// <summary> /// <summary>
...@@ -78,5 +79,21 @@ namespace WindBot.Game.AI ...@@ -78,5 +79,21 @@ namespace WindBot.Game.AI
{ {
return Enum.IsDefined(typeof(FusionSpell), card.Id); return Enum.IsDefined(typeof(FusionSpell), card.Id);
} }
/// <summary>
/// Is this monster not be synchro material?
/// </summary>
public static bool IsMonsterNotBeSynchroMaterial(this ClientCard card)
{
return Enum.IsDefined(typeof(NotBeSynchroMaterialMonster), card.Id);
}
/// <summary>
/// Is this monster not be xyz material?
/// </summary>
public static bool IsMonsterNotBeXyzMaterial(this ClientCard card)
{
return Enum.IsDefined(typeof(NotBeXyzMaterialMonster), card.Id);
}
} }
} }
\ No newline at end of file
This diff is collapsed.
...@@ -3,6 +3,7 @@ using System.Collections.Generic; ...@@ -3,6 +3,7 @@ using System.Collections.Generic;
using WindBot; using WindBot;
using WindBot.Game; using WindBot.Game;
using WindBot.Game.AI; using WindBot.Game.AI;
using System.Linq;
namespace WindBot.Game.AI.Decks namespace WindBot.Game.AI.Decks
{ {
...@@ -220,8 +221,7 @@ namespace WindBot.Game.AI.Decks ...@@ -220,8 +221,7 @@ namespace WindBot.Game.AI.Decks
public bool isAltergeist(ClientCard card) public bool isAltergeist(ClientCard card)
{ {
return card.IsCode(CardId.Marionetter, CardId.Hexstia, CardId.Protocol, CardId.Multifaker, CardId.Meluseek, return card != null && card.HasSetcode(0x103);
CardId.Kunquery, CardId.Manifestation, CardId.Silquitous);
} }
public int GetSequence(ClientCard card) public int GetSequence(ClientCard card)
...@@ -324,23 +324,37 @@ namespace WindBot.Game.AI.Decks ...@@ -324,23 +324,37 @@ namespace WindBot.Game.AI.Decks
public int SelectSTPlace(ClientCard card=null, bool avoid_Impermanence = false) public int SelectSTPlace(ClientCard card=null, bool avoid_Impermanence = false)
{ {
List<int> list = new List<int> { 0, 1, 2, 3, 4 }; if (card == null) card = Card;
List<int> list = new List<int>();
for (int seq = 0; seq < 5; ++seq)
{
if (Bot.SpellZone[seq] == null)
{
if (card != null && card.Location == CardLocation.Hand && avoid_Impermanence && Impermanence_list.Contains(seq)) continue;
list.Add(seq);
}
}
int n = list.Count; int n = list.Count;
while (n-- > 1) while (n-- > 1)
{ {
int index = Program.Rand.Next(n + 1); int index = Program.Rand.Next(list.Count);
int temp = list[index]; int nextIndex = (index + Program.Rand.Next(list.Count - 1)) % list.Count;
list[index] = list[n]; int tempInt = list[index];
list[n] = temp; list[index] = list[nextIndex];
list[nextIndex] = tempInt;
} }
foreach (int seq in list) if (avoid_Impermanence && Bot.GetMonsters().Any(c => c.IsFaceup() && !c.IsDisabled()))
{ {
int zone = (int)System.Math.Pow(2, seq); foreach (int seq in list)
if (Bot.SpellZone[seq] == null)
{ {
if (card != null && card.Location == CardLocation.Hand && avoid_Impermanence && Impermanence_list.Contains(seq)) continue; ClientCard enemySpell = Enemy.SpellZone[4 - seq];
return zone; if (enemySpell != null && enemySpell.IsFacedown()) continue;
}; return (int)System.Math.Pow(2, seq);
}
}
foreach (int seq in list)
{
return (int)System.Math.Pow(2, seq);
} }
return 0; return 0;
} }
...@@ -376,6 +390,7 @@ namespace WindBot.Game.AI.Decks ...@@ -376,6 +390,7 @@ namespace WindBot.Game.AI.Decks
public bool spell_trap_activate(bool isCounter = false, ClientCard target = null) public bool spell_trap_activate(bool isCounter = false, ClientCard target = null)
{ {
if (target == null) target = Card; if (target == null) target = Card;
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
if (target.Location != CardLocation.SpellZone && target.Location != CardLocation.Hand) return true; if (target.Location != CardLocation.SpellZone && target.Location != CardLocation.Hand) return true;
if (Enemy.HasInMonstersZone(CardId.NaturalExterio, true) && !Bot.HasInHandOrHasInMonstersZone(CardId.GO_SR) && !isCounter && !Bot.HasInSpellZone(CardId.SolemnStrike)) return false; if (Enemy.HasInMonstersZone(CardId.NaturalExterio, true) && !Bot.HasInHandOrHasInMonstersZone(CardId.GO_SR) && !isCounter && !Bot.HasInSpellZone(CardId.SolemnStrike)) return false;
if (target.IsSpell()) if (target.IsSpell())
...@@ -649,7 +664,7 @@ namespace WindBot.Game.AI.Decks ...@@ -649,7 +664,7 @@ namespace WindBot.Game.AI.Decks
public bool G_activate() public bool G_activate()
{ {
return (Duel.Player == 1); return (Duel.Player == 1) && !DefaultCheckWhetherCardIsNegated(Card);
} }
public bool NaturalExterio_eff() public bool NaturalExterio_eff()
...@@ -806,6 +821,7 @@ namespace WindBot.Game.AI.Decks ...@@ -806,6 +821,7 @@ namespace WindBot.Game.AI.Decks
public bool Hand_act_eff() public bool Hand_act_eff()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
if (Card.IsCode(CardId.AB_JS) && Util.GetLastChainCard().HasSetcode(0x11e) && Util.GetLastChainCard().Location == CardLocation.Hand) // Danger! archtype hand effect if (Card.IsCode(CardId.AB_JS) && Util.GetLastChainCard().HasSetcode(0x11e) && Util.GetLastChainCard().Location == CardLocation.Hand) // Danger! archtype hand effect
return false; return false;
if (Card.IsCode(CardId.GO_SR) && Card.Location == CardLocation.Hand && Bot.HasInMonstersZone(CardId.GO_SR)) return false; if (Card.IsCode(CardId.GO_SR) && Card.Location == CardLocation.Hand && Bot.HasInMonstersZone(CardId.GO_SR)) return false;
...@@ -886,6 +902,7 @@ namespace WindBot.Game.AI.Decks ...@@ -886,6 +902,7 @@ namespace WindBot.Game.AI.Decks
public bool GR_WC_activate() public bool GR_WC_activate()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
int warrior_count = 0; int warrior_count = 0;
int pendulum_count = 0; int pendulum_count = 0;
int link_count = 0; int link_count = 0;
...@@ -1248,7 +1265,7 @@ namespace WindBot.Game.AI.Decks ...@@ -1248,7 +1265,7 @@ namespace WindBot.Game.AI.Decks
if (linked_card != null && linked_card.IsCode(CardId.Hexstia)) if (linked_card != null && linked_card.IsCode(CardId.Hexstia))
{ {
int next_seq = get_Hexstia_linkzone(this_seq); int next_seq = get_Hexstia_linkzone(this_seq);
if (next_seq != -1 && Bot.MonsterZone[next_seq] != null && isAltergeist(Bot.MonsterZone[next_seq].Id)) return false; if (next_seq != -1 && Bot.MonsterZone[next_seq] != null && isAltergeist(Bot.MonsterZone[next_seq])) return false;
} }
} }
return true; return true;
...@@ -1675,7 +1692,7 @@ namespace WindBot.Game.AI.Decks ...@@ -1675,7 +1692,7 @@ namespace WindBot.Game.AI.Decks
if (target.IsCode(CardId.Hexstia)) if (target.IsCode(CardId.Hexstia))
{ {
int next_index = get_Hexstia_linkzone(i); int next_index = get_Hexstia_linkzone(i);
if (next_index != -1 && Bot.MonsterZone[next_index] != null && Bot.MonsterZone[next_index].IsFaceup() && isAltergeist(Bot.MonsterZone[next_index].Id)) continue; if (next_index != -1 && Bot.MonsterZone[next_index] != null && Bot.MonsterZone[next_index].IsFaceup() && isAltergeist(Bot.MonsterZone[next_index])) continue;
} }
if (!get_linked_by_Hexstia(i)) if (!get_linked_by_Hexstia(i))
{ {
...@@ -2654,6 +2671,28 @@ namespace WindBot.Game.AI.Decks ...@@ -2654,6 +2671,28 @@ namespace WindBot.Game.AI.Decks
ss_other_monster = false; ss_other_monster = false;
Impermanence_list.Clear(); Impermanence_list.Clear();
attacked_Meluseek.Clear(); attacked_Meluseek.Clear();
base.OnNewTurn();
}
public override void OnChaining(int player, ClientCard card)
{
if (card == null) return;
if (player == 1)
{
if (card.IsCode(_CardId.InfiniteImpermanence))
{
for (int i = 0; i < 5; ++i)
{
if (Enemy.SpellZone[i] == card)
{
Impermanence_list.Add(4-i);
break;
}
}
}
}
base.OnChaining(player, card);
} }
public bool MonsterRepos() public bool MonsterRepos()
...@@ -2797,7 +2836,8 @@ namespace WindBot.Game.AI.Decks ...@@ -2797,7 +2836,8 @@ namespace WindBot.Game.AI.Decks
// throw all?? // throw all??
return null; return null;
} }
return null;
return base.OnSelectCard(cards, min, max, hint, cancelable);
} }
public override CardPosition OnSelectPosition(int cardId, IList<CardPosition> positions) public override CardPosition OnSelectPosition(int cardId, IList<CardPosition> positions)
...@@ -2853,16 +2893,16 @@ namespace WindBot.Game.AI.Decks ...@@ -2853,16 +2893,16 @@ namespace WindBot.Game.AI.Decks
if (cardId == CardId.Hexstia) if (cardId == CardId.Hexstia)
{ {
// ex zone // ex zone
if ((Zones.z5 & available) > 0 && Bot.MonsterZone[1] != null && isAltergeist(Bot.MonsterZone[1].Id)) return Zones.z5; if ((Zones.z5 & available) > 0 && Bot.MonsterZone[1] != null && isAltergeist(Bot.MonsterZone[1])) return Zones.z5;
if ((Zones.z6 & available) > 0 && Bot.MonsterZone[3] != null && isAltergeist(Bot.MonsterZone[3].Id)) return Zones.z6; if ((Zones.z6 & available) > 0 && Bot.MonsterZone[3] != null && isAltergeist(Bot.MonsterZone[3])) return Zones.z6;
if ( ((Zones.z6 & available) > 0 && Bot.MonsterZone[3] != null && !isAltergeist(Bot.MonsterZone[3].Id)) if ( ((Zones.z6 & available) > 0 && Bot.MonsterZone[3] != null && !isAltergeist(Bot.MonsterZone[3]))
|| ((Zones.z5 & available) > 0 && Bot.MonsterZone[1] == null) ) return Zones.z5; || ((Zones.z5 & available) > 0 && Bot.MonsterZone[1] == null) ) return Zones.z5;
if (((Zones.z5 & available) > 0 && Bot.MonsterZone[1] != null && !isAltergeist(Bot.MonsterZone[1].Id)) if (((Zones.z5 & available) > 0 && Bot.MonsterZone[1] != null && !isAltergeist(Bot.MonsterZone[1]))
|| ((Zones.z6 & available) > 0 && Bot.MonsterZone[3] == null)) return Zones.z6; || ((Zones.z6 & available) > 0 && Bot.MonsterZone[3] == null)) return Zones.z6;
// main zone // main zone
for (int i = 1; i < 5; ++i) for (int i = 1; i < 5; ++i)
{ {
if (Bot.MonsterZone[i] != null && isAltergeist(Bot.MonsterZone[i].Id)) if (Bot.MonsterZone[i] != null && isAltergeist(Bot.MonsterZone[i]))
{ {
if ((available & (int)System.Math.Pow(2, i - 1)) > 0) return (int)System.Math.Pow(2, i - 1); if ((available & (int)System.Math.Pow(2, i - 1)) > 0) return (int)System.Math.Pow(2, i - 1);
} }
...@@ -2876,5 +2916,15 @@ namespace WindBot.Game.AI.Decks ...@@ -2876,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
This diff is collapsed.
...@@ -131,6 +131,7 @@ namespace WindBot.Game.AI.Decks ...@@ -131,6 +131,7 @@ namespace WindBot.Game.AI.Decks
UsedGalaxyEyesCipherDragon = null; UsedGalaxyEyesCipherDragon = null;
AlternativeWhiteDragonSummoned = false; AlternativeWhiteDragonSummoned = false;
SoulChargeUsed = false; SoulChargeUsed = false;
base.OnNewTurn();
} }
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)
...@@ -146,7 +147,8 @@ namespace WindBot.Game.AI.Decks ...@@ -146,7 +147,8 @@ namespace WindBot.Game.AI.Decks
return Util.CheckSelectCount(result, cards, min, max); return Util.CheckSelectCount(result, cards, min, max);
} }
Logger.DebugWriteLine("Use default."); Logger.DebugWriteLine("Use default.");
return null;
return base.OnSelectCard(cards, min, max, hint, cancelable);
} }
public override IList<ClientCard> OnSelectXyzMaterial(IList<ClientCard> cards, int min, int max) public override IList<ClientCard> OnSelectXyzMaterial(IList<ClientCard> cards, int min, int max)
......
...@@ -121,6 +121,7 @@ namespace WindBot.Game.AI.Decks ...@@ -121,6 +121,7 @@ namespace WindBot.Game.AI.Decks
private bool MaxxCeff() private bool MaxxCeff()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
return Duel.Player == 1; return Duel.Player == 1;
} }
...@@ -464,6 +465,7 @@ namespace WindBot.Game.AI.Decks ...@@ -464,6 +465,7 @@ namespace WindBot.Game.AI.Decks
private bool Linkuriboheff() private bool Linkuriboheff()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
if (Duel.LastChainPlayer == 0 && Util.GetLastChainCard().IsCode(CardId.Linkuriboh)) return false; if (Duel.LastChainPlayer == 0 && Util.GetLastChainCard().IsCode(CardId.Linkuriboh)) return false;
return true; return true;
} }
......
...@@ -180,6 +180,7 @@ namespace WindBot.Game.AI.Decks ...@@ -180,6 +180,7 @@ namespace WindBot.Game.AI.Decks
FusionDestinyUsed = false; FusionDestinyUsed = false;
PhoenixTarget = null; PhoenixTarget = null;
PhoenixSelectingTarget = 0; PhoenixSelectingTarget = 0;
base.OnNewTurn();
} }
public override CardPosition OnSelectPosition(int cardId, IList<CardPosition> positions) public override CardPosition OnSelectPosition(int cardId, IList<CardPosition> positions)
...@@ -354,8 +355,8 @@ namespace WindBot.Game.AI.Decks ...@@ -354,8 +355,8 @@ namespace WindBot.Game.AI.Decks
return true; return true;
else else
{ {
ClientCard target = Util.GetProblematicEnemyCard(); ClientCard target = Util.GetProblematicEnemyCard(2500);
if (target != null) if (target != null && !Util.ChainContainPlayer(0))
{ {
AI.SelectCard(CardId.DestinyHeroDestroyPhoenixEnforcer); AI.SelectCard(CardId.DestinyHeroDestroyPhoenixEnforcer);
AI.SelectNextCard(target); AI.SelectNextCard(target);
...@@ -479,6 +480,7 @@ namespace WindBot.Game.AI.Decks ...@@ -479,6 +480,7 @@ namespace WindBot.Game.AI.Decks
private bool AquamancerOfTheSanctuarySearchEffect() private bool AquamancerOfTheSanctuarySearchEffect()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
if (Card.Location == CardLocation.Grave) if (Card.Location == CardLocation.Grave)
{ {
AI.SelectCard(CardLocation.Deck); AI.SelectCard(CardLocation.Deck);
...@@ -626,6 +628,7 @@ namespace WindBot.Game.AI.Decks ...@@ -626,6 +628,7 @@ namespace WindBot.Game.AI.Decks
private bool JetSynchronEffect() private bool JetSynchronEffect()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
int[] materials = new[] { int[] materials = new[] {
CardId.MechaPhantomBeastToken CardId.MechaPhantomBeastToken
}; };
...@@ -786,6 +789,7 @@ namespace WindBot.Game.AI.Decks ...@@ -786,6 +789,7 @@ namespace WindBot.Game.AI.Decks
private bool PredaplantVerteAnacondaEffect() private bool PredaplantVerteAnacondaEffect()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
if (ActivateDescription == Util.GetStringId(CardId.PredaplantVerteAnaconda, 0)) if (ActivateDescription == Util.GetStringId(CardId.PredaplantVerteAnaconda, 0))
return false; return false;
FusionDestinyUsed = true; FusionDestinyUsed = true;
...@@ -858,6 +862,7 @@ namespace WindBot.Game.AI.Decks ...@@ -858,6 +862,7 @@ namespace WindBot.Game.AI.Decks
private bool DestinyHeroCelestialEffect() private bool DestinyHeroCelestialEffect()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
if (!Bot.HasInGraveyard(CardId.DestinyHeroDasher)) if (!Bot.HasInGraveyard(CardId.DestinyHeroDasher))
return false; return false;
AI.SelectCard(CardId.DestinyHeroDasher); AI.SelectCard(CardId.DestinyHeroDasher);
...@@ -971,6 +976,7 @@ namespace WindBot.Game.AI.Decks ...@@ -971,6 +976,7 @@ namespace WindBot.Game.AI.Decks
private bool VirtualWorldKyubiShenshenEffect() private bool VirtualWorldKyubiShenshenEffect()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
if (Card.Location == CardLocation.MonsterZone && Bot.HasInBanished(CardId.AquamancerOfTheSanctuary)) if (Card.Location == CardLocation.MonsterZone && Bot.HasInBanished(CardId.AquamancerOfTheSanctuary))
{ {
AI.SelectCard(CardId.AquamancerOfTheSanctuary); AI.SelectCard(CardId.AquamancerOfTheSanctuary);
......
...@@ -265,6 +265,7 @@ namespace WindBot.Game.AI.Decks ...@@ -265,6 +265,7 @@ namespace WindBot.Game.AI.Decks
prevent_used = false; prevent_used = false;
Linkuribohused = true; Linkuribohused = true;
Timelord_check = false; Timelord_check = false;
base.OnNewTurn();
} }
public override void OnNewPhase() public override void OnNewPhase()
{ {
......
...@@ -316,6 +316,7 @@ namespace WindBot.Game.AI.Decks ...@@ -316,6 +316,7 @@ namespace WindBot.Game.AI.Decks
big_attack = false; big_attack = false;
big_attack_used = false; big_attack_used = false;
soul_used = false; soul_used = false;
base.OnNewTurn();
} }
public int GetTotalATK(IList<ClientCard> list) public int GetTotalATK(IList<ClientCard> list)
{ {
...@@ -496,11 +497,13 @@ namespace WindBot.Game.AI.Decks ...@@ -496,11 +497,13 @@ namespace WindBot.Game.AI.Decks
{ {
if (Bot.LifePoints > 1500 && Duel.LastChainPlayer == 1) if (Bot.LifePoints > 1500 && Duel.LastChainPlayer == 1)
return true; return true;
if (DefaultOnlyHorusSpSummoning()) return false;
return false; return false;
} }
private bool ChainEnemy() private bool ChainEnemy()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
if (Util.GetLastChainCard() != null && if (Util.GetLastChainCard() != null &&
Util.GetLastChainCard().IsCode(CardId.UpstartGoblin)) Util.GetLastChainCard().IsCode(CardId.UpstartGoblin))
return false; return false;
...@@ -519,6 +522,7 @@ namespace WindBot.Game.AI.Decks ...@@ -519,6 +522,7 @@ namespace WindBot.Game.AI.Decks
private bool MaxxCeff() private bool MaxxCeff()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
return Duel.Player == 1; return Duel.Player == 1;
} }
/* /*
...@@ -1417,6 +1421,7 @@ namespace WindBot.Game.AI.Decks ...@@ -1417,6 +1421,7 @@ namespace WindBot.Game.AI.Decks
} }
else else
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
if (Bot.HasInMonstersZone(CardId.VentriloauistsClaraAndLucika)) if (Bot.HasInMonstersZone(CardId.VentriloauistsClaraAndLucika))
{ {
AI.SelectCard(CardId.VentriloauistsClaraAndLucika); AI.SelectCard(CardId.VentriloauistsClaraAndLucika);
......
This diff is collapsed.
...@@ -123,6 +123,7 @@ namespace WindBot.Game.AI.Decks ...@@ -123,6 +123,7 @@ namespace WindBot.Game.AI.Decks
{ {
BeastOLionUsed = false; BeastOLionUsed = false;
RedEyesFusionUsed = false; RedEyesFusionUsed = false;
base.OnNewTurn();
} }
public override CardPosition OnSelectPosition(int cardId, IList<CardPosition> positions) public override CardPosition OnSelectPosition(int cardId, IList<CardPosition> positions)
...@@ -198,6 +199,7 @@ namespace WindBot.Game.AI.Decks ...@@ -198,6 +199,7 @@ namespace WindBot.Game.AI.Decks
private bool TourGuideFromTheUnderworldSummon() private bool TourGuideFromTheUnderworldSummon()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
if (Bot.GetRemainingCount(CardId.TourGuideFromTheUnderworld, 2) == 0 && Bot.GetRemainingCount(CardId.Sangan, 2) == 0) if (Bot.GetRemainingCount(CardId.TourGuideFromTheUnderworld, 2) == 0 && Bot.GetRemainingCount(CardId.Sangan, 2) == 0)
return false; return false;
return true; return true;
...@@ -307,6 +309,7 @@ namespace WindBot.Game.AI.Decks ...@@ -307,6 +309,7 @@ namespace WindBot.Game.AI.Decks
private bool MagiciansSoulsEffect() private bool MagiciansSoulsEffect()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
if (Card.Location == CardLocation.Hand) if (Card.Location == CardLocation.Hand)
{ {
if (RedEyesFusionUsed) if (RedEyesFusionUsed)
...@@ -375,6 +378,7 @@ namespace WindBot.Game.AI.Decks ...@@ -375,6 +378,7 @@ namespace WindBot.Game.AI.Decks
private bool PredaplantVerteAnacondaEffect() private bool PredaplantVerteAnacondaEffect()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
if (ActivateDescription == Util.GetStringId(CardId.PredaplantVerteAnaconda, 0)) if (ActivateDescription == Util.GetStringId(CardId.PredaplantVerteAnaconda, 0))
return false; return false;
AI.SelectCard(CardId.RedEyesFusion); AI.SelectCard(CardId.RedEyesFusion);
......
...@@ -456,6 +456,7 @@ namespace WindBot.Game.AI.Decks ...@@ -456,6 +456,7 @@ namespace WindBot.Game.AI.Decks
private bool AssaultBeast() private bool AssaultBeast()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
if (!Bot.HasInSpellZone(CardId.AssaultModeActivate)) if (!Bot.HasInSpellZone(CardId.AssaultModeActivate))
return true; return true;
return false; return false;
......
This diff is collapsed.
...@@ -135,6 +135,7 @@ namespace WindBot.Game.AI.Decks ...@@ -135,6 +135,7 @@ namespace WindBot.Game.AI.Decks
private bool Ronintoadin() private bool Ronintoadin()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
List<ClientCard> monsters = Bot.GetGraveyardMonsters(); List<ClientCard> monsters = Bot.GetGraveyardMonsters();
if (monsters.Count > 2) if (monsters.Count > 2)
{ {
......
...@@ -128,6 +128,7 @@ namespace WindBot.Game.AI.Decks ...@@ -128,6 +128,7 @@ namespace WindBot.Game.AI.Decks
{ {
eater_eff = false; eater_eff = false;
CardOfDemiseeff_used = false; CardOfDemiseeff_used = false;
base.OnNewTurn();
} }
public override void OnNewPhase() public override void OnNewPhase()
...@@ -437,6 +438,7 @@ namespace WindBot.Game.AI.Decks ...@@ -437,6 +438,7 @@ namespace WindBot.Game.AI.Decks
private bool ThunderKingRaiOheff() private bool ThunderKingRaiOheff()
{ {
if (DefaultOnlyHorusSpSummoning()) return false;
if(Duel.SummoningCards.Count > 0) if(Duel.SummoningCards.Count > 0)
{ {
foreach(ClientCard m in Duel.SummoningCards) foreach(ClientCard m in Duel.SummoningCards)
...@@ -523,7 +525,7 @@ namespace WindBot.Game.AI.Decks ...@@ -523,7 +525,7 @@ namespace WindBot.Game.AI.Decks
targets.Add(e_c); targets.Add(e_c);
if (targets.Count >= 5) if (targets.Count >= 5)
{ {
AI.SelectCard(targets); AI.SelectMaterials(targets, HintMsg.Remove);
/*AI.SelectCard(new[] { /*AI.SelectCard(new[] {
CardId.BingirsuTheWorldChaliceWarrior, CardId.BingirsuTheWorldChaliceWarrior,
CardId.TopologicTrisbaena, CardId.TopologicTrisbaena,
...@@ -548,7 +550,7 @@ namespace WindBot.Game.AI.Decks ...@@ -548,7 +550,7 @@ namespace WindBot.Game.AI.Decks
targets.Add(s_c); targets.Add(s_c);
if (targets.Count >= 5) if (targets.Count >= 5)
{ {
AI.SelectCard(targets); AI.SelectMaterials(targets, HintMsg.Remove);
return true; return true;
} }
} }
...@@ -570,6 +572,7 @@ namespace WindBot.Game.AI.Decks ...@@ -570,6 +572,7 @@ namespace WindBot.Game.AI.Decks
private bool MetalSnakesp() private bool MetalSnakesp()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
if (ActivateDescription == Util.GetStringId(CardId.MetalSnake, 0) && !Bot.HasInMonstersZone(CardId.MetalSnake)) if (ActivateDescription == Util.GetStringId(CardId.MetalSnake, 0) && !Bot.HasInMonstersZone(CardId.MetalSnake))
{ {
if(Duel.Player == 1 && Duel.Phase >= DuelPhase.BattleStart ) if(Duel.Player == 1 && Duel.Phase >= DuelPhase.BattleStart )
......
...@@ -153,7 +153,7 @@ namespace WindBot.Game.AI.Decks ...@@ -153,7 +153,7 @@ namespace WindBot.Game.AI.Decks
{ {
// We should summon Horus the Black Flame Dragon LV6 if he can lvlup. // We should summon Horus the Black Flame Dragon LV6 if he can lvlup.
if (Enemy.GetMonsterCount() != 0 && !Util.IsAllEnemyBetterThanValue(2300 - 1, false)) if (Enemy.GetMonsterCount() != 0 && !Util.IsAllEnemyBetterThanValue(2300 - 1, false))
foreach (ClientCard card in Main.SummonableCards) foreach (ClientCard card in Duel.MainPhase.SummonableCards)
if (card.IsCode(11224103)) if (card.IsCode(11224103))
return false; return false;
......
This diff is collapsed.
This diff is collapsed.
...@@ -217,11 +217,12 @@ namespace WindBot.Game.AI.Decks ...@@ -217,11 +217,12 @@ namespace WindBot.Game.AI.Decks
JetSynchronUsed = false; JetSynchronUsed = false;
ScrapWyvernUsed = false; ScrapWyvernUsed = false;
MaskedChameleonUsed = false; MaskedChameleonUsed = false;
base.OnNewTurn();
} }
public override void OnChainEnd() public override void OnChainEnd()
{ {
base.OnChainEnd();
} }
public override CardPosition OnSelectPosition(int cardId, IList<CardPosition> positions) public override CardPosition OnSelectPosition(int cardId, IList<CardPosition> positions)
......
...@@ -274,6 +274,7 @@ namespace WindBot.Game.AI.Decks ...@@ -274,6 +274,7 @@ namespace WindBot.Game.AI.Decks
ShaddollSquamata_used = false; ShaddollSquamata_used = false;
ShaddollDragon_used = false; ShaddollDragon_used = false;
ShaddollHedgehog_used = false; ShaddollHedgehog_used = false;
base.OnNewTurn();
} }
private bool Luminasummon() private bool Luminasummon()
...@@ -290,6 +291,7 @@ namespace WindBot.Game.AI.Decks ...@@ -290,6 +291,7 @@ namespace WindBot.Game.AI.Decks
} }
private bool Luminaeff() private bool Luminaeff()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
if (Bot.HasInGraveyard(CardId.Raiden)) if (Bot.HasInGraveyard(CardId.Raiden))
{ {
AI.SelectCard(Useless_List()); AI.SelectCard(Useless_List());
...@@ -555,6 +557,7 @@ namespace WindBot.Game.AI.Decks ...@@ -555,6 +557,7 @@ namespace WindBot.Game.AI.Decks
private bool GlowUpBulbeff() private bool GlowUpBulbeff()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
IList<ClientCard> check = Bot.GetMonstersInExtraZone(); IList<ClientCard> check = Bot.GetMonstersInExtraZone();
foreach (ClientCard monster in check) foreach (ClientCard monster in check)
if (monster.HasType(CardType.Fusion)) return false; if (monster.HasType(CardType.Fusion)) return false;
...@@ -627,6 +630,7 @@ namespace WindBot.Game.AI.Decks ...@@ -627,6 +630,7 @@ namespace WindBot.Game.AI.Decks
private bool MaxxC() private bool MaxxC()
{ {
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
return Duel.Player == 1; return Duel.Player == 1;
} }
...@@ -977,6 +981,7 @@ namespace WindBot.Game.AI.Decks ...@@ -977,6 +981,7 @@ namespace WindBot.Game.AI.Decks
public bool Hand_act_eff() public bool Hand_act_eff()
{ {
//if (Card.IsCode(CardId.Urara) && Bot.HasInHand(CardId.LockBird) && Bot.HasInSpellZone(CardId.Re)) return false; //if (Card.IsCode(CardId.Urara) && Bot.HasInHand(CardId.LockBird) && Bot.HasInSpellZone(CardId.Re)) return false;
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
if (Card.IsCode(CardId.GhostOgre) && Card.Location == CardLocation.Hand && Bot.HasInMonstersZone(CardId.GhostOgre)) return false; if (Card.IsCode(CardId.GhostOgre) && Card.Location == CardLocation.Hand && Bot.HasInMonstersZone(CardId.GhostOgre)) return false;
return (Duel.LastChainPlayer == 1); return (Duel.LastChainPlayer == 1);
} }
...@@ -998,6 +1003,7 @@ namespace WindBot.Game.AI.Decks ...@@ -998,6 +1003,7 @@ namespace WindBot.Game.AI.Decks
if (Card.Location == CardLocation.Grave) if (Card.Location == CardLocation.Grave)
return true; return true;
if (Bot.LifePoints <= 1000) return false; if (Bot.LifePoints <= 1000) return false;
if (DefaultCheckWhetherCardIsNegated(Card)) return false;
ClientCard select = Util.GetBestEnemyCard(); ClientCard select = Util.GetBestEnemyCard();
if (select == null) return false; if (select == null) return false;
if(select!=null) if(select!=null)
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment