using System.Collections.Generic; using Core.Language; using Excel2Json; using Fort23.Core; using Fort23.UTool; using GameLogic.Combat; using GameLogic.Hero; using UnityEngine; 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; } 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("道具不足!"); } } } var list = GetBl(); int ramdomValue = Random.Range(1, 101); //突破成功 if (ramdomValue < list[0]) { 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) { TipMessagePanel tipMessage = await TipMessagePanel.OpenTipMessagePanel("雷劫失败"); await tipMessage.UIClosed(); } else { await UpHero(); } } else { await UpHero(); } } //失败 else { //扣除失败后的经验 float failbl = list[1] == 0 ? PlayerManager.Instance.myHero.powerUpConfig.FailureExpReduce : (float)(PlayerManager.Instance.myHero.powerUpConfig.FailureExpReduce * list[1] * 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(); 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 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(PlayerManager.Instance.myHero.powerUpConfig.jingjieLanIDs[0]) + LanguageManager.Instance.Text(PlayerManager.Instance.myHero.powerUpConfig.jingjieLanIDs[1]) + LanguageManager.Instance.Text(PlayerManager.Instance.myHero.powerUpConfig.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 (PlayerManager.Instance.myHero.powerUpConfig.LeijieDamages != null && PlayerManager.Instance.myHero.powerUpConfig.LeijieDamages.Length >1) { Text_TitleName.text = "渡劫"; Text_Affirm.text = "逆天而行"; Text_AffirmTips.text = "是否确认渡劫"; LeiJieRooot.gameObject.SetActive(true); Text_LeiJieHarm.text = $"{PlayerManager.Instance.myHero.powerUpConfig.LeijieDamages[0]}-{PlayerManager.Instance.myHero.powerUpConfig.LeijieDamages[1]}"; Text_HeroHp.text = PlayerManager.Instance.myHero.hp.Value.ToString(); if (PlayerManager.Instance.myHero.hp.Value < PlayerManager.Instance.myHero.powerUpConfig.LeijieDamages[0]) { Text_HeroHp.color = Color.red; } else { Text_HeroHp.color = Color.black; } } 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(); //选择丹药 BreakthroughItemWidget breakthroughItemWidget = await UIManager.Instance.CreateGComponent(null, Content); breakthroughItemWidget.CustomInit(1, 0); breakthroughItemWidgets.Add(breakthroughItemWidget); //必选道具 for (var i = 0; i < heroPowerUpConfig.DujieMustItemIDs.Length; i++) { breakthroughItemWidget = await UIManager.Instance.CreateGComponent(null, Content); breakthroughItemWidget.CustomInit(2, heroPowerUpConfig.DujieMustItemIDs[i]); breakthroughItemWidgets.Add(breakthroughItemWidget); } //可选道具 for (var i = 0; i < heroPowerUpConfig.DujieItemIDs.Length; i++) { breakthroughItemWidget = await UIManager.Instance.CreateGComponent(null, Content); breakthroughItemWidget.CustomInit(2, heroPowerUpConfig.DujieItemIDs[i]); breakthroughItemWidgets.Add(breakthroughItemWidget); } } private void RefenceSuccessProbability() { var list = GetBl(); float failbl = list[1] == 0 ? PlayerManager.Instance.myHero.powerUpConfig.FailureExpReduce : (float)(PlayerManager.Instance.myHero.powerUpConfig.FailureExpReduce * list[1] * 0.01f); int failXw = (int)(PlayerManager.Instance.myHero.powerUpConfig.levelUpExp * failbl * 0.01f); Text_FailDesc.text = $"失败损失修为:{failXw}修为"; Text_SucceedDesc.text = $"成功几率:{list[0]}%"; } 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(); } } }