local Broadcast_Controller = {} local private = {} local EventSystem = require('Event/EventSystem') local BroadcastLevelLimit = DataSheetManager.ConstData:GetDataByID("BroadcastShowLv").IntValue function Broadcast_Controller.OnStartup() private._existedBroadcastMsg = nil private._existedBroadcastMsg_Top = nil private._existedBroadcastGM = nil end --region ********************* 中部跑马灯 ************ function Broadcast_Controller.GetExistedBroadcastMsg() return private._existedBroadcastMsg end function Broadcast_Controller.SetExistedBroadcastMsg(broadcastData) private._existedBroadcastMsg = broadcastData end function Broadcast_Controller.ClearExistedBroadcastMsg() private._existedBroadcastMsg = nil end --endregion ******************************************* --region ********************* 顶部跑马灯 ************** function Broadcast_Controller.GetExistedBroadcastMsg_Top() return private._existedBroadcastMsg_Top end function Broadcast_Controller.SetExistedBroadcastMsg_Top(broadcastData) private._existedBroadcastMsg_Top = broadcastData end function Broadcast_Controller.ClearExistedBroadcastMsg_Top() private._existedBroadcastMsg_Top = nil end --endregion ******************************************* function Broadcast_Controller.InsertBroadcastMsg(templateInfo, isInChat) if MDL.HeroSelect.GetTeamLevel() < BroadcastLevelLimit then return nil end --功能未解锁不显示 local templateData = DataSheetManager.Broadcast:GetDataByID(templateInfo.templateId) if templateData.FunctionID > 0 and MDL.Unlock.IsUnlock(templateData.FunctionID) == false then return nil end local content = Broadcast_Controller.FormatBroadcastMsgContent(templateInfo, isInChat) local msg = { Priority = templateData.Priority, BreakPriority = templateData.BreakPriority, content = content, mapUIType = templateData.UiType, } ---- 跑马灯的显示位置 if templateData.Place == 0 or templateData.Place == 2 then -- 顶部跑马灯 MDL.Broadcast.InsertBroadcastMsg_Top(msg) elseif templateData.Place == 1 then -- 中部跑马灯 MDL.Broadcast.InsertBroadcastMsg(msg) end return content end function private.FormatTemplateParamByType(type, param, isInChat) if type == MDL.ChannelChat.TemplateParamType.BossName then local bossData = DataSheetManager.WorldBoss:GetDataByID(param.bossId) local levelText if isInChat then local level, rank = MDL.Nobility.GetLevelAndNobility(bossData.ShowLevel) levelText = string.FormatByIdsId(Const_IDS["IDS_HeroLevelShow"], CTL.ChannelChat.RankEmoji[rank] .. level) else local bossLevel = bossData.ShowLevel levelText = MDL.HeroSelect.GetTeamLevelName(bossLevel) end return string.Concat(levelText, UIUtils.GetLocalizedTxt(Const_IDS[bossData.WordBossName])) elseif type == MDL.ChannelChat.TemplateParamType.ItemName then return CTL.ChannelChat.FormatItemMsg(param.itemId) elseif type == MDL.ChannelChat.TemplateParamType.MapName then local mapInfo = DataSheetManager.LevelInfoData:GetDataByLevelID(param.mapId) return UIUtils.GetLocalizedTxt(Const_IDS[mapInfo.LevelNameIDS]) elseif type == MDL.ChannelChat.TemplateParamType.RoleName then return CTL.ChannelChat.CreateHyperlinkContent(CTL.ChannelChat.HyperlinkTag.Player, param.acid, param.name) elseif type == MDL.ChannelChat.TemplateParamType.Time then return param.time elseif type == MDL.ChannelChat.TemplateParamType.GuildName then if string.match(param.name,"^IDS") then return UIUtils.GetLocalizedTxt(Const_IDS[param.name]) else return param.name end elseif type == MDL.ChannelChat.TemplateParamType.GuildLevel then return CTL.Guild.GetGuildLevelStr(tonumber(param.level)) elseif type == MDL.ChannelChat.TemplateParamType.IdsOrStr then if string.match(param.idsOrStr,"^IDS") then return UIUtils.GetLocalizedTxt(Const_IDS[param.idsOrStr]) else return param.idsOrStr end elseif type == MDL.ChannelChat.TemplateParamType.GuildAlliesPowerName then local guildAlliesCfg = DataSheetManager.GuildAlliesData:GetDataByID(param.powerId) return UIUtils.GetLocalizedTxt(Const_IDS[guildAlliesCfg.AlliesName]) elseif type == MDL.ChannelChat.TemplateParamType.Nobility then -- 获取爵位名 local nobilityName = DataSheetManager.Nobility:GetDataByRankID(param.nobilityId).Name return UIUtils.GetLocalizedTxt(Const_IDS[nobilityName]) elseif type == MDL.ChannelChat.TemplateParamType.TreasureId then -- 获取带资质颜色的宝物名 local treasureData = DataSheetManager.TreasureData:GetDataByTreasureID(param.treasureId) return UTL.Color.FormatQualityText(UIUtils.GetLocalizedTxt(Const_IDS[treasureData.TreasureName]), treasureData.TreasureQuality) elseif type == MDL.ChannelChat.TemplateParamType.HorseId then -- 获取带资质颜色的战骑名 local horseData = DataSheetManager.HorseData:GetDataByHorseID(param.horseId) return UTL.Color.FormatQualityText(UIUtils.GetLocalizedTxt(Const_IDS[horseData.HorseName]), horseData.HorseQuality) elseif type == MDL.ChannelChat.TemplateParamType.TimeRefreshId then local desc, timeStr = UTL.Time.GetDateDescAndTime({[1] = param.timeRefreshId}) return timeStr elseif type == MDL.ChannelChat.TemplateParamType.GoldenHeroBossActivity then local heroType = MDL.GoldenHeroMain.GetHeroTypeByActivityId(param.activityId) if heroType then local modeData = DataSheetManager.GoldHeroActivityModeData:GetDataByHeroType(MDL.GoldenHeroMain.GetHeroTypeByActivityId(param.activityId)) return UIUtils.GetLocalizedTxt(Const_IDS[modeData.TownName]) else logging.error(LTAG.ERROR, "金将活动activityId:", param.activityId , "已经过期,不应该执行到这个代码,请程序检查!!!") end elseif type == MDL.ChannelChat.TemplateParamType.GoldHeroReprint then return UIUtils.GetLocalizedTxt(Const_IDS.IDS_JP_ActivityName_GoldHeroReprint) elseif type == MDL.ChannelChat.TemplateParamType.CountryName then return CTL.Country.GetCountryName(param.countryId) elseif type == MDL.ChannelChat.TemplateParamType.CountryJobIds then return UIUtils.GetLocalizedTxt(Const_IDS[param.countryJobIds]) end end -- 【于宗辰】080 以后 跑马灯超链接不再支持跳转 function Broadcast_Controller.FormatBroadcastMsgContent(templateInfo, isInChat) local templateId = templateInfo.templateId local paramList = templateInfo.params local paramStringList = {} local templateData = DataSheetManager.Broadcast:GetDataByID(templateId) local HyperlinkStr local goldHeroActivityType = MDL.OperationActivity.ActivityType.GoldenHero if #paramList > 0 then --预先检查金将活动是否过期 for i, v in ipairs(paramList) do if v.paramType == MDL.ChannelChat.TemplateParamType.GoldenHeroBossActivity then local activityId = v.param.activityId local info = MDL.OperationActivity.GetOperationActivityInfo(goldHeroActivityType, activityId) if not info then return nil end if not CTL.OperationActivity.IsOperationActivityOpen(info) then return nil end end end if paramList[1].paramType == MDL.ChannelChat.TemplateParamType.GoldenHeroBossActivity then --金将体验 --金将体验活动拼凑的时候,第二个字符串需要第1个和第2个的id共同才能确定 local activityId = paramList[1].param.activityId local bossId = paramList[2].param.goldHeroBossId local OAData = MDL.OperationActivity.HotControlInfo:GetDataByActivityType_ActivityID(goldHeroActivityType, activityId) if OAData then local bossConfigId = tonumber(string.split(bossId, "|")[2]) local heroType = MDL.GoldenHeroMain.GetHeroTypeByActivityId(activityId) local bossData = DataSheetManager.GoldHeroSynergyBossData[heroType]:GetDataByID(bossConfigId) local bossName = UIUtils.GetLocalizedTxt(Const_IDS[bossData.BossName]) paramStringList[1] = bossName HyperlinkStr = CTL.ChannelChat.CreateHyperlinkContent(CTL.ChannelChat.HyperlinkTag.GoldenHeroBossShare, activityId .. "|" .. bossId, UIUtils.GetLocalizedTxt(Const_IDS[templateData.TurnDescribe]), true) else return nil end elseif paramList[1].paramType == MDL.ChannelChat.TemplateParamType.GoldHeroReprint then -- 日服金将复刻 paramStringList[1] = paramList[1].param.name -- 玩家名 paramStringList[2] = UIUtils.GetLocalizedTxt(Const_IDS.IDS_JP_ActivityName_GoldHeroReprint) -- 活动名 paramStringList[3] = UTL.Item.GetItemColorName(paramList[2].param.itemId) -- 抽卡结果 elseif paramList[1].paramType == MDL.ChannelChat.TemplateParamType.MonthCard then --月卡(先发月卡ID,再发玩家名字) local monthCardId = paramList[1].param.monthCardId local monthCardData = DataSheetManager.MonthCard:GetDataByMonthCardID(monthCardId) local dailyGold = 0 for i, v in ipairs(monthCardData.DailyReward_Table) do if v.ItemID == MDL.Currency.CurrencyType.GoldIngot then dailyGold = v.ItemNum break end end local lastDay = monthCardData.LastDay paramStringList[1] = paramList[2].param.name paramStringList[2] = dailyGold --每天元宝 paramStringList[3] = lastDay --持续时间 paramStringList[4] = dailyGold * lastDay --总计获得 HyperlinkStr = CTL.ChannelChat.CreateHyperlinkContent(CTL.ChannelChat.HyperlinkTag.ExcelTemplate, templateId, UIUtils.GetLocalizedTxt(Const_IDS[templateData.TurnDescribe]), true) else for i, v in ipairs(paramList) do local str = private.FormatTemplateParamByType(v.paramType, v.param, isInChat) table.insert(paramStringList, str) end HyperlinkStr = CTL.ChannelChat.CreateHyperlinkContent(CTL.ChannelChat.HyperlinkTag.ExcelTemplate, templateId, UIUtils.GetLocalizedTxt(Const_IDS[templateData.TurnDescribe]), true) end else HyperlinkStr = CTL.ChannelChat.CreateHyperlinkContent(CTL.ChannelChat.HyperlinkTag.ExcelTemplate, templateId, UIUtils.GetLocalizedTxt(Const_IDS[templateData.TurnDescribe]), true) end local wholeContent = string.FormatByIdsKey(templateData.Describe, unpack(paramStringList)) .. HyperlinkStr return wholeContent end function Broadcast_Controller.IfCanShowBroadcast(mapUIType) if mapUIType == MDL.Broadcast.MapUIType.All then return true elseif mapUIType == MDL.Broadcast.MapUIType.Town then return BattleDataGetter.IsTownLevel() elseif mapUIType == MDL.Broadcast.MapUIType.Battle then return not BattleDataGetter.IsTownLevel() end end --endregion --region -- **************** GM中跑马灯 ******************* -- function Broadcast_Controller.GetExistedBroadcastGM() return private._existedBroadcastGM end function Broadcast_Controller.SetExistedBroadcastGM(broadcastGMData) private._existedBroadcastGM = broadcastGMData end function Broadcast_Controller.ClearExistedBroadcastGM() private._existedBroadcastGM = nil end function Broadcast_Controller.InsertBroadcastGM(gmInfo) local content = Broadcast_Controller.FormatBroadcastGMContent(gmInfo) local msg = { priority = gmInfo.priority, content = content, } MDL.Broadcast.InsertBroadcastGM(msg) return content end function Broadcast_Controller.FormatBroadcastGMContent(gmInfo) local content = Localization.GetOperationActivityLabel(gmInfo.content) local timeParam = math.ceil(gmInfo.param/UTL.Time.TotalSecondsOneMinute) if timeParam and timeParam > 0 then content = string.format(content, timeParam) end return content end -- 继续被GM跑马灯打断的顶部跑马灯 function Broadcast_Controller.RecoverTopBroadcast() if not Broadcast_Controller.GetExistedBroadcastGM() then EventSystem.Dispatch(EventID.UI_Broadcast_RecoverBroadcastTop) end end --endregion return Broadcast_Controller --测试用代码 --local templateInfo = { -- templateId = 1001, -- params = { -- [1] = { -- param = { -- bossId = 10, -- }, -- paramType = 104, -- insertBeginIndex = -1, -- insertEndIndex = -1, -- } -- } --} --CTL.Broadcast.InsertBroadcastMsg(templateInfo, true)