Commit 53227d9c2f3b86eb471baaa5c73885d46c625bd9

Authored by zhouhaihai
1 parent e8ca14c4

pvp 编队胜利推送

Showing 2 changed files with 73 additions and 11 deletions   Show diff stats
src/actions/PvpAction.lua
@@ -23,6 +23,7 @@ local _revengeRecord = {} -- 复仇对单人1分钟间隔 @@ -23,6 +23,7 @@ local _revengeRecord = {} -- 复仇对单人1分钟间隔
23 local RevengeWaitTime = 60 23 local RevengeWaitTime = 60
24 24
25 function _M.formatCommonRpc(agent , data) 25 function _M.formatCommonRpc(agent , data)
  26 + if true then return end
26 local role = agent.role 27 local role = agent.role
27 local roleId = role:getProperty("id") 28 local roleId = role:getProperty("id")
28 local msg = MsgPack.unpack(data) 29 local msg = MsgPack.unpack(data)
@@ -63,7 +64,8 @@ function _M.formatHighRpc(agent , data) @@ -63,7 +64,8 @@ function _M.formatHighRpc(agent , data)
63 local role = agent.role 64 local role = agent.role
64 local roleId = role:getProperty("id") 65 local roleId = role:getProperty("id")
65 local msg = MsgPack.unpack(data) 66 local msg = MsgPack.unpack(data)
66 - 67 +
  68 + if not role:isCrossServerPvpPlayer() then return end
67 local pvpTH = {} 69 local pvpTH = {}
68 local had = {} -- 上阵的角色 70 local had = {} -- 上阵的角色
69 local supportHad = {} 71 local supportHad = {}
@@ -258,6 +260,36 @@ function _M.startBattleRpc(agent, data) @@ -258,6 +260,36 @@ function _M.startBattleRpc(agent, data)
258 local pvpTC = role:getProperty("pvpTC") 260 local pvpTC = role:getProperty("pvpTC")
259 if not pvpTC.heros or not next(pvpTC.heros) then return 1 end 261 if not pvpTC.heros or not next(pvpTC.heros) then return 1 end
260 262
  263 + local team = msg.team
  264 + if not team then return end
  265 +
  266 + for slot, heroId in pairs(team.heros or {}) do
  267 + if not role.heros[heroId] then
  268 + return
  269 + end
  270 + end
  271 + if not team.heros or not next(team.heros) then
  272 + return
  273 + end
  274 + local supports = {}
  275 + for slot, support in pairs(team.supports) do
  276 + if slot ~= 1 and slot ~= 2 then return end
  277 + local level = role.dinerData:getProperty("dishTree"):getv(support, 0)
  278 + if level <= 0 then return end
  279 + supports[slot] = support
  280 + end
  281 +
  282 + local pvpTC = {}
  283 + pvpTC.heros = {}
  284 + for slot, heroId in pairs(team.heros) do
  285 + pvpTC.heros[slot] = heroId
  286 + end
  287 + pvpTC.leader = team.leader
  288 + pvpTC.supports = supports
  289 + if team.tactics and globalCsv.tactics_skill_passive_cell[team.tactics] then
  290 + pvpTC.tactics = team.tactics
  291 + end
  292 +
261 local matchInfo, result, key, wait 293 local matchInfo, result, key, wait
262 294
263 local now = skynet.timex() 295 local now = skynet.timex()
@@ -299,7 +331,7 @@ function _M.startBattleRpc(agent, data) @@ -299,7 +331,7 @@ function _M.startBattleRpc(agent, data)
299 end 331 end
300 332
301 key = tostring(math.random()) 333 key = tostring(math.random())
302 - _pvpStartBattleCacheC = {idx = idx, key = key, revenge = revenge} 334 + _pvpStartBattleCacheC = {idx = idx, key = key, revenge = revenge, pvpTC = pvpTC}
303 335
304 role:checkTaskEnter("PvpBattle") 336 role:checkTaskEnter("PvpBattle")
305 337
@@ -342,7 +374,15 @@ function _M.endBattleRpc(agent, data) @@ -342,7 +374,15 @@ function _M.endBattleRpc(agent, data)
342 374
343 local temp = string.randWeight(csvdb["player_expCsv"][role:getProperty("level")].pvpBonus, true) 375 local temp = string.randWeight(csvdb["player_expCsv"][role:getProperty("level")].pvpBonus, true)
344 local reward, change = role:award({[temp[1]] = temp[2]}, {log = {desc = "pvpBattleC"}}) 376 local reward, change = role:award({[temp[1]] = temp[2]}, {log = {desc = "pvpBattleC"}})
345 - local myScore, matchScore, oldmyScore, oldMatchScore, myRank, oldMyRank = role:changePvpScoreCommon(match.t == 1 and match.id or -1, isWin) 377 + local myScore, matchScore, oldmyScore, oldMatchScore, myRank, oldMyRank = 0, 0, 0, 0, -1, -1
  378 + -- 失败了没再排行榜 不计入
  379 + if isWin or (not isWin and role:isInPvpRank(RANK_PVP_COMMON)) then
  380 + myScore, matchScore, oldmyScore, oldMatchScore, myRank, oldMyRank= role:changePvpScoreCommon(match.t == 1 and match.id or -1, isWin)
  381 + end
  382 + if isWin then
  383 + -- 记录编队
  384 + role:savePvpCTeam(_pvpStartBattleCacheC.pvpTC)
  385 + end
346 386
347 -- 请求上传录像 387 -- 请求上传录像
348 local params = { 388 local params = {
@@ -472,7 +512,6 @@ function _M.startBattleHRpc(agent, data) @@ -472,7 +512,6 @@ function _M.startBattleHRpc(agent, data)
472 curTeam.tactics = team.tactics 512 curTeam.tactics = team.tactics
473 end 513 end
474 514
475 -  
476 table.insert(pvpTH, curTeam) 515 table.insert(pvpTH, curTeam)
477 end 516 end
478 517
@@ -644,9 +683,18 @@ function _M.endBattleHRpc(agent, data) @@ -644,9 +683,18 @@ function _M.endBattleHRpc(agent, data)
644 -- 战斗结束了发奖 683 -- 战斗结束了发奖
645 local temp = string.randWeight(csvdb["player_expCsv"][role:getProperty("level")].pvpgroupBonus, true) 684 local temp = string.randWeight(csvdb["player_expCsv"][role:getProperty("level")].pvpgroupBonus, true)
646 local reward, change = role:award({[temp[1]] = temp[2]}, {log = {desc = "pvpBattleH"}}) 685 local reward, change = role:award({[temp[1]] = temp[2]}, {log = {desc = "pvpBattleH"}})
647 - local myScore, matchScore, oldmyScore, oldMatchScore, myRank, oldMyRank = 0, 0, 0, 0, 0, 0  
648 - if role:isTimeResetOpen(TimeReset.PvpHight) then  
649 - myScore, matchScore, oldmyScore, oldMatchScore, myRank, oldMyRank = role:changePvpScoreHigh(match.t == 1 and match.id or -1, isWin) 686 +
  687 +
  688 + local myScore, matchScore, oldmyScore, oldMatchScore, myRank, oldMyRank = 0, 0, 0, 0, -1, -1
  689 + -- 失败了没再排行榜 不计入
  690 + if role:isTimeResetOpen(TimeReset.PvpHight) then
  691 + if isWin or (not isWin and role:isInPvpRank(RANK_PVP_HIGHT)) then
  692 + myScore, matchScore, oldmyScore, oldMatchScore, myRank, oldMyRank = role:changePvpScoreHigh(match.t == 1 and match.id or -1, isWin)
  693 + end
  694 + -- 记录编队
  695 + if isWin then
  696 + role:savePvpHTeam(_pvpStartBattleCacheH.pvpTH)
  697 + end
650 end 698 end
651 699
652 -- 加入战斗记录 700 -- 加入战斗记录
src/models/RolePvp.lua
@@ -6,7 +6,7 @@ RolePvp.bind = function (Role) @@ -6,7 +6,7 @@ RolePvp.bind = function (Role)
6 local PVP_RANK_TIME_SORT_STD = 1924876800 -- 2030-12-31 00:00:00 6 local PVP_RANK_TIME_SORT_STD = 1924876800 -- 2030-12-31 00:00:00
7 local PVP_RANK_TIME_SORT_PLACE = 1000000 -- 时间戳占据 6位数 7 local PVP_RANK_TIME_SORT_PLACE = 1000000 -- 时间戳占据 6位数
8 local PVP_RANK_TIME_SORT_PRECISION = 360 -- 时间精度 每6分钟忽略差异 8 local PVP_RANK_TIME_SORT_PRECISION = 360 -- 时间精度 每6分钟忽略差异
9 -local PVP_RANK_ROBOT_SCORE = globalCsv.pvp_base_score -- 机器人积分 9 +local PVP_RANK_BASE_SCORE = globalCsv.pvp_base_score -- 机器人积分
10 10
11 11
12 function Role:unpackPvpScore(score) 12 function Role:unpackPvpScore(score)
@@ -34,7 +34,7 @@ function Role:changePvpScore(rankKey, changeScoreCallback, matchId) @@ -34,7 +34,7 @@ function Role:changePvpScore(rankKey, changeScoreCallback, matchId)
34 end) 34 end)
35 local myScore = self:unpackPvpScore(redret[1]) 35 local myScore = self:unpackPvpScore(redret[1])
36 local oldMyRank = tonumber(redret[2] or -2) + 1 36 local oldMyRank = tonumber(redret[2] or -2) + 1
37 - local matchScore = PVP_RANK_ROBOT_SCORE 37 + local matchScore = PVP_RANK_BASE_SCORE
38 if isPlayer then 38 if isPlayer then
39 matchScore = self:unpackPvpScore(redret[3]) 39 matchScore = self:unpackPvpScore(redret[3])
40 end 40 end
@@ -68,7 +68,7 @@ function Role:changePvpScoreCommon(matchId, isWin) @@ -68,7 +68,7 @@ function Role:changePvpScoreCommon(matchId, isWin)
68 if isWin then 68 if isWin then
69 local scoreChange = math.ceil(60 / (1 + 10 ^ ((myScore - matchScore) / 400))) 69 local scoreChange = math.ceil(60 / (1 + 10 ^ ((myScore - matchScore) / 400)))
70 myScore = myScore + scoreChange 70 myScore = myScore + scoreChange
71 - matchScore = matchScore - scoreChange 71 + matchScore = matchScore - math.ceil(scoreChange / 3) -- 防守方失败时,扣分减为原来的1/3
72 else 72 else
73 local scoreChange = math.ceil(60 / (1 + 10 ^ ((matchScore - myScore) / 400))) 73 local scoreChange = math.ceil(60 / (1 + 10 ^ ((matchScore - myScore) / 400)))
74 myScore = myScore - scoreChange 74 myScore = myScore - scoreChange
@@ -134,7 +134,7 @@ function Role:changePvpScoreHigh(matchId, isWin) @@ -134,7 +134,7 @@ function Role:changePvpScoreHigh(matchId, isWin)
134 if isWin then 134 if isWin then
135 local scoreChange = math.ceil(50 / (1 + 10 ^ ((myScore - matchScore) / 1000))) 135 local scoreChange = math.ceil(50 / (1 + 10 ^ ((myScore - matchScore) / 1000)))
136 myScore = myScore + scoreChange 136 myScore = myScore + scoreChange
137 - matchScore = matchScore - scoreChange 137 + matchScore = matchScore - math.ceil(scoreChange / 3) -- 防守方失败时,扣分减为原来的1/3
138 else 138 else
139 local scoreChange = math.ceil(50 / (1 + 10 ^ ((matchScore - myScore) / 1000))) 139 local scoreChange = math.ceil(50 / (1 + 10 ^ ((matchScore - myScore) / 1000)))
140 myScore = myScore - scoreChange 140 myScore = myScore - scoreChange
@@ -166,6 +166,20 @@ function Role:changePvpScoreHigh(matchId, isWin) @@ -166,6 +166,20 @@ function Role:changePvpScoreHigh(matchId, isWin)
166 return table.unpack(result) 166 return table.unpack(result)
167 end 167 end
168 168
  169 +function Role:isInPvpRank(rankKey)
  170 + local Fields = {
  171 + [RANK_PVP_COMMON] = "pvpMC",
  172 + [RANK_PVP_HIGHT] = "pvpMH",
  173 + }
  174 + local dbKey = self:getPvpDBKey(rankKey)
  175 + local roleId = self:getProperty("id")
  176 + if redisproxy:zscore(dbKey, roleId) then
  177 + return true
  178 + end
  179 + return false
  180 +end
  181 +
  182 +
169 function Role:refreshPvpMatch(score, rankKey) 183 function Role:refreshPvpMatch(score, rankKey)
170 184
171 local Fields = { 185 local Fields = {