/// <summary> /// 個別艦の結果を合計し、艦隊全体の結果を計算 /// </summary> /// <param name="ships">個別の結果</param> /// <returns>艦隊全体の結果</returns> public static DaihatsuResult ToFleetResult(IEnumerable<DaihatsuResult> ships) { DaihatsuResult result = new DaihatsuResult(); double basic_noncap = 0.0;//キャップ適用前の素補正 int starts = 0;//改修レベル合計 foreach(var s in ships) { result.FleetNumDaihatsu += s.PerShipNumDaihatsu; starts += s.PerShipNumStars; basic_noncap += s.PerShipBasicBonusRatio; } double basic_capped = Math.Min(basic_noncap, 0.20);//キャップ適用後の素補正 if(result.FleetNumDaihatsu == 0) { result.FleetCappedBonusRatio = 0.0; result.FleetNonCappedBonusRatio = 0.0; } else { //遠征ボーナス(キャップ適用前) result.FleetNonCappedBonusRatio = basic_noncap + 0.01 * (double)starts * basic_noncap / (double)result.FleetNumDaihatsu; //遠征ボーナス(キャップ適用後) result.FleetCappedBonusRatio = basic_capped + 0.01 * (double)starts * basic_capped / (double)result.FleetNumDaihatsu; } //キャップが適用されたか result.IsCapped = basic_capped != basic_noncap; return result; }
/// <summary> /// 大発装備数を取得します /// </summary> /// <param name="itemdata">アイテムデータ</param> /// <returns>大発装備の個別データ</returns> public DaihatsuResult GetDaihatsuNum(Dictionary<int, SlotItem> itemdata) { lock(_lockObject) { if(_numDaihatsu == null) { var oslots = GetOSlotitems(itemdata); var dslots = GetDSlotitems(itemdata); _numDaihatsu = new DaihatsuResult(); foreach(var i in Enumerable.Range(0, Math.Min(oslots.Count, dslots.Count))) { var o = oslots[i]; var d = dslots[i]; switch(d.api_id) { //68 : 大発動艇 case 68: _numDaihatsu.PerShipBasicBonusRatio += 0.05; goto case -1; //166 : 大発動艇(八九式中戦車&陸戦隊) case 166: _numDaihatsu.PerShipBasicBonusRatio += 0.02; goto case -1; //167 : 特二式内火艇 case 167: _numDaihatsu.PerShipBasicBonusRatio += 0.01; goto case -1; //共通処理 case -1: _numDaihatsu.PerShipNumDaihatsu++; _numDaihatsu.PerShipNumStars += o.api_level; break; } } } return _numDaihatsu; } }