ChatTextItemCtr.lua 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. local ChatTextItemCtr = {}
  2. local TaskJumpCtr = require("Common/TaskJumpCtr")
  3. function ChatTextItemCtr:SetData(wnd, item, logicData, enterType, onClickOwner, onClickCB)
  4. item.chlWorld:SetActive(false)
  5. item.chlSystem:SetActive(logicData.isSystem and logicData.type ~= Enum.ChatSystemType.Guild)
  6. item.chlGuildSystem:SetActive(logicData.isSystem and logicData.type == Enum.ChatSystemType.Guild)
  7. --item.system:SetActive(enterType == Enum.ItemIEnterType.System)
  8. --item.player:SetActive(enterType ~= Enum.ItemIEnterType.System)
  9. item.easyPlayer:SetActive(not logicData.isSystem)
  10. item.vipIcon.image.enabled = false
  11. item.vipIcon.image.sprite = nil
  12. item.titleImg.image.enabled = false
  13. item.titleImg.image.sprite = nil
  14. item.text.symbolText.raycastTarget = false
  15. if item.text.symbolTextEvent then
  16. item.text.symbolTextEvent:RegisterClickEvent(nil, nil)
  17. end
  18. if enterType == Enum.ItemIEnterType.System then
  19. --公告类型 1通关 2获得伙伴 3宝箱 4稀有道具
  20. local paramName = ""
  21. if logicData.type == Enum.ChatSystemType.Loggedin then
  22. item.text.symbolText.text = I18N.T(logicData.nickname)
  23. --local content = I18N.T(logicData.nickname)
  24. --item.text.symbolText.text = "#h"..content.."{6}#h"
  25. --if item.text.symbolTextEvent then
  26. -- item.text.symbolTextEvent:RegisterClickEvent(wnd, wnd.SystemChatHyperClick)
  27. --end
  28. elseif logicData.type == Enum.ChatSystemType.SdkLink then
  29. item.text.symbolText.raycastTarget = true
  30. item.text.symbolText.text = I18N.T(logicData.nickname)
  31. item.text.symbolTextEvent:RegisterClickEvent(nil, function (hyperParam)
  32. local lurl = hyperParam
  33. --LogError("SdkLink hyperParam = "..hyperParam)
  34. UnityEngine.Application.OpenURL(lurl)
  35. end)
  36. elseif logicData.type == Enum.ChatSystemType.PassMap then
  37. local levelData = ManagerContainer.CfgMgr:GetLevelDataById(logicData.paramIds[1])
  38. if levelData ~= nil then
  39. paramName = levelData.Name
  40. item.text.symbolText.text = I18N.SetLanguageValue("SystemMessageType1", CommonUtil.GetVaildNickName(logicData.nickname), I18N.T(paramName))
  41. end
  42. elseif logicData.type == Enum.ChatSystemType.Item then
  43. local itemData = ManagerContainer.CfgMgr:GetItemById(logicData.paramIds[1])
  44. paramName = string.format(Constant.ChatSystemColorArray[itemData.Quality], I18N.T(itemData.Name))
  45. local num = (logicData.paramIds[2] and logicData.paramIds[2] > 1) and "x"..logicData.paramIds[2] or ""
  46. local sourceType = logicData.paramIds[3]
  47. local sourceItemId = logicData.paramIds[4]
  48. if sourceType then
  49. if sourceType ~= Enum.DropSource.Gift then
  50. item.text.symbolText.text = I18N.SetLanguageValue("ChatNotice01", CommonUtil.GetVaildNickName(logicData.nickname), paramName, I18N.T("dropsource_"..sourceType))..num
  51. else
  52. if sourceItemId == 514 then
  53. --老旧卡包
  54. item.text.symbolText.text = I18N.SetLanguageValue("ChatNotice01", CommonUtil.GetVaildNickName(logicData.nickname), paramName, I18N.T("dropsource_"..sourceType.."_"..sourceItemId))..num
  55. end
  56. end
  57. end
  58. elseif logicData.type == Enum.ChatSystemType.WorldBoss then
  59. local worldBossName = ""
  60. if logicData.paramIds and logicData.paramIds[1] then
  61. local worldBossCfgData = ManagerContainer.DataMgr.WorldBossData:GetWorldBossDataById(logicData.paramIds[1],0)
  62. if nil == worldBossCfgData then
  63. worldBossCfgData = ManagerContainer.DataMgr.WorldBossData:GetWorldBossDataById(logicData.paramIds[1],1)
  64. end
  65. if worldBossCfgData then
  66. local npcCfgData = ManagerContainer.CfgMgr:GetNpcCfgById(worldBossCfgData.SummonId)
  67. if npcCfgData then
  68. worldBossName = I18N.SetLanguageValue(npcCfgData.Name)
  69. end
  70. end
  71. end
  72. local content = I18N.SetLanguageValue("SystemMessageType6", worldBossName, "{"..logicData.type.."}")
  73. item.text.symbolText.text = content --"#h"..content.."{"..logicData.type.."}#h"
  74. if item.text.symbolTextEvent then
  75. item.text.symbolText.raycastTarget = true
  76. item.text.symbolTextEvent:RegisterClickEvent(nil, function (hyperParam)
  77. local systemType = tonumber(hyperParam)
  78. if systemType == 6 then
  79. --世界BOSS
  80. TaskJumpCtr:JumpBuyCfgId(15)
  81. end
  82. end)
  83. end
  84. elseif logicData.type == Enum.ChatSystemType.ArenaWinStreak then
  85. item.text.symbolText.text = I18N.SetLanguageValue("ArenaNotice", CommonUtil.GetVaildNickName(logicData.nickname), unpack(logicData.paramIds))
  86. elseif logicData.type == Enum.ChatSystemType.TimeLimitDel then
  87. item.text.symbolText.text = I18N.SetLanguageValue("CompetitionTip2", logicData.nickname)
  88. elseif logicData.type == Enum.ChatSystemType.ItemExchange then
  89. local activityData = ManagerContainer.CfgMgr:GetActivityCfg(logicData.paramIds[1])
  90. local activityName = activityData and activityData.Name or ""
  91. local exchangeData = ManagerContainer.CfgMgr:GetActivitiesPetExchangeCfgById(logicData.paramIds[2])
  92. local itemCfgId = exchangeData and exchangeData.Reward and exchangeData.Reward[1][1] or 0
  93. local itemData = ManagerContainer.CfgMgr:GetItemById(itemCfgId)
  94. local itemName = itemData and itemData.Name or ""
  95. if itemData.ResType == Enum.ItemType.Card then
  96. local cardData = ManagerContainer.CfgMgr:GetCardDataById(itemCfgId)
  97. local lv = cardData.CardLevel
  98. item.text.symbolText.text = I18N.SetLanguageValue("ChangeTakeNotice1", CommonUtil.GetVaildNickName(logicData.nickname),activityName,lv,itemName)
  99. else
  100. item.text.symbolText.text = I18N.SetLanguageValue("ChangeTakeNotice", CommonUtil.GetVaildNickName(logicData.nickname),activityName,itemName)
  101. end
  102. elseif logicData.type == Enum.ChatSystemType.StarDivine then
  103. local data = ManagerContainer.CfgMgr:GetCompetitionDevineCfgById(logicData.paramIds[1] + 1)
  104. if data and data.BroadcastKey then
  105. item.text.symbolText.text = I18N.SetLanguageValue(data.BroadcastKey, CommonUtil.GetVaildNickName(logicData.nickname))
  106. end
  107. elseif logicData.type == Enum.ChatSystemType.GuildDemonBoss then
  108. if logicData.paramIds and logicData.paramIds[1] then
  109. item.text.symbolText.text = I18N.SetLanguageValue("GuildDemonBossNotice", logicData.nickname,logicData.paramIds[2])
  110. end
  111. elseif logicData.type == Enum.ChatSystemType.IdolGiftBroad then
  112. item.text.symbolText.text = I18N.SetLanguageValue("IdolGiftBroad", CommonUtil.GetVaildNickName(logicData.nickname))
  113. elseif logicData.type == Enum.ChatSystemType.Competition then
  114. local content = ""
  115. local score = logicData.paramIds[1] or 0
  116. if score < 101 then
  117. content = "CompetitionTip5"
  118. elseif score < 401 then
  119. content = "CompetitionTip6"
  120. elseif score < 501 then
  121. content = "CompetitionTip7"
  122. end
  123. item.text.symbolText.text = I18N.SetLanguageValue(content, CommonUtil.GetVaildNickName(logicData.nickname), score)
  124. elseif logicData.type == Enum.ChatSystemType.Guild then
  125. if logicData.paramIds then
  126. local type = logicData.paramIds[1]
  127. if type == 1 then
  128. item.text.symbolText.text = I18N.SetLanguageValue('Guildchat_003', CommonUtil.GetVaildNickName(logicData.nickname), CommonUtil.GetGuildPostStr(logicData.paramIds[2]))
  129. elseif type == 2 then
  130. item.text.symbolText.text = I18N.SetLanguageValue('Guildchat_001', CommonUtil.GetVaildNickName(logicData.nickname))
  131. elseif type == 3 then
  132. item.text.symbolText.text = I18N.SetLanguageValue('Guildchat_002', CommonUtil.GetVaildNickName(logicData.nickname), CommonUtil.GetGuildPostStr(logicData.paramIds[2]), "{".. logicData.paramIds[3] .."}")
  133. if item.text.symbolTextEvent then
  134. item.text.symbolText.raycastTarget = true
  135. item.text.symbolTextEvent:RegisterClickEvent(nil, function (hyperParam)
  136. TaskJumpCtr:JumpBuyCfgId(20, tonumber(hyperParam))
  137. end)
  138. end
  139. end
  140. end
  141. elseif logicData.type == Enum.ChatSystemType.TurnWheelPrize then
  142. if logicData.paramIds then
  143. local ItemId = logicData.paramIds[1]
  144. local ItemCount = logicData.paramIds[2]
  145. local itemCfgData = ManagerContainer.CfgMgr:GetItemById(ItemId)
  146. if itemCfgData then
  147. local paramName = string.format(Constant.ChatSystemColorArray[itemCfgData.Quality], I18N.T(itemCfgData.Name))
  148. local num = (ItemCount and ItemCount > 1) and "x"..logicData.paramIds[2] or ""
  149. item.text.symbolText.text = I18N.SetLanguageValue("ChatNotice01", CommonUtil.GetVaildNickName(logicData.nickname), paramName , I18N.T("dropsource_dajiang"))..num
  150. end
  151. end
  152. elseif logicData.type == Enum.ChatSystemType.ActivityWheel then
  153. if logicData.paramIds then
  154. local actitivyId = logicData.paramIds[1]
  155. local ItemId = logicData.paramIds[2]
  156. local ItemCount = logicData.paramIds[3]
  157. local itemCfgData = ManagerContainer.CfgMgr:GetItemById(ItemId)
  158. local ActivityName = ""
  159. if actitivyId then
  160. local cfgData = ManagerContainer.CfgMgr:GetActivityCfg(actitivyId)
  161. if cfgData then
  162. ActivityName = cfgData.Name
  163. end
  164. end
  165. if itemCfgData then
  166. local num = (ItemCount and ItemCount > 1) and "x"..logicData.paramIds[3] or ""
  167. item.text.symbolText.text = I18N.SetLanguageValue("ActivityRoulettel", CommonUtil.GetVaildNickName(logicData.nickname), ActivityName , I18N.T(itemCfgData.Name))..num
  168. end
  169. end
  170. elseif logicData.type == Enum.ChatSystemType.ActCollection then
  171. if logicData.paramIds then
  172. local actitivyId = logicData.paramIds[1]
  173. if actitivyId then
  174. local cfgData = ManagerContainer.CfgMgr:GetActivityCfg(actitivyId)
  175. if cfgData then
  176. if cfgData.Type == Enum.ActivityType.ACTIVITY_TYPE_FESTIVAL_REWARD then
  177. local actitivySubId = logicData.paramIds[2]
  178. local subCfgData = ManagerContainer.CfgMgr:GetActivitiesCollectionCfgById(actitivySubId)
  179. if subCfgData and subCfgData.ShowItem then
  180. local itemListStr = nil
  181. for i = 1, #subCfgData.ShowItem do
  182. local itemId = subCfgData.ShowItem[i]
  183. local itemCfgData = ManagerContainer.CfgMgr:GetItemById(itemId)
  184. if itemCfgData then
  185. if itemListStr then
  186. itemListStr = itemListStr .. ',' .. I18N.T(itemCfgData.Name)
  187. else
  188. itemListStr = I18N.T(itemCfgData.Name)
  189. end
  190. end
  191. end
  192. if itemListStr then
  193. item.text.symbolText.text = I18N.SetLanguageValue("SetsWordActivity04", CommonUtil.GetVaildNickName(logicData.nickname), I18N.T(cfgData.Name), itemListStr)
  194. end
  195. end
  196. end
  197. end
  198. end
  199. end
  200. elseif logicData.type == Enum.ChatSystemType.GoddessLike then
  201. if logicData.paramIds then
  202. local actitivyId = logicData.paramIds[1]
  203. local ItemId = logicData.paramIds[2]
  204. local ItemCount = logicData.paramIds[3]
  205. local cfgData = ManagerContainer.CfgMgr:GetActivityCfg(actitivyId)
  206. local actName = cfgData and string.formatbykey(cfgData.Name) or ''
  207. local itemCfgData = ManagerContainer.CfgMgr:GetItemById(ItemId)
  208. local itemName = nil
  209. if itemCfgData then
  210. itemName = string.format(Constant.ChatSystemColorArray[itemCfgData.Quality], I18N.T(itemCfgData.Name))
  211. else
  212. itemName = ''
  213. end
  214. item.text.symbolText.text = I18N.SetLanguageValue("GiftBroadcast", CommonUtil.GetVaildNickName(logicData.nickname), actName, tostring(ItemCount), itemName)
  215. end
  216. end
  217. else
  218. local fromData = logicData.fromData
  219. local content = logicData.message
  220. local context = CommonUtil.GetVaildNickName(fromData.nickname)
  221. item.nickname.text.text = context
  222. if fromData.sex ~= nil then
  223. CommonUtil.SetTextColor(item.nickname.text, fromData.sex == 1 and Constant.PinkColorText or Constant.BlueColorText)
  224. end
  225. local vipLv = fromData.vipLv
  226. local vipIcon = nil
  227. if vipLv and vipLv >= 0 then
  228. local vipCfg = ManagerContainer.CfgMgr:GetVipCfgById(vipLv)
  229. if vipCfg then
  230. vipIcon = vipCfg.SmallIcon
  231. end
  232. end
  233. local titleId = fromData.titleId
  234. local titleIcon = nil
  235. if titleId and titleId > 0 then
  236. local titleCfg = ManagerContainer.CfgMgr:GetDesignationCfgById(titleId)
  237. if titleCfg then
  238. titleIcon = titleCfg.ChatSource
  239. end
  240. end
  241. CommonUtil.LoadIcon(wnd, titleIcon, function (sprite)
  242. if sprite then
  243. item.titleImg.image.sprite = sprite
  244. item.titleImg.image.enabled = true
  245. end
  246. end, item)
  247. CommonUtil.LoadIcon(wnd, vipIcon, function (sprite)
  248. if sprite then
  249. item.vipIcon.image.sprite = sprite
  250. item.vipIcon.image.enabled = true
  251. end
  252. end, item, 'VipIcon')
  253. local msg = content.message
  254. if content.subType == Enum.ChatSubType.Expedition then
  255. local expedition = Enum.ChatSubType.Expedition..";"..fromData.uid
  256. local color = content.used and Constant.GrayColorSymbolText or Constant.DefaultColorSymbolText
  257. local color1 = content.used and Constant.GrayColorSymbolText or Constant.OrangeColorSymbolText
  258. msg = color..I18N.SetLanguageValue("ExpeditionHelp4", color1, "{"..expedition.."}")
  259. if item.text.symbolTextEvent then
  260. item.text.symbolText.raycastTarget = not content.used
  261. if not content.used then
  262. item.text.symbolTextEvent:RegisterClickEvent(nil, function (hyperParam)
  263. -- local curTime = ManagerContainer.LuaTimerMgr:GetTimeSecond()
  264. -- local isOneDay = ManagerContainer.LuaTimerMgr:TwoTimeSecondBetweenOneDay(content.sendTime, curTime)
  265. -- if not isOneDay then
  266. -- ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("ExpeditionBailout")
  267. -- content.used = true
  268. -- return
  269. -- end
  270. local list = string.split(hyperParam, ";")
  271. local uid = ManagerContainer.DataMgr.UserData:GetUserId()
  272. if tostring(uid) == list[2] then
  273. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("ExpeditionHelpLog2")
  274. return
  275. end
  276. content.used = true
  277. local systemType = tonumber(list[1])
  278. if systemType == Enum.ChatSubType.Expedition then
  279. --远征求助
  280. local uid = int64.new(list[2])
  281. ManagerContainer.DataMgr.ExpeditionDataMgr:SendRescueFriendReq(uid, Enum.ExpeditionHelpSource.Guild, content.sendTime64)
  282. end
  283. end)
  284. end
  285. end
  286. end
  287. if logicData.type == Enum.ChatDataType.Guild then
  288. item.text.symbolText.text = string.formatbykey('GuildChatColor', StringUtil.FilterEmoji(msg))
  289. else
  290. item.text.symbolText.text = StringUtil.FilterEmoji(msg)
  291. end
  292. if onClickOwner and onClickCB then
  293. item.player.button.interactable = true
  294. wnd.uiBase:AddButtonUniqueEventListener(item.nameBg.button, onClickOwner, onClickCB, item.player, fromData)
  295. else
  296. item.player.button.interactable = true
  297. end
  298. end
  299. local parent = item.transform.parent
  300. if parent then
  301. local rectTrans = parent:GetComponent(Enum.TypeInfo.RectTransform)
  302. local width = rectTrans.rect.size.x
  303. item.rectTransform:SetSizeWithCurrentAnchors(UnityEngine.RectTransform.Axis.Horizontal, width);
  304. item.text.rectTransform:SetSizeWithCurrentAnchors(UnityEngine.RectTransform.Axis.Horizontal, width - 40);
  305. end
  306. item.text.contentSizeFitter:SetLayoutVertical()
  307. local size = item.text.rectTransform.sizeDelta
  308. item.rectTransform:SetSizeWithCurrentAnchors(UnityEngine.RectTransform.Axis.Vertical, 100);
  309. if size.y > 38 then
  310. local newY = item.rectTransform.sizeDelta.y + (size.y - 38)
  311. item.rectTransform:SetSizeWithCurrentAnchors(UnityEngine.RectTransform.Axis.Vertical, newY);
  312. end
  313. end
  314. return ChatTextItemCtr