TurntableRaffle.lua 22 KB

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