public TurnResultModel GetResult_Turn() { bool arg_13_1 = false; List <TurnState> list = new List <TurnState>(); list.Add(TurnState.TURN_END); TurnWorkResult turnWorkResult = this._PhaseEnd(arg_13_1, list); if (turnWorkResult == null) { return(null); } TurnResultModel turnResultModel = new TurnResultModel(turnWorkResult); if (turnResultModel.RadingResult == null) { return(turnResultModel); } for (int i = 0; i < turnResultModel.RadingResult.get_Count(); i++) { RadingResultData radingResultData = turnResultModel.RadingResult.get_Item(i); if (radingResultData.RadingDamage != null) { List <int> list2 = radingResultData.RadingDamage.FindAll((RadingDamageData item) => item.DamageState == DamagedStates.Gekichin).ConvertAll <int>((RadingDamageData item) => item.Rid); if (list2.get_Count() > 0) { base.UserInfo.__RemoveGekichinShips__(list2); base.UserInfo.__UpdateEscortDeck__(new Api_get_Member()); break; } } } return(turnResultModel); }
public override string ToString() { string text = string.Format("[ターン終了フェーズ]: \n", new object[0]); text += string.Format("=通商破壊=\n", new object[0]); if (this.RadingResult == null) { text += "なし"; } else { for (int i = 0; i < this.RadingResult.get_Count(); i++) { RadingResultData radingResultData = this.RadingResult.get_Item(i); text += string.Format("[通商破壊結果]\n海域{0} 攻撃種別:{1} 輸送船{2}隻(移動中の船を除く)から{3}隻ロスト\n", new object[] { radingResultData.AreaId, radingResultData.AttackKind, radingResultData.BeforeNum, radingResultData.BreakNum }); text += string.Format("海上護衛艦隊の対潜/対空能力:{0}\n", radingResultData.DeckAttackPow); for (int j = 0; j < radingResultData.RadingDamage.get_Count(); j++) { text += string.Format("\t海上護衛艦隊(MemId:{0})は{1}のダメージ({2})", radingResultData.RadingDamage.get_Item(j).Rid, radingResultData.RadingDamage.get_Item(j).Damage, radingResultData.RadingDamage.get_Item(j).DamageState); } } } return(text); }
public TurnResultModel GetResult_Turn() { TurnWorkResult turnWorkResult = _PhaseEnd(force: false, new List <TurnState> { TurnState.TURN_END }); if (turnWorkResult == null) { return(null); } TurnResultModel turnResultModel = new TurnResultModel(turnWorkResult); if (turnResultModel.RadingResult == null) { return(turnResultModel); } for (int i = 0; i < turnResultModel.RadingResult.Count; i++) { RadingResultData radingResultData = turnResultModel.RadingResult[i]; if (radingResultData.RadingDamage != null) { List <int> list = radingResultData.RadingDamage.FindAll((RadingDamageData item) => item.DamageState == DamagedStates.Gekichin).ConvertAll((RadingDamageData item) => item.Rid); if (list.Count > 0) { base.UserInfo.__RemoveGekichinShips__(list); base.UserInfo.__UpdateEscortDeck__(new Api_get_Member()); break; } } } return(turnResultModel); }
public void Initialize(RadingResultData radingData, MapAreaModel m) { this.hukidashi.Init(); TweenAlpha tweenAlpha = TweenAlpha.Begin(base.get_gameObject(), 0.2f, 1f); tweenAlpha.onFinished.Clear(); this.RadingData = radingData; int beforeNum = radingData.BeforeNum; int tanker_count = radingData.BeforeNum - radingData.BreakNum; Debug.Log(m); Debug.Log(m.GetEscortDeck()); if (radingData.FlagShipMstId != 0) { bool isDamaged = radingData.FlagShipDamageState == DamageState.Taiha || radingData.FlagShipDamageState == DamageState.Tyuuha; this.friendly.UnloadTexture(); this.DelayActionFrame(1, delegate { this.friendly.SetTexture(ShipUtils.LoadTexture(m.GetEscortDeck().GetFlagShip(), isDamaged)); }); } if (radingData.AttackKind == RadingKind.AIR_ATTACK) { this.enemy.UnloadTexture(); this.DelayActionFrame(1, delegate { this.enemy.SetTexture(ShipUtils.LoadTexture(512, 9)); }); } else { this.enemy.UnloadTexture(); this.DelayActionFrame(1, delegate { this.enemy.SetTexture(ShipUtils.LoadTexture(530, 9)); }); } this.tot = beforeNum; this.cnt = tanker_count; this.resFrom = new int[4]; this.resFrom[0] = m.GetResources(beforeNum).get_Item(enumMaterialCategory.Fuel); this.resFrom[1] = m.GetResources(beforeNum).get_Item(enumMaterialCategory.Bull); this.resFrom[2] = m.GetResources(beforeNum).get_Item(enumMaterialCategory.Steel); this.resFrom[3] = m.GetResources(beforeNum).get_Item(enumMaterialCategory.Bauxite); this.resTo = new int[4]; this.resTo[0] = m.GetResources(tanker_count).get_Item(enumMaterialCategory.Fuel); this.resTo[1] = m.GetResources(tanker_count).get_Item(enumMaterialCategory.Bull); this.resTo[2] = m.GetResources(tanker_count).get_Item(enumMaterialCategory.Steel); this.resTo[3] = m.GetResources(tanker_count).get_Item(enumMaterialCategory.Bauxite); for (int i = 0; i < 4; i++) { this.downTexts[i].text = " ×" + Convert.ToString(this.resFrom[i]); } }
public void Initialize(RadingResultData d, MapAreaModel m, bool isFirst) { if (d == null) { this.isFinished = true; return; } this.curTile = d.AreaId - 1; this.taa.SetActive(true); this.tileAnimInstance.SetActive(true); this.taa.Initialize(d, m); StrategyTopTaskManager.Instance.GetInfoMng().MoveScreenOut(delegate { StrategyTopTaskManager.Instance.UIModel.MapCamera.MoveToTargetTile(d.AreaId, false); this.StartAnimation(m.GetEscortDeck().GetFlagShip() != null, d.AttackKind, isFirst); }, true, true); }
public override string ToString() { string str = $"[タ\u30fcン終了フェ\u30fcズ]: \n"; str += $"=通商破壊=\n"; if (RadingResult == null) { str += "なし"; } else { for (int i = 0; i < RadingResult.Count; i++) { RadingResultData radingResultData = RadingResult[i]; str += $"[通商破壊結果]\n海域{radingResultData.AreaId} 攻撃種別:{radingResultData.AttackKind} 輸送船{radingResultData.BeforeNum}隻(移動中の船を除く)から{radingResultData.BreakNum}隻ロスト\n"; str += $"海上護衛艦隊の対潜/対空能力:{radingResultData.DeckAttackPow}\n"; for (int j = 0; j < radingResultData.RadingDamage.Count; j++) { str += $"\t海上護衛艦隊(MemId:{radingResultData.RadingDamage[j].Rid})は{radingResultData.RadingDamage[j].Damage}のダメ\u30fcジ({radingResultData.RadingDamage[j].DamageState})"; } } } return(str); }
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 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); }