Commit e6e49b456b64470425bd7ffc5090e3fde11a1728
1 parent
464ccbd2
一键领取成就奖励
Showing
3 changed files
with
79 additions
and
44 deletions
Show diff stats
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 |