PGRData/Resources/Scripts/XEntity/XMiniGame/ComposeFactory/XComposeGame.lua
2022-12-26 14:06:01 +05:30

316 lines
No EOL
10 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 合成小游戏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