PGRData/Script/matrix/xmanager/XSpecialShopManager.lua

216 lines
7.9 KiB
Lua
Raw Normal View History

XSpecialShopManagerCreator = function()
2024-09-01 20:49:41 +00:00
local ScreenAll = CS.XTextManager.GetText("ScreenAll")
local XSpecialShopManager = {}
---
--- 根据商品数据得到对应的配置Id
local function GetFashionId(shopGoodsData)
local templateId = 0
if type(shopGoodsData.RewardGoods) == "number" then
templateId = shopGoodsData.RewardGoods
else
templateId = (shopGoodsData.RewardGoods.TemplateId and shopGoodsData.RewardGoods.TemplateId > 0) and
shopGoodsData.RewardGoods.TemplateId or
shopGoodsData.RewardGoods.Id
end
local isWeaponFashion = XDataCenter.ItemManager.IsWeaponFashion(templateId)
local id = isWeaponFashion and XDataCenter.ItemManager.GetWeaponFashionId(templateId) or templateId
return id
end
---
--- 排序角色涂装数据
--- 涂装系列Id从小到大0为最后
--- 可购买优于不可购买
--- 角色Id从小到大
local function Sort(a, b)
local aFashionId = GetFashionId(a)
local bFashionId = GetFashionId(b)
-- 涂装系列Id排序从小到大0为末尾
local aSeries = XDataCenter.FashionManager.GetFashionSeries(aFashionId)
local bSeries = XDataCenter.FashionManager.GetFashionSeries(bFashionId)
if aSeries ~= bSeries then
if aSeries == 0 then
return false
end
if bSeries == 0 then
return true
end
return aSeries < bSeries
end
-- 购买条件排序,满足条件的排前面
local aMeetCondition = 1
local bMeetCondition = 1
local aConditionIds = a.ConditionIds
if aConditionIds and #aConditionIds > 0 then
for _, id in pairs(aConditionIds) do
local ret = XConditionManager.CheckCondition(id)
if not ret then
aMeetCondition = 0
end
end
end
local bConditionIds = b.ConditionIds
if bConditionIds and #bConditionIds > 0 then
for _, id in pairs(bConditionIds) do
local ret = XConditionManager.CheckCondition(id)
if not ret then
bMeetCondition = 0
end
end
end
if aMeetCondition ~= bMeetCondition then
return aMeetCondition > bMeetCondition
end
-- 售罄排序,已售罄的排后面
local aSellOut = 0
local bSellOut = 0
if a.BuyTimesLimit > 0 then
if a.TotalBuyTimes >= a.BuyTimesLimit then
aSellOut = 1
end
end
if b.BuyTimesLimit > 0 then
if b.TotalBuyTimes >= b.BuyTimesLimit then
bSellOut = 1
end
end
if aSellOut ~= bSellOut then
return aSellOut < bSellOut
end
-- 角色Id排序从小到大
-- local aCharacterId = XDataCenter.FashionManager.GetCharacterId(aFashionId)
-- local bCharacterId = XDataCenter.FashionManager.GetCharacterId(bFashionId)
-- return aCharacterId < bCharacterId
-- 按照商品IdGoodsId升序
return a.Id < b.Id
end
2024-09-01 20:49:41 +00:00
-- 角色涂装商店获取所有系列id列表
function XSpecialShopManager.GetSeriesIdList(shopId)
local goodsList = XShopManager.GetShopGoodsList(shopId)
local seriesIdDic = {}
for _, good in ipairs(goodsList) do
local fashionId = GetFashionId(good)
local seriesId = XDataCenter.FashionManager.GetFashionSeries(fashionId)
seriesIdDic[seriesId] = true
end
local seriesIdList = {}
for id, _ in pairs(seriesIdDic) do
table.insert(seriesIdList, id)
end
table.sort(seriesIdList)
return seriesIdList
end
2024-09-01 20:49:41 +00:00
-- 角色涂装商店:获取对应系列的商品
function XSpecialShopManager.GetFashionListBySeriesId(shopId, seriesId, tagTxt)
local screenData = XShopManager.GetShopScreenGroupDataById(XShopManager.ScreenType.FashionType)
local allGoodList = XShopManager.GetShopGoodsList(shopId)
local goodList = {}
for _, good in ipairs(allGoodList) do
local fashionId = GetFashionId(good)
local goodSeriesId = XDataCenter.FashionManager.GetFashionSeries(fashionId)
if goodSeriesId == seriesId then
if tagTxt and tagTxt ~= ScreenAll then
local charId = XDataCenter.FashionManager.GetCharacterId(good.RewardGoods.TemplateId)
for index, screenID in pairs(screenData.ScreenID) do
if charId == screenID then
local screenName = screenData.ScreenName[index]
if screenName == tagTxt then
table.insert(goodList, good)
end
break
end
end
else
table.insert(goodList, good)
end
end
2024-09-01 20:49:41 +00:00
end
table.sort(goodList, Sort)
return goodList
end
2024-09-01 20:49:41 +00:00
-- 角色涂装商店:获取系列的所有标签
function XSpecialShopManager.GetTagListBySeriesId(shopId, seriesId)
local tagDic = {}
local goodList = XSpecialShopManager.GetFashionListBySeriesId(shopId, seriesId)
local screenData = XShopManager.GetShopScreenGroupDataById(XShopManager.ScreenType.FashionType)
for _, good in pairs(goodList) do
local charId = XDataCenter.FashionManager.GetCharacterId(good.RewardGoods.TemplateId)
for index, screenID in pairs(screenData.ScreenID) do
if charId == screenID then
local screenName = screenData.ScreenName[index]
local tag = tagDic[screenName]
if not tag then
tag = {}
tag.Text = screenName
tag.Key = index
tagDic[screenName] = tag
end
break
end
end
end
2024-09-01 20:49:41 +00:00
-- 全部页签
local minCount = 0
local allTag = {}
allTag.Text = ScreenAll
allTag.Key = minCount
tagDic[allTag.Text] = allTag
-- 转成list并排序
local tagList = {}
for _, tag in pairs(tagDic) do
table.insert(tagList, tag)
end
2024-09-01 20:49:41 +00:00
table.sort(tagList, function(a, b)
return a.Key < b.Key
end)
2024-09-01 20:49:41 +00:00
return tagList
end
2024-09-01 20:49:41 +00:00
-- 武器涂装商店:获取对应标签的武器涂装商品
function XSpecialShopManager.GetWeaponFashionListByTag(shopId, tagTxt)
local screenData = XShopManager.GetShopScreenGroupDataById(XShopManager.ScreenType.WeaponType)
local allGoodList = XShopManager.GetShopGoodsList(shopId)
local goodList = {}
for _, good in ipairs(allGoodList) do
if tagTxt and tagTxt ~= ScreenAll then
local equipType = XDataCenter.WeaponFashionManager.GetEquipTypeByTemplateId(good.RewardGoods.TemplateId)
for index, screenID in pairs(screenData.ScreenID) do
if equipType == screenID then
local screenName = screenData.ScreenName[index]
if screenName == tagTxt then
table.insert(goodList, good)
end
break
end
end
else
table.insert(goodList, good)
end
end
return goodList
end
---
--- 判断是否显示活动商店入口
function XSpecialShopManager:IsShowEntrance()
local timeId = XSpecialShopConfigs.GetTimeId()
return XFunctionManager.CheckInTimeByTimeId(timeId)
end
return XSpecialShopManager
end