Commit 00e663bd7beb6b8e7ff702c95b7a35178cd36f15

Authored by zhouhaihai
1 parent 0a0267a8

剧情相关

src/ProtocolCode.lua
... ... @@ -25,6 +25,7 @@ actionCodes = {
25 25 Role_openItemRpc = 111,
26 26 Role_updateEquip = 112,
27 27 Role_updateRune = 113,
  28 + Role_storyBookRewardRpc = 114,
28 29  
29 30 Adv_startAdvRpc = 151,
30 31 Adv_roleFormatRpc = 152,
... ...
src/actions/HangAction.lua
... ... @@ -180,6 +180,8 @@ function _M.endBattleRpc(agent, data)
180 180 reward[itemId] = count
181 181 end
182 182 reward = role:award(reward)
  183 +
  184 + role:checkTaskEnter(role.TaskType.HangPass, {id = carbonId})
183 185 end
184 186 hangInfo.key = nil
185 187 role:updateProperty({field = "hangInfo", value = hangInfo})
... ...
src/actions/HeroAction.lua
... ... @@ -69,7 +69,7 @@ function _M.wakeRpc(agent, data)
69 69 local skills = {}
70 70 for _,v in pairs(wakeData.skill:toArray(true,"=") ) do
71 71 local skillSet = hero:getSkillData(v)
72   - if next(skillSet) then
  72 + if skillSet and next(skillSet) then
73 73 local skillLv = hero:getSkillLevel(v)+1
74 74 local skillData = skillSet[skillLv]
75 75 if skillData and next(skillData) then
... ... @@ -86,6 +86,8 @@ function _M.wakeRpc(agent, data)
86 86 end
87 87 hero:updateProperty({field = "wakeL", delta = 1})
88 88  
  89 + role:checkTaskEnter(role.TaskType.Wake, {heroType = typ, wakeL = hero:getProperty("wakeL")})
  90 +
89 91 SendPacket(actionCodes.Hero_wakeRpc, '')
90 92 return true
91 93 end
... ... @@ -368,7 +370,8 @@ function _M.loveItemRpc(agent, data)
368 370 end
369 371 local curL = hero:getProperty("loveL")
370 372 local curExp = hero:getProperty("loveExp")
371   - local curPlus = csvdb["unit_love_plusCsv"][hero:getProperty("type")]
  373 + local curType = hero:getProperty("type")
  374 + local curPlus = csvdb["unit_love_plusCsv"][curType]
372 375 if not curPlus then
373 376 return
374 377 end
... ... @@ -392,8 +395,16 @@ function _M.loveItemRpc(agent, data)
392 395 return true
393 396 end
394 397 role:costItems({[cost[1]] = cost[2]})
395   - hero:updateProperty({field = "loveL", value = curL + 1})
  398 + local newLevel = curL + 1
  399 + hero:updateProperty({field = "loveL", value = newLevel})
396 400 hero:updateProperty({field = "loveExp", value = 0})
  401 +
  402 + if role:getProperty("loveStatus"):getv(curType, 0) < newLevel then
  403 + role:changeUpdates({{type = "loveStatus", field = curType, value = newLevel}}) -- 总的
  404 + end
  405 +
  406 + role:checkTaskEnter(role.TaskType.LoveBreak, {heroType = curType, loveL = newLevel})
  407 +
397 408 else
398 409 local delta = globalCsv.unit_love_presentValue[msg.itemId]
399 410 if not delta then
... ... @@ -438,13 +449,16 @@ function _M.loveTaskRpc(agent, data)
438 449 else
439 450 newExp = 0
440 451 end
  452 + local newLevel = curL + 1
441 453 hero:updateProperty({field = "loveExp", value = newExp})
442   - hero:updateProperty({field = "loveL", value = curL + 1})
  454 + hero:updateProperty({field = "loveL", value = newLevel})
443 455  
444   - if role:getProperty("loveStatus"):getv(curType, 0) < curL + 1 then
445   - role:changeUpdates({{type = "loveStatus", field = curType, value = curL + 1}}) -- 总的
  456 + if role:getProperty("loveStatus"):getv(curType, 0) < newLevel then
  457 + role:changeUpdates({{type = "loveStatus", field = curType, value = newLevel}}) -- 总的
446 458 end
447 459  
  460 + role:checkTaskEnter(role.TaskType.LoveBreak, {heroType = curType, loveL = newLevel})
  461 +
448 462 SendPacket(actionCodes.Hero_loveTaskRpc, "")
449 463 return true
450 464 end
... ...
src/actions/RoleAction.lua
... ... @@ -313,5 +313,23 @@ function _M.openItemRpc(agent, data)
313 313 return true
314 314 end
315 315  
  316 +function _M.storyBookRewardRpc(agent, data)
  317 + local role = agent.role
  318 + local msg = MsgPack.unpack(data)
  319 + local storyId = msg.id
  320 + local storyBookData = csvdb["story_bookCsv"][storyId]
  321 + if not storyBookData then return end
  322 + local storyStatus = self:getProperty("storyB")
  323 + if not storyStatus[id] or not storyStatus[id].s or storyStatus[id].s ~= 1 then return end
  324 +
  325 + -- 获取奖励
  326 + storyStatus[id].s = -1
  327 + self:setProperty("storyB", storyBookStatus) -- 统一写入数据库
  328 + self:changeUpdates({{ type = "storyB", field = id, value = storyStatus[id] }})
  329 + local reward = role:award(storyBookData.gift)
  330 + SendPacket(actionCodes.Role_storyBookRewardRpc, MsgPack.pack({reward = reward}))
  331 + return true
  332 +end
  333 +
316 334  
317 335 return _M
318 336 \ No newline at end of file
... ...
src/adv/Adv.lua
... ... @@ -460,6 +460,8 @@ function Adv:over(success)
460 460 if success then
461 461 self.owner:updateProperty({field = "advPass", self.owner:getProperty("advPass"):setv(self.advInfo.chapter, score)})
462 462 reward = self.owner:award(self.owner:getProperty("advItems"):toNumMap())
  463 +
  464 + self.owner:checkTaskEnter(self.owner.TaskType.AdvPass, {id = self.advInfo.chapter})
463 465 end
464 466 table.clear(self.advInfo) --清空advInfo
465 467 self.advTeam.player = nil --重置玩家的数据
... ...
src/models/Role.lua
... ... @@ -55,6 +55,8 @@ Role.schema = {
55 55 hangBagLimit = {"number", globalCsv.idle_field_origin}, --背包上限
56 56  
57 57 potionBag = {"table", {}}, -- 营养剂背包
  58 +
  59 + storyB = {"table", {}}, -- 剧情记录
58 60 }
59 61  
60 62  
... ... @@ -133,12 +135,18 @@ function Role:changeUpdates(params, notNotify)
133 135 self:setProperty(fieldType)
134 136 return {type = fieldType, field = info["field"], value = info["value"]}
135 137 end,
  138 + ["onlyToC"] = function(info)
  139 + return info
  140 + end,
136 141 }
137 142  
138 143 local updates = {}
139 144 for _, one in ipairs(params) do
140 145 if changeUpdateFunc[one["type"]] then
141 146 table.insert(updates, changeUpdateFunc[one["type"]](one))
  147 + elseif one.isOnlyToC then
  148 + one.isOnlyToC = nil
  149 + table.insert(updates, one)
142 150 else
143 151 table.insert(updates, changeUpdateFunc["tableCommon"](one["type"], one))
144 152 end
... ...
src/models/RoleTask.lua
1 1  
2 2  
  3 +-- 增加 checkTaskEnter 内的参数 记得增增加注释
3 4 local TaskType = {
4   -
  5 + HangPass = 1, -- id
  6 + AdvPass = 2, -- id
  7 + LoveBreak = 3, -- heroType loveL
  8 + Wake = 4, -- heroType wakeL
  9 +}
  10 +
  11 +local function v(value)
  12 + return {type = "value", value = value}
  13 +end
  14 +
  15 +local function f(field)
  16 + return {type = "field", value = field}
  17 +end
  18 +
  19 +local StoryListener = {
  20 + func = "checkStoryStatus",
  21 + listen = {
  22 + [TaskType.HangPass] = {v(1), f("id")},
  23 + [TaskType.AdvPass] = {v(4), f("id")},
  24 + [TaskType.LoveBreak] = {v(2), f("heroType")},
  25 + [TaskType.Wake] = {v(3), f("heroType"), f("wakeL")},
  26 + }
  27 +}
  28 +
  29 +local TaskListeners = {
  30 + StoryListener,
5 31 }
6 32  
7 33 local RoleTask = {}
... ... @@ -10,11 +36,29 @@ function RoleTask.bind(Role)
10 36  
11 37 Role.TaskType = TaskType
12 38  
13   - function Role:checkTaskEnter(taskType, ...)
14   -
  39 + -- 任务相关入口
  40 + function Role:checkTaskEnter(taskType, params, notNotify)
  41 + for _, listener in ipairs(TaskListeners) do
  42 + if listener and listener.listen and listener.listen[taskType] and listener["func"] then
  43 + local pms = {}
  44 + for _, v in ipairs(listener.listen[taskType]) do
  45 + if type(v) == "table" and v.type then
  46 + if v.type == "value" then
  47 + table.insert(pms, v.value)
  48 + elseif v.type == "field" then
  49 + table.insert(pms, params[v.value])
  50 + else
  51 + table.insert(pms, v)
  52 + end
  53 + else
  54 + table.insert(pms, v)
  55 + end
  56 + end
  57 + self[listener["func"]](self, notNotify, table.unpack(pms))
  58 + end
  59 + end
15 60 end
16 61  
17   -
18 62 function Role:checkDailyTask()
19 63 end
20 64  
... ... @@ -24,6 +68,83 @@ function RoleTask.bind(Role)
24 68 function Role:checkAchievTask()
25 69 end
26 70  
  71 + --剧情相关----begin-------------
  72 + local function checkStoryStatusByHang(role, data, status, cond1) -- cond1 carbonId
  73 + if tonumber(data.unlockData) ~= cond1 then return end
  74 + status.s = 1
  75 + return true
  76 + end
  77 +
  78 + local function checkStoryStatusByLove(role, data, status, cond1) -- cond1 heroType
  79 + if data.sort ~= cond1 then return end
  80 + local curL = role:getProperty("loveStatus"):getv(cond1, 0)
  81 + if curL < tonumber(data.unlockData) then return end
  82 + status.s = 1
  83 + return true
  84 + end
  85 +
  86 + local function checkStoryStatusByMultStar(role, data, status, cond1, cond2) -- cond1 heroType, cond2 wakeL
  87 + local heroType = cond1
  88 + local need = data.unlockData:toArray(true, "=")
  89 + local had = false
  90 + for _, v in pairs(need) do
  91 + if v == heroType then
  92 + had = true
  93 + break
  94 + end
  95 + end
  96 + if not had then return end
  97 + if cond2 > (status["s" .. heroType] or 0) then
  98 + status["s" .. heroType] = cond2
  99 + end
  100 + local starC = 0
  101 + for _, v in pairs(need) do
  102 + starC = starC + (status["s" .. v] or 0)
  103 + end
  104 + if starC >= tonumber(data.unlockData2) then
  105 + table.clear(status)
  106 + status.s = 1
  107 + end
  108 + return true
  109 + end
  110 +
  111 + local function checkStoryStatusByAdv(role, data, status, cond1) -- cond1 advId
  112 + if tonumber(data.unlockData) ~= cond1 then return end
  113 + status.s = 1
  114 + return true
  115 + end
  116 +
  117 + local checkstoryStatusFunc = {
  118 + [1] = checkStoryStatusByHang,
  119 + [2] = checkStoryStatusByLove,
  120 + [3] = checkStoryStatusByMultStar,
  121 + [4] = checkStoryStatusByAdv,
  122 + }
  123 +
  124 + function Role:checkStoryStatus(notNotify, stype, cond1, cond2, cond3)
  125 + local storyBookStatus = self:getProperty("storyB")
  126 + local change = {}
  127 + for id, data in pairs(csvdb["story_bookCsv"]) do
  128 + if stype == data.unlockType and checkstoryStatusFunc[stype] then
  129 + local curStatus = storyBookStatus[id] or {}
  130 + if not curStatus.s then -- 存在状态就是已经完成
  131 + local isChange = checkstoryStatusFunc[stype](self, data, curStatus, cond1, cond2, cond3)
  132 + if isChange then
  133 + storyBookStatus[id] = curStatus
  134 + table.insert(change, {type = "storyB", field = id, value = curStatus, isOnlyToC = true})
  135 + end
  136 + end
  137 + end
  138 + end
  139 + if next(change) then
  140 + self:setProperty("storyB", storyBookStatus) -- 统一写入数据库
  141 + if not notNotify then
  142 + self:changeUpdates(change)
  143 + end
  144 + end
  145 + end
  146 +
  147 + --剧情相关----end-------------
27 148 end
28 149  
29 150 return RoleTask
30 151 \ No newline at end of file
... ...