diff --git a/src/GlobalVar.lua b/src/GlobalVar.lua index 3fd9caa..4390bae 100644 --- a/src/GlobalVar.lua +++ b/src/GlobalVar.lua @@ -46,12 +46,19 @@ ItemType = { FuncOpen = 15, -- 管理功能开放 } +--在这个里面的会记录的是功能开放 对应类型open 而不是 ID FuncOpenType = { - AdvEndless = 5919, -- 无尽模式 - AdvRelay = 5920, -- 中继开放 - AdvArtifact = 5921, -- 神器开放 + AdvEndless = 2, -- 无尽模式 + AdvRelay = 3, -- 中继开放 + AdvArtifact = 4, -- 神器开放 + AdvWS = 6, -- 工坊解锁 } +TypeIsFunc = {} +for _, v in pairs(FuncOpenType) do + TypeIsFunc[v] = true +end + -- 物品起始id ItemStartId = { Hero = 300, -- 英雄 diff --git a/src/ProtocolCode.lua b/src/ProtocolCode.lua index 1898c07..5c212f7 100644 --- a/src/ProtocolCode.lua +++ b/src/ProtocolCode.lua @@ -40,6 +40,7 @@ actionCodes = { Adv_endHangRpc = 159, Adv_buyAdvCountRpc = 160, Adv_finishTaskRpc = 161, + Adv_workshopRpc = 162, Hero_loadInfos = 201, Hero_updateProperty = 202, diff --git a/src/actions/AdvAction.lua b/src/actions/AdvAction.lua index eff9689..d4abe0b 100644 --- a/src/actions/AdvAction.lua +++ b/src/actions/AdvAction.lua @@ -315,6 +315,33 @@ function _M.endBattleRpc(agent, data) return true end +function _M.workshopRpc(agent, data) + local role = agent.role + local msg = MsgPack.unpack(data) + + local id = msg.id + local count = msg.count or 1 + local mergeData = csvdb["adv_mergeCsv"][id] + if not mergeData then return 1 end + + if not role:isFuncOpen(FuncOpenType.AdvWS) or role:getFuncLv(FuncOpenType.AdvWS) < mergeData.unlock then return 2 end + + local advWs = role.dailyData:getProperty("advWs") + if math.illegalNum(count, 1, mergeData.limit - (advWs[id] or 0)) then return 3 end + + local cost = mergeData.formula:toNumMap() + for k, v in pairs(cost) do + cost[k] = v * count + end + if not role:checkItemEnough(cost) then return 4 end + + role:costItems(cost) + advWs[id] = (advWs[id] or 0) + count + role.dailyData:updateProperty({field = advWs, value = advWs}) + local reward = role:award({[id] = count}) + SendPacket(actionCodes.Adv_workshopRpc, MsgPack.pack({reward = reward})) + return true +end return _M \ No newline at end of file diff --git a/src/models/Daily.lua b/src/models/Daily.lua index 0a5fd2a..b36ea46 100644 --- a/src/models/Daily.lua +++ b/src/models/Daily.lua @@ -12,6 +12,7 @@ Daily.schema = { dinerQC = {"number", 0}, -- 贩卖加速次数 advC = {"number", 0}, -- 冒险次数(消耗体力) advBC = {"number", 0}, -- 冒险次数购买次数(冒险体力购买次数) + advWs = {"table", {}}, -- 冒险队工坊 } function Daily:updateProperty(params) @@ -48,6 +49,7 @@ function Daily:data() dinerQC = self:getProperty("dinerQC"), advC = self:getProperty("advC"), advBC = self:getProperty("advBC"), + advWs = self:getProperty("advWs"), } end diff --git a/src/models/Role.lua b/src/models/Role.lua index 4c5db53..4ed6f3c 100644 --- a/src/models/Role.lua +++ b/src/models/Role.lua @@ -37,6 +37,7 @@ Role.schema = { exp = {"number", 0}, items = {"string", ""}, funcOpen = {"table", {}}, --功能是否开放 + funcLv = {"table", {}}, --功能等级 loveStatus = {"string", ""}, --统计角色的最高 好感度等级 类型相关 -- type=loveL type=loveL crown = {"number", 0}, -- 看伴娘 @@ -51,6 +52,8 @@ Role.schema = { advTask = {"table", {}}, -- 冒险已领取任务完成状态 {id = status} --每层重置 advMTask = {"table", {id = 1, status = 0, lock = true}}, -- 冒险主线任务 -- {id = id, status = status, lock = true} -- 当前主线id 当前主线状态 是否锁定状态 advAchiev = {"table", {}}, -- 冒险成就 {chapterId = {achievId = status}} + advL = {"number", 1}, -- 冒险队等级 + --挂机相关 hangPass = {"table", {}}, -- 挂机通过的最大关卡 hangTeam = {"table", {}}, -- 挂机队伍 @@ -175,6 +178,7 @@ function Role:data() exp = self:getProperty("exp"), items = self:getProperty("items"):toNumMap(), funcOpen = self:getProperty("funcOpen"), + funcLv = self:getProperty("funcLv"), loveStatus = self:getProperty("loveStatus"):toNumMap(), diamond = self:getAllDiamond(), bagLimit = self:getProperty("bagLimit"), @@ -186,6 +190,8 @@ function Role:data() advHang = self:getProperty("advHang"), advTask = self:getProperty("advTask"), advMTask = self:getProperty("advMTask"), + advAchiev = self:getProperty("advAchiev"), + advL = self:getProperty("advL"), hangPass = self:getProperty("hangPass"), hangTeam = self:getProperty("hangTeam"), diff --git a/src/models/RolePlugin.lua b/src/models/RolePlugin.lua index dc07423..620d4a4 100644 --- a/src/models/RolePlugin.lua +++ b/src/models/RolePlugin.lua @@ -593,15 +593,23 @@ function RolePlugin.bind(Role) return self:getProperty("funcOpen")[func] == 1 end - function Role:funcOpen(func) - if csvdb["itemCsv"][func] and csvdb["itemCsv"][func].type == ItemType.FuncOpen then - self:changeUpdates({{type = "funcOpen", field = func, value = 1}}) - end + function Role:getFuncLv(func) + return self:getProperty("funcLv")[func] or 1 end - function Role:funcClose(func) + function Role:funcOpen(func) if csvdb["itemCsv"][func] and csvdb["itemCsv"][func].type == ItemType.FuncOpen then - self:changeUpdates({{type = "funcOpen", field = func, value = nil}}) + local unlockData = csvdb["unlockCsv"][func] + if TypeIsFunc[unlockData.type] then + if unlockData.value1 == 0 or unlockData.value1 == 1 then + self:changeUpdates({{type = "funcOpen", field = unlockData.type, value = 1}}) + else + local oldV = self:getFuncLv(unlockData.type) + self:changeUpdates({{type = "funcLv", field = unlockData.type, value = oldV + 1}}) + end + else + self:changeUpdates({{type = "funcOpen", field = func, value = 1}}) + end end end -- libgit2 0.21.2