464 lines
23 KiB
Lua
464 lines
23 KiB
Lua
|
|
local skynet = require "skynet"
|
||
|
|
local oo = require "Class"
|
||
|
|
local log = require "Log"
|
||
|
|
local pb = require "pb"
|
||
|
|
local dataType = require "DataType"
|
||
|
|
local errorInfo = require "ErrorInfo"
|
||
|
|
local activity = require "Activity"
|
||
|
|
local json = require "json"
|
||
|
|
local ActivityLabyrinth = oo.class()
|
||
|
|
|
||
|
|
ActivityLabyrinth.ActivityType = dataType.ActivityType_Labyrinth
|
||
|
|
|
||
|
|
ActivityLabyrinth.ChestType_award = 1 --奖励宝箱
|
||
|
|
ActivityLabyrinth.ChestType_punish = 2 --惩罚宝箱
|
||
|
|
|
||
|
|
--根据玩家的配置获取不同的数据
|
||
|
|
ActivityLabyrinth.ActivityInfo = {}
|
||
|
|
|
||
|
|
local configType = skynet.server.gameConfig:GetConfigType( "Main" , 1 )
|
||
|
|
ActivityLabyrinth.ActivityInfo[ configType ] = {}
|
||
|
|
ActivityLabyrinth.ActivityInfo[ configType ].ActivityId = 0 --该活动在配置中的id
|
||
|
|
ActivityLabyrinth.ActivityInfo[ configType ].VoluteCoinPrice = 0 --蜗壳币购买机会价格
|
||
|
|
ActivityLabyrinth.ActivityInfo[ configType ].VoluteCoinSkip = 0 --跳过惩罚的蜗壳币
|
||
|
|
ActivityLabyrinth.ActivityInfo[ configType ].StartTime = 0 --迷宫活动的开始时间
|
||
|
|
ActivityLabyrinth.ActivityInfo[ configType ].EndTime = 0 --迷宫活动的结束时间
|
||
|
|
|
||
|
|
configType = skynet.server.gameConfig:GetConfigType( "A" , 1 )
|
||
|
|
ActivityLabyrinth.ActivityInfo[ configType ] = {}
|
||
|
|
ActivityLabyrinth.ActivityInfo[ configType ].ActivityId = 0 --该活动在配置中的id
|
||
|
|
ActivityLabyrinth.ActivityInfo[ configType ].VoluteCoinPrice = 0 --蜗壳币购买机会价格
|
||
|
|
ActivityLabyrinth.ActivityInfo[ configType ].VoluteCoinSkip = 0 --跳过惩罚的蜗壳币
|
||
|
|
ActivityLabyrinth.ActivityInfo[ configType ].StartTime = 0 --迷宫活动的开始时间
|
||
|
|
ActivityLabyrinth.ActivityInfo[ configType ].EndTime = 0 --迷宫活动的结束时间
|
||
|
|
|
||
|
|
configType = skynet.server.gameConfig:GetConfigType( "B" , 1 )
|
||
|
|
ActivityLabyrinth.ActivityInfo[ configType ] = {}
|
||
|
|
ActivityLabyrinth.ActivityInfo[ configType ].ActivityId = 0 --该活动在配置中的id
|
||
|
|
ActivityLabyrinth.ActivityInfo[ configType ].VoluteCoinPrice = 0 --蜗壳币购买机会价格
|
||
|
|
ActivityLabyrinth.ActivityInfo[ configType ].VoluteCoinSkip = 0 --跳过惩罚的蜗壳币
|
||
|
|
ActivityLabyrinth.ActivityInfo[ configType ].StartTime = 0 --迷宫活动的开始时间
|
||
|
|
ActivityLabyrinth.ActivityInfo[ configType ].EndTime = 0 --迷宫活动的结束时间
|
||
|
|
|
||
|
|
function ActivityLabyrinth:Init()
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
--设置活动信息
|
||
|
|
function ActivityLabyrinth:SetLabyrinthInfo( player , keyName , keyValue )
|
||
|
|
local configType = player.basicInfo.configType
|
||
|
|
self.ActivityInfo[ configType ][ keyName ] = tonumber(keyValue)
|
||
|
|
end
|
||
|
|
|
||
|
|
--获取活动信息
|
||
|
|
function ActivityLabyrinth:GetLabyrinthInfo( player , keyName )
|
||
|
|
local configType = player.basicInfo.configType
|
||
|
|
return self.ActivityInfo[ configType ][ keyName ]
|
||
|
|
end
|
||
|
|
|
||
|
|
--玩家礼包数据初始化
|
||
|
|
function ActivityLabyrinth:InitData( player , activityType )
|
||
|
|
--迷宫数据
|
||
|
|
local activityId,startTime,endTime = skynet.server.activity:GetActivityInfo( player , activityType )
|
||
|
|
if activityId > 0 then
|
||
|
|
self:SetLabyrinthInfo( player , "ActivityId" , activityId) --获取满足开放时间的迷宫id
|
||
|
|
self:SetLabyrinthInfo( player , "StartTime" , startTime) --迷宫开始时间
|
||
|
|
self:SetLabyrinthInfo( player , "EndTime" , endTime) --迷宫结束时间
|
||
|
|
end
|
||
|
|
--判断一下是否需要初始化玩家数据
|
||
|
|
if player.gameData.activity[ activityType ] == nil or activityId == 0 then
|
||
|
|
--玩家迷宫活动相关数据
|
||
|
|
player.gameData.activity[ activityType ] = {}
|
||
|
|
end
|
||
|
|
local cfgActivity = skynet.server.gameConfig:GetPlayerAllCfg( player , "Activity")
|
||
|
|
local level = 0
|
||
|
|
for k , v in pairs(cfgActivity) do
|
||
|
|
if v.activityType == dataType.ActivityType_Labyrinth then --活动迷宫
|
||
|
|
level = v.level
|
||
|
|
break
|
||
|
|
end
|
||
|
|
end
|
||
|
|
if activityId > 0 and player.gameData.level >= level and next(player.gameData.activity[ activityType ]) == nil
|
||
|
|
and (player.gameData.activity[ activityType ].activityId == nil or player.gameData.activity[ activityType ].activityId ~= activityId) then
|
||
|
|
--玩家对应配置
|
||
|
|
local cfgMazeTreasure = skynet.server.gameConfig:GetPlayerAllCfg( player , "MazeTreasure")
|
||
|
|
local cfgMazeMap = skynet.server.gameConfig:GetPlayerAllCfg( player , "MazeMap")
|
||
|
|
local MazeTreasure = cfgMazeTreasure[ activityId ] --迷宫活动相关数据
|
||
|
|
self:SetLabyrinthInfo( player , "VoluteCoinPrice" , MazeTreasure.voluteCoinPrice ) --蜗壳币购买机会价格
|
||
|
|
for k , v in pairs(cfgMazeMap) do
|
||
|
|
if v.actId == activityId then
|
||
|
|
self:SetLabyrinthInfo( player , "VoluteCoinSkip" , v.voluteCoinSkip ) --跳过惩罚所需蜗壳币
|
||
|
|
break
|
||
|
|
end
|
||
|
|
end
|
||
|
|
player.gameData.activity[ activityType ].activityId = activityId
|
||
|
|
player.gameData.activity[ activityType ].labyrinthInfos = {} --玩家迷宫的相关信息
|
||
|
|
player.gameData.activity[ activityType ].compassCount = MazeTreasure.freeChance --玩家拥有的指南针
|
||
|
|
player.gameData.activity[ activityType ].nowLabyrinthData = {} --本次游玩迷宫的相关信息
|
||
|
|
player.gameData.activity[ activityType ].rewardInfos = {} --玩家迷宫的累计奖励信息
|
||
|
|
--玩家迷宫数据赋值
|
||
|
|
for i=1,#MazeTreasure.mazeMapId,1 do
|
||
|
|
player.gameData.activity[ activityType ].labyrinthInfos[ i ] = {}
|
||
|
|
player.gameData.activity[ activityType ].labyrinthInfos[ i ].labyrinthLevel = i --当前迷宫等级
|
||
|
|
player.gameData.activity[ activityType ].labyrinthInfos[ i ].status = 1 --当前迷宫状态 1-未解锁 2-已解锁
|
||
|
|
player.gameData.activity[ activityType ].labyrinthInfos[ i ].finishCount = 0 --当前迷宫的完成次数
|
||
|
|
end
|
||
|
|
local count = 1
|
||
|
|
for k ,v in pairs(MazeTreasure.accumulateReward) do
|
||
|
|
local rewardInfo = skynet.server.common:Split( v ,"_" )
|
||
|
|
rewardInfo[1],rewardInfo[2] = tonumber(rewardInfo[1]),tonumber(rewardInfo[2])
|
||
|
|
player.gameData.activity[ activityType ].rewardInfos[count] = {}
|
||
|
|
player.gameData.activity[ activityType ].rewardInfos[count].id = count
|
||
|
|
player.gameData.activity[ activityType ].rewardInfos[count].status = 0 --0 不可领取 1 可以领取 2 已经领取
|
||
|
|
player.gameData.activity[ activityType ].rewardInfos[count].needCount = rewardInfo[1]
|
||
|
|
player.gameData.activity[ activityType ].rewardInfos[count].rewardId = rewardInfo[2]
|
||
|
|
count = count + 1
|
||
|
|
end
|
||
|
|
--第一个难度默认解锁
|
||
|
|
player.gameData.activity[ activityType ].labyrinthInfos[ 1 ].status = 2 --当前迷宫状态 1-未解锁 2-已解锁
|
||
|
|
--开始走迷宫的数据
|
||
|
|
player.gameData.activity[ activityType ].nowLabyrinthData.level = 0 --本次游玩的迷宫等级
|
||
|
|
player.gameData.activity[ activityType ].nowLabyrinthData.labyrinthBags = {} --本次游玩奖励背包
|
||
|
|
player.gameData.activity[ activityType ].nowLabyrinthData.havePunish = false --本次游玩是否还有惩罚
|
||
|
|
player.gameData.activity[ activityType ].nowLabyrinthData.rewardIds = {} --本次游玩中宝箱的奖励id集合
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
--每次登录需要进行修改的数据
|
||
|
|
function ActivityLabyrinth:LoginInitData( player )
|
||
|
|
--重置迷宫红点
|
||
|
|
skynet.server.msgTips:Reset(player , 76)
|
||
|
|
skynet.server.msgTips:Reset(player , 77)
|
||
|
|
--检查应该初始还是结束活动
|
||
|
|
local cfgActivity = skynet.server.gameConfig:GetPlayerAllCfg( player , "Activity")
|
||
|
|
local level = 0
|
||
|
|
for k , v in pairs(cfgActivity) do
|
||
|
|
if v.activityType == dataType.ActivityType_Labyrinth then --活动迷宫
|
||
|
|
level = v.level
|
||
|
|
break
|
||
|
|
end
|
||
|
|
end
|
||
|
|
if self:GetLabyrinthInfo( player , "ActivityId" ) == 0 and player.gameData.level >= level then
|
||
|
|
self:InitData(player , self.ActivityType)
|
||
|
|
else
|
||
|
|
--判断当前时间是否应该结束迷宫活动
|
||
|
|
if skynet.GetTime() > self:GetLabyrinthInfo( player , "EndTime" ) then
|
||
|
|
self:SetLabyrinthInfo( player , "ActivityId" , 0) --获取满足开放时间的迷宫id
|
||
|
|
self:SetLabyrinthInfo( player , "StartTime" , 0) --迷宫开始时间
|
||
|
|
self:SetLabyrinthInfo( player , "EndTime" , 0) --迷宫结束时间
|
||
|
|
--初始玩家数据
|
||
|
|
player.gameData.activity[ self.ActivityType ] = {}
|
||
|
|
end
|
||
|
|
end
|
||
|
|
--红点系统
|
||
|
|
if player.gameData.activity[ self.ActivityType ] and next(player.gameData.activity[ self.ActivityType ]) ~= nil then
|
||
|
|
--有指南针可以使用 添加对应红点
|
||
|
|
if player.gameData.activity[ self.ActivityType ].compassCount > 0 then
|
||
|
|
skynet.server.msgTips:AddNoNotice(player , 77)
|
||
|
|
end
|
||
|
|
--有累计奖励可以使用 添加对应红点
|
||
|
|
for k , v in pairs(player.gameData.activity[ self.ActivityType ].rewardInfos) do
|
||
|
|
if v.status == 1 then
|
||
|
|
skynet.server.msgTips:AddNoNotice(player , 76)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
--迷途寻宝 展示
|
||
|
|
function ActivityLabyrinth:Show( player , c2sData , s2cData )
|
||
|
|
c2sData.data = assert(pb.decode("C2SActivityLabyrinthShow", c2sData.data ))
|
||
|
|
local data = {}
|
||
|
|
--判断一下是否需要初始化玩家数据
|
||
|
|
if player.gameData.activity[ self.ActivityType] == nil or next(player.gameData.activity[ self.ActivityType]) == nil then
|
||
|
|
self:InitData(player , self.ActivityType)
|
||
|
|
end
|
||
|
|
--重置一下游玩数据
|
||
|
|
if next(player.gameData.activity[ self.ActivityType ]) ~= nil then
|
||
|
|
player.gameData.activity[ self.ActivityType ].nowLabyrinthData = {}
|
||
|
|
data.compassCount = player.gameData.activity[ self.ActivityType ].compassCount
|
||
|
|
data.labyrinthInfo = player.gameData.activity[ self.ActivityType ].labyrinthInfos
|
||
|
|
data.rewardInfos = player.gameData.activity[ self.ActivityType ].rewardInfos
|
||
|
|
end
|
||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityLabyrinthShow")
|
||
|
|
s2cData.data = assert(pb.encode("S2CActivityLabyrinthShow", data))
|
||
|
|
end
|
||
|
|
|
||
|
|
--迷途寻宝 购买指南针
|
||
|
|
function ActivityLabyrinth:BuyCompass( player , c2sData , s2cData )
|
||
|
|
c2sData.data = assert(pb.decode("C2SActivityLabyrinthBuyCompass", c2sData.data ))
|
||
|
|
local data = {}
|
||
|
|
--判断是否需要添加红点
|
||
|
|
local canAddRedDot = false
|
||
|
|
if player.gameData.activity[ self.ActivityType ].compassCount == 0 then
|
||
|
|
canAddRedDot = true
|
||
|
|
end
|
||
|
|
--消耗玩家蜗壳币
|
||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_87")
|
||
|
|
local isSuc = player:MoneyChange(dataType.GoodsType_Volute , - self:GetLabyrinthInfo( player , "VoluteCoinPrice" ) , eventId)
|
||
|
|
if false == isSuc then
|
||
|
|
s2cData.code = errorInfo.ErrorCode.NoEnoughMoney
|
||
|
|
else
|
||
|
|
--购买成功 增加指南针
|
||
|
|
player.gameData.activity[ self.ActivityType ].compassCount = player.gameData.activity[ self.ActivityType ].compassCount + 1
|
||
|
|
--红点
|
||
|
|
if canAddRedDot then
|
||
|
|
skynet.server.msgTips:Add(player , 77)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
data.compassCount = player.gameData.activity[ self.ActivityType ].compassCount
|
||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityLabyrinthBuyCompass")
|
||
|
|
s2cData.data = assert(pb.encode("S2CActivityLabyrinthBuyCompass", data))
|
||
|
|
end
|
||
|
|
|
||
|
|
--迷途寻宝 开始走迷宫
|
||
|
|
function ActivityLabyrinth:Start( player , c2sData , s2cData )
|
||
|
|
c2sData.data = assert(pb.decode("C2SActivityLabyrinthStart", c2sData.data ))
|
||
|
|
local labyrinthLevel = c2sData.data.labyrinthLevel --迷宫等级
|
||
|
|
local data = {}
|
||
|
|
local cfgMazeMap = skynet.server.gameConfig:GetPlayerAllCfg( player , "MazeMap")
|
||
|
|
--判断该玩家迷宫等级是否解锁
|
||
|
|
if 2 == player.gameData.activity[ self.ActivityType ].labyrinthInfos[ labyrinthLevel ].status then
|
||
|
|
--给玩家当前游玩数据进行赋值
|
||
|
|
local playerData = player.gameData.activity[ self.ActivityType ].nowLabyrinthData
|
||
|
|
if player.gameData.activity[ self.ActivityType ].compassCount > 0 then
|
||
|
|
--扣除玩家的指南针
|
||
|
|
player.gameData.activity[ self.ActivityType ].compassCount = player.gameData.activity[ self.ActivityType ].compassCount - 1
|
||
|
|
if player.gameData.activity[ self.ActivityType ].compassCount == 0 then
|
||
|
|
skynet.server.msgTips:Reduce(player , 77)
|
||
|
|
end
|
||
|
|
playerData.level = labyrinthLevel --本次游玩的迷宫等级
|
||
|
|
playerData.labyrinthBags = {} --本次游玩奖励背包
|
||
|
|
playerData.rewardIds = {} --本次游玩奖励id
|
||
|
|
for k ,v in pairs(cfgMazeMap) do
|
||
|
|
if v.actId == self:GetLabyrinthInfo( player , "ActivityId" ) and v.difficultyOrder == labyrinthLevel then
|
||
|
|
for k1 ,v1 in pairs(v.treasureReward) do
|
||
|
|
table.insert(playerData.rewardIds , v1) --本次游玩奖励背包
|
||
|
|
end
|
||
|
|
break
|
||
|
|
end
|
||
|
|
end
|
||
|
|
else
|
||
|
|
s2cData.code = errorInfo.ErrorCode.NoCompassCount
|
||
|
|
end
|
||
|
|
--返回玩家数据
|
||
|
|
data.labyrinthBags = playerData.labyrinthBags
|
||
|
|
data.compassCount = player.gameData.activity[ self.ActivityType ].compassCount
|
||
|
|
else
|
||
|
|
s2cData.code = errorInfo.ErrorCode.NoMazeGameLevel
|
||
|
|
end
|
||
|
|
|
||
|
|
--设置购买步数
|
||
|
|
player.gameData.activity[ self.ActivityType ].buyStepCount=0
|
||
|
|
player.gameData.activity[ self.ActivityType ].isAdBuy=false
|
||
|
|
local playerData =player.gameData.activity[ self.ActivityType ]
|
||
|
|
data.conBuyStepCount=(playerData.buyStepCount and playerData.buyStepCount >= 4) and 0 or 4 - playerData.buyStepCount
|
||
|
|
data.isAdBuy=playerData.isAdBuy and playerData.isAdBuy or false
|
||
|
|
|
||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityLabyrinthStart")
|
||
|
|
s2cData.data = assert(pb.encode("S2CActivityLabyrinthStart", data))
|
||
|
|
end
|
||
|
|
|
||
|
|
--迷途寻宝 获取宝箱
|
||
|
|
function ActivityLabyrinth:GetChest( player , c2sData , s2cData )
|
||
|
|
c2sData.data = assert(pb.decode("C2SActivityLabyrinthGetChest", c2sData.data ))
|
||
|
|
local chestId = c2sData.data.chestId --宝箱id
|
||
|
|
local data = {}
|
||
|
|
local playerData = player.gameData.activity[ self.ActivityType ].nowLabyrinthData
|
||
|
|
--随机该宝箱是奖励还是惩罚
|
||
|
|
local rand = math.random(1,5)
|
||
|
|
data.chestType = self.ChestType_award
|
||
|
|
local rewardId = 0
|
||
|
|
|
||
|
|
--奖励从奖励池中随机
|
||
|
|
if #playerData.rewardIds > 0 then
|
||
|
|
local count = math.random(1,#playerData.rewardIds)
|
||
|
|
rewardId = playerData.rewardIds[count]
|
||
|
|
-- --将对应奖励移除奖励池
|
||
|
|
-- table.remove(playerData.rewardIds , count)
|
||
|
|
end
|
||
|
|
if rewardId > 0 then
|
||
|
|
--将对应奖励存入奖励背包中
|
||
|
|
local award = skynet.server.playerLand:GetRewardInfo(player , rewardId)
|
||
|
|
for k ,v in pairs(award) do
|
||
|
|
table.insert(playerData.labyrinthBags , v)
|
||
|
|
end
|
||
|
|
data.rewardId = rewardId
|
||
|
|
end
|
||
|
|
|
||
|
|
data.labyrinthBags = playerData.labyrinthBags
|
||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityLabyrinthGetChest")
|
||
|
|
s2cData.data = assert(pb.encode("S2CActivityLabyrinthGetChest", data))
|
||
|
|
end
|
||
|
|
|
||
|
|
--迷途寻宝 完成迷宫
|
||
|
|
function ActivityLabyrinth:Finish( player , c2sData , s2cData )
|
||
|
|
c2sData.data = assert(pb.decode("C2SActivityLabyrinthFinish", c2sData.data ))
|
||
|
|
local isFinish = c2sData.data.isFinish --是否完成迷宫
|
||
|
|
local data = {}
|
||
|
|
local cfgMazeMap = skynet.server.gameConfig:GetPlayerAllCfg( player , "MazeMap")
|
||
|
|
local playerData = player.gameData.activity[ self.ActivityType ]
|
||
|
|
local labyrinthLevel = playerData.nowLabyrinthData.level
|
||
|
|
--判断玩家是否成功
|
||
|
|
if isFinish then
|
||
|
|
playerData.labyrinthInfos[ labyrinthLevel ].finishCount = playerData.labyrinthInfos[ labyrinthLevel ].finishCount + 1
|
||
|
|
--代表是第一次完成
|
||
|
|
if 1 == playerData.labyrinthInfos[ labyrinthLevel ].finishCount then
|
||
|
|
--找到对应奖励id
|
||
|
|
local rewardId = 0
|
||
|
|
for k ,v in pairs(cfgMazeMap) do
|
||
|
|
if v.actId == self:GetLabyrinthInfo( player , "ActivityId" ) and v.difficultyOrder == labyrinthLevel then
|
||
|
|
rewardId = v.finishReward
|
||
|
|
break
|
||
|
|
end
|
||
|
|
end
|
||
|
|
if rewardId > 0 then
|
||
|
|
--发放对应奖励
|
||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_89")
|
||
|
|
player:GiveReward(rewardId , eventId , 1)
|
||
|
|
data.firstRewardId = rewardId
|
||
|
|
--将下一个等级的迷宫状态修改为已解锁
|
||
|
|
if labyrinthLevel < #playerData.labyrinthInfos then
|
||
|
|
playerData.labyrinthInfos[ labyrinthLevel + 1 ].status = 2
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
--发放背包中的奖励
|
||
|
|
for k ,v in pairs(playerData.nowLabyrinthData.labyrinthBags) do
|
||
|
|
if v.type < dataType.GoodsType_Furniture then
|
||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_89")
|
||
|
|
player:MoneyChange(v.type , v.count , eventId)
|
||
|
|
else
|
||
|
|
skynet.server.bag:AddGoods(player , v.type , v.id , v.count)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
--判断完成次数是否达到领取累积奖励的次数
|
||
|
|
local allFinishCount = 0 --存储玩家所有迷宫等级的总完成次数
|
||
|
|
for k , v in pairs(playerData.labyrinthInfos) do
|
||
|
|
allFinishCount = allFinishCount + v.finishCount
|
||
|
|
end
|
||
|
|
for k ,v in pairs(playerData.rewardInfos) do
|
||
|
|
if v.needCount <= allFinishCount and 0 == v.status then
|
||
|
|
v.status = 1
|
||
|
|
--对应红点
|
||
|
|
skynet.server.msgTips:Add(player , 76)
|
||
|
|
break
|
||
|
|
end
|
||
|
|
end
|
||
|
|
else
|
||
|
|
--失败只发放迷宫背包中的奖励
|
||
|
|
for k ,v in pairs(playerData.nowLabyrinthData.labyrinthBags) do
|
||
|
|
if v.type < dataType.GoodsType_Furniture then
|
||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_89")
|
||
|
|
player:MoneyChange(v.type , v.count , eventId)
|
||
|
|
else
|
||
|
|
skynet.server.bag:AddGoods(player , v.type , v.id , v.count)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
--返回玩家数据
|
||
|
|
data.compassCount = playerData.compassCount
|
||
|
|
data.labyrinthInfo = playerData.labyrinthInfos
|
||
|
|
data.labyrinthBags = playerData.nowLabyrinthData.labyrinthBags
|
||
|
|
data.rewardInfos = playerData.rewardInfos
|
||
|
|
--将本次游玩信息初始化
|
||
|
|
player.gameData.activity[ self.ActivityType ].nowLabyrinthData = {}
|
||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityLabyrinthFinish")
|
||
|
|
s2cData.data = assert(pb.encode("S2CActivityLabyrinthFinish", data))
|
||
|
|
end
|
||
|
|
|
||
|
|
--迷途寻宝 领取累计奖励
|
||
|
|
function ActivityLabyrinth:SumGet( player , c2sData , s2cData )
|
||
|
|
c2sData.data = assert(pb.decode("C2SActivityLabyrinthSumGet", c2sData.data ))
|
||
|
|
local id = c2sData.data.id --累签id
|
||
|
|
local data = {}
|
||
|
|
for k ,v in pairs(player.gameData.activity[ self.ActivityType ].rewardInfos) do
|
||
|
|
if v.id == id and v.status == 1 then
|
||
|
|
--发放对应奖励
|
||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_90")
|
||
|
|
player:GiveReward(v.rewardId , eventId , 1)
|
||
|
|
v.status = 2
|
||
|
|
data.rewardId = v.rewardId
|
||
|
|
skynet.server.msgTips:Reduce(player , 76)
|
||
|
|
break
|
||
|
|
end
|
||
|
|
end
|
||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityLabyrinthSumGet")
|
||
|
|
s2cData.data = assert(pb.encode("S2CActivityLabyrinthSumGet", data))
|
||
|
|
end
|
||
|
|
|
||
|
|
--购买步数
|
||
|
|
function ActivityLabyrinth:BuyStep( player , c2sData , s2cData )
|
||
|
|
c2sData.data = assert(pb.decode("C2SActivityLabyrinthBuyStep", c2sData.data ))
|
||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityLabyrinthBuyStep")
|
||
|
|
local type = c2sData.data.type --购买类型 1:广告 2:金币
|
||
|
|
local data = {}
|
||
|
|
local playerData = player.gameData.activity[ self.ActivityType ]
|
||
|
|
local labyrinthLevel = playerData.nowLabyrinthData.level
|
||
|
|
|
||
|
|
--是否可以购买-购买次数 4次
|
||
|
|
if playerData.buyStepCount and playerData.buyStepCount>=4 then
|
||
|
|
log.info("迷宫活动 购买步数不足:",playerData.buyStepCount)
|
||
|
|
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local cfgMazeMapList = skynet.server.gameConfig:GetPlayerAllCfg( player , "MazeMap")
|
||
|
|
local cfgMazeMap={}
|
||
|
|
|
||
|
|
for k ,v in pairs(cfgMazeMapList) do
|
||
|
|
if v.actId == self:GetLabyrinthInfo( player , "ActivityId" ) and v.difficultyOrder == labyrinthLevel then
|
||
|
|
cfgMazeMap = v
|
||
|
|
break
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
--处理消耗资源
|
||
|
|
if type == 1 then--广告
|
||
|
|
--广告,不消耗资源
|
||
|
|
if playerData.isAdBuy then
|
||
|
|
log.info("迷宫活动 购买步数 广告不足",player.buyStepCount)
|
||
|
|
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
playerData.isAdBuy = true
|
||
|
|
|
||
|
|
elseif type == 2 then
|
||
|
|
|
||
|
|
--奖励索引
|
||
|
|
local rewardIndex= not playerData.buyStepCount and 1 or playerData.buyStepCount+1
|
||
|
|
if playerData.isAdBuy then
|
||
|
|
rewardIndex=rewardIndex-1
|
||
|
|
end
|
||
|
|
|
||
|
|
--是否存在奖励,不存在奖励 次数已用完
|
||
|
|
if not cfgMazeMap.buyStepCoin[rewardIndex] then
|
||
|
|
log.info("迷宫活动 购买步数 广告不足",player.buyStepCount)
|
||
|
|
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_142")
|
||
|
|
|
||
|
|
--消耗金币
|
||
|
|
if not player:MoneyChange(dataType.MoneyType_Coin , -cfgMazeMap.buyStepCoin[rewardIndex] , eventId) then
|
||
|
|
log.info("迷宫活动 购买步数 金币不足")
|
||
|
|
s2cData.code = errorInfo.ErrorCode.NoEnoughMoney
|
||
|
|
return
|
||
|
|
end
|
||
|
|
else
|
||
|
|
log.info("迷宫活动 购买步数类型错误:",type)
|
||
|
|
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
playerData.buyStepCount= not playerData.buyStepCount and 1 or playerData.buyStepCount+1
|
||
|
|
data.conBuyStepCount=playerData.buyStepCount >= 4 and 0 or 4 - playerData.buyStepCount
|
||
|
|
data.isAdBuy = playerData.isAdBuy and true or false
|
||
|
|
|
||
|
|
s2cData.data = assert(pb.encode("S2CActivityLabyrinthBuyStep", data))
|
||
|
|
end
|
||
|
|
|
||
|
|
skynet.server.activityLabyrinth = ActivityLabyrinth
|
||
|
|
return ActivityLabyrinth
|