sk-client/Assets/ManagedResources/~Lua/Modules/Chat/ChatPanel.lua

831 lines
34 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

require("Base/BasePanel")
local ChatPanel = Inherit(BasePanel)
local this = ChatPanel
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
local TitleConfig = ConfigManager.GetConfig(ConfigName.TitleConfig)
local ArtResourcesConfig = ConfigManager.GetConfig(ConfigName.ArtResourcesConfig)
local expressionConfig = ConfigManager.GetAllConfigsData(ConfigName.ExpressionConfig)
local TabBox = require("Modules/Common/TabBox")
local _TabData = {
{text = GetLanguageStrById(10401), channel = CHAT_CHANNEL.FRIEND, rpType = RedPointType.Chat_Friend, image = "X1_guaji_liaotiantubiao_04"},
{text = GetLanguageStrById(10402), channel = CHAT_CHANNEL.FAMILY, image = "X1_guaji_liaotiantubiao_03"},
{text = GetLanguageStrById(10403), channel = CHAT_CHANNEL.GLOBAL, image = "X1_guaji_liaotiantubiao_02"},
{text = GetLanguageStrById(23004), channel = CHAT_CHANNEL.CrossRealm, image = "X1_guaji_liaotiantubiao_05"},
{text = GetLanguageStrById(10384), channel = CHAT_CHANNEL.SYSTEM, image = "X1_guaji_liaotiantubiao_01"},
}
local txtColor = {
default = Color.New(199/255,190/255,220/255,153/255),
select = Color.New(255/255,209/255,43/255,255/255),
}
local chatImgViewShow = false
-- 当前所在的聊天通道
this.curChannel = CHAT_CHANNEL.GLOBAL
--初始化组件(用于子类重写)
function ChatPanel:InitComponent()
this.tabbox = Util.GetGameObject(self.gameObject, "tabbox")
this.btnBack = Util.GetGameObject(self.gameObject, "btnBack")
this.scrollRoot = Util.GetGameObject(self.gameObject, "content/scrollroot")
this.friendItem = Util.GetGameObject(self.gameObject, "content/friend")
this.systemItem = Util.GetGameObject(self.gameObject, "content/system")
this.chatItem = Util.GetGameObject(self.gameObject, "content/chat")
this.input = Util.GetGameObject(self.gameObject, "bottom/input")
this.inputWidth = Util.GetGameObject(self.gameObject, "bottom/input/InputField")
this.inputText = Util.GetGameObject(self.gameObject, "bottom/input/InputField"):GetComponent("InputField")
this.btnSend = Util.GetGameObject(self.gameObject, "bottom/input/send")
this.btncount = Util.GetGameObject(self.gameObject, "bottom/input/count")
this.freeCount = Util.GetGameObject(self.gameObject, "bottom/input/count/freeCount")
-- this.freeCountText = Util.GetGameObject(self.gameObject, "bottom/input/count/freeCount/Text")
this.buyCount = Util.GetGameObject(self.gameObject, "bottom/input/count/buyCount")
this.buyCountText = Util.GetGameObject(self.gameObject, "bottom/input/count/buyCount/Text")
this.noInputTip = Util.GetGameObject(self.gameObject, "bottom/tip")
this.playerInfo = Util.GetGameObject(self.gameObject, "playerInfo")
this.playerBg = Util.GetGameObject(this.playerInfo, "bg")
this.playerHead = Util.GetGameObject(this.playerBg, "head"):GetComponent("Image")
this.playerHeadKuang = Util.GetGameObject(this.playerBg, "headkuang"):GetComponent("Image")
this.playerLv = Util.GetGameObject(this.playerBg, "lv"):GetComponent("Text")
this.playerName = Util.GetGameObject(this.playerBg, "name"):GetComponent("Text")
this.playerPower = Util.GetGameObject(this.playerBg, "power"):GetComponent("Text")
this.playerInvite = Util.GetGameObject(this.playerBg, "btnInvite")
this.playerFriend = Util.GetGameObject(this.playerBg, "btnFriend")
this.tip = Util.GetGameObject(self.gameObject, "tip")
this.tipTxt = Util.GetGameObject(self.gameObject, "tip/Text"):GetComponent("Text")
this.tipTxt.text = GetLanguageStrById(50243)
this.btnNew = Util.GetGameObject(self.gameObject, "btnNew")
this.bottomTip = Util.GetGameObject(self.gameObject, "bottom/BottomTip")
this.tips_1 = Util.GetGameObject(self.gameObject, "bottom/BottomTip/Text_1"):GetComponent("Text")
this.tips_2 = Util.GetGameObject(self.gameObject, "bottom/BottomTip/Text_2"):GetComponent("Text")
this.chatImgView = Util.GetGameObject(self.gameObject, "ChatView")
this.closeChatViewBtn = Util.GetGameObject(self.gameObject, "CloseChatViewBtn")
this.chatImgBtn = Util.GetGameObject(self.gameObject, "bottom/ChatBtn")
--图标列表
this.scroll = Util.GetGameObject(self.gameObject, "ChatView")
this.prefab = Util.GetGameObject(self.gameObject, "ItemPrefab")
local v2 = this.scroll.transform.rect
this.scrollView = SubUIManager.Open(SubUIConfig.ScrollCycleView, this.scroll.transform,
this.prefab, nil, Vector2.New(v2.width, v2.height), 1, 7, Vector2.New(34, 39))
this.scrollView.moveTween.MomentumAmount = 1
this.scrollView.moveTween.Strength = 2
end
--绑定事件(用于子类重写)
function ChatPanel:BindEvent()
-- 关闭界面
Util.AddClick(this.btnBack, function()
PlaySoundWithoutClick(SoundConfig.Sound_UICancel)
-- todo:添加公会界面打开聊天,关闭时跳转至主界面的处理
-- if this._JumpType == 1 then
-- this:ClosePanel()
-- UIManager.OpenPanel(UIName.MainPanel)
-- else
this:ClosePanel()
-- end
end)
Util.AddClick(this.chatImgBtn, function()
this.chatImgView:SetActive(not this.chatImgView.activeSelf)
this.scrollView:SetData(expressionConfig, function(index, root)
this:SetScrollItem(root, expressionConfig[index], index)
end)
end)
Util.AddClick(this.closeChatViewBtn, function()
this.chatImgView:SetActive(false)
end)
-- 发送消息
Util.AddClick(this.btnSend, function()
local content = this.inputText.text
if this.curChannel == 16 then
local count = PrivilegeManager.GetPrivilegeRemainValue(91001)
if count <= 0 then
--购买提示
if BagManager.GetItemCountById(6000126) <= 0 then
UIManager.OpenPanel(UIName.QuickPurchasePanel, { type = UpViewRechargeType.ChatHorn })
return
end
end
end
ChatManager.RequestSendChatMsg(this.curChannel, content, function()
-- 清空聊天显示
this.inputText.text = ""
if this.curChannel == 16 then
this.freeCount:SetActive(PrivilegeManager.GetPrivilegeRemainValue(91001) > 0)
this.buyCount:SetActive(PrivilegeManager.GetPrivilegeRemainValue(91001) <= 0)
if PrivilegeManager.GetPrivilegeRemainValue(91001) > 0 then
this.freeCount:GetComponent("Text").text = string.format(GetLanguageStrById(10647),PrivilegeManager.GetPrivilegeRemainValue(91001))
else
local costItem = string.split(G_SpecialConfig[155].Value,"#")
this.buyCount:GetComponent("Image").sprite = Util.LoadSprite(GetResourcePath(G_ItemConfig[tonumber(costItem[1])].ResourceID))
this.buyCountText:GetComponent("Text").text = "x"..costItem[2]
end
end
--this.RefreshShow(true)
local timer = Timer.New(function()
this.RefreshShow(true)
end, 0.1, false, true)
timer:Start()
this.chatImgView:SetActive(false)
end)
end)
-- 关闭玩家信息界面
Util.AddClick(this.playerInfo, function()
this.playerInfo:SetActive(false)
end)
Util.AddClick(this.btnNew, function ()
this.RefreshShow(true)
end)
-- 创建一个tab管理
this.TabCtrl = TabBox.New()
this.TabCtrl:SetTabAdapter(this.TabAdapter)
this.TabCtrl:SetTabIsLockCheck(this.TabIsLockCheck)
this.TabCtrl:SetChangeTabCallBack(this.OnTabChange)
this.TabCtrl:Init(this.tabbox, _TabData, this.curTabIndex)
end
--添加事件监听(用于子类重写)
function ChatPanel:AddListener()
Game.GlobalEvent:AddEvent(GameEvent.Chat.OnChatDataChanged, this.OnChatDataChanged)
end
--移除事件监听(用于子类重写)
function ChatPanel:RemoveListener()
Game.GlobalEvent:RemoveEvent(GameEvent.Chat.OnChatDataChanged, this.OnChatDataChanged)
end
--界面打开时调用(用于子类重写)
function ChatPanel:OnOpen(...)
-- 参数保存
local args = {...}
this.jumpType = args[2] or 1
this.curTabIndex = args[1] or 4
this.curChannel = _TabData[this.curTabIndex].channel
end
--界面打开或者重新打开后,界面刷新时调用(用于子类重写)
function ChatPanel:OnShow()
if this.TabCtrl then
this.TabCtrl:ChangeTab(this.curTabIndex or 4)
end
self.chatImgView.gameObject:SetActive(chatImgViewShow)
-- 开始定时刷新数据
ChatManager.StartChatDataUpdate()
this.SetActive(this.tip, false)
if GetChannelConfig().Chat_health_tips then
if this.timer then
this.timer:Stop()
this.timer = nil
end
this.SetActive(this.tip, true)
this.timer = Timer.New(function()
if this.tipTxt.transform:GetComponent("RectTransform").rect.width > 0 then
if this.timer then
this.timer:Stop()
this.timer = nil
end
this.MoveTip()
end
end, 1, -1)
this.timer:Start()
end
end
--界面关闭时调用(用于子类重写)
function ChatPanel:OnClose()
-- 关闭定时刷新数据
ChatManager.StopChatDataUpdate()
if this.timer then
this.timer:Stop()
this.timer = nil
end
end
--界面销毁时调用(用于子类重写)
function ChatPanel:OnDestroy()
this.FriendScrollView = nil
this.ChatScrollView = nil
this.SystemScrollView = nil
this.CrossRealmScrollView = nil
this.GongHuiScrollView = nil
-- 资源回收
-- if this.ChatScrollView then
-- this.ChatScrollView:RecycleNode()
-- this.ChatScrollView = nil
-- end
-- -- 资源回收
-- if this.SystemScrollView then
-- this.SystemScrollView:RecycleNode()
-- this.SystemScrollView = nil
-- end
-- 清除红点绑定
for _, v in ipairs(_TabData) do
if v.rpType then
ClearRedPointObject(v.rpType)
end
end
if this.timer then
this.timer:Stop()
this.timer = nil
end
end
-- tab节点自定义设置
function this.TabAdapter(tab, index, status)
Util.GetGameObject(tab, "Image"):GetComponent("Image").sprite = Util.LoadSprite(_TabData[index].image)
Util.GetGameObject(tab, "Text"):GetComponent("Text").text = _TabData[index].text
Util.GetGameObject(tab, "select"):SetActive(status == "select")
if status == "select" then
Util.GetGameObject(tab, "Text"):GetComponent("Text").color = txtColor.select
Util.GetGameObject(tab, "Image"):GetComponent("Image").color = txtColor.select
else
Util.GetGameObject(tab, "Text"):GetComponent("Text").color = txtColor.default
Util.GetGameObject(tab, "Image"):GetComponent("Image").color = txtColor.default
end
local redpot = Util.GetGameObject(tab, "redpot")
if _TabData[index].rpType then
BindRedPointObject(_TabData[index].rpType, redpot)
else
redpot:SetActive(false)
end
end
-- tab锁定检测
function this.TabIsLockCheck(index)
local channel = _TabData[index].channel
if channel == CHAT_CHANNEL.FAMILY then
local isOpen = ActTimeCtrlManager.SingleFuncState(FUNCTION_OPEN_TYPE.GUILD)
if not isOpen then
return true, GetLanguageStrById(10404)
end
if isOpen and PlayerManager.familyId == 0 then
return true, GetLanguageStrById(10405)
end
end
return false
end
-- 节点状态改变回调事件
function this.OnTabChange(index, lastIndex)
-- 关闭上个界面
if lastIndex then
local lastSV = this.GetScrollView(lastIndex)
-- if lastIndex ~= 1 then
-- lastSV:RecycleNode()
-- end
lastSV.gameObject:SetActive(false)
end
this.chatImgView:SetActive(false)
-- 打开当前界面
this.curTabIndex = index
local curSV = this.GetScrollView(index)
curSV.gameObject:SetActive(true)
-- 是否能够发言
this.curChannel = _TabData[index].channel
if this.curChannel == 1 or this.curChannel == 2 then
ChatPanel:SetInputPosition(1)
elseif this.curChannel == 16 then
ChatPanel:SetInputPosition(2)
else
ChatPanel:SetInputPosition(1)
end
if this.curChannel == 1 or this.curChannel == 2 or this.curChannel == 16 then
if ActTimeCtrlManager.SingleFuncState(FUNCTION_OPEN_TYPE.CHAT) then
this.input:SetActive(true)
this.chatImgBtn:SetActive(true)
this.noInputTip:SetActive(false)
if this.curChannel == 16 then
this.btncount:SetActive(true)
this.freeCount:SetActive(PrivilegeManager.GetPrivilegeRemainValue(91001) > 0)
this.buyCount:SetActive(PrivilegeManager.GetPrivilegeRemainValue(91001) <= 0)
if PrivilegeManager.GetPrivilegeRemainValue(91001)>0 then
this.freeCount:GetComponent("Text").text = string.format(GetLanguageStrById(10647),PrivilegeManager.GetPrivilegeRemainValue(91001))
else
local costItem = string.split(G_SpecialConfig[155].Value,"#")
this.buyCount:GetComponent("Image").sprite = Util.LoadSprite(GetResourcePath(G_ItemConfig[tonumber(costItem[1])].ResourceID))
this.buyCountText:GetComponent("Text").text = "x"..costItem[2]
end
else
this.btncount:SetActive(false)
end
else
this.chatImgBtn:SetActive(false)
this.chatImgBtn:SetActive(false)
this.input:SetActive(false)
this.noInputTip:SetActive(true)
local dataLv = tonumber(ConfigManager.GetConfigData(ConfigName.SpecialConfig,2024).Value)
this.noInputTip:GetComponent("Text").text = string.format(GetLanguageStrById(10387),dataLv)
end
elseif this.curChannel == 0 or this.curChannel == 3 then
this.chatImgBtn:SetActive(false)
this.input:SetActive(false)
this.chatImgBtn:SetActive(false)
this.noInputTip:SetActive(true)
this.noInputTip:GetComponent("Text").text = GetLanguageStrById(10406)
end
-- 刷新显示
this.RefreshShow(true)
local timer = Timer.New(function()
this.RefreshShow(true)
end, 0.1, false, true)
timer:Start()
this.RefreshBottomShow()
end
function ChatPanel:SetScrollItem(go, data, index)
go.gameObject:SetActive(true)
local img = Util.GetGameObject(go.gameObject, "icon"):GetComponent("Image")
-- local desc = Util.GetGameObject(go.gameObject, "desc"):GetComponent("Text")
img.sprite = Util.LoadSprite(data.ResourceName)
Util.AddOnceClick(go.gameObject, function()
this.inputText.text = this.inputText.text..data.Esc
end)
end
-- 数据变化回调
function this.RefreshBottomShow()
local data = tonumber(ConfigManager.GetConfigData(ConfigName.SpecialConfig,2015).Value)
local dataLv = tonumber(ConfigManager.GetConfigData(ConfigName.SpecialConfig,2024).Value)
if data == 0 then
this.bottomTip:SetActive(false)
elseif data > 0 then
this.bottomTip:SetActive(true)
local str = FirstRechargeManager.GetAccumRechargeValue().."/"..data
if FirstRechargeManager.GetAccumRechargeValue() >= data then
str = string.format("<color=#32e17c>%s</color>", str)
if PlayerManager.level >= dataLv then
this.bottomTip:SetActive(false)
end
else
str = string.format("<color=#bd3937>%s</color>", str)
end
this.tips_1.text = string.format(GetLanguageStrById(50409),dataLv,str)
this.tips_2.text = GetLanguageStrById(50410)
end
end
-- 数据变化回调
function this.OnChatDataChanged(channel)
if channel == this.curChannel then
this.RefreshShow(false)
end
end
-- 刷新当前显示
function this.RefreshShow(isForceBottom)
-- 刷新数据
local curSV = this.GetScrollView(this.curTabIndex)
local datalist = ChatManager.GetChatList(this.curChannel)
local GoToIndex = nil
if this.curChannel ~= CHAT_CHANNEL.FRIEND then
GoToIndex = #datalist
end
curSV:SetData(datalist, function(dataIndex, go)
-- 判断是否要显示聊天的时间
local isShowTime = false
if dataIndex == 1 then
isShowTime = true
elseif dataIndex > 1 then
local deltaTime = datalist[dataIndex].times - datalist[dataIndex - 1].times
isShowTime = deltaTime >= ChatManager.ShowTimeDT
end
-- 设置数据
local data = datalist[dataIndex]
if this.curChannel == CHAT_CHANNEL.FRIEND then
-- this.FriendItemAdapter(go, data)
this.ChatItemAdapter(go, data, false, false, true)
elseif this.curChannel == CHAT_CHANNEL.SYSTEM then
this.SystemItemAdapter(go, data, isShowTime)
-- elseif this.curChannel == CHAT_CHANNEL.CrossRealm then
-- this.CrossRealmChatItemAdapter(go, data, isShowTime)
else
this.ChatItemAdapter(go, data, isShowTime, this.curChannel == CHAT_CHANNEL.CrossRealm)
end
end)--, _GoToIndex)
if isForceBottom and GoToIndex then
curSV:SetIndex(GoToIndex)
end
this.btnNew:SetActive(not isForceBottom)
-- 好友数据置顶
if this.curChannel == CHAT_CHANNEL.FRIEND then
curSV:SetIndex(1)
end
end
-- 创建滚动列表
function this.GetScrollView(index)
-- 不存在则创建
if index == 1 then
-- 判断是否存在
if not this.FriendScrollView then
local rootHight = this.scrollRoot.transform.rect.height
local sv = SubUIManager.Open(SubUIConfig.ScrollFitterView, this.scrollRoot.transform,
this.chatItem, Vector2.New(1080, rootHight - 10), 1, 10)
sv.gameObject:GetComponent("RectTransform").anchoredPosition = Vector2.New(0, -5)
sv.moveTween.Strength = 2
this.FriendScrollView = sv
end
return this.FriendScrollView
elseif index == 2 then
if not this.GongHuiScrollView then
local rootHight = this.scrollRoot.transform.rect.height
local sv = SubUIManager.Open(SubUIConfig.ScrollFitterView, this.scrollRoot.transform,
this.chatItem, Vector2.New(1080, rootHight - 10), 1, 10)
sv.gameObject:GetComponent("RectTransform").anchoredPosition = Vector2.New(0, -5)
sv.moveTween.Strength = 2
this.GongHuiScrollView = sv
end
return this.GongHuiScrollView
elseif index == 3 then
if not this.ChatScrollView then
local rootHight = this.scrollRoot.transform.rect.height
local sv = SubUIManager.Open(SubUIConfig.ScrollFitterView, this.scrollRoot.transform,
this.chatItem, Vector2.New(1080, rootHight - 10), 1, 10)
sv.gameObject:GetComponent("RectTransform").anchoredPosition = Vector2.New(0, -5)
sv.moveTween.Strength = 2
this.ChatScrollView = sv
end
return this.ChatScrollView
elseif index == 5 then
if not this.SystemScrollView then
local rootHight = this.scrollRoot.transform.rect.height
local sv = SubUIManager.Open(SubUIConfig.ScrollFitterView, this.scrollRoot.transform,
this.systemItem, Vector2.New(980, rootHight - 10), 1, 20)
sv.gameObject:GetComponent("RectTransform").anchoredPosition = Vector2.New(0, -5)
sv.moveTween.Strength = 2
this.SystemScrollView = sv
end
return this.SystemScrollView
elseif index == 4 then
if not this.CrossRealmScrollView then
local rootHight = this.scrollRoot.transform.rect.height
local sv = SubUIManager.Open(SubUIConfig.ScrollFitterView, this.scrollRoot.transform,
this.chatItem, Vector2.New(1080, rootHight - 10), 1, 10)
sv.gameObject:GetComponent("RectTransform").anchoredPosition = Vector2.New(0, -5)
sv.moveTween.Strength = 2
this.CrossRealmScrollView = sv
end
return this.CrossRealmScrollView
end
end
-- 系统消息节点数据匹配
function this.SystemItemAdapter(node, data, isShowTime)
local time = Util.GetGameObject(node, "time")
local bg = Util.GetGameObject(node, "bg")
local content = Util.GetGameObject(node, "bg/content"):GetComponent("Text")
local sType = Util.GetGameObject(node, "type/type")
local sTypeStr = Util.GetGameObject(node, "type/type/Text"):GetComponent("Text")
isShowTime = false
time:SetActive(isShowTime)
if isShowTime then
time:GetComponent("Text").text = TimeStampToDateStr(tonumber(data.times)/1000)
end
local sTypeInfo = ChatManager.SYS_MSG_TYPE[data.messageType]
if sTypeInfo then
this.SetActive(sType,true)
sTypeStr.text = sTypeInfo.name
content.text = GetMailConfigDesc(data.msg,data.chatparms)
else
this.SetActive(sType,false)
content.text = GetMailConfigDesc(data.msg,data.chatparms)
end
Util.AddOnceClick(bg, function()
-- 内容包含异妖的不显示
local pos = string.find(data.msg, GetLanguageStrById(10407))
if pos then return end
-- 其他的按物品显示
local itemDataConFig = itemConfig[data.itemId]
if not itemDataConFig then return end
if itemDataConFig.ItemType == ItemType.Hero then
local heroConfigData = ConfigManager.GetConfigData(ConfigName.HeroConfig, itemConfig[data.itemId].HeroStar[1])
UIManager.OpenPanel(UIName.RoleGetInfoPopup,false,heroConfigData.Id,itemConfig[data.itemId].HeroStar[2])
elseif itemDataConFig.ItemType == ItemType.Equip then
UIManager.OpenPanel(UIName.HandBookEquipInfoPanel, data.itemId)
else
UIManager.OpenPanel(UIName.RewardItemSingleShowPopup, data.itemId)
end
end)
end
-- 聊天节点数据匹配
function this.ChatItemAdapter(node, data, isShowTime, isShowServerName, isFriend)
local right = Util.GetGameObject(node, "rightchat")
local left = Util.GetGameObject(node, "leftchat")
local isMyChat = data.senderId == PlayerManager.uid
if isFriend then
isMyChat = false
end
right:SetActive(isMyChat)
left:SetActive(not isMyChat)
node = isMyChat and right or left
-- local time = Util.GetGameObject(node, "time")
-- local timeLab = Util.GetGameObject(node, "time/Text"):GetComponent("Text")
local content = Util.GetGameObject(node, "contentroot/bg/content"):GetComponent("TMP_Text")
local head = Util.GetGameObject(node, "base/head"):GetComponent("Image")
local headKuang = Util.GetGameObject(node, "base/headkuang"):GetComponent("Image")
-- local lv = Util.GetGameObject(node, "base/lv"):GetComponent("Text")
local name = Util.GetGameObject(node, "contentroot/bg/info/name/name"):GetComponent("Text")
local zw = Util.GetGameObject(node, "contentroot/bg/info/pos")
local zwName = Util.GetGameObject(node, "contentroot/bg/info/pos/pos/Text"):GetComponent("Text")
local CH = Util.GetGameObject(node, "contentroot/bg/info/title/title"):GetComponent("Image")
local CHEffect = Util.GetGameObject(node, "contentroot/bg/info/title/title/Image"):GetComponent("Image")
local CHison = Util.GetGameObject(node, "contentroot/bg/info/title")
local vip = Util.GetGameObject(node, "base/vip"):GetComponent("Image")
-- 判断是否显示时间
-- time:SetActive(isShowTime)
-- if isShowTime then
-- timeLab.text = TimeStampToDateStr(tonumber(data.times)/1000)
-- end
zw:SetActive(false)
CHEffect.gameObject:SetActive(false)
local contentStr = ""
if this.curChannel == CHAT_CHANNEL.GLOBAL then
local chat = ChatManager.AnalysisGlobalChat(data.msg)
contentStr = chat.content
if chat.type == GLOBAL_CHAT_TYPE.COMMON then
Util.AddOnceClick(content.gameObject, function() end)
elseif chat.type == GLOBAL_CHAT_TYPE.GUILD_INVITE then
Util.AddOnceClick(content.gameObject, function()
if PlayerManager.familyId ~= 0 then
PopupTipPanel.ShowTipByLanguageId(10408)
return
end
--local _IsInFight = GuildFightManager.IsInGuildFight()
--if _IsInFight then
-- PopupTipPanel.ShowTip("公会战期间无法加入公会")
-- return
--end
MsgPanel.ShowTwo(string.format(GetLanguageStrById(10409), chat.gName),nil, function()
if PlayerManager.level < chat.gLimitLv then
PopupTipPanel.ShowTipByLanguageId(10410)
return
end
if chat.joinType == GUILD_JOIN_TYPE.NO_LIMIT then
GuildManager.RequestJoinGuild(chat.gId, function ()
-- -- 关闭当前界面
-- if this._JumpType == 1 then
-- this:ClosePanel()
-- UIManager.OpenPanel(UIName.MainPanel)
-- else
-- this:ClosePanel()
-- end
-- -- 打开公会主城
-- UIManager.OpenPanel(UIName.GuildMainCityPanel)
PopupTipPanel.ShowTipByLanguageId(10411)
end)
elseif chat.joinType == GUILD_JOIN_TYPE.LIMIT then
GuildManager.RequestApplyManyGuilds({chat.gId}, function()
PopupTipPanel.ShowTipByLanguageId(10412)
end)
elseif chat.joinType == GUILD_JOIN_TYPE.FORBID then
PopupTipPanel.ShowTipByLanguageId(10413)
end
end)
end)
end
elseif this.curChannel == CHAT_CHANNEL.FAMILY then
local chat = ChatManager.AnalysisGlobalChat(data.msg)
contentStr = chat.content
if chat.type == GLOBAL_CHAT_TYPE.COMMON then
Util.AddOnceClick(content.gameObject, function() end)
elseif chat.type == GLOBAL_CHAT_TYPE.GUILD_REDPACKET then
contentStr = chat.content
elseif chat.type == GLOBAL_CHAT_TYPE.GUILD_AID then
Util.AddOnceClick(content.gameObject, function()
JumpManager.GoJump(72001)
end)
end
--只在公会频道显示职务
if data.job and data.job > 0 then
zwName.text = JobString[data.job]
zw:SetActive(true)
end
elseif this.curChannel == CHAT_CHANNEL.FRIEND then
contentStr = data.content
else
contentStr = data.msg
end
--LogError("内容1"..(data.content or ""))
--LogError("内容2"..(data.msg or ""))
--LogError("内容3"..data.msg)
--LogError("内容4"..contentStr)
content.font = poolManager:LoadAsset(GetFont2(), PoolManager.AssetType.Other)
content.text = GetNewChatMsg(contentStr)
if isFriend then
CHison:SetActive(false)
vip.gameObject:SetActive(false)
local fdata = GoodFriendManager.GetFriendInfo(data.friendId)
name.text = fdata.name.."[Lv."..fdata.lv.."]"
head.sprite = GetPlayerHeadSprite(fdata.head)
headKuang.sprite = GetPlayerHeadFrameSprite(fdata.frame)
-- redpot:SetActive(FriendChatManager.IsFriendNewChat(data.friendId))
-- 头像添加点击事件
Util.AddOnceClick(head.gameObject, function()
UIManager.OpenPanel(UIName.FriendChatPanel, data.friendId)
end)
else
if data.senderId == PlayerManager.uid then
-- lv.text = "Lv." .. PlayerManager.level
if isShowServerName then
name.text = PlayerManager.nickName .. "[Lv." .. PlayerManager.level .. "]" .. "<color='#9fff88'> [" .. data.serverName .. "]</color>"
else
name.text = PlayerManager.nickName .. "[Lv." .. PlayerManager.level .. "]"
end
head.sprite = GetPlayerHeadSprite(PlayerManager.head)
headKuang.sprite = GetPlayerHeadFrameSprite(PlayerManager.frame)
if VipManager.GetVipLevel() > 0 then
if PlayerManager.isShowVip then
vip.gameObject:SetActive(true)
vip.sprite = Util.LoadSprite(VipManager.GetVipImage())
else
vip.gameObject:SetActive(false)
end
else
vip.gameObject:SetActive(false)
end
if PlayerManager.designation > 0 then
CHison:SetActive(true)
CH.sprite = this.GetTitleIcon(PlayerManager.designation)
if not not this.GetTitleEffect(PlayerManager.designation) then
CHEffect.sprite = Util.LoadSprite(this.GetTitleEffect(PlayerManager.designation))
CHEffect.gameObject:SetActive(true)
end
else
CHison:SetActive(false)
end
else
-- lv.text = "Lv." .. data.senderlevel
if isShowServerName then
name.text = data.senderName .. "[Lv." .. data.senderlevel .. "]" .. "<color='#9fff88'> [" .. data.serverName .. "]</color>"
else
name.text = data.senderName .. "[Lv." .. data.senderlevel .. "]"
end
head.sprite = GetPlayerHeadSprite(data.head)
headKuang.sprite = GetPlayerHeadFrameSprite(data.frame)
if data.sendervip > 0 then
if data.showVip then
vip.gameObject:SetActive(true)
vip.sprite = Util.LoadSprite(VipManager.GetVipImage(data.sendervip))
else
vip.gameObject:SetActive(false)
end
else
vip.gameObject:SetActive(false)
end
if data.chenghao > 0 then
CHison:SetActive(true)
CH.sprite = this.GetTitleIcon(data.chenghao)
if not not this.GetTitleEffect(data.chenghao) then
CHEffect.sprite = Util.LoadSprite(this.GetTitleEffect(data.chenghao))
CHEffect.gameObject:SetActive(true)
end
else
CHison:SetActive(false)
end
end
-- 头像添加点击事件
Util.AddOnceClick(head.gameObject, function()
if this.curChannel == CHAT_CHANNEL.CrossRealm then
return
end
-- 自己不做任何操作
if data.senderId ~= PlayerManager.uid then
this.playerFriend:SetActive(true)
for i,v in pairs(GoodFriendManager.friendAllData) do
if i == data.senderId and v ~= nil then
this.playerFriend:SetActive(false)
end
end
--this.ShowPlayerInfo(node, data)
UIManager.OpenPanel(UIName.PlayerInfoPopup,data.senderId)
end
end)
end
end
--获取称号
function this.GetTitleIcon(title)
local titleData = TitleConfig[title]
if not titleData then
Log("未找到Title:" .. title)
return ""
end
return Util.LoadSprite(ArtResourcesConfig[titleData.TitleImage].Name)
end
--获取称号特效
function this.GetTitleEffect(title)
local titleData = TitleConfig[title]
if not titleData then
Log("未找到Title:" .. title)
return ""
end
return ArtResourcesConfig[titleData.TitleImage].Info
end
--显示玩家信息
function this.ShowPlayerInfo(node, data)
-- 显示
this.SetActive(this.playerInfo,true)
-- 设置位置
local v2 = RectTransformUtility.WorldToScreenPoint(UIManager.camera, node.transform.position)
this.playerBg.transform.localPosition = Vector3(v2.x + 200, v2.y, 0)
-- 设置内容
this.playerLv.text = data.senderlevel
this.playerName.text = data.senderName
this.playerPower.text = data.soulVal
this.playerHead.sprite = GetPlayerHeadSprite(data.head)
this.playerHeadKuang.sprite = GetPlayerHeadFrameSprite(data.frame)
-- 邀请加入公会
Util.AddOnceClick(this.playerInvite, function()
PopupTipPanel.ShowTip(GetLanguageStrById(10414))
end)
-- 添加好友
Util.AddOnceClick(this.playerFriend, function()
GoodFriendManager.InviteFriendRequest(data.senderId, function()
PopupTipPanel.ShowTip(GetLanguageStrById(10415))
this.SetActive(this.playerInfo,false)
end)
end)
end
function this.MoveTip()
this.SetActive(this.tip, true)
local tipRect = this.tipTxt.transform:GetComponent("RectTransform")
tipRect.anchoredPosition3D = Vector3.New(0, 0, 0)
local finalPos = 1080 + tipRect.rect.width
DoTween.To(DG.Tweening.Core.DOGetter_int(function()
return 0
end),
DG.Tweening.Core.DOSetter_int(function(progress)
tipRect.anchoredPosition3D = Vector3.New(0 - progress, 0, 0)
end),
finalPos,
finalPos/100):SetEase(Ease.Linear):OnComplete(function()
this.SetActive(this.tip, false)
end)
end
function this.SetActive(go, value)
if value and not go.activeSelf then
go:SetActive(value)
elseif not value and go.activeSelf then
go:SetActive(value)
end
end
--1正常 2缩小
function this:SetInputPosition(type)
if type == 1 then
this.inputWidth:GetComponent("RectTransform").sizeDelta = Vector2.New(677, 60)
this.btncount:GetComponent("RectTransform").anchoredPosition = Vector2.New(-279.76, 0)
elseif type == 2 then
this.inputWidth:GetComponent("RectTransform").sizeDelta = Vector2.New(497, 60)
this.btncount:GetComponent("RectTransform").anchoredPosition = Vector2.New(-459.76, 0)
end
end
return ChatPanel