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 |