miduo_client/Assets/ManagedResources/~Lua/Modules/GeneralPanel/View/GeneralBigPopup_RecrutDetai...

416 lines
18 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

----- 固定活动抽卡详情 -----
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 = 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="本期UP内容"
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="心愿霸气"
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="奥义卡自选箱"
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,"霸气UP!",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="灵兽UP!",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="5星UP!",name = readingName,value = m.WeightShow,color = "AD4152"})
break
end
end
rateList = this:RefreshNewHeroRate(upItemList,_upRateList,"5星UP!",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 = "心愿UP英雄/道具", name=itemConfig.Name,value = m.Weight,color = "AD4152"})
table.insert(_upRateList,{id = m.Reward[1],tag = "5星英雄UP!", 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 = "BDB69C" })
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 = "生命卡碎片UP!", 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 = "终极大奖!", 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,m.tag)
this.ratePreList[n].name.text=string.format("<color=#%s>%s</color>",m.color,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 = "BDB69C"})
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="5星",name="其他5星",value = valueList5,color = "BDB69C"})
table.insert(rateList,{tag="4星",name="4星英雄",value = this:ReculateRate(list4),color = "BDB69C"})
table.insert(rateList,{tag="3星",name="3星英雄",value = this:ReculateRate(list3),color = "BDB69C"})
table.insert(rateList,{tag="2星",name="2星英雄",value = this:ReculateRate(list2),color = "BDB69C"})
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="红色",name="其他".."红色",value = valueList6,color = "BDB69C"})
end
if #list5 > 0 then
table.insert(rateList,{tag="金色",name="金色",value=this:ReculateRate(list5),color = "BDB69C"})
end
if #list4 > 0 then
table.insert(rateList,{tag="紫色",name="紫色",value=this:ReculateRate(list4),color = "BDB69C"})
end
if #list7 > 0 then
table.insert(rateList,{tag="其他",name="其他",value=this:ReculateRate(list7),color = "BDB69C"})
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="金色",name="金色灵兽或碎片",value=valueList1,color = "BDB69C"})
table.insert(rateList,{tag="紫色",name="紫色灵兽或碎片",value=this:ReculateRate(list2),color = "BDB69C"})
table.insert(rateList,{tag="蓝色",name="蓝色灵兽或碎片",value=this:ReculateRate(list3),color = "BDB69C"})
table.insert(rateList,{tag="其他",name="其他奖励",value=this:ReculateRate(list4),color = "BDB69C"})
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="五星",name="其他五星英雄",value=valueList1,color = "BDB69C"})
table.insert(_rateList,{tag="四星",name="四星英雄",value=this:ReculateRate(list2),color = "BDB69C"})
table.insert(_rateList,{tag="三星",name="三星英雄",value=this:ReculateRate(list3),color = "BDB69C"})
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