protected int getBattleAvo(FormationDatas.GetFormationKinds battleState, Mem_ship targetShip) { double num = (double)targetShip.Kaihi + Math.Sqrt(targetShip.GetBattleBaseParam().Luck * 2); BattleFormationKinds1 formation; if (!targetShip.IsEnemy()) { formation = F_Data.Formation; BattleFormationKinds2 battleFormation = F_Data.BattleFormation; BattleFormationKinds1 formation2 = E_Data.Formation; } else { formation = E_Data.Formation; BattleFormationKinds2 battleFormation2 = E_Data.BattleFormation; BattleFormationKinds1 formation3 = F_Data.Formation; } num *= formationData.GetFormationParamF3(battleState, formation); double num2 = (int)num; if (num2 >= 65.0) { double num3 = 55.0 + Math.Sqrt(num2 - 65.0) * 2.0; num2 = (int)num3; } else if (num2 >= 40.0) { double num4 = 40.0 + Math.Sqrt(num2 - 40.0) * 3.0; num2 = (int)num4; } num2 += getAvoHosei(targetShip); if (!targetShip.IsEnemy() && commandParams != null) { double num5 = (double)commandParams.Rspp / 100.0; double num6 = num2 * num5; num2 += num6; } int num7 = 100; double num8 = Mst_DataManager.Instance.Mst_ship[targetShip.Ship_id].Fuel_max; if (num8 != 0.0) { num7 = (int)((double)targetShip.Fuel / num8 * 100.0); } if (num7 < 75) { num2 -= (double)(75 - num7); } return((int)num2); }
protected override double getAvoHosei(Mem_ship target) { List <Mst_slotitem> source; List <int> list; if (target.IsEnemy()) { int deckIdx = E_SubInfo[target.Rid].DeckIdx; source = E_Data.SlotData[deckIdx]; list = E_Data.SlotLevel[deckIdx]; } else { int deckIdx2 = F_SubInfo[target.Rid].DeckIdx; source = F_Data.SlotData[deckIdx2]; list = F_Data.SlotLevel[deckIdx2]; } double num = 0.0; foreach (var item in source.Select((Mst_slotitem obj, int idx) => new { obj, idx })) { if (item.obj.Api_mapbattle_type3 == 14 || item.obj.Api_mapbattle_type3 == 40) { num += Math.Sqrt(list[item.idx]) * 1.5; } } return(num); }
protected virtual int setDamageValue(BattleHitStatus hitType, int atkPow, int defPow, Mem_ship attacker, Mem_ship target, List <bool> lostFlag) { switch (hitType) { case BattleHitStatus.Miss: return(0); case BattleHitStatus.Clitical: atkPow = (int)((double)atkPow * 1.5); break; } double num = (double)atkPow - ((double)defPow * 0.7 + (double)randInstance.Next(defPow) * 0.6); double num2 = 100.0; double num3 = Mst_DataManager.Instance.Mst_ship[attacker.Ship_id].Bull_max; if (num3 != 0.0) { num2 = (double)attacker.Bull / num3 * 100.0; } if (num2 < 50.0) { num = Math.Floor(num * num2 / 50.0); } int num4 = (int)num; BattleShipSubInfo battleShipSubInfo; int deckIdx; if (attacker.IsEnemy()) { battleShipSubInfo = E_SubInfo[attacker.Rid]; int deckIdx2 = battleShipSubInfo.DeckIdx; deckIdx = F_SubInfo[target.Rid].DeckIdx; } else { battleShipSubInfo = F_SubInfo[attacker.Rid]; int deckIdx3 = battleShipSubInfo.DeckIdx; deckIdx = E_SubInfo[target.Rid].DeckIdx; } if (num4 < 1) { int num5 = randInstance.Next(target.Nowhp); num4 = (int)((double)target.Nowhp * 0.06 + (double)num5 * 0.08); } if (num4 >= target.Nowhp && !target.IsEnemy() && deckIdx == 0) { num4 = (int)((double)target.Nowhp * 0.5 + (double)randInstance.Next(target.Nowhp) * 0.3); } if (lostFlag != null && num4 >= target.Nowhp && !lostFlag[deckIdx]) { num4 = target.Nowhp - 1; } double lovHoseiDamageKeisu = getLovHoseiDamageKeisu(target, num4); num4 = (int)((double)num4 * lovHoseiDamageKeisu); battleShipSubInfo.TotalDamage += num4; target.SubHp(num4); return(num4); }
protected virtual int getRaigAttackValue(Mem_ship atk_ship, List <Mst_slotitem> atk_slot, Mem_ship def_ship) { int num = 150; BattleFormationKinds1 formation; BattleFormationKinds2 battleFormation; List <int> list; if (!atk_ship.IsEnemy()) { formation = this.F_Data.Formation; battleFormation = this.F_Data.BattleFormation; list = this.F_Data.SlotLevel.get_Item(this.F_SubInfo.get_Item(atk_ship.Rid).DeckIdx); BattleFormationKinds1 formation2 = this.E_Data.Formation; } else { formation = this.E_Data.Formation; battleFormation = this.E_Data.BattleFormation; list = this.E_Data.SlotLevel.get_Item(this.E_SubInfo.get_Item(atk_ship.Rid).DeckIdx); BattleFormationKinds1 formation2 = this.F_Data.Formation; } double num2 = 0.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 += this.getSlotPlus_Attack(current.obj, list.get_Item(current.idx)); } } double num3 = this.valance1 + (double)atk_ship.Raig + num2; double formationParamBattle = this.formationData.GetFormationParamBattle(FormationDatas.GetFormationKinds.RAIGEKI, battleFormation); double formationParamF = this.formationData.GetFormationParamF1(FormationDatas.GetFormationKinds.RAIGEKI, formation); num3 = num3 * formationParamBattle * formationParamF; DamageState damageState = atk_ship.Get_DamageState(); double num4 = 1.0; if (damageState == DamageState.Tyuuha) { num4 = 0.8; } else if (damageState == DamageState.Taiha) { num4 = 0.0; } num3 *= num4; if (num3 > (double)num) { num3 = (double)num + Math.Sqrt(num3 - (double)num); } return((int)num3); }
protected virtual int getRaigAttackValue(Mem_ship atk_ship, List <Mst_slotitem> atk_slot, Mem_ship def_ship) { int num = 150; BattleFormationKinds1 formation; BattleFormationKinds2 battleFormation; List <int> list; if (!atk_ship.IsEnemy()) { formation = F_Data.Formation; battleFormation = F_Data.BattleFormation; list = F_Data.SlotLevel[F_SubInfo[atk_ship.Rid].DeckIdx]; BattleFormationKinds1 formation2 = E_Data.Formation; } else { formation = E_Data.Formation; battleFormation = E_Data.BattleFormation; list = E_Data.SlotLevel[E_SubInfo[atk_ship.Rid].DeckIdx]; BattleFormationKinds1 formation3 = F_Data.Formation; } double num2 = 0.0; foreach (var item in atk_slot.Select((Mst_slotitem obj, int idx) => new { obj, idx })) { num2 += getSlotPlus_Attack(item.obj, list[item.idx]); } double num3 = valance1 + (double)atk_ship.Raig + num2; double formationParamBattle = formationData.GetFormationParamBattle(FormationDatas.GetFormationKinds.RAIGEKI, battleFormation); double formationParamF = formationData.GetFormationParamF1(FormationDatas.GetFormationKinds.RAIGEKI, formation); num3 = num3 * formationParamBattle * formationParamF; DamageState damageState = atk_ship.Get_DamageState(); double num4 = 1.0; switch (damageState) { case DamageState.Tyuuha: num4 = 0.8; break; case DamageState.Taiha: num4 = 0.0; break; } num3 *= num4; if (num3 > (double)num) { num3 = (double)num + Math.Sqrt(num3 - (double)num); } return((int)num3); }
protected override int getRaigHitProb(Mem_ship atk_ship, List <Mst_slotitem> atk_slot, int atk_pow) { int num = 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(); num += current.obj.Houm; } } double num2 = Math.Sqrt((double)atk_ship.GetBattleBaseParam().Luck * 1.5) + Math.Sqrt((double)atk_ship.Level) * 2.0 + (double)num; num2 += (double)((int)((double)atk_pow * 0.35)); num2 = this.valance2 + num2; 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.RAIGEKI, formation, formation2); num2 *= formationParamF; FatigueState fatigueState = atk_ship.Get_FatigueState(); double num3 = 1.0; if (fatigueState == FatigueState.Exaltation) { num3 = 1.3; } else if (fatigueState == FatigueState.Light) { num3 = 0.7; } else if (fatigueState == FatigueState.Distress) { num3 = 0.35; } num2 *= num3; return((int)num2); }
protected override int getRaigHitProb(Mem_ship atk_ship, List <Mst_slotitem> atk_slot, int atk_pow) { int num = 0; foreach (var item in atk_slot.Select((Mst_slotitem obj, int idx) => new { obj, idx })) { num += item.obj.Houm; } double num2 = Math.Sqrt((double)atk_ship.GetBattleBaseParam().Luck * 1.5) + Math.Sqrt(atk_ship.Level) * 2.0 + (double)num; num2 += (double)(int)((double)atk_pow * 0.35); num2 = valance2 + num2; 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.RAIGEKI, formation, formation2); num2 *= formationParamF; FatigueState fatigueState = atk_ship.Get_FatigueState(); double num3 = 1.0; switch (fatigueState) { case FatigueState.Exaltation: num3 = 1.3; break; case FatigueState.Light: num3 = 0.7; break; case FatigueState.Distress: num3 = 0.35; break; } num2 *= num3; return((int)num2); }
private bool isValidRaigeki(Mem_ship ship, List <Mst_slotitem> slotitems) { if (ship.Get_DamageState() > DamageState.Shouha || !ship.IsFight()) { return(false); } if (ship.GetBattleBaseParam().Raig <= 0) { return(false); } if (!ship.IsEnemy() || practiceFlag) { if (ship.Level >= 10 && Mst_DataManager.Instance.Mst_stype[ship.Stype].IsSubmarine()) { return(true); } if (slotitems == null || slotitems.Count == 0) { return(false); } Mst_slotitem item = Mst_DataManager.Instance.Mst_Slotitem[41]; if (slotitems.Contains(item)) { return(true); } return(false); } if (Mst_DataManager.Instance.Mst_stype[ship.Stype].IsSubmarine()) { Mst_ship mst_ship = Mst_DataManager.Instance.Mst_ship[ship.Ship_id]; return((mst_ship.Yomi.Equals("flagship") || mst_ship.Yomi.Equals("elite")) ? true : false); } if (slotitems == null || slotitems.Count == 0) { return(false); } Mst_slotitem item2 = Mst_DataManager.Instance.Mst_Slotitem[541]; if (slotitems.Contains(item2)) { return(true); } return(false); }
private double getLovHoseiDamageKeisu(Mem_ship targetShip, int damage) { if (targetShip.IsEnemy()) { return(1.0); } double randDouble = Utils.GetRandDouble(1.0, 100.0, 1.0, 1); DamageState damageState = targetShip.Get_DamageState(); DamageState damageState2 = Mem_ship.Get_DamageState(targetShip.Nowhp - damage, targetShip.Maxhp); if (targetShip.Lov >= 330) { if (randDouble <= 70.0) { if (damageState == DamageState.Normal && damageState2 == DamageState.Tyuuha) { return(0.5); } if (damageState == DamageState.Normal && damageState2 == DamageState.Taiha) { return(0.5); } } return(1.0); } if (targetShip.Lov >= 200) { if (randDouble <= 60.0 && damageState == DamageState.Normal && damageState2 == DamageState.Taiha) { return(0.55); } return(1.0); } if (targetShip.Lov >= 100) { if (randDouble <= 50.0 && damageState == DamageState.Normal && damageState2 == DamageState.Taiha) { return(0.6); } return(1.0); } return(1.0); }
protected override int getRaigAttackValue(Mem_ship atk_ship, List <Mst_slotitem> atk_slot, Mem_ship def_ship) { int num = 150; double num2 = valance1 + (double)atk_ship.Raig; BattleFormationKinds1 formation; BattleFormationKinds2 battleFormation; if (!atk_ship.IsEnemy()) { formation = F_Data.Formation; battleFormation = F_Data.BattleFormation; BattleFormationKinds1 formation2 = E_Data.Formation; } else { formation = E_Data.Formation; battleFormation = E_Data.BattleFormation; BattleFormationKinds1 formation3 = F_Data.Formation; } double formationParamBattle = formationData.GetFormationParamBattle(FormationDatas.GetFormationKinds.RAIGEKI, battleFormation); double formationParamF = formationData.GetFormationParamF1(FormationDatas.GetFormationKinds.RAIGEKI, formation); num2 = num2 * formationParamBattle * formationParamF; DamageState damageState = atk_ship.Get_DamageState(); double num3 = 1.0; switch (damageState) { case DamageState.Tyuuha: num3 = 0.8; break; case DamageState.Taiha: num3 = 0.0; break; } num2 *= num3; if (num2 > (double)num) { num2 = (double)num + Math.Sqrt(num2 - (double)num); } return((int)num2); }
protected bool IsAirAttackGroup(Mem_ship ship, List <Mst_slotitem> slotData, BattleCommand command) { if (Mst_DataManager.Instance.Mst_stype[ship.Stype].IsMother() || Mst_DataManager.Instance.Mst_stype[ship.Stype].IsLandFacillity(Mst_DataManager.Instance.Mst_ship[ship.Ship_id].Soku)) { return(true); } if (ship.Stype == 22) { if (ship.IsEnemy()) { return(slotData.Any((Mst_slotitem x) => x.Api_mapbattle_type3 == 7 || x.Api_mapbattle_type3 == 8)); } if (command == BattleCommand.Kouku) { return(true); } } return(false); }
private double getShipTaikuPow(Mem_ship shipData, List <Mst_slotitem> mst_slotData, List <int> slotLevels) { double num; if (shipData.IsEnemy()) { num = Math.Sqrt(shipData.Taiku); } else { Ship_GrowValues battleBaseParam = shipData.GetBattleBaseParam(); num = (double)battleBaseParam.Taiku * 0.5; } double num2 = 0.0; double num3 = 0.0; for (int i = 0; i < mst_slotData.Count; i++) { Mst_slotitem mst_slotitem = mst_slotData[i]; if (mst_slotitem.Tyku > 0) { int slotLevel = slotLevels[i]; if (mst_slotitem.Type4 == 16 || mst_slotitem.Type4 == 30) { double a1Plus = getA1Plus(1, mst_slotitem.Tyku, slotLevel); num3 += a1Plus; num2 += (double)mst_slotitem.Tyku * 2.0; } else if (mst_slotitem.Type4 == 15) { double a1Plus2 = getA1Plus(2, mst_slotitem.Tyku, slotLevel); num3 += a1Plus2; num2 += (double)mst_slotitem.Tyku * 3.0; } else if (mst_slotitem.Type4 == 11) { num2 += (double)mst_slotitem.Tyku * 1.5; } } } return(num + num2 + num3); }
protected virtual KeyValuePair <int, int> getSubMarineAtackKeisu(List <Mem_ship> targetShips, Mem_ship attacker, List <Mst_slotitem> attacker_items, bool midnight) { if (!targetShips.Any((Mem_ship x) => x.IsFight() && Mst_DataManager.Instance.Mst_stype[x.Stype].IsSubmarine())) { return(new KeyValuePair <int, int>(0, 0)); } if (!practiceFlag && attacker.IsEnemy() && attacker.Stype == 7) { string yomi = Mst_DataManager.Instance.Mst_ship[attacker.Ship_id].Yomi; if (!yomi.Equals("flagship")) { return(new KeyValuePair <int, int>(0, 0)); } } if (!midnight && attacker.Ship_id == 352) { DamageState damageState = attacker.Get_DamageState(); if (isHaveSubmarineAirPlane(attacker_items, attacker.Onslot) && damageState <= DamageState.Tyuuha) { return(new KeyValuePair <int, int>(2, 5)); } } if (attacker.GetBattleBaseParam().Taisen > 0) { return(new KeyValuePair <int, int>(1, 10)); } HashSet <int> hashSet = new HashSet <int>(); hashSet.Add(6); hashSet.Add(7); hashSet.Add(10); hashSet.Add(16); hashSet.Add(17); HashSet <int> hashSet2 = hashSet; if (!midnight && hashSet2.Contains(attacker.Stype) && attacker_items.Count > 0 && isHaveSubmarineAirPlane(attacker_items, attacker.Onslot)) { return(new KeyValuePair <int, int>(2, 5)); } return(new KeyValuePair <int, int>(0, 0)); }
private bool isValidRaigeki(Mem_ship ship, List <Mst_slotitem> slotitems) { if (ship.Get_DamageState() > DamageState.Shouha || !ship.IsFight()) { return(false); } if (ship.GetBattleBaseParam().Raig <= 0) { return(false); } if (!ship.IsEnemy() || this.practiceFlag) { if (ship.Level >= 10 && Mst_DataManager.Instance.Mst_stype.get_Item(ship.Stype).IsSubmarine()) { return(true); } if (slotitems == null || slotitems.get_Count() == 0) { return(false); } Mst_slotitem mst_slotitem = Mst_DataManager.Instance.Mst_Slotitem.get_Item(41); return(slotitems.Contains(mst_slotitem)); } else { if (Mst_DataManager.Instance.Mst_stype.get_Item(ship.Stype).IsSubmarine()) { Mst_ship mst_ship = Mst_DataManager.Instance.Mst_ship.get_Item(ship.Ship_id); return(mst_ship.Yomi.Equals("flagship") || mst_ship.Yomi.Equals("elite")); } if (slotitems == null || slotitems.get_Count() == 0) { return(false); } Mst_slotitem mst_slotitem2 = Mst_DataManager.Instance.Mst_Slotitem.get_Item(541); return(slotitems.Contains(mst_slotitem2)); } }
protected override double getAvoHosei(Mem_ship target) { List <Mst_slotitem> list; List <int> list2; if (target.IsEnemy()) { int deckIdx = this.E_SubInfo.get_Item(target.Rid).DeckIdx; list = this.E_Data.SlotData.get_Item(deckIdx); list2 = this.E_Data.SlotLevel.get_Item(deckIdx); } else { int deckIdx2 = this.F_SubInfo.get_Item(target.Rid).DeckIdx; list = this.F_Data.SlotData.get_Item(deckIdx2); list2 = this.F_Data.SlotLevel.get_Item(deckIdx2); } double num = 0.0; using (var enumerator = Enumerable.Select(list, (Mst_slotitem obj, int idx) => new { obj, idx }).GetEnumerator()) { while (enumerator.MoveNext()) { var current = enumerator.get_Current(); if (current.obj.Api_mapbattle_type3 == 14 || current.obj.Api_mapbattle_type3 == 40) { num += Math.Sqrt((double)list2.get_Item(current.idx)) * 1.5; } } } return(num); }
public BattleShipFmt(Mem_ship ship) { this.Id = ship.Rid; this.ShipId = ship.Ship_id; this.Level = ship.Level; this.NowHp = ship.Nowhp; this.MaxHp = ship.Maxhp; this.BattleParam = ship.GetBattleBaseParam().Copy(); this.EscapeFlag = ship.Escape_sts; this.Slot = new List <int>(); if (!ship.IsEnemy()) { ship.Slot.ForEach(delegate(int x) { int num = -1; if (Comm_UserDatas.Instance.User_slot.ContainsKey(x)) { num = Comm_UserDatas.Instance.User_slot.get_Item(x).Slotitem_id; } this.Slot.Add(num); }); } else { ship.Slot.ForEach(delegate(int x) { this.Slot.Add(x); }); } Mst_slotitem mstSlotItemToExSlot = ship.GetMstSlotItemToExSlot(); if (mstSlotItemToExSlot != null) { this.ExSlot = mstSlotItemToExSlot.Id; } }
public BattleShipFmt(Mem_ship ship) { Id = ship.Rid; ShipId = ship.Ship_id; Level = ship.Level; NowHp = ship.Nowhp; MaxHp = ship.Maxhp; BattleParam = ship.GetBattleBaseParam().Copy(); EscapeFlag = ship.Escape_sts; Slot = new List <int>(); if (!ship.IsEnemy()) { ship.Slot.ForEach(delegate(int x) { int item = -1; if (Comm_UserDatas.Instance.User_slot.ContainsKey(x)) { item = Comm_UserDatas.Instance.User_slot[x].Slotitem_id; } Slot.Add(item); }); } else { ship.Slot.ForEach(delegate(int x) { Slot.Add(x); }); } Mst_slotitem mstSlotItemToExSlot = ship.GetMstSlotItemToExSlot(); if (mstSlotItemToExSlot != null) { ExSlot = mstSlotItemToExSlot.Id; } }
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 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); }
protected Mem_ship getAtackTarget(Mem_ship attacker, List <Mem_ship> targetShips, bool overKill, bool subMarineFlag, bool rescueFlag, ref BattleDamageKinds dKind) { Dictionary <int, Mst_stype> stypes = Mst_DataManager.Instance.Mst_stype; IEnumerable <Mem_ship> enumerable; if (!overKill) { enumerable = Enumerable.Select(Enumerable.Where(Enumerable.Select(targetShips, (Mem_ship target) => new { target = target, submarineCheck = (subMarineFlag == stypes.get_Item(target.Stype).IsSubmarine()) }), <> __TranspIdent7 => < > __TranspIdent7.target.IsFight() && < > __TranspIdent7.submarineCheck), <> __TranspIdent7 => < > __TranspIdent7.target); } else { enumerable = Enumerable.Select(Enumerable.Where(Enumerable.Select(targetShips, (Mem_ship target) => new { target = target, submarineCheck = (subMarineFlag == stypes.get_Item(target.Stype).IsSubmarine()) }), <> __TranspIdent8 => ! < > __TranspIdent8.target.Escape_sts && < > __TranspIdent8.submarineCheck), <> __TranspIdent8 => < > __TranspIdent8.target); } dKind = BattleDamageKinds.Normal; if (enumerable == null || Enumerable.Count <Mem_ship>(enumerable) == 0) { return(null); } if (Enumerable.Count <Mem_ship>(enumerable) == 1) { return(Enumerable.First <Mem_ship>(enumerable)); } List <Mem_ship> list; if (attacker.IsEnemy()) { list = this.targetFillter(this.E_SubInfo.get_Item(attacker.Rid).DeckIdx, enumerable, this.F_SubInfo); } else { list = this.targetFillter(this.F_SubInfo.get_Item(attacker.Rid).DeckIdx, enumerable, this.E_SubInfo); } Mem_ship mem_ship; if (list.get_Count() == 0) { mem_ship = Enumerable.First <Mem_ship>(Enumerable.OrderBy <Mem_ship, Guid>(Enumerable.ToArray <Mem_ship>(enumerable), (Mem_ship x) => Guid.NewGuid())); } else { mem_ship = Enumerable.First <Mem_ship>(Enumerable.OrderBy <Mem_ship, Guid>(list, (Mem_ship x) => Guid.NewGuid())); } if (Enumerable.Count <Mem_ship>(enumerable) <= 1) { return(mem_ship); } Mem_ship flagShip = (!attacker.IsEnemy()) ? this.E_Data.ShipData.get_Item(0) : this.F_Data.ShipData.get_Item(0); if (!rescueFlag || mem_ship.Rid != flagShip.Rid) { return(mem_ship); } Dictionary <int, Mst_ship> mShipDict = Mst_DataManager.Instance.Mst_ship; Dictionary <int, Mst_stype> mStypeDict = Mst_DataManager.Instance.Mst_stype; if (mStypeDict.get_Item(mem_ship.Stype).IsLandFacillity(mShipDict.get_Item(mem_ship.Ship_id).Soku)) { return(mem_ship); } IEnumerable <Mem_ship> enumerable2 = Enumerable.Select(Enumerable.Where(Enumerable.Where(Enumerable.Where(Enumerable.Select(Enumerable.Select(enumerable, (Mem_ship re_target) => new { re_target = re_target, mShipObj = mShipDict.get_Item(re_target.Ship_id) }), <> __TranspIdent9 => new {
protected override int getHougAttackValue(BattleAtackKinds_Day kind, Mem_ship atk_ship, List <Mst_slotitem> atk_slot, Mem_ship def_ship, int tekkouKind) { int num = 150; int num2 = 0; int num3 = 0; foreach (var item in atk_slot.Select((Mst_slotitem obj, int idx) => new { obj, idx })) { num2 += item.obj.Baku; num3 += item.obj.Raig; } double num4 = valance1 + (double)atk_ship.Houg; if (Mst_DataManager.Instance.Mst_stype[def_ship.Stype].IsLandFacillity(Mst_DataManager.Instance.Mst_ship[def_ship.Ship_id].Soku)) { num4 *= getLandFacciilityKeisu(atk_slot); num3 = 0; } if (kind == BattleAtackKinds_Day.AirAttack) { int airAtackPow = getAirAtackPow(num2, num3); num4 += (double)airAtackPow; num4 = 25.0 + (double)(int)(num4 * 1.5); } BattleFormationKinds1 formation; BattleFormationKinds2 battleFormation; if (!atk_ship.IsEnemy()) { formation = F_Data.Formation; battleFormation = F_Data.BattleFormation; BattleFormationKinds1 formation2 = E_Data.Formation; } else { formation = E_Data.Formation; battleFormation = E_Data.BattleFormation; BattleFormationKinds1 formation3 = F_Data.Formation; } double formationParamBattle = formationData.GetFormationParamBattle(FormationDatas.GetFormationKinds.HOUGEKI, battleFormation); double formationParamF = formationData.GetFormationParamF1(FormationDatas.GetFormationKinds.HOUGEKI, formation); num4 = num4 * formationParamBattle * formationParamF; DamageState damageState = atk_ship.Get_DamageState(); double num5 = 1.0; switch (damageState) { case DamageState.Tyuuha: num5 = 0.7; break; case DamageState.Taiha: num5 = 0.4; break; } num4 *= num5; if (num4 > (double)num) { num4 = (double)num + Math.Sqrt(num4 - (double)num); } return((int)num4); }
protected KeyValuePair <BattleAtackKinds_Day, List <int> > getSpAttackKind(Mem_ship ship, List <Mst_slotitem> slotitems) { if (slotitems.Count == 0) { return(new KeyValuePair <BattleAtackKinds_Day, List <int> >(BattleAtackKinds_Day.Normal, new List <int> { 0 })); } BattleAtackKinds_Day battleAtackKinds_Day = BattleAtackKinds_Day.Normal; List <int> ret_slotitem = new List <int>(); Func <List <Mst_slotitem>, KeyValuePair <BattleAtackKinds_Day, List <int> > > func = delegate(List <Mst_slotitem> x) { int hougSlotData = getHougSlotData(x); ret_slotitem.Add(hougSlotData); return(new KeyValuePair <BattleAtackKinds_Day, List <int> >(BattleAtackKinds_Day.Normal, ret_slotitem)); }; int num; BattleBaseData battleBaseData; Dictionary <int, BattleShipSubInfo> dictionary; if (ship.IsEnemy()) { num = seikuValue[1]; battleBaseData = E_Data; dictionary = E_SubInfo; } else { num = seikuValue[0]; battleBaseData = F_Data; dictionary = F_SubInfo; } if (num <= 1) { return(func(slotitems)); } if (ship.Get_DamageState() >= DamageState.Taiha) { return(func(slotitems)); } Dictionary <int, List <Mst_slotitem> > dictionary2 = new Dictionary <int, List <Mst_slotitem> >(); dictionary2.Add(1, new List <Mst_slotitem>()); dictionary2.Add(12, new List <Mst_slotitem>()); dictionary2.Add(10, new List <Mst_slotitem>()); dictionary2.Add(19, new List <Mst_slotitem>()); dictionary2.Add(4, new List <Mst_slotitem>()); Dictionary <int, List <Mst_slotitem> > dictionary3 = dictionary2; double num2 = 0.0; foreach (var item in slotitems.Select((Mst_slotitem obj, int idx) => new { obj, idx })) { int api_mapbattle_type = item.obj.Api_mapbattle_type3; num2 += (double)item.obj.Saku; switch (api_mapbattle_type) { case 1: case 2: case 3: dictionary3[1].Add(item.obj); continue; case 12: case 13: dictionary3[12].Add(item.obj); continue; case 10: case 11: if (ship.Onslot[item.idx] > 0) { dictionary3[10].Add(item.obj); continue; } break; } if (api_mapbattle_type == 19 || api_mapbattle_type == 4) { dictionary3[api_mapbattle_type].Add(item.obj); } } if (dictionary3[10].Count == 0 || dictionary3[1].Count == 0) { return(func(slotitems)); } double num3 = 0.0; foreach (var item2 in battleBaseData.ShipData.Select((Mem_ship obj, int ship_idx) => new { obj, ship_idx })) { if (item2.obj.IsFight()) { num3 += (double)item2.obj.GetBattleBaseParam().Sakuteki; List <Mst_slotitem> list = battleBaseData.SlotData[item2.ship_idx]; if (list.Count != 0) { foreach (var item3 in list.Select((Mst_slotitem obj, int slot_idx) => new { obj, slot_idx })) { int num4 = item2.obj.Onslot[item3.slot_idx]; if ((item3.obj.Api_mapbattle_type3 == 10 || item3.obj.Api_mapbattle_type3 == 11) && num4 > 0) { int num5 = item3.obj.Saku * (int)Math.Sqrt(num4); num3 += (double)num5; } } } } } double num6 = (int)(Math.Sqrt(num3) + num3 * 0.1); int num7 = (int)(Math.Sqrt(ship.GetBattleBaseParam().Luck) + 10.0); switch (num) { case 3: num7 = (int)((double)num7 + 10.0 + (num6 + num2 * 1.6) * 0.7); break; case 2: num7 = (int)((double)num7 + (num6 + num2 * 1.2) * 0.6); break; } if (dictionary[ship.Rid].DeckIdx == 0) { num7 += 15; } Dictionary <BattleAtackKinds_Day, int> dictionary4 = new Dictionary <BattleAtackKinds_Day, int>(); dictionary4.Add(BattleAtackKinds_Day.Sp4, 150); dictionary4.Add(BattleAtackKinds_Day.Sp3, 140); dictionary4.Add(BattleAtackKinds_Day.Sp2, 130); dictionary4.Add(BattleAtackKinds_Day.Sp1, 120); dictionary4.Add(BattleAtackKinds_Day.Renzoku, 130); Dictionary <BattleAtackKinds_Day, int> dictionary5 = dictionary4; if (dictionary3[1].Count >= 2 && dictionary3[19].Count >= 1 && num7 > randInstance.Next(dictionary5[BattleAtackKinds_Day.Sp4])) { ret_slotitem.Add(dictionary3[10][0].Id); ret_slotitem.Add(dictionary3[1][0].Id); ret_slotitem.Add(dictionary3[1][1].Id); battleAtackKinds_Day = BattleAtackKinds_Day.Sp4; } else if (dictionary3[4].Count >= 1 && dictionary3[19].Count >= 1 && num7 > randInstance.Next(dictionary5[BattleAtackKinds_Day.Sp3])) { ret_slotitem.Add(dictionary3[10][0].Id); ret_slotitem.Add(dictionary3[1][0].Id); ret_slotitem.Add(dictionary3[19][0].Id); battleAtackKinds_Day = BattleAtackKinds_Day.Sp3; } else if (dictionary3[4].Count >= 1 && dictionary3[12].Count >= 1 && num7 > randInstance.Next(dictionary5[BattleAtackKinds_Day.Sp2])) { ret_slotitem.Add(dictionary3[10][0].Id); ret_slotitem.Add(dictionary3[12][0].Id); ret_slotitem.Add(dictionary3[1][0].Id); battleAtackKinds_Day = BattleAtackKinds_Day.Sp2; } else if (dictionary3[4].Count >= 1 && num7 > randInstance.Next(dictionary5[BattleAtackKinds_Day.Sp1])) { ret_slotitem.Add(dictionary3[10][0].Id); ret_slotitem.Add(dictionary3[1][0].Id); ret_slotitem.Add(dictionary3[4][0].Id); battleAtackKinds_Day = BattleAtackKinds_Day.Sp1; } else if (dictionary3[1].Count >= 2 && num7 > randInstance.Next(dictionary5[BattleAtackKinds_Day.Renzoku])) { ret_slotitem.Add(dictionary3[1][0].Id); ret_slotitem.Add(dictionary3[1][1].Id); battleAtackKinds_Day = BattleAtackKinds_Day.Renzoku; } if (battleAtackKinds_Day == BattleAtackKinds_Day.Normal) { return(func(slotitems)); } return(new KeyValuePair <BattleAtackKinds_Day, List <int> >(battleAtackKinds_Day, ret_slotitem)); }
protected virtual int getHougHitProb(BattleAtackKinds_Day kind, Mem_ship atk_ship, List <Mst_slotitem> atk_slot, int tekkouKind) { double num = 0.0; BattleFormationKinds1 formation; BattleFormationKinds1 formation2; List <int> list; if (!atk_ship.IsEnemy()) { formation = F_Data.Formation; formation2 = E_Data.Formation; int deckIdx = F_SubInfo[atk_ship.Rid].DeckIdx; list = F_Data.SlotLevel[deckIdx]; num = (double)commandParams.Fspp / 100.0; } else { formation = E_Data.Formation; formation2 = F_Data.Formation; int deckIdx2 = E_SubInfo[atk_ship.Rid].DeckIdx; list = E_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 })) { num3 += item.obj.Houm; num2 += getHougSlotPlus_Hit(item.obj, list[item.idx]); } double num4 = Math.Sqrt((double)atk_ship.GetBattleBaseParam().Luck * 1.5) + Math.Sqrt(atk_ship.Level) * 2.0 + (double)num3; double num5 = valance2 + num4 + num2; double formationParamF = formationData.GetFormationParamF2(FormationDatas.GetFormationKinds.HOUGEKI, formation, formation2); num5 *= formationParamF; FatigueState fatigueState = atk_ship.Get_FatigueState(); double num6 = 1.0; switch (fatigueState) { case FatigueState.Exaltation: num6 = 1.2; break; case FatigueState.Light: num6 = 0.8; break; case FatigueState.Distress: num6 = 0.5; break; } num5 *= num6; num5 = getHougHitProbUpValue(num5, atk_ship, atk_slot); Dictionary <BattleAtackKinds_Day, double> dictionary = new Dictionary <BattleAtackKinds_Day, double>(); dictionary.Add(BattleAtackKinds_Day.Renzoku, 1.1); dictionary.Add(BattleAtackKinds_Day.Sp1, 1.3); dictionary.Add(BattleAtackKinds_Day.Sp2, 1.5); dictionary.Add(BattleAtackKinds_Day.Sp3, 1.3); dictionary.Add(BattleAtackKinds_Day.Sp4, 1.2); Dictionary <BattleAtackKinds_Day, double> dictionary2 = dictionary; if (dictionary2.ContainsKey(kind)) { num5 *= dictionary2[kind]; } num5 *= getTekkouKeisu_Hit(tekkouKind); double num7 = num5 * num; num5 += num7; return((int)num5); }
protected virtual int battleTaiku(List <Mem_ship> taikuHaveShip, int deckTyku, AirFireInfo antifire) { IEnumerable <KeyValuePair <Mem_ship, List <FighterInfo> > > enumerable; Dictionary <int, int[]> slotExperience; List <Mem_ship> shipData; List <List <Mst_slotitem> > slotData; List <List <int> > slotLevel; double num; if (taikuHaveShip[0].IsEnemy()) { enumerable = from item in e_FighterInfo where taikuHaveShip.Contains(item.Key) select item; slotExperience = E_Data.SlotExperience; shipData = F_Data.ShipData; slotData = F_Data.SlotData; slotLevel = F_Data.SlotLevel; num = 0.75; } else { enumerable = from item in f_FighterInfo where taikuHaveShip.Contains(item.Key) select item; slotExperience = F_Data.SlotExperience; shipData = E_Data.ShipData; slotData = E_Data.SlotData; slotLevel = E_Data.SlotLevel; num = 0.8; } int num2 = 0; IEnumerable <Mem_ship> enumerable2 = from x in shipData where x.IsFight() select x; if (enumerable2 == null || enumerable2.Count() == 0) { return(num2); } foreach (KeyValuePair <Mem_ship, List <FighterInfo> > item in enumerable) { Mem_ship key = item.Key; foreach (FighterInfo item2 in item.Value) { if (key.Onslot[item2.SlotIdx] > 0 && item2.ValidTaiku()) { Mem_ship taikuShip = (from x in enumerable2 orderby Guid.NewGuid() select x).First(); int index = shipData.FindIndex((Mem_ship x) => x.Rid == taikuShip.Rid); double shipTaikuPow = getShipTaikuPow(taikuShip, slotData[index], slotLevel[index]); double num3 = valance1; double num4 = (shipTaikuPow + (double)deckTyku) * num3 * num; double[] antifireParam = getAntifireParam(antifire); if (antifire == null && taikuShip.IsEnemy()) { antifireParam[0] = 0.0; } int num5 = (int)(num4 * (double)randInstance.Next(2) * antifireParam[2] + antifireParam[0]); int num6 = (int)((double)key.Onslot[item2.SlotIdx] * 0.02 * shipTaikuPow * num3 * (double)randInstance.Next(2) + antifireParam[1]); int num7 = num5 + num6; if (num7 > key.Onslot[item2.SlotIdx]) { num7 = key.Onslot[item2.SlotIdx]; } int[] value = null; if (slotExperience.TryGetValue(key.Slot[item2.SlotIdx], out value)) { int slotExpSubValueToTaiku = getSlotExpSubValueToTaiku(key.Onslot[item2.SlotIdx], num7, value[0]); value[1] += slotExpSubValueToTaiku; } List <int> onslot; List <int> list = onslot = key.Onslot; int slotIdx; int index2 = slotIdx = item2.SlotIdx; slotIdx = onslot[slotIdx]; list[index2] = slotIdx - num7; num2 += num7; } } } return(num2); }
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); }
protected virtual int getRaigHitProb(Mem_ship atk_ship, List <Mst_slotitem> atk_slot, int atk_pow) { double num = 0.0; List <int> list; BattleFormationKinds1 formation; BattleFormationKinds1 formation2; if (!atk_ship.IsEnemy()) { list = F_Data.SlotLevel[F_SubInfo[atk_ship.Rid].DeckIdx]; formation = F_Data.Formation; formation2 = E_Data.Formation; num = (double)commandParams.Tspp / 100.0; } else { list = E_Data.SlotLevel[E_SubInfo[atk_ship.Rid].DeckIdx]; formation = E_Data.Formation; formation2 = F_Data.Formation; } double num2 = 0.0; int num3 = 0; foreach (var item in atk_slot.Select((Mst_slotitem obj, int idx) => new { obj, idx })) { num3 += item.obj.Houm; num2 += getSlotPlus_HitProb(item.obj, list[item.idx]); } int raim = Mst_DataManager.Instance.Mst_ship[atk_ship.Ship_id].Raim; double num4 = Math.Sqrt((double)atk_ship.GetBattleBaseParam().Luck * 1.5) + Math.Sqrt(atk_ship.Level) * 2.0 + (double)num3; num4 = num4 + (double)(int)((double)atk_pow * 0.2) + (double)raim; num4 = valance2 + num4 + num2; double formationParamF = formationData.GetFormationParamF2(FormationDatas.GetFormationKinds.RAIGEKI, formation, formation2); num4 *= formationParamF; FatigueState fatigueState = atk_ship.Get_FatigueState(); double num5 = 1.0; switch (fatigueState) { case FatigueState.Exaltation: num5 = 1.3; break; case FatigueState.Light: num5 = 0.7; break; case FatigueState.Distress: num5 = 0.35; break; } num4 *= num5; double num6 = num4 * num; num4 += num6; return((int)num4); }
protected override int getHougAttackValue(BattleAtackKinds_Day kind, Mem_ship atk_ship, List <Mst_slotitem> atk_slot, Mem_ship def_ship, int tekkouKind) { int num = 150; int num2 = 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(); num2 += current.obj.Baku; num3 += current.obj.Raig; } } double num4 = this.valance1 + (double)atk_ship.Houg; 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); if (flag) { num4 *= this.getLandFacciilityKeisu(atk_slot); num3 = 0; } if (kind == BattleAtackKinds_Day.AirAttack) { int airAtackPow = this.getAirAtackPow(num2, num3); num4 += (double)airAtackPow; num4 = 25.0 + (double)((int)(num4 * 1.5)); } BattleFormationKinds1 formation; BattleFormationKinds2 battleFormation; if (!atk_ship.IsEnemy()) { formation = this.F_Data.Formation; battleFormation = this.F_Data.BattleFormation; BattleFormationKinds1 formation2 = this.E_Data.Formation; } else { formation = this.E_Data.Formation; battleFormation = this.E_Data.BattleFormation; BattleFormationKinds1 formation2 = this.F_Data.Formation; } double formationParamBattle = this.formationData.GetFormationParamBattle(FormationDatas.GetFormationKinds.HOUGEKI, battleFormation); double formationParamF = this.formationData.GetFormationParamF1(FormationDatas.GetFormationKinds.HOUGEKI, formation); num4 = num4 * formationParamBattle * formationParamF; DamageState damageState = atk_ship.Get_DamageState(); double num5 = 1.0; if (damageState == DamageState.Tyuuha) { num5 = 0.7; } else if (damageState == DamageState.Taiha) { num5 = 0.4; } num4 *= num5; if (num4 > (double)num) { num4 = (double)num + Math.Sqrt(num4 - (double)num); } return((int)num4); }
protected virtual int getHougAttackValue(BattleAtackKinds_Day kind, Mem_ship atk_ship, List <Mst_slotitem> atk_slot, Mem_ship def_ship, int tekkouKind) { int num = 150; List <int> list; BattleFormationKinds1 formation; BattleFormationKinds2 battleFormation; if (atk_ship.IsEnemy()) { int deckIdx = E_SubInfo[atk_ship.Rid].DeckIdx; list = E_Data.SlotLevel[deckIdx]; formation = E_Data.Formation; battleFormation = E_Data.BattleFormation; BattleFormationKinds1 formation2 = F_Data.Formation; } else { int deckIdx2 = F_SubInfo[atk_ship.Rid].DeckIdx; list = F_Data.SlotLevel[deckIdx2]; formation = F_Data.Formation; battleFormation = F_Data.BattleFormation; BattleFormationKinds1 formation3 = E_Data.Formation; } double num2 = 0.0; int num3 = 0; int num4 = 0; int num5 = 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)) { num5++; } num3 += obj2.Baku; num4 += obj2.Raig; num2 += getHougSlotPlus_Attack(obj2, list[item.idx]); } double num6 = valance1 + (double)atk_ship.Houg + num2; if (Mst_DataManager.Instance.Mst_stype[def_ship.Stype].IsLandFacillity(Mst_DataManager.Instance.Mst_ship[def_ship.Ship_id].Soku)) { num6 *= getLandFacciilityKeisu(atk_slot); num6 += (double)getAtapKeisu(num5); num4 = 0; } if (kind == BattleAtackKinds_Day.AirAttack) { int airAtackPow = getAirAtackPow(num3, num4); num6 += (double)airAtackPow; num6 = 25.0 + (double)(int)(num6 * 1.5); } double formationParamBattle = formationData.GetFormationParamBattle(FormationDatas.GetFormationKinds.HOUGEKI, battleFormation); double formationParamF = formationData.GetFormationParamF1(FormationDatas.GetFormationKinds.HOUGEKI, formation); num6 = num6 * formationParamBattle * formationParamF; DamageState damageState = atk_ship.Get_DamageState(); double num7 = 1.0; switch (damageState) { case DamageState.Tyuuha: num7 = 0.7; break; case DamageState.Taiha: num7 = 0.4; break; } num6 *= num7; num6 += getHougItemAtackHosei(atk_ship, atk_slot); if (num6 > (double)num) { num6 = (double)num + Math.Sqrt(num6 - (double)num); } Dictionary <BattleAtackKinds_Day, double> dictionary = new Dictionary <BattleAtackKinds_Day, double>(); dictionary.Add(BattleAtackKinds_Day.Renzoku, 1.2); dictionary.Add(BattleAtackKinds_Day.Sp1, 1.1); dictionary.Add(BattleAtackKinds_Day.Sp2, 1.2); dictionary.Add(BattleAtackKinds_Day.Sp3, 1.3); dictionary.Add(BattleAtackKinds_Day.Sp4, 1.5); Dictionary <BattleAtackKinds_Day, double> dictionary2 = dictionary; if (dictionary2.ContainsKey(kind)) { num6 *= dictionary2[kind]; } num6 *= getTekkouKeisu_Attack(tekkouKind); return((int)num6); }