MergeServerCharge.lua 14 KB

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