Esempio n. 1
0
        private void BtnSelectCardsDatabase_Click(object sender, EventArgs e)
        {
            ofd.FileName        = string.Empty;
            ofd.CheckFileExists = true;
            ofd.ValidateNames   = true;
            ofd.ShowReadOnly    = false;
            ofd.ReadOnlyChecked = false;
            ofd.Filter          = "Manifest Database (*.data)|*.data";

            var r = ofd.ShowDialog(this);

            if (r == DialogResult.Cancel)
            {
                return;
            }

            var           filePath = ofd.FileName;
            var           bytes    = File.ReadAllBytes(filePath);
            AssetInfoList assetInfoList;

            try {
                assetInfoList = AssetInfoList.Parse(bytes, MltdConstants.Utf8WithoutBom);
            } catch (Exception ex) {
                MessageBox.Show(ex.ToString(), ApplicationHelper.GetApplicationTitle(), MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            txtCardsDatabasePath.Text = filePath;

            lvwCards.Items.Clear();

            var cardNameRegex = new Regex(@"^card_list_(?<idolIndex>\d{3})(?<idolAbbr>[a-z]{3})(?<ser>\d{4})\.acb\.unity3d$", RegexOptions.CultureInvariant);
            var cardList      = _cardList;
            var idols         = MltdConstants.Idols;

            cardList.Clear();

            foreach (var assetInfo in assetInfoList.Assets)
            {
                var match = cardNameRegex.Match(assetInfo.ResourceName);

                if (!match.Success)
                {
                    continue;
                }

                var idolID           = Convert.ToInt32(match.Groups["idolIndex"].Value);
                var detectedIdolAbbr = match.Groups["idolAbbr"].Value;

                if (idolID < 1 || idolID > idols.Count)
                {
                    Debug.Print("Warning: idol index out of range: {0} with abbr {1}", idolID, detectedIdolAbbr);
                    continue;
                }

                var idol = idols[idolID - 1];

                if (idol.Abbreviation != detectedIdolAbbr)
                {
                    Debug.Print("Warning: detected abbr {0} does not match standard abbr {1}.", detectedIdolAbbr, idol.Abbreviation);
                    continue;
                }

                var serial    = match.Groups["ser"].Value;
                var serialInt = Convert.ToInt32(serial);
                var rarity    = (Rarity)(serialInt % 10);
                serial = TheaterHelper.GetIdolSerialAbbreviation(idolID) + serial;
                var entry = (idol.Name, idol.Color, rarity, serial);

                cardList.Add(entry);
            }

            foreach (var entry in cardList)
            {
                var lvi = lvwCards.Items.Add(entry.Idol);
                lvi.SubItems.Add(entry.Color.ToString());
                lvi.SubItems.Add(entry.Rarity.ToString());
                lvi.SubItems.Add(entry.Serial);
            }

            lvwCards.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
        }