Beispiel #1
0
 public CardDto(CardLink cardLink)
 {
     ImgLink    = cardLink.Card.ImgLink;
     text       = cardLink.Card.text;
     rulings    = cardLink.Card.rulings;
     id         = cardLink.Card.id;
     name       = cardLink.Card.name;
     cardLinkId = cardLink.Id.ToString();
 }
Beispiel #2
0
    public void OnDrop(PointerEventData eventData)
    {
        DragHandler d = eventData.pointerDrag.GetComponent <DragHandler>();

        if (d != null)
        {
            CardLink cl = eventData.pointerDrag.GetComponent <CardLink>();
            if (cl != null)
            {
                if (GameClientController == null)
                {
                    GameClientController = FindObjectOfType <GameClientController>();
                }

                Card card = cl.Card;
                Debug.Log(card.CardName + " was dropped on " + gameObject.name);

                if (card.CardType == CardType.SHIP && DropZoneType == DropZoneType.PLAYER_SHIPYARD)
                {
                    // try to host the ship on the shipyard
                    Shipyard shipyard = (Shipyard)GetComponent <CardLink>().Card;

                    if (GameClientController.TryHost((Ship)card, shipyard))
                    {
                        d.returnToParent = false;
                    }
                }

                if (card.CardType == CardType.SHIPYARD && DropZoneType == DropZoneType.PLAYER_CONSTRUCTION_AREA)
                {
                    if (GameClientController.TryPlayShipyard((Shipyard)card))
                    {
                        d.returnToParent = false;
                    }
                }

                if (card.CardType == CardType.OPERATION)
                {
                    if (GameClientController.TryPlayOperation((Operation)card))
                    {
                        d.returnToParent = false;
                    }
                }
            }
        }
    }
Beispiel #3
0
        public static CardLink MakeCustomerCardLink(MYOBCustomer customer)
        {
            var c = new CardLink
            {
                DisplayID = customer.DisplayID,
                Name      = customer.CompanyName,
                UID       = customer.Uid,
                URI       = new Uri(customer.URI)
            };

            if (c.UID == null)
            {
                throw new Exception($"UID not set for customer {customer.DisplayID}");
            }
            if (c.URI == null)
            {
                throw new Exception($"URI not set for {customer.DisplayID}  ");
            }
            return(c);
        }
Beispiel #4
0
        public async Task <dynamic> GetHand(GameRequest request)
        {
            var randomCards = await Utils.GetRandomCards(Utils.HandSize, _context);

            var randomCardLinks = new List <CardLink>();

            //save links to DB
            foreach (var randomCard in randomCards)
            {
                var cardLink = new CardLink {
                    Card = randomCard
                };
                _context.CardLinks.Add(cardLink);
                await _context.SaveChangesAsync();

                _context.SaveChanges();
                randomCardLinks.Add(cardLink);
            }

            return(Json(new Response <List <CardLink> >
            {
                Result = randomCardLinks
            }));
        }
Beispiel #5
0
        //怪兽,pendulum怪兽
        string getMonster(Card c, string img, CardPack cardpack = null, bool rarity = true)
        {
            StringBuilder sb = new StringBuilder();

            string[] types = GetTypes(c);
            string   race  = GetRace(c.race);

            sb.AppendLine(TAG_CARD + ":");
            sb.AppendLine(GetLine(TAG_CARDTYPE, types[0]));
            sb.AppendLine(GetLine(TAG_NAME, reItalic(c.name)));
            sb.AppendLine(GetLine(TAG_ATTRIBUTE, GetAttribute(c.attribute)));
            sb.AppendLine(GetLine(TAG_LEVEL, GetStar(c.level)));
            sb.AppendLine(GetLine(TAG_IMAGE, img));
            sb.AppendLine(GetLine(TAG_TYPE1, cn2tw(race)));
            sb.AppendLine(GetLine(TAG_TYPE2, cn2tw(types[1])));
            sb.AppendLine(GetLine(TAG_TYPE3, cn2tw(types[2])));
            sb.AppendLine(GetLine(TAG_TYPE4, cn2tw(types[3])));
            sb.AppendLine(GetLine(TAG_TYPE5, cn2tw(types[4])));
            if (cardpack != null)
            {
                sb.AppendLine(GetLine(TAG_NUMBER, cardpack.pack_id));
                if (rarity)
                {
                    sb.AppendLine(GetLine(TAG_RARITY, cardpack.getMseRarity()));
                }
            }
            if (c.IsType(CardType.TYPE_LINK))
            {
                if (CardLink.isLink(c.def, CardLink.DownLeft))
                {
                    sb.AppendLine(GetLine(TAG_Link_Marker_DL, "yes"));
                }
                if (CardLink.isLink(c.def, CardLink.Down))
                {
                    sb.AppendLine(GetLine(TAG_Link_Marker_Down, "yes"));
                }
                if (CardLink.isLink(c.def, CardLink.DownRight))
                {
                    sb.AppendLine(GetLine(TAG_Link_Marker_DR, "yes"));
                }
                if (CardLink.isLink(c.def, CardLink.UpLeft))
                {
                    sb.AppendLine(GetLine(TAG_Link_Marker_UL, "yes"));
                }
                if (CardLink.isLink(c.def, CardLink.Up))
                {
                    sb.AppendLine(GetLine(TAG_Link_Marker_Up, "yes"));
                }
                if (CardLink.isLink(c.def, CardLink.UpRight))
                {
                    sb.AppendLine(GetLine(TAG_Link_Marker_UR, "yes"));
                }
                if (CardLink.isLink(c.def, CardLink.Left))
                {
                    sb.AppendLine(GetLine(TAG_Link_Marker_Left, "yes"));
                }
                if (CardLink.isLink(c.def, CardLink.Right))
                {
                    sb.AppendLine(GetLine(TAG_Link_Marker_Right, "yes"));
                }
                sb.AppendLine(GetLine(TAG_Link_Number, "" + getLinkNumber(c.def)));
                sb.AppendLine("	" + TAG_TEXT + ":");
                sb.AppendLine("		"+ ReText(reItalic(c.desc)));
            }
            else
            {
                if (c.IsType(CardType.TYPE_PENDULUM))                //P怪兽
                {
                    string text = GetDesc(c.desc, cfg.regx_monster);
                    if (string.IsNullOrEmpty(text))
                    {
                        text = c.desc;
                    }
                    sb.AppendLine("	" + TAG_TEXT + ":");
                    //sb.AppendLine(cfg.regx_monster + ":" + cfg.regx_pendulum);
                    sb.AppendLine("		"+ ReText(reItalic(text)));
                    sb.AppendLine(GetLine(TAG_PENDULUM, "medium"));
                    sb.AppendLine(GetLine(TAG_PSCALE1, ((c.level >> 0x18) & 0xff).ToString()));
                    sb.AppendLine(GetLine(TAG_PSCALE2, ((c.level >> 0x10) & 0xff).ToString()));
                    sb.AppendLine("	" + TAG_PEND_TEXT + ":");
                    sb.AppendLine("		"+ ReText(reItalic(GetDesc(c.desc, cfg.regx_pendulum))));
                }
                else                 //一般怪兽
                {
                    sb.AppendLine("	" + TAG_TEXT + ":");
                    sb.AppendLine("		"+ ReText(reItalic(c.desc)));
                }
                sb.AppendLine(GetLine(TAG_DEF, (c.def < 0) ? UNKNOWN_ATKDEF : c.def.ToString()));
            }
            sb.AppendLine(GetLine(TAG_ATK, (c.atk < 0) ? UNKNOWN_ATKDEF : c.atk.ToString()));

            sb.AppendLine(GetLine(TAG_CODE, c.idString));
            return(sb.ToString());
        }
Beispiel #6
0
        public async Task <dynamic> CreateToken(CreateTokenRequest request)
        {
            Guid gameIdGuid;

            if (!Guid.TryParse(request.GameId, out gameIdGuid))
            {
                return(InvalidGameId(request.GameId));
            }

            var gameQuery = _context.Games
                            .Where(g => g.Id == gameIdGuid)
                            .Include(g => g.FirstPlayer)
                            .Include(g => g.SecondPlayer);

            var game = await gameQuery.FirstOrDefaultAsync();

            if (game == null)
            {
                return(GameNotFound(request.GameId));
            }

            var player = await _context.Users.FirstOrDefaultAsync(u => u.Id == request.PlayerId);

            if (player == null)
            {
                return(PlayerNotFound(request.PlayerId));
            }

            if (game.FirstPlayer != player && game.SecondPlayer != player)
            {
                return(PlayerNotInGame(request.PlayerId, request.GameId));
            }

            var username = player.UserName;

            var colorForUrl = request.Color == null || request.Color.Length == 0 || string.IsNullOrEmpty(request.Color[0])
                    ? "c"
                    : request.Color.Length > 1
                            ? "m"
                            : request.Color[0] == "white"
                                    ? "w"
                                    : request.Color[0] == "blue"
                                            ? "u"
                                            : request.Color[0] == "black"
                                                    ? "b"
                                                    : request.Color[0] == "red"
                                                            ? "r"
                                                            : "g";

            var imgUrl = "http://www.shenafu.com/imgd/ymtc/" + Uri.EscapeDataString(request.Name) + "_by_" + Uri.EscapeDataString(username) + ".png";

            var client      = new RestClient("http://www.shenafu.com/magic/cc.php?save=true&frame=modern");
            var restRequest = new RestRequest(Method.GET);

            restRequest.AddParameter("color", colorForUrl);
            restRequest.AddParameter("cardname", request.Name);
            restRequest.AddParameter("cardtype", "00001000000");
            restRequest.AddParameter("subtype", "Token " + request.Type);
            restRequest.AddParameter("powertoughness", request.Power + "/" + request.Toughness);
            restRequest.AddParameter("rulestext", request.Text);
            restRequest.AddParameter("creator", username);
            var result = client.Execute(restRequest);

            var existingToken = await _context.Tokens.Where(t => t.ImgLink.Equals(imgUrl)).FirstOrDefaultAsync();

            var token = existingToken ?? new Token
            {
                Color     = colorForUrl,
                CardType  = request.Type,
                name      = request.Name,
                Power     = request.Power,
                Toughness = request.Toughness,
                text      = request.Text,
                ImgLink   = imgUrl
            };

            var cardLink = new CardLink
            {
                Token = token,
            };

            _context.CardLinks.Add(cardLink);
            await _context.SaveChangesAsync();

            return(Json(new Response <CardLink>
            {
                Result = cardLink
            }));
        }
Beispiel #7
0
        public async Task <dynamic> ViewCards(ViewCardsRequest request)
        {
            Guid gameIdGuid;

            if (!Guid.TryParse(request.GameId, out gameIdGuid))
            {
                return(InvalidGameId(request.GameId));
            }

            var gameQuery = _context.Games
                            .Where(g => g.Id == gameIdGuid)
                            .Include(g => g.FirstPlayer)
                            .Include(g => g.SecondPlayer);

            switch (request.From)
            {
            case ViewFrom.Graveyard:
                gameQuery = gameQuery.Include(g => g.Grave.Select(i => i.CardLink.Card.rulings));
                break;

            case ViewFrom.Exile:
                gameQuery = gameQuery.Include(g => g.Exile.Select(i => i.CardLink.Card.rulings));
                break;

            case ViewFrom.TopOfTheDeck:
                gameQuery = gameQuery.Include(g => g.Top.Select(i => i.CardLink.Card.rulings));
                break;

            case ViewFrom.EnemyHand:
                break;
            }

            var game = await gameQuery.FirstOrDefaultAsync();

            if (game == null)
            {
                return(GameNotFound(request.GameId));
            }

            var player = await _context.Users.FirstOrDefaultAsync(u => u.Id == request.PlayerId);

            if (player == null)
            {
                return(PlayerNotFound(request.PlayerId));
            }

            if (game.FirstPlayer != player && game.SecondPlayer != player)
            {
                return(PlayerNotInGame(request.PlayerId, request.GameId));
            }

            List <CardLink> cardLinks = new List <CardLink>();

            switch (request.From)
            {
            case ViewFrom.Graveyard:
                cardLinks = game.Grave.Select(g => g.CardLink).ToList();
                break;

            case ViewFrom.Exile:
                cardLinks = game.Exile.Select(g => g.CardLink).ToList();
                break;

            case ViewFrom.TopOfTheDeck:
                if (game.Top.Count < request.Count)
                {
                    var delta       = request.Count - game.Top.Count;
                    var randomCards = await Utils.GetRandomCards(delta, _context);

                    var randomCardLinks = new List <CardLink>();

                    //save links to DB
                    foreach (var randomCard in randomCards)
                    {
                        var cardLink = new CardLink {
                            Card = randomCard
                        };
                        _context.CardLinks.Add(cardLink);
                        await _context.SaveChangesAsync();

                        _context.SaveChanges();
                        randomCardLinks.Add(cardLink);
                    }

                    foreach (var top in game.Top)
                    {
                        top.Number += delta;
                    }

                    for (int i = 0; i < delta; i++)
                    {
                        game.Top.Add(new Top
                        {
                            CardLink = randomCardLinks[i],
                            Number   = i + 1
                        });
                    }
                    foreach (var t in game.Top)
                    {
                        _context.Tops.AddOrUpdate(t);
                    }
                    await _context.SaveChangesAsync();
                }

                cardLinks = game.Top.OrderByDescending(t => t.Number).Take(request.Count).OrderBy(t => t.Number).Select(g => g.CardLink).ToList();

                break;

            case ViewFrom.EnemyHand:
                break;
            }

            Utils.FillImages(cardLinks.Select(l => l.Card));
            return(Json(new Response <List <CardLink> >
            {
                Result = cardLinks
            }));
        }
Beispiel #8
0
        public async Task <dynamic> Draw(GameRequest request)
        {
            Guid gameIdGuid;

            if (!Guid.TryParse(request.GameId, out gameIdGuid))
            {
                return(InvalidGameId(request.GameId));
            }

            var game = await _context.Games
                       .Where(g => g.Id == gameIdGuid)
                       .Include(g => g.FirstPlayer)
                       .Include(g => g.SecondPlayer)
                       .Include(g => g.Top.Select(t => t.CardLink.Card.rulings))
                       .Include(g => g.HandCards)
                       .FirstOrDefaultAsync();

            if (game == null)
            {
                return(GameNotFound(request.GameId));
            }

            var player = await _context.Users.FirstOrDefaultAsync(u => u.Id == request.PlayerId);

            if (player == null)
            {
                return(PlayerNotFound(request.PlayerId));
            }

            if (game.FirstPlayer != player && game.SecondPlayer != player)
            {
                return(PlayerNotInGame(request.PlayerId, request.GameId));
            }

            CardLink cardLink;

            if (game.Top.Any())
            {
                var top = game.Top.OrderByDescending(t => t.Number).Take(1).First();
                cardLink = top.CardLink;
                Utils.FillOneImage(cardLink.Card);

                _context.Tops.Remove(top);
                await _context.SaveChangesAsync();
            }
            else
            {
                cardLink = new CardLink {
                    Card = (await Utils.GetRandomCards(1, _context)).First()
                };
                _context.CardLinks.Add(cardLink);
                await _context.SaveChangesAsync();

                _context.SaveChanges();
            }

            game.HandCards.Add(new HandCard
            {
                CardLink = cardLink,
                Player   = player
            });

            await _context.SaveChangesAsync();

            return(Json(new Response <CardLink>
            {
                Result = cardLink
            }));
        }
Beispiel #9
0
        public async Task <dynamic> Start(GameRequest request)
        {
            Guid gameIdGuid;

            if (!Guid.TryParse(request.GameId, out gameIdGuid))
            {
                return(InvalidGameId(request.GameId));
            }

            var game = await _context.Games
                       .Where(g => g.Id == gameIdGuid)
                       .Include(g => g.FirstPlayer)
                       .Include(g => g.SecondPlayer)
                       .FirstOrDefaultAsync();

            if (game == null)
            {
                return(GameNotFound(request.GameId));
            }

            if (game.FirstPlayerReady)
            {
                return(Json(new Response <bool>
                {
                    Result = true
                }));
            }

            var player = await _context.Users.FirstOrDefaultAsync(u => u.Id == request.PlayerId);

            if (player == null)
            {
                return(PlayerNotFound(request.PlayerId));
            }

            if (game.FirstPlayer != player && game.SecondPlayer != player)
            {
                return(PlayerNotInGame(request.PlayerId, request.GameId));
            }

            var randomCards = await Utils.GetRandomCards(Utils.HandSize, _context);

            var randomCardLinks = new List <CardLink>();

            //save links to DB
            foreach (var randomCard in randomCards)
            {
                var cardLink = new CardLink {
                    Card = randomCard
                };
                _context.CardLinks.Add(cardLink);
                await _context.SaveChangesAsync();

                _context.SaveChanges();
                randomCardLinks.Add(cardLink);
            }

            var handCards = randomCardLinks.Select(c => new HandCard
            {
                CardLink = c,
                Player   = player
            });

            game.HandCards.AddRange(handCards);
            game.FirstPlayerReady = true;
            await _context.SaveChangesAsync();

            return(Json(new Response <bool>
            {
                Result = true
            }));
        }