MergeServerLogin.lua 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. --------------------------------
  2. -- 文件名 : MergeServerLogin.lua
  3. -- 文件说明 : 合服活动-登录豪礼
  4. -- 创建时间 : 2025/07/29
  5. -- 创建人 : FC
  6. --------------------------------
  7. local Util = require("common.Util")
  8. local Msg = require("core.Msg")
  9. local Log = require("common.Log")
  10. local YunYingLogic = require("yunying.YunYingLogic")
  11. local CommonDB = require("common.CommonDB")
  12. local CommonDefine = require("common.CommonDefine")
  13. local MergeConfig = require("excel.MergeServerActivity")
  14. local Grid = require("bag.Grid")
  15. local BagLogic = require("bag.BagLogic")
  16. local MergeServerCharge = require("present.MergeServerCharge")
  17. local MergeServerHuioYue = require("present.MergeServerHuoYue")
  18. -----------------------------------内部调用-----------------------------
  19. -- 获取开始时间
  20. local function MergeServerLogin_GetTime()
  21. local nBeginTime = CommonDB.getMergeServerTime()
  22. print("[MergeServerLogin_GetTime] nBeginTime = "..nBeginTime)
  23. if not nBeginTime or 0 >= nBeginTime then
  24. return 0, 0
  25. end
  26. local nAddTime = (CommonDefine.MERGERSERVER_ACTIVITY_DAY - 1) * 24 * 60 *60
  27. local nEndTime = nBeginTime + nAddTime
  28. print("[MergeServerLogin_GetTime] nEndTime 1 = "..nEndTime.." nAddTime = "..nAddTime)
  29. local tEndDate = os.date("*t",nEndTime)
  30. tEndDate.hour = 23
  31. tEndDate.min = 59
  32. tEndDate.sec = 59
  33. nEndTime = os.time(tEndDate)
  34. print("[MergeServerLogin_GetTime] nEndTime 2 = "..nEndTime)
  35. return nBeginTime, nEndTime
  36. end
  37. local function MergeServerLogin_IsOpen()
  38. local nBeginTime, nEndTime = MergeServerLogin_GetTime()
  39. if 0 >= nBeginTime or 0 >= nEndTime then
  40. print("[MergeServerLogin_IsOpen] 获取到的时间为0")
  41. return false
  42. end
  43. local nNowTime = os.time()
  44. print("[MergeServerLogin_IsOpen] 当前时间 nNowTime = "..nNowTime.." nBeginTime = "..nBeginTime.." nEndTime = "..nEndTime)
  45. return nEndTime > nNowTime
  46. end
  47. local function MergeServerLogin_GetConf()
  48. return MergeConfig.LoginPrize
  49. end
  50. -- 初始化DB数据
  51. local function MergeServerLogin_CreateDB(human)
  52. human.db.MergeLogin = {
  53. nLoginTime = 0,
  54. tPrize = {}
  55. }
  56. local tData = human.db.MergeLogin.tPrize
  57. local tConfig = MergeServerLogin_GetConf()
  58. for _, v in ipairs(tConfig) do
  59. tData[v.nDay] = CommonDefine.COMMON_PRIZE_STATE_NOGET
  60. end
  61. end
  62. local function MergeServerLogin_CheckDB(human)
  63. if not human.db.MergeLogin then
  64. MergeServerLogin_CreateDB(human)
  65. end
  66. end
  67. -- 获取某天状态
  68. local function MergeServerLogin_GetStatus(human, nDay)
  69. return human.db.MergeLogin.tPrize[nDay]
  70. end
  71. -- 设置某天状态
  72. local function MergeServerLogin_SetStatus(human, nDay, nValue)
  73. human.db.MergeLogin.tPrize[nDay] = nValue
  74. end
  75. -- 获取登录时间
  76. local function MergeServerLogin_GetLoginTime(human)
  77. return human.db.MergeLogin.nLoginTime
  78. end
  79. -- 设置登录时间
  80. local function MergeServerLogin_SetLoginTime(human, nValue)
  81. human.db.MergeLogin.nLoginTime = nValue
  82. end
  83. -----------------------------------客户端请求-----------------------------
  84. -- 请求合服登录相关信息
  85. function MergeServerLogin_Query(human)
  86. if false == MergeServerLogin_IsOpen then
  87. return
  88. end
  89. MergeServerLogin_CheckDB(human)
  90. local tMsgData = Msg.gc.GC_MERGESERVER_LOGIN_QUERY
  91. tMsgData.nBeginTime, tMsgData.nEndTime = MergeServerLogin_GetTime()
  92. local tConfig = MergeServerLogin_GetConf()
  93. tMsgData.tList[0] = #tConfig
  94. for nID, v in ipairs(tConfig) do
  95. local tData = tMsgData.tList[nID]
  96. tData.nID = nID
  97. tData.nDay = v.nDay
  98. tData.nState = MergeServerLogin_GetStatus(human, v.nDay)
  99. tData.tPrize[0] = #v.tPrize
  100. for i, tItem in ipairs(v.tPrize) do
  101. Grid.makeItem(tData.tPrize[i], tItem[1], tItem[2])
  102. end
  103. end
  104. Msg.send(tMsgData, human.fd)
  105. end
  106. -- 请求领取登录奖励
  107. function MergeServerLogin_Get(human)
  108. if false == MergeServerLogin_IsOpen then
  109. return
  110. end
  111. local tGoods = {}
  112. local tConfig = MergeServerLogin_GetConf()
  113. for nID, v in ipairs(tConfig) do
  114. local nState = MergeServerLogin_GetStatus(human, v.nDay)
  115. if CommonDefine.COMMON_PRIZE_STATE_CANGET == nState then
  116. MergeServerLogin_SetStatus(human, v.nDay, CommonDefine.COMMON_PRIZE_STATE_GET)
  117. for i, tItem in ipairs(v.tPrize) do
  118. if not tGoods[tItem[1]] then
  119. tGoods[tItem[1]] = 0
  120. end
  121. tGoods[tItem[1]] = tGoods[tItem[1]] + tItem[2]
  122. end
  123. end
  124. end
  125. if nil ~= _G.next(tGoods) then
  126. local tItem = {}
  127. for nGoodID, nGoodNum in pairs(tGoods) do
  128. table.insert(tItem, {nGoodID, nGoodNum})
  129. end
  130. BagLogic.addItemList(human, tItem, "MergeLogin")
  131. MergeServerLogin_Query(human)
  132. YunYingLogic.sendBanner(human)
  133. MergeServerLogin_SendRed(human)
  134. end
  135. end
  136. ------------------------------------- 外部调用 -------------------------------
  137. -- 是否开启
  138. function isOpen(human, YYInfo, funcConfig)
  139. return MergeServerLogin_IsOpen()
  140. end
  141. function isActive(human, YYInfo, funcConfig)
  142. return not isOpen(human, YYInfo, funcConfig)
  143. end
  144. function isRed(human, YYInfo, funcConfig)
  145. if false == MergeServerLogin_IsOpen() then
  146. return false
  147. end
  148. MergeServerLogin_CheckDB(human)
  149. local tConfig = MergeServerLogin_GetConf()
  150. for nID, v in ipairs(tConfig) do
  151. local nState = MergeServerLogin_GetStatus(human, v.nDay)
  152. if CommonDefine.COMMON_PRIZE_STATE_CANGET == nState then
  153. return true
  154. end
  155. end
  156. return false
  157. end
  158. function onLogin(human)
  159. if false == MergeServerLogin_IsOpen() then
  160. return
  161. end
  162. MergeServerLogin_CheckDB(human)
  163. print("[MergeServerLogin_onLogin] 玩家登录")
  164. local nLastTime = MergeServerLogin_GetLoginTime(human)
  165. if 0 == nLastTime or nil == Util.isSameDay(nLastTime) then
  166. MergeServerLogin_SetLoginTime(human, os.time())
  167. local tConfig = MergeServerLogin_GetConf()
  168. for _, v in ipairs(tConfig) do
  169. local nState = MergeServerLogin_GetStatus(human, v.nDay)
  170. if CommonDefine.COMMON_PRIZE_STATE_NOGET == nState then
  171. MergeServerLogin_SetStatus(human, v.nDay, CommonDefine.COMMON_PRIZE_STATE_CANGET)
  172. break
  173. end
  174. end
  175. end
  176. MergeServerLogin_SendRed(human)
  177. end
  178. function MergeServerLogin_SendRed(human)
  179. local tMsgData = Msg.gc.GC_MERGESERVER_UPDATE_RED
  180. tMsgData.tRed[0] = 3
  181. tMsgData.tRed[1] = isRed(human) == true and 1 or 0
  182. tMsgData.tRed[2] = MergeServerCharge.isRed(human) == true and 1 or 0
  183. tMsgData.tRed[3] = MergeServerHuioYue.isRed(human) == true and 1 or 0
  184. Msg.send(tMsgData, human.fd)
  185. print("[MergeServerLogin_SendRed] 发送红点结束")
  186. end