|
@@ -11,14 +11,13 @@ using GameLogic.Combat;
|
|
|
using GameLogic.Combat.CombatTool;
|
|
|
using UnityEngine;
|
|
|
using Utility;
|
|
|
+using EventConfig = Excel2Json.EventConfig;
|
|
|
using Random = UnityEngine.Random;
|
|
|
|
|
|
public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
{
|
|
|
List<EventConfig> eventConfigs = new List<EventConfig>();
|
|
|
|
|
|
- List<AccountFileInfo.EventData> eventDatas = new List<AccountFileInfo.EventData>();
|
|
|
-
|
|
|
|
|
|
public AccountFileInfo.EventList CurrentEventList;
|
|
|
|
|
@@ -78,9 +77,8 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public List<AccountFileInfo.EventList> UseDivinesense(int bigMapId)
|
|
|
+ public List<AccountFileInfo.EventList> UseDivinesense()
|
|
|
{
|
|
|
- DivineSenseConfig divineSenseConfig = ConfigComponent.Instance.Get<DivineSenseConfig>(AccountFileInfo.Instance.playerData.divineSenseLevel);
|
|
|
HeroPowerUpConfig heroPowerUpConfig = PlayerManager.Instance.myHero.powerUpConfig;
|
|
|
int count = AccountFileInfo.Instance.playerData.divineSensePoint / PlayerManager.Instance.gameConstantConfig.DetectEventCount;
|
|
|
if (count <= 0)
|
|
@@ -99,25 +97,14 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
EventManager.Instance.Dispatch(CustomEventType.DivineSensePointChange, null);
|
|
|
// 神识升级逻辑
|
|
|
UpDivinesense();
|
|
|
- // AccountFileInfo.Instance.SavePlayerData();
|
|
|
|
|
|
- var eventConfigs = DetectEvents(bigMapId, count);
|
|
|
+ var eventConfigs = DetectEvents(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 = AddEvent(eventConfigs[i].ID);
|
|
|
- if (eventList == null)
|
|
|
- continue;
|
|
|
-
|
|
|
- eventLists.Add(eventList);
|
|
|
- }
|
|
|
-
|
|
|
- AccountFileInfo.Instance.playerData.eventList.AddRange(eventLists);
|
|
|
+ AccountFileInfo.Instance.playerData.eventList.AddRange(eventConfigs);
|
|
|
AccountFileInfo.Instance.SavePlayerData();
|
|
|
- return eventLists;
|
|
|
+ return eventConfigs;
|
|
|
}
|
|
|
|
|
|
private void UpDivinesense()
|
|
@@ -148,16 +135,46 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- private List<EventConfig> DetectEvents(int bigMapId, int eventCount)
|
|
|
+ private List<AccountFileInfo.EventList> DetectEvents(int eventCount)
|
|
|
{
|
|
|
- PlacesConfig bigMap = ConfigComponent.Instance.Get<PlacesConfig>(bigMapId);
|
|
|
+ PlacesConfig bigMap = ConfigComponent.Instance.Get<PlacesConfig>(PlayerManager.Instance.CurrentPlaces.id);
|
|
|
DivineSenseConfig divineSenseConfig = ConfigComponent.Instance.Get<DivineSenseConfig>(AccountFileInfo.Instance.playerData.divineSenseLevel);
|
|
|
|
|
|
|
|
|
LogTool.Log($"使用神识,神识等级:{AccountFileInfo.Instance.playerData.divineSenseLevel}");
|
|
|
|
|
|
|
|
|
- var triggeredEvents = new List<EventConfig>();
|
|
|
+ List<AccountFileInfo.EventList> eventLists = new List<AccountFileInfo.EventList>();
|
|
|
+
|
|
|
+ //找出可以刷新的支线任务
|
|
|
+ List<EventConfig> zhiXianEvents = new List<EventConfig>();
|
|
|
+ for (var i = 0; i < bigMap.ZhixianActivatedPercentage.Length; i++)
|
|
|
+ {
|
|
|
+ if (PlayerManager.Instance.CurrentPlaces.progress >= bigMap.ZhixianActivatedPercentage[i])
|
|
|
+ {
|
|
|
+ if (!BagIsEvent(bigMap.ZhixianActivatedPercentage[i]) && CheckCondition(bigMap.ZhixianActivatedPercentage[i]))
|
|
|
+ {
|
|
|
+ zhiXianEvents.Add(ConfigComponent.Instance.Get<EventConfig>(bigMap.ZhixianActivatedPercentage[i]));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach (var c in zhiXianEvents)
|
|
|
+ {
|
|
|
+ AccountFileInfo.EventList eventList = AddEvent(c.ID);
|
|
|
+ if (eventList != null)
|
|
|
+ {
|
|
|
+ eventLists.Add(eventList);
|
|
|
+ eventCount--;
|
|
|
+
|
|
|
+ if (eventCount == 0)
|
|
|
+ {
|
|
|
+ return eventLists;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
for (int i = 0; i < eventCount; i++)
|
|
|
{
|
|
|
//先掉落出品质
|
|
@@ -168,8 +185,8 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
List<EventConfig> globalEvents = eventConfigs.Where(e => e.EventTriggerType == 1 && CanTriggerEvent(e.ID) && e.EventQuality == quality && !BagIsEvent(e.ID)).ToList();
|
|
|
|
|
|
|
|
|
- //神识场景事件
|
|
|
- List<EventConfig> candidateEvents = eventConfigs.Where(e => bigMap.ZhixianID.Contains(e.ID) && CanTriggerEvent(e.ID) && e.EventQuality == quality && !BagIsEvent(e.ID)).ToList();
|
|
|
+ //场景特定事件
|
|
|
+ List<EventConfig> candidateEvents = eventConfigs.Where(e => bigMap.SpecialTaskID.Contains(e.ID) && CanTriggerEvent(e.ID) && e.EventQuality == quality && !BagIsEvent(e.ID)).ToList();
|
|
|
|
|
|
if (candidateEvents.Count == 0 && globalEvents.Count == 0)
|
|
|
{
|
|
@@ -178,30 +195,28 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
|
|
|
|
|
|
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);
|
|
|
+ eventLists.Add(AddEvent(candidateEvents[randomValue2].ID));
|
|
|
}
|
|
|
else if (globalEvents.Count > 0)
|
|
|
{
|
|
|
int randomValue2 = Random.Range(0, globalEvents.Count);
|
|
|
-
|
|
|
- triggeredEvents.Add(globalEvents[randomValue2]);
|
|
|
- globalEvents.RemoveAll(ew => ew.ID == globalEvents[randomValue2].ID);
|
|
|
+ eventLists.Add(AddEvent(globalEvents[randomValue2].ID));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (triggeredEvents.Count == 0)
|
|
|
+ if (eventLists.Count == 0)
|
|
|
{
|
|
|
LogTool.Error("没有可以触发的事件");
|
|
|
- return default;
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
- return triggeredEvents;
|
|
|
+ return eventLists;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -221,9 +236,6 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
{
|
|
|
eventList = new AccountFileInfo.EventList();
|
|
|
eventList.eventID = eventID;
|
|
|
-
|
|
|
-
|
|
|
- // return eventList;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
@@ -233,6 +245,7 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //初始化神识链条,用于监听条件是否完成
|
|
|
if (eventList != null && eventConfig.EventType != 2)
|
|
|
{
|
|
|
foreach (var i in eventConfig.EventLinksId)
|
|
@@ -248,8 +261,9 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
}
|
|
|
|
|
|
eventLinkData.fishCount = 0;
|
|
|
- EventSystemManager.Instance.CeekTaskComplete(eventLinkData.eventLinkId, 1, 0);
|
|
|
- EventSystemManager.Instance.CeekTaskComplete(eventLinkData.eventLinkId, 3, 0);
|
|
|
+ //初始化先检测一些条件
|
|
|
+ CeekTaskComplete(eventLinkData.eventLinkId, 1, 0);
|
|
|
+ CeekTaskComplete(eventLinkData.eventLinkId, 3, 0);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -284,21 +298,21 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 触发事件
|
|
|
+ /// 挂机事件触发
|
|
|
/// </summary>
|
|
|
public void TriggerEvent(EventConfig evt)
|
|
|
{
|
|
|
if (isTriggerEvent)
|
|
|
return;
|
|
|
isTriggerEvent = true;
|
|
|
- LogTool.Log($"触发事件: {evt.Description} (ID: {evt.ID}, 品质: {evt.EventQuality})");
|
|
|
+ LogTool.Log($"触发事件: {evt.EventName} (ID: {evt.ID}, 品质: {evt.EventQuality})");
|
|
|
CombatDrive.Instance.CombatController.ChangeState(CombatController.idle);
|
|
|
|
|
|
DialogueManager.Instance.StartDialogue(evt.EventLinksId[0], evt.ID, () => { CompleteEvent(evt.ID); });
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 触发事件
|
|
|
+ /// 其他类型事件触发
|
|
|
/// </summary>
|
|
|
public async CTask TriggerEvent(AccountFileInfo.EventList evt, Action oncompleteCallBack = null)
|
|
|
{
|
|
@@ -308,15 +322,12 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
this.onCompleteCallback = oncompleteCallBack;
|
|
|
isTriggerEvent = true;
|
|
|
EventConfig eventConfig = ConfigComponent.Instance.Get<EventConfig>(evt.eventID);
|
|
|
- LogTool.Log($"触发事件: {LanguageManager.Instance.Text(eventConfig.Description)} (ID: {eventConfig.ID}, 品质: {eventConfig.EventQuality})");
|
|
|
+ LogTool.Log($"触发事件: {LanguageManager.Instance.Text(eventConfig.EventName)} (ID: {eventConfig.ID}, 品质: {eventConfig.EventQuality})");
|
|
|
|
|
|
int dialogueID = 0;
|
|
|
if (evt.curStep == 0)
|
|
|
{
|
|
|
dialogueID = eventConfig.EventLinksId[0];
|
|
|
-
|
|
|
-
|
|
|
- // AccountFileInfo.Instance.SavePlayerData();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -362,6 +373,8 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
{
|
|
|
CeekTaskComplete(playerDataEventLinkData.eventLinkId, type, value);
|
|
|
}
|
|
|
+
|
|
|
+ EventManager.Instance.Dispatch(CustomEventType.RemoveEvent, null);
|
|
|
}
|
|
|
|
|
|
public void CeekTaskComplete(int eventLiknId, int type, int value)
|
|
@@ -462,7 +475,7 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
/// <summary>
|
|
|
/// 检查单个触发条件。
|
|
|
/// </summary>
|
|
|
- public bool CheckCondition(int conditionid, int[] EventVlaue,int value)
|
|
|
+ public bool CheckCondition(int conditionid)
|
|
|
{
|
|
|
if (conditionid == 0)
|
|
|
return true;
|
|
@@ -491,17 +504,19 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
isTriggerEvent = false;
|
|
|
LogTool.Log($"完成挂机事件{evtId}");
|
|
|
|
|
|
+ EventConfig eventConfig = ConfigComponent.Instance.Get<EventConfig>(evtId);
|
|
|
|
|
|
AccountFileInfo.EventList eventList = new AccountFileInfo.EventList();
|
|
|
eventList.eventID = evtId;
|
|
|
AccountFileInfo.Instance.playerData.completeEvents.Add(eventList);
|
|
|
|
|
|
if (PlayerManager.Instance.CurrentPlaces.progress < 100)
|
|
|
- PlayerManager.Instance.CurrentPlaces.progress += 1;
|
|
|
+ PlayerManager.Instance.CurrentPlaces.progress += eventConfig.Score;
|
|
|
|
|
|
|
|
|
AccountFileInfo.Instance.SavePlayerData();
|
|
|
CombatDrive.Instance.CombatController.ChangeState(CombatController.update);
|
|
|
+ EventManager.Instance.Dispatch(CustomEventType.CompleteEvent, null);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -518,7 +533,7 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
AccountFileInfo.Instance.playerData.completeEvents.Add(eventList);
|
|
|
|
|
|
if (PlayerManager.Instance.CurrentPlaces.progress < 100)
|
|
|
- PlayerManager.Instance.CurrentPlaces.progress += 5;
|
|
|
+ PlayerManager.Instance.CurrentPlaces.progress += eventConfig.Score;
|
|
|
|
|
|
|
|
|
AccountFileInfo.Instance.playerData.eventList.Remove(eventList);
|
|
@@ -529,8 +544,9 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
TaskInfoPanel.OpenPanel(eventList.eventID, "任务完成");
|
|
|
}
|
|
|
|
|
|
- EventManager.Instance.Dispatch(CustomEventType.CompleteEvent, null);
|
|
|
+
|
|
|
CombatDrive.Instance.CombatController.ChangeState(CombatController.update);
|
|
|
+ EventManager.Instance.Dispatch(CustomEventType.CompleteEvent, null);
|
|
|
onCompleteCallback?.Invoke();
|
|
|
onCompleteCallback = null;
|
|
|
}
|
|
@@ -541,27 +557,6 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
/// <param name="eventID">事件ID</param>
|
|
|
public void CompleteEvent(AccountFileInfo.EventLinkData eventLinkData)
|
|
|
{
|
|
|
- // AccountFileInfo.EventList eventList = new AccountFileInfo.EventList();
|
|
|
- // eventList.eventID = eventLinkData.eventId;
|
|
|
- // AccountFileInfo.Instance.playerData.completeEvents.Add(eventList);
|
|
|
- //
|
|
|
- // if (AccountFileInfo.Instance.playerData.senceExplorationProgress < 100)
|
|
|
- // AccountFileInfo.Instance.playerData.senceExplorationProgress += 1;
|
|
|
- //
|
|
|
- //
|
|
|
- // AccountFileInfo.Instance.playerData.eventList.Remove(eventList);
|
|
|
- //
|
|
|
- // EventLinkConfig eventLinkConfig = ConfigComponent.Instance.Get<EventLinkConfig>(eventLinkData.eventLinkId);
|
|
|
- // if (eventLinkConfig.ResultType == 3)
|
|
|
- // {
|
|
|
- // //触发新事件
|
|
|
- // //弹出任务完成ui
|
|
|
- // }
|
|
|
- //
|
|
|
- // AccountFileInfo.Instance.SavePlayerData();
|
|
|
- //
|
|
|
- // EventManager.Instance.Dispatch(CustomEventType.CompleteEvent, null);
|
|
|
- // CombatDrive.Instance.CombatController.ChangeState(CombatController.update);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -585,6 +580,10 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
EventManager.Instance.Dispatch(CustomEventType.RemoveEvent, null);
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 获得主线事件
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
public AccountFileInfo.EventList GetMainEventDta()
|
|
|
{
|
|
|
foreach (var eventList in AccountFileInfo.Instance.playerData.eventList)
|