Commit f68f13c4 authored by nanahira's avatar nanahira

mg

parents 66578aff 318cb4b2
#created by ...
#main
41386308
3549275
45812361
45812361
45812361
19665973
19665973
19665973
60990740
60990740
60990740
35261759
35261759
59750328
59750328
98645731
98645731
98645731
91623717
91623717
12607053
12607053
18252559
18252559
18252559
24068492
24068492
24068492
27053506
27053506
27053506
29843091
29843091
29843091
36361633
36361633
36361633
36468556
37576645
37576645
37576645
62279055
62279055
62279055
67443336
67443336
67443336
75249652
75249652
75249652
83555666
98444741
98444741
#extra
41999284
41999284
41999284
!side
33508719
67095270
67095270
67095270
98444741
100227025
100227025
100227025
\ No newline at end of file
...@@ -247,7 +247,8 @@ namespace WindBot.Game.AI ...@@ -247,7 +247,8 @@ namespace WindBot.Game.AI
foreach (ClientCard ecard in spells) foreach (ClientCard ecard in spells)
{ {
if (ecard.IsFaceup() && ecard.HasType(CardType.Continuous)) if (ecard.IsFaceup() && ecard.HasType(CardType.Continuous)||
ecard.IsFaceup() && ecard.HasType(CardType.Field))
return ecard; return ecard;
} }
......
This diff is collapsed.
...@@ -103,7 +103,7 @@ namespace WindBot.Game.AI.Decks ...@@ -103,7 +103,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor(ExecutorType.Activate, CardId.Raiden); AddExecutor(ExecutorType.Activate, CardId.Raiden);
AddExecutor(ExecutorType.Summon , CardId.KeeperOfDragonicMagic); AddExecutor(ExecutorType.Summon , CardId.KeeperOfDragonicMagic);
AddExecutor(ExecutorType.Activate, CardId.KeeperOfDragonicMagic, KeeperOfDragonicMagic); AddExecutor(ExecutorType.Activate, CardId.KeeperOfDragonicMagic, KeeperOfDragonicMagiceff);
AddExecutor(ExecutorType.MonsterSet, CardId.ShaddollSquamata); AddExecutor(ExecutorType.MonsterSet, CardId.ShaddollSquamata);
AddExecutor(ExecutorType.MonsterSet, CardId.GlowUpBulb); AddExecutor(ExecutorType.MonsterSet, CardId.GlowUpBulb);
AddExecutor(ExecutorType.MonsterSet, CardId.ShaddollHedgehog); AddExecutor(ExecutorType.MonsterSet, CardId.ShaddollHedgehog);
...@@ -123,7 +123,7 @@ namespace WindBot.Game.AI.Decks ...@@ -123,7 +123,7 @@ namespace WindBot.Game.AI.Decks
//activate //activate
AddExecutor(ExecutorType.SpSummon , CardId.GlowUpBulb,GlowUpBulbeff); AddExecutor(ExecutorType.Activate , CardId.GlowUpBulb,GlowUpBulbeff);
//activate chain //activate chain
AddExecutor(ExecutorType.Activate, CardId.OvertexCoatls, OvertexCoatlseff); AddExecutor(ExecutorType.Activate, CardId.OvertexCoatls, OvertexCoatlseff);
...@@ -218,7 +218,33 @@ namespace WindBot.Game.AI.Decks ...@@ -218,7 +218,33 @@ namespace WindBot.Game.AI.Decks
}; };
} }
public override BattlePhaseAction OnSelectAttackTarget(ClientCard attacker, IList<ClientCard> defenders)
{
for (int i = 0; i < defenders.Count; ++i)
{
ClientCard defender = defenders[i];
attacker.RealPower = attacker.Attack;
defender.RealPower = defender.GetDefensePower();
if (!OnPreBattleBetween(attacker, defender))
continue;
if (attacker.RealPower > defender.RealPower ||
(attacker.RealPower >= defender.RealPower && attacker.IsLastAttacker)||
attacker.Id==CardId.UltimateConductorTytanno
)
return AI.Attack(attacker, defender);
}
if (attacker.CanDirectAttack)
return AI.Attack(attacker, null);
return null;
}
public override bool OnSelectHand()
{
return true;
}
public override void OnNewTurn() public override void OnNewTurn()
{ {
Pillused = false; Pillused = false;
...@@ -242,9 +268,9 @@ namespace WindBot.Game.AI.Decks ...@@ -242,9 +268,9 @@ namespace WindBot.Game.AI.Decks
CardId.FairyTailSnow, CardId.FairyTailSnow,
CardId.SouleatingOviraptor, CardId.SouleatingOviraptor,
}); });
return true; AI.SelectNextCard(CardId.GlowUpBulb);
} }
return false; return true;
} }
public bool CrystalWingSynchroDragoneff() public bool CrystalWingSynchroDragoneff()
...@@ -276,7 +302,7 @@ namespace WindBot.Game.AI.Decks ...@@ -276,7 +302,7 @@ namespace WindBot.Game.AI.Decks
{ {
if (Duel.Phase == DuelPhase.Main1 || Duel.Phase == DuelPhase.Main2) if (Duel.Phase == DuelPhase.Main1)
{ {
IList<int> targets = new[] { IList<int> targets = new[] {
CardId.OvertexCoatls, CardId.OvertexCoatls,
...@@ -321,14 +347,14 @@ namespace WindBot.Game.AI.Decks ...@@ -321,14 +347,14 @@ namespace WindBot.Game.AI.Decks
Pillused = true; Pillused = true;
foreach (ClientCard card in Bot.GetMonsters()) foreach (ClientCard card in Bot.GetMonsters())
{ {
if (card.Id == Card.Id && card.IsFaceup()) if (card.Id == CardId.UltimateConductorTytanno && card.IsFaceup())
return false; return false;
} }
return true; return true;
} }
private bool KeeperOfDragonicMagic() private bool KeeperOfDragonicMagiceff()
{ {
if (ActivateDescription == -1) if (ActivateDescription == -1)
{ {
...@@ -489,11 +515,11 @@ namespace WindBot.Game.AI.Decks ...@@ -489,11 +515,11 @@ namespace WindBot.Game.AI.Decks
private bool GlowUpBulbeff() private bool GlowUpBulbeff()
{ {
if(Bot.HasInMonstersZone(CardId.Lumina)|| /*if(Bot.HasInMonstersZone(CardId.Lumina)||
Bot.HasInMonstersZone(CardId.FairyTailSnow)|| Bot.HasInMonstersZone(CardId.FairyTailSnow)||
Bot.HasInMonstersZone(CardId.KeeperOfDragonicMagic)|| Bot.HasInMonstersZone(CardId.KeeperOfDragonicMagic)||
Bot.HasInMonstersZone(CardId.SouleatingOviraptor) Bot.HasInMonstersZone(CardId.SouleatingOviraptor)
) )*/
AI.SelectPosition(CardPosition.FaceUpDefence); AI.SelectPosition(CardPosition.FaceUpDefence);
return true; return true;
} }
...@@ -501,10 +527,8 @@ namespace WindBot.Game.AI.Decks ...@@ -501,10 +527,8 @@ namespace WindBot.Game.AI.Decks
private bool ShaddollFusioneff() private bool ShaddollFusioneff()
{ {
if (Enemy.GetMonstersExtraZoneCount() != 0) if(Enemy.GetMonstersExtraZoneCount()>0)
{ {
AI.SelectCard(new[] AI.SelectCard(new[]
{ {
CardId.ElShaddollConstruct, CardId.ElShaddollConstruct,
...@@ -629,7 +653,7 @@ namespace WindBot.Game.AI.Decks ...@@ -629,7 +653,7 @@ namespace WindBot.Game.AI.Decks
return true; return true;
else else
{ {
if(Duel.LastChainPlayer==1) if (DefaultBreakthroughSkill())
{ {
AI.SelectCard(new[] AI.SelectCard(new[]
{ {
...@@ -641,6 +665,8 @@ namespace WindBot.Game.AI.Decks ...@@ -641,6 +665,8 @@ namespace WindBot.Game.AI.Decks
} }
); );
} }
else
return false;
} }
return true; return true;
} }
...@@ -707,6 +733,8 @@ namespace WindBot.Game.AI.Decks ...@@ -707,6 +733,8 @@ namespace WindBot.Game.AI.Decks
{ {
ClientCard target = AI.Utils.GetBestEnemyMonster(); ClientCard target = AI.Utils.GetBestEnemyMonster();
AI.SelectCard(target); AI.SelectCard(target);
if (Enemy.GetMonsterCount() == 0)
return false;
} }
return true; return true;
...@@ -739,9 +767,6 @@ namespace WindBot.Game.AI.Decks ...@@ -739,9 +767,6 @@ namespace WindBot.Game.AI.Decks
return true; return true;
} }
private bool GoblindberghSummon() private bool GoblindberghSummon()
{ {
foreach (ClientCard card in Bot.Hand.GetMonsters()) foreach (ClientCard card in Bot.Hand.GetMonsters())
...@@ -753,13 +778,6 @@ namespace WindBot.Game.AI.Decks ...@@ -753,13 +778,6 @@ namespace WindBot.Game.AI.Decks
} }
private bool PerformageTrickClownEffect()
{
AI.SelectPosition(CardPosition.FaceUpDefence);
return true;
}
public bool Hand_act_eff() public bool Hand_act_eff()
{ {
//if (Card.Id == CardId.Urara && Bot.HasInHand(CardId.LockBird) && Bot.HasInSpellZone(CardId.Re)) return false; //if (Card.Id == CardId.Urara && Bot.HasInHand(CardId.LockBird) && Bot.HasInSpellZone(CardId.Re)) return false;
...@@ -804,10 +822,7 @@ namespace WindBot.Game.AI.Decks ...@@ -804,10 +822,7 @@ namespace WindBot.Game.AI.Decks
return true; return true;
} }
} }
private bool HonestEffect()
{
return Duel.Phase != DuelPhase.Main1;
}
} }
} }
\ No newline at end of file
...@@ -338,7 +338,7 @@ namespace WindBot.Game.AI.Decks ...@@ -338,7 +338,7 @@ namespace WindBot.Game.AI.Decks
if (Duel.Player == 0) return false; if (Duel.Player == 0) return false;
if (Duel.Phase == DuelPhase.End) return true; if (Duel.Phase == DuelPhase.End) return true;
if (Duel.LastChainPlayer == 1 && (AI.Utils.IsChainTarget(Card) || (AI.Utils.GetLastChainCard().Id == CardId.Feather && !Bot.HasInSpellZone(CardId.Grass)))) return true; if (Duel.LastChainPlayer == 1 && (AI.Utils.IsChainTarget(Card) || (AI.Utils.GetLastChainCard().Id == CardId.Feather && !Bot.HasInSpellZone(CardId.Grass)))) return true;
if (Duel.Phase == DuelPhase.BattleStart) if (Duel.Phase > DuelPhase.Main1 && Duel.Phase < DuelPhase.Main2)
{ {
int total_atk = 0; int total_atk = 0;
List<ClientCard> enemy_monster = Enemy.GetMonsters(); List<ClientCard> enemy_monster = Enemy.GetMonsters();
...@@ -618,6 +618,7 @@ namespace WindBot.Game.AI.Decks ...@@ -618,6 +618,7 @@ namespace WindBot.Game.AI.Decks
red_ss_count += 1; red_ss_count += 1;
return true; return true;
} }
if (c.Id == CardId.Pink) return false;
if (tosolve_enemy != null) if (tosolve_enemy != null)
{ {
if (Bot.HasInHand(CardId.White) && c.Attack + c.BaseAttack < tosolve_enemy.Attack) if (Bot.HasInHand(CardId.White) && c.Attack + c.BaseAttack < tosolve_enemy.Attack)
...@@ -793,8 +794,8 @@ namespace WindBot.Game.AI.Decks ...@@ -793,8 +794,8 @@ namespace WindBot.Game.AI.Decks
} }
if (AI.Utils.GetProblematicEnemyMonster() != null) if (AI.Utils.GetProblematicEnemyMonster() != null)
{ {
int atk = AI.Utils.GetProblematicEnemyMonster().Attack; int power = AI.Utils.GetProblematicEnemyMonster().GetDefensePower();
if (atk >= 1800 && atk <= 3600 && Bot.GetRemainingCount(CardId.White, 2) > 0 && !Bot.HasInHand(CardId.White)) if (power >= 1800 && power <= 3600 && Bot.GetRemainingCount(CardId.White, 2) > 0 && !Bot.HasInHand(CardId.White))
{ {
AI.SelectCard(new[] AI.SelectCard(new[]
{ {
...@@ -823,7 +824,6 @@ namespace WindBot.Game.AI.Decks ...@@ -823,7 +824,6 @@ namespace WindBot.Game.AI.Decks
return true; return true;
} }
if ((Bot.HasInHand(CardId.Red) || Bot.HasInHand(CardId.Stage) || Bot.HasInHand(CardId.Yellow)) && Bot.GetRemainingCount(CardId.Re,1) > 0) { if ((Bot.HasInHand(CardId.Red) || Bot.HasInHand(CardId.Stage) || Bot.HasInHand(CardId.Yellow)) && Bot.GetRemainingCount(CardId.Re,1) > 0) {
Logger.DebugWriteLine("to search reincarnation");
AI.SelectCard(new[] AI.SelectCard(new[]
{ {
CardId.Re, CardId.Re,
...@@ -851,26 +851,9 @@ namespace WindBot.Game.AI.Decks ...@@ -851,26 +851,9 @@ namespace WindBot.Game.AI.Decks
public bool White_eff() public bool White_eff()
{ {
if (Duel.Phase >= DuelPhase.Main2) return false;
if (Duel.Phase > DuelPhase.Main1 && Duel.Phase < DuelPhase.Main2) if (Duel.Phase > DuelPhase.Main1 && Duel.Phase < DuelPhase.Main2)
{ {
// from blackwing
/*
ClientCard bestMy = Bot.GetMonsters().GetHighestAttackMonster();
ClientCard bestEnemyATK = Enemy.GetMonsters().GetHighestAttackMonster();
ClientCard bestEnemyDEF = Enemy.GetMonsters().GetHighestDefenseMonster();
if (bestMy == null || (bestEnemyATK == null && bestEnemyDEF == null))
return false;
if (bestEnemyATK != null && bestMy.Attack <= bestEnemyATK.Attack && bestMy.Attack * 2 >= bestEnemyATK.Attack)
{
white_eff_used = true;
return true;
}
if (bestEnemyDEF != null && bestMy.Attack <= bestEnemyDEF.Defense && bestMy.Attack * 2 >= bestEnemyDEF.Defense)
{
white_eff_used = true;
return true;
}
*/
if (Bot.BattlingMonster == null || Enemy.BattlingMonster == null || !IsTrickstar(Bot.BattlingMonster.Id) || Bot.BattlingMonster.HasPosition(CardPosition.Defence)) return false; if (Bot.BattlingMonster == null || Enemy.BattlingMonster == null || !IsTrickstar(Bot.BattlingMonster.Id) || Bot.BattlingMonster.HasPosition(CardPosition.Defence)) return false;
if (Bot.BattlingMonster.Attack <= Enemy.BattlingMonster.RealPower && Bot.BattlingMonster.Attack + Bot.BattlingMonster.BaseAttack >= Enemy.BattlingMonster.RealPower) if (Bot.BattlingMonster.Attack <= Enemy.BattlingMonster.RealPower && Bot.BattlingMonster.Attack + Bot.BattlingMonster.BaseAttack >= Enemy.BattlingMonster.RealPower)
{ {
...@@ -980,6 +963,7 @@ namespace WindBot.Game.AI.Decks ...@@ -980,6 +963,7 @@ namespace WindBot.Game.AI.Decks
public bool Ts_reborn() public bool Ts_reborn()
{ {
if (AI.Utils.IsTurn1OrMain2()) return false;
if (Duel.Player == 0 && Enemy.LifePoints <= 1000) if (Duel.Player == 0 && Enemy.LifePoints <= 1000)
{ {
AI.SelectCard(CardId.Pink); AI.SelectCard(CardId.Pink);
...@@ -1529,8 +1513,12 @@ namespace WindBot.Game.AI.Decks ...@@ -1529,8 +1513,12 @@ namespace WindBot.Game.AI.Decks
public bool Borrel_eff() public bool Borrel_eff()
{ {
if (ActivateDescription == -1) { if (ActivateDescription == -1) {
Logger.DebugWriteLine("borrel's ntr effect"); ClientCard enemy_monster = Enemy.BattlingMonster;
return true; if (enemy_monster != null && enemy_monster.HasPosition(CardPosition.Attack))
{
return (Card.Attack - enemy_monster.Attack < Enemy.LifePoints);
}
else return false;
}; };
ClientCard BestEnemy = AI.Utils.GetBestEnemyMonster(true); ClientCard BestEnemy = AI.Utils.GetBestEnemyMonster(true);
ClientCard WorstBot = Bot.GetMonsters().GetLowestAttackMonster(); ClientCard WorstBot = Bot.GetMonsters().GetLowestAttackMonster();
...@@ -1548,9 +1536,6 @@ namespace WindBot.Game.AI.Decks ...@@ -1548,9 +1536,6 @@ namespace WindBot.Game.AI.Decks
{ {
if (Duel.LastChainPlayer == 1) if (Duel.LastChainPlayer == 1)
{ {
Logger.DebugWriteLine(AI.Utils.GetLastChainCard().Name.ToString());
Logger.DebugWriteLine(AI.Utils.GetLastChainCard().IsMonster().ToString());
Logger.DebugWriteLine(Enemy.HasInGraveyard(AI.Utils.GetLastChainCard().Id).ToString());
if (AI.Utils.GetLastChainCard().IsMonster() && Enemy.HasInGraveyard(AI.Utils.GetLastChainCard().Id)) if (AI.Utils.GetLastChainCard().IsMonster() && Enemy.HasInGraveyard(AI.Utils.GetLastChainCard().Id))
{ {
GraveCall_id = AI.Utils.GetLastChainCard().Id; GraveCall_id = AI.Utils.GetLastChainCard().Id;
...@@ -1626,50 +1611,48 @@ namespace WindBot.Game.AI.Decks ...@@ -1626,50 +1611,48 @@ namespace WindBot.Game.AI.Decks
} }
} }
public override BattlePhaseAction OnBattle(IList<ClientCard> attackers, IList<ClientCard> defenders) public override BattlePhaseAction OnSelectAttackTarget(ClientCard attacker, IList<ClientCard> defenders)
{
if (attackers.Count == 0)
return AI.ToMainPhase2();
if (defenders.Count == 0)
{
for (int i = attackers.Count - 1; i >= 0; --i)
{
ClientCard attacker = attackers[i];
if (attacker.Attack > 0)
return AI.Attack(attacker, null);
}
}
else
{ {
ClientCard lowestattack = null;
for (int i = defenders.Count - 1; i >= 0; --i) for (int i = defenders.Count - 1; i >= 0; --i)
{ {
ClientCard defender = defenders[i]; ClientCard defender = defenders[i];
for (int j = 0; j < attackers.Count; ++j) if (defender.HasPosition(CardPosition.Attack) && !defender.IsMonsterDangerous() && (lowestattack == null || defender.Attack < lowestattack.Attack)) lowestattack = defender;
}
if (lowestattack != null && attacker.Attack - lowestattack.Attack >= Enemy.LifePoints) return AI.Attack(attacker, lowestattack);
for (int i = 0; i < defenders.Count; ++i)
{ {
ClientCard attacker = attackers[j]; ClientCard defender = defenders[i];
attacker.RealPower = attacker.Attack; attacker.RealPower = attacker.Attack;
defender.RealPower = defender.GetDefensePower(); defender.RealPower = defender.GetDefensePower();
if (!defender.IsMonsterHasPreventActivationEffectInBattle() && !attacker.IsDisabled()) if (!defender.IsMonsterHasPreventActivationEffectInBattle() && !attacker.IsDisabled())
{ {
if ((attacker.Id == CardId.Eater && !defender.HasType(CardType.Token) && GraveCall_id != CardId.Eater) || attacker.Id == CardId.borrel) return AI.Attack(attacker, defender); if ((attacker.Id == CardId.Eater && !defender.HasType(CardType.Token) && GraveCall_id != CardId.Eater) || attacker.Id == CardId.borrel) return AI.Attack(attacker, defender);
} }
if (!OnPreBattleBetween(attacker, defender)) if (!OnPreBattleBetween(attacker, defender))
continue; continue;
if (attacker.RealPower > defender.RealPower || (attacker.RealPower >= defender.RealPower && j == attackers.Count - 1)) if (attacker.RealPower > defender.RealPower || (attacker.RealPower >= defender.RealPower && attacker.IsLastAttacker && defender.IsAttack()))
return AI.Attack(attacker, defender); return AI.Attack(attacker, defender);
} }
}
for (int i = attackers.Count - 1; i >= 0; --i)
{
ClientCard attacker = attackers[i];
if (attacker.CanDirectAttack) if (attacker.CanDirectAttack)
return AI.Attack(attacker, null); return AI.Attack(attacker, null);
return null;
} }
public override ClientCard OnSelectAttacker(IList<ClientCard> attackers, IList<ClientCard> defenders)
{
for (int i = 0; i < attackers.Count; ++i)
{
ClientCard attacker = attackers[i];
if (attacker.Id == CardId.borrel || attacker.Id == CardId.Eater) return attacker;
} }
if (!Battle.CanMainPhaseTwo) return null;
return AI.Attack(attackers[0], (defenders.Count == 0) ? null : defenders[0]);
return AI.ToMainPhase2();
} }
public override bool OnPreBattleBetween(ClientCard attacker, ClientCard defender) public override bool OnPreBattleBetween(ClientCard attacker, ClientCard defender)
...@@ -1677,7 +1660,7 @@ namespace WindBot.Game.AI.Decks ...@@ -1677,7 +1660,7 @@ namespace WindBot.Game.AI.Decks
if (!defender.IsMonsterHasPreventActivationEffectInBattle()) if (!defender.IsMonsterHasPreventActivationEffectInBattle())
{ {
if (IsTrickstar(attacker.Id) && Bot.HasInHand(CardId.White) && !white_eff_used) if (IsTrickstar(attacker.Id) && Bot.HasInHand(CardId.White) && !white_eff_used)
attacker.RealPower = attacker.RealPower * 2; attacker.RealPower = attacker.RealPower + attacker.Attack;
} }
return base.OnPreBattleBetween(attacker, defender); return base.OnPreBattleBetween(attacker, defender);
} }
......
...@@ -62,7 +62,7 @@ namespace WindBot.Game.AI ...@@ -62,7 +62,7 @@ namespace WindBot.Game.AI
if (!OnPreBattleBetween(attacker, defender)) if (!OnPreBattleBetween(attacker, defender))
continue; continue;
if (attacker.RealPower > defender.RealPower || (attacker.RealPower >= defender.RealPower && attacker.IsLastAttacker)) if (attacker.RealPower > defender.RealPower || (attacker.RealPower >= defender.RealPower && attacker.IsLastAttacker && defender.IsAttack()))
return AI.Attack(attacker, defender); return AI.Attack(attacker, defender);
} }
......
...@@ -89,7 +89,10 @@ namespace WindBot.Game.AI ...@@ -89,7 +89,10 @@ namespace WindBot.Game.AI
{ {
} }
public virtual void OnNewPhase()
{
// Some AI need do something on new phase
}
public virtual void OnNewTurn() public virtual void OnNewTurn()
{ {
// Some AI need do something on new turn // Some AI need do something on new turn
......
...@@ -76,6 +76,7 @@ ...@@ -76,6 +76,7 @@
<Compile Include="Game\AI\Decks\RainbowExecutor.cs" /> <Compile Include="Game\AI\Decks\RainbowExecutor.cs" />
<Compile Include="Game\AI\Decks\BlueEyesExecutor.cs" /> <Compile Include="Game\AI\Decks\BlueEyesExecutor.cs" />
<Compile Include="Game\AI\Decks\BurnExecutor.cs" /> <Compile Include="Game\AI\Decks\BurnExecutor.cs" />
<Compile Include="Game\AI\Decks\ChainBurnExecutor.cs" />
<Compile Include="Game\AI\Decks\EvilswarmExecutor.cs" /> <Compile Include="Game\AI\Decks\EvilswarmExecutor.cs" />
<Compile Include="Game\AI\Decks\GraydleExecutor.cs" /> <Compile Include="Game\AI\Decks\GraydleExecutor.cs" />
<Compile Include="Game\AI\Decks\LightswornExecutor.cs" /> <Compile Include="Game\AI\Decks\LightswornExecutor.cs" />
......
...@@ -109,6 +109,26 @@ ...@@ -109,6 +109,26 @@
"name": "永远之魂", "name": "永远之魂",
"deck": "Horus", "deck": "Horus",
"dialog": "soul.zh-CN" "dialog": "soul.zh-CN"
},
{
"name": "奇異果",
"deck": "LightswornShaddoldinosour",
"dialog": "kiwi.zh-TW"
},
{
"name": "奇異果",
"deck": "LightswornShaddoldinosour",
"dialog": "kiwi.zh-TW"
},
{
"name": "燃血鬥士",
"deck": "ChainBurn",
"dialog": "kiwi.zh-TW"
},
{
"name": "燃血鬥士",
"deck": "ChainBurn",
"dialog": "kiwi.zh-TW"
} }
] ]
} }
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