MergeServerLogin.lua 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  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. nBeginTime = CommonDB.getMergeServerTime(),
  54. nLoginTime = 0,
  55. tPrize = {}
  56. }
  57. local tData = human.db.MergeLogin.tPrize
  58. local tConfig = MergeServerLogin_GetConf()
  59. for _, v in ipairs(tConfig) do
  60. tData[v.nDay] = CommonDefine.COMMON_PRIZE_STATE_NOGET
  61. end
  62. end
  63. local function MergeServerLogin_CheckDB(human)
  64. if not human.db.MergeLogin then
  65. MergeServerLogin_CreateDB(human)
  66. else
  67. if human.db.MergeLogin.nBeginTime then
  68. local nNowBeginTime = CommonDB.getMergeServerTime()
  69. if nNowBeginTime ~= human.db.MergeLogin.nBeginTime then
  70. MergeServerLogin_CreateDB(human)
  71. end
  72. end
  73. end
  74. end
  75. -- 获取某天状态
  76. local function MergeServerLogin_GetStatus(human, nDay)
  77. return human.db.MergeLogin.tPrize[nDay]
  78. end
  79. -- 设置某天状态
  80. local function MergeServerLogin_SetStatus(human, nDay, nValue)
  81. human.db.MergeLogin.tPrize[nDay] = nValue
  82. end
  83. -- 获取登录时间
  84. local function MergeServerLogin_GetLoginTime(human)
  85. return human.db.MergeLogin.nLoginTime
  86. end
  87. -- 设置登录时间
  88. local function MergeServerLogin_SetLoginTime(human, nValue)
  89. human.db.MergeLogin.nLoginTime = nValue
  90. end
  91. -----------------------------------客户端请求-----------------------------
  92. -- 请求合服登录相关信息
  93. function MergeServerLogin_Query(human)
  94. if false == MergeServerLogin_IsOpen then
  95. return
  96. end
  97. MergeServerLogin_CheckDB(human)
  98. local tMsgData = Msg.gc.GC_MERGESERVER_LOGIN_QUERY
  99. tMsgData.nBeginTime, tMsgData.nEndTime = MergeServerLogin_GetTime()
  100. local tConfig = MergeServerLogin_GetConf()
  101. tMsgData.tList[0] = #tConfig
  102. for nID, v in ipairs(tConfig) do
  103. local tData = tMsgData.tList[nID]
  104. tData.nID = nID
  105. tData.nDay = v.nDay
  106. tData.nState = MergeServerLogin_GetStatus(human, v.nDay)
  107. tData.tPrize[0] = #v.tPrize
  108. for i, tItem in ipairs(v.tPrize) do
  109. Grid.makeItem(tData.tPrize[i], tItem[1], tItem[2])
  110. end
  111. end
  112. Msg.send(tMsgData, human.fd)
  113. end
  114. -- 请求领取登录奖励
  115. function MergeServerLogin_Get(human)
  116. if false == MergeServerLogin_IsOpen then
  117. return
  118. end
  119. local tGoods = {}
  120. local tConfig = MergeServerLogin_GetConf()
  121. for nID, v in ipairs(tConfig) do
  122. local nState = MergeServerLogin_GetStatus(human, v.nDay)
  123. if CommonDefine.COMMON_PRIZE_STATE_CANGET == nState then
  124. MergeServerLogin_SetStatus(human, v.nDay, CommonDefine.COMMON_PRIZE_STATE_GET)
  125. for i, tItem in ipairs(v.tPrize) do
  126. if not tGoods[tItem[1]] then
  127. tGoods[tItem[1]] = 0
  128. end
  129. tGoods[tItem[1]] = tGoods[tItem[1]] + tItem[2]
  130. end
  131. end
  132. end
  133. if nil ~= _G.next(tGoods) then
  134. local tItem = {}
  135. for nGoodID, nGoodNum in pairs(tGoods) do
  136. table.insert(tItem, {nGoodID, nGoodNum})
  137. end
  138. BagLogic.addItemList(human, tItem, "MergeLogin")
  139. MergeServerLogin_Query(human)
  140. YunYingLogic.sendBanner(human)
  141. MergeServerLogin_SendRed(human)
  142. end
  143. end
  144. ------------------------------------- 外部调用 -------------------------------
  145. -- 是否开启
  146. function isOpen(human, YYInfo, funcConfig)
  147. return MergeServerLogin_IsOpen()
  148. end
  149. function isActive(human, YYInfo, funcConfig)
  150. return not isOpen(human, YYInfo, funcConfig)
  151. end
  152. function isRed(human, YYInfo, funcConfig)
  153. if false == MergeServerLogin_IsOpen() then
  154. return false
  155. end
  156. MergeServerLogin_CheckDB(human)
  157. local tConfig = MergeServerLogin_GetConf()
  158. for nID, v in ipairs(tConfig) do
  159. local nState = MergeServerLogin_GetStatus(human, v.nDay)
  160. if CommonDefine.COMMON_PRIZE_STATE_CANGET == nState then
  161. return true
  162. end
  163. end
  164. return false
  165. end
  166. function onLogin(human)
  167. if false == MergeServerLogin_IsOpen() then
  168. return
  169. end
  170. MergeServerLogin_CheckDB(human)
  171. print("[MergeServerLogin_onLogin] 玩家登录")
  172. local nLastTime = MergeServerLogin_GetLoginTime(human)
  173. if 0 == nLastTime or nil == Util.isSameDay(nLastTime) then
  174. MergeServerLogin_SetLoginTime(human, os.time())
  175. local tConfig = MergeServerLogin_GetConf()
  176. for _, v in ipairs(tConfig) do
  177. local nState = MergeServerLogin_GetStatus(human, v.nDay)
  178. if CommonDefine.COMMON_PRIZE_STATE_NOGET == nState then
  179. MergeServerLogin_SetStatus(human, v.nDay, CommonDefine.COMMON_PRIZE_STATE_CANGET)
  180. break
  181. end
  182. end
  183. end
  184. MergeServerLogin_SendRed(human)
  185. end
  186. function MergeServerLogin_SendRed(human)
  187. local tMsgData = Msg.gc.GC_MERGESERVER_UPDATE_RED
  188. tMsgData.tRed[0] = 3
  189. tMsgData.tRed[1] = isRed(human) == true and 1 or 0
  190. tMsgData.tRed[2] = MergeServerCharge.isRed(human) == true and 1 or 0
  191. tMsgData.tRed[3] = MergeServerHuioYue.isRed(human) == true and 1 or 0
  192. Msg.send(tMsgData, human.fd)
  193. print("[MergeServerLogin_SendRed] 发送红点结束")
  194. end