HeroBreakthroughPanel.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. using System.Collections.Generic;
  2. using Core.Language;
  3. using Excel2Json;
  4. using Fort23.Core;
  5. using Fort23.UTool;
  6. using GameLogic.Combat;
  7. using GameLogic.Hero;
  8. using UnityEngine;
  9. namespace Fort23.Mono
  10. {
  11. [UIBinding(prefab = "HeroBreakthroughPanel")]
  12. public partial class HeroBreakthroughPanel : UIPanel
  13. {
  14. HeroPowerUpConfig heroPowerUpConfig;
  15. List<BreakthroughItemWidget> breakthroughItemWidgets = new List<BreakthroughItemWidget>();
  16. private HeroInfo heroInfo = new HeroInfo();
  17. private void Init()
  18. {
  19. }
  20. protected override void AddEvent()
  21. {
  22. EventManager.Instance.AddEventListener(CustomEventType.RefenceBreakthrough, RefenceBreakthrough);
  23. }
  24. private void RefenceBreakthrough(IEventData e)
  25. {
  26. RefenceSuccessProbability();
  27. }
  28. protected override void DelEvent()
  29. {
  30. EventManager.Instance.RemoveEventListener(CustomEventType.RefenceBreakthrough, RefenceBreakthrough);
  31. }
  32. public override void AddButtonEvent()
  33. {
  34. Btn_Close.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); });
  35. Btn_Cancel.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); });
  36. Btn_Affirm.onClick.AddListener(async () =>
  37. {
  38. if (PlayerManager.Instance.myHero.heroData.exp + HeroHerlp.GetHeroExp() < PlayerManager.Instance.myHero.powerUpConfig.levelUpExp)
  39. {
  40. return;
  41. }
  42. for (var i = 0; i < PlayerManager.Instance.myHero.powerUpConfig.DujieMustItemIDs.Length; i++)
  43. {
  44. bool isHave = false;
  45. for (var i1 = 1; i1 < breakthroughItemWidgets.Count; i1++)
  46. {
  47. if (breakthroughItemWidgets[i1].itemInfo != null && PlayerManager.Instance.myHero.powerUpConfig.DujieMustItemIDs[i] == breakthroughItemWidgets[i1].itemInfo.itemID)
  48. {
  49. isHave = true;
  50. }
  51. }
  52. if (!isHave)
  53. {
  54. ItemConfig itemConfig = ConfigComponent.Instance.Get<ItemConfig>(PlayerManager.Instance.myHero.powerUpConfig.DujieMustItemIDs[i]);
  55. string tips = "缺少" + LanguageManager.Instance.Text(itemConfig.itemName);
  56. TipMessagePanel tipMessage = await TipMessagePanel.OpenTipMessagePanel(tips);
  57. return;
  58. }
  59. }
  60. //扣除道具
  61. foreach (var breakthroughItemWidget in breakthroughItemWidgets)
  62. {
  63. if (breakthroughItemWidget.itemInfo != null)
  64. {
  65. if (PlayerManager.Instance.BagController.DeductItem(breakthroughItemWidget.itemInfo.itemID, 1))
  66. {
  67. TipMessagePanel tipMessage = await TipMessagePanel.OpenTipMessagePanel("道具不足!");
  68. }
  69. }
  70. }
  71. var list = GetBl();
  72. int ramdomValue = Random.Range(1, 101);
  73. //突破成功
  74. if (ramdomValue < list[0])
  75. {
  76. if (PlayerManager.Instance.myHero.powerUpConfig.LeijieDamages != null && PlayerManager.Instance.myHero.powerUpConfig.LeijieDamages.Length >1)
  77. {
  78. ramdomValue = Random.Range(PlayerManager.Instance.myHero.powerUpConfig.LeijieDamages[0], PlayerManager.Instance.myHero.powerUpConfig.LeijieDamages[1]);
  79. //渡劫失败
  80. if (ramdomValue >= PlayerManager.Instance.myHero.hp.Value)
  81. {
  82. TipMessagePanel tipMessage = await TipMessagePanel.OpenTipMessagePanel("雷劫失败");
  83. await tipMessage.UIClosed();
  84. }
  85. else
  86. {
  87. await UpHero();
  88. }
  89. }
  90. else
  91. {
  92. await UpHero();
  93. }
  94. }
  95. //失败
  96. else
  97. {
  98. //扣除失败后的经验
  99. float failbl = list[1] == 0 ? PlayerManager.Instance.myHero.powerUpConfig.FailureExpReduce : (float)(PlayerManager.Instance.myHero.powerUpConfig.FailureExpReduce * list[1] * 0.01f);
  100. int failXw = (int)(PlayerManager.Instance.myHero.powerUpConfig.levelUpExp * failbl * 0.01f);
  101. int allexp = HeroHerlp.GetHeroExp();
  102. PlayerManager.Instance.myHero.heroData.exp += allexp;
  103. PlayerManager.Instance.myHero.heroData.exp -= failXw;
  104. PlayerManager.Instance.myHero.heroData.upTime = TimeHelper.ClientNow();
  105. PlayerManager.Instance.myHero.heroData.isCombat = false;
  106. AccountFileInfo.Instance.SavePlayerData();
  107. TipMessagePanel tipMessage = await TipMessagePanel.OpenTipMessagePanel("突破失败");
  108. await tipMessage.UIClosed();
  109. }
  110. UIManager.Instance.HideUIUIPanel(this);
  111. });
  112. Btn_StartCombat.onClick.AddListener(() =>
  113. {
  114. if (PlayerManager.Instance.myHero.heroData.isCombat)
  115. return;
  116. UIManager.Instance.HindCurrAllShowPanel();
  117. CombatDrive.Instance.LoadLevelBattleCombat(heroPowerUpConfig.DujieLevelbattleID,
  118. delegate(bool isWin)
  119. {
  120. LogTool.Log("战斗完成" + isWin);
  121. if (isWin)
  122. {
  123. PlayerManager.Instance.myHero.heroData.isCombat = true;
  124. AccountFileInfo.Instance.SavePlayerData();
  125. Btn_StartCombat.gameObject.SetActive(false);
  126. CombatTrue.gameObject.SetActive(true);
  127. RefenceSuccessProbability();
  128. UIManager.Instance.ShowLastHindAllShowPanel();
  129. }
  130. });
  131. });
  132. }
  133. private async CTask UpHero()
  134. {
  135. var heroAttributData = HeroHerlp.GetHeroChageHeroAttributeData(PlayerManager.Instance.myHero, heroInfo);
  136. PlayerManager.Instance.myHero.Upgrade();
  137. HeroBreakthroughSuccessPanel heroBreakthroughSuccessPanel = await HeroBreakthroughSuccessPanel.OpenPanel(heroAttributData);
  138. await heroBreakthroughSuccessPanel.UIClosed();
  139. }
  140. public async CTask CustomInit()
  141. {
  142. heroPowerUpConfig = PlayerManager.Instance.myHero.powerUpConfig;
  143. heroInfo.InitHero(PlayerManager.Instance.myHero.heroData.heroModelId, PlayerManager.Instance.myHero.heroData.heroPowerId + 1);
  144. Text_CurrrentJIngjie.text = LanguageManager.Instance.Text(PlayerManager.Instance.myHero.powerUpConfig.jingjieLanIDs[0]) +
  145. LanguageManager.Instance.Text(PlayerManager.Instance.myHero.powerUpConfig.jingjieLanIDs[1]) +
  146. LanguageManager.Instance.Text(PlayerManager.Instance.myHero.powerUpConfig.jingjieLanIDs[2]);
  147. Text_NextJinfjie.text = LanguageManager.Instance.Text(heroInfo.powerUpConfig.jingjieLanIDs[0]) +
  148. LanguageManager.Instance.Text(heroInfo.powerUpConfig.jingjieLanIDs[1]) +
  149. LanguageManager.Instance.Text(heroInfo.powerUpConfig.jingjieLanIDs[2]);
  150. if (PlayerManager.Instance.myHero.powerUpConfig.LeijieDamages != null && PlayerManager.Instance.myHero.powerUpConfig.LeijieDamages.Length >1)
  151. {
  152. Text_TitleName.text = "渡劫";
  153. Text_Affirm.text = "逆天而行";
  154. Text_AffirmTips.text = "是否确认渡劫";
  155. LeiJieRooot.gameObject.SetActive(true);
  156. Text_LeiJieHarm.text = $"{PlayerManager.Instance.myHero.powerUpConfig.LeijieDamages[0]}-{PlayerManager.Instance.myHero.powerUpConfig.LeijieDamages[1]}";
  157. Text_HeroHp.text = PlayerManager.Instance.myHero.hp.Value.ToString();
  158. if (PlayerManager.Instance.myHero.hp.Value < PlayerManager.Instance.myHero.powerUpConfig.LeijieDamages[0])
  159. {
  160. Text_HeroHp.color = Color.red;
  161. }
  162. else
  163. {
  164. Text_HeroHp.color = Color.black;
  165. }
  166. }
  167. else
  168. {
  169. Text_AffirmTips.text = "是否确认突破";
  170. Text_Affirm.text = "突破";
  171. Text_TitleName.text = "突破";
  172. LeiJieRooot.gameObject.SetActive(false);
  173. }
  174. if (heroPowerUpConfig.DujieLevelbattleID != -1)
  175. {
  176. CombatRoot.gameObject.SetActive(true);
  177. if (PlayerManager.Instance.myHero.heroData.isCombat)
  178. {
  179. Btn_StartCombat.gameObject.SetActive(false);
  180. CombatTrue.gameObject.SetActive(true);
  181. }
  182. else
  183. {
  184. Btn_StartCombat.gameObject.SetActive(true);
  185. CombatTrue.gameObject.SetActive(false);
  186. }
  187. }
  188. else
  189. {
  190. CombatRoot.gameObject.SetActive(false);
  191. }
  192. RefenceSuccessProbability();
  193. //选择丹药
  194. BreakthroughItemWidget breakthroughItemWidget = await UIManager.Instance.CreateGComponent<BreakthroughItemWidget>(null, Content);
  195. breakthroughItemWidget.CustomInit(1, 0);
  196. breakthroughItemWidgets.Add(breakthroughItemWidget);
  197. //必选道具
  198. for (var i = 0; i < heroPowerUpConfig.DujieMustItemIDs.Length; i++)
  199. {
  200. breakthroughItemWidget = await UIManager.Instance.CreateGComponent<BreakthroughItemWidget>(null, Content);
  201. breakthroughItemWidget.CustomInit(2, heroPowerUpConfig.DujieMustItemIDs[i]);
  202. breakthroughItemWidgets.Add(breakthroughItemWidget);
  203. }
  204. //可选道具
  205. for (var i = 0; i < heroPowerUpConfig.DujieItemIDs.Length; i++)
  206. {
  207. breakthroughItemWidget = await UIManager.Instance.CreateGComponent<BreakthroughItemWidget>(null, Content);
  208. breakthroughItemWidget.CustomInit(2, heroPowerUpConfig.DujieItemIDs[i]);
  209. breakthroughItemWidgets.Add(breakthroughItemWidget);
  210. }
  211. }
  212. private void RefenceSuccessProbability()
  213. {
  214. var list = GetBl();
  215. float failbl = list[1] == 0 ? PlayerManager.Instance.myHero.powerUpConfig.FailureExpReduce : (float)(PlayerManager.Instance.myHero.powerUpConfig.FailureExpReduce * list[1] * 0.01f);
  216. int failXw = (int)(PlayerManager.Instance.myHero.powerUpConfig.levelUpExp * failbl * 0.01f);
  217. Text_FailDesc.text = $"失败损失修为:{failXw}修为";
  218. Text_SucceedDesc.text = $"成功几率:{list[0]}%";
  219. }
  220. private List<int> GetBl()
  221. {
  222. int succesAllBl = 0;
  223. int failAllBl = 0;
  224. if (heroPowerUpConfig.DujieLevelbattleID != -1 && PlayerManager.Instance.myHero.heroData.isCombat)
  225. {
  226. succesAllBl += heroPowerUpConfig.DujieRateviaBattle;
  227. }
  228. foreach (var breakthroughItemWidget in breakthroughItemWidgets)
  229. {
  230. if (breakthroughItemWidget.itemInfo != null)
  231. {
  232. if (breakthroughItemWidget.itemInfo.config.itemTag == 3)
  233. {
  234. succesAllBl += breakthroughItemWidget.itemInfo.config.associateVlaue[2];
  235. failAllBl += breakthroughItemWidget.itemInfo.config.associateVlaue[3];
  236. }
  237. else
  238. {
  239. succesAllBl += breakthroughItemWidget.itemInfo.config.associateVlaue[2];
  240. }
  241. }
  242. }
  243. return new List<int> { succesAllBl, failAllBl };
  244. }
  245. public async static CTask<HeroBreakthroughPanel> OpenPanel()
  246. {
  247. HeroBreakthroughPanel heroBreakthroughPanel = await UIManager.Instance.LoadAndOpenPanel<HeroBreakthroughPanel>(null);
  248. heroBreakthroughPanel.CustomInit();
  249. return heroBreakthroughPanel;
  250. }
  251. public override void Close()
  252. {
  253. foreach (var breakthroughItemWidget in breakthroughItemWidgets)
  254. {
  255. UIManager.Instance.DormancyGComponent(breakthroughItemWidget);
  256. }
  257. breakthroughItemWidgets.Clear();
  258. base.Close();
  259. }
  260. }
  261. }