Commit 78e5b90eaa9ec78faa9e6510dfc7737995e44d4a

Authored by liuzujun
1 parent 18bf12f3

完成需求:新玩家任务

src/ProtocolCode.lua
... ... @@ -254,6 +254,7 @@ actionCodes = {
254 254 Activity_advLevelRpc = 671,
255 255 Activity_buyBattleCommandLvlRpc = 672,
256 256 Activity_returnerTaskRpc = 673,
  257 + Activity_actNewUserTaskRpc = 674,
257 258  
258 259 Radio_startQuestRpc = 700,
259 260 Radio_finishQuestRpc = 701,
... ...
src/actions/ActivityAction.lua
... ... @@ -320,6 +320,47 @@ function _M.actBattleCommandTaskRpc(agent, data)
320 320 return true
321 321 end
322 322  
  323 +function _M.actNewUserTaskRpc(agent, data)
  324 + local role = agent.role
  325 + local msg = MsgPack.unpack(data)
  326 + local taskId = msg.id
  327 + local calTask = role:getProperty("nbTask") or {}
  328 + local record = calTask["r"] or {}
  329 + local flag = record[taskId] or 0
  330 + if flag == 1 then return 1 end
  331 + local open, actId = role.activity:isOpen("NewUserTask")
  332 + local actData = csvdb["activity_ctrlCsv"][actId]
  333 + if not open then return 2 end
  334 + if not actData then return 3 end
  335 +
  336 + local taskList = csvdb["activity_taskCsv"][actData.condition]
  337 + if not taskList then return 4 end
  338 + local taskCfg = taskList[taskId]
  339 + if not taskCfg then return 5 end
  340 + if taskCfg.key ~= actData.condition then return 6 end
  341 +
  342 + if (calTask[taskId] or 0) < taskCfg.condition1 then return 7 end
  343 +
  344 + record[taskId] = 1
  345 + calTask["r"] = record
  346 +
  347 + role:updateProperty({field = "nbTask", value = calTask})
  348 +
  349 + local reward, change = role:award(taskCfg.reward, {log = {desc = "newUserTask"}})
  350 +
  351 + role:log("activity", {
  352 + activity_id = taskId, -- 活动ID(或活动指定任务的ID)
  353 + activity_type = role.activity.ActivityType.NewUserTask, -- 活动类型,见活动类型枚举表
  354 + activity_reward = reward, -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...}
  355 + })
  356 +
  357 + role:checkTaskEnter("FinishSpeTask", {taskId = taskId, actId = actId})
  358 +
  359 + SendPacket(actionCodes.Activity_actNewUserTaskRpc, MsgPack.pack(role:packReward(reward, change)))
  360 +
  361 + return true
  362 +end
  363 +
323 364 function _M.exchangeRpc(agent, data)
324 365 local role = agent.role
325 366 local msg = MsgPack.unpack(data)
... ...
src/models/Activity.lua
... ... @@ -39,6 +39,7 @@ Activity.ActivityType = {
39 39 HeroBackFree = 37, -- 无损耗归还
40 40  
41 41 BattleCommandTask = 38, -- 战令任务活动
  42 + NewUserTask = 41, -- 新用户任务
42 43 }
43 44  
44 45 local function checkActivityType(activityType)
... ... @@ -641,6 +642,110 @@ activityFunc[Activity.ActivityType.Exchange] = {
641 642 end,
642 643 }
643 644  
  645 +-- 新用户活动任务
  646 +activityFunc[Activity.ActivityType.NewUserTask] = {
  647 + ["init"] = function(self, actType, isCrossDay, notify)
  648 + local nbTask = self.owner:getProperty("nbTask")
  649 + nbTask = {}
  650 + self.owner:updateProperty({field="nbTask", value=nbTask})
  651 + local role = self.owner
  652 + local buildL = role.dinerData:getProperty("buildL")
  653 + local curLevel = buildL:getv(1, 1)
  654 + role:checkTaskEnter("DinerLevelUp", {level = curLevel})
  655 +
  656 + role:checkTaskEnter("HeroLvlCollect", {})
  657 + role:checkTaskEnter("HeroQualityCollect", {})
  658 +
  659 + local curPopular = role.dinerData:getProperty("popular")
  660 + role:checkTaskEnter("DinerPopular", {count = curPopular})
  661 +
  662 + local rLevel = role:getProperty("level")
  663 + role:checkTaskEnter("RoleLevelUp", {level = rLevel})
  664 +
  665 + local towerInfo = role:getProperty("towerInfo")
  666 + role:checkTaskEnter("TowerPass", {count = towerInfo.l, type = 1})
  667 + --"PvpWin"
  668 + --role:checkTaskEnter("HangPass", {id = 0})
  669 + role:checkCalendaTask(true, 15, 3)
  670 + role:checkTaskEnter("HeroStarCollect", {})
  671 + role:checkTaskEnter("RuneQualityCollect", {})
  672 +
  673 + end,
  674 + ["crossDay"] = function(self, actType, notify, actId)
  675 + local actData = self.owner:getProperty("nbTask") or {}
  676 + local record = actData["r"] or {}
  677 + local actCfg = csvdb["activity_taskCsv"][actId]
  678 + if not actCfg then return end
  679 + local change = false
  680 + for taskId, cfg in pairs(actCfg) do
  681 + if cfg["resetType"] == 1 then -- 每日重置
  682 + record[taskId] = nil
  683 + actData[taskId] = nil
  684 + change = true
  685 + end
  686 + end
  687 + if change then
  688 + self.owner:updateProperty({field="nbTask", value=actData})
  689 + end
  690 + end,
  691 + ["crossWeek"] = function(self, actType, notify, actId)
  692 + local actData = self.owner:getProperty("nbTask") or {}
  693 + local record = actData["r"] or {}
  694 + local actCfg = csvdb["activity_taskCsv"][actId]
  695 + if not actCfg then return end
  696 + local change = false
  697 + for taskId, cfg in pairs(actCfg) do
  698 + if cfg["resetType"] == 2 then -- 每周重置
  699 + record[taskId] = nil
  700 + actData[taskId] = nil
  701 + change = true
  702 + end
  703 + end
  704 + if change then
  705 + self.owner:updateProperty({field="nbTask", value=actData})
  706 + end
  707 + end,
  708 + ["close"] = function(self, actType, notify)
  709 + self.owner:updateProperty({field="nbTask", value={}})
  710 + end,
  711 +}
  712 +
  713 +-- 兑换
  714 +activityFunc[Activity.ActivityType.Exchange] = {
  715 + ["init"] = function(self, actType, isCrossDay, notify, actId)
  716 + local actData = self:getActData(actType) or {}
  717 + actData[actId] = {}
  718 + self:updateActData(actType, actData, not notify)
  719 + end,
  720 + ["login"] = function(self, actType, actId)
  721 + activityFunc[Activity.ActivityType.Exchange]["crossDay"](self, actType, true, actId)
  722 + end,
  723 + ["crossDay"] = function(self, actType, notify, actId)
  724 + local actData = self:getActData(actType) or {}
  725 + local lastTs = actData["ts"] or 0
  726 + local timeNow = skynet.timex()
  727 + local cfg = csvdb["activity_ctrlCsv"][actId]
  728 + if not cfg then return end
  729 + local refreshTimes = cfg.condition2:toArray(false, "=")
  730 + for i = 1, #refreshTimes do
  731 + local rt = toUnixtime(refreshTimes[i]..string_format("%02x", RESET_TIME))
  732 + if timeNow >= rt and rt > lastTs then
  733 + lastTs = rt
  734 + actData = {}
  735 + end
  736 + end
  737 + if not next(actData) then
  738 + actData["ts"] = timeNow
  739 + self:updateActData(actType, actData, not notify)
  740 + end
  741 + end,
  742 + ["close"] = function(self, actType, notify, actId)
  743 + local actData = self:getActData(actType) or {}
  744 + actData[actId] = nil
  745 + self:updateActData(actType, actData, not notify)
  746 + end,
  747 +}
  748 +
644 749 -- 扭蛋机
645 750 activityFunc[Activity.ActivityType.Gachakon] = {
646 751 ["init"] = function(self, actType, isCrossDay, notify, actId)
... ...
src/models/Role.lua
... ... @@ -193,8 +193,9 @@ Role.schema = {
193 193 downCvR = {"number", 0}, -- 下载cv扩展包奖励
194 194 feedback = {"table", {}}, -- 反馈相关信息 {flag = false, count = 0} flag是否评论过,count 提示次数
195 195  
196   - calTask = {"table", {}}, -- 英雄活动 日历任务活动
  196 + calTask = {"table", {}}, -- 英雄活动 日历任务活动
197 197 bcTask = {"table", {}}, -- 英雄令活动 日历任务活动 临时使用
  198 + nbTask = {"table", {}}, -- 新用户活动
198 199 radioTask = {"table", {}}, -- 电台任务 {id = {time=end_ts,heros=heros}} 表crusadeCsv
199 200  
200 201 seaport = {"table", {}}, -- 海岛贸易季 {time = 1234567890, donate = {}, collect = {[1] = {team = "1=2=3", time = 1234567890}}, shop = {}}
... ... @@ -436,6 +437,7 @@ function Role:data()
436 437 ctime = self:getProperty("ctime"),
437 438 calTask = self:getProperty("calTask"),
438 439 bcTask = self:getProperty("bcTask"),
  440 + nbTask = self:getProperty("nbTask"),
439 441 radioTask = self:getProperty("radioTask"),
440 442  
441 443 seaport = self:getProperty("seaport"),
... ...
src/models/RoleLog.lua
... ... @@ -104,6 +104,7 @@ local ItemReason = {
104 104 calendaTask = 1009, -- 英雄帖
105 105 actMilecrisis = 1010, -- 物资危机
106 106 battleCommandTask = 1011, -- 将军令任务
  107 + newUserTask = 1012, -- 新玩家任务
107 108  
108 109 -- 餐厅
109 110 greenHourse = 1101, -- 食材获得
... ...
src/models/RoleTask.lua
... ... @@ -323,6 +323,11 @@ local BattleCommandTaskListener = {
323 323 listen = CalendaTaskListener["listen"]
324 324 }
325 325  
  326 +local NewUserTaskListener = {
  327 + func = "checkNewUserTask",
  328 + listen = CalendaTaskListener["listen"]
  329 +}
  330 +
326 331 local ReturnerTask = {
327 332 func = "checkReturnerTask",
328 333 listen = CalendaTaskListener["listen"]
... ... @@ -338,6 +343,7 @@ local TaskListeners = {
338 343 CalendaTaskListener,
339 344 BattleCommandTaskListener,
340 345 ReturnerTask,
  346 + NewUserTaskListener,
341 347 }
342 348  
343 349 local RoleTask = {}
... ... @@ -835,6 +841,19 @@ function RoleTask.bind(Role)
835 841 self:checkActTask(notNotify, keyName, actData, mainType, subType, param1, param2)
836 842 end
837 843  
  844 + function Role:checkNewUserTask(notNotify, mainType, subType, param1, param2)
  845 + --print("check new user task", mainType, subType, param1, param2)
  846 + local actEnum = "NewUserTask"
  847 + local keyName = "nbTask"
  848 + if not self.activity then return end
  849 + local open, actId = self.activity:isOpen(actEnum)
  850 + local actData = csvdb["activity_ctrlCsv"][actId]
  851 + if not actData then return end
  852 + if not open then return end
  853 +
  854 + self:checkActTask(notNotify, keyName, actData, mainType, subType, param1, param2)
  855 + end
  856 +
838 857 function Role:checkReturnerTask(notNotify, mainType, subType, param1, param2)
839 858 -- print("check returner task", mainType, subType, param1, param2)
840 859 local returner = self:getProperty("returner") or {}
... ...