954 lines
41 KiB
Lua
954 lines
41 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 json = require "json"
|
|||
|
|
local FishShop = oo.class(shop)
|
|||
|
|
|
|||
|
|
FishShop.shopType = dataType.ShopType_Fish
|
|||
|
|
FishShop.NPCId = 7 -- 余师傅
|
|||
|
|
|
|||
|
|
-- 初始化渔店数据
|
|||
|
|
function FishShop:InitData(player, shopType)
|
|||
|
|
local cfgFishType = skynet.server.gameConfig:GetPlayerAllCfg(player, "FishType") -- 鱼类信息
|
|||
|
|
local cfgFishRod = skynet.server.gameConfig:GetPlayerAllCfg(player, "FishRod") -- 鱼竿信息
|
|||
|
|
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg(player, "SValue")
|
|||
|
|
-- 玩家渔店相关数据
|
|||
|
|
player.gameData.shop[shopType] = {}
|
|||
|
|
player.gameData.shop[shopType].fishInfos = {} -- 鱼类信息
|
|||
|
|
player.gameData.shop[shopType].fishingRodInfos = {} -- 鱼竿信息
|
|||
|
|
player.gameData.shop[shopType].fishTypeInfos = {} -- 鱼百科信息
|
|||
|
|
player.gameData.shop[shopType].fishingLure = cfgSValue.beginFishFood -- 初始化鱼饵数量
|
|||
|
|
player.gameData.shop[shopType].canGetFish = false -- 玩家是否完成鱼饵扣除
|
|||
|
|
player.gameData.shop[shopType].FishRodUnlock = {true, false, false, false} -- 玩家鱼竿是否完成解锁
|
|||
|
|
player.gameData.shop[shopType].ExchangeRecord={} --渔店家具兑换记录
|
|||
|
|
-- 玩家鱼类数据赋值
|
|||
|
|
for k, v in pairs(cfgFishType) do
|
|||
|
|
local count = v.id
|
|||
|
|
player.gameData.shop[shopType].fishInfos[count] = {}
|
|||
|
|
player.gameData.shop[shopType].fishInfos[count].id = count -- 鱼类id
|
|||
|
|
player.gameData.shop[shopType].fishInfos[count].status = 0 -- 鱼类状态 0 未拥有 1 已拥有 2已领取奖励 默认未拥有
|
|||
|
|
player.gameData.shop[shopType].fishInfos[count].award = v.unlockPrice -- 鱼对应解锁的奖励
|
|||
|
|
player.gameData.shop[shopType].fishInfos[count].furnitureNum = v.furnitureNum -- 家具对应兑换数量
|
|||
|
|
player.gameData.shop[shopType].fishInfos[count].fishType = v.fishType
|
|||
|
|
end
|
|||
|
|
-- 玩家鱼竿数据赋值
|
|||
|
|
for k, v in pairs(cfgFishRod) do
|
|||
|
|
local count = v.id
|
|||
|
|
if 1 == count then
|
|||
|
|
player.gameData.shop[shopType].fishingRodInfos[count] = {}
|
|||
|
|
player.gameData.shop[shopType].fishingRodInfos[count].id = count -- 鱼竿
|
|||
|
|
player.gameData.shop[shopType].fishingRodInfos[count].status = 1 -- 为鱼竿的解锁状态 0-未解锁 1-当前装备 2-已解锁
|
|||
|
|
else
|
|||
|
|
player.gameData.shop[shopType].fishingRodInfos[count] = {}
|
|||
|
|
player.gameData.shop[shopType].fishingRodInfos[count].id = count -- 鱼竿
|
|||
|
|
player.gameData.shop[shopType].fishingRodInfos[count].status = 0 -- 为鱼竿的解锁状态 0-未解锁 1-当前装备 2-已解锁
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- 玩家鱼类百科数据赋值
|
|||
|
|
for k, v in pairs(cfgFishType) do
|
|||
|
|
-- 判断该玩家有没有存储该鱼类图鉴
|
|||
|
|
if not player.gameData.shop[shopType].fishTypeInfos[v.fishType] then
|
|||
|
|
local count = v.fishType
|
|||
|
|
player.gameData.shop[shopType].fishTypeInfos[count] = {}
|
|||
|
|
player.gameData.shop[shopType].fishTypeInfos[count].fishType = v.fishType -- 鱼类图鉴id
|
|||
|
|
player.gameData.shop[shopType].fishTypeInfos[count].progress = 0 -- 鱼类图鉴进度
|
|||
|
|
player.gameData.shop[shopType].fishTypeInfos[count].fishIds = {} -- 该鱼类包含的鱼id
|
|||
|
|
player.gameData.shop[shopType].fishTypeInfos[count].status = 0 -- 鱼种类奖励领取状态 0-未领取 1-已领取 2-待领取
|
|||
|
|
for k1, v1 in pairs(cfgFishType) do
|
|||
|
|
if v1.fishType == count then
|
|||
|
|
table.insert(player.gameData.shop[shopType].fishTypeInfos[count].fishIds, v1.id)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- 将玩家可以获取鱼的最高等级存入redis中 提供给送礼进行使用
|
|||
|
|
skynet.server.personal:SetDetail(player.gameData.partner.id, "fishLevel", self:GetMustFishLevel(player))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 玩家登录调用
|
|||
|
|
function FishShop:LoginInitData(player)
|
|||
|
|
skynet.server.msgTips:Reset(player, 55)
|
|||
|
|
skynet.server.msgTips:Reset(player, 56)
|
|||
|
|
skynet.server.msgTips:Reset(player, 57)
|
|||
|
|
-- 红点系统
|
|||
|
|
-- 鱼饵红点
|
|||
|
|
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg(player, "SValue")
|
|||
|
|
local cfgFishType = skynet.server.gameConfig:GetPlayerAllCfg(player, "FishType") -- 鱼类信息
|
|||
|
|
if player.gameData.shop[self.shopType] then
|
|||
|
|
self:FishRefresh(player)
|
|||
|
|
-- if player.gameData.shop[self.shopType].fishingLure >= 1 then
|
|||
|
|
-- skynet.server.msgTips:AddNoNotice(player, 55)
|
|||
|
|
-- end
|
|||
|
|
-- 图鉴红点
|
|||
|
|
-- local redDot = false
|
|||
|
|
for k, v in pairs(player.gameData.shop[self.shopType].fishInfos) do
|
|||
|
|
if v.status == 1 then
|
|||
|
|
-- redDot = true
|
|||
|
|
skynet.server.msgTips:AddNoNotice(player, 56)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
for k, v in pairs(player.gameData.shop[self.shopType].fishTypeInfos) do
|
|||
|
|
if v.status == 2 then
|
|||
|
|
-- redDot = true
|
|||
|
|
skynet.server.msgTips:AddNoNotice(player, 56)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- 手工坊红点
|
|||
|
|
local CraftRedDot = false
|
|||
|
|
for k, v in pairs(player.gameData.bag) do
|
|||
|
|
if dataType.GoodsType_Fish == v.type then
|
|||
|
|
for k1, v1 in pairs(cfgFishType) do
|
|||
|
|
if v.count >= v1.furnitureNum and v.id == v1.id then
|
|||
|
|
CraftRedDot = true
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
if CraftRedDot then
|
|||
|
|
skynet.server.msgTips:AddNoNotice(player, 57)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 登录发放鱼饵
|
|||
|
|
self:giveFishingLure(player)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 发放鱼饵
|
|||
|
|
function FishShop:giveFishingLure(player)
|
|||
|
|
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg(player, "SValue")
|
|||
|
|
local openTime = skynet.GetTime()
|
|||
|
|
local todayTwelve = self:FormatTime(skynet.GetTime(), 0, 12)
|
|||
|
|
local todayEighteen = self:FormatTime(skynet.GetTime(), 0, 18)
|
|||
|
|
local fishFoodAutoLimit = cfgSValue.fishFoodAutoLimit
|
|||
|
|
-- 查看玩家是否有月卡权益
|
|||
|
|
local extraFishFood = 0
|
|||
|
|
if player.gameData.storePack.monthCard.buyStatus then
|
|||
|
|
fishFoodAutoLimit = cfgSValue.monthCardFish[2]
|
|||
|
|
extraFishFood = cfgSValue.monthCardFish[1] - cfgSValue.dailyFishFood[1]
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--检查过了设置成已检查 12:00 到 18:00
|
|||
|
|
if openTime >= todayTwelve and openTime <= todayEighteen then
|
|||
|
|
if player.gameData.todayGain.todayTwelveGameTime == 0
|
|||
|
|
and player.gameData.shop[self.shopType].fishingLure < fishFoodAutoLimit then
|
|||
|
|
player.gameData.shop[self.shopType].fishingLure = player.gameData.shop[self.shopType].fishingLure + cfgSValue.dailyFishFood[1] + extraFishFood
|
|||
|
|
|
|||
|
|
--是否达到上限
|
|||
|
|
if player.gameData.shop[self.shopType].fishingLure > fishFoodAutoLimit then
|
|||
|
|
player.gameData.shop[self.shopType].fishingLure = fishFoodAutoLimit
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
player.gameData.todayGain.todayTwelveGameTime = 1
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--检查过了设置成已检查 18:00
|
|||
|
|
if openTime >= todayEighteen then
|
|||
|
|
if player.gameData.todayGain.todayEighteenGameTime == 0
|
|||
|
|
and player.gameData.shop[self.shopType].fishingLure < fishFoodAutoLimit then
|
|||
|
|
player.gameData.shop[self.shopType].fishingLure = player.gameData.shop[self.shopType].fishingLure + cfgSValue.dailyFishFood[2]
|
|||
|
|
|
|||
|
|
--是否达到上限
|
|||
|
|
if player.gameData.shop[self.shopType].fishingLure > fishFoodAutoLimit then
|
|||
|
|
player.gameData.shop[self.shopType].fishingLure = fishFoodAutoLimit
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
player.gameData.todayGain.todayEighteenGameTime = 1
|
|||
|
|
end
|
|||
|
|
if player.gameData.shop[self.shopType].fishingLure >= 1 and skynet.server.msgTips:GetOneTips(player, 55).count == 0 then
|
|||
|
|
skynet.server.msgTips:AddNoNotice(player, 55)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 返回指定时间戳的方法
|
|||
|
|
function FishShop:FormatTime(lastDate, day, hour)
|
|||
|
|
local dayTimestamp = 24 * 60 * 60
|
|||
|
|
lastDate = lastDate + dayTimestamp * day
|
|||
|
|
local date = os.date("*t", lastDate)
|
|||
|
|
-- 这里返回的是你指定的时间点的时间戳
|
|||
|
|
return os.time({
|
|||
|
|
year = date.year,
|
|||
|
|
month = date.month,
|
|||
|
|
day = date.day,
|
|||
|
|
hour = hour,
|
|||
|
|
minute = 00,--date.minute,
|
|||
|
|
second = 00--date.second
|
|||
|
|
})
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 好友赠送鱼红点增加方法
|
|||
|
|
function FishShop:FishRefreshRedDot(player, fishId)
|
|||
|
|
-- 判断玩家的鱼类数据是否需要进行修改
|
|||
|
|
local fishInfos = player.gameData.shop[self.shopType].fishInfos
|
|||
|
|
local fishTypeInfos = player.gameData.shop[self.shopType].fishTypeInfos
|
|||
|
|
local cfgFishType = skynet.server.gameConfig:GetPlayerAllCfg(player, "FishType")
|
|||
|
|
if skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Fish, fishId) > 0 and 0 == fishInfos[fishId].status then
|
|||
|
|
fishInfos[fishId].status = 1
|
|||
|
|
-- 将鱼的完成度计算出并存入玩家数据+
|
|||
|
|
for k, v in pairs(fishInfos) do
|
|||
|
|
local haveData = 0
|
|||
|
|
local allData = #fishTypeInfos[v.fishType].fishIds
|
|||
|
|
for k1, v1 in pairs(fishTypeInfos[v.fishType].fishIds) do
|
|||
|
|
if fishInfos[v1].status == 1 or fishInfos[v1].status == 2 then
|
|||
|
|
haveData = haveData + 1
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
fishTypeInfos[v.fishType].progress = math.floor((haveData / allData + 0.005) * 100)
|
|||
|
|
end
|
|||
|
|
-- 判断鱼的完成度是否解锁了鱼竿
|
|||
|
|
local FishRodUnlock = player.gameData.shop[self.shopType].FishRodUnlock
|
|||
|
|
for k, v in pairs(player.gameData.shop[self.shopType].fishTypeInfos) do
|
|||
|
|
if v.fishType == 1 and v.progress >= 66 and not FishRodUnlock[2] then
|
|||
|
|
player.gameData.shop[self.shopType].fishingRodInfos[2].status = 2
|
|||
|
|
player.gameData.shop[self.shopType].FishRodUnlock[2] = true
|
|||
|
|
self:FishUnlock(player, 1, 2)
|
|||
|
|
-- 将玩家可以获取鱼的最高等级存入redis中 提供给送礼进行使用
|
|||
|
|
skynet.server.personal:SetDetail(player.gameData.partner.id, "fishLevel", self:GetMustFishLevel(player))
|
|||
|
|
elseif v.fishType == 2 and v.progress >= 83 and not FishRodUnlock[3] then
|
|||
|
|
player.gameData.shop[self.shopType].fishingRodInfos[3].status = 2
|
|||
|
|
player.gameData.shop[self.shopType].FishRodUnlock[3] = true
|
|||
|
|
self:FishUnlock(player, 1, 3)
|
|||
|
|
-- 将玩家可以获取鱼的最高等级存入redis中 提供给送礼进行使用
|
|||
|
|
skynet.server.personal:SetDetail(player.gameData.partner.id, "fishLevel", self:GetMustFishLevel(player))
|
|||
|
|
elseif v.fishType == 3 and v.progress >= 87 and not FishRodUnlock[4] then
|
|||
|
|
player.gameData.shop[self.shopType].fishingRodInfos[4].status = 2
|
|||
|
|
player.gameData.shop[self.shopType].FishRodUnlock[4] = true
|
|||
|
|
self:FishUnlock(player, 1, 4)
|
|||
|
|
-- 将玩家可以获取鱼的最高等级存入redis中 提供给送礼进行使用
|
|||
|
|
skynet.server.personal:SetDetail(player.gameData.partner.id, "fishLevel", self:GetMustFishLevel(player))
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
skynet.server.msgTips:Add(player, 56)
|
|||
|
|
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 完成度达到一百增加类型奖励红点
|
|||
|
|
for k, v in pairs(fishTypeInfos) do
|
|||
|
|
if v.progress == 100 and v.status == 0 then
|
|||
|
|
v.status = 2
|
|||
|
|
skynet.server.msgTips:Add(player, 56)
|
|||
|
|
self:FishUnlock(player, 2, v.fishType)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 手工坊红点
|
|||
|
|
local bagCount = skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Fish, fishId)
|
|||
|
|
local CraftRedDot = false
|
|||
|
|
for k1, v1 in pairs(cfgFishType) do
|
|||
|
|
if bagCount == v1.furnitureNum and v1.id == fishId then
|
|||
|
|
CraftRedDot = true
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
if CraftRedDot then
|
|||
|
|
skynet.server.msgTips:Add(player, 57)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 判断玩家鱼类数据是否需要刷新
|
|||
|
|
function FishShop:FishRefresh(player)
|
|||
|
|
-- 判断玩家的鱼类数据是否需要进行
|
|||
|
|
local fishInfos = player.gameData.shop[self.shopType].fishInfos
|
|||
|
|
local fishTypeInfos = player.gameData.shop[self.shopType].fishTypeInfos
|
|||
|
|
for k, v in pairs(fishInfos) do
|
|||
|
|
if skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Fish, v.id) > 0 and 0 == v.status then
|
|||
|
|
v.status = 1
|
|||
|
|
-- 将鱼的完成度计算出并存入玩家数据+
|
|||
|
|
local haveData = 0
|
|||
|
|
local allData = #fishTypeInfos[v.fishType].fishIds
|
|||
|
|
for k1, v1 in pairs(fishTypeInfos[v.fishType].fishIds) do
|
|||
|
|
if fishInfos[v1].status == 1 or fishInfos[v1].status == 2 then
|
|||
|
|
haveData = haveData + 1
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
fishTypeInfos[v.fishType].progress = math.floor((haveData / allData + 0.005) * 100)
|
|||
|
|
|
|||
|
|
-- 判断鱼的完成度是否解锁了鱼竿
|
|||
|
|
local FishRodUnlock = player.gameData.shop[self.shopType].FishRodUnlock
|
|||
|
|
for k, v in pairs(player.gameData.shop[self.shopType].fishTypeInfos) do
|
|||
|
|
if v.fishType == 1 and v.progress >= 66 and not FishRodUnlock[2] then
|
|||
|
|
player.gameData.shop[self.shopType].fishingRodInfos[2].status = 2
|
|||
|
|
player.gameData.shop[self.shopType].FishRodUnlock[2] = true
|
|||
|
|
self:FishUnlock(player, 1, 2)
|
|||
|
|
-- 将玩家可以获取鱼的最高等级存入redis中 提供给送礼进行使用
|
|||
|
|
skynet.server.personal:SetDetail(player.gameData.partner.id, "fishLevel",
|
|||
|
|
self:GetMustFishLevel(player))
|
|||
|
|
elseif v.fishType == 2 and v.progress >= 83 and not FishRodUnlock[3] then
|
|||
|
|
player.gameData.shop[self.shopType].fishingRodInfos[3].status = 2
|
|||
|
|
player.gameData.shop[self.shopType].FishRodUnlock[3] = true
|
|||
|
|
self:FishUnlock(player, 1, 3)
|
|||
|
|
-- 将玩家可以获取鱼的最高等级存入redis中 提供给送礼进行使用
|
|||
|
|
skynet.server.personal:SetDetail(player.gameData.partner.id, "fishLevel",
|
|||
|
|
self:GetMustFishLevel(player))
|
|||
|
|
elseif v.fishType == 3 and v.progress >= 87 and not FishRodUnlock[4] then
|
|||
|
|
player.gameData.shop[self.shopType].fishingRodInfos[4].status = 2
|
|||
|
|
player.gameData.shop[self.shopType].FishRodUnlock[4] = true
|
|||
|
|
self:FishUnlock(player, 1, 4)
|
|||
|
|
-- 将玩家可以获取鱼的最高等级存入redis中 提供给送礼进行使用
|
|||
|
|
skynet.server.personal:SetDetail(player.gameData.partner.id, "fishLevel",
|
|||
|
|
self:GetMustFishLevel(player))
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- 完成度达到一百将奖励状态修改
|
|||
|
|
for k1, v1 in pairs(fishTypeInfos) do
|
|||
|
|
if v1.progress == 100 and v1.status == 0 then
|
|||
|
|
v1.status = 2
|
|||
|
|
self:FishUnlock(player, 2, v1.fishType)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 使用蜗壳币购买鱼饵
|
|||
|
|
function FishShop:FishingLuresBuy(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SFishingLuresBuy", c2sData.data))
|
|||
|
|
local data = {}
|
|||
|
|
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg(player, "SValue")
|
|||
|
|
local methodType = c2sData.data.methodType -- 加速类型
|
|||
|
|
local isSuc = false
|
|||
|
|
if methodType == dataType.AccelerateType_Volute then
|
|||
|
|
-- 消耗玩家蜗壳币
|
|||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID", "EventID_10")
|
|||
|
|
isSuc = player:MoneyChange(pb.enum("EnumGoodsType", "VoluteCoin"), -cfgSValue.voluteCoinFishFood[1], eventId)
|
|||
|
|
elseif methodType == dataType.AccelerateType_AccTicket and
|
|||
|
|
skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Prop, 12) > 0 then
|
|||
|
|
-- 扣除一个饲料包 增加对应的鱼饵
|
|||
|
|
skynet.server.bag:RemoveGoods(player, dataType.GoodsType_Prop, 12, 1)
|
|||
|
|
player.gameData.shop[self.shopType].fishingLure = player.gameData.shop[self.shopType].fishingLure +
|
|||
|
|
cfgSValue.fishFoodPack
|
|||
|
|
-- isSuc = true
|
|||
|
|
elseif methodType == dataType.AccelerateType_ADTicket and skynet.server.ad:CanWatch(player, "GetFishingLures") and
|
|||
|
|
skynet.server.ad:PayADTicket(player, "GetFishingLures") then
|
|||
|
|
isSuc = true
|
|||
|
|
elseif methodType == dataType.AccelerateType_WatchAD and skynet.server.ad:CanWatch(player, "GetFishingLures") then
|
|||
|
|
skynet.server.ad:Update(player, "GetFishingLures")
|
|||
|
|
isSuc = true
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
if isSuc then
|
|||
|
|
player.gameData.shop[self.shopType].fishingLure = player.gameData.shop[self.shopType].fishingLure +
|
|||
|
|
cfgSValue.voluteCoinFishFood[2]
|
|||
|
|
end
|
|||
|
|
-- -- 判断蜗壳币数量是否足够
|
|||
|
|
-- local eventId = pb.enum("EnumMoneyChangeEventID", "EventID_10")
|
|||
|
|
-- -- 优先使用饲料包进行补充鱼饵
|
|||
|
|
-- if skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Prop, 12) > 0 then
|
|||
|
|
-- -- 扣除一个饲料包 增加对应的鱼饵
|
|||
|
|
-- skynet.server.bag:RemoveGoods(player, dataType.GoodsType_Prop, 12, 1)
|
|||
|
|
-- player.gameData.shop[self.shopType].fishingLure = player.gameData.shop[self.shopType].fishingLure +
|
|||
|
|
-- cfgSValue.fishFoodPack
|
|||
|
|
-- else
|
|||
|
|
-- local isSuc = player:MoneyChange(pb.enum("EnumGoodsType", "VoluteCoin"), -cfgSValue.voluteCoinFishFood[1],
|
|||
|
|
-- eventId)
|
|||
|
|
-- if isSuc then
|
|||
|
|
-- player.gameData.shop[self.shopType].fishingLure =
|
|||
|
|
-- player.gameData.shop[self.shopType].fishingLure + cfgSValue.voluteCoinFishFood[2]
|
|||
|
|
-- -- player.gameData.shop[self.shopType].fishingLure = player.gameData.shop[self.shopType].fishingLure + 5
|
|||
|
|
-- end
|
|||
|
|
-- end
|
|||
|
|
data.fishLures = player.gameData.shop[self.shopType].fishingLure
|
|||
|
|
-- 鱼饵红点
|
|||
|
|
if data.fishLures == 5 then
|
|||
|
|
skynet.server.msgTips:Add(player, 55)
|
|||
|
|
end
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_FishingLuresBuy")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CFishingLuresBuy", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 进入渔店
|
|||
|
|
function FishShop:FishGearShopEnter(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SFishGearShopEnter", c2sData.data))
|
|||
|
|
|
|||
|
|
-- 发放鱼饵
|
|||
|
|
self:giveFishingLure(player)
|
|||
|
|
local data = {}
|
|||
|
|
data.furnitureGoodsInfo={}
|
|||
|
|
local fishInfos = player.gameData.shop[self.shopType].fishInfos
|
|||
|
|
-- 背包所有鱼的信息
|
|||
|
|
data.fish = {}
|
|||
|
|
for k, v in pairs(player.gameData.bag) do
|
|||
|
|
if dataType.GoodsType_Fish == v.type then
|
|||
|
|
table.insert(data.fish, {
|
|||
|
|
goodsType = v.type,
|
|||
|
|
goodsId = v.id,
|
|||
|
|
goodsCount = v.count
|
|||
|
|
})
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- 当前鱼竿id
|
|||
|
|
for k, v in pairs(player.gameData.shop[self.shopType].fishingRodInfos) do
|
|||
|
|
if 1 == v.status then
|
|||
|
|
data.fishRod = v.id
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- 当前鱼饵数量
|
|||
|
|
data.fishLures = player.gameData.shop[self.shopType].fishingLure
|
|||
|
|
|
|||
|
|
--玩家兑换家具信息
|
|||
|
|
local cfgFishType = skynet.server.gameConfig:GetPlayerAllCfg(player, "FishType")
|
|||
|
|
|
|||
|
|
--玩家兑换家具
|
|||
|
|
for _, value in ipairs(cfgFishType) do
|
|||
|
|
if not value.furniture or value.furniture <= 0 then
|
|||
|
|
goto continue
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
local goodsNum = skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Furniture, value.furniture)
|
|||
|
|
|
|||
|
|
if (player.gameData.shop[self.shopType].ExchangeRecord == nil
|
|||
|
|
or player.gameData.shop[self.shopType].ExchangeRecord[value.furniture] == nil) and goodsNum <= 0 then
|
|||
|
|
goto continue
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
table.insert(data.furnitureGoodsInfo, {
|
|||
|
|
goodsType = dataType.GoodsType_Furniture,
|
|||
|
|
goodsId = value.furniture,
|
|||
|
|
goodsCount = goodsNum
|
|||
|
|
})
|
|||
|
|
::continue::
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
skynet.server.levelTask:Modify(player, 92, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,92, 1)
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_FishGearShopEnter")
|
|||
|
|
|
|||
|
|
s2cData.data = assert(pb.encode("S2CFishGearShopEnter", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 渔店解锁
|
|||
|
|
function FishShop:FishUnlock(player, unlockType, unlockId)
|
|||
|
|
local data = {}
|
|||
|
|
data.unlockType = unlockType; -- 解锁类型 1-鱼竿 2-任意品种的鱼
|
|||
|
|
data.unlockId = unlockId; -- 解锁id
|
|||
|
|
skynet.server.gameServer:SendMsgToUser(player.userId, "CMD_S2C_FishUnlock", data)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 开始钓鱼
|
|||
|
|
function FishShop:FishingStart(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SFishingStart", c2sData.data))
|
|||
|
|
local data = {}
|
|||
|
|
-- 消耗鱼饵
|
|||
|
|
if player.gameData.shop[self.shopType].fishingLure > 0 then
|
|||
|
|
player.gameData.shop[self.shopType].canGetFish = true
|
|||
|
|
player.gameData.shop[self.shopType].fishingLure = player.gameData.shop[self.shopType].fishingLure - 1
|
|||
|
|
data.fishLures = player.gameData.shop[self.shopType].fishingLure
|
|||
|
|
if data.fishLures == 0 then
|
|||
|
|
skynet.server.msgTips:Reduce(player, 55)
|
|||
|
|
end
|
|||
|
|
else
|
|||
|
|
data.fishLures = 0
|
|||
|
|
player.gameData.shop[self.shopType].canGetFish = false
|
|||
|
|
end
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_FishingStart")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CFishingStart", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- -- 判断当前玩家返回鱼的等级是否满足所拥有的鱼竿
|
|||
|
|
-- function FishShop:CheckLevel(player, scopeLvl)
|
|||
|
|
-- for k, v in pairs(player.gameData.shop[self.shopType].fishingRodInfos) do
|
|||
|
|
-- if 1 == v.status then
|
|||
|
|
-- for k1, v1 in pairs(v.primaryProb) do
|
|||
|
|
-- if tonumber(string.sub(v1, 1, 1)) >= scopeLvl then
|
|||
|
|
-- return true
|
|||
|
|
-- end
|
|||
|
|
-- end
|
|||
|
|
-- end
|
|||
|
|
-- end
|
|||
|
|
-- end
|
|||
|
|
|
|||
|
|
-- 钓鱼完成之后
|
|||
|
|
function FishShop:FishingComplete(player, c2sData, s2cData)
|
|||
|
|
if player.gameData.shop[self.shopType].canGetFish then
|
|||
|
|
local cfgFishRod = skynet.server.gameConfig:GetPlayerAllCfg(player, "FishRod")
|
|||
|
|
local cfgFishType = skynet.server.gameConfig:GetPlayerAllCfg(player, "FishType")
|
|||
|
|
c2sData.data = assert(pb.decode("C2SFishingComplete", c2sData.data))
|
|||
|
|
local scopeLvl = c2sData.data.scopeLvl
|
|||
|
|
-- if self:CheckLevel(player, scopeLvl) then
|
|||
|
|
-- 完成时鱼的等级
|
|||
|
|
local data = {}
|
|||
|
|
data.fish = {}
|
|||
|
|
local fishTypeInfos = player.gameData.shop[self.shopType].fishTypeInfos
|
|||
|
|
local fishInfos = player.gameData.shop[self.shopType].fishInfos
|
|||
|
|
-- 当前鱼竿id
|
|||
|
|
local fishRodId = 0
|
|||
|
|
for k, v in pairs(player.gameData.shop[self.shopType].fishingRodInfos) do
|
|||
|
|
if 1 == v.status then
|
|||
|
|
fishRodId = v.id
|
|||
|
|
-- 高级鱼竿npc任务
|
|||
|
|
if 2 == fishRodId then
|
|||
|
|
skynet.server.npcTask:Modify(player, 100, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,100, 1)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 精英鱼竿npc任务
|
|||
|
|
if 3 == fishRodId then
|
|||
|
|
skynet.server.npcTask:Modify(player, 101, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,101, 1)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
local fishScope = {}
|
|||
|
|
-- 拿到鱼类概率
|
|||
|
|
for k, v in pairs(cfgFishRod) do
|
|||
|
|
if 1 == scopeLvl then
|
|||
|
|
if v.id == fishRodId then
|
|||
|
|
for k1, v1 in pairs(v.primaryProb) do
|
|||
|
|
local arr = skynet.server.common:Split(v1, "_")
|
|||
|
|
arr[1], arr[2] = tonumber(arr[1]), tonumber(arr[2])
|
|||
|
|
table.insert(fishScope, {
|
|||
|
|
fishLevel = arr[1],
|
|||
|
|
probability = arr[2] * 100
|
|||
|
|
})
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
elseif 2 == scopeLvl then
|
|||
|
|
if v.id == fishRodId then
|
|||
|
|
for k1, v1 in pairs(v.mediumProb) do
|
|||
|
|
local arr = skynet.server.common:Split(v1, "_")
|
|||
|
|
arr[1], arr[2] = tonumber(arr[1]), tonumber(arr[2])
|
|||
|
|
table.insert(fishScope, {
|
|||
|
|
fishLevel = arr[1],
|
|||
|
|
probability = arr[2] * 100
|
|||
|
|
})
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
elseif 3 == scopeLvl then
|
|||
|
|
if v.id == fishRodId then
|
|||
|
|
for k1, v1 in pairs(v.seniorProb) do
|
|||
|
|
local arr = skynet.server.common:Split(v1, "_")
|
|||
|
|
arr[1], arr[2] = tonumber(arr[1]), tonumber(arr[2])
|
|||
|
|
table.insert(fishScope, {
|
|||
|
|
fishLevel = arr[1],
|
|||
|
|
probability = arr[2] * 100
|
|||
|
|
})
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
local fishType = 0 -- 鱼的类型等级
|
|||
|
|
local rand = math.random(1, 100)
|
|||
|
|
local count = 0
|
|||
|
|
for k, v in pairs(fishScope) do
|
|||
|
|
local probability = v.probability
|
|||
|
|
if count > 0 then
|
|||
|
|
for i = 1, count, 1 do
|
|||
|
|
probability = probability + fishScope[i].probability
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
if rand <= probability then
|
|||
|
|
fishType = v.fishLevel
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
count = count + 1
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 将出现在范围的鱼类的id存入列表
|
|||
|
|
local allFish = {}
|
|||
|
|
for k, v in pairs(cfgFishType) do
|
|||
|
|
if fishType == v.fishType then
|
|||
|
|
table.insert(allFish, v.id)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- 从满足鱼的列表中随机一个鱼的id
|
|||
|
|
local count = math.random(1, #allFish) -- #allfish 列表的长度
|
|||
|
|
local fishId = allFish[count]
|
|||
|
|
|
|||
|
|
-- 钓鱼完成之后判断是否将玩家的相关数据修改 {id = 1,status = 0}
|
|||
|
|
local redDot = false
|
|||
|
|
if 0 == fishInfos[fishId].status then
|
|||
|
|
fishInfos[fishId].status = 1
|
|||
|
|
redDot = true
|
|||
|
|
end
|
|||
|
|
-- 图鉴红点
|
|||
|
|
if redDot then
|
|||
|
|
skynet.server.msgTips:Add(player, 56)
|
|||
|
|
end
|
|||
|
|
-- 将鱼的完成度计算出并存入玩家数据+
|
|||
|
|
local haveData = 0
|
|||
|
|
|
|||
|
|
local allData = #fishTypeInfos[fishType].fishIds
|
|||
|
|
for k, v in pairs(fishTypeInfos[fishType].fishIds) do
|
|||
|
|
if fishInfos[v].status == 1 or fishInfos[v].status == 2 then
|
|||
|
|
haveData = haveData + 1
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
fishTypeInfos[fishType].progress = math.floor((haveData / allData + 0.005) * 100)
|
|||
|
|
|
|||
|
|
-- 判断鱼的完成度是否解锁了鱼竿
|
|||
|
|
local FishRodUnlock = player.gameData.shop[self.shopType].FishRodUnlock
|
|||
|
|
for k, v in pairs(player.gameData.shop[self.shopType].fishTypeInfos) do
|
|||
|
|
if v.fishType == 1 and v.progress >= 66 and not FishRodUnlock[2] then
|
|||
|
|
player.gameData.shop[self.shopType].fishingRodInfos[2].status = 2
|
|||
|
|
player.gameData.shop[self.shopType].FishRodUnlock[2] = true
|
|||
|
|
self:FishUnlock(player, 1, 2)
|
|||
|
|
-- 将玩家可以获取鱼的最高等级存入redis中 提供给送礼进行使用
|
|||
|
|
skynet.server.personal:SetDetail(player.gameData.partner.id, "fishLevel", self:GetMustFishLevel(player))
|
|||
|
|
elseif v.fishType == 2 and v.progress >= 83 and not FishRodUnlock[3] then
|
|||
|
|
player.gameData.shop[self.shopType].fishingRodInfos[3].status = 2
|
|||
|
|
player.gameData.shop[self.shopType].FishRodUnlock[3] = true
|
|||
|
|
self:FishUnlock(player, 1, 3)
|
|||
|
|
-- 将玩家可以获取鱼的最高等级存入redis中 提供给送礼进行使用
|
|||
|
|
skynet.server.personal:SetDetail(player.gameData.partner.id, "fishLevel", self:GetMustFishLevel(player))
|
|||
|
|
elseif v.fishType == 3 and v.progress >= 87 and not FishRodUnlock[4] then
|
|||
|
|
player.gameData.shop[self.shopType].fishingRodInfos[4].status = 2
|
|||
|
|
player.gameData.shop[self.shopType].FishRodUnlock[4] = true
|
|||
|
|
self:FishUnlock(player, 1, 4)
|
|||
|
|
-- 将玩家可以获取鱼的最高等级存入redis中 提供给送礼进行使用
|
|||
|
|
skynet.server.personal:SetDetail(player.gameData.partner.id, "fishLevel", self:GetMustFishLevel(player))
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- 完成度达到一百将奖励状态修改
|
|||
|
|
for k, v in pairs(fishTypeInfos) do
|
|||
|
|
if v.progress == 100 and v.status == 0 then
|
|||
|
|
v.status = 2
|
|||
|
|
skynet.server.msgTips:Add(player, 56)
|
|||
|
|
self:FishUnlock(player, 2, v.fishType)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- 将鱼存入背包,并将鱼的id返回客户端
|
|||
|
|
skynet.server.bag:AddGoods(player, dataType.GoodsType_Fish, fishId, 1)
|
|||
|
|
local bagCount = skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Fish, fishId)
|
|||
|
|
data.fish = {
|
|||
|
|
goodsType = dataType.GoodsType_Fish,
|
|||
|
|
goodsId = fishId,
|
|||
|
|
goodsCount = bagCount
|
|||
|
|
}
|
|||
|
|
player:AddExpCount(5)
|
|||
|
|
-- 手工坊红点
|
|||
|
|
local CraftRedDot = false
|
|||
|
|
for k1, v1 in pairs(cfgFishType) do
|
|||
|
|
if bagCount == v1.furnitureNum and v1.id == fishId then
|
|||
|
|
CraftRedDot = true
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
if CraftRedDot then
|
|||
|
|
skynet.server.msgTips:Add(player, 57)
|
|||
|
|
end
|
|||
|
|
-- 钓鱼任务
|
|||
|
|
if 1 == cfgFishType[fishId].fishType then--淡水鱼
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,128, 1)
|
|||
|
|
elseif 2 == cfgFishType[fishId].fishType then--沿海鱼
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,113, 1)
|
|||
|
|
elseif 3 == cfgFishType[fishId].fishType then--远海鱼
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,129, 1)
|
|||
|
|
elseif 4 == cfgFishType[fishId].fishType then--深海鱼
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,130, 1)
|
|||
|
|
end
|
|||
|
|
skynet.server.levelTask:Modify(player, 64, 1)
|
|||
|
|
skynet.server.achieveTask:Modify(player, 64, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,64, 1)
|
|||
|
|
--skynet.server.taskListEvent:Modify( player ,27, 1)
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_FishingComplete")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CFishingComplete", data))
|
|||
|
|
-- end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 手工坊家具兑换
|
|||
|
|
function FishShop:FishCraftRedeem(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SFishCraftRedeem", c2sData.data))
|
|||
|
|
local fishId = c2sData.data.fishId
|
|||
|
|
local data = {}
|
|||
|
|
local cfgFishType = skynet.server.gameConfig:GetPlayerAllCfg(player, "FishType")
|
|||
|
|
local bagCount = skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Fish, fishId)
|
|||
|
|
data.goodsType = dataType.GoodsType_Furniture -- 兑换商品类型 11-家具 12-装修
|
|||
|
|
data.buyGoods = {} -- 兑换货物
|
|||
|
|
data.fish = {} -- 对应消耗完成之后的鱼
|
|||
|
|
|
|||
|
|
--是否存在该商品
|
|||
|
|
local repeatRebate = nil
|
|||
|
|
--兑换家具
|
|||
|
|
local furniture = 0
|
|||
|
|
|
|||
|
|
for k, v in pairs(player.gameData.shop[self.shopType].fishInfos) do
|
|||
|
|
if v.id == fishId then
|
|||
|
|
|
|||
|
|
--资源不足
|
|||
|
|
if bagCount < v.furnitureNum then
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_FishCraftRedeem")
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.OpFailed
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
data.fish = {
|
|||
|
|
goodsType = dataType.GoodsType_Fish,
|
|||
|
|
goodsId = v.id,
|
|||
|
|
goodsCount = bagCount - v.furnitureNum
|
|||
|
|
}
|
|||
|
|
-- 将鱼从背包扣除
|
|||
|
|
skynet.server.bag:RemoveGoods(player, dataType.GoodsType_Fish, fishId, v.furnitureNum)
|
|||
|
|
skynet.server.levelTask:Modify(player, 93, 1)
|
|||
|
|
skynet.server.npcTask:Modify(player, 93, 1)
|
|||
|
|
skynet.server.taskListEvent:Modify( player ,93, 1)
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
for k, v in pairs(cfgFishType) do
|
|||
|
|
if v.id == fishId then
|
|||
|
|
data.buyGoods = {
|
|||
|
|
id = v.furniture, -- 商品ID
|
|||
|
|
buyCount = 1 -- 购买数量
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
--是否已存在
|
|||
|
|
repeatRebate=v.repeatRebate
|
|||
|
|
furniture=v.furniture
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
local redDot = false
|
|||
|
|
-- 判断红点是否移除
|
|||
|
|
for k1, v1 in pairs(cfgFishType) do
|
|||
|
|
for k2, v2 in pairs(player.gameData.bag) do
|
|||
|
|
if dataType.GoodsType_Fish == v2.type then
|
|||
|
|
if v1.id == v2.id and v2.count >= v1.furnitureNum then
|
|||
|
|
redDot = true
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
if not redDot then
|
|||
|
|
skynet.server.msgTips:ReduceAll(player, 57)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--获取原有道具
|
|||
|
|
local goodsNum = skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Furniture, data.buyGoods.id)
|
|||
|
|
|
|||
|
|
-- 将兑换后的家具存入背包
|
|||
|
|
skynet.server.bag:AddGoods(player, dataType.GoodsType_Furniture, data.buyGoods.id, 1)
|
|||
|
|
|
|||
|
|
--发奖返利奖励
|
|||
|
|
if (player.gameData.shop[self.shopType].ExchangeRecord ~= nil
|
|||
|
|
and player.gameData.shop[self.shopType].ExchangeRecord[furniture] ~= nil or goodsNum > 0)
|
|||
|
|
and repeatRebate then
|
|||
|
|
|
|||
|
|
data.repeatRebate=repeatRebate
|
|||
|
|
|
|||
|
|
--发放返利奖励
|
|||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_141")
|
|||
|
|
player:GiveReward(repeatRebate , eventId ,1)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--添加兑换记录信息
|
|||
|
|
if player.gameData.shop[self.shopType].ExchangeRecord == nil then
|
|||
|
|
player.gameData.shop[self.shopType].ExchangeRecord={}
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
if player.gameData.shop[self.shopType].ExchangeRecord[furniture] == nil then
|
|||
|
|
player.gameData.shop[self.shopType].ExchangeRecord[furniture]=furniture
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_FishCraftRedeem")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CFishCraftRedeem", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 鱼类百科展示
|
|||
|
|
function FishShop:FishIllustartionShow(player, c2sData, s2cData)
|
|||
|
|
self:FishRefresh(player)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SFishIllustartionShow", c2sData.data))
|
|||
|
|
local data = {}
|
|||
|
|
local fishTypeInfos = player.gameData.shop[self.shopType].fishTypeInfos
|
|||
|
|
local fishInfos = player.gameData.shop[self.shopType].fishInfos
|
|||
|
|
-- 已领取的每个种类鱼类图鉴id
|
|||
|
|
data.fishGroupIllustrationId = {}
|
|||
|
|
for k, v in pairs(fishTypeInfos) do
|
|||
|
|
if 1 == v.status then
|
|||
|
|
table.insert(data.fishGroupIllustrationId, v.fishType)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- 已领取的单个鱼类图鉴id
|
|||
|
|
data.singleFishillustrationId = {}
|
|||
|
|
for k, v in pairs(fishInfos) do
|
|||
|
|
if 2 == v.status then
|
|||
|
|
table.insert(data.singleFishillustrationId, v.id)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_FishIllustartionShow")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CFishIllustartionShow", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 鱼竿展示
|
|||
|
|
function FishShop:FishRodShow(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SFishRodShow", c2sData.data))
|
|||
|
|
local data = {}
|
|||
|
|
-- local fishingRodInfos = player.gameData.shop[self.shopType].fishingRodInfos
|
|||
|
|
data.fishRod = {}
|
|||
|
|
|
|||
|
|
for k, v in pairs(player.gameData.shop[self.shopType].fishingRodInfos) do
|
|||
|
|
table.insert(data.fishRod, {
|
|||
|
|
id = v.id,
|
|||
|
|
status = v.status
|
|||
|
|
})
|
|||
|
|
end
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_FishRodShow")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CFishRodShow", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 鱼竿切换
|
|||
|
|
function FishShop:FishRodChange(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SFishRodChange", c2sData.data))
|
|||
|
|
local rodId = c2sData.data.rodId
|
|||
|
|
local data = {}
|
|||
|
|
-- local fishingRodInfos = player.gameData.shop[self.shopType].fishingRodInfos
|
|||
|
|
data.fishRod = {}
|
|||
|
|
-- 切换鱼竿改变鱼竿状态
|
|||
|
|
for k, v in pairs(player.gameData.shop[self.shopType].fishingRodInfos) do
|
|||
|
|
if v.id == rodId then
|
|||
|
|
v.status = 1
|
|||
|
|
table.insert(data.fishRod, v)
|
|||
|
|
else
|
|||
|
|
if v.status == 1 then
|
|||
|
|
v.status = 2
|
|||
|
|
table.insert(data.fishRod, v)
|
|||
|
|
else
|
|||
|
|
table.insert(data.fishRod, v)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
player.gameData.shop[self.shopType].fishingRodInfos = data.fishRod
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_FishRodChange")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CFishRodChange", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 三叶币奖励增加
|
|||
|
|
function FishShop:CloversAdd(player, awardId)
|
|||
|
|
local cfgReward = skynet.server.gameConfig:GetPlayerAllCfg(player, "Reward")
|
|||
|
|
for k, v in pairs(cfgReward) do
|
|||
|
|
if v.id == awardId then
|
|||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID", "EventID_46")
|
|||
|
|
player:MoneyChange(pb.enum("EnumGoodsType", "Clovers"), v.mapCoin, eventId)
|
|||
|
|
return v.mapCoin
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 获取奖励配置三叶币数量
|
|||
|
|
function FishShop:GetCloversAddNum(player, awardId)
|
|||
|
|
local cfgReward = skynet.server.gameConfig:GetPlayerAllCfg(player, "Reward")
|
|||
|
|
for k, v in pairs(cfgReward) do
|
|||
|
|
if v.id == awardId then
|
|||
|
|
return v.mapCoin
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 领取图鉴奖励
|
|||
|
|
function FishShop:FishIllustrationAward(player, c2sData, s2cData)
|
|||
|
|
c2sData.data = assert(pb.decode("C2SFishIllustrationAward", c2sData.data))
|
|||
|
|
local type = c2sData.data.type
|
|||
|
|
local id = c2sData.data.id
|
|||
|
|
local data = {}
|
|||
|
|
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg(player, "SValue")
|
|||
|
|
local fishTypeInfos = player.gameData.shop[self.shopType].fishTypeInfos
|
|||
|
|
local fishInfos = player.gameData.shop[self.shopType].fishInfos
|
|||
|
|
-- 判断该鱼类奖励有没有领取
|
|||
|
|
data.type = type
|
|||
|
|
data.award = {}
|
|||
|
|
-- 领取鱼类图鉴对应奖励
|
|||
|
|
if 1 == type then
|
|||
|
|
data.fishGroupIllustrationId = {}
|
|||
|
|
for k, v in pairs(fishTypeInfos) do
|
|||
|
|
if v.fishType == id then
|
|||
|
|
if 2 == v.status then
|
|||
|
|
v.status = 1
|
|||
|
|
for k1, v1 in pairs(cfgSValue.fishUnlockReward) do
|
|||
|
|
if k1 == id then
|
|||
|
|
table.insert(data.award, {
|
|||
|
|
type = dataType.GoodsType_Clovers,
|
|||
|
|
id = v1,
|
|||
|
|
count = self:GetCloversAddNum(player, v1) -- 对应奖励增加对应三叶币
|
|||
|
|
})
|
|||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID", "EventID_81")
|
|||
|
|
player:GiveRewardNpc(v1, self.NPCId, eventId)
|
|||
|
|
skynet.server.msgTips:Reduce(player, 56)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
else
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.AlreadyGetFishAward
|
|||
|
|
s2cData.desc = errorInfo.ErrorMsg[s2cData.code]
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
if 1 == v.status or v.fishType == id then
|
|||
|
|
table.insert(data.fishGroupIllustrationId, v.fishType)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
-- 领取单个鱼图鉴对应奖励
|
|||
|
|
if 2 == type then
|
|||
|
|
data.singleFishillustrationId = {}
|
|||
|
|
for k, v in pairs(fishInfos) do
|
|||
|
|
if v.id == id then
|
|||
|
|
if 1 == v.status then
|
|||
|
|
v.status = 2
|
|||
|
|
table.insert(data.award, {
|
|||
|
|
type = dataType.GoodsType_Clovers,
|
|||
|
|
id = v.award,
|
|||
|
|
count = self:GetCloversAddNum(player, v.award) -- 对应奖励增加对应三叶币
|
|||
|
|
})
|
|||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID", "EventID_81")
|
|||
|
|
player:GiveRewardNpc(v.award, self.NPCId, eventId)
|
|||
|
|
skynet.server.msgTips:Reduce(player, 56)
|
|||
|
|
else
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.AlreadyGetFishAward
|
|||
|
|
s2cData.desc = errorInfo.ErrorMsg[s2cData.code]
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
if v.status == 2 or v.id == id then
|
|||
|
|
table.insert(data.singleFishillustrationId, v.id)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
local redDot = false
|
|||
|
|
-- 判断图鉴红点是否移除
|
|||
|
|
for k, v in pairs(player.gameData.shop[self.shopType].fishInfos) do
|
|||
|
|
if v.status == 1 then
|
|||
|
|
redDot = true
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
for k, v in pairs(player.gameData.shop[self.shopType].fishTypeInfos) do
|
|||
|
|
if v.status == 2 then
|
|||
|
|
redDot = true
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
if not redDot then
|
|||
|
|
skynet.server.msgTips:Reduce(player, 56)
|
|||
|
|
-- log.info('红点数量' .. skynet.server.common:TableToString(skynet.server.common:GetOneTips(player).count))
|
|||
|
|
end
|
|||
|
|
s2cData.cmd = pb.enum("MsgType", "CMD_S2C_FishIllustrationAward")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CFishIllustrationAward", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 该玩家可获取的最高等级的鱼
|
|||
|
|
function FishShop:GetMustFishLevel(player)
|
|||
|
|
local fishRodId = 1
|
|||
|
|
local cfgFishRod = skynet.server.gameConfig:GetPlayerAllCfg(player, "FishRod")
|
|||
|
|
for k, v in pairs(player.gameData.shop[self.shopType].fishingRodInfos) do
|
|||
|
|
if v.status > 1 and v.id > fishRodId then
|
|||
|
|
fishRodId = v.id
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
local fishLevel = 1
|
|||
|
|
for k, v in pairs(cfgFishRod[fishRodId].primaryProb) do
|
|||
|
|
local arr = skynet.server.common:Split(v, "_")
|
|||
|
|
arr[1], arr[2] = tonumber(arr[1]), tonumber(arr[2])
|
|||
|
|
if arr[1] > fishLevel then
|
|||
|
|
fishLevel = arr[1]
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
return fishLevel
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
skynet.server.fishShop = FishShop
|
|||
|
|
return FishShop
|