예제 #1
0
        public override void OnResponseReceived(dynamic data)
        {
            KCDatabase db = KCDatabase.Instance;

            int setid   = (int)data.api_ship_data.api_set_ship.api_id;
            int unsetid = (int)data.api_ship_data.api_unset_ship.api_id;

            // 念のため
            if (!db.Ships.ContainsKey(setid))
            {
                var a = new ShipData();
                a.LoadFromResponse(APIName, data.api_ship_data.api_set_ship);
                db.Ships.Add(a);
            }
            else
            {
                db.Ships[setid].LoadFromResponse(APIName, data.api_ship_data.api_set_ship);
            }


            if (!db.Ships.ContainsKey(unsetid))
            {
                var a = new ShipData();
                a.LoadFromResponse(APIName, data.api_ship_data.api_unset_ship);
                db.Ships.Add(a);
            }
            else
            {
                db.Ships[unsetid].LoadFromResponse(APIName, data.api_ship_data.api_unset_ship);
            }

            base.OnResponseReceived((object)data);
        }
예제 #2
0
        public override void OnRequestReceived(Dictionary <string, string> data)
        {
            KCDatabase db = KCDatabase.Instance;


            //todo: ここに処理を書くのはみょんな感があるので、可能なら移動する

            int shipID = int.Parse(data["api_ship_id"]);

            db.Fleet.LoadFromRequest(APIName, data);

            ShipData ship = db.Ships[shipID];

            Utility.Logger.Add(2, ship.NameWithLevel + " を解体しました。");

            for (int i = 0; i < ship.Slot.Count; i++)
            {
                if (ship.Slot[i] != -1)
                {
                    db.Equipments.Remove(ship.Slot[i]);
                }
            }

            db.Ships.Remove(shipID);


            base.OnRequestReceived(data);
        }
예제 #3
0
            //データ更新時
            public void Update(int dockID)
            {
                KCDatabase db = KCDatabase.Instance;

                DockData dock = db.Docks[dockID];

                ToolTipInfo.SetToolTip(ShipName, null);
                ToolTipInfo.SetToolTip(RepairTime, null);

                if (dock == null || dock.State == -1)
                {
                    //locked
                    ShipName.Text   = "";
                    RepairTime.Text = "";
                    RepairTime.Tag  = null;
                }
                else if (dock.State == 0)
                {
                    //empty
                    ShipName.Text   = "----";
                    RepairTime.Text = "";
                    RepairTime.Tag  = null;
                }
                else
                {
                    //repairing
                    ShipName.Text = db.Ships[dock.ShipID].Name;
                    ToolTipInfo.SetToolTip(ShipName, db.Ships[dock.ShipID].NameWithLevel);
                    RepairTime.Text = DateTimeHelper.ToTimeRemainString(dock.CompletionTime);
                    RepairTime.Tag  = dock.CompletionTime;
                    ToolTipInfo.SetToolTip(RepairTime, "完了日時 : " + dock.CompletionTime);
                }
            }
예제 #4
0
        public override void OnResponseReceived(dynamic data)
        {
            KCDatabase db = KCDatabase.Instance;

            //api_ship_data
            foreach (var elem in data.api_ship_data)
            {
                int id = (int)elem.api_id;

                ShipData ship = db.Ships[id];
                ship.LoadFromResponse(APIName, elem);

                for (int i = 0; i < ship.Slot.Count; i++)
                {
                    if (ship.Slot[i] == -1)
                    {
                        continue;
                    }
                    if (!db.Equipments.ContainsKey(ship.Slot[i]))
                    {                           //改装時に新装備を入手するが、追加される前にIDを与えられてしまうため
                        EquipmentData eq = new EquipmentData();
                        eq.LoadFromResponse(APIName, ship.Slot[i]);
                        db.Equipments.Add(eq);
                    }
                }
            }

            //api_deck_data
            db.Fleet.LoadFromResponse(APIName, data.api_deck_data);



            base.OnResponseReceived((object)data);
        }
예제 #5
0
            //データ更新時
            public void Update(int dockID)
            {
                KCDatabase db = KCDatabase.Instance;

                DockData dock = db.Docks[dockID];

                RepairTime.BackColor = Color.Transparent;
                RepairTime.ForeColor = Utility.Configuration.Config.UI.ForeColor;
                ToolTipInfo.SetToolTip(ShipName, null);
                ToolTipInfo.SetToolTip(RepairTime, null);

                if (dock == null || dock.State == -1)
                {
                    //locked
                    ShipName.Text   = "";
                    RepairTime.Text = "";
                    RepairTime.Tag  = null;
                }
                else if (dock.State == 0)
                {
                    //empty
                    ShipName.Text   = "----";
                    RepairTime.Text = "";
                    RepairTime.Tag  = null;
                }
                else
                {
                    //repairing
                    ShipName.Text = db.Ships[dock.ShipID].Name;
                    ToolTipInfo.SetToolTip(ShipName, db.Ships[dock.ShipID].NameWithLevel);
                    RepairTime.Text = DateTimeHelper.ToTimeRemainString(dock.CompletionTime);
                    RepairTime.Tag  = dock.CompletionTime;
                    ToolTipInfo.SetToolTip(RepairTime, GeneralRes.TimeToCompletion + ":" + DateTimeHelper.TimeToCSVString(dock.CompletionTime));
                }
            }
예제 #6
0
        public override void OnResponseReceived(dynamic data)
        {
            KCDatabase db = KCDatabase.Instance;

            foreach (var dock in data)
            {
                int id = (int)dock.api_id;

                if (!db.Docks.ContainsKey(id))
                {
                    var d = new DockData();
                    d.LoadFromResponse(APIName, dock);
                    db.Docks.Add(d);
                }
                else
                {
                    db.Docks[id].LoadFromResponse(APIName, dock);
                }
            }


            db.Fleet.LoadFromResponse(APIName, data);

            base.OnResponseReceived((object)data);
        }
예제 #7
0
        public override void OnRequestReceived(Dictionary <string, string> data)
        {
            KCDatabase db = KCDatabase.Instance;


            db.Fleet.LoadFromRequest(APIName, data);


            foreach (string id in data["api_id_items"].Split(",".ToCharArray()))
            {
                int shipID = int.Parse(id);


                ShipData ship = db.Ships[shipID];
                for (int i = 0; i < ship.Slot.Count; i++)
                {
                    if (ship.Slot[i] != -1)
                    {
                        db.Equipments.Remove(ship.Slot[i]);
                    }
                }

                Utility.Logger.Add(2, ship.NameWithLevel + LoggerRes.Decomissioned);
                db.Ships.Remove(shipID);
            }

            base.OnRequestReceived(data);
        }
예제 #8
0
        public override void OnRequestReceived(Dictionary <string, string> data)
        {
            KCDatabase db = KCDatabase.Instance;

            // 削除処理が終わってからだと装備データが取れないため
            db.QuestProgress.EquipmentDiscarded(APIName, data);

            Dictionary <string, int> itemsDestroyed = new Dictionary <string, int>();

            foreach (int id in data["api_slotitem_ids"].Split(",".ToCharArray()).Select(str => int.Parse(str)))
            {
                string name = KCDatabase.Instance.Equipments[id].NameWithLevel;
                itemsDestroyed.TryGetValue(name, out int amount);
                itemsDestroyed[name] = amount + 1;

                db.Equipments.Remove(id);
            }

            foreach (var item in itemsDestroyed)
            {
                Utility.Logger.Add(2, String.Format("{0}{1} を廃棄しました。", item.Key, item.Value > 1 ? " x " + item.Value : ""));
            }

            base.OnRequestReceived(data);
        }
예제 #9
0
        public override void OnResponseReceived(dynamic data)
        {
            KCDatabase db = KCDatabase.Instance;

            db.Material.LoadFromResponse(APIName, data.api_after_material);

            if (data.api_after_slot())                  //改修成功時のみ存在
            {
                EquipmentData eq = db.Equipments[(int)data.api_after_slot.api_id];
                if (eq != null)
                {
                    eq.LoadFromResponse(APIName, data.api_after_slot);
                }
            }

            if (data.api_use_slot_id())
            {
                foreach (int id in data.api_use_slot_id)
                {
                    db.Equipments.Remove(id);
                }
            }

            base.OnResponseReceived((object)data);
        }
예제 #10
0
        public override void OnRequestReceived(Dictionary <string, string> data)
        {
            KCDatabase db = KCDatabase.Instance;


            db.Fleet.LoadFromRequest(APIName, data);

            bool destroysEquipments = data.ContainsKey("api_slot_dest_flag") ? (data["api_slot_dest_flag"] != "0") : true;

            foreach (string id in data["api_id_items"].Split(",".ToCharArray()))
            {
                int shipID = int.Parse(id);

                ShipData ship = db.Ships[shipID];
                if (destroysEquipments)
                {
                    for (int i = 0; i < ship.Slot.Count; i++)
                    {
                        if (ship.Slot[i] != -1)
                        {
                            db.Equipments.Remove(ship.Slot[i]);
                        }
                    }
                }

                Utility.Logger.Add(2, ship.NameWithLevel + " を除籍しました。");
                db.Ships.Remove(shipID);
            }

            base.OnRequestReceived(data);
        }
예제 #11
0
        public override void OnRequestReceived(Dictionary <string, string> data)
        {
            KCDatabase db = KCDatabase.Instance;

            bool destroyEquipments = int.Parse(data["api_slot_dest_flag"]) == 1;
            var  shipIDs           = data["api_ship_id"].Split(',').Select(id => int.Parse(id));

            Dictionary <string, int> shipsToDestroy = new Dictionary <string, int>();

            foreach (int shipID in shipIDs)
            {
                string name = db.Ships[shipID].NameWithLevel;
                shipsToDestroy.TryGetValue(name, out int amount);
                shipsToDestroy[name] = amount + 1;

                db.Ships[shipID].LoadFromRequest(APIName, data);
            }

            db.Fleet.LoadFromRequest(APIName, data);

            var shipsDestroyed = new List <string>();

            foreach (var ship in shipsToDestroy)
            {
                shipsDestroyed.Add(String.Format("{0}{1}", ship.Key, ship.Value > 1 ? " x " + ship.Value : ""));
            }
            Utility.Logger.Add(2, "", "已解体 : ", String.Join(" , ", shipsDestroyed), destroyEquipments ? " ( 废弃装备 )" : " ( 保留装备 )");

            base.OnRequestReceived(data);
        }
        public override int[] EmulateBattle()
        {
            int[] hp = new int[12];

            KCDatabase        db = KCDatabase.Instance;
            Action <int, int> DealDamageFriend = (int index, int damage) => {
                //if ( hp[index] == -1 ) return;
                hp[index] -= Math.Max(damage, 0);

                //ダメコンは発動しない。
            };

            Action <int, int> DealDamageEnemy = (int index, int damage) => {
                //if ( hp[index + 6] == -1 ) return;
                hp[index + 6] -= Math.Max(damage, 0);
            };


            for (int i = 0; i < 12; i++)
            {
                hp[i] = (int)RawData.api_nowhps[i + 1];
            }


            //夜間砲撃戦
            {
                dynamic hougeki = RawData.api_hougeki;

                int[] damageList = new int[12];
                int   leni       = ((int[])hougeki.api_at_list).Length;

                for (int i = 1; i < leni; i++)
                {
                    for (int j = 0; j < damageList.Length; j++)
                    {
                        damageList[j] = 0;
                    }

                    int lenj = ((int[])hougeki.api_df_list[i]).Length;
                    for (int j = 0; j < lenj; j++)
                    {
                        int target = (int)hougeki.api_df_list[i][j];
                        if (target != -1)
                        {
                            damageList[target - 1] += (int)hougeki.api_damage[i][j];
                        }
                    }

                    for (int j = 0; j < 6; j++)
                    {
                        DealDamageFriend(j, damageList[j]);
                        DealDamageEnemy(j, damageList[j + 6]);
                    }
                }
            }

            return(hp);
        }
예제 #13
0
            public void Update(FleetData fleet)
            {
                KCDatabase db = KCDatabase.Instance;

                if (fleet == null)
                {
                    return;
                }



                Name.Text = fleet.Name;
                {
                    int levelSum  = fleet.MembersInstance.Sum(s => s != null ? s.Level : 0);
                    int fueltotal = fleet.MembersInstance.Sum(s => s == null ? 0 : (int)(s.MasterShip.Fuel * (s.IsMarried ? 0.85 : 1.00)));
                    int ammototal = fleet.MembersInstance.Sum(s => s == null ? 0 : (int)(s.MasterShip.Ammo * (s.IsMarried ? 0.85 : 1.00)));
                    int speed     = fleet.MembersWithoutEscaped.Min(s => s == null ? 10 : s.MasterShip.Speed);
                    ToolTipInfo.SetToolTip(Name, string.Format(
                                               GeneralRes.FleetTooltip,
                                               levelSum,
                                               (double)levelSum / Math.Max(fleet.Members.Count(id => id != -1), 1),
                                               Constants.GetSpeed(speed),
                                               fleet.MembersInstance.Sum(s => s == null ? 0 : s.SlotInstanceMaster.Count(q => q == null ? false : q.CategoryType == 30)),
                                               fleet.MembersInstance.Count(s => s == null ? false : s.SlotInstanceMaster.Count(q => q == null ? false : q.CategoryType == 30) > 0),
                                               fleet.MembersInstance.Sum(s => s == null ? 0 : s.SlotInstanceMaster.Count(q => q == null ? false : q.CategoryType == 24)),
                                               fueltotal,
                                               ammototal,
                                               (int)(fueltotal * 0.2),
                                               (int)(ammototal * 0.2)
                                               ));
                }


                State = FleetData.UpdateFleetState(fleet, StateMain, ToolTipInfo, State, ref Timer);


                //制空戦力計算
                {
                    int airSuperiority = fleet.GetAirSuperiority();
                    AirSuperiority.Text = airSuperiority.ToString();
                    ToolTipInfo.SetToolTip(AirSuperiority,
                                           string.Format(GeneralRes.ASTooltip,
                                                         (int)(airSuperiority / 3.0),
                                                         (int)(airSuperiority / 1.5),
                                                         (int)(airSuperiority * 1.5),
                                                         (int)(airSuperiority * 3.0)));
                }


                //索敵能力計算
                SearchingAbility.Text = fleet.GetSearchingAbilityString();
                ToolTipInfo.SetToolTip(SearchingAbility,
                                       string.Format(GeneralRes.LoSTooltip,
                                                     fleet.GetSearchingAbilityString(0),
                                                     fleet.GetSearchingAbilityString(1),
                                                     fleet.GetSearchingAbilityString(2)));
            }
예제 #14
0
            public void Update(FleetData fleet)
            {
                KCDatabase db = KCDatabase.Instance;

                if (fleet == null)
                {
                    return;
                }



                Name.Text = fleet.Name;
                {
                    int levelSum  = fleet.MembersInstance.Sum(s => s != null ? s.Level : 0);
                    int fueltotal = fleet.MembersInstance.Sum(s => s == null ? 0 : (int)(s.MasterShip.Fuel * (s.IsMarried ? 0.85 : 1.00)));
                    int ammototal = fleet.MembersInstance.Sum(s => s == null ? 0 : (int)(s.MasterShip.Ammo * (s.IsMarried ? 0.85 : 1.00)));
                    int speed     = fleet.MembersWithoutEscaped.Min(s => s == null ? 10 : s.MasterShip.Speed);
                    ToolTipInfo.SetToolTip(Name, string.Format(
                                               "Lv合計: {0} / 平均: {1:0.00}\r\n{2}艦隊\r\nドラム缶搭載: {3}個 ({4}艦)\r\n大発動艇搭載: {5}個\r\n総積載: 燃 {6} / 弾 {7}\r\n(1戦当たり 燃 {8} / 弾 {9})",
                                               levelSum,
                                               (double)levelSum / Math.Max(fleet.Members.Count(id => id != -1), 1),
                                               Constants.GetSpeed(speed),
                                               fleet.MembersInstance.Sum(s => s == null ? 0 : s.SlotInstanceMaster.Count(q => q == null ? false : q.CategoryType == 30)),
                                               fleet.MembersInstance.Count(s => s == null ? false : s.SlotInstanceMaster.Count(q => q == null ? false : q.CategoryType == 30) > 0),
                                               fleet.MembersInstance.Sum(s => s == null ? 0 : s.SlotInstanceMaster.Count(q => q == null ? false : q.CategoryType == 24)),
                                               fueltotal,
                                               ammototal,
                                               (int)(fueltotal * 0.2),
                                               (int)(ammototal * 0.2)
                                               ));
                }


                State = FleetData.UpdateFleetState(fleet, StateMain, ToolTipInfo, State, ref Timer);


                //制空戦力計算
                {
                    int airSuperiority = fleet.GetAirSuperiority();
                    AirSuperiority.Text = airSuperiority.ToString();
                    ToolTipInfo.SetToolTip(AirSuperiority,
                                           string.Format("確保: {0}\r\n優勢: {1}\r\n均衡: {2}\r\n劣勢: {3}\r\n",
                                                         (int)(airSuperiority / 3.0),
                                                         (int)(airSuperiority / 1.5),
                                                         (int)(airSuperiority * 1.5),
                                                         (int)(airSuperiority * 3.0)));
                }


                //索敵能力計算
                SearchingAbility.Text = fleet.GetSearchingAbilityString();
                ToolTipInfo.SetToolTip(SearchingAbility,
                                       string.Format("(旧)2-5式: {0}\r\n2-5式(秋): {1}\r\n2-5新秋簡易式: {2}\r\n",
                                                     fleet.GetSearchingAbilityString(0),
                                                     fleet.GetSearchingAbilityString(1),
                                                     fleet.GetSearchingAbilityString(2)));
            }
        void Updated(string apiname, dynamic data)
        {
            if (IsRemodeling)
            {
                if (apiname == "api_get_member/slot_item")
                {
                    IsRemodeling = false;
                }
                else
                {
                    return;
                }
            }
            if (apiname == "api_req_kaisou/remodeling")
            {
                IsRemodeling = true;
                return;
            }

            KCDatabase db = KCDatabase.Instance;

            if (db.Ships.Count == 0)
            {
                return;
            }

            FleetData fleet = db.Fleet.Fleets[FleetID];

            if (fleet == null)
            {
                return;
            }

            TableFleet.SuspendLayout();
            ControlFleet.Update(fleet);
            TableFleet.Visible = true;
            TableFleet.ResumeLayout();

            TableMember.SuspendLayout();
            for (int i = 0; i < ControlMember.Length; i++)
            {
                ControlMember[i].Update(fleet.Members[i]);
            }
            TableMember.ResumeLayout();


            if (Icon != null)
            {
                ResourceManager.DestroyIcon(Icon);
            }
            Icon = ResourceManager.ImageToIcon(ControlFleet.StateMain.Image);
            if (Parent != null)
            {
                Parent.Refresh();                                       //アイコンを更新するため
            }
        }
예제 #16
0
 public ApiStart2Module(string loginId, string password, int fetchTime = 60000) : base(fetchTime)
 {
     m_loginId          = loginId;
     m_password         = password;
     m_forceUpdateToken = false;
     m_exportPath       = Path.Combine(Directory.GetCurrentDirectory(), MODULE_PATH);
     Directory.CreateDirectory(m_exportPath);
     m_kcdbRef = KCDatabase.Instance;
     Utils.Log("ApiStart2Module has been initialized. Checking time interval is " + (fetchTime / 1000) + "s.", "ApiStart2Module", ConsoleColor.Green);
 }
예제 #17
0
        public override void OnRequestReceived(Dictionary <string, string> data)
        {
            KCDatabase db = KCDatabase.Instance;

            foreach (string id in data["api_slotitem_ids"].Split(",".ToCharArray()))
            {
                db.Equipments.Remove(int.Parse(id));
            }

            base.OnRequestReceived(data);
        }
예제 #18
0
        public override void OnRequestReceived(Dictionary <string, string> data)
        {
            KCDatabase db = KCDatabase.Instance;

            db.Docks[int.Parse(data["api_ndock_id"])].LoadFromResponse(APIName, data);
            db.Material.InstantRepair--;


            db.Fleet.LoadFromRequest(APIName, data);

            base.OnRequestReceived(data);
        }
        public override void OnRequestReceived(Dictionary <string, string> data)
        {
            KCDatabase db = KCDatabase.Instance;

            ArsenalData arsenal = db.Arsenals[int.Parse(data["api_kdock_id"])];

            arsenal.State = 3;
            db.Material.InstantConstruction -= arsenal.Fuel >= 1000 ? 10 : 1;


            base.OnRequestReceived(data);
        }
예제 #20
0
        /// <summary>
        /// 索敵能力を求めます。「2-5式」です。
        /// </summary>
        /// <param name="fleet">対象の艦隊。</param>
        public static int GetSearchingAbility_Old(FleetData fleet)
        {
            KCDatabase db = KCDatabase.Instance;

            int los_reconplane = 0;
            int los_radar      = 0;
            int los_other      = 0;

            foreach (var ship in fleet.MembersWithoutEscaped)
            {
                if (ship == null)
                {
                    continue;
                }

                los_other += ship.LOSBase;

                var slot = ship.SlotInstanceMaster;

                for (int j = 0; j < slot.Count; j++)
                {
                    if (slot[j] == null)
                    {
                        continue;
                    }

                    switch (slot[j].EquipmentType[2])
                    {
                    case 9:                                     //艦偵
                    case 10:                                    //水偵
                    case 11:                                    //水爆
                        if (ship.Aircraft[j] > 0)
                        {
                            los_reconplane += slot[j].LOS * 2;
                        }
                        break;

                    case 12:                                    //小型電探
                    case 13:                                    //大型電探
                        los_radar += slot[j].LOS;
                        break;

                    default:
                        los_other += slot[j].LOS;
                        break;
                    }
                }
            }


            return((int)Math.Sqrt(los_other) + los_radar + los_reconplane);
        }
예제 #21
0
        public override void OnRequestReceived(Dictionary <string, string> data)
        {
            KCDatabase db = KCDatabase.Instance;

            foreach (string sid in data["api_slotitem_ids"].Split(",".ToCharArray()))
            {
                int id = int.Parse(sid);
                Utility.Logger.Add(2, KCDatabase.Instance.Equipments[id].NameWithLevel + " を廃棄しました。");
                db.Equipments.Remove(id);
            }

            base.OnRequestReceived(data);
        }
예제 #22
0
        public override void OnResponseReceived(dynamic data)
        {
            KCDatabase db = KCDatabase.Instance;

            // Admiral - 各所でバグるので封印
            //db.Admiral.LoadFromResponse( APIName, data.api_basic );


            // Equipments
            db.Equipments.Clear();
            foreach (var elem in data.api_slot_item)
            {
                var eq = new EquipmentData();
                eq.LoadFromResponse(APIName, elem);
                db.Equipments.Add(eq);
            }


            // Arsenal
            foreach (var ars in data.api_kdock)
            {
                int id = (int)ars.api_id;

                if (!db.Arsenals.ContainsKey(id))
                {
                    var a = new ArsenalData();
                    a.LoadFromResponse(APIName, ars);
                    db.Arsenals.Add(a);
                }
                else
                {
                    db.Arsenals[id].LoadFromResponse(APIName, ars);
                }
            }


            // UseItem
            db.UseItems.Clear();
            if (data.api_useitem())
            {
                foreach (var elem in data.api_useitem)
                {
                    var item = new UseItem();
                    item.LoadFromResponse(APIName, elem);
                    db.UseItems.Add(item);
                }
            }

            base.OnResponseReceived((object)data);
        }
예제 #23
0
        public override void OnResponseReceived(dynamic data)
        {
            KCDatabase db = KCDatabase.Instance;

            db.UseItems.Clear();
            foreach (var elem in data)
            {
                var item = new UseItem();
                item.LoadFromResponse(APIName, elem);
                db.UseItems.Add(item);
            }

            base.OnResponseReceived((object)data);
        }
예제 #24
0
		public override void OnResponseReceived(dynamic data)
		{

			KCDatabase db = KCDatabase.Instance;

			//api_kdock
			foreach (var ars in data.api_kdock)
			{

				int id = (int)ars.api_id;

				if (!db.Arsenals.ContainsKey(id))
				{
					var a = new ArsenalData();
					a.LoadFromResponse(APIName, ars);
					db.Arsenals.Add(a);

				}
				else
				{
					db.Arsenals[id].LoadFromResponse(APIName, ars);
				}
			}

			//api_slotitem
			if (data.api_slotitem != null)
			{               //装備なしの艦はnullになる
				foreach (var elem in data.api_slotitem)
				{

					var eq = new EquipmentData();
					eq.LoadFromResponse(APIName, elem);
					db.Equipments.Add(eq);

				}
			}

			//api_ship
			{
				ShipData ship = new ShipData();
				ship.LoadFromResponse(APIName, data.api_ship);
				db.Ships.Add(ship);

				Utility.Logger.Add(2, string.Format("{0}「{1}」の建造が完了しました。", ship.MasterShip.ShipTypeName, ship.MasterShip.NameWithClass));
			}


			base.OnResponseReceived((object)data);
		}
예제 #25
0
        public override void OnResponseReceived(dynamic data)
        {
            KCDatabase db = KCDatabase.Instance;


            //api_ship
            foreach (var elem in data.api_ship)
            {
                int      shipID = (int)elem.api_id;
                ShipData ship   = db.Ships[shipID];

                ship.LoadFromResponse(APIName, elem);
            }


            int[] material = new int[] {
                db.Material.Fuel,
                db.Material.Ammo,
                db.Material.Steel,
                db.Material.Bauxite,
            };

            //api_material
            db.Material.LoadFromResponse(APIName, data.api_material);

            material[0] -= db.Material.Fuel;
            material[1] -= db.Material.Ammo;
            material[2] -= db.Material.Steel;
            material[3] -= db.Material.Bauxite;

            {
                var sb = new StringBuilder("補給を行いました。消費: ");

                for (int i = 0; i < 4; i++)
                {
                    if (material[i] > 0)
                    {
                        sb.Append(Constants.GetMaterialName(i + 1)).Append("x").Append(material[i]).Append(", ");
                    }
                }


                sb.Remove(sb.Length - 2, 2);
                Utility.Logger.Add(2, sb.ToString());
            }


            base.OnResponseReceived((object)data);
        }
예제 #26
0
        public override void OnResponseReceived(dynamic data)
        {
            KCDatabase db = KCDatabase.Instance;

            {
                int id = (int)data.api_ship.api_id;

                db.Ships[id].LoadFromResponse(APIName, data.api_ship);
            }

            db.Fleet.LoadFromResponse(APIName, data.api_deck);


            base.OnResponseReceived((object)data);
        }
예제 #27
0
        public override void OnResponseReceived(dynamic data)
        {
            KCDatabase db = KCDatabase.Instance;


            db.Equipments.Clear();
            foreach (var elem in data)
            {
                var eq = new EquipmentData();
                eq.LoadFromResponse(APIName, elem);
                db.Equipments.Add(eq);
            }

            base.OnResponseReceived((object)data);
        }
예제 #28
0
        public override void OnResponseReceived(dynamic data)
        {
            KCDatabase db = KCDatabase.Instance;


            //api_material
            db.Material.LoadFromResponse(APIName, data.api_material);

            //api_basic
            db.Admiral.LoadFromResponse(APIName, data.api_basic);

            //api_ship
            //ちょっと遅くなるかもだけど、齟齬(幽霊とかドッペルゲンガーとか)の発生を防ぐため全入れ替え
            db.Ships.Clear();
            foreach (var elem in data.api_ship)
            {
                var a = new ShipData();
                a.LoadFromResponse(APIName, elem);
                db.Ships.Add(a);
            }


            //api_ndock
            foreach (var elem in data.api_ndock)
            {
                int id = (int)elem.api_id;

                if (!db.Docks.ContainsKey(id))
                {
                    var a = new DockData();
                    a.LoadFromResponse(APIName, elem);
                    db.Docks.Add(a);
                }
                else
                {
                    db.Docks[id].LoadFromResponse(APIName, elem);
                }
            }

            //api_deck_port
            db.Fleet.LoadFromResponse(APIName, data.api_deck_port);
            db.Fleet.CombinedFlag = data.api_combined_flag() ? (int)data.api_combined_flag : 0;


            db.Battle.LoadFromResponse(APIName, data);

            base.OnResponseReceived((object)data);
        }
예제 #29
0
        public override void OnRequestReceived(Dictionary <string, string> data)
        {
            KCDatabase db = KCDatabase.Instance;

            DockData dock       = db.Docks[int.Parse(data["api_ndock_id"])];
            bool     bucketUsed = data["api_highspeed"] == "1";

            int      shipID = int.Parse(data["api_ship_id"]);
            ShipData ship   = db.Ships[shipID];


            Utility.Logger.Add(2, string.Format("入渠ドック #{0}で {1} ({2}/{3}) の修復を開始しました。(燃料x{4}, 鋼材x{5}, {6})",
                                                dock.DockID, ship.NameWithLevel,
                                                ship.HPCurrent, ship.HPMax,
                                                ship.RepairFuel, ship.RepairSteel,
                                                bucketUsed ? "高速修復材x1" : ("修理完了予定: " + DateTimeHelper.TimeToCSVString(DateTime.Now + TimeSpan.FromMilliseconds(ship.RepairTime)))
                                                ));


            db.Material.Fuel  -= ship.RepairFuel;
            db.Material.Steel -= ship.RepairSteel;


            if (bucketUsed)
            {
                ship.Repair();
                db.Material.InstantRepair--;
            }
            else if (ship.RepairTime <= 60000)
            {
                ship.Repair();
            }
            else
            {
                //この場合は直後に ndock が呼ばれるので自力で更新しなくてもよい

                /*
                 * dock.State = 1;
                 * dock.ShipID = shipID;
                 * dock.CompletionTime = DateTime.Now.AddMilliseconds( ship.RepairTime );
                 */
            }


            db.Fleet.LoadFromRequest(APIName, data);

            base.OnRequestReceived(data);
        }
예제 #30
0
        //materialデータはresponseで返ってくるので、requestで読む必要があるのはログをとるときぐらい

        public override void OnResponseReceived(dynamic data)
        {
            KCDatabase db = KCDatabase.Instance;

            //装備の追加 データが不十分のため、自力で構築しなければならない
            if ((int)data.api_create_flag != 0)
            {
                var eq = new EquipmentData();
                eq.LoadFromResponse(APIName, data.api_slot_item);
                db.Equipments.Add(eq);
            }

            db.Material.LoadFromResponse(APIName, data.api_material);

            base.OnResponseReceived((object)data);
        }