public bool Load(bool logging = true)
        {
            bool succeeded = true;

            ResourceManager.CopyDocumentFromArchive("Record/" + ShipParameter.FileName, MasterPath + "\\" + ShipParameter.FileName);

            succeeded &= EnemyFleet.Load(MasterPath);
            succeeded &= ShipParameter.Load(MasterPath);
            succeeded &= Construction.Load(MasterPath);
            succeeded &= ShipDrop.Load(MasterPath);
            succeeded &= Development.Load(MasterPath);
            succeeded &= Resource.Load(MasterPath);

            if (logging)
            {
                if (succeeded)
                {
                    Utility.Logger.Add(2, "レコードをロードしました。");
                }
                else
                {
                    Utility.Logger.Add(3, "レコードのロードに失敗しました。");
                }
            }

            return(succeeded);
        }
        public IList <EnemyFleet> GetEncounters(int rpMap, int rpNode, EventMapDifficulty?rpDifficulty)
        {
            var rFleets = new Dictionary <long, EnemyFleet>();

            using (var rCommand = r_Connection.CreateCommand())
            {
                rCommand.CommandText = "SELECT composition.id AS id, group_concat(ship) AS ships, formation FROM abyssal.fleet JOIN abyssal.composition ON fleet.composition = composition.id WHERE map = @map AND node = @node AND difficulty = @difficulty GROUP BY id, formation;";
                rCommand.Parameters.AddWithValue("@map", rpMap);
                rCommand.Parameters.AddWithValue("@node", rpNode);
                rCommand.Parameters.AddWithValue("@difficulty", (int?)rpDifficulty ?? 0);

                using (var rReader = rCommand.ExecuteReader())
                    while (rReader.Read())
                    {
                        var rID = Convert.ToInt64(rReader["id"]);

                        EnemyFleet rFleet;
                        if (!rFleets.TryGetValue(rID, out rFleet))
                        {
                            var rShips   = (string)rReader["ships"];
                            var rShipIDs = rShips.Split(',');

                            rFleets.Add(rID, rFleet = new EnemyFleet(rShipIDs));
                        }

                        var rFormation = (Formation)Convert.ToInt32(rReader["formation"]);
                        rFleet.Formations.Add(rFormation);
                    }
            }

            return(rFleets.Values.ToArray());
        }
示例#3
0
        public bool Save(bool logging = true)
        {
            //api_start2がロード済みのときのみ
            if (KCDatabase.Instance.MasterShips.Count == 0)
            {
                return(false);
            }

            bool succeeded = true;


            succeeded &= EnemyFleet.Save(MasterPath);
            succeeded &= ShipParameter.Save(MasterPath);
            succeeded &= Construction.Save(MasterPath);
            succeeded &= ShipDrop.Save(MasterPath);
            succeeded &= Development.Save(MasterPath);
            succeeded &= Resource.Save(MasterPath);
            if (logging)
            {
                if (succeeded)
                {
                    Utility.Logger.Add(2, LoggerRes.SavedRecords);
                }
                else
                {
                    Utility.Logger.Add(3, LoggerRes.FailedSavingRecords);
                }
            }

            return(succeeded);
        }
示例#4
0
        public bool Load(bool logging = true)
        {
            bool succeeded = true;

            ResourceManager.CopyFromArchive("Record/" + ShipParameter.FileName, MasterPath + "\\" + ShipParameter.FileName);

            succeeded &= EnemyFleet.Load(MasterPath);
            succeeded &= ShipParameter.Load(MasterPath);
            succeeded &= Construction.Load(MasterPath);
            succeeded &= ShipDrop.Load(MasterPath);
            succeeded &= Development.Load(MasterPath);
            succeeded &= Resource.Load(MasterPath);
            if (logging)
            {
                if (succeeded)
                {
                    Utility.Logger.Add(2, LoggerRes.LoadedRecords);
                }
                else
                {
                    Utility.Logger.Add(3, LoggerRes.FailedLoadingRecords);
                }
            }
            return(succeeded);
        }
示例#5
0
        public void Save()
        {
            //api_start2がロード済みのときのみ
            if (KCDatabase.Instance.MasterShips.Count == 0)
            {
                return;
            }

            bool successed = true;


            successed &= EnemyFleet.Save(MasterPath);
            successed &= ShipParameter.Save(MasterPath);
            successed &= Construction.Save(MasterPath);
            successed &= ShipDrop.Save(MasterPath);
            successed &= Development.Save(MasterPath);
            successed &= Resource.Save(MasterPath);

            if (successed)
            {
                Utility.Logger.Add(2, "レコードをセーブしました。");
            }
            else
            {
                Utility.Logger.Add(2, "レコードのセーブに失敗しました。");
            }
        }
    public void setFleets(PlayerFleet p_Fleet, EnemyFleet e_Fleet)
    {
        Player = p_Fleet;
        Enemy  = e_Fleet;

        P_Ship_Array = Player.get_Fleet();
        E_Ship_Array = Enemy.get_Fleet();
    }
    public BattleManager(PlayerFleet p_Fleet, EnemyFleet e_Fleet)
    {
        Player = p_Fleet;
        Enemy  = e_Fleet;

        P_Ship_Array = Player.get_Fleet();
        E_Ship_Array = Enemy.get_Fleet();
    }
示例#8
0
    // Start is called before the first frame update
    void Start()
    {
        level = FindObjectOfType <Level>();
        level.CountActiveEnemies();
        row = FindObjectOfType <EnemyFleet>();
        int rand = UnityEngine.Random.Range(5, 15);

        Invoke("Fire", rand);
    }
示例#9
0
 private void TorpedoAttack(sortie_battle.torpedo api)
 {
     if (api == null)
     {
         return;
     }
     NightOrTorpedo.ArrayZip(api.api_fdam, 1, Delegates.SetDamage);
     EnemyFleet.ArrayZip(api.api_edam, 1, Delegates.SetDamage);
     NightOrTorpedo.ArrayZip(api.api_fydam, 1, Delegates.SetGiveDamage);
     EnemyFleet.ArrayZip(api.api_eydam, 1, Delegates.SetGiveDamage);
 }
示例#10
0
        private void EndApplyBattle()
        {
            Fleet1.ForEach(Delegates.OnEndUpdate);
            Fleet2?.ForEach(Delegates.OnEndUpdate);
            EnemyFleet.ForEach(Delegates.OnEndUpdate);
            //mvp
            Fleet1.TakeMaxOrDefault(x => x.DamageGiven).SetMvp();
            Fleet2?.TakeMaxOrDefault(x => x.DamageGiven).SetMvp();
            EnemyFleet.TakeMaxOrDefault(x => x.DamageGiven).SetMvp();

            OnAllPropertyChanged();
        }
示例#11
0
 private void SupportAttack(sortie_battle.support api)
 {
     if (api == null)
     {
         return;
     }
     AirBattle(api.api_support_airatack, true);
     if (api.api_support_hourai != null)
     {
         EnemyFleet.ArrayZip(api.api_support_hourai.api_damage, 1, Delegates.SetDamage);
     }
 }
示例#12
0
 private void AirBaseAttack(sortie_battle.air_base_attack[] api)
 {
     if (api == null)
     {
         return;
     }
     foreach (var attack in api)
     {
         if (attack.api_stage3 != null)
         {
             EnemyFleet.ArrayZip(attack.api_stage3.api_edam, 1, Delegates.SetDamage);
         }
         if (attack.api_stage3_combined != null)
         {
             EnemyFleet2.ArrayZip(attack.api_stage3_combined.api_edam, 1, Delegates.SetDamage);
         }
     }
 }
示例#13
0
        public void Load()
        {
            bool successed = true;

            successed &= EnemyFleet.Load(MasterPath);
            successed &= ShipParameter.Load(MasterPath);
            //successed &= Construction.Load( MasterPath );
            //successed &= ShipDrop.Load( MasterPath );
            //successed &= Development.Load( MasterPath );
            //successed &= Resource.Load( MasterPath );

            if (successed)
            {
                Utility.Logger.Add(2, "レコードをロードしました。");
            }
            else
            {
                Utility.Logger.Add(3, "レコードのロードに失敗しました。");
            }
        }
示例#14
0
        private void EndApplyBattle()
        {
            void OnEndUpdate(ShipInBattle ship)
            {
                ship.EndUpdate();
                ship.IsMostDamage = false;
            }

            Fleet1.ForEach(OnEndUpdate);
            Fleet2?.ForEach(OnEndUpdate);
            EnemyFleet.ForEach(OnEndUpdate);
            EnemyFleet2?.ForEach(OnEndUpdate);
            //mvp
            Fleet1.TakeMaxOrDefault(x => x.DamageGiven).SetMvp();
            Fleet2?.TakeMaxOrDefault(x => x.DamageGiven).SetMvp();
            EnemyFleet.TakeMaxOrDefault(x => x.DamageGiven).SetMvp();
            EnemyFleet2?.TakeMaxOrDefault(x => x.DamageGiven).SetMvp();

            OnAllPropertyChanged();
        }
示例#15
0
    public void AutoResolve(FleetManager fleetManager, EnemyFleet enemyFleet)
    {
        //determine type of attack
        float rnd = Random.Range(0.0f, 10.0f);

        if (rnd > 8)
        {
        }
        else if (rnd > 5)
        {
        }
        else if (rnd > 2)
        {
        }
        else
        {
        }
        //do math for resolution
        //give resolution
    }
    void nullifier()
    {
        Player = null;
        Enemy  = null;

        isActive           = false;
        Turns              = null;
        CurrentTurn.c_Ship = null;
        CurrentTurn.c_Wep  = null;
        CurrentTurn.t_Ship = null;
        P_Ship_Array       = null;
        E_Ship_Array       = null;
        active_Ship        = null;
        act_Ship           = 0;
        en_Ship            = null;
        en_Turn            = null;
        TurnTransScript    = null;
        thisScene          = null;
        set_Action         = false;
        c_Action_Set       = false;
        playerSets         = false;
        c_Battle           = battle_State.bNull;
        aSelect            = null;
    }
示例#17
0
 public override void CommandShips()
 {
     // see if we can disrupt an opponent
     foreach (var s in Fleet.AvailableShips)
     {
         var     occupiedNeighbors = s.CurrentMapCell.Neighbors.Where(n => n.IsOccupiedByOpponent && !EnemyFleet.IsReturningHome(n.ship));
         MapCell bestMove          = null;
         double  best = 0.0;
         foreach (var n in occupiedNeighbors)
         {
             var zone = new Zone(n.position, 5);
             if (zone.SafetyRatio < MyBot.HParams[Parameters.SAFETY_RATIO])
             {
                 continue;
             }
             if (GameInfo.MyShipsCount * 1.1 < GameInfo.OpponentShipsCount)
             {
                 continue;
             }
             if (n.halite < s.CellHalite)
             {
                 continue;
             }
             if (GameInfo.LowestNeighboringOpponentHalite(n) < s.halite)
             {
                 continue;
             }
             if (Safety.IsSafeMove(s, n))
             {
                 var val = (n.halite * .25 + n.ship.halite) - (s.CellHalite * .25 + s.halite);
                 if (val > best)
                 {
                     bestMove = n;
                     best     = val;
                 }
             }
         }
         if (bestMove != null)
         {
             Fleet.AddMove(s.Move(bestMove, "trying to disrupt opponent from Combat logic"));
         }
     }
 }
示例#18
0
 private void Awake()
 {
     e_fleet = this.gameObject.AddComponent <EnemyFleet>();
 }
示例#19
0
        private AirCombat AirBattle(sortie_battle.airbattle api, bool issupport)
        {
            if (api == null)
            {
                return(null);
            }
            AirCombat    combat = new AirCombat();
            ShipInBattle friendtorpedo = null, friendbomb = null, enemytorpedo = null, enemybomb = null;

            if (!issupport)
            {
                if (api.api_stage1 != null)//stage1一直都有吧
                {
                    combat.AirControl   = (AirControl)api.api_stage1.api_disp_seiku;
                    combat.FriendStage1 = new LimitedValue(api.api_stage1.api_f_count - api.api_stage1.api_f_lostcount, api.api_stage1.api_f_count);
                    combat.EnemyStage1  = new LimitedValue(api.api_stage1.api_e_count - api.api_stage1.api_e_lostcount, api.api_stage1.api_e_count);
                }
                if (api.api_stage2 != null)
                {
                    combat.FriendStage2 = new LimitedValue(api.api_stage2.api_f_count - api.api_stage2.api_f_lostcount, api.api_stage2.api_f_count);
                    combat.EnemyStage2  = new LimitedValue(api.api_stage2.api_e_count - api.api_stage2.api_e_lostcount, api.api_stage2.api_e_count);
                }
                friendtorpedo = Fleet1.Where(x => x.CanAerialTorpedo).TakeIfSingle();
                friendbomb    = Fleet1.Where(x => x.CanAerialBomb).TakeIfSingle();
                enemytorpedo  = EnemyFleet.Where(x => x.CanAerialTorpedo).TakeIfSingle();
                enemybomb     = EnemyFleet.Where(x => x.CanAerialBomb).TakeIfSingle();
            }
            if (api.api_stage3 != null)
            {
                if (!issupport)
                {
                    Fleet1.ArrayZip(api.api_stage3.api_fdam, 1, Delegates.SetDamage);
                }
                EnemyFleet.ArrayZip(api.api_stage3.api_edam, 1, Delegates.SetDamage);
                if (!issupport)
                {
                    for (int i = 1; i < api.api_stage3.api_fdam.Length; i++)
                    {
                        if (api.api_stage3.api_frai_flag[i] != 0)
                        {
                            if (api.api_stage3.api_fbak_flag[i] != 0)
                            {
                                if (enemytorpedo == enemybomb && enemytorpedo != null)
                                {
                                    enemytorpedo.DamageGiven += (int)api.api_stage3.api_fdam[i];
                                }
                                else
                                {
                                    AnonymousEnemyDamage += (int)api.api_stage3.api_fdam[i];
                                }
                            }
                            else
                            if (enemytorpedo != null)
                            {
                                enemytorpedo.DamageGiven += (int)api.api_stage3.api_fdam[i];
                            }
                            else
                            {
                                AnonymousEnemyDamage += (int)api.api_stage3.api_fdam[i];
                            }
                        }
                        else if (api.api_stage3.api_fbak_flag[i] != 0)
                        {
                            if (enemybomb != null)
                            {
                                enemybomb.DamageGiven += (int)api.api_stage3.api_fdam[i];
                            }
                            else
                            {
                                AnonymousEnemyDamage += (int)api.api_stage3.api_fdam[i];
                            }
                        }
                    }
                    for (int i = 1; i < api.api_stage3.api_edam.Length; i++)
                    {
                        if (api.api_stage3.api_erai_flag[i] != 0)
                        {
                            if (api.api_stage3.api_ebak_flag[i] != 0)
                            {
                                if (friendtorpedo == friendbomb && friendtorpedo != null)
                                {
                                    friendtorpedo.DamageGiven += (int)api.api_stage3.api_edam[i];
                                }
                                else
                                {
                                    AnonymousFriendDamage += (int)api.api_stage3.api_edam[i];
                                }
                            }
                            else
                            if (friendtorpedo != null)
                            {
                                friendtorpedo.DamageGiven += (int)api.api_stage3.api_edam[i];
                            }
                            else
                            {
                                AnonymousFriendDamage += (int)api.api_stage3.api_edam[i];
                            }
                        }
                        else if (api.api_stage3.api_ebak_flag[i] != 0)
                        {
                            if (friendbomb != null)
                            {
                                friendbomb.DamageGiven += (int)api.api_stage3.api_edam[i];
                            }
                            else
                            {
                                AnonymousFriendDamage += (int)api.api_stage3.api_edam[i];
                            }
                        }
                    }
                }
            }
            if (api.api_stage3_combined != null)
            {
                if (api.api_stage3_combined.api_fdam != null)
                {
                    Fleet2?.ArrayZip(api.api_stage3_combined.api_fdam, 1, Delegates.SetDamage);
                    for (int i = 1; i < api.api_stage3_combined.api_fdam.Length; i++)
                    {
                        if (api.api_stage3_combined.api_frai_flag[i] != 0)
                        {
                            if (api.api_stage3_combined.api_fbak_flag[i] != 0)
                            {
                                if (enemytorpedo == enemybomb && enemytorpedo != null)
                                {
                                    enemytorpedo.DamageGiven += (int)api.api_stage3_combined.api_fdam[i];
                                }
                                else
                                {
                                    AnonymousEnemyDamage += (int)api.api_stage3_combined.api_fdam[i];
                                }
                            }
                            else
                            if (enemytorpedo != null)
                            {
                                enemytorpedo.DamageGiven += (int)api.api_stage3_combined.api_fdam[i];
                            }
                            else
                            {
                                AnonymousEnemyDamage += (int)api.api_stage3_combined.api_fdam[i];
                            }
                        }
                        else if (api.api_stage3_combined.api_fbak_flag[i] != 0)
                        {
                            if (enemybomb != null)
                            {
                                enemybomb.DamageGiven += (int)api.api_stage3_combined.api_fdam[i];
                            }
                            else
                            {
                                AnonymousEnemyDamage += (int)api.api_stage3_combined.api_fdam[i];
                            }
                        }
                    }
                }
                if (api.api_stage3_combined.api_edam != null)
                {
                    EnemyFleet2?.ArrayZip(api.api_stage3_combined.api_edam, 1, Delegates.SetDamage);
                    for (int i = 1; i < api.api_stage3_combined.api_edam.Length; i++)
                    {
                        if (api.api_stage3_combined.api_erai_flag[i] != 0)
                        {
                            if (api.api_stage3_combined.api_ebak_flag[i] != 0)
                            {
                                if (friendtorpedo == friendbomb && friendtorpedo != null)
                                {
                                    friendtorpedo.DamageGiven += (int)api.api_stage3_combined.api_edam[i];
                                }
                                else
                                {
                                    AnonymousFriendDamage += (int)api.api_stage3_combined.api_edam[i];
                                }
                            }
                            else
                            if (friendtorpedo != null)
                            {
                                friendtorpedo.DamageGiven += (int)api.api_stage3_combined.api_edam[i];
                            }
                            else
                            {
                                AnonymousFriendDamage += (int)api.api_stage3_combined.api_edam[i];
                            }
                        }
                        else if (api.api_stage3_combined.api_ebak_flag[i] != 0)
                        {
                            if (friendbomb != null)
                            {
                                friendbomb.DamageGiven += (int)api.api_stage3_combined.api_edam[i];
                            }
                            else
                            {
                                AnonymousFriendDamage += (int)api.api_stage3_combined.api_edam[i];
                            }
                        }
                    }
                }
            }
            return(combat);
        }
示例#20
0
        private void JetAttack(sortie_battle.airbattle api)
        {
            if (api == null)
            {
                return;
            }
            ShipInBattle friendattack = null, enemyattack = null;

            if (api.api_plane_from[0]?.Length == 1 && api.api_plane_from[0][0] > 0)
            {
                friendattack = Fleet1[api.api_plane_from[0][0] - 1];
            }
            if (api.api_plane_from.Length >= 2 && api.api_plane_from[1]?.Length == 1 && api.api_plane_from[1][0] > 0)
            {
                enemyattack = EnemyFleet[api.api_plane_from[1][0] - 1];
            }
            if (api.api_stage3 != null)
            {
                if (api.api_stage3.api_edam != null)
                {
                    EnemyFleet.ArrayZip(api.api_stage3.api_edam, 1, Delegates.SetDamage);
                    for (int i = 1; i < api.api_stage3.api_edam.Length; i++)
                    {
                        if (friendattack != null)
                        {
                            friendattack.DamageGiven += (int)api.api_stage3.api_edam[i];
                        }
                        else
                        {
                            AnonymousEnemyDamage += (int)api.api_stage3.api_edam[i];
                        }
                    }
                }
                if (api.api_stage3.api_fdam != null)
                {
                    Fleet1.ArrayZip(api.api_stage3.api_fdam, 1, Delegates.SetDamage);
                    for (int i = 1; i < api.api_stage3.api_fdam.Length; i++)
                    {
                        if (enemyattack != null)
                        {
                            enemyattack.DamageGiven += (int)api.api_stage3.api_fdam[i];
                        }
                        else
                        {
                            AnonymousEnemyDamage += (int)api.api_stage3.api_fdam[i];
                        }
                    }
                }
            }
            if (api.api_stage3_combined != null)
            {
                if (api.api_stage3_combined.api_fdam != null)
                {
                    Fleet2?.ArrayZip(api.api_stage3.api_fdam, 1, Delegates.SetDamage);
                    for (int i = 1; i < api.api_stage3.api_fdam.Length; i++)
                    {
                        if (enemyattack != null)
                        {
                            enemyattack.DamageGiven += (int)api.api_stage3.api_fdam[i];
                        }
                        else
                        {
                            AnonymousEnemyDamage += (int)api.api_stage3.api_fdam[i];
                        }
                    }
                }
                if (api.api_stage3_combined.api_edam != null)
                {
                    EnemyFleet2?.ArrayZip(api.api_stage3.api_edam, 1, Delegates.SetDamage);
                    for (int i = 1; i < api.api_stage3.api_edam.Length; i++)
                    {
                        if (friendattack != null)
                        {
                            friendattack.DamageGiven += (int)api.api_stage3.api_edam[i];
                        }
                        else
                        {
                            AnonymousEnemyDamage += (int)api.api_stage3.api_edam[i];
                        }
                    }
                }
            }
        }
示例#21
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);
        }