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 | 893 | local roleId = role:getProperty("id") |
| 894 | 894 | local msg = MsgPack.unpack(data) |
| 895 | 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 | 901 | if not role.activity:isOpenById(actid, "FriendEnergy") then return 1 end |
| 900 | 902 | if oper < 1 or oper > 3 then return 2 end |
| 901 | 903 | |
| ... | ... | @@ -916,99 +918,98 @@ function _M.friendHelpRpc(agent, data) |
| 916 | 918 | end |
| 917 | 919 | |
| 918 | 920 | if oper == 1 then -- 赠送好友能量 |
| 921 | + local giveAE = actData.giveAE or {} | |
| 919 | 922 | local objId = msg.roleId |
| 920 | 923 | local gift = gifts[1] |
| 921 | 924 | local ids = {} |
| 922 | 925 | |
| 923 | 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 | 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 | 943 | elseif oper == 2 then -- 收取能量 |
| 947 | 944 | local objId = msg.roleId |
| 948 | 945 | local gift = gifts[2] |
| 949 | - local getFE = actData.getFE or {} | |
| 946 | + local getAE = actData.getAE or {} | |
| 950 | 947 | local limit = actData.limit or 0 |
| 951 | 948 | |
| 952 | 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 | 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 | 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 | 971 | local gift1 = gifts[1] |
| 986 | 972 | local gift2 = gifts[2] |
| 987 | 973 | local limit = actData.limit or 0 |
| 974 | + local cmd1, cmd2 = 0, 0 | |
| 988 | 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 | 983 | redisproxy:pipelining(function(red) |
| 990 | 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 | 987 | award[gift1[1]] = (award[gift1[1]] or 0) + gift1[2] |
| 995 | 988 | red:sadd(FRIEND_ENERGY:format(friendId), roleId) |
| 996 | 989 | rpcRole(friendId, "SendPacket", actionCodes.Role_notifyNewEvent, MsgPack.pack({events = {actFriendGive = roleId}})) |
| 990 | + cmd1 = 2 | |
| 997 | 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 | 995 | limit = limit + 1 |
| 1002 | - getFE[friendId] = 1 | |
| 996 | + getAE[friendId] = 1 | |
| 1003 | 997 | award[gift2[1]] = (award[gift2[1]] or 0) + gift2[2] |
| 1004 | 998 | red:srem(FRIEND_ENERGY:format(roleId), friendId) |
| 1005 | 999 | end |
| 1006 | 1000 | end |
| 1007 | 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 | 1010 | actData.limit = limit |
| 1010 | - actData.giveFE = giveFE | |
| 1011 | - actData.getFE = getFE | |
| 1011 | + actData.giveAE = giveAE | |
| 1012 | + actData.getAE = getAE | |
| 1012 | 1013 | elseif oper == 4 then -- 抽大奖 |
| 1013 | 1014 | local magic = actData.magic or 0 |
| 1014 | 1015 | local rewards = actData.reward or {} |
| ... | ... | @@ -1024,7 +1025,6 @@ function _M.friendHelpRpc(agent, data) |
| 1024 | 1025 | if not role:checkItemEnough(cost) then return 7 end |
| 1025 | 1026 | role:costItems(cost, {log = {desc = "actFriendHelp", int1 = actid, int2 = level}}) |
| 1026 | 1027 | |
| 1027 | - award = {} | |
| 1028 | 1028 | if rewardCsv.reward ~= "" then |
| 1029 | 1029 | result = 1 |
| 1030 | 1030 | award = rewardCsv.reward:toNumMap() |
| ... | ... | @@ -1056,7 +1056,10 @@ function _M.friendHelpRpc(agent, data) |
| 1056 | 1056 | end) |
| 1057 | 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 | 1063 | role.activity:updateActData("FriendEnergy", actData) |
| 1061 | 1064 | SendPacket(actionCodes.Activity_friendHelpRpc, MsgPack.pack({result = result, reward = reward})) |
| 1062 | 1065 | return true | ... | ... |
src/models/Activity.lua
| ... | ... | @@ -32,7 +32,7 @@ Activity.ActivityType = { |
| 32 | 32 | Crisis = 26, -- 宝藏怪活动 |
| 33 | 33 | |
| 34 | 34 | CommonSignIn = 28, --通用签到 |
| 35 | - FriendEnergy = 29, -- 好友互赠能量活动 | |
| 35 | + FriendEnergy = 30, -- 好友互赠能量活动 | |
| 36 | 36 | } |
| 37 | 37 | |
| 38 | 38 | local function checkActivityType(activityType) |
| ... | ... | @@ -78,7 +78,7 @@ Activity.schema = { |
| 78 | 78 | act26 = {"table", {}}, -- {task = {id = count}, socre = {id = status}} |
| 79 | 79 | |
| 80 | 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 | 84 | function Activity:data() |
| ... | ... | @@ -101,7 +101,7 @@ function Activity:data() |
| 101 | 101 | act26 = self:getProperty("act26"), |
| 102 | 102 | |
| 103 | 103 | act28 = self:getProperty("act28"), |
| 104 | - act29 = self:getProperty("act29"), | |
| 104 | + act30 = self:getProperty("act30"), | |
| 105 | 105 | } |
| 106 | 106 | end |
| 107 | 107 | |
| ... | ... | @@ -755,7 +755,7 @@ activityFunc[Activity.ActivityType.FriendEnergy] = { |
| 755 | 755 | self:updateActData(actType, data, not notify) |
| 756 | 756 | end, |
| 757 | 757 | ["login"] = function (self, actType) |
| 758 | - local curData = self:getActData(actType) or {} | |
| 758 | + local actData = self:getActData(actType) or {} | |
| 759 | 759 | actData.new = self:getActFriendNew() |
| 760 | 760 | self:updateActData(actType, actData, not notify) |
| 761 | 761 | end, |
| ... | ... | @@ -771,7 +771,7 @@ activityFunc[Activity.ActivityType.FriendEnergy] = { |
| 771 | 771 | end |
| 772 | 772 | } |
| 773 | 773 | |
| 774 | -function activity:getActFriendNew() | |
| 774 | +function Activity:getActFriendNew() | |
| 775 | 775 | local roleId = self.owner:getProperty("id") |
| 776 | 776 | local friendIds = {} |
| 777 | 777 | local friends = redisproxy:hgetall(FRIEND_KEY:format(roleId)) |
| ... | ... | @@ -781,13 +781,12 @@ function activity:getActFriendNew() |
| 781 | 781 | end |
| 782 | 782 | |
| 783 | 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 | 788 | end |
| 790 | - end) | |
| 789 | + end | |
| 791 | 790 | return ids |
| 792 | 791 | end |
| 793 | 792 | ... | ... |