Commit b53593b50b5bb54689577b9da9e88beaa12bb26f
1 parent
33db89b8
羁绊加成
Showing
4 changed files
with
63 additions
and
12 deletions
Show diff stats
src/adv/AdvBattle.lua
| ... | ... | @@ -27,29 +27,42 @@ function Battle:initAfter() |
| 27 | 27 | self.enemy = enemy |
| 28 | 28 | end |
| 29 | 29 | end |
| 30 | +--[[ | |
| 31 | +队伍总属性 = 基础属性 + 等级 × 成长率 | |
| 32 | + 基础属性: 固定属性,与章节、队伍够成、养成无关,由策划给出 | |
| 33 | + 等级: 根据进入时的关卡,获得一个【初始等级】;消灭怪物获得经验后,累计N点会提升等级 | |
| 34 | + 羁绊加成: 加成条件与“战斗”相同,加成目标改为【冒险队】 | |
| 35 | + | |
| 36 | + 成长率: 由【队伍总生存力】决定 | |
| 37 | + 成长率 =(总生存力 / 80)^0.52 + INT(总角色等级 / 50)* 1 | |
| 38 | +--]] | |
| 30 | 39 | |
| 31 | 40 | function Battle:initPlayer() |
| 32 | 41 | if not next(self.adv.advTeam.heros) then return end |
| 33 | 42 | if not self.adv.advTeam.player then |
| 34 | - local hp = 0 | |
| 35 | 43 | local player = {} |
| 36 | 44 | player.passives = {} |
| 45 | + local heroLevel = 0 | |
| 37 | 46 | for slot, heroId in pairs(self.adv.advTeam.heros) do |
| 38 | - if self.adv.owner.heros[heroId] then | |
| 39 | - hp = hp + self.adv.owner.heros[heroId]:getProperty("battleV") | |
| 47 | + local hero = self.adv.owner.heros[heroId] | |
| 48 | + if hero then | |
| 49 | + heroLevel = heroLevel + hero:getProperty("level") | |
| 40 | 50 | local advSkillId = csvdb["unitCsv"][self.adv.owner.heros[heroId]:getSkinId()]["adv"] |
| 41 | 51 | if advSkillId > 1000 then |
| 42 | - table.insert(player.passives, {id = advSkillId, level = self.adv.owner.heros[heroId]:getSkillLevel(4)}) | |
| 52 | + table.insert(player.passives, {id = advSkillId, level = hero:getSkillLevel(4)}) | |
| 43 | 53 | end |
| 44 | 54 | end |
| 45 | 55 | end |
| 56 | + player.growth = (self.adv.owner:getRealBattleValue(self.adv.advTeam.heros) / 80) ^ 0.52 + math.floor(heroLevel / 50) / 50 | |
| 57 | + player.level = 0 | |
| 58 | + player.exp = 0 | |
| 46 | 59 | local activeRelation = self.adv.owner:getHeroActiveRelation() |
| 47 | - -- todo | |
| 48 | - player.hp = hp | |
| 49 | - player.atk = tonumber(string.format("%0.0f", player.hp * 0.1)) --todo 系数是临时的 | |
| 50 | - player.def = 0 | |
| 51 | - player.miss = 0 | |
| 52 | - player.hit = 100 | |
| 60 | + local baseAttr = csvdb["adv_unitCsv"][math.floor(self.adv.advInfo.chapter / 100)] | |
| 61 | + for _, attr in pairs(AttsEnumEx) do | |
| 62 | + if baseAttr[attr] then | |
| 63 | + player[attr] = baseAttr[attr] + baseAttr[attr] * player.growth * player.level | |
| 64 | + end | |
| 65 | + end | |
| 53 | 66 | self.adv.advTeam.player = player |
| 54 | 67 | self.isNewPlayer = true |
| 55 | 68 | end | ... | ... |
src/adv/AdvPlayer.lua
| ... | ... | @@ -447,4 +447,23 @@ function Player:cutHp(value) |
| 447 | 447 | self.battle.adv:scoreChange(AdvScoreType.Hurt, value) |
| 448 | 448 | end |
| 449 | 449 | |
| 450 | +function Player:initData(data) | |
| 451 | + Player.super.initData(self, data) | |
| 452 | + self.level = data.level or 0 --level 每增加1级 属性增长 growth * baseAttr | |
| 453 | + self.growth = data.growth or 0 | |
| 454 | + self.exp = data.exp or 0 | |
| 455 | +end | |
| 456 | + | |
| 457 | +function Player:addExp(value) | |
| 458 | + -- todo | |
| 459 | +end | |
| 460 | + | |
| 461 | +function Player:getDB() | |
| 462 | + local db = Player.super.getDB(self) | |
| 463 | + for _ , field in pairs({level, exp, growth}) do | |
| 464 | + db[field] = self[field] | |
| 465 | + end | |
| 466 | + return db | |
| 467 | +end | |
| 468 | + | |
| 450 | 469 | return table.pack(Player, Enemy) |
| 451 | 470 | \ No newline at end of file | ... | ... |
src/models/HeroPlugin.lua
| ... | ... | @@ -95,6 +95,7 @@ function HeroPlugin.bind(Hero) |
| 95 | 95 | |
| 96 | 96 | --当前属性 = [ 角色属性值 + 基础装备(固定)+ 专属装备(固定)] * [ 1 + 基础装备(百分比) + 专属装备(百分比)] |
| 97 | 97 | function Hero:getTotalAttrs(params) |
| 98 | + params = params or {} | |
| 98 | 99 | local attrs = self:getBaseAttrs() |
| 99 | 100 | -- 装备零件 |
| 100 | 101 | local equipAttrs = self:getRuneEquipAttrs() |
| ... | ... | @@ -103,6 +104,12 @@ function HeroPlugin.bind(Hero) |
| 103 | 104 | attrs[attName] = ((attrs[attName] or 0) + equipAttrs.value[attName]) * (1 + equipAttrs.precent[attName] / 100) |
| 104 | 105 | end |
| 105 | 106 | |
| 107 | + -- 羁绊加成 | |
| 108 | + if params.activeRelation then | |
| 109 | + for k, v in pairs(AttsEnumEx) do | |
| 110 | + attrs[v] = (attrs[v] or 0) * (1 + (params.activeRelation[v] or 0) / 100) | |
| 111 | + end | |
| 112 | + end | |
| 106 | 113 | return attrs |
| 107 | 114 | end |
| 108 | 115 | |
| ... | ... | @@ -180,8 +187,8 @@ function HeroPlugin.bind(Hero) |
| 180 | 187 | end |
| 181 | 188 | |
| 182 | 189 | -- 战斗力(当前属性)= POWER[(生命 + 防御 * 7 + 闪避 * 4)*(攻击 + 命中 * 4)*(1 + 暴击几率/100 * 暴击伤害/100)* 攻击速度 / 60000 ,0.8 ] |
| 183 | - function Hero:getBattleValue() | |
| 184 | - local attrs = self:getTotalAttrs() | |
| 190 | + function Hero:getBattleValue(activeRelation) | |
| 191 | + local attrs = self:getTotalAttrs({activeRelation = activeRelation}) | |
| 185 | 192 | local battleValue = ((attrs["hp"] + attrs["def"] * 7 + attrs["miss"] * 4) * (attrs["atk"] + attrs["hit"] * 4) * (1 + attrs["crit"]/100 * attrs["critHurt"]/100) * attrs["atkSpeed"] / 60000) ^ 0.8 |
| 186 | 193 | return math.floor(battleValue) |
| 187 | 194 | end | ... | ... |
src/models/RolePlugin.lua
| ... | ... | @@ -568,6 +568,18 @@ function RolePlugin.bind(Role) |
| 568 | 568 | end |
| 569 | 569 | return result |
| 570 | 570 | end |
| 571 | + | |
| 572 | + function Role:getRealBattleValue(heros) -- 获取队伍战斗力 羁绊加成 | |
| 573 | + local activeRelation = self:getHeroActiveRelation(heros) | |
| 574 | + local battleValue = 0 | |
| 575 | + for _, id in pairs(heros) do | |
| 576 | + local hero = self.heros[id] | |
| 577 | + if hero then | |
| 578 | + battleValue = battleValue + hero:getBattleValue(activeRelation) | |
| 579 | + end | |
| 580 | + end | |
| 581 | + return battleValue | |
| 582 | + end | |
| 571 | 583 | end |
| 572 | 584 | |
| 573 | 585 | return RolePlugin |
| 574 | 586 | \ No newline at end of file | ... | ... |