private Dictionary <int, RadingKind> getRadingArea(IEnumerable <IGrouping <int, Mem_tanker> > tankerInfo, int radingType) { Mst_DataManager instance = Mst_DataManager.Instance; Dictionary <int, RadingKind> dictionary = new Dictionary <int, RadingKind>(); foreach (IGrouping <int, Mem_tanker> item in tankerInfo) { int key = item.Key; int sc = item.Count(); int req_tanker_num = instance.Mst_maparea[key].Req_tanker_num; List <Mem_ship> memShip = Comm_UserDatas.Instance.User_EscortDeck[key].Ship.getMemShip(); int ec = 0; int ad = 0; int ad2 = 0; memShip.ForEach(delegate(Mem_ship ship) { if (ship.IsEscortDeffender()) { ec++; } ad += ship.Taiku; ad2 += ship.Taisen; }); Mst_radingrate radingRecord = instance.Mst_RadingRate[key][radingType]; if (isRadingSubmarine(radingRecord, ec, ad2)) { dictionary.Add(key, RadingKind.SUBMARINE_ATTACK); } else if (isRadingAir(radingRecord, sc, ec, ad)) { dictionary.Add(key, RadingKind.AIR_ATTACK); } } return(dictionary); }
private bool isRadingAir(Mst_radingrate radingRecord, int sc, int ec, int ad1) { int air_rate = radingRecord.Air_rate; int air_karyoku = radingRecord.Air_karyoku; int num = air_rate + sc - ec * 3; double randDouble = Utils.GetRandDouble(1.0, 100.0 + Math.Sqrt((double)ad1), 1.0, 1); return((double)num > randDouble && (double)ec < Utils.GetRandDouble(1.0, 10.0, 1.0, 1)); }
private bool isRadingSubmarine(Mst_radingrate radingRecord, int ec, int ad2) { int submarine_rate = radingRecord.Submarine_rate; int submarine_karyoku = radingRecord.Submarine_karyoku; int num = submarine_rate - ec * 2; double randDouble = Utils.GetRandDouble(1.0, 100.0 + Math.Sqrt((double)ad2), 1.0, 1); return((double)num > randDouble && (double)ec < Utils.GetRandDouble(1.0, 10.0, 1.0, 1)); }
private Dictionary <int, RadingKind> getRadingArea(IEnumerable <IGrouping <int, Mem_tanker> > tankerInfo, int radingType) { Mst_DataManager instance = Mst_DataManager.Instance; Dictionary <int, RadingKind> dictionary = new Dictionary <int, RadingKind>(); using (IEnumerator <IGrouping <int, Mem_tanker> > enumerator = tankerInfo.GetEnumerator()) { while (enumerator.MoveNext()) { IGrouping <int, Mem_tanker> current = enumerator.get_Current(); int key = current.get_Key(); int sc = Enumerable.Count <Mem_tanker>(current); int req_tanker_num = instance.Mst_maparea.get_Item(key).Req_tanker_num; List <Mem_ship> memShip = Comm_UserDatas.Instance.User_EscortDeck.get_Item(key).Ship.getMemShip(); int ec = 0; int ad1 = 0; int ad2 = 0; memShip.ForEach(delegate(Mem_ship ship) { if (ship.IsEscortDeffender()) { ec++; } ad1 += ship.Taiku; ad2 += ship.Taisen; }); Mst_radingrate radingRecord = instance.Mst_RadingRate.get_Item(key).get_Item(radingType); if (this.isRadingSubmarine(radingRecord, ec, ad2)) { dictionary.Add(key, RadingKind.SUBMARINE_ATTACK); } else if (this.isRadingAir(radingRecord, sc, ec, ad1)) { dictionary.Add(key, RadingKind.AIR_ATTACK); } } } return(dictionary); }
private int getRadingTankerLostNum(RadingKind kind, List <Mem_ship> ships, int nowTankerNum, Mst_radingrate radingRecord) { int radingPow = radingRecord.GetRadingPow(kind); int num = Enumerable.Count <Mem_ship>(ships, (Mem_ship x) => x.IsEscortDeffender()); int num2 = 0; if (num == 0 || Utils.GetRandDouble(1.0, (double)(12 - num), 1.0, 1) >= 6.0) { if (num == 6) { double randDouble = Utils.GetRandDouble(0.0, Math.Sqrt((double)radingPow), 0.1, 1); num2 = (int)(randDouble + 0.5); } else if (num == 4 || num == 5) { double randDouble2 = Utils.GetRandDouble(0.0, Math.Sqrt((double)(radingPow / 2)), 0.1, 1); num2 = (int)(randDouble2 + 0.5); } else if (num >= 1 && num <= 3) { double randDouble3 = Utils.GetRandDouble(0.0, Math.Sqrt((double)radingPow), 0.1, 1); num2 = (int)(randDouble3 + 1.5); } else if (num == 0) { return(nowTankerNum); } } if (num2 > nowTankerNum) { return(nowTankerNum); } return(num2); }
private List <RadingDamageData> getRadingDamage(int area, RadingKind kind, Mst_radingrate rateRecord, List <Mem_ship> targetShips, out int deckPow, out List <Mem_ship> deleteShips) { List <Mem_ship> list = Enumerable.ToList <Mem_ship>(targetShips); int ec = 0; double ad1 = 0.0; double ad2 = 0.0; list.ForEach(delegate(Mem_ship ship) { if (ship.IsEscortDeffender()) { ec++; } Ship_GrowValues battleBaseParam = ship.GetBattleBaseParam(); int num11 = ship.Taiku - battleBaseParam.Taiku; ad1 = ad1 + Math.Sqrt((double)battleBaseParam.Taiku) + (double)num11; int num12 = ship.Taisen - battleBaseParam.Taisen; ad2 = ad2 + Math.Sqrt((double)battleBaseParam.Taisen) + (double)num12; }); int[] radingValues = rateRecord.GetRadingValues(kind); double num = (kind != RadingKind.AIR_ATTACK) ? ad2 : ad1; int num2 = radingValues[0]; int num3 = radingValues[1]; deckPow = (int)num; deleteShips = new List <Mem_ship>(); if (list.get_Count() == 0) { return(new List <RadingDamageData>()); } RadingResultData radingResultData = new RadingResultData(); radingResultData.DeckAttackPow = (int)num; double num4 = (double)num3 - Math.Sqrt((double)ec); int num5 = (num4 >= 1.0) ? ((int)Utils.GetRandDouble(0.0, num4, 0.1, 1)) : 0; List <RadingDamageData> list2 = new List <RadingDamageData>(); Dictionary <int, DamageState> dictionary = Enumerable.ToDictionary(Enumerable.Select(list, (Mem_ship x) => new { rid = x.Rid, state = x.Get_DamageState() }), key => key.rid, val => val.state); for (int i = 0; i < num5; i++) { if (list.get_Count() == 0) { return(list2); } RadingDamageData radingDamageData = new RadingDamageData(); double num6 = (double)(num3 * 5) - num / 5.0 - Math.Sqrt(num); int num7 = (int)Utils.GetRandDouble(0.0, (double)(list.get_Count() - 1), 1.0, 1); Mem_ship mem_ship = list.get_Item(num7); radingDamageData.Rid = mem_ship.Rid; if (num6 <= 0.0) { radingDamageData.Damage = false; radingDamageData.DamageState = DamagedStates.None; } else { int taik = Mst_DataManager.Instance.Mst_ship.get_Item(mem_ship.Ship_id).Taik; int num8 = (int)((double)taik * Utils.GetRandDouble(1.0, num6, 1.0, 1) / 100.0) + 1; int num9 = mem_ship.Nowhp - num8; if (num9 <= 0) { if (this.basicInstance.Difficult != DifficultKind.SHI) { num9 = 1; } else if (dictionary.get_Item(mem_ship.Rid) != DamageState.Taiha) { num9 = 1; } else { num9 = 0; } } int num10 = mem_ship.Nowhp - num9; if (num10 > 0) { DamageState damageState = mem_ship.Get_DamageState(); radingDamageData.Damage = true; if (num9 == 0) { int[] array = mem_ship.FindRecoveryItem(); if (array[0] == -1) { radingDamageData.DamageState = DamagedStates.Gekichin; list.Remove(mem_ship); deleteShips.Add(mem_ship); } else { mem_ship.SubHp(num10); mem_ship.UseRecoveryItem(array, false); radingDamageData.DamageState = ((array[1] != 43) ? DamagedStates.Youin : DamagedStates.Megami); dictionary.set_Item(mem_ship.Rid, DamageState.Normal); } } else { mem_ship.SubHp(num10); DamageState damageState2 = mem_ship.Get_DamageState(); if (damageState != damageState2) { if (damageState2 == DamageState.Taiha) { radingDamageData.DamageState = DamagedStates.Taiha; } else if (damageState2 == DamageState.Shouha) { radingDamageData.DamageState = DamagedStates.Shouha; } else if (damageState2 == DamageState.Tyuuha) { radingDamageData.DamageState = DamagedStates.Tyuuha; } } else { radingDamageData.DamageState = DamagedStates.None; } } } else { radingDamageData.Damage = false; radingDamageData.DamageState = DamagedStates.None; } } list2.Add(radingDamageData); } return(list2); }
private List <RadingResultData> getRadingResult(int radingPhase, Dictionary <int, RadingKind> targetArea, Dictionary <int, List <Mem_tanker> > tankers) { DifficultKind difficult = this.basicInstance.Difficult; List <RadingResultData> list = new List <RadingResultData>(); using (Dictionary <int, RadingKind> .Enumerator enumerator = targetArea.GetEnumerator()) { while (enumerator.MoveNext()) { KeyValuePair <int, RadingKind> current = enumerator.get_Current(); int key = current.get_Key(); List <Mem_tanker> list2 = tankers.get_Item(key); Mst_radingrate mst_radingrate = Mst_DataManager.Instance.Mst_RadingRate.get_Item(key).get_Item(radingPhase); int count = list2.get_Count(); List <Mem_ship> memShip = Comm_UserDatas.Instance.User_EscortDeck.get_Item(key).Ship.getMemShip(); RadingResultData radingResultData = new RadingResultData(); radingResultData.AreaId = key; radingResultData.AttackKind = current.get_Value(); radingResultData.BeforeNum = list2.get_Count(); List <Mem_ship> list3 = null; if (memShip.get_Count() > 0) { radingResultData.FlagShipMstId = memShip.get_Item(0).Ship_id; radingResultData.FlagShipDamageState = memShip.get_Item(0).Get_DamageState(); } radingResultData.RadingDamage = this.getRadingDamage(key, current.get_Value(), mst_radingrate, memShip, out radingResultData.DeckAttackPow, out list3); radingResultData.BreakNum = this.getRadingTankerLostNum(current.get_Value(), memShip, count, mst_radingrate); IEnumerable <Mem_tanker> enumerable = Enumerable.Take <Mem_tanker>(list2, radingResultData.BreakNum); if (radingResultData.RadingDamage.get_Count() > 0) { List <int> list4 = new List <int>(); using (List <Mem_ship> .Enumerator enumerator2 = memShip.GetEnumerator()) { Mem_ship checkShip; while (enumerator2.MoveNext()) { checkShip = enumerator2.get_Current(); if (Enumerable.Any <RadingDamageData>(radingResultData.RadingDamage, (RadingDamageData x) => x.Rid == checkShip.Rid && x.Damage) && checkShip.Get_DamageState() >= DamageState.Tyuuha) { list4.Add(checkShip.Ship_id); } } } Comm_UserDatas.Instance.UpdateShipBookBrokenClothState(list4); } using (List <Mem_ship> .Enumerator enumerator3 = list3.GetEnumerator()) { while (enumerator3.MoveNext()) { Mem_ship current2 = enumerator3.get_Current(); Comm_UserDatas.Instance.User_EscortDeck.get_Item(key).Ship.RemoveShip(current2.Rid); Comm_UserDatas.Instance.User_record.AddLostShipCount(); } } Comm_UserDatas.Instance.Remove_Ship(list3); using (IEnumerator <Mem_tanker> enumerator4 = enumerable.GetEnumerator()) { while (enumerator4.MoveNext()) { Mem_tanker current3 = enumerator4.get_Current(); Comm_UserDatas.Instance.Remove_Tanker(current3.Rid); } } if (radingResultData.BeforeNum > 0) { double num = (double)radingResultData.BreakNum / (double)radingResultData.BeforeNum; if (num >= 0.5) { int mapinfo_id = Mst_mapinfo.ConvertMapInfoId(key, 1); Mem_history mem_history = new Mem_history(); mem_history.SetTanker(this.turnInstance.Total_turn, mapinfo_id, num >= 1.0); Comm_UserDatas.Instance.Add_History(mem_history); } } list.Add(radingResultData); } } return(list); }
private int getRadingTankerLostNum(RadingKind kind, List <Mem_ship> ships, int nowTankerNum, Mst_radingrate radingRecord) { int radingPow = radingRecord.GetRadingPow(kind); int num = ships.Count((Mem_ship x) => x.IsEscortDeffender()); int num2 = 0; if (num == 0 || Utils.GetRandDouble(1.0, 12 - num, 1.0, 1) >= 6.0) { switch (num) { case 6: { double randDouble = Utils.GetRandDouble(0.0, Math.Sqrt(radingPow), 0.1, 1); num2 = (int)(randDouble + 0.5); break; } case 4: case 5: { double randDouble3 = Utils.GetRandDouble(0.0, Math.Sqrt(radingPow / 2), 0.1, 1); num2 = (int)(randDouble3 + 0.5); break; } case 1: case 2: case 3: { double randDouble2 = Utils.GetRandDouble(0.0, Math.Sqrt(radingPow), 0.1, 1); num2 = (int)(randDouble2 + 1.5); break; } default: if (num == 0) { return(nowTankerNum); } break; } } if (num2 > nowTankerNum) { return(nowTankerNum); } return(num2); }
private List <RadingDamageData> getRadingDamage(int area, RadingKind kind, Mst_radingrate rateRecord, List <Mem_ship> targetShips, out int deckPow, out List <Mem_ship> deleteShips) { List <Mem_ship> list = targetShips.ToList(); int ec = 0; double ad3 = 0.0; double ad2 = 0.0; list.ForEach(delegate(Mem_ship ship) { if (ship.IsEscortDeffender()) { ec++; } Ship_GrowValues battleBaseParam = ship.GetBattleBaseParam(); int num9 = ship.Taiku - battleBaseParam.Taiku; ad3 = ad3 + Math.Sqrt(battleBaseParam.Taiku) + (double)num9; int num10 = ship.Taisen - battleBaseParam.Taisen; ad2 = ad2 + Math.Sqrt(battleBaseParam.Taisen) + (double)num10; }); int[] radingValues = rateRecord.GetRadingValues(kind); double num = (kind != RadingKind.AIR_ATTACK) ? ad2 : ad3; int num11 = radingValues[0]; int num2 = radingValues[1]; deckPow = (int)num; deleteShips = new List <Mem_ship>(); if (list.Count == 0) { return(new List <RadingDamageData>()); } RadingResultData radingResultData = new RadingResultData(); radingResultData.DeckAttackPow = (int)num; double num3 = (double)num2 - Math.Sqrt(ec); int num4 = (!(num3 < 1.0)) ? ((int)Utils.GetRandDouble(0.0, num3, 0.1, 1)) : 0; List <RadingDamageData> list2 = new List <RadingDamageData>(); Dictionary <int, DamageState> dictionary = (from x in list select new { rid = x.Rid, state = x.Get_DamageState() }).ToDictionary(key => key.rid, val => val.state); for (int i = 0; i < num4; i++) { if (list.Count == 0) { return(list2); } RadingDamageData radingDamageData = new RadingDamageData(); double num5 = (double)(num2 * 5) - num / 5.0 - Math.Sqrt(num); int index = (int)Utils.GetRandDouble(0.0, list.Count - 1, 1.0, 1); Mem_ship mem_ship = list[index]; radingDamageData.Rid = mem_ship.Rid; if (num5 <= 0.0) { radingDamageData.Damage = false; radingDamageData.DamageState = DamagedStates.None; } else { int taik = Mst_DataManager.Instance.Mst_ship[mem_ship.Ship_id].Taik; int num6 = (int)((double)taik * Utils.GetRandDouble(1.0, num5, 1.0, 1) / 100.0) + 1; int num7 = mem_ship.Nowhp - num6; if (num7 <= 0) { num7 = ((basicInstance.Difficult != DifficultKind.SHI) ? 1 : ((dictionary[mem_ship.Rid] != DamageState.Taiha) ? 1 : 0)); } int num8 = mem_ship.Nowhp - num7; if (num8 > 0) { DamageState damageState = mem_ship.Get_DamageState(); radingDamageData.Damage = true; if (num7 == 0) { int[] array = mem_ship.FindRecoveryItem(); if (array[0] == -1) { radingDamageData.DamageState = DamagedStates.Gekichin; list.Remove(mem_ship); deleteShips.Add(mem_ship); } else { mem_ship.SubHp(num8); mem_ship.UseRecoveryItem(array, flagShipRecovery: false); radingDamageData.DamageState = ((array[1] != 43) ? DamagedStates.Youin : DamagedStates.Megami); dictionary[mem_ship.Rid] = DamageState.Normal; } } else { mem_ship.SubHp(num8); DamageState damageState2 = mem_ship.Get_DamageState(); if (damageState != damageState2) { switch (damageState2) { case DamageState.Taiha: radingDamageData.DamageState = DamagedStates.Taiha; break; case DamageState.Shouha: radingDamageData.DamageState = DamagedStates.Shouha; break; case DamageState.Tyuuha: radingDamageData.DamageState = DamagedStates.Tyuuha; break; } } else { radingDamageData.DamageState = DamagedStates.None; } } } else { radingDamageData.Damage = false; radingDamageData.DamageState = DamagedStates.None; } } list2.Add(radingDamageData); } return(list2); }
private List <RadingResultData> getRadingResult(int radingPhase, Dictionary <int, RadingKind> targetArea, Dictionary <int, List <Mem_tanker> > tankers) { DifficultKind difficult = basicInstance.Difficult; List <RadingResultData> list = new List <RadingResultData>(); foreach (KeyValuePair <int, RadingKind> item in targetArea) { int key = item.Key; List <Mem_tanker> list2 = tankers[key]; Mst_radingrate mst_radingrate = Mst_DataManager.Instance.Mst_RadingRate[key][radingPhase]; int count = list2.Count; List <Mem_ship> memShip = Comm_UserDatas.Instance.User_EscortDeck[key].Ship.getMemShip(); RadingResultData radingResultData = new RadingResultData(); radingResultData.AreaId = key; radingResultData.AttackKind = item.Value; radingResultData.BeforeNum = list2.Count; List <Mem_ship> deleteShips = null; if (memShip.Count > 0) { radingResultData.FlagShipMstId = memShip[0].Ship_id; radingResultData.FlagShipDamageState = memShip[0].Get_DamageState(); } radingResultData.RadingDamage = getRadingDamage(key, item.Value, mst_radingrate, memShip, out radingResultData.DeckAttackPow, out deleteShips); radingResultData.BreakNum = getRadingTankerLostNum(item.Value, memShip, count, mst_radingrate); IEnumerable <Mem_tanker> enumerable = list2.Take(radingResultData.BreakNum); if (radingResultData.RadingDamage.Count > 0) { List <int> list3 = new List <int>(); using (List <Mem_ship> .Enumerator enumerator2 = memShip.GetEnumerator()) { Mem_ship checkShip; while (enumerator2.MoveNext()) { checkShip = enumerator2.Current; if (radingResultData.RadingDamage.Any((RadingDamageData x) => x.Rid == checkShip.Rid && x.Damage) && checkShip.Get_DamageState() >= DamageState.Tyuuha) { list3.Add(checkShip.Ship_id); } } } Comm_UserDatas.Instance.UpdateShipBookBrokenClothState(list3); } foreach (Mem_ship item2 in deleteShips) { Comm_UserDatas.Instance.User_EscortDeck[key].Ship.RemoveShip(item2.Rid); Comm_UserDatas.Instance.User_record.AddLostShipCount(); } Comm_UserDatas.Instance.Remove_Ship(deleteShips); foreach (Mem_tanker item3 in enumerable) { Comm_UserDatas.Instance.Remove_Tanker(item3.Rid); } if (radingResultData.BeforeNum > 0) { double num = (double)radingResultData.BreakNum / (double)radingResultData.BeforeNum; if (num >= 0.5) { int mapinfo_id = Mst_mapinfo.ConvertMapInfoId(key, 1); Mem_history mem_history = new Mem_history(); mem_history.SetTanker(turnInstance.Total_turn, mapinfo_id, (num >= 1.0) ? true : false); Comm_UserDatas.Instance.Add_History(mem_history); } } list.Add(radingResultData); } return(list); }