|
@@ -13,35 +13,35 @@ using Random = UnityEngine.Random;
|
|
|
public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
{
|
|
|
List<EventConfig> eventConfigs = new List<EventConfig>();
|
|
|
- private List<DivineSenseIntervalConfig> divineSenseIntervalConfigs = new List<DivineSenseIntervalConfig>();
|
|
|
|
|
|
public void CustomInit()
|
|
|
{
|
|
|
eventConfigs = ConfigComponent.Instance.GetAll<EventConfig>().ToList();
|
|
|
- divineSenseIntervalConfigs = ConfigComponent.Instance.GetAll<DivineSenseIntervalConfig>().ToList();
|
|
|
}
|
|
|
|
|
|
|
|
|
- public void DetectEvents(int bigMapId)
|
|
|
+ public List<EventConfig> DetectEvents(int bigMapId)
|
|
|
{
|
|
|
BigMap bigMap = ConfigComponent.Instance.Get<BigMap>(bigMapId);
|
|
|
- DivineSenseConfig divineSenseConfig = ConfigComponent.Instance.Get<DivineSenseConfig>(1);
|
|
|
+ DivineSenseConfig divineSenseConfig = ConfigComponent.Instance.Get<DivineSenseConfig>(AccountFileInfo.Instance.playerData.divineSenseLevel);
|
|
|
|
|
|
+ List<int> qualitys = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
|
|
|
|
|
|
//先掉落出品质
|
|
|
- List<ItemInfo> itemInfos = DropManager.Instance.DropItem(1);
|
|
|
+ int quality = UtilTools.GetRandomByWeight(qualitys, divineSenseConfig.QualityBonusChance);
|
|
|
+
|
|
|
|
|
|
// 获取通用事件
|
|
|
- List<EventConfig> globalEvents = eventConfigs.Where(e => e.EventTriggerType == 3 && CanTriggerEvent(e.ID) && e.EventQuality == itemInfos[0].dropItemConfig.itemID[0]).ToList();
|
|
|
+ List<EventConfig> globalEvents = eventConfigs.Where(e => e.EventTriggerType == 3 && CanTriggerEvent(e.ID) && e.EventQuality == quality).ToList();
|
|
|
|
|
|
|
|
|
//神识场景事件
|
|
|
- List<EventConfig> candidateEvents = eventConfigs.Where(e => bigMap.DivineSenseGeneralEvent.Contains(e.ID) && CanTriggerEvent(e.ID) && e.EventQuality == itemInfos[0].dropItemConfig.itemID[0]).ToList();
|
|
|
+ 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)
|
|
|
{
|
|
|
- LogTool.Warning("没有可以刷新的任务");
|
|
|
- return;
|
|
|
+ LogTool.Error("没有可以刷新的事件");
|
|
|
+ return default;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -66,30 +66,41 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- // 触发事件
|
|
|
- foreach (var evt in triggeredEvents)
|
|
|
- {
|
|
|
- TriggerEvent(evt);
|
|
|
- }
|
|
|
-
|
|
|
if (triggeredEvents.Count == 0)
|
|
|
{
|
|
|
Debug.Log("没有可以触发的事件");
|
|
|
+ return default;
|
|
|
}
|
|
|
+
|
|
|
+ return triggeredEvents;
|
|
|
+ // // 触发事件
|
|
|
+ // foreach (var evt in triggeredEvents)
|
|
|
+ // {
|
|
|
+ // TriggerEvent(evt);
|
|
|
+ // }
|
|
|
}
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 根据神识值选择通用神识区间
|
|
|
- /// </summary>
|
|
|
- private DivineSenseIntervalConfig SelectInterval(float divineSenseValue)
|
|
|
+ public void DetectRandomEvents()
|
|
|
{
|
|
|
- var intervals = divineSenseIntervalConfigs
|
|
|
- .Where(i => divineSenseValue >= i.MinValue && divineSenseValue < i.MaxValue)
|
|
|
- .ToList();
|
|
|
- return intervals.FirstOrDefault();
|
|
|
+ // 获取通用事件
|
|
|
+ List<EventConfig> randomEvents = eventConfigs.Where(e => e.EventTriggerType == 2 && CanTriggerEvent(e.ID)).ToList();
|
|
|
+
|
|
|
+
|
|
|
+ //神识场景事件
|
|
|
+
|
|
|
+
|
|
|
+ if (randomEvents.Count == 0)
|
|
|
+ {
|
|
|
+ LogTool.Warning("没有可以刷新的事件");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ int idex = Random.Range(1, randomEvents.Count);
|
|
|
+ TriggerEvent(randomEvents[idex]);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 触发单个事件,处理对话、奖励和完成逻辑。
|
|
|
/// </summary>
|
|
@@ -98,12 +109,7 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
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: 实现奖励逻辑
|
|
|
+ // DialogueManager.Instance.StartDialogue(evt.DialogueID, evt.ID);
|
|
|
}
|
|
|
|
|
|
CompleteEvent(evt.ID);
|
|
@@ -157,5 +163,16 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
public void CompleteEvent(int eventID)
|
|
|
{
|
|
|
LogTool.Log($"完成任务{eventID}");
|
|
|
+ AccountFileInfo.EventData eventData = AccountFileInfo.Instance.playerData.events.FirstOrDefault((e) => e.eventID == eventID);
|
|
|
+ if (eventData == null)
|
|
|
+ {
|
|
|
+ eventData = new AccountFileInfo.EventData();
|
|
|
+ eventData.eventID = eventID;
|
|
|
+ }
|
|
|
+
|
|
|
+ eventData.completeCount++;
|
|
|
+ AccountFileInfo.Instance.playerData.events.Add(eventData);
|
|
|
+ AccountFileInfo.Instance.SavePlayerData();
|
|
|
+
|
|
|
}
|
|
|
}
|