public bool? PinDianReturnCards(Player from, Player to, out Card c1, out Card c2, ISkill skill, out bool c1Taken, out bool c2Taken)
{
NotificationProxy.NotifyLogEvent(new LogEvent("PinDianStart", from, to), new List<Player>() { from, to }, false);
NotificationProxy.NotifyPinDianStart(from, to, skill);
Dictionary<Player, ISkill> aSkill;
Dictionary<Player, List<Card>> aCards;
Dictionary<Player, List<Player>> aPlayers;
GlobalProxy.AskForMultipleCardUsage(new CardUsagePrompt("PinDian"), new PinDianVerifier(), new List<Player>() { from, to }, out aSkill, out aCards, out aPlayers);
Card card1, card2;
if (!aCards.ContainsKey(from) || aCards[from].Count == 0)
{
card1 = Decks[from, DeckType.Hand][0];
SyncImmutableCardAll(card1);
}
else
{
card1 = aCards[from][0];
}
if (!aCards.ContainsKey(to) || aCards[to].Count == 0)
{
card2 = Decks[to, DeckType.Hand][0];
SyncImmutableCardAll(card2);
}
else
{
card2 = aCards[to][0];
}
c1 = card1;
c2 = card2;
NotificationProxy.NotifyPinDianEnd(c1, c2);
NotificationProxy.NotifyLogEvent(new LogEvent("PinDianCard", from, c1), new List<Player>() { from, to }, false, false);
NotificationProxy.NotifyLogEvent(new LogEvent("PinDianCard", to, c2), new List<Player>() { from, to }, false, false);
NotificationProxy.NotifyLogEvent(new LogEvent("PinDianResult", from, to, new LogEventArg(c1.Rank > c2.Rank ? "Win" : "notWin")), new List<Player>() { from, to }, false);
bool? ret = null;
if (card1.Rank > card2.Rank) ret = true;
if (card1.Rank < card2.Rank) ret = false;
var arg = new PinDianCompleteEventArgs();
arg.Source = from;
arg.Targets = new List<Player>() { to };
arg.Cards = new List<Card>() { c1, c2 };
arg.CardsResult = new List<bool>() { false, false };
arg.PinDianResult = ret;
Emit(GameEvent.PinDianComplete, arg);
c1Taken = arg.CardsResult[0];
c2Taken = arg.CardsResult[1];
return ret;
}