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 |