Browse Source

添加神识升级逻辑

lzx 1 month ago
parent
commit
a8931bded0

+ 39 - 19
Assets/Scripts/GameLogic/EventManager/EventSystemManager.cs

@@ -6,6 +6,7 @@ using Fort23.Core;
 using Fort23.UTool;
 using Fort23.UTool;
 using GameLogic.Combat;
 using GameLogic.Combat;
 using GameLogic.Combat.CombatTool;
 using GameLogic.Combat.CombatTool;
+using Unity.Plastic.Newtonsoft.Json.Serialization;
 using UnityEngine;
 using UnityEngine;
 using Utility;
 using Utility;
 using Random = UnityEngine.Random;
 using Random = UnityEngine.Random;
@@ -22,9 +23,14 @@ public class EventSystemManager : Singleton<EventSystemManager>
 
 
     public bool isTriggerEvent;
     public bool isTriggerEvent;
 
 
+    List<DivineSenseConfig> divineSenseConfigs = new List<DivineSenseConfig>();
+
+    List<int> qualitys = new List<int>() { 1, 2, 3, 4, 5, 6 };
+
     public void CustomInit(IDialogueMono dialogueMono)
     public void CustomInit(IDialogueMono dialogueMono)
     {
     {
         eventConfigs = ConfigComponent.Instance.GetAll<EventConfig>().ToList();
         eventConfigs = ConfigComponent.Instance.GetAll<EventConfig>().ToList();
+        divineSenseConfigs = ConfigComponent.Instance.GetAll<DivineSenseConfig>().ToList();
         this.dialogueMono = dialogueMono;
         this.dialogueMono = dialogueMono;
         StaticUpdater.Instance.AddRenderUpdateCallBack(Update);
         StaticUpdater.Instance.AddRenderUpdateCallBack(Update);
     }
     }
@@ -56,8 +62,9 @@ public class EventSystemManager : Singleton<EventSystemManager>
         AccountFileInfo.Instance.playerData.divineSenseexp += AccountFileInfo.Instance.playerData.divineSensePoint;
         AccountFileInfo.Instance.playerData.divineSenseexp += AccountFileInfo.Instance.playerData.divineSensePoint;
         AccountFileInfo.Instance.playerData.divineSensePoint = 0;
         AccountFileInfo.Instance.playerData.divineSensePoint = 0;
         EventManager.Instance.Dispatch(CustomEventType.DivineSensePointChange, null);
         EventManager.Instance.Dispatch(CustomEventType.DivineSensePointChange, null);
-        //todo 神识升级逻辑
-        AccountFileInfo.Instance.SavePlayerData();
+        // 神识升级逻辑
+        UpDivinesense();
+        // AccountFileInfo.Instance.SavePlayerData();
 
 
         var eventConfigs = DetectEvents(bigMapId, count);
         var eventConfigs = DetectEvents(bigMapId, count);
         if (eventConfigs == null || eventConfigs.Count == 0)
         if (eventConfigs == null || eventConfigs.Count == 0)
@@ -74,37 +81,50 @@ public class EventSystemManager : Singleton<EventSystemManager>
         return eventLists;
         return eventLists;
     }
     }
 
 
+    private void UpDivinesense()
+    {
+        for (var i = AccountFileInfo.Instance.playerData.divineSenseLevel - 1; i < divineSenseConfigs.Count; i++)
+        {
+            if (AccountFileInfo.Instance.playerData.divineSenseexp >= divineSenseConfigs[i].exp)
+            {
+                AccountFileInfo.Instance.playerData.divineSenseexp -= divineSenseConfigs[i].exp;
+                AccountFileInfo.Instance.playerData.divineSenseLevel = divineSenseConfigs[i].ID;
+            }
+        }
+
+        AccountFileInfo.Instance.SavePlayerData();
+    }
+
 
 
     private List<EventConfig> DetectEvents(int bigMapId, int eventCount)
     private List<EventConfig> DetectEvents(int bigMapId, int eventCount)
     {
     {
-        if (isTriggerEvent)
-            return default;
         BigMap bigMap = ConfigComponent.Instance.Get<BigMap>(bigMapId);
         BigMap bigMap = ConfigComponent.Instance.Get<BigMap>(bigMapId);
         DivineSenseConfig divineSenseConfig = ConfigComponent.Instance.Get<DivineSenseConfig>(AccountFileInfo.Instance.playerData.divineSenseLevel);
         DivineSenseConfig divineSenseConfig = ConfigComponent.Instance.Get<DivineSenseConfig>(AccountFileInfo.Instance.playerData.divineSenseLevel);
 
 
-        List<int> qualitys = new List<int>() { 1, 2, 3, 4, 5, 6 };
 
 
-        //先掉落出品质
-        int quality = UtilTools.GetRandomByWeight(qualitys, divineSenseConfig.QualityBonusChance);
+        LogTool.Log($"使用神识,神识等级:{AccountFileInfo.Instance.playerData.divineSenseLevel}");
 
 
 
 
-        // 获取通用事件
-        List<EventConfig> globalEvents = eventConfigs.Where(e => e.EventTriggerType == 1 && CanTriggerEvent(e.ID) && e.EventQuality == quality).ToList();
+        var triggeredEvents = new List<EventConfig>();
+        for (int i = 0; i < eventCount; i++)
+        {
+            //先掉落出品质
+            int quality = UtilTools.GetRandomByWeight(qualitys, divineSenseConfig.QualityBonusChance);
 
 
 
 
-        //神识场景事件
-        List<EventConfig> candidateEvents = eventConfigs.Where(e => bigMap.DivineSenseGeneralEvent.Contains(e.ID) && CanTriggerEvent(e.ID) && e.EventQuality == quality).ToList();
+            // 获取通用事件
+            List<EventConfig> globalEvents = eventConfigs.Where(e => e.EventTriggerType == 1 && CanTriggerEvent(e.ID) && e.EventQuality == quality).ToList();
 
 
-        if (candidateEvents.Count == 0 && globalEvents.Count == 0)
-        {
-            LogTool.Error("没有可以刷新的事件");
-            return default;
-        }
+
+            //神识场景事件
+            List<EventConfig> candidateEvents = eventConfigs.Where(e => bigMap.DivineSenseGeneralEvent.Contains(e.ID) && CanTriggerEvent(e.ID) && e.EventQuality == quality).ToList();
+
+            if (candidateEvents.Count == 0 && globalEvents.Count == 0)
+            {
+                continue;
+            }
 
 
 
 
-        var triggeredEvents = new List<EventConfig>();
-        for (int i = 0; i < eventCount; i++)
-        {
             int randomValue1 = Random.Range(0, 101);
             int randomValue1 = Random.Range(0, 101);
             //刷场景事件
             //刷场景事件
             if (randomValue1 >= bigMap.DivineSenseGeneralProbability && candidateEvents.Count > 0)
             if (randomValue1 >= bigMap.DivineSenseGeneralProbability && candidateEvents.Count > 0)

+ 10 - 0
Assets/Scripts/GameUI/UI/MainPanel/MainPanel.cs

@@ -23,6 +23,7 @@ namespace Fort23.Mono
 
 
         private void CompleteEvent(IEventData e)
         private void CompleteEvent(IEventData e)
         {
         {
+            Text_ExplorationProgress.text = $"火焰山   {AccountFileInfo.Instance.playerData.senceExplorationProgress}%";
             CreatShengShiEvent();
             CreatShengShiEvent();
         }
         }
 
 
@@ -46,6 +47,7 @@ namespace Fort23.Mono
         public override CTask<bool> AsyncInit(object[] uiData)
         public override CTask<bool> AsyncInit(object[] uiData)
         {
         {
             Text_divineSensePoint.text = $"{AccountFileInfo.Instance.playerData.divineSensePoint}/{PlayerManager.Instance.gameConstantConfig.DetectEventCount}";
             Text_divineSensePoint.text = $"{AccountFileInfo.Instance.playerData.divineSensePoint}/{PlayerManager.Instance.gameConstantConfig.DetectEventCount}";
+            Text_ExplorationProgress.text = $"火焰山   {AccountFileInfo.Instance.playerData.senceExplorationProgress}%";
             CreatShengShiEvent();
             CreatShengShiEvent();
 
 
             return base.AsyncInit(uiData);
             return base.AsyncInit(uiData);
@@ -79,13 +81,21 @@ namespace Fort23.Mono
                 return;
                 return;
             }
             }
 
 
+            if (EventSystemManager.Instance.isTriggerEvent)
+                return;
 
 
+            EventSystemManager.Instance.isTriggerEvent = true;
+            CombatDrive.Instance.CombatController.ChangeState(CombatController.idle);
             CombatController.currActiveCombat.CombatSenceController.StartPayShengShi(CombatController.currActiveCombat
             CombatController.currActiveCombat.CombatSenceController.StartPayShengShi(CombatController.currActiveCombat
                 .CombatHeroController.playerHeroEntity.GameObject.transform);
                 .CombatHeroController.playerHeroEntity.GameObject.transform);
             List<AccountFileInfo.EventList> eventLists = EventSystemManager.Instance.UseDivinesense(1);
             List<AccountFileInfo.EventList> eventLists = EventSystemManager.Instance.UseDivinesense(1);
+            await TimerComponent.Instance.WaitAsync(500);
+            EventSystemManager.Instance.isTriggerEvent = false;
+            CombatDrive.Instance.CombatController.ChangeState(CombatController.update);
             if (eventLists == null || eventLists.Count == 0)
             if (eventLists == null || eventLists.Count == 0)
                 return;
                 return;
 
 
+
             AccountFileInfo.Instance.playerData.eventList.AddRange(eventLists);
             AccountFileInfo.Instance.playerData.eventList.AddRange(eventLists);
             AccountFileInfo.Instance.SavePlayerData();
             AccountFileInfo.Instance.SavePlayerData();
             CreatShengShiEvent();
             CreatShengShiEvent();