Commit 4864d579d05defc7e204e01be240adf00f0803b3

Authored by zhengshouren
1 parent 0cca9748

领取任务,锁定任务,获得特殊任务

src/GlobalVar.lua
... ... @@ -42,7 +42,7 @@ ItemType = {
42 42 Cuisine = 11, -- 料理(用于增加好感度、贩卖获得金币)
43 43 LunchBox = 12, -- 便当盒(料理合成,冒险系统消耗道具)
44 44 TimeBox = 13, -- 时间箱(开启需要时间,随机产出道具)
45   - AdvItem = 14 -- 冒险道具
  45 + AdvItem = 14, -- 冒险道具
46 46 }
47 47  
48 48 -- 物品起始id
... ... @@ -60,8 +60,8 @@ ItemId = {
60 60 EquipUp = 11, -- 装备升级材料
61 61 DinerCoin = 12, --后勤物资
62 62 LoveUp = 14, --好感度提升道具
  63 + DinerSpTask = 20, -- 餐厅任务采购券
63 64 LoveBreak = 21, --好感度突破道具
64   - BoxKey = 20, -- 开箱钥匙
65 65 PvpKey = 22, -- 开箱钥匙
66 66 LunchFragment = 23,
67 67 HeroFC = {700, 701, 702, 703}, -- 通用角色碎片
... ...
src/ProtocolCode.lua
... ... @@ -64,6 +64,9 @@ actionCodes = {
64 64 Diner_talentUpRpc = 304,
65 65 Diner_skillUpRpc = 305,
66 66 Diner_removeSellRpc = 306,
  67 + Diner_lockTaskRpc = 307,
  68 + Diner_finishTaskRpc = 308,
  69 + Diner_getSpecialTaskRpc = 309,
67 70 }
68 71  
69 72 rpcResponseBegin = 10000
... ...
src/actions/DinerAction.lua
... ... @@ -282,4 +282,107 @@ function _M.skillUpRpc( agent, data )
282 282 return true
283 283 end
284 284  
  285 +function _M.lockTaskRpc( agent, data )
  286 + local role = agent.role
  287 + local msg = MsgPack.unpack(data)
  288 + local index = msg.index
  289 +
  290 + if math.illegalNum(index, 1, 7) then
  291 + return 1
  292 + end
  293 + local orders = json.decode(role.dinerData:getProperty("order"))
  294 + local order = orders[index]
  295 + if not order then
  296 + return 2
  297 + end
  298 + if order.lock ~= 0 then
  299 + return 3
  300 + end
  301 +
  302 + order.lock = 1
  303 + role.dinerData:updateProperty({field = "order", value = json.encode(orders)})
  304 + SendPacket(actionCodes.Diner_lockTaskRpc, '')
  305 + return true
  306 +end
  307 +
  308 +function _M.finishTaskRpc( agent, data )
  309 + local role = agent.role
  310 + local msg = MsgPack.unpack(data)
  311 + local index = msg.index
  312 +
  313 + if math.illegalNum(index, 1, 7) then
  314 + return 1
  315 + end
  316 + local orders = json.decode(role.dinerData:getProperty("order"))
  317 + local order = orders[index]
  318 + if not order then
  319 + return 2
  320 + end
  321 + if order.lock == 2 then
  322 + return 3
  323 + end
  324 + local taskSet = csvdb["diner_questCsv"][order.lv]
  325 + if not taskSet then
  326 + return 4
  327 + end
  328 + local taskData = taskSet[order.id]
  329 + if not taskData then
  330 + return 5
  331 + end
  332 + if order.n <= taskData.value then
  333 + return 6
  334 + end
  335 +
  336 + order.lock = 2
  337 + role.dinerData:updateProperty({field = "order", value = json.encode(orders)})
  338 + for type, count in pairs(taskData.reward:toNumMap()) do
  339 + role:addItem({itemId = type, count = count})
  340 + end
  341 +
  342 + SendPacket(actionCodes.Diner_finishTaskRpc, '')
  343 + return true
  344 +end
  345 +
  346 +function _M.getSpecialTaskRpc( agent, data )
  347 + local role = agent.role
  348 + local msg = MsgPack.unpack(data)
  349 +
  350 + local cost = {[DinerSpTask] = 1}
  351 + if not role:checkItemEnough(cost) then
  352 + return 1
  353 + end
  354 +
  355 + local orders = json.decode(role.dinerData:getProperty("order"))
  356 + if #orders > 6 then
  357 + return 2
  358 + end
  359 +
  360 + local taskLevel = role.dinerData:getProperty("buildL"):getv(5, 1)
  361 + local taskData = csvdb["diner_questCsv"][taskLevel]
  362 + if not taskData then
  363 + return 3
  364 + end
  365 + local taskPool = {}
  366 + for _, data in pairs(taskData) do
  367 + if data.rarity >= 3 then
  368 + table.inser(taskPool, data)
  369 + end
  370 + end
  371 + if #taskPool == 0 then
  372 + return 4
  373 + end
  374 +
  375 + role:costItems(cost)
  376 +
  377 + local index = math.randWeight(taskPool, "chance")
  378 + local data = taskPool[index]
  379 +
  380 + table.insert(orders, {lv = taskLevel, id = data.id, n = 0, lock = 0})
  381 + role.dinerData:updateProperty({field = "order", value = json.encode(orders)})
  382 +
  383 + SendPacket(actionCodes.Diner_getSpecialTaskRpc, '')
  384 + return true
  385 +end
  386 +
  387 +
285 388 return _M
286 389 \ No newline at end of file
... ...
src/models/Diner.lua
... ... @@ -94,11 +94,11 @@ end
94 94 function Diner:checkDinerTask(type, count, param1, param2, notNotify)
95 95 local orders = json.decode(self:getProperty("order"))
96 96 local dirty = false
97   - for _, task in ipairs(orders) do
98   - local taskSet = csvdb["diner_questCsv"][task.lv]
99   - if taskSet and taskSet[task.id] then
100   - local data = taskSet[task.id]
101   - if data.type == type and data.condition1 == param1 and task.lock > 0 then
  97 + for _, order in ipairs(orders) do
  98 + local taskSet = csvdb["diner_questCsv"][order.lv]
  99 + if taskSet and taskSet[order.id] then
  100 + local data = taskSet[order.id]
  101 + if data.type == type and data.condition1 == param1 and order.lock > 0 then
102 102 data.n = data.n + count
103 103 dirty = true
104 104 end
... ...