1087 lines
51 KiB
Lua
1087 lines
51 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 PetShop = oo.class(shop)
|
|||
|
|
|
|||
|
|
PetShop.shopType = dataType.ShopType_PetShop
|
|||
|
|
|
|||
|
|
function PetShop:Init()
|
|||
|
|
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 初始化宠物店数据
|
|||
|
|
function PetShop:InitData(player, shopType)
|
|||
|
|
local petStudy = skynet.server.gameConfig:GetPlayerAllCfg(player, "PetStudy") -- 宠物店学习数据
|
|||
|
|
local petStore = skynet.server.gameConfig:GetPlayerAllCfg(player, "PetStore") -- 宠物店商店数据
|
|||
|
|
local petTravel = skynet.server.gameConfig:GetPlayerAllCfg(player, "PetTravel") -- 宠物店出游数据
|
|||
|
|
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg(player, "SValue")
|
|||
|
|
|
|||
|
|
local petShop = player.gameData.shop
|
|||
|
|
-- 宠物店学习相关数据
|
|||
|
|
petShop[shopType] = {}
|
|||
|
|
petShop[shopType].petStudy = {}
|
|||
|
|
petShop[shopType].petTravel = {}
|
|||
|
|
petShop[shopType].petShopGoodInfo = {}
|
|||
|
|
petShop[shopType].courseType = {1, 2, 3} -- 宠物完成的课程类型 1=语言课 2=体育课 3=魔法课
|
|||
|
|
petShop[shopType].petAward = {}
|
|||
|
|
|
|||
|
|
-- 学习等级studyLvl {1,2,3,4} 1=幼级 2=初级 3=高级 4=顶级
|
|||
|
|
-- 学习阶段studyStage {1,2,3,4,5} 1= Ⅰ阶 2=Ⅱ阶 3=Ⅲ阶 4=Ⅳ阶 5= Ⅴ阶
|
|||
|
|
|
|||
|
|
-- 宠物店学习数据赋值
|
|||
|
|
for k, v in pairs(petShop[shopType].courseType) do
|
|||
|
|
petShop[shopType].petStudy[v] = {}
|
|||
|
|
petShop[shopType].petStudy[v].studyType = v -- 课程的类型
|
|||
|
|
petShop[shopType].petStudy[v].studyLvl = 1 -- 学习完成的等级
|
|||
|
|
petShop[shopType].petStudy[v].studyStage = 1 -- 学习完成的阶段
|
|||
|
|
petShop[shopType].petStudy[v].studyExp = 0 -- 累计经验值
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 宠物奖励信息数据赋值
|
|||
|
|
for k, v in pairs(petStudy) do
|
|||
|
|
local count = v.id
|
|||
|
|
petShop[shopType].petAward[count] = {}
|
|||
|
|
petShop[shopType].petAward[count].studyType = v.studyType -- 课程的类型
|
|||
|
|
petShop[shopType].petAward[count].studyLvl = v.studyLvl -- 学习完成的等级
|
|||
|
|
petShop[shopType].petAward[count].studyStage = v.studyStage -- 学习完成的等级
|
|||
|
|
petShop[shopType].petAward[count].status = 0 -- 宠物学习进阶奖励领取状态 0-未解锁 1-待领取 2-已领取
|
|||
|
|
petShop[shopType].petAward[count].rewardId = v.rewardId
|
|||
|
|
petShop[shopType].petAward[count].interactionId = v.interactionId
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 宠物出游信息数据赋值
|
|||
|
|
for k, v in pairs(petTravel) do
|
|||
|
|
local count = v.id
|
|||
|
|
petShop[shopType].petTravel[count] = {}
|
|||
|
|
petShop[shopType].petTravel[count].id = count -- 地点id
|
|||
|
|
petShop[shopType].petTravel[count].status = 0 -- 宠物出游状态 0未出游 1出游中 2出游结束待领取奖励
|
|||
|
|
petShop[shopType].petTravel[count].time = v.time -- 出游时间
|
|||
|
|
petShop[shopType].petTravel[count].finishTime = 0 -- 下次可以出游的时间戳 初始为0
|
|||
|
|
petShop[shopType].petTravel[count].happyEncounter = 1 -- 是否触发奇遇 1未触发 2 触发
|
|||
|
|
-- if v.locationType == 0 then
|
|||
|
|
-- petShop[shopType].petTravel[count].unlockLocation = 1 -- 是否解锁出游地点 0 未解锁 1已解锁
|
|||
|
|
-- else
|
|||
|
|
-- petShop[shopType].petTravel[count].unlockLocation = 0 -- 是否解锁出游地点 0 未解锁 1已解锁
|
|||
|
|
-- end
|
|||
|
|
if v.locationType == 0 then
|
|||
|
|
petShop[shopType].petTravel[count].unlockLocation = {
|
|||
|
|
status = 1,
|
|||
|
|
isNew = false
|
|||
|
|
} -- 是否解锁出游地点 0 未解锁 1已解锁
|
|||
|
|
else
|
|||
|
|
petShop[shopType].petTravel[count].unlockLocation = {
|
|||
|
|
status = 0,
|
|||
|
|
isNew = false
|
|||
|
|
} -- 是否解锁出游地点 0 未解锁 1已解锁
|
|||
|
|
end
|
|||
|
|
petShop[shopType].isNew = true
|
|||
|
|
end
|
|||
|
|
-- 宠物店商店数据赋值
|
|||
|
|
for k, v in pairs(petStore) do
|
|||
|
|
local count = v.id
|
|||
|
|
petShop[shopType].petShopGoodInfo[count] = {}
|
|||
|
|
petShop[shopType].petShopGoodInfo[count].id = count -- 商品id
|
|||
|
|
petShop[shopType].petShopGoodInfo[count].buyTimes = 0 -- 购买次数
|
|||
|
|
petShop[shopType].petShopGoodInfo[count].packLimit = v.packLimit -- 礼包对应的购买次数 例 [1,2] (1:日限购 2:周限购 3:限购购买) 每日限购2次
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 宠物盲盒状态赋值
|
|||
|
|
petShop[shopType].blindBoxStatus = 1 -- 盲盒状态0-不可领取 1-可领取
|
|||
|
|
petShop[shopType].nextFreeTime = 0 -- 盲盒下次领取时间
|
|||
|
|
skynet.server.msgTips:Add(player, 84)
|
|||
|
|
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 玩家登录调用
|
|||
|
|
function PetShop:CheckNew(player)
|
|||
|
|
local petShop = player.gameData.shop
|
|||
|
|
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg(player, "SValue")
|
|||
|
|
local petTravel = skynet.server.gameConfig:GetPlayerAllCfg(player, "PetTravel")
|
|||
|
|
if petShop[self.shopType] then
|
|||
|
|
-- 根据npc等级判断出游地点解锁
|
|||
|
|
local curNpc = player.gameData.friend
|
|||
|
|
for k, v in pairs(curNpc) do
|
|||
|
|
if v.favorabilityLevel >= cfgSValue.petTravelRelation then
|
|||
|
|
for k1, v1 in pairs(petTravel) do
|
|||
|
|
if v.npcId == v1.npcId and v1.location > 5 then
|
|||
|
|
for k2, v2 in ipairs(petShop[self.shopType].petTravel) do
|
|||
|
|
if v2.id == v1.id and v2.unlockLocation.status == 0 then
|
|||
|
|
v2.unlockLocation = {
|
|||
|
|
status = 1,
|
|||
|
|
isNew = true
|
|||
|
|
}
|
|||
|
|
skynet.server.msgTips:Add(player, 85)
|
|||
|
|
petShop[self.shopType].isNew = true
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 检查宠物盲盒红点
|
|||
|
|
if petShop[self.shopType] then
|
|||
|
|
if skynet.server.msgTips:GetOneTips(player, 83).count == 0 then
|
|||
|
|
if petShop[self.shopType].blindBoxStatus == 1 or petShop[self.shopType].blindBoxStatus == 0 and
|
|||
|
|
skynet.GetTime() >= petShop[self.shopType].nextFreeTime then
|
|||
|
|
skynet.server.msgTips:Reset(player, 83)
|
|||
|
|
skynet.server.msgTips:Add(player, 83)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 宠物店出游奖励可领取增加红点
|
|||
|
|
if petShop[self.shopType].petTravel then
|
|||
|
|
for k, v in pairs(petShop[self.shopType].petTravel) do
|
|||
|
|
-- 如果CD时间到了,就给红点
|
|||
|
|
if skynet.server.msgTips:GetOneTips(player, 82).count == 0 then
|
|||
|
|
if v.status == 2 or v.status == 1 and skynet.GetTime() >= v.finishTime then
|
|||
|
|
skynet.server.msgTips:Reset(player, 82)
|
|||
|
|
skynet.server.msgTips:Add(player, 82)
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 进入宠物店
|
|||
|
|
function PetShop:PetShopEnter(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SPetShopEnter", c2sData.data))
|
|||
|
|
local data = {}
|
|||
|
|
local petShop = player.gameData.shop
|
|||
|
|
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg(player, "SValue")
|
|||
|
|
local petTravel = skynet.server.gameConfig:GetPlayerAllCfg(player, "PetTravel")
|
|||
|
|
-- 首次进入宠物店的任务
|
|||
|
|
skynet.server.levelTask:Modify(player, 51, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,51, 1)
|
|||
|
|
-- 根据npc等级判断出游地点解锁
|
|||
|
|
local curNpc = player.gameData.friend
|
|||
|
|
for k, v in pairs(curNpc) do
|
|||
|
|
if v.favorabilityLevel >= cfgSValue.petTravelRelation then
|
|||
|
|
for k1, v1 in pairs(petTravel) do
|
|||
|
|
if v.npcId == v1.npcId and v1.location > 5 then
|
|||
|
|
for k2, v2 in ipairs(petShop[self.shopType].petTravel) do
|
|||
|
|
if v2.id == v1.id and v2.unlockLocation.status == 0 then
|
|||
|
|
v2.unlockLocation = {
|
|||
|
|
status = 1,
|
|||
|
|
isNew = true
|
|||
|
|
}
|
|||
|
|
skynet.server.msgTips:Add(player, 85)
|
|||
|
|
petShop[self.shopType].isNew = true
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- for k, v in pairs(player.gameData.bag) do
|
|||
|
|
-- if dataType.GoodsType_PetVoice == v.type then
|
|||
|
|
-- log.info('语音数量', skynet.server.common:TableToString(v))
|
|||
|
|
-- end
|
|||
|
|
-- if dataType.GoodsType_PetAction == v.type then
|
|||
|
|
-- log.info('动作数量', skynet.server.common:TableToString(v))
|
|||
|
|
-- end
|
|||
|
|
-- end
|
|||
|
|
-- log.info('红点数量' .. skynet.server.common:TableToString(skynet.server.msgTips:GetOneTips(player, 84).count))
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_PetShopEnter")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CPetShopEnter", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 宠物学习展示
|
|||
|
|
function PetShop:PetCourseShow(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SPetCourseShow", c2sData.data))
|
|||
|
|
local petShop = player.gameData.shop
|
|||
|
|
local courseType = c2sData.data.courseType -- 课程种类
|
|||
|
|
local data = {}
|
|||
|
|
if petShop[self.shopType] then
|
|||
|
|
data.petStudyInfo = self:GetShopData(player, courseType)
|
|||
|
|
end
|
|||
|
|
-- log.info('宠物学习展示' .. skynet.server.common:TableToString(data))
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_PetCourseShow")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CPetCourseShow", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 获取商店数据
|
|||
|
|
function PetShop:GetShopData(player, courseType)
|
|||
|
|
local shopInfo = {}
|
|||
|
|
local petShop = player.gameData.shop
|
|||
|
|
shopInfo.courseType = courseType
|
|||
|
|
shopInfo.courseLevel = petShop[self.shopType].petStudy[courseType].studyLvl
|
|||
|
|
shopInfo.courseStage = petShop[self.shopType].petStudy[courseType].studyStage
|
|||
|
|
shopInfo.courseExp = petShop[self.shopType].petStudy[courseType].studyExp
|
|||
|
|
return shopInfo
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 宠物店学习
|
|||
|
|
function PetShop:PetCourseStudy(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SPetCourseStudy", c2sData.data))
|
|||
|
|
local petShop = player.gameData.shop[self.shopType]
|
|||
|
|
local courseType = c2sData.data.courseType
|
|||
|
|
local bookType = c2sData.data.bookType
|
|||
|
|
local bookCount = c2sData.data.bookCount
|
|||
|
|
local petStudy = skynet.server.gameConfig:GetPlayerAllCfg(player, "PetStudy")
|
|||
|
|
local petStore = skynet.server.gameConfig:GetPlayerAllCfg(player, "PetStore")
|
|||
|
|
local petTravel = skynet.server.gameConfig:GetPlayerAllCfg(player, "PetTravel")
|
|||
|
|
local data = {}
|
|||
|
|
data.petStudyInfo = {}
|
|||
|
|
-- 判断玩家背包里的资料书是否足够
|
|||
|
|
local porpId = nil
|
|||
|
|
if bookType == 1 then
|
|||
|
|
porpId = 13
|
|||
|
|
elseif bookType == 2 then
|
|||
|
|
porpId = 14
|
|||
|
|
elseif bookType == 3 then
|
|||
|
|
porpId = 15
|
|||
|
|
end
|
|||
|
|
local isSuc = false
|
|||
|
|
-- 判断没有满级扣书
|
|||
|
|
if petShop.petStudy[courseType].studyStage <= 5 and petShop.petStudy[courseType].studyLvl <= 4 then
|
|||
|
|
if skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Prop, porpId) >= bookCount then
|
|||
|
|
-- 扣除背包经验书
|
|||
|
|
skynet.server.bag:RemoveGoods(player, dataType.GoodsType_Prop, porpId, bookCount)
|
|||
|
|
isSuc = true
|
|||
|
|
end
|
|||
|
|
else
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.petStudyMax
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
if isSuc then
|
|||
|
|
-- 增加玩家经验值
|
|||
|
|
if bookCount and bookType then
|
|||
|
|
for i = 1, bookCount, 1 do
|
|||
|
|
if bookType == 1 then
|
|||
|
|
player:AddExpForType(18, 1)
|
|||
|
|
elseif bookType == 2 then
|
|||
|
|
player:AddExpForType(18, 2)
|
|||
|
|
elseif bookType == 3 then
|
|||
|
|
player:AddExpForType(18, 3)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,36, 1)
|
|||
|
|
-- 客户端发送过来的经验数量判断学习升级进阶
|
|||
|
|
local allExp = petStore[bookType].goodsValue * bookCount
|
|||
|
|
petShop.petStudy[courseType].studyExp = allExp + petShop.petStudy[courseType].studyExp
|
|||
|
|
for k, v in pairs(petStudy) do
|
|||
|
|
if courseType == v.studyType and petShop.petStudy[courseType].studyLvl == v.studyLvl and
|
|||
|
|
petShop.petStudy[courseType].studyStage == v.studyStage then
|
|||
|
|
if petShop.petStudy[courseType].studyExp - v.studyExp >= 0 then
|
|||
|
|
if petShop.petStudy[courseType].studyStage < 5 then
|
|||
|
|
for k1, v1 in pairs(petShop.petAward) do
|
|||
|
|
if petShop.petStudy[courseType].studyStage == v1.studyStage and
|
|||
|
|
petShop.petStudy[courseType].studyLvl == v1.studyLvl and courseType == v1.studyType then
|
|||
|
|
v1.status = 1
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- 升一阶
|
|||
|
|
petShop.petStudy[courseType].studyStage = petShop.petStudy[courseType].studyStage + 1
|
|||
|
|
petShop.petStudy[courseType].studyExp = petShop.petStudy[courseType].studyExp - v.studyExp
|
|||
|
|
skynet.server.levelTask:Modify(player, 70, 1)
|
|||
|
|
skynet.server.achieveTask:Modify(player, 104, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,70, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,104, 1)
|
|||
|
|
|
|||
|
|
-- 成就任务
|
|||
|
|
if 1 == courseType then
|
|||
|
|
skynet.server.achieveTask:Modify(player, 107, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,107, 1)
|
|||
|
|
elseif 2 == courseType then
|
|||
|
|
skynet.server.achieveTask:Modify(player, 106, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,106, 1)
|
|||
|
|
elseif 3 == courseType then
|
|||
|
|
skynet.server.achieveTask:Modify(player, 105, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,105, 1)
|
|||
|
|
end
|
|||
|
|
skynet.server.msgTips:Add(player, 81)
|
|||
|
|
else
|
|||
|
|
if petShop.petStudy[courseType].studyLvl < 4 then
|
|||
|
|
for k1, v1 in pairs(petShop.petAward) do
|
|||
|
|
if petShop.petStudy[courseType].studyStage == v1.studyStage and
|
|||
|
|
petShop.petStudy[courseType].studyLvl == v1.studyLvl and courseType == v1.studyType then
|
|||
|
|
v1.status = 1
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- 升一级
|
|||
|
|
petShop.petStudy[courseType].studyLvl = petShop.petStudy[courseType].studyLvl + 1
|
|||
|
|
petShop.petStudy[courseType].studyExp = petShop.petStudy[courseType].studyExp - v.studyExp
|
|||
|
|
petShop.petStudy[courseType].studyStage = 1
|
|||
|
|
skynet.server.levelTask:Modify(player, 70, 1)
|
|||
|
|
skynet.server.achieveTask:Modify(player, 104, 1)
|
|||
|
|
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,70, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,104, 1)
|
|||
|
|
skynet.server.msgTips:Add(player, 81)
|
|||
|
|
|
|||
|
|
-- 成就任务
|
|||
|
|
if 1 == courseType then
|
|||
|
|
skynet.server.achieveTask:Modify(player, 107, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,107, 1)
|
|||
|
|
elseif 2 == courseType then
|
|||
|
|
skynet.server.achieveTask:Modify(player, 106, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,106, 1)
|
|||
|
|
elseif 3 == courseType then
|
|||
|
|
skynet.server.achieveTask:Modify(player, 105, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,105, 1)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- npc任务
|
|||
|
|
if 1 == courseType and petShop.petStudy[courseType].studyLvl == 3 then
|
|||
|
|
skynet.server.npcTask:Modify(player, 107, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,107, 1)
|
|||
|
|
elseif 2 == courseType and petShop.petStudy[courseType].studyLvl == 3 then
|
|||
|
|
skynet.server.npcTask:Modify(player, 108, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,108, 1)
|
|||
|
|
elseif 3 == courseType and petShop.petStudy[courseType].studyLvl == 3 then
|
|||
|
|
skynet.server.npcTask:Modify(player, 109, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,109, 1)
|
|||
|
|
end
|
|||
|
|
else
|
|||
|
|
-- 等级已满
|
|||
|
|
petShop.petStudy[courseType].studyExp = 40000
|
|||
|
|
for k1, v1 in pairs(petShop.petAward) do
|
|||
|
|
if petShop.petStudy[courseType].studyStage == v1.studyStage and
|
|||
|
|
petShop.petStudy[courseType].studyLvl == v1.studyLvl and courseType == v1.studyType then
|
|||
|
|
v1.status = 1
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
skynet.server.levelTask:Modify(player, 70, 1)
|
|||
|
|
skynet.server.achieveTask:Modify(player, 104, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,70, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,104, 1)
|
|||
|
|
|
|||
|
|
-- 成就任务
|
|||
|
|
if 1 == courseType then
|
|||
|
|
skynet.server.achieveTask:Modify(player, 107, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,107, 1)
|
|||
|
|
elseif 2 == courseType then
|
|||
|
|
skynet.server.achieveTask:Modify(player, 106, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,106, 1)
|
|||
|
|
elseif 3 == courseType then
|
|||
|
|
skynet.server.achieveTask:Modify(player, 105, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,105, 1)
|
|||
|
|
end
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- 解锁出游地点
|
|||
|
|
-- 后山的解锁条件
|
|||
|
|
if courseType == 1 and petShop.petStudy[courseType].studyLvl ==
|
|||
|
|
petStudy[petTravel[2].studyId].studyLvl and petShop.petStudy[courseType].studyStage ==
|
|||
|
|
petStudy[petTravel[2].studyId].studyStage and petShop.petTravel[2].unlockLocation.status == 0 then
|
|||
|
|
petShop.petTravel[2].unlockLocation = {
|
|||
|
|
status = 1,
|
|||
|
|
isNew = true
|
|||
|
|
}
|
|||
|
|
skynet.server.msgTips:Add(player, 85)
|
|||
|
|
petShop.isNew = true
|
|||
|
|
-- 森林的解锁条件
|
|||
|
|
elseif courseType == 2 and petShop.petStudy[courseType].studyLvl ==
|
|||
|
|
petStudy[petTravel[3].studyId].studyLvl and petShop.petStudy[courseType].studyStage ==
|
|||
|
|
petStudy[petTravel[3].studyId].studyStage and petShop.petTravel[3].unlockLocation.status == 0 then
|
|||
|
|
petShop.petTravel[3].unlockLocation = {
|
|||
|
|
status = 1,
|
|||
|
|
isNew = true
|
|||
|
|
}
|
|||
|
|
skynet.server.msgTips:Add(player, 85)
|
|||
|
|
petShop.isNew = true
|
|||
|
|
-- 湖边的解锁条件
|
|||
|
|
elseif courseType == 3 and petShop.petStudy[courseType].studyLvl ==
|
|||
|
|
petStudy[petTravel[4].studyId].studyLvl and petShop.petStudy[courseType].studyStage ==
|
|||
|
|
petStudy[petTravel[4].studyId].studyStage and petShop.petTravel[4].unlockLocation.status == 0 then
|
|||
|
|
petShop.petTravel[4].unlockLocation = {
|
|||
|
|
status = 1,
|
|||
|
|
isNew = true
|
|||
|
|
}
|
|||
|
|
skynet.server.msgTips:Add(player, 85)
|
|||
|
|
petShop.isNew = true
|
|||
|
|
-- 花园的解锁条件
|
|||
|
|
elseif courseType == 1 and petShop.petStudy[courseType].studyLvl ==
|
|||
|
|
petStudy[petTravel[5].studyId].studyLvl and petShop.petStudy[courseType].studyStage ==
|
|||
|
|
petStudy[petTravel[5].studyId].studyStage and petShop.petTravel[5].unlockLocation.status == 0 then
|
|||
|
|
petShop.petTravel[5].unlockLocation = {
|
|||
|
|
status = 1,
|
|||
|
|
isNew = true
|
|||
|
|
}
|
|||
|
|
skynet.server.msgTips:Add(player, 85)
|
|||
|
|
petShop.isNew = true
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--通行证任务
|
|||
|
|
--在萌宠乐园使用资料书累积超过%本
|
|||
|
|
skynet.server.taskListEvent:Modify( player , 121 , bookCount )
|
|||
|
|
|
|||
|
|
-- 获取最新的商店数据
|
|||
|
|
data.petStudyInfo = {
|
|||
|
|
courseType = courseType,
|
|||
|
|
courseLevel = petShop.petStudy[courseType].studyLvl,
|
|||
|
|
courseStage = petShop.petStudy[courseType].studyStage,
|
|||
|
|
courseExp = petShop.petStudy[courseType].studyExp
|
|||
|
|
}
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_PetCourseStudy")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CPetCourseStudy", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 宠物学习奖励展示
|
|||
|
|
function PetShop:PetCourseAwardShow(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SPetCourseAwardShow", c2sData.data))
|
|||
|
|
local petShop = player.gameData.shop[self.shopType]
|
|||
|
|
local courseType = c2sData.data.courseType
|
|||
|
|
local petAward = petShop.petAward
|
|||
|
|
local petStudy = petShop.petStudy
|
|||
|
|
local petStudyList = skynet.server.gameConfig:GetPlayerAllCfg(player, "PetStudy") -- 宠物店学习数据
|
|||
|
|
|
|||
|
|
local data = {}
|
|||
|
|
data.award = {}
|
|||
|
|
for k, v in pairs(petAward) do
|
|||
|
|
-- 判断阶段奖励和结业奖励
|
|||
|
|
if courseType == v.studyType then
|
|||
|
|
table.insert(data.award, {
|
|||
|
|
courseType = courseType,
|
|||
|
|
courseLevel = v.studyLvl,
|
|||
|
|
courseStage = v.studyStage,
|
|||
|
|
status = v.status,
|
|||
|
|
interactionId = v.interactionId,
|
|||
|
|
rewardId = v.rewardId
|
|||
|
|
})
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- log.info('学习奖励展示' .. skynet.server.common:TableToString(data))
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_PetCourseAwardShow")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CPetCourseAwardShow", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 宠物店学习奖励获取
|
|||
|
|
function PetShop:PetCourseAwardGet(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SPetCourseAwardGet", c2sData.data))
|
|||
|
|
local petShop = player.gameData.shop[self.shopType]
|
|||
|
|
local award = c2sData.data.award
|
|||
|
|
local data = {}
|
|||
|
|
local petStudyList = skynet.server.gameConfig:GetPlayerAllCfg(player, "PetStudy") -- 宠物店学习数据
|
|||
|
|
local PetInteraction = skynet.server.gameConfig:GetPlayerAllCfg(player, "PetInteraction") -- 宠物阶段奖励数据
|
|||
|
|
local Reward = skynet.server.gameConfig:GetPlayerAllCfg(player, "Reward") -- 奖励数据
|
|||
|
|
data.award = {}
|
|||
|
|
-- 奖励判断是否可以领取
|
|||
|
|
for k, v in pairs(petShop.petAward) do
|
|||
|
|
if v.studyType == award.courseType and v.studyLvl == award.courseLevel and v.studyStage == award.courseStage then
|
|||
|
|
if v.status == 1 then
|
|||
|
|
v.status = 2
|
|||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID", "EventID_98")
|
|||
|
|
data.award = {
|
|||
|
|
courseType = v.studyType,
|
|||
|
|
courseLevel = v.studyLvl,
|
|||
|
|
courseStage = v.studyStage,
|
|||
|
|
status = v.status,
|
|||
|
|
interactionId = v.interactionId,
|
|||
|
|
rewardId = v.rewardId
|
|||
|
|
}
|
|||
|
|
if v.rewardId ~= nil and v.rewardId ~= "" and v.rewardId ~= 0 then
|
|||
|
|
player:GiveReward(v.rewardId, eventId)
|
|||
|
|
end
|
|||
|
|
skynet.server.msgTips:Reduce(player, 81)
|
|||
|
|
-- 将宠物语音服饰动作存入背包
|
|||
|
|
for k1, v1 in ipairs(petStudyList) do
|
|||
|
|
if award.courseType == 1 and v1.interactionId == award.interactionId and v1.rewardType == 2 then
|
|||
|
|
skynet.server.bag:AddGoods(player, dataType.GoodsType_PetVoice,
|
|||
|
|
PetInteraction[award.interactionId].samId, 1)
|
|||
|
|
elseif award.courseType == 2 and v1.interactionId == award.interactionId and v1.rewardType == 2 then
|
|||
|
|
for k2, v2 in pairs(PetInteraction[award.interactionId].animId) do
|
|||
|
|
skynet.server.bag:AddGoods(player, dataType.GoodsType_PetAction, v2, 1)
|
|||
|
|
end
|
|||
|
|
-- skynet.server.bag:AddGoods(player, dataType.GoodsType_PetAction,
|
|||
|
|
-- PetInteraction[award.interactionId].animId, 1)
|
|||
|
|
elseif award.courseType == 3 and v1.interactionId == award.interactionId and v1.rewardType == 2 then
|
|||
|
|
skynet.server.bag:AddGoods(player, dataType.GoodsType_PetSkin,
|
|||
|
|
PetInteraction[award.interactionId].skinId, 1)
|
|||
|
|
-- elseif v1.rewardId == v.rewardId and v.rewardId ~= nil and v.rewardId ~= "" and v1.rewardName ==
|
|||
|
|
-- "服饰" then
|
|||
|
|
-- local clothesId = skynet.server.common:Split(Reward[v.rewardId].appearanceObject[1], "_")
|
|||
|
|
-- skynet.server.bag:AddGoods(player, dataType.GoodsType_PetClothes, tonumber(clothesId[2]), 1)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- log.info('学习奖励获取' .. skynet.server.common:TableToString(data))
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_PetCourseAwardGet")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CPetCourseAwardGet", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 宠物出游展示
|
|||
|
|
function PetShop:PetTravelShow(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SPetTravelShow", c2sData.data))
|
|||
|
|
local petShop = player.gameData.shop
|
|||
|
|
local data = {}
|
|||
|
|
local petTravel = skynet.server.gameConfig:GetPlayerAllCfg(player, "PetTravel") -- 宠物出游数据
|
|||
|
|
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg(player, "SValue")
|
|||
|
|
data.petTravelInfo = {}
|
|||
|
|
-- 根据npc等级判断出游地点解锁
|
|||
|
|
local curNpc = player.gameData.friend
|
|||
|
|
if not petShop[self.shopType].isNew then
|
|||
|
|
for k, v in pairs(petShop[self.shopType].petTravel) do
|
|||
|
|
if v.unlockLocation.isNew == true then
|
|||
|
|
v.unlockLocation.isNew = false
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
skynet.server.msgTips:ReduceAll(player, 85)
|
|||
|
|
petShop[self.shopType].isNew = false
|
|||
|
|
for k, v in pairs(curNpc) do
|
|||
|
|
if v.favorabilityLevel >= cfgSValue.petTravelRelation then
|
|||
|
|
for k1, v1 in pairs(petTravel) do
|
|||
|
|
if v.npcId == v1.npcId and v1.location > 5 then
|
|||
|
|
for k2, v2 in ipairs(petShop[self.shopType].petTravel) do
|
|||
|
|
if v2.id == v1.id and v2.unlockLocation.status == 0 then
|
|||
|
|
-- log.info('npc好感度解锁')
|
|||
|
|
v2.unlockLocation = {
|
|||
|
|
status = 1,
|
|||
|
|
isNew = true
|
|||
|
|
}
|
|||
|
|
skynet.server.msgTips:Add(player, 85)
|
|||
|
|
petShop[self.shopType].isNew = true
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
local Ids = {}
|
|||
|
|
for k, v in pairs(petShop[self.shopType].petTravel) do
|
|||
|
|
if v.unlockLocation.status == 1 then
|
|||
|
|
table.insert(Ids, {
|
|||
|
|
unlockLocationId = v.id,
|
|||
|
|
isNew = v.unlockLocation.isNew
|
|||
|
|
})
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- 根据出游的状态判断返回内容
|
|||
|
|
for k, v in pairs(petShop[self.shopType].petTravel) do
|
|||
|
|
if v.status == 1 then
|
|||
|
|
if skynet.GetTime() >= v.finishTime then
|
|||
|
|
v.status = 2
|
|||
|
|
data.petTravelInfo = {
|
|||
|
|
status = v.status,
|
|||
|
|
unlockLocation = Ids,
|
|||
|
|
locationId = v.id,
|
|||
|
|
happyEncounter = v.happyEncounter
|
|||
|
|
}
|
|||
|
|
break
|
|||
|
|
else
|
|||
|
|
data.petTravelInfo = {
|
|||
|
|
status = v.status,
|
|||
|
|
endTravelTime = v.finishTime,
|
|||
|
|
locationId = v.id,
|
|||
|
|
unlockLocation = Ids,
|
|||
|
|
happyEncounter = v.happyEncounter
|
|||
|
|
}
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
elseif v.status == 0 then
|
|||
|
|
data.petTravelInfo = {
|
|||
|
|
status = v.status,
|
|||
|
|
unlockLocation = Ids
|
|||
|
|
}
|
|||
|
|
elseif v.status == 2 then
|
|||
|
|
data.petTravelInfo = {
|
|||
|
|
status = v.status,
|
|||
|
|
unlockLocation = Ids,
|
|||
|
|
locationId = v.id,
|
|||
|
|
happyEncounter = v.happyEncounter
|
|||
|
|
}
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- log.info('出游展示信息', skynet.server.common:TableToString(data))
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_PetTravelShow")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CPetTravelShow", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 宠物出游开始
|
|||
|
|
function PetShop:PetTravelStart(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SPetTravelStart", c2sData.data))
|
|||
|
|
local petShop = player.gameData.shop
|
|||
|
|
local locationId = c2sData.data.locationId
|
|||
|
|
-- log.info('locationId', locationId)
|
|||
|
|
local petTravel = skynet.server.gameConfig:GetPlayerAllCfg(player, "PetTravel") -- 宠物店出游数据
|
|||
|
|
local data = {}
|
|||
|
|
local Ids = {}
|
|||
|
|
data.petTravelInfo = {}
|
|||
|
|
if petShop[self.shopType].petTravel[locationId].status == 0 then
|
|||
|
|
petShop[self.shopType].petTravel[locationId].status = 1
|
|||
|
|
local petType = 1
|
|||
|
|
-- player.gameData.pet[petType].status = dataType.PetType_UnlockOpened
|
|||
|
|
if player.gameData.pet[petType] and dataType.PetType_UnlockOpened == player.gameData.pet[petType].status then
|
|||
|
|
player.gameData.pet[petType].status = dataType.PetType_Travel
|
|||
|
|
end
|
|||
|
|
for k, v in pairs(petShop[self.shopType].petTravel) do
|
|||
|
|
if v.unlockLocation.status == 1 then
|
|||
|
|
table.insert(Ids, {
|
|||
|
|
unlockLocationId = v.id,
|
|||
|
|
isNew = v.unlockLocation.isNew
|
|||
|
|
})
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
local nextRefreshTime = 0
|
|||
|
|
local timeCoefficient = skynet.server.store:GetTimeCoefficient(player, 7) -- 月卡权益 时间系数
|
|||
|
|
nextRefreshTime = math.ceil(petTravel[locationId].time * 60 * timeCoefficient) + skynet.GetTime()
|
|||
|
|
petShop[self.shopType].petTravel[locationId].finishTime = nextRefreshTime
|
|||
|
|
local probability = skynet.server.gameConfig:GetPlayerAllCfg(player, "SValue").petTravelProbability[1] * 100 -- 奇遇概率
|
|||
|
|
local petTravelCount = player.gameData.todayGain.petShopPetTravelCount -- 宠物奇遇是否获取的值
|
|||
|
|
if petTravelCount == 0 then
|
|||
|
|
local rand = math.random(1, 100)
|
|||
|
|
if rand <= probability then
|
|||
|
|
-- 触发奇遇
|
|||
|
|
player.gameData.todayGain.petShopPetTravelCount = 1
|
|||
|
|
petShop[self.shopType].petTravel[locationId].happyEncounter = 2
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
data.petTravelInfo = {
|
|||
|
|
status = petShop[self.shopType].petTravel[locationId].status,
|
|||
|
|
unlockLocation = Ids,
|
|||
|
|
endTravelTime = petShop[self.shopType].petTravel[locationId].finishTime, -- 结束出游时间
|
|||
|
|
locationId = locationId,
|
|||
|
|
happyEncounter = petShop[self.shopType].petTravel[locationId].happyEncounter
|
|||
|
|
}
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- log.info('宠物出游开始信息', skynet.server.common:TableToString(data))
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_PetTravelStart")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CPetTravelStart", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 宠物出游加速
|
|||
|
|
function PetShop:PetTravelAccelerate(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SPetTravelAccelerate", c2sData.data))
|
|||
|
|
local petShop = player.gameData.shop
|
|||
|
|
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg(player, "SValue")
|
|||
|
|
local petTravel = skynet.server.gameConfig:GetPlayerAllCfg(player, "PetTravel") -- 宠物店出游数据
|
|||
|
|
local data = {}
|
|||
|
|
local isSuc = false
|
|||
|
|
data.petTravelInfo = {}
|
|||
|
|
|
|||
|
|
-- 有加速券优先使用加速券
|
|||
|
|
if skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Prop, 6) > 0 then
|
|||
|
|
-- 消耗玩家一个加速券
|
|||
|
|
skynet.server.bag:RemoveGoods(player, dataType.GoodsType_Prop, 6, 1)
|
|||
|
|
isSuc = true
|
|||
|
|
else
|
|||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID", "EventID_92")
|
|||
|
|
local needVolute = 10
|
|||
|
|
local nowTime = skynet.GetTime()
|
|||
|
|
for k, v in pairs(petShop[self.shopType].petTravel) do
|
|||
|
|
if v.status == 1 then
|
|||
|
|
needVolute = math.ceil((v.finishTime - nowTime) / 60 / cfgSValue.timeExchangeVoluteCoin[2] *
|
|||
|
|
cfgSValue.timeExchangeVoluteCoin[1])
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
if needVolute < 0 then
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_PetTravelAccelerate")
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
-- 判断蜗壳币数量是否足够
|
|||
|
|
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
|
|||
|
|
local Ids = {}
|
|||
|
|
for k, v in pairs(petShop[self.shopType].petTravel) do
|
|||
|
|
if v.unlockLocation.status == 1 then
|
|||
|
|
table.insert(Ids, {
|
|||
|
|
unlockLocationId = v.id,
|
|||
|
|
isNew = v.unlockLocation.isNew
|
|||
|
|
})
|
|||
|
|
if v.status == 1 then
|
|||
|
|
v.finishTime = 0 -- 十分钟
|
|||
|
|
v.status = 2
|
|||
|
|
skynet.server.msgTips:Add(player, 82)
|
|||
|
|
data.petTravelInfo = {
|
|||
|
|
status = v.status,
|
|||
|
|
unlockLocation = Ids,
|
|||
|
|
locationId = v.id,
|
|||
|
|
happyEncounter = v.happyEncounter
|
|||
|
|
}
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
else
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.NoEnoughMoney
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- 判断是否满足条件进行加速
|
|||
|
|
if isSuc then
|
|||
|
|
local Ids = {}
|
|||
|
|
for k, v in pairs(petShop[self.shopType].petTravel) do
|
|||
|
|
if v.unlockLocation.status == 1 then
|
|||
|
|
table.insert(Ids, {
|
|||
|
|
unlockLocationId = v.id,
|
|||
|
|
isNew = v.unlockLocation.isNew
|
|||
|
|
})
|
|||
|
|
if v.status == 1 then
|
|||
|
|
-- 加速时间
|
|||
|
|
v.finishTime = v.finishTime - cfgSValue.petTravelTime[2] * 60 -- 十分钟
|
|||
|
|
-- v.finishTime = v.finishTime - 7190 -- 十分钟
|
|||
|
|
if skynet.GetTime() >= v.finishTime then
|
|||
|
|
v.status = 2
|
|||
|
|
skynet.server.msgTips:Add(player, 82)
|
|||
|
|
data.petTravelInfo = {
|
|||
|
|
status = v.status,
|
|||
|
|
unlockLocation = Ids,
|
|||
|
|
locationId = v.id,
|
|||
|
|
happyEncounter = v.happyEncounter
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
data.petTravelInfo = {
|
|||
|
|
status = v.status,
|
|||
|
|
endTravelTime = v.finishTime,
|
|||
|
|
unlockLocation = Ids,
|
|||
|
|
locationId = v.id,
|
|||
|
|
happyEncounter = v.happyEncounter
|
|||
|
|
}
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- log.info('宠物出游加速信息', skynet.server.common:TableToString(data))
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_PetTravelAccelerate")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CPetTravelAccelerate", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 宠物出游奖励获取
|
|||
|
|
function PetShop:PetTravelAward(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SPetTravelAward", c2sData.data))
|
|||
|
|
local petShop = player.gameData.shop
|
|||
|
|
local data = {}
|
|||
|
|
local petTravel = skynet.server.gameConfig:GetPlayerAllCfg(player, "PetTravel")
|
|||
|
|
for k, v in pairs(petShop[self.shopType].petTravel) do
|
|||
|
|
-- 如果时间已经可以领取修改出游状态
|
|||
|
|
if v.status == 1 and skynet.GetTime() >= v.finishTime then
|
|||
|
|
v.status = 2
|
|||
|
|
end
|
|||
|
|
if v.status == 2 then
|
|||
|
|
for k1, v1 in pairs(petTravel) do
|
|||
|
|
if v.id == v1.id then
|
|||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID", "EventID_99")
|
|||
|
|
data.awardId = v1.travelId
|
|||
|
|
data.happyEncounter = 1
|
|||
|
|
v.status = 0
|
|||
|
|
local petType = 1
|
|||
|
|
if player.gameData.pet[petType] and dataType.PetType_Travel == player.gameData.pet[petType].status then
|
|||
|
|
player.gameData.pet[petType].status = dataType.PetType_UnlockOpened
|
|||
|
|
end
|
|||
|
|
if v1.travelId == 661 and v1.npcId == 9 then
|
|||
|
|
player:GiveRewardNpc(v1.travelId, 9, eventId)
|
|||
|
|
elseif v1.travelId == 661 and v1.npcId ~= 9 then
|
|||
|
|
-- 增加指定NPC好感度
|
|||
|
|
local curNpc = player.gameData.friend[v1.npcId]
|
|||
|
|
if curNpc then
|
|||
|
|
skynet.server.friend:AddFavorability(player, curNpc, 3)
|
|||
|
|
curNpc = player.gameData.friend[9]
|
|||
|
|
skynet.server.friend:AddFavorability(player, curNpc, 1)
|
|||
|
|
end
|
|||
|
|
player:GiveReward(v1.travelId, eventId)
|
|||
|
|
elseif v1.travelId ~= 661 then
|
|||
|
|
player:GiveRewardNpc(v1.travelId, v1.npcId, eventId)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 添加的任务
|
|||
|
|
skynet.server.levelTask:Modify(player, 25, 1)
|
|||
|
|
skynet.server.achieveTask:Modify(player, 25, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,25, 1)
|
|||
|
|
skynet.server.msgTips:ReduceAll(player, 82)
|
|||
|
|
--skynet.server.taskListEvent:Modify( player ,37, 1)
|
|||
|
|
player:AddExpForType(17)
|
|||
|
|
if v.happyEncounter == 2 then
|
|||
|
|
data.specialAwardId = v1.rewardId
|
|||
|
|
data.happyEncounter = 2
|
|||
|
|
v.happyEncounter = 1
|
|||
|
|
player:GiveReward(v1.rewardId, eventId)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- log.info('宠物出游奖励获取信息', skynet.server.common:TableToString(data))
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_PetTravelAward")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CPetTravelAward", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 宠物商店展示
|
|||
|
|
function PetShop:PetShopShow(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SPetShopShow", c2sData.data))
|
|||
|
|
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg(player, "SValue")
|
|||
|
|
local petStore = skynet.server.gameConfig:GetPlayerAllCfg(player, "PetStore")
|
|||
|
|
local petShop = player.gameData.shop
|
|||
|
|
local data = {}
|
|||
|
|
data.goods = {}
|
|||
|
|
for k, v in pairs(petShop[self.shopType].petShopGoodInfo) do
|
|||
|
|
table.insert(data.goods, {
|
|||
|
|
good = {
|
|||
|
|
goodsType = petStore[v.id].goodsType,
|
|||
|
|
goodsId = petStore[v.id].ticketId,
|
|||
|
|
goodsCount = 1
|
|||
|
|
},
|
|||
|
|
limitType = petStore[v.id].packLimit[1],
|
|||
|
|
buyTimes = v.buyTimes
|
|||
|
|
})
|
|||
|
|
end
|
|||
|
|
if skynet.GetTime() >= petShop[self.shopType].nextFreeTime then
|
|||
|
|
petShop[self.shopType].blindBoxStatus = 1
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
data.blindBox = {
|
|||
|
|
blindBoxStatus = petShop[self.shopType].blindBoxStatus,
|
|||
|
|
nextFreeTime = petShop[self.shopType].nextFreeTime,
|
|||
|
|
}
|
|||
|
|
skynet.server.msgTips:ReduceAll(player, 84)
|
|||
|
|
-- log.info('商店传输数据' .. skynet.server.common:TableToString(data))
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_PetShopShow")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CPetShopShow", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 宠物商店购买
|
|||
|
|
function PetShop:PetShopBuy(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SPetShopBuy", c2sData.data))
|
|||
|
|
local petShop = player.gameData.shop
|
|||
|
|
local petStore = skynet.server.gameConfig:GetPlayerAllCfg(player, "PetStore") -- 宠物店商店数据
|
|||
|
|
local good = c2sData.data.good
|
|||
|
|
local count = c2sData.data.count
|
|||
|
|
local data = {}
|
|||
|
|
data.count = count -- 购买数量
|
|||
|
|
data.good = {} -- 购买商品
|
|||
|
|
data.goods = {} -- 当前展示的商品
|
|||
|
|
local goodsId = 1
|
|||
|
|
|
|||
|
|
for k, v in pairs(petStore) do
|
|||
|
|
if v.ticketId == good.good.goodsId then
|
|||
|
|
goodsId = v.id
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 判断购买次数是否超过
|
|||
|
|
if goodsId ~= 1 and petShop[self.shopType].petShopGoodInfo[goodsId].buyTimes + count >
|
|||
|
|
petStore[goodsId].packLimit[2] then
|
|||
|
|
-- log.info('超出购买次数')
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.petShopPackLimit
|
|||
|
|
else
|
|||
|
|
-- 判断三叶币数量是否足够
|
|||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID", "EventID_10")
|
|||
|
|
-- 待替换配置
|
|||
|
|
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg(player, "SValue")
|
|||
|
|
-- 总的扣除数量
|
|||
|
|
local allMoney = count * petStore[goodsId].mapCoin
|
|||
|
|
local isSuc = player:MoneyChange(pb.enum("EnumGoodsType", "Clovers"), -allMoney, eventId)
|
|||
|
|
if isSuc then
|
|||
|
|
for k, v in pairs(petShop[self.shopType].petShopGoodInfo) do
|
|||
|
|
if v.id == goodsId then
|
|||
|
|
v.buyTimes = v.buyTimes + count
|
|||
|
|
data.good = {
|
|||
|
|
good = {
|
|||
|
|
goodsType = good.good.goodsType,
|
|||
|
|
goodsId = petStore[v.id].ticketId,
|
|||
|
|
goodsCount = count
|
|||
|
|
},
|
|||
|
|
limitType = petStore[v.id].packLimit[1],
|
|||
|
|
buyTimes = v.buyTimes
|
|||
|
|
}
|
|||
|
|
--
|
|||
|
|
-- if v.buyTimes == petShop[self.shopType].petShopGoodInfo[goodsId].packLimit[2] then
|
|||
|
|
-- end
|
|||
|
|
-- elseif v.id == goodsId and v.packLimit[1] ~= 4 then
|
|||
|
|
-- v.buyTimes = v.buyTimes + count
|
|||
|
|
-- data.good = {
|
|||
|
|
-- good = {
|
|||
|
|
-- goodsType = good.good.goodsType,
|
|||
|
|
-- goodsId = petStore[v.id].ticketId,
|
|||
|
|
-- goodsCount = count
|
|||
|
|
-- },
|
|||
|
|
-- -- limitType = v.packLimit[1],
|
|||
|
|
-- buyTimes = v.buyTimes
|
|||
|
|
-- }
|
|||
|
|
end
|
|||
|
|
table.insert(data.goods, {
|
|||
|
|
good = {
|
|||
|
|
goodsType = good.good.goodsType,
|
|||
|
|
goodsId = petStore[v.id].ticketId,
|
|||
|
|
goodsCount = count
|
|||
|
|
},
|
|||
|
|
limitType = petStore[v.id].packLimit[1],
|
|||
|
|
buyTimes = v.buyTimes
|
|||
|
|
})
|
|||
|
|
end
|
|||
|
|
-- 将购买的经验书存入背包
|
|||
|
|
skynet.server.bag:AddGoods(player, dataType.GoodsType_Prop, good.good.goodsId, count)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- log.info('宠物商店购买信息' .. skynet.server.common:TableToString(data))
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_PetShopBuy")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CPetShopBuy", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 宠物盲盒抽取加速
|
|||
|
|
function PetShop:PetShopLotteryAccelerate(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SPetShopLotteryAccelerate", c2sData.data))
|
|||
|
|
local petShop = player.gameData.shop
|
|||
|
|
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg(player, "SValue")
|
|||
|
|
local methodType = c2sData.data.methodType
|
|||
|
|
local data = {}
|
|||
|
|
local isSuc = false
|
|||
|
|
data.blindBox = {}
|
|||
|
|
if dataType.AccelerateType_WatchAD == methodType and skynet.server.ad:CanWatch(player, "GetPetLottery") then
|
|||
|
|
skynet.server.ad:Update(player, "GetPetLottery")
|
|||
|
|
petShop[self.shopType].blindBoxStatus = 1
|
|||
|
|
petShop[self.shopType].nextFreeTime = 0
|
|||
|
|
isSuc = true
|
|||
|
|
elseif dataType.AccelerateType_Volute == methodType then
|
|||
|
|
-- local cfgpetShopVoluteTime = cfgSValue.petShopVoluteTime
|
|||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID", "EventID_94")
|
|||
|
|
local needVolute = 10
|
|||
|
|
local time = petShop[self.shopType].nextFreeTime
|
|||
|
|
local nowTime = skynet.GetTime()
|
|||
|
|
needVolute = math.ceil((time - nowTime) / 60 / cfgSValue.timeExchangeVoluteCoin[2] *
|
|||
|
|
cfgSValue.timeExchangeVoluteCoin[1])
|
|||
|
|
if -needVolute > 0 then
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_PetShopLotteryAccelerate")
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 判断蜗壳币数量是否足够
|
|||
|
|
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
|
|||
|
|
-- 蜗壳币加速时间
|
|||
|
|
-- petShop[self.shopType].nextFreeTime = petShop[self.shopType].nextFreeTime - cfgSValue.petShopVoluteTime[2] *
|
|||
|
|
-- 60 -- 十分钟
|
|||
|
|
petShop[self.shopType].blindBoxStatus = 1
|
|||
|
|
petShop[self.shopType].nextFreeTime = 0
|
|||
|
|
isSuc = true
|
|||
|
|
else
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.NoEnoughMoney
|
|||
|
|
end
|
|||
|
|
elseif dataType.AccelerateType_AccTicket == methodType then
|
|||
|
|
if skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Prop, 6) > 0 then
|
|||
|
|
-- 消耗玩家一个加速券
|
|||
|
|
skynet.server.bag:RemoveGoods(player, dataType.GoodsType_Prop, 6, 1)
|
|||
|
|
-- 蜗壳币加速时间
|
|||
|
|
petShop[self.shopType].nextFreeTime = petShop[self.shopType].nextFreeTime - cfgSValue.petShopVoluteTime[2] *
|
|||
|
|
60 -- 十分钟
|
|||
|
|
isSuc = true
|
|||
|
|
else
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.NoEnoughProp
|
|||
|
|
end
|
|||
|
|
elseif dataType.AccelerateType_ADTicket == methodType and skynet.server.ad:CanWatch(player, "GetPetLottery") and
|
|||
|
|
skynet.server.ad:PayADTicket(player, "GetPetLottery") then
|
|||
|
|
-- 修改广告数据
|
|||
|
|
petShop[self.shopType].blindBoxStatus = 1
|
|||
|
|
petShop[self.shopType].nextFreeTime = 0
|
|||
|
|
isSuc = true
|
|||
|
|
end
|
|||
|
|
-- 判断是否满足条件
|
|||
|
|
if isSuc then
|
|||
|
|
if skynet.GetTime() >= petShop[self.shopType].nextFreeTime then
|
|||
|
|
petShop[self.shopType].blindBoxStatus = 1
|
|||
|
|
skynet.server.msgTips:Add(player, 83)
|
|||
|
|
end
|
|||
|
|
data.blindBox = {
|
|||
|
|
blindBoxStatus = petShop[self.shopType].blindBoxStatus,
|
|||
|
|
nextFreeTime = petShop[self.shopType].nextFreeTime,
|
|||
|
|
}
|
|||
|
|
end
|
|||
|
|
-- log.info('宠物商店盲盒抽取加速信息' .. skynet.server.common:TableToString(data))
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_PetShopLotteryAccelerate")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CPetShopLotteryAccelerate", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 宠物商店盲盒抽取
|
|||
|
|
function PetShop:PetShopLottery(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SPetShopLottery", c2sData.data))
|
|||
|
|
local petShop = player.gameData.shop
|
|||
|
|
local data = {}
|
|||
|
|
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg(player, "SValue")
|
|||
|
|
local petStore = skynet.server.gameConfig:GetPlayerAllCfg(player, "PetStore")
|
|||
|
|
local probability = cfgSValue.petBookBoxOpen -- 盲盒里顶级资料书开启概率、中级资料书开启概率、初级资料书开启概率 {1,2,3}
|
|||
|
|
local openCount = cfgSValue.petBoxOpen -- 每次开启盲盒获取的资料书数量
|
|||
|
|
data.blindBox = {} -- 盲盒状态
|
|||
|
|
-- data.getGood = {} -- 盲盒随机领取的商品
|
|||
|
|
local BoxProbability = {}
|
|||
|
|
-- 判断盲盒是否处于可领取状态
|
|||
|
|
if skynet.GetTime() >= petShop[self.shopType].nextFreeTime then
|
|||
|
|
petShop[self.shopType].blindBoxStatus = 1
|
|||
|
|
end
|
|||
|
|
if petShop[self.shopType].blindBoxStatus == 1 then
|
|||
|
|
for k, v in pairs(probability) do
|
|||
|
|
table.insert(BoxProbability, {
|
|||
|
|
type = k,
|
|||
|
|
typeProbability = v * 100
|
|||
|
|
})
|
|||
|
|
end
|
|||
|
|
local bookType = 3 -- 经验书类型
|
|||
|
|
local rand = math.random(1, 100)
|
|||
|
|
local count = 0
|
|||
|
|
for k, v in pairs(BoxProbability) do
|
|||
|
|
if rand >= (100 - v.typeProbability) then
|
|||
|
|
bookType = v.type
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- 根据不同的经验书获取不同的商品id
|
|||
|
|
local goodsId = 1
|
|||
|
|
if bookType == 1 then
|
|||
|
|
goodsId = 3
|
|||
|
|
elseif bookType == 2 then
|
|||
|
|
goodsId = 2
|
|||
|
|
elseif bookType == 3 then
|
|||
|
|
goodsId = 1
|
|||
|
|
end
|
|||
|
|
-- log.info('goodsId', goodsId)
|
|||
|
|
data.getGood = {
|
|||
|
|
goodsType = petStore[goodsId].goodsType,
|
|||
|
|
goodsId = petStore[goodsId].ticketId,
|
|||
|
|
goodsCount = openCount
|
|||
|
|
}
|
|||
|
|
-- 将购买的经验书存入背包
|
|||
|
|
skynet.server.bag:AddGoods(player, dataType.GoodsType_Prop, petStore[goodsId].ticketId, openCount)
|
|||
|
|
local nextFreeTime = math.ceil(skynet.GetTime() + cfgSValue.petBookBox)
|
|||
|
|
if next(data.getGood) ~= nil then
|
|||
|
|
petShop[self.shopType].blindBoxStatus = 0
|
|||
|
|
data.blindBox = {
|
|||
|
|
blindBoxStatus = petShop[self.shopType].blindBoxStatus,
|
|||
|
|
nextFreeTime = nextFreeTime,
|
|||
|
|
}
|
|||
|
|
skynet.server.npcTask:Modify(player, 105, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,105, 1)
|
|||
|
|
skynet.server.msgTips:ReduceAll(player, 83)
|
|||
|
|
end
|
|||
|
|
petShop[self.shopType].nextFreeTime = nextFreeTime
|
|||
|
|
end
|
|||
|
|
-- log.info('宠物商店盲盒抽取信息' .. skynet.server.common:TableToString(data))
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_PetShopLottery")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CPetShopLottery", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
skynet.server.petShop = PetShop
|
|||
|
|
return PetShop
|