| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493 |
- local UIPetDecomposeCtr = class("UIPetDecomposeCtr", require("UICtrBase"))
- local DecomposeType = {
- Pet = 1,
- SkillEquip = 2,
- }
- local autoQualityLimit = 1
- local decomposeLimit = 15
- local decomposeReturn
- local decomposeReturn1
- local decomposeReturnNormal, decomposeReturnMini, decomposeReturnMvp
- local defaultCount = decomposeLimit
- function UIPetDecomposeCtr:Init(view)
- self.view = view
- end
- function UIPetDecomposeCtr:SetData(data)
- if self.filterData == nil then
- self.filterData = {}
- self.filterData.raritySelections = {}
- self.filterData.attrSelections = {}
- self.filterData.typeSelections = {}
- self.isFilter = false
- end
- self.asyncIdx = 0
- if data == nil then return end
- self.data = data
- self:InitGlobal()
- end
- function UIPetDecomposeCtr:InitGlobal()
- if self.data == DecomposeType.Pet then
- decomposeLimit = GlobalConfig.Instance:GetConfigIntValue(227)
- autoQualityLimit = GlobalConfig.Instance:GetConfigIntValue(271)
- local val = GlobalConfig.Instance:GetConfigStrValue(224)
- if val ~= "" and val ~= nil then
- decomposeReturn = CommonUtil.DeserializeGlobalStrToTable(val)
- end
-
- local val = GlobalConfig.Instance:GetConfigStrValue(249)
- if val ~= "" and val ~= nil then
- decomposeReturn1 = CommonUtil.DeserializeGlobalStrToTable(val)
- end
-
- local val = GlobalConfig.Instance:GetConfigStrValue(270)
- if val ~= "" and val ~= nil then
- decomposeReturnNormal = CommonUtil.DeserializeGlobalStrToTable(val)
- end
-
- local val = GlobalConfig.Instance:GetConfigStrValue(279)
- if val ~= "" and val ~= nil then
- decomposeReturnMini = CommonUtil.DeserializeGlobalStrToTable(val)
- end
-
- local val = GlobalConfig.Instance:GetConfigStrValue(280)
- if val ~= "" and val ~= nil then
- decomposeReturnMvp = CommonUtil.DeserializeGlobalStrToTable(val)
- end
- elseif self.data == DecomposeType.SkillEquip then
- decomposeLimit = GlobalConfig.Instance:GetConfigIntValue(332)
- autoQualityLimit = 2--GlobalConfig.Instance:GetConfigIntValue(331)
- end
- end
- function UIPetDecomposeCtr:GetAsyncIdx()
- self.asyncIdx = self.asyncIdx + 1
- return self.asyncIdx
- end
- function UIPetDecomposeCtr:GetData()
- return self.data
- end
- function UIPetDecomposeCtr:SetChildController(ctr)
- self.childCtr = ctr
- end
- function UIPetDecomposeCtr:AddSelectedId(id)
- if not self.selectedIds then
- self.selectedIds = {}
- end
- if #self.selectedIds >= decomposeLimit then
- return false
- end
- if not CommonUtil.EleInTable(id, self.selectedIds) then
- if self.data == DecomposeType.Pet then
- local petData = ManagerContainer.DataMgr.PetDataMgr:GetPetDataById(id)
- if petData.quality <= autoQualityLimit and petData.level == 1 then
- self.autoSelectedCount = self.autoSelectedCount - 1
- end
- else
- local skillEquipData = ManagerContainer.DataMgr.SkillEquipData:GetSkillEquipDataByUid(id)
- if skillEquipData.quality <= autoQualityLimit and skillEquipData.starLv == 1 then
- self.autoSelectedCount = self.autoSelectedCount - 1
- end
- end
- self.selectedIds[#self.selectedIds + 1] = id
- local showData = self:GetShowDataById(id)
- if showData then
- showData.selected = 1
- end
- return true
- end
- return false
- end
- function UIPetDecomposeCtr:IsSelected(id)
- return CommonUtil.EleInTable(id, self.selectedIds)
- end
- function UIPetDecomposeCtr:RemoveSeletedId(id)
- if not self.selectedIds then return end
- local result, idx = CommonUtil.EleInTable(id, self.selectedIds)
- if result then
- if self.data == DecomposeType.Pet then
- local petData = ManagerContainer.DataMgr.PetDataMgr:GetPetDataById(id)
- if petData.quality <= autoQualityLimit and petData.level == 1 then
- self.autoSelectedCount = self.autoSelectedCount + 1
- end
- else
- local skillEquipData = ManagerContainer.DataMgr.SkillEquipData:GetSkillEquipDataByUid(id)
- if skillEquipData.quality <= autoQualityLimit and skillEquipData.starLv == 1 then
- self.autoSelectedCount = self.autoSelectedCount + 1
- end
- end
- local showData = self:GetShowDataById(id)
- if showData then
- showData.selected = 0
- end
- table.remove(self.selectedIds, idx)
- end
- end
- function UIPetDecomposeCtr:GetSelectedPetDatas()
- if not self.selectedIds then return end
- self.selectedPetDatas = {}
- for i = 1, #self.selectedIds do
- local petData = ManagerContainer.DataMgr.PetDataMgr:GetPetDataById(self.selectedIds[i])
- self.selectedPetDatas[#self.selectedPetDatas + 1] = petData
- end
- CommonUtil.ArraySortListSelections(self.selectedPetDatas, Enum.TableSortRule.Up, "quality", "cfgId")
- return self.selectedPetDatas
- end
- function UIPetDecomposeCtr:GetSelectedPetDataByIdx(idx)
- if not self.selectedPetDatas then return end
- return self.selectedPetDatas[idx + 1]
- end
- function UIPetDecomposeCtr:GetSelectedPetLength()
- if not self.selectedIds then return 0 end
- return #self.selectedIds
- end
- function UIPetDecomposeCtr:RefreshPetDatas()
- self.petDatasLength = 0
- local petDatasSource = ManagerContainer.DataMgr.PetDataMgr:GetPetDatas()
- local petDatas = petDatasSource
- if self.isFilter then
- petDatas = CommonUtil.ArrayFilterSelections(petDatasSource, Enum.FilterType.AND, {"quality", "Attribute", "natureType"}, {self.filterData.raritySelections, self.filterData.attrSelections, self.filterData.typeSelections})
- end
- if petDatas ~= nil then
- petDatas = CommonUtil.ArrayFilterSelections(petDatas, Enum.FilterType.AND, {"isBattle", "qiyueHeroId"}, {false, 0})
- for _,v in pairs(petDatas) do
- v.skillUp = self:WasSkillUp(v)
- end
- CommonUtil.ArraySortSelections(petDatas, Enum.TableSortRule.Up, "isBattle", "quality", "isSupport", "isRelevant", "skillUp", "advanceLevel", "level", "cfgId")
- if not self.autoSelectedCount then
- self.autoSelectedCount = 0
- for _,v in pairs(petDatas) do
- if not v.isBattle and v.quality <= autoQualityLimit and v.level == 1 and not v.isRelevant and not v.isSupport and not v.skillUp then
- self.autoSelectedCount = self.autoSelectedCount + 1
- end
- end
- self.autoSelectedCount = math.min(decomposeLimit, self.autoSelectedCount)
- defaultCount = self.autoSelectedCount
- end
- if self.selectedIds then
- for _,v in pairs(petDatas) do
- if CommonUtil.EleInTable(v.id, self.selectedIds) then
- v.selected = 1
- end
- end
- end
- self.petDatasLength = #petDatas
- end
- if petDatas == nil then
- ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("NoCardTips3")
- end
- -- LogHRWarning(Inspect(petDatas))
- return petDatas
- end
- function UIPetDecomposeCtr:RefreshSkillEquipDatas()
- self.petDatasLength = 0
- local petDatasSource = ManagerContainer.DataMgr.SkillEquipData:GetSkillEquips()
- local petDatas = petDatasSource
- if self.isFilter then
- petDatas = CommonUtil.ArrayFilterSelections(petDatasSource, Enum.FilterType.AND, {"quality", "Attribute", "natureType"}, {self.filterData.raritySelections, self.filterData.attrSelections, self.filterData.typeSelections})
- end
- if petDatas ~= nil then
- CommonUtil.ArraySortSelections(petDatas, Enum.TableSortRule.Up, "quality", "maxStarLv", "cfgId")
- if not self.autoSelectedCount then
- self.autoSelectedCount = 0
- for _,v in pairs(petDatas) do
- if v.quality <= autoQualityLimit and v.starLv == 0 then
- self.autoSelectedCount = self.autoSelectedCount + 1
- end
- end
- self.autoSelectedCount = math.min(decomposeLimit, self.autoSelectedCount)
- defaultCount = self.autoSelectedCount
- end
- if self.selectedIds then
- for _,v in pairs(petDatas) do
- if CommonUtil.EleInTable(v.id, self.selectedIds) then
- v.selected = 1
- end
- end
- end
- self.petDatasLength = #petDatas
- end
- if petDatas == nil then
- ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("NoCardTips3")
- end
- -- LogHRWarning(Inspect(petDatas))
- return petDatas
- end
- function UIPetDecomposeCtr:GetPetDataById(id)
- if self.childCtr and self.childCtr.GetPetDataById then
- return self.childCtr:GetPetDataById(id)
- end
- return nil, nil
- end
- function UIPetDecomposeCtr:GetShowDataLength()
- return self.petDatasLength
- end
- function UIPetDecomposeCtr:DecomposeReturnCalc()
- if not self.selectedIds then return end
- self.cost = nil
- if self.data == DecomposeType.Pet then
- local maxLevel = ManagerContainer.CfgMgr:GetPetExpCfgMaxData()
- local zeny, exp, stone = 0, 0, 0
- local function GetSkillLvUpCount(petData)
- local count = 0
- for _,v in pairs(petData.skillList) do
- if v.level > 1 then
- count = count + v.level - 1
- end
- end
- return count
- end
- local function SumLvCost(type, lv, maxLv)
- if lv > maxLv then
- return
- end
- if lv > maxLevel then
- return
- end
- local petExt = ManagerContainer.CfgMgr:GetPetExpCfgDataById(lv - 1)
- local zenyCost, expCost = petExt['CostMoney'..type], petExt['experience'..type]
- zeny = zeny + (zenyCost or 0)
- exp = exp + (expCost or 0)
- SumLvCost(type, lv + 1, maxLv)
- end
- local function GetAdveneReturn2(quality, advenceLv)
- local resReturn
- if quality == 1 then
- resReturn = decomposeReturnNormal
- elseif quality == 2 then
- resReturn = decomposeReturnMini
- elseif quality == 3 then
- resReturn = decomposeReturnMvp
- end
- for _,v in pairs(resReturn) do
- if tonumber(v[1]) == advenceLv then
- return tonumber(v[3])
- end
- end
- return 0
- end
- for _,v in pairs(self.selectedIds) do
- local petData = ManagerContainer.DataMgr.PetDataMgr:GetPetDataById(v)
- if petData then
- local cfgData = ManagerContainer.CfgMgr:GetPetDataById(petData.cfgId)
- local resReturn = decomposeReturn1[cfgData.Quality]
- if resReturn then
- zeny = zeny + (resReturn[2] or 0)
- exp = exp + (resReturn[1] or 0)
- end
- SumLvCost(petData.quality, 2, petData.level)
- local skillUpCount = GetSkillLvUpCount(petData)
- stone = stone + ((skillUpCount * tonumber(decomposeReturn[petData.quality][3])) or 0)
- stone = stone + GetAdveneReturn2(petData.quality, petData.advanceLevel)
- end
- end
- local vipPer = self:GetVipPercent()
- return {{cfgId = Enum.ItemType.Coin, num = zeny*vipPer}, {cfgId = Enum.ItemType.PetExp, num = exp*vipPer}, {cfgId = Enum.ItemType.PetStone, num = stone*vipPer}}, vipPer
- elseif self.data == DecomposeType.SkillEquip then
- local resReturn = {}
- for _,v in pairs(self.selectedIds) do
- local petData = ManagerContainer.DataMgr.SkillEquipData:GetSkillEquipDataByUid(v)
- if petData then
- local cfgData = ManagerContainer.CfgMgr:GetArtifactCfgDataByCfgId(petData.cfgId)
- local smeltReturn = cfgData.SmeltReturn
- local starLv = petData.starLv
- local returnC = smeltReturn[starLv + 1]
- for _,v in pairs(returnC) do
- if not resReturn[v[1]] then
- resReturn[v[1]] = 0
- end
- resReturn[v[1]] = resReturn[v[1]] + v[2]
- end
- end
- end
- self.cost = {}
- for k,v in pairs(resReturn) do
- self.cost[#self.cost + 1] = {cfgId = k, num = v}
- end
- return self.cost
- end
- end
- function UIPetDecomposeCtr:GetCurCostReturnLength()
- return self.cost and #self.cost or 0
- end
- function UIPetDecomposeCtr:GetCostReturnByIdx(idx)
- return self.cost[idx + 1]
- end
- function UIPetDecomposeCtr:GetVipPercent()
- local vipLv = ManagerContainer.DataMgr.UserData:GetVipLv()
- local vipCfg = ManagerContainer.CfgMgr:GetVipCfgById(vipLv)
- local boliShooLv = ManagerContainer.DataMgr.BoliShopData:GetCurLv()
- local boliShopCfg = ManagerContainer.CfgMgr:GetBoLiVipCfgById(boliShooLv)
- local val = 0
- if vipCfg and vipCfg.PetBreak >= 1 or boliShopCfg and boliShopCfg.PetBreak >= 1 then
- val = GlobalConfig.Instance:GetConfigIntValue(222)
- else
- val = GlobalConfig.Instance:GetConfigIntValue(221)
- end
- return val * 0.01
- end
- function UIPetDecomposeCtr:GetDefaultCount()
- return defaultCount
- end
- function UIPetDecomposeCtr:GetAutoSelectedPetCount()
- return self.autoSelectedCount or 0
- end
- function UIPetDecomposeCtr:WasSkillUp(petData)
- for _,v in pairs(petData.skillList) do
- if v.level > 1 then
- return true
- end
- end
- return false
- end
- function UIPetDecomposeCtr:OneKeySelectPet()
- if not self.childCtr then return end
- if not self.selectedIds then
- self.selectedIds = {}
- end
- self.autoSelectedCount = 0
- local petDatas = self.childCtr:GetShowDatas()
- if petDatas then
- for i = 1, #petDatas do
- local data = petDatas[i]
- if #self.selectedIds < decomposeLimit then
- if self.data == DecomposeType.Pet then
- if data.quality <= autoQualityLimit and not data.isBattle and data.level == 1 and not data.isRelevant and not data.isSupport and not data.skillUp then
- if not CommonUtil.EleInTable(data.id, self.selectedIds) then
- self.selectedIds[#self.selectedIds + 1] = data.id
- data.selected = 1
- end
- end
- elseif self.data == DecomposeType.SkillEquip then
- if data.quality <= autoQualityLimit and data.starLv == 0 then
- if not CommonUtil.EleInTable(data.id, self.selectedIds) then
- self.selectedIds[#self.selectedIds + 1] = data.id
- data.selected = 1
- end
- end
- end
- else
- break
- end
- end
- end
- end
- function UIPetDecomposeCtr:OneKeyCancelSelectedPet()
- for _,v in pairs(self.selectedIds) do
- local showData = self:GetShowDataById(v)
- if showData then
- showData.selected = 0
- end
- end
- self.autoSelectedCount = defaultCount
- self.selectedIds = {}
- end
- function UIPetDecomposeCtr:ClearSelected()
- self.autoSelectedCount = nil
- self.selectedIds = {}
- end
- function UIPetDecomposeCtr:SendPetDecompose()
- if self.data == DecomposeType.Pet then
- ManagerContainer.DataMgr.PetDataMgr:SendPetDecompose(self.selectedIds)
- elseif self.data == DecomposeType.SkillEquip then
- ManagerContainer.DataMgr.SkillEquipData:SendSkillEquipDecomposeReq(self.selectedIds)
- end
- end
- function UIPetDecomposeCtr:GetShowDataById(id)
- if self.childCtr and self.childCtr.GetPetDataById then
- return self.childCtr:GetPetDataById(id)
- end
- return nil
- end
- function UIPetDecomposeCtr:SetFilterData(data, isFilter)
- self.filterData = data
- self.isFilter = isFilter
- end
- function UIPetDecomposeCtr:GetFilterData()
- return self.filterData
- end
- function UIPetDecomposeCtr:GetIsFilter()
- return self.isFilter
- end
- function UIPetDecomposeCtr:OnDispose()
- self.filterData = nil
- self.isFilter = nil
- self.selectedIds = nil
- self.selectedPetDatas = nil
- self.childCtr = nil
- self.data = nil
- self.view = nil
- end
- return UIPetDecomposeCtr
|