444 lines
19 KiB
Lua
444 lines
19 KiB
Lua
----- 固定活动抽卡详情 -----
|
||
local this = {}
|
||
--传入父脚本模块
|
||
local parent
|
||
--传入特效层级
|
||
local sortingOrder = 0
|
||
local activityId = 0
|
||
local activityType = 0
|
||
local heroID = 0
|
||
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
|
||
local artResourcesConfig = ConfigManager.GetConfig(ConfigName.ArtResourcesConfig)
|
||
local pool = ConfigManager.GetConfig(ConfigName.WishActivityPool)
|
||
function this:InitComponent(gameObject)
|
||
this.title = Util.GetGameObject(gameObject, "title"):GetComponent("Text")
|
||
this.itemGrid = Util.GetGameObject(gameObject, "panel/itemGrid")
|
||
this.LookDetailBtn = Util.GetGameObject(gameObject, "panel/Image3/updetail")
|
||
this.LookDetailBtn:SetActive(false)
|
||
this.content = Util.GetGameObject(gameObject, "panel/content/grid/Text"):GetComponent("Text")
|
||
this.time = Util.GetGameObject(gameObject, "tip"):GetComponent("Text")
|
||
this.time.gameObject:SetActive(false)
|
||
this.grid = Util.GetGameObject(gameObject, "panel/rate/grid")
|
||
this.pre = Util.GetGameObject(gameObject, "panel/rate/rateprefab")
|
||
this.secondTitle = Util.GetGameObject(gameObject, "panel/Image1/Text"):GetComponent("Text")
|
||
this.ratePreList = {}
|
||
for i = 1, this.grid.transform.childCount do
|
||
this.ratePreList[i] = {}
|
||
this.ratePreList[i].go = this.grid.transform:GetChild(i - 1)
|
||
this.ratePreList[i].star = Util.GetGameObject(this.ratePreList[i].go, "star"):GetComponent("Text")
|
||
this.ratePreList[i].name = Util.GetGameObject(this.ratePreList[i].go, "name"):GetComponent("Text")
|
||
this.ratePreList[i].rate = Util.GetGameObject(this.ratePreList[i].go, "rate"):GetComponent("Text")
|
||
end
|
||
end
|
||
|
||
function this:BindEvent()
|
||
end
|
||
|
||
function this:AddListener()
|
||
|
||
end
|
||
|
||
function this:RemoveListener()
|
||
|
||
end
|
||
|
||
function this:OnShow(_parent, _Data)
|
||
parent = _parent
|
||
sortingOrder = _parent.sortingOrder
|
||
local args = _Data
|
||
local helpType = args[1]
|
||
local str = GetLanguageStrById(ConfigManager.TryGetConfigData(ConfigName.QAConfig, helpType).content)
|
||
str = string.gsub(str, "{", "<color=#D48A07>")
|
||
str = string.gsub(str, "}", "</color>")
|
||
str = string.gsub(str, "|", "\n") --换行
|
||
this.content.text = str
|
||
|
||
activityType = args[2]
|
||
|
||
local poolUpType = args[3] or 0
|
||
local poolType = args[4] or 0
|
||
heroID = args[5]
|
||
local activityId = args[6]
|
||
local UpItemList = {}
|
||
local itemList = {}
|
||
--限时英雄up
|
||
this.secondTitle.text = Language[11060]
|
||
if activityType == ActivityTypeDef.LimitUpHero then
|
||
local heroConfig = ConfigManager.TryGetConfigData(ConfigName.HeroConfig, heroID)
|
||
if not heroConfig then
|
||
heroConfig = ConfigManager.TryGetConfigData(ConfigName.ItemConfig, heroID)
|
||
end
|
||
local wishUpConfig = ConfigManager.TryGetConfigDataByKey(ConfigName.WishActivityUp, "ActivityId", activityId)
|
||
local num, pro, len = 0, 0, 0
|
||
for i = 1, #wishUpConfig.UpList do
|
||
if wishUpConfig.UpList[i][1] == heroID then
|
||
num = wishUpConfig.UpList[i][3]
|
||
pro = wishUpConfig.UpList[i][5]
|
||
len = wishUpConfig.UpList[i][2]
|
||
break
|
||
end
|
||
end
|
||
UpItemList = { [1] = { Reward = { heroConfig.Id, len }, Weight = num } }
|
||
for k, v in ConfigPairs(pool) do
|
||
if v.Camp == pro or v.Camp == 0 then
|
||
local data = { Reward = v.ItemId, Weight = v.GetRate, sort = v.Sort }
|
||
table.insert(itemList, data)
|
||
end
|
||
end
|
||
table.sort(itemList, function(a, b)
|
||
return a.sort < b.sort
|
||
end)
|
||
else
|
||
UpItemList = RecruitManager.GetRewardPreviewData(poolUpType)
|
||
local dic = {}
|
||
--乾坤宝盒特殊处理
|
||
if activityType == ActivityTypeDef.QianKunBox then
|
||
this.secondTitle.text = Language[11061]
|
||
local souls = RecruitManager.GetWishEquipData()
|
||
local newList = {}
|
||
for i = 1, #souls do
|
||
local value = UpItemList[i]
|
||
dic[value.Reward[1]] = souls[i]
|
||
value.Reward[1] = souls[i]
|
||
table.insert(newList, value)
|
||
end
|
||
UpItemList = newList
|
||
itemList = RecruitManager.GetRewardPreviewData(poolType)
|
||
for i = 1, #itemList do
|
||
if dic[itemList[i].Reward[1]] then
|
||
itemList[i].Reward[1] = dic[itemList[i].Reward[1]]
|
||
end
|
||
end
|
||
elseif activityType == ActivityTypeDef.LingShouBaoGe then
|
||
local rewardData, showData, curScore = DynamicActivityManager.LingShouBuildData()
|
||
local origiUpMonster = DynamicActivityManager.LingShouOrigiUpData()
|
||
itemList = RecruitManager.GetRewardPreviewData(poolType)
|
||
for i = 1, #itemList do
|
||
if itemList[i].Reward[1] == origiUpMonster.monsterId then
|
||
UpItemList = { [1] = { Reward = { showData.monsterId, 1 }, WeightShow = itemList[i].WeightShow } }
|
||
break
|
||
end
|
||
end
|
||
elseif activityType == ActivityTypeDef.tiandihonglu then
|
||
local newList = {}
|
||
itemList = RecruitManager.GetRewardPreviewData(poolType)
|
||
local souls = RecruitManager.GetWishTailsManSoulChips()
|
||
for k, v in pairs(souls) do
|
||
table.insert(newList, { Reward = { v, 1 }, WeightShow = itemList[k].WeightShow })
|
||
end
|
||
UpItemList = newList
|
||
elseif activityType == ActivityTypeDef.Incarnation then
|
||
this.secondTitle.text = Language[11062]
|
||
local newList = {}
|
||
itemList = RecruitManager.GetRewardPreviewData(poolType)
|
||
table.insert(newList, { Reward = { itemList[1].Reward[1], 1 }, WeightShow = itemList[1].WeightShow })
|
||
UpItemList = newList
|
||
else
|
||
UpItemList = RecruitManager.GetRewardPreviewData(poolUpType)
|
||
itemList = RecruitManager.GetRewardPreviewData(poolType)
|
||
end
|
||
end
|
||
local _upRateList, rateList = this:BuildRateData(activityType, itemList, UpItemList)
|
||
this:ReFreshUpItem(UpItemList, _upRateList)
|
||
end
|
||
|
||
function this:ReFreshUpItem(UpItem, rateList)
|
||
if (not this.listUpPre) then
|
||
this.listUpPre = {}
|
||
end
|
||
for k, v in ipairs(this.listUpPre) do
|
||
v.gameObject:SetActive(false)
|
||
end
|
||
local index = 0
|
||
for n, m in ipairs(UpItem) do
|
||
for k, v in ipairs(rateList) do
|
||
if m.Reward[1] == v.id then
|
||
index = index + 1
|
||
if not this.listUpPre[index] then
|
||
this.listUpPre[index] = SubUIManager.Open(SubUIConfig.ItemView, this.itemGrid.transform)
|
||
end
|
||
this.listUpPre[index]:OnOpen(false, { m.Reward[1], m.Reward[2] }, 1.1, true)
|
||
this.listUpPre[index].name:GetComponent("Text").text = "<color=#EDB64C>" ..
|
||
string.format("%.2f", (v.value / 100000) * 100) .. "%</color>"
|
||
this.listUpPre[index].gameObject:SetActive(true)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
local hero
|
||
|
||
--活动类型 所有抽卡 up
|
||
function this:BuildRateData(actType, UpItem, upItemList)
|
||
local rateList = {}
|
||
local _upRateList = {}
|
||
if actType == ActivityTypeDef.QianKunBox then
|
||
_upRateList = this:ReculateUpHeroRate(UpItem, upItemList, Language[10541], ConfigName.EquipConfig)
|
||
rateList = this:RefreshSoulRate(UpItem, _upRateList, ItemType.HunYin)
|
||
elseif actType == ActivityTypeDef.LingShouBaoGe then
|
||
local rewardData, showData, curScore = DynamicActivityManager.RecrutDetailData(activityType)
|
||
for n, m in ipairs(upItemList) do
|
||
if m and m.Reward[1] == showData.monsterId then
|
||
local _config = ConfigManager.GetConfigData(ConfigName.SpiritAnimal, m.Reward[1])
|
||
local readingName = _config.ReadingName or _config.Name
|
||
table.insert(_upRateList,
|
||
{ id = m.Reward[1], tag = Language[11063], name = readingName, value = m.WeightShow, color = "AD4152" })
|
||
break
|
||
end
|
||
end
|
||
rateList = this:RefreshMonsterRate(UpItem, _upRateList)
|
||
elseif actType == ActivityTypeDef.XiangYaoDuoBao then
|
||
local rewardData, showData, curScore = DynamicActivityManager.XiangYaoBuildData(activityType)
|
||
for n, m in ipairs(upItemList) do
|
||
if m and m.Reward[1] == showData.monsterId then
|
||
local _config = ConfigManager.GetConfigData(ConfigName.HeroConfig, m.Reward[1])
|
||
local readingName = _config.ReadingName or _config.Name
|
||
table.insert(_upRateList,
|
||
{ id = m.Reward[1], tag = Language[10553], name = readingName, value = m.WeightShow, color = "AD4152" })
|
||
break
|
||
end
|
||
end
|
||
rateList = this:RefreshNewHeroRate(upItemList, _upRateList, Language[10553], ConfigName.HeroConfig)
|
||
elseif actType == ActivityTypeDef.LimitUpHero then
|
||
for n, m in ipairs(upItemList) do
|
||
local itemConfig = ConfigManager.TryGetConfigData(ConfigName.ItemConfig, m.Reward[1])
|
||
table.insert(rateList,
|
||
{ id = m.Reward[1], tag = Language[11064], name = itemConfig.Name, value = m.Weight, color = "AD4152" })
|
||
table.insert(_upRateList, { id = m.Reward[1], tag = Language[11065], name = itemConfig.Name, value = m
|
||
.Weight })
|
||
LogGreen("name:" .. tostring(itemConfig.Name) .. " weight:" .. tostring(m.Weight))
|
||
end
|
||
for n, m in ipairs(UpItem) do
|
||
local itemConfig = ConfigManager.TryGetConfigData(ConfigName.ItemConfig, m.Reward[1])
|
||
table.insert(rateList,
|
||
{ id = m.Reward[1], tag = itemConfig.Name, name = m.Reward[2], value = m.Weight, color = "7D4E2A" })
|
||
LogYellow("name:" .. tostring(itemConfig.Name) .. " weight:" .. tostring(m.Weight))
|
||
end
|
||
elseif actType == ActivityTypeDef.tiandihonglu then
|
||
for n, m in ipairs(upItemList) do
|
||
local itemConfig = ConfigManager.TryGetConfigData(ConfigName.ItemConfig, m.Reward[1])
|
||
table.insert(_upRateList,
|
||
{ id = m.Reward[1], tag = Language[11066], name = itemConfig.Name, value = m.WeightShow, color = "AD4152" })
|
||
end
|
||
rateList = this:RefreshSoulRate(UpItem, _upRateList, ItemType.talismanSoulChip)
|
||
elseif actType == ActivityTypeDef.Incarnation then
|
||
for n, m in ipairs(upItemList) do
|
||
local itemConfig = ConfigManager.TryGetConfigData(ConfigName.ItemConfig, m.Reward[1])
|
||
table.insert(_upRateList,
|
||
{ id = m.Reward[1], tag = Language[11067], name = itemConfig.Name, value = m.WeightShow, color = "AD4152" })
|
||
end
|
||
rateList = this:RefreshIncarnationRate(UpItem, _upRateList, ItemType.Incarnation)
|
||
end
|
||
|
||
for k, v in ipairs(this.ratePreList) do
|
||
v.go.gameObject:SetActive(false)
|
||
end
|
||
|
||
for n, m in ipairs(rateList) do
|
||
if not this.ratePreList[n] then
|
||
this.ratePreList[n] = {}
|
||
this.ratePreList[n].go = newObjToParent(this.pre, this.grid)
|
||
this.ratePreList[n].star = Util.GetGameObject(this.ratePreList[n].go, "star"):GetComponent("Text")
|
||
this.ratePreList[n].name = Util.GetGameObject(this.ratePreList[n].go, "name"):GetComponent("Text")
|
||
this.ratePreList[n].rate = Util.GetGameObject(this.ratePreList[n].go, "rate"):GetComponent("Text")
|
||
end
|
||
this.ratePreList[n].go.gameObject:SetActive(true)
|
||
this.ratePreList[n].star.text = string.format("<color=#%s>%s</color>", m.color, GetLanguageStrById(m.tag))
|
||
this.ratePreList[n].name.text = string.format("<color=#%s>%s</color>", m.color, GetLanguageStrById(m.name))
|
||
this.ratePreList[n].rate.text = string.format("<color=#%s>", m.color) ..
|
||
string.format("%.2f", (m.value / 100000) * 100) .. "%</color>"
|
||
end
|
||
|
||
return _upRateList, rateList
|
||
end
|
||
|
||
function this:RefreshIncarnationRate(UpItem, _upRateList, itemType)
|
||
local rateList = {}
|
||
for k, v in ipairs(_upRateList) do
|
||
for n, m in ipairs(UpItem) do
|
||
if v.id == m.Reward[1] then
|
||
table.insert(rateList, v)
|
||
else
|
||
table.insert(rateList,
|
||
{ tag = itemConfig[m.Reward[1]].Name, name = string.format("%s×%s", itemConfig[m.Reward[1]].Name,
|
||
m.Reward[2]), value = m.WeightShow, color = "7D4E2A" })
|
||
end
|
||
end
|
||
end
|
||
return rateList
|
||
end
|
||
|
||
--通用计算权重功能
|
||
function this:ReculateRate(list)
|
||
local weight = 0
|
||
for index, v in ipairs(list) do
|
||
weight = v.WeightShow + weight
|
||
end
|
||
return weight
|
||
end
|
||
|
||
function this:ReculateUpHeroRate(itemList, UpItemList, _tag, config)
|
||
local rateList = {}
|
||
for k, v in ipairs(UpItemList) do
|
||
for n, m in ipairs(itemList) do
|
||
if v.Reward[1] == m.Reward[1] then
|
||
local _config = ConfigManager.GetConfigData(config, v.Reward[1])
|
||
local readingName = _config.ReadingName or _config.Name
|
||
table.insert(rateList,
|
||
{ id = m.Reward[1], tag = _tag, name = readingName, value = m.WeightShow, color = "AD4152" })
|
||
break
|
||
end
|
||
end
|
||
end
|
||
return rateList
|
||
end
|
||
|
||
function this:RefreshHeroRate(hero, _rateList)
|
||
local list3 = {}
|
||
local list4 = {}
|
||
local list5 = {}
|
||
local list2 = {}
|
||
|
||
for index, v in ipairs(hero) do
|
||
if itemConfig[v.Reward[1]].HeroStar[2] == 3 then
|
||
table.insert(list3, v)
|
||
elseif itemConfig[v.Reward[1]].HeroStar[2] == 4 then
|
||
table.insert(list4, v)
|
||
elseif itemConfig[v.Reward[1]].HeroStar[2] == 5 then
|
||
table.insert(list5, v)
|
||
elseif itemConfig[v.Reward[1]].HeroStar[2] == 2 then
|
||
table.insert(list2, v)
|
||
end
|
||
end
|
||
local rateList = {}
|
||
local valueList5 = this:ReculateRate(list5)
|
||
for i = 1, #_rateList do
|
||
valueList5 = valueList5 - _rateList[i].value
|
||
table.insert(rateList, _rateList[i])
|
||
end
|
||
table.insert(rateList, { tag = Language[10554], name = Language[10555], value = valueList5, color = "7D4E2A" })
|
||
table.insert(rateList, { tag = Language[10556], name = Language[10557], value = this:ReculateRate(list4), color =
|
||
"7D4E2A" })
|
||
table.insert(rateList, { tag = Language[10558], name = Language[10559], value = this:ReculateRate(list3), color =
|
||
"7D4E2A" })
|
||
table.insert(rateList, { tag = Language[10560], name = Language[10561], value = this:ReculateRate(list2), color =
|
||
"7D4E2A" })
|
||
return rateList
|
||
end
|
||
|
||
function this:RefreshSoulRate(soul, _rateList, itemType)
|
||
local list4 = {}
|
||
local list5 = {}
|
||
local list6 = {}
|
||
local list7 = {}
|
||
|
||
for index, v in ipairs(soul) do
|
||
if itemConfig[v.Reward[1]].Quantity == 4 and itemConfig[v.Reward[1]].ItemType == itemType then
|
||
table.insert(list4, v) --紫色
|
||
elseif itemConfig[v.Reward[1]].Quantity == 5 and itemConfig[v.Reward[1]].ItemType == itemType then
|
||
table.insert(list5, v) --金色
|
||
elseif itemConfig[v.Reward[1]].Quantity == 6 and itemConfig[v.Reward[1]].ItemType == itemType then
|
||
table.insert(list6, v) --红色
|
||
else
|
||
table.insert(list7, v) --其他
|
||
end
|
||
end
|
||
local rateList = {}
|
||
local valueList6 = this:ReculateRate(list6)
|
||
for i = 1, #_rateList do
|
||
valueList6 = valueList6 - _rateList[i].value
|
||
table.insert(rateList, _rateList[i])
|
||
end
|
||
if valueList6 > 0 then
|
||
table.insert(rateList,
|
||
{ tag = Language[10203], name = Language[10551] .. Language[10203], value = valueList6, color = "7D4E2A" })
|
||
end
|
||
if #list5 > 0 then
|
||
table.insert(rateList, { tag = Language[10202], name = Language[10202], value = this:ReculateRate(list5), color =
|
||
"7D4E2A" })
|
||
end
|
||
if #list4 > 0 then
|
||
table.insert(rateList, { tag = Language[10204], name = Language[10204], value = this:ReculateRate(list4), color =
|
||
"7D4E2A" })
|
||
end
|
||
if #list7 > 0 then
|
||
table.insert(rateList, { tag = Language[10551], name = Language[10551], value = this:ReculateRate(list7), color =
|
||
"7D4E2A" })
|
||
end
|
||
return rateList
|
||
end
|
||
|
||
function this:RefreshMonsterRate(UpMonster, _rateList)
|
||
local list1 = {}
|
||
local list2 = {}
|
||
local list3 = {}
|
||
local list4 = {}
|
||
for index, v in ipairs(UpMonster) do
|
||
if itemConfig[v.Reward[1]].Quantity == 5 and (itemConfig[v.Reward[1]].ItemType == 22 or itemConfig[v.Reward[1]].ItemType == 21) then
|
||
table.insert(list1, v) --金色灵兽碎片
|
||
elseif itemConfig[v.Reward[1]].Quantity == 4 and (itemConfig[v.Reward[1]].ItemType == 22 or itemConfig[v.Reward[1]].ItemType == 21) then
|
||
table.insert(list2, v) --紫色灵兽碎片
|
||
elseif itemConfig[v.Reward[1]].Quantity == 3 and (itemConfig[v.Reward[1]].ItemType == 22 or itemConfig[v.Reward[1]].ItemType == 21) then
|
||
table.insert(list3, v) --蓝色灵兽碎片
|
||
else
|
||
table.insert(list4, v) --其他
|
||
end
|
||
end
|
||
local rateList = {}
|
||
local valueList1 = this:ReculateRate(list1)
|
||
for i = 1, #_rateList do
|
||
valueList1 = valueList1 - _rateList[i].value
|
||
table.insert(rateList, _rateList[i])
|
||
end
|
||
table.insert(rateList, { tag = Language[10202], name = Language[10548], value = valueList1, color = "7D4E2A" })
|
||
table.insert(rateList, { tag = Language[10204], name = Language[10549], value = this:ReculateRate(list2), color =
|
||
"7D4E2A" })
|
||
table.insert(rateList, { tag = Language[10205], name = Language[10550], value = this:ReculateRate(list3), color =
|
||
"7D4E2A" })
|
||
table.insert(rateList, { tag = Language[10551], name = Language[11068], value = this:ReculateRate(list4), color =
|
||
"7D4E2A" })
|
||
return rateList
|
||
end
|
||
|
||
function this:RefreshNewHeroRate(UpMonster, _rateList)
|
||
local list1 = {}
|
||
local list2 = {}
|
||
local list3 = {}
|
||
local allValue
|
||
|
||
for index, v in ipairs(UpMonster) do
|
||
if itemConfig[v.Reward[1]].HeroStar[2] == 5 then
|
||
table.insert(list1, v) --五星应雄
|
||
elseif itemConfig[v.Reward[1]].HeroStar[2] == 4 then
|
||
table.insert(list2, v) --四星应雄
|
||
elseif itemConfig[v.Reward[1]].HeroStar[2] == 3 then
|
||
table.insert(list3, v) --三星应雄
|
||
end
|
||
end
|
||
local valueList1 = this:ReculateRate(list1)
|
||
for i = 1, #_rateList do
|
||
valueList1 = valueList1 - _rateList[i].value
|
||
end
|
||
table.insert(_rateList, { tag = Language[10542], name = Language[10543], value = valueList1, color = "7D4E2A" })
|
||
table.insert(_rateList, { tag = Language[10544], name = Language[10545], value = this:ReculateRate(list2), color =
|
||
"7D4E2A" })
|
||
table.insert(_rateList, { tag = Language[10546], name = Language[10547], value = this:ReculateRate(list3), color =
|
||
"7D4E2A" })
|
||
for i = 1, #_rateList do
|
||
allValue = _rateList[i].value
|
||
end
|
||
return _rateList
|
||
end
|
||
|
||
function this:OnClose()
|
||
end
|
||
|
||
function this:OnDestroy()
|
||
Util.ClearChild(this.grid.transform)
|
||
this.ratePreList = {}
|
||
this.listUpPre = {}
|
||
hero = nil
|
||
end
|
||
|
||
return this
|