ro-webgl/Assets/Lua/UI/UIPet/UIPetLvUpCtr.lua
2021-12-21 09:40:39 +08:00

403 lines
11 KiB
Lua

local UIPetLvUpCtr = class("UIPetLvUpCtr", require("UICtrBase"))
local advenceLvStage
local lastAttrs = {}
local newAttrs = {}
local commonSkillMatId = 819
function UIPetLvUpCtr:Init(view)
self.view = view
local val = GlobalConfig.Instance:GetConfigStrValue(208)
if val ~= "" and val ~= nil then
advenceLvStage = CommonUtil.DeserializeGlobalStrToTable(val)
end
commonSkillMatId = GlobalConfig.Instance:GetConfigIntValue(313)
end
function UIPetLvUpCtr:SetData(data)
self.asyncIdx = 0
if data == nil then return end
self.data = data
end
function UIPetLvUpCtr:GetCurPetData()
local id = self.data
self.curPetData = ManagerContainer.DataMgr.PetDataMgr:GetPetDataById(id)
return self.curPetData
end
function UIPetLvUpCtr:GetCurPetMaxLv()
if next(advenceLvStage) == nil then
return 0
end
return tonumber(advenceLvStage[self.curPetData.advanceLevel + 1] or 0), self.curPetData.advanceLevel + 1 == #advenceLvStage
end
function UIPetLvUpCtr:GetPetMaxLv()
return ManagerContainer.CfgMgr:GetPetExpCfgMaxData()
end
function UIPetLvUpCtr:GetCurAdvenceMaxLv()
if next(advenceLvStage) == nil then
return 0
end
if not self.curPetData then
self.curPetData = ManagerContainer.DataMgr.PetDataMgr:GetPetDataById(self.data)
end
return tonumber(advenceLvStage[self.curPetData.advanceLevel] or 0), tonumber(advenceLvStage[self.curPetData.advanceLevel + 1] or 0)
end
function UIPetLvUpCtr:GetSimpleSecondAttrs()
local id = self.data
local actorData = ManagerContainer.DataMgr.PetDataMgr:GetPetActorData(id)
if not actorData then
return
end
if self.simpleAttrs == nil then
self.simpleAttrs = {}
end
self.simpleAttrs[Enum.HeroAttrType.Life] = actorData:GetFinalAttr(Enum.HeroAttrType.Life)
self.simpleAttrs[Enum.HeroAttrType.Sp] = actorData:GetFinalAttr(Enum.HeroAttrType.Sp)
self.simpleAttrs[Enum.HeroAttrType.Attack] = actorData:GetFinalAttr(Enum.HeroAttrType.Attack)
self.simpleAttrs[Enum.HeroAttrType.MagicAttack] = actorData:GetFinalAttr(Enum.HeroAttrType.MagicAttack)
self.simpleAttrs[Enum.HeroAttrType.Defense] = actorData:GetFinalAttr(Enum.HeroAttrType.Defense)
self.simpleAttrs[Enum.HeroAttrType.MagicDefense] = actorData:GetFinalAttr(Enum.HeroAttrType.MagicDefense)
return self.simpleAttrs
end
function UIPetLvUpCtr:GetCurPetAttr(key)
local actorData = ManagerContainer.DataMgr.PetDataMgr:GetPetActorData(self.data)
return actorData:GetFinalAttr(key)
end
function UIPetLvUpCtr:SendPetLvUp()
ManagerContainer.DataMgr.PetDataMgr:SendPetLvUp(self.data)
end
function UIPetLvUpCtr:AttrsChanged(tbArrtDeffrent)
if tbArrtDeffrent ~= nil then
for i=1,#tbArrtDeffrent do
local Data = tbArrtDeffrent[i]
local IsHero = Data.is_hero_pet
local ActorId = Data.actor_id
if self.data == ActorId and not IsHero then
local actorData = ManagerContainer.DataMgr.PetDataMgr:GetPetActorData(self.data)
lastAttrs = {}
newAttrs = {}
for k,v in pairs(Enum.HeroAttrType) do
newAttrs[v] = math.floor(SDataUtil.InvConvert(actorData:GetFinalAttr(v)))
local Dif = Data:GetAttribute(v)
if Dif == nil then
Dif = 0
end
lastAttrs[v] = newAttrs[v] - Dif
end
ManagerContainer.LuaUIMgr:AttrNoticeDisplay1( {lastAttrs, newAttrs})
end
end
end
end
function UIPetLvUpCtr:RefreshLeftPet()
self.data = ManagerContainer.DataMgr.PetDataMgr:GetNextSortId(self.data, false)
end
function UIPetLvUpCtr:RefreshRightPet()
self.data = ManagerContainer.DataMgr.PetDataMgr:GetNextSortId(self.data, true)
end
function UIPetLvUpCtr:SetSkillUpMatId(id)
self.skillUpMat = id
end
function UIPetLvUpCtr:GetSkillUpMat()
return self.skillUpMat
end
function UIPetLvUpCtr:SendPetSkillUp()
ManagerContainer.DataMgr.PetDataMgr:SendPetSkillUp(self.data, self.skillUpMat)
end
-- function UIPetLvUpCtr:GetScale()
-- LogError(tostring(self.data))
-- local PetActor = ManagerContainer.DataMgr.PetDataMgr:GetPetActorData(self.data)
-- local Scale = PetActor:GetScale()
-- return Scale
-- end
function UIPetLvUpCtr:GetScale()
if not self.curPetData then
return 1
end
-- LogError(Inspect(self.curPetData.skillList))
local Nveragelevles = 0
local nCount = 0
for _,v in pairs(self.curPetData.skillList) do
Nveragelevles = Nveragelevles + v.level
nCount = nCount + 1
end
-- if nCount > 0 then
-- Nveragelevles = math.ceil(Nveragelevles / nCount)
-- end
-- if Nveragelevles < 1 then
-- Nveragelevles = 1
-- end
Nveragelevles = Nveragelevles - nCount
if Nveragelevles <= 0 then
Nveragelevles = 0
end
local Scale = 1
local cfg = GlobalConfig.Instance:GetConfigStrValue(318)
if cfg and cfg ~= '' then
local itemCfgs = string.split(cfg, ';')
if itemCfgs then
for _,v in pairs(itemCfgs) do
if v and v ~= '' then
local itemCfg = string.split(v, ':')
if itemCfg and #itemCfg >= 2 then
local nLevel = tonumber(itemCfg[1])
local fScale = tonumber(itemCfg[2])
if nLevel <= Nveragelevles then
Scale = fScale
end
end
end
end
end
end
return Scale
end
function UIPetLvUpCtr:GetCurPetSkillData(id)
if not self.curPetData then return end
for _,v in pairs(self.curPetData.skillList) do
if v.cfgId == id then
return v
end
end
return
end
function UIPetLvUpCtr:GetPetActorData()
local id = self.data
local actorData = ManagerContainer.DataMgr.PetDataMgr:GetPetActorData(id)
if not actorData then
return
end
return actorData
end
function UIPetLvUpCtr:IsSkillMax()
if not self.curPetData then return false end
local petCfgData = ManagerContainer.CfgMgr:GetPetDataById(self.curPetData.cfgId)
local maxLimit = #petCfgData.Skill1Rate
for _,v in pairs(self.curPetData.skillList) do
if v.level < maxLimit then
return false
end
end
return true
end
function UIPetLvUpCtr:GetRelationAddAttrs()
local function GetMaxActiveRelationIdx(relationPets, cfgData)
local count = 3
local maxIdx = 0
for j = 3, 1, -1 do
local condition = cfgData['Condition'..j]
local state
if condition then
local curCount = 0
if relationPets then
for k,v1 in pairs(relationPets) do
local cfgId = condition[k][1]
local num = condition[k][2]
if v1.cfgId == cfgId and v1.advanceLevel >= num and v1.petId > 0 then
curCount = curCount + 1
end
end
end
state = curCount >= count
if state then
if maxIdx == 0 then
maxIdx = j
end
end
end
end
return maxIdx
end
local list = {}
local petData = self:GetCurPetData()
local relationDatas = ManagerContainer.DataMgr.PetDataMgr:GetAllPetRelationDatas()
for _,v in pairs(relationDatas) do
local cfgData = ManagerContainer.CfgMgr:GetPetPartnerDataById(v.cfgId)
local maxIdx = GetMaxActiveRelationIdx(v.relationPets, cfgData)
if maxIdx > 0 then
for i = maxIdx, 1, -1 do
for k, v1 in pairs(cfgData["attribute"..i]) do
if not list[v1[1]] then
list[v1[1]] = 0
end
list[v1[1]] = list[v1[1]] + v1[2]
end
end
end
end
return list
end
function UIPetLvUpCtr:SendPetBattleDown()
local petData = self:GetCurPetData()
if petData.heroId > 0 then
local data = {{key = petData.heroId, value = 0}}
ManagerContainer.DataMgr.PetDataMgr:SendPetBattle(data)
end
end
function UIPetLvUpCtr:SetSlotCount(count)
self.slotCount = count
end
function UIPetLvUpCtr:RefreshSlotRPState()
end
function UIPetLvUpCtr:SendOneKeyUp()
local petData = self:GetCurPetData()
if not petData then return end
local slots = petData.slots
local kvList = {}
for i = 1, self.slotCount do
local slot = slots and slots[i] or nil
local state = slot and (slot.stampId > 0) or false
if not state then
local list, qualityStamp = ManagerContainer.DataMgr.PetDataMgr.petStampData:GetAllPetStampDatasByTypeExcludeId(i)
if qualityStamp and qualityStamp.petId == 0 then
kvList[#kvList + 1] = {key = i, value = qualityStamp.id}
end
end
end
if #kvList > 0 then
ManagerContainer.DataMgr.PetDataMgr:SendStampUpReq(self.data, kvList)
end
end
function UIPetLvUpCtr:SendOneKeyDown()
local petData = self:GetCurPetData()
if not petData then return end
local slots = petData.slots
local canDown = false
for i = 1, self.slotCount do
local slot = slots and slots[i] or nil
local state = slot and (slot.stampId > 0) or false
if state then
canDown = true
break
end
end
if canDown then
ManagerContainer.DataMgr.PetDataMgr:SendStampDownReq(self.data, 0)
end
end
function UIPetLvUpCtr:RefreshSkillMatsData()
if not self.curPetData then return end
if self.skillUpMat then return end
self.skillUpMat = nil
local selfId = self.curPetData.id
local petDatasSource = ManagerContainer.DataMgr.PetDataMgr:GetPetDatas()
local petDatas = petDatasSource
local petData = self.curPetData
local selfDatas = CommonUtil.ArrayFilterSelections(petDatas, Enum.FilterType.AND, {"cfgId", "qiyueHeroId"}, {petData.cfgId, 0})
for j = #selfDatas, 1, -1 do
if selfDatas[j].id == selfId then
table.remove(selfDatas, j)
break
end
end
if #selfDatas > 0 then
CommonUtil.ArraySortSelections(selfDatas, Enum.TableSortRule.Up, "isBattle", "quality", "isSupport", "isRelevant", "advanceLevel", "level", "cfgId")
if #selfDatas > 0 then
self.skillUpMat = selfDatas[1].id
return
end
end
local commonDatas = CommonUtil.ArrayFilterSelections(petDatas, Enum.FilterType.AND, {"cfgId", "qiyueHeroId"}, {commonSkillMatId, 0})
for j = #commonDatas, 1, -1 do
if commonDatas[j].id == selfId then
table.remove(commonDatas, j)
break
end
end
if #commonDatas > 0 then
CommonUtil.ArraySortSelections(commonDatas, Enum.TableSortRule.Up, "isBattle", "quality", "isSupport", "isRelevant", "advanceLevel", "level", "cfgId")
if #commonDatas > 0 then
self.skillUpMat = commonDatas[1].id
return
end
end
ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("Petstudy_003")
end
function UIPetLvUpCtr:GetSkillMatPetData()
if not self.skillUpMat then return end
local petData = ManagerContainer.DataMgr.PetDataMgr:GetPetDataById(self.skillUpMat)
return petData
end
function UIPetLvUpCtr:WasSkillUp(petData)
if not petData.skillList then return false end
for _,v in pairs(petData.skillList) do
if v.level > 1 then
return true
end
end
return false
end
function UIPetLvUpCtr:QueryPetDetailInfo()
ManagerContainer.DataMgr.PetDataMgr:QueryPetDetailInfos({self.data})
end
function UIPetLvUpCtr:GetAsyncIdx()
self.asyncIdx = self.asyncIdx + 1
return self.asyncIdx
end
function UIPetLvUpCtr:GetData()
return self.data
end
function UIPetLvUpCtr:OnDispose()
self.data = nil
self.view = nil
self.curSkillMat = nil
end
return UIPetLvUpCtr