From 161c50cc12d52e5d8baba5be1fbdaa664e5ccb41 Mon Sep 17 00:00:00 2001 From: zhouhaihai Date: Wed, 23 Dec 2020 20:37:48 +0800 Subject: [PATCH] 宝藏怪活动 --- src/GlobalVar.lua | 1 + src/ProtocolCode.lua | 1 + src/RedisKeys.lua | 1 + src/actions/ActivityAction.lua | 43 +++++++++++++++++++++++++++++++++++++++---- src/adv/AdvPlayer.lua | 2 +- src/models/Activity.lua | 45 ++++++++++++++++++++++++++++++++++++++++++++- src/models/RoleTask.lua | 6 +++++- 7 files changed, 92 insertions(+), 7 deletions(-) diff --git a/src/GlobalVar.lua b/src/GlobalVar.lua index 420363c..009752d 100644 --- a/src/GlobalVar.lua +++ b/src/GlobalVar.lua @@ -136,6 +136,7 @@ ItemId = { AdvKey = 80, -- 冒险钥匙 BoxKey = 60, -- 拆解工具 AdvPower = 4701, -- 拾荒体力 + CrisisScore = 8010, -- 积分 } TimeReset = { diff --git a/src/ProtocolCode.lua b/src/ProtocolCode.lua index eefa756..5fbfc43 100644 --- a/src/ProtocolCode.lua +++ b/src/ProtocolCode.lua @@ -228,6 +228,7 @@ actionCodes = { Activity_battleRankRpc = 662, Activity_battleMilestoneRpc = 663, Activity_bossRewardRpc = 664, + Activity_crisisMilestoneRpc = 665, Radio_startQuestRpc = 700, Radio_finishQuestRpc = 701, diff --git a/src/RedisKeys.lua b/src/RedisKeys.lua index 064e7dd..94f5164 100644 --- a/src/RedisKeys.lua +++ b/src/RedisKeys.lua @@ -19,6 +19,7 @@ R_ORDER = "order:%d:%d" RANK_COMMON = "rank:common:" RANK_TYPE = { ActBattleBoss = "act_battle_boss", + ActCrisis = "crisis", } -- rank diff --git a/src/actions/ActivityAction.lua b/src/actions/ActivityAction.lua index d44a7c6..771ccdd 100644 --- a/src/actions/ActivityAction.lua +++ b/src/actions/ActivityAction.lua @@ -717,10 +717,15 @@ function _M.battleRankRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) local actid = msg.actid - if not role.activity:isOpenById(actid, "ChallengeLevel") then return 1 end - - local rankInfo = role:getRankInfoCommon(RANK_TYPE.ActBattleBoss) - + local cfg = csvdb["activity_ctrlCsv"][actid] + if not cfg then return 1 end + if not role.activity:isOpen(cfg.showType) then return 2 end + local actTypeToRank = { + [role.activity.ActivityType.ChallengeLevel] = RANK_TYPE.ActBattleBoss, + [role.activity.ActivityType.Crisis] = RANK_TYPE.ActCrisis, + } + if not actTypeToRank[cfg.showType] then return end + local rankInfo = role:getRankInfoCommon(actTypeToRank[cfg.showType]) SendPacket(actionCodes.Activity_battleRankRpc, MsgPack.pack(rankInfo)) return true end @@ -765,6 +770,36 @@ function _M.battleMilestoneRpc(agent, data) return true end +function _M.crisisMilestoneRpc(agent, data) + local role = agent.role + local msg = MsgPack.unpack(data) + local actid = msg.actid + local id = msg.id + if not role.activity:isOpenById(actid, "Crisis") then return 1 end + local actCfg = csvdb["activity_mileageCsv"][actid] + if not actCfg then return 3 end + + local curCsv = actCfg[id] + if not curCsv then return 4 end + + if role:getItemCount(ItemId.CrisisScore) < curCsv.condition then + return 5 + end + + local actData = role.activity:getActData("Crisis") or {} + actData.score = actData.score or {} + if actData.score[id] then + return 6 + end + actData.score[id] = -1 + role.activity:updateActData("Crisis", actData) + + local reward, change = role:award(curCsv.award, {log = {desc = "actMilecrisis", int1 = actid}}) + SendPacket(actionCodes.Activity_crisisMilestoneRpc, MsgPack.pack(role:packReward(reward, change))) + return true +end + + function _M.bossRewardRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) diff --git a/src/adv/AdvPlayer.lua b/src/adv/AdvPlayer.lua index 79e0a5b..5193b9d 100644 --- a/src/adv/AdvPlayer.lua +++ b/src/adv/AdvPlayer.lua @@ -662,7 +662,7 @@ end function Enemy:getObstacle() local obstacle = csvdb["event_monsterCsv"][self.monsterId].obstacle - if obstacle == 0 and self:hadBuff(Buff.OBSTACLE_CHANGE) then + if obstacle == 2 and self:hadBuff(Buff.OBSTACLE_CHANGE) then obstacle = 1 end return obstacle diff --git a/src/models/Activity.lua b/src/models/Activity.lua index 4a659c8..d4876a2 100644 --- a/src/models/Activity.lua +++ b/src/models/Activity.lua @@ -28,8 +28,9 @@ Activity.ActivityType = { WishHeroPool = 23, -- 心愿卡池 ActHeroPool = 24, -- 活动卡池 ActShopGoods = 25, -- 活动商品 -} + Crisis = 26, -- 宝藏怪活动 +} local function checkActivityType(activityType) if type(activityType) == "string" then @@ -69,6 +70,8 @@ Activity.schema = { act18 = {"table", {}, true}, -- {id=兑换数量} act19 = {"number", 0}, -- {挂机信息} act20 = {"table", {}}, -- {id=扭蛋抽出数量} + + act26 = {"table", {}}, -- {task = {id = count}, socre = {id = status}} } function Activity:data() @@ -720,4 +723,44 @@ activityFunc[Activity.ActivityType.ActShopGoods] = { } + +activityFunc[Activity.ActivityType.Crisis] = { + ["check"] = function(self, actType, notify, atype, count) -- 检查 + count = count or 1 + local isOpen, actId = self:isOpen(actType) + local actData = self:getActData(actType) or {} + actData.task = actData.task or {} + local change = false + local actCsv = csvData["activity_crisisCsv"][actId] + for id, actSet in pairs(actCsv) do + if actSet.type == atype then + local status = actData.task[id] or 0 + status = status + count + if status >= actSet.condition1 then + local reward + if actSet.loop == 1 then + local rcount = math.floor(status / actSet.condition1) + local reward = actSet.reward:toNumMap() + for itemId, itemC in pairs(reward) do + reward[itemId] = itemC * rcount + end + status = status % actSet.condition1 + else + reward = actSet.reward + status = -1 + end + self.owner:award(reward, {log = {desc = "activity_crisis"}, notNotify = not notify}) + end + actData.task[id] = status + change = true + end + end + if change then + -- 更新下排行榜 + self.owner:updateRankCommon(RANK_TYPE.ActCrisis, self.owner:getItemCount(ItemId.CrisisScore)) + self:updateActData(actType, actData) + end + end, +} + return Activity diff --git a/src/models/RoleTask.lua b/src/models/RoleTask.lua index 38561fc..ccba3ce 100644 --- a/src/models/RoleTask.lua +++ b/src/models/RoleTask.lua @@ -48,6 +48,8 @@ local TaskType = { AdvScore = 410, -- 冒险分数 - score AdvDraw = 411, -- 冒险资助 - count ptype AdvHang = 412, -- 代理拾荒次数 + AdvMineKill = 413, -- 宝藏怪击杀 + AdvMineLayer = 414, -- 宝藏洞激活 --爬塔相关 TowerPass = 501, -- 爬塔通关 - level @@ -218,6 +220,7 @@ local SudokuListener = { } local Activity = require("models.Activity") + local ActivityListener = { func = "checkActivityTask", listen = { @@ -226,6 +229,8 @@ local ActivityListener = { [TaskType.AdvDraw] = {{Activity.ActivityType.AdvDraw, f("count")}}, [TaskType.OpenBox] = {{Activity.ActivityType.OpenBox, f("count")}}, [TaskType.Pay] = {{Activity.ActivityType.PayBack, f("twd")}}, + [TaskType.AdvMineKill] = {{Activity.ActivityType.Crisis, 1}}, + [TaskType.AdvMineLayer] = {{Activity.ActivityType.Crisis, 2}}, } } @@ -266,7 +271,6 @@ local CalendaTaskListener = { } } - local TaskListeners = { StoryListener, CommonListener, -- libgit2 0.21.2