Example #1
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;
                    }
                }
            }
        }
Example #2
0
        private int getMidnightHitProb(BattleAtackKinds_Night kind, Mem_ship atk_ship, List <Mst_slotitem> atk_slot, List <int> deckSearchLight)
        {
            List <int> list;

            if (atk_ship.IsEnemy())
            {
                int deckIdx = this.E_SubInfo.get_Item(atk_ship.Rid).DeckIdx;
                list = this.E_Data.SlotLevel.get_Item(deckIdx);
            }
            else
            {
                int deckIdx2 = this.F_SubInfo.get_Item(atk_ship.Rid).DeckIdx;
                list = this.F_Data.SlotLevel.get_Item(deckIdx2);
            }
            double num  = 0.0;
            int    num2 = 0;

            using (var enumerator = Enumerable.Select(atk_slot, (Mst_slotitem obj, int idx) => new
            {
                obj,
                idx
            }).GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    var current = enumerator.get_Current();
                    num2 += current.obj.Houm;
                    num  += this.getSlotPlus_HitProb(current.obj, list.get_Item(current.idx));
                }
            }
            double num3 = Math.Sqrt((double)atk_ship.GetBattleBaseParam().Luck * 1.5) + Math.Sqrt((double)atk_ship.Level) * 2.0 + (double)num2;
            double num4 = (!atk_ship.IsEnemy()) ? this.fValance2 : this.eValance2;

            num3 = num4 + num3;
            BattleFormationKinds1 formation;
            BattleFormationKinds1 formation2;

            if (!atk_ship.IsEnemy())
            {
                formation  = this.F_Data.Formation;
                formation2 = this.E_Data.Formation;
            }
            else
            {
                formation  = this.E_Data.Formation;
                formation2 = this.F_Data.Formation;
            }
            double formationParamF = this.formationData.GetFormationParamF2(FormationDatas.GetFormationKinds.MIDNIGHT, formation, formation2);

            num3 = num3 * this.spHitProbKeisu.get_Item(kind) * formationParamF;
            FatigueState fatigueState = atk_ship.Get_FatigueState();
            double       num5         = 1.0;

            if (fatigueState == FatigueState.Exaltation)
            {
                num5 = 1.2;
            }
            else if (fatigueState == FatigueState.Light)
            {
                num5 = 0.8;
            }
            else if (fatigueState == FatigueState.Distress)
            {
                num5 = 0.5;
            }
            num3 *= num5;
            if (atk_ship.Stype == 5 || atk_ship.Stype == 6)
            {
                int num6 = 0;
                if (atk_slot.Contains(Mst_DataManager.Instance.Mst_Slotitem.get_Item(6)))
                {
                    num6 = 10;
                }
                else if (atk_slot.Contains(Mst_DataManager.Instance.Mst_Slotitem.get_Item(50)))
                {
                    num6 = 15;
                }
                num3 += (double)num6;
            }
            if (deckSearchLight.get_Count() > 0)
            {
                num3 += 7.0;
            }
            num3 = this.getMidnightHitProbUpValue(num3, atk_ship, atk_slot);
            return((int)num3);
        }
Example #3
0
        private int getMidnightAttackValue(BattleAtackKinds_Night kind, Mem_ship atk_ship, List <Mst_slotitem> atk_slot, Mem_ship def_ship)
        {
            int        num = 300;
            List <int> list;

            if (atk_ship.IsEnemy())
            {
                int deckIdx = this.E_SubInfo.get_Item(atk_ship.Rid).DeckIdx;
                list = this.E_Data.SlotLevel.get_Item(deckIdx);
            }
            else
            {
                int deckIdx2 = this.F_SubInfo.get_Item(atk_ship.Rid).DeckIdx;
                list = this.F_Data.SlotLevel.get_Item(deckIdx2);
            }
            double num2 = 0.0;
            int    num3 = 0;

            using (var enumerator = Enumerable.Select(atk_slot, (Mst_slotitem obj, int idx) => new
            {
                obj,
                idx
            }).GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    var          current = enumerator.get_Current();
                    Mst_slotitem obj2    = current.obj;
                    if (base.IsAtapSlotItem(obj2.Api_mapbattle_type3))
                    {
                        num3++;
                    }
                    num2 += this.getSlotPlus_Attack(obj2, list.get_Item(current.idx));
                }
            }
            double num4 = atk_ship.IsEnemy() ? this.eValance1 : this.fValance1;
            bool   flag = Mst_DataManager.Instance.Mst_stype.get_Item(def_ship.Stype).IsLandFacillity(Mst_DataManager.Instance.Mst_ship.get_Item(def_ship.Ship_id).Soku);
            double num5;

            if (flag)
            {
                num5  = num4 + (double)atk_ship.Houg + num2;
                num5 *= this.getLandFacciilityKeisu(atk_slot);
                num5 += (double)base.getAtapKeisu(num3);
            }
            else
            {
                num5 = num4 + (double)atk_ship.Houg + (double)atk_ship.Raig + num2;
            }
            num5 *= this.spAttackKeisu.get_Item(kind);
            DamageState damageState = atk_ship.Get_DamageState();
            double      num6        = 1.0;

            if (damageState == DamageState.Tyuuha)
            {
                num6 = 0.7;
            }
            else if (damageState == DamageState.Taiha)
            {
                num6 = 0.4;
            }
            num5 *= num6;
            if (num5 > (double)num)
            {
                num5 = (double)num + Math.Sqrt(num5 - (double)num);
            }
            return((int)num5);
        }
Example #4
0
        private BattleAttackKind _convertAttackTypeEnum(BattleAtackKinds_Night kind)
        {
            string value = kind.ToString();

            return((BattleAttackKind)(int)Enum.Parse(typeof(BattleAttackKind), value));
        }
Example #5
0
        private int getMidnightHitProb(BattleAtackKinds_Night kind, Mem_ship atk_ship, List <Mst_slotitem> atk_slot, List <int> deckSearchLight)
        {
            List <int> list;

            if (atk_ship.IsEnemy())
            {
                int deckIdx = E_SubInfo[atk_ship.Rid].DeckIdx;
                list = E_Data.SlotLevel[deckIdx];
            }
            else
            {
                int deckIdx2 = F_SubInfo[atk_ship.Rid].DeckIdx;
                list = F_Data.SlotLevel[deckIdx2];
            }
            double num  = 0.0;
            int    num2 = 0;

            foreach (var item in atk_slot.Select((Mst_slotitem obj, int idx) => new
            {
                obj,
                idx
            }))
            {
                num2 += item.obj.Houm;
                num  += getSlotPlus_HitProb(item.obj, list[item.idx]);
            }
            double num3 = Math.Sqrt((double)atk_ship.GetBattleBaseParam().Luck * 1.5) + Math.Sqrt(atk_ship.Level) * 2.0 + (double)num2;
            double num4 = (!atk_ship.IsEnemy()) ? fValance2 : eValance2;

            num3 = num4 + num3;
            BattleFormationKinds1 formation;
            BattleFormationKinds1 formation2;

            if (!atk_ship.IsEnemy())
            {
                formation  = F_Data.Formation;
                formation2 = E_Data.Formation;
            }
            else
            {
                formation  = E_Data.Formation;
                formation2 = F_Data.Formation;
            }
            double formationParamF = formationData.GetFormationParamF2(FormationDatas.GetFormationKinds.MIDNIGHT, formation, formation2);

            num3 = num3 * spHitProbKeisu[kind] * formationParamF;
            FatigueState fatigueState = atk_ship.Get_FatigueState();
            double       num5         = 1.0;

            switch (fatigueState)
            {
            case FatigueState.Exaltation:
                num5 = 1.2;
                break;

            case FatigueState.Light:
                num5 = 0.8;
                break;

            case FatigueState.Distress:
                num5 = 0.5;
                break;
            }
            num3 *= num5;
            if (atk_ship.Stype == 5 || atk_ship.Stype == 6)
            {
                int num6 = 0;
                if (atk_slot.Contains(Mst_DataManager.Instance.Mst_Slotitem[6]))
                {
                    num6 = 10;
                }
                else if (atk_slot.Contains(Mst_DataManager.Instance.Mst_Slotitem[50]))
                {
                    num6 = 15;
                }
                num3 += (double)num6;
            }
            if (deckSearchLight.Count > 0)
            {
                num3 += 7.0;
            }
            num3 = getMidnightHitProbUpValue(num3, atk_ship, atk_slot);
            return((int)num3);
        }
Example #6
0
        private int getMidnightAttackValue(BattleAtackKinds_Night kind, Mem_ship atk_ship, List <Mst_slotitem> atk_slot, Mem_ship def_ship)
        {
            int        num = 300;
            List <int> list;

            if (atk_ship.IsEnemy())
            {
                int deckIdx = E_SubInfo[atk_ship.Rid].DeckIdx;
                list = E_Data.SlotLevel[deckIdx];
            }
            else
            {
                int deckIdx2 = F_SubInfo[atk_ship.Rid].DeckIdx;
                list = F_Data.SlotLevel[deckIdx2];
            }
            double num2 = 0.0;
            int    num3 = 0;

            foreach (var item in atk_slot.Select((Mst_slotitem obj, int idx) => new
            {
                obj,
                idx
            }))
            {
                Mst_slotitem obj2 = item.obj;
                if (IsAtapSlotItem(obj2.Api_mapbattle_type3))
                {
                    num3++;
                }
                num2 += getSlotPlus_Attack(obj2, list[item.idx]);
            }
            double num4 = atk_ship.IsEnemy() ? eValance1 : fValance1;
            double num5;

            if (Mst_DataManager.Instance.Mst_stype[def_ship.Stype].IsLandFacillity(Mst_DataManager.Instance.Mst_ship[def_ship.Ship_id].Soku))
            {
                num5  = num4 + (double)atk_ship.Houg + num2;
                num5 *= getLandFacciilityKeisu(atk_slot);
                num5 += (double)getAtapKeisu(num3);
            }
            else
            {
                num5 = num4 + (double)atk_ship.Houg + (double)atk_ship.Raig + num2;
            }
            num5 *= spAttackKeisu[kind];
            DamageState damageState = atk_ship.Get_DamageState();
            double      num6        = 1.0;

            switch (damageState)
            {
            case DamageState.Tyuuha:
                num6 = 0.7;
                break;

            case DamageState.Taiha:
                num6 = 0.4;
                break;
            }
            num5 *= num6;
            if (num5 > (double)num)
            {
                num5 = (double)num + Math.Sqrt(num5 - (double)num);
            }
            return((int)num5);
        }