403 lines
11 KiB
Lua
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
|
|
|