Commit 553b988e authored by 苍蓝's avatar 苍蓝

update 超可爱执行者

parent 2ad318ae
Pipeline #21303 passed with stage
in 4 minutes
<?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.6.1"/> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup> </startup>
</configuration> </configuration>
...@@ -24,6 +24,11 @@ Name=最强战旗 Deck=SaikyoBattleFlag Dialog=rd-d ...@@ -24,6 +24,11 @@ Name=最强战旗 Deck=SaikyoBattleFlag Dialog=rd-d
机械卡组。 机械卡组。
SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020 SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
!光天女
Name=光天女 Deck=Excutie Dialog=Excutie.zh-CN
强力的超可爱执行者卡组。
SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
!传说子 !传说子
Name=传说子 Deck=TheLegend Dialog=rd Name=传说子 Deck=TheLegend Dialog=rd
大量传说卡堆成的卡组。需勾选不检查卡组才能对战。 大量传说卡堆成的卡组。需勾选不检查卡组才能对战。
......
#created by ... #created by ...
#main #main
120120000 46986414
120120000 46986414
120120000 74677422
120170000 74677422
120170000 67300516
120110001 10802915
120110001 10802915
120155000 26202165
120194001 91646304
120194002 14558127
120194002 14558127
120194002 72291078
120194003 72291078
120194003 72291078
120194003 23434538
120151010 23434538
120151010 23434538
120110009 97631303
120110009 97631303
120110009 97631303
120170035 1845204
120170035 1845204
120120017 6172122
120120017 6172122
120120017 6172122
120194004 11827244
120151023 11827244
120151023 18144506
120151023 81439173
120181003 83764718
120181003 92353449
120181003 92353449
120151018 24224830
120151018 24224830
120194005 24224830
120194005 10045474
120194005 10045474
120150019 10045474
120150019 40605147
120150019 40605147
#extra #extra
!side 37818794
\ No newline at end of file 37818794
37818794
96334243
63519819
50588353
70369116
70369116
98978921
98978921
31226177
31226177
60303245
60303245
60303245
!side
#created by ...
#main
120231034
120231034
120231034
120231031
120231031
120231031
120231033
120231033
120231033
120231035
120235019
120235019
120235019
120231032
120231032
120231036
120231037
120231037
120231037
120223102
120226013
120226013
120199032
120199032
120199032
120222036
120222036
120222036
120231039
120231039
120231065
120231069
120238006
120238006
120198003
120231041
120231041
120231068
120231068
120235065
#extra
!side
#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 ... #created by ...
#main #main
120181011 8567955
120181011 8567955
120181011 8567955
120181001 89743495
120181001 89743495
120181001 27182739
120155015 27182739
120155015 27182739
120155015 53577438
120193002 53577438
120193002 53577438
120193002 16360142
120183002 16360142
120183002 16360142
120183002 80965043
120183024 80965043
120183024 80965043
120183030 52354896
120183030 52354896
120183030 12580477
120151010 14025912
120151010 14532163
120183031 14532163
120183031 35261759
120193003 35261759
120193003 35261759
120193003 57160136
120130039 57160136
120130039 57160136
120183054 70368879
120183054 70368879
120183054 70368879
120151023 81439173
120155060 93104632
120155060 93104632
120183062 8267140
120183063 41410651
120183063 36361633
120170061 36361633
120183064 36361633
#extra #extra
42632209
42632209
42632209
15248594
15248594
15248594
61399402
61399402
61399402
85692042
85692042
85692042
88021907
88021907
88021907
!side !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
120231034
120231034
120231034
120231031
120231031
120231031
120231033
120231033
120231033
120231035
120235019
120235019
120235019
120231032
120231032
120231036
120231037
120231037
120231037
120223102
120226013
120226013
120199032
120199032
120199032
120222036
120222036
120222036
120231039
120231039
120231065
120231069
120238006
120238006
120198003
120231041
120231041
120231068
120231068
120235065
#extra
!side
{
"welcome": [
"你好,我是光天女,为了保护世界的和平,我和我的伙伴们正在执行正义的使命。",
"超巨大财团的大小姐,光天女,来了!",
"我们的目标是保护这个美好的世界,为此我们不惜一切代价。",
"超技术的力量,为了正义而战!",
"我们是超可爱执行者,为了美好的世界而战!",
"AI功能正在测试中,遇到问题请及时反馈。"
],
"deckerror": [
"我的卡组需要{0}才能发挥最大威力。"
],
"duelstart": [
"超可爱执行者紧急出动!",
"为了正义而战!",
"超主流卡组?那可不是我的风格。",
"抄袭他人的卡组,怎么能称之为胜利呢?",
"我的卡组可不是那么好对付的。"
],
"newturn": [
"到我了,抽卡!",
"我的回合,抽卡!",
"我抽到5张卡。"
],
"endturn": [
"回合结束。",
"我的回合结束了。",
"这一回合,我又更接近胜利了。",
"轮到你了。",
"茶休时间~"
],
"directattack": [
"{0},直接攻击!",
"{0},直接攻击对手!",
"{0},这就是我的正义哦!",
"{0},攻击对手的生命值!",
"{0},直接攻击对手的生命值!",
"{0},通过直接攻击打倒对手!",
"{0},释放你的力量吧!",
"正义执行!",
"向对手展示你的力量吧,{0}!",
"接受制裁吧!{0},攻击!"
],
"attack": [
"{0},向那只{1}发起攻击!",
"{0},消灭罪恶!",
"这就是我的正义哦!",
"{0},对{1}降下制裁!",
"{0},冲向那只{1}!",
"{0},正义执行!"
],
"ondirectattack": [
"可恶……",
"不过是{0}而已!",
"正义无法执行了吗……"
],
"facedownmonstername": "怪兽",
"activate": [
"我发动{0}。",
"我使用{0}的效果。",
"我使用{0}的力量。"
],
"summon": [
"我召唤{0}。",
"出来吧,我的伙伴,{0}!",
"出现吧,{0}!",
"我召唤了美丽的{0}!",
"我召唤了强大的{0}!",
"我呼唤{0}参加战斗!",
"我呼唤出{0}。",
"让我召唤{0}。"
],
"setmonster": [
"我放置了一只怪兽。",
"我里侧表示放置了一只怪兽。"
],
"chaining": [
"看这里!我发动{0}!",
"我使用{0}的力量。",
"准备!我使用{0}!",
"看样子你忘了我的{0}!",
"你考虑过我有{0}吗?",
"不会让你得逞!我发动{0}!",
"我会用{0}打败你的!",
"你的邪恶行径必须受到制裁!{0}!",
]
}
...@@ -44,8 +44,7 @@ namespace WindBot.Game.AI ...@@ -44,8 +44,7 @@ namespace WindBot.Game.AI
public bool IsOneEnemyBetterThanValue(int value, bool onlyATK) public bool IsOneEnemyBetterThanValue(int value, bool onlyATK)
{ {
return Enemy.MonsterZone.GetMonsters() return Enemy.MonsterZone.GetMonsters()
// .Any(card => card.GetDefensePower() > value && (!onlyATK || card.IsAttack())); .Any(card => card.GetDefensePower() > value && (!onlyATK || card.IsAttack()));
.Any(card => card.GetDefensePower() > value && (!onlyATK ));
} }
public bool IsAllEnemyBetterThanValue(int value, bool onlyATK) public bool IsAllEnemyBetterThanValue(int value, bool onlyATK)
...@@ -425,7 +424,7 @@ namespace WindBot.Game.AI ...@@ -425,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)
......
...@@ -15,6 +15,10 @@ namespace WindBot.Game.AI ...@@ -15,6 +15,10 @@ namespace WindBot.Game.AI
(card.Controller == 0 && Enum.IsDefined(typeof(InvincibleBotMonster), card.Id) || (card.Controller == 0 && Enum.IsDefined(typeof(InvincibleBotMonster), card.Id) ||
card.Controller == 1 && Enum.IsDefined(typeof(InvincibleEnemyMonster), card.Id)); card.Controller == 1 && Enum.IsDefined(typeof(InvincibleEnemyMonster), card.Id));
} }
public static bool IsMonsterImmuneTrap(this ClientCard card)
{
return !card.IsDisabled() && Enum.IsDefined(typeof(ImmuneTrapMonster), card.Id);
}
/// <summary> /// <summary>
/// Is this monster is dangerous to attack? /// Is this monster is dangerous to attack?
...@@ -23,10 +27,7 @@ namespace WindBot.Game.AI ...@@ -23,10 +27,7 @@ namespace WindBot.Game.AI
{ {
return !card.IsDisabled() && Enum.IsDefined(typeof(DangerousMonster), card.Id); return !card.IsDisabled() && Enum.IsDefined(typeof(DangerousMonster), card.Id);
} }
public static bool IsMonsterImmuneTrap(this ClientCard card)
{
return !card.IsDisabled() && Enum.IsDefined(typeof(ImmuneTrapMonster), card.Id);
}
/// <summary> /// <summary>
/// Do this monster prevents activation of opponent's effect monsters in battle? /// Do this monster prevents activation of opponent's effect monsters in battle?
/// </summary> /// </summary>
......
...@@ -80,7 +80,137 @@ namespace WindBot.Game.AI.Decks ...@@ -80,7 +80,137 @@ namespace WindBot.Game.AI.Decks
AddExecutor(ExecutorType.Repos, 圣防Repos); AddExecutor(ExecutorType.Repos, 圣防Repos);
//AddExecutor(ExecutorType.Activate, DefaultDontChainMyself); //AddExecutor(ExecutorType.Activate, DefaultDontChainMyself);
} }
private List<int> HintMsgForEnemy = new List<int>
{
HintMsg.Release, HintMsg.Destroy, HintMsg.Remove, HintMsg.ToGrave, HintMsg.ReturnToHand, HintMsg.ToDeck,
HintMsg.FusionMaterial, HintMsg.SynchroMaterial, HintMsg.XyzMaterial, HintMsg.LinkMaterial, HintMsg.Disable
};
private List<int> HintMsgForDeck = new List<int>
{
HintMsg.SpSummon, HintMsg.ToGrave, HintMsg.Remove, HintMsg.AddToHand, HintMsg.FusionMaterial
};
private List<int> HintMsgForExtra = new List<int>
{
HintMsg.SpSummon, HintMsg.ToGrave, HintMsg.Remove, HintMsg.AddToHand, HintMsg.FusionMaterial
};
private List<int> HintMsgForSelf = new List<int>
{
HintMsg.Equip
};
private List<int> HintMsgForMaterial = new List<int>
{
HintMsg.FusionMaterial, HintMsg.SynchroMaterial, HintMsg.XyzMaterial, HintMsg.LinkMaterial, HintMsg.Release
};
private List<int> HintMsgForMaxSelect = new List<int>
{
HintMsg.SpSummon, HintMsg.ToGrave, HintMsg.AddToHand, HintMsg.FusionMaterial, HintMsg.Destroy, HintMsg.Equip ,HintMsg.Confirm
};
public override IList<ClientCard> OnSelectCard(IList<ClientCard> _cards, int min, int max, int hint, bool cancelable)
{
if (Duel.Phase == DuelPhase.BattleStart)
return null;
if (AI.HaveSelectedCards())
return null;
IList<ClientCard> selected = new List<ClientCard>();
IList<ClientCard> cards = new List<ClientCard>(_cards);
if (max > cards.Count)
max = cards.Count;
if (HintMsgForEnemy.Contains(hint))
{
IList<ClientCard> enemyCards = cards.Where(card => card.Controller == 1).ToList();
// select enemy's card first
while (enemyCards.Count > 0 && selected.Count < max)
{
ClientCard card = enemyCards[Program.Rand.Next(enemyCards.Count)];
selected.Add(card);
enemyCards.Remove(card);
cards.Remove(card);
}
}
if (HintMsgForDeck.Contains(hint))
{
IList<ClientCard> deckCards = cards.Where(card => card.Location == CardLocation.Deck).ToList();
// select deck's card first
while (deckCards.Count > 0 && selected.Count < max)
{
ClientCard card = deckCards[Program.Rand.Next(deckCards.Count)];
selected.Add(card);
deckCards.Remove(card);
cards.Remove(card);
}
}
if (HintMsgForExtra.Contains(hint))
{
IList<ClientCard> ExtraCards = cards.Where(card => card.Location == CardLocation.Extra).ToList();
// select extra's card first
while (ExtraCards.Count > 0 && selected.Count < max)
{
ClientCard card = ExtraCards[Program.Rand.Next(ExtraCards.Count)];
selected.Add(card);
ExtraCards.Remove(card);
cards.Remove(card);
}
}
if (HintMsgForSelf.Contains(hint))
{
IList<ClientCard> botCards = cards.Where(card => card.Controller == 0).ToList();
// select bot's card first
while (botCards.Count > 0 && selected.Count < max)
{
ClientCard card = botCards[Program.Rand.Next(botCards.Count)];
selected.Add(card);
botCards.Remove(card);
cards.Remove(card);
}
}
if (HintMsgForMaterial.Contains(hint))
{
IList<ClientCard> materials = cards.OrderBy(card => card.Attack).ToList();
// select low attack first
while (materials.Count > 0 && selected.Count < min)
{
ClientCard card = materials[0];
selected.Add(card);
materials.Remove(card);
cards.Remove(card);
}
}
// select random cards
while (selected.Count < min)
{
ClientCard card = cards[Program.Rand.Next(cards.Count)];
selected.Add(card);
cards.Remove(card);
}
if (HintMsgForMaxSelect.Contains(hint))
{
// select max cards
while (selected.Count < max)
{
ClientCard card = cards[Program.Rand.Next(cards.Count)];
selected.Add(card);
cards.Remove(card);
}
}
return selected;
}
private bool 大恐龙驾Effect() private bool 大恐龙驾Effect()
{ {
{ {
...@@ -135,54 +265,6 @@ namespace WindBot.Game.AI.Decks ...@@ -135,54 +265,6 @@ namespace WindBot.Game.AI.Decks
return true; return true;
} }
private List<int> HintMsgForEnemy = new List<int>
{
HintMsg.Release, HintMsg.Destroy, HintMsg.Remove, HintMsg.ToGrave, HintMsg.ReturnToHand, HintMsg.ToDeck,
HintMsg.FusionMaterial, HintMsg.SynchroMaterial, HintMsg.XyzMaterial, HintMsg.LinkMaterial, HintMsg.Disable
};
private List<int> HintMsgForMaxSelect = new List<int>
{
HintMsg.SpSummon, HintMsg.ToGrave, HintMsg.AddToHand, HintMsg.ToDeck, HintMsg.Destroy
};
public override IList<ClientCard> OnSelectCard(IList<ClientCard> _cards, int min, int max, int hint, bool cancelable)
{
if (Duel.Phase == DuelPhase.BattleStart)
return null;
if (AI.HaveSelectedCards())
return null;
IList<ClientCard> selected = new List<ClientCard>();
IList<ClientCard> cards = new List<ClientCard>(_cards);
if (max > cards.Count)
max = cards.Count;
if (HintMsgForEnemy.Contains(hint))
{
IList<ClientCard> enemyCards = cards.Where(card => card.Controller == 1).ToList();
// select enemy's card first
while (enemyCards.Count > 0 && selected.Count < max)
{
ClientCard card = enemyCards[Program.Rand.Next(enemyCards.Count)];
selected.Add(card);
enemyCards.Remove(card);
cards.Remove(card);
}
}
if (HintMsgForMaxSelect.Contains(hint))
{
// select max cards
while (selected.Count < max)
{
ClientCard card = cards[Program.Rand.Next(cards.Count)];
selected.Add(card);
cards.Remove(card);
}
}
return selected;
}
public override bool OnSelectHand() public override bool OnSelectHand()
{ {
// go first // go first
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -14,6 +14,21 @@ namespace WindBot.Game.AI.Decks ...@@ -14,6 +14,21 @@ namespace WindBot.Game.AI.Decks
: base(ai, duel) : base(ai, duel)
{ {
AddExecutor(ExecutorType.Activate, _CardId.黑洞, 黑洞Effect); AddExecutor(ExecutorType.Activate, _CardId.黑洞, 黑洞Effect);
AddExecutor(ExecutorType.Activate, _CardId.傲慢之壶);
AddExecutor(ExecutorType.Activate, _CardId.大风暴, 大风暴Effect);
AddExecutor(ExecutorType.Activate, _CardId.大灾害, 大风暴Effect);
AddExecutor(ExecutorType.Activate, _CardId.魔法筒, 魔法筒Effect);
AddExecutor(ExecutorType.Activate, _CardId.炸甲, 炸甲Effect);
AddExecutor(ExecutorType.Activate, _CardId.落穴, 落穴Effect);
AddExecutor(ExecutorType.Activate, _CardId.圣塔, 圣塔Effect);
AddExecutor(ExecutorType.Activate, _CardId.捕获, 圣塔Effect);
AddExecutor(ExecutorType.Activate, _CardId.遮盖罩, 圣塔Effect);
AddExecutor(ExecutorType.Activate, _CardId.亚龙地狱, 亚龙地狱Effect);
AddExecutor(ExecutorType.Activate, _CardId.激流葬, 激流葬Effect);
AddExecutor(ExecutorType.Activate, _CardId.真空湮灭, 真空湮灭Effect);
AddExecutor(ExecutorType.Activate, _CardId.圣防, 圣防Effect);
AddExecutor(ExecutorType.Activate, _CardId.暗黑释放, 圣防Effect);
AddExecutor(ExecutorType.Activate, ImFeelingLucky); AddExecutor(ExecutorType.Activate, ImFeelingLucky);
AddExecutor(ExecutorType.SpSummon, ImFeelingLucky); AddExecutor(ExecutorType.SpSummon, ImFeelingLucky);
AddExecutor(ExecutorType.SpSummon, ImFeelingUnlucky); AddExecutor(ExecutorType.SpSummon, ImFeelingUnlucky);
...@@ -23,13 +38,9 @@ namespace WindBot.Game.AI.Decks ...@@ -23,13 +38,9 @@ namespace WindBot.Game.AI.Decks
AddExecutor(ExecutorType.Activate, _CardId.苍救降, 苍救降Effect); AddExecutor(ExecutorType.Activate, _CardId.苍救降, 苍救降Effect);
AddExecutor(ExecutorType.Activate, _CardId.传说战士, 传说战士Effect); AddExecutor(ExecutorType.Activate, _CardId.传说战士, 传说战士Effect);
AddExecutor(ExecutorType.Activate, _CardId.海龙骑士, 海龙骑士Effect); AddExecutor(ExecutorType.Activate, _CardId.海龙骑士, 海龙骑士Effect);
AddExecutor(ExecutorType.Activate, _CardId.大风暴, 大风暴Effect);
AddExecutor(ExecutorType.Activate, _CardId.魔法筒, 魔法筒Effect);
AddExecutor(ExecutorType.Activate, _CardId.炸甲, 炸甲Effect);
AddExecutor(ExecutorType.Activate, _CardId.落穴, 落穴Effect);
AddExecutor(ExecutorType.Activate, _CardId.激流葬, 激流葬Effect);
AddExecutor(ExecutorType.Activate, _CardId.圣防, 圣防Effect);
AddExecutor(ExecutorType.Activate, _CardId.暗黑释放, 圣防Effect);
AddExecutor(ExecutorType.Activate, _CardId.手枪龙, 手枪龙Effect); AddExecutor(ExecutorType.Activate, _CardId.手枪龙, 手枪龙Effect);
AddExecutor(ExecutorType.Activate, _CardId.最强战旗, 最强战旗Eff); AddExecutor(ExecutorType.Activate, _CardId.最强战旗, 最强战旗Eff);
//AddExecutor(ExecutorType.Activate, _CardId.升阵, 装备act); //AddExecutor(ExecutorType.Activate, _CardId.升阵, 装备act);
...@@ -104,6 +115,7 @@ namespace WindBot.Game.AI.Decks ...@@ -104,6 +115,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor(ExecutorType.Summon, _CardId.伟大魔兽, 伟大魔兽Sum); AddExecutor(ExecutorType.Summon, _CardId.伟大魔兽, 伟大魔兽Sum);
AddExecutor(ExecutorType.MonsterSet, _CardId.千年盾, DefaultMonsterSummon); AddExecutor(ExecutorType.MonsterSet, _CardId.千年盾, DefaultMonsterSummon);
AddExecutor(ExecutorType.Activate, _CardId.死供, 死供Effect); AddExecutor(ExecutorType.Activate, _CardId.死供, 死供Effect);
AddExecutor(ExecutorType.Activate, _CardId.活杀, 活杀Effect);
AddExecutor(ExecutorType.Activate, _CardId.耳语妖精, 耳语妖精Effect); AddExecutor(ExecutorType.Activate, _CardId.耳语妖精, 耳语妖精Effect);
AddExecutor(ExecutorType.Repos, DefaultMonsterRepos); AddExecutor(ExecutorType.Repos, DefaultMonsterRepos);
AddExecutor(ExecutorType.Repos, 圣防Repos); AddExecutor(ExecutorType.Repos, 圣防Repos);
...@@ -242,7 +254,10 @@ namespace WindBot.Game.AI.Decks ...@@ -242,7 +254,10 @@ namespace WindBot.Game.AI.Decks
return selected; return selected;
} }
public override bool OnSelectHand()
{
return true;
}
public override int OnSelectOption(IList<int> options) public override int OnSelectOption(IList<int> options)
{ {
return Program.Rand.Next(options.Count); return Program.Rand.Next(options.Count);
......
This diff is collapsed.
This diff is collapsed.
...@@ -102,10 +102,11 @@ namespace WindBot.Game.AI.Decks ...@@ -102,10 +102,11 @@ namespace WindBot.Game.AI.Decks
AddExecutor(ExecutorType.MonsterSet, CardId.瞄准鹰); AddExecutor(ExecutorType.MonsterSet, CardId.瞄准鹰);
AddExecutor(ExecutorType.MonsterSet, CardId.双角兽); AddExecutor(ExecutorType.MonsterSet, CardId.双角兽);
AddExecutor(ExecutorType.Activate, CardId.世纪末兽机界, DefaultField); AddExecutor(ExecutorType.Activate, CardId.世纪末兽机界, DefaultField);
AddExecutor(ExecutorType.Activate, CardId.兽之拳); AddExecutor(ExecutorType.Activate, CardId.兽之拳, 兽之拳Effect);
AddExecutor(ExecutorType.Activate, CardId.左迁, 左迁1Effect); AddExecutor(ExecutorType.Activate, CardId.左迁, 左迁1Effect);
AddExecutor(ExecutorType.Activate, CardId.减俸); AddExecutor(ExecutorType.Activate, CardId.减俸);
AddExecutor(ExecutorType.Activate, CardId.左迁,左迁2Effect); AddExecutor(ExecutorType.Activate, CardId.左迁,左迁2Effect);
AddExecutor(ExecutorType.Activate, CardId.兽之拳);
AddExecutor(ExecutorType.Activate, CardId.冻结,冻结Effect); AddExecutor(ExecutorType.Activate, CardId.冻结,冻结Effect);
AddExecutor(ExecutorType.Activate, _CardId.魔法筒, 魔法筒Effect); AddExecutor(ExecutorType.Activate, _CardId.魔法筒, 魔法筒Effect);
AddExecutor(ExecutorType.Activate, _CardId.炸甲, 炸甲Effect); AddExecutor(ExecutorType.Activate, _CardId.炸甲, 炸甲Effect);
......
This diff is collapsed.
This diff is collapsed.
...@@ -25,20 +25,30 @@ namespace WindBot.Game.AI ...@@ -25,20 +25,30 @@ namespace WindBot.Game.AI
public const int 武枪 = 120231052; public const int 武枪 = 120231052;
public const int 连击龙 = 120110001; public const int 连击龙 = 120110001;
public const int 活杀= 120199055;
public const int 疾风弹 = 120203028;
public const int HMD = 120130041;
public const int 死苏 = 120194004; public const int 死苏 = 120194004;
public const int 死苏2 = 120195004; public const int 死苏2 = 120195004;
public const int 死供 = 120151023; public const int 死供 = 120151023;
public const int 强欲之壶 = 120181003; public const int 强欲之壶 = 120181003;
public const int 傲慢之壶 = 120238006;
public const int 黑洞 = 120231069; public const int 黑洞 = 120231069;
public const int 大风暴 = 120229003; public const int 大风暴 = 120229003;
public const int 魔法筒 = 120232005; public const int 魔法筒 = 120232005;
public const int 圣防 = 120198003; public const int 圣防 = 120198003;
public const int 激流葬 = 1202223105; public const int 激流葬 = 1202223105;
public const int 大灾害 = 120238028;
public const int 炸甲 = 120194005; public const int 炸甲 = 120194005;
public const int 万能地雷 = 120234005;
public const int 万能地雷2 = 120237001;
public const int 落穴 = 120150019; public const int 落穴 = 120150019;
public const int 暗黑释放 = 120105013; public const int 暗黑释放 = 120105013;
public const int 疾风弹 = 120203028; public const int 真空湮灭 = 120216026;
public const int HMD = 120130041; public const int 亚龙地狱 = 120231068;
public const int 圣塔 = 120208065;
public const int 捕获 = 120231041;
public const int 遮盖罩 = 120227029;
public const int 人造人 = 120155000; public const int 人造人 = 120155000;
public const int 狼人 = 120214004; public const int 狼人 = 120214004;
...@@ -542,18 +552,35 @@ namespace WindBot.Game.AI ...@@ -542,18 +552,35 @@ namespace WindBot.Game.AI
} }
protected bool 圣防Repos() protected bool 圣防Repos()
{ {
if (Enemy.Graveyard.GetMatchingCardsCount(card => (card.Race & (int)CardRace.SpellCaster) > 0) >= 4 && Enemy.GetSpellCountWithoutField() >= 1
&& !Bot.HasInMonstersZone(new[]{_CardId.人造人, _CardId.狼人, _CardId.武枪, _CardId.幻影之龙}) && Enemy.Graveyard.GetMatchingCardsCount(card => card.IsCode(_CardId.暗黑释放)) < 3) if (Enemy.GetSpellCountWithoutField() >= 1 && !Bot.HasInMonstersZone(new[]{_CardId.人造人, _CardId.狼人, _CardId.武枪, _CardId.幻影之龙}) && !Bot.HasDefendingMonster())
{ {
if (Bot.MonsterZone.GetMatchingCardsCount(card => card.IsAttack() && card.Level > 5) >= 2 && !Bot.HasDefendingMonster()) List<int> LegendTrap = new List<int>{
_CardId.圣防,
_CardId.落穴,
_CardId.炸甲,
_CardId.魔法筒,
_CardId.万能地雷,
_CardId.万能地雷2,
_CardId.大灾害,
_CardId.激流葬};
if (Bot.MonsterZone.GetMatchingCardsCount(card => card.IsAttack() && card.Level > 5) >= 2
&& Enemy.Graveyard.GetMatchingCardsCount(card => (card.Race & (int)CardRace.SpellCaster) > 0) >= 4
&& Enemy.Graveyard.GetMatchingCardsCount(card => card.IsCode(_CardId.暗黑释放)) < 3)
return true;
if (Bot.MonsterZone.GetMatchingCardsCount(card => card.IsAttack()
&& card.Attack >= Enemy.LifePoints) >= 2
&& Enemy.GetMonsterCount() == 0
&& Enemy.Graveyard.GetMatchingCardsCount(card => card.IsCode(LegendTrap)) == 0)
return true; return true;
} }
return false; return false;
} }
protected bool 装备Effect() protected bool 装备Effect()
{ {
//if (Executors.Any(exec => exec.Type == Type && exec.CardId == Card.Id)) if (Executors.Any(exec => exec.Type == Type && exec.CardId == Card.Id))
// return false; return false;
if (!Card.HasType(CardType.Equip)) if (!Card.HasType(CardType.Equip))
return false; return false;
List<ClientCard> cards = new List<ClientCard>(Bot.MonsterZone.GetMonsters()); List<ClientCard> cards = new List<ClientCard>(Bot.MonsterZone.GetMonsters());
...@@ -636,7 +663,7 @@ namespace WindBot.Game.AI ...@@ -636,7 +663,7 @@ namespace WindBot.Game.AI
} }
protected bool 大风暴Effect() protected bool 大风暴Effect()
{ {
return Enemy.GetSpellCount() - Bot.GetSpellCount() >= 2; return Enemy.GetSpellCount() - Bot.GetSpellCount() >= 1;
} }
protected bool HMDEffect() protected bool HMDEffect()
{ {
...@@ -644,11 +671,23 @@ namespace WindBot.Game.AI ...@@ -644,11 +671,23 @@ namespace WindBot.Game.AI
} }
protected bool 黑洞Effect() protected bool 黑洞Effect()
{ {
return Util.IsOneEnemyBetter() && Util.GetTotalAttackingMonsterAttack(1) >= 3400 && !Enemy.HasInMonstersZone(_CardId.终焰魔神); return (Util.IsOneEnemyBetter() && Util.GetTotalAttackingMonsterAttack(1) >= 3000 && !Enemy.HasInMonstersZone(_CardId.终焰魔神) ) || Enemy.GetMonsterCount() == 3;
} }
protected bool 疾风弹Effect() protected bool 疾风弹Effect()
{ {
return Util.GetTotalAttackingMonsterAttack(1) >= 3400 && !Enemy.HasInMonstersZone(_CardId.终焰魔神); return (Util.GetTotalAttackingMonsterAttack(1) >= 3000 && !Enemy.HasInMonstersZone(_CardId.终焰魔神)) || Enemy.GetMonsterCount() == 3 ;
}
protected bool 活杀Effect()
{
if (Duel.Turn == 1)
{
return false;
}
if (Util.IsOneEnemyBetter() && Util.GetBestAttack(Enemy) - Util.GetBestAttack(Bot) <= 300 * (Enemy.GetHandCount()+ Bot.GetHandCount()))
{ AI.SelectCard(Bot.GetMonsters().GetHighestAttackMonster());
return true;
}
return false;
} }
protected bool 死供Effect() protected bool 死供Effect()
{ {
...@@ -686,6 +725,49 @@ namespace WindBot.Game.AI ...@@ -686,6 +725,49 @@ namespace WindBot.Game.AI
if (Util.GetTotalAttackingMonsterAttack(1) - Util.GetTotalAttackingMonsterAttack(0) > Bot.LifePoints && !Bot.HasDefendingMonster()) return true; if (Util.GetTotalAttackingMonsterAttack(1) - Util.GetTotalAttackingMonsterAttack(0) > Bot.LifePoints && !Bot.HasDefendingMonster()) return true;
return false; return false;
} }
protected bool 真空湮灭Effect()
{
IList<ClientCard> targets = new List<ClientCard>();
foreach (ClientCard card in Enemy.MonsterZone.GetMonsters())
{
if (card.Level >= 7)
targets.Add(card);
if (card.Level >= 5)
targets.Add(card);
if (card.Level >= 3)
targets.Add(card);
else
targets.Add(card);
}
AI.SelectCard(targets);
return true;
}
protected bool 圣塔Effect()
{
foreach (ClientCard mon in Enemy.GetMonsters())
{
if (mon.Level >= 9)
{ AI.SelectCard(mon); return true;}
if (mon.Level >= 8)
{ AI.SelectCard(mon); return true;}
if (mon.Level >= 7)
{ AI.SelectCard(mon); return true; }
if (mon.Level >= 6)
{ AI.SelectCard(mon); return true; }
}
return false;
}
protected bool 亚龙地狱Effect()
{
foreach (ClientCard n in Enemy.GetMonsters())
if (n.Level >= 7)
return true;
else if (n.Level == 6 && Bot.MonsterZone.GetMatchingCardsCount(card => card.Level == 6) < Enemy.MonsterZone.GetMatchingCardsCount(card => card.Level == 6))
return true;
else if (Enemy.MonsterZone.GetMatchingCardsCount(card => card.Level == 6) == 3)
return true;
return false;
}
protected bool 落穴Effect() protected bool 落穴Effect()
{ {
foreach (ClientCard n in Duel.LastSummonedCards) foreach (ClientCard n in Duel.LastSummonedCards)
...@@ -697,7 +779,7 @@ namespace WindBot.Game.AI ...@@ -697,7 +779,7 @@ namespace WindBot.Game.AI
} }
protected bool 激流葬Effect() protected bool 激流葬Effect()
{ {
return !Util.HasChainedTrap(0) && Util.IsAllEnemyBetter(true) && (Enemy.GetMonsters().GetImmuneTrapMonster() == null); return !Util.HasChainedTrap(0) && Util.IsAllEnemyBetter(true) && (Enemy.GetMonsters().GetImmuneTrapMonster() == null) || Enemy.GetMonsterCount() == 3;
} }
protected bool 炸甲Effect() protected bool 炸甲Effect()
...@@ -1112,13 +1194,26 @@ namespace WindBot.Game.AI ...@@ -1112,13 +1194,26 @@ namespace WindBot.Game.AI
protected bool 伟大魔兽Sum() protected bool 伟大魔兽Sum()
{ {
int tributecount = 1; int tributecount = 1;
int maxAttack = 0;
for (int k = 0; k < 7; ++k) for (int k = 0; k < 7; ++k)
{ {
ClientCard tributeCard2 = Bot.MonsterZone[k]; ClientCard tributeCard2 = Bot.MonsterZone[k];
if (tributeCard2 == null) continue; if (tributeCard2 == null) continue;
if (tributeCard2.GetDefensePower() > Card.Attack && tributeCard2.Attack > 1500) if (tributeCard2.Attack > maxAttack && tributeCard2.Attack > 1600)
tributecount--; {
maxAttack = tributeCard2.Attack;
}
} }
for (int k = 0; k < 7; ++k)
{
ClientCard tributeCard2 = Bot.MonsterZone[k];
if (tributeCard2 == null) continue;
if (tributeCard2.Attack == maxAttack)
{
tributecount--;
AI.SelectMaterials(tributeCard2);
}
}
return tributecount <= 0; return tributecount <= 0;
} }
/// <summary> /// <summary>
......
...@@ -25,21 +25,22 @@ ...@@ -25,21 +25,22 @@
Heart_eartHDragon = 97403510, Heart_eartHDragon = 97403510,
DaigustoSphreeze = 29552709, DaigustoSphreeze = 29552709,
} }
public enum ImmuneTrapMonster public enum ImmuneTrapMonster
{ {
幻龙重骑 = 120155022, 幻龙重骑 = 120155022,
天帝龙树 = 120150011, 天帝龙树 = 120150011,
大连击龙 = 120210002, 大连击龙 = 120210002,
超魔机神 = 120150002, 超魔机神 = 120150002,
超魔机神2 = 120231005, 超魔机神2 = 120231005,
超魔辉兽 = 120217002, 超魔辉兽 = 120217002,
灰霸炎神 = 120170015, 灰霸炎神 = 120170015,
大恐龙驾 = 120151007, 大恐龙驾 = 120151007,
终焰魔神 = 120231007, 终焰魔神 = 120231007,
焰魔神 = 120231011, 焰魔神 = 120231011,
三日月之剑豪将军 = 120196033, 三日月之剑豪将军 = 120196033,
新种掠夺萝卜 = 120228035, 新种掠夺萝卜 = 120228035,
武枪 = 120231052, 武枪 = 120231052,
极乐鹰巨人 = 120227001, 极乐鹰巨人 = 120227001,
} }
} }
...@@ -106,6 +106,99 @@ ...@@ -106,6 +106,99 @@
AdamancipatorRisenDragite = 9464441, AdamancipatorRisenDragite = 9464441,
TeardroptheRikkaQueen = 33779875, TeardroptheRikkaQueen = 33779875,
CeruleanSkyFire = 54828837, CeruleanSkyFire = 54828837,
SacredBeastAwakening = 53701259 SacredBeastAwakening = 53701259,
GrandSpiritualArtIchirin = 38057522,
DualAvatarFeetArmoredUnGyo = 7631534,
VirtualWorldKyubiShenshen = 92519087,
VirtualWorldGateChuche = 13364097,
DragunityKnightAreadbhair = 88234821,
AiwasstheMagistusSpellSpirit = 35877582,
OneirostheDreamMirrorErlking = 35187185,
PlunderPatrollshipBrann = 94253655,
PlunderPatrollshipMoerk = 20248754,
PlunderPatrollshipLys = 18832779,
HollowGiants = 15462014,
GrozaTyrantofThunder = 45420955,
SpringansCaptainSargas = 29601381,
S_ForceOrrafist = 95974848,
AncientWarriors_RebelliousLuFeng = 82791472,
OneirostheDreamMirrorTormentor = 37678339,
SacredTreeBeastHyperyton = 9349094,
S_ForceJustify = 35334193,
UnderworldGoddessoftheClosedWorld = 98127546,
VampireVoivode = 4918855,
NekrozofAreadbhair = 39468724,
NekrozofUnicore = 89463537,
BenghalancertheResurgent = 73345237,
UrsarcticSeptentrion = 53087962,
TheIrisSwordsoul = 62849088,
AntihumanIntelligenceME_PSY_YA = 58844135,
MagikeyMechmortar_Garesglasser = 45877457,
ShootingMajesticStarDragon = 40939228,
StellarWindWolfrayet = 3322931,
ChronomalyVimana = 2609443,
CyberdarknessDragon = 18967507,
ClearWingSynchroDragon = 82044279,
CrystalClearWingSynchroDragon = 59765225,
BaronnedeFleur = 84815190,
Lyrilusc_EnsemblueRobin = 72971064,
Number4StealthKragen = 67557908,
Floowandereeze_Snowl = 53212882,
Floowandereeze_Empen = 80611581,
MasqueradetheBlazingDragon = 6855503,
DestinyHERO_DestroyerPhoenixEnforcer = 60461804,
SwordsoulGrandmaster_Chixiao = 69248256,
ZoroatheMagistusConflagrantCalamity = 95911373,
MasterflareHyperion = 63101468,
FallenSanctuary = 90312154,
MyutantBeast = 34695290,
MyutantArsenal = 7574904,
MyutantUltimus = 6182103,
Underdog = 5779502,
IcejadeKosmochlor = 3355732,
IllusionofChaos = 12266229,
SwordsoulSinisterSovereign_QixingLongyuan = 47710198,
DDDDeviserKingDeusMachinex = 46593546,
IcejadeErosion = 46593546,
NordicRelicSvalinn = 64797746,
OceanDragonLord_Kairyu_Shin = 23931679,
MarincessAquaArgonaut = 20934852,
MirrorjadetheIcebladeDragon = 44146295,
WitchcrafterVice_Madame = 9603252,
Therion_King_Regulus = 10604644,
StarvingVenomPredapowerFusionDragon = 39915560,
DinomorphiaRexterm = 92798873,
ExosistersMagnifica = 59242457,
IcejadeCurse = 83670388,
MamonakatheVaylantzUnited = 40680521,
LabrynthLabyrinth = 33407125,
RunickFountain = 92107604,
SprightRed = 75922381,
SprightCarrot = 2311090,
RikkaKonkon = 76869711,
PowerToolBraverDragon = 63265554,
MagikeyDeity_Ashtartu = 26988374,
RainbowOverdragon = 37440988,
TheBystialAlbaLos = 69120785,
KashtiraFenrir = 32909498,
MitsutheInsectNinja = 67282505,
VeratheVernusylphGoddess = 55125728,
TearlamentsRulkallos = 84330567,
Black_WingedAssaultDragon = 73218989,
BrandedBeast = 32756828,
GraphaDragonOverlordofDarkWorld = 39552584,
EpurrelyBeauty = 98049934,
ExpurrelyNoir = 83827392,
BeetrooperScaleBomber = 39041550,
EvigishkiNeremanas = 88926295,
ArktosXII_ChronochasmVaylantz = 50687050,
IcejadeGymirAegirine = 86682165,
KashtiraArise_Heart = 48626373,
LaevateinGeneraiderBossofShadows = 74615388,
SynchroZone = 60306277,
BystialDisPater = 27572350,
DespianLuluwalilith = 53971455,
FirewallDragonSingularity = 21637210,
BrandedEtude = 45675980
} }
} }
This diff is collapsed.
...@@ -25,7 +25,9 @@ ...@@ -25,7 +25,9 @@
DaigustoSphreez = 29552709, DaigustoSphreez = 29552709,
Number92HearteartHDragon = 97403510, Number92HearteartHDragon = 97403510,
NumberC96DarkStorm = 77205367, NumberC96DarkStorm = 77205367,
Number54LionHeart = 54366836 Number54LionHeart = 54366836,
Number2NinjaShadowMosquito = 32453837,
OhimetheManifestedMikanko = 81260679
} }
/// <summary> /// <summary>
/// Cards that are invincible to battle. /// Cards that are invincible to battle.
...@@ -93,6 +95,12 @@ ...@@ -93,6 +95,12 @@
GoukiTheGiantOgre = 47946130, GoukiTheGiantOgre = 47946130,
BorrelswordDragon = 85289965, BorrelswordDragon = 85289965,
NumberF0UtopicFutureDragon = 26973555, NumberF0UtopicFutureDragon = 26973555,
BorrelendDragon = 98630720 BorrelendDragon = 98630720,
MimickingMan_EaterBug = 72427512,
ShiningPiecephilia = 49776811,
BrigrandtheGloryDragon = 34848821,
AmazonessQueen = 15951532,
Number2NinjaShadowMosquito = 32453837,
OhimetheManifestedMikanko = 81260679
} }
} }
...@@ -11,5 +11,10 @@ ...@@ -11,5 +11,10 @@
SamuraiDestroyer = 40509732, SamuraiDestroyer = 40509732,
ArmadesKeeperOfBoundaries = 88033975, ArmadesKeeperOfBoundaries = 88033975,
NumberS39UtopiaTheLightning = 56832966, NumberS39UtopiaTheLightning = 56832966,
DualAvatarEmpoweredKonGyo = 33026283,
GGolemRockHammer = 98875863,
WishDragon = 64583600,
ChaosWitch = 30327674,
FissioningMotherSpider = 34034150
} }
} }
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