Commit 9b35bf6e8bf1d1711e8a960d47cd23283affaefe
1 parent
36482c8b
开启时间箱
Showing
3 changed files
with
81 additions
and
1 deletions
Show diff stats
src/ProtocolCode.lua
@@ -27,6 +27,7 @@ actionCodes = { | @@ -27,6 +27,7 @@ actionCodes = { | ||
27 | Role_updateRune = 113, | 27 | Role_updateRune = 113, |
28 | Role_storyBookRewardRpc = 114, | 28 | Role_storyBookRewardRpc = 114, |
29 | Role_unLockStoryBookRpc = 115, | 29 | Role_unLockStoryBookRpc = 115, |
30 | + Role_openTimeBoxRpc = 116, | ||
30 | 31 | ||
31 | Adv_startAdvRpc = 151, | 32 | Adv_startAdvRpc = 151, |
32 | Adv_roleFormatRpc = 152, | 33 | Adv_roleFormatRpc = 152, |
src/actions/RoleAction.lua
@@ -306,7 +306,7 @@ function _M.openItemRpc(agent, data) | @@ -306,7 +306,7 @@ function _M.openItemRpc(agent, data) | ||
306 | local itemData = csvdb["itemCsv"][itemId] | 306 | local itemData = csvdb["itemCsv"][itemId] |
307 | if itemData.use_type ~= 2 then return end | 307 | if itemData.use_type ~= 2 then return end |
308 | local randomData = csvdb["item_randomCsv"][tonumber(itemData.use_effect)] | 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 | local reward = randomData.gift:toNumMap() | 311 | local reward = randomData.gift:toNumMap() |
312 | for _id, _count in pairs(reward) do | 312 | for _id, _count in pairs(reward) do |
@@ -333,6 +333,82 @@ function _M.openItemRpc(agent, data) | @@ -333,6 +333,82 @@ function _M.openItemRpc(agent, data) | ||
333 | return true | 333 | return true |
334 | end | 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 | function _M.storyBookRewardRpc(agent, data) | 412 | function _M.storyBookRewardRpc(agent, data) |
337 | local role = agent.role | 413 | local role = agent.role |
338 | local msg = MsgPack.unpack(data) | 414 | local msg = MsgPack.unpack(data) |
src/models/Role.lua
@@ -58,6 +58,8 @@ Role.schema = { | @@ -58,6 +58,8 @@ Role.schema = { | ||
58 | storyB = {"table", {}}, -- 剧情记录 | 58 | storyB = {"table", {}}, -- 剧情记录 |
59 | 59 | ||
60 | equips = {"table", {}}, -- 装备简化下, 目前的设计足够支撑 -- {t = {l = c}} -- 接口设计好 底层扩展就重写~ | 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,6 +184,7 @@ function Role:data() | ||
182 | potionBag = self:getProperty("potionBag"), | 184 | potionBag = self:getProperty("potionBag"), |
183 | storyB = self:getProperty("storyB"), | 185 | storyB = self:getProperty("storyB"), |
184 | equips = self:getProperty("equips"), | 186 | equips = self:getProperty("equips"), |
187 | + boxL = self:getProperty("boxL"), | ||
185 | 188 | ||
186 | } | 189 | } |
187 | end | 190 | end |