From c581c6e9c49c39ced131baf5e327a21e2b3df88d Mon Sep 17 00:00:00 2001 From: zhouhaihai Date: Wed, 15 Apr 2020 19:24:41 +0800 Subject: [PATCH] pvp 优化 --- src/actions/PvpAction.lua | 8 ++++---- src/models/RolePvp.lua | 16 +++++++++------- src/services/pvpd.lua | 5 ++++- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/actions/PvpAction.lua b/src/actions/PvpAction.lua index 9ded4e7..b66b25f 100644 --- a/src/actions/PvpAction.lua +++ b/src/actions/PvpAction.lua @@ -961,11 +961,11 @@ function _M.crossBetRpc(agent, data) local roleId = role:getProperty("id") local msg = MsgPack.unpack(data) - if not role:isTimeResetOpen(TimeReset.PvpCross) then return end - if msg.idx ~= 1 and msg.idx ~= 2 then return end + if not role:isTimeResetOpen(TimeReset.PvpCross) then return 1 end + if msg.idx ~= 1 and msg.idx ~= 2 then return 2 end - local result = role:setCrossServerPvpBet(msg.idx) - if not result then return end + local result, code = role:setCrossServerPvpBet(msg.idx) + if not result then return 10 + code end role:log("pvp_action", {desc = "crossBet"}) SendPacket(actionCodes.Pvp_crossBetRpc, MsgPack.pack(result)) diff --git a/src/models/RolePvp.lua b/src/models/RolePvp.lua index 518bee2..2939691 100644 --- a/src/models/RolePvp.lua +++ b/src/models/RolePvp.lua @@ -468,31 +468,33 @@ function Role:getCrossServerPvpBetInfo() end function Role:setCrossServerPvpBet(idx) - if not self:isTimeResetOpen(TimeReset.PvpCross) then return end + if not self:isTimeResetOpen(TimeReset.PvpCross) then return false , 1 end local crossTime = skynet.timex() - self:getTimeResetStartTime(TimeReset.PvpCross) local aday = 3600 * 24 local day = math.ceil(crossTime / aday) -- 当前是第几个比赛日 local ctime = crossTime % aday -- 当前在本天 经过多少时间 if day > globalCsv.pvp_cross_server_day or ctime >= globalCsv.pvp_cross_server_stop_stake then - return + return false , 2 end local pvpBet = self:getProperty("pvpBet") - if pvpBet[day] then return end + if pvpBet[day] then return false , 3 end - local cost = {[ItemId.Gold] = self:getProperty("level") * globalCsv.pvp_cross_bet_pre_level} - if not self:checkItemEnough(cost) then return end + local costNum = self:getProperty("level") * globalCsv.pvp_cross_bet_pre_level + local cost = {[ItemId.Gold] = costNum} + if not self:checkItemEnough(cost) then return false , 4 end - local ok, result = pcall(skynet.call, pvpd, "lua", "setBet", idx) + local ok, result = pcall(skynet.call, pvpd, "lua", "setBet", idx, self:getProperty("id"), costNum) if ok then if result then self:costItems(cost, {log = {desc = "crossPvpBet", short1 = day}}) pvpBet[day] = {idx, cost[ItemId.Gold]} self:setProperty("pvpBet", pvpBet) end - return result + return result, 5 else print(result) + return false , 6 end end diff --git a/src/services/pvpd.lua b/src/services/pvpd.lua index 3429f89..4f8f423 100644 --- a/src/services/pvpd.lua +++ b/src/services/pvpd.lua @@ -208,6 +208,7 @@ function CMD.getBetInfo() betInfo[cday] = math.randomInt(1, #(MatchCache[cday] or {1})) if cday == lastDay then betNum = {} + redisproxy:del("cross:pvpInfo:bet:" .. cday) end end end @@ -221,7 +222,7 @@ function CMD.getBetInfo() return pvpInfo:getProperties({"betInfo", "betNum"}) end -function CMD.setBet(idx) +function CMD.setBet(idx, roleId, costNum) local day, ctime = getDayAndTime() if day > globalCsv.pvp_cross_server_day or ctime >= globalCsv.pvp_cross_server_stop_stake then return end @@ -231,6 +232,8 @@ function CMD.setBet(idx) local betNum = pvpInfo:getProperty("betNum") betNum[idx] = (betNum[idx] or 0) + 1 pvpInfo:setProperty("betNum", betNum) + + redisproxy:hset("cross:pvpInfo:bet:" .. day, roleId, costNum * 10 + idx) return {betNum = betNum} end -- libgit2 0.21.2