-------------------------------- -- 文件名 : ServerCommerceActCharge.lua -- 文件说明 : 跨服商业-连充豪礼 -- 创建时间 : 2025/03/31 -- 创建人 : 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 ServerCommerceConf = require("excel.ServerCommerce") local ServerCommerceManager = require("serverCommerce.ServerCommerceManager") ----------------------------------------- 内部处理开始 ------------------------------------- -- 获取配置 local function CommerceActCharge_GetCof() return ServerCommerceConf.CommerceCharge end -- 初始化DB数据() function CreatDB(human) if not human.db.ServerCommerce or not human.db.ServerCommerce.Charge then print("[CommerceActCharge_CreatDB] 初始化数据失败 name = "..human.db.name) return false end local tConf = CommerceActCharge_GetCof() for _, v in ipairs(tConf) do if not human.db.ServerCommerce.Charge[v.nMoney] then human.db.ServerCommerce.Charge[v.nMoney] = {} end if not human.db.ServerCommerce.Charge[v.nMoney][v.nDay] then human.db.ServerCommerce.Charge[v.nMoney][v.nDay] = { nBuyTime = 0, nStatus = CommonDefine.COMMON_PRIZE_STATE_NOGET, nAllMoney = 0, } else print("[CommerceActCharge_CreateDB] 配置了重复的数据") return false end end return true end -- 获取天数数据 local function CommerceActCharge_GetDBByDay(human, nMoney, nDay) if not human.db.ServerCommerce.Charge[nMoney] then return nil end if not human.db.ServerCommerce.Charge[nMoney][nDay] then return nil end return human.db.ServerCommerce.Charge[nMoney][nDay] end -- 获取金钱对应数据 local function CommerceActCharge_GetDBByMoney(human, nMoney) if not human.db.ServerCommerce.Charge[nMoney] then return nil end return human.db.ServerCommerce.Charge[nMoney] end -- 设置天数数据 local function CommerceActCharge_SetDBByDay(human, nMoney, nDay, nTime) human.db.ServerCommerce.Charge[nMoney][nDay].nBuyTime = nTime end -- 设置奖励状态 local function CommerceActCharge_SetDBPrizeByDay(human, nMoney, nDay, nStatus) human.db.ServerCommerce.Charge[nMoney][nDay].nStatus = nStatus end -- 设置天数数据 local function CommerceActCharge_SetDBAllMoneyByDay(human, nMoney, nDay, nAddMoney) human.db.ServerCommerce.Charge[nMoney][nDay].nAllMoney = human.db.ServerCommerce.Charge[nMoney][nDay].nAllMoney + nAddMoney end ----------------------------------------- 客户端请求处理开始 ------------------------------------- -- 请求数据 function CommerceActCharge_Query(human, nMoney) local tConf = CommerceActCharge_GetCof() local tMsgData = Msg.gc.GC_SERVEERCOMMERCE_ACT_CHARGEQUERY tMsgData.nMoney = nMoney local nChargeDay, nLen = 0, 0 for nID, v in ipairs(tConf) do if v.nMoney == nMoney then local tDayData = CommerceActCharge_GetDBByDay(human, nMoney, v.nDay) if nil == tDayData then print("[CommerceActCharge_Query] 不存在对应的数据") else nChargeDay = tDayData.nBuyTime ~= 0 and nChargeDay + 1 or nChargeDay nLen = nLen + 1 tMsgData.list[0] = nLen local tPrizeData = tMsgData.list[nLen] tPrizeData.nID = nID tPrizeData.nState = tDayData.nStatus tPrizeData.nDay = v.nDay tPrizeData.nAllMoney = tDayData.nAllMoney tPrizeData.item[0] = #v.Prize for nIndex, tItem in ipairs(v.Prize) do local nGoodsID = tItem[1] local nGoodsNum = tItem[2] Grid.makeItem(tPrizeData.item[nIndex], nGoodsID, nGoodsNum) end end end end tMsgData.nChargeDay = nChargeDay Msg.send(tMsgData, human.fd) end -- 请求领取奖励 function CommerceActCharge_GetPrize(human, nMoney) local tConf = CommerceActCharge_GetCof() local tItem = {} for nID, v in ipairs(tConf) do if v.nMoney == nMoney then local tDayData = CommerceActCharge_GetDBByDay(human, nMoney, v.nDay) if tDayData then if CommonDefine.COMMON_PRIZE_STATE_CANGET == tDayData.nState then CommerceActCharge_SetDBPrizeByDay(human, nMoney, v.nDay, CommonDefine.COMMON_PRIZE_STATE_GET) for _, tPrize in ipairs(v.Prize) do if not tItem[tPrize[1]] then tItem[tPrize[1]] = 0 end tItem[tPrize[1]] = tItem[tPrize[1]] + tPrize[2] end end end end end local tPrize = {} for nID, nNum in pairs(tItem) do table.insert(tPrize, {nID, nNum}) end BagLogic.addItemList(human, tPrize, "servercommerce") CommerceActCharge_Query(human, nMoney) end ----------------------------------------- 外部调用 ------------------------------------- function isRed(human) if not human.db.ServerCommerce or not human.db.ServerCommerce.Charge then return false end local tConf = CommerceActCharge_GetCof() for _, v in ipairs(tConf) do local tDayData = CommerceActCharge_GetDBByDay(human, v.nMoney, v.nDay) if tDayData and tDayData.nStatus == CommonDefine.COMMON_PRIZE_STATE_CANGET then return true end end return false end function onCharge(human, price, funcID, buyID) local tConf = CommerceActCharge_GetCof() local nNowTime = os.time() local bQuery = false for _, v in ipairs(tConf) do local nDay = v.nDay local tDayData = CommerceActCharge_GetDBByDay(human, v.nMoney, nDay) if v.nMoney == price then if tDayData then if tDayData.nBuyTime == 0 then CommerceActCharge_SetDBByDay(human, v.nMoney, nDay, nNowTime) CommerceActCharge_SetDBPrizeByDay(human, v.nMoney, nDay, CommonDefine.COMMON_PRIZE_STATE_CANGET) bQuery = true break else if true == Util.isSameDayByTimes(tDayData.nBuyTime, nNowTime) then bQuery = true CommerceActCharge_SetDBAllMoneyByDay(human, v.nMoney, nDay, price) break end end else print("[onCharge] 跨服商业活动充值获取不到DB数据 name = "..human.db.name.." price = "..price) end end if tDayData and true == Util.isSameDayByTimes(tDayData.nBuyTime, nNowTime) then bQuery = true CommerceActCharge_SetDBAllMoneyByDay(human, v.nMoney, nDay, price) end end if true == bQuery then CommerceActCharge_Query(human, price) end end