PGRData/Script/matrix/xui/xuiguild/XUiGuildShop.lua

189 lines
6.3 KiB
Lua

local XUiGuildShop = XLuaUiManager.Register(XLuaUi, "UiGuildShop")
local XUiGuildGridShop = require("XUi/XUiGuild/XUiChildItem/XUiGuildGridShop")
function XUiGuildShop:OnAwake()
self:InitChildView()
XEventManager.AddEventListener(XEventId.EVENT_GUILD_CONTRIBUTE_CHANGED, self.RefreshComsumeCoin, self)
end
function XUiGuildShop:OnDestroy()
self:StopCountDown()
XEventManager.RemoveEventListener(XEventId.EVENT_GUILD_CONTRIBUTE_CHANGED, self.RefreshComsumeCoin, self)
end
function XUiGuildShop:OnStart(shopId)
self.ShopItemList = XShopManager.GetShopGoodsList(shopId)
self.ShopId = shopId
self:RefreshShopList()
self:RefreshComsumeCoin()
if self.ShopId == XGuildConfig.GuildPurchaseShop then
self.RImgConsume:SetRawImage(XDataCenter.ItemManager.GetItemIcon(XGuildConfig.GuildContributeCoin))
self.TxtShopName.text = CS.XTextManager.GetText("GuildPurchaseShopTitle")
else
self.RImgConsume:SetRawImage(XDataCenter.ItemManager.GetItemIcon(XGuildConfig.GuildCoin))
self.TxtShopName.text = CS.XTextManager.GetText("GuildNormalShopTitle")
end
self:StartCountDown()
end
-- 花费的货币变化
function XUiGuildShop:RefreshComsumeCoin()
if self.ShopId == XGuildConfig.GuildPurchaseShop then
self.TxtConsumeCoin.text = XDataCenter.GuildManager.GetGuildContributeLeft()
else
self.TxtConsumeCoin.text = XDataCenter.ItemManager.GetCount(XGuildConfig.GuildCoin)
end
end
function XUiGuildShop:RefreshShopList()
self.DynamicShopTable:SetDataSource(self.ShopItemList)
self.DynamicShopTable:ReloadDataASync()
end
function XUiGuildShop:InitChildView()
self.BtnTanchuangClose.CallBack = function() self:OnBtnTanchuangClose() end
self.DynamicShopTable = XDynamicTableNormal.New(self.PanelList.gameObject)
self.DynamicShopTable:SetProxy(XUiGuildGridShop)
self.DynamicShopTable:SetDelegate(self)
XDataCenter.ItemManager.AddCountUpdateListener(XGuildConfig.GuildCoin, function()
self:RefreshComsumeCoin()
end, self.TxtConsumeCoin)
end
function XUiGuildShop:OnDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
grid:Init(self)
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
local data = self.ShopItemList[index]
if not data then return end
grid:UpdateData(data)
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
local data = self.ShopItemList[index]
if not data then return end
self:OnGridItemClick(data)
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_RECYCLE then
grid:OnRecycle()
end
end
function XUiGuildShop:OnGridItemClick(data)
local title = CS.XTextManager.GetText("GuildDialogTitle")
local goodsParams = XGoodsCommonManager.GetGoodsShowParamsByTemplateId(data.RewardGoods.TemplateId)
local rewardName = goodsParams.Name
if goodsParams.RewardType == XArrangeConfigs.Types.Character then
rewardName = goodsParams.TradeName
end
local consumeStr = ""
for _, consume in pairs(data.ConsumeList or {}) do
local consumeName = XDataCenter.ItemManager.GetItemName(consume.Id)
local consumeCount = consume.Count
local perConsume = string.format("%d%s", consumeCount, consumeName)
if consumeStr == "" then
consumeStr = perConsume
else
consumeStr = string.forma("%s,%s", consumeStr, perConsume)
end
end
local content = CS.XTextManager.GetText("GuildShopIsCostBuy", consumeStr, rewardName)
-- 次数是否足够
local totalBuyTimes = data.TotalBuyTimes
local totalCanBuyTimes = data.RewardGoods.Count
if totalBuyTimes >= totalCanBuyTimes then
XUiManager.TipMsg(CS.XTextManager.GetText("GuildShopNotEnoughBuyCount"))
return
end
-- 购买材料是否足够
for _, consume in pairs(data.ConsumeList or {}) do
if not XDataCenter.ItemManager.DoNotEnoughBuyAsset(consume.Id, consume.Count, 1, function()
self:OnGridItemClick(data)
end, "BuyNeedItemInsufficient") then
return
end
end
local func = function()
XUiManager.TipText("BuySuccess")
XShopManager.GetShopInfo(self.ShopId, function()
self.ShopItemList = XShopManager.GetShopGoodsList(self.ShopId)
self:RefreshShopList()
end)
end
local err_func = function()
XShopManager.GetShopInfo(self.ShopId, function()
self.ShopItemList = XShopManager.GetShopGoodsList(self.ShopId)
self:RefreshShopList()
self:RefreshComsumeCoin()
end)
end
XUiManager.DialogTip(title, content, XUiManager.DialogType.Normal, function()
end, function()
-- 判断是否具有权限
if not XDataCenter.GuildManager.CheckShopBuyAccess(self.ShopId) then
XUiManager.TipMsg(CS.XTextManager.GetText("GuildNotAdministor"))
self:Close()
return
end
XShopManager.BuyShop(self.ShopId, data.Id, 1, func, err_func)
end)
end
function XUiGuildShop:UpdateBuy()
end
function XUiGuildShop:StartCountDown()
self:StopCountDown()
if not self.ShopId then return end
local timeInfo = XShopManager.GetShopTimeInfo(self.ShopId)
if not timeInfo or not next(timeInfo) then
return
end
local dataTime = XUiHelper.GetTime(timeInfo.RefreshLeftTime, XUiHelper.TimeFormatType.SHOP)
self.TextTime.text = dataTime
self.CountTimer = XScheduleManager.ScheduleForever(function()
if timeInfo.RefreshLeftTime <= 0 then
self:StopCountDown()
XShopManager.GetShopInfo(self.ShopId, function()
self.ShopItemList = XShopManager.GetShopGoodsList(self.ShopId)
self:RefreshShopList()
self:StartCountDown()
end)
return
end
timeInfo.RefreshLeftTime = timeInfo.RefreshLeftTime - 1
local tmpDataTime = XUiHelper.GetTime(timeInfo.RefreshLeftTime, XUiHelper.TimeFormatType.SHOP)
self.TextTime.text = tmpDataTime
end, XScheduleManager.SECOND, 0)
end
function XUiGuildShop:StopCountDown()
if self.CountTimer ~= nil then
XScheduleManager.UnSchedule(self.CountTimer)
self.CountTimer = nil
end
end
function XUiGuildShop:OnBtnTanchuangClose()
self:Close()
end