745 lines
29 KiB
Lua
745 lines
29 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 shop = require "Shop"
|
||
local CoffeeShop = oo.class(shop)
|
||
|
||
CoffeeShop.shopType = dataType.ShopType_Coffee
|
||
CoffeeShop.maxCDTime = 300 --60秒
|
||
|
||
CoffeeShop.MethodType_AD = 1 --广告
|
||
CoffeeShop.MethodType_Volute = 2 --蜗壳
|
||
|
||
--咖啡店展示
|
||
function CoffeeShop:Show( player , c2sData , s2cData )
|
||
c2sData.data = assert(pb.decode("C2SCoffeeMergeShow", c2sData.data ))
|
||
local curShop = player.gameData.shop[ self.shopType ]
|
||
local data = {}
|
||
data.supplierBoxes = curShop.supplierBoxes
|
||
data.grids = curShop.grids
|
||
data.currency = self:GetCurrency( player )
|
||
data.supplierMaxLevel = curShop.mergeMaxLevel
|
||
s2cData.cmd = pb.enum("MsgType","CMD_S2C_CoffeeMergeShow")
|
||
s2cData.data = assert(pb.encode("S2CCoffeeMergeShow", data))
|
||
--self:PringGrid( player )
|
||
end
|
||
|
||
--供应信息点击
|
||
function CoffeeShop:SupplyClick( player , c2sData , s2cData )
|
||
c2sData.data = assert(pb.decode("C2SCoffeeMergeSupplyClick", c2sData.data ))
|
||
local shopType = dataType.ShopType_Coffee
|
||
local data = {}
|
||
local type = c2sData.data.type
|
||
local isVaild = self:IsVaildSupplierBoxes( type )
|
||
if not type or not isVaild then
|
||
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
||
else
|
||
local gridIndex = self:GetFreeGrid( player )
|
||
if not gridIndex then
|
||
s2cData.code = errorInfo.ErrorCode.CoffeeShopGridFull
|
||
else
|
||
local curSupplier = self:GetSupplierBoxes( player , type )
|
||
--log.info(string.format("玩家 %d 咖啡店 类型 %d 最新数量 %d", player.userId , type , curSupplier.count))
|
||
if curSupplier and curSupplier.count >= 1 then
|
||
--数量减1,重新CD时间
|
||
curSupplier.count = curSupplier.count - 1
|
||
local timeCoefficient = skynet.server.store:GetTimeCoefficient(player , 4) --月卡权益 时间系数
|
||
curSupplier.nextRefreshTime = skynet.GetTime() + math.ceil(self.maxCDTime * timeCoefficient)
|
||
--放到格子里去
|
||
self:AddToFreeGrids( player , gridIndex , type , 1 )
|
||
|
||
--skynet.server.taskListEvent:Modify( player , 13 , 1 )
|
||
|
||
--在咖啡店生成咖啡制作材料
|
||
skynet.server.taskListEvent:Modify( player , 125 , 1 )
|
||
|
||
data.supplierBox = curSupplier
|
||
data.gridTo = self:GetGrid( player , gridIndex ) --player.gameData.shop[ self.shopType ].grids[ gridIndex ]
|
||
else
|
||
s2cData.code = errorInfo.ErrorCode.NoEnoughGoods
|
||
end
|
||
end
|
||
end
|
||
|
||
s2cData.cmd = pb.enum("MsgType","CMD_S2C_CoffeeMergeSupplyClick")
|
||
s2cData.data = assert(pb.encode("S2CCoffeeMergeSupplyClick", data))
|
||
end
|
||
|
||
--获取最新供货信息
|
||
function CoffeeShop:SupplyShow( player , c2sData , s2cData )
|
||
c2sData.data = assert(pb.decode("C2SCoffeeMergeSupplyShow", c2sData.data ))
|
||
|
||
local data = {}
|
||
local type = c2sData.data.type
|
||
local isVaild = self:IsVaildSupplierBoxes( type )
|
||
if not type or not isVaild then
|
||
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
||
else
|
||
local curSupplier = self:GetSupplierBoxes( player , type )
|
||
if curSupplier then
|
||
data.supplierBox = curSupplier
|
||
else
|
||
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
||
end
|
||
skynet.server.msgTips:Reduce( player , 72 )
|
||
end
|
||
|
||
s2cData.cmd = pb.enum("MsgType","CMD_S2C_CoffeeMergeSupplyShow")
|
||
s2cData.data = assert(pb.encode("S2CCoffeeMergeSupplyShow", data))
|
||
end
|
||
|
||
--获取最新供货信息
|
||
function CoffeeShop:Sort( player , c2sData , s2cData )
|
||
c2sData.data = assert(pb.decode("C2SCoffeeMergeSort", c2sData.data ))
|
||
local data = {}
|
||
|
||
--排序得第一优先级为type得升序(1-3,0), 第二优先级为level的降序(5-1)
|
||
local grids = player.gameData.shop[ self.shopType ].grids
|
||
table.sort( grids , function(a,b)
|
||
if a.type == b.type then
|
||
return a.level > b.level
|
||
else
|
||
return a.type < b.type
|
||
end
|
||
end)
|
||
|
||
--将有数据的格子先整理出来
|
||
local tmpGrids = {}
|
||
local count = 1
|
||
for k, v in pairs( grids ) do
|
||
if 0 ~= v.type then
|
||
table.insert( tmpGrids , { type = v.type , index = count , level = v.level })
|
||
count = count + 1
|
||
end
|
||
end
|
||
|
||
--填充剩余格子
|
||
for i = count, 30, 1 do
|
||
table.insert( tmpGrids , { type = 0 , index = i, level = 0 })
|
||
end
|
||
|
||
player.gameData.shop[ self.shopType ].grids = tmpGrids
|
||
data.grids = tmpGrids
|
||
s2cData.cmd = pb.enum("MsgType","CMD_S2C_CoffeeMergeSort")
|
||
s2cData.data = assert(pb.encode("S2CCoffeeMergeSort", data))
|
||
end
|
||
|
||
--合并
|
||
function CoffeeShop:Merge( player , c2sData , s2cData )
|
||
c2sData.data = assert(pb.decode("C2SCoffeeMergeAttempt", c2sData.data ))
|
||
local data = {}
|
||
data.addCurrencyType = dataType.CoffeeShopGoodsType_Empty
|
||
|
||
local gridFrom = c2sData.data.gridFrom
|
||
local gridTo = c2sData.data.gridTo
|
||
if not gridFrom or not gridTo or not self:IsVaildGridID( gridFrom ) or not self:IsVaildGridID( gridTo ) then
|
||
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
||
else
|
||
gridFrom = gridFrom
|
||
gridTo = gridTo
|
||
local grid1 = self:GetGrid( player , gridFrom ) --player.gameData.shop[ self.shopType ].grids[ gridFrom ]
|
||
local grid2 = self:GetGrid( player , gridTo ) --player.gameData.shop[ self.shopType ].grids[ gridTo ]
|
||
if not grid1 or not grid2 then
|
||
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
||
else
|
||
if not self:IsFreeGrid( player , gridFrom ) and self:IsFreeGrid( player , gridTo ) then
|
||
--始非空格 终为空格 就移动过去
|
||
self:MoveGrid( player , gridFrom , gridTo )
|
||
else
|
||
---始非空格 终非空格 就合成过去
|
||
if self:IsSame( player , gridFrom , gridTo ) then
|
||
--开始合成
|
||
data.addCurrencyType = self:StartMerge( player ,gridFrom , gridTo )
|
||
if dataType.CoffeeShopGoodsType_Empty ~= data.addCurrencyType then
|
||
--有货币变化,向客户端同步下最新的货币数据
|
||
local currencyData = {}
|
||
currencyData.currency = {}
|
||
currencyData.currency.coffeeBean = player.gameData.shop[ self.shopType ].currency[1]
|
||
currencyData.currency.sugar = player.gameData.shop[ self.shopType ].currency[2]
|
||
currencyData.currency.milk = player.gameData.shop[ self.shopType ].currency[3]
|
||
skynet.server.gameServer:SendMsgToUser( player.userId , "CMD_S2C_CoffeeMergeCurrency" , currencyData )
|
||
end
|
||
|
||
skynet.server.levelTask:Modify( player , 49 , 1 )
|
||
skynet.server.taskListEvent:Modify( player , 49 , 1 )
|
||
else
|
||
--交换格子
|
||
self:ExchangeGrid( player , gridFrom , gridTo )
|
||
end
|
||
end
|
||
|
||
data.gridFrom = self:GetGrid( player , gridFrom ) --player.gameData.shop[ self.shopType ].grids[ gridFrom ]
|
||
data.gridTo = self:GetGrid( player , gridTo ) --player.gameData.shop[ self.shopType ].grids[ gridTo ]
|
||
|
||
--self:PringGrid( player )
|
||
end
|
||
end
|
||
s2cData.cmd = pb.enum("MsgType","CMD_S2C_CoffeeMergeAttempt")
|
||
s2cData.data = assert(pb.encode("S2CCoffeeMergeAttempt", data))
|
||
end
|
||
|
||
--补充
|
||
function CoffeeShop:Replenish( player , c2sData , s2cData )
|
||
c2sData.data = assert(pb.decode("C2SCoffeeSupplierReplenish", c2sData.data ))
|
||
local data = {}
|
||
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg( player , "SValue")
|
||
data.addCurrencyType = dataType.CoffeeShopGoodsType_Empty
|
||
local supplierType = c2sData.data.supplierType
|
||
local methodType = c2sData.data.methodType
|
||
local isVaild = self:IsVaildSupplierBoxes( supplierType )
|
||
|
||
--玩家信息
|
||
local curSupplier = self:GetSupplierBoxes( player , supplierType )
|
||
local time = curSupplier.nextRefreshTime
|
||
local nowTime = skynet.GetTime()
|
||
if not supplierType or not methodType or not isVaild then
|
||
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
||
elseif time<=nowTime then--已经回复完毕
|
||
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
||
else
|
||
local isSuc = false
|
||
local cfgCoffeeMakingPara = cfgSValue.coffeeMakingPara
|
||
if methodType == dataType.AccelerateType_Volute then
|
||
|
||
-- 消耗玩家蜗壳币
|
||
local needVolute = 10
|
||
|
||
needVolute = math.ceil((time - nowTime) / 60 / cfgSValue.timeExchangeVoluteCoin[2] * cfgSValue.timeExchangeVoluteCoin[1])
|
||
if needVolute < 0 then--已经恢复完毕
|
||
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
||
s2cData.cmd = pb.enum("MsgType","CMD_S2C_CoffeeSupplierReplenish")
|
||
return
|
||
end
|
||
|
||
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_8")
|
||
if player:MoneyChange( dataType.MoneyType_Volute , - needVolute , eventId) then
|
||
--使用蜗壳币进行加速 修改相关数据
|
||
player.gameData.todayGain.speedUpUseCount = player.gameData.todayGain.speedUpUseCount + 1
|
||
if player.gameData.todayGain.speedUpUseCount == cfgSValue.triggerPlantPack[ 1 ] then
|
||
skynet.server.store:TriggerPack(player , skynet.server.store.TriggerPack_SpeedUp)
|
||
end
|
||
isSuc = true
|
||
end
|
||
elseif methodType == dataType.AccelerateType_AccTicket and skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Prop, 6) > 0 then
|
||
--消耗玩家一个刷新券
|
||
skynet.server.bag:RemoveGoods(player , dataType.GoodsType_Prop, 6 , 1)
|
||
isSuc = true
|
||
elseif methodType == dataType.AccelerateType_ADTicket then
|
||
if supplierType == 1 then
|
||
if skynet.server.ad:CanWatch(player, "CoffeeSupplyReplensh") and
|
||
skynet.server.ad:PayADTicket(player, "CoffeeSupplyReplensh") then
|
||
isSuc = true
|
||
end
|
||
elseif supplierType == 2 then
|
||
if skynet.server.ad:CanWatch(player, "SugarSupplyReplensh") and
|
||
skynet.server.ad:PayADTicket(player, "SugarSupplyReplensh") then
|
||
isSuc = true
|
||
end
|
||
elseif supplierType == 3 then
|
||
if skynet.server.ad:CanWatch(player, "MilkSupplyReplensh") and
|
||
skynet.server.ad:PayADTicket(player, "MilkSupplyReplensh") then
|
||
isSuc = true
|
||
end
|
||
end
|
||
elseif methodType == dataType.AccelerateType_WatchAD then
|
||
if supplierType == 1 then
|
||
if skynet.server.ad:CanWatch(player, "CoffeeSupplyReplensh") then
|
||
skynet.server.ad:Update(player, "CoffeeSupplyReplensh")
|
||
isSuc = true
|
||
end
|
||
elseif supplierType == 2 then
|
||
if skynet.server.ad:CanWatch(player, "SugarSupplyReplensh") then
|
||
skynet.server.ad:Update(player, "SugarSupplyReplensh")
|
||
isSuc = true
|
||
end
|
||
elseif supplierType == 3 then
|
||
if skynet.server.ad:CanWatch(player, "MilkSupplyReplensh") then
|
||
skynet.server.ad:Update(player, "MilkSupplyReplensh")
|
||
isSuc = true
|
||
end
|
||
end
|
||
end
|
||
|
||
if isSuc then
|
||
local replenishCount = cfgCoffeeMakingPara[1]
|
||
--激活了豪华月卡,数量增加
|
||
if skynet.server.luxuryCard:IsActivate( player ) then
|
||
replenishCount = replenishCount * cfgSValue.luxuryCardCoffeeClickModulus
|
||
end
|
||
|
||
curSupplier.count = replenishCount
|
||
data.supplierBox = curSupplier
|
||
log.debug(string.format("玩家 %d 咖啡店 补充商品 补充类型 %d 补充商品类型 %d ", player.userId , methodType , supplierType))
|
||
else
|
||
s2cData.code = errorInfo.ErrorCode.TodayMaxLimit
|
||
end
|
||
end
|
||
|
||
s2cData.cmd = pb.enum("MsgType","CMD_S2C_CoffeeSupplierReplenish")
|
||
s2cData.data = assert(pb.encode("S2CCoffeeSupplierReplenish", data))
|
||
end
|
||
|
||
--研发
|
||
function CoffeeShop:Research( player , c2sData , s2cData )
|
||
c2sData.data = assert(pb.decode("C2SCoffeeResearch", c2sData.data ))
|
||
local data = {}
|
||
data.addCurrencyType = dataType.CoffeeShopGoodsType_Empty
|
||
|
||
local curShop = player.gameData.shop[ self.shopType ]
|
||
|
||
if not curShop.guarantee then
|
||
curShop.guarantee = {0,0}
|
||
end
|
||
|
||
--检查是否有效
|
||
local isVaild = true
|
||
for i = dataType.CoffeeShopGoodsType_CoffeeBean, dataType.CoffeeShopGoodsType_Milk , 1 do
|
||
if 0 == curShop.currency[i] then
|
||
isVaild = false
|
||
break
|
||
end
|
||
end
|
||
|
||
if not isVaild then
|
||
s2cData.code = errorInfo.ErrorCode.NoEnoughGoods
|
||
else
|
||
--供应品足够,可以研发
|
||
--开始研发
|
||
--扣除货币
|
||
for i = dataType.CoffeeShopGoodsType_CoffeeBean, dataType.CoffeeShopGoodsType_Milk , 1 do
|
||
curShop.currency[i] = curShop.currency[i] - 1
|
||
end
|
||
|
||
--制作咖啡id
|
||
local coffeeId =0
|
||
|
||
--保底配置
|
||
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg(player, "SValue")
|
||
local cfgcoffeeMakingGuarantee = cfgSValue.coffeeMakingGuarantee
|
||
|
||
local cfgAllCoffeeType = skynet.server.gameConfig:GetPlayerAllCfg( player , "CoffeeType")
|
||
|
||
--是否触发新咖啡保底
|
||
local isGuarantee = false
|
||
coffeeId,isGuarantee = self:GetRandCoffee( player , self.CoffeeType_Coffee )
|
||
|
||
--是否新咖啡保底
|
||
if not isGuarantee then
|
||
|
||
--添加甄选/特调保底次数
|
||
curShop.guarantee[1],curShop.guarantee[2]=curShop.guarantee[1]+1,curShop.guarantee[2]+1
|
||
|
||
--臻选保底
|
||
if cfgcoffeeMakingGuarantee[1]- curShop.guarantee[1]<=1 then
|
||
|
||
--臻选咖啡列表
|
||
local reserveCoffeeIds = {}
|
||
|
||
for _, value in ipairs(cfgAllCoffeeType) do
|
||
if value.rarity == 2 then
|
||
table.insert(reserveCoffeeIds, value.id)
|
||
end
|
||
end
|
||
|
||
--随机甄选咖啡
|
||
coffeeId = reserveCoffeeIds[math.random(1, #reserveCoffeeIds)]
|
||
elseif cfgcoffeeMakingGuarantee[2]- curShop.guarantee[2]<=1 then --特调保底
|
||
|
||
--特调咖啡列表
|
||
local specialCoffeeIds = {}
|
||
|
||
for _, value in ipairs(cfgAllCoffeeType) do
|
||
if value.rarity == 3 then
|
||
table.insert(specialCoffeeIds, value.id)
|
||
end
|
||
end
|
||
|
||
--随机甄选咖啡
|
||
coffeeId = specialCoffeeIds[math.random(1, #specialCoffeeIds)]
|
||
else--普通制作
|
||
goto loop
|
||
end
|
||
|
||
-- 完成甄选咖啡的制作
|
||
if cfgAllCoffeeType[coffeeId].rarity == 2 then
|
||
--重置甄选保底次数
|
||
curShop.guarantee[1]=0
|
||
elseif cfgAllCoffeeType[coffeeId].rarity == 3 then
|
||
--重置特调保底次数
|
||
curShop.guarantee[2]=0
|
||
end
|
||
end
|
||
|
||
--已经获得普通咖啡就跳出
|
||
::loop::
|
||
|
||
-- 完成甄选咖啡的制作
|
||
if cfgAllCoffeeType[coffeeId].rarity == 2 then
|
||
skynet.server.taskListEvent:Modify( player , 118 , 1)
|
||
end
|
||
|
||
--研发成功
|
||
skynet.server.levelTask:Modify( player , 29 , 1 )
|
||
skynet.server.npcTask:Modify( player , 61 , 1 )
|
||
skynet.server.taskListEvent:Modify( player , 29 , 1)
|
||
skynet.server.taskListEvent:Modify( player , 11 , 1 )
|
||
skynet.server.taskListEvent:Modify( player , 61 , 1 )
|
||
|
||
--将研发的咖啡添加进背包
|
||
skynet.server.bag:AddGoods(player , dataType.GoodsType_Coffee , coffeeId , 1)
|
||
|
||
local isNew = self:GainCoffee( player , coffeeId )
|
||
|
||
local curCoffees = player.gameData.shop[ self.shopType ].coffees
|
||
--检查下能不能领取新的奖励了
|
||
local coffeeCount = #curCoffees
|
||
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg( player , "SValue")
|
||
local cfgIllustationsReward = cfgSValue.coffeeIllustationReward
|
||
for k1, v1 in pairs( curShop.rewards ) do
|
||
for k2, v2 in pairs( cfgIllustationsReward ) do
|
||
local reward = skynet.server.common:Split( v2 ,"_" )
|
||
--满足条件就设置可领状态
|
||
if k2 == v1.id and dataType.Status_NoGain == v1.status and coffeeCount >= tonumber(reward[ 1 ]) then
|
||
v1.status = dataType.Status_CanGain
|
||
skynet.server.msgTips:Add(player , 62)
|
||
end
|
||
end
|
||
end
|
||
|
||
self:CheckMsgTips( player )
|
||
skynet.server.achieveTask:Modify( player , 61 , 1)
|
||
skynet.server.taskListEvent:Modify( player , 61 , 1)
|
||
|
||
data.currency = self:GetCurrency( player )
|
||
data.inventedCoffee = coffeeId
|
||
data.isNew = isNew
|
||
end
|
||
|
||
s2cData.cmd = pb.enum("MsgType","CMD_S2C_CoffeeResearch")
|
||
s2cData.data = assert(pb.encode("S2CCoffeeResearch", data))
|
||
end
|
||
|
||
--图鉴显示
|
||
function CoffeeShop:IllustrationShow( player , c2sData , s2cData )
|
||
c2sData.data = assert(pb.decode("C2SCoffeeIllustrationShow", c2sData.data ))
|
||
|
||
local curShop = player.gameData.shop[ self.shopType ]
|
||
local data = {}
|
||
local cfg = {}
|
||
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg( player , "SValue")
|
||
local cfgIllustationsReward = cfgSValue.coffeeIllustationReward
|
||
local cfgReward = skynet.server.gameConfig:GetPlayerAllCfg( player , "Reward")
|
||
|
||
data.rewards = {}
|
||
data.currentCoffees = curShop.coffees
|
||
local coffeeCount = #curShop.coffees
|
||
|
||
for k1, v1 in pairs( curShop.rewards ) do
|
||
--能领和领取的发给客户端
|
||
if dataType.Status_CanGain == v1.status or dataType.Status_AlreadyGain == v1.status then
|
||
table.insert( data.rewards , v1 )
|
||
end
|
||
end
|
||
s2cData.cmd = pb.enum("MsgType","CMD_S2C_CoffeeIllustrationShow")
|
||
s2cData.data = assert(pb.encode("S2CCoffeeIllustrationShow", data))
|
||
end
|
||
|
||
--图鉴奖励
|
||
function CoffeeShop:IllustrationPrize( player , c2sData , s2cData )
|
||
c2sData.data = assert(pb.decode("C2SCoffeeIllustrationPrize", c2sData.data ))
|
||
local data = {}
|
||
local id = c2sData.data.id
|
||
if not id then
|
||
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
||
else
|
||
local curShop = player.gameData.shop[ self.shopType ]
|
||
data.id = id
|
||
data.awardMoney = {} --奖励的货币
|
||
data.awardGoods = {} --奖励的物品
|
||
data.rewards = {}
|
||
|
||
local rewardId = 0
|
||
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg( player , "SValue")
|
||
for k, v in pairs( cfgSValue.coffeeIllustationReward ) do
|
||
local reward = skynet.server.common:Split( v ,"_" )
|
||
if id == k then
|
||
rewardId = tonumber(reward[2])
|
||
break
|
||
end
|
||
end
|
||
|
||
for k, v in pairs( curShop.rewards ) do
|
||
if id == v.id and dataType.Status_CanGain == v.status then
|
||
v.status = dataType.Status_AlreadyGain
|
||
--发奖
|
||
local cfgReward = skynet.server.gameConfig:GetPlayerCurCfg( player , "Reward" , rewardId )
|
||
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_74")
|
||
player:GiveReward( rewardId , eventId)
|
||
table.insert( data.awardMoney , { type = dataType.GoodsType_Clovers , count = cfgReward.mapCoin })
|
||
|
||
local cfgSceneObject = cfgReward.sceneObject
|
||
for k, v in pairs(cfgSceneObject) do
|
||
local tmp = skynet.server.common:Split( v ,"_" )
|
||
local goodsType = 0
|
||
if 1 == tonumber(tmp[ 1 ]) then
|
||
goodsType = dataType.GoodsType_Furniture
|
||
elseif 2 == tonumber(tmp[ 1 ]) then
|
||
goodsType = dataType.GoodsType_Decorate
|
||
end
|
||
|
||
table.insert( data.awardGoods , { goodsType = goodsType , goodsId = tonumber(tmp[ 2 ]) , goodsCount = 1})
|
||
skynet.server.msgTips:Reduce(player , 62)
|
||
end
|
||
end
|
||
|
||
--能领和领取的发给客户端
|
||
if dataType.Status_CanGain == v.status or dataType.Status_AlreadyGain == v.status then
|
||
table.insert( data.rewards , v )
|
||
end
|
||
end
|
||
end
|
||
|
||
s2cData.cmd = pb.enum("MsgType","CMD_S2C_CoffeeIllustrationPrize")
|
||
s2cData.data = assert(pb.encode("S2CCoffeeIllustrationPrize", data))
|
||
end
|
||
|
||
--添加格子商品
|
||
function CoffeeShop:AddToFreeGrids( player , index , type , level )
|
||
local curGrid = self:GetGrid( player , index ) --player.gameData.shop[ self.shopType ].grids[ index ]
|
||
curGrid.type = type
|
||
curGrid.level = level
|
||
log.debug(string.format("玩家 %d 咖啡店 添加格子商品 格子索引 %d 商品类型 %d 等级 %d", player.userId , index , type , level ))
|
||
end
|
||
|
||
--获取空闲格子
|
||
function CoffeeShop:GetFreeGrid( player )
|
||
local grids = player.gameData.shop[ self.shopType ].grids
|
||
for i = 1, 30, 1 do
|
||
local curGrid = self:GetGrid( player , i )
|
||
if dataType.CoffeeShopGoodsType_Empty == curGrid.type then
|
||
return i
|
||
end
|
||
end
|
||
return nil
|
||
end
|
||
|
||
--设置为空闲格子
|
||
function CoffeeShop:SetFreeGrid( player , index )
|
||
local grid = self:GetGrid( player , index )
|
||
--local grid = player.gameData.shop[ self.shopType ].grids[ index ]
|
||
if grid then
|
||
grid.type = dataType.CoffeeShopGoodsType_Empty
|
||
grid.level = 0
|
||
end
|
||
end
|
||
|
||
--是否为空闲格子
|
||
function CoffeeShop:IsFreeGrid( player , index )
|
||
--local grid = player.gameData.shop[ self.shopType ].grids[ index ]
|
||
local grid = self:GetGrid( player , index )
|
||
if grid and dataType.CoffeeShopGoodsType_Empty == grid.type then
|
||
return true
|
||
else
|
||
return false
|
||
end
|
||
end
|
||
|
||
--是否相同
|
||
function CoffeeShop:IsSame( player , gridFrom , gridTo )
|
||
--local grid = self:GetGrid( player , index )
|
||
local curGridFrom = self:GetGrid( player , gridFrom )
|
||
local curGridTo = self:GetGrid( player , gridTo )
|
||
if curGridFrom.type == curGridTo.type and curGridFrom.level == curGridTo.level then
|
||
return true
|
||
else
|
||
return false
|
||
end
|
||
end
|
||
|
||
--开始合成
|
||
function CoffeeShop:StartMerge( player , gridFrom , gridTo )
|
||
local curGridFrom = self:GetGrid( player , gridFrom )
|
||
local curGridTo = self:GetGrid( player , gridTo )
|
||
local currencyType = dataType.CoffeeShopGoodsType_Empty
|
||
curGridTo.level = curGridTo.level + 1
|
||
local curShop = player.gameData.shop[ self.shopType ]
|
||
|
||
--我已经合成过最高的等级
|
||
if dataType.CoffeeShopGoodsType_CoffeeBean == curGridTo.type and curGridTo.level > curShop.mergeMaxLevel[ 1 ] then
|
||
curShop.mergeMaxLevel[ 1 ] = curGridTo.level
|
||
elseif dataType.CoffeeShopGoodsType_Sugar == curGridTo.type and curGridTo.level > curShop.mergeMaxLevel[ 2 ] then
|
||
curShop.mergeMaxLevel[ 2 ] = curGridTo.level
|
||
elseif dataType.CoffeeShopGoodsType_Milk == curGridTo.type and curGridTo.level > curShop.mergeMaxLevel[ 3 ] then
|
||
curShop.mergeMaxLevel[ 3 ] = curGridTo.level
|
||
end
|
||
|
||
if 6 == curGridTo.level then
|
||
--合成了最高等级
|
||
for k, v in pairs( curShop.currency ) do
|
||
if curGridTo.type == k then
|
||
curShop.currency[ k ] = curShop.currency[ k ] + 1
|
||
curShop.mergeCount = curShop.mergeCount + 1
|
||
currencyType = k
|
||
break
|
||
end
|
||
end
|
||
|
||
self:SetFreeGrid( player , gridFrom )
|
||
self:SetFreeGrid( player , gridTo )
|
||
self:CheckMsgTips( player )
|
||
else
|
||
self:SetFreeGrid( player , gridFrom )
|
||
end
|
||
|
||
return currencyType
|
||
end
|
||
|
||
--移动格子
|
||
function CoffeeShop:MoveGrid( player , gridFrom , gridTo )
|
||
local curGridFrom = self:GetGrid( player , gridFrom )
|
||
local curGridTo = self:GetGrid( player , gridTo )
|
||
curGridTo.type = curGridFrom.type
|
||
curGridTo.level = curGridFrom.level
|
||
--清空原格子
|
||
self:SetFreeGrid( player , gridFrom )
|
||
end
|
||
|
||
--交换格子
|
||
function CoffeeShop:ExchangeGrid( player , gridFrom , gridTo )
|
||
local curGridFrom = self:GetGrid( player , gridFrom )
|
||
local curGridTo = self:GetGrid( player , gridTo )
|
||
curGridTo.type , curGridFrom.type = curGridFrom.type , curGridTo.type
|
||
curGridTo.level , curGridFrom.level = curGridFrom.level , curGridTo.level
|
||
end
|
||
|
||
--获取供应端信息
|
||
function CoffeeShop:GetSupplierBoxes( player , type )
|
||
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg( player , "SValue")
|
||
local replenishCount = cfgSValue.coffeeMakingPara[1]
|
||
|
||
--激活了豪华月卡,数量增加
|
||
if skynet.server.luxuryCard:IsActivate( player ) then
|
||
replenishCount = replenishCount * cfgSValue.luxuryCardCoffeeClickModulus
|
||
end
|
||
|
||
for k, v in pairs( player.gameData.shop[ self.shopType ].supplierBoxes ) do
|
||
if type == v.type then
|
||
--如果CD时间到了,就给他充满
|
||
if skynet.GetTime() > v.nextRefreshTime then
|
||
v.count = replenishCount
|
||
end
|
||
return v
|
||
end
|
||
end
|
||
return nil
|
||
end
|
||
|
||
--获取当前货币
|
||
function CoffeeShop:GetCurrency( player )
|
||
local curShop = player.gameData.shop[ self.shopType ]
|
||
local currency = {}
|
||
currency.coffeeBean = curShop.currency[1]
|
||
currency.sugar = curShop.currency[2]
|
||
currency.milk = curShop.currency[3]
|
||
return currency
|
||
end
|
||
|
||
function CoffeeShop:GetGrid( player , gridIndex )
|
||
for k, v in pairs( player.gameData.shop[ self.shopType ].grids ) do
|
||
if gridIndex == v.index then
|
||
return v
|
||
end
|
||
end
|
||
end
|
||
|
||
--是否有效的补充盒
|
||
function CoffeeShop:IsVaildSupplierBoxes( type )
|
||
if nil == type or type < dataType.CoffeeShopGoodsType_CoffeeBean or type > dataType.CoffeeShopGoodsType_Milk then
|
||
return false
|
||
end
|
||
return true
|
||
end
|
||
|
||
--是否有效的格子ID
|
||
function CoffeeShop:IsVaildGridID( id )
|
||
if nil == id or id < 1 and id >= 30 then
|
||
return false
|
||
end
|
||
return true
|
||
end
|
||
|
||
--检查是否有红点
|
||
function CoffeeShop:CheckMsgTips( player )
|
||
local curShop = player.gameData.shop[ self.shopType ]
|
||
|
||
--检查是否有足购的货币
|
||
local isEnough = true
|
||
for k, v in pairs( curShop.currency ) do
|
||
if curShop.currency[ k ] <= 0 then
|
||
isEnough = false
|
||
break
|
||
end
|
||
end
|
||
|
||
if isEnough then
|
||
skynet.server.msgTips:Reset( player , 67 )
|
||
skynet.server.msgTips:Add( player , 67 )
|
||
else
|
||
skynet.server.msgTips:Reduce( player , 67 )
|
||
end
|
||
end
|
||
|
||
--获得咖啡
|
||
function CoffeeShop:GainCoffee( player , coffeeId )
|
||
--如果背包中有 而对应的图鉴未解锁 则修改对应数据
|
||
local curShop = player.gameData.shop[ self.shopType ]
|
||
if coffeeId and curShop then
|
||
--看下是不是新咖啡
|
||
local isNew = true
|
||
for k, v in pairs( curShop.coffees ) do
|
||
if coffeeId == v then
|
||
isNew = false
|
||
break
|
||
end
|
||
end
|
||
|
||
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_79")
|
||
local curCfgCoffeeType = skynet.server.gameConfig:GetPlayerCurCfg( player , "CoffeeType" , coffeeId )
|
||
skynet.server.npcTask:Modify( player , 98 , 1 , nil , coffeeId )
|
||
skynet.server.taskListEvent:Modify( player , 98 , 1)
|
||
|
||
if isNew then
|
||
curShop.noNewCoffeeCount = 0
|
||
--解锁该咖啡图鉴
|
||
table.insert(curShop.coffees , coffeeId )
|
||
--发放首次制作奖励
|
||
player:GiveRewardNpc( curCfgCoffeeType.inventReward , 4 , eventId )
|
||
else
|
||
curShop.noNewCoffeeCount = curShop.noNewCoffeeCount + 1
|
||
--发放重复制作奖励
|
||
player:GiveRewardNpc( curCfgCoffeeType.rewardId , 4 , eventId )
|
||
end
|
||
|
||
player:AddExpForType( 8 )
|
||
return isNew
|
||
else
|
||
return false
|
||
end
|
||
end
|
||
|
||
--打印格式数据
|
||
function CoffeeShop:PringGrid( player )
|
||
local grids = player.gameData.shop[ self.shopType ].grids
|
||
local text = ""
|
||
for i = 1,30 do
|
||
text = text .. string.format( "%d %d %d | ", grids[i].index , grids[i].type , grids[i].level )
|
||
end
|
||
text = string.format("玩家 %d 进入咖啡店数据 " , player.userId ) .. text
|
||
log.info(text)
|
||
end
|
||
|
||
skynet.server.coffeeShop = CoffeeShop
|
||
return CoffeeShop |