MergeServerCharge.lua 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414
  1. --------------------------------
  2. -- 文件名 : MergeServerCharge.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 YunYingLogic = require("yunying.YunYingLogic")
  15. local MergeServerLogin = require("present.MergeServerLogin")
  16. -- 金额映射红点下标
  17. local tChargeMoney2Index =
  18. {
  19. [6] = 1,
  20. [98] = 2,
  21. [198] = 3,
  22. }
  23. local tIndex2Money = {
  24. [1] = 6,
  25. [2] = 98,
  26. [3] = 198,
  27. }
  28. ----------------------------------------- 内部处理开始 -------------------------------------
  29. local function MergeServerCharge_IsOpen()
  30. local nBeginTime = CommonDB.getMergeServerTime()
  31. if 0 >= nBeginTime then
  32. return false
  33. end
  34. local nEndTime = nBeginTime + (CommonDefine.MERGERSERVER_ACTIVITY_DAY - 1) * 24 * 60 * 60
  35. local tEndDate = os.date("*t",nEndTime)
  36. tEndDate.hour = 23
  37. tEndDate.min = 59
  38. tEndDate.sec = 59
  39. nEndTime = os.time(tEndDate)
  40. local nNowTime = os.time()
  41. return nEndTime > nNowTime
  42. end
  43. -- 获取配置
  44. local function MergeServerCharge_GetCof()
  45. return MergeConfig.Charge
  46. end
  47. -- 初始化DB数据
  48. local function MergeServerCharge_CreatDB(human)
  49. human.db.MergeCharge =
  50. {
  51. bDispose = false,
  52. tChargeData = {},
  53. tPrizeData = {}
  54. }
  55. local tPrizeData = human.db.MergeCharge.tPrizeData
  56. local tConf = MergeServerCharge_GetCof()
  57. for _, v in ipairs(tConf) do
  58. if not tPrizeData[v.nDay] then
  59. tPrizeData[v.nDay] = {
  60. tMoney = {}
  61. }
  62. end
  63. if not human.db.MergeCharge.tChargeData[v.nMoney] then
  64. human.db.MergeCharge.tChargeData[v.nMoney] = {
  65. nBuyTime = 0,
  66. nBuyDay = 0
  67. }
  68. end
  69. local tNodeData = tPrizeData[v.nDay].tMoney
  70. if not tNodeData[v.nMoney] then
  71. tNodeData[v.nMoney] =
  72. {
  73. nStatus = CommonDefine.COMMON_PRIZE_STATE_NOGET,
  74. nMoney = 0
  75. }
  76. else
  77. print("[MergeServerCharge_CreateDB] 配置了重复的数据")
  78. end
  79. end
  80. print("[MergeServerCharge_CreatDB] 初始化数据完成 name = "..human.db.name)
  81. return true
  82. end
  83. local function MergeServerCharge_CheckDB(human)
  84. if not human.db.MergeCharge then
  85. MergeServerCharge_CreatDB(human)
  86. end
  87. end
  88. -- 获取是否处理合服前的充值
  89. local function MergeServerCharge_GetDispose(human)
  90. return human.db.MergeCharge.bDispose
  91. end
  92. -- 设置处理合服前的充值
  93. local function MergeServerCharge_SetDispose(human, nValue)
  94. human.db.MergeCharge.bDispose = nValue
  95. end
  96. -- 获取第一次充值的时间
  97. local function MergeServerCharge_GetChargeTime(human, nMoney)
  98. return human.db.MergeCharge.tChargeData[nMoney].nBuyTime
  99. end
  100. -- 设置充值时间
  101. local function MergeServerCharge_SetChargeTime(human, nMoney, nValue)
  102. human.db.MergeCharge.tChargeData[nMoney].nBuyTime = nValue
  103. end
  104. local function MergeServerCharge_GetBuyDay(human, nMoney)
  105. return human.db.MergeCharge.tChargeData[nMoney].nBuyDay
  106. end
  107. local function MergeServerCharge_SetBuyDay(human, nMoney,nDay)
  108. human.db.MergeCharge.tChargeData[nMoney].nBuyDay = nDay
  109. end
  110. -- 获取DB奖励数据
  111. local function MergeServerCharge_GetDBPrizeData(human)
  112. return human.db.MergeCharge.tPrizeData
  113. end
  114. -- 获取DB奖励状态
  115. local function MergeServerCharge_GetDBPrizeStatus(human, nDay, nMoney)
  116. local tPrizeData = MergeServerCharge_GetDBPrizeData(human)
  117. if not tPrizeData[nDay] or not tPrizeData[nDay].tMoney[nMoney] then
  118. return CommonDefine.COMMON_PRIZE_STATE_NOGET
  119. end
  120. return tPrizeData[nDay].tMoney[nMoney].nStatus
  121. end
  122. -- 设置DB奖励状态
  123. local function MergeServerCharge_SetDBPrizeStatus(human, nDay, nMoney, nStatus)
  124. print("[MergeServerCharge_SetDBPrizeStatus] 设置DB奖励状态 nDay = "..nDay.." nMoney = "..nMoney.." nStatus = "..nStatus)
  125. local tPrizeData = MergeServerCharge_GetDBPrizeData(human)
  126. tPrizeData[nDay].tMoney[nMoney].nStatus = nStatus
  127. end
  128. -- 获取DB天数充值金额
  129. local function MergeServerCharge_GetDBDayCharge(human, nDay, nMoney)
  130. local tPrizeData = MergeServerCharge_GetDBPrizeData(human)
  131. if not tPrizeData[nDay] then
  132. return 0
  133. end
  134. return tPrizeData[nDay].tMoney[nMoney].nMoney
  135. end
  136. -- 设置DB天数充值金额
  137. local function MergeServerCharge_SetDBDayCharge(human, nDay, nMoney, nAddMoney)
  138. local tPrizeData = MergeServerCharge_GetDBPrizeData(human)
  139. tPrizeData[nDay].tMoney[nMoney].nMoney = tPrizeData[nDay].tMoney[nMoney].nMoney + nAddMoney
  140. if tPrizeData[nDay].tMoney[nMoney].nMoney < 0 then
  141. tPrizeData[nDay].tMoney[nMoney].nMoney = 0
  142. end
  143. end
  144. local function MergeServerCharge_GetDayAllMoney(human, nDay)
  145. local nAllMoney = 0
  146. for _, v in ipairs(tIndex2Money) do
  147. local nMoney = MergeServerCharge_GetDBDayCharge(human, nDay, v)
  148. nAllMoney = nAllMoney + nMoney
  149. end
  150. return nAllMoney
  151. end
  152. -----------------------------------客户端请求-----------------------------
  153. -- 请求数据
  154. function MergeServerCharge_Query(human, nIndex)
  155. if false == MergeServerCharge_IsOpen() then
  156. return
  157. end
  158. MergeServerCharge_CheckDB(human)
  159. local nMoney = tIndex2Money[nIndex]
  160. if not nMoney then
  161. return
  162. end
  163. local tConf = MergeServerCharge_GetCof()
  164. local tMsgData = Msg.gc.GC_MERGESERVER_CHARGE_QUERY
  165. tMsgData.tList[0] = 0
  166. local nLen = 0
  167. for nID, v in ipairs(tConf) do
  168. if v.nMoney == nMoney then
  169. nLen = nLen + 1
  170. tMsgData.tList[0] = nLen
  171. local tPrizeData = tMsgData.tList[nLen]
  172. tPrizeData.nID = nID
  173. tPrizeData.nState = MergeServerCharge_GetDBPrizeStatus(human, v.nDay, nMoney)
  174. tPrizeData.nDay = v.nDay
  175. tPrizeData.nAllMoney = MergeServerCharge_GetDBDayCharge(human, v.nDay, nMoney)
  176. tPrizeData.nMoney = v.nMoney
  177. tPrizeData.item[0] = #v.tPrize
  178. for i, tItem in ipairs(v.tPrize) do
  179. local nGoodsID = tItem[1]
  180. local nGoodsNum = tItem[2]
  181. Grid.makeItem(tPrizeData.item[i], nGoodsID, nGoodsNum)
  182. end
  183. end
  184. end
  185. Msg.send(tMsgData, human.fd)
  186. end
  187. -- 请求领取奖励
  188. function MergeServerCharge_Get(human, nIndex)
  189. if false == MergeServerCharge_IsOpen() then
  190. return
  191. end
  192. local nMoney = tIndex2Money[nIndex]
  193. if not nMoney then
  194. return
  195. end
  196. local tConf = MergeServerCharge_GetCof()
  197. local tItem = {}
  198. for nID, v in ipairs(tConf) do
  199. if v.nMoney == nMoney then
  200. local nState = MergeServerCharge_GetDBPrizeStatus(human, v.nDay, v.nMoney)
  201. if CommonDefine.COMMON_PRIZE_STATE_CANGET == nState then
  202. MergeServerCharge_SetDBPrizeStatus(human, v.nDay, nMoney, CommonDefine.COMMON_PRIZE_STATE_GET)
  203. for _, tPrize in ipairs(v.tPrize) do
  204. if not tItem[tPrize[1]] then
  205. tItem[tPrize[1]] = 0
  206. end
  207. tItem[tPrize[1]] = tItem[tPrize[1]] + tPrize[2]
  208. end
  209. end
  210. end
  211. end
  212. if nil ~= _G.next(tItem) then
  213. local tPrize = {}
  214. for nID, nNum in pairs(tItem) do
  215. table.insert(tPrize, {nID, nNum})
  216. end
  217. BagLogic.addItemList(human, tPrize, "MergeCharge")
  218. MergeServerCharge_Query(human, nIndex)
  219. YunYingLogic.sendBanner(human)
  220. MergeServerLogin.MergeServerLogin_SendRed(human)
  221. end
  222. end
  223. ----------------------------------------- 外部调用 -------------------------------------
  224. function isRed(human)
  225. if false == MergeServerCharge_IsOpen() then
  226. return false
  227. end
  228. MergeServerCharge_CheckDB(human)
  229. if not human.db.MergeCharge then
  230. return false
  231. end
  232. local tConf = MergeServerCharge_GetCof()
  233. for _, v in ipairs(tConf) do
  234. local nState = MergeServerCharge_GetDBPrizeStatus(human, v.nDay, v.nMoney)
  235. if nState == CommonDefine.COMMON_PRIZE_STATE_CANGET then
  236. return true
  237. end
  238. end
  239. return false
  240. end
  241. function onCharge(human, price, funcID, buyID)
  242. if false == MergeServerCharge_IsOpen() then
  243. return
  244. end
  245. local tConf = MergeServerCharge_GetCof()
  246. local bQuery = false
  247. for _, nMoney in ipairs(tIndex2Money) do
  248. local nBuyTime = MergeServerCharge_GetChargeTime(human, nMoney)
  249. local nBuyDay = MergeServerCharge_GetBuyDay(human, nMoney)
  250. if 0 == nBuyTime then
  251. nBuyTime = os.time()
  252. MergeServerCharge_SetChargeTime(human, nMoney, nBuyTime)
  253. end
  254. if 0 == nBuyDay then
  255. nBuyDay = nBuyDay + 1
  256. MergeServerCharge_SetBuyDay(human, nMoney, nBuyDay)
  257. else
  258. -- 跨天了
  259. if nil == Util.isSameDay(nBuyTime) then
  260. nBuyDay = nBuyDay + 1
  261. MergeServerCharge_SetBuyDay(human, nMoney, nBuyDay)
  262. nBuyTime = os.time()
  263. MergeServerCharge_SetChargeTime(human, nMoney, nBuyTime)
  264. end
  265. end
  266. MergeServerCharge_SetDBDayCharge(human, nBuyDay, nMoney, price)
  267. local nNewChareNum = MergeServerCharge_GetDBDayCharge(human, nBuyDay, nMoney)
  268. print("[MergeServerCharge_onCharge] 玩家充值增加对应的总充值金额 天数 nBuyDay = "..nBuyDay
  269. .." 对应金额 nMoney = "..nMoney.." 增加的钱 price = "..price.." 总金额 nNewChareNum = "..nNewChareNum)
  270. for _, v in ipairs(tConf) do
  271. if v.nDay == nBuyDay and v.nMoney == nMoney then
  272. local nStatus = MergeServerCharge_GetDBPrizeStatus(human, v.nDay, v.nMoney)
  273. if nStatus == CommonDefine.COMMON_PRIZE_STATE_NOGET and nNewChareNum >= v.nMoney then
  274. MergeServerCharge_SetDBPrizeStatus(human, v.nDay, v.nMoney, CommonDefine.COMMON_PRIZE_STATE_CANGET)
  275. bQuery = true
  276. end
  277. end
  278. end
  279. end
  280. if true == bQuery then
  281. MergeServerLogin.MergeServerLogin_SendRed(human)
  282. -- MergeServerCharge_Query(human, price)
  283. end
  284. end
  285. function isOpen(human, YYInfo, funcConfig)
  286. return MergeServerCharge_IsOpen()
  287. end
  288. function isActive(human, YYInfo, funcConfig)
  289. return not isOpen(human, YYInfo, funcConfig)
  290. end
  291. function onLogin(human)
  292. if false == MergeServerCharge_IsOpen() then
  293. return
  294. end
  295. MergeServerCharge_CheckDB(human)
  296. local bDispose = MergeServerCharge_GetDispose(human)
  297. if false == bDispose then
  298. MergeServerCharge_SetDispose(human, true)
  299. local nNowCharge = human.db.topupAcountDaily
  300. if nNowCharge and 0 < nNowCharge then
  301. onCharge(human, nNowCharge)
  302. end
  303. end
  304. local nNowTime = os.time()
  305. for _, nMoney in ipairs(tIndex2Money) do
  306. local nBuyTime = MergeServerCharge_GetChargeTime(human, nMoney)
  307. local nBuyDay = MergeServerCharge_GetBuyDay(human, nMoney)
  308. if true ~= Util.isSameDayByTimes(nNowTime, nBuyTime) and nBuyDay ~= 0 then
  309. local nAllMoney = MergeServerCharge_GetDBDayCharge(human, nBuyDay, nMoney)
  310. if nAllMoney < nMoney and 0 < nAllMoney then
  311. MergeServerCharge_SetDBDayCharge(human, nBuyDay, nMoney, -nAllMoney)
  312. MergeServerCharge_SetChargeTime(human, nMoney, 0)
  313. print("[MergeServerCharge_onLogin] 玩家登录 重置对应不达标数据 nBuyDay = "..nBuyDay.." 对应金额 nMoney = "..nMoney.." 充值数 nAllMoney = "..nAllMoney)
  314. end
  315. end
  316. end
  317. end
  318. function onZero(human, funcID)
  319. if false == MergeServerCharge_IsOpen() then
  320. return
  321. end
  322. MergeServerCharge_CheckDB(human)
  323. for _, nMoney in ipairs(tIndex2Money) do
  324. -- local nBuyTime = MergeServerCharge_GetChargeTime(human, nMoney)
  325. local nBuyDay = MergeServerCharge_GetBuyDay(human, nMoney)
  326. local nAllMoney = MergeServerCharge_GetDBDayCharge(human, nBuyDay, nMoney)
  327. if nAllMoney < nMoney and 0 < nAllMoney then
  328. MergeServerCharge_SetDBDayCharge(human, nBuyDay, nMoney, -nAllMoney)
  329. MergeServerCharge_SetChargeTime(human, nMoney, 0)
  330. print("[MergeServerCharge_onZero] 零点刷新 重置对应不达标数据 nBuyDay = "..nBuyDay.." 对应金额 nMoney = "..nMoney.." 充值数 nAllMoney = "..nAllMoney)
  331. end
  332. end
  333. end
  334. function MergeServerCharge_GMReset(human, nDay)
  335. for _, v in ipairs(tIndex2Money) do
  336. human.db.MergeCharge.tPrizeData[nDay].tMoney[v]=
  337. {
  338. nStatus = CommonDefine.COMMON_PRIZE_STATE_NOGET,
  339. nMoney = 0,
  340. }
  341. end
  342. end