WeekTurntableRaffle.lua 22 KB

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