Exemple #1
0
        /// <summary>
        /// 2つのレコードをマージ
        /// </summary>
        /// <param name="target">マージするレコード</param>
        /// <returns>マージされたレコード</returns>
        public DropResult Merge(DropResult target)
        {
            //自分自身をディープコピー
            var result = new DropResult();

            foreach (var d in this.Table)
            {
                result.Table[d.Key] = d.Value.DeepCopy();
            }
            result.TotalNum = this.TotalNum;

            //ターゲットをマージする
            foreach (var d in target.Table)
            {
                DropTableItem item;
                //マージ元にあった場合
                if (result.Table.TryGetValue(d.Key, out item))
                {
                    result.Table[d.Key] = item.Merge(d.Value);
                }
                //なかった場合
                else
                {
                    result.Table[d.Key] = d.Value.DeepCopy();
                }
            }
            result.TotalNum += target.TotalNum;

            return(result);
        }
Exemple #2
0
        /// <summary>
        /// ディープコピー
        /// </summary>
        /// <returns>ディープコピーされたインスタンス</returns>
        public DropResult DeepCopy()
        {
            var result = new DropResult();

            foreach (var t in this.Table)
            {
                result.Table[t.Key] = t.Value;
            }
            result.TotalNum = this.TotalNum;

            return(result);
        }
        public void ReadBattleResult(string responseBody, int targetShipId, int[] sameShipIds)
        {
            if (NowCell == null)
            {
                return;
            }

            var strjson      = responseBody.Replace("svdata=", "");
            var battleResult = JsonConvert.DeserializeObject <RootBattleResult>(strjson);

            if (battleResult.api_data == null)
            {
                return;
            }

            //勝敗ランクの取得
            var winrank = WinRankEx.GetWinRank(battleResult.api_data.api_win_rank);

            if (winrank != WinRank.S)
            {
                return;
            }

            //作戦難易度
            if (NowCell == null || MapInfo == null)
            {
                return;
            }
            var map        = MapInfo.Where(x => x.api_id == NowCell.api_maparea_id * 10 + NowCell.api_mapinfo_no).FirstOrDefault();
            var difficulty = 0;

            if (map != null && map.api_eventmap != null)
            {
                difficulty = map.api_eventmap.api_selected_rank;
            }

            //ドロップの取得
            int id = 0;

            if (battleResult.api_data.api_get_ship != null)
            {
                id = battleResult.api_data.api_get_ship.api_ship_id;
            }

            //同型艦の所持数
            int numTargetShip = 0;

            if (PortResponseBody != null)
            {
                foreach (var i in sameShipIds)
                {
                    var match = System.Text.RegularExpressions.Regex.Matches(PortResponseBody, "\"api_ship_id\":" + i + ",\"api_lv\"");
                    numTargetShip += match.Count;
                }
            }

            //サーチする艦以外はドロップなしとする
            if (id != targetShipId)
            {
                id = 0;
            }


            //ドロップ条件の取得
            var condition = DropCondition.CreateInstance(NowCell, difficulty, battleResult.api_data.api_win_rank, numTargetShip);

            //テーブルに追加
            DropResult result;

            if (!Summary.TryGetValue(condition, out result))
            {
                result = new DropResult();
            }
            result.AddTable(id);

            Summary[condition] = result;
        }