\r
using System;\r
using System.Collections.Generic;\r
+using System.Linq;\r
using System.Web;\r
\r
namespace KancolleSniffer\r
public int NowEquips\r
{\r
get { return _nowEquips; }\r
- set\r
+ private set\r
{\r
if (MaxEquips != 0)\r
{\r
if (!json.IsDefined("api_slot_item"))\r
return;\r
InspectSlotItem(json.api_slot_item);\r
- NowEquips++;\r
}\r
\r
public void InspectGetShip(dynamic json)\r
if (json.api_slotitem == null) // まるゆにはスロットがない\r
return;\r
InspectSlotItem(json.api_slotitem);\r
- NowEquips += ((object[])json.api_slotitem).Length;\r
}\r
\r
public void InspectDestroyItem(string request, dynamic json)\r
{\r
var values = HttpUtility.ParseQueryString(request);\r
- NowEquips -= values["api_slotitem_ids"].Split(',').Length;\r
+ DeleteItems(values["api_slotitem_ids"].Split(',').Select(int.Parse).ToArray());\r
var get = (int[])json.api_get_material;\r
for (var i = 0; i < get.Length; i++)\r
MaterialHistory[i].Now += get[i];\r
\r
public void InspectRemodelSlot(dynamic json)\r
{\r
+ if (json.api_after_slot())\r
+ InspectSlotItem(json.api_after_slot);\r
if (!json.api_use_slot_id())\r
return;\r
- NowEquips -= ((object[])json.api_use_slot_id).Length;\r
+ DeleteItems(((int[])json.api_use_slot_id));\r
+ }\r
+\r
+ public void DeleteItems(int[] ids)\r
+ {\r
+ foreach (var id in ids.Where(id => id != -1))\r
+ {\r
+ _itemInfo.Remove(id);\r
+ NowEquips--;\r
+ }\r
+ }\r
+\r
+ public void CountNewItems(int[] ids)\r
+ {\r
+ foreach (var id in ids.Where(id => id != -1 && !_itemInfo.ContainsKey(id)))\r
+ {\r
+ _itemInfo[id] = new ItemStatus();\r
+ NowEquips++;\r
+ }\r
}\r
\r
public void InspectMissionResult(dynamic json)\r
Cond = (int)entry.api_cond,\r
Fuel = (int)entry.api_fuel,\r
Bull = (int)entry.api_bull,\r
- OnSlot = (from num in (dynamic[])entry.api_onslot select (int)num).ToArray(),\r
- Slot = (from num in (dynamic[])entry.api_slot select (int)num).ToArray(),\r
+ OnSlot = (int[])entry.api_onslot,\r
+ Slot = (int[])entry.api_slot,\r
LoS = (int)entry.api_sakuteki[0]\r
};\r
+ _itemInfo.CountNewItems((int[])entry.api_slot);\r
}\r
}\r
\r
var values = HttpUtility.ParseQueryString(request);\r
var ships = values["api_id_items"].Split(',');\r
_itemInfo.NowShips -= ships.Length;\r
- _itemInfo.NowEquips -= (from s in ships select SlotItemCount(int.Parse(s))).Sum();\r
+ _itemInfo.DeleteItems(ships.SelectMany(s => _shipInfo[int.Parse(s)].Slot).ToArray());\r
foreach (var ship in ships)\r
_shipInfo.Remove(int.Parse(ship));\r
InspectDeck(json.api_deck);\r
{\r
var values = HttpUtility.ParseQueryString(request);\r
var ship = int.Parse(values["api_ship_id"]);\r
- _itemInfo.NowShips -= 1;\r
- _itemInfo.NowEquips -= SlotItemCount(ship);\r
+ _itemInfo.NowShips--;\r
+ _itemInfo.DeleteItems(_shipInfo[ship].Slot);\r
int oi;\r
var of = FindFleet(ship, out oi);\r
if (of != -1)\r
_itemInfo.MaterialHistory[i].Now = material[i];\r
}\r
\r
- private int SlotItemCount(int id)\r
- {\r
- return _shipInfo[id].Slot.Count(item => item != -1);\r
- }\r
-\r
public void StartSortie(string request)\r
{\r
var values = HttpUtility.ParseQueryString(request);\r