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

update 超可爱执行者

parent 2ad318ae
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
......@@ -24,6 +24,11 @@ Name=最强战旗 Deck=SaikyoBattleFlag Dialog=rd-d
机械卡组。
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
大量传说卡堆成的卡组。需勾选不检查卡组才能对战。
......
#created by ...
#main
120120000
120120000
120120000
120170000
120170000
120110001
120110001
120155000
120194001
120194002
120194002
120194002
120194003
120194003
120194003
120151010
120151010
120110009
120110009
120110009
120170035
120170035
120120017
120120017
120120017
120194004
120151023
120151023
120151023
120181003
120181003
120181003
120151018
120151018
120194005
120194005
120194005
120150019
120150019
120150019
46986414
46986414
74677422
74677422
67300516
10802915
10802915
26202165
91646304
14558127
14558127
72291078
72291078
72291078
23434538
23434538
23434538
97631303
97631303
97631303
1845204
1845204
6172122
6172122
6172122
11827244
11827244
18144506
81439173
83764718
92353449
92353449
24224830
24224830
24224830
10045474
10045474
10045474
40605147
40605147
#extra
37818794
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 ...
#main
120181011
120181011
120181011
120181001
120181001
120181001
120155015
120155015
120155015
120193002
120193002
120193002
120183002
120183002
120183002
120183024
120183024
120183030
120183030
120183030
120151010
120151010
120183031
120183031
120193003
120193003
120193003
120130039
120130039
120183054
120183054
120183054
120151023
120155060
120155060
120183062
120183063
120183063
120170061
120183064
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
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
public bool IsOneEnemyBetterThanValue(int value, bool onlyATK)
{
return Enemy.MonsterZone.GetMonsters()
// .Any(card => card.GetDefensePower() > value && (!onlyATK || card.IsAttack()));
.Any(card => card.GetDefensePower() > value && (!onlyATK ));
.Any(card => card.GetDefensePower() > value && (!onlyATK || card.IsAttack()));
}
public bool IsAllEnemyBetterThanValue(int value, bool onlyATK)
......@@ -425,7 +424,7 @@ namespace WindBot.Game.AI
/// </summary>
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)
{
foreach (ClientCard card in cards)
......
......@@ -15,6 +15,10 @@ namespace WindBot.Game.AI
(card.Controller == 0 && Enum.IsDefined(typeof(InvincibleBotMonster), 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>
/// Is this monster is dangerous to attack?
......@@ -23,10 +27,7 @@ namespace WindBot.Game.AI
{
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>
/// Do this monster prevents activation of opponent's effect monsters in battle?
/// </summary>
......
......@@ -80,7 +80,137 @@ namespace WindBot.Game.AI.Decks
AddExecutor(ExecutorType.Repos, 圣防Repos);
//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()
{
{
......@@ -135,54 +265,6 @@ namespace WindBot.Game.AI.Decks
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()
{
// go first
......
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
......@@ -14,6 +14,21 @@ namespace WindBot.Game.AI.Decks
: base(ai, duel)
{
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.SpSummon, ImFeelingLucky);
AddExecutor(ExecutorType.SpSummon, ImFeelingUnlucky);
......@@ -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.最强战旗, 最强战旗Eff);
//AddExecutor(ExecutorType.Activate, _CardId.升阵, 装备act);
......@@ -104,6 +115,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor(ExecutorType.Summon, _CardId.伟大魔兽, 伟大魔兽Sum);
AddExecutor(ExecutorType.MonsterSet, _CardId.千年盾, DefaultMonsterSummon);
AddExecutor(ExecutorType.Activate, _CardId.死供, 死供Effect);
AddExecutor(ExecutorType.Activate, _CardId.活杀, 活杀Effect);
AddExecutor(ExecutorType.Activate, _CardId.耳语妖精, 耳语妖精Effect);
AddExecutor(ExecutorType.Repos, DefaultMonsterRepos);
AddExecutor(ExecutorType.Repos, 圣防Repos);
......@@ -242,7 +254,10 @@ namespace WindBot.Game.AI.Decks
return selected;
}
public override bool OnSelectHand()
{
return true;
}
public override int OnSelectOption(IList<int> options)
{
return Program.Rand.Next(options.Count);
......
This diff is collapsed.
......@@ -63,14 +63,15 @@ namespace WindBot.Game.AI.Decks
AddExecutor(ExecutorType.Activate, CardId.起重龙);
AddExecutor(ExecutorType.Activate, CardId.建造龙, 建造龙Effect);
AddExecutor(ExecutorType.Activate, CardId.镐头龙, 镐头龙Effect);
AddExecutor(ExecutorType.Summon, _CardId.伟大魔兽, 伟大魔兽Summon);
AddExecutor(ExecutorType.Summon, 幻刃急攻Summon);
AddExecutor(ExecutorType.Summon, CardId.镐头龙, 镐头龙Summon);
AddExecutor(ExecutorType.Summon, CardId.搅拌龙, 搅拌龙Summon);
AddExecutor(ExecutorType.MonsterSet, 幻刃急攻Set);
AddExecutor(ExecutorType.Summon, 幻刃急攻Summon);
AddExecutor(ExecutorType.SummonOrSet, DefaultMonsterSummon);
AddExecutor(ExecutorType.Activate, CardId.死者苏生, 死苏Effect);
AddExecutor(ExecutorType.Activate, CardId.贯通, 贯通Effect);
AddExecutor(ExecutorType.Summon, _CardId.伟大魔兽, 伟大魔兽Sum);
AddExecutor(ExecutorType.SummonOrSet, DefaultMonsterSummon);
AddExecutor(ExecutorType.Activate, CardId.幻刃复归, 幻刃复归Effect);
AddExecutor(ExecutorType.Activate, CardId.幻刃封锁, 幻刃封锁Effect);
AddExecutor(ExecutorType.Activate, CardId.幻刃急攻, 幻刃急攻Effect);
......@@ -106,7 +107,7 @@ namespace WindBot.Game.AI.Decks
private List<int> HintMsgForMaterial = new List<int>
{
HintMsg.FusionMaterial, HintMsg.SynchroMaterial, HintMsg.XyzMaterial, HintMsg.LinkMaterial, HintMsg.Release
HintMsg.FusionMaterial, HintMsg.SynchroMaterial, HintMsg.XyzMaterial, HintMsg.LinkMaterial, HintMsg.Tribute
};
private List<int> HintMsgForMaxSelect = new List<int>
......@@ -321,10 +322,24 @@ namespace WindBot.Game.AI.Decks
{
return 搅拌龙Effect(false);
}
// protected override IList<ClientCard> OnSelectTribute(IList<ClientCard> cards, int min, int max)
protected bool 伟大魔兽Summon()
{
int[] materials = new[] { CardId.幻刃破龙, CardId.建造龙, CardId.幻龙重骑, CardId.起重龙 };
if (Bot.HasInMonstersZone(materials))
{
AI.SelectTribute(materials);
return true;
}
return false;
}
private bool 幻刃急攻Summon()
{
if (Card.Level < 5 && (Card.Race & (int)CardRace.Wyrm) > 0 &&
Bot.HasInSpellZone(CardId.幻刃急攻) && !isUpperMonSummon())
Bot.HasInSpellZone(CardId.幻刃急攻) && !IsUpperMonSummon())
{
IList<ClientCard> lowerList =
Bot.Hand.GetMatchingCards(card => (card.Level < 5 && ((card.Race & (int)CardRace.Wyrm) > 0)));
......@@ -352,7 +367,7 @@ namespace WindBot.Game.AI.Decks
private bool 幻刃急攻Set()
{
if (Card.Level < 5 && (Card.Race & (int)CardRace.Wyrm) > 0 &&
Bot.HasInSpellZone(CardId.幻刃急攻) && !isUpperMonSummon())
Bot.HasInSpellZone(CardId.幻刃急攻) && !IsUpperMonSummon())
{
IList<ClientCard> lowerList =
Bot.Hand.GetMatchingCards(card => (card.Level < 5 && ((card.Race & (int)CardRace.Wyrm) > 0)));
......@@ -416,7 +431,7 @@ namespace WindBot.Game.AI.Decks
return tributeAllow >= (_card.Level > 6 ? 2 : 1);
}
private bool isUpperMonSummon() //检查手卡是否有怪兽可以上级召唤
private bool IsUpperMonSummon() //检查手卡是否有怪兽可以上级召唤
{
foreach(ClientCard c in Bot.Hand.GetMatchingCards(card=>card.Level>4))
{
......@@ -636,7 +651,7 @@ namespace WindBot.Game.AI.Decks
{
if (isAISelect)
{
int[] localList = new int[] { CardId.建造龙, CardId.龙重骑, CardId.起重龙 };
int[] localList = new int[] { CardId.建造龙, CardId.刃破龙, CardId.起重龙 };
if (Bot.HasInMonstersZone(CardId.建造龙) && 建造龙Effect(true, false))
{
if (Bot.HasInGraveyard(localList[0]) || Bot.HasInGraveyard(localList[1]))
......
......@@ -102,10 +102,11 @@ namespace WindBot.Game.AI.Decks
AddExecutor(ExecutorType.MonsterSet, CardId.瞄准鹰);
AddExecutor(ExecutorType.MonsterSet, CardId.双角兽);
AddExecutor(ExecutorType.Activate, CardId.世纪末兽机界, DefaultField);
AddExecutor(ExecutorType.Activate, CardId.兽之拳);
AddExecutor(ExecutorType.Activate, CardId.兽之拳, 兽之拳Effect);
AddExecutor(ExecutorType.Activate, CardId.左迁, 左迁1Effect);
AddExecutor(ExecutorType.Activate, CardId.减俸);
AddExecutor(ExecutorType.Activate, CardId.左迁,左迁2Effect);
AddExecutor(ExecutorType.Activate, CardId.兽之拳);
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
public const int 武枪 = 120231052;
public const int 连击龙 = 120110001;
public const int 活杀= 120199055;
public const int 疾风弹 = 120203028;
public const int HMD = 120130041;
public const int 死苏 = 120194004;
public const int 死苏2 = 120195004;
public const int 死供 = 120151023;
public const int 强欲之壶 = 120181003;
public const int 傲慢之壶 = 120238006;
public const int 黑洞 = 120231069;
public const int 大风暴 = 120229003;
public const int 魔法筒 = 120232005;
public const int 圣防 = 120198003;
public const int 激流葬 = 1202223105;
public const int 大灾害 = 120238028;
public const int 炸甲 = 120194005;
public const int 万能地雷 = 120234005;
public const int 万能地雷2 = 120237001;
public const int 落穴 = 120150019;
public const int 暗黑释放 = 120105013;
public const int 疾风弹 = 120203028;
public const int HMD = 120130041;
public const int 真空湮灭 = 120216026;
public const int 亚龙地狱 = 120231068;
public const int 圣塔 = 120208065;
public const int 捕获 = 120231041;
public const int 遮盖罩 = 120227029;
public const int 人造人 = 120155000;
public const int 狼人 = 120214004;
......@@ -542,18 +552,35 @@ namespace WindBot.Game.AI
}
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 false;
}
protected bool 装备Effect()
{
//if (Executors.Any(exec => exec.Type == Type && exec.CardId == Card.Id))
// return false;
if (Executors.Any(exec => exec.Type == Type && exec.CardId == Card.Id))
return false;
if (!Card.HasType(CardType.Equip))
return false;
List<ClientCard> cards = new List<ClientCard>(Bot.MonsterZone.GetMonsters());
......@@ -636,7 +663,7 @@ namespace WindBot.Game.AI
}
protected bool 大风暴Effect()
{
return Enemy.GetSpellCount() - Bot.GetSpellCount() >= 2;
return Enemy.GetSpellCount() - Bot.GetSpellCount() >= 1;
}
protected bool HMDEffect()
{
......@@ -644,11 +671,23 @@ namespace WindBot.Game.AI
}
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()
{
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()
{
......@@ -686,6 +725,49 @@ namespace WindBot.Game.AI
if (Util.GetTotalAttackingMonsterAttack(1) - Util.GetTotalAttackingMonsterAttack(0) > Bot.LifePoints && !Bot.HasDefendingMonster()) return true;
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()
{
foreach (ClientCard n in Duel.LastSummonedCards)
......@@ -697,7 +779,7 @@ namespace WindBot.Game.AI
}
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()
......@@ -1112,12 +1194,25 @@ namespace WindBot.Game.AI
protected bool 伟大魔兽Sum()
{
int tributecount = 1;
int maxAttack = 0;
for (int k = 0; k < 7; ++k)
{
ClientCard tributeCard2 = Bot.MonsterZone[k];
if (tributeCard2 == null) continue;
if (tributeCard2.GetDefensePower() > Card.Attack && tributeCard2.Attack > 1500)
if (tributeCard2.Attack > maxAttack && tributeCard2.Attack > 1600)
{
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;
}
......
......@@ -42,4 +42,5 @@
武枪 = 120231052,
极乐鹰巨人 = 120227001,
}
}
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