658 lines
20 KiB
Lua
658 lines
20 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 dataType = require "DataType"
|
|||
|
|
local taskListEvent = require "TaskListEvent"
|
|||
|
|
local ActivityReplicaStore = oo.class()
|
|||
|
|
|
|||
|
|
ActivityReplicaStore.ActivityType = dataType.ActivityType_ActivityReplicaStore
|
|||
|
|
|
|||
|
|
--构造函数
|
|||
|
|
function ActivityReplicaStore:Init()
|
|||
|
|
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 每次登录需要进行修改的数据
|
|||
|
|
function ActivityReplicaStore:LoginInitData(player)
|
|||
|
|
|
|||
|
|
--功能未开启
|
|||
|
|
if not player:IsUnlockSystem( dataType.UnlockSystem_ActivityReplicaStore ) then
|
|||
|
|
|
|||
|
|
log.debug("复刻商店未开启-等级不足")
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--检查补发
|
|||
|
|
self:CheckSettle(player)
|
|||
|
|
|
|||
|
|
--活动是否开启
|
|||
|
|
if not self:CheckDataAndGetActivity(player) then
|
|||
|
|
|
|||
|
|
log.debug("复刻商店未开启")
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 处理红点
|
|||
|
|
--skynet.server.msgTips:Reset(player, 116)
|
|||
|
|
|
|||
|
|
log.debug("复刻商店活动进行中")
|
|||
|
|
self:Show(player,{},{})
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--检查结算
|
|||
|
|
function ActivityReplicaStore:CheckSettle(player)
|
|||
|
|
|
|||
|
|
--补发奖励
|
|||
|
|
if player.gameData.ReplicaStoreMap ==nil or not next(player.gameData.ReplicaStoreMap) then
|
|||
|
|
log.debug("复刻商店未开启")
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--获取开启的活动
|
|||
|
|
local openActivityId,_, _, _ = activity:GetActivityInfo(player, ActivityReplicaStore.ActivityType)
|
|||
|
|
|
|||
|
|
for activityId, replicaStore in pairs(player.gameData.ReplicaStoreMap) do
|
|||
|
|
|
|||
|
|
--是否已经结算,活动是否开启
|
|||
|
|
if replicaStore.isSettle or activityId == openActivityId then
|
|||
|
|
goto continue
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--获取活动配置
|
|||
|
|
local cfgReplicaStoreList=self:GetReplicaStoreConfig(player,activityId)
|
|||
|
|
|
|||
|
|
--补发奖励id
|
|||
|
|
local rewards={}
|
|||
|
|
|
|||
|
|
for _, value in ipairs(replicaStore.packList) do
|
|||
|
|
|
|||
|
|
--已经领取,或者不满足
|
|||
|
|
if value.isDrawFreeReward or value.unlockNumb > replicaStore.SpendingGoldNum then
|
|||
|
|
goto continue1
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
for _, cfgReplicaStore in ipairs(cfgReplicaStoreList) do
|
|||
|
|
if value.unlockNumb == cfgReplicaStore.unlockNumb then
|
|||
|
|
table.insert(rewards,cfgReplicaStore.freeReward)
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
::continue1::
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
replicaStore.isSettle=true
|
|||
|
|
|
|||
|
|
--是否需要补发奖励
|
|||
|
|
if next(rewards) then
|
|||
|
|
skynet.server.mail:AddNewMail( player , skynet.server.mail.MailType_Award,"好礼接力奖励补发", "本次时光商店活动已经结束,小蜗们忘记领取的奖励已经通过邮件发放咯,请小蜗们及时领取~", rewards, true)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
::continue::
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--初始玩家数据,返回活动信息,
|
|||
|
|
function ActivityReplicaStore:CheckDataAndGetActivity(player)
|
|||
|
|
|
|||
|
|
--默认空活动
|
|||
|
|
local playerReplicaStore = nil
|
|||
|
|
|
|||
|
|
if player==nil then
|
|||
|
|
log.debug("复刻商店未开启")
|
|||
|
|
return playerReplicaStore
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--判断等级是否开启
|
|||
|
|
if not player:IsUnlockSystem( dataType.UnlockSystem_ActivityReplicaStore) then
|
|||
|
|
log.debug("复刻商店等级不足")
|
|||
|
|
return playerReplicaStore
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--获取开启的活动
|
|||
|
|
local activityId,_, _, id = activity:GetActivityInfo(player, ActivityReplicaStore.ActivityType)
|
|||
|
|
|
|||
|
|
--没有开启的活动
|
|||
|
|
if activityId == 0 then
|
|||
|
|
return playerReplicaStore
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--初始化
|
|||
|
|
if player.gameData.ReplicaStoreMap==nil then
|
|||
|
|
player.gameData.ReplicaStoreMap={}
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--获取活动配置
|
|||
|
|
local cfgReplicaStoreList=self:GetReplicaStoreConfig(player,activityId)
|
|||
|
|
|
|||
|
|
--未获取到有效的活动
|
|||
|
|
if cfgReplicaStoreList == nil then
|
|||
|
|
log.debug("复刻商店未开启-未获取到有效的活动2")
|
|||
|
|
return playerReplicaStore
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--如果玩家已经存在活动不需要检查
|
|||
|
|
if player.gameData.ReplicaStoreMap[activityId] then
|
|||
|
|
|
|||
|
|
playerReplicaStore=player.gameData.ReplicaStoreMap[activityId]
|
|||
|
|
|
|||
|
|
--删除过期活动,减少数据产生
|
|||
|
|
local removeKeyList = {}
|
|||
|
|
for exceedActivityId, value in pairs(player.gameData.ReplicaStoreMap) do
|
|||
|
|
if exceedActivityId ~= activityId and value.id ~= id then
|
|||
|
|
table.insert(removeKeyList, exceedActivityId)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
if next(removeKeyList) then
|
|||
|
|
for _, removeKey in ipairs(removeKeyList) do
|
|||
|
|
player.gameData.ReplicaStoreMap[removeKey]=nil
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
return playerReplicaStore
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--存在活动初始化玩家数据
|
|||
|
|
local playerActivityReplicaStore = {}
|
|||
|
|
playerActivityReplicaStore.id = id
|
|||
|
|
playerActivityReplicaStore.activityId = activityId
|
|||
|
|
playerActivityReplicaStore.SpendingGoldNum = 0
|
|||
|
|
|
|||
|
|
--是否结算
|
|||
|
|
playerActivityReplicaStore.isSettle = false
|
|||
|
|
|
|||
|
|
--礼包信息
|
|||
|
|
playerActivityReplicaStore.packList={}
|
|||
|
|
|
|||
|
|
for _, cfgReplicaStore in ipairs(cfgReplicaStoreList) do
|
|||
|
|
|
|||
|
|
--添加信息,,--解锁条件【这里当成id使用】,是否领取免费奖励,已经选择的奖励列表
|
|||
|
|
table.insert(playerActivityReplicaStore.packList,{unlockNumb=cfgReplicaStore.unlockNumb,isDrawFreeReward=false,selectRewardList={},buyNum = 0})
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--更新缓存
|
|||
|
|
player.gameData.ReplicaStoreMap[activityId] = playerActivityReplicaStore
|
|||
|
|
|
|||
|
|
--添加红点
|
|||
|
|
skynet.server.msgTips:Add(player, 124)
|
|||
|
|
|
|||
|
|
return playerActivityReplicaStore
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--获取配置信息
|
|||
|
|
function ActivityReplicaStore:GetReplicaStoreConfig(player,activityId)
|
|||
|
|
|
|||
|
|
local cfgcfgReplicaStoreList={}
|
|||
|
|
|
|||
|
|
--获取该活动的默认初始关卡
|
|||
|
|
local cfgReplicaStore=skynet.server.gameConfig:GetPlayerAllCfg(player, "ReplicaStore")
|
|||
|
|
if cfgReplicaStore==nil then
|
|||
|
|
|
|||
|
|
log.debug("cfgReplicaStore is nil")
|
|||
|
|
return cfgcfgReplicaStoreList
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
for _, value in pairs(cfgReplicaStore) do
|
|||
|
|
if value.activityId==activityId then
|
|||
|
|
table.insert(cfgcfgReplicaStoreList,value)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--对cfgcfgReplicaStoreList进行升序
|
|||
|
|
table.sort(cfgcfgReplicaStoreList, function(a, b)
|
|||
|
|
return a.unlockNumb < b.unlockNumb
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
return cfgcfgReplicaStoreList
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--是否可以免费领取
|
|||
|
|
function ActivityReplicaStore:isCanDraw( player)
|
|||
|
|
|
|||
|
|
--活动是否开启
|
|||
|
|
local playerReplicaStore =self:CheckDataAndGetActivity(player)
|
|||
|
|
if playerReplicaStore ==nil then
|
|||
|
|
return false
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
for _, value in ipairs(playerReplicaStore.packList) do
|
|||
|
|
if value.unlockNumb <= playerReplicaStore.SpendingGoldNum and not value.isDrawFreeReward then
|
|||
|
|
return true
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
return false
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--礼包充值
|
|||
|
|
function ActivityReplicaStore:Charge( player , storeId )
|
|||
|
|
--检查并且获取活动信息
|
|||
|
|
local playerReplicaStore=self:CheckDataAndGetActivity(player)
|
|||
|
|
|
|||
|
|
if playerReplicaStore == nil then
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--获取配置
|
|||
|
|
local cfgReplicaStoreList=self:GetReplicaStoreConfig(player,playerReplicaStore.activityId)
|
|||
|
|
local cfgReplicaStore=nil
|
|||
|
|
|
|||
|
|
for _, value in ipairs(cfgReplicaStoreList) do
|
|||
|
|
if value.storepackId == storeId then
|
|||
|
|
cfgReplicaStore=value
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
if cfgReplicaStore == nil then
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
for _, value in pairs(playerReplicaStore.packList) do
|
|||
|
|
if value.unlockNumb == cfgReplicaStore.unlockNumb then
|
|||
|
|
|
|||
|
|
--选择奖励
|
|||
|
|
local rewardStrList=value.selectRewardList
|
|||
|
|
|
|||
|
|
--未选择的情况
|
|||
|
|
if not next(rewardStrList) then
|
|||
|
|
for _, object in ipairs(cfgReplicaStore.storeObject) do
|
|||
|
|
table.insert(rewardStrList,object)
|
|||
|
|
if #rewardStrList >= cfgReplicaStore.buyNumb then
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--发奖
|
|||
|
|
for _, rewardStr in ipairs(rewardStrList) do
|
|||
|
|
|
|||
|
|
local tmp = skynet.server.common:Split( rewardStr ,"_" )
|
|||
|
|
|
|||
|
|
local goodsType=tonumber(tmp[ 1 ])
|
|||
|
|
local id = tonumber(tmp[ 2 ])
|
|||
|
|
|
|||
|
|
local give,replaceRewardId = player:RewardConversion(id , goodsType)
|
|||
|
|
|
|||
|
|
if give then
|
|||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_145")
|
|||
|
|
player:GiveReward(replaceRewardId , eventId , 1)
|
|||
|
|
else
|
|||
|
|
--是否是头像/头像框
|
|||
|
|
if goodsType == dataType.GoodsType_HeadAndHeadFrame then
|
|||
|
|
local cfgOneHead = skynet.server.gameConfig:GetPlayerCurCfg( player , "Head" , id)
|
|||
|
|
skynet.server.personal:ChangeGainInfo(player , goodsType , id , cfgOneHead.type , skynet.server.personal.AddGoods)
|
|||
|
|
else
|
|||
|
|
--发奖
|
|||
|
|
skynet.server.bag:AddGoods( player , goodsType , id , 1 )
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
if not value.buyNum then
|
|||
|
|
value.buyNum = 0
|
|||
|
|
end
|
|||
|
|
--添加购买次数
|
|||
|
|
value.buyNum=value.buyNum+1
|
|||
|
|
|
|||
|
|
--清空选择
|
|||
|
|
value.selectRewardList={}
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--消耗金币
|
|||
|
|
function ActivityReplicaStore:CostGold(player,GoldCount)
|
|||
|
|
--检查并且获取活动信息
|
|||
|
|
local playerReplicaStore=self:CheckDataAndGetActivity(player)
|
|||
|
|
|
|||
|
|
if playerReplicaStore == nil then
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--添加金币
|
|||
|
|
playerReplicaStore.SpendingGoldNum=playerReplicaStore.SpendingGoldNum+GoldCount
|
|||
|
|
|
|||
|
|
--红点处理
|
|||
|
|
if self:isCanDraw(player) then
|
|||
|
|
|
|||
|
|
skynet.server.msgTips:Add(player,123)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--根据配置奖励配置转换成程序奖励类型
|
|||
|
|
function ActivityReplicaStore:GetRewardType(type)
|
|||
|
|
|
|||
|
|
local goodsType = 0
|
|||
|
|
|
|||
|
|
if 1 == type then
|
|||
|
|
goodsType = dataType.GoodsType_Furniture
|
|||
|
|
elseif 2 == type then
|
|||
|
|
goodsType = dataType.GoodsType_Decorate
|
|||
|
|
elseif 3 == type then
|
|||
|
|
goodsType = dataType.GoodsType_Garden
|
|||
|
|
elseif 4 == type then
|
|||
|
|
goodsType = dataType.GoodsType_Clothes
|
|||
|
|
elseif 5 == type then
|
|||
|
|
goodsType = dataType.GoodsType_PetClothes
|
|||
|
|
elseif 6 == type then
|
|||
|
|
goodsType = dataType.GoodsType_HeadAndHeadFrame
|
|||
|
|
elseif 7 == type then
|
|||
|
|
goodsType = dataType.GoodsType_HeadAndHeadFrame
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
return goodsType
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--获取复刻商店信息
|
|||
|
|
function ActivityReplicaStore:Show( player , c2sData , s2cData )
|
|||
|
|
--c2sData.data = assert(pb.decode("C2SActivityReplicaStoreShow", c2sData.data ))
|
|||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityReplicaStoreShow")
|
|||
|
|
local data = {}
|
|||
|
|
data.replicaStoreItemList={}
|
|||
|
|
|
|||
|
|
--检查并且获取活动信息
|
|||
|
|
local playerReplicaStore=self:CheckDataAndGetActivity(player)
|
|||
|
|
|
|||
|
|
if playerReplicaStore == nil then
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.ActivityClosed
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
data.currentCost=playerReplicaStore.SpendingGoldNum
|
|||
|
|
|
|||
|
|
for _, value in ipairs(playerReplicaStore.packList) do
|
|||
|
|
|
|||
|
|
local freeState = 1
|
|||
|
|
|
|||
|
|
--可领取
|
|||
|
|
if value.unlockNumb <=playerReplicaStore.SpendingGoldNum then
|
|||
|
|
freeState = 2
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--已领取
|
|||
|
|
if value.isDrawFreeReward then
|
|||
|
|
freeState = 3
|
|||
|
|
end
|
|||
|
|
table.insert(data.replicaStoreItemList,{unlockNumb=value.unlockNumb,freeState=freeState,buyNum=value.buyNum})
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--添加红点
|
|||
|
|
skynet.server.msgTips:ReduceAll(player, 124)
|
|||
|
|
|
|||
|
|
--log.debug("复刻商店 获取信息: ",json:encode(data))
|
|||
|
|
|
|||
|
|
--返回信息
|
|||
|
|
s2cData.data = assert(pb.encode("S2CActivityReplicaStoreShow", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--领取复刻商店信息
|
|||
|
|
function ActivityReplicaStore:GetFreeReward( player , c2sData , s2cData )
|
|||
|
|
c2sData.data = assert(pb.decode("C2SActivityReplicaStoreGetFreeReward", c2sData.data ))
|
|||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityReplicaStoreGetFreeReward")
|
|||
|
|
local unlockNumb=c2sData.data.unlockNumb
|
|||
|
|
local data = {}
|
|||
|
|
data.unlockNumb=unlockNumb
|
|||
|
|
|
|||
|
|
--检查并且获取活动信息
|
|||
|
|
local playerReplicaStore=self:CheckDataAndGetActivity(player)
|
|||
|
|
|
|||
|
|
if playerReplicaStore == nil then
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.ActivityClosed
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--判断添加
|
|||
|
|
if unlockNumb>playerReplicaStore.SpendingGoldNum then
|
|||
|
|
log.debug("领取免费礼包失败 消费金币不足 : ",unlockNumb,playerReplicaStore.SpendingGoldNum)
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--领取奖励
|
|||
|
|
local freeReward = 0
|
|||
|
|
|
|||
|
|
--循环查找礼包信息
|
|||
|
|
for _, value in ipairs(playerReplicaStore.packList) do
|
|||
|
|
if value.unlockNumb == unlockNumb then
|
|||
|
|
|
|||
|
|
--已领取
|
|||
|
|
if value.isDrawFreeReward then
|
|||
|
|
log.debug("领取免费礼包失败 已领取 ")
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--获取配置
|
|||
|
|
local cfgReplicaStoreList=self:GetReplicaStoreConfig(player,playerReplicaStore.activityId)
|
|||
|
|
|
|||
|
|
--配置
|
|||
|
|
local cfgReplicaStore=nil
|
|||
|
|
|
|||
|
|
for index, value in ipairs(cfgReplicaStoreList) do
|
|||
|
|
if value.unlockNumb == unlockNumb then
|
|||
|
|
cfgReplicaStore=value
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--配置不存在
|
|||
|
|
if not cfgReplicaStore then
|
|||
|
|
log.debug("领取免费礼包失败 配置不存在 : ",unlockNumb)
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--发奖
|
|||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_144")
|
|||
|
|
player:GiveReward( cfgReplicaStore.freeReward ,eventId)
|
|||
|
|
|
|||
|
|
freeReward=cfgReplicaStore.freeReward
|
|||
|
|
|
|||
|
|
--设置成已领取
|
|||
|
|
value.isDrawFreeReward=true
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--红点处理
|
|||
|
|
if not self:isCanDraw(player) then
|
|||
|
|
|
|||
|
|
log.debug("复刻商店 删除小红点")
|
|||
|
|
skynet.server.msgTips:ReduceAll(player,123)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
data.freeReward=freeReward
|
|||
|
|
|
|||
|
|
--返回信息
|
|||
|
|
s2cData.data = assert(pb.encode("S2CActivityReplicaStoreGetFreeReward", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--复刻商店自选礼包选择
|
|||
|
|
function ActivityReplicaStore:Choose( player , c2sData , s2cData )
|
|||
|
|
c2sData.data = assert(pb.decode("C2SActivityReplicaStoreChoose", c2sData.data ))
|
|||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityReplicaStoreChoose")
|
|||
|
|
local rewardStrList=c2sData.data.rewardStrList
|
|||
|
|
local unlockNumb=c2sData.data.unlockNumb
|
|||
|
|
local data = {}
|
|||
|
|
|
|||
|
|
if not next(rewardStrList) then
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
|||
|
|
log.info("复刻商店 自选礼包选择参数错误")
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--检查并且获取活动信息
|
|||
|
|
local playerReplicaStore=self:CheckDataAndGetActivity(player)
|
|||
|
|
|
|||
|
|
if playerReplicaStore == nil then
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.ActivityClosed
|
|||
|
|
log.info("复刻商店 自选礼包选择参数错误1")
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--获取活动配置
|
|||
|
|
local cfgReplicaStoreList=self:GetReplicaStoreConfig(player,playerReplicaStore.activityId)
|
|||
|
|
local isOk=false
|
|||
|
|
--检查参数
|
|||
|
|
for _, cfgReplicaStore in ipairs(cfgReplicaStoreList) do
|
|||
|
|
if unlockNumb ~= cfgReplicaStore.unlockNumb then
|
|||
|
|
log.info("复刻商店 自选礼包选择参数错误4,continue",unlockNumb,cfgReplicaStore.unlockNumb)
|
|||
|
|
goto continue
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--判断选择数据量
|
|||
|
|
if #rewardStrList ~= cfgReplicaStore.buyNumb then
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
|||
|
|
log.info("复刻商店 自选礼包选择参数错误2")
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
for _, rewardStr in ipairs(rewardStrList) do
|
|||
|
|
|
|||
|
|
local exists =false
|
|||
|
|
for _, value in ipairs(cfgReplicaStore.storeObject) do
|
|||
|
|
if rewardStr == value then
|
|||
|
|
exists=true
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--未查询到
|
|||
|
|
if not exists then
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
|||
|
|
log.info("复刻商店 自选礼包选择参数错误3")
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
isOk=true
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
::continue::
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
if not isOk then
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
|||
|
|
log.info("复刻商店 自选礼包选择参数错误4")
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--判断金币是否满足
|
|||
|
|
if unlockNumb>playerReplicaStore.SpendingGoldNum or unlockNumb == 0 then
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
|||
|
|
log.info("复刻商店 自选礼包选择参数错误5")
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--循环查找礼包信息
|
|||
|
|
for _, value in ipairs(playerReplicaStore.packList) do
|
|||
|
|
if value.unlockNumb == unlockNumb then
|
|||
|
|
|
|||
|
|
value.selectRewardList=rewardStrList
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--红点处理
|
|||
|
|
if not self:isCanDraw(player) then
|
|||
|
|
|
|||
|
|
log.debug("复刻商店 删除小红点")
|
|||
|
|
skynet.server.msgTips:ReduceAll(player,123)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
data.unlockNumb=unlockNumb
|
|||
|
|
data.selectedList=rewardStrList
|
|||
|
|
|
|||
|
|
--记录日志
|
|||
|
|
--log.debug("复刻商店 自选礼包选择 %s",json:encode(data))
|
|||
|
|
|
|||
|
|
--返回信息
|
|||
|
|
s2cData.data = assert(pb.encode("S2CActivityReplicaStoreChoose", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--获取礼包界面信息
|
|||
|
|
function ActivityReplicaStore:OpenGift( player , c2sData , s2cData )
|
|||
|
|
c2sData.data = assert(pb.decode("C2SActivityReplicaStoreOpenGift", c2sData.data ))
|
|||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityReplicaStoreOpenGift")
|
|||
|
|
local unlockNumb=c2sData.data.unlockNumb
|
|||
|
|
local data = {}
|
|||
|
|
data.unlockNumb=unlockNumb
|
|||
|
|
data.replicaStoreItemList={}
|
|||
|
|
|
|||
|
|
--检查并且获取活动信息
|
|||
|
|
local playerReplicaStore=self:CheckDataAndGetActivity(player)
|
|||
|
|
|
|||
|
|
if playerReplicaStore == nil then
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.ActivityClosed
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--获取配置
|
|||
|
|
local cfgReplicaStoreList=self:GetReplicaStoreConfig(player,playerReplicaStore.activityId)
|
|||
|
|
local cfgReplicaStore=nil
|
|||
|
|
|
|||
|
|
for _, value in ipairs(cfgReplicaStoreList) do
|
|||
|
|
if value.unlockNumb == unlockNumb then
|
|||
|
|
cfgReplicaStore=value
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
if cfgReplicaStore == nil then
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--发奖
|
|||
|
|
for _, rewardStr in ipairs(cfgReplicaStore.storeObject) do
|
|||
|
|
|
|||
|
|
local tmp = skynet.server.common:Split( rewardStr ,"_" )
|
|||
|
|
|
|||
|
|
local goodsType=tonumber(tmp[ 1 ])
|
|||
|
|
local id = tonumber(tmp[ 2 ])
|
|||
|
|
local volute = 0
|
|||
|
|
|
|||
|
|
--是否存在
|
|||
|
|
local goodsCount=skynet.server.bag:GetGoodsCount(player,goodsType,id)
|
|||
|
|
|
|||
|
|
--头像,头像框
|
|||
|
|
if goodsCount > 0 or goodsType == dataType.GoodsType_HeadAndHeadFrame then
|
|||
|
|
local give,replaceRewardId = player:RewardConversion(id , goodsType)
|
|||
|
|
if give then
|
|||
|
|
--获取奖励配置
|
|||
|
|
local rewardCfg = skynet.server.gameConfig:GetPlayerCurCfg( player , "Reward" , replaceRewardId )
|
|||
|
|
volute = rewardCfg.voluteCoin
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
table.insert(data.replicaStoreItemList,{rewardStr=rewardStr,volute=volute})
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--记录日志
|
|||
|
|
--log.debug("复刻商店 获取礼包界面信息 %s",json:encode(data))
|
|||
|
|
|
|||
|
|
--返回信息
|
|||
|
|
s2cData.data = assert(pb.encode("S2CActivityReplicaStoreOpenGift", data))
|
|||
|
|
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 定义一个回调函数
|
|||
|
|
local function onEventFired(player , taskId , count)
|
|||
|
|
|
|||
|
|
--这里只处理金币
|
|||
|
|
if taskId ~= 42 then
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--原有处理逻辑
|
|||
|
|
ActivityReplicaStore:CostGold(player,count)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 注册事件处理函数
|
|||
|
|
taskListEvent:Register(onEventFired,"复刻商店金币任务")
|
|||
|
|
|
|||
|
|
skynet.server.activityReplicaStore = ActivityReplicaStore
|
|||
|
|
return ActivityReplicaStore
|