local TreasureLibrary_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local pictorial_book = require 'Proto.pictorial_book_pb' --region---------------------------------- 系统函数 ------------------------------------------ function TreasureLibrary_Model.OnStartup() EventSystem.Regist(EventID.Illustration_AssignUpdateLevelResponse, private.ResponseUpdateLevel) EventSystem.Regist(EventID.UI_UpdateTreasureInfo, private.SetInfoDirty) EventSystem.Regist(EventID.UI_Reborn_Recast_RecastSuccess, private.OnRecastSuccess) EventSystem.Regist(EventID.UI_Illustration_OneKeyUpLevel, private.OnOneKeyUpLevel) private.isInit = false private.libraryLevel = 0 private.libraryScore = 0 private.unlockTreasureCount = 0 private.levelZeroAttrs = LuaExt.CreateTable(DataSheetManager.AttrData:GetDataCount()) local scoreData = DataSheetManager.TreasurePictorialScore:GetDataByLevelID(1) for _, attrData in ipairs (scoreData.Attr_Table) do private.levelZeroAttrs[attrData.AttrType] = 0 end private.levelScoreAttr = LuaExt.CreateTable(DataSheetManager.TreasurePictorialScore:GetDataCount()) -- 累加统计每个等级的积分属性 for _, v in DataSheetManager.TreasurePictorialScore:GetEnumerator() do local attrs = LuaExt.CreateTable(DataSheetManager.AttrData:GetDataCount()) local formerAttrs = private.levelScoreAttr[v.LevelID - 1] if formerAttrs then for attrType, attrNum in pairs (formerAttrs) do if not attrs[attrType] then attrs[attrType] = attrNum else attrs[attrType] = attrs[attrType] + attrNum end end end for _, attrData in ipairs (v.Attr_Table) do if not attrs[attrData.AttrType] then attrs[attrData.AttrType] = attrData.AttrNum else attrs[attrData.AttrType] = attrs[attrData.AttrType] + attrData.AttrNum end end table.insert(private.levelScoreAttr, attrs) end end function TreasureLibrary_Model.OnShutdown() private.treasureAttrs = nil table.clearArray(private.levelScoreAttr) private.levelScoreAttr = nil private.levelZeroAttrs = nil end --endregion---------------------------------------------------------------------------------- --region 协议处理 function TreasureLibrary_Model.SetLibraryInfo(libraryInfoArray) if not IsServerDataNotNil(libraryInfoArray) then return end --获取宝物图鉴信息 local libraryInfo = {} for i,v in ipairs(libraryInfoArray) do if v.type == LuaConst.PictorialType.Treasure then libraryInfo = v break end end if IsServerDataNotNil(libraryInfo) then private.libraryLevel = libraryInfo.level private.libraryScore = libraryInfo.score end -- 初始化 if not private.isInit then private.isInit = true private.CalAttrs() end -- 升级弹出提示 CTL.TreasureLibrary.ShowLeveUpTipPanel(private.formerLibraryLevel, private.libraryLevel) private.formerLibraryLevel = private.libraryLevel --保存上次图鉴积分等级 EventSystem.Dispatch(EventID.UI_Illustration_TreasureLibrary_RefreshBase) end function TreasureLibrary_Model.RequestUpdateLevel(treasureId) private.isInfoDirty = false private.formerLibraryLevel = private.libraryLevel --保存上次图鉴积分等级 local msg = pictorial_book.PictorialLevelUpReq() msg.id = treasureId msg.type = LuaConst.PictorialType.Treasure NetManager.SendMessage(MessageEnums.MessagePictorialLevelUp, msg) end function private.ResponseUpdateLevel(msgResp) if msgResp.Resp.Code ~= 0 then return end if msgResp.type ~= LuaConst.PictorialType.Treasure then return end private.lastUpdateId = msgResp.id private.UpdateInfoAfterUpdateLevel() end --图鉴信息变化了 function private.SetInfoDirty() private.isInfoDirty = true private.UpdateInfoAfterUpdateLevel() CTL.TreasureLibrary.CheckRedPoint() end --激活/升级后更新图鉴数据 --等升级和playerchange消息都回来以后执行 function private.UpdateInfoAfterUpdateLevel() if private.lastUpdateId ==nil then return end if not private.isInfoDirty then return end --更新解锁的数量 local treasureCfgData = DataSheetManager.TreasureData:GetDataByTreasureID(private.lastUpdateId) local libraryLevel = TreasureLibrary_Model.GetTreasureLevel(private.lastUpdateId) if libraryLevel == 0 then -- 解锁 private.unlockTreasureCount = private.unlockTreasureCount + 1 CTL.Tips.AddTipsMsg(string.FormatByIdsKey("IDS_Handbook_Treasure_Activate_Tips", UIUtils.GetLocalizedTxt(Const_IDS[treasureCfgData.TreasureName]))) else CTL.Tips.AddTipsMsg(string.FormatByIdsKey("IDS_Handbook_Treasure_LevelUp_Tips", UIUtils.GetLocalizedTxt(Const_IDS[treasureCfgData.TreasureName]))) end --更新属性 local curCfg = DataSheetManager.TreasurePictorialType:GetDataByTreasurePictorialTypeID_PictorialLevel(treasureCfgData.TreasurePictorialType, libraryLevel) for i, v in ipairs (curCfg.Attr_Table) do if not private.treasureAttrs[v.AttrType] then private.treasureAttrs[v.AttrType] = curCfg.Attr_Table[i].AttrNum else private.treasureAttrs[v.AttrType] = private.treasureAttrs[v.AttrType] + curCfg.Attr_Table[i].AttrNum end end if libraryLevel >= 1 then local formerCfg = DataSheetManager.TreasurePictorialType:GetDataByTreasurePictorialTypeID_PictorialLevel(treasureCfgData.TreasurePictorialType, libraryLevel - 1) for i, v in ipairs (formerCfg.Attr_Table) do if private.treasureAttrs[v.AttrType] then private.treasureAttrs[v.AttrType] = private.treasureAttrs[v.AttrType] - formerCfg.Attr_Table[i].AttrNum end end end EventSystem.Dispatch(EventID.UI_Illustration_TreasureLibrary_RefreshBase) EventSystem.Dispatch(EventID.UI_Illustration_TreasureLibrary_RefreshPopUp, true) CTL.TreasureLibrary.CheckRedPoint() private.lastUpdateId = nil private.isInfoDirty = false end --endregion function TreasureLibrary_Model.GetLibraryLevelAndScore() return private.libraryLevel, private.libraryScore end function TreasureLibrary_Model.GetUnlockAndAmountTreasureCount() local sortedList = MDL.Treasure.GetSortedTreasureList() return private.unlockTreasureCount,#sortedList end function TreasureLibrary_Model.GetAttrs(isGetScore) if isGetScore then if not private.levelScoreAttr[private.libraryLevel] then return private.levelZeroAttrs end return private.levelScoreAttr[private.libraryLevel] end return private.treasureAttrs end function TreasureLibrary_Model.GetAttrValue(attrType, isGetScore) if isGetScore then if not private.levelScoreAttr[private.libraryLevel] then return private.levelZeroAttrs[attrType] end return private.levelScoreAttr[private.libraryLevel][attrType] end return private.treasureAttrs[attrType] end function TreasureLibrary_Model.GetScoreAttrByLevel(libraryLevel, attrType) return private.levelScoreAttr[libraryLevel][attrType] end --获取宝物图鉴等级 function TreasureLibrary_Model.GetTreasureLevel(treasureId) if not treasureId then return -1 end local treasureInfo = MDL.Treasure.GetTreasureInfo(treasureId) if not treasureInfo then return -1 end return treasureInfo.TreasureInfo.pictorialLevel end --可激活或可升级 function TreasureLibrary_Model.IsTreasureCanUpdate(treasureId) local libraryLevel = TreasureLibrary_Model.GetTreasureLevel(treasureId) if libraryLevel == -1 then -- 可激活 local treasureInfo = MDL.Treasure.GetTreasureInfo(treasureId) if treasureInfo then return true end return false else --超过突破等级 local horseCfg = DataSheetManager.TreasureData:GetDataByTreasureID(treasureId) local isSuccess, nextCfg = DataSheetManager.TreasurePictorialType:TryGetDataByTreasurePictorialTypeID_PictorialLevel(horseCfg.TreasurePictorialType, libraryLevel + 1) if isSuccess then local treasureInfo = MDL.Treasure.GetTreasureInfo(treasureId) return treasureInfo.TreasureInfo.starLevel >= nextCfg.StarLevel end end return false end function TreasureLibrary_Model.IsShowRP() local list = MDL.Treasure.GetSortedTreasureList() for _, v in ipairs (list) do if TreasureLibrary_Model.IsTreasureCanUpdate(v.TreasureID) then return true end end return false end function private.OnRecastSuccess(typeId) if typeId == MDL.Reborn.RebornType.Treasure then private.CalAttrs() end end function private.OnOneKeyUpLevel(type) if type == LuaConst.PictorialType.Treasure then private.unlockTreasureCount = 0 private.CalAttrs() EventSystem.Dispatch(EventID.UI_Illustration_TreasureLibrary_RefreshBase) end end function private.CalAttrs() private.treasureAttrs = LuaExt.CreateTable(DataSheetManager.AttrData:GetDataCount()) --统计的总属性值 local list = MDL.Treasure.GetSortedTreasureList() for _, t in ipairs(list) do local libraryLevel = TreasureLibrary_Model.GetTreasureLevel(t.TreasureID) local isUnlock = libraryLevel >= 0 private.unlockTreasureCount = isUnlock and private.unlockTreasureCount + 1 or private.unlockTreasureCount --累加总属性加成 if isUnlock then local curCfg = DataSheetManager.TreasurePictorialType:GetDataByTreasurePictorialTypeID_PictorialLevel(t.TreasurePictorialType, libraryLevel) for i, v in ipairs (curCfg.Attr_Table) do if not private.treasureAttrs[v.AttrType] then private.treasureAttrs[v.AttrType] = curCfg.Attr_Table[i].AttrNum else private.treasureAttrs[v.AttrType] = private.treasureAttrs[v.AttrType] + curCfg.Attr_Table[i].AttrNum end end else -- 初始化0 local curCfg = DataSheetManager.TreasurePictorialType:GetDataByTreasurePictorialTypeID_PictorialLevel(t.TreasurePictorialType, 0) for i, v in ipairs (curCfg.Attr_Table) do if not private.treasureAttrs[v.AttrType] then private.treasureAttrs[v.AttrType] = 0 end end end end CTL.TreasureLibrary.CheckRedPoint() end return TreasureLibrary_Model