local ipairs = ipairs local table = table local math = math local redisproxy = redisproxy local MsgPack = MsgPack local _M = {} function _M.roleFormatRpc(agent , data) local role = agent.role local msg = MsgPack.unpack(data) local towerTeam = role:getProperty("towerF") for slot, heroId in pairs(msg.heros) do if not role.heros[heroId] then return end end table.clear(towerTeam) towerTeam.heros = {} for slot, heroId in pairs(msg.heros) do towerTeam.heros[slot] = heroId end towerTeam.leader = msg.leader role:updateProperty({field = "towerF", value = towerTeam}) SendPacket(actionCodes.Tower_roleFormatRpc, '') return true end local function getUpdateTime(lastCount, lastTime) local nextCount, nextTime = lastCount, skynet.timex() if lastTime then local addCount = math.floor((skynet.timex() - lastTime) / (globalCsv.tower_count_up * 60)) nextCount = math.min(lastCount + addCount, globalCsv.tower_count_limit) nextTime = lastTime + addCount * (globalCsv.tower_count_up * 60) end return nextCount, nextTime end function _M.startBattleRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) local id = msg.id local towerInfo = role:getProperty("towerInfo") if towerInfo.l ~= id then return end -- 层数不对 if not csvdb["tower_battleCsv"][id] then return end local curCount, nextTime = getUpdateTime(towerInfo.c, towerInfo.t) if curCount < 1 then return end -- 没有次数返回 --搞起来 towerInfo.c = curCount - 1 towerInfo.t = nextTime local key = tostring(math.random()) towerInfo.k = key role:updateProperty({field = "towerInfo", value = towerInfo}) SendPacket(actionCodes.Tower_startBattleRpc, '') return true end function _M.endBattleRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) local id = msg.id local key = msg.key local passTime = msg.passTime local towerInfo = role:getProperty("towerInfo") if towerInfo.l ~= id or not towerInfo.k or towerInfo.k ~= key then return end local curTower = csvdb["tower_battleCsv"][id] if not curTower then return end local curCount, nextTime = getUpdateTime(towerInfo.c, towerInfo.t) local reward if msg.starNum and msg.starNum > 0 then --win curCount = math.min(curCount + 1, globalCsv.tower_count_limit) -- 返还次数 towerInfo.l = towerInfo.l + 1 reward = role:award(curTower.reward) end towerInfo.c = curCount towerInfo.t = nextTime towerInfo.k = nil role:updateProperty({field = "towerInfo", value = towerInfo}) SendPacket(actionCodes.Tower_endBattleRpc, MsgPack.pack({reward = reward})) return true end function _M.rankRpc(agent , data) local role = agent.role local rankList = {} SendPacket(actionCodes.Tower_rankRpc, MsgPack.pack({rankList = rankList})) return true end return _M