Commit 276b1da94cc71fb1ad9b4079541e498a78e147e6

Authored by zhouhaihai
1 parent 3b0526d2

爬塔接口

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,
... ...
src/actions/TowerAction.lua 0 → 100644
... ... @@ -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
... ...