示例#1
0
        public void NightBattle(sortie_battle api)
        {
            if (api.api_friendly_info != null)
            {
                var friend = api.api_friendly_info;
                FriendFleet = friend.api_ship_id
                              .Select((x, i) => new ShipInBattle
                {
                    Index      = i + 1,
                    ShipInfo   = Staff.Current.MasterData.ShipInfo[x],
                    Level      = friend.api_ship_lv[i],
                    Equipments = friend.api_Slot[i].Select(y => Staff.Current.MasterData.EquipInfo[y]).Where(y => y != null).Select(y => new EquipInBattle(y)).ToArray(),
                    Firepower  = friend.api_Param[i][0],
                    Torpedo    = friend.api_Param[i][1],
                    AA         = friend.api_Param[i][2],
                    Armor      = friend.api_Param[i][3]
                }).ToArray();
                SetHPs(FriendFleet, friend.api_nowhps, friend.api_maxhps);
                var fleet1 = Fleet1;
                Fleet1      = FriendFleet;
                FriendNight = new NightCombat(this, api.api_friendly_battle, FriendFleet, AllEnemies.ToArray());
                Fleet1      = fleet1;
            }

            if (api.api_active_deck != null)
            {
                Night = new NightCombat(this, api, NightOrTorpedo, api.api_active_deck[1] == 1 ? EnemyFleet : EnemyFleet2);
            }
            else
            {
                Night = new NightCombat(this, api, NightOrTorpedo, EnemyFleet);
            }
            EndApplyBattle();
        }
示例#2
0
        private void Update(sortie_battle data)
        {
            this.Name = "通常 - 昼戦";

            this.UpdateShipData(data.api_dock_id.ToString(), data.api_ship_ke, false);
            this.UpdateMaxHP(data.api_maxhps);
            this.UpdateNowHP(data.api_nowhps);

            this.FirstFleet.CalcDamages(
                data.api_kouku.GetFirstFleetDamages(),
                data.api_opening_atack.GetFriendDamages(),
                data.api_hougeki1.GetFriendDamages(),
                data.api_hougeki2.GetFriendDamages(),
                data.api_raigeki.GetFriendDamages()
                );

            this.Enemies.CalcDamages(
                data.api_support_info.GetEnemyDamages(),
                data.api_kouku.GetEnemyDamages(),
                data.api_opening_atack.GetEnemyDamages(),
                data.api_hougeki1.GetEnemyDamages(),
                data.api_hougeki2.GetEnemyDamages(),
                data.api_raigeki.GetEnemyDamages()
                );
        }
示例#3
0
        private void Update(sortie_battle data)
        {
            this.Name = "通常 - 昼戦";

            this.UpdateFleets(data.api_dock_id, data.api_ship_ke, data.api_formation, data.api_eSlot, data.api_eKyouka, data.api_eParam, data.api_ship_lv);
            this.UpdateMaxHP(data.api_maxhps);
            this.UpdateNowHP(data.api_nowhps);

            this.PreUpdateBattleRank();

            this.FirstFleet.CalcDamages(
                data.api_kouku.GetFirstFleetDamages(),
                data.api_opening_atack.GetFriendDamages(),
                data.api_hougeki1.GetFriendDamages(),
                data.api_hougeki2.GetFriendDamages(),
                data.api_raigeki.GetFriendDamages()
                );

            this.Enemies.CalcDamages(
                data.api_support_info.GetEnemyDamages(),
                data.api_kouku.GetEnemyDamages(),
                data.api_opening_atack.GetEnemyDamages(),
                data.api_hougeki1.GetEnemyDamages(),
                data.api_hougeki2.GetEnemyDamages(),
                data.api_raigeki.GetEnemyDamages()
                );

            this.UpdateBattleRank();

            this.FriendAirSupremacy = data.api_kouku.GetAirSupremacy();

            this.provider.UpdateBattleTypes(data);
        }
示例#4
0
        private void Update(sortie_battle data)
        {
            this.Name = "通常 - 昼戦";

            this.UpdateFleets(data.api_dock_id, data, data.api_formation);
            this.UpdateMaxHP(data.api_maxhps);
            this.UpdateNowHP(data.api_nowhps);

            this.FirstFleet.CalcDamages(
                data.api_kouku.GetFirstFleetDamages(),
                data.api_opening_atack.GetFriendDamages(),
                data.api_hougeki1.GetFriendDamages(),
                data.api_hougeki2.GetFriendDamages(),
                data.api_raigeki.GetFriendDamages()
                );

            this.Enemies.CalcDamages(
                data.api_support_info.GetEnemyDamages(),
                data.api_kouku.GetEnemyDamages(),
                data.api_opening_atack.GetEnemyDamages(),
                data.api_hougeki1.GetEnemyDamages(),
                data.api_hougeki2.GetEnemyDamages(),
                data.api_raigeki.GetEnemyDamages()
                );

            this.FriendAirSupremacy = data.api_kouku.GetAirSupremacy();

            this.AirCombatResults = data.api_kouku.ToResult();
        }
示例#5
0
 public NightCombat(sortie_battle api, ShipInBattle[] friends, ShipInBattle[] enemies)
     : base(api.api_hougeki, friends, enemies)
 {
     if (api.api_touch_plane != null)
     {
         FriendTouch = Staff.Current.MasterData.EquipInfo[api.api_touch_plane[0]];
         EnemyTouch  = Staff.Current.MasterData.EquipInfo[api.api_touch_plane[1]];
     }
     if (api.api_flare_pos != null)
     {
         int pos = api.api_flare_pos[0];
         if (pos >= 1 && pos <= 6)
         {
             FriendFlare = friends[pos - 1];
         }
         pos = api.api_flare_pos[1];
         if (pos >= 1 && pos <= 6)
         {
             EnemyFlare = enemies[pos - 1];
         }
     }
     foreach (var ship in friends)
     {
         if (FriendLight != null)
         {
             break;
         }
         if (ship.IsEscaped)
         {
             continue;
         }
         foreach (var equip in ship.Equipments)
         {
             int id = equip.EquipInfo.EquipType.Id;
             if (id == 29 || id == 42)
             {
                 FriendLight = ship;
                 break;
             }
         }
     }
     foreach (var ship in enemies)
     {
         if (EnemyLight != null)
         {
             break;
         }
         foreach (var equip in ship.Equipments)
         {
             int id = equip.EquipInfo.EquipType.Id;
             if (id == 29 || id == 42)
             {
                 EnemyLight = ship;
                 break;
             }
         }
     }
 }
 private void Update(sortie_battle data)
 {
     this.provider.UpdateEnemyData(
         data.api_ship_ke,
         data.api_formation,
         data.api_eSlot,
         data.api_eKyouka,
         data.api_eParam,
         data.api_ship_lv,
         data.api_maxhps);
     this.provider.UpdateBattleTypes(data);
 }
示例#7
0
 public void NightBattle(sortie_battle api)
 {
     if (api.api_active_deck != null)
     {
         Night = new NightCombat(api, NightOrTorpedo, api.api_active_deck[1] == 1 ? EnemyFleet : EnemyFleet2);
     }
     else
     {
         Night = new NightCombat(api, NightOrTorpedo, EnemyFleet);
     }
     EndApplyBattle();
 }
示例#8
0
 public void Update(sortie_battle data, bool isCombined = false)
 {
     this.Update(new CommonBattleData
     {
         api_injection_kouku = data.api_injection_kouku,
         api_kouku           = data.api_kouku,
         api_opening_taisen  = data.api_opening_taisen,
         api_opening_atack   = data.api_opening_atack,
         api_hougeki1        = data.api_hougeki1,
         api_hougeki2        = data.api_hougeki2,
         api_hougeki3        = data.api_hougeki3,
         api_raigeki         = data.api_raigeki
     }, isCombined);
 }
示例#9
0
        private void Battle(sortie_battle data)
        {
            ResetEnemy(data.api_ship_ke);

            UpdateEnemyMaxHP(data.api_maxhps);
            UpdateEnemyNowHP(data.api_nowhps);

            CalcEnemyDamages(
                data.api_support_info.GetEnemyDamages(),
                data.api_kouku.GetEnemyDamages(),
                data.api_opening_atack.GetEnemyDamages(),
                data.api_hougeki1.GetEnemyDamages(),
                data.api_hougeki2.GetEnemyDamages(),
                data.api_raigeki.GetEnemyDamages()
                );
        }
示例#10
0
 public void NightBattle(sortie_battle api)
 {
     if (api.api_active_deck != null)
     {
         if (api.api_active_deck[1] == 1)
         {
             FireAttack(api.api_hougeki, NightOrTorpedo, EnemyFleet);
         }
         else
         {
             FireAttack(api.api_hougeki, NightOrTorpedo, EnemyFleet2);
         }
     }
     else
     {
         FireAttack(api.api_hougeki, NightOrTorpedo);
     }
     EndApplyBattle();
 }
示例#11
0
 private void StartBattle(sortie_battle api)
 {
     ShipInBattle[] fleet1, fleet2;
     fleet1 = (SortieFleet1?.Ships ?? Staff.Current.Homeport.Fleets[api.api_deck_id + api.api_dock_id].Ships)
              .Select((x, i) => new ShipInBattle(x)
     {
         Index = i + 1
     }).ToArray();
     fleet2 = SortieFleet2?.Ships
              .Select((x, i) => new ShipInBattle(x)
     {
         Index = i + 7
     }).ToArray();
     if (SortieFleet1 == null)//演习
     {
         Staff.Current.Homeport.Fleets[api.api_deck_id + api.api_dock_id].Ships.ForEach(x => x.IgnoreNextCondition());
     }
     CurrentBattle = new Battle(api, CurrentFleetType ?? CombinedFleetType.None, CurrentNode?.Type ?? MapNodeType.Battle, fleet1, fleet2);
 }
示例#12
0
        private void Update(sortie_battle data)
        {
            this.Update(() =>
            {
                this.UpdateInfo(data);

                this.AirBaseAttack(data.api_air_base_attack);
                this.AirCombat(data.api_kouku);
                this.Support(data.api_support_info);

                this.Shelling(data.api_opening_taisen);
                this.Torpedo(data.api_opening_atack);

                this.Shelling(data.api_hougeki1);
                this.Shelling(data.api_hougeki2);

                this.Torpedo(data.api_raigeki);
            }, "通常 - 昼戦");
        }
示例#13
0
 private void NightBattle(sortie_battle api) =>
 (CurrentBattle as Battle).NightBattle(api);
示例#14
0
 private void StartBattle(sortie_battle api) =>
 CurrentBattle = new Battle(api, CurrentFleetType ?? CombinedFleetType.None, CurrentNode?.Type ?? MapNodeType.Battle, this);
示例#15
0
        public Battle(sortie_battle api, CombinedFleetType fleettype, MapNodeType battletype, ShipInBattle[] fleet1, ShipInBattle[] fleet2)
        {
            FleetType  = fleettype;
            BattleType = battletype;
            Fleet1     = fleet1;
            Fleet2     = fleet2;

            bool isEnemyCombined = battletype == MapNodeType.Combined || battletype == MapNodeType.CombinedBOSS;

            if (api.api_formation != null)
            {
                FriendFormation = (Formation)api.api_formation[0];
                EnemyFormation  = (Formation)api.api_formation[1];
                Direction       = (Direction)api.api_formation[2];
            }
            if (api.api_search != null)
            {
                FriendSearching = api.api_search[0];
                EnemySearching  = api.api_search[1];
            }

            EnemyFleet = api.api_ship_ke
                         .Select((x, i) => new ShipInBattle
            {
                Index      = i + 1,
                IsEnemy    = true,
                ShipInfo   = Staff.Current.MasterData.ShipInfo[x],
                Level      = api.api_ship_lv[i],
                Equipments = api.api_eSlot[i].Select(y => Staff.Current.MasterData.EquipInfo[y]).Where(y => y != null).Select(y => new EquipInBattle(y)).ToArray(),
                Firepower  = api.api_eParam[i][0],
                Torpedo    = api.api_eParam[i][1],
                AA         = api.api_eParam[i][2],
                Armor      = api.api_eParam[i][3]
            })
                         .ToArray();
            EnemyFleet2 = api.api_ship_ke_combined?
                          .Select((x, i) => new ShipInBattle
            {
                Index      = i + 7,
                IsEnemy    = true,
                ShipInfo   = Staff.Current.MasterData.ShipInfo[x],
                Level      = api.api_ship_lv_combined[i],
                Equipments = api.api_eSlot_combined[i].Select(y => Staff.Current.MasterData.EquipInfo[y]).Where(y => y != null).Select(y => new EquipInBattle(y)).ToArray(),
                Firepower  = api.api_eParam_combined[i][0],
                Torpedo    = api.api_eParam_combined[i][1],
                AA         = api.api_eParam_combined[i][2],
                Armor      = api.api_eParam_combined[i][3]
            })
                          .ToArray();

            EnemyShipIds = api.api_ship_ke.ConcatNotNull(api.api_ship_ke_combined).ToArray();

            SetHPs(Fleet1, api.api_f_nowhps, api.api_f_maxhps);
            SetHPs(EnemyFleet, api.api_e_nowhps, api.api_e_maxhps);
            SetHPs(Fleet2, api.api_f_nowhps_combined, api.api_f_maxhps_combined);
            SetHPs(EnemyFleet2, api.api_e_nowhps_combined, api.api_e_maxhps_combined);

            api.api_escape_idx?.ForEach(x => Fleet1[x - 1].IsEscaped          = true);
            api.api_escape_idx_combined?.ForEach(x => Fleet2[x - 1].IsEscaped = true);

            if (api.api_n_support_info != null)
            {
                Support = new SupportAttack(this, api.api_n_support_info, api.api_n_support_flag);
            }
            if (api.api_n_hougeki1 != null)
            {
                NightToDay1 = new FireCombat(this, api.api_n_hougeki1);
            }
            if (api.api_n_hougeki2 != null)
            {
                NightToDay2 = new FireCombat(this, api.api_n_hougeki2);
            }
            if (api.api_air_base_injection != null)
            {
                AirBaseJet = new JetPlaneAttack(this, api.api_air_base_injection, true);
            }
            if (api.api_injection_kouku != null)
            {
                Jet = new JetPlaneAttack(this, api.api_injection_kouku, false);
            }
            if (api.api_air_base_attack != null)
            {
                AirBaseAttacks = api.api_air_base_attack.Select(x => new AirBaseAttack(this, x)).ToArray();
            }
            if (api.api_kouku != null)
            {
                AirCombat1 = new AerialCombat(this, api.api_kouku);
            }
            if (api.api_kouku2 != null)
            {
                AirCombat2 = new AerialCombat(this, api.api_kouku2);
            }
            if (api.api_support_flag != 0)
            {
                Support = new SupportAttack(this, api.api_support_info, api.api_support_flag);
            }
            if (api.api_opening_taisen != null)
            {
                OpeningASW = new FireCombat(this, api.api_opening_taisen);
            }
            if (api.api_opening_atack != null)
            {
                OpeningTorpedo = new TorpedoCombat(this, api.api_opening_atack);
            }
            if (isEnemyCombined)
            {
                switch (fleettype)
                {
                case CombinedFleetType.None:
                    if (api.api_hougeki1 != null)
                    {
                        FireStage1 = new FireCombat(this, api.api_hougeki1);
                    }
                    if (api.api_raigeki != null)
                    {
                        TorpedoStage = new TorpedoCombat(this, api.api_raigeki);
                    }
                    if (api.api_hougeki2 != null)
                    {
                        FireStage2 = new FireCombat(this, api.api_hougeki2);
                    }
                    if (api.api_hougeki3 != null)
                    {
                        FireStage3 = new FireCombat(this, api.api_hougeki3);
                    }
                    break;

                case CombinedFleetType.Carrier:
                case CombinedFleetType.Transport:
                    if (api.api_hougeki1 != null)
                    {
                        FireStage1 = new FireCombat(this, api.api_hougeki1);
                    }
                    if (api.api_hougeki2 != null)
                    {
                        FireStage2 = new FireCombat(this, api.api_hougeki2);
                    }
                    if (api.api_raigeki != null)
                    {
                        TorpedoStage = new TorpedoCombat(this, api.api_raigeki);
                    }
                    if (api.api_hougeki3 != null)
                    {
                        FireStage3 = new FireCombat(this, api.api_hougeki3);
                    }
                    break;

                case CombinedFleetType.Surface:
                    if (api.api_hougeki1 != null)
                    {
                        FireStage1 = new FireCombat(this, api.api_hougeki1);
                    }
                    if (api.api_hougeki2 != null)
                    {
                        FireStage2 = new FireCombat(this, api.api_hougeki2);
                    }
                    if (api.api_hougeki3 != null)
                    {
                        FireStage3 = new FireCombat(this, api.api_hougeki3);
                    }
                    if (api.api_raigeki != null)
                    {
                        TorpedoStage = new TorpedoCombat(this, api.api_raigeki);
                    }
                    break;
                }
            }
            else
            {
                switch (fleettype)
                {
                case CombinedFleetType.None:
                    if (api.api_hougeki1 != null)
                    {
                        FireStage1 = new FireCombat(this, api.api_hougeki1);
                    }
                    if (api.api_hougeki2 != null)
                    {
                        FireStage2 = new FireCombat(this, api.api_hougeki2);
                    }
                    if (api.api_raigeki != null)
                    {
                        TorpedoStage = new TorpedoCombat(this, api.api_raigeki);
                    }
                    break;

                case CombinedFleetType.Carrier:
                case CombinedFleetType.Transport:
                    if (api.api_hougeki1 != null)
                    {
                        FireStage1 = new FireCombat(this, api.api_hougeki1);
                    }
                    if (api.api_raigeki != null)
                    {
                        TorpedoStage = new TorpedoCombat(this, api.api_raigeki);
                    }
                    if (api.api_hougeki2 != null)
                    {
                        FireStage2 = new FireCombat(this, api.api_hougeki2);
                    }
                    if (api.api_hougeki3 != null)
                    {
                        FireStage3 = new FireCombat(this, api.api_hougeki3);
                    }
                    break;

                case CombinedFleetType.Surface:
                    if (api.api_hougeki1 != null)
                    {
                        FireStage1 = new FireCombat(this, api.api_hougeki1);
                    }
                    if (api.api_hougeki2 != null)
                    {
                        FireStage2 = new FireCombat(this, api.api_hougeki2);
                    }
                    if (api.api_hougeki3 != null)
                    {
                        FireStage3 = new FireCombat(this, api.api_hougeki3);
                    }
                    if (api.api_raigeki != null)
                    {
                        TorpedoStage = new TorpedoCombat(this, api.api_raigeki);
                    }
                    break;
                }
            }
            if (api.api_hougeki != null || api.api_friendly_info != null)
            {
                NightBattle(api);
            }
            else
            {
                EndApplyBattle();
            }
        }
示例#16
0
        public Battle(sortie_battle api, CombinedFleetType fleettype, MapNodeType battletype, ShipInBattle[] fleet1, ShipInBattle[] fleet2)
        {
            FleetType  = fleettype;
            BattleType = battletype;
            Fleet1     = fleet1;
            Fleet2     = fleet2;

            if (api.api_formation != null)
            {
                FriendFormation = (Formation)api.api_formation[0];
                EnemyFormation  = (Formation)api.api_formation[1];
                Direction       = (Direction)api.api_formation[2];
            }
            if (api.api_search != null)
            {
                FriendSearching = api.api_search[0];
                EnemySearching  = api.api_search[1];
            }

            bool iscombined      = fleettype != CombinedFleetType.None;
            bool isenemycombined = battletype == MapNodeType.Combined || battletype == MapNodeType.CombinedBOSS;

            EnemyFleet = api.api_ship_ke.Where(x => x != -1)
                         .Select((x, i) => new ShipInBattle
            {
                Index      = i + 1,
                IsEnemy    = true,
                ShipInfo   = Staff.Current.MasterData.ShipInfo[x],
                Level      = api.api_ship_lv[i + 1],
                Equipments = api.api_eSlot[i].Select(y => Staff.Current.MasterData.EquipInfo[y]).Where(y => y != null).Select(y => new EquipInBattle(y)).ToArray(),
                Firepower  = api.api_eParam[i][0],
                Torpedo    = api.api_eParam[i][1],
                AA         = api.api_eParam[i][2],
                Armor      = api.api_eParam[i][3]
            })
                         .ToArray();
            EnemyFleet2 = api.api_ship_ke_combined?.Where(x => x != -1)
                          .Select((x, i) => new ShipInBattle
            {
                Index      = i + 7,
                IsEnemy    = true,
                ShipInfo   = Staff.Current.MasterData.ShipInfo[x],
                Level      = api.api_ship_lv_combined[i + 1],
                Equipments = api.api_eSlot_combined[i].Select(y => Staff.Current.MasterData.EquipInfo[y]).Where(y => y != null).Select(y => new EquipInBattle(y)).ToArray(),
                Firepower  = api.api_eParam_combined[i][0],
                Torpedo    = api.api_eParam_combined[i][1],
                AA         = api.api_eParam_combined[i][2],
                Armor      = api.api_eParam_combined[i][3]
            })
                          .ToArray();

            EnemyShipIds = api.api_ship_ke.Skip(1).ConcatNotNull(api.api_ship_ke_combined?.Skip(1)).ToArray();

            void SetHPs(ShipInBattle[] fleet, int index, int[] hps, int[] maxhps)
            {
                if (fleet == null)
                {
                    return;
                }
                for (int i = 0; i < fleet.Length; i++)
                {
                    var ship = fleet[i];
                    ship.MaxHP  = maxhps[i + index];
                    ship.FromHP = ship.ToHP = hps[i + index];
                }
            }

            SetHPs(Fleet1, 1, api.api_nowhps, api.api_maxhps);
            SetHPs(EnemyFleet, 7, api.api_nowhps, api.api_maxhps);
            SetHPs(Fleet2, 1, api.api_nowhps_combined, api.api_maxhps_combined);
            SetHPs(EnemyFleet2, 7, api.api_nowhps_combined, api.api_maxhps_combined);

            api.api_escape_idx?.ForEach(x => Fleet1[x - 1].IsEscaped          = true);
            api.api_escape_idx_combined?.ForEach(x => Fleet2[x - 1].IsEscaped = true);

            if (api.api_air_base_injection != null)
            {
                AirBaseJet = new JetPlaneAttack(this, api.api_air_base_injection, true);
            }
            if (api.api_injection_kouku != null)
            {
                Jet = new JetPlaneAttack(this, api.api_injection_kouku, false);
            }
            if (api.api_air_base_attack != null)
            {
                AirBaseAttacks = api.api_air_base_attack.Select(x => new AirBaseAttack(this, x)).ToArray();
            }
            if (api.api_kouku != null)
            {
                AirCombat1 = new AerialCombat(this, api.api_kouku);
            }
            if (api.api_kouku2 != null)
            {
                AirCombat2 = new AerialCombat(this, api.api_kouku2);
            }
            if (api.api_support_flag != 0)
            {
                Support = new SupportAttack(this, api.api_support_info, api.api_support_flag);
            }
            if (isenemycombined)
            {
                if (api.api_opening_taisen != null)
                {
                    OpeningASW = new ECFireCombat(this, api.api_opening_taisen);
                }
                if (api.api_opening_atack != null)
                {
                    OpeningTorpedo = new ECTorpedoCombat(this, api.api_opening_atack);
                }
                if (api.api_hougeki1 != null)
                {
                    FireStage1 = new ECFireCombat(this, api.api_hougeki1);
                }
                if (api.api_hougeki2 != null)
                {
                    FireStage2 = new ECFireCombat(this, api.api_hougeki2);
                }
                if (api.api_hougeki3 != null)
                {
                    FireStage3 = new ECFireCombat(this, api.api_hougeki3);
                }
                if (api.api_raigeki != null)
                {
                    TorpedoStage = new ECTorpedoCombat(this, api.api_raigeki);
                }
            }
            else
            {
                if (api.api_opening_taisen != null)
                {
                    OpeningASW = new FireCombat(api.api_opening_taisen, NightOrTorpedo, EnemyFleet);
                }
                if (api.api_opening_atack != null)
                {
                    OpeningTorpedo = new TorpedoCombat(api.api_opening_atack, NightOrTorpedo, EnemyFleet);
                }
                switch (fleettype)
                {
                case CombinedFleetType.None:
                    if (api.api_hougeki1 != null)
                    {
                        FireStage1 = new FireCombat(api.api_hougeki1, Fleet1, EnemyFleet);
                    }
                    if (api.api_hougeki2 != null)
                    {
                        FireStage2 = new FireCombat(api.api_hougeki2, Fleet1, EnemyFleet);
                    }
                    break;

                case CombinedFleetType.Carrier:
                case CombinedFleetType.Transport:
                    if (api.api_hougeki1 != null)
                    {
                        FireStage1 = new FireCombat(api.api_hougeki1, Fleet2, EnemyFleet);
                    }
                    if (api.api_hougeki2 != null)
                    {
                        FireStage2 = new FireCombat(api.api_hougeki2, Fleet1, EnemyFleet);
                    }
                    if (api.api_hougeki3 != null)
                    {
                        FireStage3 = new FireCombat(api.api_hougeki3, Fleet1, EnemyFleet);
                    }
                    break;

                case CombinedFleetType.Surface:
                    if (api.api_hougeki1 != null)
                    {
                        FireStage1 = new FireCombat(api.api_hougeki1, Fleet1, EnemyFleet);
                    }
                    if (api.api_hougeki2 != null)
                    {
                        FireStage2 = new FireCombat(api.api_hougeki2, Fleet1, EnemyFleet);
                    }
                    if (api.api_hougeki3 != null)
                    {
                        FireStage3 = new FireCombat(api.api_hougeki3, Fleet2, EnemyFleet);
                    }
                    break;
                }
                if (api.api_raigeki != null)
                {
                    TorpedoStage = new TorpedoCombat(api.api_raigeki, NightOrTorpedo, EnemyFleet);
                }
            }
            if (api.api_hougeki != null)
            {
                NightBattle(api);
            }
            else
            {
                EndApplyBattle();
            }
        }
示例#17
0
        public Battle(sortie_battle api, CombinedFleetType fleettype, MapNodeType battletype, BattleManager source)
        {
            FleetType  = fleettype;
            BattleType = battletype;
            Fleet1     = (source.SortieFleet1?.Ships ?? Staff.Current.Homeport.Fleets[api.api_deck_id + api.api_dock_id].Ships)
                         .Select(x => new ShipInBattle(x)).ToArray();
            Fleet2 = source.SortieFleet2?.Ships
                     .Select(x => new ShipInBattle(x)).ToArray();
            if (source.SortieFleet1 == null)//演习
            {
                Staff.Current.Homeport.Fleets[api.api_deck_id + api.api_dock_id].Ships.ForEach(x => x.IgnoreNextCondition());
            }

            if (api.api_formation != null)
            {
                FriendFormation = (Formation)api.api_formation[0];
                EnemyFormation  = (Formation)api.api_formation[1];
                Direction       = (Direction)api.api_formation[2];
            }

            bool iscombined      = fleettype != CombinedFleetType.None;
            bool isenemycombined = battletype == MapNodeType.Combined || battletype == MapNodeType.CombinedBOSS;

            EnemyFleet = api.api_ship_ke.Where(x => x != -1)
                         .Select((x, i) => new ShipInBattle
            {
                ShipInfo   = Staff.Current.MasterData.ShipInfo[x],
                Level      = api.api_ship_lv[i + 1],
                Equipments = api.api_eSlot[i].Select(y => Staff.Current.MasterData.EquipInfo[y]).Where(y => y != null).ToArray(),
                Firepower  = api.api_eParam[i][0],
                Torpedo    = api.api_eParam[i][1],
                AA         = api.api_eParam[i][2],
                Armor      = api.api_eParam[i][3]
            })
                         .ToArray();
            EnemyFleet2 = api.api_ship_ke_combined?.Where(x => x != -1)
                          .Select((x, i) => new ShipInBattle
            {
                ShipInfo   = Staff.Current.MasterData.ShipInfo[x],
                Level      = api.api_ship_lv_combined[i + 1],
                Equipments = api.api_eSlot_combined[i].Select(y => Staff.Current.MasterData.EquipInfo[y]).Where(y => y != null).ToArray(),
                Firepower  = api.api_eParam_combined[i][0],
                Torpedo    = api.api_eParam_combined[i][1],
                AA         = api.api_eParam_combined[i][2],
                Armor      = api.api_eParam_combined[i][3]
            })
                          .ToArray();

            EnemyShipIds = api.api_ship_ke.Skip(1).ConcatNotNull(api.api_ship_ke_combined?.Skip(1)).ToArray();

            Fleet1.ArrayZip(api.api_maxhps, 1, Delegates.SetMaxHP);
            Fleet2?.ArrayZip(api.api_maxhps_combined, 1, Delegates.SetMaxHP);
            EnemyFleet.ArrayZip(api.api_maxhps, 7, Delegates.SetMaxHP);
            EnemyFleet2?.ArrayZip(api.api_maxhps_combined, 7, Delegates.SetMaxHP);

            Fleet1.ArrayZip(api.api_nowhps, 1, Delegates.SetStartHP);
            Fleet2?.ArrayZip(api.api_nowhps_combined, 1, Delegates.SetStartHP);
            EnemyFleet.ArrayZip(api.api_nowhps, 7, Delegates.SetStartHP);
            EnemyFleet2?.ArrayZip(api.api_nowhps_combined, 7, Delegates.SetStartHP);

            api.api_escape_idx?.ForEach(x => Fleet1[x - 1].IsEscaped          = true);
            api.api_escape_idx_combined?.ForEach(x => Fleet2[x - 1].IsEscaped = true);

            JetAttack(api.api_air_base_injection);
            JetAttack(api.api_injection_kouku);
            AirBaseAttack(api.api_air_base_attack);
            AirCombat1 = AirBattle(api.api_kouku, false);
            AirCombat2 = AirBattle(api.api_kouku2, false);
            SupportAttack(api.api_support_info);
            FireAttack(api.api_opening_taisen, NightOrTorpedo);
            if (isenemycombined)
            {
                ECTorpedoAttack(api.api_opening_atack);
            }
            else
            {
                TorpedoAttack(api.api_opening_atack);
            }
            if (isenemycombined)
            {
                ECFireAttack(api.api_hougeki1);
                ECFireAttack(api.api_hougeki2);
                ECFireAttack(api.api_hougeki3);
            }
            else
            {
                switch (fleettype)
                {
                case CombinedFleetType.None:
                    FireAttack(api.api_hougeki1, Fleet1);
                    FireAttack(api.api_hougeki2, Fleet1);
                    break;

                case CombinedFleetType.Carrier:
                case CombinedFleetType.Transport:
                    FireAttack(api.api_hougeki1, Fleet2);
                    FireAttack(api.api_hougeki2, Fleet1);
                    FireAttack(api.api_hougeki3, Fleet1);
                    break;

                case CombinedFleetType.Surface:
                    FireAttack(api.api_hougeki1, Fleet1);
                    FireAttack(api.api_hougeki2, Fleet1);
                    FireAttack(api.api_hougeki3, Fleet2);
                    break;
                }
            }
            if (isenemycombined)
            {
                ECTorpedoAttack(api.api_raigeki);
            }
            else
            {
                TorpedoAttack(api.api_raigeki);
            }
            NightBattle(api);
        }
示例#18
0
 public void NightBattle(sortie_battle api)
 {
     FireAttack(api.api_hougeki, NightOrTorpedo);
     EndApplyBattle();
 }