EventSystemManager.cs 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Common.Utility.CombatEvent;
  5. using Core.Language;
  6. using Excel2Json;
  7. using Fort23.Core;
  8. using Fort23.Mono;
  9. using Fort23.UTool;
  10. using GameLogic.Combat;
  11. using GameLogic.Combat.CombatTool;
  12. using UnityEngine;
  13. using Utility;
  14. using EventConfig = Excel2Json.EventConfig;
  15. using Random = UnityEngine.Random;
  16. public class EventSystemManager : Singleton<EventSystemManager>
  17. {
  18. List<EventConfig> eventConfigs = new List<EventConfig>();
  19. public AccountFileInfo.EventList CurrentEventList;
  20. public bool isTriggerEvent;
  21. List<DivineSenseConfig> divineSenseConfigs = new List<DivineSenseConfig>();
  22. List<int> qualitys = new List<int>() { 1, 2, 3, 4, 5, 6 };
  23. public bool isOpenUi;
  24. Action onCompleteCallback;
  25. // public Map<int, AccountFileInfo.EventConditionData> EventConditionDataMap = new Map<int, AccountFileInfo.EventConditionData>();
  26. public void CustomInit()
  27. {
  28. eventConfigs = ConfigComponent.Instance.GetAll<EventConfig>().ToList();
  29. divineSenseConfigs = ConfigComponent.Instance.GetAll<DivineSenseConfig>().ToList();
  30. // foreach (var playerDataEventConditionData in AccountFileInfo.Instance.playerData.eventConditionDatas)
  31. // {
  32. // EventConditionDataMap.Add(playerDataEventConditionData.guid, playerDataEventConditionData);
  33. // }
  34. StaticUpdater.Instance.AddRenderUpdateCallBack(Update);
  35. EventManager.Instance.AddEventListener(CustomEventType.DetectRandomEvent, RenfenceRandomEvent);
  36. EventManager.Instance.AddEventListener(CustomEventType.AddItem, ItemUpdate);
  37. EventManager.Instance.AddEventListener(CustomEventType.JingJieUpgrade, JingJieUpgrade);
  38. }
  39. private void JingJieUpgrade(IEventData e)
  40. {
  41. CeekEventCompletes(3, null);
  42. }
  43. private void ItemUpdate(IEventData e)
  44. {
  45. ItemUpdateData data = e as ItemUpdateData;
  46. CeekEventCompletes(1, new[] { data.ItemInfo.itemID });
  47. CeekEventCompletes(6, new[] { data.ItemInfo.itemID, data.Count });
  48. }
  49. private void RenfenceRandomEvent(IEventData e)
  50. {
  51. DetectRandomEvents();
  52. }
  53. private float timer = 0;
  54. private void Update()
  55. {
  56. timer += Time.deltaTime;
  57. if (timer > 1)
  58. {
  59. timer = 0;
  60. HeroPowerUpConfig heroPowerUpConfig = PlayerManager.Instance.myHero.powerUpConfig;
  61. if (AccountFileInfo.Instance.playerData.divineSensePoint < heroPowerUpConfig.ShenshiMax)
  62. {
  63. AccountFileInfo.Instance.playerData.divineSensePoint += 3;
  64. EventManager.Instance.Dispatch(CustomEventType.DivineSensePointChange, null);
  65. AccountFileInfo.Instance.SavePlayerData();
  66. }
  67. }
  68. }
  69. public List<AccountFileInfo.EventList> UseDivinesense()
  70. {
  71. //使用神识先移除完成的事件
  72. List<AccountFileInfo.EventList> removeEvents = new List<AccountFileInfo.EventList>();
  73. foreach (var eventList in AccountFileInfo.Instance.playerData.eventList)
  74. {
  75. if (eventList.isCompleted)
  76. {
  77. removeEvents.Add(eventList);
  78. }
  79. }
  80. foreach (var removeEvent in removeEvents)
  81. {
  82. AccountFileInfo.Instance.playerData.completeEvents.Add(removeEvent);
  83. AccountFileInfo.Instance.playerData.eventList.Remove(removeEvent);
  84. }
  85. AccountFileInfo.Instance.SavePlayerData();
  86. HeroPowerUpConfig heroPowerUpConfig = PlayerManager.Instance.myHero.powerUpConfig;
  87. int count = AccountFileInfo.Instance.playerData.divineSensePoint / PlayerManager.Instance.gameConstantConfig.DetectEventCount;
  88. if (count <= 0)
  89. {
  90. //神识值不够
  91. return null;
  92. }
  93. int maxCount = heroPowerUpConfig.ShenshiMax / PlayerManager.Instance.gameConstantConfig.DetectEventCount;
  94. count = count + AccountFileInfo.Instance.playerData.eventList.Count > maxCount ? maxCount - AccountFileInfo.Instance.playerData.eventList.Count : count;
  95. EventManager.Instance.Dispatch(CustomEventType.DivineSensePointChange, null);
  96. // 神识升级逻辑
  97. UpDivinesense();
  98. var eventConfigs = DetectEvents(count);
  99. if (eventConfigs == null || eventConfigs.Count == 0)
  100. return default;
  101. //扣除神识值 增加神识经验
  102. int xiaoHao = eventConfigs.Count * PlayerManager.Instance.gameConstantConfig.DetectEventCount;
  103. AccountFileInfo.Instance.playerData.divineSenseexp += xiaoHao;
  104. AccountFileInfo.Instance.playerData.divineSensePoint -= xiaoHao;
  105. AccountFileInfo.Instance.playerData.eventList.AddRange(eventConfigs);
  106. UpdateZuizhongEventData();
  107. AccountFileInfo.Instance.SavePlayerData();
  108. return eventConfigs;
  109. }
  110. public void UpdateZuizhongEventData()
  111. {
  112. if (AccountFileInfo.Instance.playerData.CurrentZuiZhongEventList == null || AccountFileInfo.Instance.playerData.CurrentZuiZhongEventList.guid == 0)
  113. {
  114. var mainEventData = GetMainEventDta();
  115. if (mainEventData != null)
  116. {
  117. AccountFileInfo.Instance.playerData.CurrentZuiZhongEventList = mainEventData;
  118. }
  119. else
  120. {
  121. AccountFileInfo.Instance.playerData.CurrentZuiZhongEventList = AccountFileInfo.Instance.playerData.eventList[0];
  122. }
  123. }
  124. }
  125. private void UpDivinesense()
  126. {
  127. for (var i = AccountFileInfo.Instance.playerData.divineSenseLevel - 1; i < divineSenseConfigs.Count; i++)
  128. {
  129. if (AccountFileInfo.Instance.playerData.divineSenseexp >= divineSenseConfigs[i].exp)
  130. {
  131. AccountFileInfo.Instance.playerData.divineSenseexp -= divineSenseConfigs[i].exp;
  132. AccountFileInfo.Instance.playerData.divineSenseLevel = divineSenseConfigs[i].ID;
  133. }
  134. }
  135. AccountFileInfo.Instance.SavePlayerData();
  136. }
  137. public bool BagIsEvent(int eventID)
  138. {
  139. foreach (var eventList in AccountFileInfo.Instance.playerData.eventList)
  140. {
  141. if (eventList.eventID == eventID)
  142. {
  143. return true;
  144. }
  145. }
  146. return false;
  147. }
  148. public int GetBagEventCount(int eventID)
  149. {
  150. int count = 0;
  151. foreach (var eventList in AccountFileInfo.Instance.playerData.eventList)
  152. {
  153. if (eventList.eventID == eventID)
  154. {
  155. count++;
  156. }
  157. }
  158. return count;
  159. }
  160. public bool IsEventTrigger(int eventID)
  161. {
  162. foreach (var eventList in AccountFileInfo.Instance.playerData.completeEvents)
  163. {
  164. if (eventList.eventID == eventID)
  165. {
  166. return true;
  167. }
  168. }
  169. return false;
  170. }
  171. private List<AccountFileInfo.EventList> DetectEvents(int eventCount)
  172. {
  173. PlacesConfig bigMap = ConfigComponent.Instance.Get<PlacesConfig>(PlayerManager.Instance.CurrentPlaces.id);
  174. DivineSenseConfig divineSenseConfig = ConfigComponent.Instance.Get<DivineSenseConfig>(AccountFileInfo.Instance.playerData.divineSenseLevel);
  175. LogTool.Log($"使用神识,神识等级:{AccountFileInfo.Instance.playerData.divineSenseLevel}");
  176. List<AccountFileInfo.EventList> eventLists = new List<AccountFileInfo.EventList>();
  177. //找出可以刷新的支线任务
  178. if (bigMap.ZhixianActivatedPercentage != null)
  179. {
  180. List<EventConfig> zhiXianEvents = new List<EventConfig>();
  181. for (var i = 0; i < bigMap.ZhixianActivatedPercentage.Length; i++)
  182. {
  183. if (PlayerManager.Instance.PlacesBl >= bigMap.ZhixianActivatedPercentage[i])
  184. {
  185. if (!BagIsEvent(bigMap.ZhixianID[i]) && !IsEventTrigger(bigMap.ZhixianID[i]) && CanTriggerEvent(bigMap.ZhixianID[i]))
  186. {
  187. zhiXianEvents.Add(ConfigComponent.Instance.Get<EventConfig>(bigMap.ZhixianID[i]));
  188. }
  189. }
  190. }
  191. foreach (var c in zhiXianEvents)
  192. {
  193. AccountFileInfo.EventList eventList = AddEvent(c.ID);
  194. if (eventList != null)
  195. {
  196. eventLists.Add(eventList);
  197. eventCount--;
  198. if (eventCount == 0)
  199. {
  200. return eventLists;
  201. }
  202. }
  203. }
  204. }
  205. for (int i = 0; i < eventCount; i++)
  206. {
  207. int randomValue3 = Random.Range(0, 101);
  208. //先刷事件关联的事件
  209. if (randomValue3 >= 50)
  210. {
  211. bool isRefence = false;
  212. foreach (var eventList in AccountFileInfo.Instance.playerData.eventList)
  213. {
  214. EventConfig eventConfig = ConfigComponent.Instance.Get<EventConfig>(eventList.eventID);
  215. for (var i1 = 0; i1 < eventConfig.RelatedEvents?.Length; i1++)
  216. {
  217. EventConfig eventConfig1 = ConfigComponent.Instance.Get<EventConfig>(eventConfig.RelatedEvents[i1]);
  218. int count = 0;
  219. foreach (var list in eventLists)
  220. {
  221. if (list.eventID == eventConfig1.ID)
  222. {
  223. count++;
  224. }
  225. }
  226. if (GetBagEventCount(eventConfig1.ID) + count >= eventConfig1.RefreshCount)
  227. {
  228. continue;
  229. }
  230. int randomValue4 = Random.Range(0, 101);
  231. if (randomValue4 >= eventConfig1.RefreshProbability)
  232. {
  233. eventLists.Add(AddEvent(eventConfig1.ID));
  234. isRefence = true;
  235. break;
  236. }
  237. }
  238. }
  239. if (isRefence)
  240. continue;
  241. }
  242. //先掉落出品质
  243. int quality = UtilTools.GetRandomByWeight(qualitys, divineSenseConfig.QualityBonusChance);
  244. // 获取通用事件
  245. List<EventConfig> globalEvents = eventConfigs.Where(e => e.EventTriggerType == 1 && CanTriggerEvent(e.ID) && e.EventQuality == quality && !BagIsEvent(e.ID) && eventLists.FirstOrDefault(el => el.eventID == e.ID) == null).ToList();
  246. //场景特定事件
  247. List<EventConfig> candidateEvents = eventConfigs.Where(e => bigMap.SpecialTaskID.Contains(e.ID) && CanTriggerEvent(e.ID) && e.EventQuality == quality && !BagIsEvent(e.ID) && eventLists.FirstOrDefault(el => el.eventID == e.ID) == null).ToList();
  248. if (candidateEvents.Count == 0 && globalEvents.Count == 0)
  249. {
  250. continue;
  251. }
  252. int randomValue1 = Random.Range(0, 101);
  253. // 达到怪率刷新场景特定事件
  254. //不然刷新通用事件(每个地图都可以刷的)
  255. if (randomValue1 >= bigMap.DivineSenseGeneralProbability && candidateEvents.Count > 0)
  256. {
  257. int randomValue2 = Random.Range(0, candidateEvents.Count);
  258. eventLists.Add(AddEvent(candidateEvents[randomValue2].ID));
  259. }
  260. else if (globalEvents.Count > 0)
  261. {
  262. int randomValue2 = Random.Range(0, globalEvents.Count);
  263. eventLists.Add(AddEvent(globalEvents[randomValue2].ID));
  264. }
  265. }
  266. if (eventLists.Count == 0)
  267. {
  268. LogTool.Error("没有可以触发的事件");
  269. return null;
  270. }
  271. return eventLists;
  272. }
  273. //添加事件
  274. public AccountFileInfo.EventList AddEvent(int eventID)
  275. {
  276. EventConfig eventConfig = ConfigComponent.Instance.Get<EventConfig>(eventID);
  277. AccountFileInfo.EventList eventList = null;
  278. AccountFileInfo.EventList e = AccountFileInfo.Instance.playerData.eventList.FirstOrDefault(e => e.eventID == eventID);
  279. if (e == null)
  280. {
  281. //主线任务只能刷一次
  282. if (eventConfig.EventTriggerType == 4)
  283. {
  284. e = AccountFileInfo.Instance.playerData.completeEvents.FirstOrDefault(e => e.eventID == eventID);
  285. if (e == null)
  286. {
  287. eventList = new AccountFileInfo.EventList();
  288. eventList.eventID = eventID;
  289. }
  290. }
  291. else
  292. {
  293. eventList = new AccountFileInfo.EventList();
  294. eventList.eventID = eventID;
  295. }
  296. eventList.guid = IdGenerater.GenerateIdInt();
  297. eventList.curStep = eventConfig.EventLinksId[0];
  298. }
  299. //初始化神识链条,用于监听条件是否完成
  300. if (eventList != null && eventConfig.EventType != 2)
  301. {
  302. foreach (var i in eventConfig.EventLinksId)
  303. {
  304. EventLinkConfig eventLinkConfig = ConfigComponent.Instance.Get<EventLinkConfig>(i);
  305. AccountFileInfo.EventLinkData eventLinkData = new AccountFileInfo.EventLinkData();
  306. eventLinkData.eventId = eventID;
  307. eventLinkData.eventLinkId = i;
  308. if (eventLinkConfig.ConditionId != null)
  309. {
  310. foreach (var i1 in eventLinkConfig.ConditionId)
  311. {
  312. AccountFileInfo.EventConditionData eventConditionData = new AccountFileInfo.EventConditionData();
  313. eventConditionData.eventId = eventList.eventID;
  314. eventConditionData.eventCondition = i1;
  315. // AccountFileInfo.Instance.playerData.eventConditionDatas.Add(eventConditionData);
  316. eventLinkData.eventConditions.Add(eventConditionData);
  317. //初始化先检测一些条件
  318. CeekTaskComplete(eventConditionData, 1, null);
  319. CeekTaskComplete(eventConditionData, 3, null);
  320. }
  321. }
  322. eventList.eventLinks.Add(eventLinkData);
  323. }
  324. }
  325. return eventList;
  326. }
  327. /// <summary>
  328. /// 触发随机事件
  329. /// </summary>
  330. public void DetectRandomEvents()
  331. {
  332. if (isTriggerEvent)
  333. return;
  334. if (isOpenUi)
  335. return;
  336. // 获取随机事件
  337. List<EventConfig> randomEvents = eventConfigs.Where(e => e.EventTriggerType == 2 && CanTriggerEvent(e.ID)).ToList();
  338. if (randomEvents.Count == 0)
  339. {
  340. LogTool.Warning("没有可以刷新的事件");
  341. return;
  342. }
  343. int idex = Random.Range(0, randomEvents.Count);
  344. TriggerEvent(randomEvents[idex]);
  345. }
  346. /// <summary>
  347. /// 挂机事件触发
  348. /// </summary>
  349. public void TriggerEvent(EventConfig evt)
  350. {
  351. if (isTriggerEvent)
  352. return;
  353. isTriggerEvent = true;
  354. LogTool.Log($"触发事件: {evt.EventName} (ID: {evt.ID}, 品质: {evt.EventQuality})");
  355. CombatDrive.Instance.CombatController.ChangeState(CombatController.idle);
  356. DialogueManager.Instance.StartDialogue(null, evt.EventLinksId[0], evt.ID, () => { CompleteEvent(evt.ID); });
  357. }
  358. /// <summary>
  359. /// 其他类型事件触发
  360. /// </summary>
  361. public async CTask TriggerEvent(AccountFileInfo.EventList evt, Action oncompleteCallBack = null)
  362. {
  363. if (isTriggerEvent)
  364. return;
  365. CTask cTask = CTask.Create();
  366. this.onCompleteCallback = oncompleteCallBack;
  367. isTriggerEvent = true;
  368. EventConfig eventConfig = ConfigComponent.Instance.Get<EventConfig>(evt.eventID);
  369. LogTool.Log($"触发事件: {LanguageManager.Instance.Text(eventConfig.EventName)} (ID: {eventConfig.ID}, 品质: {eventConfig.EventQuality})");
  370. int dialogueID = 0;
  371. if (evt.curStep == 0)
  372. {
  373. dialogueID = eventConfig.EventLinksId[0];
  374. }
  375. else
  376. {
  377. dialogueID = evt.curStep;
  378. }
  379. CurrentEventList = evt;
  380. CombatDrive.Instance.CombatController.ChangeState(CombatController.idle);
  381. DialogueManager.Instance.StartDialogue(CurrentEventList, dialogueID, eventConfig.ID, () =>
  382. {
  383. CompleteEvent(CurrentEventList);
  384. cTask.SetResult();
  385. }, () =>
  386. {
  387. CancelEvent(CurrentEventList);
  388. cTask.SetResult();
  389. });
  390. await cTask;
  391. }
  392. //任务是否完成
  393. public bool IsEvenkLinkComplete(AccountFileInfo.EventConditionData eventCondition)
  394. {
  395. EventConditionConfig eventConditionConfig = ConfigComponent.Instance.Get<EventConditionConfig>(eventCondition.eventCondition);
  396. if (eventCondition != null)
  397. {
  398. return eventCondition.fishCount >= eventConditionConfig.finishCount;
  399. }
  400. return false;
  401. }
  402. public bool CeekEventGroupComplete(List<AccountFileInfo.EventConditionData> eventConditions)
  403. {
  404. Map<int, List<AccountFileInfo.EventConditionData>> eventConditionDataGroup = new Map<int, List<AccountFileInfo.EventConditionData>>();
  405. foreach (var eventConditionData in eventConditions)
  406. {
  407. EventConditionConfig eventConditionConfig = ConfigComponent.Instance.Get<EventConditionConfig>(eventConditionData.eventCondition);
  408. if (!eventConditionDataGroup.ContainsKey(eventConditionConfig.Operation))
  409. {
  410. eventConditionDataGroup.Add(eventConditionConfig.Operation, new List<AccountFileInfo.EventConditionData>());
  411. }
  412. eventConditionDataGroup[eventConditionConfig.Operation].Add(eventConditionData);
  413. }
  414. bool isUlock = true;
  415. //分组检测 其中一个组绑定成功就可以执行
  416. foreach (var keyValuePair in eventConditionDataGroup)
  417. {
  418. isUlock = true;
  419. foreach (var eventConditionData in keyValuePair.Value)
  420. {
  421. if (!IsEvenkLinkComplete(eventConditionData))
  422. {
  423. isUlock = false;
  424. }
  425. }
  426. if (isUlock)
  427. {
  428. return isUlock;
  429. }
  430. }
  431. return isUlock;
  432. }
  433. public void CeekEventCompletes(int type, int[] value)
  434. {
  435. foreach (var playerDataEventLinkData in AccountFileInfo.Instance.playerData.eventList)
  436. {
  437. foreach (var eventLinkData in playerDataEventLinkData.eventLinks)
  438. {
  439. foreach (var eventConditionData in eventLinkData.eventConditions)
  440. {
  441. CeekTaskComplete(eventConditionData, type, value);
  442. }
  443. }
  444. }
  445. EventManager.Instance.Dispatch(CustomEventType.RemoveEvent, null);
  446. }
  447. public void CeekTaskComplete(AccountFileInfo.EventConditionData conditionData, int type, int[] value)
  448. {
  449. EventConditionConfig eventConditionConfig = ConfigComponent.Instance.Get<EventConditionConfig>(conditionData.eventCondition);
  450. if (IsEvenkLinkComplete(conditionData))
  451. return;
  452. switch (type)
  453. {
  454. //检测背包道具
  455. case 1:
  456. if (eventConditionConfig.ConditionType == 1)
  457. {
  458. conditionData.fishCount += (int)PlayerManager.Instance.BagController.GetItemCount(eventConditionConfig.ConditionPara[0]);
  459. if (IsEvenkLinkComplete(conditionData))
  460. {
  461. // CompleteTask(conditionData.guid);
  462. }
  463. }
  464. break;
  465. //境界检测
  466. case 3:
  467. if (eventConditionConfig.ConditionType == 3 && PlayerManager.Instance.myHero.powerUpConfig.ID >= eventConditionConfig.ConditionPara[0])
  468. {
  469. conditionData.fishCount++;
  470. if (IsEvenkLinkComplete(conditionData))
  471. {
  472. // CompleteTask(conditionData.guid);
  473. }
  474. }
  475. break;
  476. //战斗胜利
  477. case 5:
  478. if (eventConditionConfig.ConditionType == 5 && eventConditionConfig.ConditionPara[0] == value[0])
  479. {
  480. conditionData.fishCount++;
  481. if (IsEvenkLinkComplete(conditionData))
  482. {
  483. // CompleteEvent(conditionData.guid);
  484. }
  485. }
  486. break;
  487. //获得道具
  488. case 6:
  489. if (eventConditionConfig.ConditionType == 6 && eventConditionConfig.ConditionPara[0] == value[0])
  490. {
  491. conditionData.fishCount += value[1];
  492. if (IsEvenkLinkComplete(conditionData))
  493. {
  494. // CompleteEvent(conditionData.guid);
  495. }
  496. }
  497. break;
  498. }
  499. AccountFileInfo.Instance.SavePlayerData();
  500. }
  501. private void CompleteTask(object taskID)
  502. {
  503. }
  504. /// <summary>
  505. /// 检查事件是否满足触发条件。
  506. /// </summary>
  507. private bool CanTriggerEvent(int eventID)
  508. {
  509. var evt = eventConfigs.Find(e => e.ID == eventID);
  510. if (evt.ID == 0)
  511. return false;
  512. switch (evt.EventConditionId)
  513. {
  514. //背包道具检测
  515. case 1:
  516. return PlayerManager.Instance.BagController.GetItemCount(evt.EventValue[0]) >= evt.EventCount;
  517. //境界判断
  518. case 2:
  519. return PlayerManager.Instance.myHero.level >= evt.EventCount;
  520. //概率判断
  521. case 3:
  522. int randomValue1 = Random.Range(0, 1001);
  523. return randomValue1 <= evt.EventCount;
  524. }
  525. return true;
  526. }
  527. /// <summary>
  528. /// 完成事件
  529. /// </summary>
  530. /// <param name="eventID">事件ID</param>
  531. public void CompleteEvent(int evtId)
  532. {
  533. isTriggerEvent = false;
  534. LogTool.Log($"完成挂机事件{evtId}");
  535. EventConfig eventConfig = ConfigComponent.Instance.Get<EventConfig>(evtId);
  536. AccountFileInfo.EventList eventList = new AccountFileInfo.EventList();
  537. eventList.eventID = evtId;
  538. AccountFileInfo.Instance.playerData.completeEvents.Add(eventList);
  539. if (PlayerManager.Instance.CurrentPlaces.progress < 100)
  540. PlayerManager.Instance.CurrentPlaces.progress += eventConfig.Score;
  541. AccountFileInfo.Instance.SavePlayerData();
  542. CombatDrive.Instance.CombatController.ChangeState(CombatController.update);
  543. EventManager.Instance.Dispatch(CustomEventType.CompleteEvent, null);
  544. }
  545. /// <summary>
  546. /// 完成事件
  547. /// </summary>
  548. /// <param name="eventID">事件ID</param>
  549. public void CompleteEvent(AccountFileInfo.EventList eventList, bool isTriggerEvent = false)
  550. {
  551. this.isTriggerEvent = isTriggerEvent;
  552. LogTool.Log($"完成事件{eventList.eventID}");
  553. EventConfig eventConfig = ConfigComponent.Instance.Get<EventConfig>(eventList.eventID);
  554. AccountFileInfo.EventList ceventList = AccountFileInfo.Instance.playerData.completeEvents.FirstOrDefault(ce => ce.eventID == eventList.eventID);
  555. if (ceventList == null)
  556. {
  557. PlacesConfig[] placesConfigs = ConfigComponent.Instance.GetAll<PlacesConfig>();
  558. int pId = 0;
  559. for (var i = 0; i < placesConfigs.Length; i++)
  560. {
  561. if (placesConfigs[i].MainTaskID == null || placesConfigs[i].ZhixianID == null)
  562. continue;
  563. if (placesConfigs[i].MainTaskID.Contains(eventConfig.ID) ||
  564. placesConfigs[i].ZhixianID.Contains(eventConfig.ID))
  565. {
  566. pId = placesConfigs[i].ID;
  567. break;
  568. }
  569. }
  570. if (pId == 0)
  571. {
  572. PlayerManager.Instance.CurrentPlaces.progress += eventConfig.Score;
  573. }
  574. else
  575. {
  576. PlayerManager.Instance.GetPlacesData(pId).progress += eventConfig.Score;
  577. }
  578. }
  579. //先不移除 下次探索神识移除
  580. eventList.isCompleted = true;
  581. // AccountFileInfo.Instance.playerData.completeEvents.Add(eventList);
  582. //
  583. //
  584. //
  585. // AccountFileInfo.Instance.playerData.eventList.Remove(eventList);
  586. if (AccountFileInfo.Instance.playerData.CurrentZuiZhongEventList.guid == eventList.guid)
  587. {
  588. AccountFileInfo.Instance.playerData.CurrentZuiZhongEventList = null;
  589. UpdateZuizhongEventData();
  590. }
  591. AccountFileInfo.Instance.SavePlayerData();
  592. if (eventConfig.EventTriggerType == 4)
  593. {
  594. TaskInfoPanel.OpenPanel(eventList);
  595. }
  596. CombatDrive.Instance.CombatController.ChangeState(CombatController.update);
  597. EventManager.Instance.Dispatch(CustomEventType.CompleteEvent, null);
  598. onCompleteCallback?.Invoke();
  599. onCompleteCallback = null;
  600. }
  601. /// <summary>
  602. /// 完成事件
  603. /// </summary>
  604. /// <param name="eventID">事件ID</param>
  605. public void CompleteEvent(AccountFileInfo.EventLinkData eventLinkData)
  606. {
  607. }
  608. /// <summary>
  609. /// 取消事件
  610. /// </summary>
  611. /// <param name="eventID">事件ID</param>
  612. public void CancelEvent(AccountFileInfo.EventList eventList)
  613. {
  614. LogTool.Log($"取消事件{eventList.eventID}");
  615. isTriggerEvent = false;
  616. EventManager.Instance.Dispatch(CustomEventType.CompleteEvent, null);
  617. CombatDrive.Instance.CombatController.ChangeState(CombatController.update);
  618. onCompleteCallback?.Invoke();
  619. onCompleteCallback = null;
  620. }
  621. public void RemoveEvent(AccountFileInfo.EventList eventList)
  622. {
  623. AccountFileInfo.Instance.playerData.eventList.Remove(eventList);
  624. AccountFileInfo.Instance.SavePlayerData();
  625. EventManager.Instance.Dispatch(CustomEventType.RemoveEvent, null);
  626. }
  627. /// <summary>
  628. /// 获得主线事件
  629. /// </summary>
  630. /// <returns></returns>
  631. public AccountFileInfo.EventList GetMainEventDta()
  632. {
  633. foreach (var eventList in AccountFileInfo.Instance.playerData.eventList)
  634. {
  635. EventConfig eventConfig = ConfigComponent.Instance.Get<EventConfig>(eventList.eventID);
  636. if (eventConfig.EventTriggerType == 4)
  637. {
  638. return eventList;
  639. }
  640. }
  641. return null;
  642. }
  643. }