예제 #1
0
        void AnalyzeSingleZoneTransfer(ZoneTransfer zt)
        {
            var gameObject = gsm.Raw.gameStateMessage.gameObjects?.FirstOrDefault(i => i.instanceId == zt.instanceId);
            //if (gameObject != null)
            {
                var playerId = currentGameProgress.GetPlayerFromId(zt.instanceId);
                if (playerId == PlayerEnum.Unknown)
                {
                    // Cannot retrace the ids changes to the original card...probably because of summarized messages

                    if (gameObject != null)
                    {
                        if (gameObject.ownerSeatId == gameObject.controllerSeatId)
                        {
                            playerId = gameObject.ownerSeatId == currentGameProgress.SystemSeatId
                                ? PlayerEnum.Me
                                : PlayerEnum.Opponent;
                        }
                        else
                        {
                            //System.Diagnostics.Debugger.Break();
                            //Log.Error("OUTPUTLOG {outputLogError}. User {userId}, Match id {matchId}",
                            //    "Unknown zone transfer",

                            //    JsonConvert.SerializeObject(gsm));
                            Errors.Add(new OutputLogError(OutputLogErrorType.UnknownZoneTransfer, gsm.Timestamp));
                            return;
                        }
                    }
                    else
                    {
                        if (zt.zone_src.Player == zt.zone_dest.Player)
                        {
                            playerId = zt.zone_dest.Player;
                        }
                        else
                        {
                            //System.Diagnostics.Debugger.Break();
                            //Log
                            playerId = zt.zone_dest.Player;
                        }
                    }
                }

                var c = new CardForTurn
                {
                    CardGrpId = gameObject?.grpId ?? default(int),
                    Player    = playerId,
                    Turn      = currentGameProgress.CurrentTurn,
                };

                if (zt.zone_src.Name == "ZoneType_Library" && zt.zone_dest.Name == "ZoneType_Hand")
                {
                    c.Action = CardForTurnEnum.Drew;
                }
                else if (zt.zone_src.Name == "ZoneType_Hand" && (zt.zone_dest.Name == "ZoneType_Battlefield" || zt.zone_dest.Name == "ZoneType_Stack"))
                {
                    c.Action = CardForTurnEnum.Played;
                }
                else if (zt.zone_src.Name == "ZoneType_Hand" && zt.zone_dest.Name == "ZoneType_Graveyard")
                {
                    c.Action = CardForTurnEnum.Discarded;
                }

                else if (zt.zone_src.Name == "ZoneType_Library" && zt.zone_dest.Name == "ZoneType_Battlefield")
                {
                    c.Action = CardForTurnEnum.FromLibraryToBattlefield;
                }
                else if (zt.zone_src.Name == "ZoneType_Library" && zt.zone_dest.Name == "ZoneType_Exile")
                {
                    c.Action = CardForTurnEnum.FromLibraryToExile;
                }
                else if (zt.zone_src.Name == "ZoneType_Library" && zt.zone_dest.Name == "ZoneType_Graveyard")
                {
                    c.Action = CardForTurnEnum.FromLibraryToGraveyard;
                }

                else if (zt.zone_src.Name == "ZoneType_Battlefield" && (zt.zone_dest.Name == "ZoneType_Graveyard" || zt.zone_dest.Name == "ZoneType_Exile"))
                {
                    c.Action = CardForTurnEnum.PermanentRemoved;
                }

                else if (zt.zone_src.Name == "ZoneType_Stack" && (zt.zone_dest.Name == "ZoneType_Battlefield" || zt.zone_dest.Name == "ZoneType_Graveyard"))
                {
                    c.Action = CardForTurnEnum.SpellResolved;
                }

                else if (zt.zone_src.Name == "ZoneType_Graveyard" && zt.zone_dest.Name == "ZoneType_Battlefield")
                {
                    c.Action = CardForTurnEnum.FromGraveyardToBattlefield;
                }
                else if (zt.zone_src.Name == "ZoneType_Graveyard" && zt.zone_dest.Name == "ZoneType_Hand")
                {
                    c.Action = CardForTurnEnum.FromGraveyardToHand;
                }
                else if (zt.zone_src.Name == "ZoneType_Graveyard" && zt.zone_dest.Name == "ZoneType_Stack")
                {
                    c.Action = CardForTurnEnum.FromGraveyardToStack;
                }
                else if (zt.zone_src.Name == "ZoneType_Graveyard" && zt.zone_dest.Name == "ZoneType_Exile")
                {
                    c.Action = CardForTurnEnum.FromGraveyardToExile;
                }

                else if (zt.zone_src.Name == "ZoneType_Exile" && zt.zone_dest.Name == "ZoneType_Stack")
                {
                    c.Action = CardForTurnEnum.FromExileToStack;
                }
                else if (zt.zone_src.Name == "ZoneType_Exile" && zt.zone_dest.Name == "ZoneType_Battlefield")
                {
                    c.Action = CardForTurnEnum.FromExileToBattlefield;
                }
                else if (zt.zone_src.Name == "ZoneType_Exile" && zt.zone_dest.Name == "ZoneType_Hand")
                {
                    c.Action = CardForTurnEnum.FromExileToHand;
                }

                if (c.Player == 0 /* || c.Turn == 14*/)
                {
                    //System.Diagnostics.Debugger.Break();
                    Errors.Add(new OutputLogError(OutputLogErrorType.PlayerZero, gsm.Timestamp));
                    return;
                }

                /*if (c.Action == CardForTurnEnum.Unknown)
                 * {
                 *  Errors.Add(new OutputLogError(OutputLogErrorType.CardForTurnUnknown, gsm.Timestamp));
                 *  return;
                 * }
                 * else*/
                if (c.Action == CardForTurnEnum.Drew || c.Action == CardForTurnEnum.Played || c.Action == CardForTurnEnum.Discarded)
                {
                    if (dictAllCards.ContainsKey(c.CardGrpId))
                    {
                        currentGameProgress.AddCardTransfer(c);
                    }
                }
            }
            //else
            //if (gameObject == null)
            //{
            //    System.Diagnostics.Debugger.Break();
            //}
        }