浏览代码

修改事件

lzx 4 周之前
父节点
当前提交
d5b479b774

+ 5 - 0
Assets/Scripts/Core/Event/Event/CustomEventType.cs

@@ -81,5 +81,10 @@ namespace Fort23.Core
       /// </summary>
       DivineSensePointChange,
       
+      /// <summary>
+      /// 完成事件
+      /// </summary>
+      CompleteEvent,
+      
     }
 }

+ 4 - 0
Assets/Scripts/GameLogic/EventManager/DialogueManager.cs

@@ -40,6 +40,10 @@ public class DialogueManager : Singleton<DialogueManager>
     {
         currentDialogueID = dialogueID;
 
+        EventSystemManager.Instance.CurrentEventList.curStep = currentDialogueID;
+
+        AccountFileInfo.Instance.SavePlayerData();
+
 
         // 找到当前对话组
         var dialogueConfig = ConfigComponent.Instance.Get<EventConditionConfig>(dialogueID);

+ 69 - 2
Assets/Scripts/GameLogic/EventManager/EventSystemManager.cs

@@ -1,5 +1,6 @@
 using System.Collections.Generic;
 using System.Linq;
+using Core.Language;
 using Excel2Json;
 using Fort23.Core;
 using Fort23.UTool;
@@ -13,6 +14,8 @@ public class EventSystemManager : Singleton<EventSystemManager>
 
     List<AccountFileInfo.EventData> eventDatas = new List<AccountFileInfo.EventData>();
 
+    public AccountFileInfo.EventList CurrentEventList;
+
     public void CustomInit()
     {
         eventConfigs = ConfigComponent.Instance.GetAll<EventConfig>().ToList();
@@ -34,7 +37,7 @@ public class EventSystemManager : Singleton<EventSystemManager>
         }
     }
 
-    public List<EventConfig> UseDivinesense(int bigMapId)
+    public List<AccountFileInfo.EventList> UseDivinesense(int bigMapId)
     {
         DivineSenseConfig divineSenseConfig = ConfigComponent.Instance.Get<DivineSenseConfig>(AccountFileInfo.Instance.playerData.divineSenseLevel);
         int count = AccountFileInfo.Instance.playerData.divineSensePoint / PlayerManager.Instance.gameConstantConfig.DetectEventCount;
@@ -50,7 +53,19 @@ public class EventSystemManager : Singleton<EventSystemManager>
         //todo 神识升级逻辑
         AccountFileInfo.Instance.SavePlayerData();
 
-        return DetectEvents(bigMapId, count);
+        var eventConfigs = DetectEvents(bigMapId, count);
+        if (eventConfigs == null || eventConfigs.Count == 0)
+            return default;
+
+        List<AccountFileInfo.EventList> eventLists = new List<AccountFileInfo.EventList>();
+        for (var i = 0; i < eventConfigs.Count; i++)
+        {
+            AccountFileInfo.EventList eventList = new AccountFileInfo.EventList();
+            eventList.eventID = eventConfigs[i].ID;
+            eventLists.Add(eventList);
+        }
+
+        return eventLists;
     }
 
 
@@ -140,6 +155,27 @@ public class EventSystemManager : Singleton<EventSystemManager>
         DialogueManager.Instance.StartDialogue(evt.EventType, evt.ID, () => { CompleteEvent(evt.ID); });
     }
 
+    /// <summary>
+    /// 触发事件
+    /// </summary>
+    public void TriggerEvent(AccountFileInfo.EventList evt)
+    {
+        EventConfig eventConfig = ConfigComponent.Instance.Get<EventConfig>(evt.eventID);
+        LogTool.Log($"触发事件: {LanguageManager.Instance.Text(eventConfig.Description)} (ID: {eventConfig.ID}, 品质: {eventConfig.EventQuality})");
+
+        int dialogueID = 0;
+        if (evt.curStep == 0)
+        {
+            dialogueID = eventConfig.EventType;
+        }
+        else
+        {
+            dialogueID = evt.curStep;
+        }
+
+        DialogueManager.Instance.StartDialogue(dialogueID, eventConfig.ID, () => { CompleteEvent(); });
+    }
+
     /// <summary>
     /// 检查事件是否满足触发条件。
     /// </summary>
@@ -200,6 +236,37 @@ public class EventSystemManager : Singleton<EventSystemManager>
 
         if (AccountFileInfo.Instance.playerData.senceExplorationProgress < 100)
             AccountFileInfo.Instance.playerData.senceExplorationProgress += 5;
+
+
+        AccountFileInfo.Instance.SavePlayerData();
+
+        EventManager.Instance.Dispatch(CustomEventType.CompleteEvent, null);
+    }
+
+    /// <summary>
+    /// 完成事件
+    /// </summary>
+    /// <param name="eventID">事件ID</param>
+    public void CompleteEvent()
+    {
+        LogTool.Log($"完成事件{CurrentEventList.eventID}");
+        AccountFileInfo.EventData eventData = AccountFileInfo.Instance.playerData.events.FirstOrDefault((e) => e.eventID == CurrentEventList.eventID);
+        if (eventData == null)
+        {
+            eventData = new AccountFileInfo.EventData();
+            eventData.eventID = CurrentEventList.eventID;
+        }
+
+        eventData.completeCount++;
+        AccountFileInfo.Instance.playerData.events.Add(eventData);
+
+        if (AccountFileInfo.Instance.playerData.senceExplorationProgress < 100)
+            AccountFileInfo.Instance.playerData.senceExplorationProgress += 5;
+
+
+        AccountFileInfo.Instance.playerData.eventList.RemoveAll(el => el.eventID == CurrentEventList.eventID);
         AccountFileInfo.Instance.SavePlayerData();
+
+        EventManager.Instance.Dispatch(CustomEventType.CompleteEvent, null);
     }
 }

+ 13 - 0
Assets/Scripts/GameLogic/Player/AccountFileInfo.cs

@@ -38,6 +38,9 @@ public class AccountFileInfo : Singleton<AccountFileInfo>
         
         public List<EventData> events = new List<EventData>();
         
+        public List<EventList> eventList = new List<EventList>();
+        
+        
         public List<ItemData> ItemListData = new List<ItemData>();
 
       
@@ -72,6 +75,16 @@ public class AccountFileInfo : Singleton<AccountFileInfo>
         //完成cishu
         public int completeCount = 0;
     }
+    
+    /// <summary>
+    /// 刷出来的事件列表
+    /// </summary>
+    public class EventList
+    {
+        public int eventID ;
+
+        public int curStep;
+    }
 
 
     /// <summary>

+ 5 - 33
Assets/Scripts/GameUI/UI/CombatPanel/CombatPanel.cs

@@ -33,7 +33,7 @@ namespace Fort23.Mono
 
         protected override void AddEvent()
         {
-            CombatEventManager.Instance.AddEventListener(CombatEventType.AddRandomEvent, AddRandomEventEventData);
+          
             CombatEventManager.Instance.AddEventListener(CombatEventType.GameStart, GameStart);
             CombatEventManager.Instance.AddEventListener(CombatEventType.AddMagicWeaponHeroEntity,
                 AddMagicWeaponHeroEntity);
@@ -71,16 +71,7 @@ namespace Fort23.Mono
             // shengShiEventWidget.InitShengShiEventWidget(configId);
         }
 
-        private async void AddRandomEventEventData(IEventData ieveData)
-        {
-            AddRandomEventEventData eventData = ieveData as AddRandomEventEventData;
-            int configId = eventData.randomEventID;
-            ShengShiEventWidget shengShiEventWidget =
-                await UIManager.Instance.CreateGComponentForObject<ShengShiEventWidget>(ShengShiEventWidget, null,
-                    DynamicEvent,
-                    isInstance: true);
-            shengShiEventWidget.InitShengShiEventWidget(configId);
-        }
+  
 
         private async void GameStart(IEventData ieveData)
         {
@@ -104,7 +95,7 @@ namespace Fort23.Mono
 
         protected override void DelEvent()
         {
-            CombatEventManager.Instance.RemoveEventListener(CombatEventType.AddRandomEvent, AddRandomEventEventData);
+          
             CombatEventManager.Instance.RemoveEventListener(CombatEventType.GameStart, GameStart);
             CombatEventManager.Instance.RemoveEventListener(CombatEventType.AddMagicWeaponHeroEntity,
                 AddMagicWeaponHeroEntity);
@@ -113,7 +104,7 @@ namespace Fort23.Mono
 
         public override void AddButtonEvent()
         {
-            bnt_shengShi.onClick.AddListener(Bnt_shengShi_onClick);
+        
             CameraSelect.onValueChanged.AddListener(CameraSelect_onValueChanged);
             AutoUse.onValueChanged.AddListener((x) =>
             {
@@ -123,26 +114,7 @@ namespace Fort23.Mono
         }
 
 
-        private async void Bnt_shengShi_onClick()
-        {
-            UIManager.Instance.DormancyAllGComponent<ShengShiEventWidget>();
-            CombatController.currActiveCombat.CombatSenceController.StartPayShengShi(CombatController.currActiveCombat
-                .CombatHeroController.playerHeroEntity.GameObject.transform);
-            List<EventConfig> eventConfigs = EventSystemManager.Instance.UseDivinesense(1);
-            if (eventConfigs == null || eventConfigs.Count == 0)
-                return;
-            for (var i = 0; i < eventConfigs.Count; i++)
-            {
-                ShengShiEventWidget shengShiEventWidget =
-                    await UIManager.Instance.CreateGComponentForObject<ShengShiEventWidget>(ShengShiEventWidget, null,
-                        DynamicEvent,
-                        isInstance: true);
-                shengShiEventWidget.InitShengShiEventWidget(eventConfigs[i].ID);
-            }
-            //
-            // CombatController.currActiveCombat.RandomEventController.StartRandomEvent(CombatController.currActiveCombat
-            //     .CombatHeroController.playerHeroEntity.GameObject.transform);
-        }
+
 
         private void CameraSelect_onValueChanged(float value)
         {

+ 6 - 3
Assets/Scripts/GameUI/UI/CombatPanel/ShengShiEventWidget.cs

@@ -8,6 +8,8 @@ namespace Fort23.Mono
     [UIBinding(prefab = "ShengShiEventWidget")]
     public partial class ShengShiEventWidget : UIComponent
     {
+        private AccountFileInfo.EventList eventList;
+
         private void Init()
         {
         }
@@ -28,14 +30,15 @@ namespace Fort23.Mono
         private void Button_onClick()
         {
             UIManager.Instance.DormancyAllGComponent<ShengShiEventWidget>();
-            EventSystemManager.Instance.TriggerEvent(randomEventConfig);
+            EventSystemManager.Instance.TriggerEvent(eventList);
         }
 
         private EventConfig randomEventConfig;
 
-        public void InitShengShiEventWidget(int id)
+        public void InitShengShiEventWidget(AccountFileInfo.EventList eventList)
         {
-            randomEventConfig = ConfigComponent.Instance.Get<EventConfig>(id);
+            this.eventList = eventList;
+            randomEventConfig = ConfigComponent.Instance.Get<EventConfig>(eventList.eventID);
             Massge.text = LanguageManager.Instance.Text(randomEventConfig.Description);
         }
     }

+ 22 - 5
Assets/Scripts/GameUI/UI/MainPanel/MainPanel.cs

@@ -16,6 +16,12 @@ namespace Fort23.Mono
         protected override void AddEvent()
         {
             EventManager.Instance.AddEventListener(CustomEventType.DivineSensePointChange, DivineSensePointChange);
+            EventManager.Instance.AddEventListener(CustomEventType.CompleteEvent, CompleteEvent);
+        }
+
+        private void CompleteEvent(IEventData e)
+        {
+            CreatShengShiEvent();
         }
 
         private void DivineSensePointChange(IEventData e)
@@ -26,6 +32,7 @@ namespace Fort23.Mono
         protected override void DelEvent()
         {
             EventManager.Instance.RemoveEventListener(CustomEventType.DivineSensePointChange, DivineSensePointChange);
+            EventManager.Instance.RemoveEventListener(CustomEventType.CompleteEvent, CompleteEvent);
         }
 
         public override void AddButtonEvent()
@@ -36,6 +43,7 @@ namespace Fort23.Mono
         public override CTask<bool> AsyncInit(object[] uiData)
         {
             Text_divineSensePoint.text = $"{AccountFileInfo.Instance.playerData.divineSensePoint}/{PlayerManager.Instance.gameConstantConfig.DetectEventCount}";
+            CreatShengShiEvent();
             return base.AsyncInit(uiData);
         }
 
@@ -49,21 +57,30 @@ namespace Fort23.Mono
                 return;
             }
 
-            UIManager.Instance.DormancyAllGComponent<ShengShiEventWidget>();
+          
             CombatController.currActiveCombat.CombatSenceController.StartPayShengShi(CombatController.currActiveCombat
                 .CombatHeroController.playerHeroEntity.GameObject.transform);
-            List<EventConfig> eventConfigs = EventSystemManager.Instance.UseDivinesense(1);
-            if (eventConfigs == null || eventConfigs.Count == 0)
+            List<AccountFileInfo.EventList> eventLists = EventSystemManager.Instance.UseDivinesense(1);
+            if (eventLists == null || eventLists.Count == 0)
                 return;
-            for (var i = 0; i < eventConfigs.Count; i++)
+      
+            AccountFileInfo.Instance.playerData.eventList.AddRange(eventLists);
+            CreatShengShiEvent();
+        }
+
+        public async void CreatShengShiEvent()
+        {
+            UIManager.Instance.DormancyAllGComponent<ShengShiEventWidget>();
+            for (var i = 0; i < AccountFileInfo.Instance.playerData.eventList.Count; i++)
             {
                 ShengShiEventWidget shengShiEventWidget =
                     await UIManager.Instance.CreateGComponentForObject<ShengShiEventWidget>(ShengShiEventWidget, null,
                         DynamicEvent,
                         isInstance: true);
-                shengShiEventWidget.InitShengShiEventWidget(eventConfigs[i].ID);
+                shengShiEventWidget.InitShengShiEventWidget(AccountFileInfo.Instance.playerData.eventList[i]);
             }
         }
+        
 
         [CustomMethod(CustomMethodType.Update)]
         public void Update()