RedDotDataManager.cs 35 KB

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