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 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); }
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); }
private BattleAttackKind _convertAttackTypeEnum(BattleAtackKinds_Night kind) { string value = kind.ToString(); return((BattleAttackKind)(int)Enum.Parse(typeof(BattleAttackKind), value)); }
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); }
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); }