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

英雄天元系统增加下一次提升属性预览

gitxsm 3 месяцев назад
Родитель
Сommit
76c84a93d3
2 измененных файлов с 101 добавлено и 52 удалено
  1. 100 52
      script/module/hero/HeroTianYuan.lua
  2. 1 0
      script/module/hero/Proto.lua

+ 100 - 52
script/module/hero/HeroTianYuan.lua

@@ -54,24 +54,24 @@ local function openCheck(human, heroID, heroIndex)
 end
 
 -- 获取正确的消耗道具信息
-local function getTargetItem(nowStage, nowPointIdx, maxStage)
+local function getTargetItemArr(nowStage, nowPointIdx, maxStage)
     local varCfg = HeroTianYuanCfg.var[1]
-    local targetStageCfgIdx = nowStage
+    local targetStageCfgIdx = math.min(nowStage + 1, maxStage)
+    local targetStageCfg = HeroTianYuanCfg.upGrade[targetStageCfgIdx]
 
-    local item
-    if nowPointIdx < varCfg.pointMaxNum then
-        if targetStageCfgIdx <= 0 then
-            targetStageCfgIdx = 1
-        end
-
-        item = HeroTianYuanCfg.upGrade[targetStageCfgIdx].pointCost[1]
+    local itemCfg
+    if nowPointIdx < varCfg.pointMaxNum and nowStage < maxStage then
+        itemCfg = targetStageCfg.pointCost
     else
-        targetStageCfgIdx = math.min((targetStageCfgIdx+1), maxStage)
+        itemCfg = targetStageCfg.stageCost
+    end
 
-        item = HeroTianYuanCfg.upGrade[targetStageCfgIdx].stageCost[1]
+    local itemArr = {}
+    for i, itemInfo in ipairs(itemCfg) do
+        itemArr[i] = { itemInfo[1], itemInfo[2] }
     end
 
-    return item
+    return itemArr
 end
 
 local function transformData(targetList, sourceArr, mul)
@@ -93,33 +93,38 @@ local function calcData(nowStage, nowPointIdx, dataType)
     local maxPointNum = HeroTianYuanCfg.var[1].pointMaxNum
 
     for i = 1, nowStage do
-        local cfg = HeroTianYuanCfg.upGrade[i]
-        local sourceData = cfg.pointCost
-
-        -- 天元点
-        local pointNum = 0
-        if i == nowStage and nowPointIdx > 0 then
-            pointNum = nowPointIdx
-        elseif i ~= nowStage then
-            pointNum = maxPointNum
-        end
-
-        if pointNum > 0 then
+        -- 天元突破的消耗道具/加成属性
+        local stageCfg = HeroTianYuanCfg.upGrade[i]
+        if stageCfg then
+            local sourceData = stageCfg.stageCost
             if dataType == 1 then
-                sourceData = cfg.pointAttrs
+                sourceData = stageCfg.stageAttrs
             end
-            transformData(dataList, sourceData, pointNum)
+            transformData(dataList, sourceData)
         end
 
-        -- 天元突破
-        sourceData = cfg.stageCost
-        if dataType == 1 then
-            sourceData = cfg.stageAttrs
+        -- 天元点的消耗道具/加成属性
+        stageCfg = HeroTianYuanCfg.upGrade[i+1]
+        if stageCfg then
+            local sourceData = stageCfg.pointCost
+            local pointNum = 0
+
+            if i == nowStage and nowPointIdx > 0 then
+                pointNum = nowPointIdx
+            elseif i ~= nowStage then
+                pointNum = maxPointNum
+            end
+
+            if pointNum > 0 then
+                if dataType == 1 then
+                    sourceData = stageCfg.pointAttrs
+                end
+                transformData(dataList, sourceData, pointNum)
+            end
         end
-        transformData(dataList, sourceData)
     end
 
-    -- 0 ~ 1重的天元点
+    -- 0 ~ 1重天元点的消耗道具/加成属性
     local pointNum = nowPointIdx
     if nowStage >= 1 then
         pointNum = maxPointNum
@@ -135,6 +140,18 @@ local function calcData(nowStage, nowPointIdx, dataType)
     return dataList
 end
 
+-- 获取下一次提升增加的属性
+local function getNextAttrs(nowStage, nowPointIdx, maxPointNum)
+    nowStage = math.min(nowStage+1, #HeroTianYuanCfg.upGrade)
+    local stageCfg = HeroTianYuanCfg.upGrade
+
+    if nowPointIdx >= maxPointNum then -- 当前天元点已全部点亮, 需要突破天元
+        return stageCfg.stageAttrs
+    else
+        return stageCfg.pointAttrs
+    end
+end
+
 -- 更新战力
 local function updatePower(human, heroID, heroIndex)
     RoleAttr.cleanHeroAttrCache(human)
@@ -157,13 +174,15 @@ function isTianYuanDot(human, heroGrid)
     local nowStage = tianYuanData and tianYuanData.stage or 0
     local maxStage = #HeroTianYuanCfg.upGrade
 
-    if nowStage >= maxStage and nowPointIdx >= varCfg.pointMaxNum then
+    if nowStage >= maxStage then
         return false
     end
 
-    local item = getTargetItem(nowStage, nowPointIdx, maxStage)
-    if BagLogic.getItemCnt(human, item[1]) < item[2] then
-        return false
+    local itemArr = getTargetItemArr(nowStage, nowPointIdx, maxStage)
+    for _, item in ipairs(itemArr) do
+        if BagLogic.getItemCnt(human, item[1]) < item[2] then
+            return false
+        end
     end
 
     return true
@@ -230,17 +249,27 @@ function HeroTianYuan_Query(human, heroID, heroIndex)
     msgRet.maxPoint = maxPointNum
 
     -- 消耗
-    local itemTb = getTargetItem(nowStage, nowPointIdx, msgRet.stageMax)
-    local itemId, itemCnt = itemTb[1], itemTb[2]
+    local itemArr = getTargetItemArr(nowStage, nowPointIdx, msgRet.stageMax)
+    local item = itemArr[1]
+    local itemId, itemCnt = item[1], item[2]
     if nowStage >= msgRet.stageMax then
         itemCnt = 0
     end
     Grid.makeItem(msgRet.cost, itemId, itemCnt)
 
+    -- msgRet.cost[0] = #itemArr
+    -- for i, item in ipairs(itemArr) do
+    --     local itemId, itemCnt = item[1], item[2]
+    --     if nowStage >= msgRet.stageMax then
+    --         itemCnt = 0
+    --     end
+
+    --     Grid.makeItem(msgRet.cost[i], itemId, itemCnt)
+    -- end
 
     -- 总加成属性
     msgRet.attrs[0] = 0
-    local attrs =  calcData(nowStage, nowPointIdx, 1)
+    local attrs = calcData(nowStage, nowPointIdx, 1)
     if attrs then
         local len = 0
         for attrId, attrVal in pairs(attrs) do
@@ -251,6 +280,19 @@ function HeroTianYuan_Query(human, heroID, heroIndex)
         end
     end
 
+    -- 下一次提升增加的属性
+    msgRet.nextAttrs[0] = 0
+    if nowStage < msgRet.stageMax then
+        local nextAttrs = getNextAttrs(nowStage, nowPointIdx, maxPointNum)
+        if nextAttrs then
+            msgRet.nextAttrs[0] = #nextAttrs
+            for i, attrTb in ipairs(nextAttrs) do
+                msgRet.nextAttrs[i].key = attrTb[1]
+                msgRet.nextAttrs[i].value = attrTb[2]
+            end
+        end
+    end
+
     Msg.send(msgRet, human.fd)
 end
 
@@ -272,25 +314,29 @@ function HeroTianYuan_PointUpGrade(human, heroID, heroIndex)
         return Broadcast.sendErr(human, Lang.HERO_TY_POINT_MAX)
     end
 
-    local targetCfgIdx = nowStage
-    if targetCfgIdx <= 0 then
-        targetCfgIdx = 1
+    if nowStage >= #HeroTianYuanCfg.upGrade then
+        return Broadcast.sendErr(human, Lang.HERO_TY_STAGE_MAX)
     end
 
+    local targetCfgIdx = nowStage + 1
     local targetStageCfg = HeroTianYuanCfg.upGrade[targetCfgIdx]
+
     if not targetStageCfg then
         return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
     end
 
     -- 消耗检查
-    local itemTb = targetStageCfg.pointCost
-    local itemId, itemCnt = itemTb[1][1], itemTb[1][2]
-    if BagLogic.getItemCnt(human, itemId) < itemCnt then
-        return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
+    for _, itemInfo in ipairs(targetStageCfg.pointCost) do
+        if BagLogic.getItemCnt(human, itemInfo[1]) < itemInfo[2] then
+            return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
+        end
     end
 
     -- 扣除消耗
-    BagLogic.delItem(human, itemId, itemCnt, LOGTAG)
+    for _, itemInfo in ipairs(targetStageCfg.pointCost) do
+        BagLogic.delItem(human, itemInfo[1], itemInfo[2], LOGTAG)
+    end
+
 
     -- 更新点亮天元点索引
     nowPointIdx = nowPointIdx + 1
@@ -335,14 +381,16 @@ function HeroTianYuan_StageUpGrade(human, heroID, heroIndex)
     end
 
     -- 消耗检查
-    local itemTb = nextStageCfg.stageCost
-    local itemId, itemCnt = itemTb[1][1], itemTb[1][2]
-    if BagLogic.getItemCnt(human, itemId) < itemCnt then
-        return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
+    for _, itemInfo in ipairs(nextStageCfg.stageCost) do
+        if BagLogic.getItemCnt(human, itemInfo[1]) < itemInfo[2] then
+            return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
+        end
     end
 
     -- 扣除消耗
-    BagLogic.delItem(human, itemId, itemCnt, LOGTAG)
+    for _, itemInfo in ipairs(nextStageCfg.stageCost) do
+        BagLogic.delItem(human, itemInfo[1], itemInfo[2], LOGTAG)
+    end
 
     -- 更新天元点索引, 天元重数
     updateData(heroGrid, 0, nextStage)

+ 1 - 0
script/module/hero/Proto.lua

@@ -1008,6 +1008,7 @@ GC_HEROTY_QUERY = {
 	{"attrs",		6,		Attr}, 		-- 总加成属性
 	{"cost", 		1,     ItemData},	-- 点亮/突破消耗的道具,没法升级后数量为0
 	{"maxPoint",	1,		"short"}, 	-- 最大可点亮天元点数量
+	{"nextAttrs",	6,		Attr}, 		-- 下一次提升的属性
 }
 
 -- 点亮天元