KLUIChatPanel.lua 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780
  1. ---@class KLUIChatPanel:UIKmlLuaPanelBase
  2. ---@field view KLUIChatPanelView
  3. local KLUIChatPanel = class(UIKmlLuaPanelBase)
  4. local this = KLUIChatPanel
  5. ---创建时调用一次
  6. function this:Init()
  7. SL.HideMainPanel()
  8. self:GetSendNameList()
  9. if self.args.type and self.args.type.channel then
  10. self.args.channel = self.args.type.channel
  11. end
  12. if not self.args.channel then
  13. self.args.channel = EChatChannelType.ALL
  14. end
  15. self.isHideMainPanel = self.args and self.args.type and self.args.type.isHide
  16. self.allType = EChatChannelType.WORLD
  17. self:ZongSelectType(self.allType)
  18. self.allTypeIsShow = false
  19. self.message = ""
  20. GUI:UIPanel_Open("dev/ui/Chat/Item/KLUIChatView/KLUIChatView",self.view.panel_root,self,{width=400,height=570,x=2,y=55},false ,
  21. function (item)
  22. self.chatView = item
  23. end)
  24. self.all_type_info = {2,6,4,7}
  25. self.all_emoji_info = {}
  26. for i = 61, 87 do
  27. table.insert(self.all_emoji_info,i.."000")
  28. end
  29. GUI:Text_sethorwrap(self.view.text_input,"1")
  30. GUI:Text_setmline(self.view.text_input,"0")
  31. GUI:DataListInitData(self.view.zong_data_list,function()
  32. return self:TypeDataListItemCountFunc()
  33. end,function(realIndex)
  34. return self:TypeDataListItemGetFunc(realIndex)
  35. end,function(realIndex, kmlcontrol)
  36. return self:TypeDataListItemInitFunc(realIndex, kmlcontrol)
  37. end, function(realIndex, kmlcontrol)
  38. return self:TypeDataListItemUpdateFunc(realIndex, kmlcontrol)
  39. end)
  40. self.btn_all_item = {}
  41. self.emoji_is_show = false
  42. GUI:DataListInitData(self.view.emoji_data_list,function()
  43. return self:EmojiDataListItemCountFunc()
  44. end,function(realIndex)
  45. return self:EmojiDataListItemGetFunc(realIndex)
  46. end,function(realIndex, kmlcontrol)
  47. return self:EmojiDataListItemInitFunc(realIndex, kmlcontrol)
  48. end, function(realIndex, kmlcontrol)
  49. return self:EmojiDataListItemUpdateFunc(realIndex, kmlcontrol)
  50. end)
  51. self.btn_emoji_item = {}
  52. self.item_is_show = false
  53. self.ChatItem = {}
  54. self.item_select_type = 1
  55. self:ItemBtnShow()
  56. self:SelectChatType()
  57. GUI:DataListUpdateData(self.view.zong_data_list)
  58. GUI:UIPanel_Open("dev/ui/Chat/Item/KLUIChatItem/KLUIChatItem",self.view.root,self,{},true,function (item)
  59. self.calculationUI = item
  60. GUI:setPositionX(self.calculationUI.view.root,2000)
  61. GUI:setPositionY(self.calculationUI.view.root,2000)
  62. end)
  63. self.maxHeight = 320
  64. self.isClose = false
  65. self.submitName = ""
  66. self.submitId = 0
  67. self:ClosePrivateSelect()
  68. GUI:DataListInitData(self.view.all_name_data_list,function()
  69. return self:NameDataListItemCountFunc()
  70. end,function(realIndex)
  71. return self:NameDataListItemGetFunc(realIndex)
  72. end,function(realIndex, kmlcontrol)
  73. return self:NameDataListItemInitFunc(realIndex, kmlcontrol)
  74. end, function(realIndex, kmlcontrol)
  75. return self:NameDataListItemUpdateFunc(realIndex, kmlcontrol)
  76. end)
  77. self.btn_name_item = {}
  78. if self.args.channel == 8 then
  79. GUI:Toggle_setIsOn(self.view.siliao_toggle, self, true)
  80. if self.args.type and self.args.type.rid and self.args.type.name then
  81. self.submitName = self.args.type.name
  82. self.submitId = self.args.type.rid
  83. end
  84. GUI:Text_setString(self.view.private_input,self.submitName)
  85. self:AddChatName(self.submitId)
  86. end
  87. self.updateID = SL:Schedule(self.updateID,0,Time.deltaTime,-1,function()
  88. self:Update()
  89. end)
  90. end
  91. function this:Update()
  92. if not self.nextDoRevTime then
  93. return
  94. end
  95. if Time.time>self.nextDoRevTime then
  96. self.nextDoRevTime = nil
  97. self:UpdateChanInfo()
  98. end
  99. end
  100. ---创建或者刷新界面数据时调用
  101. function this:Refresh()
  102. end
  103. function this:SelectChatType()
  104. if self.args.channel == EChatChannelType.ALL then --综合
  105. GUI:setVisible(self.view.di_panel,true)
  106. GUI:setVisible(self.view.all_type_panel,true)
  107. GUI:setContentSize(self.view.text_input,250,38)
  108. GUI:setVisible(self.view.no_union_panel,false)
  109. GUI:setVisible(self.view.no_team_panel,false)
  110. GUI:setVisible(self.view.system_panel,false)
  111. GUI:setVisible(self.view.private_panel,false)
  112. elseif self.args.channel == EChatChannelType.SYSTEM then --系统
  113. GUI:setVisible(self.view.di_panel,false)
  114. GUI:setVisible(self.view.all_type_panel,false)
  115. GUI:setVisible(self.view.no_union_panel,false)
  116. GUI:setVisible(self.view.no_team_panel,false)
  117. GUI:setVisible(self.view.system_panel,true)
  118. GUI:setVisible(self.view.private_panel,false)
  119. elseif self.args.channel == EChatChannelType.WORLD then --世界
  120. GUI:setVisible(self.view.di_panel,true)
  121. GUI:setVisible(self.view.all_type_panel,false)
  122. GUI:setContentSize(self.view.text_input,370,38)
  123. GUI:setVisible(self.view.no_union_panel,false)
  124. GUI:setVisible(self.view.no_team_panel,false)
  125. GUI:setVisible(self.view.system_panel,false)
  126. GUI:setVisible(self.view.private_panel,false)
  127. elseif self.args.channel == EChatChannelType.NEARBY then --附近
  128. GUI:setVisible(self.view.di_panel,true)
  129. GUI:setVisible(self.view.all_type_panel,false)
  130. GUI:setContentSize(self.view.text_input,370,38)
  131. GUI:setVisible(self.view.no_union_panel,false)
  132. GUI:setVisible(self.view.no_team_panel,false)
  133. GUI:setVisible(self.view.system_panel,false)
  134. GUI:setVisible(self.view.private_panel,false)
  135. elseif self.args.channel == EChatChannelType.UNION then --战盟
  136. GUI:setVisible(self.view.all_type_panel,false)
  137. GUI:setContentSize(self.view.text_input,370,38)
  138. GUI:setVisible(self.view.no_team_panel,false)
  139. GUI:setVisible(self.view.system_panel,false)
  140. if not SL:MeData_Check() or not SL:MeData_GetRoleExtInfo() or SL:MeData_GetRoleExtInfo().unionId == 0 then
  141. GUI:setVisible(self.view.di_panel,false)
  142. GUI:setVisible(self.view.no_union_panel,true)
  143. else
  144. GUI:setVisible(self.view.no_union_panel,false)
  145. GUI:setVisible(self.view.di_panel,true)
  146. end
  147. GUI:setVisible(self.view.private_panel,false)
  148. elseif self.args.channel == EChatChannelType.TEAM then --队伍
  149. GUI:setVisible(self.view.all_type_panel,false)
  150. GUI:setContentSize(self.view.text_input,370,38)
  151. GUI:setVisible(self.view.no_union_panel,false)
  152. GUI:setVisible(self.view.system_panel,false)
  153. if SL:TeamInfo_IsInTeam() then
  154. GUI:setVisible(self.view.no_team_panel,false)
  155. GUI:setVisible(self.view.di_panel,true)
  156. else
  157. GUI:setVisible(self.view.no_team_panel,true)
  158. GUI:setVisible(self.view.di_panel,false)
  159. end
  160. GUI:setVisible(self.view.private_panel,false)
  161. elseif self.args.channel == EChatChannelType.RECRUIT then --招募
  162. GUI:setVisible(self.view.di_panel,false)
  163. GUI:setVisible(self.view.all_type_panel,false)
  164. GUI:setVisible(self.view.no_union_panel,false)
  165. GUI:setVisible(self.view.no_team_panel,false)
  166. GUI:setVisible(self.view.system_panel,false)
  167. GUI:setVisible(self.view.private_panel,false)
  168. elseif self.args.channel == EChatChannelType.PERSONAL then --私聊
  169. GUI:setVisible(self.view.di_panel,true)
  170. GUI:setVisible(self.view.all_type_panel,false)
  171. GUI:setContentSize(self.view.text_input,160,38)
  172. GUI:setVisible(self.view.no_union_panel,false)
  173. GUI:setVisible(self.view.no_team_panel,false)
  174. GUI:setVisible(self.view.system_panel,false)
  175. GUI:setVisible(self.view.private_panel,true)
  176. end
  177. self:ClosePrivateSelect()
  178. self.message = ""
  179. GUI:Text_setString(self.view.text_input,"")
  180. self.ChatItem = {}
  181. self.nextDoRevTime = Time.time+Time.deltaTime
  182. end
  183. ---注册UI事件和服务器消息
  184. function this:RegistEvents()
  185. GUI:AddOnClickEvent(self.view.background_close, self, self.ClosePanel)
  186. --GUI:AddOnClickEvent(self.view.left_btn, self, self.BtnLeftOnClick)
  187. --GUI:AddOnClickEvent(self.view.right_btn, self, self.BtnRightOnClick)
  188. --GUI:AddOnClickEvent(self.view.tuoxiabtn, self, self.TakeOffEquip)
  189. GUI:AddOnClickEvent(self.view.btn_close, self, self.ClosePanel)
  190. GUI:AddOnClickEvent(self.view.selectTyptbtn, self, self.SelectTypeAllShow)
  191. GUI:AddOnClickEvent(self.view.zong_panel_close, self, self.CloseAllShow)
  192. GUI:SetToggleOnValueChange(self.view.zonghe_toggle, self, self.zonghe_toggle_onclick)
  193. GUI:SetToggleOnValueChange(self.view.shijie_toggle, self, self.shijie_toggle_onclick)
  194. GUI:SetToggleOnValueChange(self.view.fujin_toggle, self, self.fujin_toggle_onclick)
  195. GUI:SetToggleOnValueChange(self.view.zhanmeng_toggle, self, self.zhanmeng_toggle_onclick)
  196. GUI:SetToggleOnValueChange(self.view.duiwu_toggle, self, self.duiwu_toggle_onclick)
  197. GUI:SetToggleOnValueChange(self.view.zhaomu_toggle, self, self.zhaomu_toggle_onclick)
  198. GUI:SetToggleOnValueChange(self.view.siliao_toggle, self, self.siliao_toggle_onclick)
  199. GUI:SetToggleOnValueChange(self.view.xitong_toggle, self, self.xitong_toggle_onclick)
  200. GUI:AddOnClickEvent(self.view.fasong, self, self.SendChat)
  201. GUI:AddOnClickEvent(self.view.pos_btn, self, self.AddPos)
  202. GUI:AddOnClickEvent(self.view.biaoqing_btn, self, self.OnlickEmoji)
  203. GUI:AddOnClickEvent(self.view.emoji_mask, self, self.HideEmoji)
  204. GUI:AddOnClickEvent(self.view.bag_btn, self, self.OnlickItem)
  205. GUI:AddOnClickEvent(self.view.item_mask, self, self.HideItem)
  206. GUI:Input_SetOnValueChange(self.view.text_input, self, self.TextChange)
  207. GUI:AddOnClickEvent(self.view.btn_bag, self, self.btn_bag_onclick)
  208. GUI:AddOnClickEvent(self.view.btn_equip, self, self.btn_equip_onclick)
  209. GUI:AddOnClickEvent(self.view.btn_datianshi, self, self.btn_datianshi_onclick)
  210. GUI:AddOnClickEvent(self.view.create_union_btn, self, self.JoinUnion)
  211. GUI:AddOnClickEvent(self.view.join_union_btn, self, self.JoinUnion)
  212. GUI:AddOnClickEvent(self.view.create_team_btn, self, self.CreateTeam)
  213. GUI:AddOnClickEvent(self.view.join_team_btn, self, self.JoinTeam)
  214. GUI:Input_SetOnEndEdit(self.view.private_input, self, self.NameChangeEnd)
  215. SL:RegisterLUAEvent(LUA_EVENT_CHAT_RECEIVE, self.ChatReceive, self)
  216. GUI:AddOnClickEvent(self.view.private_panel_btn, self, self.OpenPrivateSelect)
  217. GUI:AddOnClickEvent(self.view.private_panel_close_btn, self, self.ClosePrivateSelect)
  218. SL:RegisterLuaNetMsg(MessageDef.ResFindIdByNameMessage, self.ResNameMessage, self)
  219. SL:RegisterLuaNetMsg(LuaMessageIdToClient.PLAYER_IS_ON_LINE_RES,self.PlayerIsOnLine,self)
  220. end
  221. function this:zonghe_toggle_onclick()
  222. self.args.channel = EChatChannelType.ALL
  223. self:SelectChatType()
  224. end
  225. function this:shijie_toggle_onclick()
  226. self.args.channel = EChatChannelType.WORLD
  227. self:SelectChatType()
  228. end
  229. function this:fujin_toggle_onclick()
  230. self.args.channel = EChatChannelType.NEARBY
  231. self:SelectChatType()
  232. end
  233. function this:zhanmeng_toggle_onclick()
  234. self.args.channel = EChatChannelType.UNION
  235. self:SelectChatType()
  236. end
  237. function this:duiwu_toggle_onclick()
  238. self.args.channel = EChatChannelType.TEAM
  239. self:SelectChatType()
  240. end
  241. function this:zhaomu_toggle_onclick()
  242. self.args.channel = EChatChannelType.RECRUIT
  243. self:SelectChatType()
  244. end
  245. function this:siliao_toggle_onclick()
  246. self.args.channel = EChatChannelType.PERSONAL
  247. self:SelectChatType()
  248. end
  249. function this:xitong_toggle_onclick()
  250. self.args.channel = EChatChannelType.SYSTEM
  251. self:SelectChatType()
  252. end
  253. function this:ClosePanel()
  254. self:saveData()
  255. SL:CloseChatUI()
  256. GUI:UIPanel_Close("dev/ui/Equip/Panel/KLEquipUI/KLEquipUIPanel")
  257. if not self.isHideMainPanel then
  258. SL.ShowMainPanel()
  259. end
  260. end
  261. function this:saveData()
  262. if SL.chatPrivatePlayerList then
  263. local allList = {}
  264. for id, onePlayer in pairs(SL.chatPrivatePlayerList) do
  265. local value = {}
  266. for id2, v2 in pairs(onePlayer) do
  267. table.insert(value,v2)
  268. end
  269. table.insert(allList,{k=id,v=value})
  270. end
  271. --SL:LogTable(SL.chatPrivatePlayerList,true)
  272. --SL:LogTable(allList,true)
  273. local str = SL:JsonEncode(allList)
  274. SL:SetLocalString("chat_ui_send_name_list",str)
  275. end
  276. end
  277. function this:GetSendNameList()
  278. SL.chatPrivatePlayerList = {}
  279. local str = SL:GetLocalString("chat_ui_send_name_list")
  280. if str and str ~= "" then
  281. local allList = SL:JsonDecode(str)
  282. for id, onePlayer in pairs(allList) do
  283. SL.chatPrivatePlayerList[onePlayer.k] = {}
  284. for j, oneName in pairs(onePlayer.v) do
  285. SL.chatPrivatePlayerList[onePlayer.k][oneName.rid] = oneName
  286. end
  287. end
  288. --SL:LogTable(SL.chatPrivatePlayerList,true)
  289. end
  290. end
  291. function this:Close()
  292. self.isClose = true
  293. end
  294. function this:UpdateChanInfo()
  295. self.chat_list = {}
  296. if self.args.channel == EChatChannelType.FRIEND or self.args.channel == EChatChannelType.PERSONAL then
  297. local msgids = SL:ChatInfo_GetChaTargetInfo(self.submitId)
  298. for i, v in ipairs(msgids) do
  299. table.insert(self.chat_list,v)
  300. end
  301. else
  302. self.chat_list = SL:ChatInfo_GetChatInfo(self.args.channel)
  303. end
  304. self.chatView:RefreshData(self.chat_list)
  305. end
  306. function this:TextChange(a, b,eventData)
  307. if self.isClose then
  308. return
  309. end
  310. local messageStr = eventData[1]
  311. if string.isNullOrEmpty(messageStr) then
  312. self.message = messageStr
  313. self.ChatItem = {}
  314. else
  315. local str = self:CheckInputRichText(messageStr)
  316. if str ~= messageStr then
  317. messageStr = str
  318. GUI:Text_setString(self.view.text_input,messageStr)
  319. end
  320. local mess = {message={channel = EChatChannelType.SYSTEM,message = messageStr}}
  321. self.calculationUI:RefreshItem(mess)
  322. local xx,yy = GUI:getSizeDelta(self.calculationUI.view.richT)
  323. if yy <= self.maxHeight then
  324. self.message = messageStr
  325. else
  326. GUI:Text_setString(self.view.text_input,self.message)
  327. end
  328. end
  329. end
  330. --去掉玩家输入的富文本
  331. function this:CheckInputRichText(message)
  332. --<size=500>超大字体</size>
  333. --<color=red>红色</color>
  334. local str = string.gsub(message, "<[^>]+>", "")
  335. return str
  336. end
  337. function this:SendChat()
  338. --PrivilegeCardManager.ReqAutoBuyStatus()
  339. --PrivilegeCardManager.ClearPrivilegeCardAllInfo()
  340. --PrivilegeCardManager.SendMU()
  341. if string.isNullOrEmpty(self.message) then
  342. return
  343. end
  344. local IsNeedAndActiveMonthCard = InfoManager.monthCardInfo:IsHaveMonthCardRights("chat")
  345. if not IsNeedAndActiveMonthCard then
  346. SL:TipMessage(SL:GetConfig('cfg_string',289).text, 1, NoticeType.NoticeMid )--"购买并使用月卡或日卡后解锁聊天系统",
  347. return
  348. end
  349. local chat_type = self.args.channel
  350. if chat_type == EChatChannelType.ALL then
  351. chat_type = self.allType
  352. end
  353. if chat_type == EChatChannelType.WORLD then
  354. local level = tonumber(SL:GetConfig("cfg_global", 125).value)
  355. local playLevel = SL:GetMetaValue(EMetaVarGetKey.LEVEL)
  356. if level > playLevel then
  357. SL:TipMessage(level.."级解锁世界发言", 1, NoticeType.NoticeMid )
  358. return
  359. end
  360. end
  361. local num = tonumber(SL:GetConfig("cfg_global", 9).value)
  362. if string.len(self.message) > num *3 then
  363. self.message = string.sub(self.message, 1, num *3)
  364. end
  365. if chat_type == EChatChannelType.PERSONAL and self.submitId == 0 then
  366. SL:TipMessage(SL:GetConfig('cfg_string',290).text,1, NoticeType.NoticeMid )--请输入私聊对象
  367. return
  368. end
  369. local targetid = nil
  370. if chat_type == EChatChannelType.PERSONAL then
  371. targetid = self.submitId
  372. end
  373. SL:SendChat(chat_type,self.message,targetid,self.ChatItem)
  374. self.ChatItem = {}
  375. self.message = ""
  376. GUI:Text_setString(self.view.text_input,"")
  377. end
  378. function this:ChatReceive(_id,message)
  379. if self.args.channel == EChatChannelType.ALL then --综合
  380. self.nextDoRevTime = Time.time+Time.deltaTime
  381. else
  382. if self.args.channel == message.channel then
  383. self.nextDoRevTime = Time.time+Time.deltaTime
  384. end
  385. end
  386. end
  387. function this:SelectTypeAllShow()
  388. self.allTypeIsShow = not self.allTypeIsShow
  389. GUI:setVisible(self.view.zong_panel,self.allTypeIsShow)
  390. end
  391. function this:CloseAllShow()
  392. self.allTypeIsShow = false
  393. GUI:setVisible(self.view.zong_panel,self.allTypeIsShow)
  394. end
  395. function this:TypeDataListItemCountFunc()
  396. return #self.all_type_info
  397. end
  398. function this:TypeDataListItemGetFunc(realIndex)
  399. local item = GUI:UIPanel_Open("dev/ui/Chat/Item/KLUIChatSelectTypeItem/KLUIChatSelectTypeItem", self.view.zong_data_list, self, {}, true)
  400. self.btn_all_item[item.view.root] = item
  401. return item.view.root
  402. end
  403. function this:TypeDataListItemInitFunc(realIndex, kmlcontrol)
  404. end
  405. function this:TypeDataListItemUpdateFunc(realIndex, kmlcontrol)
  406. local data = self.all_type_info[realIndex + 1]
  407. self.btn_all_item[kmlcontrol]:RefreshItem(data,self)
  408. end
  409. function this:ZongSelectType(channel)
  410. self:CloseAllShow()
  411. self.allType = channel
  412. local typeStr = SL:ChatInfo_GetChatTypeStr(self.allType)
  413. GUI:Text_setString(self.view.zonghe_text,typeStr)
  414. end
  415. function this:AddPos()
  416. -- @pos@135,130,1001,1@
  417. local x = SL:MeData_GetCoord().x
  418. local y = SL:MeData_GetCoord().z
  419. local mapId = SL:GetMetaValue(EMetaVarGetKey.MAP_ID)
  420. local line = SL:GetMetaValue(EMetaVarGetKey.MAP_LINE)
  421. local tab = SL:HasConfig("cfg_map_line",mapId)
  422. if not tab then
  423. line = 0
  424. end
  425. local posStr = string.format("pos@%s,%s,%s,%s@",x,y,mapId,line)
  426. self.message = self.message .. posStr
  427. GUI:Text_setString(self.view.text_input,self.message)
  428. end
  429. function this:EmojiDataListItemCountFunc()
  430. return #self.all_emoji_info
  431. end
  432. function this:EmojiDataListItemGetFunc(realIndex)
  433. local item = GUI:UIPanel_Open("dev/ui/Chat/Item/KLUIChatEmojiItem/KLUIChatEmojiItem", self.view.emoji_data_list, self, {}, true)
  434. self.btn_emoji_item[item.view.root] = item
  435. return item.view.root
  436. end
  437. function this:EmojiDataListItemInitFunc(realIndex, kmlcontrol)
  438. end
  439. function this:EmojiDataListItemUpdateFunc(realIndex, kmlcontrol)
  440. local data = self.all_emoji_info[realIndex + 1]
  441. self.btn_emoji_item[kmlcontrol]:RefreshItem(data,self)
  442. end
  443. function this:AddEmoji(emoji_id)
  444. self:HideEmoji()
  445. -- emoji@61000:1@
  446. local emojiStr = string.format("emoji@%s:1@",emoji_id)
  447. self.message = self.message .. emojiStr
  448. GUI:Text_setString(self.view.text_input,self.message)
  449. end
  450. function this:OnlickEmoji()
  451. self.emoji_is_show = not self.emoji_is_show
  452. GUI:setVisible(self.view.emoji_panel,self.emoji_is_show)
  453. if self.emoji_is_show then
  454. GUI:DataListUpdateData(self.view.emoji_data_list)
  455. end
  456. end
  457. function this:HideEmoji()
  458. self.emoji_is_show = false
  459. GUI:setVisible(self.view.emoji_panel,self.emoji_is_show)
  460. end
  461. function this:OnlickItem()
  462. self.item_is_show = not self.item_is_show
  463. GUI:setVisible(self.view.item_panel,self.item_is_show)
  464. if self.item_is_show then
  465. self:ShowItem()
  466. else
  467. GUI:UIPanel_Close("dev/ui/Chat/Item/KLUIChatBagScrollView/KLUIChatBagScrollViewItem")
  468. end
  469. end
  470. function this:HideItem()
  471. self.item_is_show = false
  472. GUI:setVisible(self.view.item_panel,self.item_is_show)
  473. end
  474. function this:forbidClick()
  475. end
  476. function this:ClickItemCallBack(itemControl, itemData)
  477. local cfgId = itemData.cfgId
  478. local id = itemData.id
  479. local datiankshi_show_type = itemData.datiankshi_show_type
  480. -- @item@0:0@
  481. local index = #self.ChatItem + 1
  482. local select = self.item_select_type
  483. if select == 3 then
  484. select = 2
  485. end
  486. if select == 2 then
  487. if not datiankshi_show_type or datiankshi_show_type == 0 then
  488. select = 1
  489. end
  490. end
  491. table.insert(self.ChatItem,{lid=id,type=select})
  492. local emojiStr = string.format("item@%s:%s@",index,select)
  493. self.message = self.message .. emojiStr
  494. GUI:Text_setString(self.view.text_input,self.message)
  495. self:HideItem()
  496. end
  497. function this:ItemBtnSelect()
  498. self.item_select_type = 1
  499. end
  500. function this:ItemBtnShow()
  501. if self.item_select_type == 1 then
  502. GUI:setVisible(self.view.btn_bag_select,true)
  503. GUI:setVisible(self.view.btn_equip_select,false)
  504. GUI:setVisible(self.view.btn_datianshi_select,false)
  505. elseif self.item_select_type == 2 then
  506. GUI:setVisible(self.view.btn_bag_select,false)
  507. GUI:setVisible(self.view.btn_equip_select,true)
  508. GUI:setVisible(self.view.btn_datianshi_select,false)
  509. else
  510. GUI:setVisible(self.view.btn_bag_select,false)
  511. GUI:setVisible(self.view.btn_equip_select,false)
  512. GUI:setVisible(self.view.btn_datianshi_select,true)
  513. end
  514. end
  515. function this:ShowItem()
  516. GUI:UIPanel_Close("dev/ui/Chat/Item/KLUIChatBagScrollView/KLUIChatBagScrollViewItem")
  517. local bag_info = string.split(SL:GetConfig("cfg_global", 6).value, '#')
  518. self.maxHor = tonumber(bag_info[1])
  519. self.maxVet = tonumber(bag_info[2])
  520. local itemList_ = {}
  521. local show_id = EBagTileScrollViewId.Bag
  522. if self.item_select_type == 1 then
  523. local itemList = SL:GetMetaValue("BAG_DATA")[1]
  524. --SL:LogTable(itemList,true)
  525. for k, v in pairs(itemList) do
  526. local cfg_id = v.cfgId
  527. local tab = SL:GetConfig("cfg_item",cfg_id)
  528. if tab.type == 2 and tab.strPart and table.count(tab.strPart) > 0 and tab.strPart[1] >= 71 and tab.strPart[1] <= 78 then
  529. elseif tab.type == 9 then
  530. else
  531. v.datiankshi_show_type = nil
  532. itemList_[k] = v
  533. end
  534. end
  535. elseif self.item_select_type == 2 then
  536. -- local itemList_1 = SL:GetMetaValue("EQUIP_DATA")[1]
  537. local itemList_1 = SL:GetWearBarsData(EEquipWearBarType.BaseEquip)
  538. if itemList_1 then
  539. for _, item in pairs(itemList_1) do
  540. item.datiankshi_show_type = 1
  541. table.insert(itemList_, item)
  542. end
  543. end
  544. itemList_ = SL.Bag:SortItemList(itemList_) ---BagCellUtil.SortItemList(itemList_)
  545. show_id = EBagTileScrollViewId.Recover
  546. else
  547. local itemList_1 = SL:GetWearBarsData(EEquipWearBarType.Archange)
  548. if itemList_1 then
  549. for _, item in pairs(itemList_1) do
  550. item.datiankshi_show_type = 1
  551. table.insert(itemList_, item)
  552. end
  553. end
  554. local itemList = SL:GetMetaValue("BAG_DATA")[1]
  555. for k, v in pairs(itemList) do
  556. local cfg_id = v.cfgId
  557. local tab = SL:GetConfig("cfg_item",cfg_id)
  558. if tab.type == 2 and tab.strPart and table.count(tab.strPart) > 0 and tab.strPart[1] >= 71 and tab.strPart[1] <= 78 then
  559. elseif tab.type == 9 then
  560. v.datiankshi_show_type = nil
  561. table.insert(itemList_, v)
  562. else
  563. end
  564. end
  565. itemList_ = SL.Bag:SortItemList(itemList_) ---BagCellUtil.SortItemList(itemList_)
  566. show_id = EBagTileScrollViewId.Recover
  567. end
  568. GUI:UIPanel_Open("dev/ui/Chat/Item/KLUIChatBagScrollView/KLUIChatBagScrollViewItem", self.view.item_panel, self,
  569. {
  570. itemList = itemList_,
  571. id = show_id,
  572. --forbidCount = SL:GetMetaValue("BAG_FORBID_COUNT"),
  573. hor = self.maxHor,
  574. vet = self.maxVet,
  575. canDrag = false,
  576. forbidClickCallback = self.forbidClick,
  577. itemClick = self.ClickItemCallBack,
  578. callBackUI = self
  579. })
  580. end
  581. function this:btn_bag_onclick()
  582. self.item_select_type = 1
  583. self:ItemBtnShow()
  584. self:ShowItem()
  585. end
  586. function this:btn_equip_onclick()
  587. self.item_select_type = 2
  588. self:ItemBtnShow()
  589. self:ShowItem()
  590. end
  591. function this:btn_datianshi_onclick()
  592. self.item_select_type = 3
  593. self:ItemBtnShow()
  594. self:ShowItem()
  595. end
  596. function this:JoinUnion()
  597. local needLevel = SL:GetConfig("cfg_system_switch",105,"id").needLevel
  598. local myLevel = SL:GetMetaValue(EMetaVarGetKey.LEVEL)
  599. if needLevel > myLevel then
  600. SL:TipMessage( SL:GetConfig('cfg_string',449).text,1, NoticeType.NoticeMid )
  601. return
  602. end
  603. SL:CloseChatUI()
  604. SL:OpenUnion()
  605. end
  606. function this:CreateTeam()
  607. SL:CloseChatUI()
  608. GUI:UIPanel_Open("dev/ui/Team/Panel/KLUITeamMain/KLUITeamMainPanel",nil,nil,{panelType = 1})
  609. end
  610. function this:JoinTeam()
  611. SL:CloseChatUI()
  612. GUI:UIPanel_Open("dev/ui/Team/Panel/KLUITeamMain/KLUITeamMainPanel",nil,nil,{panelType = 2})
  613. end
  614. function this:NameChangeEnd(a, b,eventData)
  615. if self.isClose then
  616. return
  617. end
  618. local messageStr = eventData[1]
  619. self.submitName = messageStr
  620. if string.isNullOrEmpty(self.submitName) then
  621. self.submitId = 0
  622. return
  623. end
  624. SL:ReqFindRidByNameMessage(self.submitName)
  625. end
  626. function this:ResNameMessage(id,message)
  627. if message and message.rid then
  628. self.submitId = message.rid
  629. self:AddChatName(self.submitId)
  630. else
  631. self.submitName = ""
  632. self.submitId = 0
  633. GUI:Text_setString(self.view.private_input,"")
  634. end
  635. self.nextDoRevTime = Time.time+Time.deltaTime
  636. end
  637. function this:AddChatName(_rid)
  638. if self.submitName then
  639. if not SL.chatPrivatePlayerList then
  640. SL.chatPrivatePlayerList = {}
  641. end
  642. local id = SL:GetMetaValue(EMetaVarGetKey.USER_ID)
  643. if not SL.chatPrivatePlayerList[id] then
  644. SL.chatPrivatePlayerList[id] = {}
  645. end
  646. if not table.getValue(SL.chatPrivatePlayerList[id], _rid) then
  647. --LogError(SL.chatPrivatePlayerList[id])
  648. SL.chatPrivatePlayerList[id][_rid] = {rid = _rid,submitName = self.submitName}
  649. end
  650. self:saveData()
  651. end
  652. end
  653. function this:OpenPrivateSelect()
  654. if not SL.chatPrivatePlayerList then
  655. SL.chatPrivatePlayerList = {}
  656. end
  657. local id = SL:GetMetaValue(EMetaVarGetKey.USER_ID)
  658. if not SL.chatPrivatePlayerList[id] then
  659. SL.chatPrivatePlayerList[id] = {}
  660. end
  661. self.all_name = {}
  662. local all_id = {}
  663. for k, v in pairs(SL.chatPrivatePlayerList[id]) do
  664. table.insert(self.all_name,v)
  665. table.insert(all_id,v.rid)
  666. end
  667. -- GUI:setVisible(self.view.private_select_panel,true)
  668. -- GUI:DataListUpdateData(self.view.all_name_data_list)
  669. SL:SendLuaNetMsg(LuaMessageIdToSever.PLAYER_IS_ON_LINE_REQ, all_id)
  670. end
  671. function this:PlayerIsOnLine(id,message)
  672. for i = 1, #self.all_name, 1 do
  673. for k, v in pairs(message) do
  674. if self.all_name[i].rid == v.rid then
  675. self.all_name[i].onLine = v.onLine
  676. end
  677. end
  678. end
  679. GUI:setVisible(self.view.private_select_panel,true)
  680. GUI:DataListUpdateData(self.view.all_name_data_list)
  681. end
  682. function this:ClosePrivateSelect()
  683. GUI:setVisible(self.view.private_select_panel,false)
  684. end
  685. function this:NameDataListItemCountFunc()
  686. return #self.all_name
  687. end
  688. function this:NameDataListItemGetFunc(realIndex)
  689. local item = GUI:UIPanel_Open("dev/ui/Chat/Item/KLUIChatSelectTypeItem/KLUIChatSelectTypeItem", self.view.all_name_data_list, self, {}, true)
  690. self.btn_name_item[item.view.root] = item
  691. return item.view.root
  692. end
  693. function this:NameDataListItemInitFunc(realIndex, kmlcontrol)
  694. end
  695. function this:NameDataListItemUpdateFunc(realIndex, kmlcontrol)
  696. local data = self.all_name[realIndex + 1]
  697. self.btn_name_item[kmlcontrol]:RefreshItem(2,self,data)
  698. end
  699. function this:SelectName(data)
  700. self.submitName = data.submitName
  701. self.submitId = data.rid
  702. GUI:Text_setString(self.view.private_input,self.submitName)
  703. self:ClosePrivateSelect()
  704. self.nextDoRevTime = Time.time+Time.deltaTime
  705. end
  706. return this