4 Коміти 6a6d12195c ... cd681f8861

Автор SHA1 Опис Дата
  gitxsm cd681f8861 七日盛典-定制礼包活动改为不再清除上一次选择的道具 5 днів тому
  gitxsm e31aa55edb 装备最高品质提升后相关处理 6 днів тому
  gitxsm 8b515c010b 商店数据改为分段发送 6 днів тому
  gitxsm 5256138e46 部分活动礼包改为可批量购买 6 днів тому

+ 3 - 1
script/common/Lang.lua

@@ -482,6 +482,7 @@ TOMORROW_OPEN = [[暂未开启]]
 
 ABS_ITEM_ERR = [[道具不足]]
 ABS_SNOWBALL_ERR = [[所有礼包已激活]]
+ABS_GIFT_BUY_LIMIT = [[礼包已达可购买上限]]
 ABS_SNOWDRESS_NEED_ERR = [[需要先装扮前面的]]
 
 CHAT_UNION_YQSUCESS = [[邀请成功]]
@@ -543,7 +544,7 @@ ABS_ARBORDAY_MAYI_DESC_4 = [[活动期间每进行一竞技场挑战可获得1
 ABS_ZHANBU_LUNPAN_ERR = [[占卜轮盘奖励已全部获取,无法再获取了]]
 ABS_SURPRISE_CHEST_GET_SUCESS = [[领取成功]]
 
-ABS_JYZH_NOT_OPEN = [[服务器≥5天且每周五维护后开启]]
+ABS_JYZH_NOT_OPEN = [[服务器≥2天且每周五维护后开启]]
 
 SKIN_CONF_ERR = [[配置错误]]
 SKIN_PARAM_ERR = [[参数错误]]
@@ -817,6 +818,7 @@ NO_HERO = [[没有符合的英雄]]
 
 MUST_SELECT_ONE = [[请至少选择一个材料]]
 NUM_EXCEED = [[数量超出]]
+VOUCHER_NOT_ENOUGH = [[代金券不足]]
 
 
 ---------------诸神圣域---------------

+ 31 - 28
script/module/absAct/BusOneActivityBuy.lua

@@ -96,25 +96,25 @@ end
 function BusOneBuy_Buy(human, nID)
     local tConf = tBuyConf[nID]
     if not tConf then
-        print("[BusOneBuy_Buy] 不存在对应的配置 返回 nID = "..nID)
+        -- print("[BusOneBuy_Buy] 不存在对应的配置 返回 nID = "..nID)
         return
     end
 
     if tConf.nType == BUSONEBUY_TYPE_MONEY then
-        print("[BusOneBuy_Buy] 配置对应的类型不正确 返回 nID = "..nID.." nType = "..tConf.nType)
+        -- print("[BusOneBuy_Buy] 配置对应的类型不正确 返回 nID = "..nID.." nType = "..tConf.nType)
         return
     end
 
     local nNowBuyNum = BusOneBuy_GetBuyNum(human, nID)
     if nNowBuyNum >= tConf.nBuyNum then
-        print("[BusOneBuy_Buy] 当前购买的次数大于可购买的次数 返回 nID = "..nID.." nType = "
-                ..tConf.nType.." nNowBuyNum = "..nNowBuyNum)
+        -- print("[BusOneBuy_Buy] 当前购买的次数大于可购买的次数 返回 nID = "..nID.." nType = "
+        --         ..tConf.nType.." nNowBuyNum = "..nNowBuyNum)
         return
     end
 
     if not ObjHuman.checkRMB(human, tConf.nPrize) then
-        print("[BusOneBuy_Buy] 当前购买的金币不足 返回 nID = "..nID.." nType = "
-            ..tConf.nType.." nNowBuyNum = "..nNowBuyNum)
+        -- print("[BusOneBuy_Buy] 当前购买的金币不足 返回 nID = "..nID.." nType = "
+        --     ..tConf.nType.." nNowBuyNum = "..nNowBuyNum)
 		return
 	end
 	
@@ -128,7 +128,8 @@ function BusOneBuy_Buy(human, nID)
     BusOneBuy_Query(human)
 end
 
-function BusOneBuy_Get(human)
+function BusOneBuy_Get(human, itemMul)
+    itemMul = itemMul or 1
     local tItem = {}
     for nID, v in pairs(tBuyConf) do
         local nStatus = BusOneBuy_GetBuyStatus(human, nID)
@@ -138,7 +139,7 @@ function BusOneBuy_Get(human)
                     tItem[tData[1]] = 0
                 end
 
-                tItem[tData[1]] = tItem[tData[1]] + tData[2]
+                tItem[tData[1]] = tItem[tData[1]] + tData[2] * itemMul
             end
 
             local nNowBuyNum = BusOneBuy_GetBuyNum(human, nID)
@@ -164,14 +165,14 @@ end
 
 -----------------------------------外部调用-----------------------------
 function isOpen(human, YYInfo, funcConfig)
-    print("[BusOneActivityBuy_isOpen] 进入判断")
+    -- print("[BusOneActivityBuy_isOpen] 进入判断")
     local state, endTime, startTime = AbsActLogic.isStarted(human, funcConfig and funcConfig.funcID or BUSONEBUYABSID)
     if not state then 
         print("[BusOneActivityBuy_isOpen] 当前活动未开启")
         return 
     end
 
-    print("[BusOneActivityBuy_isOpen] 进入判断 endTime = "..endTime.." startTime = "..startTime)
+    -- print("[BusOneActivityBuy_isOpen] 进入判断 endTime = "..endTime.." startTime = "..startTime)
     return true, endTime, startTime
 end
 
@@ -193,38 +194,40 @@ function isRed(human, YYInfo, absActConfig)
 end
 
 function onCharge(human, price, funcID, buyID, buyNum)
-    print("[BusOneActivityBuy_onCharge] 进入购买 buyID = "..buyID)
+    -- print("[BusOneActivityBuy_onCharge] 进入购买 buyID = "..buyID)
     local bRed = false
     for nID, v in pairs(tBuyConf) do
         if buyID == v.nBuyID then
             local nStatus = BusOneBuy_GetBuyStatus(human, nID)
             if nStatus == CommonDefine.COMMON_PRIZE_STATE_NOGET then
                 BusOneBuy_SetBuyStatus(human, nID, CommonDefine.COMMON_PRIZE_STATE_CANGET)
-                BusOneBuy_SetBuyNum(human, nID, 1)
+                -- BusOneBuy_SetBuyNum(human, nID, 1)
+                BusOneBuy_SetBuyNum(human, nID, buyNum)
                 bRed = true
             end
         end
     end
 
     if true == bRed then
-        print("[BusOneActivityBuy_onCharge] 进入发送数据 buyID = "..buyID)
-        BusOneBuy_Get(human)
+        -- print("[BusOneActivityBuy_onCharge] 进入发送数据 buyID = "..buyID)
+        BusOneBuy_Get(human, buyNum)
         YunYingLogic.sendBanner(human)
         BusOneActivityTask.BusOneTask_SendRed(human)
     end
 end
 
--- function GetRemainNum(human, nBuyID)
---     for nID, v in pairs(tBuyConf) do
---         if nBuyID == v.nBuyID then
---             local nBuyNum = BusOneBuy_GetBuyNum(human, nID)
---             if v.nBuyNum > nBuyNum then
---                 return 1
---             else
---                 return 0
---             end
---         end
---     end
-
---     return 0
--- end
+function GetRemainNum(human, nBuyID)
+    for nID, v in pairs(tBuyConf) do
+        if nBuyID == v.nBuyID then
+            local nBuyNum = BusOneBuy_GetBuyNum(human, nID)
+            if v.nBuyNum > nBuyNum then
+                -- return 1
+                return v.nBuyNum - nBuyNum
+            else
+                return 0
+            end
+        end
+    end
+
+    return 0
+end

+ 35 - 35
script/module/absAct/PremiumGiftLogic.lua

@@ -100,15 +100,15 @@ function premiumGift(human, id, buyConf, isFirst, cnt, buyNum)
         return
     end
 
-    -- if nowBuyCnt + buyNum > config.cnt then
-    --     Broadcast.sendErr(human, Lang.HERO_BAG_BUY_CAP_NO_CNT)
-    --     return
-    -- end
+    if nowBuyCnt + buyNum > config.cnt then
+        Broadcast.sendErr(human, Lang.HERO_BAG_BUY_CAP_NO_CNT)
+        return
+    end
 
     -- 当金币购买之后超过最大金币时,不允许购买
     for j = 1, #config.reward do
         local itemID = config.reward[j][1]
-        local itemCnt = config.reward[j][2]
+        local itemCnt = config.reward[j][2] * buyNum
         if itemID == ItemDefine.ITEM_JINBI_ID then
             if not ObjHuman.canAddJinbi(human, itemCnt) then
                 return
@@ -117,19 +117,19 @@ function premiumGift(human, id, buyConf, isFirst, cnt, buyNum)
     end
 
     -- -- 增加已购买次数
-    -- human.db.absAct[id].premiumCnt[premiumID] = nowBuyCnt + buyNum
-    -- -- 发放物品
-    -- local items = { }
-    -- for _, v in ipairs(AbsActExcel.premiumGift[premiumID].reward) do
-    --     table.insert(items, {v[1], v[2]*buyNum})
-    -- end
-    -- BagLogic.addItemList(human, items, "premium_reward")
+    human.db.absAct[id].premiumCnt[premiumID] = nowBuyCnt + buyNum
+    -- 发放物品
+    local items = { }
+    for _, v in ipairs(AbsActExcel.premiumGift[premiumID].reward) do
+        table.insert(items, {v[1], v[2]*buyNum})
+    end
+    BagLogic.addItemList(human, items, "premium_reward")
 
     -- 增加已购买次数
-    human.db.absAct[id].premiumCnt[premiumID] = nowBuyCnt + 1
-    -- 发放物品
-    -- local items = { }
-    BagLogic.addItemList(human, AbsActExcel.premiumGift[premiumID].reward, "premium_reward")
+    -- human.db.absAct[id].premiumCnt[premiumID] = nowBuyCnt + 1
+    -- -- 发放物品
+    -- -- local items = { }
+    -- BagLogic.addItemList(human, AbsActExcel.premiumGift[premiumID].reward, "premium_reward")
 
     Broadcast.sendErr(human, Lang.ITEM_BUY_SUCCESS)
     AbsActLogic.actDetailQuery(human, id)
@@ -248,22 +248,22 @@ function giftBuy(human, id, premiumID)
     AbsActLogic.actDetailQuery(human, id)
 end
 
--- function GetRemainNum(human, nBuyID)
---     local premiumID = ABS_PREMIUM_GIFT_LIST_BUYID[nBuyID]
---     if not premiumID then
---         return 0
---     end
-
---     local config = AbsActExcel.premiumGift[premiumID]
---     if not config then return 0 end
-
---     if not human.db.absAct[ABC_PREMIUM_GIFT_ACT_ID].premiumCnt then
---         return 0
---     end
-
---     if not human.db.absAct[ABC_PREMIUM_GIFT_ACT_ID].premiumCnt[premiumID] then
---         return config.cnt
---     else
---         return config.cnt - human.db.absAct[ABC_PREMIUM_GIFT_ACT_ID].premiumCnt[premiumID]
---     end
--- end
+function GetRemainNum(human, nBuyID)
+    local premiumID = ABS_PREMIUM_GIFT_LIST_BUYID[nBuyID]
+    if not premiumID then
+        return 0
+    end
+
+    local config = AbsActExcel.premiumGift[premiumID]
+    if not config then return 0 end
+
+    if not human.db.absAct[ABC_PREMIUM_GIFT_ACT_ID].premiumCnt then
+        return config.cnt
+    end
+
+    if not human.db.absAct[ABC_PREMIUM_GIFT_ACT_ID].premiumCnt[premiumID] then
+        return config.cnt
+    else
+        return config.cnt - human.db.absAct[ABC_PREMIUM_GIFT_ACT_ID].premiumCnt[premiumID]
+    end
+end

+ 40 - 39
script/module/absAct/SpecialCustomLogic.lua

@@ -238,7 +238,7 @@ function customBuy(human,args,id, bFromPay, buyNum)
         return
     end
 
-    -- buyNum = buyNum or 1
+    buyNum = buyNum or 1
 
     -- 检查来源
     local tConfig = AbsActExcel.custom[args]
@@ -268,14 +268,14 @@ function customBuy(human,args,id, bFromPay, buyNum)
 
     -- 已达到限购次数,返回
     local config = AbsActExcel.custom[args]
-    if absAct.custom[args].cnt >= config.limitCnt then
-        return
-    end
-
-    -- if buyNum + absAct.custom[args].cnt > config.limitCnt then
+    -- if absAct.custom[args].cnt >= config.limitCnt then
     --     return
     -- end
 
+    if buyNum + absAct.custom[args].cnt > config.limitCnt then
+        return
+    end
+
     -- 钻石价格不为0时,表示钻石购买,则需判断钻石是否足够
     if config.price ~= 0 then
 	    if not ObjHuman.checkRMB(human, config.price) then
@@ -285,8 +285,8 @@ function customBuy(human,args,id, bFromPay, buyNum)
     end
 
     -- 购买次数增加一次
-    absAct.custom[args].cnt = absAct.custom[args].cnt + 1
-    -- absAct.custom[args].cnt = absAct.custom[args].cnt + buyNum
+    -- absAct.custom[args].cnt = absAct.custom[args].cnt + 1
+    absAct.custom[args].cnt = absAct.custom[args].cnt + buyNum
 
      -- 状态设置为已卖完,此时,为防止后续报错,导致可无限购买,故先设置为无法继续购买
     absAct.custom[args].state = 2
@@ -294,19 +294,20 @@ function customBuy(human,args,id, bFromPay, buyNum)
      -- 统计物品,并发放
     local item = {}
     for i = 1, #config.fixed do
-        item[#item+1] = {config.fixed[i][1],config.fixed[i][2]}
-        -- item[#item+1] = {config.fixed[i][1],config.fixed[i][2] * buyNum}
+        -- item[#item+1] = {config.fixed[i][1],config.fixed[i][2]}
+        item[#item+1] = {config.fixed[i][1],config.fixed[i][2] * buyNum}
     end
     for i = 1,#absAct.custom[args].selectItem do
-        item[#item+1] = {absAct.custom[args].selectItem[i][1],absAct.custom[args].selectItem[i][2]}
-        -- item[#item+1] = {absAct.custom[args].selectItem[i][1],absAct.custom[args].selectItem[i][2]*buyNum}
+        -- item[#item+1] = {absAct.custom[args].selectItem[i][1],absAct.custom[args].selectItem[i][2]}
+        item[#item+1] = {absAct.custom[args].selectItem[i][1],absAct.custom[args].selectItem[i][2]*buyNum}
     end
     BagLogic.addItemList(human, item, "abs_custom")   
 
      -- 判断是否达到限购次数,未达到则将购买状态设为选择物品
     if absAct.custom[args].cnt < config.limitCnt then 
         --absAct.custom[args].selectItem = {}
-        absAct.custom[args].state = 0
+        -- absAct.custom[args].state = 0
+        absAct.custom[args].state = 1
     else
         absAct.custom[args].state = 2
     end
@@ -348,29 +349,29 @@ function isRed(human, YYInfo, funcConfig)
     return bRed
 end
 
--- function GetRemainNum(human, nBuyID)
---     local tConfig = AbsActExcel.custom
---     local nChoseID, nLimitNum = nil, nil
---     for nID, v in pairs(tConfig) do
---         if v.buyID == nBuyID and nID < SPECIALCISTOMNOBUYID then
---             nChoseID = nID
---             nLimitNum = v.limitCnt
---             break
---         end
---     end
-
---     local tActDBData = human.db.absAct[SPECIALCISTOMACTID]
---     if not tActDBData then
---         return 0
---     end
-
---     if not nChoseID then
---         return 0
---     end
-
---     if tActDBData.custom and tActDBData.custom[nChoseID] and tActDBData.custom[nChoseID].cnt then
---         return tActDBData.custom[nChoseID].cnt >= nLimitNum and 0 or (nLimitNum - tActDBData.custom[nChoseID].cnt)
---     else
---         return nLimitNum
---     end
--- end
+function GetRemainNum(human, nBuyID)
+    local tConfig = AbsActExcel.custom
+    local nChoseID, nLimitNum = nil, nil
+    for nID, v in pairs(tConfig) do
+        if v.buyID == nBuyID and nID < SPECIALCISTOMNOBUYID then
+            nChoseID = nID
+            nLimitNum = v.limitCnt
+            break
+        end
+    end
+
+    local tActDBData = human.db.absAct[SPECIALCISTOMACTID]
+    if not tActDBData then
+        return 0
+    end
+
+    if not nChoseID then
+        return 0
+    end
+
+    if tActDBData.custom and tActDBData.custom[nChoseID] and tActDBData.custom[nChoseID].cnt then
+        return tActDBData.custom[nChoseID].cnt >= nLimitNum and 0 or (nLimitNum - tActDBData.custom[nChoseID].cnt)
+    else
+        return nLimitNum
+    end
+end

+ 1 - 1
script/module/bag/Proto.lua

@@ -47,7 +47,7 @@ Equip = {
 	{"exp",        		1,       "int"},   	 		-- 神器的经验值
     {"star",       		1,   	"byte"},     		-- 穿戴星级
 	{"baseAttr",   		4,       Attr},    	 		-- 基础性能
-    {"tzAttr",     		5,       EQUIP_WASH_ATTR_DATA}, -- 拓展属性
+    {"tzAttr",     		7,       EQUIP_WASH_ATTR_DATA}, -- 拓展属性
 	{"suit",       		2,       SuitNet},    		-- 套装信息
 	{"job",        		1,       "byte"},     		-- 职业专属
 	{"jobAttr",    		10,      Attr},    	 		-- 职业专属属性

+ 1 - 1
script/module/equip/EquipLogic.lua

@@ -23,7 +23,7 @@ EQUIP_BAG_OP_ADD = 1 -- 增
 EQUIP_BAG_OP_DEL = 2 -- 删
 EQUIP_BAG_OP_CHANGE = 3 -- 改
 
-EQUIP_QUALITY_MAX = 5
+EQUIP_QUALITY_MAX = 7
 EQUIP_QUALITY = { 5000, 3000, 1500, 500 }
 EQUIP_QUALITY_WEIGHT = 10000
 EQUIP_QUALITY_BASE_RATE = { 7000, 8000, 9000, 10000, 12000 }

+ 24 - 24
script/module/present/OpenServerGiftPackage.lua

@@ -75,14 +75,14 @@ function onCharge(human, nBuyID, nBuNum)
         -- print("[OpenServerGiftPackage_onCharge] 开始发送奖励")
         local nNowCnt = OpenServerGiftPackage_GetNum(human, nChoseID)
         if nNowCnt > 0 then
-            OpenServerGiftPackage_SetNum(human, nChoseID, -1)
-            BagLogic.addItemList(human, tItem, "OpenServerGiftPackage")
-            -- OpenServerGiftPackage_SetNum(human, nChoseID, -nBuNum)
-            -- local tItemList = {}
-            -- for _, v in ipairs(tItem) do
-            --     table.insert(tItemList, {v[1], v[2]*nBuNum})
-            -- end
-            -- BagLogic.addItemList(human, tItemList, "OpenServerGiftPackage")
+            -- OpenServerGiftPackage_SetNum(human, nChoseID, -1)
+            -- BagLogic.addItemList(human, tItem, "OpenServerGiftPackage")
+            OpenServerGiftPackage_SetNum(human, nChoseID, -nBuNum)
+            local tItemList = {}
+            for _, v in ipairs(tItem) do
+                table.insert(tItemList, {v[1], v[2]*nBuNum})
+            end
+            BagLogic.addItemList(human, tItemList, "OpenServerGiftPackage")
 
             OpenServerGiftPackage_Query(human)
         end
@@ -115,19 +115,19 @@ function isOpen(human, YYInfo, funcConfig)
 	if isBaseOpen(human, YYInfo, funcConfig, true) then return true end
 end
 
--- function GetRemainNum(human, nBuyID)
---     local nChoseID = nil
---     for nID, v in ipairs(OpenActExcel.OpenGiftPackage) do
---         if v.buyID == nBuyID then
---             nChoseID = nID
---             break
---         end
---     end
-
---     if not nChoseID then
---         return 0
---     end
-
---     local nNowCnt = OpenServerGiftPackage_GetNum(human, nChoseID)
---     return nNowCnt
--- end
+function GetRemainNum(human, nBuyID)
+    local nChoseID = nil
+    for nID, v in ipairs(OpenActExcel.OpenGiftPackage) do
+        if v.buyID == nBuyID then
+            nChoseID = nID
+            break
+        end
+    end
+
+    if not nChoseID then
+        return 0
+    end
+
+    local nNowCnt = OpenServerGiftPackage_GetNum(human, nChoseID)
+    return nNowCnt
+end

+ 3 - 1
script/module/shop/Proto.lua

@@ -31,13 +31,15 @@ CG_SHOP_QUERY = {
 GC_SHOP_QUERY = {
     {"shopList",        20,    ShopInfo},   -- 商店列表
     {"shopInfo",        1,     ShopInfo},   -- 当前商店信息
-	{"list",            100,   GOODS},
+	{"list",            15,   GOODS},
 	{"refreshItem",     1,     ItemData}, -- 刷新道具ID
 	{"nextRefreshTime",	1,	   "int"}, -- 下次刷新时间
 	{"freeCnt",         1,     "int"}, -- 免费刷新次数
 	{"freeMax",         1,     "int"}, -- 免费刷新上限
 	{"costCnt",         1,     "int"}, -- 钻石刷新次数
 	{"costMax",         1,     "int"}, -- 钻石刷新次数上限
+	{"isStart",      	1,     "byte"}, -- 0-非第一段数据,1- 第一段数据
+	{"isEnd",      		1,     "byte"}, -- 0-非最后一段数据,1- 最后一段数据
 }
 
 -- 刷新物品

+ 84 - 39
script/module/shop/ShopLogic.lua

@@ -141,6 +141,7 @@ function cleanShopGoods(human, shopType)
 end
 
 
+-- 查询商店物品
 -- 查询商店物品
 function query(human, shopType)
 	local shopTypeConfig = ShopExcel.shop[shopType]
@@ -166,15 +167,15 @@ function query(human, shopType)
         end
     end
 
-	Grid.makeItem(msgRet.refreshItem,shopTypeConfig.refreshItemID,shopTypeConfig.refreshItemCnt)
+	Grid.makeItem(msgRet.refreshItem, shopTypeConfig.refreshItemID, shopTypeConfig.refreshItemCnt)
 
 	local shopConfig = ShopExcel[shopType]
 	if not shopConfig then return end
 
 	local now = os.time()
 
-    initHumanShopDB(human,shopType)
-    checkFreeCnt(human,shopType)
+    initHumanShopDB(human, shopType)
+    checkFreeCnt(human, shopType)
 
 	msgRet.nextRefreshTime = 0
 
@@ -192,48 +193,92 @@ function query(human, shopType)
 	msgRet.costCnt = getLeftCostCnt(human, shopType)
 	msgRet.costMax = getCostCntMax(human, shopType)
 
+    -- 先把所有商品数据收集到临时表
+    local allGoods = {}
+
     -- 不刷新的没有记录的 走配置
-    local cnt = 0
     if shopTypeConfig.refreshType == ShopDefine.SHOP_REFRESH_TYPE0 then
-       for index, v in pairs(shopConfig) do
-          if not human.db.shop[shopType].goods[index] then
-             local tempConfig = v
-             cnt = cnt + 1
-             Grid.makeItem(msgRet.list[cnt].itemData, tempConfig.itemID, tempConfig.cnt)
-             msgRet.list[cnt].itemIndex = index
-             Grid.makeItem(msgRet.list[cnt].needItem, tempConfig.needItemID, tempConfig.price)
-		     msgRet.list[cnt].maxCanBuy = tempConfig.limitBuyCnt
-		     msgRet.list[cnt].nowBuy = 0
-		     msgRet.list[cnt].zhekou  = tempConfig.zhekou
-		     msgRet.list[cnt].order  = tempConfig.order
-             msgRet.list[cnt].needVipLv = tempConfig.needVipLv
-             msgRet.list[cnt].rare = tempConfig.rare
-             msgRet.list[cnt].limitType = tempConfig.limitType
-             msgRet.list[cnt].bCanChose = tempConfig.isquickbuy and tempConfig.isquickbuy or 0
-             msgRet.list[cnt].bChose = 0
-          end
-       end
+        for index, v in pairs(shopConfig) do
+            if not human.db.shop[shopType].goods[index] then
+                local tempConfig = v
+                allGoods[#allGoods + 1] = {
+                    itemID      = tempConfig.itemID,
+                    itemCnt     = tempConfig.cnt,
+                    itemIndex   = index,
+                    needItemID  = tempConfig.needItemID,
+                    needItemCnt = tempConfig.price,
+                    maxCanBuy   = tempConfig.limitBuyCnt,
+                    nowBuy      = 0,
+                    zhekou      = tempConfig.zhekou,
+                    order       = tempConfig.order,
+                    needVipLv   = tempConfig.needVipLv,
+                    rare        = tempConfig.rare,
+                    limitType   = tempConfig.limitType,
+                    bCanChose   = tempConfig.isquickbuy and tempConfig.isquickbuy or 0,
+                    bChose      = 0,
+                }
+            end
+        end
     end
 
     for _, v in pairs(human.db.shop[shopType].goods) do
         local tempConfig = shopConfig[v.index]
-        cnt = cnt + 1
-        Grid.makeItem(msgRet.list[cnt].itemData, tempConfig.itemID, tempConfig.cnt)
-        msgRet.list[cnt].itemIndex = v.index
-        Grid.makeItem(msgRet.list[cnt].needItem, tempConfig.needItemID, tempConfig.price)
-		msgRet.list[cnt].maxCanBuy = tempConfig.limitBuyCnt
-		msgRet.list[cnt].nowBuy = v.nowBuy
-		msgRet.list[cnt].zhekou  = tempConfig.zhekou
-		msgRet.list[cnt].order  = tempConfig.order
-        msgRet.list[cnt].needVipLv = tempConfig.needVipLv
-        msgRet.list[cnt].rare = tempConfig.rare
-        msgRet.list[cnt].limitType = tempConfig.limitType
-        msgRet.list[cnt].bCanChose = tempConfig.isquickbuy and tempConfig.isquickbuy or 0
-        msgRet.list[cnt].bChose = ShopLogic_GetChose(human, shopType, v.index)
-    end
-
-	msgRet.list[0] = cnt
-	Msg.send(msgRet, human.fd)
+        allGoods[#allGoods + 1] = {
+            itemID      = tempConfig.itemID,
+            itemCnt     = tempConfig.cnt,
+            itemIndex   = v.index,
+            needItemID  = tempConfig.needItemID,
+            needItemCnt = tempConfig.price,
+            maxCanBuy   = tempConfig.limitBuyCnt,
+            nowBuy      = v.nowBuy,
+            zhekou      = tempConfig.zhekou,
+            order       = tempConfig.order,
+            needVipLv   = tempConfig.needVipLv,
+            rare        = tempConfig.rare,
+            limitType   = tempConfig.limitType,
+            bCanChose   = tempConfig.isquickbuy and tempConfig.isquickbuy or 0,
+            bChose      = ShopLogic_GetChose(human, shopType, v.index),
+        }
+    end
+
+    -- 分批发送,每批最多 15 条
+    local BATCH_SIZE = 15
+    local total = #allGoods
+    local totalBatches = math.max(math.ceil(total / BATCH_SIZE), 1)
+
+    for batchIdx = 1, totalBatches do
+        local startIdx = (batchIdx - 1) * BATCH_SIZE + 1
+        local endIdx   = math.min(batchIdx * BATCH_SIZE, total)
+
+        msgRet.isStart = (batchIdx == 1) and 1 or 0
+        msgRet.isEnd   = (batchIdx == totalBatches) and 1 or 0
+
+        -- 非第一批不重复发送商店列表等头部信息
+        if batchIdx > 1 then
+            msgRet.shopList[0] = 0
+        end
+
+        local cnt = 0
+        for i = startIdx, endIdx do
+            cnt = cnt + 1
+            local item = allGoods[i]
+            Grid.makeItem(msgRet.list[cnt].itemData, item.itemID, item.itemCnt)
+            msgRet.list[cnt].itemIndex  = item.itemIndex
+            Grid.makeItem(msgRet.list[cnt].needItem, item.needItemID, item.needItemCnt)
+            msgRet.list[cnt].maxCanBuy  = item.maxCanBuy
+            msgRet.list[cnt].nowBuy     = item.nowBuy
+            msgRet.list[cnt].zhekou     = item.zhekou
+            msgRet.list[cnt].order      = item.order
+            msgRet.list[cnt].needVipLv  = item.needVipLv
+            msgRet.list[cnt].rare       = item.rare
+            msgRet.list[cnt].limitType  = item.limitType
+            msgRet.list[cnt].bCanChose  = item.bCanChose
+            msgRet.list[cnt].bChose     = item.bChose
+        end
+        msgRet.list[0] = cnt
+
+        Msg.send(msgRet, human.fd)
+    end
 end
 
 -- 刷新物品

+ 15 - 15
script/module/voucher/VoucherShopLogic.lua

@@ -375,8 +375,8 @@ end
 
 -- 请求代金券购买商品
 function VoucherShop_BuyItem(human, nBuyID, nBuyNum)
-    if not human or 0 >= nBuyID or nBuyNum <= 0 or nBuyNum >= 100 then
-        return
+    if not human or 0 >= nBuyID or nBuyNum <= 0 or nBuyNum >= 200 then
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
     end
 
     local tBuyConfig = VoucherShop_GetShopConfig()
@@ -386,27 +386,27 @@ function VoucherShop_BuyItem(human, nBuyID, nBuyNum)
     end
 
     if tBuyConfig[nBuyID] or tInflateConfig[nBuyID] then
-        print("[VoucherShop_BuyItem] 玩家使用代金券购买代金券礼品,直接返回")
+        -- print("[VoucherShop_BuyItem] 玩家使用代金券购买代金券礼品,直接返回")
         VoucherShop_WriteLog(human, "[VoucherShop_BuyItem]", "玩家使用代金券购买代金券礼品,直接返回")
         return
     end
     
     local tTrueBuyConfig = BuyExcel.buy[nBuyID]
     if not tTrueBuyConfig then
-        print("[VoucherShop_BuyItem] 不存在对应的商品信息 nBuyID = "..nBuyID)
-        return
+        -- print("[VoucherShop_BuyItem] 不存在对应的商品信息 nBuyID = "..nBuyID)
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
     end
 
     local nDelVoucherNum = tTrueBuyConfig.Voucher * nBuyNum
     if 0 >= nDelVoucherNum then
-        print("[VoucherShop_BuyItem] 该商品无法用代金券购买,配置的数量为空 nBuyID = "..nBuyID.." nDelVoucherNum = "..nDelVoucherNum)
-        return
+        -- print("[VoucherShop_BuyItem] 该商品无法用代金券购买,配置的数量为空 nBuyID = "..nBuyID.." nDelVoucherNum = "..nDelVoucherNum)
+        return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
     end
 
     local nNowNum = BagLogic.getItemCnt(human, VoucherShopDefine.VOUCHERITME_ID)
     if nNowNum < nDelVoucherNum then
-        print("[VoucherShop_BuyItem] 对应购买代金券不足直接返回 nBuyID = "..nBuyID.." nDelVoucherNum = "..nDelVoucherNum.." nNowNum = "..nNowNum)
-        return
+        -- print("[VoucherShop_BuyItem] 对应购买代金券不足直接返回 nBuyID = "..nBuyID.." nDelVoucherNum = "..nDelVoucherNum.." nNowNum = "..nNowNum)
+        return Broadcast.sendErr(human, Lang.VOUCHER_NOT_ENOUGH)
     end
 
     if tTrueBuyConfig.module and tTrueBuyConfig.module ~= "" then
@@ -415,8 +415,8 @@ function VoucherShop_BuyItem(human, nBuyID, nBuyNum)
             local nTrueNum = tModule.GetRemainNum(human, nBuyID)
 
             if not nTrueNum or nTrueNum < nBuyNum then
-                print("[VoucherShop_BuyItem] 获取不到对应的配置nBuyID = "..nBuyID.." nDelVoucherNum = "..nDelVoucherNum.." nNowNum = "..nNowNum.." nBuyNum = "..nBuyNum)
-                return
+                -- print("[VoucherShop_BuyItem] 获取不到对应的配置nBuyID = "..nBuyID.." nDelVoucherNum = "..nDelVoucherNum.." nNowNum = "..nNowNum.." nBuyNum = "..nBuyNum)
+                return Broadcast.sendErr(human, Lang.ABS_GIFT_BUY_LIMIT)
             end
         end
     end
@@ -477,10 +477,10 @@ function isOpen(human, YYInfo, funcConfig)
         return false
     end
 
-    -- if not human.db.nFirstBuy or human.db.nFirstBuy ~= 1 then
-    --     --print("[VoucherShop is open] 33333")
-    --     return false
-    -- end
+    if not human.db.nFirstBuy or human.db.nFirstBuy ~= 1 then
+        --print("[VoucherShop is open] 33333")
+        return false
+    end
 
     --print("[VoucherShop is open] 444444")    
     return true

+ 25 - 19
script/module/zhuanpan/ZhuanpanGift.lua

@@ -6,6 +6,8 @@ local BagLogic = require("bag.BagLogic")
 local Grid = require("bag.Grid")
 local BuyLogic = require("topup.BuyLogic")
 local ZhuanpanGiftConfig = require("excel.zhuanpan").gift
+local Lang = require("common.Lang")
+local Broadcast = require("broadcast.Broadcast")
 
 local LOGTAG = "zhuanpanGift"
 
@@ -53,44 +55,48 @@ function onCharge(human, buyId, buyNum)
 
     local giftCfg = getCfg(buyId)
     if not giftCfg then
-        return
+        return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
     end
 
-    if zhuanpanGiftData and (zhuanpanGiftData[buyId] or 0) >= giftCfg.amount then
-        return
-    end
+    -- if zhuanpanGiftData and (zhuanpanGiftData[buyId] or 0) >= giftCfg.amount then
+    --     return
+    -- end
 
     -- if buyNum + (zhuanpanGiftData[buyId] or 0) >= giftCfg.amount then
     --     return
     -- end
 
+    if buyNum + (zhuanpanGiftData and zhuanpanGiftData[buyId] or 0) > giftCfg.amount then
+        return Broadcast.sendErr(human, Lang.ABS_GIFT_BUY_LIMIT)
+    end
+
     local itemArr = {}
     for idx, itemCfg in ipairs(giftCfg.rewards) do
-        itemArr[idx] = {itemCfg[1], itemCfg[2]}
-        -- itemArr[idx] = {itemCfg[1], itemCfg[2] * buyNum}
+        -- itemArr[idx] = {itemCfg[1], itemCfg[2]}
+        itemArr[idx] = {itemCfg[1], itemCfg[2] * buyNum}
     end
 
     BagLogic.addItemList(human, itemArr, LOGTAG)
 
     zhuanpanGiftData = zhuanpanGiftData or {}
-    zhuanpanGiftData[buyId] = (zhuanpanGiftData[buyId] or 0) + 1
-    -- zhuanpanGiftData[buyId] = (zhuanpanGiftData[buyId] or 0) + buyNum
+    -- zhuanpanGiftData[buyId] = (zhuanpanGiftData[buyId] or 0) + 1
+    zhuanpanGiftData[buyId] = (zhuanpanGiftData[buyId] or 0) + buyNum
     human.db.zhuanpanGiftData = zhuanpanGiftData
 
     ZhuanpanGift_Query(human)
 end
 
--- function GetRemainNum(human, nBuyID)
---     local giftCfg = getCfg(nBuyID)
+function GetRemainNum(human, nBuyID)
+    local giftCfg = getCfg(nBuyID)
 
---     if not giftCfg then
---         return 0
---     end
+    if not giftCfg then
+        return 0
+    end
 
---     local zhuanpanGiftData = human.db.zhuanpanGiftData
---     if not zhuanpanGiftData or not zhuanpanGiftData[nBuyID] then
---         return giftCfg.amount
---     end
+    local zhuanpanGiftData = human.db.zhuanpanGiftData
+    if not zhuanpanGiftData or not zhuanpanGiftData[nBuyID] then
+        return giftCfg.amount
+    end
 
---     return (giftCfg.amount > zhuanpanGiftData[nBuyID]) and (giftCfg.amount - zhuanpanGiftData[nBuyID]) or 0
--- end
+    return (giftCfg.amount > zhuanpanGiftData[nBuyID]) and (giftCfg.amount - zhuanpanGiftData[nBuyID]) or 0
+end