var shipSpec = _shipSpecs[(int)entry.api_id] = new ShipSpec\r
{\r
Id = (int)entry.api_id,\r
+ SortNo = entry.api_sortno() ? (int)entry.api_sortno : 0,\r
Name = ShipName(entry),\r
FuelMax = entry.api_fuel_max() ? (int)entry.api_fuel_max : 0,\r
BullMax = entry.api_bull_max() ? (int)entry.api_bull_max : 0,\r
ShipType = (int)entry.api_stype,\r
ShipTypeName = dict[entry.api_stype]\r
};\r
- shipSpec.ShortName = ShortName(shipSpec.Name);\r
+ if (entry.api_afterlv())\r
+ {\r
+ shipSpec.Remodel.Level = (int)entry.api_afterlv;\r
+ shipSpec.Remodel.After = int.Parse(entry.api_aftershipid);\r
+ }\r
int[] maxEq;\r
shipSpec.MaxEq = entry.api_maxeq()\r
? entry.api_maxeq\r
: MissingData.MaxEq.TryGetValue(shipSpec.Id, out maxEq) ? maxEq : null;\r
}\r
_shipSpecs[-1] = new ShipSpec();\r
+ SetRemodelBaseAndStep();\r
}\r
\r
// 深海棲艦の名前にelite/flagshipを付ける\r
return name + "(" + flagship + ")";\r
}\r
\r
- private readonly Dictionary<string, string> _shortNameDict = new Dictionary<string, string>\r
- {\r
- {"千代田航改", "千代田航"},\r
- {"千代田航改二", "千代田航"},\r
- {"千歳航改二", "千歳航改"},\r
- {"五十鈴改二", "五十鈴改"},\r
- {"あきつ丸改", "あきつ丸"},\r
- {"Bismarck改", "Bismarck"},\r
- {"Bismarck twei", "Bismarck"},\r
- {"Bismarck drei", "Bismarck"},\r
- {"Prinz Eugen", "Prinz Eug"},\r
- {"Prinz Eugen改", "Prinz Eug"},\r
- {"Graf Zeppelin", "Graf Zep"},\r
- {"Libeccio改", "Libeccio"},\r
- {"阿武隈改二", "阿武隈改"},\r
- {"瑞鶴改二甲", "瑞鶴改二"},\r
- {"翔鶴改二甲", "瑞鶴改二"},\r
- };\r
+ public ShipSpec this[int id] => _shipSpecs[id];\r
\r
- private string ShortName(string name)\r
+ private void SetRemodelBaseAndStep()\r
{\r
- string r;\r
- return _shortNameDict.TryGetValue(name, out r) ? r : name;\r
+ // 改造後のデータをマーク\r
+ foreach (var spec in _shipSpecs.Values)\r
+ {\r
+ if (spec.Remodel.After == 0)\r
+ continue;\r
+ _shipSpecs[spec.Remodel.After].Remodel.Base = 1;\r
+ }\r
+ foreach (var spec in _shipSpecs.Values)\r
+ {\r
+ if (spec.Remodel.Base != 0)\r
+ continue;\r
+ var step = 0;\r
+ var hash = new HashSet<int> {spec.Id};\r
+ var s = spec;\r
+ s.Remodel.Base = spec.Id;\r
+ while (s.Remodel.After != 0)\r
+ {\r
+ s.Remodel.Step = ++step;\r
+ if (!hash.Add(s.Remodel.After))\r
+ break;\r
+ s = _shipSpecs[s.Remodel.After];\r
+ s.Remodel.Base = spec.Id;\r
+ }\r
+ }\r
}\r
-\r
- public ShipSpec this[int id] => _shipSpecs[id];\r
}\r
\r
public class ShipSpec\r
{\r
public int Id { get; set; }\r
+ public int SortNo { get; set; }\r
public string Name { get; set; }\r
- public string ShortName { get; set; }\r
public int FuelMax { get; set; }\r
public int BullMax { get; set; }\r
public int[] MaxEq { get; set; }\r
public int ShipType { get; set; }\r
public string ShipTypeName { get; set; }\r
+ public RemodelInfo Remodel { get; } = new RemodelInfo();\r
+\r
+ public class RemodelInfo\r
+ {\r
+ public int Level { get; set; }\r
+ public int After { get; set; }\r
+ public int Base { get; set; } // 艦隊晒しページ用\r
+ public int Step { get; set; } // 同上\r
+ }\r
\r
public ShipSpec()\r
{\r
}\r
}\r
\r
+ public double TransportPoint\r
+ {\r
+ get\r
+ {\r
+ switch (ShipType)\r
+ {\r
+ case 2:\r
+ return 5.0;\r
+ case 3:\r
+ return Id == 487 ? 10.0 : 2.0; // 鬼怒改二は大発分を加算\r
+ case 6:\r
+ return 4.0;\r
+ case 10:\r
+ return 7.0;\r
+ case 15:\r
+ return 15.0;\r
+ case 16:\r
+ return 9.0;\r
+ case 17:\r
+ return 12.0;\r
+ case 20:\r
+ return 7.0;\r
+ case 21:\r
+ return 6.0;\r
+ default:\r
+ return 0;\r
+ }\r
+ }\r
+ }\r
+\r
public bool IsSubmarine => ShipType == 13 || ShipType == 14;\r
\r
public bool IsAircraftCarrier => ShipType == 7 || ShipType == 11 || ShipType == 18;\r