| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- -----------------------------------------------------------------
- -- 文件名 : OneKillGift.lua
- -- 文件说明 : 一元礼包
- -- 创建时间 : 2025/07/22
- -- 创建人 : FC
- -----------------------------------------------------------
- local Msg = require("core.Msg")
- local Util = require("common.Util")
- local Grid = require("bag.Grid")
- local OnekillConf = require("excel.OneKillGift")
- local BuyLogic = require("topup.BuyLogic")
- local BagLogic = require("bag.BagLogic")
- local Grid = require("bag.Grid")
- local ObjHuman = require("core.ObjHuman")
- local ONEKILLGIFT_MAXBUYNUM = 10 -- 最大购买次数
- local ONEKILLGIFT_NOJINGBI = 1 -- 金币不足
- local ONEKILLGIFT_SHOW = 2 -- 展示
- local ONEKILLGIFT_ONLOGIN = 3 -- 登录
- local ONEKILLGIFT_NOSEND = 1 -- 不发送
- local nDurationTime = 4 * 60 * 60 -- 4小时
- ----------------------------------------- 内部处理开始 -------------------------------------
- local function OneKillGift_CreateDB(human)
- human.db.OneKillGift = {
- nBuyNum = 0,
- nEndTime = 0, -- 每轮结束时间
- nNoShow = 0,
- nBeginTime = os.time()
- }
- end
- local function OneKillGift_CheckCreate(human)
- if not human.db.OneKillGift then
- OneKillGift_CreateDB(human)
- end
- end
- local function OneKillGift_ResetDB(human)
- OneKillGift_CreateDB(human)
- end
- -- 购买后操作
- local function OneKillGift_BuyGift(human)
- human.db.OneKillGift.nBuyNum = human.db.OneKillGift.nBuyNum + 1
- human.db.OneKillGift.nEndTime = 0
- if human.db.OneKillGift.nBuyNum >= ONEKILLGIFT_MAXBUYNUM then
- human.db.OneKillGift.nNoShow = 1
- end
- end
- -- 获取购买次数
- local function OneKillGift_GetBuyNum(human)
- return human.db.OneKillGift.nBuyNum
- end
- -- 获取结束时间
- local function OneKillGift_GetEndTime(human)
- return human.db.OneKillGift.nEndTime
- end
- -- 获取是否显示
- local function OneKillGift_GetShow(human)
- return human.db.OneKillGift.nNoShow
- end
- -- 获取开始时间
- local function OneKillGift_GetBeginTime(human)
- return human.db.OneKillGift.nBeginTime
- end
- -- 设置结束时间
- local function OneKillGift_SetEndTime(human, nValue)
- human.db.OneKillGift.nEndTime = nValue
- end
- -- 设置是否显示
- local function OneKillGift_SetShow(human, nValue)
- human.db.OneKillGift.nNoShow = nValue
- end
- -- 发送数据
- function OneKillGift_SendMsg(human, bIsOpen)
- local nNowTime = os.time()
- local nBuyNum = OneKillGift_GetBuyNum(human)
- local nNextBuyNum = nBuyNum + 1
- local tConf = OnekillConf.Sheet1[nNextBuyNum]
- if not tConf then
- print("[OneKillGift_SendMsg] 不存在对应的配置 nBuyNum = "..nBuyNum.." nNextBuyNum = "..nNextBuyNum)
- return
- end
- local tMsgData = Msg.gc.GC_ONEKILLGIFT_QUERY
- tMsgData.nBuyNum = nBuyNum
- tMsgData.bIsOpen = bIsOpen
- tMsgData.nLeftTime = OneKillGift_GetEndTime(human) - nNowTime
- print("[OneKillGift_SendMsg] nBuyNum = "..tMsgData.nBuyNum.." bIsOpen = "..tMsgData.bIsOpen.." nLeftTime = "..tMsgData.nLeftTime)
- BuyLogic.fontBuyItem(human, tMsgData.buyItem, tConf.nBuyID)
- --table.print_lua_table(tMsgData.buyItem)
- tMsgData.tList[0] = #tConf.tPrize
- for i, v in ipairs(tConf.tPrize) do
- print("[OneKillGift_SendMsg] i = "..i.." nGoodsID = "..v[1].." nGoodsNum = "..v[2])
- Grid.makeItem(tMsgData.tList[i], v[1], v[2])
- -- table.print_lua_table(tMsgData.tList[i])
- end
- Msg.send(tMsgData, human.fd)
- print("[OneKillGift_SendMsg] 发送数据完成")
- end
- ----------------------------------------- 客户端请求 -------------------------------------
- function OneKillGiftLogic_Query(human, bOperate)
- print("[OneKillGiftLogic_Query] 收到消息")
- local bIsOpen = ONEKILLGIFT_ONLOGIN == bOperate and 0 or 1
- OneKillGift_CheckCreate(human)
- local bShow = OneKillGift_GetShow(human)
- if ONEKILLGIFT_NOSEND == bShow then
- print("[OneKillGiftLogic_Query] 当前已经设置了不再展示,直接返回")
- return
- end
- local nNowTime = os.time()
- local nOldEndTime = OneKillGift_GetEndTime(human)
- if nNowTime >= nOldEndTime and 0 ~= nOldEndTime then
- print("[OneKillGiftLogic_Query] 当前结束时间不为0, 且当前时间大于结束时间,设置为不展示直接返回")
- OneKillGift_SetShow(human, ONEKILLGIFT_NOSEND)
- return
- end
- if ONEKILLGIFT_NOJINGBI == bOperate then
- if nOldEndTime ~= 0 and nOldEndTime > nNowTime then
- print("[OneKillGiftLogic_Query] 当前结束时间不为0, 且结束时间大于当前时间,")
- return
- end
- local nEndTime = nNowTime + nDurationTime
- OneKillGift_SetEndTime(human, nEndTime)
- end
- OneKillGift_SendMsg(human, bIsOpen)
- print("[OneKillGiftLogic_Query] 发送客户端协议完成")
- end
- function onLogin(human)
- print("[OneKillGift_onLogin] 玩家登录")
- OneKillGift_CheckCreate(human)
-
- local nOldEndTime = OneKillGift_GetEndTime(human)
- local nNowTime = os.time()
- local nBeginTime = OneKillGift_GetBeginTime(human)
- if true ~= Util.isSameDayByTimes(nBeginTime, nNowTime) then
- print("[OneKillGift_onLogin] 不是同一天进行重置")
- OneKillGift_ResetDB(human)
- else
- if nOldEndTime > nNowTime then
- print("[OneKillGift_onLogin] 当前结束时间大于当前时间发送数据")
- OneKillGiftLogic_Query(human, ONEKILLGIFT_ONLOGIN)
- else
- if 0 < nOldEndTime then
- OneKillGift_SetShow(human, ONEKILLGIFT_NOSEND)
- print("[OneKillGift_onLogin] 玩家未购买且结束时间不为0直接不弹")
- end
- end
- end
- end
- function onCharge(human, nBuyID)
- local nBuyNum = OneKillGift_GetBuyNum(human)
- local tConf = OnekillConf.Sheet1[nBuyNum + 1]
- if tConf and tConf.nBuyID == nBuyID then
- BagLogic.addItemList(human, tConf.tPrize, "onekillgift")
- OneKillGift_BuyGift(human)
- local tMsgData = Msg.gc.GC_ONEKILLGIFT_CLOSE
- Msg.send(tMsgData, human.fd)
- end
- end
- function onZero()
- -- 遍历在线玩家
- for uuid, human in pairs(ObjHuman.onlineUuid) do
- local tMsgData = Msg.gc.GC_ONEKILLGIFT_CLOSE
- Msg.send(tMsgData, human.fd)
- OneKillGift_ResetDB(human)
- end
- end
|