Commit 2660491b36822022beb808f02cc0908d7afc2a0a

Authored by zhangqijia
1 parent 2485b746

fix: 铭文仓库爆满限制bug

1. 穿在英雄身上的铭文不计算在仓库。
2. 开箱判断物品所占用的仓库格数,item_random.ware字段
3.
领取邮件,如果邮件中没有铭文,则不判断铭文仓库是否爆满。
src/GlobalVar.lua
... ... @@ -424,3 +424,14 @@ SystemBnousType = {
424 424 ChangeBaseCount = 16, -- 每日奖励关卡挑战卡基础数量增加
425 425 ChangeBuyCount = 17, -- 每日奖励关卡挑战卡可购买次数增加,
426 426 }
  427 +
  428 +-- 开箱物品类型
  429 +ItemOccupy = {
  430 + EquipBase = 1, --装备
  431 + Rune = 2, --铭文
  432 + Diner = 3, --食材
  433 + CommonPaster = 4, --贴纸
  434 + Spark = 5, --火花
  435 + Other = 6,
  436 + CanUsed = 7, --可使用
  437 +}
427 438 \ No newline at end of file
... ...
src/actions/RoleAction.lua
... ... @@ -686,13 +686,17 @@ function _M.openTimeBoxRpc(agent, data)
686 686 local count, runeCount = 0, 0
687 687 for itemId, num in pairs(costs) do
688 688 local itemIdData = csvdb["itemCsv"][itemId]
689   - if not itemIdData or not csvdb["item_randomCsv"][itemId] or costIdData.quality ~= itemIdData.quality then return 7 end
  689 + local itemRandomData = csvdb["item_randomCsv"][itemId]
  690 + if not itemIdData or not itemRandomData or costIdData.quality ~= itemIdData.quality then return 7 end
690 691  
691   - if itemIdData.type == ItemType.Rune then runeCount = runeCount + num end
  692 + local itemRandomOccupy = role:getItemRandomOccupy(itemRandomData)
  693 + if next(itemRandomOccupy) then
  694 + runeCount = runeCount + (itemRandomOccupy[ItemOccupy.Rune] or 0) * num
  695 + end
692 696 count = count + num
693 697 end
694 698  
695   - if role:checkRuneFully(runeCount) then return 10 end --开箱子,如果铭文仓库已经满了则不让开
  699 + if role:checkRuneFully(runeCount) then return 10 end --开箱子,如果铭文仓库已经满了则不让开铭文
696 700  
697 701 if role:getItemCount(costId) < count then return 8 end
698 702 if not role:checkItemEnough(costs) then return 9 end
... ...
src/models/RolePlugin.lua
... ... @@ -2934,11 +2934,13 @@ function RolePlugin.bind(Role)
2934 2934 self:mylog("hero_action", {desc = desc, int1 = heroType})
2935 2935 end
2936 2936  
2937   - function Role:getRuneBatCount()
  2937 + function Role:getRuneBagCount()
2938 2938 local count = 0
2939 2939 for _, rune in pairs(self.runeBag) do
2940 2940 if next(rune) then
2941   - count = count + 1
  2941 + if rune:getProperty("refer") == 0 then
  2942 + count = count + 1
  2943 + end
2942 2944 end
2943 2945 end
2944 2946 return count or 0
... ... @@ -2947,13 +2949,28 @@ function RolePlugin.bind(Role)
2947 2949 -- 铭文仓库是否满仓
2948 2950 function Role:checkRuneFully(count)
2949 2951 count = count or 0
  2952 + if count == 0 then return false end
  2953 +
2950 2954 local page = globalCsv.store_type[ItemType.Rune]
2951 2955 local limit = self:getProperty("bagLimit")[page]
2952   - return self:getRuneBatCount() + count > limit
  2956 + return self:getRuneBagCount() + count > limit
  2957 + end
  2958 +
  2959 + local function checkHasRuneByReward(reward)
  2960 + reward = reward or {}
  2961 + for itemId, _ in pairs(reward) do
  2962 + local itemData = csvdb["itemCsv"][itemId]
  2963 + if itemData and itemData.type == ItemType.Rune then
  2964 + return true
  2965 + end
  2966 + end
  2967 + return false
2953 2968 end
2954 2969  
2955 2970 function Role:checkRuneFullyByReward(reward)
2956   - local count = self:getRuneBatCount()
  2971 + if not checkHasRuneByReward(reward) then return false end
  2972 +
  2973 + local count = self:getRuneBagCount()
2957 2974 local page = globalCsv.store_type[ItemType.Rune]
2958 2975 local limit = self:getProperty("bagLimit")[page]
2959 2976 if count >= limit then
... ... @@ -3001,6 +3018,16 @@ function RolePlugin.bind(Role)
3001 3018 end
3002 3019 end
3003 3020  
  3021 + function Role:getItemRandomOccupy(itemRandomData)
  3022 + local itemRandomOccupy = {}
  3023 + if itemRandomData then
  3024 + for typ, n in pairs(itemRandomData.ware:toNumMap() or {}) do
  3025 + itemRandomOccupy[typ] = n
  3026 + end
  3027 + end
  3028 + return itemRandomOccupy
  3029 + end
  3030 +
3004 3031  
3005 3032 end
3006 3033  
... ...