|
|
@@ -0,0 +1,414 @@
|
|
|
+--------------------------------
|
|
|
+-- 文件名 : MergeServerCharge.lua
|
|
|
+-- 文件说明 : 合服活动-充值
|
|
|
+-- 创建时间 : 2025/07/30
|
|
|
+-- 创建人 : FC
|
|
|
+--------------------------------
|
|
|
+
|
|
|
+local Util = require("common.Util")
|
|
|
+local Msg = require("core.Msg")
|
|
|
+local Grid = require("bag.Grid")
|
|
|
+local BagLogic = require("bag.BagLogic")
|
|
|
+local CommonDefine = require("common.CommonDefine")
|
|
|
+local MergeConfig = require("excel.MergeServerActivity")
|
|
|
+local CommonDB = require("common.CommonDB")
|
|
|
+local YunYingLogic = require("yunying.YunYingLogic")
|
|
|
+local MergeServerLogin = require("present.MergeServerLogin")
|
|
|
+
|
|
|
+-- 金额映射红点下标
|
|
|
+local tChargeMoney2Index =
|
|
|
+{
|
|
|
+ [6] = 1,
|
|
|
+ [98] = 2,
|
|
|
+ [198] = 3,
|
|
|
+}
|
|
|
+
|
|
|
+local tIndex2Money = {
|
|
|
+ [1] = 6,
|
|
|
+ [2] = 98,
|
|
|
+ [3] = 198,
|
|
|
+}
|
|
|
+
|
|
|
+----------------------------------------- 内部处理开始 -------------------------------------
|
|
|
+local function MergeServerCharge_IsOpen()
|
|
|
+ local nBeginTime = CommonDB.getMergeServerTime()
|
|
|
+ if 0 >= nBeginTime then
|
|
|
+ return false
|
|
|
+ end
|
|
|
+
|
|
|
+ local nEndTime = nBeginTime + (CommonDefine.MERGERSERVER_ACTIVITY_DAY - 1) * 24 * 60 * 60
|
|
|
+ local tEndDate = os.date("*t",nEndTime)
|
|
|
+ tEndDate.hour = 23
|
|
|
+ tEndDate.min = 59
|
|
|
+ tEndDate.sec = 59
|
|
|
+
|
|
|
+ nEndTime = os.time(tEndDate)
|
|
|
+
|
|
|
+ local nNowTime = os.time()
|
|
|
+
|
|
|
+ return nEndTime > nNowTime
|
|
|
+end
|
|
|
+
|
|
|
+-- 获取配置
|
|
|
+local function MergeServerCharge_GetCof()
|
|
|
+ return MergeConfig.Charge
|
|
|
+end
|
|
|
+
|
|
|
+-- 初始化DB数据
|
|
|
+local function MergeServerCharge_CreatDB(human)
|
|
|
+ human.db.MergeCharge =
|
|
|
+ {
|
|
|
+ bDispose = false,
|
|
|
+ tChargeData = {},
|
|
|
+ tPrizeData = {}
|
|
|
+ }
|
|
|
+
|
|
|
+ local tPrizeData = human.db.MergeCharge.tPrizeData
|
|
|
+ local tConf = MergeServerCharge_GetCof()
|
|
|
+ for _, v in ipairs(tConf) do
|
|
|
+ if not tPrizeData[v.nDay] then
|
|
|
+ tPrizeData[v.nDay] = {
|
|
|
+ tMoney = {}
|
|
|
+ }
|
|
|
+ end
|
|
|
+
|
|
|
+ if not human.db.MergeCharge.tChargeData[v.nMoney] then
|
|
|
+ human.db.MergeCharge.tChargeData[v.nMoney] = {
|
|
|
+ nBuyTime = 0,
|
|
|
+ nBuyDay = 0
|
|
|
+ }
|
|
|
+ end
|
|
|
+
|
|
|
+ local tNodeData = tPrizeData[v.nDay].tMoney
|
|
|
+ if not tNodeData[v.nMoney] then
|
|
|
+ tNodeData[v.nMoney] =
|
|
|
+ {
|
|
|
+ nStatus = CommonDefine.COMMON_PRIZE_STATE_NOGET,
|
|
|
+ nMoney = 0
|
|
|
+ }
|
|
|
+ else
|
|
|
+ print("[MergeServerCharge_CreateDB] 配置了重复的数据")
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ print("[MergeServerCharge_CreatDB] 初始化数据完成 name = "..human.db.name)
|
|
|
+ return true
|
|
|
+end
|
|
|
+
|
|
|
+local function MergeServerCharge_CheckDB(human)
|
|
|
+ if not human.db.MergeCharge then
|
|
|
+ MergeServerCharge_CreatDB(human)
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+-- 获取是否处理合服前的充值
|
|
|
+local function MergeServerCharge_GetDispose(human)
|
|
|
+ return human.db.MergeCharge.bDispose
|
|
|
+end
|
|
|
+
|
|
|
+-- 设置处理合服前的充值
|
|
|
+local function MergeServerCharge_SetDispose(human, nValue)
|
|
|
+ human.db.MergeCharge.bDispose = nValue
|
|
|
+end
|
|
|
+
|
|
|
+-- 获取第一次充值的时间
|
|
|
+local function MergeServerCharge_GetChargeTime(human, nMoney)
|
|
|
+ return human.db.MergeCharge.tChargeData[nMoney].nBuyTime
|
|
|
+end
|
|
|
+
|
|
|
+-- 设置充值时间
|
|
|
+local function MergeServerCharge_SetChargeTime(human, nMoney, nValue)
|
|
|
+ human.db.MergeCharge.tChargeData[nMoney].nBuyTime = nValue
|
|
|
+end
|
|
|
+
|
|
|
+local function MergeServerCharge_GetBuyDay(human, nMoney)
|
|
|
+ return human.db.MergeCharge.tChargeData[nMoney].nBuyDay
|
|
|
+end
|
|
|
+
|
|
|
+local function MergeServerCharge_SetBuyDay(human, nMoney,nDay)
|
|
|
+ human.db.MergeCharge.tChargeData[nMoney].nBuyDay = nDay
|
|
|
+end
|
|
|
+
|
|
|
+-- 获取DB奖励数据
|
|
|
+local function MergeServerCharge_GetDBPrizeData(human)
|
|
|
+ return human.db.MergeCharge.tPrizeData
|
|
|
+end
|
|
|
+
|
|
|
+-- 获取DB奖励状态
|
|
|
+local function MergeServerCharge_GetDBPrizeStatus(human, nDay, nMoney)
|
|
|
+ local tPrizeData = MergeServerCharge_GetDBPrizeData(human)
|
|
|
+
|
|
|
+ if not tPrizeData[nDay] or not tPrizeData[nDay].tMoney[nMoney] then
|
|
|
+ return CommonDefine.COMMON_PRIZE_STATE_NOGET
|
|
|
+ end
|
|
|
+
|
|
|
+ return tPrizeData[nDay].tMoney[nMoney].nStatus
|
|
|
+end
|
|
|
+
|
|
|
+-- 设置DB奖励状态
|
|
|
+local function MergeServerCharge_SetDBPrizeStatus(human, nDay, nMoney, nStatus)
|
|
|
+ print("[MergeServerCharge_SetDBPrizeStatus] 设置DB奖励状态 nDay = "..nDay.." nMoney = "..nMoney.." nStatus = "..nStatus)
|
|
|
+ local tPrizeData = MergeServerCharge_GetDBPrizeData(human)
|
|
|
+ tPrizeData[nDay].tMoney[nMoney].nStatus = nStatus
|
|
|
+end
|
|
|
+
|
|
|
+-- 获取DB天数充值金额
|
|
|
+local function MergeServerCharge_GetDBDayCharge(human, nDay, nMoney)
|
|
|
+ local tPrizeData = MergeServerCharge_GetDBPrizeData(human)
|
|
|
+
|
|
|
+ if not tPrizeData[nDay] then
|
|
|
+ return 0
|
|
|
+ end
|
|
|
+
|
|
|
+ return tPrizeData[nDay].tMoney[nMoney].nMoney
|
|
|
+end
|
|
|
+
|
|
|
+-- 设置DB天数充值金额
|
|
|
+local function MergeServerCharge_SetDBDayCharge(human, nDay, nMoney, nAddMoney)
|
|
|
+ local tPrizeData = MergeServerCharge_GetDBPrizeData(human)
|
|
|
+ tPrizeData[nDay].tMoney[nMoney].nMoney = tPrizeData[nDay].tMoney[nMoney].nMoney + nAddMoney
|
|
|
+ if tPrizeData[nDay].tMoney[nMoney].nMoney < 0 then
|
|
|
+ tPrizeData[nDay].tMoney[nMoney].nMoney = 0
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+
|
|
|
+local function MergeServerCharge_GetDayAllMoney(human, nDay)
|
|
|
+ local nAllMoney = 0
|
|
|
+ for _, v in ipairs(tIndex2Money) do
|
|
|
+ local nMoney = MergeServerCharge_GetDBDayCharge(human, nDay, v)
|
|
|
+ nAllMoney = nAllMoney + nMoney
|
|
|
+ end
|
|
|
+
|
|
|
+ return nAllMoney
|
|
|
+end
|
|
|
+
|
|
|
+-----------------------------------客户端请求-----------------------------
|
|
|
+-- 请求数据
|
|
|
+function MergeServerCharge_Query(human, nIndex)
|
|
|
+ if false == MergeServerCharge_IsOpen() then
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ MergeServerCharge_CheckDB(human)
|
|
|
+ local nMoney = tIndex2Money[nIndex]
|
|
|
+ if not nMoney then
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ local tConf = MergeServerCharge_GetCof()
|
|
|
+
|
|
|
+ local tMsgData = Msg.gc.GC_MERGESERVER_CHARGE_QUERY
|
|
|
+ tMsgData.tList[0] = 0
|
|
|
+
|
|
|
+ local nLen = 0
|
|
|
+ for nID, v in ipairs(tConf) do
|
|
|
+ if v.nMoney == nMoney then
|
|
|
+ nLen = nLen + 1
|
|
|
+ tMsgData.tList[0] = nLen
|
|
|
+ local tPrizeData = tMsgData.tList[nLen]
|
|
|
+ tPrizeData.nID = nID
|
|
|
+ tPrizeData.nState = MergeServerCharge_GetDBPrizeStatus(human, v.nDay, nMoney)
|
|
|
+ tPrizeData.nDay = v.nDay
|
|
|
+ tPrizeData.nAllMoney = MergeServerCharge_GetDBDayCharge(human, v.nDay, nMoney)
|
|
|
+ tPrizeData.nMoney = v.nMoney
|
|
|
+ tPrizeData.item[0] = #v.tPrize
|
|
|
+
|
|
|
+
|
|
|
+ for i, tItem in ipairs(v.tPrize) do
|
|
|
+ local nGoodsID = tItem[1]
|
|
|
+ local nGoodsNum = tItem[2]
|
|
|
+
|
|
|
+ Grid.makeItem(tPrizeData.item[i], nGoodsID, nGoodsNum)
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ Msg.send(tMsgData, human.fd)
|
|
|
+end
|
|
|
+
|
|
|
+-- 请求领取奖励
|
|
|
+function MergeServerCharge_Get(human, nIndex)
|
|
|
+ if false == MergeServerCharge_IsOpen() then
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ local nMoney = tIndex2Money[nIndex]
|
|
|
+ if not nMoney then
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ local tConf = MergeServerCharge_GetCof()
|
|
|
+
|
|
|
+ local tItem = {}
|
|
|
+ for nID, v in ipairs(tConf) do
|
|
|
+ if v.nMoney == nMoney then
|
|
|
+ local nState = MergeServerCharge_GetDBPrizeStatus(human, v.nDay, v.nMoney)
|
|
|
+ if CommonDefine.COMMON_PRIZE_STATE_CANGET == nState then
|
|
|
+ MergeServerCharge_SetDBPrizeStatus(human, v.nDay, nMoney, CommonDefine.COMMON_PRIZE_STATE_GET)
|
|
|
+ for _, tPrize in ipairs(v.tPrize) do
|
|
|
+ if not tItem[tPrize[1]] then
|
|
|
+ tItem[tPrize[1]] = 0
|
|
|
+ end
|
|
|
+
|
|
|
+ tItem[tPrize[1]] = tItem[tPrize[1]] + tPrize[2]
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ if nil ~= _G.next(tItem) then
|
|
|
+ local tPrize = {}
|
|
|
+ for nID, nNum in pairs(tItem) do
|
|
|
+ table.insert(tPrize, {nID, nNum})
|
|
|
+ end
|
|
|
+
|
|
|
+ BagLogic.addItemList(human, tPrize, "MergeCharge")
|
|
|
+ MergeServerCharge_Query(human, nIndex)
|
|
|
+
|
|
|
+ YunYingLogic.sendBanner(human)
|
|
|
+ MergeServerLogin.MergeServerLogin_SendRed(human)
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+----------------------------------------- 外部调用 -------------------------------------
|
|
|
+function isRed(human)
|
|
|
+ if false == MergeServerCharge_IsOpen() then
|
|
|
+ return false
|
|
|
+ end
|
|
|
+
|
|
|
+ MergeServerCharge_CheckDB(human)
|
|
|
+
|
|
|
+ if not human.db.MergeCharge then
|
|
|
+ return false
|
|
|
+ end
|
|
|
+
|
|
|
+ local tConf = MergeServerCharge_GetCof()
|
|
|
+ for _, v in ipairs(tConf) do
|
|
|
+ local nState = MergeServerCharge_GetDBPrizeStatus(human, v.nDay, v.nMoney)
|
|
|
+ if nState == CommonDefine.COMMON_PRIZE_STATE_CANGET then
|
|
|
+ return true
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ return false
|
|
|
+end
|
|
|
+
|
|
|
+function onCharge(human, price, funcID, buyID)
|
|
|
+ if false == MergeServerCharge_IsOpen() then
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ local tConf = MergeServerCharge_GetCof()
|
|
|
+ local bQuery = false
|
|
|
+
|
|
|
+ for _, nMoney in ipairs(tIndex2Money) do
|
|
|
+ local nBuyTime = MergeServerCharge_GetChargeTime(human, nMoney)
|
|
|
+ local nBuyDay = MergeServerCharge_GetBuyDay(human, nMoney)
|
|
|
+ if 0 == nBuyTime then
|
|
|
+ nBuyTime = os.time()
|
|
|
+ MergeServerCharge_SetChargeTime(human, nMoney, nBuyTime)
|
|
|
+ end
|
|
|
+
|
|
|
+ if 0 == nBuyDay then
|
|
|
+ nBuyDay = nBuyDay + 1
|
|
|
+ MergeServerCharge_SetBuyDay(human, nMoney, nBuyDay)
|
|
|
+ else
|
|
|
+ -- 跨天了
|
|
|
+ if nil == Util.isSameDay(nBuyTime) then
|
|
|
+ nBuyDay = nBuyDay + 1
|
|
|
+ MergeServerCharge_SetBuyDay(human, nMoney, nBuyDay)
|
|
|
+ nBuyTime = os.time()
|
|
|
+ MergeServerCharge_SetChargeTime(human, nMoney, nBuyTime)
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ MergeServerCharge_SetDBDayCharge(human, nBuyDay, nMoney, price)
|
|
|
+ local nNewChareNum = MergeServerCharge_GetDBDayCharge(human, nBuyDay, nMoney)
|
|
|
+ print("[MergeServerCharge_onCharge] 玩家充值增加对应的总充值金额 天数 nBuyDay = "..nBuyDay
|
|
|
+ .." 对应金额 nMoney = "..nMoney.." 增加的钱 price = "..price.." 总金额 nNewChareNum = "..nNewChareNum)
|
|
|
+ for _, v in ipairs(tConf) do
|
|
|
+ if v.nDay == nBuyDay and v.nMoney == nMoney then
|
|
|
+ local nStatus = MergeServerCharge_GetDBPrizeStatus(human, v.nDay, v.nMoney)
|
|
|
+ if nStatus == CommonDefine.COMMON_PRIZE_STATE_NOGET and nNewChareNum >= v.nMoney then
|
|
|
+ MergeServerCharge_SetDBPrizeStatus(human, v.nDay, v.nMoney, CommonDefine.COMMON_PRIZE_STATE_CANGET)
|
|
|
+ bQuery = true
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ if true == bQuery then
|
|
|
+ MergeServerLogin.MergeServerLogin_SendRed(human)
|
|
|
+ -- MergeServerCharge_Query(human, price)
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+function isOpen(human, YYInfo, funcConfig)
|
|
|
+ return MergeServerCharge_IsOpen()
|
|
|
+end
|
|
|
+
|
|
|
+function isActive(human, YYInfo, funcConfig)
|
|
|
+ return not isOpen(human, YYInfo, funcConfig)
|
|
|
+end
|
|
|
+
|
|
|
+function onLogin(human)
|
|
|
+ if false == MergeServerCharge_IsOpen() then
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ MergeServerCharge_CheckDB(human)
|
|
|
+
|
|
|
+ local bDispose = MergeServerCharge_GetDispose(human)
|
|
|
+ if false == bDispose then
|
|
|
+ MergeServerCharge_SetDispose(human, true)
|
|
|
+ local nNowCharge = human.db.topupAcountDaily
|
|
|
+ if nNowCharge and 0 < nNowCharge then
|
|
|
+ onCharge(human, nNowCharge)
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ local nNowTime = os.time()
|
|
|
+ for _, nMoney in ipairs(tIndex2Money) do
|
|
|
+ local nBuyTime = MergeServerCharge_GetChargeTime(human, nMoney)
|
|
|
+ local nBuyDay = MergeServerCharge_GetBuyDay(human, nMoney)
|
|
|
+ if true ~= Util.isSameDayByTimes(nNowTime, nBuyTime) and nBuyDay ~= 0 then
|
|
|
+ local nAllMoney = MergeServerCharge_GetDBDayCharge(human, nBuyDay, nMoney)
|
|
|
+ if nAllMoney < nMoney and 0 < nAllMoney then
|
|
|
+ MergeServerCharge_SetDBDayCharge(human, nBuyDay, nMoney, -nAllMoney)
|
|
|
+ MergeServerCharge_SetChargeTime(human, nMoney, 0)
|
|
|
+ print("[MergeServerCharge_onLogin] 玩家登录 重置对应不达标数据 nBuyDay = "..nBuyDay.." 对应金额 nMoney = "..nMoney.." 充值数 nAllMoney = "..nAllMoney)
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+function onZero(human, funcID)
|
|
|
+ if false == MergeServerCharge_IsOpen() then
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ MergeServerCharge_CheckDB(human)
|
|
|
+
|
|
|
+ for _, nMoney in ipairs(tIndex2Money) do
|
|
|
+ -- local nBuyTime = MergeServerCharge_GetChargeTime(human, nMoney)
|
|
|
+ local nBuyDay = MergeServerCharge_GetBuyDay(human, nMoney)
|
|
|
+
|
|
|
+ local nAllMoney = MergeServerCharge_GetDBDayCharge(human, nBuyDay, nMoney)
|
|
|
+ if nAllMoney < nMoney and 0 < nAllMoney then
|
|
|
+ MergeServerCharge_SetDBDayCharge(human, nBuyDay, nMoney, -nAllMoney)
|
|
|
+ MergeServerCharge_SetChargeTime(human, nMoney, 0)
|
|
|
+ print("[MergeServerCharge_onZero] 零点刷新 重置对应不达标数据 nBuyDay = "..nBuyDay.." 对应金额 nMoney = "..nMoney.." 充值数 nAllMoney = "..nAllMoney)
|
|
|
+ end
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+function MergeServerCharge_GMReset(human, nDay)
|
|
|
+ for _, v in ipairs(tIndex2Money) do
|
|
|
+ human.db.MergeCharge.tPrizeData[nDay].tMoney[v]=
|
|
|
+ {
|
|
|
+ nStatus = CommonDefine.COMMON_PRIZE_STATE_NOGET,
|
|
|
+ nMoney = 0,
|
|
|
+ }
|
|
|
+ end
|
|
|
+end
|