Commit 9b35bf6e8bf1d1711e8a960d47cd23283affaefe

Authored by zhouhaihai
1 parent 36482c8b

开启时间箱

src/ProtocolCode.lua
... ... @@ -27,6 +27,7 @@ actionCodes = {
27 27 Role_updateRune = 113,
28 28 Role_storyBookRewardRpc = 114,
29 29 Role_unLockStoryBookRpc = 115,
  30 + Role_openTimeBoxRpc = 116,
30 31  
31 32 Adv_startAdvRpc = 151,
32 33 Adv_roleFormatRpc = 152,
... ...
src/actions/RoleAction.lua
... ... @@ -306,7 +306,7 @@ function _M.openItemRpc(agent, data)
306 306 local itemData = csvdb["itemCsv"][itemId]
307 307 if itemData.use_type ~= 2 then return end
308 308 local randomData = csvdb["item_randomCsv"][tonumber(itemData.use_effect)]
309   - if not randomData then return end
  309 + if not randomData or randomData.openTime > 0 then return end
310 310  
311 311 local reward = randomData.gift:toNumMap()
312 312 for _id, _count in pairs(reward) do
... ... @@ -333,6 +333,82 @@ function _M.openItemRpc(agent, data)
333 333 return true
334 334 end
335 335  
  336 +function _M.openTimeBoxRpc(agent, data)
  337 + local role = agent.role
  338 + local msg = MsgPack.unpack(data)
  339 + local oper = msg.oper -- 操作 1 - 3
  340 + local slot = msg.slot -- 位置 1 - 6
  341 + if math.illegalNum(slot, 1, globalCsv.box_timeOpen_maxNum) then return end
  342 +
  343 + local boxL = role:getProperty("boxL")
  344 + local reward
  345 + if oper == 1 then -- 打开
  346 + local itemId = msg.itemId
  347 + if role:getItemCount(itemId) < 1 then return end
  348 + local itemData = csvdb["itemCsv"][itemId]
  349 + local randomData = csvdb["item_randomCsv"][tonumber(itemData.use_effect)]
  350 + if not randomData or randomData.openTime <= 0 then return end
  351 +
  352 + if boxL[slot] then return end
  353 + role:costItems({[itemId] = 1})
  354 + boxL[slot] = {id = itemId, time = skynet.timex() + randomData.openTime}
  355 +
  356 + elseif oper == 2 then -- 上宝石
  357 + local gemId = msg.gem or 0
  358 + if not boxL[slot] then return end
  359 + if boxL[slot].gem or boxL[slot].time <= skynet.timex() then return end
  360 + local itemData = csvdb["itemCsv"][boxL[slot].id]
  361 + local randomData = csvdb["item_randomCsv"][tonumber(itemData.use_effect)]
  362 + local costCount = randomData[gemId .. "_gem_num"]
  363 + if not costCount then return end
  364 +
  365 + if not role:checkItemEnough({[gemId]] = costCount}) then return end
  366 + role:costItems({[gemId] = costCount})
  367 + boxL[slot].gem = gemId
  368 + elseif oper == 3 then -- 领取
  369 + local quick = msg.quick
  370 + if not boxL[slot] then return end
  371 + if boxL[slot].time > skynet.timex() then -- 没开完
  372 + if not quick then return end
  373 + local cost_pre = globalCsv.box_timeOpen_Diamond:toArray(true, "=")
  374 + local costD = math.ceil((boxL[slot].time - skynet.timex()) / (cost_pre[1] * 60)) * cost_pre[2]
  375 + if not role:checkItemEnough({[ItemId.Diamond] = costD}) then return end
  376 + role:costItems({[ItemId.Diamond] = costD})
  377 + end
  378 +
  379 + local itemData = csvdb["itemCsv"][boxL[slot].id]
  380 + local randomData = csvdb["item_randomCsv"][tonumber(itemData.use_effect)]
  381 + reward = randomData.gift:toNumMap() -- 固定奖励
  382 + -- 随机奖励
  383 + local randomGift = randomData.random_gift
  384 + if boxL[slot].gem then
  385 + randomGift = randomData[boxL[slot].gem .. "_gem_gift"]
  386 + end
  387 + if randomData.random_num > 0 and randomGift and randomGift ~= "" then
  388 + local pool = {}
  389 + for _, temp in ipairs(randomGift:toArray()) do
  390 + table.insert(pool, temp:toArray(true, "="))
  391 + end
  392 + local needCount = math.min(#pool, randomData.random_num)
  393 + for j = 1, needCount do
  394 + local idx = math.randWeight(pool, 3)
  395 + reward[pool[idx][1]] = (reward[pool[idx][1]] or 0) + pool[idx][2]
  396 + table.remove(pool, idx)
  397 + end
  398 + end
  399 +
  400 +
  401 + boxL[slot] = nil
  402 + reward = role:award(reward)
  403 + else
  404 + return
  405 + end
  406 +
  407 + self:setProperty("boxL") --刷新
  408 + self:changeUpdates({{type = "boxL", field = slot, value = boxL[slot], isOnlyToC = true}}) -- 通知客户端
  409 + SendPacket(actionCodes.Role_openTimeBoxRpc, MsgPack.pack({reward = reward}))
  410 +end
  411 +
336 412 function _M.storyBookRewardRpc(agent, data)
337 413 local role = agent.role
338 414 local msg = MsgPack.unpack(data)
... ...
src/models/Role.lua
... ... @@ -58,6 +58,8 @@ Role.schema = {
58 58 storyB = {"table", {}}, -- 剧情记录
59 59  
60 60 equips = {"table", {}}, -- 装备简化下, 目前的设计足够支撑 -- {t = {l = c}} -- 接口设计好 底层扩展就重写~
  61 +
  62 + boxL = {"table", {}}, -- boxList 正开启的箱子 -- {[1] = {id = 1010, gem = 101, time = 1313}}
61 63 }
62 64  
63 65  
... ... @@ -182,6 +184,7 @@ function Role:data()
182 184 potionBag = self:getProperty("potionBag"),
183 185 storyB = self:getProperty("storyB"),
184 186 equips = self:getProperty("equips"),
  187 + boxL = self:getProperty("boxL"),
185 188  
186 189 }
187 190 end
... ...