public HougekiModel(Hougeki <BattleAtackKinds_Night> data, Dictionary <int, ShipModel_BattleAll> ships) : base(ships.get_Item(data.Target.get_Item(0)))
 {
     this._is_night    = true;
     this._attack_type = this._convertAttackTypeEnum(data.SpType);
     this._initialize <BattleAtackKinds_Night>(data, ships);
     this._SetDamageForDefender();
 }
Ejemplo n.º 2
0
 public HougekiModel(Hougeki <BattleAtackKinds_Day> data, Dictionary <int, ShipModel_BattleAll> ships)
     : base(ships[data.Target[0]])
 {
     _attack_type = _convertAttackTypeEnum(data.SpType);
     _initialize(data, ships);
     _SetDamageForDefender();
 }
Ejemplo n.º 3
0
        private void Shelling(Hougeki shelling)
        {
            if (shelling == null)
            {
                return;
            }

            var damages = shelling.GetDamages();

            this.CalcDamages(damages);
        }
        private void Shelling(Hougeki shelling, int friendFleetIndex = 1, int enemyFleetIndex = 1)
        {
            if (shelling == null)
            {
                return;
            }

            var damages = shelling.GetDamages(friendFleetIndex, enemyFleetIndex);

            this.CalcDamages(damages);
        }
        private void Shelling(Hougeki shelling, int friendFleetIndex = 1, int enemyFleetIndex = 1, bool friendlySupport = false)
        {
            if (shelling == null)
            {
                return;
            }

            var damages = shelling.GetDamages(friendFleetIndex, enemyFleetIndex, friendlySupport);

            this.CalcDamages(damages);
        }
        private void Shelling(Hougeki shelling, int friendFleetIndex = 0, int enemyFleetIndex = 0)
        {
            if (shelling == null)
            {
                return;
            }

            var friendDamage = shelling.GetFriendDamages();
            var enemyDamage  = shelling.GetEnemyDamages();

            this.FriendFleet.Fleets[friendFleetIndex].CalcDamages(friendDamage);
            this.EnemyFleet.Fleets[enemyFleetIndex].CalcDamages(enemyDamage);
        }
Ejemplo n.º 7
0
        public override NightBattleFmt GetResultData(FormationDatas formation, BattleCommandParams cParam)
        {
            int            num            = f_AtkIdxs.Count();
            int            num2           = e_AtkIdxs.Count();
            NightBattleFmt nightBattleFmt = new NightBattleFmt(F_Data.Deck.Rid, F_Data.ShipData, E_Data.ShipData);

            setTargetingKind(formation);
            formationData             = formation;
            nightBattleFmt.F_SearchId = getSerchLightFirstPos(fSerchLightIdxs, F_Data.ShipData);
            nightBattleFmt.E_SearchId = getSerchLightFirstPos(eSerchLightIdxs, E_Data.ShipData);
            nightBattleFmt.F_FlareId  = getFlarePos(fFlareIdxs, F_Data.ShipData, ref fValance2);
            nightBattleFmt.E_FlareId  = getFlarePos(eFlareIdxs, E_Data.ShipData, ref eValance2);
            if (seikuValue[0] >= 1 && seikuValue[0] <= 3)
            {
                nightBattleFmt.F_TouchPlane = getSyokusetuPlane(fTouchPlane);
                setTouchPlaneValanceValue(nightBattleFmt.F_TouchPlane, ref fValance1, ref fValance2, ref fValance3);
            }
            if (seikuValue[1] >= 1 && seikuValue[1] <= 3)
            {
                nightBattleFmt.E_TouchPlane = getSyokusetuPlane(eTouchPlane);
                setTouchPlaneValanceValue(nightBattleFmt.E_TouchPlane, ref eValance1, ref eValance2, ref eValance3);
            }
            int num3 = (num < num2) ? num2 : num;

            for (int i = 0; i < num3; i++)
            {
                if (i >= num && i >= num2)
                {
                    return(nightBattleFmt);
                }
                if (i < num)
                {
                    Hougeki <BattleAtackKinds_Night> hougekiData = getHougekiData(f_AtkIdxs[i], F_Data.ShipData[f_AtkIdxs[i]]);
                    if (hougekiData != null)
                    {
                        nightBattleFmt.Hougeki.Add(hougekiData);
                    }
                }
                if (i < num2)
                {
                    Hougeki <BattleAtackKinds_Night> hougekiData2 = getHougekiData(e_AtkIdxs[i], E_Data.ShipData[e_AtkIdxs[i]]);
                    if (hougekiData2 != null)
                    {
                        nightBattleFmt.Hougeki.Add(hougekiData2);
                    }
                }
            }
            return(nightBattleFmt);
        }
Ejemplo n.º 8
0
        public override NightBattleFmt GetResultData(FormationDatas formation, BattleCommandParams cParam)
        {
            int            num            = Enumerable.Count <int>(this.f_AtkIdxs);
            int            num2           = Enumerable.Count <int>(this.e_AtkIdxs);
            NightBattleFmt nightBattleFmt = new NightBattleFmt(this.F_Data.Deck.Rid, this.F_Data.ShipData, this.E_Data.ShipData);

            this.setTargetingKind(formation);
            this.formationData        = formation;
            nightBattleFmt.F_SearchId = this.getSerchLightFirstPos(this.fSerchLightIdxs, this.F_Data.ShipData);
            nightBattleFmt.E_SearchId = this.getSerchLightFirstPos(this.eSerchLightIdxs, this.E_Data.ShipData);
            nightBattleFmt.F_FlareId  = this.getFlarePos(this.fFlareIdxs, this.F_Data.ShipData, ref this.fValance2);
            nightBattleFmt.E_FlareId  = this.getFlarePos(this.eFlareIdxs, this.E_Data.ShipData, ref this.eValance2);
            if (this.seikuValue[0] >= 1 && this.seikuValue[0] <= 3)
            {
                nightBattleFmt.F_TouchPlane = this.getSyokusetuPlane(this.fTouchPlane);
                this.setTouchPlaneValanceValue(nightBattleFmt.F_TouchPlane, ref this.fValance1, ref this.fValance2, ref this.fValance3);
            }
            if (this.seikuValue[1] >= 1 && this.seikuValue[1] <= 3)
            {
                nightBattleFmt.E_TouchPlane = this.getSyokusetuPlane(this.eTouchPlane);
                this.setTouchPlaneValanceValue(nightBattleFmt.E_TouchPlane, ref this.eValance1, ref this.eValance2, ref this.eValance3);
            }
            int num3 = (num < num2) ? num2 : num;

            for (int i = 0; i < num3; i++)
            {
                if (i >= num && i >= num2)
                {
                    return(nightBattleFmt);
                }
                if (i < num)
                {
                    Hougeki <BattleAtackKinds_Night> hougekiData = this.getHougekiData(this.f_AtkIdxs.get_Item(i), this.F_Data.ShipData.get_Item(this.f_AtkIdxs.get_Item(i)));
                    if (hougekiData != null)
                    {
                        nightBattleFmt.Hougeki.Add(hougekiData);
                    }
                }
                if (i < num2)
                {
                    Hougeki <BattleAtackKinds_Night> hougekiData2 = this.getHougekiData(this.e_AtkIdxs.get_Item(i), this.E_Data.ShipData.get_Item(this.e_AtkIdxs.get_Item(i)));
                    if (hougekiData2 != null)
                    {
                        nightBattleFmt.Hougeki.Add(hougekiData2);
                    }
                }
            }
            return(nightBattleFmt);
        }
Ejemplo n.º 9
0
        private HougekiDayBattleFmt GetResultData(BattleCommand command, int commandPos, List <int> fAtkIdx, List <int> eAtkIdx)
        {
            if (!F_Data.ShipData.Any((Mem_ship x) => x.IsFight()) || !E_Data.ShipData.Any((Mem_ship y) => y.IsFight()))
            {
                return(null);
            }
            if (!isHougCommand(command))
            {
                fAtkIdx.Clear();
            }
            HougekiDayBattleFmt hougekiDayBattleFmt     = new HougekiDayBattleFmt();
            List <Hougeki <BattleAtackKinds_Day> > list = new List <Hougeki <BattleAtackKinds_Day> >();
            int count  = fAtkIdx.Count;
            int count2 = eAtkIdx.Count;
            int num    = (count < count2) ? count2 : count;

            for (int i = 0; i < num; i++)
            {
                if (i >= count && i >= count2)
                {
                    return(null);
                }
                if (i < count)
                {
                    Hougeki <BattleAtackKinds_Day> hougekiData = getHougekiData(command, fAtkIdx[i], F_Data.ShipData[fAtkIdx[i]]);
                    if (hougekiData != null)
                    {
                        list.Add(hougekiData);
                    }
                }
                if (i < count2)
                {
                    Hougeki <BattleAtackKinds_Day> hougekiData2 = getHougekiData(eAtkIdx[i], E_Data.ShipData[eAtkIdx[i]]);
                    if (hougekiData2 != null)
                    {
                        list.Add(hougekiData2);
                    }
                }
            }
            if (list.Count == 0)
            {
                return(null);
            }
            hougekiDayBattleFmt.AttackData = list;
            return(hougekiDayBattleFmt);
        }
Ejemplo n.º 10
0
        private void setSlotData(int attackerIdx, Mem_ship attacker, List <Mst_slotitem> atk_slot, Mem_ship target, Hougeki <BattleAtackKinds_Night> setData)
        {
            Mst_stype mst_stype = Mst_DataManager.Instance.Mst_stype.get_Item(target.Stype);

            if (mst_stype.IsSubmarine())
            {
                setData.Slot_List.Add(0);
                setData.SpType = BattleAtackKinds_Night.Normal;
                return;
            }
            if (atk_slot == null || atk_slot.get_Count() == 0)
            {
                setData.Slot_List.Add(0);
                setData.SpType = BattleAtackKinds_Night.Normal;
                return;
            }
            int luck = attacker.GetBattleBaseParam().Luck;
            int num  = (int)((double)(luck + 15) + Math.Sqrt((double)attacker.Level) * 0.75);

            if (luck >= 50)
            {
                num = (int)(65.0 + (Math.Sqrt((double)luck) - 50.0) + Math.Sqrt((double)attacker.Level) * 0.8);
            }
            if (Enumerable.Any <Mst_slotitem>(atk_slot, (Mst_slotitem x) => x.Id == 129))
            {
                num += 5;
            }
            List <int> list;
            List <int> list2;
            List <int> list3;
            List <int> list4;

            if (attacker.IsEnemy())
            {
                list  = this.eSerchLightIdxs;
                list2 = this.fSerchLightIdxs;
                list3 = this.eFlareIdxs;
                list4 = this.fFlareIdxs;
            }
            else
            {
                list  = this.fSerchLightIdxs;
                list2 = this.eSerchLightIdxs;
                list3 = this.fFlareIdxs;
                list4 = this.eFlareIdxs;
            }
            if (list3.get_Count() > 0)
            {
                num += 4;
            }
            if (list4.get_Count() > 0)
            {
                num -= 10;
            }
            if (list.get_Count() > 0)
            {
                num += 7;
            }
            if (list2.get_Count() > 0)
            {
                num -= 5;
            }
            if (attacker.Get_DamageState() == DamageState.Tyuuha)
            {
                num += 18;
            }
            if (attackerIdx == 0)
            {
                num += 15;
            }
            List <int> list5 = new List <int>();

            list5.Add(1);
            list5.Add(2);
            list5.Add(3);
            List <int> list6 = list5;

            list5 = new List <int>();
            list5.Add(4);
            List <int> list7 = list5;

            list5 = new List <int>();
            list5.Add(5);
            list5.Add(32);
            List <int>          list8  = list5;
            List <Mst_slotitem> list9  = new List <Mst_slotitem>();
            List <Mst_slotitem> list10 = new List <Mst_slotitem>();
            List <Mst_slotitem> list11 = new List <Mst_slotitem>();
            List <Mst_slotitem> list12 = new List <Mst_slotitem>();
            int soku = Mst_DataManager.Instance.Mst_ship.get_Item(target.Ship_id).Soku;

            using (List <Mst_slotitem> .Enumerator enumerator = atk_slot.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    Mst_slotitem current = enumerator.get_Current();
                    if (list6.Contains(current.Api_mapbattle_type3))
                    {
                        list9.Add(current);
                        list12.Add(current);
                    }
                    else if (list7.Contains(current.Api_mapbattle_type3))
                    {
                        list10.Add(current);
                        list12.Add(current);
                    }
                    else if (list8.Contains(current.Api_mapbattle_type3) && !mst_stype.IsLandFacillity(soku))
                    {
                        list11.Add(current);
                        list12.Add(current);
                    }
                }
            }
            if (list12.get_Count() == 0)
            {
                setData.Slot_List.Add(0);
                setData.SpType = BattleAtackKinds_Night.Normal;
                return;
            }
            List <BattleAtackKinds_Night> list13 = new List <BattleAtackKinds_Night>();
            Dictionary <BattleAtackKinds_Night, List <int> > dictionary = new Dictionary <BattleAtackKinds_Night, List <int> >();

            if (list9.get_Count() >= 3)
            {
                list13.Add(BattleAtackKinds_Night.Syu_Syu_Syu);
                list5 = new List <int>();
                list5.Add(list9.get_Item(0).Id);
                list5.Add(list9.get_Item(1).Id);
                list5.Add(list9.get_Item(2).Id);
                List <int> list14 = list5;
                dictionary.Add(BattleAtackKinds_Night.Syu_Syu_Syu, list14);
            }
            if (list9.get_Count() >= 2 && list10.get_Count() >= 1)
            {
                list13.Add(BattleAtackKinds_Night.Syu_Syu_Fuku);
                list5 = new List <int>();
                list5.Add(list9.get_Item(0).Id);
                list5.Add(list9.get_Item(1).Id);
                list5.Add(list10.get_Item(0).Id);
                List <int> list15 = list5;
                dictionary.Add(BattleAtackKinds_Night.Syu_Syu_Fuku, list15);
            }
            if (list11.get_Count() >= 2)
            {
                list13.Add(BattleAtackKinds_Night.Rai_Rai);
                list5 = new List <int>();
                list5.Add(list11.get_Item(0).Id);
                list5.Add(list11.get_Item(1).Id);
                List <int> list16 = list5;
                dictionary.Add(BattleAtackKinds_Night.Rai_Rai, list16);
            }
            if (list11.get_Count() >= 1 && list9.get_Count() >= 1)
            {
                list13.Add(BattleAtackKinds_Night.Syu_Rai);
                list5 = new List <int>();
                list5.Add(list9.get_Item(0).Id);
                list5.Add(list11.get_Item(0).Id);
                List <int> list17 = list5;
                dictionary.Add(BattleAtackKinds_Night.Syu_Rai, list17);
            }
            if (list12.get_Count() >= 2)
            {
                list13.Add(BattleAtackKinds_Night.Renzoku);
                list5 = new List <int>();
                list5.Add(list12.get_Item(0).Id);
                list5.Add(list12.get_Item(1).Id);
                List <int> list18 = list5;
                dictionary.Add(BattleAtackKinds_Night.Renzoku, list18);
            }
            setData.SpType = BattleAtackKinds_Night.Normal;
            setData.Slot_List.Add(list12.get_Item(0).Id);
            Dictionary <BattleAtackKinds_Night, int> dictionary2 = new Dictionary <BattleAtackKinds_Night, int>();

            dictionary2.Add(BattleAtackKinds_Night.Syu_Syu_Syu, 140);
            dictionary2.Add(BattleAtackKinds_Night.Syu_Syu_Fuku, 130);
            dictionary2.Add(BattleAtackKinds_Night.Rai_Rai, 122);
            dictionary2.Add(BattleAtackKinds_Night.Syu_Rai, 115);
            dictionary2.Add(BattleAtackKinds_Night.Renzoku, 110);
            Dictionary <BattleAtackKinds_Night, int> dictionary3 = dictionary2;

            using (List <BattleAtackKinds_Night> .Enumerator enumerator2 = list13.GetEnumerator())
            {
                while (enumerator2.MoveNext())
                {
                    BattleAtackKinds_Night current2 = enumerator2.get_Current();
                    int num2 = this.randInstance.Next(dictionary3.get_Item(current2));
                    if (num > num2)
                    {
                        setData.SpType    = current2;
                        setData.Slot_List = dictionary.get_Item(current2);
                        break;
                    }
                }
            }
        }
Ejemplo n.º 11
0
        private Hougeki <BattleAtackKinds_Night> getHougekiData(int atk_idx, Mem_ship attacker)
        {
            if (attacker.Get_DamageState() == DamageState.Taiha || !attacker.IsFight())
            {
                return(null);
            }
            Func <int, bool> func = null;
            BattleBaseData   battleBaseData;
            Dictionary <int, BattleShipSubInfo> dictionary;
            BattleBaseData battleBaseData2;
            Dictionary <int, BattleShipSubInfo> dictionary2;
            List <int> list;
            double     cliticalKeisu;

            if (attacker.IsEnemy())
            {
                battleBaseData  = this.E_Data;
                dictionary      = this.E_SubInfo;
                battleBaseData2 = this.F_Data;
                dictionary2     = this.F_SubInfo;
                func            = new Func <int, bool>(base.RecoveryShip);
                list            = this.fSerchLightIdxs;
                double num  = this.eValance1;
                double num2 = this.eValance2;
                cliticalKeisu = this.eValance3;
            }
            else
            {
                battleBaseData  = this.F_Data;
                dictionary      = this.F_SubInfo;
                battleBaseData2 = this.E_Data;
                dictionary2     = this.E_SubInfo;
                list            = this.eSerchLightIdxs;
                double num  = this.fValance1;
                double num2 = this.fValance2;
                cliticalKeisu = this.fValance3;
            }
            if (!this.isAttackerFromTargetKind(dictionary.get_Item(attacker.Rid)))
            {
                return(null);
            }
            Hougeki <BattleAtackKinds_Night> hougeki             = new Hougeki <BattleAtackKinds_Night>();
            KeyValuePair <int, int>          subMarineAtackKeisu = this.getSubMarineAtackKeisu(battleBaseData2.ShipData, attacker, battleBaseData.SlotData.get_Item(atk_idx), true);
            bool flag = false;

            if (subMarineAtackKeisu.get_Key() != 0)
            {
                hougeki.SpType = ((subMarineAtackKeisu.get_Key() != 1) ? BattleAtackKinds_Night.AirAttack : BattleAtackKinds_Night.Bakurai);
                hougeki.Slot_List.Add(0);
                flag = true;
            }
            BattleDamageKinds battleDamageKinds = BattleDamageKinds.Normal;
            Mem_ship          atackTarget       = base.getAtackTarget(attacker, battleBaseData2.ShipData, false, flag, true, ref battleDamageKinds);

            if (atackTarget == null)
            {
                return(null);
            }
            int deckIdx = dictionary2.get_Item(atackTarget.Rid).DeckIdx;

            if (atackTarget.Nowhp > 1 && list.get_Count() > 0 && list.get_Item(0) == deckIdx)
            {
                battleDamageKinds = BattleDamageKinds.Normal;
                atackTarget       = base.getAtackTarget(attacker, battleBaseData2.ShipData, false, flag, true, ref battleDamageKinds);
                deckIdx           = dictionary2.get_Item(atackTarget.Rid).DeckIdx;
            }
            if (!flag)
            {
                this.setSlotData(atk_idx, attacker, battleBaseData.SlotData.get_Item(atk_idx), atackTarget, hougeki);
            }
            hougeki.Attacker = attacker.Rid;
            int num3 = (hougeki.SpType != BattleAtackKinds_Night.Renzoku) ? 1 : 2;
            HashSet <BattleAtackKinds_Night> hashSet = new HashSet <BattleAtackKinds_Night>();

            hashSet.Add(BattleAtackKinds_Night.Rai_Rai);
            hashSet.Add(BattleAtackKinds_Night.Renzoku);
            hashSet.Add(BattleAtackKinds_Night.Syu_Rai);
            hashSet.Add(BattleAtackKinds_Night.Syu_Syu_Fuku);
            hashSet.Add(BattleAtackKinds_Night.Syu_Syu_Syu);
            HashSet <BattleAtackKinds_Night> hashSet2 = hashSet;

            for (int i = 0; i < num3; i++)
            {
                int soukou = atackTarget.Soukou;
                List <Mst_slotitem> list2 = battleBaseData.SlotData.get_Item(atk_idx);
                int atkPow;
                int hitProb;
                FormationDatas.GetFormationKinds battleState;
                if (flag)
                {
                    atkPow      = this.getSubmarineAttackValue(subMarineAtackKeisu, attacker, list2, battleBaseData.SlotLevel.get_Item(atk_idx));
                    hitProb     = base.getSubmarineHitProb(attacker, battleBaseData.SlotData.get_Item(atk_idx), battleBaseData.SlotLevel.get_Item(atk_idx));
                    battleState = FormationDatas.GetFormationKinds.SUBMARINE;
                }
                else
                {
                    atkPow      = this.getMidnightAttackValue(hougeki.SpType, attacker, list2, atackTarget);
                    hitProb     = this.getMidnightHitProb(hougeki.SpType, attacker, list2, list);
                    battleState = FormationDatas.GetFormationKinds.MIDNIGHT;
                }
                int             battleAvo_Midnight = base.getBattleAvo_Midnight(battleState, atackTarget, list.Contains(deckIdx));
                BattleHitStatus battleHitStatus    = this.getHitStatus(hitProb, battleAvo_Midnight, attacker, atackTarget, cliticalKeisu, false);
                if (battleHitStatus == BattleHitStatus.Miss && hashSet2.Contains(hougeki.SpType))
                {
                    battleHitStatus = BattleHitStatus.Normal;
                }
                hougeki.Target.Add(atackTarget.Rid);
                int num4 = this.setDamageValue(battleHitStatus, atkPow, soukou, attacker, atackTarget, battleBaseData2.LostFlag);
                hougeki.Damage.Add(num4);
                hougeki.Clitical.Add(battleHitStatus);
                hougeki.DamageKind.Add(battleDamageKinds);
            }
            if (func != null)
            {
                bool flag2 = func.Invoke(deckIdx);
            }
            return(hougeki);
        }
Ejemplo n.º 12
0
        private void setSlotData(int attackerIdx, Mem_ship attacker, List <Mst_slotitem> atk_slot, Mem_ship target, Hougeki <BattleAtackKinds_Night> setData)
        {
            Mst_stype mst_stype = Mst_DataManager.Instance.Mst_stype[target.Stype];

            if (mst_stype.IsSubmarine())
            {
                setData.Slot_List.Add(0);
                setData.SpType = BattleAtackKinds_Night.Normal;
                return;
            }
            if (atk_slot == null || atk_slot.Count == 0)
            {
                setData.Slot_List.Add(0);
                setData.SpType = BattleAtackKinds_Night.Normal;
                return;
            }
            int luck = attacker.GetBattleBaseParam().Luck;
            int num  = (int)((double)(luck + 15) + Math.Sqrt(attacker.Level) * 0.75);

            if (luck >= 50)
            {
                num = (int)(65.0 + (Math.Sqrt(luck) - 50.0) + Math.Sqrt(attacker.Level) * 0.8);
            }
            if (atk_slot.Any((Mst_slotitem x) => x.Id == 129))
            {
                num += 5;
            }
            List <int> list;
            List <int> list2;
            List <int> list3;
            List <int> list4;

            if (attacker.IsEnemy())
            {
                list  = eSerchLightIdxs;
                list2 = fSerchLightIdxs;
                list3 = eFlareIdxs;
                list4 = fFlareIdxs;
            }
            else
            {
                list  = fSerchLightIdxs;
                list2 = eSerchLightIdxs;
                list3 = fFlareIdxs;
                list4 = eFlareIdxs;
            }
            if (list3.Count > 0)
            {
                num += 4;
            }
            if (list4.Count > 0)
            {
                num -= 10;
            }
            if (list.Count > 0)
            {
                num += 7;
            }
            if (list2.Count > 0)
            {
                num -= 5;
            }
            if (attacker.Get_DamageState() == DamageState.Tyuuha)
            {
                num += 18;
            }
            if (attackerIdx == 0)
            {
                num += 15;
            }
            List <int> list5 = new List <int>();

            list5.Add(1);
            list5.Add(2);
            list5.Add(3);
            List <int> list6 = list5;

            list5 = new List <int>();
            list5.Add(4);
            List <int> list7 = list5;

            list5 = new List <int>();
            list5.Add(5);
            list5.Add(32);
            List <int>          list8  = list5;
            List <Mst_slotitem> list9  = new List <Mst_slotitem>();
            List <Mst_slotitem> list10 = new List <Mst_slotitem>();
            List <Mst_slotitem> list11 = new List <Mst_slotitem>();
            List <Mst_slotitem> list12 = new List <Mst_slotitem>();
            int soku = Mst_DataManager.Instance.Mst_ship[target.Ship_id].Soku;

            foreach (Mst_slotitem item in atk_slot)
            {
                if (list6.Contains(item.Api_mapbattle_type3))
                {
                    list9.Add(item);
                    list12.Add(item);
                }
                else if (list7.Contains(item.Api_mapbattle_type3))
                {
                    list10.Add(item);
                    list12.Add(item);
                }
                else if (list8.Contains(item.Api_mapbattle_type3) && !mst_stype.IsLandFacillity(soku))
                {
                    list11.Add(item);
                    list12.Add(item);
                }
            }
            if (list12.Count == 0)
            {
                setData.Slot_List.Add(0);
                setData.SpType = BattleAtackKinds_Night.Normal;
                return;
            }
            List <BattleAtackKinds_Night> list13 = new List <BattleAtackKinds_Night>();
            Dictionary <BattleAtackKinds_Night, List <int> > dictionary = new Dictionary <BattleAtackKinds_Night, List <int> >();

            if (list9.Count >= 3)
            {
                list13.Add(BattleAtackKinds_Night.Syu_Syu_Syu);
                list5 = new List <int>();
                list5.Add(list9[0].Id);
                list5.Add(list9[1].Id);
                list5.Add(list9[2].Id);
                List <int> value = list5;
                dictionary.Add(BattleAtackKinds_Night.Syu_Syu_Syu, value);
            }
            if (list9.Count >= 2 && list10.Count >= 1)
            {
                list13.Add(BattleAtackKinds_Night.Syu_Syu_Fuku);
                list5 = new List <int>();
                list5.Add(list9[0].Id);
                list5.Add(list9[1].Id);
                list5.Add(list10[0].Id);
                List <int> value2 = list5;
                dictionary.Add(BattleAtackKinds_Night.Syu_Syu_Fuku, value2);
            }
            if (list11.Count >= 2)
            {
                list13.Add(BattleAtackKinds_Night.Rai_Rai);
                list5 = new List <int>();
                list5.Add(list11[0].Id);
                list5.Add(list11[1].Id);
                List <int> value3 = list5;
                dictionary.Add(BattleAtackKinds_Night.Rai_Rai, value3);
            }
            if (list11.Count >= 1 && list9.Count >= 1)
            {
                list13.Add(BattleAtackKinds_Night.Syu_Rai);
                list5 = new List <int>();
                list5.Add(list9[0].Id);
                list5.Add(list11[0].Id);
                List <int> value4 = list5;
                dictionary.Add(BattleAtackKinds_Night.Syu_Rai, value4);
            }
            if (list12.Count >= 2)
            {
                list13.Add(BattleAtackKinds_Night.Renzoku);
                list5 = new List <int>();
                list5.Add(list12[0].Id);
                list5.Add(list12[1].Id);
                List <int> value5 = list5;
                dictionary.Add(BattleAtackKinds_Night.Renzoku, value5);
            }
            setData.SpType = BattleAtackKinds_Night.Normal;
            setData.Slot_List.Add(list12[0].Id);
            Dictionary <BattleAtackKinds_Night, int> dictionary2 = new Dictionary <BattleAtackKinds_Night, int>();

            dictionary2.Add(BattleAtackKinds_Night.Syu_Syu_Syu, 140);
            dictionary2.Add(BattleAtackKinds_Night.Syu_Syu_Fuku, 130);
            dictionary2.Add(BattleAtackKinds_Night.Rai_Rai, 122);
            dictionary2.Add(BattleAtackKinds_Night.Syu_Rai, 115);
            dictionary2.Add(BattleAtackKinds_Night.Renzoku, 110);
            Dictionary <BattleAtackKinds_Night, int> dictionary3 = dictionary2;

            foreach (BattleAtackKinds_Night item2 in list13)
            {
                int num2 = randInstance.Next(dictionary3[item2]);
                if (num > num2)
                {
                    setData.SpType    = item2;
                    setData.Slot_List = dictionary[item2];
                    break;
                }
            }
        }
Ejemplo n.º 13
0
 private void _initialize <T>(Hougeki <T> data, Dictionary <int, ShipModel_BattleAll> ships) where T : IConvertible
 {
     _attacker = ships[data.Attacker].__CreateAttacker__();
     for (int i = 0; i < data.Target.Count; i++)
     {
         _AddData(data.Damage[i], data.Clitical[i], data.DamageKind[i]);
     }
     _slots = new List <SlotitemModel_Battle>();
     if (data.Slot_List != null)
     {
         for (int j = 0; j < data.Slot_List.Count; j++)
         {
             int num = data.Slot_List[j];
             if (num == 0)
             {
                 _slots.Add(null);
             }
             else
             {
                 _slots.Add(new SlotitemModel_Battle(num));
             }
         }
     }
     while (_slots.Count < 3)
     {
         _slots.Add(null);
     }
     if (IsNight() && Attacker.IsAircraftCarrier() && Attacker.Yomi != "グラ\u30fcフ・ツェッペリン")
     {
         _attack_type = BattleAttackKind.AirAttack;
     }
     if (AttackType == BattleAttackKind.Normal)
     {
         _setAttackSubType();
     }
     else if (AttackType == BattleAttackKind.AirAttack)
     {
         List <SlotitemModel_Battle> slotitemList = Attacker.SlotitemList;
         List <int> enable_type3;
         if (base.Defender.IsSubMarine())
         {
             enable_type3 = new List <int>
             {
                 7,
                 8,
                 11,
                 25,
                 26,
                 41
             };
             _slots[0] = slotitemList.Find((SlotitemModel_Battle slot) => enable_type3.IndexOf(slot.Type3) >= 0 && slot.Taisen > 0);
         }
         else
         {
             enable_type3 = new List <int>
             {
                 7,
                 8
             };
             _slots[0] = slotitemList.Find((SlotitemModel_Battle slot) => enable_type3.IndexOf(slot.Type3) >= 0 && (slot.Bakugeki > 0 || slot.Raigeki > 0));
         }
     }
 }
 private void _initialize <T>(Hougeki <T> data, Dictionary <int, ShipModel_BattleAll> ships) where T : IConvertible
 {
     this._attacker = ships.get_Item(data.Attacker).__CreateAttacker__();
     for (int i = 0; i < data.Target.get_Count(); i++)
     {
         base._AddData(data.Damage.get_Item(i), data.Clitical.get_Item(i), data.DamageKind.get_Item(i));
     }
     this._slots = new List <SlotitemModel_Battle>();
     if (data.Slot_List != null)
     {
         for (int j = 0; j < data.Slot_List.get_Count(); j++)
         {
             int num = data.Slot_List.get_Item(j);
             if (num == 0)
             {
                 this._slots.Add(null);
             }
             else
             {
                 this._slots.Add(new SlotitemModel_Battle(num));
             }
         }
     }
     while (this._slots.get_Count() < 3)
     {
         this._slots.Add(null);
     }
     if (this.IsNight() && this.Attacker.IsAircraftCarrier() && this.Attacker.Yomi != "グラーフ・ツェッペリン")
     {
         this._attack_type = BattleAttackKind.AirAttack;
     }
     if (this.AttackType == BattleAttackKind.Normal)
     {
         this._setAttackSubType();
     }
     else if (this.AttackType == BattleAttackKind.AirAttack)
     {
         HougekiModel.< _initialize > c__AnonStorey537 <T> < _initialize > c__AnonStorey = new HougekiModel.< _initialize > c__AnonStorey537 <T>();
         List <SlotitemModel_Battle> slotitemList = this.Attacker.SlotitemList;
         if (base.Defender.IsSubMarine())
         {
             HougekiModel.< _initialize > c__AnonStorey537 <T> arg_1A7_0 = < _initialize > c__AnonStorey;
             List <int>     list = new List <int>();
             list.Add(7);
             list.Add(8);
             list.Add(11);
             list.Add(25);
             list.Add(26);
             list.Add(41);
             arg_1A7_0.enable_type3 = list;
             this._slots.set_Item(0, slotitemList.Find((SlotitemModel_Battle slot) => < _initialize > c__AnonStorey.enable_type3.IndexOf(slot.Type3) >= 0 && slot.Taisen > 0));
         }
         else
         {
             HougekiModel.< _initialize > c__AnonStorey537 <T> arg_1EB_0 = < _initialize > c__AnonStorey;
             List <int>     list = new List <int>();
             list.Add(7);
             list.Add(8);
             arg_1EB_0.enable_type3 = list;
             this._slots.set_Item(0, slotitemList.Find((SlotitemModel_Battle slot) => < _initialize > c__AnonStorey.enable_type3.IndexOf(slot.Type3) >= 0 && (slot.Bakugeki > 0 || slot.Raigeki > 0)));
         }
     }
 }
Ejemplo n.º 15
0
        private Hougeki <BattleAtackKinds_Night> getHougekiData(int atk_idx, Mem_ship attacker)
        {
            if (attacker.Get_DamageState() == DamageState.Taiha || !attacker.IsFight())
            {
                return(null);
            }
            Func <int, bool> func = null;
            BattleBaseData   battleBaseData;
            Dictionary <int, BattleShipSubInfo> dictionary;
            BattleBaseData battleBaseData2;
            Dictionary <int, BattleShipSubInfo> dictionary2;
            List <int> list;
            double     cliticalKeisu;

            if (attacker.IsEnemy())
            {
                battleBaseData  = E_Data;
                dictionary      = E_SubInfo;
                battleBaseData2 = F_Data;
                dictionary2     = F_SubInfo;
                func            = base.RecoveryShip;
                list            = fSerchLightIdxs;
                double eValance4 = eValance1;
                double eValance5 = eValance2;
                cliticalKeisu = eValance3;
            }
            else
            {
                battleBaseData  = F_Data;
                dictionary      = F_SubInfo;
                battleBaseData2 = E_Data;
                dictionary2     = E_SubInfo;
                list            = eSerchLightIdxs;
                double fValance4 = fValance1;
                double fValance5 = fValance2;
                cliticalKeisu = fValance3;
            }
            if (!isAttackerFromTargetKind(dictionary[attacker.Rid]))
            {
                return(null);
            }
            Hougeki <BattleAtackKinds_Night> hougeki             = new Hougeki <BattleAtackKinds_Night>();
            KeyValuePair <int, int>          subMarineAtackKeisu = getSubMarineAtackKeisu(battleBaseData2.ShipData, attacker, battleBaseData.SlotData[atk_idx], midnight: true);
            bool flag = false;

            if (subMarineAtackKeisu.Key != 0)
            {
                hougeki.SpType = ((subMarineAtackKeisu.Key != 1) ? BattleAtackKinds_Night.AirAttack : BattleAtackKinds_Night.Bakurai);
                hougeki.Slot_List.Add(0);
                flag = true;
            }
            BattleDamageKinds dKind       = BattleDamageKinds.Normal;
            Mem_ship          atackTarget = getAtackTarget(attacker, battleBaseData2.ShipData, overKill: false, flag, rescueFlag: true, ref dKind);

            if (atackTarget == null)
            {
                return(null);
            }
            int deckIdx = dictionary2[atackTarget.Rid].DeckIdx;

            if (atackTarget.Nowhp > 1 && list.Count > 0 && list[0] == deckIdx)
            {
                dKind       = BattleDamageKinds.Normal;
                atackTarget = getAtackTarget(attacker, battleBaseData2.ShipData, overKill: false, flag, rescueFlag: true, ref dKind);
                deckIdx     = dictionary2[atackTarget.Rid].DeckIdx;
            }
            if (!flag)
            {
                setSlotData(atk_idx, attacker, battleBaseData.SlotData[atk_idx], atackTarget, hougeki);
            }
            hougeki.Attacker = attacker.Rid;
            int num = (hougeki.SpType != BattleAtackKinds_Night.Renzoku) ? 1 : 2;
            HashSet <BattleAtackKinds_Night> hashSet = new HashSet <BattleAtackKinds_Night>();

            hashSet.Add(BattleAtackKinds_Night.Rai_Rai);
            hashSet.Add(BattleAtackKinds_Night.Renzoku);
            hashSet.Add(BattleAtackKinds_Night.Syu_Rai);
            hashSet.Add(BattleAtackKinds_Night.Syu_Syu_Fuku);
            hashSet.Add(BattleAtackKinds_Night.Syu_Syu_Syu);
            HashSet <BattleAtackKinds_Night> hashSet2 = hashSet;

            for (int i = 0; i < num; i++)
            {
                int soukou = atackTarget.Soukou;
                List <Mst_slotitem> list2 = battleBaseData.SlotData[atk_idx];
                int atkPow;
                int hitProb;
                FormationDatas.GetFormationKinds battleState;
                if (flag)
                {
                    atkPow      = getSubmarineAttackValue(subMarineAtackKeisu, attacker, list2, battleBaseData.SlotLevel[atk_idx]);
                    hitProb     = getSubmarineHitProb(attacker, battleBaseData.SlotData[atk_idx], battleBaseData.SlotLevel[atk_idx]);
                    battleState = FormationDatas.GetFormationKinds.SUBMARINE;
                }
                else
                {
                    atkPow      = getMidnightAttackValue(hougeki.SpType, attacker, list2, atackTarget);
                    hitProb     = getMidnightHitProb(hougeki.SpType, attacker, list2, list);
                    battleState = FormationDatas.GetFormationKinds.MIDNIGHT;
                }
                int             battleAvo_Midnight = getBattleAvo_Midnight(battleState, atackTarget, list.Contains(deckIdx));
                BattleHitStatus battleHitStatus    = getHitStatus(hitProb, battleAvo_Midnight, attacker, atackTarget, cliticalKeisu, airAttack: false);
                if (battleHitStatus == BattleHitStatus.Miss && hashSet2.Contains(hougeki.SpType))
                {
                    battleHitStatus = BattleHitStatus.Normal;
                }
                hougeki.Target.Add(atackTarget.Rid);
                int item = setDamageValue(battleHitStatus, atkPow, soukou, attacker, atackTarget, battleBaseData2.LostFlag);
                hougeki.Damage.Add(item);
                hougeki.Clitical.Add(battleHitStatus);
                hougeki.DamageKind.Add(dKind);
            }
            func?.Invoke(deckIdx);
            return(hougeki);
        }
Ejemplo n.º 16
0
        private Hougeki <BattleAtackKinds_Day> getAttackData(Mem_ship attacker, List <Mst_slotitem> attackerSlot, List <int> attackerSlotLevel, BattleAtackKinds_Day attackType, bool submarine_flag, KeyValuePair <int, int> submarine_keisu, List <Mem_ship> targetShips, List <bool> targetLostFlags, Dictionary <int, BattleShipSubInfo> targetSubInfo, int powerDownType)
        {
            BattleDamageKinds dKind       = BattleDamageKinds.Normal;
            Mem_ship          atackTarget = getAtackTarget(attacker, targetShips, overKill: false, submarine_flag, rescueFlag: true, ref dKind);

            if (atackTarget == null)
            {
                return(null);
            }
            int deckIdx = targetSubInfo[atackTarget.Rid].DeckIdx;
            Hougeki <BattleAtackKinds_Day> hougeki = new Hougeki <BattleAtackKinds_Day>();

            hougeki.Attacker = attacker.Rid;
            hougeki.SpType   = attackType;
            int num = (attackType != BattleAtackKinds_Day.Renzoku) ? 1 : 2;

            for (int i = 0; i < num; i++)
            {
                int soukou = atackTarget.Soukou;
                hougeki.Target.Add(atackTarget.Rid);
                int num2;
                int num3;
                FormationDatas.GetFormationKinds battleState;
                if (submarine_flag)
                {
                    num2        = getSubmarineAttackValue(submarine_keisu, attacker, attackerSlot, attackerSlotLevel);
                    num3        = getSubmarineHitProb(attacker, attackerSlot, attackerSlotLevel);
                    battleState = FormationDatas.GetFormationKinds.SUBMARINE;
                }
                else
                {
                    int tekkouKind = getTekkouKind(atackTarget.Stype, attackerSlot);
                    num2        = getHougAttackValue(attackType, attacker, attackerSlot, atackTarget, tekkouKind);
                    num3        = getHougHitProb(attackType, attacker, attackerSlot, tekkouKind);
                    battleState = FormationDatas.GetFormationKinds.HOUGEKI;
                }
                int battleAvo = getBattleAvo(battleState, atackTarget);
                switch (powerDownType)
                {
                case 1:
                    num2 = (int)((double)num2 * 0.55);
                    num3 = (int)((double)num3 * 0.55);
                    break;

                case 2:
                    num3 = (int)((double)num3 * 0.55);
                    break;
                }
                bool            airAttack       = (attackType == BattleAtackKinds_Day.AirAttack) ? true : false;
                BattleHitStatus battleHitStatus = getHitStatus(num3, battleAvo, attacker, atackTarget, valance3, airAttack);
                if (battleHitStatus == BattleHitStatus.Miss && enableSpType.Contains(attackType))
                {
                    battleHitStatus = BattleHitStatus.Normal;
                }
                int item = setDamageValue(battleHitStatus, num2, soukou, attacker, atackTarget, targetLostFlags);
                hougeki.Damage.Add(item);
                hougeki.Clitical.Add(battleHitStatus);
                hougeki.DamageKind.Add(dKind);
            }
            if (attacker.IsEnemy())
            {
                RecoveryShip(deckIdx);
            }
            return(hougeki);
        }
Ejemplo n.º 17
0
        private Hougeki <BattleAtackKinds_Day> getHougekiData(int atk_idx, Mem_ship attacker)
        {
            if (!attacker.IsFight())
            {
                return(null);
            }
            BattleBaseData e_Data = E_Data;
            Dictionary <int, BattleShipSubInfo> e_SubInfo = E_SubInfo;
            Dictionary <int, BattleShipSubInfo> f_SubInfo = F_SubInfo;
            BattleBaseData f_Data = F_Data;

            if (!isAttackerFromTargetKind(e_SubInfo[attacker.Rid]))
            {
                return(null);
            }
            BattleAtackKinds_Day    battleAtackKinds_Day = BattleAtackKinds_Day.Normal;
            List <int>              slot_List            = null;
            List <Mem_ship>         list = f_Data.ShipData;
            KeyValuePair <int, int> subMarineAtackKeisu = getSubMarineAtackKeisu(list, attacker, e_Data.SlotData[atk_idx], midnight: false);
            bool submarine_flag = false;
            bool flag           = IsAirAttackGroup(attacker, e_Data.SlotData[atk_idx], BattleCommand.None);

            if (flag && !CanAirAtack_DamageState(attacker))
            {
                return(null);
            }
            if (subMarineAtackKeisu.Key != 0)
            {
                battleAtackKinds_Day = ((subMarineAtackKeisu.Key == 1) ? BattleAtackKinds_Day.Bakurai : BattleAtackKinds_Day.AirAttack);
                List <int> list2 = new List <int>();
                list2.Add(0);
                slot_List      = list2;
                submarine_flag = true;
            }
            else
            {
                if (flag)
                {
                    if (!CanAirAttack(attacker, e_Data.SlotData[atk_idx]))
                    {
                        return(null);
                    }
                    battleAtackKinds_Day = BattleAtackKinds_Day.AirAttack;
                    List <int> list2 = new List <int>();
                    list2.Add(0);
                    slot_List = list2;
                    if (!isValidAirAtack_To_LandFaccillity(attacker, e_Data.SlotData[atk_idx]))
                    {
                        List <Mem_ship> list3 = (from shipobj in list
                                                 let soku = Mst_DataManager.Instance.Mst_ship[shipobj.Ship_id].Soku
                                                            let land_flag = Mst_DataManager.Instance.Mst_stype[shipobj.Stype].IsLandFacillity(soku)
                                                                            where !land_flag
                                                                            select shipobj).ToList();
                        list = list3;
                    }
                }
                else if (!isValidHougeki(attacker))
                {
                    return(null);
                }
                KeyValuePair <BattleAtackKinds_Day, List <int> > spAttackKind = getSpAttackKind(attacker, e_Data.SlotData[atk_idx]);
                if (battleAtackKinds_Day != BattleAtackKinds_Day.AirAttack || spAttackKind.Key != 0)
                {
                    battleAtackKinds_Day = spAttackKind.Key;
                    slot_List            = spAttackKind.Value;
                }
            }
            Hougeki <BattleAtackKinds_Day> attackData = getAttackData(attacker, e_Data.SlotData[atk_idx], e_Data.SlotLevel[atk_idx], battleAtackKinds_Day, submarine_flag, subMarineAtackKeisu, list, f_Data.LostFlag, f_SubInfo, 0);

            if (attackData != null)
            {
                attackData.Slot_List = slot_List;
            }
            return(attackData);
        }
Ejemplo n.º 18
0
        private Hougeki <BattleAtackKinds_Day> getHougekiData(BattleCommand command, int atk_idx, Mem_ship attacker)
        {
            if (!attacker.IsFight())
            {
                return(null);
            }
            BattleBaseData f_Data = F_Data;
            Dictionary <int, BattleShipSubInfo> f_SubInfo = F_SubInfo;
            BattleBaseData e_Data = E_Data;
            Dictionary <int, BattleShipSubInfo> e_SubInfo = E_SubInfo;

            if (!isAttackerFromTargetKind(f_SubInfo[attacker.Rid]))
            {
                return(null);
            }
            Dictionary <int, Mst_stype> mst_stypes = Mst_DataManager.Instance.Mst_stype;
            Dictionary <int, Mst_ship>  mst_ships  = Mst_DataManager.Instance.Mst_ship;
            List <Mem_ship>             shipData   = e_Data.ShipData;
            bool submarine_flag = false;
            BattleAtackKinds_Day    battleAtackKinds_Day = BattleAtackKinds_Day.Normal;
            List <int>              slot_List            = null;
            KeyValuePair <int, int> submarine_keisu      = new KeyValuePair <int, int>(0, 0);
            bool flag = IsAirAttackGroup(attacker, f_Data.SlotData[atk_idx], command);

            if (flag && !CanAirAtack_DamageState(attacker))
            {
                return(null);
            }
            int num = 0;

            if (command != BattleCommand.Taisen)
            {
                shipData = (from x in shipData
                            where !mst_stypes[x.Stype].IsSubmarine()
                            select x).ToList();
                if (flag)
                {
                    if (command != BattleCommand.Kouku)
                    {
                        return(null);
                    }
                    if (!CanAirAttack(attacker, f_Data.SlotData[atk_idx]))
                    {
                        return(null);
                    }
                    battleAtackKinds_Day = BattleAtackKinds_Day.AirAttack;
                    List <int> list = new List <int>();
                    list.Add(0);
                    slot_List = list;
                    if (!isValidAirAtack_To_LandFaccillity(attacker, f_Data.SlotData[atk_idx]))
                    {
                        shipData = (from x in shipData
                                    where (!mst_stypes[x.Stype].IsLandFacillity(mst_ships[x.Ship_id].Soku)) ? true : false
                                    select x).ToList();
                    }
                }
                else if (!isValidHougeki(attacker))
                {
                    return(null);
                }
                if (!flag && command == BattleCommand.Kouku)
                {
                    if (airAttackEndRid.Contains(attacker.Rid))
                    {
                        return(null);
                    }
                    airAttackEndRid.Add(attacker.Rid);
                    num = 2;
                    int        hougSlotData = getHougSlotData(f_Data.SlotData[atk_idx]);
                    List <int> list         = new List <int>();
                    list.Add(hougSlotData);
                    slot_List = list;
                }
            }
            else
            {
                shipData = (from x in shipData
                            where mst_stypes[x.Stype].IsSubmarine()
                            select x).ToList();
                submarine_keisu = getSubMarineAtackKeisu(shipData, attacker, f_Data.SlotData[atk_idx], midnight: false);
                if (submarine_keisu.Key == 0)
                {
                    shipData = (from x in e_Data.ShipData
                                where !mst_stypes[x.Stype].IsSubmarine()
                                select x).ToList();
                    submarine_flag = false;
                    num            = 1;
                    if (flag)
                    {
                        if (!CanAirAttack(attacker, f_Data.SlotData[atk_idx]))
                        {
                            return(null);
                        }
                        battleAtackKinds_Day = BattleAtackKinds_Day.AirAttack;
                        List <int> list = new List <int>();
                        list.Add(0);
                        slot_List = list;
                        if (!isValidAirAtack_To_LandFaccillity(attacker, f_Data.SlotData[atk_idx]))
                        {
                            shipData = (from x in shipData
                                        where (!mst_stypes[x.Stype].IsLandFacillity(mst_ships[x.Ship_id].Soku)) ? true : false
                                        select x).ToList();
                        }
                    }
                    else if (!isValidHougeki(attacker))
                    {
                        return(null);
                    }
                    if (!flag)
                    {
                        int        hougSlotData2 = getHougSlotData(f_Data.SlotData[atk_idx]);
                        List <int> list          = new List <int>();
                        list.Add(hougSlotData2);
                        slot_List = list;
                    }
                }
                else
                {
                    battleAtackKinds_Day = ((submarine_keisu.Key == 1) ? BattleAtackKinds_Day.Bakurai : BattleAtackKinds_Day.AirAttack);
                    List <int> list = new List <int>();
                    list.Add(0);
                    slot_List      = list;
                    submarine_flag = true;
                }
            }
            if (shipData.Count == 0)
            {
                return(null);
            }
            if (command != BattleCommand.Taisen && num == 0)
            {
                KeyValuePair <BattleAtackKinds_Day, List <int> > spAttackKind = getSpAttackKind(attacker, f_Data.SlotData[atk_idx]);
                if (battleAtackKinds_Day != BattleAtackKinds_Day.AirAttack || spAttackKind.Key != 0)
                {
                    battleAtackKinds_Day = spAttackKind.Key;
                    slot_List            = spAttackKind.Value;
                }
            }
            Hougeki <BattleAtackKinds_Day> attackData = getAttackData(attacker, f_Data.SlotData[atk_idx], f_Data.SlotLevel[atk_idx], battleAtackKinds_Day, submarine_flag, submarine_keisu, shipData, e_Data.LostFlag, e_SubInfo, num);

            if (attackData != null)
            {
                attackData.Slot_List = slot_List;
            }
            return(attackData);
        }