From 5dfc497874aa081fff5f73e3a2d30d32178dbb9f Mon Sep 17 00:00:00 2001 From: zhouhaihai Date: Tue, 19 Nov 2019 10:12:35 +0800 Subject: [PATCH] 好友完善 --- src/actions/FriendAction.lua | 56 +++++++++++++++++++++++++++++++++----------------------- src/models/RoleTask.lua | 4 ---- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/src/actions/FriendAction.lua b/src/actions/FriendAction.lua index 4d32197..04d7765 100644 --- a/src/actions/FriendAction.lua +++ b/src/actions/FriendAction.lua @@ -136,6 +136,7 @@ function _M.applyRpc(agent, data) red:hlen(FRIEND_KEY:format(roleId)) red:hlen(FRIEND_KEY:format(objectId)) end) + -- 玩家id不存在 if not result and redret[1] ~= 1 then result = 1 @@ -155,7 +156,7 @@ function _M.applyRpc(agent, data) end -- 你把对方拉黑了 - if not result and redret[4] == 1 then + if not result and redret[5] == 1 then result = 5 end @@ -280,7 +281,7 @@ function _M.handleApplyRpc(agent, data) redisproxy:del(FRIEND_APPLY_KEY:format(roleId)) elseif cmd == 3 then -- 一键同意 local redret = redisproxy:pipelining(function(red) - red:zrange(FRIEND_APPLY_KEY:format(roleId)) + red:zrange(FRIEND_APPLY_KEY:format(roleId), 0, -1) red:SMEMBERS(FRIEND_POINT:format(roleId)) end) local allIds = redret[1] @@ -429,6 +430,8 @@ function _M.blockRpc(agent, data) red:hdel(FRIEND_KEY:format(objectId), roleId) red:sadd(FRIEND_BLACK_KEY:format(roleId), objectId) end) + rpcRole(objectId, "SendPacket", actionCodes.Friend_updateProperty, MsgPack.pack({deleteFriend = 1, roleId = roleId})) + end elseif cmd == 2 then redisproxy:SREM(FRIEND_BLACK_KEY:format(roleId), objectId) @@ -456,6 +459,7 @@ function _M.blockListRpc(agent, data) })) end + SendPacket(actionCodes.Friend_blockListRpc, MsgPack.pack({list = blockList})) return true end @@ -588,38 +592,44 @@ function _M.randomRpc(agent, data) local redret = redisproxy:pipelining(function (red) red:hgetall(FRIEND_KEY:format(roleId)) - red:zrevrange(FRIEND_RECOMMEND, 0, globalCsv.friendRecommendLimit + globalCsv.friendListLimit) + red:zrevrange(FRIEND_RECOMMEND, 0, globalCsv.friendRecommendLimit + globalCsv.friendListLimit + 10) --扩充10个 + red:SMEMBERS(FRIEND_BLACK_KEY:format(roleId)) end) - - local friends = redret[1] + local friends = {} + for i = 1, #redret[1], 2 do + friends[tonumber(redret[1][i])] = redret[1][i + 1] + end + local newList = redret[2] + local hadBlack = formatArray(redret[3]) + local needRoleIds = {} for _, newId in pairs(newList) do local numNewId = tonumber(newId) - if numNewId ~= roleId and not friends[newId] then + if numNewId ~= roleId and not friends[numNewId] and not hadBlack[numNewId] then table.insert(needRoleIds, numNewId) end end local randomRoles = {} - for _, objId in ipairs(needRoleIds) do - local online, info = getRoleInfo(objId) - local redret = redisproxy:pipelining(function (red) + local redret = redisproxy:pipelining(function (red) + for _, objId in ipairs(needRoleIds) do red:zscore(FRIEND_APPLY_KEY:format(objId), roleId) - red:sismember(FRIEND_BLACK_KEY:format(roleId), objId) - end) - local hadApply = redret[1] and 1 or nil - local inBlack = redret[2] == 1 and 1 or nil - - table.insert(randomRoles, table_merge({ - roleId = objId, - online = online, - hadApply = hadApply, - inBlack = inBlack, - }, info, { - - })) - if #randomRoles >= globalCsv.friendRecommendLimit then break end + end + end) + for idx, objId in ipairs(needRoleIds) do + if not redret[idx] then + local online, info = getRoleInfo(objId) + table.insert(randomRoles, table_merge({ + roleId = objId, + online = online, + hadApply = hadApply, + inBlack = inBlack, + }, info, { + + })) + if #randomRoles >= globalCsv.friendRecommendLimit then break end + end end SendPacket(actionCodes.Friend_randomRpc, MsgPack.pack({list = randomRoles})) diff --git a/src/models/RoleTask.lua b/src/models/RoleTask.lua index 2d2bfd1..9f8ae73 100644 --- a/src/models/RoleTask.lua +++ b/src/models/RoleTask.lua @@ -394,10 +394,6 @@ function RoleTask.bind(Role) end nStatus = math.max(nStatus, n) end - if achiveData.id == 35 then - print(nStatus) - end - if nStatus > curStatus then table.insert(change, {type = "achiveT", field = tId, value = nStatus}) end -- libgit2 0.21.2