local UIServerLevel = UIViewClass() local BENEFIT_COEF = 3 local DE_COEF = { low = 0.33, high = 0.67, max = 1 } function UIServerLevel:OnOpened(context) self:InitlAllData() self:SetNoboilityInfo() self:RefreshServerLevelModifyInfo() end function UIServerLevel:InitlAllData() self.serverLevel = MDL.Player.GetServerLevel() self.lastServerLevel = MDL.Player.GetLastServerLevel() self.playerLevel = MDL.Player.GetRoleLevel() end function UIServerLevel:SetNoboilityInfo() local teamLevelData = DataSheetManager.TeamLevelData:GetDataByTeamLevel(self.serverLevel) local levelStr = UTL.Item.GetNobilityByTeamLevel(teamLevelData.TeamLevel) -- 爵位转换 local teamLevelLocStr = UIUtils.GetLocalizedTxt(Const_IDS[teamLevelData.TeamLevelName]) UIUtils.SetLabel(self.txt_Level, string.format(teamLevelLocStr, levelStr)) end function UIServerLevel:RefreshServerLevelModifyInfo() -- 处于进爵状态,显示信息为无加成 if MDL.Nobility.GetCanNobilityByHeroLevel(self.playerLevel) then UIUtils.SetLabelText(self.txt_Exp, Const_IDS.IDS_ServerLevel_NoBenefit) return end if self.playerLevel > self.serverLevel then -- 等级超前 local diffLevel = self.playerLevel - self.serverLevel local coefVal if diffLevel > DataSheetManager.LevelDecreaseCoef:GetDataCount() then coefVal = DE_COEF.max else coefVal = DataSheetManager.LevelDecreaseCoef:GetDataByServerDayCount(diffLevel).ServerLevel end if coefVal <= DE_COEF.low then UIUtils.SetLabelText(self.txt_Exp, Const_IDS.IDS_ServerLevel_LowDecrease) elseif coefVal <= DE_COEF.high then UIUtils.SetLabelText(self.txt_Exp, Const_IDS.IDS_ServerLevel_HighDecrease) elseif coefVal <= DE_COEF.max then UIUtils.SetLabelText(self.txt_Exp, Const_IDS.IDS_ServerLevel_FullyDecrease) end else if self.serverLevel > self.lastServerLevel then -- Y1 < level <= Y if self.playerLevel >= self.lastServerLevel and self.playerLevel <= self.serverLevel then UIUtils.SetLabelText(self.txt_Exp, Const_IDS.IDS_ServerLevel_NoBenefit) elseif self.playerLevel < self.lastServerLevel then local coef = self:GetBenefitCoef() if coef < BENEFIT_COEF then UIUtils.SetLabelText(self.txt_Exp, Const_IDS.IDS_ServerLevel_LowBenefit) else UIUtils.SetLabelText(self.txt_Exp, Const_IDS.IDS_ServerLevel_HighBenefit) end end elseif self.serverLevel <= self.lastServerLevel then if self.playerLevel == self.serverLevel then UIUtils.SetLabelText(self.txt_Exp, Const_IDS.IDS_ServerLevel_NoBenefit) elseif self.playerLevel < self.serverLevel then local coef = self:GetBenefitCoef() if coef < BENEFIT_COEF then UIUtils.SetLabelText(self.txt_Exp, Const_IDS.IDS_ServerLevel_LowBenefit) else UIUtils.SetLabelText(self.txt_Exp, Const_IDS.IDS_ServerLevel_HighBenefit) end end end end end function UIServerLevel:GetBenefitCoef() local calDayCount = MDL.Player.GetDayCountByLevel(self.playerLevel) local serverDayCount = MDL.Player.GetDayCountByLevel(self.serverLevel) local dayDiff = serverDayCount - calDayCount local maxConfigDay = 0 local minConfigDay = 999 for i,v in DataSheetManager.ServerLevelModifier:GetEnumerator() do if v.ServerDayCount > maxConfigDay then maxConfigDay = v.ServerDayCount end if v.ServerDayCount < minConfigDay then minConfigDay = v.ServerDayCount end end if dayDiff > maxConfigDay then dayDiff = maxConfigDay end if dayDiff < minConfigDay then dayDiff = minConfigDay end return DataSheetManager.ServerLevelModifier:GetDataByServerDayCount(dayDiff).ServerLevel end function UIServerLevel:OnClosed() end function UIServerLevel:OnButtonClicked(comp) if self.img_Back == comp then self:CloseView() end end return UIServerLevel