Commit e6e49b456b64470425bd7ffc5090e3fde11a1728

Authored by 测试
1 parent 464ccbd2

一键领取成就奖励

src/actions/RoleAction.lua
@@ -912,62 +912,96 @@ function _M.achiveRpc(agent, data) @@ -912,62 +912,96 @@ function _M.achiveRpc(agent, data)
912 local taskId = msg.id --任务id 912 local taskId = msg.id --任务id
913 913
914 if not role:isFuncUnlock(FuncUnlock.TaskAchiv) then return end 914 if not role:isFuncUnlock(FuncUnlock.TaskAchiv) then return end
915 -  
916 - local achiveTask = csvdb["achievementCsv"][taskId]  
917 - if not achiveTask then return 1 end  
918 -  
919 local achiveT = role:getProperty("achiveT") 915 local achiveT = role:getProperty("achiveT")
920 local achiveV = role:getProperty("achiveV") 916 local achiveV = role:getProperty("achiveV")
  917 + local fuxRecord = role:getProperty("fuxR") or 0
  918 +
  919 + local groups = {}
  920 +
  921 + if not taskId then
  922 + local awards = {}
  923 + for id, cfg in pairs(csvdb["achievementCsv"]) do
  924 + -- 没领过
  925 + if not achiveV[id] then
  926 + if (achiveT[cfg.type] or 0) >= cfg.condition1 then
  927 + local award = cfg.reward:toNumMap()
  928 + for k, v in pairs(award) do
  929 + awards[k] = (awards[k] or 0) + v
  930 + end
  931 + achiveV[id] = skynet.timex()
  932 + groups[cfg.group] = 1
  933 +
  934 + role:log("achievement", {
  935 + achievement_id = cfg.id, -- 成就id
  936 + achievement_type = cfg.type, -- 成就类型,具体枚举表中成就类型枚举表
  937 + achievement_reward = award, -- 达成成就奖励,json格式记录,{"itemid1":123,"itemid2":12,……….}
  938 + })
  939 + end
  940 + end
  941 + end
  942 + if not next(awards) then
  943 + return 5
  944 + end
  945 + local reward, change = role:award(awards, {log = {desc = "finishAchive", int1 = 0}})
  946 + role:updateProperty({field = "achiveV", value = achiveV})
921 947
922 - if achiveV[taskId] then return 2 end 948 + SendPacket(actionCodes.Role_achiveRpc, MsgPack.pack(role:packReward(reward, change)))
  949 + else
  950 + local achiveTask = csvdb["achievementCsv"][taskId]
  951 + if not achiveTask then return 1 end
923 952
924 - local curStatus = achiveT[achiveTask.type] or 0  
925 - local maxc = achiveTask.condition1 953 + if achiveV[taskId] then return 2 end
926 954
927 - if maxc > curStatus then  
928 - return 3  
929 - end 955 + local curStatus = achiveT[achiveTask.type] or 0
  956 + local maxc = achiveTask.condition1
930 957
931 - local reward, change = role:award(achiveTask.reward, {log = {desc = "finishAchive", int1 = taskId}})  
932 - role:changeUpdates({  
933 - { type = "achiveV", field = taskId, value = skynet.timex() }  
934 - }) 958 + if maxc > curStatus then
  959 + return 3
  960 + end
935 961
936 - -- 复兴奖励  
937 - if csvdb["achievement_groupCsv"][achiveTask.group].bookmark == 3 then  
938 - local overCount = 0  
939 - for tId, status in pairs(achiveV) do  
940 - local tData = csvdb["achievementCsv"][tId]  
941 - if tData then  
942 - local groupData = csvdb["achievement_groupCsv"][tData.group]  
943 - if groupData.bookmark == 3 then  
944 - overCount = overCount + 1 962 + local reward, change = role:award(achiveTask.reward, {log = {desc = "finishAchive", int1 = taskId}})
  963 + role:changeUpdates({
  964 + { type = "achiveV", field = taskId, value = skynet.timex() }
  965 + })
  966 + groups[achiveTask.group] = 1
  967 +
  968 + role:log("achievement", {
  969 + achievement_id = taskId, -- 成就id
  970 + achievement_type = achiveTask.type, -- 成就类型,具体枚举表中成就类型枚举表
  971 + achievement_reward = reward, -- 达成成就奖励,json格式记录,{"itemid1":123,"itemid2":12,……….}
  972 + })
  973 +
  974 + SendPacket(actionCodes.Role_achiveRpc, MsgPack.pack(role:packReward(reward, change)))
  975 + end
  976 +
  977 + for group, _ in pairs(groups) do
  978 + -- 复兴奖励
  979 + if csvdb["achievement_groupCsv"][group].bookmark == 3 then
  980 + local overCount = 0
  981 + local preMaxCount = fuxRecord or 0
  982 + for tId, status in pairs(achiveV) do
  983 + local tData = csvdb["achievementCsv"][tId]
  984 + if tData then
  985 + local groupData = csvdb["achievement_groupCsv"][tData.group]
  986 + if groupData.bookmark == 3 then
  987 + overCount = overCount + 1
  988 + end
945 end 989 end
946 end 990 end
947 - end  
948 -  
949 - for level, pData in pairs(csvdb["achievement_rewardCsv"]) do  
950 - if pData.request == overCount then  
951 - -- 发放奖励  
952 - redisproxy:insertEmail({  
953 - roleId = role:getProperty("id"),  
954 - emailId = 101,  
955 - attachments = pData.reward,  
956 - contentPms = {pData.level},  
957 - })  
958 - elseif pData.request > overCount then  
959 - break 991 + local flag = false
  992 + for level, pData in pairs(csvdb["achievement_rewardCsv"]) do
  993 + if preMaxCount < pData.request and overCount >= pData.request then
  994 + role:sendMail(101, skynet.timex(), pData.reward, {pData.level})
  995 + flag = true
  996 + end
  997 + end
  998 + if flag then
  999 + role:updateProperty({field = "fuxR", value = overCount, notNotify = true})
960 end 1000 end
  1001 + break
961 end 1002 end
962 end 1003 end
963 -  
964 - role:log("achievement", {  
965 - achievement_id = taskId, -- 成就id  
966 - achievement_type = achiveTask.type, -- 成就类型,具体枚举表中成就类型枚举表  
967 - achievement_reward = reward, -- 达成成就奖励,json格式记录,{"itemid1":123,"itemid2":12,……….}  
968 - })  
969 1004
970 - SendPacket(actionCodes.Role_achiveRpc, MsgPack.pack(role:packReward(reward, change)))  
971 return true 1005 return true
972 end 1006 end
973 1007
src/models/Role.lua
@@ -154,6 +154,7 @@ Role.schema = { @@ -154,6 +154,7 @@ Role.schema = {
154 154
155 achiveT = {"table", {}}, -- 成就计数统计 achivement_type {id = status} 155 achiveT = {"table", {}}, -- 成就计数统计 achivement_type {id = status}
156 achiveV = {"table", {}}, -- 成就领奖统计 achivement {id = status} 156 achiveV = {"table", {}}, -- 成就领奖统计 achivement {id = status}
  157 + fuxR = {"number", 0}, -- 复兴成就最大完成数量
157 158
158 rechargeF = {"table", {}}, -- 是否首次充值某一项 -- —{[id] = 1} -- 不存在就是没有充值过 159 rechargeF = {"table", {}}, -- 是否首次充值某一项 -- —{[id] = 1} -- 不存在就是没有充值过
159 dinerS = {"table", {}}, -- 美食币商城 购买记录 {[id] = count} 160 dinerS = {"table", {}}, -- 美食币商城 购买记录 {[id] = count}
src/models/RoleTask.lua
@@ -720,7 +720,7 @@ function RoleTask.bind(Role) @@ -720,7 +720,7 @@ function RoleTask.bind(Role)
720 elseif cfg.type == 24 then -- 代理拾荒出勤人数 720 elseif cfg.type == 24 then -- 代理拾荒出勤人数
721 calTask[id] = (calTask[id] or 0) + (param1 or 0) 721 calTask[id] = (calTask[id] or 0) + (param1 or 0)
722 elseif cfg.type == 28 then -- 完成指定任务 722 elseif cfg.type == 28 then -- 完成指定任务
723 - print(actId,param2, cfg.condition2, param1) 723 + --print(actId,param2, cfg.condition2, param1)
724 if actId == param2 and cfg.condition2 == param1 then 724 if actId == param2 and cfg.condition2 == param1 then
725 calTask[id] = (calTask[id] or 0) + 1 725 calTask[id] = (calTask[id] or 0) + 1
726 end 726 end