BattleFailedTipsMgr.lua 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. local BattleFailedTipsMgr = class("BattleFailedTipsMgr")
  2. function BattleFailedTipsMgr:ctor()
  3. self.checkTipsData = nil
  4. self.bInited = false
  5. end
  6. function BattleFailedTipsMgr:Init()
  7. if self.bInited then
  8. return
  9. end
  10. local cfg = ManagerContainer.CfgMgr:GetBattleFailedTipsCfg()
  11. if cfg ~= nil then
  12. self.checkTipsData = {}
  13. for k,v in pairs(cfg) do
  14. self.checkTipsData[#self.checkTipsData+1] = v
  15. end
  16. self:SortData()
  17. end
  18. end
  19. function BattleFailedTipsMgr:SortData()
  20. if self.checkTipsData == nil or #self.checkTipsData < 2 then
  21. return
  22. end
  23. table.sort(
  24. self.checkTipsData,
  25. function(a, b)
  26. return a.Priority < b.Priority
  27. end
  28. )
  29. end
  30. function BattleFailedTipsMgr:CheckShowTips(cnt,inBattleType)
  31. self:Init()
  32. local tips = {}
  33. for i = 1, #self.checkTipsData do
  34. local ret, heroUid = self:CheckTipCondition(self.checkTipsData[i],inBattleType)
  35. if ret then
  36. self.checkTipsData[i].params = heroUid
  37. tips[#tips+1] = self.checkTipsData[i]
  38. if #tips == cnt then
  39. return tips
  40. end
  41. end
  42. end
  43. return tips
  44. end
  45. -- 1:属性点
  46. -- 2:上阵伙伴数量
  47. -- 3:技能经验的分配
  48. -- 4:有高级装备可以穿戴
  49. -- 5: 有高级装备可以升级
  50. -- 6:有高级卡片可以插卡
  51. -- 7:卡片可以升级
  52. -- 8:24件装备都可以精炼
  53. -- 9: 使用的宠物数量判断
  54. -- 10:当天是否使用过时光之力
  55. -- 11:调整阵容
  56. -- 12:提升角色等级
  57. -- 13:调整技能顺序
  58. -- 14: 上阵伙伴升级
  59. -- 15:召唤
  60. function BattleFailedTipsMgr:CheckTipCondition(tipData,inBattleType)
  61. if tipData == nil then
  62. return false
  63. end
  64. if tipData.FunId ~= nil then
  65. for i =1, #tipData.FunId do
  66. local fId = tipData.FunId[i]
  67. if fId > 0 and (not ManagerContainer.UIFuncUnlockMgr:GetFuncLockStatusById(fId)) then
  68. return false
  69. end
  70. end
  71. end
  72. local canShow = false
  73. if tipData.ShowBattleType ~= nil then
  74. for i = 1, #tipData.ShowBattleType do
  75. if tipData.ShowBattleType[i] == inBattleType then
  76. canShow = true
  77. break
  78. end
  79. end
  80. end
  81. if not canShow then
  82. return false
  83. end
  84. if tipData.Type == 1 then
  85. return self:CheckHeroAttrPoint()
  86. elseif tipData.Type == 2 then
  87. return self:CheckBattleHeroCnt()
  88. elseif tipData.Type == 3 then
  89. return self:CheckAvailableSkillExp()
  90. elseif tipData.Type == 4 then
  91. return self:CheckEquipWearable()
  92. elseif tipData.Type == 5 then
  93. return self:CheckEquipCanUpgrade()
  94. elseif tipData.Type == 6 then
  95. return self:CheckAvailableCard()
  96. elseif tipData.Type == 7 then
  97. return self:CheckCardCanUpgrade()
  98. elseif tipData.Type == 8 then
  99. return self:CheckEquipCanRefine()
  100. elseif tipData.Type == 9 then
  101. return self:CheckUsedPetCnt()
  102. elseif tipData.Type == 10 then
  103. return self:CheckUnusedQuickBattle()
  104. elseif tipData.Type == 14 then
  105. return self:CheckParnterLvup()
  106. else
  107. return true
  108. end
  109. end
  110. function BattleFailedTipsMgr:CheckHeroAttrPoint()
  111. local teamData = ManagerContainer.DataMgr.UserData:GetTeamData(true)
  112. if teamData == nil then
  113. return false, 0
  114. end
  115. local ret = false
  116. for i = 1, #teamData do
  117. if ManagerContainer.RedPointMgr.HeroRPCtr:GetAttrPointRPStatus(teamData[i].uid) then
  118. ret = true
  119. break
  120. end
  121. end
  122. local maxPointNum = 0
  123. local maxPointUid = 0
  124. if ret then
  125. for i = 1, #teamData do
  126. local pointNum = 0
  127. if teamData[i].uid == 1 then
  128. pointNum = SDataUtil.InvConvert(ManagerContainer.DataMgr.UserData:GetRoleDataAttrPoints())
  129. else
  130. pointNum = SDataUtil.InvConvert(ManagerContainer.DataMgr.PartnerData:GetRoleDataAttrPoints(teamData[i].uid))
  131. end
  132. if pointNum > maxPointNum then
  133. maxPointUid = teamData[i].uid
  134. maxPointNum = pointNum
  135. end
  136. end
  137. end
  138. return ret,maxPointUid
  139. end
  140. function BattleFailedTipsMgr:CheckParnterLvup()
  141. local teamData = ManagerContainer.DataMgr.UserData:GetTeamData(true)
  142. if teamData == nil then
  143. return false
  144. end
  145. local minLevel = 100000
  146. local minLevelHeroUid = 0
  147. for i = 1, #teamData do
  148. local uid = teamData[i].uid
  149. if uid ~= 1 then
  150. local status = ManagerContainer.RedPointMgr.HeroRPCtr:GetPartnerLvUpRPStatusById(uid)
  151. if status then
  152. if teamData[i].lv < minLevel then
  153. minLevel = teamData[i].lv
  154. minLevelHeroUid = uid
  155. end
  156. end
  157. end
  158. end
  159. return minLevelHeroUid > 0, minLevelHeroUid
  160. end
  161. function BattleFailedTipsMgr:CheckBattleHeroCnt()
  162. local ownedNum = 0
  163. local inBattleNum = 0
  164. local maxLevelUid = 0
  165. local maxLevel = 0
  166. local partnerDatas = ManagerContainer.DataMgr.PartnerData:GetPartnerDatas()
  167. for _,v in pairs(partnerDatas) do
  168. if v ~= nil then
  169. if v.owned then
  170. ownedNum = ownedNum + 1
  171. end
  172. if v.isBattle then
  173. inBattleNum = inBattleNum + 1
  174. else
  175. if v.owned and v.baseLevel > maxLevel then
  176. maxLevel = v.baseLevel
  177. maxLevelUid = v.id
  178. end
  179. end
  180. end
  181. end
  182. return inBattleNum < 3 and ownedNum > inBattleNum, maxLevelUid
  183. end
  184. function BattleFailedTipsMgr:CheckAvailableSkillExp()
  185. local teamData = ManagerContainer.DataMgr.UserData:GetTeamData(true)
  186. if teamData == nil then
  187. return false, 0
  188. end
  189. local maxSkillLvUid = 0
  190. local maxSkillLevel = 0
  191. local maxLevelSkillId = 0
  192. local skillExp = ManagerContainer.DataMgr.UserData:GetCruise()
  193. for i = 1, #teamData do
  194. local skills = teamData[i].skills
  195. if skills ~= nil then
  196. for j=1, #skills do
  197. local skill = skills[j]
  198. if skill.lv > maxSkillLevel then
  199. maxSkillLevel = skill.lv
  200. maxLevelSkillId = skill.skillId
  201. maxSkillLvUid = teamData[i].uid
  202. end
  203. end
  204. end
  205. end
  206. local ret = false
  207. if maxLevelSkillId > 0 then
  208. if maxSkillLvUid == 1 then
  209. local skillCfg = ManagerContainer.CfgMgr:GetSkillTreeCfgById(maxLevelSkillId)
  210. if skillCfg ~= nil then
  211. local UpGradeCost = ManagerContainer.CfgMgr:GetSkillDemandCfgUpGradeCostById(skillCfg.OpenLevel)
  212. if UpGradeCost ~= nil then
  213. local costCfg = UpGradeCost[maxSkillLevel]
  214. if costCfg ~= nil then
  215. ret = skillExp >= costCfg[2]
  216. end
  217. end
  218. end
  219. else
  220. local skillCfg = ManagerContainer.CfgMgr:GetParterSkillTreeCfgById(maxLevelSkillId)
  221. if skillCfg ~= nil then
  222. local UpGradeCost = ManagerContainer.CfgMgr:GetSkillDemandCfgUpGradeCostById(skillCfg.OpenLevel)
  223. if UpGradeCost ~= nil then
  224. local costCfg = UpGradeCost[maxSkillLevel]
  225. if costCfg ~= nil then
  226. ret = skillExp >= costCfg[2]
  227. end
  228. end
  229. end
  230. end
  231. end
  232. return ret,maxSkillLvUid
  233. end
  234. function BattleFailedTipsMgr:CheckEquipWearable()
  235. local teamData = ManagerContainer.DataMgr.UserData:GetTeamData(true)
  236. if teamData == nil then
  237. return false
  238. end
  239. local maxFightPowerUid = 0
  240. local maxFightPower = 0
  241. for i = 1, #teamData do
  242. local RPStatus = ManagerContainer.RedPointMgr.HeroRPCtr:GetEquipDressRPByUid(teamData[i].uid)
  243. if RPStatus ~= nil then
  244. local tempRet = false
  245. for j =1, #RPStatus do
  246. if RPStatus[j] then
  247. tempRet = true
  248. break
  249. end
  250. end
  251. if tempRet then
  252. local fightPower = ManagerContainer.DataMgr.UserData:GetSlotFightPower(teamData[i].uid)
  253. if fightPower > maxFightPower then
  254. maxFightPower = fightPower
  255. maxFightPowerUid = teamData[i].uid
  256. end
  257. end
  258. end
  259. end
  260. -- LogError("maxFightPowerUid = " .. tostring(maxFightPowerUid))
  261. return maxFightPowerUid > 0, maxFightPowerUid
  262. end
  263. function BattleFailedTipsMgr:CheckEquipCanUpgrade()
  264. local teamData = ManagerContainer.DataMgr.UserData:GetTeamData(true)
  265. if teamData == nil then
  266. return false
  267. end
  268. local maxFightPowerUid = 0
  269. local maxFightPower = 0
  270. for i = 1, #teamData do
  271. local RPStatus = ManagerContainer.RedPointMgr.HeroRPCtr:GetEquipUpgradeRPByUid(teamData[i].uid)
  272. if RPStatus~= nil then
  273. local tempRet = false
  274. for j =1, #RPStatus do
  275. if RPStatus[j] then
  276. tempRet = true
  277. break
  278. end
  279. end
  280. if tempRet then
  281. local fightPower = ManagerContainer.DataMgr.UserData:GetSlotFightPower(teamData[i].uid)
  282. if fightPower > maxFightPower then
  283. maxFightPower = fightPower
  284. maxFightPowerUid = teamData[i].uid
  285. end
  286. end
  287. end
  288. end
  289. return maxFightPowerUid > 0, maxFightPowerUid
  290. end
  291. function BattleFailedTipsMgr:CheckEquipCanRefine()
  292. local teamData = ManagerContainer.DataMgr.UserData:GetTeamData(true)
  293. if teamData == nil then
  294. return false
  295. end
  296. if #teamData < 4 then
  297. return false
  298. end
  299. local refineCnt = 0
  300. for i = 1, #teamData do
  301. local RPStatus = ManagerContainer.RedPointMgr.HeroRPCtr:GetEquipRefineRPByUid(teamData[i].uid)
  302. if RPStatus~= nil then
  303. for j =1, #RPStatus do
  304. if RPStatus[j] then
  305. refineCnt = refineCnt + 1
  306. end
  307. end
  308. end
  309. end
  310. local ret = refineCnt == (#teamData * 6)
  311. local maxFightPowerUid = 0
  312. local maxPower = 0
  313. if ret then
  314. for i = 1,#teamData do
  315. local fightPower = ManagerContainer.DataMgr.UserData:GetSlotFightPower(teamData[i].uid)
  316. if fightPower > maxPower then
  317. maxPower = fightPower
  318. maxFightPowerUid = teamData[i].uid
  319. end
  320. end
  321. end
  322. return ret, maxFightPowerUid
  323. end
  324. function BattleFailedTipsMgr:CheckAvailableCard()
  325. local teamData = ManagerContainer.DataMgr.UserData:GetTeamData(true)
  326. if teamData == nil then
  327. return false
  328. end
  329. local maxFightPowerUid = 0
  330. local maxPower = 0
  331. for i = 1, #teamData do
  332. if ManagerContainer.RedPointMgr.HeroRPCtr:GetRoleCardSlotEmptyRP(teamData[i].uid) then
  333. local fightPower = ManagerContainer.DataMgr.UserData:GetSlotFightPower(teamData[i].uid)
  334. if fightPower > maxPower then
  335. maxPower = fightPower
  336. maxFightPowerUid = teamData[i].uid
  337. end
  338. end
  339. end
  340. return maxFightPowerUid > 0, maxFightPowerUid
  341. end
  342. function BattleFailedTipsMgr:CheckCardCanUpgrade()
  343. local teamData = ManagerContainer.DataMgr.UserData:GetTeamData(true)
  344. if teamData == nil then
  345. return false
  346. end
  347. local maxFightPowerUid = 0
  348. local maxPower = 0
  349. for i = 1, #teamData do
  350. if ManagerContainer.RedPointMgr.HeroRPCtr:GetRoleCardSlotUpRP(teamData[i].uid) then
  351. local fightPower = ManagerContainer.DataMgr.UserData:GetSlotFightPower(teamData[i].uid)
  352. if fightPower > maxPower then
  353. maxPower = fightPower
  354. maxFightPowerUid = teamData[i].uid
  355. end
  356. end
  357. end
  358. return maxFightPowerUid > 0,maxFightPowerUid
  359. end
  360. function BattleFailedTipsMgr:CheckUsedPetCnt()
  361. local teamData = ManagerContainer.DataMgr.UserData:GetTeamData(true)
  362. if teamData == nil then
  363. return false
  364. end
  365. local unlockedPetSlotCnt = ManagerContainer.DataMgr.PetDataMgr:GetBattleUnlockSlotCount()
  366. local pets = ManagerContainer.DataMgr.PetDataMgr:GetPetDatas()
  367. local totalCnt = 0
  368. if pets ~= nil then
  369. totalCnt = #pets
  370. end
  371. local usedPetCnt = 0
  372. for i = 1, #teamData do
  373. if teamData[i].petId > 0 then
  374. usedPetCnt = usedPetCnt + 1
  375. end
  376. end
  377. return usedPetCnt < unlockedPetSlotCnt and totalCnt > usedPetCnt and usedPetCnt < 4
  378. end
  379. function BattleFailedTipsMgr:CheckUnusedQuickBattle()
  380. return ManagerContainer.LuaBattleMgr:UsedQuickBattleTimes() == 0
  381. end
  382. return BattleFailedTipsMgr