public PhaseFriendlySupportInfo(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); FriendlyExpansionSlots = GetArrayOrDefault("api_slot_ex", 7); FriendlyParameters = GetArraysOrDefault("api_Param", 7, 4); }
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); } }