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