|
|
@@ -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)
|