|
|
@@ -0,0 +1,195 @@
|
|
|
+-----------------------------------------------------------------
|
|
|
+-- 文件名 : 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
|