TurntableRaffle.lua 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  1. --- 轮盘抽奖
  2. --- Generated by EmmyLua(https://github.com/EmmyLua)
  3. --- Created by zhoutao.
  4. --- DateTime: 2024/12/13 16:09
  5. TurntableRaffle = {}
  6. local this = {}
  7. this.freeCanUseRedId = 105
  8. this.canReceiveRewardRedId = 106
  9. --- 获取轮盘抽奖面板信息
  10. --- @param actor table 玩家对象
  11. --- @param mainGroup number 主分组
  12. --- @return table 轮盘抽奖面板信息
  13. function TurntableRaffle.getPanelInfo(actor, mainGroup)
  14. local turntableRaffleInfo = getplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO)
  15. local tableValue = ConfigDataManager.getTable("cfg_turntable", "mainGroup", mainGroup)
  16. local res = {}
  17. if not table.isNullOrEmpty(tableValue) then
  18. for _, v in pairs(tableValue) do
  19. if table.isNullOrEmpty(turntableRaffleInfo) or not table.hasKey(turntableRaffleInfo, tonumber(v["id"])) then
  20. turntableRaffleInfo = {
  21. [tonumber(v["id"])] = {
  22. ["skipAnimation"] = 0,
  23. ["canFree"] = true,
  24. ["freeTime"] = 0,
  25. ["received"] = {},
  26. ["total"] = 0,
  27. }
  28. }
  29. end
  30. res[tonumber(v["id"])] = turntableRaffleInfo[tonumber(v["id"])]
  31. end
  32. end
  33. setplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO, turntableRaffleInfo)
  34. return res
  35. end
  36. --- 改变是否跳过动画
  37. --- @param actor table 玩家对象
  38. --- @param msgData table 消息数据
  39. function TurntableRaffle.changeSkipAnimation(actor, msgData)
  40. local id = msgData["id"]
  41. local skipAnimation = msgData["skipAnimation"]
  42. local turntableRaffleInfo = getplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO)
  43. local raffleInfo = turntableRaffleInfo[tonumber(id)]
  44. raffleInfo["skipAnimation"] = tonumber(skipAnimation)
  45. setplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO, turntableRaffleInfo)
  46. end
  47. --- 抽奖
  48. --- @param actor table 玩家对象
  49. --- @param msgData table 消息数据
  50. function TurntableRaffle.drawing(actor, msgData)
  51. -- 抽奖id
  52. local id = msgData["id"]
  53. -- 抽奖次数
  54. local times = msgData["times"]
  55. -- 是否免费抽奖
  56. local isFree = msgData["isFree"]
  57. -- 抽奖id
  58. local tableValue = ConfigDataManager.getTable("cfg_turntable", "id", id)
  59. if table.isNullOrEmpty(tableValue) then
  60. error("cfg_turntable is null id:", id)
  61. return
  62. end
  63. local rewardGroup = tableValue[1]["reward"]
  64. local turntableRaffleInfo = getplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO)
  65. if table.isNullOrEmpty(turntableRaffleInfo) then
  66. gameDebug.print("turntableRaffleInfo is null actor:", getbaseinfo(actor, "rolename"))
  67. return
  68. end
  69. local raffleInfo = turntableRaffleInfo[tonumber(id)]
  70. if table.isNullOrEmpty(raffleInfo) then
  71. gameDebug.print("turntableRaffleInfo is null actor:", getbaseinfo(actor, "rolename"))
  72. return
  73. end
  74. local costMap = {}
  75. -- 免费抽奖逻辑
  76. if isFree then
  77. -- 判断是否可以免费抽奖
  78. local canFree = raffleInfo["canFree"]
  79. local freeTime = raffleInfo["freeTime"]
  80. if not canFree then
  81. -- 免费时间未到达,未开启免费抽奖,响应客户端下一次免费抽奖开启时间
  82. sendluamsg(actor, LuaMessageIdToClient.RES_TURNTABLE_RAFFLE_FREE_TIME, {
  83. isFree = canFree,
  84. nextFreeTime = freeTime
  85. })
  86. return
  87. end
  88. raffleInfo["canFree"] = false
  89. local now = getbaseinfo(actor, "now")
  90. if freeTime == 0 or freeTime < now then
  91. freeTime = now
  92. end
  93. raffleInfo["freeTime"] = freeTime + tableValue[1]["free"] * TimeUnit.MINUTE * TimeUnit.MILLISECOND
  94. setplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO, turntableRaffleInfo)
  95. this.refreshFreeTime(actor, id)
  96. RedPoint.sendOneRedPoint(actor, this.freeCanUseRedId, false)
  97. else
  98. -- 判断消耗是否充足
  99. if times > 1 then
  100. local manyCost = tableValue[1]["manycost"]
  101. local costSplit = string.split(manyCost, "#")
  102. costMap = { [costSplit[2]] = costSplit[3] }
  103. else
  104. local oneCost = tableValue[1]["onecost"]
  105. local costSplit = string.split(oneCost, "#")
  106. costMap = { [costSplit[1]] = costSplit[2] }
  107. end
  108. end
  109. if not table.isNullOrEmpty(costMap) then
  110. for cfgId, count in pairs(costMap) do
  111. local result = removeitemfrombag(actor, cfgId, count, 1, 9999, ItemAction.TURNTABLE_RAFFLE_COST)
  112. if not result then
  113. noticeTip.noticeinfo(actor, StringIdConst.TEXT379)
  114. return
  115. end
  116. end
  117. end
  118. turntableRaffleInfo = getplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO)
  119. raffleInfo = turntableRaffleInfo[tonumber(id)]
  120. -- 可抽取次数处理
  121. local rewardInfo = getplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_REWARD)
  122. if table.isNullOrEmpty(rewardInfo) then
  123. rewardInfo = {}
  124. end
  125. local rewardInfoById = rewardInfo[id]
  126. if table.isNullOrEmpty(rewardInfoById) then
  127. rewardInfoById = {}
  128. end
  129. -- 循环保底处理
  130. local rewardCount = getplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_REWARD_COUNT)
  131. if table.isNullOrEmpty(rewardCount) then
  132. rewardCount = {}
  133. end
  134. local rewardCountInfo = rewardCount[id]
  135. if table.isNullOrEmpty(rewardCountInfo) then
  136. rewardCountInfo = {}
  137. end
  138. -- 获取奖励列表
  139. local rewardTable = this.getReward(actor, rewardGroup, times, raffleInfo, rewardInfoById, rewardCountInfo)
  140. rewardCount[id] = rewardCountInfo
  141. setplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_REWARD_COUNT, rewardCount)
  142. local rewards = {}
  143. local rewardMap = {}
  144. local career = getbaseinfo(actor, "getbasecareer")
  145. for _, v in pairs(rewardTable) do
  146. local rewardId = tonumber(v["id"])
  147. table.insert(rewards, {
  148. [rewardId] = rewardInfoById[rewardId]
  149. })
  150. local item = v["item"]
  151. local itemCfgId
  152. if not string.isNullOrEmpty(item) then
  153. local data = string.split(item, "|")
  154. for _, temp in ipairs(data) do
  155. local data2 = string.split(temp, "#")
  156. local cfgCareer = tonumber(data2[1])
  157. if cfgCareer == 0 or cfgCareer == tonumber(career) then
  158. itemCfgId = tonumber(data2[2])
  159. rewardMap[itemCfgId] = tonumber(rewardMap[itemCfgId] or 0) + tonumber(data2[3])
  160. end
  161. end
  162. end
  163. local type = v["type"]
  164. if not string.isNullOrEmpty(type) and tonumber(type) == 1 then
  165. local itemName = ConfigDataManager.getTableValue("cfg_item", "name", "id", itemCfgId)
  166. noticeTip.noticeinfo(actor, StringIdConst.TEXT601, getbaseinfo(actor, "rolename"), itemName)
  167. end
  168. end
  169. -- 保存奖励数量信息
  170. rewardInfo[id] = rewardInfoById
  171. setplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_REWARD, rewardInfo)
  172. -- 将奖励添加到背包中
  173. additemmaptobag(actor, rewardMap, 0, 9999, ItemAction.TURNTABLE_RAFFLE_REWARDS)
  174. -- 通知客户端奖励id列表
  175. sendluamsg(actor, LuaMessageIdToClient.RES_TURNTABLE_RAFFLE_REWARD_IDS, rewards)
  176. setplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO, turntableRaffleInfo)
  177. OperationalActivities.openSubActive(actor, { ["subType"] = ACTIVE_TYPE.PRIZE_DRAW })
  178. -- 红点
  179. local ids = this.checkCanReceiveAccumulateReward(raffleInfo)
  180. if not table.isNullOrEmpty(ids) then
  181. RedPoint.sendOneRedPoint(actor, this.canReceiveRewardRedId, ids)
  182. end
  183. end
  184. --- 领取转盘抽奖累积奖励
  185. --- @param actor table 玩家对象
  186. --- @param msgData table 消息数据
  187. function TurntableRaffle.receiveAccumulateReward(actor, msgData)
  188. local id = msgData["id"]
  189. local turntableExtId = msgData["turntableExtId"]
  190. local turntableRaffleInfo = getplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO)
  191. if table.isNullOrEmpty(turntableRaffleInfo) then
  192. gameDebug.print("turntableRaffleInfo is null")
  193. return
  194. end
  195. local raffleInfo = turntableRaffleInfo[id]
  196. local received = raffleInfo["received"]
  197. local reward = this.checkCanReceiveAccumulateReward(raffleInfo, turntableExtId)
  198. if not string.isNullOrEmpty(reward) then
  199. table.insert(received, turntableExtId)
  200. setplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO, turntableRaffleInfo)
  201. Bag.sendRewards4CareerString(actor, reward, ItemAction.TURNTABLE_RAFFLE_ACCUMULATE_REWARDS)
  202. OperationalActivities.openSubActive(actor, { ["subType"] = ACTIVE_TYPE.PRIZE_DRAW })
  203. local ids = this.checkCanReceiveAccumulateReward(raffleInfo)
  204. if not table.isNullOrEmpty(ids) then
  205. RedPoint.sendOneRedPoint(actor, this.canReceiveRewardRedId, ids)
  206. end
  207. end
  208. end
  209. --- 获取转盘抽奖奖励数量信息
  210. --- @param actor table 玩家对象
  211. --- @param msgData table 消息数据
  212. function TurntableRaffle.getRewardCountInfo(actor, msgData)
  213. local id = msgData["id"]
  214. local rewardInfo = getplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_REWARD)
  215. if table.isNullOrEmpty(rewardInfo) then
  216. rewardInfo = {}
  217. end
  218. local rewardInfoById = rewardInfo[id]
  219. sendluamsg(actor, LuaMessageIdToClient.RES_TURNTABLE_RAFFLE_REWARD_COUNT_INFO, rewardInfoById)
  220. end
  221. --- 发送未领取的抽奖奖励
  222. --- @param mainGroup number 主活动组
  223. function TurntableRaffle.sendUnReceiveRewards(mainGroup)
  224. local tableValue = ConfigDataManager.getTable("cfg_turntable", "mainGroup", mainGroup)
  225. if not table.isNullOrEmpty(tableValue) then
  226. local allRole = getallrolesummaryinfos()
  227. for _, v in pairs(allRole) do
  228. local actor = v["actor"]
  229. local raffleInfo = getplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO)
  230. local rewardMap = {}
  231. for _, value in pairs(tableValue) do
  232. local id = tonumber(value["id"])
  233. if not table.isNullOrEmpty(raffleInfo) then
  234. local info = raffleInfo[id]
  235. if not table.isNullOrEmpty(info) then
  236. local received = info["received"]
  237. if table.isNullOrEmpty(received) then
  238. received = {}
  239. end
  240. local accumulateReward = ConfigDataManager.getTable("cfg_turntable_extra", "relevance", id)
  241. for _, reward in pairs(accumulateReward) do
  242. local turntableExtId = tonumber(reward["id"])
  243. local career = getbaseinfo(actor, "getbasecareer")
  244. if not table.contains(received, turntableExtId) and this.checkCanReceiveAccumulateReward(info, turntableExtId) then
  245. rewardMap = string.putIntIntMap4Career(rewardMap, career, reward["reward"], "#", "|")
  246. end
  247. end
  248. end
  249. end
  250. end
  251. -- 合并奖励邮件发放
  252. if not table.isNullOrEmpty(rewardMap) then
  253. sendconfigmailbyrid(actor, getbaseinfo(actor, "rid"), MailConfig.TURNTABLE_RAFFLE_ACCUMULATE_REWARDS, rewardMap)
  254. end
  255. -- 红点
  256. RedPoint.sendOneRedPoint(actor, this.canReceiveRewardRedId, {})
  257. setplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO, {})
  258. end
  259. end
  260. end
  261. --- 登录发送红点信息
  262. --- @param actor table 玩家对象
  263. function TurntableRaffle.login(actor)
  264. -- 免费抽奖时间红点
  265. this.refreshFreeTime(actor)
  266. -- 可领取累积奖励红点
  267. local currentActive = getsysvar(actor, CURRENT_ACTIVE)
  268. if not table.isNullOrEmpty(currentActive) then
  269. local mainGroup = currentActive.mainActive.mainGroup
  270. local tableValue = ConfigDataManager.getTable("cfg_turntable", "mainGroup", mainGroup)
  271. if table.isNullOrEmpty(tableValue) then
  272. return
  273. end
  274. local turntableRaffleInfo = getplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO)
  275. if not table.isNullOrEmpty(turntableRaffleInfo) then
  276. for _, v in pairs(tableValue) do
  277. local raffleInfo = turntableRaffleInfo[tonumber(v["id"])]
  278. local ids = this.checkCanReceiveAccumulateReward(raffleInfo)
  279. if not table.isNullOrEmpty(ids) then
  280. RedPoint.sendOneRedPoint(actor, this.canReceiveRewardRedId, ids)
  281. end
  282. end
  283. end
  284. end
  285. end
  286. --- 刷新免费抽奖时间
  287. --- @param actor table 玩家对象
  288. --- @param id number 抽奖id
  289. function this.refreshFreeTime(actor, id)
  290. if string.isNullOrEmpty(id) then
  291. local currentActive = getsysvar(actor, CURRENT_ACTIVE)
  292. if not table.isNullOrEmpty(currentActive) then
  293. local mainGroup = currentActive.mainActive.mainGroup
  294. local tableValue = ConfigDataManager.getTable("cfg_turntable", "mainGroup", mainGroup)
  295. if table.isNullOrEmpty(tableValue) then
  296. return
  297. end
  298. for _, v in pairs(tableValue) do
  299. this.refreshHandle(actor, v["id"])
  300. end
  301. end
  302. else
  303. this.refreshHandle(actor, id)
  304. end
  305. end
  306. --- 刷新免费抽奖时间
  307. --- @param actor table 玩家对象
  308. function refreshturntablerafflefreetime(actor)
  309. local logText = string.format("turntableRaffle refreshTurntableRaffleFreeTime actor:%s now:%s", getbaseinfo(actor, "rolename"), TimeUtil.timeFormat(getbaseinfo(actor, "nowsec")))
  310. gameDebug.print(logText)
  311. local turntableRaffle = getplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO)
  312. if table.isNullOrEmpty(turntableRaffle) then
  313. gameDebug.print("turntableRaffle is null actor:", getbaseinfo(actor, "rolename"))
  314. return
  315. end
  316. local currentActive = getsysvar(actor, CURRENT_ACTIVE)
  317. if not table.isNullOrEmpty(currentActive) then
  318. local mainGroup = currentActive.mainActive.mainGroup
  319. local tableValue = ConfigDataManager.getTable("cfg_turntable", "mainGroup", mainGroup)
  320. if table.isNullOrEmpty(tableValue) then
  321. return
  322. end
  323. for _, v in pairs(tableValue) do
  324. local raffleInfo = turntableRaffle[tonumber(v["id"])]
  325. if not table.isNullOrEmpty(raffleInfo) then
  326. raffleInfo["canFree"] = true
  327. setplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO, turntableRaffle)
  328. sendluamsg(actor, LuaMessageIdToClient.RES_TURNTABLE_RAFFLE_FREE_TIME, {
  329. isFree = true,
  330. nextFreeTime = raffleInfo["freeTime"]
  331. })
  332. RedPoint.sendOneRedPoint(actor, this.freeCanUseRedId, true)
  333. end
  334. end
  335. end
  336. end
  337. --- 获取奖励
  338. --- @param actor table 玩家对象
  339. --- @param rewardGroup number 奖励组
  340. --- @param times number 抽奖次数
  341. --- @param raffleInfo table 抽奖次数信息
  342. --- @param rewardCountInfo table 抽奖奖励次数信息,可抽取次数处理
  343. --- @param rewardCount number 抽奖奖励次数,循环保底处理
  344. function this.getReward(actor, rewardGroup, times, raffleInfo, rewardCountInfo, rewardCount)
  345. local total = raffleInfo["total"] and raffleInfo["total"] or 0
  346. local rewardTable = ConfigDataManager.getTable("cfg_turntable_reward", "group", rewardGroup)
  347. if table.isNullOrEmpty(rewardTable) then
  348. error("cfg_turntable_reward is null group:", rewardGroup)
  349. return
  350. end
  351. -- 构建权重map
  352. local weightMap = {}
  353. local resReward = {}
  354. for _, reward in ipairs(rewardTable) do
  355. -- 初始化所有奖励的抽取次数
  356. if not string.isNullOrEmpty(reward["guarantees"]) and not table.hasKey(rewardCount, tonumber(reward["id"])) then
  357. rewardCount[tonumber(reward["id"])] = {
  358. ["count"] = 0,
  359. ["guarantees"] = tonumber(reward["guarantees"]),
  360. }
  361. end
  362. if not table.hasKey(rewardCountInfo, tonumber(reward["id"])) then
  363. rewardCountInfo[tonumber(reward["id"])] = 0
  364. end
  365. if not string.isNullOrEmpty(reward["condition"]) then
  366. local conditionSplit = string.split(reward["condition"], "#")
  367. if ConditionHandler:triggerCheck(conditionSplit[1], actor, conditionSplit[2]) then
  368. weightMap[reward] = tonumber(reward["weight"])
  369. end
  370. else
  371. weightMap[reward] = tonumber(reward["weight"])
  372. end
  373. end
  374. for i = 1, times do
  375. local reward = randombyweight(weightMap)
  376. local num = reward[1]["num"]
  377. local rewardId = tonumber(reward[1]["id"])
  378. if not string.isNullOrEmpty(num) and tonumber(num) ~= 999999 and not table.isNullOrEmpty(rewardCountInfo) then
  379. while tonumber(num) <= rewardCountInfo[rewardId] do
  380. reward = randombyweight(weightMap)
  381. rewardId = tonumber(reward[1]["id"])
  382. num = reward[1]["num"]
  383. end
  384. end
  385. local limit = reward[1]["limit"]
  386. if not string.isNullOrEmpty(limit) then
  387. while tonumber(limit) > total do
  388. reward = randombyweight(weightMap)
  389. rewardId = tonumber(reward[1]["id"])
  390. limit = string.isNullOrEmpty(reward[1]["limit"]) and 0 or tonumber(reward[1]["limit"])
  391. end
  392. end
  393. -- 判断次数是否达到保底次数,如果达到保底次数直接添加保底的道具到奖励列表中
  394. for id, v in pairs(rewardCount) do
  395. -- 此前出现该奖励,次数重置
  396. if rewardId == id then
  397. v["count"] = 0
  398. end
  399. v["count"] = v["count"] + 1
  400. if v["count"] == v["guarantees"] then
  401. local tableValue = ConfigDataManager.getTable("cfg_turntable_reward", "id", id)
  402. num = tonumber(tableValue[1]["num"])
  403. if not string.isNullOrEmpty(num) and tonumber(num) ~= 999999 and not table.isNullOrEmpty(rewardCountInfo) and num > rewardCountInfo[id] then
  404. reward = tableValue
  405. rewardId = id
  406. v["count"] = 0
  407. end
  408. end
  409. end
  410. table.insert(resReward, reward[1])
  411. total = total + 1
  412. rewardCountInfo[rewardId] = rewardCountInfo[rewardId] + 1
  413. end
  414. raffleInfo["total"] = total
  415. return resReward
  416. end
  417. --- 检查是否可以领取转盘抽奖累积奖励
  418. --- @param raffleInfo table 抽奖次数信息
  419. --- @param turntableExtId number 奖励id
  420. function this.checkCanReceiveAccumulateReward(raffleInfo, turntableExtId)
  421. if string.isNullOrEmpty(turntableExtId) then
  422. local resIds = {}
  423. local turntableExtra = ConfigDataManager.getTable("cfg_turntable_extra")
  424. if table.isNullOrEmpty(turntableExtra) then
  425. error("cfg_turntable_extra is null")
  426. return resIds
  427. end
  428. local total = raffleInfo["total"]
  429. local received = raffleInfo["received"]
  430. if table.isNullOrEmpty(received) then
  431. received = {}
  432. end
  433. for _, v in pairs(turntableExtra) do
  434. local num = tonumber(v["num"])
  435. local id = v["id"]
  436. if not table.contains(received, id) and num <= total then
  437. table.insert(resIds, id)
  438. end
  439. end
  440. return resIds
  441. else
  442. local turntableExtra = ConfigDataManager.getTable("cfg_turntable_extra", "id", turntableExtId)
  443. if table.isNullOrEmpty(turntableExtra) then
  444. error("cfg_turntable_extra is null id:", turntableExtId)
  445. return nil
  446. end
  447. local num = tonumber(turntableExtra[1]["num"])
  448. local total = raffleInfo["total"]
  449. if not total then
  450. return nil
  451. end
  452. local received = raffleInfo["received"]
  453. if not table.isNullOrEmpty(received) then
  454. if table.contains(received, turntableExtId) then
  455. gameDebug.print("turntableRaffle already received id:", turntableExtId)
  456. return nil
  457. end
  458. end
  459. if num <= total then
  460. return turntableExtra[1]["reward"]
  461. else
  462. return nil
  463. end
  464. end
  465. end
  466. --- 刷新免费抽奖处理
  467. --- @param actor table 玩家对象
  468. --- @param id number 抽奖id
  469. function this.refreshHandle(actor, id)
  470. local turntableRaffle = getplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO)
  471. if table.isNullOrEmpty(turntableRaffle) then
  472. gameDebug.print("turntableRaffle is null actor:", getbaseinfo(actor, "rolename"))
  473. return
  474. end
  475. local raffleInfo = turntableRaffle[tonumber(id)]
  476. if not table.isNullOrEmpty(raffleInfo) then
  477. local freeTime = raffleInfo["freeTime"]
  478. local now = getbaseinfo(actor, "now")
  479. if freeTime > now then
  480. raffleInfo["canFree"] = false
  481. RedPoint.sendOneRedPoint(actor, this.freeCanUseRedId, false)
  482. setplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO, turntableRaffle)
  483. intervalcalldelay(actor, 1000, freeTime - now, 1, "refreshturntablerafflefreetime")
  484. else
  485. if not raffleInfo["canFree"] then
  486. local free = ConfigDataManager.getTableValue("cfg_turntable", "free", "id", id)
  487. if string.isNullOrEmpty(free) then
  488. error("cfg_turntable free is null id:", id)
  489. return
  490. end
  491. local diff = free * TimeUnit.MINUTE * TimeUnit.MILLISECOND
  492. raffleInfo["freeTime"] = now + diff
  493. raffleInfo["canFree"] = true
  494. RedPoint.sendOneRedPoint(actor, this.freeCanUseRedId, true)
  495. setplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO, turntableRaffle)
  496. intervalcalldelay(actor, 1000, diff, 1, "refreshturntablerafflefreetime")
  497. end
  498. end
  499. setplaydef(actor, PlayerDefKey.turntableRaffle.RAFFLE_INFO, turntableRaffle)
  500. end
  501. end
  502. LoginEventListerTable:eventLister("0", "轮盘抽奖", TurntableRaffle.login)