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(); }
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(); }
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); }
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); }
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); }
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); }
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; } } } }
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); }
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; } } }
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))); } } }
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); }
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); }
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); }
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); }