Commit e5d5696d authored by nanahira's avatar nanahira

Merge branch 'master' of https://github.com/moecube/windbot

parents 4eaca351 b2bf309b
...@@ -37,7 +37,6 @@ ...@@ -37,7 +37,6 @@
36361633 36361633
36361633 36361633
36361633 36361633
36468556
37576645 37576645
37576645 37576645
37576645 37576645
...@@ -52,7 +51,6 @@ ...@@ -52,7 +51,6 @@
75249652 75249652
83555666 83555666
98444741 98444741
98444741
#extra #extra
41999284 41999284
41999284 41999284
...@@ -65,4 +63,6 @@ ...@@ -65,4 +63,6 @@
98444741 98444741
100227025 100227025
100227025 100227025
100227025 100227025
\ No newline at end of file 36468556
98444741
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
...@@ -127,6 +127,23 @@ namespace WindBot.Game.AI ...@@ -127,6 +127,23 @@ namespace WindBot.Game.AI
return true; return true;
} }
/// <summary>
/// Called when the AI has to select a card position.
/// </summary>
/// <param name="cardId">Id of the card to position on the field.</param>
/// <param name="positions">List of available positions.</param>
/// <returns>Selected position, or 0 if no position is set for this card.</returns>
public override CardPosition OnSelectPosition(int cardId, IList<CardPosition> positions)
{
YGOSharp.OCGWrapper.NamedCard cardData = YGOSharp.OCGWrapper.NamedCard.Get(cardId);
if (cardData != null)
{
if (cardData.Attack == 0)
return CardPosition.FaceUpDefence;
}
return 0;
}
public override bool OnSelectBattleReplay() public override bool OnSelectBattleReplay()
{ {
if (Bot.BattlingMonster == null) if (Bot.BattlingMonster == null)
...@@ -290,9 +307,10 @@ namespace WindBot.Game.AI ...@@ -290,9 +307,10 @@ namespace WindBot.Game.AI
if (LastChainCard == null) if (LastChainCard == null)
return false; return false;
if (LastChainCard.Controller != 1 || LastChainCard.Location != CardLocation.MonsterZone || !DefaultUniqueTrap())
return false;
AI.SelectCard(LastChainCard); AI.SelectCard(LastChainCard);
return LastChainCard.Controller == 1 && LastChainCard.Location == CardLocation.MonsterZone && DefaultUniqueTrap(); return true;
} }
/// <summary> /// <summary>
......
...@@ -156,6 +156,12 @@ namespace WindBot.Game.AI ...@@ -156,6 +156,12 @@ namespace WindBot.Game.AI
return -1; return -1;
} }
public virtual CardPosition OnSelectPosition(int cardId, IList<CardPosition> positions)
{
// Overrided in DefalultExecutor
return 0;
}
public virtual bool OnSelectBattleReplay() public virtual bool OnSelectBattleReplay()
{ {
// Overrided in DefalultExecutor // Overrided in DefalultExecutor
......
...@@ -443,13 +443,17 @@ namespace WindBot.Game ...@@ -443,13 +443,17 @@ namespace WindBot.Game
/// <returns>Selected position.</returns> /// <returns>Selected position.</returns>
public CardPosition OnSelectPosition(int cardId, IList<CardPosition> positions) public CardPosition OnSelectPosition(int cardId, IList<CardPosition> positions)
{ {
CardPosition selector_selected = m_position;
m_position = CardPosition.FaceUpAttack;
CardPosition executor_selected = Executor.OnSelectPosition(cardId, positions);
// Selects the selected position if available, the first available otherwise. // Selects the selected position if available, the first available otherwise.
if (positions.Contains(m_position)) if (positions.Contains(executor_selected))
{ return executor_selected;
CardPosition old = m_position; if (positions.Contains(selector_selected))
m_position = CardPosition.FaceUpAttack; return selector_selected;
return old;
}
return positions[0]; return positions[0];
} }
......
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
...@@ -265,6 +265,7 @@ namespace WindBot.Game ...@@ -265,6 +265,7 @@ namespace WindBot.Game
private void OnDuelEnd(BinaryReader packet) private void OnDuelEnd(BinaryReader packet)
{ {
Connection.Close(); Connection.Close();
Logger.DebugWriteLine("********************* Duel end *********************");
} }
private void OnChat(BinaryReader packet) private void OnChat(BinaryReader packet)
...@@ -352,6 +353,7 @@ namespace WindBot.Game ...@@ -352,6 +353,7 @@ namespace WindBot.Game
{ {
int player = GetLocalPlayer(packet.ReadByte()); int player = GetLocalPlayer(packet.ReadByte());
int count = packet.ReadByte(); int count = packet.ReadByte();
Logger.DebugWriteLine("(" + player.ToString() + "抽了" + count.ToString() + "张卡)");
for (int i = 0; i < count; ++i) for (int i = 0; i < count; ++i)
{ {
...@@ -423,6 +425,7 @@ namespace WindBot.Game ...@@ -423,6 +425,7 @@ namespace WindBot.Game
private void OnNewPhase(BinaryReader packet) private void OnNewPhase(BinaryReader packet)
{ {
_duel.Phase = (DuelPhase)packet.ReadInt16(); _duel.Phase = (DuelPhase)packet.ReadInt16();
Logger.DebugWriteLine("(进入" + (_duel.Phase.ToString()) + ")");
_duel.LastSummonPlayer = -1; _duel.LastSummonPlayer = -1;
_duel.Fields[0].BattlingMonster = null; _duel.Fields[0].BattlingMonster = null;
_duel.Fields[1].BattlingMonster = null; _duel.Fields[1].BattlingMonster = null;
...@@ -434,6 +437,7 @@ namespace WindBot.Game ...@@ -434,6 +437,7 @@ namespace WindBot.Game
int player = GetLocalPlayer(packet.ReadByte()); int player = GetLocalPlayer(packet.ReadByte());
int final = _duel.Fields[player].LifePoints - packet.ReadInt32(); int final = _duel.Fields[player].LifePoints - packet.ReadInt32();
if (final < 0) final = 0; if (final < 0) final = 0;
Logger.DebugWriteLine("(" + player.ToString() + "受到了伤害,当前为" + final.ToString() + ")");
_duel.Fields[player].LifePoints = final; _duel.Fields[player].LifePoints = final;
} }
...@@ -463,6 +467,7 @@ namespace WindBot.Game ...@@ -463,6 +467,7 @@ namespace WindBot.Game
packet.ReadInt32(); // reason packet.ReadInt32(); // reason
ClientCard card = _duel.GetCard(pc, (CardLocation)pl, ps); ClientCard card = _duel.GetCard(pc, (CardLocation)pl, ps);
if (card != null) Logger.DebugWriteLine("(" + pc.ToString() + "的" + (card.Name ?? "未知卡片") + "从" + (CardLocation)pl + "移动到了" + (CardLocation)cl + ")");
if ((pl & (int)CardLocation.Overlay) != 0) if ((pl & (int)CardLocation.Overlay) != 0)
{ {
...@@ -506,6 +511,8 @@ namespace WindBot.Game ...@@ -506,6 +511,8 @@ namespace WindBot.Game
ClientCard attackcard = _duel.GetCard(ca, (CardLocation)la, sa); ClientCard attackcard = _duel.GetCard(ca, (CardLocation)la, sa);
ClientCard defendcard = _duel.GetCard(cd, (CardLocation)ld, sd); ClientCard defendcard = _duel.GetCard(cd, (CardLocation)ld, sd);
if (defendcard == null) Logger.DebugWriteLine("(" + (attackcard.Name ?? "未知卡片") + "直接攻击)");
else Logger.DebugWriteLine("(" + ca.ToString() + "的" + (attackcard.Name ?? "未知卡片") + "攻击了" + cd.ToString() + "的" + (defendcard.Name ?? "未知卡片") + ")");
_duel.Fields[attackcard.Controller].BattlingMonster = attackcard; _duel.Fields[attackcard.Controller].BattlingMonster = attackcard;
_duel.Fields[1 - attackcard.Controller].BattlingMonster = defendcard; _duel.Fields[1 - attackcard.Controller].BattlingMonster = defendcard;
...@@ -525,7 +532,10 @@ namespace WindBot.Game ...@@ -525,7 +532,10 @@ namespace WindBot.Game
int cp = packet.ReadSByte(); int cp = packet.ReadSByte();
ClientCard card = _duel.GetCard(pc, (CardLocation)pl, ps); ClientCard card = _duel.GetCard(pc, (CardLocation)pl, ps);
if (card != null) if (card != null)
{
card.Position = cp; card.Position = cp;
Logger.DebugWriteLine("(" + (card.Name ?? "未知卡片") + "改变了表示形式为" + (CardPosition)cp + ")");
}
} }
private void OnChaining(BinaryReader packet) private void OnChaining(BinaryReader packet)
...@@ -537,12 +547,12 @@ namespace WindBot.Game ...@@ -537,12 +547,12 @@ namespace WindBot.Game
int subs = packet.ReadSByte(); int subs = packet.ReadSByte();
ClientCard card = _duel.GetCard(pcc, pcl, pcs, subs); ClientCard card = _duel.GetCard(pcc, pcl, pcs, subs);
int cc = GetLocalPlayer(packet.ReadByte()); int cc = GetLocalPlayer(packet.ReadByte());
if (card != null) Logger.DebugWriteLine("(" + cc.ToString() + "的" + (card.Name ?? "未知卡片") + "发动了效果)");
_ai.OnChaining(card, cc); _ai.OnChaining(card, cc);
_duel.ChainTargets.Clear(); _duel.ChainTargets.Clear();
_duel.LastSummonPlayer = -1; _duel.LastSummonPlayer = -1;
_duel.CurrentChain.Add(card); _duel.CurrentChain.Add(card);
_duel.LastChainPlayer = cc; _duel.LastChainPlayer = cc;
} }
private void OnChainEnd(BinaryReader packet) private void OnChainEnd(BinaryReader packet)
...@@ -632,6 +642,7 @@ namespace WindBot.Game ...@@ -632,6 +642,7 @@ namespace WindBot.Game
/*int sseq = */packet.ReadByte(); /*int sseq = */packet.ReadByte();
ClientCard card = _duel.GetCard(player, (CardLocation)loc, seq); ClientCard card = _duel.GetCard(player, (CardLocation)loc, seq);
if (card == null) continue; if (card == null) continue;
Logger.DebugWriteLine("(" + (CardLocation)loc + "的" + (card.Name ?? "未知卡片") + "成为了对象)");
_duel.ChainTargets.Add(card); _duel.ChainTargets.Add(card);
} }
} }
......
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