467 lines
18 KiB
Lua
467 lines
18 KiB
Lua
local ActivityDetail = quick_class("ActivityDetail")
|
|
local sortingOrder = 0
|
|
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
|
|
local listUpPre = {} --限时召唤
|
|
local rate = {}
|
|
local listSoulUpPre = {} --魂印
|
|
local soulRate = {}
|
|
|
|
local listMonsterUpPre = {} --灵兽
|
|
local monsterRate = {}
|
|
local mainMonsterRate = 0
|
|
|
|
local listNewHeroUpPre = {} --降妖夺宝
|
|
local newHeroRate = {}
|
|
local mainNewHeroRate = 0
|
|
|
|
local panelType
|
|
local detailText = {
|
|
[1] = HELP_TYPE.TimeLimitedCall,
|
|
[2] = HELP_TYPE.QianKunBox,
|
|
[3] = HELP_TYPE.LingShouBaoGe,
|
|
[4] = HELP_TYPE.XiangYaoDuoBao,
|
|
}
|
|
|
|
function ActivityDetail:ctor(gameObject, type, effect)
|
|
self.gameObject = gameObject
|
|
if effect then
|
|
self.effect = effect
|
|
end
|
|
panelType = type
|
|
self:InitComponent(gameObject)
|
|
self:BindEvent()
|
|
self:OnShow()
|
|
end
|
|
|
|
function ActivityDetail:InitComponent(gameObject)
|
|
self.closeBtn = Util.GetGameObject(self.gameObject, "close")
|
|
self.itemGrid = Util.GetGameObject(self.gameObject, "panel/itemGrid")
|
|
self.LookDetailBtn = Util.GetGameObject(self.gameObject, "panel/Image3/updetail")
|
|
self.content1 = Util.GetGameObject(self.gameObject, "panel/content")
|
|
self.content = Util.GetGameObject(self.content1, "Text"):GetComponent("Text")
|
|
self.time = Util.GetGameObject(self.gameObject, "tip"):GetComponent("Text")
|
|
end
|
|
|
|
function ActivityDetail:BindEvent()
|
|
Util.AddClick(self.closeBtn.gameObject, function() self:OnHide() end)
|
|
Util.AddClick(self.LookDetailBtn.gameObject, function() self:LookDetailBtnAction() end)
|
|
end
|
|
|
|
function ActivityDetail:OnShow()
|
|
self.gameObject:SetActive(true)
|
|
local str = GetLanguageStrById(ConfigManager.TryGetConfigData(ConfigName.QAConfig, detailText[panelType]).content) --内容详情可以复用
|
|
str = string.gsub(str, "{", "<color=#D48A07>")
|
|
str = string.gsub(str, "}", "</color>")
|
|
str = string.gsub(str, "|", "\n") --换行
|
|
self.content.text = str
|
|
local str2
|
|
--判断抽取的类型
|
|
if panelType == 1 then --限时召唤
|
|
self:ReFreshUpHero()
|
|
self:RefreshHeroRate()
|
|
str2 = ActivityGiftManager.GetTimeStartToEnd(ActivityTypeDef.FindFairy)
|
|
elseif panelType == 2 then --乾坤包囊
|
|
self:ReFreshUpSoul()
|
|
self:RefreshSoulRate()
|
|
str2 = ActivityGiftManager.GetTimeStartToEnd(ActivityTypeDef.QianKunBox)
|
|
elseif panelType == 3 then --灵兽宝阁
|
|
self:ReFreshUpMonster()
|
|
self:RefreshMonsterRate()
|
|
str2 = ActivityGiftManager.GetTimeStartToEnd(ActivityTypeDef.LingShouBaoGe)
|
|
elseif panelType == 4 then --降妖夺宝
|
|
self:ReFreshUpNewHero()
|
|
self:RefreshNewHeroRate()
|
|
str2 = ActivityGiftManager.GetTimeStartToEnd(ActivityTypeDef.XiangYaoDuoBao)
|
|
end
|
|
|
|
self.time.text = Language[10540] .. str2
|
|
end
|
|
|
|
--============================降妖夺宝功能======================================
|
|
function ActivityDetail:ReFreshUpNewHero()
|
|
self.LookDetailBtn:SetActive(false)
|
|
local UpMonster = RecruitManager.GetRewardPreviewData(PRE_REWARD_POOL_TYPE.XIANG_YAO_UP)
|
|
local rewardData, showData, curScore = DynamicActivityManager.XiangYaoBuildData()
|
|
if (not listNewHeroUpPre) then
|
|
listNewHeroUpPre = {}
|
|
end
|
|
if (not newHeroRate) then
|
|
newHeroRate = {}
|
|
end
|
|
for n, m in ipairs(UpMonster) do
|
|
if m and m.Reward[1] == showData.monsterId then
|
|
if not listNewHeroUpPre[n] then
|
|
listNewHeroUpPre[n] = SubUIManager.Open(SubUIConfig.ItemView, self.itemGrid.transform)
|
|
end
|
|
listNewHeroUpPre[n]:OnOpen(false, { m.Reward[1], m.Reward[2] }, 1.1, true)
|
|
local weight = self:ReculateUpNewHeroRate(m.Reward[1])
|
|
local tempName = listNewHeroUpPre[n].name:GetComponent("Text").text
|
|
mainNewHeroRate = weight
|
|
listNewHeroUpPre[n].name:GetComponent("Text").text = "<color=#EDB64C>" ..
|
|
string.format("%.2f", (weight / 100000) * 100) .. "%</color>"
|
|
listNewHeroUpPre[n].gameObject:SetActive(true)
|
|
table.insert(newHeroRate, { tag = Language[10541], name = tempName, value = weight })
|
|
end
|
|
end
|
|
end
|
|
|
|
--计算所有的比重
|
|
function ActivityDetail:ReculateUpNewHeroRate(id)
|
|
local UpMonster = RecruitManager.GetRewardPreviewData(PRE_REWARD_POOL_TYPE.XIANG_YAO_UP)
|
|
for n, m in ipairs(UpMonster) do
|
|
if m and id == m.Reward[1] then
|
|
return m.WeightShow
|
|
end
|
|
end
|
|
return 0
|
|
end
|
|
|
|
function ActivityDetail:RefreshNewHeroRate()
|
|
local list1 = {}
|
|
local list2 = {}
|
|
local list3 = {}
|
|
local monsterRateList = {}
|
|
local allValue
|
|
|
|
local UpMonster = RecruitManager.GetRewardPreviewData(PRE_REWARD_POOL_TYPE.XIANG_YAO_UP)
|
|
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
|
|
-- --LogGreen(self:ReculateRate(list1).." "..self:ReculateRate(list2).." "..self:ReculateRate(list3).." mainNewHeroRate:"..mainNewHeroRate)
|
|
table.insert(monsterRateList,
|
|
{ tag = Language[10542], name = Language[10543], value = self:ReculateRate(list1) - mainNewHeroRate })
|
|
table.insert(monsterRateList, { tag = Language[10544], name = Language[10545], value = self:ReculateRate(list2) })
|
|
table.insert(monsterRateList, { tag = Language[10546], name = Language[10547], value = self:ReculateRate(list3) })
|
|
allValue = self:ReculateRate(list1) + self:ReculateRate(list2) + self:ReculateRate(list3)
|
|
|
|
for n, m in ipairs(monsterRateList) do
|
|
if m and m.value > 0 then
|
|
local o = Util.GetGameObject(self.gameObject, "panel/rate/rate/rateprefab" .. n)
|
|
if not o then
|
|
else
|
|
o.gameObject:SetActive(true)
|
|
Util.GetGameObject(o.gameObject, "star"):GetComponent("Text").text = m.tag
|
|
Util.GetGameObject(o.gameObject, "name"):GetComponent("Text").text = GetLanguageStrById(m.name)
|
|
Util.GetGameObject(o.gameObject, "rate"):GetComponent("Text").text = string.format("%.2f",
|
|
(m.value / allValue) * 100) .. "%"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--============================灵兽宝阁功能======================================
|
|
function ActivityDetail:ReFreshUpMonster()
|
|
self.LookDetailBtn:SetActive(false)
|
|
local UpMonster = RecruitManager.GetRewardPreviewData(PRE_REWARD_POOL_TYPE.LING_SHOU_UP)
|
|
local rewardData, showData, curScore = DynamicActivityManager.LingShouBuildData()
|
|
if (not listMonsterUpPre) then
|
|
listMonsterUpPre = {}
|
|
end
|
|
if (not monsterRate) then
|
|
monsterRate = {}
|
|
end
|
|
for n, m in ipairs(UpMonster) do
|
|
if m and m.Reward[1] == showData.monsterId then
|
|
if not listMonsterUpPre[n] then
|
|
listMonsterUpPre[n] = SubUIManager.Open(SubUIConfig.ItemView, self.itemGrid.transform)
|
|
end
|
|
listMonsterUpPre[n]:OnOpen(false, { m.Reward[1], m.Reward[2] }, 1.1, true)
|
|
local weight = self:ReculateUpMonsterRate(m.Reward[1])
|
|
local tempName = listMonsterUpPre[n].name:GetComponent("Text").text
|
|
mainMonsterRate = weight
|
|
listMonsterUpPre[n].name:GetComponent("Text").text = "<color=#EDB64C>" ..
|
|
string.format("%.2f", (weight / 100000) * 100) .. "%</color>"
|
|
listMonsterUpPre[n].gameObject:SetActive(true)
|
|
table.insert(monsterRate, { tag = Language[10541], name = tempName, value = weight })
|
|
end
|
|
end
|
|
end
|
|
|
|
--计算所有的比重
|
|
function ActivityDetail:ReculateUpMonsterRate(id)
|
|
local UpMonster = RecruitManager.GetRewardPreviewData(PRE_REWARD_POOL_TYPE.LING_SHOU_UP)
|
|
for n, m in ipairs(UpMonster) do
|
|
if m and id == m.Reward[1] then
|
|
return m.WeightShow
|
|
end
|
|
end
|
|
return 0
|
|
end
|
|
|
|
function ActivityDetail:RefreshMonsterRate()
|
|
local list1 = {}
|
|
local list2 = {}
|
|
local list3 = {}
|
|
local list4 = {}
|
|
local monsterRateList = {}
|
|
|
|
local UpMonster = RecruitManager.GetRewardPreviewData(PRE_REWARD_POOL_TYPE.LING_SHOU_UP)
|
|
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
|
|
table.insert(monsterRateList,
|
|
{ tag = Language[10202], name = Language[10548], value = self:ReculateRate(list1) - mainMonsterRate })
|
|
table.insert(monsterRateList, { tag = Language[10204], name = Language[10549], value = self:ReculateRate(list2) })
|
|
table.insert(monsterRateList, { tag = Language[10205], name = Language[10550], value = self:ReculateRate(list3) })
|
|
table.insert(monsterRateList, { tag = Language[10551], name = Language[10552], value = self:ReculateRate(list4) })
|
|
|
|
for n, m in ipairs(monsterRateList) do
|
|
if m and m.value > 0 then
|
|
local o = Util.GetGameObject(self.gameObject, "panel/rate/rate/rateprefab" .. n)
|
|
if not o then
|
|
else
|
|
o.gameObject:SetActive(true)
|
|
Util.GetGameObject(o.gameObject, "star"):GetComponent("Text").text = m.tag
|
|
Util.GetGameObject(o.gameObject, "name"):GetComponent("Text").text = GetLanguageStrById(m.name)
|
|
Util.GetGameObject(o.gameObject, "rate"):GetComponent("Text").text = string.format("%.2f",
|
|
(m.value / 100000) * 100) .. "%"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--============================乾坤包囊功能======================================
|
|
function ActivityDetail:ReFreshUpSoul()
|
|
self.LookDetailBtn:SetActive(false)
|
|
local UpSoul = RecruitManager.GetRewardPreviewData(PRE_REWARD_POOL_TYPE.LOTTERY_SOUL_UP)
|
|
if (not listSoulUpPre) then
|
|
listSoulUpPre = {}
|
|
end
|
|
if (not soulRate) then
|
|
soulRate = {}
|
|
end
|
|
for n, m in ipairs(UpSoul) do
|
|
if m then
|
|
if not listSoulUpPre[n] then
|
|
listSoulUpPre[n] = SubUIManager.Open(SubUIConfig.ItemView, self.itemGrid.transform)
|
|
end
|
|
listSoulUpPre[n]:OnOpen(false, { m.Reward[1], m.Reward[2] }, 1.1, true)
|
|
local weight = self:ReculateUpSoulRate(m.Reward[1])
|
|
local tempName = listSoulUpPre[n].name:GetComponent("Text").text
|
|
listSoulUpPre[n].name:GetComponent("Text").text = "<color=#EDB64C>" ..
|
|
string.format("%.2f", (weight / 100000) * 100) .. "%</color>"
|
|
listSoulUpPre[n].gameObject:SetActive(true)
|
|
table.insert(soulRate, { tag = Language[10541], name = tempName, value = weight })
|
|
end
|
|
end
|
|
end
|
|
|
|
--计算所有的比重
|
|
function ActivityDetail:ReculateUpSoulRate(id)
|
|
local Soul = RecruitManager.GetRewardPreviewData(PRE_REWARD_POOL_TYPE.LOTTERY_SOUL)
|
|
for n, m in ipairs(Soul) do
|
|
if m and id == m.Reward[1] then
|
|
return m.WeightShow
|
|
end
|
|
end
|
|
return 0
|
|
end
|
|
|
|
function ActivityDetail:RefreshSoulRate()
|
|
local list4 = {}
|
|
local list5 = {}
|
|
local list6 = {}
|
|
local list7 = {}
|
|
|
|
local soul = RecruitManager.GetRewardPreviewData(PRE_REWARD_POOL_TYPE.LOTTERY_SOUL)
|
|
for index, v in ipairs(soul) do
|
|
if itemConfig[v.Reward[1]].Quantity == 4 and itemConfig[v.Reward[1]].ItemType == 13 then
|
|
table.insert(list4, v) --紫色
|
|
elseif itemConfig[v.Reward[1]].Quantity == 5 and itemConfig[v.Reward[1]].ItemType == 13 then
|
|
table.insert(list5, v) --金色
|
|
elseif itemConfig[v.Reward[1]].Quantity == 6 and itemConfig[v.Reward[1]].ItemType == 13 then
|
|
table.insert(list6, v) --红色
|
|
else
|
|
table.insert(list7, v) --其他
|
|
end
|
|
end
|
|
|
|
table.insert(soulRate,
|
|
{
|
|
tag = Language[10203],
|
|
name = Language[10551] .. Language[10203],
|
|
value = self:ReculateRate(list6) -
|
|
soulRate[1].value - soulRate[2].value - soulRate[3].value
|
|
})
|
|
table.insert(soulRate, { tag = Language[10202], name = Language[10202], value = self:ReculateRate(list5) })
|
|
table.insert(soulRate, { tag = Language[10204], name = Language[10204], value = self:ReculateRate(list4) })
|
|
table.insert(soulRate, { tag = Language[10551], name = Language[10551], value = self:ReculateRate(list7) })
|
|
|
|
for n, m in ipairs(soulRate) do
|
|
if m and m.value > 0 then
|
|
local o = Util.GetGameObject(self.gameObject, "panel/rate/rate/rateprefab" .. n)
|
|
if not o then
|
|
else
|
|
o.gameObject:SetActive(true)
|
|
Util.GetGameObject(o.gameObject, "star"):GetComponent("Text").text = m.tag
|
|
Util.GetGameObject(o.gameObject, "name"):GetComponent("Text").text = GetLanguageStrById(m.name)
|
|
Util.GetGameObject(o.gameObject, "rate"):GetComponent("Text").text = string.format("%.2f",
|
|
(m.value / 100000) * 100) .. "%"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--============================限时召唤功能======================================
|
|
function ActivityDetail:ReFreshUpHero()
|
|
self.LookDetailBtn:SetActive(true)
|
|
local UpHero = RecruitManager.GetRewardPreviewData(PRE_REWARD_POOL_TYPE.TIME_LIMITED_UP)
|
|
if (not listUpPre) then
|
|
listUpPre = {}
|
|
end
|
|
if (not rate) then
|
|
rate = {}
|
|
end
|
|
for n, m in ipairs(UpHero) do
|
|
if m then
|
|
if not listUpPre[n] then
|
|
listUpPre[n] = SubUIManager.Open(SubUIConfig.ItemView, self.itemGrid.transform)
|
|
end
|
|
listUpPre[n]:OnOpen(false, { m.Reward[1], m.Reward[2] }, 1.1, true)
|
|
local weight = self:ReculateUpHeroRate(m.Reward[1])
|
|
local tempName = listUpPre[n].name:GetComponent("Text").text
|
|
listUpPre[n].name:GetComponent("Text").text = "<color=#EDB64C>" ..
|
|
string.format("%.2f", (weight / 100000) * 100) .. "%</color>"
|
|
listUpPre[n].gameObject:SetActive(true)
|
|
table.insert(rate, { tag = Language[10553], name = tempName, value = weight })
|
|
end
|
|
end
|
|
end
|
|
|
|
function ActivityDetail:ReculateUpHeroRate(id)
|
|
local Hero = RecruitManager.GetRewardPreviewData(PRE_REWARD_POOL_TYPE.TIME_LIMITED)
|
|
for n, m in ipairs(Hero) do
|
|
if m and id == m.Reward[1] then
|
|
return m.WeightShow
|
|
end
|
|
end
|
|
return 0
|
|
end
|
|
|
|
function ActivityDetail:RefreshHeroRate()
|
|
local list3 = {}
|
|
local list4 = {}
|
|
local list5 = {}
|
|
local list2 = {}
|
|
|
|
local hero = RecruitManager.GetRewardPreviewData(PRE_REWARD_POOL_TYPE.TIME_LIMITED)
|
|
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
|
|
|
|
table.insert(rate,
|
|
{
|
|
tag = Language[10554],
|
|
name = Language[10555],
|
|
value = self:ReculateRate(list5) - rate[1].value - rate[2]
|
|
.value - rate[3].value
|
|
})
|
|
table.insert(rate, { tag = Language[10556], name = Language[10557], value = self:ReculateRate(list4) })
|
|
table.insert(rate, { tag = Language[10558], name = Language[10559], value = self:ReculateRate(list3) })
|
|
table.insert(rate, { tag = Language[10560], name = Language[10561], value = self:ReculateRate(list2) })
|
|
|
|
for n, m in ipairs(rate) do
|
|
if m and m.value > 0 then
|
|
local o = Util.GetGameObject(self.gameObject, "panel/rate/rate/rateprefab" .. n)
|
|
if not o then
|
|
else
|
|
o.gameObject:SetActive(true)
|
|
Util.GetGameObject(o.gameObject, "star"):GetComponent("Text").text = m.tag
|
|
Util.GetGameObject(o.gameObject, "name"):GetComponent("Text").text = GetLanguageStrById(m.name)
|
|
Util.GetGameObject(o.gameObject, "rate"):GetComponent("Text").text = string.format("%.2f",
|
|
(m.value / 100000) * 100) .. "%"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--通用计算权重功能
|
|
function ActivityDetail:ReculateRate(list)
|
|
local weight = 0
|
|
for index, v in ipairs(list) do
|
|
weight = v.WeightShow + weight
|
|
end
|
|
return weight
|
|
end
|
|
|
|
function ActivityDetail:LookDetailBtnAction()
|
|
if panelType == 1 then
|
|
UIManager.OpenPanel(UIName.HeroPreviewPanel, true, false)
|
|
elseif panelType == 2 then
|
|
LogPurple("打开法术奖励预览")
|
|
elseif panelType == 3 then
|
|
LogPurple("打开法术奖励预览")
|
|
end
|
|
end
|
|
|
|
function ActivityDetail:OnHide()
|
|
self.gameObject:SetActive(false)
|
|
if self.effect then
|
|
self.effect:SetActive(true)
|
|
end
|
|
if rate then
|
|
for n, m in ipairs(rate) do
|
|
if not rate[n] then
|
|
local o = Util.GetGameObject(self.gameObject, "panel/rate/rateprefab" .. n)
|
|
o.gameObject.SetActive(false)
|
|
end
|
|
end
|
|
rate = {}
|
|
end
|
|
|
|
if soulRate then
|
|
for n, m in ipairs(soulRate) do
|
|
if not soulRate[n] then
|
|
local o = Util.GetGameObject(self.gameObject, "panel/rate/rateprefab" .. n)
|
|
o.gameObject.SetActive(false)
|
|
end
|
|
end
|
|
soulRate = {}
|
|
end
|
|
|
|
if monsterRate then
|
|
for n, m in ipairs(monsterRate) do
|
|
if not monsterRate[n] then
|
|
local o = Util.GetGameObject(self.gameObject, "panel/rate/rateprefab" .. n)
|
|
o.gameObject.SetActive(false)
|
|
end
|
|
end
|
|
monsterRate = {}
|
|
end
|
|
end
|
|
|
|
function ActivityDetail:OnDestroy()
|
|
listUpPre = nil
|
|
rate = nil
|
|
listSoulUpPre = nil
|
|
soulRate = nil
|
|
listMonsterUpPre = nil
|
|
monsterRate = nil
|
|
listNewHeroUpPre = nil
|
|
newHeroRate = nil
|
|
end
|
|
|
|
return ActivityDetail
|