RedDotDataManager.cs 40 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Assets.Game.HotUpdate.Data;
  4. using ET;
  5. using Hutool;
  6. namespace GFGGame
  7. {
  8. public class RedDotDataManager : SingletonBase<RedDotDataManager>
  9. {
  10. /// <summary>
  11. /// 公告
  12. /// 是否有未读公告
  13. /// </summary>
  14. /// <returns></returns>
  15. public bool GetNoticeRed()
  16. {
  17. List<NoticeInfo> noticeInfos = NoticeDataManager.Instance.NoticeInfos;
  18. for (int i = 0; i < noticeInfos.Count; i++)
  19. {
  20. if (noticeInfos[i].readStatus == false) return true;
  21. }
  22. return false;
  23. }
  24. /// <summary>
  25. /// 任务
  26. /// 是否有任务奖励、任务宝箱奖励可领
  27. /// </summary>
  28. /// <returns></returns>
  29. public bool GetTaskRed()
  30. {
  31. //判断活跃奖励是否有可以领取
  32. var hadGetRewardNum = DailyTaskDataManager.Instance.GetHadGetRewardNum(0);
  33. if (hadGetRewardNum)
  34. {
  35. return true;
  36. }
  37. if (TaskDataManager.Instance.CheckTaskRewardCanGet(TaskFuncType.Daily))
  38. {
  39. return true;
  40. }
  41. if (TaskDataManager.Instance.CheckTaskRewardCanGet(TaskFuncType.Weekly))
  42. {
  43. return true;
  44. }
  45. if (TaskDataManager.Instance.CheckTaskRewardCanGet(TaskFuncType.Achievement))
  46. {
  47. return true;
  48. }
  49. return false;
  50. //判断是否有通行证奖励可领取
  51. //return BattlePassTaskDataManager.Instance.GetHadCanGetReward();
  52. }
  53. //七日活动红点
  54. public bool GetActivityDay7Red()
  55. {
  56. //任务奖励
  57. var maxDay = ActivityDay7DataManager.Instance.GetActivityDay7MaxPassDay();
  58. for (var day = maxDay; day > 0; day--)
  59. {
  60. if (ActivityDay7DataManager.Instance.CheckActivityDay7TaskRewrdCanGetByDay(day))
  61. {
  62. return true;
  63. }
  64. }
  65. //活跃奖励
  66. var activity7DaysCfgs = Activity7DaysCfgArray.Instance.dataArray;
  67. foreach (var cfg in activity7DaysCfgs)
  68. {
  69. if (ActivityDay7DataManager.Instance.CheckActivityDay7RewardCanGet(cfg.id))
  70. {
  71. return true;
  72. }
  73. }
  74. return false;
  75. }
  76. /// <summary>
  77. /// 有邮件未读或未领奖励
  78. /// </summary>
  79. /// <returns></returns>
  80. public bool GetMailRed()
  81. {
  82. if (MailDataManager.Instance.UnreadCount > 0) return true;
  83. return false;
  84. }
  85. /// <summary>
  86. /// 套装收集奖励可领
  87. /// </summary>
  88. /// <returns></returns>
  89. public bool GetFieldGuideRed()
  90. {
  91. List<int> _suitIds = SuitUtil.GetSuitIdList(false, true, 0, 3); //全部已获得套装按照收集度高排序
  92. for (int i = 0; i < _suitIds.Count; i++)
  93. {
  94. int status = DressUpMenuSuitDataManager.GetSuitGuideBonusStatus(_suitIds[i]);
  95. if (status == ConstBonusStatus.CAN_GET)
  96. {
  97. return true;
  98. }
  99. }
  100. return false;
  101. }
  102. /// <summary>
  103. /// 套装收集种类界面奖励可领
  104. /// </summary>
  105. /// <returns></returns>
  106. public bool GetSuitGuideRed(int typeIndex)
  107. {
  108. List<int> _suitIds = SuitUtil.GetSuitIdList(false, true, typeIndex, 3); //全部已获得套装按照收集度高排序
  109. for (int i = 0; i < _suitIds.Count; i++)
  110. {
  111. int status = DressUpMenuSuitDataManager.GetSuitGuideBonusStatus(_suitIds[i]);
  112. if (status == ConstBonusStatus.CAN_GET)
  113. {
  114. return true;
  115. }
  116. }
  117. return false;
  118. }
  119. /// <summary>
  120. /// 根据章节Id判断是否有奖励可领
  121. /// </summary>
  122. /// <returns></returns>
  123. public bool GetChapterRed(int chapterId)
  124. {
  125. for (int i = 0; i < 3; i++)
  126. {
  127. int state = MainStoryDataManager.GetChapterBonusStatus(chapterId, i);
  128. if (state == ConstBonusStatus.CAN_GET)
  129. {
  130. return true;
  131. }
  132. }
  133. return false;
  134. }
  135. /// <summary>
  136. /// 好友红点
  137. /// </summary>
  138. /// <returns></returns>
  139. public bool GetFriendRed()
  140. {
  141. return GetFriendApplyRed() || GetFriendGiftRed();
  142. }
  143. /// <summary>
  144. /// 是否有好友申请
  145. /// </summary>
  146. /// <returns></returns>
  147. public bool GetFriendApplyRed()
  148. {
  149. return FriendDataManager.Instance.ApplyDatas.Count > 0;
  150. }
  151. /// <summary>
  152. /// 是否有好友可领体力
  153. /// </summary>
  154. /// <returns></returns>
  155. public bool GetFriendGiftRed()
  156. {
  157. if (FriendDataManager.Instance.Count >= FriendDataManager.Instance.maxGetPowerCount) return false;
  158. List<long> friendInfos = FriendDataManager.Instance.FriendDatas;
  159. for (int i = 0; i < friendInfos.Count; i++)
  160. {
  161. FriendInfoData friendInfo = FriendDataManager.Instance.GetFriendDataById(friendInfos[i]);
  162. if (friendInfo.takeGiftState == ConstBonusStatus.CAN_GET)
  163. {
  164. return true;
  165. }
  166. }
  167. return false;
  168. }
  169. /// <summary>
  170. /// 商城-礼包红点
  171. /// </summary>
  172. /// <returns></returns>
  173. public bool GetRechargeGiftFreeRed()
  174. {
  175. // List<GiftBagCfg> _giftCfgs = ShopDataManager.Instance.GetGiftBagCfgs();
  176. // for (int i = 0; i < _giftCfgs.Count; i++)
  177. // {
  178. // GiftBagCfg cfg = _giftCfgs[i];
  179. // bool isUnLock = ShopDataManager.Instance.GetShopGoodsStateById(cfg.id);
  180. // int buyNum = ShopDataManager.Instance.GetGoodsBuyNumById(cfg.id);
  181. // bool canBuy = cfg.maxBuyNum == 0 || buyNum < cfg.maxBuyNum ? true : false;
  182. // if (isUnLock && canBuy && cfg.price == 0) return true;
  183. // }
  184. return false;
  185. }
  186. /// <summary>
  187. /// 田野调查红点
  188. /// </summary>
  189. /// <returns></returns>
  190. public bool GetFieldRed()
  191. {
  192. List<FieldTaskCfg> _cfgs = FieldDataManager.Instance.GetTaskCfgs();
  193. for (int i = 0; i < _cfgs.Count; i++)
  194. {
  195. int state = FieldDataManager.Instance.GetTaskState(_cfgs[i].id);
  196. if (state == ConstBonusStatus.CAN_GET) return true;
  197. }
  198. return false;
  199. }
  200. /// <summary>
  201. /// 工作室红点
  202. /// </summary>
  203. /// <returns></returns>
  204. public bool GetStudioFilingRed(bool checkCurChapter = true)
  205. {
  206. List<StudioCfg> studioCfgs = StudioCfgArray.Instance.GetCfgsByfunId(typeof(StudioFilingView).Name);
  207. for (int i = 0; i < studioCfgs.Count; i++)
  208. {
  209. if (!checkCurChapter && studioCfgs[i].id == StudioDataManager.Instance.filingChapterId) continue;
  210. if (StudioDataManager.Instance.GetFilingRewardState(studioCfgs[i].id)) return true;
  211. }
  212. return false;
  213. }
  214. /// <summary>
  215. /// 寻奇访胜
  216. /// </summary>
  217. /// <returns></returns>
  218. public bool GetTravelRed()
  219. {
  220. if (TravelDataManager.Instance.TravelData == null) return false;
  221. return TravelDataManager.Instance.TravelData.Status == (int)TravelGuideType.TravelComplete;
  222. }
  223. /// <summary>
  224. /// 千山万水-图鉴红点
  225. /// </summary>
  226. /// <returns></returns>
  227. public bool GetTravelGuideRed()
  228. {
  229. if (TravelDataManager.Instance.ListTravelAreaRewardState == null ||
  230. TravelDataManager.Instance.ListTravelAreaRewardState.Count == 0) return false;
  231. for (int i = 0; i < TravelDataManager.Instance.ListTravelAreaRewardState.Count; i++)
  232. {
  233. if (TravelDataManager.Instance.ListTravelAreaRewardState[i] == ConstBonusStatus.CAN_GET)
  234. {
  235. return true;
  236. }
  237. }
  238. return false;
  239. }
  240. /// <summary>
  241. /// 千山万水-图鉴区域红点
  242. /// </summary>
  243. /// <param name="areaId"></param>
  244. /// <returns></returns>
  245. public bool GetTravelGuideAreaRed(int areaId)
  246. {
  247. if (TravelDataManager.Instance.ListTravelAreaRewardState == null ||
  248. TravelDataManager.Instance.ListTravelAreaRewardState.Count == 0) return false;
  249. return TravelDataManager.Instance.GetGuideRewardStateByAreaId(areaId) == ConstBonusStatus.CAN_GET;
  250. }
  251. /// <summary>
  252. /// 头像-获得新头像红点
  253. /// </summary>
  254. /// <returns></returns>
  255. public bool GetHeadRed()
  256. {
  257. return RoleInfoManager.Instance.newHeadDatas.Count > 0;
  258. }
  259. /// <summary>
  260. /// 头像-获得新头像框红点
  261. /// </summary>
  262. /// <returns></returns>
  263. public bool GetHeadBorderRed()
  264. {
  265. return RoleInfoManager.Instance.newHeadBorderDatas.Count > 0;
  266. }
  267. /// <summary>
  268. /// 词牌
  269. /// </summary>
  270. /// <returns></returns>
  271. public bool GetCardRed()
  272. {
  273. if (!FunctionOpenDataManager.Instance.CheckIsFunOpenById(nameof(CardDetailView), false)) return false;
  274. List<CardData> cardDatas = CardDataManager.GetCardListByRoleType(0);
  275. for (int i = 0; i < cardDatas.Count; i++)
  276. {
  277. if (GetCardRed(cardDatas[i].id)) return true;
  278. }
  279. return false;
  280. }
  281. /// <summary>
  282. /// 词牌
  283. /// </summary>
  284. /// <returns></returns>
  285. public bool GetCardRed(int cardId)
  286. {
  287. // GetCardUpStarRed(cardId) || GetCardUpLvRed(cardId) ||
  288. return GetCardStarReward(cardId) || GetCardSkillsRed(cardId) ;
  289. }
  290. /// <summary>
  291. /// 词牌-升级红点
  292. /// </summary>
  293. /// <param name="cardId"></param>
  294. /// <returns></returns>
  295. public bool GetCardUpLvRed(int cardId)
  296. {
  297. CardData cardData = CardDataManager.GetCardDataById(cardId);
  298. int maxLv = RoleLevelCfgArray.Instance.GetCfg(RoleDataManager.lvl).cardLeverLimit;
  299. if (cardData.lv >= maxLv) return false;
  300. if (cardData.lv == CardRarityCfgArray.Instance.GetCfg(cardData.itemCfg.rarity).maxCardLvl) return false;
  301. int curExp = cardData.exp;
  302. int needExp = CardLvlCfgArray.Instance.GetCfgByrarityAndcardLvl(cardData.itemCfg.rarity, cardData.lv).needExp;
  303. int cardUpLvGoldsNeed = 0;
  304. int[] materials = GlobalCfgArray.globalCfg.upgradeCardItemsArr;
  305. for (int i = 0; i < materials.Length; i++)
  306. {
  307. int[] cardUpLvGolds = ItemCfgArray.Instance.GetCfg(materials[i]).cardUpLvGoldsArr[i];
  308. for (int j = 0; j < ItemDataManager.GetItemNum(materials[i]); j++)
  309. {
  310. cardUpLvGoldsNeed += cardUpLvGolds[1];
  311. curExp += ItemCfgArray.Instance.GetCfg(materials[i]).cardUpLvExp;
  312. if (curExp >= needExp && ItemDataManager.GetItemNum(cardUpLvGolds[0]) >= cardUpLvGoldsNeed) return true;
  313. }
  314. }
  315. return false;
  316. }
  317. /// <summary>
  318. /// 词牌-升星红点
  319. /// </summary>
  320. /// <param name="cardId"></param>
  321. /// <returns></returns>
  322. public bool GetCardUpStarRed(int cardId)
  323. {
  324. CardData cardData = CardDataManager.GetCardDataById(cardId);
  325. List<CardStarCfg> starCfgs = CardStarCfgArray.Instance.GetCfgsBycardId(cardId);
  326. if (cardData.star >= starCfgs.Count) return false;
  327. CardStarCfg starCfg = CardStarCfgArray.Instance.GetCfgBycardIdAndstarLvl(cardId, cardData.star);
  328. if (ItemDataManager.GetItemNum(starCfg.costID) < starCfg.costNum) return false;
  329. if (cardData.lv < starCfg.needLv) return false;
  330. if (CardDataManager.GetUpStarEnoughMaterial(cardId) == false) return false;
  331. return true;
  332. }
  333. /// <summary>
  334. /// 词牌-词牌技能升级
  335. /// </summary>
  336. /// <param name="cardId"></param>
  337. /// <returns></returns>
  338. public bool GetCardSkillsRed(int cardId)
  339. {
  340. List<PassivitySkillCfg> skillCfgs = PassivitySkillCfgArray.Instance.GetCfgsBycardId(cardId);
  341. for (int i = 0; i < skillCfgs.Count; i++)
  342. {
  343. if (GetCardSkillRed(skillCfgs[i].skillId)) return true;
  344. }
  345. return false;
  346. }
  347. /// <summary>
  348. /// 词牌-词牌技能升级
  349. /// </summary>
  350. /// <param name="skillId"></param>
  351. /// <returns></returns>
  352. public bool GetCardSkillRed(int skillId)
  353. {
  354. PassivitySkillCfg skillCfg = PassivitySkillCfgArray.Instance.GetCfg(skillId);
  355. int skillLv = SkillDataManager.Instance.GetCardSkillLv(skillCfg.cardId, skillId);
  356. PassivitySkillLvlCfg skillLvlCfg =
  357. PassivitySkillLvlCfgArray.Instance.GetCfgByskilllvlAndskillId(skillLv, skillId);
  358. PassivitySkillLvlCfg nextSkillLvlCfg =
  359. PassivitySkillLvlCfgArray.Instance.GetCfgByskilllvlAndskillId(skillLv + 1, skillId);
  360. if (nextSkillLvlCfg == null || skillLvlCfg.materiarsArr.Length == 0) return false;
  361. long itemHas = ItemDataManager.GetItemNum(skillLvlCfg.materiarsArr[0][0]);
  362. int itemNeed = skillLvlCfg.materiarsArr[0][1];
  363. long costHas = ItemDataManager.GetItemNum(skillLvlCfg.costID);
  364. int costNeed = skillLvlCfg.costNum;
  365. return itemHas >= itemNeed && costHas >= costNeed;
  366. }
  367. //词牌-词牌升星奖励状态
  368. public bool GetCardStarReward(int cardId)
  369. {
  370. CardData cardData = CardDataManager.GetCardDataById(cardId);
  371. List<CardStarCfg> cardStarCfgs = CardStarCfgArray.Instance.GetCfgsBycardId(cardId);
  372. for (int i = 0; i < cardStarCfgs.Count; i++)
  373. {
  374. if (cardStarCfgs[i].rewardsArr.Length > 0 &&
  375. cardData.starRewardsState.ContainsKey(cardStarCfgs[i].starLvl) &&
  376. cardData.starRewardsState[cardStarCfgs[i].starLvl] == ConstBonusStatus.CAN_GET) return true;
  377. }
  378. return false;
  379. }
  380. /// <summary>
  381. /// 服装养护红点
  382. /// </summary>
  383. /// <returns></returns>
  384. public bool GetClothingFosterRed()
  385. {
  386. List<int> _suitIds = SuitUtil.GetClothingFosterSuitIdList(true, true, 0);
  387. for (int i = 0; i < _suitIds.Count; i++)
  388. {
  389. if (GetClothingFosterRed(_suitIds[i]) || GetClothingRenewRed(_suitIds[i])) return true;
  390. }
  391. return false;
  392. }
  393. /// <summary>
  394. /// 服装养护红点
  395. /// </summary>
  396. /// <param name="suitId"></param>
  397. /// <returns></returns>
  398. public bool GetClothingFosterRed(int suitId)
  399. {
  400. int index = SuitFosterDataManager.Instance.GetSuitFosterData(suitId).maintainStep;
  401. List<SuitFosterCfg> fosterCfgs = SuitFosterCfgArray.Instance.GetCfgsBysuitId(suitId);
  402. if (index >= fosterCfgs.Count)
  403. {
  404. return false;
  405. }
  406. if (!DressUpMenuSuitDataManager.CheckHaveSuit(suitId)) return false;
  407. SuitFosterCfg fosterCfg = fosterCfgs[index];
  408. if (fosterCfg.materialsArr.Length == 0) return false;
  409. CardData cardData = new CardData();
  410. List <ItemCfg> itemCfgs = ItemCfgArray.Instance.GetCfgsBysuitId(suitId);
  411. for (int i = 0; i < itemCfgs.Count; i++)
  412. {
  413. if (itemCfgs[i].itemType == ConstItemType.CARD)
  414. {
  415. cardData = CardDataManager.GetCardDataById(itemCfgs[i].id);
  416. break;
  417. }
  418. }
  419. if (cardData != null && fosterCfg.cardStar > 0 && cardData.star < fosterCfg.cardStar) {
  420. return false;
  421. }
  422. long itemHas = ItemDataManager.GetItemNum(fosterCfg.materialsArr[0][0]);
  423. int itemNeed = fosterCfg.materialsArr[0][1];
  424. long costHas = ItemDataManager.GetItemNum(fosterCfg.costId);
  425. int costNeed = fosterCfg.costNum;
  426. return itemHas >= itemNeed && costHas >= costNeed;
  427. }
  428. /// <summary>
  429. /// 服装换新红点
  430. /// </summary>
  431. /// <param name="suitId"></param>
  432. /// <returns></returns>
  433. public bool GetClothingRenewRed(int suitId)
  434. {
  435. SuitFosterData suitFosterData = SuitFosterDataManager.Instance.GetSuitFosterData(suitId);
  436. if (suitFosterData.makeNewState > 0) return false;
  437. List<SuitFosterCfg> fosterCfgs = SuitFosterCfgArray.Instance.GetCfgsBysuitId(suitId);
  438. SuitCfg suitCfg = SuitCfgArray.Instance.GetCfg(suitId);
  439. SuitRenewCfg renewCfg = SuitRenewCfgArray.Instance.GetCfg(suitCfg.rarity);
  440. if (suitFosterData.maintainStep >= fosterCfgs.Count
  441. && ItemDataManager.GetItemNum(renewCfg.costId) >= renewCfg.costNum
  442. && ItemDataManager.GetItemNum(renewCfg.materialsArr[0][0]) >= renewCfg.materialsArr[0][1])
  443. {
  444. return true;
  445. }
  446. return false;
  447. }
  448. /// <summary>
  449. /// 服装合成红点
  450. /// </summary>
  451. /// <returns></returns>
  452. public bool GetClothingSyntheticRed()
  453. {
  454. return GetClothingSyntheticTabRed(1) || GetClothingSyntheticTabRed(2) || GetClothingSyntheticTabRed(3);
  455. }
  456. /// <summary>
  457. /// 服装合成页签红点
  458. /// </summary>
  459. /// <param name="tab"></param>
  460. /// <returns></returns>
  461. public bool GetClothingSyntheticTabRed(int tab)
  462. {
  463. List<SuitCfg> suitCfgs = SuitCfgArray.Instance.GetCfgsBysyntheticType(tab);
  464. for (int i = 0; i < suitCfgs.Count; i++)
  465. {
  466. if (GetClothingSyntheticBonusRed(suitCfgs[i].id)) return true;
  467. bool isLevelPass = InstanceZonesDataManager.CheckLevelPass(suitCfgs[i].syntheticStoryLevelId);
  468. if (!isLevelPass) continue;
  469. if (GetClothingSyntheticRed(suitCfgs[i].id)) return true;
  470. }
  471. return false;
  472. }
  473. /// <summary>
  474. /// 服装合成红点
  475. /// </summary>
  476. /// <param name="suitId"></param>
  477. /// <returns></returns>
  478. public bool GetClothingSyntheticRed(int suitId)
  479. {
  480. int status = DressUpMenuSuitDataManager.GetSuitSyntheticBonusStatus(suitId);
  481. SuitCfg suitCfg = SuitCfgArray.Instance.GetCfg(suitId);
  482. if (suitCfg == null) return false;
  483. for (int i = 0; i < suitCfg.partsArr.Length; i++)
  484. {
  485. if (CheckCanSynthetic(suitCfg.partsArr[i])) return true;
  486. }
  487. return false;
  488. }
  489. /// <summary>
  490. /// 服装合成奖励红点
  491. /// </summary>
  492. /// <param name="suitId"></param>
  493. /// <returns></returns>
  494. public bool GetClothingSyntheticBonusRed(int suitId)
  495. {
  496. bool isLock = false;
  497. int status = DressUpMenuSuitDataManager.GetSuitSyntheticBonusStatus(suitId);
  498. SuitCfg suitCfg = SuitCfgArray.Instance.GetCfg(suitId);
  499. if (suitCfg.syntheticStoryLevelId > 0)
  500. {
  501. bool isLevelPass = InstanceZonesDataManager.CheckLevelPass(suitCfg.syntheticStoryLevelId);
  502. if (!isLevelPass)
  503. {
  504. isLock = true;
  505. }
  506. }
  507. if (suitCfg.syntheticPreSuitId > 0)
  508. {
  509. bool hasPreSuit = DressUpMenuSuitDataManager.CheckHaveSuit(suitCfg.syntheticPreSuitId);
  510. if (!hasPreSuit)
  511. {
  512. isLock = true;
  513. }
  514. }
  515. return status == ConstBonusStatus.CAN_GET && !isLock;
  516. }
  517. /// <summary>
  518. /// 合成-服装部件红点
  519. /// </summary>
  520. /// <param name="itemId"></param>
  521. /// <param name="showTips"></param>
  522. /// <returns></returns>
  523. public bool CheckCanSynthetic(int itemId)
  524. {
  525. //合成材料判断
  526. if (ItemDataManager.GetItemNum(itemId) > 0) return false;
  527. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
  528. if (itemCfg == null || ItemDataManager.GetItemNum(itemCfg.syntheticCostID) < itemCfg.syntheticCostNum)
  529. {
  530. return false;
  531. }
  532. List<ItemData> materiarsOfSelectedItem = ItemUtil.CreateItemDataList(itemCfg.syntheticMateriarsArr);
  533. for (int i = 0; i < materiarsOfSelectedItem.Count; i++)
  534. {
  535. ItemData itemData = materiarsOfSelectedItem[i];
  536. long numSynthetic = ItemDataManager.GetItemNum(itemData.id);
  537. if (numSynthetic < itemData.num)
  538. {
  539. return false;
  540. }
  541. }
  542. return true;
  543. }
  544. /// <summary>
  545. /// 商城
  546. /// </summary>
  547. /// <returns></returns>
  548. public bool GetShopRed()
  549. {
  550. return GetChargeAddUpRewardRed() || GetGiftBagRewardRed() || GetGoldCardRewardRed() || GetBlackCardRewardRed() || GetBlackCardClothingRed() || GetStoreBrocadeWeavRewardRed() || GetGiftBagRebateRed();
  551. }
  552. //商店-充值-会员中心
  553. public bool GetChargeAddUpRewardRed()
  554. {
  555. VipCfg[] vipCfgs = VipCfgArray.Instance.dataArray;
  556. for (int i = 1; i < vipCfgs.Length; i++)
  557. {
  558. bool isGet = MathUtil.isBitSet(GameGlobal.myNumericComponent.GetAsInt(NumericType.VipGetStatus),
  559. vipCfgs[i].id);
  560. if (!isGet && RoleDataManager.vipLv >= vipCfgs[i].id) return true;
  561. }
  562. return GameGlobal.myNumericComponent.GetAsInt(NumericType.VipWeekGetStatus) == 0 &&
  563. RoleDataManager.vipLv > 0;
  564. }
  565. //商店-礼包-活动礼包
  566. public bool GetGiftBagRewardRed()
  567. {
  568. List<ShopCfg> shopCfgs = ShopCfgArray.Instance.GetCfgsBymenu1Andmenu2(ConstStoreTabId.STORE_GIFT_BAG, ConstStoreSubId.STORE_GIFT_BAG_ACTIVITY);
  569. shopCfgs = ShopDataManager.Instance.RemoveNotOpenCfg(shopCfgs);
  570. for (int i = 0; i < shopCfgs.Count; i++)
  571. {
  572. if (shopCfgs[i].price == 0 && ShopDataManager.Instance.GetGoodsBuyNumById(shopCfgs[i].id) < shopCfgs[i].maxBuyNum) return true;
  573. }
  574. return false;
  575. }
  576. //商店-礼包-返利商城
  577. public bool GetGiftBagRebateRed()
  578. {
  579. List<ShopCfg> shopCfgs = ShopCfgArray.Instance.GetCfgsBymenu1Andmenu2(ConstStoreTabId.STORE_GIFT_BAG, ConstStoreSubId.STORE_GIFT_BAG_REBATE);
  580. foreach (var info in shopCfgs) {
  581. var weekGiftBoxState = EnduringGiftBoxDataManager.Instance.DayIsRebateGiftBox(info.itemId);
  582. if (weekGiftBoxState)
  583. return true;
  584. }
  585. return false;
  586. }
  587. /// <summary>
  588. /// 商城-月卡-红包卡
  589. /// </summary>
  590. /// <returns></returns>
  591. public bool GetGoldCardRewardRed()
  592. {
  593. return RoleDataManager.CheckIsMonthCardOpenByType(MonthCardType.Gold) && GameGlobal.myNumericComponent.GetAsInt(NumericType.MonthCardGoldReward) <= 0;
  594. }
  595. /// <summary>
  596. /// 商城-月卡-福气卡
  597. /// </summary>
  598. /// <returns></returns>
  599. public bool GetBlackCardRewardRed()
  600. {
  601. return RoleDataManager.CheckIsMonthCardOpenByType(MonthCardType.BlackGold) && GameGlobal.myNumericComponent.GetAsInt(NumericType.MonthCardBlackGoldReward) <= 0;
  602. }
  603. /// <summary>
  604. /// 商城-月卡-福气卡-单品奖励
  605. /// </summary>
  606. /// <returns></returns>
  607. public bool GetBlackCardClothingRed()
  608. {
  609. int _year = TimeUtil.GetCurYear();
  610. int _month = TimeUtil.GetCurMonth();
  611. MonthlyCardClothesCfg clothesCfg = MonthlyCardClothesCfgArray.Instance.GetCfgByyearAndmonth(_year, _month);
  612. return RoleDataManager.CheckIsMonthCardOpenByType(MonthCardType.BlackGold) && !MathUtil.isBitSet(GameGlobal.myNumericComponent.GetAsInt(NumericType.MonthCardExclusiveClothesMouth), _month);
  613. }
  614. /// <summary>
  615. /// 商城-月卡-锦罗织造
  616. /// </summary>
  617. /// <returns></returns>
  618. public bool GetStoreBrocadeWeavRewardRed()
  619. {
  620. return TaskDataManager.Instance.CheckTaskRewardCanGet(TaskFuncType.BattlePass)
  621. || BattlePassTaskDataManager.Instance.CheckStoreBrocadeWeavRed();
  622. }
  623. /// <summary>
  624. /// 联盟
  625. /// </summary>
  626. /// <returns></returns>
  627. public bool GetLeagueRed()
  628. {
  629. return GetLeagueMemberJoinRed() || LeagueDataManager.Instance.Type == LeagueJoinType.UnJoin || GetLeagueGiftBoxRed() || GetLeaguePrayRed() || GetLeagueTeaPartyRed();
  630. }
  631. /// <summary>
  632. /// 联盟-成员申请
  633. /// </summary>
  634. /// <returns></returns>
  635. public bool GetLeagueMemberJoinRed()
  636. {
  637. LeagueHotelCfg hotelCfg = LeagueHotelCfgArray.Instance.GetCfg(LeagueDataManager.Instance.HotelLevel);
  638. int myPos = LeagueDataManager.Instance.GetMyPos();
  639. return LeagueDataManager.Instance.Type == LeagueJoinType.Join && (myPos == LeaguePos.Owner || myPos == LeaguePos.SubOwner) && LeagueDataManager.Instance.ListApplyDatas.Count > 0 && LeagueDataManager.Instance.LeagueData.Num < hotelCfg.limit;
  640. }
  641. /// <summary>
  642. /// 联盟-雅集福利
  643. /// </summary>
  644. /// <returns></returns>
  645. public bool GetLeagueGiftBoxRed()
  646. {
  647. if (LeagueDataManager.Instance.Type == LeagueJoinType.UnJoin) return false;
  648. List<LeagueGiftGetData> _getDatas = LeagueDataManager.Instance.GetGiftGetDatas();
  649. for (int i = 0; i < _getDatas.Count; i++)
  650. {
  651. if (!_getDatas[i].IsGet) return true;
  652. }
  653. return false;
  654. }
  655. /// <summary>
  656. /// 联盟-雅集祈福
  657. /// </summary>
  658. /// <returns></returns>
  659. public bool GetLeaguePrayRed()
  660. {
  661. return LeagueDataManager.Instance.GetPrayTimesByType(LeaguePrayType.First) == 0;
  662. }
  663. /// <summary>
  664. /// 联盟-茶话会
  665. /// </summary>
  666. /// <returns></returns>
  667. public bool GetLeagueTeaPartyRed()
  668. {
  669. return LeagueDataManager.Instance.CheckTeaPartyRewardCanGet();
  670. }
  671. /// <summary>
  672. /// 限时抽奖活动奖励
  673. /// </summary>
  674. /// <returns></returns>
  675. public bool GetActLuckyBoxRewardRed(int _typeId)
  676. {
  677. int _activityId = ActivityDataManager.Instance.actLuckyBoxId;
  678. var _allPlayTimes = ActivityDataManager.Instance.allPlayTimes;
  679. var _bonusState = ActivityDataManager.Instance.luckyBoxActBonusState;
  680. if (_typeId == ConstLimitTimeActivityType.ActLimitTsy)
  681. {
  682. _activityId = ActivityDataManager.Instance.actLimitTsyId;
  683. _allPlayTimes = ActivityDataManager.Instance.allTsyPlayTimes;
  684. _bonusState = ActivityDataManager.Instance.luckyActTsyBonusState;
  685. }
  686. else if (_typeId == ConstLimitTimeActivityType.ActLimitStlyc)
  687. {
  688. _activityId = ActivityDataManager.Instance.actLimitStlycId;
  689. _allPlayTimes = ActivityDataManager.Instance.allLimitStlycTimes;
  690. _bonusState = ActivityDataManager.Instance.limitStlycActBonusState;
  691. }
  692. if (_activityId <= 0) return false;
  693. List<ActivityLuckybonusCfg> _bonueCfgs = ActivityLuckybonusCfgArray.Instance.GetCfgsByid(_activityId);
  694. for (int i = 0; i < _bonueCfgs.Count; i++)
  695. {
  696. int key = _bonueCfgs[i].num;
  697. int state = _bonusState.ContainsKey(key) ? _bonusState[key] : 0;
  698. bool canGet = state < ConstBonusStatus.GOT && _allPlayTimes >= _bonueCfgs[i].num;
  699. if (canGet) return true;
  700. }
  701. return false;
  702. }
  703. /// <summary>
  704. /// 限时抽奖活动任务奖励
  705. /// </summary>
  706. /// <returns></returns>
  707. public bool GetActLuckyBoxTaskdRed()
  708. {
  709. if (ActivityDataManager.Instance.actLuckyBoxId <= 0) return false;
  710. List<TaskCfg> _bonueCfgs = TaskDataManager.Instance.GetTaskCfgs(TaskFuncType.LuckyBoxActivity);
  711. for (int i = 0; i < _bonueCfgs.Count; i++)
  712. {
  713. int state = TaskDataManager.Instance.GetTaskStateById(_bonueCfgs[i].id);
  714. if (state == ConstBonusStatus.CAN_GET) return true;
  715. }
  716. return false;
  717. }
  718. /// <summary>
  719. /// 开服活动(神都宸游)
  720. /// </summary>
  721. /// <returns></returns>
  722. public bool GetOpenServerRed()
  723. {
  724. if (GetActLuckyBoxRewardRed(ConstLimitTimeActivityType.ActLimitStlyc) || GetGiftBagRewardRed() || GetMeiRiTeHuiRed() || GetOpenServerStoryRed())
  725. return true;
  726. return false;
  727. }
  728. /// <summary>
  729. /// 摘星-每日特惠
  730. /// </summary>
  731. /// <returns></returns>
  732. public bool GetMeiRiTeHuiRed()
  733. {
  734. var activityInfoByTypeList =
  735. ActivityGlobalDataManager.Instance.GetActivityInfoByType(ActivityType.XSLB3);
  736. var list = activityInfoByTypeList
  737. .Where(a => a.EndTime > TimeInfo.Instance.ServerNow()).ToList();
  738. if (list.Count == 0)
  739. {
  740. return false;
  741. }
  742. bool isSoldOut = true;
  743. foreach (var activityInfo in list)
  744. {
  745. ActivityOpenCfg activityOpenCfg = ActivityOpenCfgArray.Instance.GetCfg(activityInfo.ActivityId);
  746. var paramsArr = activityOpenCfg.paramsArr;
  747. foreach (var shopCfgId in paramsArr)
  748. {
  749. var shopCfg = ShopCfgArray.Instance.GetCfg(shopCfgId);
  750. var remainBuyNum = shopCfg.maxBuyNum - ShopDataManager.Instance.GetGoodsBuyNumById(shopCfgId);
  751. //只要有一个商品还能购买,就不是售罄
  752. if (remainBuyNum > 0)
  753. {
  754. isSoldOut = false;
  755. break;
  756. }
  757. }
  758. }
  759. if (isSoldOut)
  760. {
  761. return false;
  762. }
  763. return !LimitedTimeGiftBoxDataManager.Instance.IsOpenMeiRiTeHui;
  764. }
  765. /// <summary>
  766. /// 开服活动-剧情
  767. /// </summary>
  768. /// <returns></returns>
  769. public bool GetOpenServerStoryRed()
  770. {
  771. var activityId = ActivityDataManager.Instance.GetCurOpenActiveByType(ConstLimitTimeActivityType.ActLimitStlyc);
  772. var activityCfg = ActivityOpenCfgArray.Instance.GetCfg(activityId);
  773. Dictionary<int, List<StoryLevelCfg>> storyLevelCfgs = new Dictionary<int, List<StoryLevelCfg>>();
  774. for (int i = 0; i < 4; i++) {
  775. ActivityStoryCfg activityStoryCfg = ActivityStoryCfgArray.Instance.GetCfg(activityCfg.params4Arr[i]);
  776. var storyLevelCfg = StoryLevelCfgArray.Instance.GetCfgsBytypeAndsubTypeAndchapterId(activityStoryCfg.type, activityStoryCfg.subType, activityCfg.params4Arr[i]);
  777. storyLevelCfgs.Add(i, storyLevelCfg);
  778. if ((i == 0 && !InstanceZonesDataManager.CheckLevelPass(storyLevelCfgs[i][0].id)) || (i > 0 && InstanceZonesDataManager.CheckLevelPass(storyLevelCfgs[i - 1][0].id) && !InstanceZonesDataManager.CheckLevelPass(storyLevelCfgs[i][0].id) && ItemDataManager.ItemCollect.ContainsKey(activityStoryCfg.needItemsArr[0][0]) && ItemDataManager.ItemCollect[activityStoryCfg.needItemsArr[0][0]] >= activityStoryCfg.needItemsArr[0][1]))
  779. {
  780. return true;
  781. }
  782. }
  783. return false;
  784. }
  785. /// <summary>
  786. /// 背包中存在礼包就一直给主界面 背包 红点
  787. /// </summary>
  788. /// <returns></returns>
  789. public bool GetMainBagGiftRed()
  790. {
  791. return ItemDataManager.BagIsExistGiftBag();
  792. }
  793. // /// <summary>
  794. // /// 背包内 是礼包物品就一直给红点
  795. // /// </summary>
  796. // /// <returns></returns>
  797. // public bool GetBagGiftRed(int itemId)
  798. // {
  799. // ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
  800. // if (itemCfg.itemType == ConstItemType.USEABLE)
  801. // {
  802. // if (itemCfg.subType == ConstItemSubType.USEABLE_GIFT_BAG_SELECTABLE ||
  803. // itemCfg.subType == ConstItemSubType.USEABLE_GIFT_BAG_RANDOM)
  804. // {
  805. // return true;
  806. // }
  807. // }
  808. //
  809. // return false;
  810. // }
  811. /// <summary>
  812. /// 福利大厅
  813. /// </summary>
  814. /// <returns></returns>
  815. public bool GetDailyWelfareRed()
  816. {
  817. return GetLimiteChargeRewardRed() || GetSevenDayLoginRed() || DailySignRed() || DailySupplyRed() || GetLimiteChargeRewardRed(501);
  818. }
  819. /// <summary>
  820. ///福利大厅-限时累充可领奖励红点
  821. /// </summary>
  822. /// <returns></returns>
  823. public bool GetLimiteChargeRewardRed()
  824. {
  825. List<ActivityInfo> _limitChargeInfo = ActivityGlobalDataManager.Instance.GetActivityInfoByType(ActivityType.XSLC);
  826. for (int i = 0; i < _limitChargeInfo.Count; i++)
  827. {
  828. if (GetLimiteChargeRewardRed(_limitChargeInfo[i].ActivityId)) return true;
  829. }
  830. return false;
  831. }
  832. public bool GetLimiteChargeRewardRed(int activityId)
  833. {
  834. ActivityInfo _activityInfo = ActivityGlobalDataManager.Instance.GetActivityInfo(activityId);
  835. if (_activityInfo == null) return false;
  836. List<ActivityRechargeCfg> _rechargeCfgs = ActivityRechargeCfgArray.Instance.GetCfgsByactivityId(activityId);
  837. for (int i = 0; i < _rechargeCfgs.Count; i++)
  838. {
  839. if (_activityInfo.CountValue >= _rechargeCfgs[i].value && _activityInfo.GetRewards.IndexOf(_rechargeCfgs[i].id) < 0)
  840. {
  841. return true;
  842. }
  843. }
  844. return false;
  845. }
  846. /// <summary>
  847. /// 福利大厅-七天登录
  848. /// </summary>
  849. /// <returns></returns>
  850. public bool GetSevenDayLoginRed()
  851. {
  852. return ActivityDataManager.Instance.CanGetSevenDayBonus();
  853. }
  854. /// <summary>
  855. /// 福利大厅-每日签到
  856. /// </summary>
  857. /// <returns></returns>
  858. public bool DailySignRed()
  859. {
  860. int _signCount = MathUtil.CountOnes2(GameGlobal.myNumericComponent.GetAsLong(NumericType.SignDay));
  861. List<DailySignCfg> signCfgs = DailySignCfgArray.Instance.GetCfgsBymonth(TimeUtil.GetCurMonth());
  862. for (int i = 0; i < signCfgs.Count; i++)
  863. {
  864. bool isGot = MathUtil.isBitSet(GameGlobal.myNumericComponent.GetAsLong(NumericType.SignReward), signCfgs[i].day);
  865. if (_signCount >= signCfgs[i].day && !isGot) return true;
  866. }
  867. return !MathUtil.isBitSet(GameGlobal.myNumericComponent.GetAsLong(NumericType.SignDay), TimeUtil.GetCurDay());
  868. }
  869. /// <summary>
  870. /// 每日签到-是否签到
  871. /// </summary>
  872. /// <returns></returns>
  873. public bool DailySignGot()
  874. {
  875. return !MathUtil.isBitSet(GameGlobal.myNumericComponent.GetAsLong(NumericType.SignDay), TimeUtil.GetCurDay());
  876. }
  877. /// <summary>
  878. /// 福利大厅-每日补给
  879. /// </summary>
  880. /// <returns></returns>
  881. public bool DailySupplyRed()
  882. {
  883. for (int i = 0; i < DailySupplyCfgArray.Instance.dataArray.Length; i++)
  884. {
  885. DailySupplyCfg supplyCfg = DailySupplyCfgArray.Instance.dataArray[i];
  886. if (DailySupplyRed(supplyCfg)) return true;
  887. }
  888. return false;
  889. }
  890. /// <summary>
  891. /// 福利大厅-每日补给
  892. /// </summary>
  893. /// <returns></returns>
  894. public bool DailySupplyRed(DailySupplyCfg supplyCfg)
  895. {
  896. long openTime = TimeUtil.GetCurDayTime(TimeUtil.GetDateTime(supplyCfg.openTime).ToString("HH:mm:ss"));
  897. long endTime = TimeUtil.GetCurDayTime(TimeUtil.GetDateTime(supplyCfg.endTime).ToString("HH:mm:ss"));
  898. bool isGet = MathUtil.isBitSet(GameGlobal.myNumericComponent.GetAsInt(NumericType.DailySupplyReward), supplyCfg.id);
  899. long curTime = TimeHelper.ServerNow();
  900. if (!isGet && curTime > openTime && curTime < endTime)
  901. {
  902. return true;
  903. }
  904. return false;
  905. }
  906. /// <summary>
  907. /// 常驻礼包是否有需要领取的金币
  908. /// </summary>
  909. /// <returns></returns>
  910. public bool GetGoldRed()
  911. {
  912. var shopCfgList = ShopCfgArray.Instance
  913. .GetCfgsBymenu1Andmenu2(ConstStoreTabId.ENDURING_GIFT_BOX, ConstStoreSubId.ENDURING_GIFT_BOX_GOLD)
  914. .OrderBy(a => a.refreshType).ToList();
  915. foreach (var shopCfg in shopCfgList)
  916. {
  917. var weekGiftBoxState = EnduringGiftBoxDataManager.Instance.DayIsRebateGiftBox(shopCfg.itemId);
  918. if (weekGiftBoxState)
  919. {
  920. return true;
  921. }
  922. }
  923. return false;
  924. }
  925. /// <summary>
  926. /// 常驻礼包是否有需要领取的体力
  927. /// </summary>
  928. /// <returns></returns>
  929. public bool GetPowerRed()
  930. {
  931. var shopCfgList = ShopCfgArray.Instance
  932. .GetCfgsBymenu1Andmenu2(ConstStoreTabId.ENDURING_GIFT_BOX, ConstStoreSubId.ENDURING_GIFT_BOX_POWER)
  933. .OrderBy(a => a.refreshType).ToList();
  934. foreach (var shopCfg in shopCfgList)
  935. {
  936. var weekGiftBoxState = EnduringGiftBoxDataManager.Instance.DayIsRebateGiftBox(shopCfg.itemId);
  937. if (weekGiftBoxState)
  938. {
  939. return true;
  940. }
  941. }
  942. return false;
  943. }
  944. public bool GetActivityWanShiLiRed()
  945. {
  946. return ActivityWanShiLiDataManager.Instance.CanGetReward();
  947. }
  948. /// <summary>
  949. /// 摘星免费抽奖
  950. /// </summary>
  951. /// <returns></returns>
  952. public bool GetLuckyBoxFreeTimes()
  953. {
  954. if (!FunctionOpenDataManager.Instance.CheckIsFunOpenById(typeof(LuckyBoxView).Name, false))
  955. return false;
  956. long freeTime = LuckyBoxDataManager.Instance.GetFreeTime(LuckyBoxDataManager.BOX_ID_2);
  957. if (freeTime > 0)
  958. {
  959. if (freeTime - TimeHelper.ServerNow() < 0)
  960. return true;
  961. }
  962. freeTime = LuckyBoxDataManager.Instance.GetFreeTime(LuckyBoxDataManager.BOX_ID_3);
  963. if (freeTime > 0)
  964. {
  965. if (freeTime - TimeHelper.ServerNow() < 0)
  966. return true;
  967. }
  968. return false;
  969. }
  970. }
  971. }