HomeServer/Server/AllServer/GameServer/Task/DailyTask.lua
2024-11-20 15:41:37 +08:00

193 lines
8.2 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local skynet = require "skynet"
local oo = require "Class"
local task = require "Task"
local log = require "Log"
local dataType = require "DataType"
local errorInfo = require "ErrorInfo"
local pb = require "pb"
local DailyTask = oo.class(task)
--检查一下玩家是否有新的任务
function DailyTask:Refresh( player )
if not player:IsUnlockSystem( dataType.UnlockSystem_DailyTask ) then
return
end
skynet.server.msgTips:ReduceAll( player , 32 )
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg( player , "SValue")
local taskItem = self:GetRandDailyTask( player , cfgSValue.dailyTaskNum ) --随机获取6个任务
player.gameData.dailyTask = {}
player.gameData.dailyTask.allAwardStatus = self.TaskStatus_NoComplete --所有奖励状态
player.gameData.dailyTask.item = {} --所有任务条目
for k, taskId in pairs( taskItem ) do
local curCfgTask = skynet.server.gameConfig:GetPlayerCurCfg( player , "DailyTask", taskId )
if 39 == curCfgTask.taskType then --根据玩家是是否签到来设置任务状态
local isSignin = skynet.server.signIn:GetDaySignInStatus( player )
if isSignin then
table.insert( player.gameData.dailyTask.item , { id = taskId , type = curCfgTask.taskType , progress = curCfgTask.value , status = self.TaskStatus_AlreadyComplete , historyId = {} })
else
table.insert( player.gameData.dailyTask.item , { id = taskId , type = curCfgTask.taskType , progress = 0 , status = self.TaskStatus_NoComplete , historyId = {} })
end
else
table.insert( player.gameData.dailyTask.item , { id = taskId , type = curCfgTask.taskType , progress = 0 , status = self.TaskStatus_NoComplete , historyId = {} })
end
end
end
--任务列表显示
function DailyTask:Show( player , c2sData , s2cData )
c2sData.data = assert(pb.decode("C2SDailyTaskShow", c2sData.data ))
local data = {}
data.allAwardStatus = player.gameData.dailyTask.allAwardStatus
data.taskInfo = self:GetAllTaskInfo( player )
skynet.server.msgTips:Reduce( player , 90 )
skynet.server.msgTips:Reduce( player , 75 )
s2cData.cmd = pb.enum("MsgType","CMD_S2C_DailyTaskShow")
s2cData.data = assert(pb.encode("S2CDailyTaskShow", data))
end
--单个任务完成
function DailyTask:OneAccomplish( player , c2sData , s2cData )
c2sData.data = assert(pb.decode("C2SDailyTaskOneAccomplish", c2sData.data ))
local data = {}
local taskId = c2sData.data.taskId
local curTask = {}
for k, v in pairs( player.gameData.dailyTask.item ) do
if taskId == v.id then
curTask = v
break
end
end
if not taskId or not curTask then
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
else
if self.TaskStatus_AlreadyComplete == curTask.status then
--发奖
local curCfg = skynet.server.gameConfig:GetPlayerCurCfg( player , "DailyTask" , taskId )
local cfgReward = skynet.server.gameConfig:GetPlayerCurCfg( player , "Reward" , curCfg.rewardId )
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_58")
player:MoneyChange( dataType.MoneyType_Coin , cfgReward.coin , eventId)
curTask.status = self.TaskStatus_AlreadyGet
local curCfg = skynet.server.gameConfig:GetPlayerCurCfg( player , "DailyTask" , curTask.id )
player:AddExpCount( curCfg.expNum )
skynet.server.msgTips:Reduce( player , 32 )
log.debug(string.format("玩家 %d 每日任务 获取单个任务奖励 ID %d " , player.basicInfo.userID , taskId ))
else
s2cData.code = errorInfo.ErrorCode.AlreadyGet
end
end
data.taskInfo = self:GetOneTaskInfo( player , taskId )
s2cData.cmd = pb.enum("MsgType","CMD_S2C_DailyTaskOneAccomplish")
s2cData.data = assert(pb.encode("S2CDailyTaskOneAccomplish", data))
end
--所有任务完成
function DailyTask:AllAccomplish( player , c2sData , s2cData )
c2sData.data = assert(pb.decode("C2SDailyTaskAllAccomplish", c2sData.data ))
local data = {}
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg( player , "SValue")
if self.TaskStatus_AlreadyComplete == player.gameData.dailyTask.allAwardStatus then
--发奖
local reward = cfgSValue.dailyTaskCompleteReward
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_58")
player:MoneyChange( reward[1] , reward[2] , eventId)
player.gameData.dailyTask.allAwardStatus = self.TaskStatus_AlreadyGet
skynet.server.msgTips:Reduce( player , 32 )
log.debug(string.format("玩家 %d 每日任务 获取所有任务奖励" , player.basicInfo.userID ))
else
s2cData.code = errorInfo.ErrorCode.AlreadyGet
end
data.allAwardStatus = player.gameData.dailyTask.allAwardStatus
s2cData.cmd = pb.enum("MsgType","CMD_S2C_DailyTaskAllAccomplish")
s2cData.data = assert(pb.encode("S2CDailyTaskAllAccomplish", data))
end
--修改任务
function DailyTask:Modify( player , taskType , count , goodsId )
if not player:IsUnlockSystem( dataType.UnlockSystem_DailyTask ) then
return
end
count = count or 1
goodsId = goodsId or 0
for k1, v1 in pairs( player.gameData.dailyTask.item ) do
if self.TaskStatus_NoComplete == v1.status and taskType == v1.type then
local isAdd = true --是否能添加任务
if 0 ~= goodsId and v1.historyId then
for k2, v2 in pairs( v1.historyId ) do
if goodsId == v2 then
isAdd = false
break
end
end
if isAdd then
--不存在商品ID 该任务保存商品ID
table.insert( v1.historyId , goodsId )
end
end
if isAdd then
v1.progress = v1.progress + count
local curCfg = skynet.server.gameConfig:GetPlayerCurCfg( player , "DailyTask", v1.id )
--条件达到,并且任务未完成,就修改成已经完成
if self.TaskStatus_NoComplete == v1.status and v1.progress >= curCfg.value then
v1.status = self.TaskStatus_AlreadyComplete
v1.progress = curCfg.value
skynet.server.msgTips:Add( player , 32 )
log.debug(string.format("玩家 %d 每日任务 任务ID %d 完成" , player.userId , v1.id ))
end
else
log.debug(string.format("玩家 %d 每日任务 任务ID %d 已经存在商品ID 无法完成" , player.userId , v1.id ))
end
end
--只有所有任务未完成才去检查下是不是所有任务都完成了
if self.TaskStatus_NoComplete == player.gameData.dailyTask.allAwardStatus then
local isAllAccomplish = true
for k2, v2 in pairs( player.gameData.dailyTask.item ) do
if self.TaskStatus_NoComplete == v2.status then
isAllAccomplish = false
break
end
end
--所有完成了
if isAllAccomplish then
player.gameData.dailyTask.allAwardStatus = self.TaskStatus_AlreadyComplete
skynet.server.msgTips:Add( player , 32 )
log.debug(string.format("玩家 %d 每日任务 所有任务完成 " , player.userId))
end
end
end
end
--获取单个任务信息
function DailyTask:GetOneTaskInfo( player , taskId )
local taskInfo = {}
for k, v in pairs( player.gameData.dailyTask.item ) do
if taskId == v.id then
taskInfo = { id = v.id , progress = v.progress , status = v.status}
break
end
end
return taskInfo
end
--获取所有任务信息
function DailyTask:GetAllTaskInfo( player )
local taskInfo = {}
for k, v in pairs( player.gameData.dailyTask.item ) do
table.insert( taskInfo , { id = v.id , progress = v.progress , status = v.status})
end
return taskInfo
end
skynet.server.dailyTask = DailyTask
return DailyTask