UnlimitDrawLogic.lua 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. --------------------------------
  2. -- 文件名 : UnlimitDrawLogic.lua
  3. -- 文件说明 : 无限高抽
  4. -- 创建时间 : 2025/09/29
  5. -- 创建人 : FC
  6. --------------------------------
  7. local Util = require("common.Util")
  8. local Lang = require("common.Lang")
  9. local Msg = require("core.Msg")
  10. local Grid = require("bag.Grid")
  11. local HeroGrid = require("hero.HeroGrid")
  12. local HeroLogic = require("hero.HeroLogic")
  13. local BagLogic = require("bag.BagLogic")
  14. local Log = require("common.Log")
  15. local Broadcast = require("broadcast.Broadcast")
  16. local DrawCardExcel = require("excel.drawCard").drawCard
  17. local RandomLogic = require("common.RandomLogic")
  18. local HeroDefine = require("hero.HeroDefine")
  19. local HeroExcel = require("excel.hero").hero
  20. local HeroBook = require("hero.HeroBook")
  21. -- local DrawCardLogic = require("drawCard.DrawCardLogic")
  22. local UNLIMIT_CARD_ID = 12
  23. local UNLIMIT_CARD_LV = 25
  24. ----------------------------------------- 内部处理开始 -------------------------------------
  25. local function UnlimitDraw_CreateDB(human)
  26. human.db.UnlimitDraw = {
  27. nNowNum = 0,
  28. bLogin = false,
  29. bLv = false,
  30. nFirstLoginTime = 0,
  31. bNextLogin = false,
  32. tChacheHero = nil,
  33. }
  34. end
  35. local function UnlimitDraw_CheckDB(human)
  36. if not human.db.UnlimitDraw then
  37. UnlimitDraw_CreateDB(human)
  38. end
  39. end
  40. local function UnlimitDraw_GetNum(human)
  41. return human.db.UnlimitDraw.nNowNum
  42. end
  43. local function UnlimitDraw_SetNum(human, nValue)
  44. human.db.UnlimitDraw.nNowNum = human.db.UnlimitDraw.nNowNum + nValue
  45. if human.db.UnlimitDraw.nNowNum < 0 then
  46. human.db.UnlimitDraw.nNowNum = 0
  47. end
  48. end
  49. local function UnlimitDraw_GetLogin(human)
  50. return human.db.UnlimitDraw.bLogin
  51. end
  52. local function UnlimitDraw_SetLogin(human, bValue)
  53. human.db.UnlimitDraw.bLogin = bValue
  54. end
  55. local function UnlimitDraw_GetLoginTime(human)
  56. return human.db.UnlimitDraw.nFirstLoginTime
  57. end
  58. local function UnlimitDraw_SetLoginTime(human, nValue)
  59. human.db.UnlimitDraw.nFirstLoginTime = nValue
  60. end
  61. local function UnlimitDraw_GetLv(human)
  62. return human.db.UnlimitDraw.bLv
  63. end
  64. local function UnlimitDraw_SetLv(human, bValue)
  65. human.db.UnlimitDraw.bLv = bValue
  66. end
  67. local function UnlimitDraw_GetNextLogin(human)
  68. return human.db.UnlimitDraw.bNextLogin
  69. end
  70. local function UnlimitDraw_SetNextLogin(human, bValue)
  71. human.db.UnlimitDraw.bNextLogin = bValue
  72. end
  73. local function UnlimitDraw_SetCacheHero(human, tHeroInfo)
  74. human.db.UnlimitDraw.tChacheHero = tHeroInfo
  75. end
  76. local function UnlimitDraw_GetCacheHero(human)
  77. return human.db.UnlimitDraw.tChacheHero
  78. end
  79. local function UnlimitDraw_ClearCacheHero(human)
  80. human.db.UnlimitDraw.tChacheHero = nil
  81. end
  82. local function UnlimitDraw_randHeroID(human, config, randomIndex)
  83. local heroID = nil
  84. local rindex = RandomLogic.getRandom1(config.weight, nil, 2)
  85. local rconf = config.weight[rindex]
  86. local weightLv = rconf[1]
  87. heroID = heroID or HeroDefine.getRandHeroByWeightLv(weightLv)
  88. return heroID
  89. end
  90. ----------------------------------------- 客户端请求 -------------------------------------
  91. function UnlimitDrawLogic_Query(human)
  92. UnlimitDraw_CheckDB(human)
  93. local tMsgData = Msg.gc.GC_UNLIMITDRAW_QUERY
  94. tMsgData.nNowNum = UnlimitDraw_GetNum(human)
  95. tMsgData.tGetInfo[0] = 3
  96. tMsgData.tGetInfo[1] = UnlimitDraw_GetLogin(human) and 1 or 0
  97. tMsgData.tGetInfo[2] = UnlimitDraw_GetLv(human) and 1 or 0
  98. tMsgData.tGetInfo[3] = UnlimitDraw_GetNextLogin(human) and 1 or 0
  99. Msg.send(tMsgData, human.fd)
  100. end
  101. function UnlimitDrawLogic_Do(human)
  102. local nNowNum = UnlimitDraw_GetNum(human)
  103. if 0 >= nNowNum then
  104. return
  105. end
  106. local nDoNum = 10
  107. local config = DrawCardExcel[UNLIMIT_CARD_ID]
  108. if HeroLogic.getEmptyCnt(human) < nDoNum then
  109. return Broadcast.sendErr(human, Lang.HERO_BAG_FULL)
  110. end
  111. UnlimitDraw_ClearCacheHero(human)
  112. local heroLen = 0
  113. local heroList = {}
  114. local heroNewList = {}
  115. local heroIndexList = {}
  116. local fenjielist = {}
  117. local heroIDs = nil
  118. local randomMin = math.random(1, nDoNum)
  119. for i = 1, nDoNum, 1 do
  120. local nHeroID = UnlimitDraw_randHeroID(human, config, randomMin)
  121. if nHeroID then
  122. local heroConfig = HeroExcel[nHeroID]
  123. local star = heroConfig.star
  124. local name = heroConfig.name
  125. local grade = heroConfig.grade
  126. local isNew = not HeroBook.isGet(human, heroConfig.id, heroConfig.star)
  127. -- local heroIndex, fjlist = HeroLogic.addHero(human, nHeroID, nil, 1, "draw_card")
  128. heroLen = heroLen + 1
  129. heroList[heroLen] = nHeroID
  130. heroNewList[heroLen] = isNew
  131. if not heroIDs then
  132. heroIDs = nHeroID
  133. else
  134. heroIDs = heroIDs .. "|" .. nHeroID
  135. end
  136. else
  137. print("[UnlimitDrawLogic_Do] 生成英雄失败直接返回")
  138. return
  139. end
  140. end
  141. local tMsgData = Msg.gc.GC_UNLIMITDRAW_DO
  142. tMsgData.tHeros[0] = nDoNum
  143. for i = 1, heroLen do
  144. local heroID = heroList[i]
  145. local isNew = heroNewList and heroNewList[i]
  146. -- local index = heroIndexList and heroIndexList[i]
  147. HeroGrid.makeHeroNice(tMsgData.tHeros[i], heroID, 1, isNew)
  148. end
  149. UnlimitDraw_SetCacheHero(human, heroList)
  150. Msg.send(tMsgData, human.fd)
  151. end
  152. function UnlimitDrawLogic_Abandon(human)
  153. UnlimitDraw_ClearCacheHero(human)
  154. end
  155. function UnlimitDrawLogic_Get(human)
  156. local tHeroInfo = UnlimitDraw_GetCacheHero(human)
  157. if not tHeroInfo then
  158. return
  159. end
  160. local heroIndexList = {}
  161. local fenjielist = {}
  162. for _, nID in ipairs(tHeroInfo) do
  163. local heroIndex, fjlist = HeroLogic.addHero(human, nID,nil, 1, "UnlimitDrawCard")
  164. if fjlist and type(fjlist) == "table" then
  165. for fjItemID, fjItemCnt in pairs(fjlist) do
  166. fenjielist[fjItemID] = (fenjielist[fjItemID] or 0) + fjItemCnt
  167. end
  168. end
  169. table.insert(heroIndexList, heroIndex)
  170. end
  171. if nil ~= _G.next(fenjielist) then
  172. local tItem = {}
  173. for key, value in pairs(fenjielist) do
  174. table.insert(tItem, {key, value})
  175. end
  176. BagLogic.sendItemGetList(human, tItem, "UnlimitDrawCard")
  177. end
  178. UnlimitDraw_SetNum(human, -1)
  179. UnlimitDrawLogic_Query(human)
  180. end
  181. function onLogin(human)
  182. UnlimitDraw_CheckDB(human)
  183. local bLogin = UnlimitDraw_GetLogin(human)
  184. if false == bLogin then
  185. UnlimitDraw_SetLogin(human, true)
  186. UnlimitDraw_SetLoginTime(human, os.time())
  187. UnlimitDraw_SetNum(human, 1)
  188. else
  189. local nLastTime = UnlimitDraw_GetLoginTime(human)
  190. local bNextLogin = UnlimitDraw_GetNextLogin(human)
  191. if not Util.isSameDay(nLastTime) and false == bNextLogin then
  192. UnlimitDraw_SetNextLogin(human, true)
  193. UnlimitDraw_SetNum(human, 1)
  194. end
  195. end
  196. local bLv = UnlimitDraw_GetLv(human)
  197. if false == bLv and human.db.lv >= UNLIMIT_CARD_LV then
  198. UnlimitDraw_SetLv(human, true)
  199. UnlimitDraw_SetNum(human, 1)
  200. end
  201. end
  202. function onLvUp(human, nNewLv)
  203. local bLv = UnlimitDraw_GetLv(human)
  204. if false == bLv and nNewLv >= UNLIMIT_CARD_LV then
  205. UnlimitDraw_SetLv(human, true)
  206. UnlimitDraw_SetNum(human, 1)
  207. end
  208. end
  209. function ModuleisOpen(human)
  210. UnlimitDraw_CheckDB(human)
  211. if true == UnlimitDraw_GetLogin(human) and UnlimitDraw_GetLv(human) == true
  212. and true == UnlimitDraw_GetNextLogin(human) then
  213. if UnlimitDraw_GetNum(human) > 0 then
  214. return true
  215. else
  216. return false
  217. end
  218. end
  219. return true
  220. end
  221. function isDot(human)
  222. UnlimitDraw_CheckDB(human)
  223. if true == ModuleisOpen(human) then
  224. return UnlimitDraw_GetNum(human) > 0 and true or false
  225. end
  226. return false
  227. end