private int RefreshCards(CustomSelfDrawPanel.CSDImage content, List<CustomSelfDrawPanel.UICard> list, int width)
        {
            int[] numArray = null;
            if (GameEngine.Instance.World.lastUserCardSearchCriteria != null)
            {
                switch (GameEngine.Instance.World.lastUserCardSearchCriteria.newCardCategoryFilter)
                {
                    case 0x1001:
                        numArray = CardTypes.newCategories_ApplesOrder;
                        break;

                    case 0x1002:
                        numArray = CardTypes.newCategories_CheeseOrder;
                        break;

                    case 0x1003:
                        numArray = CardTypes.newCategories_MeatOrder;
                        break;

                    case 0x1004:
                        numArray = CardTypes.newCategories_BreadOrder;
                        break;

                    case 0x1005:
                        numArray = CardTypes.newCategories_VegOrder;
                        break;

                    case 0x1006:
                        numArray = CardTypes.newCategories_FishOrder;
                        break;

                    case 0x1007:
                        numArray = CardTypes.newCategories_AleOrder;
                        break;

                    case 0x2001:
                        numArray = CardTypes.newCategories_WoodOrder;
                        break;

                    case 0x2002:
                        numArray = CardTypes.newCategories_StoneOrder;
                        break;

                    case 0x2003:
                        numArray = CardTypes.newCategories_IronOrder;
                        break;

                    case 0x2004:
                        numArray = CardTypes.newCategories_PitchOrder;
                        break;

                    case 0x4001:
                        numArray = CardTypes.newCategories_VenisonOrder;
                        break;

                    case 0x4002:
                        numArray = CardTypes.newCategories_FurnitureOrder;
                        break;

                    case 0x4003:
                        numArray = CardTypes.newCategories_MetalwareOrder;
                        break;

                    case 0x4004:
                        numArray = CardTypes.newCategories_ClothesOrder;
                        break;

                    case 0x4005:
                        numArray = CardTypes.newCategories_WineOrder;
                        break;

                    case 0x4006:
                        numArray = CardTypes.newCategories_SaltOrder;
                        break;

                    case 0x4007:
                        numArray = CardTypes.newCategories_SpicesOrder;
                        break;

                    case 0x4008:
                        numArray = CardTypes.newCategories_SilkOrder;
                        break;

                    case 0x8001:
                        numArray = CardTypes.newCategories_BowsOrder;
                        break;

                    case 0x8002:
                        numArray = CardTypes.newCategories_PikesOrder;
                        break;

                    case 0x8003:
                        numArray = CardTypes.newCategories_ArmourOrder;
                        break;

                    case 0x8004:
                        numArray = CardTypes.newCategories_SwordsOrder;
                        break;

                    case 0x8005:
                        numArray = CardTypes.newCategories_CatapultsOrder;
                        break;

                    case 0x10001:
                        numArray = CardTypes.newCategories_CastleConOrder;
                        break;

                    case 0x10002:
                        numArray = CardTypes.newCategories_DefencesOrder;
                        break;

                    case 0x10003:
                        numArray = CardTypes.newCategories_WallsOrder;
                        break;

                    case 0x10004:
                        numArray = CardTypes.newCategories_KnightsOrder;
                        break;

                    case 0x20001:
                        numArray = CardTypes.newCategories_ScoutingOrder;
                        break;

                    case 0x20002:
                        numArray = CardTypes.newCategories_SpeedOrder;
                        break;

                    case 0x20003:
                        numArray = CardTypes.newCategories_RecruitmentOrder;
                        break;

                    case 0x20004:
                        numArray = CardTypes.newCategories_TroopsOrder;
                        break;

                    case 0x20005:
                        numArray = CardTypes.newCategories_DiplomacyOrder;
                        break;

                    case 0x40001:
                        numArray = CardTypes.newCategories_TradeOrder;
                        break;

                    case 0x40002:
                        numArray = CardTypes.newCategories_ReligionOrder;
                        break;

                    case 0x40003:
                        numArray = CardTypes.newCategories_HonourOrder;
                        break;

                    case 0x40004:
                        numArray = CardTypes.newCategories_GoldOrder;
                        break;

                    case 0x40005:
                        numArray = CardTypes.newCategories_PopOrder;
                        break;

                    case 0x40006:
                        numArray = CardTypes.newCategories_ResearchOrder;
                        break;

                    case 0x40007:
                        numArray = CardTypes.newCategories_CapacityOrder;
                        break;

                    case 0x40008:
                        numArray = CardTypes.newCategories_ConstructionOrder;
                        break;
                }
            }
            if (GameEngine.Instance.World.getTutorialStage() == 8)
            {
                list.Sort(CustomSelfDrawPanel.UICard.TUT2cardsNameComparer);
            }
            else if (GameEngine.Instance.World.getTutorialStage() == 12)
            {
                list.Sort(CustomSelfDrawPanel.UICard.TUTcardsNameComparer);
            }
            else if (this.sortByMode == 0)
            {
                list.Sort(CustomSelfDrawPanel.UICard.cardsNameComparer);
            }
            else if (this.sortByMode == 1)
            {
                list.Sort(CustomSelfDrawPanel.UICard.cardsIDComparer);
            }
            else if (this.sortByMode == 2)
            {
                list.Sort(CustomSelfDrawPanel.UICard.cardsNameComparerReverse);
            }
            else if (this.sortByMode == 3)
            {
                list.Sort(CustomSelfDrawPanel.UICard.cardsIDComparerReverse);
            }
            else if (this.sortByMode == 7)
            {
                list.Sort(CustomSelfDrawPanel.UICard.cardsQuantityComparer);
            }
            else if (this.sortByMode == 8)
            {
                list.Sort(CustomSelfDrawPanel.UICard.cardsQuantityComparerReverse);
            }
            int num = GameEngine.Instance.World.getRank() + 1;
            content.clearDirectControlsOnly();
            foreach (CustomSelfDrawPanel.UICard card in this.dummyCards)
            {
                card.clearControls();
            }
            this.dummyCards.Clear();
            int num2 = 0;
            int x = 0x10;
            int y = 0;
            if (this.currentCardSection == 0)
            {
                x = 0;
            }
            if (numArray != null)
            {
                this.sortBack.Visible = false;
                this.AvailablePanelContent.ClipRect = new Rectangle(this.AvailablePanelContent.ClipRect.X, this.AvailablePanelContent.ClipRect.Y, this.AvailablePanelContent.ClipRect.Width, this.AvailablePanel.Height - (BorderPadding * 2));
                int num5 = 0;
                int num6 = -1;
                for (int i = 0; i < numArray.Length; i += 3)
                {
                    if (numArray[i + 2] != num6)
                    {
                        int cardType = numArray[i];
                        int num9 = numArray[i + 1] * 0xb2;
                        int num10 = (numArray[i + 2] - num5) * 0xed;
                        bool flag = false;
                        CustomSelfDrawPanel.UICard control = null;
                        foreach (CustomSelfDrawPanel.UICard card3 in list)
                        {
                            if (CardTypes.getCardType(card3.Definition.id) == cardType)
                            {
                                flag = true;
                                control = card3;
                            }
                        }
                        CardTypes.CardDefinition def = CardTypes.getCardDefinition(cardType);
                        if ((!flag && (((def.cardRank <= 0) || (def.cardRarity <= 0)) || (def.available != 1))) && (num9 == 0))
                        {
                            bool flag2 = false;
                            int num11 = CardTypes.getCardType(cardType);
                            if ((num11 >= 0xbd7) && (num11 <= 0xbf5))
                            {
                                for (int j = 0; j < numArray.Length; j += 3)
                                {
                                    if (((numArray[j + 2] == numArray[i + 2]) && (cardType != numArray[j])) && (CardTypes.getCardDefinition(numArray[j]).available == 1))
                                    {
                                        numArray[j + 1]--;
                                        flag2 = true;
                                    }
                                }
                            }
                            if (!flag2)
                            {
                                num5++;
                                num6 = numArray[i + 2];
                                continue;
                            }
                        }
                        if ((num10 + 0xed) > num2)
                        {
                            num2 = num10 + 0xed;
                        }
                        if (flag)
                        {
                            control.Position = new Point(num9, num10);
                            content.addControl(control);
                            if ((num < control.Definition.cardRank) || (control.UserIDList.Count == 0))
                            {
                                control.rankLabel.Color = ARGBColors.Red;
                                control.Hilight(ARGBColors.Gray);
                            }
                            else
                            {
                                control.rankLabel.Color = ARGBColors.White;
                                control.Hilight(ARGBColors.White);
                            }
                            if (control.cardCount > 1)
                            {
                                control.countLabel.Text = control.cardCount.ToString();
                                if (control.cardCount >= 100)
                                {
                                    control.countLabel.Font = FontManager.GetFont("Arial", 16f, FontStyle.Bold);
                                }
                                else
                                {
                                    control.countLabel.Font = FontManager.GetFont("Arial", 18f, FontStyle.Bold);
                                }
                            }
                        }
                        else if (((def.cardRank > 0) && (def.cardRarity > 0)) && (def.available == 1))
                        {
                            CustomSelfDrawPanel.UICard card4 = BuyCardsPanel.makeUICard(def, RemoteServices.Instance.UserID, 0x2710);
                            card4.Position = new Point(num9, num10);
                            content.addControl(card4);
                            CustomSelfDrawPanel.CSDFill fill = new CustomSelfDrawPanel.CSDFill {
                                FillColor = Color.FromArgb(170, 0, 0, 0),
                                Alpha = 0.2f,
                                Position = new Point(2, 1),
                                Size = new Size((card4.Size.Width - 2) - 4, (card4.Size.Height - 1) - 5)
                            };
                            card4.addControl(fill);
                            this.dummyCards.Add(card4);
                            card4.CustomTooltipID = 0x2775;
                            card4.CustomTooltipData = cardType;
                            CustomSelfDrawPanel.CSDLabel label = new CustomSelfDrawPanel.CSDLabel();
                            if (def.cardPoints > 0)
                            {
                                label.Text = SK.Text("CARDS_GetCard", "Get Card");
                                label.Data = def.id;
                                label.setClickDelegate(new CustomSelfDrawPanel.CSDControl.CSD_ClickDelegate(this.linkToBuy));
                            }
                            else
                            {
                                label.Text = SK.Text("CARDS_No_Cards", "No Cards");
                            }
                            label.Position = new Point(num9 + 3, num10 + 5);
                            label.Size = new Size(0x9d, 0xd9);
                            label.Alignment = CustomSelfDrawPanel.CSD_Text_Alignment.CENTER_CENTER;
                            label.Font = FontManager.GetFont("Arial", 12f, FontStyle.Bold);
                            label.Color = ARGBColors.White;
                            label.CustomTooltipID = 0x2775;
                            label.CustomTooltipData = cardType;
                            content.addControl(label);
                        }
                    }
                }
            }
            else
            {
                if (!this.usingRecentFilter)
                {
                    this.sortBack.Visible = true;
                }
                this.AvailablePanelContent.ClipRect = new Rectangle(this.AvailablePanelContent.ClipRect.X, this.AvailablePanelContent.ClipRect.Y, this.AvailablePanelContent.ClipRect.Width, (this.AvailablePanel.Height - (BorderPadding * 2)) - 0x18);
                int num13 = 0;
                int num14 = 0;
                foreach (CustomSelfDrawPanel.UICard card5 in list)
                {
                    card5.Position = new Point(x, y);
                    content.addControl(card5);
                    num14 = y;
                    if (x > width)
                    {
                        x = 0x10;
                        if (this.currentCardSection == 0)
                        {
                            x = 0;
                        }
                        if (!this.compressedCards)
                        {
                            y += card5.Height + 8;
                        }
                        else
                        {
                            y += 0x3a;
                        }
                    }
                    else
                    {
                        x += card5.Width + 12;
                    }
                    if (this.compressedCards && (num13 < (list.Count - 4)))
                    {
                        card5.ClipRect = new Rectangle(0, 0, card5.Width, 60);
                        card5.bigEffect.Visible = false;
                        card5.rankLabel.Visible = false;
                    }
                    else
                    {
                        card5.ClipRect = Rectangle.Empty;
                        card5.bigEffect.Visible = true;
                        card5.rankLabel.Visible = true;
                    }
                    if (this.compressedCards)
                    {
                        CustomSelfDrawPanel.CSDLine line = new CustomSelfDrawPanel.CSDLine {
                            Position = new Point(card5.Position.X + 3, card5.Position.Y + 1),
                            Size = new Size(card5.Width - 7, 0),
                            LineColor = Color.FromArgb(0x80, ARGBColors.Black)
                        };
                        content.addControl(line);
                    }
                    num13++;
                    if ((num < card5.Definition.cardRank) || (card5.UserIDList.Count == 0))
                    {
                        card5.rankLabel.Color = ARGBColors.Red;
                        card5.Hilight(ARGBColors.Gray);
                    }
                    else
                    {
                        card5.rankLabel.Color = ARGBColors.White;
                        card5.Hilight(ARGBColors.White);
                    }
                    if (card5.cardCount > 1)
                    {
                        card5.countLabel.Text = card5.cardCount.ToString();
                        if (card5.cardCount >= 100)
                        {
                            card5.countLabel.Font = FontManager.GetFont("Arial", 16f, FontStyle.Bold);
                        }
                        else
                        {
                            card5.countLabel.Font = FontManager.GetFont("Arial", 18f, FontStyle.Bold);
                        }
                    }
                }
                if (list.Count > 0)
                {
                    num2 = (num14 + list[0].Height) + 8;
                }
            }
            disableCardsInPlay(this.UICardList);
            content.invalidate();
            return num2;
        }