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

791 lines
26 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 log = require "Log"
local pb = require "pb"
local dataType = require "DataType"
local errorInfo = require "ErrorInfo"
local activity = require "Activity"
local json =require "json"
local ActivityNewPlayerRaffle = oo.class()
ActivityNewPlayerRaffle.ActivityType = dataType.ActivityType_NewPlayerRaffle
--当前抽卡类型 都是家具
local goodsType = dataType.GoodsType_Furniture
--构造函数
function ActivityNewPlayerRaffle:Init()
end
-- 每次登录需要进行修改的数据
function ActivityNewPlayerRaffle:LoginInitData(player)
--判断模块是否开启
if not player:IsUnlockSystem( dataType.UnlockSystem_ActivityNewPlayerRaffle ) or self:CheckData(player) == nil then
return
end
-- 处理红点
skynet.server.msgTips:Reset(player, 106)
skynet.server.msgTips:Reset(player, 107)
skynet.server.msgTips:Reset(player, 108)
--新手限定设计卡池 1次
if self:IsLottery(player,1) then
skynet.server.msgTips:Add(player,106)
end
--新手限定设计卡池 10次
if self:IsLottery(player,10) then
skynet.server.msgTips:Add(player,108)
end
math.randomseed(skynet.GetTime())
end
--是否可以设计卡池
function ActivityNewPlayerRaffle:IsLottery(player,lotteryTimes)
--不存在开启的活动
local cfgNewPlayerRaffle = self:CheckData(player)
--活动未开启
if cfgNewPlayerRaffle == nil then
return false
end
--获取数值基础配置
local cfgSValue = skynet.server.gameConfig:GetAllCfg( "SValue")
--当前蜗壳币
local volute = player.gameData.volute
--需要蜗壳币
local needVolute = lotteryTimes==1 and cfgSValue.newPlayerRafflePrice[1] or cfgSValue.newPlayerRafflePrice[2]
--检查消耗资源
if volute < needVolute then
--log.debug(string.format("新手设计抽卡 资源不足,needVolute:%d,volute:%d",needVolute,volute))
return false
end
return true
end
--初始玩家数据
function ActivityNewPlayerRaffle:CheckData(player)
--默认空活动
local cfgNewPlayerRaffle = nil
if player==nil then
log.debug("新手限定设计卡池checkdata player is nil")
return cfgNewPlayerRaffle
end
--判断等级是否开启
local cfgSValue = skynet.server.gameConfig:GetAllCfg( "SValue")
if cfgSValue == nil or cfgSValue.newPlayerRaffleTrigger[1] > player.gameData.level then
return cfgNewPlayerRaffle
end
local cfgActivitys = skynet.server.gameConfig:GetPlayerAllCfg(player, "Activity")
if cfgActivitys == nil then
log.debug("新手限定设计卡池未开启-未获取到有效的活动2")
return cfgNewPlayerRaffle
end
local ifContain = false
local activityId = 0
for index, v in pairs(cfgActivitys) do
if v.activityType == ActivityNewPlayerRaffle.ActivityType and v.level<=player.gameData.level then
ifContain=true
activityId = v.activityId
break
end
end
if not ifContain then
log.debug("新手限定设计卡池未开启-玩家未满足条件")
return cfgNewPlayerRaffle
end
--初始化
if player.gameData.NewPlayerRaffleMap==nil then
player.gameData.NewPlayerRaffleMap={}
end
--获取活动配置
cfgNewPlayerRaffle=self:GetNewPlayerRaffleConfig(player,activityId)
--未获取到有效的活动
if cfgNewPlayerRaffle == nil then
return cfgNewPlayerRaffle
end
--如果玩家已经存在活动不需要检查
if player.gameData.NewPlayerRaffleMap[activityId] then
--是否过期
if self:GetActivityEndTime(player.gameData.NewPlayerRaffleMap[activityId].activityOpenTime) < skynet.GetTime() then
log.debug("新手限定设计卡池已过期")
return nil
end
return cfgNewPlayerRaffle
end
--存在活动初始化玩家数据
local playerActivityMatchSuff = {}
playerActivityMatchSuff.id = cfgNewPlayerRaffle.id
playerActivityMatchSuff.oneLotteryCount = 0 --单抽次数
playerActivityMatchSuff.oneLotterySuitCount = 0 --单抽套间产出次数
playerActivityMatchSuff.tenLotteryCount = 0 --十连抽次数
playerActivityMatchSuff.totalLotteryCount=0--累计抽卡次数 领取设计奖励使用
playerActivityMatchSuff.rewardList={}--已领取设计奖励
playerActivityMatchSuff.activityOpenTime = skynet.GetTime() --活动开启的时间戳
--更新缓存
player.gameData.NewPlayerRaffleMap[activityId] = playerActivityMatchSuff
return cfgNewPlayerRaffle
end
--是否可以领取设计奖励
function ActivityNewPlayerRaffle:IsDrawReward(player)
local isCanBuy=false
--不存在开启的活动
local cfgNewPlayerRaffle=ActivityNewPlayerRaffle:CheckData(player)
--活动未开启
if cfgNewPlayerRaffle == nil then
return isCanBuy
end
local accumDesignRewardStrs=cfgNewPlayerRaffle.accumDesignReward
--循环配置
for key, str in pairs(accumDesignRewardStrs) do
--解析配置
local arr = skynet.server.common:Split(str, "_")
local lotteryCount=tonumber(arr[1])
if #arr ~= 2 then
log.debug(string.format("新手限定设计卡池活动 配置异常accumDesignReward%d",str))
break
end
--判断是否可以领取
if player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id].totalLotteryCount >= lotteryCount then
--没有领取数据直接返回
if #player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id].rewardList <=0 then
isCanBuy=true
break
end
for _, count in ipairs(player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id].rewardList) do
--已经领取直接跳出
if count == lotteryCount then
isCanBuy=false
break
end
--没有领取
isCanBuy=true
end
--已经有结果 直接跳出
if isCanBuy then
break
end
end
end
return isCanBuy
end
--获取配置信息
function ActivityNewPlayerRaffle:GetNewPlayerRaffleConfig(player,activityId)
local cfNewPlayerRaffle=nil
--获取该活动的默认初始关卡
local cfNewPlayerRaffles=skynet.server.gameConfig:GetPlayerAllCfg(player, "NewPlayerRaffle")
if cfNewPlayerRaffles==nil then
log.debug("cfNewPlayerRaffle is nil")
return cfNewPlayerRaffle
end
for index, value in pairs(cfNewPlayerRaffles) do
if value.id==activityId then
cfNewPlayerRaffle=value
break
end
end
return cfNewPlayerRaffle
end
--获取显示信息
function ActivityNewPlayerRaffle:Show( player , c2sData , s2cData )
c2sData.data = assert(pb.decode("C2SActivityNewPlayerRaffleShow", c2sData.data ))
s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityNewPlayerRaffleShow")
local data = {}
data.isBuyExperienceStorePack = false
data.newPlayerCount = 0
data.activityEndTime = 0
--不存在开启的活动
local cfgNewPlayerRaffle=self:CheckData(player)
--活动未开启
if cfgNewPlayerRaffle == nil then
log.debug("cfgNewPlayerRaffle is nil")
s2cData.code = errorInfo.ErrorCode.ActivityClosed
return
end
if player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id]~=nil then
data.newPlayerCount =10 - player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id].oneLotteryCount
data.activityEndTime = self:GetActivityEndTime(player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id].activityOpenTime)
end
--是否买过体验礼包
data.isBuyExperienceStorePack=(player.gameData.storePack.storePackInfo[cfgNewPlayerRaffle.storepackId] ~= nil and not player.gameData.storePack.storePackInfo[cfgNewPlayerRaffle.storepackId].IsShow)and true or false
s2cData.data = assert(pb.encode("S2CActivityNewPlayerRaffleShow", data))
end
--新手限定设计卡池 设计奖励展示
function ActivityNewPlayerRaffle:AwardShow( player , c2sData , s2cData )
c2sData.data = assert(pb.decode("C2SActivityNewPlayerRaffleAwardShow", c2sData.data ))
s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityNewPlayerRaffleAwardShow")
local data = {}
data.designCount = 0
data.timeAwardInfos = {}
--不存在开启的活动
local cfgNewPlayerRaffle=self:CheckData(player)
--活动未开启
if cfgNewPlayerRaffle == nil then
log.debug("cfgNewPlayerRaffle is nil")
s2cData.code = errorInfo.ErrorCode.ActivityClosed
return
end
--循环组装奖励信息
for index, value in ipairs(cfgNewPlayerRaffle.accumDesignReward) do
local reward={status=0}
local arr=skynet.server.common:Split(value, "_")
local lotteryCount=tonumber(arr[1])
reward.needDesignCount=lotteryCount
if player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id].totalLotteryCount >= lotteryCount then
reward.status=1
end
for _, value in ipairs(player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id].rewardList) do
if value==lotteryCount then
reward.status=2
break
end
end
data.timeAwardInfos[index] = reward
end
--玩家数据
local newPlayerRaffleMap = player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id]
data.designCount = newPlayerRaffleMap.totalLotteryCount
s2cData.data = assert(pb.encode("S2CActivityNewPlayerRaffleAwardShow", data))
end
--新手限定设计卡池 设计奖励获取
function ActivityNewPlayerRaffle:AwardGet( player , c2sData , s2cData )
c2sData.data = assert(pb.decode("C2SActivityNewPlayerRaffleAwardGet", c2sData.data ))
s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityNewPlayerRaffleAwardGet")
--参数
local timeAwardId = c2sData.data.timeAwardId
--返回信息
local data = {}
data.timeAwardInfos={}
--不存在开启的活动
local cfgNewPlayerRaffle=self:CheckData(player)
--活动未开启
if cfgNewPlayerRaffle == nil then
log.debug("cfgNewPlayerRaffle is nil")
s2cData.code = errorInfo.ErrorCode.ActivityClosed
return
end
--判断配置是否存在
for index, value in ipairs(cfgNewPlayerRaffle.accumDesignReward) do
local reward={status=0}
local arr=skynet.server.common:Split(value, "_")
local lotteryCount=tonumber(arr[1])
local rewardId=tonumber(arr[2])
reward.needDesignCount=lotteryCount
if player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id].totalLotteryCount >= lotteryCount then
reward.status=1
end
for _, value in ipairs(player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id].rewardList) do
if value==lotteryCount then
reward.status=2
break
end
end
--当前领取的奖励
if lotteryCount == timeAwardId then
if reward.status ~= 1 then
s2cData.code = errorInfo.ErrorCode.NotGet
return
end
--领取奖励
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_118")
player:GiveReward(rewardId ,eventId,1)
reward.status = 2
data.rewardId = rewardId
--添加更新记录
table.insert(player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id].rewardList,timeAwardId)
end
data.timeAwardInfos[index] = reward
end
--玩家数据
local newPlayerRaffleMap = player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id]
data.designCount = newPlayerRaffleMap.totalLotteryCount
--处理红点
if not self:IsDrawReward(player) then
skynet.server.msgTips:ReduceAll(player, 107)
end
s2cData.data = assert(pb.encode("S2CActivityNewPlayerRaffleAwardGet", data))
end
--新手限定设计卡池 抽奖
function ActivityNewPlayerRaffle:Lottery(player,c2sData,s2cData)
c2sData.data = assert(pb.decode("C2SActivityNewPlayerRaffleLottery", c2sData.data ))
s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityNewPlayerRaffleLottery")
--参数 抽奖次数 1-抽一次 2-抽十次
local lotteryTimes = c2sData.data.lotteryTimes
--log.debug(string.format("新手限定设计卡池 抽卡开始lotteryTimes%d",c2sData.data.lotteryTimes))
--返回信息
local data = {}
data.rewards={}
--不存在开启的活动
local cfgNewPlayerRaffle=self:CheckData(player)
--活动未开启
if cfgNewPlayerRaffle == nil then
s2cData.code = errorInfo.ErrorCode.ActivityClosed
--log.debug("新手设计抽卡 活动已关闭")
return
end
--玩家数据
local newPlayerRaffleMap = player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id]
--获取数值基础配置
local cfgSValue = skynet.server.gameConfig:GetAllCfg( "SValue")
--当前蜗壳币
local volute = player.gameData.volute
--需要蜗壳币
local needVolute = lotteryTimes==1 and cfgSValue.newPlayerRafflePrice[1] or cfgSValue.newPlayerRafflePrice[2]
--检查消耗资源
if volute < needVolute then
s2cData.code = errorInfo.ErrorCode.VoluteNotEnough
--log.debug(string.format("新手设计抽卡 资源不足,needVolute:%d,volute:%d",needVolute,volute))
return
end
--查找道具配置
local cfgFurnitures = skynet.server.gameConfig:GetPlayerAllCfg(player, "Furniture")
-- 单抽
if lotteryTimes == 1 then
--随机资源id
local randomGoodsId = 0
--判断是否需要出套间id-前多少次 出多少个
if newPlayerRaffleMap.oneLotteryCount >= (tonumber(cfgSValue.newPlayerRaffleSingle[1])- (tonumber(cfgSValue.newPlayerRaffleSingle[2])-newPlayerRaffleMap.oneLotterySuitCount)) then
--随机产出套间id
randomGoodsId = RandomSuit(player,cfgNewPlayerRaffle.suitId)
--已经全部产出套间,重置抽卡次数
if newPlayerRaffleMap.oneLotteryCount+1 >= tonumber(cfgSValue.newPlayerRaffleSingle[1]) then
newPlayerRaffleMap.oneLotteryCount = 0
newPlayerRaffleMap.oneLotterySuitCount=0
else
newPlayerRaffleMap.oneLotteryCount = newPlayerRaffleMap.oneLotteryCount + 1
newPlayerRaffleMap.oneLotterySuitCount = newPlayerRaffleMap.oneLotterySuitCount + 1
end
--log.debug( string.format("新手限定设计卡池 单抽产出套间,套间id:%d",randomGoodsId))
else--正常单抽
--随机权重
local randWeightArr =cfgSValue.newPlayerRafflePossibility
local totalWeight = 0
for _, value in ipairs(randWeightArr) do
totalWeight=totalWeight+(value*100)
end
local randomNum =math.random(1,totalWeight)
--套间
if randomNum<=randWeightArr[1]*100 then
--随机产出套间id
randomGoodsId= RandomSuit(player,cfgNewPlayerRaffle.suitId)
--已经全部产出套间,重置抽卡次数
if newPlayerRaffleMap.oneLotterySuitCount+1 >= tonumber(cfgSValue.newPlayerRaffleSingle[2]) then
newPlayerRaffleMap.oneLotteryCount = 0
newPlayerRaffleMap.oneLotterySuitCount=0
else
newPlayerRaffleMap.oneLotteryCount = newPlayerRaffleMap.oneLotteryCount + 1
newPlayerRaffleMap.oneLotterySuitCount = newPlayerRaffleMap.oneLotterySuitCount + 1
end
--log.debug( string.format("新手限定设计卡池 单抽产出套间,套间id:%d",randomGoodsId))
--散件稀有
elseif randomNum<=randWeightArr[1]*100+randWeightArr[2]*100 then
--随机稀有物品
randomGoodsId=RandomStuff(player,cfgNewPlayerRaffle.rareStuffId)
newPlayerRaffleMap.oneLotteryCount = newPlayerRaffleMap.oneLotteryCount + 1
--散件普通
elseif randomNum<=randWeightArr[1]*100+randWeightArr[2]*100+randWeightArr[3]*100 then
--随机普通物品
randomGoodsId=RandomStuff(player,cfgNewPlayerRaffle.normalStuffId)
newPlayerRaffleMap.oneLotteryCount = newPlayerRaffleMap.oneLotteryCount + 1
end
end
--组装返回数据
local item={}
item.goodsType = goodsType
item.goodsId = randomGoodsId
item.goodsCount = 1
--添加到返回数据
data.rewards[1]={}
data.rewards[1].item=item
data.rewards[1].isNew = not skynet.server.illustration:IsExistGoods( player , goodsType , randomGoodsId )
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_119" )
--扣除消耗
player:MoneyChange(dataType.GoodsType_Volute , -needVolute ,eventId)
--发奖
skynet.server.bag:AddGoods(player, goodsType, randomGoodsId, 1)
--循环套间
for _, cfgFurniture in pairs(cfgFurnitures) do
if cfgFurniture.id == randomGoodsId then
local quality = cfgFurniture.quality
--不凡品种特殊处理(之前的规则无法兼容)
if quality==4 then
quality=18
end
--添加经验
player:AddExpForType( 1 , quality , 1 )
end
end
--10连抽
else
--本次产出道具列表
local outGoodsList = {}
--本次抽卡出套间数量
local suitCount=0
--前6次十抽必得套间物品数量--第7次后每次10抽必得套间数量
suitCount=player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id].tenLotteryCount<=6 and cfgSValue.newPlayerRaffleDisposable[1] or cfgSValue.newPlayerRaffleDisposable[2]
--先产出套间物品
for i = 1, suitCount do
local outGoodsIdList={}
for _, value in ipairs(outGoodsList) do
outGoodsIdList[value.goodsId]=true
end
local randomGoodsId= RandomSuit(player,cfgNewPlayerRaffle.suitId,outGoodsIdList)
table.insert(outGoodsList,{goodsId=randomGoodsId,goodsType=goodsType})
--log.debug( string.format("新手限定设计卡池 十连抽产出套间,套间id:%d",randomGoodsId))
end
--普通产出
for i = 1, 10-suitCount do
local randomNum =math.random(1,2)
local stuffIdList = randomNum == 1 and cfgNewPlayerRaffle.rareStuffId or cfgNewPlayerRaffle.normalStuffId
local randomGoodsId = RandomStuff(player,stuffIdList)
--随机物品
table.insert(outGoodsList,{goodsId=randomGoodsId,goodsType= goodsType})
end
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_119" )
--随机打乱物品
Shuffle(outGoodsList)
--扣除消耗
player:MoneyChange(dataType.GoodsType_Volute , -needVolute ,eventId)
for index, temp in ipairs(outGoodsList) do
--组装返回数据
local item={}
item.goodsType = temp.goodsType
item.goodsId = temp.goodsId
item.goodsCount = 1
--添加到返回数据
data.rewards[index]={}
data.rewards[index].item=item
data.rewards[index].isNew = not skynet.server.illustration:IsExistGoods( player , temp.goodsType , temp.goodsId )
--发奖
if not skynet.server.bag:AddGoods(player, temp.goodsType, temp.goodsId, 1) then
--log.debug(string.format("家具添加失败goodsType:%d,goodsId:%d",temp.goodsType,temp.goodsId))
s2cData.code = errorInfo.ErrorCode.OPFailed
return
end
--循环套间
for _, cfgFurniture in pairs(cfgFurnitures) do
if cfgFurniture.id == temp.goodsId then
local quality = cfgFurniture.quality
--不凡品种特殊处理(之前的规则无法兼容)
if quality==4 then
quality=18
end
--添加经验
player:AddExpForType( 1 , quality , 1 )
end
end
end
--添加次数
player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id].tenLotteryCount=player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id].tenLotteryCount+1
end
--更新抽奖次数
player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id].totalLotteryCount = player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id].totalLotteryCount + (lotteryTimes == 1 and 1 or 10)
--是否可以分享
if 0 == player.gameData.todayGain.designShare then
data.canShare = true
else
data.canShare = false
end
data.newPlayerCount =10 - player.gameData.NewPlayerRaffleMap[cfgNewPlayerRaffle.id].oneLotteryCount
--处理红点
if lotteryTimes == 1 then
skynet.server.msgTips:ReduceAll(player, 106)
if not self:IsLottery(player,10) then
skynet.server.msgTips:ReduceAll(player, 108)
end
else
skynet.server.msgTips:ReduceAll(player, 108)
if not self:IsLottery(player,1) then
skynet.server.msgTips:ReduceAll(player, 106)
end
end
--可领取奖励
if self:IsDrawReward(player) then
skynet.server.msgTips:Add(player,107)
end
s2cData.data = assert(pb.encode("S2CActivityNewPlayerRaffleLottery", data))
end
--获取预览信息
function ActivityNewPlayerRaffle:AwardPreview( player , c2sData , s2cData )
c2sData.data = assert(pb.decode("C2SActivityNewPlayerRaffleAwardPreview", c2sData.data ))
s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityNewPlayerRaffleAwardPreview")
local data = {}
data.overviewInfos ={}
--不存在开启的活动
local cfgNewPlayerRaffle=self:CheckData(player)
--活动未开启
if cfgNewPlayerRaffle == nil then
log.debug("cfgNewPlayerRaffle is nil")
s2cData.code = errorInfo.ErrorCode.ActivityClosed
return
end
--套间列表
local cfgFurnitures = skynet.server.gameConfig:GetPlayerAllCfg(player, "Furniture")
if cfgFurnitures ~= nil then
for _, cfgFurniture in pairs(cfgFurnitures) do
if cfgFurniture.suitType== cfgNewPlayerRaffle.suitId and skynet.server.illustration:IsExistGoods(player,goodsType,cfgFurniture.id)then
table.insert(data.overviewInfos,{goodsId=cfgFurniture.id,goodsType=goodsType })
end
end
end
--稀有物品
for _, goodsId in ipairs(cfgNewPlayerRaffle.rareStuffId) do
if skynet.server.illustration:IsExistGoods(player,goodsType,goodsId)then
table.insert(data.overviewInfos,{goodsId=goodsId,goodsType=goodsType })
end
end
--普通物品
for _, goodsId in ipairs(cfgNewPlayerRaffle.normalStuffId) do
if skynet.server.illustration:IsExistGoods(player,goodsType,goodsId)then
table.insert(data.overviewInfos,{goodsId=goodsId,goodsType=goodsType })
end
end
s2cData.data = assert(pb.encode("S2CActivityNewPlayerRaffleAwardPreview", data))
end
--随机套间
function RandomSuit(player,suitId,outGoodsList)
if outGoodsList == nil then
outGoodsList={}
end
local retSuitId=0
--查找道具配置
local cfgFurnitures = skynet.server.gameConfig:GetPlayerAllCfg(player, "Furniture")
if cfgFurnitures == nil then
log.error("ActivityNewPlayerRaffle:randomSuit cfgFurnitures is nil")
return retSuitId
end
local suitList = {}
--循环查找套间配置
for _, value in pairs(cfgFurnitures) do
if value.suitType == suitId and suitId ~= 0 then
table.insert(suitList, value)
end
end
if #suitList == 0 then
log.error("ActivityNewPlayerRaffle:randomSuit suitList is nil")
return retSuitId
end
local prioritySuitList = {}
--查找未得到的套间
for _, value in ipairs(suitList) do
if skynet.server.bag:GetGoodsCount(player,goodsType, value.id)<=0 and outGoodsList[value.id] == nil then
table.insert(prioritySuitList,value)
end
end
if #prioritySuitList == 0 then
local index = math.random(1,#suitList)
local suit =suitList[index]
--返回资源
return suit.id
else
local index = math.random(1,#prioritySuitList)
local suit =prioritySuitList[index]
--返回资源
return suit.id
end
end
--稀有物品,普通物品
function RandomStuff(player,rareStuffIds)
if rareStuffIds==nil or #rareStuffIds == 0 then
log.error("ActivityNewPlayerRaffle:randomStuff rareStuffIds is nil")
return 0
end
local index = math.random(1,#rareStuffIds)
return rareStuffIds[index]
end
--获取活动结束时间
function ActivityNewPlayerRaffle:GetActivityEndTime(starTime)
if starTime <=0 then
return 0
end
--获取数值基础配置
local cfgSValue = skynet.server.gameConfig:GetAllCfg( "SValue")
local continuousDays = cfgSValue.newPlayerRaffleTrigger[3] or 10 -- 默认值为10天
--返回10天后的时间戳
return starTime + 86400 * continuousDays
end
--随机打乱物品
function Shuffle(table)
if type(table) ~= "table" then return end
for i = #table, 2, -1 do
local j = math.random(i) -- 生成[1, i]范围内的随机索引
table[i], table[j] = table[j], table[i] -- 交换元素
end
end
skynet.server.activityNewPlayerRaffle = ActivityNewPlayerRaffle
return ActivityNewPlayerRaffle