123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420 |
- 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<BreakthroughItemWidget> breakthroughItemWidgets = new List<BreakthroughItemWidget>();
- 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<ItemConfig>(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<BreakthroughItemWidget> cTaskAwaitBuffer = new CTaskAwaitBuffer<BreakthroughItemWidget>())
- {
- for (int i = 0; i < 1 + heroPowerUpConfig.DujieMustItemIDs.Length + heroPowerUpConfig.DujieItemIDs.Length; i++)
- {
- cTaskAwaitBuffer.AddTask(UIManager.Instance.CreateGComponent<BreakthroughItemWidget>(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<ItemConfig>(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<RectTransform>());
- LayoutRebuilder.ForceRebuildLayoutImmediate(Text_AffirmTips.transform.parent.GetComponent<RectTransform>());
- }
- private List<int> 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<int> { succesAllBl, failAllBl };
- }
- public async static CTask<HeroBreakthroughPanel> OpenPanel()
- {
- HeroBreakthroughPanel heroBreakthroughPanel = await UIManager.Instance.LoadAndOpenPanel<HeroBreakthroughPanel>(null);
- heroBreakthroughPanel.CustomInit();
- return heroBreakthroughPanel;
- }
- public override void Close()
- {
- foreach (var breakthroughItemWidget in breakthroughItemWidgets)
- {
- UIManager.Instance.DormancyGComponent(breakthroughItemWidget);
- }
- breakthroughItemWidgets.Clear();
- base.Close();
- }
- }
- }
|