WeekTurntableRaffle.lua 23 KB

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