Commit 917e0372 authored by 苍蓝's avatar 苍蓝

update

parent 4f4e4008
Pipeline #5889 passed with stage
in 36 seconds
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
# 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)
!齿车戒龙 !齿车戒龙
Name=齿车戒龙 Deck=MokeyMokey Dialog=zh-CN Name=齿车戒龙 Deck=MokeyMokey Dialog=rd1
龙法卡组。 龙法卡组。
SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020 SUPPORT_MASTER_RULE_3 SUPPORT_NEW_MASTER_RULE SUPPORT_MASTER_RULE_2020
...@@ -19,6 +19,11 @@ Name=大恐龙驾 Deck=DinocarriageDynarmix Dialog=zh-CN ...@@ -19,6 +19,11 @@ Name=大恐龙驾 Deck=DinocarriageDynarmix Dialog=zh-CN
恐龙卡组。 恐龙卡组。
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=SaikyoBattleFlag Dialog=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 ...
#main
120183024
120183024
120183031
120183031
120183054
120183054
120181001
120181001
120181001
120155015
120155015
120155015
120193002
120193002
120193002
120183002
120183002
120183031
120183030
120183030
120183030
120151010
120181011
120181011
120181011
120193003
120193003
120193003
120130039
120130039
120183054
120151023
120155060
120155060
120183062
120183062
120183063
120183063
120183063
120183064
#extra
!side
...@@ -2,11 +2,11 @@ ...@@ -2,11 +2,11 @@
#main #main
120120000 120120000
120120000 120120000
120120000
120170000 120170000
120170000 120170000
120110001 120110001
120110001 120110001
120110001
120183000 120183000
120194002 120194002
120194002 120194002
......
{
"welcome": [
"你要注意,你的对手是史上最强的决斗者。",
"我已经预料到你下一步的行动了"
],
"deckerror": [
"抱歉,我的卡组里的{0}的数量似乎出了问题。"
],
"duelstart": [
"演出时间到!",
"我要用决斗带来笑容!"
],
"newturn": [
"看好了,我华丽的抽卡!",
"看我的魔术抽卡!",
"我将手牌补满五张"
],
"endturn": [
"哼,慢慢挣扎吧",
"完美的谢幕。",
"看来,演出轮到你的环节。"
],
"directattack": [
"{0},让对手看看你完美的直接攻击!",
"{0},让对手生命的微弱烛光熄灭吧",
"看来你即将失去一切。{0},攻击!",
"熄灭吧!熄灭吧!人生不过是行走的影子。{0},直接攻击!",
"{0},让谢幕变得更完美些吧",
"{0},用你的魔术偷走对手的生命",
"{0},嚯嚯嚯,华丽的直接攻击",
"{0},让对手感受绝望!",
"我的搭档{0}的直接攻击表演!",
"来让大家看看你的绝活吧,{0}!",
"啊,我们破坏了对手的防御。{0},攻击!"
],
"attack": [
"{0},和{1}对手戏!",
"{0}和{1}将要来一场骑士决斗!",
"{0},观众们在期待你和{1}的厮杀!",
"{0},用戏法把{1}变没吧",
"{0},让{1}看看真正强者的演出手段!"
],
"ondirectattack": [
"不,我的道具!我的戏法!……",
"{0}这种二流竟然……啊!",
"我完美的把戏竟然被拆穿了?!"
],
"facedownmonstername": "怪兽",
"activate": [
"这是{0}最擅长的把戏。",
"去吧{0},让对手看看你的魔法。",
"哈哈,{0}是完美的魔术师。"
],
"summon": [
"{0}的出场",
"来吧!来吧,{0}!",
"看看{0}卖力的演出!",
"你看到了{0}的出场吗?",
"我呼唤{0}参加演出!",
"让大家看看你的出场秀,{0}。",
"我给大家介绍——{0}。"
],
"setmonster": [
"这只怪兽会在幕后工作。",
"感谢这只怪兽在台后的支持。"
],
"chaining": [
"看这里!帽子戏法{0}!",
"嘿嘿,这可不是纸牌魔术。是{0}!",
"准备!大魔术{0}!",
"在舞台上要多多思考。{0},发动!",
"看样子你忘了魔术师的机关{0}!",
"你能看出{0}的奥秘吗?"
]
}
...@@ -44,7 +44,8 @@ namespace WindBot.Game.AI ...@@ -44,7 +44,8 @@ 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)
......
...@@ -48,7 +48,12 @@ namespace WindBot.Game.AI ...@@ -48,7 +48,12 @@ namespace WindBot.Game.AI
.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(); .OrderBy(card => card.Attack).FirstOrDefault();
} }
public static ClientCard GetHighestLevelMonster(this IEnumerable<ClientCard> cards, bool canBeTarget = false)
{
return cards
.OrderBy(card => card.Level).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
......
...@@ -39,6 +39,7 @@ namespace WindBot.Game.AI.Decks ...@@ -39,6 +39,7 @@ namespace WindBot.Game.AI.Decks
{ {
AddExecutor(ExecutorType.SpSummon); AddExecutor(ExecutorType.SpSummon);
AddExecutor(ExecutorType.Activate, CardId.七星道法师,七星道法师Effect); AddExecutor(ExecutorType.Activate, CardId.七星道法师,七星道法师Effect);
AddExecutor(ExecutorType.Activate, CardId.对死者的供奉, 死供Eff);
AddExecutor(ExecutorType.Summon, CardId.青眼白龙, DefaultMonsterSummon); AddExecutor(ExecutorType.Summon, CardId.青眼白龙, DefaultMonsterSummon);
AddExecutor(ExecutorType.Summon, CardId.破坏之剑士, DefaultMonsterSummon); AddExecutor(ExecutorType.Summon, CardId.破坏之剑士, DefaultMonsterSummon);
AddExecutor(ExecutorType.Summon, CardId.恶魔召唤, DefaultMonsterSummon); AddExecutor(ExecutorType.Summon, CardId.恶魔召唤, DefaultMonsterSummon);
...@@ -50,7 +51,7 @@ namespace WindBot.Game.AI.Decks ...@@ -50,7 +51,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor(ExecutorType.Summon, CardId.人造人, DefaultMonsterSummon); AddExecutor(ExecutorType.Summon, CardId.人造人, DefaultMonsterSummon);
AddExecutor(ExecutorType.Summon, CardId.神秘庄家); AddExecutor(ExecutorType.Summon, CardId.神秘庄家);
AddExecutor(ExecutorType.Activate, CardId.神秘庄家); AddExecutor(ExecutorType.Activate, CardId.神秘庄家);
AddExecutor(ExecutorType.SpellSet, CardId.暗黑释放); AddExecutor(ExecutorType.SpellSet, CardId.暗黑释放, 圣防Effect);
AddExecutor(ExecutorType.SpellSet, CardId.落穴); AddExecutor(ExecutorType.SpellSet, CardId.落穴);
AddExecutor(ExecutorType.Activate, CardId.落穴, 落穴Effect); AddExecutor(ExecutorType.Activate, CardId.落穴, 落穴Effect);
AddExecutor(ExecutorType.Activate, CardId.对死者的供奉, 死供Effect); AddExecutor(ExecutorType.Activate, CardId.对死者的供奉, 死供Effect);
...@@ -58,9 +59,9 @@ namespace WindBot.Game.AI.Decks ...@@ -58,9 +59,9 @@ namespace WindBot.Game.AI.Decks
AddExecutor(ExecutorType.Activate, CardId.凤凰龙); AddExecutor(ExecutorType.Activate, CardId.凤凰龙);
AddExecutor(ExecutorType.Summon, CardId.凤凰龙, 凤凰龙summon); AddExecutor(ExecutorType.Summon, CardId.凤凰龙, 凤凰龙summon);
AddExecutor(ExecutorType.MonsterSet, CardId.凤凰龙); AddExecutor(ExecutorType.MonsterSet, CardId.凤凰龙);
AddExecutor(ExecutorType.MonsterSet, CardId.火星心少女, monsterset); AddExecutor(ExecutorType.MonsterSet, CardId.火星心少女, Monsterset);
AddExecutor(ExecutorType.MonsterSet, CardId.七星道法师, monsterset); AddExecutor(ExecutorType.MonsterSet, CardId.七星道法师, Monsterset);
AddExecutor(ExecutorType.MonsterSet, CardId.耳语妖精, monsterset); AddExecutor(ExecutorType.MonsterSet, CardId.耳语妖精, Monsterset);
AddExecutor(ExecutorType.Summon, CardId.七星道法师); AddExecutor(ExecutorType.Summon, CardId.七星道法师);
...@@ -134,7 +135,7 @@ namespace WindBot.Game.AI.Decks ...@@ -134,7 +135,7 @@ namespace WindBot.Game.AI.Decks
// go first // go first
return true; return true;
} }
public bool monsterset() public bool Monsterset()
{ {
if (Duel.Turn == 1) if (Duel.Turn == 1)
{ {
...@@ -166,6 +167,12 @@ namespace WindBot.Game.AI.Decks ...@@ -166,6 +167,12 @@ namespace WindBot.Game.AI.Decks
return true; return true;
} }
private bool 圣防Effect()
{
if (Util.GetTotalAttackingMonsterAttack(1) > 1900)
return true;
return false;
}
private bool 落穴Effect() private bool 落穴Effect()
{ {
foreach (ClientCard n in Duel.LastSummonedCards) foreach (ClientCard n in Duel.LastSummonedCards)
...@@ -197,6 +204,25 @@ namespace WindBot.Game.AI.Decks ...@@ -197,6 +204,25 @@ namespace WindBot.Game.AI.Decks
AI.SelectNextCard(mon); AI.SelectNextCard(mon);
else if (mon.Level >= 7) else if (mon.Level >= 7)
AI.SelectNextCard(mon); AI.SelectNextCard(mon);
else if (mon.Level >= 5)
AI.SelectNextCard(mon);
return true;
}
return false;
}
private bool 死供Eff()
{
if (Util.IsOneEnemyBetterThanValue(2500, false))
{
foreach (ClientCard m in Bot.Hand)
AI.SelectCard(m);
foreach (ClientCard mon in Enemy.GetMonsters())
if (mon.Level >= 8)
AI.SelectNextCard(mon);
else if (mon.Level >= 7)
AI.SelectNextCard(mon);
else if (mon.Level >= 5)
AI.SelectNextCard(mon);
return true; return true;
} }
return false; return false;
......
...@@ -45,6 +45,7 @@ namespace WindBot.Game.AI.Decks ...@@ -45,6 +45,7 @@ namespace WindBot.Game.AI.Decks
{ {
AddExecutor(ExecutorType.SpSummon); AddExecutor(ExecutorType.SpSummon);
AddExecutor(ExecutorType.Activate, CardId.七星道法师, 七星道法师Effect); AddExecutor(ExecutorType.Activate, CardId.七星道法师, 七星道法师Effect);
AddExecutor(ExecutorType.Activate, CardId.对死者的供奉, 死供Eff);
AddExecutor(ExecutorType.Summon, CardId.青眼白龙, DefaultMonsterSummon); AddExecutor(ExecutorType.Summon, CardId.青眼白龙, DefaultMonsterSummon);
AddExecutor(ExecutorType.Summon, CardId.破坏之剑士, DefaultMonsterSummon); AddExecutor(ExecutorType.Summon, CardId.破坏之剑士, DefaultMonsterSummon);
AddExecutor(ExecutorType.Summon, CardId.恶魔召唤, DefaultMonsterSummon); AddExecutor(ExecutorType.Summon, CardId.恶魔召唤, DefaultMonsterSummon);
...@@ -56,7 +57,7 @@ namespace WindBot.Game.AI.Decks ...@@ -56,7 +57,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor(ExecutorType.Summon, CardId.人造人, DefaultMonsterSummon); AddExecutor(ExecutorType.Summon, CardId.人造人, DefaultMonsterSummon);
AddExecutor(ExecutorType.Summon, CardId.神秘庄家); AddExecutor(ExecutorType.Summon, CardId.神秘庄家);
AddExecutor(ExecutorType.Activate, CardId.神秘庄家); AddExecutor(ExecutorType.Activate, CardId.神秘庄家);
AddExecutor(ExecutorType.SpellSet, CardId.暗黑释放); AddExecutor(ExecutorType.SpellSet, CardId.暗黑释放, 圣防Effect);
AddExecutor(ExecutorType.SpellSet, CardId.落穴); AddExecutor(ExecutorType.SpellSet, CardId.落穴);
AddExecutor(ExecutorType.Activate, CardId.落穴, 落穴Effect); AddExecutor(ExecutorType.Activate, CardId.落穴, 落穴Effect);
AddExecutor(ExecutorType.Activate, CardId.对死者的供奉, 死供Effect); AddExecutor(ExecutorType.Activate, CardId.对死者的供奉, 死供Effect);
...@@ -65,9 +66,9 @@ namespace WindBot.Game.AI.Decks ...@@ -65,9 +66,9 @@ namespace WindBot.Game.AI.Decks
AddExecutor(ExecutorType.Summon, CardId.凤凰龙, 凤凰龙summon); AddExecutor(ExecutorType.Summon, CardId.凤凰龙, 凤凰龙summon);
AddExecutor(ExecutorType.MonsterSet, CardId.凤凰龙); AddExecutor(ExecutorType.MonsterSet, CardId.凤凰龙);
AddExecutor(ExecutorType.MonsterSet, CardId.火星心少女, monsterset); AddExecutor(ExecutorType.MonsterSet, CardId.火星心少女, Monsterset);
AddExecutor(ExecutorType.MonsterSet, CardId.七星道法师, monsterset); AddExecutor(ExecutorType.MonsterSet, CardId.七星道法师, Monsterset);
AddExecutor(ExecutorType.MonsterSet, CardId.耳语妖精, monsterset); AddExecutor(ExecutorType.MonsterSet, CardId.耳语妖精, Monsterset);
AddExecutor(ExecutorType.Summon, CardId.七星道法师); AddExecutor(ExecutorType.Summon, CardId.七星道法师);
AddExecutor(ExecutorType.SummonOrSet, DefaultMonsterSummon); AddExecutor(ExecutorType.SummonOrSet, DefaultMonsterSummon);
...@@ -139,7 +140,7 @@ namespace WindBot.Game.AI.Decks ...@@ -139,7 +140,7 @@ namespace WindBot.Game.AI.Decks
// go first // go first
return true; return true;
} }
public bool monsterset() public bool Monsterset()
{ {
if (Duel.Turn == 1) if (Duel.Turn == 1)
{ {
...@@ -186,6 +187,12 @@ namespace WindBot.Game.AI.Decks ...@@ -186,6 +187,12 @@ namespace WindBot.Game.AI.Decks
} }
return false; return false;
} }
private bool 圣防Effect()
{
if (Util.GetTotalAttackingMonsterAttack(1) > 1900)
return true;
return false;
}
private bool 死供Effect() private bool 死供Effect()
{ {
if (Util.IsOneEnemyBetterThanValue(1900, false)) if (Util.IsOneEnemyBetterThanValue(1900, false))
...@@ -199,11 +206,29 @@ namespace WindBot.Game.AI.Decks ...@@ -199,11 +206,29 @@ namespace WindBot.Game.AI.Decks
AI.SelectNextCard(mon); AI.SelectNextCard(mon);
else if (mon.Level >= 7) else if (mon.Level >= 7)
AI.SelectNextCard(mon); AI.SelectNextCard(mon);
else if (mon.Level >= 5)
AI.SelectNextCard(mon);
return true;
}
return false;
}
private bool 死供Eff()
{
if (Util.IsOneEnemyBetterThanValue(2500, false))
{
foreach (ClientCard m in Bot.Hand)
AI.SelectCard(m);
foreach (ClientCard mon in Enemy.GetMonsters())
if (mon.Level >= 8)
AI.SelectNextCard(mon);
else if (mon.Level >= 7)
AI.SelectNextCard(mon);
else if (mon.Level >= 5)
AI.SelectNextCard(mon);
return true; return true;
} }
return false; return false;
} }
private bool 火星心少女Effect() private bool 火星心少女Effect()
{ {
foreach (ClientCard m in Bot.Hand) foreach (ClientCard m in Bot.Hand)
......
using YGOSharp.OCGWrapper.Enums;
using System.Collections.Generic;
using System.Linq;
using WindBot;
using WindBot.Game;
using WindBot.Game.AI;
using System;
namespace WindBot.Game.AI.Decks
{
[Deck("SaikyoBattleFlag", "AI_SaikyoBattleFlag")]
public class SaikyoBattleFlagExecutor : DefaultExecutor
{
public class CardId
{
public const int 最强战旗 = 120181001;
public const int 钢机神 = 120155015;
public const int 连击龙 = 120110001;
public const int 恶德 = 120183024;
public const int 旗兽 = 120193002;
public const int 社员 = 120183002;
public const int 成金恐龙王 = 120151010;
public const int 突击坦克 = 120183031;
public const int 工匠无人机 = 120183030;
public const int 双角兽 = 120181011;
public const int 瞄准鹰 = 120193003;
public const int 死苏 = 120194004;
public const int 世纪末兽机界 = 120130039;
public const int 铁之重击 = 120183054;
public const int 对死者的供奉 = 120151023;
public const int 兽之拳 = 120155060;
public const int 减俸 = 120183062;
public const int 左迁 = 120183063;
public const int 冻结 = 120183064;
}
public SaikyoBattleFlagExecutor(GameAI ai, Duel duel)
: base(ai, duel)
{
AddExecutor(ExecutorType.SpSummon);
AddExecutor(ExecutorType.Activate, CardId.铁之重击);
AddExecutor(ExecutorType.Activate, CardId.成金恐龙王);
AddExecutor(ExecutorType.Activate, CardId.恶德, 恶德Effect);
AddExecutor(ExecutorType.Activate, CardId.对死者的供奉, 死供Eff);
AddExecutor(ExecutorType.Activate, CardId.最强战旗, 最强战旗Eff);
AddExecutor(ExecutorType.Activate, CardId.钢机神, 钢机神Effect);
AddExecutor(ExecutorType.Activate, CardId.突击坦克, 突击坦克Effect);
AddExecutor(ExecutorType.Activate, CardId.瞄准鹰, 瞄准鹰Effect);
AddExecutor(ExecutorType.Summon, CardId.最强战旗, DefaultDoubleSummon);
AddExecutor(ExecutorType.Summon, CardId.钢机神, DefaultDoubleSummon);
AddExecutor(ExecutorType.Summon, CardId.恶德, DefaultDoubleSummon);
AddExecutor(ExecutorType.Summon, CardId.最强战旗, DefaultMonsterSummon);
AddExecutor(ExecutorType.Summon, CardId.钢机神, DefaultMonsterSummon);
AddExecutor(ExecutorType.Summon, CardId.恶德, DefaultMonsterSummon);
AddExecutor(ExecutorType.Summon, CardId.成金恐龙王, 成金恐龙王Summon);
AddExecutor(ExecutorType.Summon, CardId.瞄准鹰, 瞄准鹰summon);
AddExecutor(ExecutorType.Summon, CardId.瞄准鹰, 瞄准鹰summon2);
AddExecutor(ExecutorType.Summon, CardId.瞄准鹰, 瞄准鹰summon3);
AddExecutor(ExecutorType.Summon, CardId.双角兽, 瞄准鹰双角兽summon);
AddExecutor(ExecutorType.Summon, CardId.成金恐龙王, 瞄准鹰成金恐龙王summon);
AddExecutor(ExecutorType.Summon, CardId.突击坦克, 瞄准鹰坦克summon);
AddExecutor(ExecutorType.Activate, CardId.双角兽, 双角兽Effect);
AddExecutor(ExecutorType.Summon, CardId.双角兽, 双角兽summon);
AddExecutor(ExecutorType.Activate, CardId.最强战旗, 最强战旗Effect);
AddExecutor(ExecutorType.Activate, CardId.对死者的供奉, 死供Effect);
AddExecutor(ExecutorType.MonsterSet, CardId.成金恐龙王);
AddExecutor(ExecutorType.Activate, CardId.工匠无人机);
AddExecutor(ExecutorType.Summon, CardId.工匠无人机);
AddExecutor(ExecutorType.Summon, CardId.突击坦克, 突击坦克summon);
AddExecutor(ExecutorType.Activate, CardId.死苏, 死苏effect);
AddExecutor(ExecutorType.SummonOrSet, CardId.旗兽, DefaultMonsterSummon);
AddExecutor(ExecutorType.SummonOrSet, CardId.社员, DefaultMonsterSummon);
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.兽之拳,兽之拳Effect);
AddExecutor(ExecutorType.Activate, CardId.左迁, 左迁1Effect);
AddExecutor(ExecutorType.Activate, CardId.减俸);
AddExecutor(ExecutorType.Activate, CardId.左迁,左迁2Effect);
AddExecutor(ExecutorType.Activate, CardId.冻结,冻结Effect);
AddExecutor(ExecutorType.Activate, CardId.兽之拳);
AddExecutor(ExecutorType.Activate, DefaultDontChainMyself);
AddExecutor(ExecutorType.SummonOrSet, DefaultMonsterSummon);
AddExecutor(ExecutorType.Repos, DefaultMonsterRepos);
AddExecutor(ExecutorType.SpellSet, DefaultSpellSet);
AddExecutor(ExecutorType.SpellSet, CardId.铁之重击);
AddExecutor(ExecutorType.SpellSet, CardId.死苏);
AddExecutor(ExecutorType.SpellSet, CardId.对死者的供奉);
}
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
return true;
}
bool DoubleTribute = false;
public override void OnNewTurn()
{
DoubleTribute = false;
}
private bool DefaultDoubleSummon()
{
if (!DoubleTribute && Bot.HasInMonstersZone(CardId.双角兽))
AI.SelectCard(CardId.双角兽);
return true;
}
private bool 左迁1Effect()
{
if (Enemy.BattlingMonster.Attack > 2000)
{
AI.SelectCard(Enemy.BattlingMonster);
return true;
}
return false;
}
private bool 左迁2Effect()
{
AI.SelectCard(Enemy.BattlingMonster);
return true;
}
private bool 冻结Effect()
{
foreach (ClientCard monster in Bot.GetMonsters())
{
if (monster.IsFacedown())
{
AI.SelectCard(monster);
return true;
}
else if (monster.IsDefense())
{
AI.SelectCard(monster);
return true;
}
}
AI.SelectCard(Bot.MonsterZone.GetLowestAttackMonster());
return true;
}
private bool 钢机神Effect()
{
if (Duel.Turn == 1)
{
return false;
}
else if (Enemy.HasAttackingMonster() || Enemy.GetMonsterCount() < 1)
AI.SelectCard(CardId.最强战旗, CardId.钢机神, CardId.恶德, CardId.旗兽, CardId.突击坦克, CardId.工匠无人机, CardId.社员, CardId.双角兽, CardId.瞄准鹰);
else
//AI.SelectCard(Bot.Graveyard.GetHighestAttackMonster());
AI.SelectCard(Bot.Graveyard.GetHighestLevelMonster());
return true;
}
private bool 恶德Effect()
{
foreach (ClientCard m in Bot.Hand)
AI.SelectCard(m);
AI.SelectNextCard(CardId.左迁, CardId.减俸);
AI.SelectNextCard(CardId.左迁, CardId.减俸);
return true;
}
private bool 兽之拳Effect()
{
if (Enemy.BattlingMonster.Race == (int)CardRace.Dragon)
return true;
if (Enemy.BattlingMonster.Race == (int)CardRace.Fairy)
return true;
if (Enemy.BattlingMonster.Race == (int)CardRace.SpellCaster)
return true;
return false;
}
private bool 死苏effect()
{
if (!Util.IsAllEnemyBetter(true))
return false;
ClientCard selected = Enemy.Graveyard.GetMatchingCards(card => card.IsCanRevive()).OrderByDescending(card => card.Attack).FirstOrDefault();
if (selected.Attack >=2400)
{
AI.SelectCard(selected);
return true;
}
return false;
}
private bool 成金恐龙王Summon()
{
if (Enemy.GetHandCount() < 1) return true;
return false;
}
private bool 死供Effect()
{
if (Util.IsOneEnemyBetterThanValue(1900, false))
{
foreach (ClientCard m in Bot.Hand)
AI.SelectCard(m);
foreach (ClientCard mon in Enemy.GetMonsters())
if (mon.Level >= 9)
AI.SelectNextCard(mon);
else if (mon.Level >= 8)
AI.SelectNextCard(mon);
else if (mon.Level >= 7)
AI.SelectNextCard(mon);
else if (mon.Level >= 5)
AI.SelectNextCard(mon);
return true;
}
return false;
}
private bool 死供Eff()
{
if (Util.IsOneEnemyBetterThanValue(2500, false))
{
foreach (ClientCard m in Bot.Hand)
AI.SelectCard(m);
foreach (ClientCard mon in Enemy.GetMonsters())
if (mon.Level >= 8)
AI.SelectNextCard(mon);
else if (mon.Level >= 7)
AI.SelectNextCard(mon);
else if (mon.Level >= 5)
AI.SelectNextCard(mon);
return true;
}
return false;
}
private bool 突击坦克Effect()
{
//AI.SelectCard(GetBestEnemyCard_random());
AI.SelectCard(Enemy.MonsterZone.GetHighestLevelMonster());;
return true;
}
private bool 突击坦克summon()
{
if (Bot.MonsterZone.GetMatchingCardsCount(card => (card.Race & (int)CardRace.Machine) > 0) == 2) return true;
return false;
}
private bool 双角兽summon()
{
if (Bot.Graveyard.GetMatchingCardsCount(card => (card.Race & (int)CardRace.Machine) > 0) >= 3 && Bot.HasInHand(new[] { CardId.最强战旗, CardId.钢机神, CardId.恶德 }))
return true;
return false;
}
private bool 双角兽Effect()
{
if (Bot.HasInHand(new[] { CardId.最强战旗, CardId.钢机神, CardId.恶德 }))
{
AI.SelectCard(CardId.瞄准鹰, CardId.双角兽, CardId.工匠无人机, CardId.突击坦克, CardId.社员, CardId.旗兽, CardId.恶德, CardId.钢机神, CardId.最强战旗);
DoubleTribute = true;
return true;
}
return false;
}
private bool 瞄准鹰双角兽summon()
{
if (Bot.HasInMonstersZone(CardId.瞄准鹰) && Bot.HasInHand(new[] { CardId.最强战旗, CardId.钢机神, CardId.恶德 }))
return true;
return false;
}
private bool 瞄准鹰坦克summon()
{
if (Bot.HasInMonstersZone(CardId.瞄准鹰) && Bot.HasInHand(new[] { CardId.最强战旗, CardId.钢机神, CardId.恶德 }))
return true;
return false;
}
private bool 瞄准鹰成金恐龙王summon()
{
if (Bot.HasInMonstersZone(CardId.瞄准鹰) && Bot.HasInHand(new[] { CardId.最强战旗, CardId.钢机神, CardId.恶德 }))
return true;
return false;
}
private bool 瞄准鹰summon()
{
foreach (ClientCard m in Bot.GetMonsters())
if (m.HasAttribute(CardAttribute.Light) && m.Level <= 4)
if (Bot.HasInHand(new[] { CardId.最强战旗, CardId.钢机神, CardId.恶德 }))
if (Enemy.MonsterZone.GetMatchingCardsCount(card => card.Level >= 7) > 0)
return true;
return false;
}
private bool 瞄准鹰summon2()
{
if (Bot.GetCountCardInZone(Bot.Hand, CardId.瞄准鹰) >= 2 )
if (Bot.HasInHand(new[] { CardId.最强战旗, CardId.钢机神, CardId.恶德 }))
if (Enemy.MonsterZone.GetMatchingCardsCount(card => card.Level >= 7) > 0)
return true;
return false;
}
private bool 瞄准鹰summon3()
{
if (Bot.HasInHand(CardId.双角兽) || Bot.HasInHand(CardId.突击坦克) || Bot.HasInHand(CardId.成金恐龙王))
if (Bot.HasInHand(new[] { CardId.最强战旗, CardId.钢机神, CardId.恶德 }))
if (Enemy.MonsterZone.GetMatchingCardsCount(card => card.Level >= 7) > 0)
return true;
return false;
}
private bool 瞄准鹰Effect()
{
//ClientCard target = Util.GetWorstBotMonster();
//if (target != null) AI.SelectCard(target);
if (Bot.MonsterZone.GetMatchingCardsCount(card => card.Level >= 7) <= 1)
{
AI.SelectCard(CardId.瞄准鹰,CardId.突击坦克, CardId.成金恐龙王, CardId.社员, CardId.旗兽);
AI.SelectNextCard(CardId.瞄准鹰, CardId.突击坦克, CardId.成金恐龙王, CardId.社员, CardId.旗兽);
AI.SelectThirdCard(CardId.最强战旗, CardId.钢机神, CardId.恶德, CardId.旗兽, CardId.社员);
return true;
}
return false;
}
private bool 最强战旗Effect()
{
if (Util.IsOneEnemyBetterThanValue(1900, false))
{
foreach (ClientCard m in Bot.Hand)
AI.SelectCard(m) ;
foreach (ClientCard mon in Enemy.GetMonsters())
if (mon.Level >= 9)
AI.SelectNextCard(mon);
else if (mon.Level >= 8)
AI.SelectNextCard(mon);
else if (mon.Level >= 7)
AI.SelectNextCard(mon);
else if (mon.Level >= 5)
AI.SelectNextCard(mon);
return true;
}
return false;
}
private bool 最强战旗Eff()
{
if (Util.IsOneEnemyBetterThanValue(2500, false))
{
foreach (ClientCard m in Bot.Hand)
AI.SelectCard(m);
foreach (ClientCard mon in Enemy.GetMonsters())
if (mon.Level >= 9)
AI.SelectNextCard(mon);
else if (mon.Level >= 8)
AI.SelectNextCard(mon);
else if (mon.Level >= 7)
AI.SelectNextCard(mon);
else if (mon.Level >= 5)
AI.SelectNextCard(mon);
return true;
}
return false;
}
}
}
...@@ -704,7 +704,8 @@ namespace WindBot.Game.AI ...@@ -704,7 +704,8 @@ namespace WindBot.Game.AI
{ {
ClientCard tributeCard = Bot.MonsterZone[j]; ClientCard tributeCard = Bot.MonsterZone[j];
if (tributeCard == null) continue; if (tributeCard == null) continue;
if (tributeCard.GetDefensePower() < Card.Attack - 400) // if (tributeCard.GetDefensePower() +400 < Card.Attack)
if (tributeCard.Level +1 < Card.Level)
tributecount--; tributecount--;
} }
return tributecount <= 0; return tributecount <= 0;
......
...@@ -78,6 +78,7 @@ ...@@ -78,6 +78,7 @@
<Compile Include="Game\AI\Decks\PureWindsExecutor.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\SaikyoBattleFlagExecutor.cs" />
<Compile Include="Game\AI\Decks\SalamangreatExecutor.cs" /> <Compile Include="Game\AI\Decks\SalamangreatExecutor.cs" />
<Compile Include="Game\AI\Decks\CyberDragonExecutor.cs" /> <Compile Include="Game\AI\Decks\CyberDragonExecutor.cs" />
<Compile Include="Game\AI\Decks\DarkMagicianExecutor.cs" /> <Compile Include="Game\AI\Decks\DarkMagicianExecutor.cs" />
...@@ -151,6 +152,7 @@ ...@@ -151,6 +152,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="App.config" /> <None Include="App.config" />
<None Include="Dialogs\rd1.json" />
<None Include="sqlite3.dll"> <None Include="sqlite3.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None> </None>
......
{ {
"windbots": [ "windbots": [
{ {
"name": "齿车戒龙", "name": "齿车戒龙",
"deck": "MokeyMokey", "deck": "MokeyMokey",
"dialog": "zh-CN" "dialog": "rd1"
}, },
{ {
"name": "破坏剑士", "name": "破坏剑士",
...@@ -12,10 +12,15 @@ ...@@ -12,10 +12,15 @@
"dialog": "zh-CN" "dialog": "zh-CN"
}, },
{ {
"name": "大恐龙", "name": "大恐龙",
"deck": "DinocarriageDynarmix", "deck": "DinocarriageDynarmix",
"dialog": "zh-CN" "dialog": "zh-CN"
}, },
{
"name": "最强战旗",
"deck": "SaikyoBattleFlag",
"dialog": "zh-CN"
},
{ {
"name": "传说子", "name": "传说子",
"deck": "TheLegend", "deck": "TheLegend",
......
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