public SortieConsumptionRecords(SQLiteConnection rpConnection) : base(rpConnection) { DisposableObjects.Add(ApiService.Subscribe("api_req_map/start", StartSortie)); DisposableObjects.Add(ApiService.Subscribe("api_req_hokyu/charge", BeforeSupply, AfterSupply)); DisposableObjects.Add(ApiService.Subscribe("api_req_nyukyo/start", Repair)); DisposableObjects.Add(ApiService.SubscribeOnlyOnBeforeProcessStarted("api_req_nyukyo/speedchange", UseBucket)); DisposableObjects.Add(ApiService.Subscribe("api_req_hensei/change", ResetAnchorageRepairSnapshots)); DisposableObjects.Add(ApiService.Subscribe("api_port/port", ProcessAnchorageRepair)); DisposableObjects.Add(ApiService.Subscribe("api_req_kaisou/remodeling", Remodel)); DisposableObjects.Add(ApiService.Subscribe(new[] { "api_req_map/start", "api_req_map/next" }, Exploration)); DisposableObjects.Add(ApiService.Subscribe(new[] { "api_req_sortie/battleresult", "api_req_combined_battle/battleresult" }, ProcessBattleResult)); DisposableObjects.Add(ApiService.Subscribe("api_port/port", CommitReward)); DisposableObjects.Add(ApiService.Subscribe("api_start2", ForfeitReward)); DisposableObjects.Add(ApiService.Subscribe("api_req_practice/battle", StartPractice)); DisposableObjects.Add(ApiService.Subscribe("api_req_mission/result", ExpeditionResult)); DisposableObjects.Add(ApiService.Subscribe("api_req_air_corps/set_plane", AirBasePlaneDeployment)); DisposableObjects.Add(ApiService.Subscribe("api_req_air_corps/supply", BeforeAirForceSquadronSupply, AfterAirForceSquadronSupply)); }
internal RankingPointsRecords(SQLiteConnection rpConnection) : base(rpConnection) { DisposableObjects.Add(SessionService.Instance.Subscribe("api_req_ranking/getlist", rpData => { if (rpData.Parameters.ContainsKey("api_pageno")) { return; } var rAdmiral = KanColleGame.Current.Port.Admiral; var rMyData = rpData.Json["api_data"]["api_list"].SingleOrDefault(r => (string)r["api_nickname"] == rAdmiral.Name && (string)r["api_comment"] == rAdmiral.Comment); if (rMyData == null) { return; } var rPosition = (int)rMyData["api_no"]; var rScore = (int)rMyData["api_rate"] / rPosition / r_Modifier[rAdmiral.ID % 10]; InsertRankingPoints(rPosition, rScore); })); DisposableObjects.Add(SessionService.Instance.Subscribe("api_req_map/next", r => ProcessEscortSuccess((RawMapExploration)r.Data))); var rBattleResultApis = new[] { "api_req_sortie/battleresult", "api_req_combined_battle/battleresult", }; DisposableObjects.Add(SessionService.Instance.Subscribe(rBattleResultApis, r => ProcessBattleResult((RawBattleResult)r.Data))); }
internal SortieRecords(SQLiteConnection rpConnection) : base(rpConnection) { DisposableObjects.Add(SessionService.Instance.Subscribe("api_req_map/start", StartSortie)); DisposableObjects.Add(SessionService.Instance.Subscribe("api_req_map/next", _ => InsertExplorationRecord(SortieInfo.Current))); DisposableObjects.Add(SessionService.Instance.Subscribe("api_start2", _ => ProcessReturn(ReturnReason.Unexpected))); DisposableObjects.Add(Observable.FromEvent <SortieInfo>(r => KanColleGame.Current.ReturnedFromSortie += r, r => KanColleGame.Current.ReturnedFromSortie -= r).Subscribe(r => { ReturnReason rType; if (r_IsDeadEnd) { rType = ReturnReason.DeadEnd; } else { IEnumerable <Ship> rShips = r.Fleet.Ships; if (r.EscortFleet != null) { rShips = rShips.Concat(r.EscortFleet.Ships); } rType = rShips.Any(rpShip => rpShip.State.HasFlag(ShipState.HeavilyDamaged)) ? ReturnReason.RetreatWithHeavilyDamagedShip : ReturnReason.Retreat; } ProcessReturn(rType); })); }
internal ResourcesRecords(SQLiteConnection rpConnection) : base(rpConnection) { DisposableObjects.Add(SessionService.Instance.Subscribe("api_port/port", _ => { var rMaterials = KanColleGame.Current.Port.Materials; var rShouldInsertRecord = r_Fuel != rMaterials.Fuel || r_Bullet != rMaterials.Bullet || r_Steel != rMaterials.Steel || r_Bauxite != rMaterials.Bauxite || r_InstantConstruction != rMaterials.InstantConstruction || r_Bucket != rMaterials.Bucket || r_DevelopmentMaterial != rMaterials.DevelopmentMaterial || r_ImprovementMaterial != rMaterials.ImprovementMaterial; if (rShouldInsertRecord) { r_Fuel = rMaterials.Fuel; r_Bullet = rMaterials.Bullet; r_Steel = rMaterials.Steel; r_Bauxite = rMaterials.Bauxite; r_InstantConstruction = rMaterials.InstantConstruction; r_Bucket = rMaterials.Bucket; r_DevelopmentMaterial = rMaterials.DevelopmentMaterial; r_ImprovementMaterial = rMaterials.ImprovementMaterial; InsertRecord(); } })); }
internal BattleRecords(SQLiteConnection rpConnection) : base(rpConnection) { var rBattleApis = new[] { "api_req_sortie/battle", "api_req_battle_midnight/sp_midnight", "api_req_sortie/airbattle", "api_req_sortie/ld_airbattle", "api_req_combined_battle/airbattle", "api_req_combined_battle/battle", "api_req_combined_battle/battle_water", "api_req_combined_battle/sp_midnight", "api_req_combined_battle/ld_airbattle", "api_req_battle_midnight/battle", "api_req_combined_battle/midnight_battle", }; DisposableObjects.Add(SessionService.Instance.Subscribe(rBattleApis, Process)); var rBattleResultApis = new[] { "api_req_sortie/battleresult", "api_req_combined_battle/battleresult", }; DisposableObjects.Add(SessionService.Instance.Subscribe(rBattleResultApis, r => ProcessResult((RawBattleResult)r.Data))); }
internal SortieRecords(SQLiteConnection rpConnection) : base(rpConnection) { DisposableObjects.Add(ApiService.Subscribe("api_req_map/start", StartSortie)); DisposableObjects.Add(ApiService.Subscribe("api_req_map/next", _ => InsertExplorationRecord(SortieInfo.Current))); DisposableObjects.Add(ApiService.Subscribe(new[] { "api_req_sortie/battleresult", "api_req_combined_battle/battleresult" }, RecordMapHP)); KanColleGame.Current.ReturnedFromSortie += OnReturnedFromSortie; }
internal BattleRecords(SQLiteConnection rpConnection) : base(rpConnection) { var rBattleResultApis = new[] { "api_req_sortie/battleresult", "api_req_combined_battle/battleresult", }; DisposableObjects.Add(ApiService.Subscribe(rBattleResultApis, r => ProcessResult((RawBattleResult)r.Data))); }
internal BattleDetailRecords(SQLiteConnection rpConnection, int rpUserID) : base(rpConnection) { r_Filename = new FileInfo(Path.Combine(RecordService.Instance.RecordDirectory.FullName, rpUserID + "_Battle.db")).FullName; r_Connection = new SQLiteConnection($@"Data Source={r_Filename}; Page Size=8192", true).OpenAndReturn(); using (var rCommand = r_Connection.CreateCommand()) { rCommand.CommandText = "PRAGMA journal_mode = DELETE; " + "PRAGMA foreign_keys = ON;"; rCommand.ExecuteNonQuery(); } var rSortieFirstStageApis = new[] { "api_req_sortie/battle", "api_req_battle_midnight/sp_midnight", "api_req_sortie/airbattle", "api_req_sortie/ld_airbattle", "api_req_combined_battle/airbattle", "api_req_combined_battle/battle", "api_req_combined_battle/battle_water", "api_req_combined_battle/sp_midnight", "api_req_combined_battle/ld_airbattle", "api_req_combined_battle/ec_battle", "api_req_combined_battle/each_battle", "api_req_combined_battle/each_battle_water", }; DisposableObjects.Add(ApiService.Subscribe(rSortieFirstStageApis, ProcessSortieFirstStage)); DisposableObjects.Add(ApiService.Subscribe("api_req_practice/battle", ProcessPracticeFirstStage)); var rSecondStageApis = new[] { "api_req_practice/midnight_battle", "api_req_battle_midnight/battle", "api_req_combined_battle/midnight_battle", "api_req_combined_battle/ec_midnight_battle", "api_req_practice/midnight_battle", }; DisposableObjects.Add(ApiService.Subscribe(rSecondStageApis, ProcessSecondStage)); var rBattleResultApis = new[] { "api_req_sortie/battleresult", "api_req_combined_battle/battleresult", "api_req_practice/battle_result", }; DisposableObjects.Add(ApiService.Subscribe(rBattleResultApis, ProcessResult)); }
internal RankingPointsRecords(SQLiteConnection rpConnection) : base(rpConnection) { DisposableObjects.Add(ApiService.Subscribe("api_req_map/next", r => ProcessEscortSuccess((RawMapExploration)r.Data))); var rBattleResultApis = new[] { "api_req_sortie/battleresult", "api_req_combined_battle/battleresult", }; DisposableObjects.Add(ApiService.Subscribe(rBattleResultApis, r => ProcessBattleResult((RawBattleResult)r.Data))); }
internal DevelopmentRecords(SQLiteConnection rpConnection) : base(rpConnection) { DisposableObjects.Add(ApiService.Subscribe("api_req_kousyou/createitem", r => { var rFuelConsumption = int.Parse(r.Parameters["api_item1"]); var rBulletConsumption = int.Parse(r.Parameters["api_item2"]); var rSteelConsumption = int.Parse(r.Parameters["api_item3"]); var rBauxiteConsumption = int.Parse(r.Parameters["api_item4"]); InsertRecord((RawEquipmentDevelopment)r.Data, rFuelConsumption, rBulletConsumption, rSteelConsumption, rBauxiteConsumption); })); }
internal ExpeditionRecords(SQLiteConnection rpConnection) : base(rpConnection) { DisposableObjects.Add(SessionService.Instance.Subscribe("api_req_mission/result", r => { using (var rTransaction = Connection.BeginTransaction()) { var rData = (RawExpeditionResult)r.Data; var rFleet = KanColleGame.Current.Port.Fleets[int.Parse(r.Parameters["api_deck_id"])]; var rExpedition = rFleet.ExpeditionStatus.Expedition ?? KanColleGame.Current.MasterInfo.GetExpeditionFromName(rData.Name); InsertRecord(rExpedition.ID, rData); UpdateCount(rExpedition.ID, rData.Ships.Skip(1)); rTransaction.Commit(); } })); }
internal ExperienceRecords(SQLiteConnection rpConnection) : base(rpConnection) { DisposableObjects.Add(SessionService.Instance.Subscribe("api_port/port", _ => { var rPort = KanColleGame.Current.Port; lock (r_ThreadSyncLock) using (var rTransaction = Connection.BeginTransaction()) { if (r_Admiral != rPort.Admiral.Experience) { r_Admiral = rPort.Admiral.Experience; InsertAdmiralRecord(rPort.Admiral.Experience); } var rShips = new List <Tuple <int, int> >(25); foreach (var rShip in rPort.Ships.Values.Where(r => r.Experience > 0)) { int rOldExperience; if (!r_Ships.TryGetValue(rShip.ID, out rOldExperience)) { r_Ships.Add(rShip.ID, rShip.Experience); } else { r_Ships[rShip.ID] = rShip.Experience; } if (rOldExperience != rShip.Experience) { rShips.Add(Tuple.Create(rShip.ID, rShip.Experience)); } } if (rShips.Count > 0) { InsertShipExperience(rShips); } rTransaction.Commit(); } })); }
internal FateRecords(SQLiteConnection rpConnection) : base(rpConnection) { var rFirstStages = new[] { "api_req_sortie/battle", "api_req_battle_midnight/sp_midnight", "api_req_sortie/airbattle", "api_req_sortie/ld_airbattle", "api_req_combined_battle/airbattle", "api_req_combined_battle/battle", "api_req_combined_battle/battle_water", "api_req_combined_battle/sp_midnight", "api_req_combined_battle/ld_airbattle", "api_req_battle_midnight/battle", "api_req_combined_battle/midnight_battle", }; DisposableObjects.Add(SessionService.Instance.Subscribe(rFirstStages, ProcessBattle)); var rBattleResultApis = new[] { "api_req_sortie/battleresult", "api_req_combined_battle/battleresult", }; DisposableObjects.Add(SessionService.Instance.Subscribe(rBattleResultApis, ProcessBattleResult)); DisposableObjects.Add(SessionService.Instance.Subscribe("api_port/port", delegate { if (r_SunkShips.Count == 0) { return; } var rAliveShips = r_SunkShips.Intersect(KanColleGame.Current.Port.Ships.Values); DeleteShipFate(rAliveShips); r_SunkShips.Clear(); })); }
internal BattleDetailRecords(SQLiteConnection rpConnection, int rpUserID) : base(rpConnection) { r_Filename = new FileInfo($"Records\\{rpUserID}_Battle.db").FullName; r_Connection = new SQLiteConnection($@"Data Source={r_Filename};Page Size=8192").OpenAndReturn(); var rSortieFirstStageApis = new[] { "api_req_sortie/battle", "api_req_battle_midnight/sp_midnight", "api_req_sortie/airbattle", "api_req_sortie/ld_airbattle", "api_req_combined_battle/airbattle", "api_req_combined_battle/battle", "api_req_combined_battle/battle_water", "api_req_combined_battle/sp_midnight", "api_req_combined_battle/ld_airbattle", }; DisposableObjects.Add(SessionService.Instance.Subscribe(rSortieFirstStageApis, ProcessSortieFirstStage)); DisposableObjects.Add(SessionService.Instance.Subscribe("api_req_practice/battle", ProcessPracticeFirstStage)); var rSecondStageApis = new[] { "api_req_practice/midnight_battle", "api_req_battle_midnight/battle", "api_req_combined_battle/midnight_battle", "api_req_practice/midnight_battle", }; DisposableObjects.Add(SessionService.Instance.Subscribe(rSecondStageApis, ProcessSecondStage)); var rBattleResultApis = new[] { "api_req_sortie/battleresult", "api_req_combined_battle/battleresult", "api_req_practice/battle_result", }; DisposableObjects.Add(SessionService.Instance.Subscribe(rBattleResultApis, ProcessResult)); }
internal ExperienceRecords(SQLiteConnection rpConnection) : base(rpConnection) { DisposableObjects.Add(ApiService.Subscribe("api_port/port", r => { var rPort = KanColleGame.Current.Port; var rAdmiral = rPort.Admiral; if (r_Admiral != rAdmiral.Experience) { r_Admiral = rAdmiral.Experience; InsertAdmiralRecord(r.Timestamp, rAdmiral.Experience); } var rShips = new List <Ship>(25); foreach (var rShip in rPort.Ships.Values.Where(rpShip => rpShip.Experience > 0)) { int rOldExperience; if (!r_Ships.TryGetValue(rShip.ID, out rOldExperience)) { r_Ships.Add(rShip.ID, rShip.Experience); } else { r_Ships[rShip.ID] = rShip.Experience; } if (rOldExperience != rShip.Experience) { rShips.Add(rShip); } } if (rShips.Count > 0) { InsertShipExperience(r.Timestamp, rShips); } })); }
internal ResourcesRecords(SQLiteConnection rpConnection) : base(rpConnection) { var rApis = new[] { "api_port/port", "api_req_map/start", }; DisposableObjects.Add(ApiService.Subscribe(rApis, r => { var rMaterials = KanColleGame.Current.Port.Materials; var rShouldInsertRecord = r_Fuel != rMaterials.Fuel || r_Bullet != rMaterials.Bullet || r_Steel != rMaterials.Steel || r_Bauxite != rMaterials.Bauxite || r_InstantConstruction != rMaterials.InstantConstruction || r_Bucket != rMaterials.Bucket || r_DevelopmentMaterial != rMaterials.DevelopmentMaterial || r_ImprovementMaterial != rMaterials.ImprovementMaterial; if (rShouldInsertRecord) { r_Fuel = rMaterials.Fuel; r_Bullet = rMaterials.Bullet; r_Steel = rMaterials.Steel; r_Bauxite = rMaterials.Bauxite; r_InstantConstruction = rMaterials.InstantConstruction; r_Bucket = rMaterials.Bucket; r_DevelopmentMaterial = rMaterials.DevelopmentMaterial; r_ImprovementMaterial = rMaterials.ImprovementMaterial; InsertRecord(r.Timestamp); } })); }
internal QuestProgressRecords(SQLiteConnection rpConnection) : base(rpConnection) { DisposableObjects.Add(ApiService.Subscribe("api_req_quest/clearitemget", r => DeleteRecord(int.Parse(r.Parameters["api_quest_id"])))); }
internal FateRecords(SQLiteConnection rpConnection) : base(rpConnection) { DisposableObjects.Add(ApiService.SubscribeOnlyOnBeforeProcessStarted("api_req_kaisou/powerup", r => { var rConsumedShips = r.Parameters["api_id_items"].Split(',').Select(rpID => KanColleGame.Current.Port.Ships[int.Parse(rpID)]).ToArray(); var rConsumedEquipment = rConsumedShips.SelectMany(rpShip => rpShip.EquipedEquipment).ToArray(); AddShipFate(rConsumedShips, Fate.ConsumedByModernization); })); DisposableObjects.Add(ApiService.SubscribeOnlyOnBeforeProcessStarted("api_req_kousyou/destroyship", r => { var rShip = KanColleGame.Current.Port.Ships[int.Parse(r.Parameters["api_ship_id"])]; AddShipFate(rShip, Fate.Dismantled); })); DisposableObjects.Add(ApiService.SubscribeOnlyOnBeforeProcessStarted("api_req_kousyou/destroyitem2", r => { var rEquipmentIDs = r.Parameters["api_slotitem_ids"].Split(',').Select(int.Parse); AddEquipmentFate(rEquipmentIDs.Select(rpID => KanColleGame.Current.Port.Equipment[rpID]), Fate.Scrapped); })); DisposableObjects.Add(ApiService.SubscribeOnlyOnBeforeProcessStarted("api_req_kousyou/remodel_slot", r => { var rData = (RawImprovementResult)r.Data; if (rData.ConsumedEquipmentID == null) { return; } var rConsumedEquipment = rData.ConsumedEquipmentID.Select(rpID => KanColleGame.Current.Port.Equipment[rpID]).ToArray(); AddEquipmentFate(rConsumedEquipment, Fate.ConsumedByImprovement); })); var rFirstStages = new[] { "api_req_sortie/battle", "api_req_battle_midnight/sp_midnight", "api_req_sortie/airbattle", "api_req_sortie/ld_airbattle", "api_req_combined_battle/airbattle", "api_req_combined_battle/battle", "api_req_combined_battle/battle_water", "api_req_combined_battle/sp_midnight", "api_req_combined_battle/ld_airbattle", "api_req_combined_battle/ec_battle", "api_req_combined_battle/each_battle", "api_req_combined_battle/each_battle_water", }; DisposableObjects.Add(ApiService.Subscribe(rFirstStages, ProcessBattle)); var rBattleResultApis = new[] { "api_req_sortie/battleresult", "api_req_combined_battle/battleresult", }; DisposableObjects.Add(ApiService.Subscribe(rBattleResultApis, ProcessBattleResult)); DisposableObjects.Add(ApiService.Subscribe("api_port/port", delegate { if (r_SunkShips.Count == 0) { return; } var rAliveShips = r_SunkShips.Intersect(KanColleGame.Current.Port.Ships.Values); DeleteShipFate(rAliveShips); r_SunkShips.Clear(); })); }
internal ConstructionRecords(SQLiteConnection rpConnection) : base(rpConnection) { DisposableObjects.Add(ConstructionDock.NewConstruction.Subscribe(InsertRecord)); }
internal ExpeditionRecords(SQLiteConnection rpConnection) : base(rpConnection) { DisposableObjects.Add(ApiService.Subscribe("api_req_mission/result", ProcessResult)); }