|
@@ -1,6 +1,7 @@
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
+using Common.Utility.CombatEvent;
|
|
|
using Core.Language;
|
|
|
using Excel2Json;
|
|
|
using Fort23.Core;
|
|
@@ -37,6 +38,20 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
|
|
|
StaticUpdater.Instance.AddRenderUpdateCallBack(Update);
|
|
|
EventManager.Instance.AddEventListener(CustomEventType.DetectRandomEvent, RenfenceRandomEvent);
|
|
|
+ EventManager.Instance.AddEventListener(CustomEventType.ItemUpdate, ItemUpdate);
|
|
|
+ EventManager.Instance.AddEventListener(CustomEventType.JingJieUpgrade, JingJieUpgrade);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void JingJieUpgrade(IEventData e)
|
|
|
+ {
|
|
|
+ CeekEventCompletes(3, 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void ItemUpdate(IEventData e)
|
|
|
+ {
|
|
|
+ ItemUpdateData data = e as ItemUpdateData;
|
|
|
+ CeekEventCompletes(1, data.ItemInfo.itemID);
|
|
|
+ CeekEventCompletes(6, data.ItemInfo.itemID);
|
|
|
}
|
|
|
|
|
|
private void RenfenceRandomEvent(IEventData e)
|
|
@@ -115,6 +130,19 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
}
|
|
|
|
|
|
|
|
|
+ private bool BagIsEvent(int eventID)
|
|
|
+ {
|
|
|
+ foreach (var eventList in AccountFileInfo.Instance.playerData.eventList)
|
|
|
+ {
|
|
|
+ if (eventList.eventID == eventID)
|
|
|
+ {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
private List<EventConfig> DetectEvents(int bigMapId, int eventCount)
|
|
|
{
|
|
|
BigMap bigMap = ConfigComponent.Instance.Get<BigMap>(bigMapId);
|
|
@@ -132,11 +160,11 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
|
|
|
|
|
|
// 获取通用事件
|
|
|
- List<EventConfig> globalEvents = eventConfigs.Where(e => e.EventTriggerType == 1 && CanTriggerEvent(e.ID) && e.EventQuality == quality).ToList();
|
|
|
+ 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.DivineSenseGeneralEvent.Contains(e.ID) && CanTriggerEvent(e.ID) && e.EventQuality == quality).ToList();
|
|
|
+ List<EventConfig> candidateEvents = eventConfigs.Where(e => bigMap.DivineSenseGeneralEvent.Contains(e.ID) && CanTriggerEvent(e.ID) && e.EventQuality == quality && !BagIsEvent(e.ID)).ToList();
|
|
|
|
|
|
if (candidateEvents.Count == 0 && globalEvents.Count == 0)
|
|
|
{
|
|
@@ -208,7 +236,7 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
LogTool.Log($"触发事件: {evt.Description} (ID: {evt.ID}, 品质: {evt.EventQuality})");
|
|
|
CombatDrive.Instance.CombatController.ChangeState(CombatController.idle);
|
|
|
|
|
|
- DialogueManager.Instance.StartDialogue(evt.EventBeginId, evt.ID, () => { CompleteEvent(evt.ID); });
|
|
|
+ DialogueManager.Instance.StartDialogue(evt.EventLinksId[0], evt.ID, () => { CompleteEvent(evt.ID); });
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -227,13 +255,34 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
int dialogueID = 0;
|
|
|
if (evt.curStep == 0)
|
|
|
{
|
|
|
- dialogueID = eventConfig.EventBeginId;
|
|
|
+ dialogueID = eventConfig.EventLinksId[0];
|
|
|
+
|
|
|
+ foreach (var i in eventConfig.EventLinksId)
|
|
|
+ {
|
|
|
+ AccountFileInfo.EventLinkData eventLinkData = AccountFileInfo.Instance.playerData.eventLinkDatas.FirstOrDefault(el => el.eventLinkId == i);
|
|
|
+
|
|
|
+ if (eventLinkData == null)
|
|
|
+ {
|
|
|
+ eventLinkData = new AccountFileInfo.EventLinkData();
|
|
|
+ eventLinkData.eventId = evt.eventID;
|
|
|
+ eventLinkData.eventLinkId = i;
|
|
|
+ AccountFileInfo.Instance.playerData.eventLinkDatas.Add(eventLinkData);
|
|
|
+ }
|
|
|
+
|
|
|
+ eventLinkData.fishCount = 0;
|
|
|
+ EventSystemManager.Instance.CeekTaskComplete(eventLinkData.eventLinkId, 1, 0);
|
|
|
+ EventSystemManager.Instance.CeekTaskComplete(eventLinkData.eventLinkId, 3, 0);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ AccountFileInfo.Instance.SavePlayerData();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
dialogueID = evt.curStep;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
CurrentEventList = evt;
|
|
|
CombatDrive.Instance.CombatController.ChangeState(CombatController.idle);
|
|
|
DialogueManager.Instance.StartDialogue(dialogueID, eventConfig.ID, () =>
|
|
@@ -248,6 +297,108 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
await cTask;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ //任务是否完成
|
|
|
+ public bool IsEvenkLinkComplete(int eventLinkId)
|
|
|
+ {
|
|
|
+ EventLinkConfig eventLinkConfig = ConfigComponent.Instance.Get<EventLinkConfig>(eventLinkId);
|
|
|
+ if (eventLinkConfig.ConditionType == 0)
|
|
|
+ return true;
|
|
|
+
|
|
|
+ AccountFileInfo.EventLinkData eventLinkData = AccountFileInfo.Instance.playerData.eventLinkDatas.FirstOrDefault(el => el.eventLinkId == eventLinkId);
|
|
|
+
|
|
|
+ if (eventLinkData != null)
|
|
|
+ {
|
|
|
+ return eventLinkData.fishCount >= eventLinkConfig.finishCount;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void CeekEventCompletes(int type, int value)
|
|
|
+ {
|
|
|
+ foreach (var playerDataEventLinkData in AccountFileInfo.Instance.playerData.eventLinkDatas)
|
|
|
+ {
|
|
|
+ CeekTaskComplete(playerDataEventLinkData.eventLinkId, type, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void CeekTaskComplete(int eventLiknId, int type, int value)
|
|
|
+ {
|
|
|
+ //任务完成了跳过检测
|
|
|
+ if (IsEvenkLinkComplete(eventLiknId))
|
|
|
+ return;
|
|
|
+ AccountFileInfo.EventLinkData eventLinkData = AccountFileInfo.Instance.playerData.eventLinkDatas.FirstOrDefault(el => el.eventLinkId == eventLiknId);
|
|
|
+
|
|
|
+ EventLinkConfig eventLinkConfig = ConfigComponent.Instance.Get<EventLinkConfig>(eventLiknId);
|
|
|
+ switch (type)
|
|
|
+ {
|
|
|
+ //检测背包道具
|
|
|
+ case 1:
|
|
|
+ if (eventLinkConfig.ConditionType == 1)
|
|
|
+ {
|
|
|
+ eventLinkData.fishCount += (int)PlayerManager.Instance.BagController.GetItemCount(eventLinkConfig.ConditionPara[0]);
|
|
|
+
|
|
|
+ if (IsEvenkLinkComplete(eventLiknId))
|
|
|
+ {
|
|
|
+ CompleteTask(eventLiknId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+
|
|
|
+ //境界检测
|
|
|
+ case 3:
|
|
|
+ if (eventLinkConfig.ConditionType == 3 && PlayerManager.Instance.myHero.powerUpConfig.ID >= eventLinkConfig.ConditionPara[0])
|
|
|
+ {
|
|
|
+ eventLinkData.fishCount++;
|
|
|
+
|
|
|
+ if (IsEvenkLinkComplete(eventLiknId))
|
|
|
+ {
|
|
|
+ CompleteTask(eventLiknId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+
|
|
|
+ //战斗胜利
|
|
|
+ case 5:
|
|
|
+ if (eventLinkConfig.ConditionType == 5 && eventLinkConfig.ConditionPara[0] == value)
|
|
|
+ {
|
|
|
+ eventLinkData.fishCount++;
|
|
|
+
|
|
|
+ if (IsEvenkLinkComplete(eventLiknId))
|
|
|
+ {
|
|
|
+ CompleteEvent(eventLiknId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+
|
|
|
+ //获得道具
|
|
|
+ case 6:
|
|
|
+ if (eventLinkConfig.ConditionType == 5 && eventLinkConfig.ConditionPara[0] == value)
|
|
|
+ {
|
|
|
+ eventLinkData.fishCount++;
|
|
|
+
|
|
|
+ if (IsEvenkLinkComplete(eventLiknId))
|
|
|
+ {
|
|
|
+ CompleteEvent(eventLinkData);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ AccountFileInfo.Instance.SavePlayerData();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void CompleteTask(object taskID)
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 检查事件是否满足触发条件。
|
|
|
/// </summary>
|
|
@@ -275,6 +426,7 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
if (conditionid == 0)
|
|
|
return true;
|
|
|
|
|
|
+
|
|
|
//道具id判断
|
|
|
if (conditionid == 1)
|
|
|
{
|
|
@@ -297,28 +449,22 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
/// 完成事件
|
|
|
/// </summary>
|
|
|
/// <param name="eventID">事件ID</param>
|
|
|
- public void CompleteEvent(int eventID)
|
|
|
+ public void CompleteEvent(int evtId)
|
|
|
{
|
|
|
isTriggerEvent = false;
|
|
|
- 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;
|
|
|
- }
|
|
|
+ LogTool.Log($"完成挂机事件{evtId}");
|
|
|
+
|
|
|
|
|
|
- eventData.completeCount++;
|
|
|
- AccountFileInfo.Instance.playerData.events.Add(eventData);
|
|
|
+ AccountFileInfo.EventList eventList = new AccountFileInfo.EventList();
|
|
|
+ eventList.eventID = evtId;
|
|
|
+ AccountFileInfo.Instance.playerData.completeEvents.Add(eventList);
|
|
|
|
|
|
if (AccountFileInfo.Instance.playerData.senceExplorationProgress < 100)
|
|
|
- AccountFileInfo.Instance.playerData.senceExplorationProgress += 5;
|
|
|
+ AccountFileInfo.Instance.playerData.senceExplorationProgress += 1;
|
|
|
|
|
|
|
|
|
AccountFileInfo.Instance.SavePlayerData();
|
|
|
CombatDrive.Instance.CombatController.ChangeState(CombatController.update);
|
|
|
-
|
|
|
- // EventManager.Instance.Dispatch(CustomEventType.CompleteEvent, null);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -329,15 +475,8 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
{
|
|
|
this.isTriggerEvent = isTriggerEvent;
|
|
|
LogTool.Log($"完成事件{eventList.eventID}");
|
|
|
- AccountFileInfo.EventData eventData = AccountFileInfo.Instance.playerData.events.FirstOrDefault((e) => e.eventID == eventList.eventID);
|
|
|
- if (eventData == null)
|
|
|
- {
|
|
|
- eventData = new AccountFileInfo.EventData();
|
|
|
- eventData.eventID = eventList.eventID;
|
|
|
- }
|
|
|
|
|
|
- eventData.completeCount++;
|
|
|
- AccountFileInfo.Instance.playerData.events.Add(eventData);
|
|
|
+ AccountFileInfo.Instance.playerData.completeEvents.Add(eventList);
|
|
|
|
|
|
if (AccountFileInfo.Instance.playerData.senceExplorationProgress < 100)
|
|
|
AccountFileInfo.Instance.playerData.senceExplorationProgress += 1;
|
|
@@ -352,6 +491,35 @@ public class EventSystemManager : Singleton<EventSystemManager>
|
|
|
onCompleteCallback = null;
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 完成事件
|
|
|
+ /// </summary>
|
|
|
+ /// <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>
|
|
|
/// 取消事件
|
|
|
/// </summary>
|