using System; using System.Collections; using System.Collections.Generic; using System.Linq; using Excel2Json; using Fort23.UTool; using UnityEngine; using Utility; using Random = UnityEngine.Random; public class EventSystemManager : Singleton { List eventConfigs = new List(); private List divineSenseIntervalConfigs = new List(); public void CustomInit() { eventConfigs = ConfigComponent.Instance.GetAll().ToList(); divineSenseIntervalConfigs = ConfigComponent.Instance.GetAll().ToList(); } public void DetectEvents(int bigMapId) { BigMap bigMap = ConfigComponent.Instance.Get(bigMapId); DivineSenseConfig divineSenseConfig = ConfigComponent.Instance.Get(1); // 选择神识区间 DivineSenseIntervalConfig interval = SelectInterval(200); // 获取通用事件 List globalEvents = eventConfigs .Where(e => e.EventTriggerType == 3 && CanTriggerEvent(e.ID)) .ToList(); //神识场景事件 List candidateEvents = eventConfigs.Where(e => bigMap.DivineSenseGeneralEvent.Contains(e.ID) && CanTriggerEvent(e.ID)).ToList(); if (candidateEvents.Count == 0 && globalEvents.Count == 0) { LogTool.Warning("没有可以刷新的任务"); return; } var triggeredEvents = new List(); for (int i = 0; i >= divineSenseConfig.DetectEventCount; i++) { int randomValue1 = Random.Range(0, 101); //刷 if (randomValue1 >= bigMap.DivineSenseGeneralProbability && candidateEvents.Count > 0) { int randomValue2 = Random.Range(0, candidateEvents.Count); triggeredEvents.Add(candidateEvents[randomValue2]); candidateEvents.RemoveAll(ew => ew.ID == candidateEvents[randomValue2].ID); } else { int randomValue2 = Random.Range(0, globalEvents.Count); triggeredEvents.Add(globalEvents[randomValue2]); globalEvents.RemoveAll(ew => ew.ID == globalEvents[randomValue2].ID); } } // 触发事件 foreach (var evt in triggeredEvents) { TriggerEvent(evt); } if (triggeredEvents.Count == 0) { Debug.Log("没有可以触发的事件"); } } /// /// 根据神识值选择通用神识区间 /// private DivineSenseIntervalConfig SelectInterval(float divineSenseValue) { var intervals = divineSenseIntervalConfigs .Where(i => divineSenseValue >= i.MinValue && divineSenseValue < i.MaxValue) .ToList(); return intervals.FirstOrDefault(); } /// /// 触发单个事件,处理对话、奖励和完成逻辑。 /// public void TriggerEvent(EventConfig evt) { Debug.Log($"触发事件: {evt.Description} (ID: {evt.ID}, 品质: {evt.EventQuality})"); if (evt.DialogueID > 0) { DialogueManager.Instance.StartDialogue(evt.DialogueID, evt.ID); } if (evt.RewardID.Length > 0) { // TODO: 实现奖励逻辑 } CompleteEvent(evt.ID); } /// /// 检查事件是否满足触发条件。 /// private bool CanTriggerEvent(int eventID) { var evt = eventConfigs.Find(e => e.ID == eventID); if (evt.ID == 0) return false; for (var i = 0; i < evt.EventConditionId.Length; i++) { if (!CheckCondition(evt.EventConditionId[i], evt.EventVlaue[i])) return false; } return true; } /// /// 检查单个触发条件。 /// private bool CheckCondition(int conditionid, int EventVlaue) { //>= if (EventVlaue == 1) { } //= else if (EventVlaue == 2) { } // <= else if (EventVlaue == 3) { } return false; } /// /// 完成任务 /// /// 事件ID public void CompleteEvent(int eventID) { LogTool.Log($"完成任务{eventID}"); } }