Просмотр исходного кода

移植常规版收纳箱功能到1折渠道

gitxsm 1 неделя назад
Родитель
Сommit
6a6d12195c

+ 3 - 0
script/common/Lang.lua

@@ -51,6 +51,8 @@ COMMON_FINISH = [[已完成]]
 COMMON_NEED_LEVEL = [[等级需要达到{1}级]]
 COMMON_HERO_UPPOS = [[有英雄已经在别的阵容上阵]]
 
+COMMON_DAILY_PASSLEVEL_LIMIT = [[已达每日通关上限, 请明日再来]]
+
 --------------------------------------------------
 
 
@@ -214,6 +216,7 @@ ITEM_GET_SUCCESS = [[领取成功]]
 ITEM_BUY_ERROR = [[购买错误]]
 ITEM_BUY_ERR_MAX = [[道具购买已达上限]]
 ITEM_BUY_DEFAULT = [[购买失败]]
+ITEM_CANNOT_RECYCLE = [[道具无法被回收]]
 
 ACT_NOT_START = [[活动未开始]]
 ACT_WAS_OVER = [[活动已结束]]

+ 1 - 1
script/common/LogDefine.lua

@@ -323,7 +323,7 @@ DEFINE = {
 	LevelGift 				= 783,  		-- 送万元充值
 	Artifacts				= 784,			-- 英雄神威灵装
 	BattleGift				= 785,			-- 闯关礼金
-
+	RecycleItem				= 786,			-- 收纳箱
 
 	errHandle				= 99999,		-- 异常处理
 }

+ 11 - 0
script/common/ProtoID.lua

@@ -1823,6 +1823,17 @@ _ENV[1853]="GC_UNION_CREATE_COND_QUERY"
 
 _ENV[1854]="GC_POWERRANK_TOPONE_LOGIN"
 
+_ENV[1855]="CG_RECYCLE_QUERY"
+_ENV[1856]="GC_RECYCLE_QUERY"
+_ENV[1857]="CG_RECYCLE_RECYCLEITEM"
+_ENV[1858]="CG_RECYCLE_GET_RECYCLE_LIST"
+_ENV[1859]="GC_RECYCLE_GET_RECYCLE_LIST"
+
+_ENV[1860]="CG_BATTLE_DAILY_PASSLVEL_INFO_QUERY"
+_ENV[1861]="GC_BATTLE_DAILY_PASSLVEL_INFO_QUERY"
+_ENV[1862]="CG_HUNAGJINGTOWER_DAILY_PASSLVEL_INFO_QUERY"
+_ENV[1863]="GC_HUNAGJINGTOWER_DAILY_PASSLVEL_INFO_QUERY"
+
 _ENV[1896]="CG_ZHUANPAN_SUBSCRIBE_REWARD_QUERY"
 _ENV[1897]="GC_ZHUANPAN_SUBSCRIBE_REWARD_QUERY"
 _ENV[1898]="CG_ZHUANPAN_SUBSCRIBE_REWARD_GET"

+ 56 - 0
script/common/Util.lua

@@ -474,6 +474,62 @@ function split(str, split_char,isNumber)
     return t
 end
 
+
+TONUMBER_KEY   = "key"
+TONUMBER_VALUE = "value"
+TONUMBER_ALL   = "all"
+--- 灵活解析键值字符串
+-- @param str           源字符串,如 "1001-10|1002-11"
+-- @param segSep        段分隔符,如 "|"(默认 "|")
+-- @param kvSep         键值分隔符,如 "-"(默认 "-")
+-- @param tonumberMode  可选:"key"只转键,"value"只转值,"all"都转,nil不转
+-- @return table        解析后的字典表
+function parseKVString(str, segSep, kvSep, tonumberMode)
+    -- 防护:nil 或空字符串直接返回空表
+    if not str or str == "" then
+        return {}
+    end
+
+    -- 去掉首尾空白(可选,视需求而定)
+    str = string.match(str, "^%s*(.-)%s*$") or ""
+    if str == "" then
+        return {}
+    end
+
+    segSep = segSep or "|"
+    kvSep = kvSep or "-"
+
+    -- 转义模式中的特殊字符
+    local function escapePattern(s)
+        return (string.gsub(s, "([%-%.%+%*%?%[%]%^%$%(%)%%])", "%%%1"))
+    end
+
+    local segPattern = escapePattern(segSep)
+
+    local result = {}
+
+    for segment in string.gmatch(str, "([^" .. segPattern .. "]+)") do
+        local pos = string.find(segment, kvSep, 1, true)
+        if pos then
+            local key = string.sub(segment, 1, pos - 1)
+            local value = string.sub(segment, pos + string.len(kvSep))
+
+            if tonumberMode == "key" or tonumberMode == "all" then
+                key = tonumber(key) or key
+            end
+            if tonumberMode == "value" or tonumberMode == "all" then
+                value = tonumber(value) or value
+            end
+
+            result[key] = value
+        end
+    end
+
+    return result
+end
+
+
+
 -- 根据KEY从小到大排序
 function pairsByKeys(t)
 	local a = {}

+ 4 - 0
script/module/bag/BagLogic.lua

@@ -885,4 +885,8 @@ function calculateBonusItemCount(human, id, cnt,logType)
     end
     -- 默认返回原数量
     return cnt
+end
+
+function GetBagData(human)
+	return human.db.bag
 end

+ 14 - 0
script/module/bag/Handler.lua

@@ -4,6 +4,7 @@ local ItemLogic = require("bag.ItemLogic")
 local BoxLogic = require("bag.BoxLogic")
 local DropSpecial = require("bag.DropSpecial")
 local HeroSkinLogic = require("present.HeroSkinLogic")
+local RecycleItem = require("bag.RecycleItem")
 
 -- 请求碎片英雄信息
 function CG_SUIPIAN_HERO_QUERY(human, msg)
@@ -91,4 +92,17 @@ end
 
 function CG_DUIHUANG_DO(human, msg)
 	SuipianLogic.SuiPianLogic_DuiHuangDo(human, msg.nID, msg.nNum)
+end
+
+
+function CG_RECYCLE_QUERY(human, msg)
+	RecycleItem.RecycleItem_Query(human)
+end
+
+function CG_RECYCLE_RECYCLEITEM(human, msg)
+	RecycleItem.RecycleItem_Recycle_Do(human, msg.recycleItemStr)
+end
+
+function CG_RECYCLE_GET_RECYCLE_LIST(human, msg)
+	RecycleItem.RecycleItem_RecycleItemListQuery(human)
 end

+ 32 - 0
script/module/bag/Proto.lua

@@ -364,4 +364,36 @@ GC_DUIHUANG_QUERY = {
 CG_DUIHUANG_DO = {
 	{"nID",		1,		"int"},		-- 物品ID
 	{"nNum",	1,		"int"},		-- 兑换数量
+}
+
+
+-------------------------收纳箱---------------------------------
+
+RECYCLE_ITEM = {
+	{"id",			1,		"int"},		-- 物品ID
+	{"recycleVal",	1,		"short"},	-- 回收值
+}
+--查询
+CG_RECYCLE_QUERY = {}
+
+GC_RECYCLE_QUERY = {
+	{"currentLevel",	1,		"short"},		-- 当前等级
+	{"maxLevel",		1,		"short"},		-- 最高等级
+	{"currentExp",		1,		"int"},			-- 当前经验值
+	{"nextLvExp",		1,		"int"},			-- 升到下一级所需经验
+	{"currentLvAttrs",	6,		Attr},			-- 当前等级加成属性
+	{"nextLvAttrs",		6,		Attr},			-- 下一级加成属性
+}
+
+CG_RECYCLE_GET_RECYCLE_LIST = {}
+GC_RECYCLE_GET_RECYCLE_LIST = {
+	{"recycleList",		50,		RECYCLE_ITEM},	-- 可回收道具列表
+	{"isStart",			1,		"byte"},      	-- 0-否,1-是
+	{"isEnd",			1,		"byte"},      	-- 0-否,1-是
+}
+
+
+--回收道具
+CG_RECYCLE_RECYCLEITEM = {
+	{"recycleItemStr",		1,		"string"},	-- 回收道具信息, 格式:"道具Id-数量|道具Id-数量"
 }

+ 330 - 0
script/module/bag/RecycleItem.lua

@@ -0,0 +1,330 @@
+-- 收纳箱(回收道具)
+
+--db
+--[=[
+    human.db.recycleData = {
+        level = nil,
+        exp = nil,
+    }
+]=]--
+
+local Msg = require("core.Msg")
+local Lang = require("common.Lang")
+local Broadcast = require("broadcast.Broadcast")
+local Util = require("common.Util")
+local BagLogic = require("bag.BagLogic")
+local RoleAttr = require("role.RoleAttr")
+local RoleDefine = require("role.RoleDefine")
+local ObjHuman = require("core.ObjHuman")
+local RecycleConfig = require("excel.recycleItem").RecycleLvList
+local ItemConfig = require("excel.item").item
+-- local RoleSystemLogic = require("roleSystem.RoleSystemLogic")
+-- local RoleSystemDefine = require("roleSystem.RoleSystemDefine")
+
+local LOG_TAG = "RecycleItem" -- 本系统的日志标识
+local OPEN_COND_LV = 150 -- 开启功能需要的等级
+
+local function initRecycleData(human)
+    human.db.recycleData = { level = 0, exp = 0 }
+end
+
+local function getRecycleData(human)
+    return human.db.recycleData
+end
+
+local function updateRecycleData(human, newLv, newExp)
+    local recycleData = getRecycleData(human)
+    if not recycleData then
+        initRecycleData(human)
+        recycleData = getRecycleData(human)
+    end
+
+    recycleData.level = newLv
+    recycleData.exp = newExp
+end
+
+
+-- 是否开启本系统
+local function isOpen(human)
+    -- return RoleSystemLogic.isOpen(human, RoleSystemDefine.ROLE_SYS_ID_2031) -- 待修改
+    return human.db.lv >= OPEN_COND_LV
+end
+-- 计算当前等级加成属性
+local function calcCurrentLvAttrs(currentLevel)
+    if not currentLevel or currentLevel <= 0 then
+        return
+    end
+
+    local attrs = {}
+    for i=1, currentLevel do
+        local cfg = RecycleConfig[i]
+        if cfg and cfg.attrs then
+            for _,v in ipairs(cfg.attrs) do
+                local attrId = v[1]
+                local attrVal = v[2]
+                attrs[attrId] = (attrs[attrId] or 0) + attrVal
+            end
+        end
+    end
+
+    return attrs
+end
+-- 重算战力
+local function updatePower(human)
+    RoleAttr.cleanHeroAttrCache(human)
+    RoleAttr.doCalc(human)
+    ObjHuman.sendAttr(human, RoleDefine.ZHANDOULI)
+end
+-- 计算出新的等级和经验
+local function calcLv(human, addExp)
+    local recycleData = getRecycleData(human)
+    local currentLevel = recycleData and recycleData.level or 0
+    local currentExp = recycleData and recycleData.exp or 0
+
+    currentExp = currentExp + addExp
+    local newLv = currentLevel
+
+    for i=currentLevel+1, #RecycleConfig do
+        local cfg = RecycleConfig[i]
+        if currentExp < cfg.exp then
+            break
+        end
+
+        currentExp = currentExp - cfg.exp
+        newLv = i
+
+        if currentExp <= 0 then
+            break
+        end
+    end
+
+    return newLv, currentExp
+end
+
+
+local function populateCurrentLvAttrs(net, currentLevel)
+    local isZero = false
+    if currentLevel <= 0 then
+        currentLevel = 1
+        isZero = true
+    end
+
+    local len = 0
+    net[0] = len
+
+    local attrs = calcCurrentLvAttrs(currentLevel)
+    for attrId, attrVal in pairs(attrs or {}) do
+        len = len + 1
+        net[0] = len
+        net[len].key = attrId
+        net[len].value = isZero and 0 or attrVal
+    end
+
+end
+
+local function populateNextLvAttrs(net, nextLv)
+    local isMax = false
+    local maxLv = #RecycleConfig
+    if maxLv <= nextLv then
+        nextLv = maxLv
+        isMax = true
+    end
+
+    net[0] = 0
+    local cfg = RecycleConfig[nextLv]
+
+    if cfg and cfg.attrs then
+        net[0] = #cfg.attrs
+        for k,v in ipairs(cfg.attrs) do
+            net[k].key = v[1]
+            net[k].value = isMax and 0 or v[2]
+        end
+    end
+
+end
+
+-- local function populateRecycleItem(net, human)
+--     net[0] = 0
+
+--     local bagData = BagLogic.GetBagData(human)
+--     if not bagData then
+--         return
+--     end
+
+--     local len = 0
+--     for itemId in pairs(bagData) do
+--         local itemCfg = ItemConfig[itemId]
+--         if itemCfg and itemCfg.val and itemCfg.val > 0 then
+--             len = len + 1
+--             net[0] = len
+--             net[len].id = itemId
+--             net[len].recycleVal = itemCfg.val
+--         end
+--     end
+-- end
+
+
+
+-- 外部调用, 统计收纳箱加成属性
+function doCalcHero(human, addAttrs)
+    if not human then
+        return
+    end
+
+    local recycleData = getRecycleData(human)
+    if not recycleData then
+        return
+    end
+
+    local currentLevel = recycleData and recycleData.level or 0
+    if currentLevel <= 0 then
+        return
+    end
+
+    local attrs = calcCurrentLvAttrs(currentLevel)
+    for attrId, attrVal in pairs(attrs or {}) do
+        RoleAttr.updateValue(attrId, attrVal, addAttrs)
+    end
+end
+
+
+
+-- 查询部分信息
+function RecycleItem_Query(human)
+    if not isOpen(human) then
+        return Broadcast.sendErr(human, Lang.COMMOM_NOT_ENABLED)
+    end
+
+    local recycleData = getRecycleData(human)
+    local currentLevel = recycleData and recycleData.level or 0
+    local currentExp = recycleData and recycleData.exp or 0
+    local maxLevel = #RecycleConfig
+    local nextLvExp = 0
+
+    if currentLevel < maxLevel then
+        local nextLvCfg = RecycleConfig[currentLevel + 1]
+        nextLvExp = nextLvCfg.exp
+    end
+
+    local msgRet = Msg.gc.GC_RECYCLE_QUERY
+    msgRet.currentLevel = currentLevel
+    msgRet.maxLevel = maxLevel
+    msgRet.currentExp = currentExp
+    msgRet.nextLvExp = nextLvExp
+
+    populateCurrentLvAttrs(msgRet.currentLvAttrs, currentLevel)
+    populateNextLvAttrs(msgRet.nextLvAttrs, currentLevel+1)
+    -- populateRecycleItem(msgRet.recycleList, human)
+
+    Msg.send(msgRet, human.fd)
+end
+
+-- 查询可回收道具列表
+function RecycleItem_RecycleItemListQuery(human)
+    if not isOpen(human) then
+        return Broadcast.sendErr(human, Lang.COMMOM_NOT_ENABLED)
+    end
+
+    local msgRet = Msg.gc.GC_RECYCLE_GET_RECYCLE_LIST
+    msgRet.recycleList[0] = 0
+    msgRet.isStart = 1
+    msgRet.isEnd = 0
+
+    local bagData = BagLogic.GetBagData(human)
+    if not bagData then
+        msgRet.isEnd = 1
+        return Msg.send(msgRet, human.fd)
+    end
+
+    local itemArr = {}
+    for itemId in pairs(bagData) do
+        local itemCfg = ItemConfig[itemId]
+        if itemCfg and itemCfg.val and itemCfg.val > 0 then
+            itemArr[#itemArr+1] = {itemId, itemCfg.val}
+        end
+    end
+
+    local itemNum = #itemArr
+    if itemNum == 0 then
+        msgRet.isEnd = 1
+        return Msg.send(msgRet, human.fd)
+    end
+
+    local len = 0
+    local onceMsgLen = 50
+
+    for _, itemInfo in ipairs(itemArr) do
+        len = len + 1
+        msgRet.recycleList[0] = len
+        msgRet.recycleList[len].id = itemInfo[1]
+        msgRet.recycleList[len].recycleVal = itemInfo[2]
+
+        if len >= onceMsgLen then
+            itemNum = itemNum - len
+            if itemNum <= 0 then
+                msgRet.isEnd = 1
+                return Msg.send(msgRet, human.fd)
+            end
+
+            Msg.send(msgRet, human.fd)
+            len = 0
+            msgRet.isStart = 0
+        end
+    end
+
+    if len > 0 then
+        msgRet.isEnd = 1
+        Msg.send(msgRet, human.fd)
+    end
+end
+
+-- 回收道具
+function RecycleItem_Recycle_Do(human, recycleItemStr)
+    if not isOpen(human) then
+        return Broadcast.sendErr(human, Lang.COMMOM_NOT_ENABLED)
+    end
+
+    local itemList = Util.parseKVString(recycleItemStr, "|", "-", Util.TONUMBER_ALL)
+    if not next(itemList) then
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
+    end
+
+    local recycleData = getRecycleData(human)
+    local currentLevel = recycleData and recycleData.level or 0
+    local maxLevel = #RecycleConfig
+    if currentLevel >= maxLevel then
+        return Broadcast.sendErr(human, Lang.COMMON_MAXLEVEL)
+    end
+
+    local totalExp = 0
+    for itemId, itemCnt in pairs(itemList) do
+        local itemCfg = ItemConfig[itemId]
+        if not itemCfg or not itemCfg.val or itemCfg.val <= 0 then
+            return Broadcast.sendErr(human, Lang.ITEM_CANNOT_RECYCLE)
+        end
+
+        if BagLogic.getItemCnt(human, itemId) < itemCnt then
+            return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
+        end
+
+        totalExp = totalExp + itemCfg.val * itemCnt
+    end
+
+    for itemId, itemCnt in pairs(itemList) do
+        if BagLogic.getItemCnt(human, itemId) < itemCnt then
+            return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
+        end
+        BagLogic.delItem(human, itemId, itemCnt, LOG_TAG)
+    end
+
+    -- 更新等级, 经验
+    local newLv, newExp = calcLv(human, totalExp)
+    updateRecycleData(human, newLv, newExp)
+
+    -- 更新战力
+    updatePower(human)
+
+    -- 更新UI界面数据
+    RecycleItem_Query(human)
+    RecycleItem_RecycleItemListQuery(human)
+end

+ 54 - 3
script/module/battle/BattleLogic.lua

@@ -424,6 +424,35 @@ local function getBattleCfgByType(nBattleType)
 end
 
 
+-- 获取每日通关层数
+local function getDailyPassLevelNum(human)
+    return human.db.battle_dailyPassLevelNum or 0
+end
+
+-- 增加每日通关层数
+local function addDailyPassLevelNum(human, addNum)
+    if not addNum or addNum <= 0 then
+        return
+    end
+
+    human.db.battle_dailyPassLevelNum = (human.db.battle_dailyPassLevelNum or 0) + addNum
+end
+
+-- 重置每日通关层数
+local function resetDailyPassLevelNum(human)
+    if not human.db.battle_dailyPassLevelNum then
+        return
+    end
+
+    human.db.battle_dailyPassLevelNum = 0
+end
+
+-- 跨天时, 对每日通关层数的处理
+local function dailyPassLevelHandle(human)
+    resetDailyPassLevelNum(human)
+    Battle_DailyPassLevelInfo_Query(human)
+end
+
 ------------------------------------------------多队伍挑战相关------------------------------------
 
 -- 是否开启多队伍挑战
@@ -2918,7 +2947,6 @@ function onFightBegin(human, cbParam, combatType, param)
 end
 
 
-
 -- 挑战当前挂机节点
 function fight(human)
     local battleID = BattleLogic_GetBattleBattleID(human)
@@ -2965,6 +2993,11 @@ function fight(human)
         return Broadcast.sendErr(human, Lang.BATTLE_CHOOSE_ATTR)
     end
 
+    -- local currentPassLevelNum = getDailyPassLevelNum(human)
+    -- if currentPassLevelNum >= EliteDefine.BATTLE_DAILY_MAX_PASSLEVEL_NUM then
+    --     return Broadcast.sendErr(human, Lang.COMMON_DAILY_PASSLEVEL_LIMIT)
+    -- end
+
 
     local config = tBattleConfig.node[battleID]
     -- local mapConfig = tBattleConfig.map[config.mapID]
@@ -2983,6 +3016,11 @@ function fight(human)
     GuideLogic.setDoSpecialGuide(human, GuideLogic.SKIPTYPE_JUMP_BATTLE)
 end
 
+local function challengeWinHandle(human)
+    addDailyPassLevelNum(human, 1)
+    Battle_DailyPassLevelInfo_Query(human)
+end
+
 function onFightEnd(human, result, fightTypeID, param1, combatInfo)
     -- 设置一些战斗结算信息
     combatInfo.defender.name = Util.format(Lang.COMBAT_BATTLE_DEFEND_NAME, param1)
@@ -3248,6 +3286,8 @@ function onFightEnd(human, result, fightTypeID, param1, combatInfo)
     if nBattleType == EliteDefine.COPY_ELITE_NORMAL then
         TriggerLogic.PublishEvent(TriggerDefine.BATTLE_NORMAL_MODE_PASS, human.db._id, 1)
     end
+
+    -- challengeWinHandle(human)
 end
 
 function setBattleID(human, guajiID)
@@ -3675,6 +3715,8 @@ function updateDaily(human)
     human.db.mopupFreeCnt = 0
     human.db.mopupDoCnt = 0
     human.db.mopupAddFreeCnt = 0
+
+    -- dailyPassLevelHandle(human)
 end
 
 function getTongGuanReward(human, id)
@@ -4919,7 +4961,7 @@ end
 
 -----------------------------多队伍--------------------------------------------------------
 -- 请求当前模式当前关卡需要几支队伍
-function QueryLevelTeamCnt(human)
+function Battle_LevelTeamCnt_Query(human)
     local teamCnt = getLevelTeamCnt(human)
     local msgRet = Msg.gc.GC_BATTLE_TEAM_COUNT
     msgRet.teamCnt = teamCnt
@@ -4927,4 +4969,13 @@ function QueryLevelTeamCnt(human)
     Msg.send(msgRet, human.fd)
 end
 
--------------------------------------------------------------------------------------------
+-------------------------------------------------------------------------------------------
+
+-- 每日通关信息查询
+function Battle_DailyPassLevelInfo_Query(human)
+    local msgRet = Msg.gc.GC_BATTLE_DAILY_PASSLVEL_INFO_QUERY
+    msgRet.currentPassLevelNum = getDailyPassLevelNum(human)
+    msgRet.maxPassLevelNum = EliteDefine.BATTLE_DAILY_MAX_PASSLEVEL_NUM
+
+    Msg.send(msgRet, human.fd)
+end

+ 3 - 0
script/module/battle/EliteDefine.lua

@@ -30,6 +30,9 @@ BATTLE_MOPUP_MAX_LEN = 12
 -- 开启多队伍挑战的关卡要求
 OPEN_OTHER_TEAM_LEVEL = 601
 
+-- 三种难度关卡, 每日可通关总层数
+BATTLE_DAILY_MAX_PASSLEVEL_NUM = 100
+
 
 
 

+ 6 - 1
script/module/battle/Handler.lua

@@ -98,6 +98,11 @@ function CG_BATTLE_GETGAMEREWARD(human,msg)
     BattleLogic.GetGameReward(human,msg.indexStr)
 end
 
+-- 每日通关信息查询
+function CG_BATTLE_DAILY_PASSLVEL_INFO_QUERY(human,msg)
+    BattleLogic.Battle_DailyPassLevelInfo_Query(human)
+end
+
 ---------------------------------------------------肉鸽玩法---------------------------------------------------
 function CG_ISNEEDSELECTATTR(human,msg)
     BattleLogic.QueryDiffBattleUnSelectAttr(human)
@@ -122,7 +127,7 @@ end
 
 ------------------------------------------多队伍战斗------------------------------------------
 function CG_BATTLE_TEAM_COUNT(human,msg)
-    BattleLogic.QueryLevelTeamCnt(human)
+    BattleLogic.Battle_LevelTeamCnt_Query(human)
 end
 
 

+ 8 - 0
script/module/battle/Proto.lua

@@ -366,6 +366,14 @@ GC_BATTLE_GETGAMEREWARD = {
 }
 
 
+-- 每日通关信息查询
+CG_BATTLE_DAILY_PASSLVEL_INFO_QUERY = {}
+GC_BATTLE_DAILY_PASSLVEL_INFO_QUERY = {
+	{"currentPassLevelNum",      1,        "short"},  -- 当日已通关数量
+	{"maxPassLevelNum",        	 1,        "short"},  -- 当日最大通关数量
+}
+
+
 
 -------------------------------肉鸽系统-----------------------------------------
 AttrInfo ={

+ 5 - 0
script/module/huanjingTower/Handler.lua

@@ -52,4 +52,9 @@ end
 
 function CG_HUNAGJINGTOWER_ONECLICK_SAPDANG(human, msg)
 	HuanJingTowerLogic.oneClickSaodang(human)
+end
+
+
+function CG_HUNAGJINGTOWER_DAILY_PASSLVEL_INFO_QUERY(human, msg)
+	HuanJingTowerLogic.HuanjingTower_DailyPassLevelInfo_Query(human)
 end

+ 62 - 1
script/module/huanjingTower/HuanjingTowerLogic.lua

@@ -71,6 +71,9 @@ REWARD_STATUS_HADGET = 2 -- 已领
 TOWER_TONGGUAN_TYPE = 1 -- 通关奖励
 TOWER_KING_TYPE = 2 -- 通关王者奖励
 
+-- 每日最多可通关层数
+local MAX_DAILY_PASSLEVEL_NUM = 50
+
 
 --秘宝加成
 local function HJ_GetTalismanAdd(human)
@@ -78,6 +81,41 @@ local function HJ_GetTalismanAdd(human)
 	return dailyFreeTimes
 end
 
+-- 获取每日通关层数
+local function getDailyPassLevelNum(human)
+    local num = 0
+    if human.db.tower and human.db.tower.dailyPassLevelNum then
+        num = human.db.tower.dailyPassLevelNum
+    end
+
+    return num
+end
+
+-- 增加每日通关层数
+local function addDailyPassLevelNum(human, addNum)
+    if not addNum or addNum <= 0 then
+        return
+    end
+
+    human.db.tower = human.db.tower or {}
+    human.db.tower.dailyPassLevelNum = (human.db.tower.dailyPassLevelNum or 0) + addNum
+end
+
+-- 重置每日通关层数
+local function resetDailyPassLevelNum(human)
+    if not human.db.tower or not human.db.tower.dailyPassLevelNum then
+        return
+    end
+
+    human.db.tower.dailyPassLevelNum = 0
+end
+
+-- 跨天时, 对每日通关层数的处理
+local function dailyPassLevelHandle(human)
+    resetDailyPassLevelNum(human)
+    HuanjingTower_DailyPassLevelInfo_Query(human)
+end
+
 
 function initSeverTower(nowLv)
     local towerDB = HuanjingTowerDB.query(#HuanjingTowerExcel.huanjingTower)
@@ -578,6 +616,11 @@ end
 
 -- 挑战
 function fight(human, args)
+    -- local currentPassLevelNum = getDailyPassLevelNum(human)
+    -- if currentPassLevelNum >= MAX_DAILY_PASSLEVEL_NUM then
+    --     return Broadcast.sendErr(human, Lang.COMMON_DAILY_PASSLEVEL_LIMIT)
+    -- end
+
     local changeLv = tonumber(args[1] or 0)
     if changeLv > #HuanjingTowerExcel.huanjingTower then
         return
@@ -615,6 +658,12 @@ function checkUpdeType(db, combatTime, zhandouli)
     return timeUp, zhanliUp
 end
 
+local function challengeWinHandle(human)
+    addDailyPassLevelNum(human, 1)
+    HuanjingTower_DailyPassLevelInfo_Query(human)
+end
+
+
 -- 挑战结束
 function onFightEnd(human, result, fightTypeID, param, combatInfo, args)
     local rewardItem = combatInfo.rewardItem
@@ -671,7 +720,9 @@ function onFightEnd(human, result, fightTypeID, param, combatInfo, args)
         MengxinLogic.onCallBack(human, MengxinLogic.MX_TASK_TYPE_2, param)
         JibanLogic.onCallback(human, 3, param)
         DailyTaskLogic.recordDailyTaskFinishCnt(human, DailyTaskLogic.DAILY_TASK_ID_5, 1)
-        YunYingLogic.onCallBack(human, "onHuangjingTower",1)   
+        YunYingLogic.onCallBack(human, "onHuangjingTower",1)
+
+        -- challengeWinHandle(human)
     end
     LiLianLogic.onCallbackByCombat(human, combatInfo)
     RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_1203)
@@ -794,6 +845,14 @@ function buyTiliDo(human, buyCnt)
     --	query(human)
 end
 
+-- 每日通关信息查询
+function HuanjingTower_DailyPassLevelInfo_Query(human)
+    local msgRet = Msg.gc.GC_HUNAGJINGTOWER_DAILY_PASSLVEL_INFO_QUERY
+    msgRet.currentPassLevelNum = getDailyPassLevelNum(human)
+    msgRet.maxPassLevelNum = MAX_DAILY_PASSLEVEL_NUM
+    Msg.send(msgRet, human.fd)
+end
+
 -- 挑战结果
 function updateResult(human, result, combatInfo, param)
     -- 当前胜利关卡已通关
@@ -845,6 +904,8 @@ function updateDaily(human)
         human.db.tower.buyCnt = 0
         RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_1203)
         RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_1201)
+
+        -- dailyPassLevelHandle(human)
     end
 end
 

+ 9 - 1
script/module/huanjingTower/Proto.lua

@@ -144,4 +144,12 @@ GC_HUANGJINGTOWER_LV_ALLHUMAN = {
 }
 
 -- 一键扫荡
-CG_HUNAGJINGTOWER_ONECLICK_SAPDANG = {}
+CG_HUNAGJINGTOWER_ONECLICK_SAPDANG = {}
+
+
+-- 每日挑战信息查询
+CG_HUNAGJINGTOWER_DAILY_PASSLVEL_INFO_QUERY = {}
+GC_HUNAGJINGTOWER_DAILY_PASSLVEL_INFO_QUERY = {
+	{"currentPassLevelNum",      1,        "short"},  -- 当日已通关数量
+	{"maxPassLevelNum",        	 1,        "short"},  -- 当日最大通关数量
+}

+ 3 - 1
script/module/role/RoleAttr.lua

@@ -47,6 +47,7 @@ local HeroSeed = require("hero.HeroSeed")
 local ElfLogic = require("elf.ElfLogic")
 local HeroTianYuan = require("hero.HeroTianYuan")
 local HeroArtifacts = require("hero.HeroArtifacts")
+local RecycleItem = require("bag.RecycleItem")
 
 
 local function printAttr(attr, szText)
@@ -186,7 +187,8 @@ function calcHeroGrid(heroGrid, index, human)
 	ElfLogic.doCalcHero(human, HERO_OTHER_ATTRS) --精灵系统
 	HeroTianYuan.doCalcHero(human, heroGrid, HERO_OTHER_ATTRS) -- 英雄天元
 	HeroArtifacts.doCalcHero(human, heroGrid, HERO_OTHER_ATTRS) -- 英雄神威灵装
-
+	RecycleItem.doCalcHero(human, HERO_OTHER_ATTRS) -- 收纳箱
+	
 	--不同模块在英雄属性计算 end	
 	
 	-- 计算评分