MergeServerCharge.lua 14 KB

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