Commit 6138622586ae02e19702039b610bea02be68f836

Authored by zhangqijia
1 parent 7ba807d6

feat: 一键领取任务奖励(包括活跃度奖励)

Showing 1 changed file with 62 additions and 24 deletions   Show diff stats
src/actions/RoleAction.lua
@@ -890,25 +890,14 @@ function _M.unLockStoryBookRpc(agent, data) @@ -890,25 +890,14 @@ function _M.unLockStoryBookRpc(agent, data)
890 return true 890 return true
891 end 891 end
892 892
893 -function _M.taskRpc(agent, data)  
894 - local role = agent.role  
895 - local msg = MsgPack.unpack(data)  
896 -  
897 - if not role:isFuncUnlock(FuncUnlock.TaskAchiv) then return end  
898 -  
899 - local taskType = msg.type -- 1 日常 2 周常  
900 - local taskId = msg.id --任务id  
901 - local roleField = {"dTask", "wTask"}  
902 - if not roleField[taskType] then return 1 end  
903 -  
904 - local taskData = csvdb["task_loopCsv"][taskType][taskId]  
905 - if not taskData then return 2 end 893 +local function getTaskReward(role, taskId, roleField, taskType, taskData)
  894 + if not taskData then return nil end
906 895
907 local taskStatus = role:getProperty(roleField[taskType]) 896 local taskStatus = role:getProperty(roleField[taskType])
908 local tStatus = taskStatus["t"] or {} 897 local tStatus = taskStatus["t"] or {}
909 898
910 if (tStatus[taskId] or 0) < taskData.condition1 then 899 if (tStatus[taskId] or 0) < taskData.condition1 then
911 - return 3 900 + return nil
912 end 901 end
913 902
914 local reward, change = role:award(taskData.reward, {log = {desc = "finishTask", int1 = taskType, int2 = taskId}}) 903 local reward, change = role:award(taskData.reward, {log = {desc = "finishTask", int1 = taskType, int2 = taskId}})
@@ -936,30 +925,49 @@ function _M.taskRpc(agent, data) @@ -936,30 +925,49 @@ function _M.taskRpc(agent, data)
936 task_reward_type = taskType, --任务奖励类型,见 任务奖励类型枚举表 925 task_reward_type = taskType, --任务奖励类型,见 任务奖励类型枚举表
937 task_reward_detail = reward, --任务奖励,json格式记录,{'itemid1':123,'itemid2':456,………...} 926 task_reward_detail = reward, --任务奖励,json格式记录,{'itemid1':123,'itemid2':456,………...}
938 }) 927 })
939 -  
940 - SendPacket(actionCodes.Role_taskRpc, MsgPack.pack(role:packReward(reward, change)))  
941 - return true 928 + return reward, change
942 end 929 end
943 930
944 -function _M.taskActiveRpc(agent, data) 931 +function _M.taskRpc(agent, data)
945 local role = agent.role 932 local role = agent.role
946 local msg = MsgPack.unpack(data) 933 local msg = MsgPack.unpack(data)
947 934
948 if not role:isFuncUnlock(FuncUnlock.TaskAchiv) then return end 935 if not role:isFuncUnlock(FuncUnlock.TaskAchiv) then return end
949 936
950 - local taskType = msg.type -- 1 日常 2 周 937 + local taskType = msg.type -- 1 日常 2 周
951 local taskId = msg.id --任务id 938 local taskId = msg.id --任务id
952 local roleField = {"dTask", "wTask"} 939 local roleField = {"dTask", "wTask"}
953 - if not roleField[taskType] then return end 940 + if not roleField[taskType] then return 1 end
954 941
955 - local taskData = csvdb["task_activeCsv"][taskType][taskId]  
956 - if not taskData then return end 942 + local reward, change = {}, {}
  943 + if not taskId then
  944 +
  945 + for id, taskData in pairs(csvdb["task_loopCsv"][taskType]) do
  946 + local tmpreward, tmpchange = getTaskReward(role, id, roleField, taskType, taskData)
  947 + if tmpreward then
  948 + for k, v in pairs(tmpreward) do
  949 + reward[k] = (reward[k] or 0) + v
  950 + end
  951 + if tmpchange then table.insert(change, tmpchange) end
  952 + end
  953 + end
  954 + else
  955 + local taskData = csvdb["task_loopCsv"][taskType][taskId]
  956 + if not taskData then return 2 end
  957 + reward, change= getTaskReward(role, taskId, roleField, taskType, taskData)
  958 + end
957 959
  960 + SendPacket(actionCodes.Role_taskRpc, MsgPack.pack(role:packReward(reward, change)))
  961 + return true
  962 +end
  963 +
  964 +
  965 +local function getTaskActiveReward(role, taskId, roleField, taskType, taskData)
958 local taskStatus = role:getProperty(roleField[taskType]) 966 local taskStatus = role:getProperty(roleField[taskType])
959 local tStatus = taskStatus["at"] or {} 967 local tStatus = taskStatus["at"] or {}
960 968
961 if tStatus[taskId] == -1 or (taskStatus["a"] or 0) < taskData.active then 969 if tStatus[taskId] == -1 or (taskStatus["a"] or 0) < taskData.active then
962 - return 970 + return nil
963 end 971 end
964 972
965 local needReward = taskData.reward:toNumMap() 973 local needReward = taskData.reward:toNumMap()
@@ -974,12 +982,42 @@ function _M.taskActiveRpc(agent, data) @@ -974,12 +982,42 @@ function _M.taskActiveRpc(agent, data)
974 role:changeUpdates({ 982 role:changeUpdates({
975 { type = roleField[taskType], field = {"at", taskId}, value = -1 } 983 { type = roleField[taskType], field = {"at", taskId}, value = -1 }
976 }) 984 })
977 - 985 +
978 role:log("task_reward", { 986 role:log("task_reward", {
979 task_reward_id = taskId * 100 + taskType, --任务奖励ID 987 task_reward_id = taskId * 100 + taskType, --任务奖励ID
980 task_reward_type = 3, --任务奖励类型,见 任务奖励类型枚举表 988 task_reward_type = 3, --任务奖励类型,见 任务奖励类型枚举表
981 task_reward_detail = reward, --任务奖励,json格式记录,{'itemid1':123,'itemid2':456,………...} 989 task_reward_detail = reward, --任务奖励,json格式记录,{'itemid1':123,'itemid2':456,………...}
982 }) 990 })
  991 + return reward, change
  992 +end
  993 +
  994 +function _M.taskActiveRpc(agent, data)
  995 + local role = agent.role
  996 + local msg = MsgPack.unpack(data)
  997 +
  998 + if not role:isFuncUnlock(FuncUnlock.TaskAchiv) then return end
  999 +
  1000 + local taskType = msg.type -- 1 日常 2 周长
  1001 + local taskId = msg.id --任务id
  1002 + local roleField = {"dTask", "wTask"}
  1003 + if not roleField[taskType] then return end
  1004 +
  1005 + local reward, change = {}, {}
  1006 + if not taskId then
  1007 + for id, taskData in pairs(csvdb["task_activeCsv"][taskType]) do
  1008 + local tmpreward, tmpchange = getTaskActiveReward(role, id, roleField, taskType, taskData)
  1009 + if tmpreward then
  1010 + for k, v in pairs(tmpreward) do
  1011 + reward[k] = (reward[k] or 0) + v
  1012 + end
  1013 + if tmpchange then table.insert(change, tmpchange) end
  1014 + end
  1015 + end
  1016 + else
  1017 + local taskData = csvdb["task_activeCsv"][taskType][taskId]
  1018 + if not taskData then return end
  1019 + reward, change= getTaskActiveReward(role, taskId, roleField, taskType, taskData)
  1020 + end
983 1021
984 SendPacket(actionCodes.Role_taskActiveRpc, MsgPack.pack(role:packReward(reward, change))) 1022 SendPacket(actionCodes.Role_taskActiveRpc, MsgPack.pack(role:packReward(reward, change)))
985 return true 1023 return true