RecommendLineup.lua 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. --------------------------------
  2. -- 文件名 : RecommendLineup.lua
  3. -- 文件说明 : 推荐阵容
  4. -- 创建时间 : 2025/1/15
  5. -- 创建人 : FC
  6. --------------------------------
  7. local HeroLogic = require("hero.HeroLogic")
  8. local BagLogic = require("bag.BagLogic")
  9. local HeroGrid = require("hero.HeroGrid")
  10. local CommonDB = require("common.CommonDB")
  11. local Msg = require("core.Msg")
  12. local CombatPosLogic = require("combat.CombatPosLogic")
  13. local CombatDefine = require("combat.CombatDefine")
  14. local HeroExcel = require("excel.hero")
  15. local tTuiJian = require("excel.tuijian")
  16. local nRecommendLineupLen = 30 -- 阵容记录推荐数量
  17. local tRecommendLineupData = nil
  18. local nSendLen = 10 -- 一次性发送数据长度
  19. ---------------------------------------- 内部函数 ------------------------------------
  20. local function RecommendLineup_GetData()
  21. if not tRecommendLineupData then
  22. tRecommendLineupData = CommonDB.getRecommendLineUp()
  23. table.sort(tRecommendLineupData, function (l, r)
  24. return l.nPower > r.nPower
  25. end
  26. )
  27. end
  28. return tRecommendLineupData
  29. end
  30. local function RecommendLineup_SetData(tData)
  31. table.sort(tData, function (l, r)
  32. return l.nPower > r.nPower
  33. end
  34. )
  35. tRecommendLineupData = tData
  36. CommonDB.SetRecommendLineUp(tRecommendLineupData)
  37. end
  38. -- 获取小于该战力的下表
  39. local function RecommendLineup_GetIndex(nNewPower, human)
  40. local nIndex = -1
  41. local tDBData = RecommendLineup_GetData()
  42. local nKey = human.db._id
  43. if nil == _G.next(tDBData) then
  44. nIndex = 1
  45. return nIndex
  46. end
  47. local nNowLen = #tDBData
  48. if nNowLen < nRecommendLineupLen then
  49. for i, value in ipairs(tDBData) do
  50. -- 更新阵容
  51. if value.key and value.key == nKey then
  52. -- 大于等于才更新
  53. if nNewPower >= value.nPower then
  54. print("[RecommendLineup_GetIndex] 已存在 nIndex = "..i)
  55. nIndex = i
  56. end
  57. -- 直接返回
  58. return nIndex
  59. end
  60. end
  61. if -1 == nIndex then
  62. nIndex = nNowLen + 1
  63. return nIndex
  64. end
  65. end
  66. for i, value in ipairs(tDBData) do
  67. local nPower = value.nPower
  68. if nNewPower > nPower then
  69. nIndex = i
  70. break
  71. end
  72. end
  73. return nIndex
  74. end
  75. -- 插入最新的表
  76. local function RecommendLineup_UpDateData(human, nIndex, tHeroData)
  77. local tOldData = RecommendLineup_GetData()
  78. local nOldLen = #tOldData
  79. local tNewData = {}
  80. if nil == _G.next(tOldData) then
  81. table.insert(tNewData, tHeroData)
  82. RecommendLineup_SetData(tNewData)
  83. return
  84. end
  85. -- 已经存在
  86. if nIndex <= nOldLen then
  87. tNewData = tOldData
  88. tNewData[nIndex] = tHeroData
  89. RecommendLineup_SetData(tNewData)
  90. return
  91. end
  92. -- 长度还不够
  93. if nOldLen < nRecommendLineupLen then
  94. tNewData = tOldData
  95. table.insert(tNewData, tHeroData)
  96. RecommendLineup_SetData(tNewData)
  97. return
  98. end
  99. -- 只有30个直接遍历
  100. local nLen = 0
  101. local tLastData = nil
  102. for i, value in ipairs(tOldData) do
  103. if nLen >= nRecommendLineupLen then
  104. break
  105. end
  106. if i == nIndex then
  107. table.insert(tNewData, tHeroData)
  108. tLastData = value
  109. elseif i < nIndex then
  110. table.insert(tNewData, value)
  111. elseif i > nIndex then
  112. table.insert(tNewData, tLastData)
  113. tLastData = value
  114. end
  115. nLen = nLen + 1
  116. end
  117. RecommendLineup_SetData(tNewData)
  118. end
  119. -- 封装信息
  120. local function RecommendLineup_MakeSimpleData(net, tSaveData)
  121. local cf = HeroExcel.hero[tSaveData.id]
  122. if not cf then
  123. print("[RecommendLineup_MakeSimpleData] 不存在对应英雄配置 nHeroID = "..tSaveData.id)
  124. return
  125. end
  126. net.id = tSaveData.id
  127. net.index = tSaveData.index or 0
  128. net.uuid = tSaveData.uuid or ""
  129. net.gl = tSaveData.gl or 0
  130. net.camp = tSaveData.camp or 0
  131. net.job = tSaveData.job or 0
  132. net.star = tSaveData.star or 0 --cf and cf.star or 0 星级调整 dxzeng
  133. net.icon = tSaveData.head or (cf.head or 0)
  134. net.body = tSaveData.body or 0
  135. net.up = tSaveData.up or 0 --是否能够升星
  136. net.lv = tSaveData.lv or 1
  137. net.xLv = tSaveData.xLv or 0
  138. net.zhandouli = tSaveData.zhandouli or 0
  139. net.quality = tSaveData.quality or 0
  140. net.isLock = tSaveData.isLock and 1 or 0
  141. net.hp = tSaveData.hp or 0
  142. net.hpMax = tSaveData.hpMax or 0
  143. net.cnt = tSaveData.cnt or 1
  144. net.isget = tSaveData.isget or 0
  145. net.weightLv = tSaveData.grade or 0
  146. net.name = tSaveData.name or ""
  147. net.grade = tSaveData.grade or 0
  148. net.jobDesc = tSaveData.desc or ""
  149. net.label = tSaveData.label or ""
  150. net.order = tSaveData.order or 0
  151. net.isGongMing = tSaveData.isGongMing or 0
  152. --是否发送图鉴信息
  153. net.general = tSaveData.general
  154. --宝石
  155. net.gemData = tSaveData.gemData
  156. end
  157. ---------------------------------------- 客户端请求 ------------------------------------
  158. function GetRecommendLineUp(human)
  159. local tData = tTuiJian.Sheet1
  160. -- table.print_lua_table(tData)
  161. local tMsgData = Msg.gc.GC_DRAWCARD_GET_RECOMMEND_LINEUP
  162. tMsgData.list[0] = 0
  163. local nAllLen, nNowSendLen = #tData, 0
  164. for _, v in ipairs(tData) do
  165. tMsgData.list[0] = tMsgData.list[0] + 1
  166. -- print("[GetRecommendLineUp] i = "..tMsgData.list[0])
  167. local tHeroData = tMsgData.list[tMsgData.list[0]]
  168. tHeroData.name = v.name
  169. tHeroData.data[0] = 0
  170. nNowSendLen = nNowSendLen + 1
  171. for i, tHero in ipairs(v.list) do
  172. tHeroData.data[0] = tHeroData.data[0] + 1
  173. local tHeroSimple = tHeroData.data[tHeroData.data[0]]
  174. local nHeroID = tHero[1]
  175. local nHeroStar = tHero[2]
  176. HeroGrid.makeHeroSimpleByID(tHeroSimple, nHeroID)
  177. tHeroSimple.star = nHeroStar
  178. -- print("[GetRecommendLineUp] 封装 英雄数据结束 nHeroID = "..nHeroID.." nHeroStar = "..nHeroStar.." i = "..i)
  179. end
  180. if tMsgData.list[0] >= nSendLen then
  181. tMsgData.bIsEnd = nNowSendLen == nAllLen and 1 or 0
  182. Msg.send(tMsgData, human.fd)
  183. tMsgData.list[0] = 0
  184. end
  185. -- table.print_lua_table(tHeroData)
  186. end
  187. if tMsgData.list[0] > 0 then
  188. tMsgData.bIsEnd = 1
  189. Msg.send(tMsgData, human.fd)
  190. end
  191. print("[GetRecommendLineUp] 发送成功 ")
  192. end
  193. function RecommendLineup_UpDate(human)
  194. if human then
  195. return
  196. end
  197. return
  198. -- if 5 >= human.db.lv then
  199. -- return
  200. -- end
  201. -- local combatHero,helpList = CombatPosLogic.getCombatHeros(human, CombatDefine.COMBAT_TYPE1)
  202. -- if not combatHero then
  203. -- return
  204. -- end
  205. -- local nNewPower = CombatPosLogic.getCombatHeroZDL(human, CombatDefine.COMBAT_TYPE1, true)
  206. -- local nIndex = RecommendLineup_GetIndex(nNewPower, human)
  207. -- if -1 >= nIndex then
  208. -- return
  209. -- end
  210. -- print("[RecommendLineup_UpDate] 获取到的下表 nIndex = "..nIndex)
  211. -- local tHeroData = {
  212. -- key = human.db._id,
  213. -- nPower = nNewPower,
  214. -- data = {},
  215. -- }
  216. -- local nLen = 1
  217. -- for _, v in pairs(combatHero) do
  218. -- local heroGrid = HeroLogic.getHeroGridByUuid(human, v)
  219. -- if heroGrid then
  220. -- tHeroData.data[nLen] = {
  221. -- general = {},
  222. -- gemData = {},
  223. -- relic = {},
  224. -- }
  225. -- HeroGrid.makeHeroSimple(tHeroData.data[nLen], heroGrid, heroGrid.bagIndex, human)
  226. -- nLen = nLen + 1
  227. -- end
  228. -- end
  229. -- for _,v in pairs(helpList) do
  230. -- local heroGrid = HeroLogic.getHeroGridByUuid(human, v)
  231. -- if heroGrid then
  232. -- tHeroData.data[nLen] = {
  233. -- general = {},
  234. -- gemData = {},
  235. -- }
  236. -- HeroGrid.makeHeroSimple(tHeroData.data[nLen], heroGrid, heroGrid.bagIndex, human)
  237. -- nLen = nLen + 1
  238. -- end
  239. -- end
  240. -- RecommendLineup_UpDateData(human, nIndex, tHeroData)
  241. end
  242. function RecommendLineup_GMClear()
  243. local tData = {}
  244. tRecommendLineupData = tData
  245. CommonDB.SetRecommendLineUp(tRecommendLineupData)
  246. print("[RecommendLineup_GMClear] 重置成功")
  247. end