Commit 4864d579d05defc7e204e01be240adf00f0803b3
1 parent
0cca9748
领取任务,锁定任务,获得特殊任务
Showing
4 changed files
with
113 additions
and
7 deletions
Show diff stats
src/GlobalVar.lua
@@ -42,7 +42,7 @@ ItemType = { | @@ -42,7 +42,7 @@ ItemType = { | ||
42 | Cuisine = 11, -- 料理(用于增加好感度、贩卖获得金币) | 42 | Cuisine = 11, -- 料理(用于增加好感度、贩卖获得金币) |
43 | LunchBox = 12, -- 便当盒(料理合成,冒险系统消耗道具) | 43 | LunchBox = 12, -- 便当盒(料理合成,冒险系统消耗道具) |
44 | TimeBox = 13, -- 时间箱(开启需要时间,随机产出道具) | 44 | TimeBox = 13, -- 时间箱(开启需要时间,随机产出道具) |
45 | - AdvItem = 14 -- 冒险道具 | 45 | + AdvItem = 14, -- 冒险道具 |
46 | } | 46 | } |
47 | 47 | ||
48 | -- 物品起始id | 48 | -- 物品起始id |
@@ -60,8 +60,8 @@ ItemId = { | @@ -60,8 +60,8 @@ ItemId = { | ||
60 | EquipUp = 11, -- 装备升级材料 | 60 | EquipUp = 11, -- 装备升级材料 |
61 | DinerCoin = 12, --后勤物资 | 61 | DinerCoin = 12, --后勤物资 |
62 | LoveUp = 14, --好感度提升道具 | 62 | LoveUp = 14, --好感度提升道具 |
63 | + DinerSpTask = 20, -- 餐厅任务采购券 | ||
63 | LoveBreak = 21, --好感度突破道具 | 64 | LoveBreak = 21, --好感度突破道具 |
64 | - BoxKey = 20, -- 开箱钥匙 | ||
65 | PvpKey = 22, -- 开箱钥匙 | 65 | PvpKey = 22, -- 开箱钥匙 |
66 | LunchFragment = 23, | 66 | LunchFragment = 23, |
67 | HeroFC = {700, 701, 702, 703}, -- 通用角色碎片 | 67 | HeroFC = {700, 701, 702, 703}, -- 通用角色碎片 |
src/ProtocolCode.lua
@@ -64,6 +64,9 @@ actionCodes = { | @@ -64,6 +64,9 @@ actionCodes = { | ||
64 | Diner_talentUpRpc = 304, | 64 | Diner_talentUpRpc = 304, |
65 | Diner_skillUpRpc = 305, | 65 | Diner_skillUpRpc = 305, |
66 | Diner_removeSellRpc = 306, | 66 | Diner_removeSellRpc = 306, |
67 | + Diner_lockTaskRpc = 307, | ||
68 | + Diner_finishTaskRpc = 308, | ||
69 | + Diner_getSpecialTaskRpc = 309, | ||
67 | } | 70 | } |
68 | 71 | ||
69 | rpcResponseBegin = 10000 | 72 | rpcResponseBegin = 10000 |
src/actions/DinerAction.lua
@@ -282,4 +282,107 @@ function _M.skillUpRpc( agent, data ) | @@ -282,4 +282,107 @@ function _M.skillUpRpc( agent, data ) | ||
282 | return true | 282 | return true |
283 | end | 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 | return _M | 388 | return _M |
286 | \ No newline at end of file | 389 | \ No newline at end of file |
src/models/Diner.lua
@@ -94,11 +94,11 @@ end | @@ -94,11 +94,11 @@ end | ||
94 | function Diner:checkDinerTask(type, count, param1, param2, notNotify) | 94 | function Diner:checkDinerTask(type, count, param1, param2, notNotify) |
95 | local orders = json.decode(self:getProperty("order")) | 95 | local orders = json.decode(self:getProperty("order")) |
96 | local dirty = false | 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 | data.n = data.n + count | 102 | data.n = data.n + count |
103 | dirty = true | 103 | dirty = true |
104 | end | 104 | end |