Commit a7c0f7792e91ae263aff01d197a63373bc416375

Authored by zhouhaihai
1 parent 9250904b

挂机加成

Showing 1 changed file with 93 additions and 7 deletions   Show diff stats
src/actions/AdvAction.lua
... ... @@ -89,6 +89,9 @@ function _M.startAdvRpc( agent, data )
89 89  
90 90 --上一个关卡结束才可以开始新的关卡
91 91 if role:getAdvData():isRunning() then return 8 end
  92 + local advHang = role:getProperty("advHang")
  93 + if advHang[chapterId] then return 9 end --正在挂机
  94 +
92 95  
93 96 local chapterData = csvdb["adv_chapterCsv"][chapterId]
94 97 if not chapterData or layer < 1 then return 1 end
... ... @@ -176,7 +179,51 @@ function _M.startAdvRpc( agent, data )
176 179 SendPacket(actionCodes.Adv_startAdvRpc, '')
177 180 return true
178 181 end
  182 +function Role:getAdvTeamAttrs(team)
  183 + local activeRelation = self:getHeroActiveRelation(team.heros)
179 184  
  185 + local player = {hp = 0, atk = 0, def = 0, hit = 0, miss = 0,
  186 + growth = {hp = 0, atk = 0, def = 0, hit = 0, miss = 0}}
  187 +
  188 + for slot, id in pairs(team.heros or {}) do
  189 + local info = {}
  190 + local hero = self.heros[id]
  191 + if not hero then
  192 + Logger.log("error heroid " .. id)
  193 + end
  194 + local attrs = hero:getTotalAttrs({activeRelation = activeRelation})
  195 +
  196 + for attrName, _ in pairs(AdvAttsEnum) do
  197 + player[attrName] = (player[attrName] or 0) + (attrs[attrName] or 0)
  198 + end
  199 + end
  200 + for attrName, _ in pairs(AdvAttsEnum) do
  201 + player[attrName] = player[attrName] * (globalCsv.adv_battle_attr_ratio[attrName] or 1)
  202 + player.growth[attrName] = player[attrName] * (globalCsv.adv_battle_attr_growth_ratio[attrName] or 1)
  203 + end
  204 +
  205 + return player
  206 +end
  207 +
  208 +---战斗力=1*生命+2*攻击+1.25*防御+0.226*命中+0.26*闪避
  209 +function Role:getAdvTeamBattleV(attrs)
  210 + local attrs = role:getTeamBattleInfo(advTeam).heros
  211 +
  212 +
  213 + for attrName, _ in pairs(AdvAttsEnum) do
  214 + for _, hero in pairs(attrs) do
  215 + player[attrName] = (player[attrName] or 0) + hero[attrName]
  216 + end
  217 + player[attrName] = getAdvLvAttrUp(advAddAttrs, attrName, player[attrName]) * (globalCsv.adv_battle_attr_ratio[attrName] or 1)
  218 + player.growth[attrName] = player[attrName] * (globalCsv.adv_battle_attr_growth_ratio[attrName] or 1)
  219 + player[attrName] = player[attrName] + player.growth[attrName] * (player.level - 1)
  220 + end
  221 + return 1 * attrs[AttsEnum.hp]
  222 + + 2 * attrs[AttsEnum.atk]
  223 + + 1.25 * attrs[AttsEnum.def]
  224 + + 0.226 * attrs[AttsEnum.hit]
  225 + + 0.26 * attrs[AttsEnum.miss]
  226 +end
180 227  
181 228 function _M.startHangRpc(agent, data)
182 229 local role = agent.role
... ... @@ -186,24 +233,39 @@ function _M.startHangRpc(agent, data)
186 233  
187 234 local chapterData = csvdb["adv_chapterCsv"][chapterId]
188 235 if not chapterData then return end
  236 + if chapterData.idleReward == "" then return end --没有奖励 没有挂机
189 237  
190 238 local advHang = role:getProperty("advHang")
191 239 if advHang[chapterId] then return end --正在挂机
192 240  
193 241 if role:getAdvData():isRunning() and role:getAdvData().chapterId == chapterId then return end
194 242  
195   - local advPass = role:getProperty("advPass")
196   - if AdvCommon.isEndless(chapterId) or advPass[chapterId] ~= chapterData.limitlevel then return end -- 没有全通关
  243 + if AdvCommon.isEndless(chapterId) then return end -- 无尽没有代理
  244 +
  245 + local advRelay = self.owner:getProperty("advRelay")
  246 + if not next(advRelay[chapterId] or {}) then return end -- 没有开放
  247 +
197 248  
198 249 if role.dailyData:getProperty("advC") >= role:getAdvHangLimit() then return end -- 是否有体力
199 250  
200 251 if not checkFormat(role, format, role:getAdvData():isRunning()) then return end --编队是否正确
201 252  
202   - local battleV = 0
203   - for _, heroId in pairs(format.heros) do
204   - local hero = role.heros[heroId]
205   - battleV = battleV + hero:getProperty("battleV")
  253 + local player = {}
  254 + local attrs = role:getTeamBattleInfo(format).heros
  255 + for attrName, _ in pairs(AdvAttsEnum) do
  256 + for _, hero in pairs(attrs) do
  257 + player[attrName] = (player[attrName] or 0) + hero[attrName]
  258 + end
  259 + player[attrName] = player[attrName] * (globalCsv.adv_battle_attr_ratio[attrName] or 1)
  260 + player.growth[attrName] = player[attrName] * (globalCsv.adv_battle_attr_growth_ratio[attrName] or 1)
206 261 end
  262 +
  263 + local battleV = 1 * player["hp"]
  264 + + 2 * player["atk"]
  265 + + 1.25 * player["def"]
  266 + + 0.226 * player["hit"]
  267 + + 0.26 * player["miss"]
  268 +
207 269 if battleV < chapterData.idleValue then return end -- 战斗力是否满足
208 270  
209 271 local info = {}
... ... @@ -276,7 +338,31 @@ function _M.endHangRpc(agent, data)
276 338  
277 339 local reward, isFull
278 340 if skynet.timex() >= info.time then
279   - reward = role:award(chapterData.idleReward, {log = {desc = "advHang", int1 = chapterId}})
  341 + -- 英雄加成
  342 + local idleUnit = chapterData.idleUnit:toNumMap()
  343 + local upUnit = 0
  344 + for slot, heroId in pairs(info.format or {}) do
  345 + if idleUnit[heroId] then
  346 + upUnit = upUnit + idleUnit[heroId]
  347 + end
  348 + end
  349 + -- 中继加成
  350 + local advPass = role:getProperty("advPass")
  351 + local maxCampsite = nil
  352 + local campsiteCsv = csvdb["adv_chapter_campsiteCsv"][chapterId]
  353 + for _, campsite in ipairs(campsiteCsv) do
  354 + if campsite.floor <= advPass[chapterId] then
  355 + maxCampsite = campsite
  356 + end
  357 + end
  358 +
  359 + if not maxCampsite then return end
  360 +
  361 + local idleReward = chapterData.idleReward:toNumMap()
  362 + for itemId, count in pairs(idleReward) do
  363 + idleReward[itemId] = count * (maxCampsite.idleValue + upUnit) / 100
  364 + end
  365 + reward = role:award(idleReward, {log = {desc = "advHang", int1 = chapterId}})
280 366 else
281 367 if cancel then
282 368 if role.dailyData:getProperty("advC") <= 0 then
... ...