{\r
public class Sniffer\r
{\r
- private bool _start;\r
private readonly ItemMaster _itemMaster = new ItemMaster();\r
private readonly ItemInventory _itemInventory = new ItemInventory();\r
private readonly ItemInfo _itemInfo;\r
private readonly ShipInventory _shipInventory = new ShipInventory();\r
private readonly ShipInfo _shipInfo;\r
private readonly MaterialInfo _materialInfo = new MaterialInfo();\r
- private readonly QuestInfo _questInfo = new QuestInfo();\r
+ private readonly QuestInfo _questInfo;\r
private readonly QuestCounter _questCounter;\r
+ private readonly QuestCountList _questCountList = new QuestCountList();\r
private readonly MissionInfo _missionInfo = new MissionInfo();\r
private readonly ConditionTimer _conditionTimer;\r
private readonly DockInfo _dockInfo;\r
public enum Update\r
{\r
None = 0,\r
- Error = 1 << 0,\r
+ Error = 1,\r
Start = 1 << 1,\r
Item = 1 << 2,\r
Ship = 1 << 3,\r
All = (1 << 10) - 1\r
}\r
\r
- public Sniffer(bool start = false)\r
+ public bool Started { get; private set; }\r
+\r
+ public Sniffer(bool started = false)\r
{\r
- _start = start;\r
+ Started = started;\r
_itemInfo = new ItemInfo(_itemMaster, _itemInventory);\r
_shipInfo = new ShipInfo(_shipMaster, _shipInventory, _itemInventory);\r
_conditionTimer = new ConditionTimer(_shipInfo);\r
_airBase = new AirBase(_itemInfo);\r
_battleInfo = new BattleInfo(_shipInfo, _itemInfo, _airBase);\r
_logger = new Logger(_shipInfo, _itemInfo, _battleInfo);\r
+ _questInfo = new QuestInfo(_questCountList);\r
_questCounter = new QuestCounter(_questInfo, _itemInfo, _battleInfo);\r
_miscTextInfo = new MiscTextInfo(_shipInfo, _itemInfo);\r
_haveState = new List<IHaveState> {_achievement, _materialInfo, _conditionTimer, _exMapInfo, _questInfo};\r
public AdditionalData AdditionalData\r
{\r
get => _additionalData;\r
- set\r
+ private set\r
{\r
_additionalData = value;\r
_itemMaster.AdditionalData = value;\r
{\r
return ApiStart(data);\r
}\r
- if (!_start)\r
+ if (!Started)\r
return Update.None;\r
\r
if (url.EndsWith("api_port/port"))\r
return ApiPort(data);\r
if (url.Contains("member"))\r
- return ApiMember(url, json);\r
+ return ApiMember(url, request,json);\r
if (url.Contains("kousyou"))\r
return ApiKousyou(url, request, data);\r
if (url.Contains("practice"))\r
return ApiKaisou(url, request, data);\r
if (url.Contains("air_corps"))\r
return ApiAirCorps(url, request, data);\r
+ if (url.Contains("map"))\r
+ return ApiMap(url, request, data);\r
return ApiOthers(url, request, data);\r
}\r
\r
_miscTextInfo.InspectMaster(data);\r
_logger.InspectMapInfoMaster(data.api_mst_mapinfo);\r
SetMapDictionary(data.api_mst_mapinfo);\r
- _start = true;\r
+ _questCountList.SetMissionNames(data.api_mst_mission);\r
+ Started = true;\r
return Update.Start;\r
}\r
\r
_questCounter.InspectDeck(data.api_deck_port);\r
_dockInfo.InspectNDock(data.api_ndock);\r
_achievement.InspectBasic(data.api_basic);\r
- if (data.api_parallel_quest_count()) // 昔のログにはないので\r
- _questInfo.AcceptMax = (int)data.api_parallel_quest_count;\r
if (data.api_event_object())\r
_airBase.InspectEventObject(data.api_event_object);\r
if (data.api_plane_info())\r
return Update.All;\r
}\r
\r
- private Update ApiMember(string url, dynamic json)\r
+ private Update ApiMember(string url, string request, dynamic json)\r
{\r
var data = json.api_data() ? json.api_data : new object();\r
\r
if (url.EndsWith("api_get_member/require_info"))\r
{\r
_itemInfo.InspectSlotItem(data.api_slot_item, true);\r
+ if (data.api_useitem())\r
+ _itemInfo.InspectUseItem(data.api_useitem);\r
_dockInfo.InspectKDock(data.api_kdock);\r
return Update.None;\r
}\r
_itemInfo.InspectSlotItem(data, true);\r
return Update.Item;\r
}\r
+ if (url.EndsWith("api_get_member/useitem"))\r
+ {\r
+ if (data == null)\r
+ return Update.None;\r
+ _itemInfo.InspectUseItem(data);\r
+ return Update.Item;\r
+ }\r
if (url.EndsWith("api_get_member/kdock"))\r
{\r
_dockInfo.InspectKDock(data);\r
}\r
if (url.EndsWith("api_get_member/questlist"))\r
{\r
- _questInfo.InspectQuestList(data);\r
+ _questInfo.InspectQuestList(request, data);\r
return Update.QuestList;\r
}\r
if (url.EndsWith("api_get_member/deck"))\r
_shipInfo.InspectShip(url, json);\r
_akashiTimer.CheckFleet();\r
_battleInfo.BattleState = BattleState.None;\r
- return Update.Item | Update.Ship | Update.Battle;\r
+ return Update.Item | Update.Ship;\r
}\r
if (url.EndsWith("api_get_member/ship_deck"))\r
{\r
_shipInfo.InspectShip(url, data);\r
_akashiTimer.CheckFleet();\r
_battleInfo.BattleState = BattleState.None;\r
- return Update.Ship | Update.Battle | Update.Item;\r
+ return Update.Ship | Update.Item;\r
}\r
if (url.EndsWith("api_get_member/ship3"))\r
{\r
_itemInfo.InspectCreateItem(data);\r
_materialInfo.InspectCreateIem(data);\r
_logger.InspectCreateItem(request, data);\r
- _questCounter.CountCreateItem();\r
+ _questCounter.InspectCreateItem(request);\r
return Update.Item | Update.QuestList;\r
}\r
if (url.EndsWith("api_req_kousyou/getship"))\r
}\r
if (url.EndsWith("api_req_kousyou/destroyship"))\r
{\r
- _shipInfo.InspectDestroyShip(request, data);\r
+ _shipInfo.InspectDestroyShip(request);\r
_materialInfo.InspectDestroyShip(data);\r
_conditionTimer.CheckCond();\r
_akashiTimer.CheckFleet();\r
}\r
if (url.EndsWith("api_req_kousyou/destroyitem2"))\r
{\r
- _questCounter.InspectDestroyItem(request, data); // 本当に削除される前\r
- _itemInfo.InspectDestroyItem(request, data);\r
+ _questCounter.InspectDestroyItem(request); // 本当に削除される前\r
+ _itemInfo.InspectDestroyItem(request);\r
_materialInfo.InspectDestroyItem(data);\r
return Update.Item | Update.QuestList;\r
}\r
return Update.None;\r
}\r
\r
+ private Update ApiMap(string url, string request, dynamic data)\r
+ {\r
+ if (url.EndsWith("api_req_map/start"))\r
+ {\r
+ _shipInfo.InspectMapStart(request); // 出撃中判定が必要なので_conditionTimerより前\r
+ _conditionTimer.InvalidateCond();\r
+ _exMapInfo.InspectMapStart(data);\r
+ _battleInfo.InspectMapStart(data);\r
+ _logger.InspectMapStart(data);\r
+ _miscTextInfo.InspectMapStart(data);\r
+ _questCounter.InspectMapStart(data);\r
+ _cellInfo.InspectMapStart(data);\r
+ RepeatingTimerController?.Suspend("大破警告");\r
+ return Update.Timer | Update.Ship | Update.Cell;\r
+ }\r
+ if (url.EndsWith("api_req_map/next"))\r
+ {\r
+ _exMapInfo.InspectMapNext(data);\r
+ _battleInfo.InspectMapNext(data);\r
+ _logger.InspectMapNext(data);\r
+ _questCounter.InspectMapNext(data);\r
+ _miscTextInfo.InspectMapNext(data);\r
+ _cellInfo.InspectMapNext(data);\r
+ return Update.Battle;\r
+ }\r
+ if (url.EndsWith("api_req_map/anchorage_repair"))\r
+ {\r
+ _shipInfo.InspectAnchorageRepair(data);\r
+ return Update.Ship;\r
+ }\r
+ return Update.None;\r
+ }\r
+\r
private Update ApiOthers(string url, string request, dynamic data)\r
{\r
if (url.EndsWith("api_req_hokyu/charge"))\r
_conditionTimer.CheckCond();\r
return Update.NDock | Update.Timer | Update.Item | Update.Ship;\r
}\r
- if (url.EndsWith("api_req_map/start"))\r
- {\r
- _shipInfo.InspectMapStart(request); // 出撃中判定が必要なので_conditionTimerより前\r
- _conditionTimer.InvalidateCond();\r
- _exMapInfo.InspectMapStart(data);\r
- _battleInfo.InspectMapStart(data);\r
- _logger.InspectMapStart(data);\r
- _miscTextInfo.InspectMapStart(data);\r
- _questCounter.InspectMapStart(data);\r
- _cellInfo.InspectMapStart(data);\r
- RepeatingTimerController?.Suspend("大破警告");\r
- return Update.Timer | Update.Ship | Update.Cell;\r
- }\r
- if (url.EndsWith("api_req_map/next"))\r
- {\r
- _exMapInfo.InspectMapNext(data);\r
- _battleInfo.InspectMapNext(data);\r
- _logger.InspectMapNext(data);\r
- _questCounter.InspectMapNext(data);\r
- _miscTextInfo.InspectMapNext(data);\r
- _cellInfo.InspectMapNext(data);\r
- return Update.Cell;\r
- }\r
if (url.EndsWith("api_req_mission/start"))\r
{\r
var deck = HttpUtility.ParseQueryString(request)["api_deck_id"];\r
\r
public AlarmCounter ItemCounter => _itemInfo.Counter;\r
\r
- public ItemInfo Item => _itemInfo;\r
-\r
public MaterialInfo Material => _materialInfo;\r
\r
public QuestStatus[] Quests => _questInfo.Quests;\r
public void GetQuestNotifications(out string[] notify, out string[] stop) =>\r
_questInfo.GetNotifications(out notify, out stop);\r
\r
- public void ClearQuests() => _questInfo.ClearQuests();\r
-\r
public NameAndTimer[] Missions => _missionInfo.Missions;\r
\r
public DateTime GetConditionTimer(int fleet) => _conditionTimer.GetTimer(fleet);\r
\r
- public int[] GetConditionNotice(DateTime prev, DateTime now) => _conditionTimer.GetNotice(prev, now);\r
+ public int[] GetConditionNotice(TimeStep step) => _conditionTimer.GetNotice(step);\r
\r
public AlarmCounter ShipCounter => _shipInfo.Counter;\r
\r
public IReadOnlyList<Fleet> Fleets => _shipInfo.Fleets;\r
\r
+ public int InSortie => _shipInfo.InSortie;\r
+\r
public ShipInfo.ShipStatusPair[] BattleResultStatusDiff => _shipInfo.BattleResultDiff;\r
\r
public bool IsBattleResultError => _shipInfo.IsBattleResultError || _battleInfo.DisplayedResultRank.IsError;\r
\r
public string[] BadlyDamagedShips => _shipInfo.BadlyDamagedShips;\r
\r
+ public bool WarnBadDamageWithDameCon\r
+ {\r
+ set => _shipInfo.WarnBadDamageWithDameCon = value;\r
+ }\r
+\r
public ItemStatus[] ItemList\r
{\r
get\r
_logger.SetWriter(writer, nowFunc);\r
}\r
\r
- public void SkipMaster()\r
- {\r
- _start = true;\r
- }\r
-\r
public void EnableLog(LogType type)\r
{\r
_logger.EnableLog(type);\r