using System.Collections.Generic; using Core.Language; using Excel2Json; using Fort23.Core; using Fort23.UTool; using GameLogic.Combat; using GameLogic.Hero; using UnityEngine; using UnityEngine.UI; namespace Fort23.Mono { [UIBinding(prefab = "HeroBreakthroughPanel")] public partial class HeroBreakthroughPanel : UIPanel { HeroPowerUpConfig heroPowerUpConfig; List breakthroughItemWidgets = new List(); private HeroInfo heroInfo = new HeroInfo(); private void Init() { } protected override void AddEvent() { EventManager.Instance.AddEventListener(CustomEventType.RefenceBreakthrough, RefenceBreakthrough); } private void RefenceBreakthrough(IEventData e) { RefenceSuccessProbability(); } protected override void DelEvent() { EventManager.Instance.RemoveEventListener(CustomEventType.RefenceBreakthrough, RefenceBreakthrough); } public override void AddButtonEvent() { Btn_Close.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); }); Btn_Cancel.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); }); Btn_Affirm.onClick.AddListener(async () => { if (PlayerManager.Instance.myHero.heroData.exp + HeroHerlp.GetHeroExp() < PlayerManager.Instance.myHero.powerUpConfig.levelUpExp) { return; } if (heroPowerUpConfig.DujieLevelbattleID != -1 && !PlayerManager.Instance.myHero.heroData.isCombat) { TipMessagePanel tipMessage = await TipMessagePanel.OpenTipMessagePanel("没有破除心魔"); return; } for (var i = 0; i < PlayerManager.Instance.myHero.powerUpConfig.DujieMustItemIDs.Length; i++) { bool isHave = false; for (var i1 = 1; i1 < breakthroughItemWidgets.Count; i1++) { if (breakthroughItemWidgets[i1].itemInfo != null && PlayerManager.Instance.myHero.powerUpConfig.DujieMustItemIDs[i] == breakthroughItemWidgets[i1].itemInfo.itemID) { isHave = true; } } if (!isHave) { ItemConfig itemConfig = ConfigComponent.Instance.Get(PlayerManager.Instance.myHero.powerUpConfig.DujieMustItemIDs[i]); string tips = "缺少" + LanguageManager.Instance.Text(itemConfig.itemName); TipMessagePanel tipMessage = await TipMessagePanel.OpenTipMessagePanel(tips); return; } } //扣除道具 foreach (var breakthroughItemWidget in breakthroughItemWidgets) { if (breakthroughItemWidget.itemInfo != null) { if (!PlayerManager.Instance.BagController.DeductItem(breakthroughItemWidget.itemInfo.itemID, 1)) { TipMessagePanel tipMessage = await TipMessagePanel.OpenTipMessagePanel("道具不足!"); return; } } } var list = GetBl(); int ramdomValue = Random.Range(1, 101); //突破成功 if (ramdomValue < list[0]) { bool isTuPoSuccess = true; if (PlayerManager.Instance.myHero.powerUpConfig.jingjie1 != heroInfo.powerUpConfig.jingjie1) { if (PlayerManager.Instance.myHero.powerUpConfig.LeijieDamages != null && PlayerManager.Instance.myHero.powerUpConfig.LeijieDamages.Length > 1) { ramdomValue = Random.Range(PlayerManager.Instance.myHero.powerUpConfig.LeijieDamages[0], PlayerManager.Instance.myHero.powerUpConfig.LeijieDamages[1]); //渡劫失败 if (ramdomValue >= PlayerManager.Instance.myHero.hp.Value) { isTuPoSuccess = false; RemoveHeroItem(list[1]); TipMessagePanel tipMessage = await TipMessagePanel.OpenTipMessagePanel("雷劫失败"); await tipMessage.UIClosed(); } } } if (isTuPoSuccess) { await UpHero(); } } //失败 else { RemoveHeroItem(list[1]); TipMessagePanel tipMessage = await TipMessagePanel.OpenTipMessagePanel("突破失败"); await tipMessage.UIClosed(); } UIManager.Instance.HideUIUIPanel(this); }); Btn_StartCombat.onClick.AddListener(() => { if (PlayerManager.Instance.myHero.heroData.isCombat) return; UIManager.Instance.HindCurrAllShowPanel(); CombatDrive.Instance.LoadLevelBattleCombat(heroPowerUpConfig.DujieLevelbattleID, delegate(bool isWin) { LogTool.Log("战斗完成" + isWin); if (isWin) { PlayerManager.Instance.myHero.heroData.isCombat = true; AccountFileInfo.Instance.SavePlayerData(); Btn_StartCombat.gameObject.SetActive(false); CombatTrue.gameObject.SetActive(true); RefenceSuccessProbability(); UIManager.Instance.ShowLastHindAllShowPanel(); } }); }); } private void RemoveHeroItem(int failBl) { //扣除失败后的经验 float failbl = failBl == 0 ? PlayerManager.Instance.myHero.powerUpConfig.FailureExpReduce : (float)(PlayerManager.Instance.myHero.powerUpConfig.FailureExpReduce * failBl * 0.01f); int failXw = (int)(PlayerManager.Instance.myHero.powerUpConfig.levelUpExp * failbl * 0.01f); int allexp = HeroHerlp.GetHeroExp(); PlayerManager.Instance.myHero.heroData.exp += allexp; PlayerManager.Instance.myHero.heroData.exp -= failXw; PlayerManager.Instance.myHero.heroData.upTime = TimeHelper.ClientNow(); PlayerManager.Instance.myHero.heroData.isCombat = false; AccountFileInfo.Instance.SavePlayerData(); } private async CTask UpHero() { var heroAttributData = HeroHerlp.GetHeroChageHeroAttributeData(PlayerManager.Instance.myHero, heroInfo); PlayerManager.Instance.myHero.Upgrade(); HeroBreakthroughSuccessPanel heroBreakthroughSuccessPanel = await HeroBreakthroughSuccessPanel.OpenPanel(heroAttributData); await heroBreakthroughSuccessPanel.UIClosed(); } public async CTask CustomInit() { heroPowerUpConfig = PlayerManager.Instance.myHero.powerUpConfig; heroInfo.InitHero(PlayerManager.Instance.myHero.heroData.heroModelId, PlayerManager.Instance.myHero.heroData.heroPowerId + 1); Text_CurrrentJIngjie.text = LanguageManager.Instance.Text(heroPowerUpConfig.jingjieLanIDs[0]) + LanguageManager.Instance.Text(heroPowerUpConfig.jingjieLanIDs[1]) + LanguageManager.Instance.Text(heroPowerUpConfig.jingjieLanIDs[2]); Text_NextJinfjie.text = LanguageManager.Instance.Text(heroInfo.powerUpConfig.jingjieLanIDs[0]) + LanguageManager.Instance.Text(heroInfo.powerUpConfig.jingjieLanIDs[1]) + LanguageManager.Instance.Text(heroInfo.powerUpConfig.jingjieLanIDs[2]); if (heroPowerUpConfig.jingjie1 != heroInfo.powerUpConfig.jingjie1) { Text_TitleName.text = "渡劫"; Text_Affirm.text = "逆天而行"; Text_AffirmTips.text = "是否确认渡劫"; if (heroPowerUpConfig.LeijieDamages != null && heroPowerUpConfig.LeijieDamages.Length > 1) { LeiJieRooot.gameObject.SetActive(true); Text_LeiJieHarm.text = $"{heroPowerUpConfig.LeijieDamages[0]}-{heroPowerUpConfig.LeijieDamages[1]}"; Text_HeroHp.text = PlayerManager.Instance.myHero.hp.Value.ToString(); if (PlayerManager.Instance.myHero.hp.Value < heroPowerUpConfig.LeijieDamages[0]) { Text_HeroHp.color = Color.red; } else { Text_HeroHp.color = Color.black; } } else { LeiJieRooot.gameObject.SetActive(false); } } else { Text_AffirmTips.text = "是否确认突破"; Text_Affirm.text = "突破"; Text_TitleName.text = "突破"; LeiJieRooot.gameObject.SetActive(false); } if (heroPowerUpConfig.DujieLevelbattleID != -1) { CombatRoot.gameObject.SetActive(true); if (PlayerManager.Instance.myHero.heroData.isCombat) { Btn_StartCombat.gameObject.SetActive(false); CombatTrue.gameObject.SetActive(true); } else { Btn_StartCombat.gameObject.SetActive(true); CombatTrue.gameObject.SetActive(false); } } else { CombatRoot.gameObject.SetActive(false); } RefenceSuccessProbability(); using (CTaskAwaitBuffer cTaskAwaitBuffer = new CTaskAwaitBuffer()) { for (int i = 0; i < 1 + heroPowerUpConfig.DujieMustItemIDs.Length + heroPowerUpConfig.DujieItemIDs.Length; i++) { cTaskAwaitBuffer.AddTask(UIManager.Instance.CreateGComponent(null, Content)); } breakthroughItemWidgets = await cTaskAwaitBuffer.WaitAll(); breakthroughItemWidgets[0].CustomInit(1, 0); //必选道具 for (var i = 0; i < heroPowerUpConfig.DujieMustItemIDs.Length; i++) { breakthroughItemWidgets[i + 1].CustomInit(2, heroPowerUpConfig.DujieMustItemIDs[i]); } //可选道具 for (var i = 0; i < heroPowerUpConfig.DujieItemIDs.Length; i++) { breakthroughItemWidgets[i + heroPowerUpConfig.DujieMustItemIDs.Length + 1].CustomInit(2, heroPowerUpConfig.DujieItemIDs[i]); } for (var i = 0; i < breakthroughItemWidgets.Count; i++) { breakthroughItemWidgets[i].transform.anchoredPosition = new Vector2((breakthroughItemWidgets[i].transform.sizeDelta.x + 48) * i, 0); } Content.sizeDelta = new Vector2((breakthroughItemWidgets[0].transform.sizeDelta.x + 48) * breakthroughItemWidgets.Count, 200); } } private void RefenceSuccessProbability() { bool isCan = true; if (heroPowerUpConfig.DujieLevelbattleID != -1 && !PlayerManager.Instance.myHero.heroData.isCombat) { isCan = false; } for (var i = 0; i < PlayerManager.Instance.myHero.powerUpConfig.DujieMustItemIDs.Length; i++) { bool isHave = false; for (var i1 = 1; i1 < breakthroughItemWidgets.Count; i1++) { if (breakthroughItemWidgets[i1].itemInfo != null && PlayerManager.Instance.myHero.powerUpConfig.DujieMustItemIDs[i] == breakthroughItemWidgets[i1].itemInfo.itemID) { isHave = true; } } if (!isHave) { isCan = false; break; } } int failXw = 0; float failbl = 0; int successBl = 0; var list = GetBl(); failbl = list[1] == 0 ? PlayerManager.Instance.myHero.powerUpConfig.FailureExpReduce : (float)(PlayerManager.Instance.myHero.powerUpConfig.FailureExpReduce * list[1] * 0.01f); successBl = list[0]; if (isCan) { // var list = GetBl(); // // failbl = list[1] == 0 ? PlayerManager.Instance.myHero.powerUpConfig.FailureExpReduce : (float)(PlayerManager.Instance.myHero.powerUpConfig.FailureExpReduce * list[1] * 0.01f); // successBl = list[0]; if (PlayerManager.Instance.myHero.powerUpConfig.jingjie1 != heroInfo.powerUpConfig.jingjie1) { Text_AffirmTips.text = "是否确认渡劫"; } else { Text_AffirmTips.text = "是否确认突破"; } } else { //提示需要什么道具 string tips = "需要 破除心魔 "; foreach (var dujieMustItemID in PlayerManager.Instance.myHero.powerUpConfig.DujieMustItemIDs) { ItemConfig itemConfig = ConfigComponent.Instance.Get(dujieMustItemID); tips += " " + LanguageManager.Instance.Text(itemConfig.itemName); } if (PlayerManager.Instance.myHero.powerUpConfig.jingjie1 != heroInfo.powerUpConfig.jingjie1) { Text_AffirmTips.text = tips; } else { Text_AffirmTips.text = tips; } // // failbl = PlayerManager.Instance.myHero.powerUpConfig.FailureExpReduce; // successBl = 0; } failXw = (int)(PlayerManager.Instance.myHero.powerUpConfig.levelUpExp * failbl * 0.01f); Text_FailDesc.text = $"失败损失修为:{failXw}修为"; Text_SucceedDesc.text = $"成功几率:{successBl}%"; LayoutRebuilder.ForceRebuildLayoutImmediate(Text_AffirmTips.GetComponent()); LayoutRebuilder.ForceRebuildLayoutImmediate(Text_AffirmTips.transform.parent.GetComponent()); } private List GetBl() { int succesAllBl = 0; int failAllBl = 0; if (heroPowerUpConfig.DujieLevelbattleID != -1 && PlayerManager.Instance.myHero.heroData.isCombat) { succesAllBl += heroPowerUpConfig.DujieRateviaBattle; } foreach (var breakthroughItemWidget in breakthroughItemWidgets) { if (breakthroughItemWidget.itemInfo != null) { if (breakthroughItemWidget.itemInfo.config.itemTag == 3) { succesAllBl += breakthroughItemWidget.itemInfo.config.associateVlaue[2]; failAllBl += breakthroughItemWidget.itemInfo.config.associateVlaue[3]; } else { succesAllBl += breakthroughItemWidget.itemInfo.config.associateVlaue[2]; } } } return new List { succesAllBl, failAllBl }; } public async static CTask OpenPanel() { HeroBreakthroughPanel heroBreakthroughPanel = await UIManager.Instance.LoadAndOpenPanel(null); heroBreakthroughPanel.CustomInit(); return heroBreakthroughPanel; } public override void Close() { foreach (var breakthroughItemWidget in breakthroughItemWidgets) { UIManager.Instance.DormancyGComponent(breakthroughItemWidget); } breakthroughItemWidgets.Clear(); base.Close(); } } }