示例#1
0
        /// <summary>
        /// 艦娘リストをKammusuPatch.csvから取得する(上書き用)
        /// </summary>
        /// <returns>艦娘リスト</returns>
        public List <KeyValuePair <Kammusu, List <int> > > downloadKammusuDataFromLocalFile()
        {
            var result = new List <KeyValuePair <Kammusu, List <int> > >();

            if (System.IO.File.Exists(@"Resource\KammusuPatch.csv"))
            {
                using (var sr = new System.IO.StreamReader(@"Resource\KammusuPatch.csv")) {
                    while (!sr.EndOfStream)
                    {
                        // 1行読み込み、カンマ毎に区切る
                        string   line   = sr.ReadLine();
                        string[] values = line.Split(',');
                        // 行数がおかしい場合は飛ばす
                        if (values.Count() < 16)
                        {
                            continue;
                        }
                        // ヘッダー行は飛ばす
                        if (values[0] == "id")
                        {
                            continue;
                        }
                        // データを読み取る
                        int    id                = int.Parse(values[0]);
                        string name              = values[1];
                        var    type              = KammusuTypeReverseDic.ContainsKey(values[2]) ? KammusuTypeReverseDic[values[2]] : KammusuType.Other;
                        int    antiAir           = int.Parse(values[3]);
                        int    slotSize          = int.Parse(values[4]);
                        bool   kammusuFlg        = int.Parse(values[15]) == 1;
                        var    kammusu           = new Kammusu(id, name, type, antiAir, new List <int>(), kammusuFlg);
                        var    defaultWeaponList = new List <int>();
                        for (int i = 0; i < slotSize; ++i)
                        {
                            int slot          = int.Parse(values[5 + i]);
                            int defaultWeapon = int.Parse(values[10 + i]);
                            kammusu.SlotList.Add(slot);
                            defaultWeaponList.Add(defaultWeapon);
                        }
                        result.Add(new KeyValuePair <Kammusu, List <int> >(kammusu, defaultWeaponList));
                    }
                }
            }
            return(result);
        }
示例#2
0
        /// <summary>
        /// 艦娘リストをデッキビルダーからダウンロードする
        /// (性質上、詳細な情報を取得できない敵艦もある)
        /// </summary>
        /// <returns>艦娘リスト</returns>
        public async Task <List <KeyValuePair <Kammusu, List <int> > > > downloadKammusuDataFromDeckBuilderAsync()
        {
            var result = new List <KeyValuePair <Kammusu, List <int> > >();

            using (var client = new HttpClient()) {
                // テキストデータをダウンロード
                string rawData = await client.GetStringAsync("http://kancolle-calc.net/data/shipdata.js");

                // 余計な文字を削除
                rawData = rawData.Replace("var gShips = ", "");

                // JSONとしてパース
                var obj = DynamicJson.Parse(rawData);

                // パース結果を取得
                foreach (var kammusu in obj)
                {
                    // 艦船IDや艦名などを取得
                    int id = int.Parse(kammusu.id);
                    if (id > 1900)
                    {
                        continue;
                    }
                    string name = (string)kammusu.name;
                    if (name == "なし")
                    {
                        continue;
                    }
                    int antiAir       = (int)kammusu.max_aac;
                    int slotCount     = (int)kammusu.slot;
                    var slot          = kammusu.carry;
                    var defaultWeapon = kammusu.equip;

                    // 艦娘か?
                    bool kammusuFlg = id <= 1500;

                    // 艦種データを変換する
                    string rawType = (string)kammusu.type;
                    var    type    = KammusuTypeReverseDic.ContainsKey(rawType) ? KammusuTypeReverseDic[rawType] : KammusuType.Other;
                    //深海棲艦における「航空戦艦」には陸上型も混じっているので個別に対策する
                    if (!kammusuFlg && AFSet.Contains(name))
                    {
                        type = KammusuType.AF;
                    }

                    // Kammusuクラスとしてまとめる
                    var kammusuData       = new Kammusu(id, name, type, antiAir, new List <int>(), kammusuFlg);
                    var defaultWeaponData = new List <int>();
                    foreach (var s in slot)
                    {
                        kammusuData.SlotList.Add((int)s);
                    }
                    foreach (var w in defaultWeapon)
                    {
                        defaultWeaponData.Add((int)w);
                    }
                    int temp = defaultWeaponData.Count;
                    for (int i = temp; i < slotCount; ++i)
                    {
                        defaultWeaponData.Add(0);
                    }

                    // データの整合性がおかしいものは追記しない
                    if (kammusuData.SlotList.Count != slotCount)
                    {
                        Console.WriteLine($"不完全データを検知→ id:{id} name:{name}");
                        continue;
                    }

                    // 追記する
                    result.Add(new KeyValuePair <Kammusu, List <int> >(kammusuData, defaultWeaponData));
                }
            }
            return(result);
        }