MergeServerHuoYue.lua 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. --------------------------------
  2. -- 文件名 : MergeServerHuoYue.lua
  3. -- 文件说明 : 合服活动-充值
  4. -- 创建时间 : 2025/07/30
  5. -- 创建人 : FC
  6. --------------------------------
  7. local Util = require("common.Util")
  8. local Msg = require("core.Msg")
  9. local Grid = require("bag.Grid")
  10. local BagLogic = require("bag.BagLogic")
  11. local CommonDefine = require("common.CommonDefine")
  12. local MergeConfig = require("excel.MergeServerActivity")
  13. local CommonDB = require("common.CommonDB")
  14. local BuyLogic = require("topup.BuyLogic")
  15. local YunYingLogic = require("yunying.YunYingLogic")
  16. local MergeServerLogin = require("present.MergeServerLogin")
  17. local MERGEHUOYUE_PAY_NOGET = 0 -- 不可领取
  18. local MERGEHUOYUE_PAY_BUY = 1 -- 已购买
  19. local MERGEHUOYUE_PAY_HUOYUE = 2 -- 活跃度到达要求
  20. local MERGEHUOYUE_PAY_CANGET = 3 -- 可以领取
  21. local MERGEHUOYUE_PAY_GET = 4 -- 已领取
  22. ----------------------------------------- 内部处理开始 -------------------------------------
  23. local function MergeServerHuoYue_IsOpen()
  24. local nBeginTime = CommonDB.getMergeServerTime()
  25. if 0 >= nBeginTime then
  26. return false
  27. end
  28. local nEndTime = nBeginTime + (CommonDefine.MERGERSERVER_ACTIVITY_DAY - 1) * 24 * 60 * 60
  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. local nNowTime = os.time()
  35. return nEndTime > nNowTime
  36. end
  37. local function MergeServerHuoYue_GetConf()
  38. return MergeConfig.HuoYuePrize
  39. end
  40. local function MergeServerHuoYue_CreateDB(human)
  41. human.db.MergeHuoYue = {
  42. nBeginTime = CommonDB.getMergeServerTime(),
  43. nAllHuoYue = 0,
  44. tPrizeData = {}
  45. }
  46. local tData = human.db.MergeHuoYue.tPrizeData
  47. local tConf = MergeServerHuoYue_GetConf()
  48. for nID, v in ipairs(tConf) do
  49. tData[nID] = {
  50. nFreeStatus = CommonDefine.COMMON_PRIZE_STATE_NOGET,
  51. nPayStatus = MERGEHUOYUE_PAY_NOGET,
  52. }
  53. end
  54. end
  55. local function MergeServerHuoYue_CheckDB(human)
  56. if not human.db.MergeHuoYue then
  57. MergeServerHuoYue_CreateDB(human)
  58. else
  59. if human.db.MergeHuoYue.nBeginTime then
  60. local nNowBeginTime = CommonDB.getMergeServerTime()
  61. if nNowBeginTime ~= human.db.MergeLogin.nBeginTime then
  62. MergeServerHuoYue_CreateDB(human)
  63. end
  64. end
  65. end
  66. end
  67. local function MergeServerHuoYue_GetFreeStatus(human, nID)
  68. return human.db.MergeHuoYue.tPrizeData[nID].nFreeStatus
  69. end
  70. local function MergeServerHuoYue_SetFreeStatus(human, nID, nValue)
  71. human.db.MergeHuoYue.tPrizeData[nID].nFreeStatus = nValue
  72. end
  73. local function MergeServerHuoYue_GetPayStatus(human, nID)
  74. return human.db.MergeHuoYue.tPrizeData[nID].nPayStatus
  75. end
  76. local function MergeServerHuoYue_SetPayStatus(human, nID, nValue)
  77. human.db.MergeHuoYue.tPrizeData[nID].nPayStatus = nValue
  78. end
  79. local function MergeServerHuoYue_GetAllHuoYue(human)
  80. return human.db.MergeHuoYue.nAllHuoYue
  81. end
  82. local function MergeServerHuoYue_AddHuoYue(human, nNum)
  83. human.db.MergeHuoYue.nAllHuoYue = human.db.MergeHuoYue.nAllHuoYue + nNum
  84. end
  85. -- 检测付费奖励状态
  86. local function MergeServerHuoYue_CheckStatus(human)
  87. local tConfig = MergeServerHuoYue_GetConf()
  88. local nAllHuoYue = MergeServerHuoYue_GetAllHuoYue(human)
  89. for nID, v in ipairs(tConfig) do
  90. local nPayState = MergeServerHuoYue_GetPayStatus(human, nID)
  91. if nAllHuoYue >= v.nHuoYue then
  92. if nPayState == MERGEHUOYUE_PAY_BUY then
  93. MergeServerHuoYue_SetPayStatus(human, nID, MERGEHUOYUE_PAY_CANGET)
  94. elseif MERGEHUOYUE_PAY_NOGET == nPayState then
  95. MergeServerHuoYue_SetPayStatus(human, nID, MERGEHUOYUE_PAY_HUOYUE)
  96. end
  97. end
  98. local nFreeStatus = MergeServerHuoYue_GetFreeStatus(human, nID)
  99. if CommonDefine.COMMON_PRIZE_STATE_NOGET == nFreeStatus and nAllHuoYue >= v.nHuoYue then
  100. MergeServerHuoYue_SetFreeStatus(human, nID, CommonDefine.COMMON_PRIZE_STATE_CANGET)
  101. end
  102. end
  103. end
  104. -----------------------------------客户端请求-----------------------------
  105. -- 请求活跃奖励信息
  106. function MergeServerHuoYue_Query(human)
  107. if false == MergeServerHuoYue_IsOpen() then
  108. return
  109. end
  110. MergeServerHuoYue_CheckDB(human)
  111. local tConfig = MergeServerHuoYue_GetConf()
  112. local tMsgData = Msg.gc.GC_MERGESERVER_QUERY_HUOYUE
  113. tMsgData.nAllHuoYue = MergeServerHuoYue_GetAllHuoYue(human)
  114. tMsgData.tList[0] = #tConfig
  115. for nID, v in ipairs(tConfig) do
  116. local tData = tMsgData.tList[nID]
  117. tData.nID = nID
  118. tData.nNeedHuoYue = v.nHuoYue
  119. tData.nFreeState = MergeServerHuoYue_GetFreeStatus(human, nID)
  120. tData.bBuy = 0
  121. local nPayState = MergeServerHuoYue_GetPayStatus(human, nID)
  122. if MERGEHUOYUE_PAY_CANGET == nPayState then
  123. tData.nPayState = CommonDefine.COMMON_PRIZE_STATE_CANGET
  124. tData.bBuy = 1
  125. elseif MERGEHUOYUE_PAY_GET == nPayState then
  126. tData.nPayState = CommonDefine.COMMON_PRIZE_STATE_GET
  127. tData.bBuy = 1
  128. else
  129. tData.nPayState = CommonDefine.COMMON_PRIZE_STATE_NOGET
  130. end
  131. if MERGEHUOYUE_PAY_BUY == nPayState then
  132. tData.bBuy = 1
  133. end
  134. -- 购买项
  135. BuyLogic.fontBuyItem(human, tData.buyItem, v.nBuyID)
  136. tData.tFreeItem[0] = #v.tFreePrize
  137. for i, tItem in ipairs(v.tFreePrize) do
  138. local nGoodsID = tItem[1]
  139. local nGoodsNum = tItem[2]
  140. Grid.makeItem(tData.tFreeItem[i], nGoodsID, nGoodsNum)
  141. end
  142. tData.tPayItem[0] = #v.tPayPrize
  143. for i, tItem in ipairs(v.tPayPrize) do
  144. local nGoodsID = tItem[1]
  145. local nGoodsNum = tItem[2]
  146. Grid.makeItem(tData.tPayItem[i], nGoodsID, nGoodsNum)
  147. end
  148. end
  149. Msg.send(tMsgData, human.fd)
  150. end
  151. -- 请求领取活跃奖励
  152. function MergeServerHuoYue_Get(human)
  153. if false == MergeServerHuoYue_IsOpen() then
  154. return
  155. end
  156. local tConfig = MergeServerHuoYue_GetConf()
  157. local tGoods = {}
  158. for nID, v in ipairs(tConfig) do
  159. local nFreeStatus = MergeServerHuoYue_GetFreeStatus(human, nID)
  160. if CommonDefine.COMMON_PRIZE_STATE_CANGET == nFreeStatus then
  161. MergeServerHuoYue_SetFreeStatus(human, nID, CommonDefine.COMMON_PRIZE_STATE_GET)
  162. for _, tItem in ipairs(v.tFreePrize) do
  163. local nGoodsID = tItem[1]
  164. local nGoodsNum = tItem[2]
  165. if not tGoods[nGoodsID] then
  166. tGoods[nGoodsID] = 0
  167. end
  168. tGoods[nGoodsID] = tGoods[nGoodsID] + nGoodsNum
  169. end
  170. end
  171. local nPayStatus = MergeServerHuoYue_GetPayStatus(human, nID)
  172. if MERGEHUOYUE_PAY_CANGET == nPayStatus then
  173. MergeServerHuoYue_SetPayStatus(human, nID, MERGEHUOYUE_PAY_GET)
  174. for _, tItem in ipairs(v.tPayPrize) do
  175. local nGoodsID = tItem[1]
  176. local nGoodsNum = tItem[2]
  177. if not tGoods[nGoodsID] then
  178. tGoods[nGoodsID] = 0
  179. end
  180. tGoods[nGoodsID] = tGoods[nGoodsID] + nGoodsNum
  181. end
  182. end
  183. end
  184. if nil ~= _G.next(tGoods) then
  185. local tItem = {}
  186. for nGoodID, nGoodNum in pairs(tGoods) do
  187. table.insert(tItem, {nGoodID, nGoodNum})
  188. end
  189. BagLogic.addItemList(human, tItem, "MergeHuoYue")
  190. MergeServerHuoYue_Query(human)
  191. YunYingLogic.sendBanner(human)
  192. MergeServerLogin.MergeServerLogin_SendRed(human)
  193. end
  194. end
  195. ------------------------------------- 外部调用 -------------------------------
  196. -- 是否开启
  197. function isOpen(human, YYInfo, funcConfig)
  198. return MergeServerHuoYue_IsOpen()
  199. end
  200. function isActive(human, YYInfo, funcConfig)
  201. return not isOpen(human, YYInfo, funcConfig)
  202. end
  203. function isRed(human, YYInfo, funcConfig)
  204. if false == MergeServerHuoYue_IsOpen() then
  205. return false
  206. end
  207. MergeServerHuoYue_CheckDB(human)
  208. local tConfig = MergeServerHuoYue_GetConf()
  209. for nID, v in ipairs(tConfig) do
  210. local nFreeStatus = MergeServerHuoYue_GetFreeStatus(human, nID)
  211. local nPayStatus = MergeServerHuoYue_GetPayStatus(human, nID)
  212. if CommonDefine.COMMON_PRIZE_STATE_CANGET == nFreeStatus or
  213. MERGEHUOYUE_PAY_CANGET == nPayStatus then
  214. return true
  215. end
  216. end
  217. return false
  218. end
  219. function onDailyTask(human, funcID, nSum, parameter2)
  220. if false == MergeServerHuoYue_IsOpen() then
  221. return
  222. end
  223. MergeServerHuoYue_CheckDB(human)
  224. MergeServerHuoYue_AddHuoYue(human, nSum)
  225. MergeServerHuoYue_CheckStatus(human)
  226. MergeServerLogin.MergeServerLogin_SendRed(human)
  227. end
  228. function onCharge(human, price, funcID, buyID)
  229. if false == MergeServerHuoYue_IsOpen() then
  230. return
  231. end
  232. MergeServerHuoYue_CheckDB(human)
  233. local tConfig = MergeServerHuoYue_GetConf()
  234. for nID, v in ipairs(tConfig) do
  235. if v.nBuyID == buyID then
  236. local nPayStatus = MergeServerHuoYue_GetPayStatus(human, nID)
  237. if MERGEHUOYUE_PAY_NOGET == nPayStatus then
  238. MergeServerHuoYue_SetPayStatus(human, nID, MERGEHUOYUE_PAY_BUY)
  239. elseif MERGEHUOYUE_PAY_HUOYUE == nPayStatus then
  240. MergeServerHuoYue_SetPayStatus(human, nID, MERGEHUOYUE_PAY_CANGET)
  241. end
  242. end
  243. end
  244. MergeServerHuoYue_Query(human)
  245. MergeServerLogin.MergeServerLogin_SendRed(human)
  246. end