Commit 550ba7e78c30537a3035a582b965d0a88208120f
1 parent
0e06d7a6
订单
Showing
2 changed files
with
75 additions
and
27 deletions
Show diff stats
src/actions/DinerAction.lua
@@ -366,10 +366,12 @@ function _M.lockTaskRpc( agent, data ) | @@ -366,10 +366,12 @@ function _M.lockTaskRpc( agent, data ) | ||
366 | local msg = MsgPack.unpack(data) | 366 | local msg = MsgPack.unpack(data) |
367 | local index = msg.index | 367 | local index = msg.index |
368 | 368 | ||
369 | - if math.illegalNum(index, 1, 7) then | 369 | + local orders = json.decode(role.dinerData:getProperty("order")) |
370 | + | ||
371 | + if math.illegalNum(index, 1, #orders) then | ||
370 | return 1 | 372 | return 1 |
371 | end | 373 | end |
372 | - local orders = json.decode(role.dinerData:getProperty("order")) | 374 | + |
373 | local order = orders[index] | 375 | local order = orders[index] |
374 | if not order then | 376 | if not order then |
375 | return 2 | 377 | return 2 |
@@ -388,13 +390,13 @@ function _M.updateTaskRpc( agent, data ) | @@ -388,13 +390,13 @@ function _M.updateTaskRpc( agent, data ) | ||
388 | local role = agent.role | 390 | local role = agent.role |
389 | local msg = MsgPack.unpack(data) | 391 | local msg = MsgPack.unpack(data) |
390 | local index = msg.index | 392 | local index = msg.index |
391 | - -- 0 放弃已接受任务,1 接受任务,2 完成已接受任务 | 393 | + -- 0 接受任务,1 放弃已接受任务,2 完成已接受任务 |
392 | local cmd = msg.cmd | 394 | local cmd = msg.cmd |
393 | - | ||
394 | - if math.illegalNum(index, 1, 7) then | 395 | + local orders = json.decode(role.dinerData:getProperty("order")) |
396 | + if math.illegalNum(index, 1, #orders) then | ||
395 | return 1 | 397 | return 1 |
396 | end | 398 | end |
397 | - local orders = json.decode(role.dinerData:getProperty("order")) | 399 | + |
398 | local order = orders[index] | 400 | local order = orders[index] |
399 | if not order then | 401 | if not order then |
400 | return 2 | 402 | return 2 |
@@ -451,25 +453,55 @@ function _M.refreshTaskRpc( agent, data ) | @@ -451,25 +453,55 @@ function _M.refreshTaskRpc( agent, data ) | ||
451 | end | 453 | end |
452 | 454 | ||
453 | local orders = json.decode(role.dinerData:getProperty("order")) | 455 | local orders = json.decode(role.dinerData:getProperty("order")) |
454 | - if #orders > 6 then | ||
455 | - return 2 | 456 | + |
457 | + local hadTask = {} | ||
458 | + local needCount = globalCsv.diner_task_count | ||
459 | + for idx, temp in pairs(orders) do | ||
460 | + if temp.lock ~= 0 and temp.status ~= 0 then | ||
461 | + hadTask[temp.id] = 1 | ||
462 | + needCount = needCount - 1 | ||
463 | + end | ||
456 | end | 464 | end |
457 | 465 | ||
466 | + if needCount <= 0 then return 2 end | ||
467 | + | ||
458 | local taskLevel = role.dinerData:getProperty("buildL"):getv(5, 1) | 468 | local taskLevel = role.dinerData:getProperty("buildL"):getv(5, 1) |
459 | local taskData = csvdb["diner_questCsv"][taskLevel] | 469 | local taskData = csvdb["diner_questCsv"][taskLevel] |
460 | if not taskData then | 470 | if not taskData then |
461 | return 3 | 471 | return 3 |
462 | end | 472 | end |
463 | 473 | ||
474 | + local pool = {} | ||
475 | + for id, temp in pairs(taskData) do | ||
476 | + if not hadTask[id] then | ||
477 | + table.insert(pool, temp) | ||
478 | + end | ||
479 | + end | ||
480 | + local needCount = math.min(#pool, needCount) -- 需要的任务个数 | ||
481 | + | ||
482 | + if needCount <= 0 then return end | ||
483 | + | ||
484 | + local cost = globalCsv.diner_task_refresh_cost:toNumMap() | ||
485 | + for itemId, count in pairs(cost) do | ||
486 | + cost[itemId] = count * needCount | ||
487 | + end | ||
488 | + if not role:checkItemEnough(cost) then return end | ||
489 | + | ||
464 | role:costItems(cost) | 490 | role:costItems(cost) |
465 | 491 | ||
466 | - for k,v in pairs(orders) do | ||
467 | - if v.lock == 0 then | ||
468 | - local index = math.randWeight(taskData, "chance") | ||
469 | - local t = taskData[index] | ||
470 | - orders[k] = {lv = taskLevel, id = t.id, n = 0, lock = 0,status = 0} | 492 | + for idx = 1, globalCsv.diner_task_count do |
493 | + local order = orders[idx] | ||
494 | + if not order or (order.lock == 0 and order.status == 0) then | ||
495 | + if needCount > 0 then | ||
496 | + local index = math.randWeight(pool, "chance") | ||
497 | + local data = pool[index] | ||
498 | + orders[idx] = {lv = taskLevel, id = data.id, n = 0, lock = 0, status = 0} | ||
499 | + needCount = needCount - 1 | ||
500 | + table.remove(pool, index) | ||
501 | + end | ||
471 | end | 502 | end |
472 | end | 503 | end |
504 | + | ||
473 | role.dinerData:updateProperty({field = "order", value = json.encode(orders)}) | 505 | role.dinerData:updateProperty({field = "order", value = json.encode(orders)}) |
474 | 506 | ||
475 | SendPacket(actionCodes.Diner_refreshTaskRpc, '') | 507 | SendPacket(actionCodes.Diner_refreshTaskRpc, '') |
src/models/Diner.lua
@@ -22,26 +22,42 @@ function Diner:refreshDailyData(notify) | @@ -22,26 +22,42 @@ function Diner:refreshDailyData(notify) | ||
22 | 22 | ||
23 | -- 特殊订单 | 23 | -- 特殊订单 |
24 | local orders = json.decode(self:getProperty("order")) | 24 | local orders = json.decode(self:getProperty("order")) |
25 | + local hadTask = {} | ||
26 | + local needCount = globalCsv.diner_task_count | ||
27 | + for idx, temp in pairs(orders) do | ||
28 | + if temp.lock ~= 0 then | ||
29 | + hadTask[temp.id] = 1 | ||
30 | + needCount = needCount - 1 | ||
31 | + end | ||
32 | + end | ||
33 | + | ||
34 | + if needCount <= 0 then return end | ||
35 | + | ||
25 | -- 等级由订单板等级决定 | 36 | -- 等级由订单板等级决定 |
26 | local taskLevel = self:getProperty("buildL"):getv(5, 1) | 37 | local taskLevel = self:getProperty("buildL"):getv(5, 1) |
27 | local taskData = csvdb["diner_questCsv"][taskLevel] | 38 | local taskData = csvdb["diner_questCsv"][taskLevel] |
28 | - if taskData then | ||
29 | - local taskPool = table.values(taskData) | ||
30 | - if #taskPool > 6 then | ||
31 | - for n = 1, 6 do | ||
32 | - local index = math.randWeight(taskPool, "chance") | ||
33 | - local data = taskPool[index] | ||
34 | - local order = orders[n] | ||
35 | - if order then | ||
36 | - if order.lock == 0 then | ||
37 | - orders[n] = {lv = taskLevel, id = data.id, n = 0, lock = 0,status = 0} | ||
38 | - end | ||
39 | - else | ||
40 | - orders[n] = {lv = taskLevel, id = data.id, n = 0, lock = 0,status = 0} | ||
41 | - end | 39 | + if not taskData then return end |
40 | + local pool = {} | ||
41 | + for id, temp in pairs(taskData) do | ||
42 | + if not hadTask[id] then | ||
43 | + table.insert(pool, temp) | ||
44 | + end | ||
45 | + end | ||
46 | + local needCount = math.min(#pool, needCount) -- 需要的任务个数 | ||
47 | + | ||
48 | + for idx = 1, globalCsv.diner_task_count do | ||
49 | + local order = orders[idx] | ||
50 | + if not order or order.lock == 0 then | ||
51 | + if needCount > 0 then | ||
52 | + local index = math.randWeight(pool, "chance") | ||
53 | + local data = pool[index] | ||
54 | + orders[idx] = {lv = taskLevel, id = data.id, n = 0, lock = 0, status = 0} | ||
55 | + needCount = needCount - 1 | ||
56 | + table.remove(pool, index) | ||
42 | end | 57 | end |
43 | end | 58 | end |
44 | end | 59 | end |
60 | + | ||
45 | self:updateProperty({field = "order", value = json.encode(orders), notNotify = not notify}) | 61 | self:updateProperty({field = "order", value = json.encode(orders), notNotify = not notify}) |
46 | end | 62 | end |
47 | 63 |