| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431 |
- --------------------------------
- -- 文件名 : 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 MERGESERVERCHARGE_MAXDAY = 10
- ----------------------------------------- 内部处理开始 -------------------------------------
- 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 =
- {
- nBeginTime = CommonDB.getMergeServerTime(),
- 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)
- else
- if human.db.MergeCharge.nBeginTime then
- local nNowBeginTime = CommonDB.getMergeServerTime()
- if nNowBeginTime ~= human.db.MergeLogin.nBeginTime then
- MergeServerCharge_CreatDB(human)
- end
- end
- 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
- if nBuyDay <= MERGESERVERCHARGE_MAXDAY then
- MergeServerCharge_SetBuyDay(human, nMoney, nBuyDay)
- end
- nBuyTime = os.time()
- MergeServerCharge_SetChargeTime(human, nMoney, nBuyTime)
- end
- end
- nBuyDay = (nBuyDay > MERGESERVERCHARGE_MAXDAY) and MERGESERVERCHARGE_MAXDAY or nBuyDay
- print("[MergeServerCharge_onCharge] 111 玩家充值增加对应的总充值金额 天数 nBuyDay = "..nBuyDay
- .." 对应金额 nMoney = "..nMoney.." 增加的钱 price = "..price)
-
- 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
|