using System.IO;\r
using System.Linq;\r
using System.Text;\r
+using KancolleSniffer.Model;\r
\r
namespace KancolleSniffer\r
{\r
public static class TextGenerator\r
{\r
public static string GenerateShipList(IEnumerable<ShipStatus> shipList)\r
- => "ID,艦種,艦名,レベル\r\n" +\r
+ => "ID,艦種,艦名,レベル,cond,素対潜\r\n" +\r
string.Join("\r\n",\r
from ship in shipList\r
orderby ship.Spec.ShipType, -ship.Level, ship.ExpToNext\r
- select $"{ship.Id},{ship.Spec.ShipTypeName},{ship.Name},{ship.Level}");\r
+ select $"{ship.Id},{ship.Spec.ShipTypeName},{ship.Name},{ship.Level},{ship.Cond},{ship.ShipAntiSubmarine}");\r
+\r
+ // ReSharper disable IdentifierTypo\r
+ public static string GenerateKantaiSarashiData(IEnumerable<ShipStatus> shipList)\r
+ {\r
+ return ".2|" +\r
+ string.Join("|", from ship in shipList\r
+ where ship.Locked\r
+ group ship by ship.Spec.Remodel.Base\r
+ into grp\r
+ orderby grp.Key\r
+ select grp.Key + ":" + string.Join(",", from ship in grp\r
+ orderby -ship.Level\r
+ select ship.Level +\r
+ (ship.Level >= ship.Spec.Remodel.Level && ship.Spec.Remodel.Step != 0\r
+ ? "." + ship.Spec.Remodel.Step\r
+ : "")));\r
+ }\r
+ // ReSharper restore IdentifierTypo\r
\r
public static string GenerateItemList(IEnumerable<ItemStatus> itemList)\r
- => "区分,装備名,改修・熟練度,個数\r\n" +\r
+ => "区分,装備名,熟練度,改修,個数\r\n" +\r
string.Join("\r\n",\r
(from item in itemList\r
- where item.Spec.Id != -1\r
+ where !item.Spec.Empty\r
orderby item.Spec.Type, item.Spec.Id, item.Alv, item.Level\r
group item by\r
- $"{item.Spec.TypeName},{item.Spec.Name},{(item.Level == 0 ? item.Alv == 0 ? 0 : item.Alv : item.Level)}"\r
+ $"{item.Spec.TypeName},{item.Spec.Name},{item.Alv},{item.Level}"\r
into grp\r
select grp.Key + $",{grp.Count()}"));\r
\r
{\r
var dict = new ItemName();\r
var sb = new StringBuilder();\r
+ for (var f = 0; f < ShipInfo.FleetCount; f++)\r
+ sb.Append(GenerateFleetData(sniffer, f, dict));\r
+ sb.Append(GenerateBaseAirCorps(sniffer, dict));\r
+ return sb.ToString();\r
+ }\r
+\r
+ public static string GenerateFleetData(Sniffer sniffer, int fleet)\r
+ {\r
+ return GenerateFleetData(sniffer, fleet, new ItemName()).ToString();\r
+ }\r
+\r
+ private static StringBuilder GenerateFleetData(Sniffer sniffer, int fleet, ItemName dict)\r
+ {\r
+ var target = sniffer.Fleets[fleet];\r
+ var sb = new StringBuilder();\r
var fn = new[] {"第一艦隊", "第二艦隊", "第三艦隊", "第四艦隊"};\r
- for (var f = 0; f < fn.Length; f++)\r
+ sb.Append(fn[fleet] + "\r\n");\r
+ sb.Append(string.Concat(from s in target.ActualShips\r
+ select ($"{s.Name} Lv{s.Level} " +\r
+ string.Join(",",\r
+ from item in s.AllSlot\r
+ where !item.Empty\r
+ select dict[item.Spec.Name] + ItemStatusString(item))).TrimEnd(' ') + "\r\n"));\r
+ var fp = target.FighterPower;\r
+ sb.Append($"制空: {(fp[0] == fp[1] ? fp[0].ToString() : fp[0] + "~" + fp[1])} " +\r
+ $"索敵: {target.GetLineOfSights(1):F1}\r\n");\r
+ return sb;\r
+ }\r
+\r
+ private static StringBuilder GenerateBaseAirCorps(Sniffer sniffer, ItemName dict)\r
+ {\r
+ var sb = new StringBuilder();\r
+ if (sniffer.BaseAirCorps == null)\r
+ return sb;\r
+ foreach (var baseInfo in sniffer.BaseAirCorps)\r
{\r
- sb.Append(fn[f] + "\r\n");\r
- foreach (var s in sniffer.GetShipStatuses(f))\r
+ sb.Append(baseInfo.AreaName + " 基地航空隊\r\n");\r
+ var i = 0;\r
+ var name = new[] {"第一 ", "第二 ", "第三 "};\r
+ foreach (var airCorps in baseInfo.AirCorps)\r
{\r
- sb.Append($"{s.Name} Lv{s.Level}");\r
- foreach (var item in s.Slot.Where(item => item.Id != -1))\r
- {\r
- sb.Append(" " + dict[item.Spec.Name] +\r
- (item.Alv == 0 ? "" : "+" + item.Alv) +\r
- (item.Level == 0 ? "" : "★" + item.Level));\r
- }\r
- if (s.SlotEx.Id > 0)\r
- {\r
- var item = s.SlotEx;\r
- sb.Append(" " + dict[item.Spec.Name]);\r
- }\r
- sb.Append("\r\n");\r
+ sb.Append(name[i++]);\r
+ sb.Append(\r
+ string.Join(",",\r
+ from plane in airCorps.Planes\r
+ select plane.State == 1\r
+ ? dict[plane.Slot.Spec.Name] + ItemStatusString(plane.Slot)\r
+ : plane.StateName) + "\r\n");\r
}\r
- var fp = sniffer.GetFighterPower(f);\r
- sb.Append($"制空: {fp[0]}~{fp[1]} 索敵: {sniffer.GetFleetLineOfSights(f):F1}\r\n");\r
}\r
- return sb.ToString();\r
+ return sb;\r
}\r
\r
+ private static string ItemStatusString(ItemStatus item)\r
+ => (item.Alv == 0 ? "" : "+" + item.Alv) + (item.Level == 0 ? "" : "★" + item.Level);\r
+\r
private class ItemName\r
{\r
private readonly Dictionary<string, string> _dict = new Dictionary<string, string>();\r
}\r
}\r
\r
- public string this[string name]\r
- {\r
- get\r
- {\r
- string shortName;\r
- return _dict.TryGetValue(name, out shortName) ? shortName : name;\r
- }\r
- }\r
+ public string this[string name] => _dict.TryGetValue(name, out var shortName) ? shortName : name;\r
}\r
\r
public static string GenerateDeckBuilderData(Sniffer sniffer)\r
{\r
- var sb = new StringBuilder("{\"version\": 3,");\r
- for (var f = 0; f < ShipInfo.FleetCount; f++)\r
+ var sb = new StringBuilder("{\"version\": 4,");\r
+ foreach (var fleet in sniffer.Fleets)\r
{\r
- if (f != 0)\r
+ if (fleet.Number != 0)\r
sb.Append(",");\r
- sb.Append($"\"f{f + 1}\":{{");\r
- var ships = sniffer.GetShipStatuses(f);\r
- for (var s = 0; s < ships.Length; s++)\r
+ sb.Append($"\"f{fleet.Number + 1}\":{{");\r
+ var ships = fleet.ActualShips;\r
+ for (var s = 0; s < ships.Count; s++)\r
{\r
if (s != 0)\r
sb.Append(",");\r
- var st = ships[s];\r
- sb.Append($"\"s{s + 1}\":{{\"id\":\"{st.Spec.Id}\",\"lv\":{st.Level},\"luck\":{st.Lucky},\"items\":{{");\r
- var items = st.Slot;\r
- for (var i = 0; i < items.Length; i++)\r
+ var ship = ships[s];\r
+ sb.Append(\r
+ $"\"s{s + 1}\":{{\"id\":\"{ship.Spec.Id}\",\"lv\":{ship.Level},\"luck\":{ship.Lucky},\"items\":{{");\r
+ var items = ship.Slot;\r
+ for (var i = 0; i < items.Count; i++)\r
{\r
- var it = items[i];\r
- if (it.Id == -1)\r
+ var item = items[i];\r
+ if (item.Empty)\r
continue;\r
if (i != 0)\r
sb.Append(",");\r
- sb.Append($"\"i{i + 1}\":{{\"id\":{it.Spec.Id},\"rf\":{(it.Alv != 0 ? it.Alv : it.Level)}}}");\r
+ sb.Append($"\"i{i + 1}\":{{\"id\":{item.Spec.Id},\"rf\":{item.Level},\"mas\":{item.Alv}}}");\r
+ }\r
+ if (!ship.SlotEx.Unimplemented && !ship.SlotEx.Empty)\r
+ {\r
+ if (ship.Slot.Any(item => !item.Empty))\r
+ sb.Append(",");\r
+ var name = ship.Spec.SlotNum == 5 ? "ix" : $"i{ship.Spec.SlotNum + 1}";\r
+ sb.Append($"\"{name}\":{{\"id\":{ship.SlotEx.Spec.Id},\"rf\":{ship.SlotEx.Level}}}");\r
}\r
sb.Append("}}");\r
}\r