Exemple #1
0
        private bool UpdateCards(GameDataLists gameDataLists, Dictionary <string, ETriadCardType> mapCardTypes)
        {
            Logger.WriteLine("Updating card list...");

            TriadCardDB cardDB = TriadCardDB.Get();

            foreach (var cardData in gameDataLists.cards)
            {
                TriadCard cardOb = (cardData.Id < cardDB.cards.Count) ? cardDB.cards[cardData.Id] : null;
                if (cardOb != null)
                {
                    // ensure side numbers are the same
                    if (cardOb.Sides[0] != cardData.sideTop ||
                        cardOb.Sides[1] != cardData.sideLeft ||
                        cardOb.Sides[2] != cardData.sideBottom ||
                        cardOb.Sides[3] != cardData.sideRight)
                    {
                        Logger.WriteLine("FAILED card update, id:{0} name:{1} is not matching side numbers!", cardData.Id, cardData.LinkedName.Name.GetCodeName());
                        return(false);
                    }
                }
                else
                {
                    while (cardDB.cards.Count <= cardData.Id)
                    {
                        cardDB.cards.Add(null);
                    }

                    int    iconId   = 82500 + cardData.Id;
                    string iconPath = iconId.ToString("000000") + ".png";

                    cardOb = new TriadCard(cardData.Id,
                                           iconPath,
                                           (ETriadCardRarity)(cardData.rarityIdx - 1),
                                           mapCardTypes[cardData.LinkedType == null ? "" : cardData.LinkedType.Type.GetCodeName()],
                                           cardData.sideTop,
                                           cardData.sideBottom,
                                           cardData.sideLeft,
                                           cardData.sideRight,
                                           cardData.sortOrder,
                                           cardData.uiGroup);

                    Logger.WriteLine(">> adding new card: " + cardOb.ToString());
                    cardDB.cards[cardData.Id] = cardOb;
                }

                cardOb.Name.Text = cardData.LinkedName.Name.Text;
            }

            for (int idx = 0; idx < cardDB.cards.Count; idx++)
            {
                TriadCard cardOb = cardDB.cards[idx];
                if (cardOb != null)
                {
                    var matchingCardData = gameDataLists.cards.Find(x => (x.Id == cardOb.Id));
                    if (matchingCardData == null)
                    {
                        Logger.WriteLine(">> removing card: " + cardOb.ToString());
                        cardDB.cards[idx] = null;
                        continue;
                    }

                    if (cardOb.Id != idx)
                    {
                        Logger.WriteLine("FAILED card update, index mismatch for card[{0}].Id:{1}, Name:{2}", idx, cardOb.Id, cardOb.Name.GetCodeName());
                        return(false);
                    }
                }
            }

            return(true);
        }
Exemple #2
0
        private bool UpdateCards(Dictionary <int, TriadCard> cardMap)
        {
            TriadCardDB cardDB     = TriadCardDB.Get();
            int         newCardId  = cardDB.cards[cardDB.cards.Count - 1].Id + 1;
            bool        hasChanges = false;

            foreach (KeyValuePair <int, TriadCard> kvp in cardMap)
            {
                if (kvp.Key > 285)
                {
                    int a = 1;
                    a++;
                }

                if (kvp.Key >= newCardId)
                {
                    kvp.Value.Id = kvp.Key;
                    newCardId    = kvp.Key + 1;

                    while (cardDB.cards.Count < newCardId)
                    {
                        cardDB.cards.Add(null);
                    }
                    cardDB.cards[kvp.Value.Id] = kvp.Value;

                    Logger.WriteLine("Newly added card: " + kvp.Value.ToShortString());
                    hasChanges = true;
                    continue;
                }

                TriadCard cardMatch = cardDB.Find(kvp.Value.Name);
                if (cardMatch == null)
                {
                    foreach (TriadCard testCard in cardDB.cards)
                    {
                        if (testCard != null &&
                            testCard.Rarity == kvp.Value.Rarity &&
                            testCard.Type == kvp.Value.Type &&
                            testCard.Sides[0] == kvp.Value.Sides[0] &&
                            testCard.Sides[1] == kvp.Value.Sides[1] &&
                            testCard.Sides[2] == kvp.Value.Sides[2] &&
                            testCard.Sides[3] == kvp.Value.Sides[3])
                        {
                            Logger.WriteLine("Card name remap: " + testCard.ToShortString() + " => " + kvp.Value.Name);
                            cardMatch  = testCard;
                            hasChanges = true;
                            break;
                        }
                    }
                }

                if (cardMatch != null)
                {
                    kvp.Value.Id = cardMatch.Id;
                    cardDB.cards[kvp.Value.Id] = kvp.Value;
                }
                else
                {
                    TriadCard otherCard = cardDB.cards[kvp.Key];
                    Logger.WriteLine("Missing card match: " + kvp.Value.ToString() + "! Will replace existing Id: " + (otherCard != null ? otherCard.ToString() : "??"));

                    kvp.Value.Id = kvp.Key;
                    cardDB.cards[kvp.Value.Id] = kvp.Value;
                    hasChanges = true;
                }
            }

            if (hasChanges)
            {
                cardDB.Save();
            }

            return(hasChanges);
        }