FaceShootPreview.lua 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. -- 拍脸预告
  2. FaceShootPreview = {}
  3. -- @description 玩家登录
  4. -- @param 玩家对象
  5. -- @return
  6. function FaceShootPreview.RoleLogin(actor)
  7. local level = getbaseinfo(actor, "level")
  8. local severOpenDays = getbaseinfo(actor, "serveropendays")
  9. --玩家今日不提示的预告变量
  10. local previewVar = getplaydef(actor, PlayerDefKey.FACE_SHOOT_PREVIEW_NO_TIPS)
  11. if type(previewVar) ~= "table" then
  12. previewVar = {}
  13. end
  14. local nowMillis = getbaseinfo("now")
  15. local tables = ConfigDataManager.getList("cfg_system_foreshow")
  16. if type(tables) ~= "table" then
  17. return
  18. end
  19. local previewList = {}
  20. for _, oneData in pairs(tables) do
  21. local cfgId = tonumber(oneData["id"])
  22. local needLevel = tonumber(oneData["needlevel"]) or 0
  23. local offLevel = tonumber(oneData["offlevel"]) or 0
  24. local needDay = tonumber(oneData["needday"]) or 0
  25. local endTime = tonumber(oneData["endtime"]) or 0
  26. if needDay > 0 and needLevel > 0 and cfgId then
  27. if level >= needLevel and needDay <= severOpenDays and severOpenDays < endTime and (offLevel == 0 or level < offLevel) then
  28. local taskStr = oneData["needtask"]
  29. local completedConfigs = getplaydef(actor, PlayerDefKey.FACE_SHOOT_PREVIEW_COMPLETED)
  30. if type(completedConfigs) ~= "table" then
  31. completedConfigs = {}
  32. end
  33. local lastTime = previewVar[cfgId]
  34. if (taskStr ~= "" and table.contains(completedConfigs, cfgId)) or taskStr == "" then
  35. if lastTime == nil or (datediff(lastTime, nowMillis, "day") >= 1) then
  36. table.insert(previewList, cfgId)
  37. if lastTime then
  38. previewVar[cfgId] = nil
  39. end
  40. end
  41. end
  42. end
  43. end
  44. end
  45. --持久化变量
  46. setplaydef(actor, PlayerDefKey.FACE_SHOOT_PREVIEW_NO_TIPS, previewVar)
  47. if table.count(previewList) > 0 then
  48. --发送响应
  49. sendluamsg(actor, LuaMessageIdToClient.RES_FSPREVIEW_LIST, previewList)
  50. end
  51. end
  52. -- @description 取消今日提示
  53. -- @param 玩家对象;cfg_system_foreshow表id
  54. -- @return
  55. function FaceShootPreview.ReqCancelTodayPreview(actor, cfgId)
  56. cfgId = tonumber(cfgId)
  57. if cfgId == nil then
  58. return
  59. end
  60. local previewVar = getplaydef(actor, PlayerDefKey.FACE_SHOOT_PREVIEW_NO_TIPS)
  61. if type(previewVar) ~= "table" then
  62. return
  63. end
  64. local nowMillis = getbaseinfo("now")
  65. previewVar[cfgId] = nowMillis
  66. setplaydef(actor, PlayerDefKey.FACE_SHOOT_PREVIEW_NO_TIPS, previewVar)
  67. end
  68. -- @description 完成指定任务发送拍脸
  69. -- @param 玩家对象;任务id
  70. -- @return
  71. function FaceShootPreview.TaskCompleted(actor, taskId)
  72. local cache = getsysvar(SystemVarConst.FACE_SHOOT_PREVIEW_TASK_CACHE)
  73. if type(cache) ~= "table" then
  74. return
  75. end
  76. taskId = tonumber(taskId)
  77. if taskId == nil then
  78. return
  79. end
  80. local configId = cache[taskId]
  81. if configId == nil then
  82. return
  83. end
  84. local level = getbaseinfo(actor, "level")
  85. local severOpenDays = getbaseinfo(actor, "serveropendays")
  86. local previewVar = getplaydef(actor, PlayerDefKey.FACE_SHOOT_PREVIEW_NO_TIPS)
  87. if type(previewVar) ~= "table" then
  88. previewVar = {}
  89. end
  90. local nowMillis = getbaseinfo("now")
  91. local oneData = ConfigDataManager.getById("cfg_system_foreshow", configId)
  92. if oneData == nil then
  93. return
  94. end
  95. local needLevel = tonumber(oneData["needlevel"]) == nil and 0 or tonumber(oneData["needlevel"])
  96. local offLevel = tonumber(oneData["offlevel"]) == nil and 0 or tonumber(oneData["offlevel"])
  97. local needDay = tonumber(oneData["needday"]) == nil and 0 or tonumber(oneData["needday"])
  98. local endTime = tonumber(oneData["endtime"]) == nil and 0 or tonumber(oneData["endtime"])
  99. -- 全部得大于0
  100. if needDay <= 0 or needLevel <= 0 then
  101. return
  102. end
  103. -- 判断等级和开服天数
  104. if level < needLevel or (offLevel ~= 0 and level >= offLevel) or needDay > severOpenDays or severOpenDays >= endTime then
  105. return
  106. end
  107. -- 获取今日不再提示的时间
  108. local lastTime = previewVar[configId]
  109. if lastTime ~= nil then
  110. -- 勾选了今日不再提示
  111. local dayDiff = datediff(lastTime, nowMillis, "day")
  112. -- 如果时间和当前不是同一天
  113. if dayDiff >= 1 then
  114. -- 取消勾选
  115. previewVar[configId] = nil
  116. --持久化变量
  117. setplaydef(actor, PlayerDefKey.FACE_SHOOT_PREVIEW_NO_TIPS, previewVar)
  118. else
  119. return
  120. end
  121. end
  122. --todo 存储任务信息,登录的时候用
  123. local completedTask = getplaydef(actor, PlayerDefKey.FACE_SHOOT_PREVIEW_COMPLETED)
  124. if type(completedTask) ~= "table" then
  125. completedTask = {}
  126. end
  127. if not table.contains(completedTask, configId) then
  128. table.insert(completedTask, configId)
  129. setplaydef(actor, PlayerDefKey.FACE_SHOOT_PREVIEW_COMPLETED, completedTask)
  130. end
  131. --发送响应
  132. sendluamsg(actor, LuaMessageIdToClient.RES_FSPREVIEW_LIST, { configId })
  133. end
  134. -- @description 做个缓存,优化性能
  135. function FaceShootPreview.CacheConfig()
  136. local tables = ConfigDataManager.getList("cfg_system_foreshow")
  137. if type(tables) ~= "table" then
  138. return
  139. end
  140. local cache = {}
  141. for _, oneData in pairs(tables) do
  142. local cfgId = tonumber(oneData["id"])
  143. local taskStr = oneData["needtask"]
  144. if taskStr ~= "" then
  145. local taskList = string.split(taskStr, "#")
  146. for _, taskId in ipairs(taskList) do
  147. cache[tonumber(taskId)] = cfgId
  148. end
  149. end
  150. end
  151. setsysvar(SystemVarConst.FACE_SHOOT_PREVIEW_TASK_CACHE, cache)
  152. end
  153. -- 注册登录事件
  154. LoginEventListerTable:eventLister("0", "拍脸预告", FaceShootPreview.RoleLogin, 9999)