Commit cab7184bb610910063f0c86077945f19d7b6ad59
1 parent
eba94a09
活动能量bug
Showing
2 changed files
with
75 additions
and
73 deletions
Show diff stats
src/actions/ActivityAction.lua
| @@ -893,9 +893,11 @@ function _M.friendHelpRpc(agent, data) | @@ -893,9 +893,11 @@ function _M.friendHelpRpc(agent, data) | ||
| 893 | local roleId = role:getProperty("id") | 893 | local roleId = role:getProperty("id") |
| 894 | local msg = MsgPack.unpack(data) | 894 | local msg = MsgPack.unpack(data) |
| 895 | local oper = tonumber(msg.oper) or -1 | 895 | local oper = tonumber(msg.oper) or -1 |
| 896 | - local actid = msg.actid | ||
| 897 | - local result, award | 896 | + local award = {} |
| 897 | + local result | ||
| 898 | + | ||
| 898 | 899 | ||
| 900 | + local actid = 37 | ||
| 899 | if not role.activity:isOpenById(actid, "FriendEnergy") then return 1 end | 901 | if not role.activity:isOpenById(actid, "FriendEnergy") then return 1 end |
| 900 | if oper < 1 or oper > 3 then return 2 end | 902 | if oper < 1 or oper > 3 then return 2 end |
| 901 | 903 | ||
| @@ -916,99 +918,98 @@ function _M.friendHelpRpc(agent, data) | @@ -916,99 +918,98 @@ function _M.friendHelpRpc(agent, data) | ||
| 916 | end | 918 | end |
| 917 | 919 | ||
| 918 | if oper == 1 then -- 赠送好友能量 | 920 | if oper == 1 then -- 赠送好友能量 |
| 921 | + local giveAE = actData.giveAE or {} | ||
| 919 | local objId = msg.roleId | 922 | local objId = msg.roleId |
| 920 | local gift = gifts[1] | 923 | local gift = gifts[1] |
| 921 | local ids = {} | 924 | local ids = {} |
| 922 | 925 | ||
| 923 | if not objId then | 926 | if not objId then |
| 924 | - if not redisproxy:hexists(FRIEND_KEY:format(roleId), objId) then | ||
| 925 | - return 3 | ||
| 926 | - end | ||
| 927 | - ids[objId] = 1 | ||
| 928 | - else | ||
| 929 | - ids = getIds() | 927 | + return 3 |
| 928 | + end | ||
| 929 | + if not redisproxy:hexists(FRIEND_KEY:format(roleId), objId) then | ||
| 930 | + result = 2 | ||
| 931 | + end | ||
| 932 | + if giveAE[objId] then | ||
| 933 | + result = 1 | ||
| 930 | end | 934 | end |
| 931 | 935 | ||
| 932 | - local giveFE = actData.giveFE or {} | ||
| 933 | - redisproxy:pipelining(function(red) | ||
| 934 | - for friendId, _ in pairs(ids) do | ||
| 935 | - if not giveFE[friendId] then | ||
| 936 | - result = 1 | ||
| 937 | - giveFE[friendId] = 1 | ||
| 938 | - award[gift[1]] = (award[gift[1]] or 0) + gift[2] | ||
| 939 | - red:sadd(FRIEND_ENERGY:format(friendId), roleId) | ||
| 940 | - rpcRole(friendId, "SendPacket", actionCodes.Role_notifyNewEvent, MsgPack.pack({events = {actFriendGive = roleId}})) | ||
| 941 | - end | ||
| 942 | - end | ||
| 943 | - end) | ||
| 944 | - | ||
| 945 | - actData.giveFE = giveFE | 936 | + if not result then |
| 937 | + giveAE[objId] = 1 | ||
| 938 | + award[gift[1]] = gift[2] | ||
| 939 | + redisproxy:sadd(FRIEND_ENERGY:format(objId), roleId) | ||
| 940 | + rpcRole(objId, "SendPacket", actionCodes.Role_notifyNewEvent, MsgPack.pack({events = {actFriendGive = roleId}})) | ||
| 941 | + actData.giveAE = giveAE | ||
| 942 | + end | ||
| 946 | elseif oper == 2 then -- 收取能量 | 943 | elseif oper == 2 then -- 收取能量 |
| 947 | local objId = msg.roleId | 944 | local objId = msg.roleId |
| 948 | local gift = gifts[2] | 945 | local gift = gifts[2] |
| 949 | - local getFE = actData.getFE or {} | 946 | + local getAE = actData.getAE or {} |
| 950 | local limit = actData.limit or 0 | 947 | local limit = actData.limit or 0 |
| 951 | 948 | ||
| 952 | if limit >= getLimit then return 4 end | 949 | if limit >= getLimit then return 4 end |
| 953 | - | ||
| 954 | - local ids = {} | ||
| 955 | - if not objId then | ||
| 956 | - if not redisproxy:hexists(FRIEND_KEY:format(roleId), objId) then | ||
| 957 | - return 5 | ||
| 958 | - end | ||
| 959 | - if not redisproxy:sismember(FRIEND_ENERGY:format(roleId), objId) then | ||
| 960 | - return 6 | ||
| 961 | - end | ||
| 962 | - ids[objId] = 1 | ||
| 963 | - else | ||
| 964 | - ids = getIds() | 950 | + if not redisproxy:sismember(FRIEND_ENERGY:format(roleId), objId) then |
| 951 | + result = 3 | ||
| 952 | + end | ||
| 953 | + if getAE[objId] then | ||
| 954 | + result = 2 | ||
| 955 | + end | ||
| 956 | + if limit >= getLimit then | ||
| 957 | + result = 1 | ||
| 965 | end | 958 | end |
| 966 | 959 | ||
| 967 | - local getFE = actData.getFE or {} | ||
| 968 | - redisproxy:pipelining(function(red) | ||
| 969 | - for friendId, _ in pairs(ids) do | ||
| 970 | - if not getFE[friendId] and limit <= getLimit then | ||
| 971 | - result = 1 | ||
| 972 | - limit = limit + 1 | ||
| 973 | - getFE[friendId] = 1 | ||
| 974 | - award[gift[1]] = (award[gift[1]] or 0) + gift[2] | ||
| 975 | - red:srem(FRIEND_ENERGY:format(roleId), friendId) | ||
| 976 | - end | ||
| 977 | - end | ||
| 978 | - end) | ||
| 979 | - | ||
| 980 | - actData.limit = limit | ||
| 981 | - actData.getFE = getFE | 960 | + if not result then |
| 961 | + limit = limit + 1 | ||
| 962 | + getAE[objId] = 1 | ||
| 963 | + award[gift[1]] = gift[2] | ||
| 964 | + redisproxy:srem(FRIEND_ENERGY:format(roleId), objId) | ||
| 965 | + actData.limit = limit | ||
| 966 | + actData.getAE = getAE | ||
| 967 | + end | ||
| 982 | elseif oper == 3 then -- 一键送领全部 | 968 | elseif oper == 3 then -- 一键送领全部 |
| 983 | - local giveFE = actData.giveFE or {} | ||
| 984 | - local getFE = actData.getFE or {} | 969 | + local giveAE = actData.giveAE or {} |
| 970 | + local getAE = actData.getAE or {} | ||
| 985 | local gift1 = gifts[1] | 971 | local gift1 = gifts[1] |
| 986 | local gift2 = gifts[2] | 972 | local gift2 = gifts[2] |
| 987 | local limit = actData.limit or 0 | 973 | local limit = actData.limit or 0 |
| 974 | + local cmd1, cmd2 = 0, 0 | ||
| 988 | local ids = getIds() | 975 | local ids = getIds() |
| 976 | + | ||
| 977 | + local members = {} | ||
| 978 | + local temp = redisproxy:smembers(FRIEND_ENERGY:format(roleId)) | ||
| 979 | + for _, id in pairs(temp) do | ||
| 980 | + members[tonumber(id)] = 1 | ||
| 981 | + end | ||
| 982 | + | ||
| 989 | redisproxy:pipelining(function(red) | 983 | redisproxy:pipelining(function(red) |
| 990 | for friendId, _ in pairs(ids) do | 984 | for friendId, _ in pairs(ids) do |
| 991 | - if not giveFE[friendId] then | ||
| 992 | - result = 1 | ||
| 993 | - giveFE[friendId] = 1 | 985 | + if not giveAE[friendId] then |
| 986 | + giveAE[friendId] = 1 | ||
| 994 | award[gift1[1]] = (award[gift1[1]] or 0) + gift1[2] | 987 | award[gift1[1]] = (award[gift1[1]] or 0) + gift1[2] |
| 995 | red:sadd(FRIEND_ENERGY:format(friendId), roleId) | 988 | red:sadd(FRIEND_ENERGY:format(friendId), roleId) |
| 996 | rpcRole(friendId, "SendPacket", actionCodes.Role_notifyNewEvent, MsgPack.pack({events = {actFriendGive = roleId}})) | 989 | rpcRole(friendId, "SendPacket", actionCodes.Role_notifyNewEvent, MsgPack.pack({events = {actFriendGive = roleId}})) |
| 990 | + cmd1 = 2 | ||
| 997 | end | 991 | end |
| 998 | 992 | ||
| 999 | - if not getFE[friendId] and limit <= getLimit then | ||
| 1000 | - result = 1 | 993 | + if members[friendId] and not getAE[friendId] and limit <= getLimit then |
| 994 | + cmd2 = 1 | ||
| 1001 | limit = limit + 1 | 995 | limit = limit + 1 |
| 1002 | - getFE[friendId] = 1 | 996 | + getAE[friendId] = 1 |
| 1003 | award[gift2[1]] = (award[gift2[1]] or 0) + gift2[2] | 997 | award[gift2[1]] = (award[gift2[1]] or 0) + gift2[2] |
| 1004 | red:srem(FRIEND_ENERGY:format(roleId), friendId) | 998 | red:srem(FRIEND_ENERGY:format(roleId), friendId) |
| 1005 | end | 999 | end |
| 1006 | end | 1000 | end |
| 1007 | end) | 1001 | end) |
| 1008 | 1002 | ||
| 1003 | + local sum = cmd1 + cmd2 | ||
| 1004 | + if sum == 0 then | ||
| 1005 | + result = 3 | ||
| 1006 | + elseif sum ~= 3 then | ||
| 1007 | + result = sum | ||
| 1008 | + end | ||
| 1009 | + | ||
| 1009 | actData.limit = limit | 1010 | actData.limit = limit |
| 1010 | - actData.giveFE = giveFE | ||
| 1011 | - actData.getFE = getFE | 1011 | + actData.giveAE = giveAE |
| 1012 | + actData.getAE = getAE | ||
| 1012 | elseif oper == 4 then -- 抽大奖 | 1013 | elseif oper == 4 then -- 抽大奖 |
| 1013 | local magic = actData.magic or 0 | 1014 | local magic = actData.magic or 0 |
| 1014 | local rewards = actData.reward or {} | 1015 | local rewards = actData.reward or {} |
| @@ -1024,7 +1025,6 @@ function _M.friendHelpRpc(agent, data) | @@ -1024,7 +1025,6 @@ function _M.friendHelpRpc(agent, data) | ||
| 1024 | if not role:checkItemEnough(cost) then return 7 end | 1025 | if not role:checkItemEnough(cost) then return 7 end |
| 1025 | role:costItems(cost, {log = {desc = "actFriendHelp", int1 = actid, int2 = level}}) | 1026 | role:costItems(cost, {log = {desc = "actFriendHelp", int1 = actid, int2 = level}}) |
| 1026 | 1027 | ||
| 1027 | - award = {} | ||
| 1028 | if rewardCsv.reward ~= "" then | 1028 | if rewardCsv.reward ~= "" then |
| 1029 | result = 1 | 1029 | result = 1 |
| 1030 | award = rewardCsv.reward:toNumMap() | 1030 | award = rewardCsv.reward:toNumMap() |
| @@ -1056,7 +1056,10 @@ function _M.friendHelpRpc(agent, data) | @@ -1056,7 +1056,10 @@ function _M.friendHelpRpc(agent, data) | ||
| 1056 | end) | 1056 | end) |
| 1057 | actData.new = ids | 1057 | actData.new = ids |
| 1058 | 1058 | ||
| 1059 | - local reward, change = role:award(award, {log = {desc = "actFriendHelp", int1 = actid, int2 = level}}) | 1059 | + local reward, change |
| 1060 | + if next(award) then | ||
| 1061 | + reward, change = role:award(award, {log = {desc = "actFriendHelp", int1 = actid, int2 = level}}) | ||
| 1062 | + end | ||
| 1060 | role.activity:updateActData("FriendEnergy", actData) | 1063 | role.activity:updateActData("FriendEnergy", actData) |
| 1061 | SendPacket(actionCodes.Activity_friendHelpRpc, MsgPack.pack({result = result, reward = reward})) | 1064 | SendPacket(actionCodes.Activity_friendHelpRpc, MsgPack.pack({result = result, reward = reward})) |
| 1062 | return true | 1065 | return true |
src/models/Activity.lua
| @@ -32,7 +32,7 @@ Activity.ActivityType = { | @@ -32,7 +32,7 @@ Activity.ActivityType = { | ||
| 32 | Crisis = 26, -- 宝藏怪活动 | 32 | Crisis = 26, -- 宝藏怪活动 |
| 33 | 33 | ||
| 34 | CommonSignIn = 28, --通用签到 | 34 | CommonSignIn = 28, --通用签到 |
| 35 | - FriendEnergy = 29, -- 好友互赠能量活动 | 35 | + FriendEnergy = 30, -- 好友互赠能量活动 |
| 36 | } | 36 | } |
| 37 | 37 | ||
| 38 | local function checkActivityType(activityType) | 38 | local function checkActivityType(activityType) |
| @@ -78,7 +78,7 @@ Activity.schema = { | @@ -78,7 +78,7 @@ Activity.schema = { | ||
| 78 | act26 = {"table", {}}, -- {task = {id = count}, socre = {id = status}} | 78 | act26 = {"table", {}}, -- {task = {id = count}, socre = {id = status}} |
| 79 | 79 | ||
| 80 | act28 = {"table", {}}, -- 每日活跃签到 {0=day, 1=1,2=1,3=1} | 80 | act28 = {"table", {}}, -- 每日活跃签到 {0=day, 1=1,2=1,3=1} |
| 81 | - act29 = {"table", {}}, -- {magic = 0, limit = 0, reward = {id = 1, id = 1}, giveAE = {}, getAE = {}} 奖励字段1表示领取过奖励 | 81 | + act30 = {"table", {}}, -- {magic = 0, limit = 0, reward = {id = 1, id = 1}, giveAE = {}, getAE = {}} 奖励字段1表示领取过奖励 |
| 82 | } | 82 | } |
| 83 | 83 | ||
| 84 | function Activity:data() | 84 | function Activity:data() |
| @@ -101,7 +101,7 @@ function Activity:data() | @@ -101,7 +101,7 @@ function Activity:data() | ||
| 101 | act26 = self:getProperty("act26"), | 101 | act26 = self:getProperty("act26"), |
| 102 | 102 | ||
| 103 | act28 = self:getProperty("act28"), | 103 | act28 = self:getProperty("act28"), |
| 104 | - act29 = self:getProperty("act29"), | 104 | + act30 = self:getProperty("act30"), |
| 105 | } | 105 | } |
| 106 | end | 106 | end |
| 107 | 107 | ||
| @@ -755,7 +755,7 @@ activityFunc[Activity.ActivityType.FriendEnergy] = { | @@ -755,7 +755,7 @@ activityFunc[Activity.ActivityType.FriendEnergy] = { | ||
| 755 | self:updateActData(actType, data, not notify) | 755 | self:updateActData(actType, data, not notify) |
| 756 | end, | 756 | end, |
| 757 | ["login"] = function (self, actType) | 757 | ["login"] = function (self, actType) |
| 758 | - local curData = self:getActData(actType) or {} | 758 | + local actData = self:getActData(actType) or {} |
| 759 | actData.new = self:getActFriendNew() | 759 | actData.new = self:getActFriendNew() |
| 760 | self:updateActData(actType, actData, not notify) | 760 | self:updateActData(actType, actData, not notify) |
| 761 | end, | 761 | end, |
| @@ -771,7 +771,7 @@ activityFunc[Activity.ActivityType.FriendEnergy] = { | @@ -771,7 +771,7 @@ activityFunc[Activity.ActivityType.FriendEnergy] = { | ||
| 771 | end | 771 | end |
| 772 | } | 772 | } |
| 773 | 773 | ||
| 774 | -function activity:getActFriendNew() | 774 | +function Activity:getActFriendNew() |
| 775 | local roleId = self.owner:getProperty("id") | 775 | local roleId = self.owner:getProperty("id") |
| 776 | local friendIds = {} | 776 | local friendIds = {} |
| 777 | local friends = redisproxy:hgetall(FRIEND_KEY:format(roleId)) | 777 | local friends = redisproxy:hgetall(FRIEND_KEY:format(roleId)) |
| @@ -781,13 +781,12 @@ function activity:getActFriendNew() | @@ -781,13 +781,12 @@ function activity:getActFriendNew() | ||
| 781 | end | 781 | end |
| 782 | 782 | ||
| 783 | local ids = {} | 783 | local ids = {} |
| 784 | - redisproxy:pipelining(function(red) | ||
| 785 | - for id, _ in pairs(friendIds) do | ||
| 786 | - if red:sismember(FRIEND_ENERGY:format(roleId), id) then | ||
| 787 | - ids[id] = 1 | ||
| 788 | - end | 784 | + local members = redisproxy:smembers(FRIEND_ENERGY:format(roleId)) |
| 785 | + for _, id in pairs(members) do | ||
| 786 | + if friendIds[tonumber(id)] then | ||
| 787 | + ids[tonumber(id)] = 1 | ||
| 789 | end | 788 | end |
| 790 | - end) | 789 | + end |
| 791 | return ids | 790 | return ids |
| 792 | end | 791 | end |
| 793 | 792 |