diff --git a/src/actions/AdvAction.lua b/src/actions/AdvAction.lua index ebfccb9..6f961ae 100644 --- a/src/actions/AdvAction.lua +++ b/src/actions/AdvAction.lua @@ -301,18 +301,16 @@ function _M.startHangRpc(agent, data) local player = {} local attrs = role:getTeamBattleInfo(format).heros - for attrName, _ in pairs(AdvAttsEnum) do - for _, hero in pairs(attrs) do - player[attrName] = (player[attrName] or 0) + hero[attrName] + for _, hero in pairs(attrs) do + --根据系数计算拾荒属性 + role:checkPlayerAttr(hero) + + for attrName, _ in pairs(AdvAttsEnum) do + player[attrName] = (player[attrName] or 0) + hero[attrName] end - player[attrName] = player[attrName] * (globalCsv.adv_battle_attr_ratio[attrName] or 1) end - local battleV = 1 * player["hp"] - + 2 * player["atk"] - + 1.25 * player["def"] - + 0.226 * player["hit"] - + 0.26 * player["miss"] + local battleV = role:getSurvivability(player, #attrs) --print(math.ceil(battleV), campSiteData.idleValue) if math.ceil(battleV) < campSiteData.idleValue then return 9 end -- 战斗力是否满足 diff --git a/src/adv/Adv.lua b/src/adv/Adv.lua index 0ff3ebb..7abca0a 100644 --- a/src/adv/Adv.lua +++ b/src/adv/Adv.lua @@ -930,18 +930,16 @@ function Adv:over(success, rewardRatio, overType) local team = self.owner:getProperty("advTeam") local player = {} local attrs = self.owner:getTeamBattleInfo(team).heros - for attrName, _ in pairs(AdvAttsEnum) do - for _, hero in pairs(attrs) do - player[attrName] = (player[attrName] or 0) + hero[attrName] + for _, hero in pairs(attrs) do + --根据系数计算拾荒属性 + self.owner:checkPlayerAttr(hero) + + for attrName, _ in pairs(AdvAttsEnum) do + player[attrName] = (player[attrName] or 0) + hero[attrName] end - player[attrName] = player[attrName] * (globalCsv.adv_battle_attr_ratio[attrName] or 1) end - local battleV = 1 * player["hp"] - + 2 * player["atk"] - + 1.25 * player["def"] - + 0.226 * player["hit"] - + 0.26 * player["miss"] + local battleV = self.owner:getSurvivability(player, #attrs) local heroList = {team.leader, team.leader2} for _, hid in pairs(team.heros) do diff --git a/src/adv/AdvBattle.lua b/src/adv/AdvBattle.lua index 08254e7..bdf23ab 100644 --- a/src/adv/AdvBattle.lua +++ b/src/adv/AdvBattle.lua @@ -95,14 +95,13 @@ function Battle:initPlayer() local attrs = self.adv.owner:getTeamBattleInfo(advTeam).heros + for _, hero in pairs(attrs) do + --根据系数计算拾荒属性 + self.adv.owner:checkPlayerAttr(hero) - for attrName, _ in pairs(AdvAttsEnum) do - for _, hero in pairs(attrs) do - player[attrName] = (player[attrName] or 0) + hero[attrName] + for attrName, _ in pairs(AdvAttsEnum) do + player[attrName] = (player[attrName] or 0) + hero[attrName] end - player[attrName] = getAdvLvAttrUp(advAddAttrs, attrName, player[attrName]) * (globalCsv.adv_battle_attr_ratio[attrName] or 1) - -- player.growth[attrName] = player[attrName] * (globalCsv.adv_battle_attr_growth_ratio[attrName] or 1) - -- player[attrName] = player[attrName] + player.growth[attrName] * (player.level - 1) end player.hpMax = player.hp or 0 diff --git a/src/models/RoleBattle.lua b/src/models/RoleBattle.lua index 327e054..bdb5ca0 100644 --- a/src/models/RoleBattle.lua +++ b/src/models/RoleBattle.lua @@ -348,9 +348,41 @@ function Role:checkBattle(battleType, params) }) end + local function initPlayer(player) + player["hp"] = player["hp"] or 0 + player["atk"] = player["atk"] or 0 + player["def"] = player["def"] or 0 + player["hit"] = player["hit"] or 0 + player["miss"] = player["miss"] or 0 + player["crit"] = player["crit"] or 0 + player["critHurt"] = player["critHurt"] or 0 + player["pierce"] = player["pierce"] or 0 + player["vampire"] = player["vampire"] or 0 + end + + function Role:checkPlayerAttr(player) + if next(player) == nil then return end + initPlayer(player) + player["hp"] = math.floor(player["hp"] / globalCsv.adv_battle_attr_ratio["hp"]) + player["atk"] = math.floor(player["atk"] / globalCsv.adv_battle_attr_ratio["atk"]) + player["def"] = math.floor(player["def"] / globalCsv.adv_battle_attr_ratio["def"]) + player["hit"] = math.floor((player["hit"] + player["miss"] )/ globalCsv.adv_battle_attr_ratio["hit"]) + player["miss"] = math.floor((player["crit"] + player["critHurt"] + player["pierce"] + player["vampire"])/ globalCsv.adv_battle_attr_ratio["miss"]) + end + function Role:getSurvivability(player, heroCount) + if next(player) == nil then return 0 end + heroCount = heroCount or 1 + initPlayer(player) + local battleV = (globalCsv.adv_battle_fight_points["hp"] * player["hp"] + + globalCsv.adv_battle_fight_points["atk"] * player["atk"] + + globalCsv.adv_battle_fight_points["def"] * player["def"] + + globalCsv.adv_battle_fight_points["hit"] * player["hit"] ) + * (1 + (player["miss"]- heroCount * globalCsv.adv_battle_fight_points["miss"])/ 100) + return battleV + end end -- libgit2 0.21.2