---@class KLUIChatPanel:UIKmlLuaPanelBase ---@field view KLUIChatPanelView local KLUIChatPanel = class(UIKmlLuaPanelBase) local this = KLUIChatPanel ---创建时调用一次 function this:Init() SL.HideMainPanel() self:GetSendNameList() if self.args.type and self.args.type.channel then self.args.channel = self.args.type.channel end if not self.args.channel then self.args.channel = EChatChannelType.ALL end self.isHideMainPanel = self.args and self.args.type and self.args.type.isHide self.allType = EChatChannelType.WORLD self:ZongSelectType(self.allType) self.allTypeIsShow = false self.message = "" GUI:UIPanel_Open("dev/ui/Chat/Item/KLUIChatView/KLUIChatView",self.view.panel_root,self,{width=400,height=570,x=2,y=55},false , function (item) self.chatView = item end) self.all_type_info = {2,6,4,7} 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.zong_data_list,function() return self:TypeDataListItemCountFunc() end,function(realIndex) return self:TypeDataListItemGetFunc(realIndex) end,function(realIndex, kmlcontrol) return self:TypeDataListItemInitFunc(realIndex, kmlcontrol) end, function(realIndex, kmlcontrol) return self:TypeDataListItemUpdateFunc(realIndex, kmlcontrol) end) self.btn_all_item = {} self.emoji_is_show = false 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 = {} self.item_is_show = false self.ChatItem = {} self.item_select_type = 1 self:ItemBtnShow() self:SelectChatType() GUI:DataListUpdateData(self.view.zong_data_list) 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) self.maxHeight = 320 self.isClose = false self.submitName = "" self.submitId = 0 self:ClosePrivateSelect() GUI:DataListInitData(self.view.all_name_data_list,function() return self:NameDataListItemCountFunc() end,function(realIndex) return self:NameDataListItemGetFunc(realIndex) end,function(realIndex, kmlcontrol) return self:NameDataListItemInitFunc(realIndex, kmlcontrol) end, function(realIndex, kmlcontrol) return self:NameDataListItemUpdateFunc(realIndex, kmlcontrol) end) self.btn_name_item = {} if self.args.channel == 8 then GUI:Toggle_setIsOn(self.view.siliao_toggle, self, true) if self.args.type and self.args.type.rid and self.args.type.name then self.submitName = self.args.type.name self.submitId = self.args.type.rid end GUI:Text_setString(self.view.private_input,self.submitName) self:AddChatName(self.submitId) end self.updateID = SL:Schedule(self.updateID,0,Time.deltaTime,-1,function() self:Update() end) end function this:Update() if not self.nextDoRevTime then return end if Time.time>self.nextDoRevTime then self.nextDoRevTime = nil self:UpdateChanInfo() end end ---创建或者刷新界面数据时调用 function this:Refresh() end function this:SelectChatType() if self.args.channel == EChatChannelType.ALL then --综合 GUI:setVisible(self.view.di_panel,true) GUI:setVisible(self.view.all_type_panel,true) GUI:setContentSize(self.view.text_input,250,38) GUI:setVisible(self.view.no_union_panel,false) GUI:setVisible(self.view.no_team_panel,false) GUI:setVisible(self.view.system_panel,false) GUI:setVisible(self.view.private_panel,false) elseif self.args.channel == EChatChannelType.SYSTEM then --系统 GUI:setVisible(self.view.di_panel,false) GUI:setVisible(self.view.all_type_panel,false) GUI:setVisible(self.view.no_union_panel,false) GUI:setVisible(self.view.no_team_panel,false) GUI:setVisible(self.view.system_panel,true) GUI:setVisible(self.view.private_panel,false) elseif self.args.channel == EChatChannelType.WORLD then --世界 GUI:setVisible(self.view.di_panel,true) GUI:setVisible(self.view.all_type_panel,false) GUI:setContentSize(self.view.text_input,370,38) GUI:setVisible(self.view.no_union_panel,false) GUI:setVisible(self.view.no_team_panel,false) GUI:setVisible(self.view.system_panel,false) GUI:setVisible(self.view.private_panel,false) elseif self.args.channel == EChatChannelType.NEARBY then --附近 GUI:setVisible(self.view.di_panel,true) GUI:setVisible(self.view.all_type_panel,false) GUI:setContentSize(self.view.text_input,370,38) GUI:setVisible(self.view.no_union_panel,false) GUI:setVisible(self.view.no_team_panel,false) GUI:setVisible(self.view.system_panel,false) GUI:setVisible(self.view.private_panel,false) elseif self.args.channel == EChatChannelType.UNION then --战盟 GUI:setVisible(self.view.all_type_panel,false) GUI:setContentSize(self.view.text_input,370,38) GUI:setVisible(self.view.no_team_panel,false) GUI:setVisible(self.view.system_panel,false) if not SL:MeData_Check() or not SL:MeData_GetRoleExtInfo() or SL:MeData_GetRoleExtInfo().unionId == 0 then GUI:setVisible(self.view.di_panel,false) GUI:setVisible(self.view.no_union_panel,true) else GUI:setVisible(self.view.no_union_panel,false) GUI:setVisible(self.view.di_panel,true) end GUI:setVisible(self.view.private_panel,false) elseif self.args.channel == EChatChannelType.TEAM then --队伍 GUI:setVisible(self.view.all_type_panel,false) GUI:setContentSize(self.view.text_input,370,38) GUI:setVisible(self.view.no_union_panel,false) GUI:setVisible(self.view.system_panel,false) if SL:TeamInfo_IsInTeam() then GUI:setVisible(self.view.no_team_panel,false) GUI:setVisible(self.view.di_panel,true) else GUI:setVisible(self.view.no_team_panel,true) GUI:setVisible(self.view.di_panel,false) end GUI:setVisible(self.view.private_panel,false) elseif self.args.channel == EChatChannelType.RECRUIT then --招募 GUI:setVisible(self.view.di_panel,false) GUI:setVisible(self.view.all_type_panel,false) GUI:setVisible(self.view.no_union_panel,false) GUI:setVisible(self.view.no_team_panel,false) GUI:setVisible(self.view.system_panel,false) GUI:setVisible(self.view.private_panel,false) elseif self.args.channel == EChatChannelType.PERSONAL then --私聊 GUI:setVisible(self.view.di_panel,true) GUI:setVisible(self.view.all_type_panel,false) GUI:setContentSize(self.view.text_input,160,38) GUI:setVisible(self.view.no_union_panel,false) GUI:setVisible(self.view.no_team_panel,false) GUI:setVisible(self.view.system_panel,false) GUI:setVisible(self.view.private_panel,true) end self:ClosePrivateSelect() self.message = "" GUI:Text_setString(self.view.text_input,"") self.ChatItem = {} self.nextDoRevTime = Time.time+Time.deltaTime end ---注册UI事件和服务器消息 function this:RegistEvents() GUI:AddOnClickEvent(self.view.background_close, self, self.ClosePanel) --GUI:AddOnClickEvent(self.view.left_btn, self, self.BtnLeftOnClick) --GUI:AddOnClickEvent(self.view.right_btn, self, self.BtnRightOnClick) --GUI:AddOnClickEvent(self.view.tuoxiabtn, self, self.TakeOffEquip) GUI:AddOnClickEvent(self.view.btn_close, self, self.ClosePanel) GUI:AddOnClickEvent(self.view.selectTyptbtn, self, self.SelectTypeAllShow) GUI:AddOnClickEvent(self.view.zong_panel_close, self, self.CloseAllShow) GUI:SetToggleOnValueChange(self.view.zonghe_toggle, self, self.zonghe_toggle_onclick) GUI:SetToggleOnValueChange(self.view.shijie_toggle, self, self.shijie_toggle_onclick) GUI:SetToggleOnValueChange(self.view.fujin_toggle, self, self.fujin_toggle_onclick) GUI:SetToggleOnValueChange(self.view.zhanmeng_toggle, self, self.zhanmeng_toggle_onclick) GUI:SetToggleOnValueChange(self.view.duiwu_toggle, self, self.duiwu_toggle_onclick) GUI:SetToggleOnValueChange(self.view.zhaomu_toggle, self, self.zhaomu_toggle_onclick) GUI:SetToggleOnValueChange(self.view.siliao_toggle, self, self.siliao_toggle_onclick) GUI:SetToggleOnValueChange(self.view.xitong_toggle, self, self.xitong_toggle_onclick) GUI:AddOnClickEvent(self.view.fasong, self, self.SendChat) GUI:AddOnClickEvent(self.view.pos_btn, self, self.AddPos) GUI:AddOnClickEvent(self.view.biaoqing_btn, self, self.OnlickEmoji) GUI:AddOnClickEvent(self.view.emoji_mask, self, self.HideEmoji) GUI:AddOnClickEvent(self.view.bag_btn, self, self.OnlickItem) GUI:AddOnClickEvent(self.view.item_mask, self, self.HideItem) GUI:Input_SetOnValueChange(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.btn_datianshi, self, self.btn_datianshi_onclick) GUI:AddOnClickEvent(self.view.create_union_btn, self, self.JoinUnion) GUI:AddOnClickEvent(self.view.join_union_btn, self, self.JoinUnion) GUI:AddOnClickEvent(self.view.create_team_btn, self, self.CreateTeam) GUI:AddOnClickEvent(self.view.join_team_btn, self, self.JoinTeam) GUI:Input_SetOnEndEdit(self.view.private_input, self, self.NameChangeEnd) SL:RegisterLUAEvent(LUA_EVENT_CHAT_RECEIVE, self.ChatReceive, self) GUI:AddOnClickEvent(self.view.private_panel_btn, self, self.OpenPrivateSelect) GUI:AddOnClickEvent(self.view.private_panel_close_btn, self, self.ClosePrivateSelect) SL:RegisterLuaNetMsg(MessageDef.ResFindIdByNameMessage, self.ResNameMessage, self) SL:RegisterLuaNetMsg(LuaMessageIdToClient.PLAYER_IS_ON_LINE_RES,self.PlayerIsOnLine,self) end function this:zonghe_toggle_onclick() self.args.channel = EChatChannelType.ALL self:SelectChatType() end function this:shijie_toggle_onclick() self.args.channel = EChatChannelType.WORLD self:SelectChatType() end function this:fujin_toggle_onclick() self.args.channel = EChatChannelType.NEARBY self:SelectChatType() end function this:zhanmeng_toggle_onclick() self.args.channel = EChatChannelType.UNION self:SelectChatType() end function this:duiwu_toggle_onclick() self.args.channel = EChatChannelType.TEAM self:SelectChatType() end function this:zhaomu_toggle_onclick() self.args.channel = EChatChannelType.RECRUIT self:SelectChatType() end function this:siliao_toggle_onclick() self.args.channel = EChatChannelType.PERSONAL self:SelectChatType() end function this:xitong_toggle_onclick() self.args.channel = EChatChannelType.SYSTEM self:SelectChatType() end function this:ClosePanel() self:saveData() SL:CloseChatUI() GUI:UIPanel_Close("dev/ui/Equip/Panel/KLEquipUI/KLEquipUIPanel") if not self.isHideMainPanel then SL.ShowMainPanel() end end function this:saveData() if SL.chatPrivatePlayerList then local allList = {} for id, onePlayer in pairs(SL.chatPrivatePlayerList) do local value = {} for id2, v2 in pairs(onePlayer) do table.insert(value,v2) end table.insert(allList,{k=id,v=value}) end --SL:LogTable(SL.chatPrivatePlayerList,true) --SL:LogTable(allList,true) local str = SL:JsonEncode(allList) SL:SetLocalString("chat_ui_send_name_list",str) end end function this:GetSendNameList() SL.chatPrivatePlayerList = {} local str = SL:GetLocalString("chat_ui_send_name_list") if str and str ~= "" then local allList = SL:JsonDecode(str) for id, onePlayer in pairs(allList) do SL.chatPrivatePlayerList[onePlayer.k] = {} for j, oneName in pairs(onePlayer.v) do SL.chatPrivatePlayerList[onePlayer.k][oneName.rid] = oneName end end --SL:LogTable(SL.chatPrivatePlayerList,true) end end function this:Close() self.isClose = true end function this:UpdateChanInfo() self.chat_list = {} if self.args.channel == EChatChannelType.FRIEND or self.args.channel == EChatChannelType.PERSONAL then local msgids = SL:ChatInfo_GetChaTargetInfo(self.submitId) for i, v in ipairs(msgids) do table.insert(self.chat_list,v) end else self.chat_list = SL:ChatInfo_GetChatInfo(self.args.channel) end self.chatView:RefreshData(self.chat_list) end function this:TextChange(a, b,eventData) if self.isClose then return end 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 <= self.maxHeight then self.message = messageStr else GUI:Text_setString(self.view.text_input,self.message) end end end --去掉玩家输入的富文本 function this:CheckInputRichText(message) --超大字体 --红色 local str = string.gsub(message, "<[^>]+>", "") return str end function this:SendChat() --PrivilegeCardManager.ReqAutoBuyStatus() --PrivilegeCardManager.ClearPrivilegeCardAllInfo() --PrivilegeCardManager.SendMU() if string.isNullOrEmpty(self.message) then return end local IsNeedAndActiveMonthCard = InfoManager.monthCardInfo:IsHaveMonthCardRights("chat") if not IsNeedAndActiveMonthCard then SL:TipMessage(SL:GetConfig('cfg_string',289).text, 1, NoticeType.NoticeMid )--"购买并使用月卡或日卡后解锁聊天系统", return end local chat_type = self.args.channel if chat_type == EChatChannelType.ALL then chat_type = self.allType end if chat_type == EChatChannelType.WORLD then local level = tonumber(SL:GetConfig("cfg_global", 125).value) local playLevel = SL:GetMetaValue(EMetaVarGetKey.LEVEL) if level > playLevel then SL:TipMessage(level.."级解锁世界发言", 1, NoticeType.NoticeMid ) return end end local num = tonumber(SL:GetConfig("cfg_global", 9).value) if string.len(self.message) > num *3 then self.message = string.sub(self.message, 1, num *3) end if chat_type == EChatChannelType.PERSONAL and self.submitId == 0 then SL:TipMessage(SL:GetConfig('cfg_string',290).text,1, NoticeType.NoticeMid )--请输入私聊对象 return end local targetid = nil if chat_type == EChatChannelType.PERSONAL then targetid = self.submitId end SL:SendChat(chat_type,self.message,targetid,self.ChatItem) self.ChatItem = {} self.message = "" GUI:Text_setString(self.view.text_input,"") end function this:ChatReceive(_id,message) if self.args.channel == EChatChannelType.ALL then --综合 self.nextDoRevTime = Time.time+Time.deltaTime else if self.args.channel == message.channel then self.nextDoRevTime = Time.time+Time.deltaTime end end end function this:SelectTypeAllShow() self.allTypeIsShow = not self.allTypeIsShow GUI:setVisible(self.view.zong_panel,self.allTypeIsShow) end function this:CloseAllShow() self.allTypeIsShow = false GUI:setVisible(self.view.zong_panel,self.allTypeIsShow) end function this:TypeDataListItemCountFunc() return #self.all_type_info end function this:TypeDataListItemGetFunc(realIndex) local item = GUI:UIPanel_Open("dev/ui/Chat/Item/KLUIChatSelectTypeItem/KLUIChatSelectTypeItem", self.view.zong_data_list, self, {}, true) self.btn_all_item[item.view.root] = item return item.view.root end function this:TypeDataListItemInitFunc(realIndex, kmlcontrol) end function this:TypeDataListItemUpdateFunc(realIndex, kmlcontrol) local data = self.all_type_info[realIndex + 1] self.btn_all_item[kmlcontrol]:RefreshItem(data,self) end function this:ZongSelectType(channel) self:CloseAllShow() self.allType = channel local typeStr = SL:ChatInfo_GetChatTypeStr(self.allType) GUI:Text_setString(self.view.zonghe_text,typeStr) end function this:AddPos() -- @pos@135,130,1001,1@ 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 tab = SL:HasConfig("cfg_map_line",mapId) if not tab then line = 0 end local posStr = string.format("pos@%s,%s,%s,%s@",x,y,mapId,line) self.message = self.message .. posStr GUI:Text_setString(self.view.text_input,self.message) 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: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:AddEmoji(emoji_id) self:HideEmoji() -- emoji@61000:1@ local emojiStr = string.format("emoji@%s:1@",emoji_id) self.message = self.message .. emojiStr GUI:Text_setString(self.view.text_input,self.message) end function this:OnlickEmoji() 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:HideEmoji() self.emoji_is_show = false GUI:setVisible(self.view.emoji_panel,self.emoji_is_show) end function this:OnlickItem() 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:HideItem() self.item_is_show = false GUI:setVisible(self.view.item_panel,self.item_is_show) end function this:forbidClick() end function this:ClickItemCallBack(itemControl, itemData) local cfgId = itemData.cfgId local id = itemData.id local datiankshi_show_type = itemData.datiankshi_show_type -- @item@0:0@ local index = #self.ChatItem + 1 local select = self.item_select_type if select == 3 then select = 2 end if select == 2 then if not datiankshi_show_type or datiankshi_show_type == 0 then select = 1 end end table.insert(self.ChatItem,{lid=id,type=select}) local emojiStr = string.format("item@%s:%s@",index,select) self.message = self.message .. emojiStr GUI:Text_setString(self.view.text_input,self.message) self:HideItem() end function this:ItemBtnSelect() self.item_select_type = 1 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) GUI:setVisible(self.view.btn_datianshi_select,false) elseif self.item_select_type == 2 then GUI:setVisible(self.view.btn_bag_select,false) GUI:setVisible(self.view.btn_equip_select,true) GUI:setVisible(self.view.btn_datianshi_select,false) else GUI:setVisible(self.view.btn_bag_select,false) GUI:setVisible(self.view.btn_equip_select,false) GUI:setVisible(self.view.btn_datianshi_select,true) end end function this:ShowItem() GUI:UIPanel_Close("dev/ui/Chat/Item/KLUIChatBagScrollView/KLUIChatBagScrollViewItem") local bag_info = string.split(SL:GetConfig("cfg_global", 6).value, '#') self.maxHor = tonumber(bag_info[1]) self.maxVet = tonumber(bag_info[2]) local itemList_ = {} local show_id = EBagTileScrollViewId.Bag if self.item_select_type == 1 then local itemList = SL:GetMetaValue("BAG_DATA")[1] --SL:LogTable(itemList,true) for k, v in pairs(itemList) do local cfg_id = v.cfgId local tab = SL:GetConfig("cfg_item",cfg_id) if tab.type == 2 and tab.strPart and table.count(tab.strPart) > 0 and tab.strPart[1] >= 71 and tab.strPart[1] <= 78 then elseif tab.type == 9 then else v.datiankshi_show_type = nil itemList_[k] = v end end elseif self.item_select_type == 2 then -- local itemList_1 = SL:GetMetaValue("EQUIP_DATA")[1] local itemList_1 = SL:GetWearBarsData(EEquipWearBarType.BaseEquip) if itemList_1 then for _, item in pairs(itemList_1) do item.datiankshi_show_type = 1 table.insert(itemList_, item) end end itemList_ = SL.Bag:SortItemList(itemList_) ---BagCellUtil.SortItemList(itemList_) show_id = EBagTileScrollViewId.Recover else local itemList_1 = SL:GetWearBarsData(EEquipWearBarType.Archange) if itemList_1 then for _, item in pairs(itemList_1) do item.datiankshi_show_type = 1 table.insert(itemList_, item) end end local itemList = SL:GetMetaValue("BAG_DATA")[1] for k, v in pairs(itemList) do local cfg_id = v.cfgId local tab = SL:GetConfig("cfg_item",cfg_id) if tab.type == 2 and tab.strPart and table.count(tab.strPart) > 0 and tab.strPart[1] >= 71 and tab.strPart[1] <= 78 then elseif tab.type == 9 then v.datiankshi_show_type = nil table.insert(itemList_, v) else end end itemList_ = SL.Bag:SortItemList(itemList_) ---BagCellUtil.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: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:btn_datianshi_onclick() self.item_select_type = 3 self:ItemBtnShow() self:ShowItem() end function this:JoinUnion() local needLevel = SL:GetConfig("cfg_system_switch",105,"id").needLevel local myLevel = SL:GetMetaValue(EMetaVarGetKey.LEVEL) if needLevel > myLevel then SL:TipMessage( SL:GetConfig('cfg_string',449).text,1, NoticeType.NoticeMid ) return end SL:CloseChatUI() SL:OpenUnion() end function this:CreateTeam() SL:CloseChatUI() GUI:UIPanel_Open("dev/ui/Team/Panel/KLUITeamMain/KLUITeamMainPanel",nil,nil,{panelType = 1}) end function this:JoinTeam() SL:CloseChatUI() GUI:UIPanel_Open("dev/ui/Team/Panel/KLUITeamMain/KLUITeamMainPanel",nil,nil,{panelType = 2}) end function this:NameChangeEnd(a, b,eventData) if self.isClose then return end local messageStr = eventData[1] self.submitName = messageStr if string.isNullOrEmpty(self.submitName) then self.submitId = 0 return end SL:ReqFindRidByNameMessage(self.submitName) end function this:ResNameMessage(id,message) if message and message.rid then self.submitId = message.rid self:AddChatName(self.submitId) else self.submitName = "" self.submitId = 0 GUI:Text_setString(self.view.private_input,"") end self.nextDoRevTime = Time.time+Time.deltaTime end function this:AddChatName(_rid) if self.submitName then if not SL.chatPrivatePlayerList then SL.chatPrivatePlayerList = {} end local id = SL:GetMetaValue(EMetaVarGetKey.USER_ID) if not SL.chatPrivatePlayerList[id] then SL.chatPrivatePlayerList[id] = {} end if not table.getValue(SL.chatPrivatePlayerList[id], _rid) then --LogError(SL.chatPrivatePlayerList[id]) SL.chatPrivatePlayerList[id][_rid] = {rid = _rid,submitName = self.submitName} end self:saveData() end end function this:OpenPrivateSelect() if not SL.chatPrivatePlayerList then SL.chatPrivatePlayerList = {} end local id = SL:GetMetaValue(EMetaVarGetKey.USER_ID) if not SL.chatPrivatePlayerList[id] then SL.chatPrivatePlayerList[id] = {} end self.all_name = {} local all_id = {} for k, v in pairs(SL.chatPrivatePlayerList[id]) do table.insert(self.all_name,v) table.insert(all_id,v.rid) end -- GUI:setVisible(self.view.private_select_panel,true) -- GUI:DataListUpdateData(self.view.all_name_data_list) SL:SendLuaNetMsg(LuaMessageIdToSever.PLAYER_IS_ON_LINE_REQ, all_id) end function this:PlayerIsOnLine(id,message) for i = 1, #self.all_name, 1 do for k, v in pairs(message) do if self.all_name[i].rid == v.rid then self.all_name[i].onLine = v.onLine end end end GUI:setVisible(self.view.private_select_panel,true) GUI:DataListUpdateData(self.view.all_name_data_list) end function this:ClosePrivateSelect() GUI:setVisible(self.view.private_select_panel,false) end function this:NameDataListItemCountFunc() return #self.all_name end function this:NameDataListItemGetFunc(realIndex) local item = GUI:UIPanel_Open("dev/ui/Chat/Item/KLUIChatSelectTypeItem/KLUIChatSelectTypeItem", self.view.all_name_data_list, self, {}, true) self.btn_name_item[item.view.root] = item return item.view.root end function this:NameDataListItemInitFunc(realIndex, kmlcontrol) end function this:NameDataListItemUpdateFunc(realIndex, kmlcontrol) local data = self.all_name[realIndex + 1] self.btn_name_item[kmlcontrol]:RefreshItem(2,self,data) end function this:SelectName(data) self.submitName = data.submitName self.submitId = data.rid GUI:Text_setString(self.view.private_input,self.submitName) self:ClosePrivateSelect() self.nextDoRevTime = Time.time+Time.deltaTime end return this