Commit 550ba7e78c30537a3035a582b965d0a88208120f

Authored by zhouhaihai
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 366 local msg = MsgPack.unpack(data)
367 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 372 return 1
371 373 end
372   - local orders = json.decode(role.dinerData:getProperty("order"))
  374 +
373 375 local order = orders[index]
374 376 if not order then
375 377 return 2
... ... @@ -388,13 +390,13 @@ function _M.updateTaskRpc( agent, data )
388 390 local role = agent.role
389 391 local msg = MsgPack.unpack(data)
390 392 local index = msg.index
391   - -- 0 放弃已接受任务,1 接受任务,2 完成已接受任务
  393 + -- 0 接受任务,1 放弃已接受任务,2 完成已接受任务
392 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 397 return 1
396 398 end
397   - local orders = json.decode(role.dinerData:getProperty("order"))
  399 +
398 400 local order = orders[index]
399 401 if not order then
400 402 return 2
... ... @@ -451,25 +453,55 @@ function _M.refreshTaskRpc( agent, data )
451 453 end
452 454  
453 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 464 end
457 465  
  466 + if needCount <= 0 then return 2 end
  467 +
458 468 local taskLevel = role.dinerData:getProperty("buildL"):getv(5, 1)
459 469 local taskData = csvdb["diner_questCsv"][taskLevel]
460 470 if not taskData then
461 471 return 3
462 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 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 502 end
472 503 end
  504 +
473 505 role.dinerData:updateProperty({field = "order", value = json.encode(orders)})
474 506  
475 507 SendPacket(actionCodes.Diner_refreshTaskRpc, '')
... ...
src/models/Diner.lua
... ... @@ -22,26 +22,42 @@ function Diner:refreshDailyData(notify)
22 22  
23 23 -- 特殊订单
24 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 37 local taskLevel = self:getProperty("buildL"):getv(5, 1)
27 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 57 end
43 58 end
44 59 end
  60 +
45 61 self:updateProperty({field = "order", value = json.encode(orders), notNotify = not notify})
46 62 end
47 63  
... ...