Commit a7c0f7792e91ae263aff01d197a63373bc416375
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 | ... | ... |