UnlimitDrawLogic.lua 8.9 KB

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