123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- ---@class KLFriendChatItem:UIKmlLuaPanelBase
- ---@field view KLFriendChatItemView
- ---@field item_is_show boolean @背包显示标记
- ---@field chatView KLUIChatView
- local KLFriendChatItem = class(UIKmlLuaPanelBase)
- local this =KLFriendChatItem
- ---创建时调用一次
- function this:Init()
- self.item_is_show = false
- self.emoji_is_show = false
- self.item_select_type = 1
- self:ItemBtnShow()
- self.ChatItem = {}
- self:UpdateMessage("")
- local bag_info = string.split(SL:GetConfig("cfg_global", 6).value, '#')
- self.maxHor = tonumber(bag_info[1])
- self.maxVet = tonumber(bag_info[2])
- --表情
- self.all_emoji_info = {}
- for i = 61, 87 do
- table.insert(self.all_emoji_info,i.."000")
- end
- GUI:Text_sethorwrap(self.view.text_input,"1")
- GUI:Text_setmline(self.view.text_input,"0")
- GUI:DataListInitData(self.view.emoji_data_list,function()
- return self:EmojiDataListItemCountFunc()
- end,function(realIndex)
- return self:EmojiDataListItemGetFunc(realIndex)
- end,function(realIndex, kmlcontrol)
- return self:EmojiDataListItemInitFunc(realIndex, kmlcontrol)
- end, function(realIndex, kmlcontrol)
- return self:EmojiDataListItemUpdateFunc(realIndex, kmlcontrol)
- end)
- self.btn_emoji_item = {}
- GUI:UIPanel_Open("dev/ui/FriendSys/Item/KLFriendChatView/KLFriendChatViewItem",
- self.view.panel_root,self,nil,false,function(chatView)
- self.chatView = chatView
- self:UpdateChatContent()
- end)
- self.friendId = nil
- GUI:UIPanel_Open("dev/ui/Chat/Item/KLUIChatItem/KLUIChatItem",self.view.root,self,{},true,function (item)
- self.calculationUI = item
- GUI:setPositionX(self.calculationUI.view.root,2000)
- GUI:setPositionY(self.calculationUI.view.root,2000)
- end)
- end
- ---创建或者刷新界面数据时调用
- function this:Refresh()
- end
- function this:SetFriend(rid)
- self.friendId = rid
- self:UpdateChatContent()
- end
- ---更新当前输入的消息文本
- function this:UpdateMessage(str)
- self.message = str
- GUI:Text_setString(self.view.text_input,self.message)
- end
- ---********************************背包************************************
- function this:ShowItem()
- GUI:UIPanel_Close("dev/ui/Chat/Item/KLUIChatBagScrollView/KLUIChatBagScrollViewItem")
- local itemList_ = {}
- local show_id = EBagTileScrollViewId.Bag
- if self.item_select_type == 1 then
- itemList_ = SL:GetMetaValue("BAG_DATA")[1]
- else
- local baseWearBar = SL:GeCareerBaseWearBar(SL:MeData_GetCareer())
- local itemList_1 = SL:GetWearBarsData(baseWearBar)
- for _, item in pairs(itemList_1) do
- table.insert(itemList_, item)
- end
- --itemList_ = BagCellUtil.SortItemList(itemList_)
- itemList_ = SL.Bag:SortItemList(itemList_)
- show_id = EBagTileScrollViewId.Recover
- end
- GUI:UIPanel_Open("dev/ui/Chat/Item/KLUIChatBagScrollView/KLUIChatBagScrollViewItem", self.view.item_panel, self,
- {
- itemList = itemList_,
- id = show_id,
- forbidCount = SL:GetMetaValue("BAG_FORBID_COUNT"),
- hor = self.maxHor,
- vet = self.maxVet,
- canDrag = false,
- forbidClickCallback = self.forbidClick,
- itemClick = self.ClickItemCallBack,
- callBackUI = self
- })
- end
- function this:HideItem()
- self.item_is_show = false
- GUI:setVisible(self.view.item_panel,self.item_is_show)
- end
- function this:ClickItemCallBack(itemControl, itemData)
- local cfgId = itemData.cfgId
- local id = itemData.id
- -- @item@0:0@
- local index = #self.ChatItem + 1
- table.insert(self.ChatItem,{lid=id,type=self.item_select_type})
- local emojiStr = string.format("item@%s:%s@",index,self.item_select_type)
- self:UpdateMessage(self.message .. emojiStr)
- self:HideItem()
- end
- function this:forbidClick()
- end
- function this:btn_bag_onclick()
- self.item_select_type = 1
- self:ItemBtnShow()
- self:ShowItem()
- end
- function this:btn_equip_onclick()
- self.item_select_type = 2
- self:ItemBtnShow()
- self:ShowItem()
- end
- function this:ItemBtnShow()
- if self.item_select_type == 1 then
- GUI:setVisible(self.view.btn_bag_select,true)
- GUI:setVisible(self.view.btn_equip_select,false)
- else
- GUI:setVisible(self.view.btn_bag_select,false)
- GUI:setVisible(self.view.btn_equip_select,true)
- end
- end
- ---***********************************************************
- ---***********************表情***************************
- function this:EmojiDataListItemInitFunc(realIndex, kmlcontrol)
- end
- function this:EmojiDataListItemUpdateFunc(realIndex, kmlcontrol)
- local data = self.all_emoji_info[realIndex + 1]
- self.btn_emoji_item[kmlcontrol]:RefreshItem(data,self)
- end
- function this:EmojiDataListItemCountFunc()
- return #self.all_emoji_info
- end
- function this:EmojiDataListItemGetFunc(realIndex)
- local item = GUI:UIPanel_Open("dev/ui/Chat/Item/KLUIChatEmojiItem/KLUIChatEmojiItem", self.view.emoji_data_list, self, {}, true)
-
- self.btn_emoji_item[item.view.root] = item
- return item.view.root
- end
- --添加表情
- function this:AddEmoji(emoji_id)
- self:HideEmoji()
- -- emoji@61000:1@
- local emojiStr = string.format("emoji@%s:1@",emoji_id)
- self:UpdateMessage(self.message .. emojiStr)
- end
- function this:HideEmoji()
- self.emoji_is_show = false
- GUI:setVisible(self.view.emoji_panel,self.emoji_is_show)
- end
- ---****************************************************
- ---注册UI事件和服务器消息
- function this:RegistEvents()
- GUI:AddOnClickEvent(self.view.bag_btn, self, self.BagOnClick)
- GUI:AddOnClickEvent(self.view.pos_btn, self, self.PosOnClick)
- GUI:AddOnClickEvent(self.view.biaoqing_btn, self, self.EmojiOnClick)
- GUI:AddOnClickEvent(self.view.fasong, self, self.SendMessageOnClick)
- GUI:Input_SetOnEndEdit(self.view.text_input, self, self.TextChange)
-
- GUI:AddOnClickEvent(self.view.btn_bag, self, self.btn_bag_onclick)
- GUI:AddOnClickEvent(self.view.btn_equip, self, self.btn_equip_onclick)
- GUI:AddOnClickEvent(self.view.item_mask, self, self.BagOnClick)
- GUI:AddOnClickEvent(self.view.emoji_mask, self, self.EmojiOnClick)
- --SL:RegisterLUAEvent(Event.FriendChatReceiveEvent, self.FriendChatReceiveEvent, self)
- SL:RegisterLUAEvent(LUA_EVENT_CHAT_RECEIVE, self.LUA_EVENT_CHAT_RECEIVE, self)
- end
- function this:BagOnClick()
- self.item_is_show = not self.item_is_show
- GUI:setVisible(self.view.item_panel,self.item_is_show)
- if self.item_is_show then
- self:ShowItem()
- else
- GUI:UIPanel_Close("dev/ui/Chat/Item/KLUIChatBagScrollView/KLUIChatBagScrollViewItem")
- end
- end
- function this:PosOnClick()
- local x = SL:MeData_GetCoord().x
- local y = SL:MeData_GetCoord().z
- local mapId = SL:GetMetaValue(EMetaVarGetKey.MAP_ID)
- local line = SL:GetMetaValue(EMetaVarGetKey.MAP_LINE)
- local posStr = string.format("pos@%s,%s,%s,%s@",x,y,mapId,line)
- self:UpdateMessage(self.message .. posStr)
- end
- function this:EmojiOnClick()
- self.emoji_is_show = not self.emoji_is_show
- GUI:setVisible(self.view.emoji_panel,self.emoji_is_show)
- if self.emoji_is_show then
- GUI:DataListUpdateData(self.view.emoji_data_list)
- end
- end
- function this:SendMessageOnClick()
- --SL:SendChat(EChatChannelType.FRIEND,self.message,self.friendId,self.ChatItem)
- SL:SendChat(EChatChannelType.PERSONAL,self.message,self.friendId,self.ChatItem)
- self.ChatItem = {}
- self:UpdateMessage("")
- end
- function this:TextChange(a, b,eventData)
- local messageStr = eventData[1]
- if string.isNullOrEmpty(messageStr) then
- self.message = messageStr
- self.ChatItem = {}
- else
- local str = self:CheckInputRichText(messageStr)
- if str ~= messageStr then
- messageStr = str
- GUI:Text_setString(self.view.text_input,messageStr)
- end
- local mess = {message={channel = EChatChannelType.SYSTEM,message = messageStr}}
- self.calculationUI:RefreshItem(mess)
- local xx,yy = GUI:getSizeDelta(self.calculationUI.view.richT)
- if yy <= 320 then
- self.message = messageStr
- else
- GUI:Text_setString(self.view.text_input,self.message)
- end
- end
- end
- --去掉玩家输入的富文本
- function this:CheckInputRichText(message)
- --<size=500>超大字体</size>
- --<color=red>红色</color>
- local str = string.gsub(message, "<[^>]+>", "")
- return str
- end
- ---聊天信息变化
- function this:FriendChatReceiveEvent(_, senderId)
- if self.friendId == senderId or senderId == SL:GetMetaValue(EMetaVarGetKey.UID) then
- self:UpdateChatContent()
- end
- end
- --刷新聊天记录content
- -- function this:UpdateChatContent()
- -- local chatIdList = SL:FriendInfo_GetChatHistory(self.friendId)
- -- local chatList = {}
- -- for _,v in pairs(chatIdList) do
- -- local msg = SL:FriendInfo_GetMsg(v)
- -- if msg then
- -- table.insert(chatList, msg)
- -- end
- -- end
- -- if self.chatView then
- -- self.chatView:RefreshData(chatList)
- -- end
- -- end
- function this:LUA_EVENT_CHAT_RECEIVE(_,message)
- if message.channel == EChatChannelType.PERSONAL then
- self:UpdateChatContent()
- end
- end
- function this:UpdateChatContent()
- if not self.friendId then
- return
- end
- local chatIdList = SL:ChatInfo_GetChaTargetInfo(self.friendId)
- local chatList = {}
- for i, v in ipairs(chatIdList) do
- table.insert(chatList,v)
- end
- if self.chatView then
- self.chatView:RefreshData(chatList)
- end
- SL:ChatInfo_FriendShow(self.friendId)
- local is_show = SL:ChatInfo_FriendLookTipShow()
- if is_show then
- local popoverPanel = GUI:GetUI("dev/ui/Preview/Panel/KLPopover/KLPopoverPanel")
- popoverPanel:SetPopoverData(19)
- popoverPanel:RefreshUI()
- else
- local popoverPanel = GUI:GetUI("dev/ui/Preview/Panel/KLPopover/KLPopoverPanel")
- popoverPanel:ClosePopover(19)
- popoverPanel:RefreshUI()
- end
- end
- function this:Close()
- end
- return this
|