From fc316d1f24ff31d4cbd8acfaa944d4473af0a51f Mon Sep 17 00:00:00 2001 From: zhouhaihai Date: Fri, 24 Jul 2020 16:34:09 +0800 Subject: [PATCH] 冒险体力优化 --- src/actions/AdvAction.lua | 21 +++++++++++---------- src/actions/GmAction.lua | 2 +- src/actions/HangAction.lua | 1 - src/models/Daily.lua | 4 +--- src/models/Role.lua | 4 ++++ src/models/RolePlugin.lua | 31 +++++++++++++++++++++++++++++++ 6 files changed, 48 insertions(+), 15 deletions(-) diff --git a/src/actions/AdvAction.lua b/src/actions/AdvAction.lua index ec7e571..a5eaeb3 100644 --- a/src/actions/AdvAction.lua +++ b/src/actions/AdvAction.lua @@ -115,7 +115,7 @@ function _M.startAdvRpc( agent, data ) if advElM < relayData.unlockfloor then return 15 end --未解锁 end else -- 普通模式判断 - if role.dailyData:getProperty("advC") >= role:getAdvHangLimit() then return 2 end -- 是否有体力 + if not role:checkAdvCount(chapterData.limitlevel) then return 2 end -- 是否有体力 if layer >= chapterData.limitlevel then return 4 end -- 关卡开放判断 if not role:advChapterIsOpen(chapterId) then return 5 end @@ -142,7 +142,7 @@ function _M.startAdvRpc( agent, data ) if AdvCommon.isEndless(chapterId) then role.dailyData:updateProperty({field = "advElC", delta = 1}) else - role.dailyData:updateProperty({field = "advC", delta = 1}) + role:changeAdvCount(chapterData.limitlevel) end local support = {} -- 支援效果 @@ -246,7 +246,7 @@ function _M.startHangRpc(agent, data) if not next(advRelay[chapterId] or {}) then return end -- 没有开放 - if role.dailyData:getProperty("advC") >= role:getAdvHangLimit() then return end -- 是否有体力 + if not role:checkAdvCount(chapterData.limitlevel) then return end -- 是否有体力 if not checkFormat(role, format, role:getAdvData():isRunning()) then return end --编队是否正确 @@ -285,7 +285,7 @@ function _M.startHangRpc(agent, data) role:changeUpdates({{type = "advHang", field = chapterId, value = info}}) - role.dailyData:updateProperty({field = "advC", delta = 1}) + role:changeAdvCount(chapterData.limitlevel) role:checkTaskEnter("AdvStart", {id = chapterId}) role:log("adv_action", {desc = "startHang", int1 = chapterId}) @@ -365,11 +365,12 @@ function _M.endHangRpc(agent, data) reward = role:award(idleReward, {log = {desc = "advHang", int1 = chapterId}}) else if cancel then - if role.dailyData:getProperty("advC") <= 0 then - isFull = true - else - role.dailyData:updateProperty({field = "advC", delta = -1}) - end + role:changeAdvCount(-chapterData.limitlevel) + -- if role:getProperty("advC") <= 0 then + -- isFull = true + -- else + -- role:updateProperty({field = "advC", delta = -chapterData.limitlevel}) + -- end else return end @@ -405,7 +406,7 @@ function _M.buyAdvCountRpc(agent , data) role.dailyData:updateProperty({field = "advElC", delta = -count}) role.dailyData:updateProperty({field = "advElBC", delta = count}) else - role.dailyData:updateProperty({field = "advC", delta = -count}) + role:changeAdvCount(-count * globalCsv.adv_daily_buy_num) role.dailyData:updateProperty({field = "advBC", delta = count}) end role:log("adv_action", {desc = "buyAdvCount", short1 = isEl and 1 or 0, int1 = count}) diff --git a/src/actions/GmAction.lua b/src/actions/GmAction.lua index 97e62a5..ec349a1 100644 --- a/src/actions/GmAction.lua +++ b/src/actions/GmAction.lua @@ -337,7 +337,7 @@ end table.insert(helpDes, {"冒险次数恢复", "advf"}) function _M.advf(role, pms) - role.dailyData:updateProperty({field = "advC", value = 0}) + role:updateProperty({field = "advC", value = 0}) role.dailyData:updateProperty({field = "advElC", value = 0}) role:log("gm_action", {desc = "advf", key1 = pms.sender}) diff --git a/src/actions/HangAction.lua b/src/actions/HangAction.lua index fc2ba13..17c1c15 100644 --- a/src/actions/HangAction.lua +++ b/src/actions/HangAction.lua @@ -562,7 +562,6 @@ end function _M.chatLineRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) - local id = msg.id local idleData = csvdb["idle_battleCsv"][id] diff --git a/src/models/Daily.lua b/src/models/Daily.lua index a8d129f..7bfcf14 100644 --- a/src/models/Daily.lua +++ b/src/models/Daily.lua @@ -10,7 +10,6 @@ Daily.schema = { commentHero = {"string", ""}, -- 单日评论食灵记录 type=1 hangQC = {"number", 0}, -- 挂机快速次数 dinerQC = {"number", 0}, -- 贩卖加速次数 - advC = {"number", 0}, -- 冒险次数(消耗体力) advElC = {"number", 0}, -- 无尽次数(消耗体力) advBC = {"number", 0}, -- 冒险次数购买次数(冒险体力购买次数) advElBC = {"number", 0}, -- 无尽次数购买次数(冒险体力购买次数) @@ -52,7 +51,7 @@ function Daily:refreshDailyData(notify) redisproxy:del(FRIEND_POINT:format(self.owner:getProperty("id"))) local dataMap = {} for field, schema in pairs(self.schema) do - if field == "advC" or field == "advElC" then + if field == "advElC" then if self:getProperty(field) > 0 then dataMap[field] = 0 end @@ -85,7 +84,6 @@ function Daily:data() return { hangQC = self:getProperty("hangQC"), dinerQC = self:getProperty("dinerQC"), - advC = self:getProperty("advC"), advBC = self:getProperty("advBC"), advElC = self:getProperty("advElC"), advElBC = self:getProperty("advElBC"), diff --git a/src/models/Role.lua b/src/models/Role.lua index 7434f0a..80fb0ea 100644 --- a/src/models/Role.lua +++ b/src/models/Role.lua @@ -83,6 +83,8 @@ Role.schema = { advRelay = {"table", {}}, -- 冒险中继点记录 {[chapter] = {[level] = 1}, [-1] = {[level] = 1}} -- -1 无尽 方便重置 advSup = {"table", {}}, -- 冒险支援效果 待选项 advLimit = {"table", {}}, -- 冒险事件每次的limit + advC = {"number", 0}, -- 冒险次数(消耗体力) + advCT = {"number", 0}, -- 冒险次数 上次恢复时间 --挂机相关 hangPass = {"table", {}}, -- 挂机通过的最大关卡 @@ -324,6 +326,8 @@ function Role:data() advShop = self:getProperty("advShop"), advEAchiev = self:getProperty("advEAchiev"), advSup = self:getProperty("advSup"), + advC = self:getProperty("advC"), + advCT = self:getProperty("advCT"), hangPass = self:getProperty("hangPass"), hangGift = self:getProperty("hangGift"), diff --git a/src/models/RolePlugin.lua b/src/models/RolePlugin.lua index cdf4dbe..f24ce9a 100644 --- a/src/models/RolePlugin.lua +++ b/src/models/RolePlugin.lua @@ -838,6 +838,37 @@ function RolePlugin.bind(Role) return globalCsv.adv_daily_cross_count + self:getFuncLv(FuncOpenType.AdvCount) end + function Role:checkAdvCount(need) + local oldCount = self:getProperty("advC") + local oldTime = self:getProperty("advCT") + local newCount = oldCount + if oldCount > 0 then + local add = math.max(math.floor((skynet.timex() - oldTime) / (globalCsv.adv_daily_regain_min * 60)), 0) + newCount = math.max(oldCount - add, 0) + end + + return newCount + need <= self:getAdvHangLimit() + end + + --忽略上限 + function Role:changeAdvCount(change) + local count = self:getProperty("advC") + local ctime = self:getProperty("advCT") + if ctime == 0 then + ctime = skynet.timex() + end + local add = math.max(math.floor((skynet.timex() - ctime) / (globalCsv.adv_daily_regain_min * 60)), 0) + local nextTime = ctime + add * (globalCsv.adv_daily_regain_min * 60) + if count > 0 then + count = math.max(count - add, 0) + end + + self:updateProperties({ + advC = count + change, + advCT = ctime, + }) + end + function Role:getAdvElLimit() return globalCsv.adv_endless_daily_cross_count + self:getFuncLv(FuncOpenType.AdvCountEL) end -- libgit2 0.21.2