Commit d4c4dd00 authored by nanahira's avatar nanahira

Merge branch 'master' into rd

parents 8ab639a1 028710cb
stages:
- build
- deploy
variables:
GIT_DEPTH: "1"
CONTAINER_TEST_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE:latest
build:
stage: build
dependencies: []
tags:
- linux
image: mono
script:
- sed -i '/download.mono-project.com/d' /etc/apt/sources.list /etc/apt/sources.list.d/*
- apt update && apt -y install p7zip-full
- msbuild /p:Configuration=Release /p:TargetFrameworkVersion=v4.6
- mv -f bin/Release WindBot
- rm -rf WindBot/WindBot.exe.config
- mv -f BotWrapper/bin/Release/Bot.exe .
- mv -f BotWrapper/bin/Release/bot.conf .
- mkdir dist
- 7z a -mx9 dist/WindBot.7z WindBot Bot.exe bot.conf
artifacts:
paths:
- dist/
docker:
stage: build
tags:
- docker
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build --pull --no-cache -t $CONTAINER_TEST_IMAGE .
- docker push $CONTAINER_TEST_IMAGE
upload_to_minio:
stage: deploy
dependencies:
- build
tags:
- linux
image: python
script:
- pip install -U -i https://mirrors.aliyun.com/pypi/simple/ awscli
- aws s3 --endpoint=https://minio.mycard.moe:9000 sync dist/ s3://mycard/windbot
only:
- master
deploy_docker:
stage: deploy
tags:
- docker
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker pull $CONTAINER_TEST_IMAGE
- docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE
- docker push $CONTAINER_RELEASE_IMAGE
only:
- master
...@@ -2,7 +2,11 @@ ...@@ -2,7 +2,11 @@
# !name # !name
# command # command
# description # description
<<<<<<< HEAD
# flags (avail flags: SUPPORT_MASTER_RULE_3, SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020) # flags (avail flags: SUPPORT_MASTER_RULE_3, SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020)
=======
# flags (avail flags: SUPPORT_MASTER_RULE_3, SUPPORT_NEW_MASTER_RULE, SUPPORT_MASTER_RULE_2020)
>>>>>>> 795ac990ff54118181873e013ffab43cc4ec9998
!随机-非常简单 !随机-非常简单
Random=AI_LV1 Random=AI_LV1
...@@ -71,7 +75,7 @@ AI_LV3 SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020 ...@@ -71,7 +75,7 @@ AI_LV3 SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
!尼亚-淘气仙星 !尼亚-淘气仙星
Name=尼亚 Deck=Trickstar Dialog=near.zh-CN Name=尼亚 Deck=Trickstar Dialog=near.zh-CN
淘气仙星卡组。 旧式淘气仙星卡组。
AI_LV3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020 AI_LV3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
!尼亚-幻变骚灵 !尼亚-幻变骚灵
...@@ -79,6 +83,24 @@ Name=尼亚 Deck=Altergeist Dialog=near.zh-CN ...@@ -79,6 +83,24 @@ Name=尼亚 Deck=Altergeist Dialog=near.zh-CN
幻变骚灵卡组。 幻变骚灵卡组。
AI_LV3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020 AI_LV3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
<<<<<<< HEAD
=======
!复制梁龙-闪刀姬
Name=复制梁龙 Deck=SkyStriker Dialog=anothercopy.zh-CN
旧式闪刀姬卡组。
AI_LV3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
!复制梁龙-自奏圣乐
Name=复制梁龙 Deck=Orcust Dialog=anothercopy.zh-CN
旧式自奏圣乐卡组。
AI_LV3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
!复制梁龙-转生炎兽
Name=复制梁龙 Deck=Salamangreat Dialog=anothercopy.zh-CN
转生炎兽卡组。
AI_LV3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
>>>>>>> 795ac990ff54118181873e013ffab43cc4ec9998
!永远之魂-削血 !永远之魂-削血
Name=永远之魂 Deck=Burn Dialog=soul.zh-CN Name=永远之魂 Deck=Burn Dialog=soul.zh-CN
老式削血卡组。 老式削血卡组。
...@@ -104,6 +126,11 @@ Name=悠悠王 Deck=MokeyMokeyKing Dialog=mokey.zh-CN ...@@ -104,6 +126,11 @@ Name=悠悠王 Deck=MokeyMokeyKing Dialog=mokey.zh-CN
大沙包。 大沙包。
AI_LV1 SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020 AI_LV1 SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
!兔明-微风
Name=兔明 Deck=PureWinds Dialog=zh-CN
风属性卡组。
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组成的卡组。
...@@ -177,6 +204,7 @@ AI_LV3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020 ...@@ -177,6 +204,7 @@ AI_LV3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
!報社鬥士 !報社鬥士
Name=報社鬥士 Deck=GrenMajuThunderBoarder Dialog=kiwi.zh-TW Name=報社鬥士 Deck=GrenMajuThunderBoarder Dialog=kiwi.zh-TW
红莲雷王滑板卡组。 红莲雷王滑板卡组。
<<<<<<< HEAD
AI_LV3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020 AI_LV3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
!彩音-黑魔术师 !彩音-黑魔术师
...@@ -193,8 +221,16 @@ AI_LV3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020 ...@@ -193,8 +221,16 @@ AI_LV3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
Name=朱露咲浅羽 Deck=Salamangreat Dialog=nlch.zh-CN Name=朱露咲浅羽 Deck=Salamangreat Dialog=nlch.zh-CN
浅羽的香喷喷曲奇。 浅羽的香喷喷曲奇。
AI_LV3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020 AI_LV3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
=======
AI_ANTI_META SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
>>>>>>> 795ac990ff54118181873e013ffab43cc4ec9998
!朱露咲浅羽-真红眼 !朱露咲浅羽-真红眼
Name=朱露咲浅羽 Deck=Dragun Dialog=nlch.zh-CN Name=朱露咲浅羽 Deck=Dragun Dialog=nlch.zh-CN
超魔导真红眼龙骑士卡组。 超魔导真红眼龙骑士卡组。
AI_LV3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020 AI_LV3 SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
!玻璃女巫
Name=玻璃女巫 Deck=Witchcraft Dialog=verre.zh-CN
魔女术卡组。
AI_LV3 SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
#created by ...
#main
8567955
8567955
8567955
89743495
89743495
27182739
27182739
27182739
53577438
53577438
53577438
16360142
16360142
16360142
80965043
80965043
80965043
52354896
52354896
12580477
14025912
14532163
14532163
35261759
35261759
35261759
57160136
57160136
57160136
70368879
70368879
70368879
81439173
93104632
93104632
8267140
41410651
36361633
36361633
36361633
#extra
42632209
42632209
42632209
15248594
15248594
15248594
61399402
61399402
61399402
85692042
85692042
85692042
88021907
88021907
88021907
!side
#created by ...
#main
71007216
71007216
71007216
81275020
71175527
71175527
71175527
43722862
43722862
43722862
53932291
53932291
65277087
65277087
65277087
54455435
54455435
54455435
91662792
91662792
91662792
16725505
70117860
70117860
70117860
12580477
27980138
27980138
58577036
83764718
8267140
25789292
67723438
67723438
8608979
8608979
8608979
24590232
40605147
84749824
#extra
27315304
50954680
50954680
50954680
82044279
82044279
14577226
29552709
29552709
64880894
84766279
42110604
70913714
30674956
90512490
!side
19420830
19420830
19420830
94145021
94145021
94145021
25789292
25789292
43711255
43711255
43711255
58921041
58921041
23002292
23002292
#created by ...
#main
65367484
65367484
65367484
56308388
56308388
56308388
67696066
82496097
82496097
82496097
74578720
74578720
74578720
19891131
19891131
19891131
70368879
70368879
70368879
81439173
10877309
10877309
10877309
81670445
81670445
81670445
18678554
18678554
18678554
26708437
26708437
26708437
57319935
57319935
98827725
98827725
98827725
76587747
76587747
76587747
#extra
56832966
56832966
56832966
86532744
86532744
86532744
84013237
84013237
84013237
55285840
55285840
55285840
59208943
59208943
59208943
!side
#created by ...
#main
49036338
71074418
21522601
84523092
84523092
21744288
21744288
21744288
95245544
95245544
95245544
14558127
38814750
38814750
38814750
23434538
59851535
64756282
64756282
10805153
11110587
11110587
14532163
14532163
49238328
49238328
49238328
54693926
54693926
57916305
57916305
57916305
58577036
58577036
58577036
73594093
83301414
83301414
83301414
24224830
24224830
24224830
56894757
65681983
65681983
70226289
13758665
19673561
40252269
40252269
83289866
83289866
83289866
87769556
10045474
10045474
10045474
55072170
94553671
94553671
#extra
27548199
5041348
5041348
74586817
98558751
85289965
38342335
2857636
2857636
8802510
50588353
60303245
94259633
94259633
94259633
!side
65681983
40252269
...@@ -21,7 +21,8 @@ ...@@ -21,7 +21,8 @@
"消失吧,杂鱼" "消失吧,杂鱼"
], ],
"ondirectattack": [ "ondirectattack": [
"爸爸,饶命" "爸爸,饶命",
"恐怖如斯"
], ],
"facedownmonstername": "怪兽", "facedownmonstername": "怪兽",
"activate": [ "activate": [
......
{
"welcome": [
"啊~~让我再睡一会嘛~",
"你要加入公会吗?",
"AI功能正在测试中,遇到问题请及时反馈。"
],
"deckerror": [
"我的卡组里{0}不能用,我回去睡觉了。"
],
"duelstart": [
"好困……",
"啊呀,对面看上去好厉害的样子。"
],
"newturn": [
"我的回合,抽卡!",
"魔力补充!"
],
"endturn": [
"不想干活怎么办……",
"就这样吧,该你了。"
],
"directattack": [
"{0},直接攻击!",
"不过如此嘛,直接攻击!",
"快走开,我要回去睡觉了。",
],
"attack": [
"{0},攻击{1}!",
"{0},替我打倒{1}!"
],
"ondirectattack": [
"啊啊……",
"啊啊啊……",
"{0}好可怕啊……",
"我累了……"
],
"facedownmonstername": "怪兽",
"activate": [
"{0}的效果发动!"
],
"summon": [
"召唤{0}!",
"出来吧,{0}!",
"{0},来帮我一下。"
],
"setmonster": [
"……"
],
"chaining": [
"发动{0}!",
"等一下,我发动{0}。",
"要不是有{0},我都快睡着了。"
]
}
...@@ -14,4 +14,5 @@ COPY --from=builder /windbot /windbot ...@@ -14,4 +14,5 @@ COPY --from=builder /windbot /windbot
WORKDIR /windbot WORKDIR /windbot
EXPOSE 2399 EXPOSE 2399
CMD [ "mono", "/windbot/WindBot.exe", "ServerMode=true", "ServerPort=2399" ] ENTRYPOINT ["mono", "./WindBot.exe"]
CMD [ "ServerMode=true", "ServerPort=2399" ]
...@@ -324,12 +324,7 @@ namespace WindBot.Game.AI.Decks ...@@ -324,12 +324,7 @@ 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>(); List<int> list = new List<int> { 0, 1, 2, 3, 4 };
list.Add(0);
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);
int n = list.Count; int n = list.Count;
while (n-- > 1) while (n-- > 1)
{ {
......
...@@ -49,7 +49,7 @@ namespace WindBot.Game.AI.Decks ...@@ -49,7 +49,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor(ExecutorType.Activate, CardId.DupeFrog, DupeFrog); AddExecutor(ExecutorType.Activate, CardId.DupeFrog, DupeFrog);
AddExecutor(ExecutorType.Activate, CardId.FlipFlopFrog, FlipFlopFrog); AddExecutor(ExecutorType.Activate, CardId.FlipFlopFrog, FlipFlopFrog);
AddExecutor(ExecutorType.Activate, CardId.Ronintoadin, Ronintoadin); AddExecutor(ExecutorType.Activate, CardId.Ronintoadin, Ronintoadin);
AddExecutor(ExecutorType.Activate, CardId.TreebornFrog); AddExecutor(ExecutorType.Activate, CardId.TreebornFrog, TreebornFrog);
AddExecutor(ExecutorType.Activate, CardId.Unifrog); AddExecutor(ExecutorType.Activate, CardId.Unifrog);
AddExecutor(ExecutorType.Summon, CardId.CryomancerOfTheIceBarrier, SummonFrog); AddExecutor(ExecutorType.Summon, CardId.CryomancerOfTheIceBarrier, SummonFrog);
...@@ -83,6 +83,19 @@ namespace WindBot.Game.AI.Decks ...@@ -83,6 +83,19 @@ namespace WindBot.Game.AI.Decks
private int m_swapFrogSummoned; private int m_swapFrogSummoned;
private int m_flipFlopFrogSummoned; private int m_flipFlopFrogSummoned;
private int m_treebornFrogCount = 0;
public override void OnNewTurn()
{
m_treebornFrogCount = 0;
base.OnNewTurn();
}
private bool TreebornFrog()
{
m_treebornFrogCount++;
return m_treebornFrogCount <= 5;
}
private bool SwapFrogSummon() private bool SwapFrogSummon()
{ {
......
...@@ -230,6 +230,9 @@ namespace WindBot.Game.AI.Decks ...@@ -230,6 +230,9 @@ namespace WindBot.Game.AI.Decks
} }
private bool UnendingNightmareeff() private bool UnendingNightmareeff()
{ {
if (Card.IsDisabled()){
return false;
}
ClientCard card = null; ClientCard card = null;
foreach(ClientCard check in Enemy.GetSpells()) foreach(ClientCard check in Enemy.GetSpells())
{ {
...@@ -724,4 +727,4 @@ namespace WindBot.Game.AI.Decks ...@@ -724,4 +727,4 @@ namespace WindBot.Game.AI.Decks
return true; return true;
} }
} }
} }
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
...@@ -58,8 +58,8 @@ namespace WindBot.Game.AI.Decks ...@@ -58,8 +58,8 @@ namespace WindBot.Game.AI.Decks
public SkyStrikerExecutor(GameAI ai, Duel duel) public SkyStrikerExecutor(GameAI ai, Duel duel)
: base(ai, duel) : base(ai, duel)
{ {
AddExecutor(ExecutorType.Activate, CardId.AshBlossom, DefaultTrap); AddExecutor(ExecutorType.Activate, CardId.AshBlossom, DefaultAshBlossomAndJoyousSpring);
AddExecutor(ExecutorType.Activate, CardId.GhostRabbit, DefaultTrap); AddExecutor(ExecutorType.Activate, CardId.GhostRabbit, DefaultGhostOgreAndSnowRabbit);
AddExecutor(ExecutorType.Activate, CardId.EffectVeiler, DefaultBreakthroughSkill); AddExecutor(ExecutorType.Activate, CardId.EffectVeiler, DefaultBreakthroughSkill);
AddExecutor(ExecutorType.Activate, CardId.SolemnWarning, DefaultSolemnWarning); AddExecutor(ExecutorType.Activate, CardId.SolemnWarning, DefaultSolemnWarning);
AddExecutor(ExecutorType.Activate, CardId.SolemnJudgment, DefaultSolemnJudgment); AddExecutor(ExecutorType.Activate, CardId.SolemnJudgment, DefaultSolemnJudgment);
......
using System;
using YGOSharp.OCGWrapper.Enums;
using System.Collections.Generic;
using System.Diagnostics;
using WindBot;
using WindBot.Game;
using WindBot.Game.AI;
using System.Linq;
using System.Reflection;
namespace WindBot.Game.AI.Decks
{
[Deck("TimeThief", "AI_Timethief")]
public class TimeThiefExecutor : DefaultExecutor
{
public class Monsters
{
//monsters
public const int TimeThiefWinder = 56308388;
public const int TimeThiefBezelShip = 82496079;
public const int TimeThiefCronocorder = 74578720;
public const int TimeThiefRegulator = 19891131;
public const int PhotonTrasher = 65367484;
public const int PerformTrickClown = 67696066;
}
public class Spells
{
// spells
public const int UpstartGoblin = 70368879;
public const int Raigeki = 12580477;
public const int FoolishBurial = 81439173;
public const int TimeThiefStartup = 10877309;
public const int TimeThiefHack = 81670445;
}
public class Traps
{
//traps
public const int XyzReborn = 26708437;
public const int XyzExtreme = 57319935;
public const int TimeThiefRetrograte = 76587747;
public const int PhantomKnightsShade = 98827725;
public const int TimeThiefFlyBack = 18678554;
}
public class XYZs
{
//xyz
public const int TimeThiefRedoer = 55285840;
public const int TimeThiefPerpetua = 59208943;
public const int CrazyBox = 42421606;
}
public TimeThiefExecutor(GameAI ai, Duel duel)
: base(ai, duel)
{
// executors
//Spell activate
AddExecutor(ExecutorType.Activate,Spells.UpstartGoblin);
AddExecutor(ExecutorType.Activate,Spells.FoolishBurial,FoolishBurialTarget);
AddExecutor(ExecutorType.Activate,Spells.TimeThiefStartup,TimeThiefStartupEffect);
AddExecutor(ExecutorType.Activate,Spells.TimeThiefHack);
// trap executors set
AddExecutor(ExecutorType.SpellSet,Traps.XyzExtreme);
AddExecutor(ExecutorType.SpellSet,Traps.XyzReborn);
AddExecutor(ExecutorType.SpellSet,Traps.PhantomKnightsShade);
AddExecutor(ExecutorType.SpellSet,Traps.TimeThiefRetrograte);
AddExecutor(ExecutorType.SpellSet,Traps.TimeThiefFlyBack);
//normal summons
AddExecutor(ExecutorType.Summon,Monsters.TimeThiefRegulator );
AddExecutor(ExecutorType.SpSummon, Monsters.PhotonTrasher, SummonToDef );
AddExecutor(ExecutorType.Summon,Monsters.TimeThiefWinder );
AddExecutor(ExecutorType.Summon,Monsters.TimeThiefBezelShip );
AddExecutor(ExecutorType.Summon,Monsters.PerformTrickClown );
AddExecutor(ExecutorType.Summon,Monsters.TimeThiefCronocorder );
//xyz summons
AddExecutor(ExecutorType.SpSummon,XYZs.TimeThiefRedoer);
AddExecutor(ExecutorType.SpSummon,XYZs.TimeThiefPerpetua);
// activate trap
AddExecutor(ExecutorType.Activate,Traps.PhantomKnightsShade);
AddExecutor(ExecutorType.Activate,Traps.XyzExtreme , XyzExtremeEffect);
AddExecutor(ExecutorType.Activate,Traps.XyzReborn , XyzRebornEffect);
AddExecutor(ExecutorType.Activate,Traps.TimeThiefRetrograte , RetrograteEffect);
AddExecutor(ExecutorType.Activate,Traps.TimeThiefFlyBack );
//xyz effects
AddExecutor(ExecutorType.Activate,XYZs.TimeThiefRedoer,RedoerEffect);
AddExecutor(ExecutorType.Activate,XYZs.TimeThiefPerpetua , PerpertuaEffect);
//monster effects
AddExecutor(ExecutorType.Activate,Monsters.TimeThiefRegulator , RegulatorEffect);
AddExecutor(ExecutorType.Activate,Monsters.TimeThiefWinder);
AddExecutor(ExecutorType.Activate,Monsters.TimeThiefCronocorder);
AddExecutor(ExecutorType.Activate,Monsters.PerformTrickClown, TrickClownEffect);
AddExecutor(ExecutorType.Activate,Monsters.TimeThiefBezelShip);
}
private bool SummonToDef()
{
AI.SelectPosition(CardPosition.Defence);
return true;
}
private bool RegulatorEffect()
{
if (Card.Location == CardLocation.MonsterZone)
{
AI.SelectCard(Monsters.TimeThiefCronocorder);
AI.SelectCard(Monsters.TimeThiefWinder);
return true;
}
if (Card.Location == CardLocation.Grave)
{
return true;
}
return false;
}
private bool PerpertuaEffect()
{
if (Bot.HasInGraveyard(XYZs.TimeThiefRedoer))
{
AI.SelectCard(XYZs.TimeThiefRedoer);
return true;
}
if (Bot.HasInMonstersZone(XYZs.TimeThiefRedoer))
{
AI.SelectCard(Monsters.TimeThiefBezelShip);
AI.SelectNextCard(XYZs.TimeThiefRedoer);
return true;
}
return false;
}
private int _totalAttack;
private int _totalBotAttack;
private bool RedoerEffect()
{
List<ClientCard> enemy = Enemy.GetMonstersInMainZone();
List<int> units = Card.Overlays;
if (Duel.Phase == DuelPhase.Standby && (AI.Executor.Util.GetStringId(XYZs.TimeThiefRedoer,0) ==
ActivateDescription))
{
return true;
}
try
{
if (Bot.HasInSpellZone(Traps.XyzReborn))
{
return false;
}
if (Bot.HasInSpellZone(Traps.XyzExtreme))
{
return false;
}
for (int i = 0; i < enemy.Count; i++)
{
_totalAttack += enemy[i].Attack;
}
foreach (var t in Bot.GetMonsters())
{
_totalBotAttack += t.Attack;
}
if (_totalAttack > Bot.LifePoints + _totalBotAttack)
{
return false;
}
foreach (var t in enemy)
{
if (t.Attack < 2400 || !t.IsAttack()) continue;
try
{
AI.SelectCard(t.Id);
AI.SelectCard(t.Id);
}
catch{}
return true;
}
}
catch{}
if (Bot.UnderAttack)
{
//AI.SelectCard(Util.GetBestEnemyMonster());
return true;
}
return false;
}
private bool RetrograteEffect()
{
if (Card.Owner== 1)
{
return true;
}
return false;
}
private bool XyzRebornEffect()
{
if (Bot.HasInGraveyard(XYZs.TimeThiefRedoer))
{
AI.SelectCard(XYZs.TimeThiefRedoer);
return true;
}
return true;
}
//function
private bool XyzExtremeEffect()
{
AI.SelectCard(XYZs.CrazyBox);
return true;
}
private bool TimeThiefStartupEffect()
{
if (Card.Location == CardLocation.Hand)
{
if (Bot.HasInHand(Monsters.TimeThiefRegulator) && !(Bot.GetMonsterCount() > 0))
{
AI.SelectCard(Monsters.TimeThiefRegulator);
return true;
}
if(Bot.HasInHand(Monsters.TimeThiefWinder) && Bot.GetMonsterCount()>1)
{
AI.SelectCard(Monsters.TimeThiefWinder);
return true;
}
return true;
}
if (Card.Location == CardLocation.Grave)
{
AI.SelectCard(Monsters.TimeThiefCronocorder);
AI.SelectCard(Spells.TimeThiefHack);
AI.SelectCard(Traps.TimeThiefFlyBack);
return true;
}
return false;
}
private bool FoolishBurialTarget()
{
AI.SelectCard(Monsters.PerformTrickClown);
return true;
}
private bool TrickClownEffect()
{
if (Bot.LifePoints <= 1000)
{
return false;
}
AI.SelectPosition(CardPosition.FaceUpDefence);
return true;
}
}
}
...@@ -193,12 +193,7 @@ namespace WindBot.Game.AI.Decks ...@@ -193,12 +193,7 @@ namespace WindBot.Game.AI.Decks
public int SelectSTPlace() public int SelectSTPlace()
{ {
List<int> list = new List<int>(); List<int> list = new List<int> { 0, 1, 2, 3, 4 };
list.Add(0);
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);
int n = list.Count; int n = list.Count;
while (n-- > 1) while (n-- > 1)
{ {
......
This diff is collapsed.
...@@ -38,12 +38,15 @@ namespace WindBot.Game.AI ...@@ -38,12 +38,15 @@ namespace WindBot.Game.AI
public const int CosmicCyclone = 8267140; public const int CosmicCyclone = 8267140;
public const int ChickenGame = 67616300; public const int ChickenGame = 67616300;
public const int SantaClaws = 46565218;
public const int CastelTheSkyblasterMusketeer = 82633039; public const int CastelTheSkyblasterMusketeer = 82633039;
public const int CrystalWingSynchroDragon = 50954680; public const int CrystalWingSynchroDragon = 50954680;
public const int NumberS39UtopiaTheLightning = 56832966; public const int NumberS39UtopiaTheLightning = 56832966;
public const int Number39Utopia = 84013237; public const int Number39Utopia = 84013237;
public const int UltimayaTzolkin = 1686814; public const int UltimayaTzolkin = 1686814;
public const int MekkKnightCrusadiaAstram = 21887175; public const int MekkKnightCrusadiaAstram = 21887175;
public const int HamonLordofStrikingThunder = 32491822;
public const int MoonMirrorShield = 19508728; public const int MoonMirrorShield = 19508728;
public const int PhantomKnightsFogBlade = 25542642; public const int PhantomKnightsFogBlade = 25542642;
...@@ -87,6 +90,7 @@ namespace WindBot.Game.AI ...@@ -87,6 +90,7 @@ namespace WindBot.Game.AI
: base(ai, duel) : base(ai, duel)
{ {
AddExecutor(ExecutorType.Activate, _CardId.ChickenGame, DefaultChickenGame); AddExecutor(ExecutorType.Activate, _CardId.ChickenGame, DefaultChickenGame);
AddExecutor(ExecutorType.Activate, _CardId.SantaClaws);
} }
/// <summary> /// <summary>
...@@ -197,6 +201,9 @@ namespace WindBot.Game.AI ...@@ -197,6 +201,9 @@ namespace WindBot.Game.AI
if (defender.IsCode(_CardId.UltimayaTzolkin) && !defender.IsDisabled() && Enemy.GetMonsters().Any(monster => !monster.Equals(defender) && monster.HasType(CardType.Synchro))) if (defender.IsCode(_CardId.UltimayaTzolkin) && !defender.IsDisabled() && Enemy.GetMonsters().Any(monster => !monster.Equals(defender) && monster.HasType(CardType.Synchro)))
return false; return false;
if (Enemy.GetMonsters().Any(monster => !monster.Equals(defender) && monster.IsCode(_CardId.HamonLordofStrikingThunder) && !monster.IsDisabled() && monster.IsDefense()))
return false;
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;
......
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
ElShaddollConstruct = 20366274, ElShaddollConstruct = 20366274,
ZushintheSleepingGiant = 67547370, ZushintheSleepingGiant = 67547370,
Heart_eartHDragon = 97403510, Heart_eartHDragon = 97403510,
DaigustoSphreeze = 29552709,
} }
} }
...@@ -82,6 +82,30 @@ ...@@ -82,6 +82,30 @@
InspectorBoarder = 15397015, InspectorBoarder = 15397015,
Mashoudou = 76375976, Mashoudou = 76375976,
EternalSoul = 48680970, EternalSoul = 48680970,
MarincessBattleOcean = 91027843 MarincessBattleOcean = 91027843,
TopologicZeroboros = 66403530,
GladiatorBeastDomitianus = 33652635,
SerzielWatcheroftheEvilEye = 82466274,
ZerrzielRuleroftheEvilEyed = 17739335,
GorgonEmpressoftheEvilEyed = 29357687,
UnchainedSoulofRage = 67680512,
DracoBerserkeroftheTenyi = 5041348,
NidhoggGeneraiderBossofIce = 49275969,
UtgardaGeneraiderBossofDelusion = 744887,
FrodiGeneraiderBossofSwords = 40998517,
HoarrGeneraiderBossofRumbling = 68199168,
GodPhoenixGearfried = 22091647,
BrotherhoodoftheFireFistEland = 61472381,
PredaplantVerteAnaconda = 70369116,
RedSupernovaDragon = 99585850,
NumberF0UtopicFutureDragon = 26973555,
InvokedAugoeides = 97300502,
DragonmaidStrahl = 24799107,
RavenousCrocodragonArchethys = 87188910,
AdamancipatorRisenRaptite = 73079836,
AdamancipatorRisenDragite = 9464441,
TeardroptheRikkaQueen = 33779875,
CeruleanSkyFire = 54828837,
SacredBeastAwakening = 53701259
} }
} }
...@@ -64,6 +64,8 @@ ...@@ -64,6 +64,8 @@
NumberF0UtopicFutureFutureSlash = 43490025, NumberF0UtopicFutureFutureSlash = 43490025,
NumberF0UtopicFuture = 65305468, NumberF0UtopicFuture = 65305468,
GoukiTheGiantOgre = 47946130, GoukiTheGiantOgre = 47946130,
BorrelswordDragon = 85289965 BorrelswordDragon = 85289965,
NumberF0UtopicFutureDragon = 26973555,
BorrelendDragon = 98630720
} }
} }
...@@ -44,6 +44,13 @@ ...@@ -44,6 +44,13 @@
PaladinofDarkDragon = 71408082, PaladinofDarkDragon = 71408082,
PaladinofPhotonDragon = 85346853, PaladinofPhotonDragon = 85346853,
TwinPhotonLizard = 29455728, TwinPhotonLizard = 29455728,
TimeThiefRegulator = 19891131,
MathmechNabla = 53577438,
NidhoggGeneraiderBossofIce = 49275969,
HoarrGeneraiderBossofRumbling = 68199168,
RedFamiliar = 8372133,
AccesscodeTalker = 86066372,
ChaosSummoningBeast = 27439792,
CosmoBrain = 85679527, CosmoBrain = 85679527,
ShiranuiSolitaire = 94801854, ShiranuiSolitaire = 94801854,
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
CXyzSimontheGreatMoralLeader = 41147577, CXyzSimontheGreatMoralLeader = 41147577,
PaleozoicAnomalocaris = 61307542, PaleozoicAnomalocaris = 61307542,
PaleozoicOpabinia = 37649320, PaleozoicOpabinia = 37649320,
BorreloadDragon = 31833038 BorreloadDragon = 31833038,
BorrelendDragon = 98630720
} }
} }
...@@ -49,5 +49,6 @@ ...@@ -49,5 +49,6 @@
Blackwing_FullArmoredWing = 54082269, Blackwing_FullArmoredWing = 54082269,
DragunofRedEyes = 37818794, DragunofRedEyes = 37818794,
RedEyesBDragon = 74677422, // sometimes the name of DragunofRedEyes will be changed to RedEyesBDragon RedEyesBDragon = 74677422, // sometimes the name of DragunofRedEyes will be changed to RedEyesBDragon
TheArrivalCyberseIgnister = 11738489
} }
} }
...@@ -251,6 +251,11 @@ namespace WindBot.Game ...@@ -251,6 +251,11 @@ namespace WindBot.Game
return (Attribute & (int)attribute) != 0; return (Attribute & (int)attribute) != 0;
} }
public bool HasRace(CardRace race)
{
return (Race & (int)race) != 0;
}
public bool HasSetcode(int setcode) public bool HasSetcode(int setcode)
{ {
if (Data == null) return false; if (Data == null) return false;
......
...@@ -530,14 +530,17 @@ namespace WindBot.Game ...@@ -530,14 +530,17 @@ namespace WindBot.Game
int final = _duel.Fields[player].LifePoints - packet.ReadInt32(); int final = _duel.Fields[player].LifePoints - packet.ReadInt32();
if (final < 0) final = 0; if (final < 0) final = 0;
if (_debug) if (_debug)
Logger.WriteLine("(" + player.ToString() + " got damage , LifePoint left= " + final.ToString() + ")"); Logger.WriteLine("(" + player.ToString() + " got damage , LifePoint left = " + final.ToString() + ")");
_duel.Fields[player].LifePoints = final; _duel.Fields[player].LifePoints = final;
} }
private void OnRecover(BinaryReader packet) private void OnRecover(BinaryReader packet)
{ {
int player = GetLocalPlayer(packet.ReadByte()); int player = GetLocalPlayer(packet.ReadByte());
_duel.Fields[player].LifePoints += packet.ReadInt32(); int final = _duel.Fields[player].LifePoints + packet.ReadInt32();
if (_debug)
Logger.WriteLine("(" + player.ToString() + " got healed , LifePoint left = " + final.ToString() + ")");
_duel.Fields[player].LifePoints = final;
} }
private void OnLpUpdate(BinaryReader packet) private void OnLpUpdate(BinaryReader packet)
...@@ -691,12 +694,14 @@ namespace WindBot.Game ...@@ -691,12 +694,14 @@ namespace WindBot.Game
private void OnChaining(BinaryReader packet) private void OnChaining(BinaryReader packet)
{ {
packet.ReadInt32(); // card id int cardId = packet.ReadInt32();
int pcc = GetLocalPlayer(packet.ReadByte()); int pcc = GetLocalPlayer(packet.ReadByte());
int pcl = packet.ReadByte(); int pcl = packet.ReadByte();
int pcs = packet.ReadSByte(); int pcs = packet.ReadSByte();
int subs = packet.ReadSByte(); int subs = packet.ReadSByte();
ClientCard card = _duel.GetCard(pcc, pcl, pcs, subs); ClientCard card = _duel.GetCard(pcc, pcl, pcs, subs);
if (card.Id == 0)
card.SetId(cardId);
int cc = GetLocalPlayer(packet.ReadByte()); int cc = GetLocalPlayer(packet.ReadByte());
if (_debug) if (_debug)
if (card != null) Logger.WriteLine("(" + cc.ToString() + " 's " + (card.Name ?? "UnKnowCard") + " activate effect)"); if (card != null) Logger.WriteLine("(" + cc.ToString() + " 's " + (card.Name ?? "UnKnowCard") + " activate effect)");
......
...@@ -130,6 +130,11 @@ WindBot can run as a "server", provide a http interface to create bot. ...@@ -130,6 +130,11 @@ WindBot can run as a "server", provide a http interface to create bot.
* Nekroz * Nekroz
### AI Template Generator
A Java program which generate executor code from deck, made by Levyaton.
https://github.com/Levyaton/WindbotTemplateGenerator
### Server mode ### Server mode
WindBot can run as a "server", provide a http interface to create bot. WindBot can run as a "server", provide a http interface to create bot.
......
...@@ -68,6 +68,8 @@ ...@@ -68,6 +68,8 @@
<Compile Include="Game\AI\DecksManager.cs" /> <Compile Include="Game\AI\DecksManager.cs" />
<Compile Include="Game\AI\Decks\AltergeistExecutor.cs" /> <Compile Include="Game\AI\Decks\AltergeistExecutor.cs" />
<Compile Include="Game\AI\Decks\BlackwingExecutor.cs" /> <Compile Include="Game\AI\Decks\BlackwingExecutor.cs" />
<Compile Include="Game\AI\Decks\MathMechExecutor.cs" />
<Compile Include="Game\AI\Decks\PureWindsExecutor.cs" />
<Compile Include="Game\AI\Decks\DragunExecutor.cs" /> <Compile Include="Game\AI\Decks\DragunExecutor.cs" />
<Compile Include="Game\AI\Decks\Level8Executor.cs" /> <Compile Include="Game\AI\Decks\Level8Executor.cs" />
<Compile Include="Game\AI\Decks\SalamangreatExecutor.cs" /> <Compile Include="Game\AI\Decks\SalamangreatExecutor.cs" />
...@@ -77,6 +79,7 @@ ...@@ -77,6 +79,7 @@
<Compile Include="Game\AI\Decks\SkyStrikerExecutor.cs" /> <Compile Include="Game\AI\Decks\SkyStrikerExecutor.cs" />
<Compile Include="Game\AI\Decks\MokeyMokeyKingExecutor.cs" /> <Compile Include="Game\AI\Decks\MokeyMokeyKingExecutor.cs" />
<Compile Include="Game\AI\Decks\MokeyMokeyExecutor.cs" /> <Compile Include="Game\AI\Decks\MokeyMokeyExecutor.cs" />
<Compile Include="Game\AI\Decks\TimeThiefExecutor.cs" />
<Compile Include="Game\AI\Decks\ToadallyAwesomeExecutor.cs" /> <Compile Include="Game\AI\Decks\ToadallyAwesomeExecutor.cs" />
<Compile Include="Game\AI\Decks\NekrozExecutor.cs" /> <Compile Include="Game\AI\Decks\NekrozExecutor.cs" />
<Compile Include="Game\AI\Decks\GravekeeperExecutor.cs" /> <Compile Include="Game\AI\Decks\GravekeeperExecutor.cs" />
...@@ -94,6 +97,7 @@ ...@@ -94,6 +97,7 @@
<Compile Include="Game\AI\Decks\QliphortExecutor.cs" /> <Compile Include="Game\AI\Decks\QliphortExecutor.cs" />
<Compile Include="Game\AI\Decks\ST1732Executor.cs" /> <Compile Include="Game\AI\Decks\ST1732Executor.cs" />
<Compile Include="Game\AI\Decks\TrickstarExecutor.cs" /> <Compile Include="Game\AI\Decks\TrickstarExecutor.cs" />
<Compile Include="Game\AI\Decks\WitchcraftExecutor.cs" />
<Compile Include="Game\AI\Decks\YosenjuExecutor.cs" /> <Compile Include="Game\AI\Decks\YosenjuExecutor.cs" />
<Compile Include="Game\AI\Decks\DragunityExecutor.cs" /> <Compile Include="Game\AI\Decks\DragunityExecutor.cs" />
<Compile Include="Game\AI\Decks\FrogExecutor.cs" /> <Compile Include="Game\AI\Decks\FrogExecutor.cs" />
......
...@@ -22,7 +22,7 @@ namespace WindBot ...@@ -22,7 +22,7 @@ namespace WindBot
Host = "127.0.0.1"; Host = "127.0.0.1";
Port = 7911; Port = 7911;
HostInfo = ""; HostInfo = "";
Version = 0x1350; Version = 0x1352;
Hand = 0; Hand = 0;
Debug = false; Debug = false;
Chat = true; Chat = true;
......
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