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,6 +89,9 @@ function _M.startAdvRpc( agent, data ) | ||
89 | 89 | ||
90 | --上一个关卡结束才可以开始新的关卡 | 90 | --上一个关卡结束才可以开始新的关卡 |
91 | if role:getAdvData():isRunning() then return 8 end | 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 | local chapterData = csvdb["adv_chapterCsv"][chapterId] | 96 | local chapterData = csvdb["adv_chapterCsv"][chapterId] |
94 | if not chapterData or layer < 1 then return 1 end | 97 | if not chapterData or layer < 1 then return 1 end |
@@ -176,7 +179,51 @@ function _M.startAdvRpc( agent, data ) | @@ -176,7 +179,51 @@ function _M.startAdvRpc( agent, data ) | ||
176 | SendPacket(actionCodes.Adv_startAdvRpc, '') | 179 | SendPacket(actionCodes.Adv_startAdvRpc, '') |
177 | return true | 180 | return true |
178 | end | 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 | function _M.startHangRpc(agent, data) | 228 | function _M.startHangRpc(agent, data) |
182 | local role = agent.role | 229 | local role = agent.role |
@@ -186,24 +233,39 @@ function _M.startHangRpc(agent, data) | @@ -186,24 +233,39 @@ function _M.startHangRpc(agent, data) | ||
186 | 233 | ||
187 | local chapterData = csvdb["adv_chapterCsv"][chapterId] | 234 | local chapterData = csvdb["adv_chapterCsv"][chapterId] |
188 | if not chapterData then return end | 235 | if not chapterData then return end |
236 | + if chapterData.idleReward == "" then return end --没有奖励 没有挂机 | ||
189 | 237 | ||
190 | local advHang = role:getProperty("advHang") | 238 | local advHang = role:getProperty("advHang") |
191 | if advHang[chapterId] then return end --正在挂机 | 239 | if advHang[chapterId] then return end --正在挂机 |
192 | 240 | ||
193 | if role:getAdvData():isRunning() and role:getAdvData().chapterId == chapterId then return end | 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 | if role.dailyData:getProperty("advC") >= role:getAdvHangLimit() then return end -- 是否有体力 | 249 | if role.dailyData:getProperty("advC") >= role:getAdvHangLimit() then return end -- 是否有体力 |
199 | 250 | ||
200 | if not checkFormat(role, format, role:getAdvData():isRunning()) then return end --编队是否正确 | 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 | end | 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 | if battleV < chapterData.idleValue then return end -- 战斗力是否满足 | 269 | if battleV < chapterData.idleValue then return end -- 战斗力是否满足 |
208 | 270 | ||
209 | local info = {} | 271 | local info = {} |
@@ -276,7 +338,31 @@ function _M.endHangRpc(agent, data) | @@ -276,7 +338,31 @@ function _M.endHangRpc(agent, data) | ||
276 | 338 | ||
277 | local reward, isFull | 339 | local reward, isFull |
278 | if skynet.timex() >= info.time then | 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 | else | 366 | else |
281 | if cancel then | 367 | if cancel then |
282 | if role.dailyData:getProperty("advC") <= 0 then | 368 | if role.dailyData:getProperty("advC") <= 0 then |