Exemple #1
0
        public PhaseFriendlyShelling(BattleData battle, string title)
            : base(battle, title)
        {
            if (!IsAvailable)
            {
                return;
            }

            // battle translation

            int[]      fleetflag           = (int[])ShellingData.api_at_eflag;
            int[]      attackers           = (int[])ShellingData.api_at_list;
            int[]      nightAirAttackFlags = (int[])ShellingData.api_n_mother_list;
            int[]      attackTypes         = (int[])ShellingData.api_sp_list;
            int[][]    defenders           = ((dynamic[])ShellingData.api_df_list).Select(elem => ((int[])elem).Where(e => e != -1).ToArray()).ToArray();
            int[][]    attackEquipments    = ((dynamic[])ShellingData.api_si_list).Select(elem => ((dynamic[])elem).Select <dynamic, int>(ch => ch is string?int.Parse(ch) : (int)ch).ToArray()).ToArray();
            int[][]    criticals           = ((dynamic[])ShellingData.api_cl_list).Select(elem => ((int[])elem).Where(e => e != -1).ToArray()).ToArray();
            double[][] rawDamages          = ((dynamic[])ShellingData.api_damage).Select(elem => ((double[])elem).Where(e => e != -1).ToArray()).ToArray();

            Attacks = new List <PhaseFriendlySupportAttack>();



            for (int i = 0; i < attackers.Length; i++)
            {
                var attack = new PhaseFriendlySupportAttack
                {
                    Attacker           = new BattleIndex(attackers[i] + (fleetflag[i] == 0 ? 0 : 12), false, Battle.IsEnemyCombined),
                    NightAirAttackFlag = nightAirAttackFlags[i] == -1,
                    AttackType         = attackTypes[i],
                    EquipmentIDs       = attackEquipments[i],
                };
                for (int k = 0; k < defenders[i].Length; k++)
                {
                    var defender = new PhaseFriendlySupportDefender
                    {
                        Defender     = new BattleIndex(defenders[i][k] + (fleetflag[i] == 0 ? 12 : 0), false, Battle.IsEnemyCombined),
                        CriticalFlag = criticals[i][k],
                        RawDamage    = rawDamages[i][k]
                    };
                    attack.Defenders.Add(defender);
                }

                Attacks.Add(attack);
            }
        }
Exemple #2
0
        public PhaseFriendlySupport(BattleData battle, string title)
            : base(battle, title)
        {
            if (!IsAvailable)
            {
                return;
            }

            // info translation

            int[] GetArrayOrDefault(string objectName, int length) => !InfoData.IsDefined(objectName) ? null : FixedArray((int[])InfoData[objectName], length);

            int[][] GetArraysOrDefault(string objectName, int topLength, int bottomLength)
            {
                if (!InfoData.IsDefined(objectName))
                {
                    return(null);
                }

                int[][]   ret = new int[topLength][];
                dynamic[] raw = (dynamic[])InfoData[objectName];
                for (int i = 0; i < ret.Length; i++)
                {
                    if (i < raw.Length)
                    {
                        ret[i] = FixedArray((int[])raw[i], bottomLength);
                    }
                    else
                    {
                        ret[i] = Enumerable.Repeat(-1, bottomLength).ToArray();
                    }
                }
                return(ret);
            }

            FriendlyMembers         = GetArrayOrDefault("api_ship_id", 7);
            FriendlyMembersInstance = FriendlyMembers.Select(id => KCDatabase.Instance.MasterShips[id]).ToArray();
            FriendlyLevels          = GetArrayOrDefault("api_ship_lv", 7);
            FriendlyInitialHPs      = GetArrayOrDefault("api_nowhps", 7);
            FriendlyMaxHPs          = GetArrayOrDefault("api_maxhps", 7);

            FriendlySlots      = GetArraysOrDefault("api_Slot", 7, 5);
            FriendlyParameters = GetArraysOrDefault("api_Param", 7, 4);


            // battle translation

            int[]      fleetflag           = (int[])ShellingData.api_at_eflag;
            int[]      attackers           = (int[])ShellingData.api_at_list;
            int[]      nightAirAttackFlags = (int[])ShellingData.api_n_mother_list;
            int[]      attackTypes         = (int[])ShellingData.api_sp_list;
            int[][]    defenders           = ((dynamic[])ShellingData.api_df_list).Select(elem => ((int[])elem).Where(e => e != -1).ToArray()).ToArray();
            int[][]    attackEquipments    = ((dynamic[])ShellingData.api_si_list).Select(elem => ((dynamic[])elem).Select <dynamic, int>(ch => ch is string?int.Parse(ch) : (int)ch).ToArray()).ToArray();
            int[][]    criticals           = ((dynamic[])ShellingData.api_cl_list).Select(elem => ((int[])elem).Where(e => e != -1).ToArray()).ToArray();
            double[][] rawDamages          = ((dynamic[])ShellingData.api_damage).Select(elem => ((double[])elem).Where(e => e != -1).ToArray()).ToArray();

            Attacks = new List <PhaseFriendlySupportAttack>();



            for (int i = 0; i < attackers.Length; i++)
            {
                var attack = new PhaseFriendlySupportAttack
                {
                    Attacker           = new BattleIndex(attackers[i] + (fleetflag[i] == 0 ? 0 : 12), false, Battle.IsEnemyCombined),
                    NightAirAttackFlag = nightAirAttackFlags[i] == -1,
                    AttackType         = attackTypes[i],
                    EquipmentIDs       = attackEquipments[i],
                };
                for (int k = 0; k < defenders[i].Length; k++)
                {
                    var defender = new PhaseFriendlySupportDefender
                    {
                        Defender     = new BattleIndex(defenders[i][k] + (fleetflag[i] == 0 ? 12 : 0), false, Battle.IsEnemyCombined),
                        CriticalFlag = criticals[i][k],
                        RawDamage    = rawDamages[i][k]
                    };
                    attack.Defenders.Add(defender);
                }

                Attacks.Add(attack);
            }
        }