ChatTextItemCtr.lua 18 KB

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