diff --git a/Dialogs/BA.zh-TW.json b/Dialogs/BA.zh-TW.json new file mode 100644 index 00000000..6acf44e1 --- /dev/null +++ b/Dialogs/BA.zh-TW.json @@ -0,0 +1,78 @@ +{ + "welcome": [ + "真難得有人發現這個。", + "真沒想到你能跟我對戰呢!決鬥者。不過也就到此為止了,接下來由我V.F.D(非常友善的決鬥者)來做你的對手。" + ], + "deckerror": [ + "阿,可能BA又把CBD修壞導致{0}消失了。" + ], + "duelstart": [ + "這只是AI,打贏不要太高興阿。", + "十分致謝233服讓我們有遊戲可以玩,別忘記去拜訪他們。", + "反主流學院請洽NOVA。", + "Wryyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy." + ], + "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": [ + "真是HIGH的最高點!出來吧{0}。", + "出來吧,{0}!", + "出現吧,{0}!", + "我召喚了強大的{0}!", + "我呼喚{0}參加戰鬥!", + "我呼喚出{0}。", + "我召喚{0}。" + ], + "setmonster": [ + "我放置了一體怪獸。", + "我裡側表示放置了一體怪獸。" + ], + "chaining": [ + "看這裡!發動{0}!", + "我使用{0}的力量。", + "很不錯的戰術...但是我拒絕!{0}!", + "真不愧是納粹,竟然能識破我的蓋牌......你說你只是單純的決鬥者?{0},發動!", + "看樣子你忘了我的{0}!", + "你考慮過我有{0}嗎?" + ] +} diff --git a/Dialogs/kiwi.zh-TW.json b/Dialogs/kiwi.zh-TW.json index 7c14faf6..8999310f 100644 --- a/Dialogs/kiwi.zh-TW.json +++ b/Dialogs/kiwi.zh-TW.json @@ -70,7 +70,6 @@ "看這裡!發動{0}!", "我使用{0}的力量。", "很不錯的戰術...但是我拒絕!{0}!", - "真不愧是納粹,竟然能識破我的蓋牌......你說你只是單純的決鬥者?{0},發動!", "看樣子你忘了我的{0}!", "你考慮過我有{0}嗎?" ] diff --git a/Game/AI/Decks/LightswornShaddoldinosourExecutor.cs b/Game/AI/Decks/LightswornShaddoldinosourExecutor.cs index b19d9f24..e5f68fe4 100644 --- a/Game/AI/Decks/LightswornShaddoldinosourExecutor.cs +++ b/Game/AI/Decks/LightswornShaddoldinosourExecutor.cs @@ -72,18 +72,20 @@ public class CardId } bool Pillused = false; + bool CrystalWingSynchroDragoneff_used = false; + bool OvertexCoatlseff_used = false; public LightswornShaddoldinosour(GameAI ai, Duel duel) : base(ai, duel) { //counter - + AddExecutor(ExecutorType.SpSummon, CardId.CrystalWingSynchroDragon, CrystalWingSynchroDragonesp); AddExecutor(ExecutorType.Activate, CardId.GhostOgre, Hand_act_eff); AddExecutor(ExecutorType.Activate, CardId.AshBlossom, Hand_act_eff); AddExecutor(ExecutorType.Activate, CardId.MaxxC,MaxxC); //first do AddExecutor(ExecutorType.Activate, CardId.HarpiesFeatherDuster, DefaultHarpiesFeatherDusterFirst); - AddExecutor(ExecutorType.Activate, CardId.infiniteTransience, infiniteTransience); + AddExecutor(ExecutorType.Activate, CardId.infiniteTransience, DefaultBreakthroughSkill); AddExecutor(ExecutorType.Activate, CardId.ThatGrassLooksgreener); AddExecutor(ExecutorType.Summon, CardId.SouleatingOviraptor); AddExecutor(ExecutorType.Activate, CardId.SouleatingOviraptor, SouleatingOviraptoreff); @@ -93,7 +95,7 @@ public LightswornShaddoldinosour(GameAI ai, Duel duel) AddExecutor(ExecutorType.Activate, CardId.ChargeOfTheLightBrigade, ChargeOfTheLightBrigadeEffect); AddExecutor(ExecutorType.Activate, CardId.FoolishBurial, FoolishBurialEffect); AddExecutor(ExecutorType.Activate, CardId.InterruptedKaijuSlumber, DefaultInterruptedKaijuSlumber); - AddExecutor(ExecutorType.Activate, CardId.ShaddollFusion, ShaddollFusion); + AddExecutor(ExecutorType.Activate, CardId.ShaddollFusion, ShaddollFusioneff); //Reborn AddExecutor(ExecutorType.Activate, CardId.MonsterReborn, RebornEffect); //Normal Summon @@ -113,27 +115,29 @@ public LightswornShaddoldinosour(GameAI ai, Duel duel) //Sp Summon AddExecutor(ExecutorType.SpSummon, CardId.UltimateConductorTytanno, UltimateConductorTytannosp); AddExecutor(ExecutorType.Activate, CardId.UltimateConductorTytanno, UltimateConductorTytannoeff); - AddExecutor(ExecutorType.Activate, CardId.DoubleEvolutionPill, DoubleEvolutionPill); + AddExecutor(ExecutorType.Activate, CardId.DoubleEvolutionPill, DoubleEvolutionPilleff); AddExecutor(ExecutorType.SpSummon, CardId.MinervaTheExalte); AddExecutor(ExecutorType.Activate, CardId.MinervaTheExalte, MinervaTheExaltedEffect); + AddExecutor(ExecutorType.SpSummon, CardId.GamecieltheSeaTurtleKaiju, DefaultKaijuSpsummon); //activate - AddExecutor(ExecutorType.Activate , CardId.GlowUpBulb,GlowUpBulb); + AddExecutor(ExecutorType.SpSummon , CardId.GlowUpBulb,GlowUpBulbeff); //activate chain - AddExecutor(ExecutorType.Activate, CardId.OvertexCoatls); + AddExecutor(ExecutorType.Activate, CardId.OvertexCoatls, OvertexCoatlseff); AddExecutor(ExecutorType.Activate, CardId.ShaddollBeast); AddExecutor(ExecutorType.Activate, CardId.ShaddollFalco, ShaddollFalcoeff); AddExecutor(ExecutorType.Activate, CardId.ShaddollSquamata, ShaddollSquamataeff); AddExecutor(ExecutorType.Activate, CardId.ShaddollDragon, ShaddollDragoneff); - AddExecutor(ExecutorType.Activate, CardId.ShaddollHedgehog); + AddExecutor(ExecutorType.Activate, CardId.ShaddollHedgehog, ShaddollHedgehogeff); AddExecutor(ExecutorType.Activate, CardId.GiantRex); AddExecutor(ExecutorType.Activate, CardId.ElShaddollConstruct); AddExecutor(ExecutorType.Activate, CardId.ElShaddollGrysra); - AddExecutor(ExecutorType.Activate, CardId.ElShaddollShekhinaga); + AddExecutor(ExecutorType.Activate, CardId.ElShaddollShekhinaga, ElShaddollShekhinagaeff); AddExecutor(ExecutorType.Activate, CardId.ElShaddollWinda); + AddExecutor(ExecutorType.Activate, CardId.CrystalWingSynchroDragon, CrystalWingSynchroDragoneff); AddExecutor(ExecutorType.Activate, CardId.TG_WonderMagician); //spellset AddExecutor(ExecutorType.SpellSet, CardId.MonsterReborn, spellset); @@ -215,12 +219,66 @@ public int[] Useless_List() }; } - private bool UltimateConductorTytannoeff() + public override void OnNewTurn() { - if (Duel.Phase == DuelPhase.Main1 || Duel.Phase == DuelPhase.Main2) + Pillused = false; + OvertexCoatlseff_used = false; + CrystalWingSynchroDragoneff_used = false; + } + + public bool CrystalWingSynchroDragonesp() + { + if (CrystalWingSynchroDragoneff_used) return false; + if (Bot.HasInMonstersZone(CardId.FairyTailSnow) || + Bot.HasInMonstersZone(CardId.Lumina) || + Bot.HasInMonstersZone(CardId.KeeperOfDragonicMagic)|| + Bot.HasInMonstersZone(CardId.SouleatingOviraptor) + ) { AI.SelectCard(new[] + { + CardId.KeeperOfDragonicMagic, + CardId.Lumina, + CardId.FairyTailSnow, + CardId.SouleatingOviraptor, + }); + return true; + } + return false; + } + + public bool CrystalWingSynchroDragoneff() + { + if (Duel.Player == 0) + { + + CrystalWingSynchroDragoneff_used = true; + AI.SelectCard(new[] { CardId.GhostOgre, CardId.GlowUpBulb, CardId.PlaguespreaderZombie, CardId.ShaddollFalco }); + return true; + } + else if (AI.Utils.IsChainTarget(Card) || AI.Utils.GetProblematicEnemySpell() != null) return true; + else if (Duel.Player == 1 && Duel.Phase == DuelPhase.BattleStart && AI.Utils.IsOneEnemyBetterThanValue(1500, true)) + { + if (AI.Utils.IsOneEnemyBetterThanValue(1900, true)) + { + AI.SelectPosition(CardPosition.FaceUpDefence); + } + else { + AI.SelectPosition(CardPosition.FaceUpAttack); + } + return true; + } + return false; + } + + private bool UltimateConductorTytannoeff() + { + + + if (Duel.Phase == DuelPhase.Main1 || Duel.Phase == DuelPhase.Main2) + { + IList targets = new[] { CardId.OvertexCoatls, CardId.ShaddollBeast, CardId.ShaddollSquamata, @@ -229,13 +287,35 @@ private bool UltimateConductorTytannoeff() CardId.GlowUpBulb, CardId.PlaguespreaderZombie, CardId.FairyTailSnow, - }); + CardId.KeeperOfDragonicMagic, + CardId.Raiden, + CardId.Lumina, + CardId.DogorantheMadFlameKaiju, + CardId.GamecieltheSeaTurtleKaiju, + CardId.RadiantheMultidimensionalKaiju, + CardId.GiantRex, + CardId.ShaddollSquamata, + CardId.SouleatingOviraptor, + CardId.Raiden, + CardId.Lumina, + CardId.AshBlossom, + CardId.GhostOgre, + CardId.MaxxC, + }; + if (!Bot.HasInHand(targets)) + { + if (!Bot.HasInMonstersZone(targets)) + { + return false; + } + } + AI.SelectCard(targets); } if (Duel.Phase == DuelPhase.Damage) - return true; - + AI.SelectYesNo(true); return true; } + private bool UltimateConductorTytannosp() { Pillused = true; @@ -247,6 +327,7 @@ private bool UltimateConductorTytannosp() return true; } + private bool KeeperOfDragonicMagic() { if (ActivateDescription == -1) @@ -258,17 +339,22 @@ private bool KeeperOfDragonicMagic() return true; } + private bool MonsterRepos() { if (Card.Id == CardId.ElShaddollConstruct && Card.IsAttack()) return false; return base.DefaultMonsterRepos(); } - public override void OnNewTurn() + + private bool OvertexCoatlseff() { - Pillused = false; + if (OvertexCoatlseff_used == true) + return false; + return true; } - private bool DoubleEvolutionPill() + + private bool DoubleEvolutionPilleff() { if (Pillused == true) return false; Pillused = true; @@ -305,7 +391,37 @@ private bool DoubleEvolutionPill() CardId.UltimateConductorTytanno, }); } - AI.SelectNextCard(new[] { + IList targets2 = new[] { + CardId.GiantRex, + CardId.DogorantheMadFlameKaiju, + CardId.GamecieltheSeaTurtleKaiju, + CardId.RadiantheMultidimensionalKaiju, + CardId.OvertexCoatls, + CardId.SouleatingOviraptor, + CardId.UltimateConductorTytanno, + }; + if (Bot.HasInGraveyard(targets)) + { + AI.SelectNextCard(new[] { + CardId.ShaddollBeast, + CardId.ShaddollDragon, + CardId.KeeperOfDragonicMagic, + CardId.ShaddollSquamata, + CardId.SouleatingOviraptor, + CardId.Raiden, + CardId.Lumina, + CardId.ShaddollHedgehog, + CardId.AshBlossom, + CardId.GhostOgre, + CardId.ShaddollFalco, + CardId.MaxxC, + CardId.PlaguespreaderZombie, + CardId.GlowUpBulb, + CardId.FairyTailSnow, + }); + } + else + AI.SelectNextCard(new[] { CardId.ShaddollBeast, CardId.ShaddollDragon, CardId.KeeperOfDragonicMagic, @@ -345,6 +461,7 @@ private bool ShaddollCoreeff() } return true; } + private bool FairyTailSnow() { @@ -354,132 +471,48 @@ private bool FairyTailSnow() } return false; } + private bool SouleatingOviraptoreff() { - AI.SelectCard(CardId.OvertexCoatls); - AI.SelectYesNo(false); + if (!OvertexCoatlseff_used) + { + AI.SelectCard(CardId.OvertexCoatls); + AI.SelectYesNo(false); + } + else + { + AI.SelectCard(CardId.UltimateConductorTytanno); + AI.SelectYesNo(true); + } return true; } - private bool GlowUpBulb() + + private bool GlowUpBulbeff() { + if(Bot.HasInMonstersZone(CardId.Lumina)|| + Bot.HasInMonstersZone(CardId.FairyTailSnow)|| + Bot.HasInMonstersZone(CardId.KeeperOfDragonicMagic)|| + Bot.HasInMonstersZone(CardId.SouleatingOviraptor) + ) AI.SelectPosition(CardPosition.FaceUpDefence); return true; } - private bool ShaddollFusion() + + private bool ShaddollFusioneff() { if (Enemy.GetMonstersExtraZoneCount() != 0) { - IList materials0 = Bot.Deck; - IList materials1 = Bot.Deck; - IList mats = new List(); - - AI.SelectCard(CardId.ElShaddollConstruct); - - ClientCard mat = null; - foreach (ClientCard card in materials0) - { - if (card.HasAttribute(CardAttribute.Light)) - { - mat = card; - break; - } - } - foreach (ClientCard card in materials1) - { - AI.SelectCard(new[] - { - CardId.ShaddollBeast, - CardId.ShaddollSquamata, - CardId.ShaddollHedgehog, - CardId.ShaddollDragon, - CardId.ShaddollFalco, - }); - } - if (mat != null) - { - mats.Add(mat); - - AI.SelectMaterials(mats); - AI.SelectPosition(CardPosition.FaceUpAttack); - return true; - } - AI.SelectCard(CardId.ElShaddollShekhinaga); - foreach (ClientCard card in materials0) - { - if (card.HasAttribute(CardAttribute.Earth)) - { - mat = card; - break; - } - } - foreach (ClientCard card in materials1) - { - AI.SelectCard(new[] - { - CardId.ShaddollBeast, - CardId.ShaddollSquamata, - CardId.ShaddollHedgehog, - CardId.ShaddollDragon, - CardId.ShaddollFalco, - - }); - } - if (mat != null) - { - mats.Add(mat); - - AI.SelectMaterials(mats); - - AI.SelectPosition(CardPosition.FaceUpAttack); - return true; - } - - AI.SelectCard(CardId.ElShaddollGrysra); - foreach (ClientCard card in materials0) - { - if (card.HasAttribute(CardAttribute.Fire)) - { - mat = card; - break; - } - } - foreach (ClientCard card in materials1) + AI.SelectCard(new[] { - AI.SelectCard(new[] - { - CardId.ShaddollBeast, - CardId.ShaddollSquamata, - CardId.ShaddollHedgehog, - CardId.ShaddollDragon, - CardId.ShaddollFalco, - + CardId.ElShaddollConstruct, + CardId.ElShaddollShekhinaga, + CardId.ElShaddollGrysra, + CardId.ElShaddollWinda }); - } - if (mat != null) - { - mats.Add(mat); - - AI.SelectMaterials(mats); - - AI.SelectPosition(CardPosition.FaceUpAttack); - return true; - } - - AI.SelectCard(CardId.ElShaddollWinda); - foreach (ClientCard card in materials0) - { - if (card.HasAttribute(CardAttribute.Dark)) - { - mat = card; - break; - } - } - foreach (ClientCard card in materials1) - { - AI.SelectCard(new[] + AI.SelectNextCard(new[] { CardId.ShaddollBeast, CardId.ShaddollSquamata, @@ -488,16 +521,8 @@ private bool ShaddollFusion() CardId.ShaddollFalco, }); - } - if (mat != null) - { - mats.Add(mat); - - AI.SelectMaterials(mats); - - AI.SelectPosition(CardPosition.FaceUpAttack); - return true; - } + AI.SelectPosition(CardPosition.FaceUpAttack); + return true; } else { @@ -510,27 +535,6 @@ private bool ShaddollFusion() } - - /* private ClientCard GetAleisterInGrave() - { - foreach (ClientCard card in Enemy.Graveyard) - { - if (card.Id == CardId.AleisterTheInvoker) - { - return card; - } - } - foreach (ClientCard card in Bot.Graveyard) - { - if (card.Id == CardId.AleisterTheInvoker) - { - return card; - } - } - return null; - }*/ - - private bool ShaddollCore() { return Bot.HasInGraveyard(CardId.ShaddollFusion); @@ -577,12 +581,10 @@ private bool RebornEffect() } private bool PotofAvarice() { + return true; } - private bool infiniteTransience() - { - return Duel.LastChainPlayer == 1; - } + private bool MaxxC() { return Duel.Player == 1; @@ -610,17 +612,35 @@ private bool ChargeOfTheLightBrigadeEffect() } private bool SinisterShadowGames() { - if (Card.Location != CardLocation.MonsterZone) - return true; - else - { - AI.SelectCard(new[] + + AI.SelectCard(new[] { CardId.ShaddollBeast, - } + }); + + return true; + } + + private bool ElShaddollShekhinagaeff() + { + if (Card.Location != CardLocation.MonsterZone) + return true; + else + { + if(Duel.LastChainPlayer==1) + { + AI.SelectCard(new[] + { + CardId.ElShaddollConstruct, + CardId.ElShaddollShekhinaga, + CardId.ElShaddollGrysra, + CardId.ElShaddollWinda, + CardId.ShaddollSquamata, + } ); + } } return true; } @@ -644,6 +664,21 @@ private bool ShaddollFalcoeff() } return true; } + private bool ShaddollHedgehogeff() + { + if (Card.Location != CardLocation.MonsterZone) + { + AI.SelectCard(new[] + { + CardId.ShaddollSquamata, + }); + } + else + { + AI.SelectCard(new[] { CardId.ShaddollFusion, CardId.SinisterShadowGames }); + } + return true; + } private bool ShaddollDragoneff() { if (Card.Location == CardLocation.MonsterZone) @@ -664,12 +699,10 @@ private bool ShaddollSquamataeff() if (Card.Location != CardLocation.MonsterZone) { AI.SelectCard(new[] - { + { CardId.ShaddollBeast, - - }); + }); } - else { ClientCard target = AI.Utils.GetBestEnemyMonster(); @@ -677,28 +710,38 @@ private bool ShaddollSquamataeff() } return true; - - - } private bool FoolishBurialEffect() { + if (Bot.GetRemainingCount(CardId.DoubleEvolutionPill, 3) > 0) + { + if (!OvertexCoatlseff_used) + { + AI.SelectCard(new[] + { + CardId.OvertexCoatls, + }); + } + else return false; + } + else + { AI.SelectCard(new[] - { - CardId.OvertexCoatls, - CardId.ShaddollSquamata, - CardId.ShaddollBeast, - CardId.ShaddollCore, - CardId.ShaddollHedgehog, - CardId.ShaddollFalco, - CardId.ShaddollDragon, - CardId.FairyTailSnow, - }); + { + CardId.OvertexCoatls, + CardId.ShaddollSquamata, + CardId.FairyTailSnow, + }); + + } + return true; } + + private bool GoblindberghSummon() { foreach (ClientCard card in Bot.Hand.GetMonsters()) diff --git a/Game/AI/Enums/DangerousMonster.cs b/Game/AI/Enums/DangerousMonster.cs index 4ca9fe40..c4cea308 100644 --- a/Game/AI/Enums/DangerousMonster.cs +++ b/Game/AI/Enums/DangerousMonster.cs @@ -14,6 +14,7 @@ public enum DangerousMonster MetaionTheTimelord = 74530899, KamionTheTimelord = 91712985, LazionTheTimelord = 92435533, - EaterOfMillions = 63845230 - } + EaterOfMillions = 63845230, + ElShaddollConstruct = 20366274, +} } diff --git a/Game/ClientField.cs b/Game/ClientField.cs index 2e37d01f..f7e9b62b 100644 --- a/Game/ClientField.cs +++ b/Game/ClientField.cs @@ -70,6 +70,19 @@ public int GetSpellCountWithoutField() } return count; } + + + public int GetFieldCount() + { + return GetSpellCount() + GetMonsterCount(); + } + + + public int GetFieldHandCount() + { + return GetSpellCount() + GetMonsterCount() + GetHandCount(); + } + public bool IsFieldEmpty() {