Commit cab7184bb610910063f0c86077945f19d7b6ad59

Authored by chenyueqi
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