HomeServer/Server/AllServer/GameServer/Group/GroupGardenShop.lua

240 lines
9.8 KiB
Lua
Raw Normal View History

2024-11-20 15:41:09 +08:00
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 group = require "Group"
local GroupGardenShop = oo.class(group)
function GroupGardenShop:Init()
end
-- 初始化园艺铺子数据
function GroupGardenShop:InitData(player)
local cfgGarden = skynet.server.gameConfig:GetPlayerAllCfg(player, "Garden") -- 园艺铺子信息
-- 园艺铺子相关数据
player.gameData.todayGain.gardenInfo = {}
-- 园艺铺子数据赋值
for k, v in pairs(cfgGarden) do
local count = v.id
player.gameData.todayGain.gardenInfo[count] = {}
player.gameData.todayGain.gardenInfo[count].id = count -- 奖励id
player.gameData.todayGain.gardenInfo[count].dailyLimit = {v.dailyLimit, 0} -- 兑换限制 例如 {3,1} 3 本日可兑换次数 1 本日已兑换次数
player.gameData.todayGain.gardenInfo[count].contributeValue = v.contributeValue -- 贡献币需求兑换数
player.gameData.todayGain.gardenInfo[count].communityShop = v.communityShop -- 园艺铺子类别
player.gameData.todayGain.gardenInfo[count].unlock = false -- 园艺铺子家具是否解锁
end
self:GroupGardenShopSend(player)
end
-- 初始化园艺铺子兑换时间
function GroupGardenShop:InitTime(player)
local cfgGarden = skynet.server.gameConfig:GetPlayerAllCfg(player, "Garden") -- 园艺铺子信息
for k, v in pairs(cfgGarden) do
local GardenTime = skynet.server.common:DeepCopy(cfgGarden[v.id])
-- 兑换开始时间
if v.startTime == nil or v.startTime == "" or v.startTime == 0 then
GardenTime.startTime = 0
else
GardenTime.startTime = skynet.server.common:GetTime(v.startTime)
end
-- 兑换结束时间
if v.endTime == nil or v.endTime == "" or v.endTime == 0 then
GardenTime.endTime = 0
else
GardenTime.endTime = skynet.server.common:GetTime(v.endTime)
end
end
end
-- 园艺铺子解锁
function GroupGardenShop:UnlockGarden(player)
local myPartnerId = player.gameData.partner.id
local curDetail = skynet.server.personal:GetDetail(myPartnerId)
if not curDetail then
return
end
if curDetail.groupId and "" == curDetail.groupId then
return
end
local groupId = curDetail.groupId
-- 判断家园是否解锁
if not self:IsExistGroup(groupId) then
return
end
local curGroup = self:GetGroup(groupId)
if not curGroup then
return
end
local communityLevel = curGroup.communityLevel or 1 -- 家园等级
-- 根据家园等级获取解锁家具
local cfgAllCommunity = skynet.server.gameConfig:GetPlayerAllCfg(player, "Community")
for i = 1, communityLevel, 1 do
for k, v in pairs(cfgAllCommunity[i].unlockGardenStuff) do
if player.gameData.todayGain.gardenInfo[v].unlock == false then
player.gameData.todayGain.gardenInfo[v].unlock = true
end
end
end
end
-- 园艺铺子发送消息
function GroupGardenShop:GroupGardenShopSend(player)
local data = {}
local cfgGarden = skynet.server.gameConfig:GetPlayerAllCfg(player, "Garden") -- 园艺铺子信息
self:UnlockGarden(player)
data.gardenInfos = {}
-- 处理时间
local nowTime = skynet.GetTime()
local startTime = 0
local endTime = 0
for k, v in pairs(cfgGarden) do
if v.startTime == nil or v.startTime == "" then
startTime = 0
endTime = 0
else
startTime = skynet.server.common:GetTime(v.startTime)
endTime = skynet.server.common:GetTime(v.endTime)
end
if startTime == 0 or endTime == 0 or nowTime >= startTime and nowTime <= endTime then
for k1, v1 in pairs(player.gameData.todayGain.gardenInfo) do
if v.id == v1.id and v1.unlock then
table.insert(data.gardenInfos, {
gardenId = v.id,
gardenCount = v1.dailyLimit[2],
gardenType = v1.communityShop,
gardenStartTime = startTime,
gardenEndTime = endTime
})
end
end
end
end
skynet.server.gameServer:SendMsgToUser(player.userId, "CMD_S2C_GroupGardenShopShow", data)
end
-- 园艺铺子展示
function GroupGardenShop:GroupGardenShopShow(player, c2sData, s2cData)
c2sData.data = assert(pb.decode("C2SGroupGardenShopShow", c2sData.data))
local data = {}
local cfgGarden = skynet.server.gameConfig:GetPlayerAllCfg(player, "Garden") -- 园艺铺子信息
self:UnlockGarden(player)
data.gardenInfos = {}
-- 处理时间
local nowTime = skynet.GetTime()
local startTime = 0
local endTime = 0
for k, v in pairs(cfgGarden) do
if v.startTime == nil or v.startTime == "" then
startTime = 0
endTime = 0
else
startTime = skynet.server.common:GetTime(v.startTime)
endTime = skynet.server.common:GetTime(v.endTime)
end
if startTime == 0 or endTime == 0 or nowTime >= startTime and nowTime <= endTime then
for k1, v1 in pairs(player.gameData.todayGain.gardenInfo) do
if v.id == v1.id and v1.unlock then
table.insert(data.gardenInfos, {
gardenId = v.id,
gardenCount = v1.dailyLimit[2],
gardenType = v1.communityShop,
gardenStartTime = startTime,
gardenEndTime = endTime
})
end
end
end
end
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_GroupGardenShopShow")
s2cData.data = assert(pb.encode("S2CGroupGardenShopShow", data))
end
-- 园艺铺子兑换
function GroupGardenShop:GroupGardenShopRedeem(player, c2sData, s2cData)
c2sData.data = assert(pb.decode("C2SGroupGardenShopRedeem", c2sData.data))
local data = {}
local gardenId = c2sData.data.gardenId
local cfgGarden = skynet.server.gameConfig:GetPlayerAllCfg(player, "Garden") -- 园艺铺子信息
local nowTime = skynet.GetTime()
data.gardenInfos = {}
-- 判断当前时间是否满足兑换时间
local canGetPay = false
local startTime = 0
local endTime = 0
if cfgGarden[gardenId].startTime == nil or cfgGarden[gardenId].startTime == "" then
startTime = 0
endTime = 0
else
startTime = skynet.server.common:GetTime(cfgGarden[gardenId].startTime)
endTime = skynet.server.common:GetTime(cfgGarden[gardenId].endTime)
end
if startTime == 0 or endTime == 0 or nowTime >= startTime and nowTime <= endTime then
-- 判断是否满足每日消耗数
if player.gameData.todayGain.gardenInfo[gardenId].dailyLimit[1] >
player.gameData.todayGain.gardenInfo[gardenId].dailyLimit[2] or
player.gameData.todayGain.gardenInfo[gardenId].dailyLimit[1] == 0 then
-- 判断贡献币是否足够消耗数量
local eventId = pb.enum("EnumMoneyChangeEventID", "EventID_42")
local isSuc = player:MoneyChange(pb.enum("EnumGoodsType", "ContributeCoin", eventId),
-cfgGarden[gardenId].contributeValue)
if isSuc then
canGetPay = true
player.gameData.todayGain.gardenInfo[gardenId].dailyLimit[2] =
player.gameData.todayGain.gardenInfo[gardenId].dailyLimit[2] + 1
else
canGetPay = false
end
end
end
-- if cfgGarden[gardenId].startTime == 0 or cfgGarden[gardenId].endTime == 0 or nowTime >=
-- cfgGarden[gardenId].startTime and nowTime <= cfgGarden[gardenId].endTime then
-- -- 判断是否满足每日消耗数
-- if player.gameData.todayGain.gardenInfo[gardenId].dailyLimit[1] >
-- player.gameData.todayGain.gardenInfo[gardenId].dailyLimit[2] or
-- player.gameData.todayGain.gardenInfo[gardenId].dailyLimit[1] == 0 then
-- -- 判断贡献币是否足够消耗数量
-- local eventId = pb.enum("EnumMoneyChangeEventID", "EventID_42")
-- local isSuc = player:MoneyChange(pb.enum("EnumGoodsType", "ContributeCoin", eventId),
-- -player.gameData.todayGain.gardenInfo[gardenId].contributeValue)
-- -- local isSuc = player:MoneyChange(pb.enum("EnumGoodsType", "ContributeCoin"), -20)
-- if isSuc then
-- canGetPay = true
-- player.gameData.todayGain.gardenInfo[gardenId].dailyLimit[2] =
-- player.gameData.todayGain.gardenInfo[gardenId].dailyLimit[2] + 1
-- else
-- canGetPay = false
-- end
-- end
-- end
-- 是否完成扣币
if canGetPay then
data.gardenInfos = {
gardenType = player.gameData.todayGain.gardenInfo[gardenId].communityShop,
gardenId = gardenId, -- 商品ID
gardenCount = player.gameData.todayGain.gardenInfo[gardenId].dailyLimit[2],
gardenStartTime = startTime,
gardenEndTime = endTime
}
skynet.server.levelTask:Modify(player, 91, 1)
skynet.server.taskListEvent:Modify( player ,91, 1)
skynet.server.taskListEvent:Modify( player ,34, 1)
skynet.server.taskListEvent:Modify( player ,16, 1)
-- 将兑换后的景观存入背包
skynet.server.bag:AddGoods(player, dataType.GoodsType_Garden, data.gardenInfos.gardenId, 1)
player:AddExpCount(20)
end
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_GroupGardenShopRedeem")
s2cData.data = assert(pb.encode("S2CGroupGardenShopRedeem", data))
end
skynet.server.groupGardenShop = GroupGardenShop
return GroupGardenShop