RedDotDataManager.cs 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994
  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. bool isLevelPass = InstanceZonesDataManager.CheckLevelPass(suitCfgs[i].syntheticStoryLevelId);
  467. if (!isLevelPass) continue;
  468. if (GetClothingSyntheticRed(suitCfgs[i].id) || GetClothingSyntheticBonusRed(suitCfgs[i].id)) return true;
  469. }
  470. return false;
  471. }
  472. /// <summary>
  473. /// 服装合成红点
  474. /// </summary>
  475. /// <param name="suitId"></param>
  476. /// <returns></returns>
  477. public bool GetClothingSyntheticRed(int suitId)
  478. {
  479. int status = DressUpMenuSuitDataManager.GetSuitSyntheticBonusStatus(suitId);
  480. SuitCfg suitCfg = SuitCfgArray.Instance.GetCfg(suitId);
  481. if (suitCfg == null) return false;
  482. for (int i = 0; i < suitCfg.partsArr.Length; i++)
  483. {
  484. if (CheckCanSynthetic(suitCfg.partsArr[i])) return true;
  485. }
  486. return false;
  487. }
  488. /// <summary>
  489. /// 服装合成奖励红点
  490. /// </summary>
  491. /// <param name="suitId"></param>
  492. /// <returns></returns>
  493. public bool GetClothingSyntheticBonusRed(int suitId)
  494. {
  495. bool isLock = false;
  496. int status = DressUpMenuSuitDataManager.GetSuitSyntheticBonusStatus(suitId);
  497. SuitCfg suitCfg = SuitCfgArray.Instance.GetCfg(suitId);
  498. if (suitCfg.syntheticStoryLevelId > 0)
  499. {
  500. bool isLevelPass = InstanceZonesDataManager.CheckLevelPass(suitCfg.syntheticStoryLevelId);
  501. if (!isLevelPass)
  502. {
  503. isLock = true;
  504. }
  505. }
  506. if (suitCfg.syntheticPreSuitId > 0)
  507. {
  508. bool hasPreSuit = DressUpMenuSuitDataManager.CheckHaveSuit(suitCfg.syntheticPreSuitId);
  509. if (!hasPreSuit)
  510. {
  511. isLock = true;
  512. }
  513. }
  514. return status == ConstBonusStatus.CAN_GET && !isLock;
  515. }
  516. /// <summary>
  517. /// 合成-服装部件红点
  518. /// </summary>
  519. /// <param name="itemId"></param>
  520. /// <param name="showTips"></param>
  521. /// <returns></returns>
  522. public bool CheckCanSynthetic(int itemId)
  523. {
  524. //合成材料判断
  525. if (ItemDataManager.GetItemNum(itemId) > 0) return false;
  526. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
  527. if (itemCfg == null || ItemDataManager.GetItemNum(itemCfg.syntheticCostID) < itemCfg.syntheticCostNum)
  528. {
  529. return false;
  530. }
  531. List<ItemData> materiarsOfSelectedItem = ItemUtil.CreateItemDataList(itemCfg.syntheticMateriarsArr);
  532. for (int i = 0; i < materiarsOfSelectedItem.Count; i++)
  533. {
  534. ItemData itemData = materiarsOfSelectedItem[i];
  535. long numSynthetic = ItemDataManager.GetItemNum(itemData.id);
  536. if (numSynthetic < itemData.num)
  537. {
  538. return false;
  539. }
  540. }
  541. return true;
  542. }
  543. /// <summary>
  544. /// 商城
  545. /// </summary>
  546. /// <returns></returns>
  547. public bool GetShopRed()
  548. {
  549. return GetChargeAddUpRewardRed() || GetGiftBagRewardRed() || GetGoldCardRewardRed() || GetBlackCardRewardRed() || GetBlackCardClothingRed() || GetStoreBrocadeWeavRewardRed();
  550. }
  551. //商店-充值-会员中心
  552. public bool GetChargeAddUpRewardRed()
  553. {
  554. VipCfg[] vipCfgs = VipCfgArray.Instance.dataArray;
  555. for (int i = 1; i < vipCfgs.Length; i++)
  556. {
  557. bool isGet = MathUtil.isBitSet(GameGlobal.myNumericComponent.GetAsInt(NumericType.VipGetStatus),
  558. vipCfgs[i].id);
  559. if (!isGet && RoleDataManager.vipLv >= vipCfgs[i].id) return true;
  560. }
  561. return GameGlobal.myNumericComponent.GetAsInt(NumericType.VipWeekGetStatus) == 0 &&
  562. RoleDataManager.vipLv > 0;
  563. }
  564. //商店-礼包-活动礼包
  565. public bool GetGiftBagRewardRed()
  566. {
  567. List<ShopCfg> shopCfgs = ShopCfgArray.Instance.GetCfgsBymenu1Andmenu2(ConstStoreTabId.STORE_GIFT_BAG, ConstStoreSubId.STORE_GIFT_BAG_ACTIVITY);
  568. shopCfgs = ShopDataManager.Instance.RemoveNotOpenCfg(shopCfgs);
  569. for (int i = 0; i < shopCfgs.Count; i++)
  570. {
  571. if (shopCfgs[i].price == 0 && ShopDataManager.Instance.GetGoodsBuyNumById(shopCfgs[i].id) < shopCfgs[i].maxBuyNum) return true;
  572. }
  573. return false;
  574. }
  575. /// <summary>
  576. /// 商城-月卡-灵犀卡
  577. /// </summary>
  578. /// <returns></returns>
  579. public bool GetGoldCardRewardRed()
  580. {
  581. return RoleDataManager.CheckIsMonthCardOpenByType(MonthCardType.Gold) && GameGlobal.myNumericComponent.GetAsInt(NumericType.MonthCardGoldReward) <= 0;
  582. }
  583. /// <summary>
  584. /// 商城-月卡-璇玑卡
  585. /// </summary>
  586. /// <returns></returns>
  587. public bool GetBlackCardRewardRed()
  588. {
  589. return RoleDataManager.CheckIsMonthCardOpenByType(MonthCardType.BlackGold) && GameGlobal.myNumericComponent.GetAsInt(NumericType.MonthCardBlackGoldReward) <= 0;
  590. }
  591. /// <summary>
  592. /// 商城-月卡-璇玑卡-单品奖励
  593. /// </summary>
  594. /// <returns></returns>
  595. public bool GetBlackCardClothingRed()
  596. {
  597. int _year = TimeUtil.GetCurYear();
  598. int _month = TimeUtil.GetCurMonth();
  599. MonthlyCardClothesCfg clothesCfg = MonthlyCardClothesCfgArray.Instance.GetCfgByyearAndmonth(_year, _month);
  600. return RoleDataManager.CheckIsMonthCardOpenByType(MonthCardType.BlackGold) && !MathUtil.isBitSet(GameGlobal.myNumericComponent.GetAsInt(NumericType.MonthCardExclusiveClothesMouth), _month);
  601. }
  602. /// <summary>
  603. /// 商城-月卡-锦罗织造
  604. /// </summary>
  605. /// <returns></returns>
  606. public bool GetStoreBrocadeWeavRewardRed()
  607. {
  608. return TaskDataManager.Instance.CheckTaskRewardCanGet(TaskFuncType.BattlePass)
  609. || BattlePassTaskDataManager.Instance.CheckStoreBrocadeWeavRed();
  610. }
  611. /// <summary>
  612. /// 联盟
  613. /// </summary>
  614. /// <returns></returns>
  615. public bool GetLeagueRed()
  616. {
  617. return GetLeagueMemberJoinRed() || LeagueDataManager.Instance.Type == LeagueJoinType.UnJoin || GetLeagueGiftBoxRed() || GetLeaguePrayRed() || GetLeagueTeaPartyRed();
  618. }
  619. /// <summary>
  620. /// 联盟-成员申请
  621. /// </summary>
  622. /// <returns></returns>
  623. public bool GetLeagueMemberJoinRed()
  624. {
  625. LeagueHotelCfg hotelCfg = LeagueHotelCfgArray.Instance.GetCfg(LeagueDataManager.Instance.HotelLevel);
  626. int myPos = LeagueDataManager.Instance.GetMyPos();
  627. return LeagueDataManager.Instance.Type == LeagueJoinType.Join && (myPos == LeaguePos.Owner || myPos == LeaguePos.SubOwner) && LeagueDataManager.Instance.ListApplyDatas.Count > 0 && LeagueDataManager.Instance.LeagueData.Num < hotelCfg.limit;
  628. }
  629. /// <summary>
  630. /// 联盟-雅集福利
  631. /// </summary>
  632. /// <returns></returns>
  633. public bool GetLeagueGiftBoxRed()
  634. {
  635. if (LeagueDataManager.Instance.Type == LeagueJoinType.UnJoin) return false;
  636. List<LeagueGiftGetData> _getDatas = LeagueDataManager.Instance.GetGiftGetDatas();
  637. for (int i = 0; i < _getDatas.Count; i++)
  638. {
  639. if (!_getDatas[i].IsGet) return true;
  640. }
  641. return false;
  642. }
  643. /// <summary>
  644. /// 联盟-雅集祈福
  645. /// </summary>
  646. /// <returns></returns>
  647. public bool GetLeaguePrayRed()
  648. {
  649. return LeagueDataManager.Instance.GetPrayTimesByType(LeaguePrayType.First) == 0;
  650. }
  651. /// <summary>
  652. /// 联盟-茶话会
  653. /// </summary>
  654. /// <returns></returns>
  655. public bool GetLeagueTeaPartyRed()
  656. {
  657. return LeagueDataManager.Instance.CheckTeaPartyRewardCanGet();
  658. }
  659. /// <summary>
  660. /// 限时抽奖活动奖励
  661. /// </summary>
  662. /// <returns></returns>
  663. public bool GetActLuckyBoxRewardRed(int _typeId)
  664. {
  665. int _activityId = ActivityDataManager.Instance.actLuckyBoxId;
  666. var _allPlayTimes = ActivityDataManager.Instance.allPlayTimes;
  667. var _bonusState = ActivityDataManager.Instance.luckyBoxActBonusState;
  668. if (_typeId == ConstLimitTimeActivityType.ActLimitTsy)
  669. {
  670. _activityId = ActivityDataManager.Instance.actLimitTsyId;
  671. _allPlayTimes = ActivityDataManager.Instance.allTsyPlayTimes;
  672. _bonusState = ActivityDataManager.Instance.luckyActTsyBonusState;
  673. }
  674. if (_activityId <= 0) return false;
  675. List<ActivityLuckybonusCfg> _bonueCfgs = ActivityLuckybonusCfgArray.Instance.GetCfgsByid(_activityId);
  676. for (int i = 0; i < _bonueCfgs.Count; i++)
  677. {
  678. int key = _bonueCfgs[i].num;
  679. int state = _bonusState.ContainsKey(key) ? _bonusState[key] : 0;
  680. bool canGet = state < ConstBonusStatus.GOT && _allPlayTimes >= _bonueCfgs[i].num;
  681. if (canGet) return true;
  682. }
  683. return false;
  684. }
  685. /// <summary>
  686. /// 限时抽奖活动任务奖励
  687. /// </summary>
  688. /// <returns></returns>
  689. public bool GetActLuckyBoxTaskdRed()
  690. {
  691. if (ActivityDataManager.Instance.actLuckyBoxId <= 0) return false;
  692. List<TaskCfg> _bonueCfgs = TaskDataManager.Instance.GetTaskCfgs(TaskFuncType.LuckyBoxActivity);
  693. for (int i = 0; i < _bonueCfgs.Count; i++)
  694. {
  695. int state = TaskDataManager.Instance.GetTaskStateById(_bonueCfgs[i].id);
  696. if (state == ConstBonusStatus.CAN_GET) return true;
  697. }
  698. return false;
  699. }
  700. /// <summary>
  701. /// 摘星-每日特惠
  702. /// </summary>
  703. /// <returns></returns>
  704. public bool GetMeiRiTeHuiRed()
  705. {
  706. var activityInfoByTypeList =
  707. ActivityGlobalDataManager.Instance.GetActivityInfoByType(ActivityType.XSLB3);
  708. var list = activityInfoByTypeList
  709. .Where(a => a.EndTime > TimeInfo.Instance.ServerNow()).ToList();
  710. if (list.Count == 0)
  711. {
  712. return false;
  713. }
  714. bool isSoldOut = true;
  715. foreach (var activityInfo in list)
  716. {
  717. ActivityOpenCfg activityOpenCfg = ActivityOpenCfgArray.Instance.GetCfg(activityInfo.ActivityId);
  718. var paramsArr = activityOpenCfg.paramsArr;
  719. foreach (var shopCfgId in paramsArr)
  720. {
  721. var shopCfg = ShopCfgArray.Instance.GetCfg(shopCfgId);
  722. var remainBuyNum = shopCfg.maxBuyNum - ShopDataManager.Instance.GetGoodsBuyNumById(shopCfgId);
  723. //只要有一个商品还能购买,就不是售罄
  724. if (remainBuyNum > 0)
  725. {
  726. isSoldOut = false;
  727. break;
  728. }
  729. }
  730. }
  731. if (isSoldOut)
  732. {
  733. return false;
  734. }
  735. return !LimitedTimeGiftBoxDataManager.Instance.IsOpenMeiRiTeHui;
  736. }
  737. /// <summary>
  738. /// 背包中存在礼包就一直给主界面 背包 红点
  739. /// </summary>
  740. /// <returns></returns>
  741. public bool GetMainBagGiftRed()
  742. {
  743. return ItemDataManager.BagIsExistGiftBag();
  744. }
  745. // /// <summary>
  746. // /// 背包内 是礼包物品就一直给红点
  747. // /// </summary>
  748. // /// <returns></returns>
  749. // public bool GetBagGiftRed(int itemId)
  750. // {
  751. // ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
  752. // if (itemCfg.itemType == ConstItemType.USEABLE)
  753. // {
  754. // if (itemCfg.subType == ConstItemSubType.USEABLE_GIFT_BAG_SELECTABLE ||
  755. // itemCfg.subType == ConstItemSubType.USEABLE_GIFT_BAG_RANDOM)
  756. // {
  757. // return true;
  758. // }
  759. // }
  760. //
  761. // return false;
  762. // }
  763. /// <summary>
  764. /// 福利大厅
  765. /// </summary>
  766. /// <returns></returns>
  767. public bool GetDailyWelfareRed()
  768. {
  769. return GetLimiteChargeRewardRed() || GetSevenDayLoginRed() || DailySignRed() || DailySupplyRed() || GetLimiteChargeRewardRed(501);
  770. }
  771. /// <summary>
  772. ///福利大厅-限时累充可领奖励红点
  773. /// </summary>
  774. /// <returns></returns>
  775. public bool GetLimiteChargeRewardRed()
  776. {
  777. List<ActivityInfo> _limitChargeInfo = ActivityGlobalDataManager.Instance.GetActivityInfoByType(ActivityType.XSLC);
  778. for (int i = 0; i < _limitChargeInfo.Count; i++)
  779. {
  780. if (GetLimiteChargeRewardRed(_limitChargeInfo[i].ActivityId)) return true;
  781. }
  782. return false;
  783. }
  784. public bool GetLimiteChargeRewardRed(int activityId)
  785. {
  786. ActivityInfo _activityInfo = ActivityGlobalDataManager.Instance.GetActivityInfo(activityId);
  787. if (_activityInfo == null) return false;
  788. List<ActivityRechargeCfg> _rechargeCfgs = ActivityRechargeCfgArray.Instance.GetCfgsByactivityId(activityId);
  789. for (int i = 0; i < _rechargeCfgs.Count; i++)
  790. {
  791. if (_activityInfo.CountValue >= _rechargeCfgs[i].value && _activityInfo.GetRewards.IndexOf(_rechargeCfgs[i].id) < 0)
  792. {
  793. return true;
  794. }
  795. }
  796. return false;
  797. }
  798. /// <summary>
  799. /// 福利大厅-七天登录
  800. /// </summary>
  801. /// <returns></returns>
  802. public bool GetSevenDayLoginRed()
  803. {
  804. return ActivityDataManager.Instance.CanGetSevenDayBonus();
  805. }
  806. /// <summary>
  807. /// 福利大厅-每日签到
  808. /// </summary>
  809. /// <returns></returns>
  810. public bool DailySignRed()
  811. {
  812. int _signCount = MathUtil.CountOnes2(GameGlobal.myNumericComponent.GetAsLong(NumericType.SignDay));
  813. List<DailySignCfg> signCfgs = DailySignCfgArray.Instance.GetCfgsBymonth(TimeUtil.GetCurMonth());
  814. for (int i = 0; i < signCfgs.Count; i++)
  815. {
  816. bool isGot = MathUtil.isBitSet(GameGlobal.myNumericComponent.GetAsLong(NumericType.SignReward), signCfgs[i].day);
  817. if (_signCount >= signCfgs[i].day && !isGot) return true;
  818. }
  819. return !MathUtil.isBitSet(GameGlobal.myNumericComponent.GetAsLong(NumericType.SignDay), TimeUtil.GetCurDay());
  820. }
  821. /// <summary>
  822. /// 每日签到-是否签到
  823. /// </summary>
  824. /// <returns></returns>
  825. public bool DailySignGot()
  826. {
  827. return !MathUtil.isBitSet(GameGlobal.myNumericComponent.GetAsLong(NumericType.SignDay), TimeUtil.GetCurDay());
  828. }
  829. /// <summary>
  830. /// 福利大厅-每日补给
  831. /// </summary>
  832. /// <returns></returns>
  833. public bool DailySupplyRed()
  834. {
  835. for (int i = 0; i < DailySupplyCfgArray.Instance.dataArray.Length; i++)
  836. {
  837. DailySupplyCfg supplyCfg = DailySupplyCfgArray.Instance.dataArray[i];
  838. if (DailySupplyRed(supplyCfg)) return true;
  839. }
  840. return false;
  841. }
  842. /// <summary>
  843. /// 福利大厅-每日补给
  844. /// </summary>
  845. /// <returns></returns>
  846. public bool DailySupplyRed(DailySupplyCfg supplyCfg)
  847. {
  848. long openTime = TimeUtil.GetCurDayTime(TimeUtil.GetDateTime(supplyCfg.openTime).ToString("HH:mm:ss"));
  849. long endTime = TimeUtil.GetCurDayTime(TimeUtil.GetDateTime(supplyCfg.endTime).ToString("HH:mm:ss"));
  850. bool isGet = MathUtil.isBitSet(GameGlobal.myNumericComponent.GetAsInt(NumericType.DailySupplyReward), supplyCfg.id);
  851. long curTime = TimeHelper.ServerNow();
  852. if (!isGet && curTime > openTime && curTime < endTime)
  853. {
  854. return true;
  855. }
  856. return false;
  857. }
  858. /// <summary>
  859. /// 常驻礼包是否有需要领取的金币
  860. /// </summary>
  861. /// <returns></returns>
  862. public bool GetGoldRed()
  863. {
  864. var shopCfgList = ShopCfgArray.Instance
  865. .GetCfgsBymenu1Andmenu2(ConstStoreTabId.ENDURING_GIFT_BOX, ConstStoreSubId.ENDURING_GIFT_BOX_GOLD)
  866. .OrderBy(a => a.refreshType).ToList();
  867. foreach (var shopCfg in shopCfgList)
  868. {
  869. var weekGiftBoxState = EnduringGiftBoxDataManager.Instance.DayIsRebateGiftBox(shopCfg.itemId);
  870. if (weekGiftBoxState)
  871. {
  872. return true;
  873. }
  874. }
  875. return false;
  876. }
  877. /// <summary>
  878. /// 常驻礼包是否有需要领取的体力
  879. /// </summary>
  880. /// <returns></returns>
  881. public bool GetPowerRed()
  882. {
  883. var shopCfgList = ShopCfgArray.Instance
  884. .GetCfgsBymenu1Andmenu2(ConstStoreTabId.ENDURING_GIFT_BOX, ConstStoreSubId.ENDURING_GIFT_BOX_POWER)
  885. .OrderBy(a => a.refreshType).ToList();
  886. foreach (var shopCfg in shopCfgList)
  887. {
  888. var weekGiftBoxState = EnduringGiftBoxDataManager.Instance.DayIsRebateGiftBox(shopCfg.itemId);
  889. if (weekGiftBoxState)
  890. {
  891. return true;
  892. }
  893. }
  894. return false;
  895. }
  896. public bool GetActivityWanShiLiRed()
  897. {
  898. return ActivityWanShiLiDataManager.Instance.CanGetReward();
  899. }
  900. /// <summary>
  901. /// 摘星免费抽奖
  902. /// </summary>
  903. /// <returns></returns>
  904. public bool GetLuckyBoxFreeTimes()
  905. {
  906. long freeTime = LuckyBoxDataManager.Instance.GetFreeTime(LuckyBoxDataManager.BOX_ID_2);
  907. if (freeTime > 0)
  908. {
  909. if (freeTime - TimeHelper.ServerNow() < 0)
  910. return true;
  911. }
  912. freeTime = LuckyBoxDataManager.Instance.GetFreeTime(LuckyBoxDataManager.BOX_ID_3);
  913. if (freeTime > 0)
  914. {
  915. if (freeTime - TimeHelper.ServerNow() < 0)
  916. return true;
  917. }
  918. return false;
  919. }
  920. }
  921. }