316 lines
10 KiB
Lua
316 lines
10 KiB
Lua
|
-- 合成小游戏Game对象
|
|||
|
local XComposeGame = XClass(nil, "XComposeGame")
|
|||
|
--=============数据结构================
|
|||
|
--======活动信息ComposeGameDataDb=============
|
|||
|
-- 活动Id
|
|||
|
-- int ActId
|
|||
|
-- 当前进度
|
|||
|
-- int Schedule
|
|||
|
-- 刷新次数
|
|||
|
-- int RefreshCount
|
|||
|
-- 增加刷新次数时间戳(为 0 表示已达上限)
|
|||
|
-- int RefreshTime
|
|||
|
-- 商品列表
|
|||
|
-- List<int> GoodsList
|
|||
|
-- 商店列表
|
|||
|
-- List<ComposeShopInfo> ShopInfos
|
|||
|
-- 已领取奖励列表
|
|||
|
-- List<int> RecvSchedule
|
|||
|
--=============================================
|
|||
|
|
|||
|
--==========商品信息ComposeShopInfo=============
|
|||
|
-- 标志Id
|
|||
|
-- int Id
|
|||
|
-- 商品Id
|
|||
|
-- int Goods
|
|||
|
-- 是否已出售
|
|||
|
-- bool IsSell
|
|||
|
--=============================================
|
|||
|
--=================== END =====================
|
|||
|
|
|||
|
--==========构造函数,初始化,实体操作==========
|
|||
|
|
|||
|
--==================
|
|||
|
--构造函数
|
|||
|
--@param ComposeGameDataDb:NotifyComposeActivityInfo通知活动信息
|
|||
|
--==================
|
|||
|
function XComposeGame:Ctor(ComposeGameDataDb)
|
|||
|
self.GameConfig = XComposeGameConfig.GetGameConfigsByGameId(ComposeGameDataDb.ActId or 1)
|
|||
|
self:InitBag(ComposeGameDataDb)
|
|||
|
self:InitShop(ComposeGameDataDb)
|
|||
|
self:InitTreasure(ComposeGameDataDb)
|
|||
|
self:SetRefreshStatus(ComposeGameDataDb)
|
|||
|
end
|
|||
|
--==================
|
|||
|
--初始化此活动背包
|
|||
|
--@param ComposeGameDataDb:NotifyComposeActivityInfo通知活动信息
|
|||
|
--==================
|
|||
|
function XComposeGame:InitBag(ComposeGameDataDb)
|
|||
|
local XItemBag = require("XEntity/XMiniGame/ComposeFactory/XComposeGameItemBag")
|
|||
|
self.Bag = XItemBag.New(self, ComposeGameDataDb)
|
|||
|
end
|
|||
|
--==================
|
|||
|
--初始化此活动商店
|
|||
|
--@param ComposeGameDataDb:NotifyComposeActivityInfo通知活动信息
|
|||
|
--==================
|
|||
|
function XComposeGame:InitShop(ComposeGameDataDb)
|
|||
|
local XShop = require("XEntity/XMiniGame/ComposeFactory/XComposeGameShop")
|
|||
|
self.Shop = XShop.New(self, ComposeGameDataDb)
|
|||
|
end
|
|||
|
--==================
|
|||
|
--初始化此活动进度宝箱
|
|||
|
--@param ComposeGameDataDb:NotifyComposeActivityInfo通知活动信息
|
|||
|
--==================
|
|||
|
function XComposeGame:InitTreasure(ComposeGameDataDb)
|
|||
|
local XTreasure = require("XEntity/XMiniGame/ComposeFactory/XComposeGameProgressTreasure")
|
|||
|
self.Treasure = XTreasure.New(self, ComposeGameDataDb)
|
|||
|
end
|
|||
|
--==================
|
|||
|
--初始化此活动刷新
|
|||
|
--@param ComposeGameDataDb:NotifyComposeActivityInfo通知活动信息
|
|||
|
--==================
|
|||
|
function XComposeGame:SetRefreshStatus(ComposeGameDataDb)
|
|||
|
if not ComposeGameDataDb then return end
|
|||
|
self.RefreshCount = ComposeGameDataDb.RefreshCount or 0
|
|||
|
self.RefreshTime = ComposeGameDataDb.RefreshTime or 0
|
|||
|
CsXGameEventManager.Instance:Notify(XEventId.EVENT_COMPOSEGAME_SHOP_REFRESH_TIME_CHANGE)
|
|||
|
end
|
|||
|
--==================
|
|||
|
--根据通知活动信息刷新活动
|
|||
|
--@param ComposeGameDataDb:NotifyComposeActivityInfo通知活动信息
|
|||
|
--==================
|
|||
|
function XComposeGame:RefreshComposeGameData(ComposeGameDataDb)
|
|||
|
self.Bag:RefreshComposeGameData(ComposeGameDataDb)
|
|||
|
self.Shop:RefreshComposeGameData(ComposeGameDataDb)
|
|||
|
self.Treasure:RefreshComposeGameData(ComposeGameDataDb)
|
|||
|
self:SetRefreshStatus(ComposeGameDataDb)
|
|||
|
end
|
|||
|
--==================
|
|||
|
--根据通知活动信息刷新背包
|
|||
|
--@param ComposeGoodsInfo:NotifyComposeGoodsInfo通知活动信息
|
|||
|
--==================
|
|||
|
function XComposeGame:RefreshBagGoodsList(ComposeGoodsInfo)
|
|||
|
self.Bag:RefreshComposeGameData(ComposeGoodsInfo)
|
|||
|
end
|
|||
|
--==================
|
|||
|
--根据通知活动信息刷新商店
|
|||
|
--@param ComposeGoodsInfo:NotifyComposeGoodsInfo通知活动信息
|
|||
|
--==================
|
|||
|
function XComposeGame:RefreshShopInfoList(ComposeShopInfos)
|
|||
|
self.Shop:RefreshShopByShopInfos(ComposeShopInfos)
|
|||
|
end
|
|||
|
--==================
|
|||
|
--购买道具
|
|||
|
--==================
|
|||
|
function XComposeGame:BuyItem(itemId)
|
|||
|
self.Bag:BuyItem(itemId)
|
|||
|
end
|
|||
|
--==================
|
|||
|
--根据道具ID合成道具
|
|||
|
--@param itemId:要合成的道具
|
|||
|
--==================
|
|||
|
function XComposeGame:ComposeItem(item)
|
|||
|
self:RefreshBagGrids()
|
|||
|
CsXGameEventManager.Instance:Notify(XEventId.EVENT_COMPOSEGAME_ITEM_COMPOSE, item)
|
|||
|
self.Treasure:SetSchedule(item:GetGainSchedule())
|
|||
|
end
|
|||
|
--==================
|
|||
|
--刷新背包格
|
|||
|
--==================
|
|||
|
function XComposeGame:RefreshBagGrids()
|
|||
|
self.Bag:RefreshGridsByItems()
|
|||
|
end
|
|||
|
--=================== END =====================
|
|||
|
|
|||
|
--=================对外接口(Get,Set,Check等接口)================
|
|||
|
--==================
|
|||
|
--获取活动ID
|
|||
|
--==================
|
|||
|
function XComposeGame:GetGameId()
|
|||
|
return self.GameConfig and self.GameConfig.Id or 0
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取活动时间ID
|
|||
|
--==================
|
|||
|
function XComposeGame:GetTimeId()
|
|||
|
return self.GameConfig and self.GameConfig.TimeId or 0
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取活动通用货币的道具ID
|
|||
|
--==================
|
|||
|
function XComposeGame:GetCoinId()
|
|||
|
return self.GameConfig and self.GameConfig.CoinId or 0
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取活动刷新次数上限
|
|||
|
--==================
|
|||
|
function XComposeGame:GetRefreshCountLimit()
|
|||
|
return self.GameConfig and self.GameConfig.RefreshCountLimit or 0
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取活动商店刷新次数时长
|
|||
|
--==================
|
|||
|
function XComposeGame:GetRefreshTimeSec()
|
|||
|
return self.GameConfig and self.GameConfig.RefreshTimeSec or 0
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取活动最大进度
|
|||
|
--==================
|
|||
|
function XComposeGame:GetMaxSchedule()
|
|||
|
return self.GameConfig and self.GameConfig.MaxSchedule or 0
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取当前活动进度
|
|||
|
--==================
|
|||
|
function XComposeGame:GetCurrentSchedule()
|
|||
|
return self.Treasure and self.Treasure:GetCurrentSchedule() or 0
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取活动商店随机数量
|
|||
|
--==================
|
|||
|
function XComposeGame:GetShopRandCount()
|
|||
|
return self.GameConfig and self.GameConfig.ShopRandCount or 0
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取活动进度刻度列表
|
|||
|
--==================
|
|||
|
function XComposeGame:GetSchedule()
|
|||
|
return self.GameConfig and self.GameConfig.Schedule or {}
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取活动奖励ID列表
|
|||
|
--==================
|
|||
|
function XComposeGame:GetRewardId()
|
|||
|
return self.GameConfig and self.GameConfig.RewardId or {}
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取活动商店现在可刷新次数
|
|||
|
--==================
|
|||
|
function XComposeGame:GetRefreshCount()
|
|||
|
return self.RefreshCount
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取活动下一次增加刷新次数的时间戳
|
|||
|
--==================
|
|||
|
function XComposeGame:GetRefreshTime()
|
|||
|
return self.RefreshTime
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取活动代币刷新次数的价格
|
|||
|
--==================
|
|||
|
function XComposeGame:GetRefreshPrice()
|
|||
|
return self.GameConfig and self.GameConfig.RefreshPrice or 1
|
|||
|
end
|
|||
|
|
|||
|
function XComposeGame:GetRefreshTimeIsMax()
|
|||
|
return self:GetRefreshCount() >= self:GetRefreshCountLimit()
|
|||
|
end
|
|||
|
|
|||
|
function XComposeGame:CheckCanRefresh()
|
|||
|
local count = self:GetRefreshCount()
|
|||
|
return count > 0
|
|||
|
end
|
|||
|
|
|||
|
function XComposeGame:CheckCanBuyRefresh()
|
|||
|
return false --self:CheckEnoughCoin(self:GetRefreshPrice())
|
|||
|
end
|
|||
|
--==================
|
|||
|
--根据道具ID获取背包中该ID的道具数量
|
|||
|
--@param itemId:玩法道具ID
|
|||
|
--==================
|
|||
|
function XComposeGame:GetItemCount(itemId)
|
|||
|
return self.Bag:GetItemCount(itemId)
|
|||
|
end
|
|||
|
--==================
|
|||
|
--根据道具ID获取背包中该ID是否新获得
|
|||
|
--@param itemId:玩法道具ID
|
|||
|
--==================
|
|||
|
function XComposeGame:GetItemIsNew(itemId)
|
|||
|
return self.Bag:GetItemIsNew(itemId)
|
|||
|
end
|
|||
|
--================
|
|||
|
--获取当前刷新次数展示字符串
|
|||
|
--================
|
|||
|
function XComposeGame:GetRefreshStr()
|
|||
|
return string.format("%d/%d", self:GetRefreshCount(), self:GetRefreshCountLimit())
|
|||
|
end
|
|||
|
|
|||
|
function XComposeGame:GetBeginStoryId()
|
|||
|
local GameCfg = XComposeGameConfig.GetClientConfigByGameId(self:GetGameId())
|
|||
|
if not GameCfg then return end
|
|||
|
local storyId = GameCfg.BeginStoryId or GameCfg.DebugStartTime --因为要热更更新,不能更改C#的XTable,暂时用已有字段DebugStartTime项代用,以后使用BeginStoryId
|
|||
|
return storyId or ""
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取活动是否开启时间
|
|||
|
--==================
|
|||
|
function XComposeGame:CheckIsOpenTime()
|
|||
|
local timeNow = XTime.GetServerNowTimestamp()
|
|||
|
local isEnd = timeNow >= self:GetEndTime()
|
|||
|
local isStart = timeNow >= self:GetStartTime()
|
|||
|
local inTime = (not isEnd) and (isStart)
|
|||
|
return inTime, (timeNow < self:GetStartTime())
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取活动结束时间
|
|||
|
--==================
|
|||
|
function XComposeGame:GetEndTime()
|
|||
|
return XFunctionManager.GetEndTimeByTimeId(self:GetTimeId()) or 0
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取活动开始时间
|
|||
|
--==================
|
|||
|
function XComposeGame:GetStartTime()
|
|||
|
return XFunctionManager.GetStartTimeByTimeId(self:GetTimeId()) or 0
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取现有代币数量
|
|||
|
--==================
|
|||
|
function XComposeGame:GetCoinNum()
|
|||
|
return XDataCenter.ItemManager.GetCount(self:GetCoinId()) or 0
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取商店格列表
|
|||
|
--==================
|
|||
|
function XComposeGame:GetShopGrids()
|
|||
|
return self.Shop:GetShopGrids()
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取背包格列表
|
|||
|
--==================
|
|||
|
function XComposeGame:GetBagGrids()
|
|||
|
return self.Bag:GetGrids()
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取进度宝箱列表
|
|||
|
--==================
|
|||
|
function XComposeGame:GetTreasureBoxes()
|
|||
|
return self.Treasure and self.Treasure:GetTreasureBoxes() or {}
|
|||
|
end
|
|||
|
--==================
|
|||
|
--获取活动开始时间
|
|||
|
--==================
|
|||
|
function XComposeGame:CheckCanBuyItem(item)
|
|||
|
if not self:CheckEnoughCoin(item:GetCostCoinNum()) then
|
|||
|
return false, CS.XTextManager.GetText("ComposeGameCoinNotEnough")
|
|||
|
end
|
|||
|
if not self:CheckEnoughGrids() then
|
|||
|
return false, CS.XTextManager.GetText("ComposeGameGridsNotEnough")
|
|||
|
end
|
|||
|
return true
|
|||
|
end
|
|||
|
--==================
|
|||
|
--检查是否有足够代币
|
|||
|
--==================
|
|||
|
function XComposeGame:CheckEnoughCoin(checkNum)
|
|||
|
local coinNum = self:GetCoinNum()
|
|||
|
return coinNum >= checkNum
|
|||
|
end
|
|||
|
--==================
|
|||
|
--检查是否背包有空位
|
|||
|
--==================
|
|||
|
function XComposeGame:CheckEnoughGrids()
|
|||
|
return not self.Bag:CheckIsFull()
|
|||
|
end
|
|||
|
--=================== END =====================
|
|||
|
return XComposeGame
|