diff --git a/src/ProtocolCode.lua b/src/ProtocolCode.lua index d31496c..f346e57 100644 --- a/src/ProtocolCode.lua +++ b/src/ProtocolCode.lua @@ -82,6 +82,7 @@ actionCodes = { Car_equipUpRpc = 401, Car_runeUpRpc = 402, Car_saleEquipRpc = 403, + Car_saleRuneRpc = 404, } rpcResponseBegin = 10000 diff --git a/src/actions/CarAction.lua b/src/actions/CarAction.lua index 785fa52..4b9efc6 100644 --- a/src/actions/CarAction.lua +++ b/src/actions/CarAction.lua @@ -151,4 +151,31 @@ function _M.saleEquipRpc(agent, data ) return true end +function _M.saleRuneRpc(agent, data ) + local role = agent.role + local msg = MsgPack.unpack(data) + local backs = msg.backs + if not backs then return end + + local reward = {} + for _, id in pairs(backs) do + local rune = role.runeBag[uid] + if not rune then return end + if rune:getProperty("refer") ~= 0 then return end + local itemData = csvdb["ItemCsv"][rune:getProperty("id")] + if not itemData then return end + local one = itemData.sell_effect:toNumMap() + for k ,v in pairs(one) do + reward[k] = (reward[k] or 0) + v + end + end + + role:delRunes(backs) + + reward = role:award(reward) + + SendPacket(actionCodes.Car_saleRuneRpc, MsgPack.pack({reward = reward})) + return true +end + return _M \ No newline at end of file diff --git a/src/models/RolePlugin.lua b/src/models/RolePlugin.lua index 7abc386..a7a2eb5 100644 --- a/src/models/RolePlugin.lua +++ b/src/models/RolePlugin.lua @@ -471,6 +471,30 @@ function RolePlugin.bind(Role) end end + function Role:delRunes(runeIds) -- 批量删除 {id, } + local roleId = self:getProperty('id') + local bDel = {} + for _, runeId in paris(runeIds) do + local rune = self.runeBag[runeId] + if rune and rune:getProperty("refer") == 0 then + self.runeBag[runeId] = nil + table.insert(bDel, runeId) + end + end + + redisproxy:pipelining(function (red) + for _, runeId in pairs(bDel) do + red:del(string.format(R_RUNE, roleId, runeId)) + red:srem(string.format(R_RUNEIDS, roleId), runeId) + end + end) + local response = {} + for _, runeId in pairs(bDel) do + table.insert(response, {uid = runeId, bDel = true}) + end + SendPacket(actionCodes.Role_loadRunes, MsgPack.pack(response)) + end + function Role:getRuneByType(typ) local runeSet = {} for _,v in pairs(self.runeBag) do -- libgit2 0.21.2