LeagueDataManager.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468
  1. using System;
  2. using System.Collections.Generic;
  3. using cfg.GfgCfg;
  4. using ET;
  5. namespace GFGGame
  6. {
  7. public class LastQuestionResult
  8. {
  9. public static int SomeBodyRight = 1; //1:有人答对题目
  10. public static int NobodyRight = 2; // 2:无人答对
  11. public static int Ending = 3; // 3:答题结束
  12. }
  13. public class LeagueJoinType
  14. {
  15. public static int Join = 1; //1:已经加入军团
  16. public static int UnJoin = 2; //1:未加入军团
  17. }
  18. public class LeagueDataManager : SingletonBase<LeagueDataManager>
  19. {
  20. public int Type = 2; // 1:已经加入军团 2:未加入军团
  21. public int MaxFinishType
  22. {
  23. get { return GetSkillCurType(); }
  24. }
  25. public int CurLayer
  26. {
  27. get { return Math.Max(GameGlobal.myNumericComponent.GetAsInt(NumericType.LeagueSkillMaxLayer), 1); }
  28. }
  29. public LeagueData LeagueData; //联盟信息
  30. public int HallLevel
  31. {
  32. get { return (int)GetNumeriValue(LeagueNumericType.HallLevel); }
  33. }
  34. public int HotelLevel
  35. {
  36. get { return (int)GetNumeriValue(LeagueNumericType.HotelLevel); }
  37. }
  38. public int StoreLevel
  39. {
  40. get { return (int)GetNumeriValue(LeagueNumericType.StoreLevel); }
  41. }
  42. public Dictionary<int, long> LeagueNumber = new Dictionary<int, long>(); //联盟数值,LeagueNumericType
  43. public Dictionary<long, LeagueListData> ListDatas = new Dictionary<long, LeagueListData>(); //联盟列表
  44. public Dictionary<long, OtherRoleInfoData> ListApplyDatas = new Dictionary<long, OtherRoleInfoData>(); //联盟申请列表
  45. public List<LeagueLogData> ListLogDatas = new List<LeagueLogData>(); //日志数据
  46. public LeagueLastAnswerRoleData LastAnswerRoleData = new LeagueLastAnswerRoleData(); //上题回答数据
  47. public Dictionary<long, int> ListAnsweringDatas = new Dictionary<long, int>(); //当前答题玩家数据,roleId,答题数量。
  48. public Dictionary<int, List<LeagueAnswerData>> ListAnswerRankDatas =
  49. new Dictionary<int, List<LeagueAnswerData>>(); //答题排行榜数据,int:type//0:周排行 1:上周排行
  50. public int TeaPartyId = 0; //茶会期数 --未开启则期数为0
  51. public int TeaPartyStatus = 0; // 0未开启 1集结中 2已集结
  52. public RoleTeapartyInfoProto RoleTeapartyInfo = new RoleTeapartyInfoProto(); // 玩家本期茶话会参与信息
  53. public List<RoleContainerProto> RoleContainerList = new List<RoleContainerProto>(); // 茶会每个扮演角色坑位信息
  54. public long TeaPartyCloseTime = 0; // 茶话会结束时间
  55. public int ChooseTeaPartId = 0; // 选择的茶话会类型
  56. public void Clear()
  57. {
  58. Type = LeagueJoinType.UnJoin;
  59. ListDatas.Clear();
  60. LeagueData = null;
  61. ListApplyDatas.Clear();
  62. ListLogDatas.Clear();
  63. ListAnsweringDatas.Clear();
  64. LeagueNumber.Clear();
  65. }
  66. public void SetNumeric(int type, long value)
  67. {
  68. if (LeagueNumber.ContainsKey(type))
  69. LeagueNumber[type] = value;
  70. else
  71. LeagueNumber.Add(type, value);
  72. }
  73. public long GetNumeriValue(int type)
  74. {
  75. if (LeagueNumber.TryGetValue(type, out long value))
  76. {
  77. return value;
  78. }
  79. return 0;
  80. }
  81. public string GetMemberTitle(int pos)
  82. {
  83. string title = "";
  84. switch (pos)
  85. {
  86. case LeaguePos.Owner:
  87. title = "社长";
  88. break;
  89. case LeaguePos.SubOwner:
  90. title = "副社长";
  91. break;
  92. case LeaguePos.Flower:
  93. title = "社花";
  94. break;
  95. case LeaguePos.Member:
  96. title = "成员";
  97. break;
  98. }
  99. return title;
  100. }
  101. public int GetMyPos()
  102. {
  103. if (LeagueDataManager.Instance.LeagueData == null)
  104. {
  105. return LeaguePos.Member;
  106. }
  107. if (LeagueDataManager.Instance.LeagueData.LeagueMemberDatas.TryGetValue(RoleDataManager.roleId,
  108. out LeagueMemberData memberData))
  109. {
  110. return memberData.Pos;
  111. }
  112. return LeaguePos.Member;
  113. }
  114. public string GetMyLeagueName()
  115. {
  116. if (LeagueDataManager.Instance.LeagueData == null)
  117. {
  118. return "";
  119. }
  120. return LeagueDataManager.Instance.LeagueData.Name;
  121. }
  122. // //判断一个玩家是否是会长副会长
  123. // public bool CheckPlayerIsLeader()
  124. // {
  125. // }
  126. /// <summary>
  127. /// 根据祈福类型获取祈福次数
  128. /// </summary>
  129. /// <returns></returns>
  130. public int GetPrayTimesByType(int prayType)
  131. {
  132. int curCount = 0;
  133. switch (prayType)
  134. {
  135. case LeaguePrayType.First:
  136. curCount = RoleDataManager.LeagueType1PrayTimes;
  137. break;
  138. case LeaguePrayType.Second:
  139. curCount = RoleDataManager.LeagueType2PrayTimes;
  140. break;
  141. case LeaguePrayType.Third:
  142. curCount = RoleDataManager.LeagueType3PrayTimes;
  143. break;
  144. }
  145. return curCount;
  146. }
  147. public OtherRoleInfoData GetMemberRoleInfo(long roleId)
  148. {
  149. LeagueData.LeagueMemberDatas.TryGetValue(roleId, out LeagueMemberData value);
  150. if (value == null) return null;
  151. return value.RoleInfo;
  152. }
  153. //输入属性类型,获取联盟技能该属性加成总值
  154. public int GetAllSkillScore(int scoreType)
  155. {
  156. int score = 0;
  157. foreach (int key in SkillDataManager.Instance.LeagueSkillScoreDatas.Keys)
  158. {
  159. score += SkillDataManager.Instance.LeagueSkillScoreDatas[key][scoreType];
  160. }
  161. return score;
  162. }
  163. //输入联盟技能类型和属性类型,获取指定技能类型该属性加成值
  164. public int GetSkillScoreByType(int skillType, int scoreType)
  165. {
  166. int score = 0;
  167. if (!SkillDataManager.Instance.LeagueSkillScoreDatas.ContainsKey(skillType)) return score;
  168. if (!SkillDataManager.Instance.LeagueSkillScoreDatas[skillType].ContainsKey(scoreType)) return score;
  169. return SkillDataManager.Instance.LeagueSkillScoreDatas[skillType][scoreType];
  170. }
  171. //检测一个技能是否激活
  172. public bool CheckIsSkillActive(int skillType, int skillId)
  173. {
  174. if (!SkillDataManager.Instance.LeagueSkillDatas.ContainsKey(skillType)) return false;
  175. return SkillDataManager.Instance.LeagueSkillDatas[skillType].IndexOf(skillId) >= 0;
  176. }
  177. private int GetSkillCurType()
  178. {
  179. List<LeagueSkillCountCfg> skillCountCfgs = CommonDataManager.Tables.TblLeagueSkillCountCfg.DataList;
  180. for (int i = 0; i < skillCountCfgs.Count; i++)
  181. {
  182. if (GetSkillProgressByType(skillCountCfgs[i].Type) < 100) return skillCountCfgs[i].Type - 1;
  183. }
  184. return skillCountCfgs[skillCountCfgs.Count - 1].Type;
  185. }
  186. //根据技能类型获取该类型进度
  187. public double GetSkillProgressByType(int skillType)
  188. {
  189. LeagueSkillCountCfg skillCountCfg = CommonDataManager.Tables.TblLeagueSkillCountCfg.GetOrDefault(skillType);
  190. float count = !SkillDataManager.Instance.LeagueSkillDatas.ContainsKey(skillType)
  191. ? 0
  192. : SkillDataManager.Instance.LeagueSkillDatas[skillType].Count;
  193. float maxCount = skillCountCfg.SkillCount;
  194. return Math.Round(count / maxCount * 100, 2);
  195. ;
  196. }
  197. //获取联盟礼包领取数据
  198. public List<LeagueGiftGetData> GetGiftGetDatas()
  199. {
  200. List<LeagueGiftGetData> getDatas = new List<LeagueGiftGetData>();
  201. for (int i = 0; i < CommonDataManager.Tables.TblLeagueWelfareCfg.DataList.Count; i++)
  202. {
  203. LeagueWelfareCfg welfareCfg = CommonDataManager.Tables.TblLeagueWelfareCfg.DataList[i];
  204. bool isBuy = false;
  205. bool isGet = false;
  206. switch (welfareCfg.Type)
  207. {
  208. case LeagueWelfareType.Day: //普通日福利
  209. isBuy = GetNumeriValue(LeagueNumericType.LeagueWelfareDay) > 0;
  210. isGet = GameGlobal.myNumericComponent.GetAsInt(NumericType.LeagueWelfareDay) == 1;
  211. break;
  212. case LeagueWelfareType.Week: //普通周福利
  213. isBuy = GetNumeriValue(LeagueNumericType.LeagueWelfareWeekLeftTimes) > 0;
  214. isGet = GameGlobal.myNumericComponent.GetAsInt(NumericType.LeagueWelfareWeek) == 1;
  215. break;
  216. case LeagueWelfareType.SuperWeek: //超级周福利
  217. isBuy = GetNumeriValue(LeagueNumericType.LeagueWelfareSuperLeftTimes) > 0;
  218. isGet = GameGlobal.myNumericComponent.GetAsInt(NumericType.LeagueWelfareSuperWeek) == 1;
  219. break;
  220. case LeagueWelfareType.SuperDay: //超级日福利
  221. isBuy = GetNumeriValue(LeagueNumericType.LeagueWelfareSuperDay) > 0;
  222. isGet = GameGlobal.myNumericComponent.GetAsInt(NumericType.LeagueWelfareSuperDay) == 1;
  223. break;
  224. }
  225. // ET.Log.Debug("isBuy:" + isBuy);
  226. if (isBuy)
  227. {
  228. LeagueGiftGetData giftGetData = new LeagueGiftGetData();
  229. giftGetData.Type = welfareCfg.Type;
  230. giftGetData.IsGet = isGet;
  231. giftGetData.GiftCfg = welfareCfg;
  232. getDatas.Add(giftGetData);
  233. }
  234. }
  235. return getDatas;
  236. }
  237. public List<LeagueGiftBuyData> GetGiftBuyDatas()
  238. {
  239. List<LeagueGiftBuyData> giftBuyDatas = new List<LeagueGiftBuyData>();
  240. for (int i = 0; i < CommonDataManager.Tables.TblLeagueWelfareCfg.DataList.Count; i++)
  241. {
  242. LeagueWelfareCfg welfareCfg = CommonDataManager.Tables.TblLeagueWelfareCfg.DataList[i];
  243. int buyCount = 0;
  244. long endTime = 0;
  245. switch (welfareCfg.Type)
  246. {
  247. case LeagueWelfareType.Day:
  248. buyCount = (int)GetNumeriValue(LeagueNumericType.LeagueWelfareDay);
  249. break;
  250. case LeagueWelfareType.Week:
  251. buyCount = (int)GetNumeriValue(LeagueNumericType.LeagueWelfareWeekLeftTimes) > 0 ? 1 : 0;
  252. endTime = GetNumeriValue(LeagueNumericType.LeagueWelfareWeekLeftTimes);
  253. break;
  254. case LeagueWelfareType.SuperWeek:
  255. buyCount = (int)GetNumeriValue(LeagueNumericType.LeagueWelfareSuperLeftTimes) > 0 ? 1 : 0;
  256. endTime = GetNumeriValue(LeagueNumericType.LeagueWelfareSuperLeftTimes);
  257. break;
  258. case LeagueWelfareType.SuperDay:
  259. buyCount = (int)GetNumeriValue(LeagueNumericType.LeagueWelfareSuperDay);
  260. break;
  261. }
  262. LeagueGiftBuyData giftBuyData = new LeagueGiftBuyData();
  263. giftBuyData.Type = welfareCfg.Type;
  264. giftBuyData.BuyCount = buyCount;
  265. giftBuyData.EndTime = endTime;
  266. giftBuyData.GiftCfg = welfareCfg;
  267. giftBuyDatas.Add(giftBuyData);
  268. }
  269. return giftBuyDatas;
  270. }
  271. //茶话会匹配度计算
  272. public int GetTeaPartyMatchedValue(FightData roleData)
  273. {
  274. int matchedValue = 0;
  275. var teapartyRoleCfg = CommonDataManager.Tables.TblTeapartyRoleCfg.GetGroup1ById(TeaPartyId);
  276. List<string> tags = teapartyRoleCfg[ChooseTeaPartId - 1].Tag;
  277. for (int i = 0; i < roleData.itemList.Count; i++)
  278. {
  279. int itemId = roleData.itemList[i];
  280. ItemCfg itemCfg = CommonDataManager.Tables.TblItemCfg.GetOrDefault(itemId);
  281. if (itemCfg == null)
  282. {
  283. ET.Log.Error("物品:" + itemId + "不存在");
  284. return matchedValue;
  285. }
  286. for (int t = 0; t < itemCfg.Tags.Count; t++)
  287. {
  288. for (int j = 0; j < tags.Count; j++)
  289. {
  290. if (itemCfg.Tags[t].Name == tags[j])
  291. {
  292. matchedValue += 1;
  293. }
  294. }
  295. }
  296. }
  297. return matchedValue;
  298. }
  299. //茶话会个人奖励是否可以领取
  300. public bool CheckTeaPartyPersonRewardCanGet(int targetScore)
  301. {
  302. return CheckTeaPartyPersonRewardStatu(targetScore) == ConstBonusStatus.CAN_GET &&
  303. LeagueDataManager.Instance.TeaPartyStatus == LeagueTeaPartyStatus.YesGo;
  304. }
  305. //茶话会个人奖励当前状态
  306. public int CheckTeaPartyPersonRewardStatu(int targetScore)
  307. {
  308. var teapartyRewardRoleCfg = CommonDataManager.Tables.TblTeapartyRewardRoleCfg.DataList;
  309. if (teapartyRewardRoleCfg == null)
  310. return 0;
  311. var roleTeapartyInfo = LeagueDataManager.Instance.RoleTeapartyInfo;
  312. if (roleTeapartyInfo == null || roleTeapartyInfo.PerAwardStatusVs == null ||
  313. roleTeapartyInfo.PerAwardStatusVs.Count <= 0)
  314. return 0;
  315. for (int i = 0; i < teapartyRewardRoleCfg.Count; i++)
  316. {
  317. if (teapartyRewardRoleCfg[i].TargetScore == targetScore)
  318. {
  319. return roleTeapartyInfo.PerAwardStatusVs[i];
  320. }
  321. }
  322. return 0;
  323. }
  324. //茶话会雅集奖励是否可以领取
  325. public bool CheckTeaPartyLeagueRewardCanGet(int targetScore)
  326. {
  327. return CheckTeaPartyLeagueRewardStatu(targetScore) == ConstBonusStatus.CAN_GET;
  328. }
  329. //茶话会雅集奖励是否可以领取
  330. public int CheckTeaPartyLeagueRewardStatu(int targetScore)
  331. {
  332. var teapartyRewardLeagueCfgs =
  333. CommonDataManager.Tables.TblTeapartyRewardLeagueCfg.GetGroup1ById(LeagueDataManager.Instance
  334. .TeaPartyId);
  335. if (teapartyRewardLeagueCfgs == null)
  336. return 0;
  337. var roleTeapartyInfo = LeagueDataManager.Instance.RoleTeapartyInfo;
  338. if (roleTeapartyInfo == null || roleTeapartyInfo.LeagueAwardStatusVs == null ||
  339. roleTeapartyInfo.LeagueAwardStatusVs.Count <= 0)
  340. return 0;
  341. for (int i = 0; i < teapartyRewardLeagueCfgs.Count; i++)
  342. {
  343. if (teapartyRewardLeagueCfgs[i].TargetScore == targetScore)
  344. {
  345. return roleTeapartyInfo.LeagueAwardStatusVs[i];
  346. }
  347. }
  348. return 0;
  349. }
  350. //茶话会奖励是否可以领取
  351. public bool CheckTeaPartyRewardCanGet()
  352. {
  353. var roleTeapartyInfo = LeagueDataManager.Instance.RoleTeapartyInfo;
  354. if (roleTeapartyInfo == null)
  355. return false;
  356. //该活动暂未开启
  357. if (LeagueDataManager.Instance.TeaPartyStatus == LeagueTeaPartyStatus.YesGo &&
  358. roleTeapartyInfo.IsNoActDayEnterLeague)
  359. return false;
  360. //该玩法不可以重复参加哦
  361. if (roleTeapartyInfo.IsQuitTeaParty && roleTeapartyInfo.LastOpenCfgId != 0 &&
  362. roleTeapartyInfo.LastOpenCfgId == LeagueDataManager.Instance.TeaPartyId)
  363. return false;
  364. var teapartyRewardRoleCfg = CommonDataManager.Tables.TblTeapartyRewardRoleCfg.DataList;
  365. var teapartyRewardLeagueCfgs =
  366. CommonDataManager.Tables.TblTeapartyRewardLeagueCfg.GetGroup1ById(LeagueDataManager.Instance
  367. .TeaPartyId);
  368. foreach (var cfg in teapartyRewardRoleCfg)
  369. {
  370. if (CheckTeaPartyPersonRewardCanGet(cfg.TargetScore))
  371. return true;
  372. }
  373. foreach (var cfg in teapartyRewardLeagueCfgs)
  374. {
  375. if (CheckTeaPartyLeagueRewardCanGet(cfg.TargetScore))
  376. return true;
  377. }
  378. return false;
  379. }
  380. //主界面雅集提示语判断
  381. public string CheckLeagueMainTips()
  382. {
  383. if (LeagueDataManager.Instance.GetNumeriValue(LeagueNumericType.LeagueQuestionStatus) ==
  384. LeagueQuestionStatus.Open ||
  385. LeagueDataManager.Instance.GetNumeriValue(LeagueNumericType.LeagueQuestionStatus) ==
  386. LeagueQuestionStatus.WaitNext)
  387. return "雅集夜宴进行中...";
  388. if (LeagueDataManager.Instance.Type == LeagueJoinType.Join &&
  389. LeagueDataManager.Instance.TeaPartyStatus == LeagueTeaPartyStatus.YesOpen &&
  390. !LeagueDataManager.Instance.RoleTeapartyInfo.Status)
  391. return "茶话会挑战中...";
  392. return "";
  393. }
  394. }
  395. }