Commit 276b1da94cc71fb1ad9b4079541e498a78e147e6
1 parent
3b0526d2
爬塔接口
Showing
3 changed files
with
117 additions
and
0 deletions
Show diff stats
src/ProtocolCode.lua
| ... | ... | @@ -79,6 +79,11 @@ actionCodes = { |
| 79 | 79 | Diner_expediteSellRpc = 310, |
| 80 | 80 | Diner_getGreenhouseRpc = 311, |
| 81 | 81 | |
| 82 | + Tower_roleFormatRpc = 350, | |
| 83 | + Tower_startBattleRpc = 351, | |
| 84 | + Tower_endBattleRpc = 352, | |
| 85 | + Tower_rankRpc = 353, | |
| 86 | + | |
| 82 | 87 | Car_makePotionRpc = 400, |
| 83 | 88 | Car_equipUpRpc = 401, |
| 84 | 89 | Car_runeUpRpc = 402, | ... | ... |
| ... | ... | @@ -0,0 +1,107 @@ |
| 1 | +local ipairs = ipairs | |
| 2 | +local table = table | |
| 3 | +local math = math | |
| 4 | +local redisproxy = redisproxy | |
| 5 | +local MsgPack = MsgPack | |
| 6 | + | |
| 7 | + | |
| 8 | +local _M = {} | |
| 9 | + | |
| 10 | + | |
| 11 | +function _M.roleFormatRpc(agent , data) | |
| 12 | + local role = agent.role | |
| 13 | + local msg = MsgPack.unpack(data) | |
| 14 | + local towerTeam = role:getProperty("towerF") | |
| 15 | + for slot, heroId in pairs(msg.heros) do | |
| 16 | + if not role.heros[heroId] then | |
| 17 | + return | |
| 18 | + end | |
| 19 | + end | |
| 20 | + table.clear(towerTeam) | |
| 21 | + towerTeam.heros = {} | |
| 22 | + for slot, heroId in pairs(msg.heros) do | |
| 23 | + towerTeam.heros[slot] = heroId | |
| 24 | + end | |
| 25 | + towerTeam.leader = msg.leader | |
| 26 | + | |
| 27 | + role:updateProperty({field = "towerF", value = towerTeam}) | |
| 28 | + SendPacket(actionCodes.Tower_roleFormatRpc, '') | |
| 29 | + return true | |
| 30 | +end | |
| 31 | + | |
| 32 | + | |
| 33 | +local function getUpdateTime(lastCount, lastTime) | |
| 34 | + local nextCount, nextTime = lastCount, skynet.timex() | |
| 35 | + if lastTime then | |
| 36 | + local addCount = math.floor((skynet.timex() - lastTime) / (globalCsv.tower_count_up * 60)) | |
| 37 | + nextCount = math.min(lastCount + addCount, globalCsv.tower_count_limit) | |
| 38 | + nextTime = lastTime + addCount * (globalCsv.tower_count_up * 60) | |
| 39 | + end | |
| 40 | + return nextCount, nextTime | |
| 41 | +end | |
| 42 | + | |
| 43 | +function _M.startBattleRpc(agent, data) | |
| 44 | + local role = agent.role | |
| 45 | + local msg = MsgPack.unpack(data) | |
| 46 | + local id = msg.id | |
| 47 | + | |
| 48 | + local towerInfo = role:getProperty("towerInfo") | |
| 49 | + | |
| 50 | + if towerInfo.l ~= id then return end -- 层数不对 | |
| 51 | + | |
| 52 | + if not csvdb["tower_battleCsv"][id] then return end | |
| 53 | + local curCount, nextTime = getUpdateTime(towerInfo.c, towerInfo.t) | |
| 54 | + if curCount < 1 then return end -- 没有次数返回 | |
| 55 | + | |
| 56 | + --搞起来 | |
| 57 | + towerInfo.c = curCount - 1 | |
| 58 | + towerInfo.t = nextTime | |
| 59 | + local key = tostring(math.random()) | |
| 60 | + towerInfo.k = key | |
| 61 | + | |
| 62 | + role:updateProperty({field = "towerInfo", value = towerInfo}) | |
| 63 | + | |
| 64 | + SendPacket(actionCodes.Tower_startBattleRpc, '') | |
| 65 | + return true | |
| 66 | +end | |
| 67 | + | |
| 68 | +function _M.endBattleRpc(agent, data) | |
| 69 | + local role = agent.role | |
| 70 | + local msg = MsgPack.unpack(data) | |
| 71 | + local id = msg.id | |
| 72 | + local key = msg.key | |
| 73 | + local passTime = msg.passTime | |
| 74 | + | |
| 75 | + local towerInfo = role:getProperty("towerInfo") | |
| 76 | + if towerInfo.l ~= id or not towerInfo.k or towerInfo.k ~= key then return end | |
| 77 | + local curTower = csvdb["tower_battleCsv"][id] | |
| 78 | + if not curTower then return end | |
| 79 | + | |
| 80 | + local curCount, nextTime = getUpdateTime(towerInfo.c, towerInfo.t) | |
| 81 | + | |
| 82 | + | |
| 83 | + local reward | |
| 84 | + if msg.starNum and msg.starNum > 0 then --win | |
| 85 | + curCount = math.min(curCount + 1, globalCsv.tower_count_limit) -- 返还次数 | |
| 86 | + towerInfo.l = towerInfo.l + 1 | |
| 87 | + reward = role:award(curTower.reward) | |
| 88 | + end | |
| 89 | + | |
| 90 | + towerInfo.c = curCount | |
| 91 | + towerInfo.t = nextTime | |
| 92 | + towerInfo.k = nil | |
| 93 | + role:updateProperty({field = "towerInfo", value = towerInfo}) | |
| 94 | + SendPacket(actionCodes.Tower_endBattleRpc, MsgPack.pack({reward = reward})) | |
| 95 | + return true | |
| 96 | +end | |
| 97 | + | |
| 98 | + | |
| 99 | +function _M.rankRpc(agent , data) | |
| 100 | + local role = agent.role | |
| 101 | + | |
| 102 | + local rankList = {} | |
| 103 | + SendPacket(actionCodes.Tower_rankRpc, MsgPack.pack({rankList = rankList})) | |
| 104 | + return true | |
| 105 | +end | |
| 106 | + | |
| 107 | +return _M | |
| 0 | 108 | \ No newline at end of file | ... | ... |
src/models/Role.lua
| ... | ... | @@ -60,6 +60,9 @@ Role.schema = { |
| 60 | 60 | equips = {"table", {}}, -- 装备简化下, 目前的设计足够支撑 -- {t = {l = c}} -- 接口设计好 底层扩展就重写~ |
| 61 | 61 | |
| 62 | 62 | boxL = {"table", {}}, -- boxList 正开启的箱子 -- {[1] = {id = 1010, gem = 101, time = 1313}} |
| 63 | + | |
| 64 | + towerInfo = {"table", {c = globalCsv.tower_count_limit}}, -- 当天爬塔消耗的次数 -- {t = time, c = count, l = layer, k = battleKey} | |
| 65 | + towerF = {"table", {}}, -- 爬塔阵容 | |
| 63 | 66 | } |
| 64 | 67 | |
| 65 | 68 | |
| ... | ... | @@ -185,6 +188,8 @@ function Role:data() |
| 185 | 188 | storyB = self:getProperty("storyB"), |
| 186 | 189 | equips = self:getProperty("equips"), |
| 187 | 190 | boxL = self:getProperty("boxL"), |
| 191 | + towerInfo = self:getProperty("towerInfo"), | |
| 192 | + towerF = self:getProperty("towerF"), | |
| 188 | 193 | |
| 189 | 194 | } |
| 190 | 195 | end | ... | ... |