Ejemplo n.º 1
0
        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)));
        }
Ejemplo n.º 3
0
        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();
                }
            }));
        }
Ejemplo n.º 5
0
        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)));
        }
Ejemplo n.º 6
0
        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;
        }
Ejemplo n.º 7
0
        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)));
        }
Ejemplo n.º 8
0
        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));
        }
Ejemplo n.º 9
0
        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)));
        }
Ejemplo n.º 10
0
        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();
                    }
            }));
        }
Ejemplo n.º 13
0
        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();
            }));
        }
Ejemplo n.º 14
0
        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));
        }
Ejemplo n.º 15
0
        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);
                }
            }));
        }
Ejemplo n.º 16
0
        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"]))));
 }
Ejemplo n.º 18
0
        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();
            }));
        }
Ejemplo n.º 19
0
 internal ConstructionRecords(SQLiteConnection rpConnection) : base(rpConnection)
 {
     DisposableObjects.Add(ConstructionDock.NewConstruction.Subscribe(InsertRecord));
 }
Ejemplo n.º 20
0
 internal ExpeditionRecords(SQLiteConnection rpConnection) : base(rpConnection)
 {
     DisposableObjects.Add(ApiService.Subscribe("api_req_mission/result", ProcessResult));
 }