OneKillGift.lua 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. -----------------------------------------------------------------
  2. -- 文件名 : OneKillGift.lua
  3. -- 文件说明 : 一元礼包
  4. -- 创建时间 : 2025/07/22
  5. -- 创建人 : FC
  6. -----------------------------------------------------------
  7. local Msg = require("core.Msg")
  8. local Util = require("common.Util")
  9. local Grid = require("bag.Grid")
  10. local OnekillConf = require("excel.OneKillGift")
  11. local BuyLogic = require("topup.BuyLogic")
  12. local BagLogic = require("bag.BagLogic")
  13. local Grid = require("bag.Grid")
  14. local ObjHuman = require("core.ObjHuman")
  15. local ONEKILLGIFT_MAXBUYNUM = 10 -- 最大购买次数
  16. local ONEKILLGIFT_NOJINGBI = 1 -- 金币不足
  17. local ONEKILLGIFT_SHOW = 2 -- 展示
  18. local ONEKILLGIFT_ONLOGIN = 3 -- 登录
  19. local ONEKILLGIFT_NOSEND = 1 -- 不发送
  20. local nDurationTime = 4 * 60 * 60 -- 4小时
  21. ----------------------------------------- 内部处理开始 -------------------------------------
  22. local function OneKillGift_CreateDB(human)
  23. human.db.OneKillGift = {
  24. nBuyNum = 0,
  25. nEndTime = 0, -- 每轮结束时间
  26. nNoShow = 0,
  27. nBeginTime = os.time()
  28. }
  29. end
  30. local function OneKillGift_CheckCreate(human)
  31. if not human.db.OneKillGift then
  32. OneKillGift_CreateDB(human)
  33. end
  34. end
  35. local function OneKillGift_ResetDB(human)
  36. OneKillGift_CreateDB(human)
  37. end
  38. -- 购买后操作
  39. local function OneKillGift_BuyGift(human)
  40. human.db.OneKillGift.nBuyNum = human.db.OneKillGift.nBuyNum + 1
  41. human.db.OneKillGift.nEndTime = 0
  42. if human.db.OneKillGift.nBuyNum >= ONEKILLGIFT_MAXBUYNUM then
  43. human.db.OneKillGift.nNoShow = 1
  44. end
  45. end
  46. -- 获取购买次数
  47. local function OneKillGift_GetBuyNum(human)
  48. return human.db.OneKillGift.nBuyNum
  49. end
  50. -- 获取结束时间
  51. local function OneKillGift_GetEndTime(human)
  52. return human.db.OneKillGift.nEndTime
  53. end
  54. -- 获取是否显示
  55. local function OneKillGift_GetShow(human)
  56. return human.db.OneKillGift.nNoShow
  57. end
  58. -- 获取开始时间
  59. local function OneKillGift_GetBeginTime(human)
  60. return human.db.OneKillGift.nBeginTime
  61. end
  62. -- 设置结束时间
  63. local function OneKillGift_SetEndTime(human, nValue)
  64. human.db.OneKillGift.nEndTime = nValue
  65. end
  66. -- 设置是否显示
  67. local function OneKillGift_SetShow(human, nValue)
  68. human.db.OneKillGift.nNoShow = nValue
  69. end
  70. -- 发送数据
  71. function OneKillGift_SendMsg(human, bIsOpen)
  72. local nNowTime = os.time()
  73. local nBuyNum = OneKillGift_GetBuyNum(human)
  74. local nNextBuyNum = nBuyNum + 1
  75. local tConf = OnekillConf.Sheet1[nNextBuyNum]
  76. if not tConf then
  77. print("[OneKillGift_SendMsg] 不存在对应的配置 nBuyNum = "..nBuyNum.." nNextBuyNum = "..nNextBuyNum)
  78. return
  79. end
  80. local tMsgData = Msg.gc.GC_ONEKILLGIFT_QUERY
  81. tMsgData.nBuyNum = nBuyNum
  82. tMsgData.bIsOpen = bIsOpen
  83. tMsgData.nLeftTime = OneKillGift_GetEndTime(human) - nNowTime
  84. print("[OneKillGift_SendMsg] nBuyNum = "..tMsgData.nBuyNum.." bIsOpen = "..tMsgData.bIsOpen.." nLeftTime = "..tMsgData.nLeftTime)
  85. BuyLogic.fontBuyItem(human, tMsgData.buyItem, tConf.nBuyID)
  86. --table.print_lua_table(tMsgData.buyItem)
  87. tMsgData.tList[0] = #tConf.tPrize
  88. for i, v in ipairs(tConf.tPrize) do
  89. print("[OneKillGift_SendMsg] i = "..i.." nGoodsID = "..v[1].." nGoodsNum = "..v[2])
  90. Grid.makeItem(tMsgData.tList[i], v[1], v[2])
  91. -- table.print_lua_table(tMsgData.tList[i])
  92. end
  93. Msg.send(tMsgData, human.fd)
  94. print("[OneKillGift_SendMsg] 发送数据完成")
  95. end
  96. ----------------------------------------- 客户端请求 -------------------------------------
  97. function OneKillGiftLogic_Query(human, bOperate)
  98. print("[OneKillGiftLogic_Query] 收到消息")
  99. local bIsOpen = ONEKILLGIFT_ONLOGIN == bOperate and 0 or 1
  100. OneKillGift_CheckCreate(human)
  101. local bShow = OneKillGift_GetShow(human)
  102. if ONEKILLGIFT_NOSEND == bShow then
  103. print("[OneKillGiftLogic_Query] 当前已经设置了不再展示,直接返回")
  104. return
  105. end
  106. local nNowTime = os.time()
  107. local nOldEndTime = OneKillGift_GetEndTime(human)
  108. if nNowTime >= nOldEndTime and 0 ~= nOldEndTime then
  109. print("[OneKillGiftLogic_Query] 当前结束时间不为0, 且当前时间大于结束时间,设置为不展示直接返回")
  110. OneKillGift_SetShow(human, ONEKILLGIFT_NOSEND)
  111. return
  112. end
  113. if ONEKILLGIFT_NOJINGBI == bOperate then
  114. if nOldEndTime ~= 0 and nOldEndTime > nNowTime then
  115. print("[OneKillGiftLogic_Query] 当前结束时间不为0, 且结束时间大于当前时间,")
  116. return
  117. end
  118. local nEndTime = nNowTime + nDurationTime
  119. OneKillGift_SetEndTime(human, nEndTime)
  120. end
  121. OneKillGift_SendMsg(human, bIsOpen)
  122. print("[OneKillGiftLogic_Query] 发送客户端协议完成")
  123. end
  124. function onLogin(human)
  125. print("[OneKillGift_onLogin] 玩家登录")
  126. OneKillGift_CheckCreate(human)
  127. local nOldEndTime = OneKillGift_GetEndTime(human)
  128. local nNowTime = os.time()
  129. local nBeginTime = OneKillGift_GetBeginTime(human)
  130. if true ~= Util.isSameDayByTimes(nBeginTime, nNowTime) then
  131. print("[OneKillGift_onLogin] 不是同一天进行重置")
  132. OneKillGift_ResetDB(human)
  133. else
  134. if nOldEndTime > nNowTime then
  135. print("[OneKillGift_onLogin] 当前结束时间大于当前时间发送数据")
  136. OneKillGiftLogic_Query(human, ONEKILLGIFT_ONLOGIN)
  137. else
  138. if 0 < nOldEndTime then
  139. OneKillGift_SetShow(human, ONEKILLGIFT_NOSEND)
  140. print("[OneKillGift_onLogin] 玩家未购买且结束时间不为0直接不弹")
  141. end
  142. end
  143. end
  144. end
  145. function onCharge(human, nBuyID)
  146. local nBuyNum = OneKillGift_GetBuyNum(human)
  147. local tConf = OnekillConf.Sheet1[nBuyNum + 1]
  148. if tConf and tConf.nBuyID == nBuyID then
  149. BagLogic.addItemList(human, tConf.tPrize, "onekillgift")
  150. OneKillGift_BuyGift(human)
  151. local tMsgData = Msg.gc.GC_ONEKILLGIFT_CLOSE
  152. Msg.send(tMsgData, human.fd)
  153. end
  154. end
  155. function onZero()
  156. -- 遍历在线玩家
  157. for uuid, human in pairs(ObjHuman.onlineUuid) do
  158. local tMsgData = Msg.gc.GC_ONEKILLGIFT_CLOSE
  159. Msg.send(tMsgData, human.fd)
  160. OneKillGift_ResetDB(human)
  161. end
  162. end