KLChatStallPanel.lua 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. ---@class KLChatStallPanel:UIKmlLuaPanelBase
  2. ---@field view KLChatStallPanelView
  3. local KLChatnStallPanel = class(UIKmlLuaPanelBase)
  4. local this =KLChatnStallPanel
  5. function this:AsyncLoadUI()
  6. end
  7. ---创建时调用一次
  8. function this:Init()
  9. self.all_items = {}
  10. table.insert(self.all_items,{name = "无物品",id=1})
  11. if self.args and self.args.data and self.args.data.allgoods then
  12. for i=2, 50,1 do
  13. if self.args.data.allgoods[tostring(i-1)] then
  14. local goods = self.args.data.allgoods[tostring(i-1)]
  15. table.insert(self.all_items,{cfgid=goods.itemcfgid,name = goods.itemname,itemid=goods.itemid,id=i})
  16. end
  17. end
  18. end
  19. self.select_list = {}
  20. GUI:DataListInitData(self.view.data_list_1,function()
  21. return self:FirstDataListItemCountFunc()
  22. end,function(realIndex)
  23. return self:FirstDataListItemGetFunc(realIndex)
  24. end,function(realIndex, kmlcontrol)
  25. return self:FirstDataListItemInitFunc(realIndex, kmlcontrol)
  26. end, function(realIndex, kmlcontrol)
  27. return self:FirstDataListItemUpdateFunc(realIndex, kmlcontrol)
  28. end)
  29. self.all_item_1 = {}
  30. self.select_1 = 0
  31. GUI:DataListInitData(self.view.data_list_2,function()
  32. return self:TwoDataListItemCountFunc()
  33. end,function(realIndex)
  34. return self:TwoDataListItemGetFunc(realIndex)
  35. end,function(realIndex, kmlcontrol)
  36. return self:TwoDataListItemInitFunc(realIndex, kmlcontrol)
  37. end, function(realIndex, kmlcontrol)
  38. return self:TwoDataListItemUpdateFunc(realIndex, kmlcontrol)
  39. end)
  40. self.all_item_2 = {}
  41. self.select_2 = 0
  42. GUI:DataListInitData(self.view.data_list_3,function()
  43. return self:ThreeDataListItemCountFunc()
  44. end,function(realIndex)
  45. return self:ThreeDataListItemGetFunc(realIndex)
  46. end,function(realIndex, kmlcontrol)
  47. return self:ThreeDataListItemInitFunc(realIndex, kmlcontrol)
  48. end, function(realIndex, kmlcontrol)
  49. return self:ThreeDataListItemUpdateFunc(realIndex, kmlcontrol)
  50. end)
  51. self.all_item_3 = {}
  52. self.select_3 = 0
  53. local map_name = SL:GetConfig("cfg_map_info",self.args.pos.mapId,"id").mapname
  54. local pos_str = "摊位坐标<color=#EC8000>" .. map_name .. ":" .. self.args.pos.pointX .. "," .. self.args.pos.pointY .. "</color>"
  55. GUI:Text_setString(self.view.pos_text,pos_str)
  56. local cost_str = SL:GetConfig("cfg_global",13004,"id").value
  57. local cost_list = string.split(cost_str,'#')
  58. self.cost_cfg_id = tonumber(cost_list[1])
  59. self.cost_num = tonumber(cost_list[2])
  60. GUI:Item_setItemId(self.view.cost_item, self.cost_cfg_id)
  61. --GUI:Text_setString(self.view.cost_text, tostring(self.cost_num))
  62. local haveCount = SL:GetBagItemCount(self.cost_cfg_id)
  63. if haveCount < self.cost_num then
  64. GUI:Text_setString(self.view.cost_text, string.format('<color="#9b1818">%d</color>', tostring(self.cost_num) ))
  65. else
  66. GUI:Text_setString(self.view.cost_text, string.format('<color="#2a8430">%d</color>', tostring(self.cost_num)))
  67. end
  68. end
  69. ---界面显示时调用一次
  70. function this:Show()
  71. end
  72. ---创建或者刷新界面数据时调用
  73. function this:Refresh()
  74. end
  75. function this:Close()
  76. self:UnRegistEvents()
  77. end
  78. ---注册UI事件和服务器消息
  79. function this:RegistEvents()
  80. GUI:AddOnClickEvent(self.view.btn_close, self, self.ClosePanel)
  81. GUI:AddOnClickEvent(self.view.open1, self, self.OpenFirst)
  82. GUI:AddOnClickEvent(self.view.close1, self, self.CloseFirst)
  83. GUI:AddOnClickEvent(self.view.open2, self, self.OpenTwo)
  84. GUI:AddOnClickEvent(self.view.close2, self, self.CloseTwo)
  85. GUI:AddOnClickEvent(self.view.open3, self, self.OpenThree)
  86. GUI:AddOnClickEvent(self.view.close3, self, self.CloseThree)
  87. GUI:AddOnClickEvent(self.view.btn_send, self, self.SendChat)
  88. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_WORLD_CHAT_SUCCESS,self.RES_WORLD_CHAT_SUCCESS,self)
  89. end
  90. function this:UnRegistEvents()
  91. SL:UnRegisterLuaNetMsg(LuaMessageIdToClient.RES_WORLD_CHAT_SUCCESS,self.RES_WORLD_CHAT_SUCCESS,self)
  92. end
  93. function this:ClosePanel()
  94. GUI:UIPanel_Close("dev/outui/Stall/Panel/KLChatStall/KLChatStallPanel")
  95. end
  96. function this:SendChat()
  97. if not self.args or not self.args.data or not self.args.data.allgoods or not self.args.data.allgoods["1"] then
  98. SL:TipMessage("上架物品后才能发送喊话", 1, NoticeType.NoticeMid )
  99. return
  100. end
  101. local IsNeedAndActiveMonthCard = InfoManager.monthCardInfo:IsHaveMonthCardRights("chat")
  102. if not IsNeedAndActiveMonthCard then
  103. SL:TipMessage(SL:GetConfig('cfg_string',289).text, 1, NoticeType.NoticeMid )--"购买并使用月卡或日卡后解锁聊天系统",
  104. return
  105. end
  106. local chat_type = EChatChannelType.WORLD
  107. if chat_type == EChatChannelType.WORLD then
  108. local level = tonumber(SL:GetConfig("cfg_global", 125).value)
  109. local playLevel = SL:GetMetaValue(EMetaVarGetKey.LEVEL)
  110. if level > playLevel then
  111. SL:TipMessage(level.."级解锁世界发言", 1, NoticeType.NoticeMid )
  112. return
  113. end
  114. end
  115. local send_str = SL:GetConfig("cfg_global",13003,"id").value
  116. local map_name = SL:GetConfig("cfg_map_info",self.args.pos.mapId,"id").mapname
  117. local posStr = string.format("pos@%s,%s,%s,%s@",self.args.pos.pointX,self.args.pos.pointY,self.args.pos.mapId,self.args.pos.line)
  118. local str = string.replace(send_str,'[4]',posStr)
  119. local ChatItem = {}
  120. if #self.select_list > 0 then
  121. local num = 0
  122. local item_str = ""
  123. for i=1,#self.select_list do
  124. local curr_id = self.select_list[i]
  125. if curr_id > 1 then
  126. num = num + 1
  127. local itemid = self.all_items[curr_id].itemid
  128. table.insert(ChatItem,{lid=itemid,type=3})
  129. local emojiStr = string.format("item@%s:%s@",num,3)
  130. item_str = item_str .. emojiStr .. ","
  131. end
  132. end
  133. if not string.isNullOrEmpty(item_str) then
  134. str = item_str..str
  135. end
  136. end
  137. local my_num = SL:GetBagItemCount(self.cost_cfg_id)
  138. if my_num < self.cost_num then
  139. SL:TipMessage("道具不足", 1, NoticeType.NoticeMid )
  140. return
  141. end
  142. SL:SendChat(chat_type,str,nil,ChatItem)
  143. end
  144. function this:RES_WORLD_CHAT_SUCCESS(_,message)
  145. if message then
  146. if self.cost_cfg_id and self.cost_num then
  147. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_DELETE_BAG_ITEM,{self.cost_cfg_id,self.cost_num})
  148. self:ClosePanel()
  149. end
  150. end
  151. end
  152. function this:OpenFirst()
  153. GUI:setVisible(self.view.open1,false)
  154. GUI:setVisible(self.view.close1,true)
  155. GUI:setVisible(self.view.select_view_1,true)
  156. GUI:DataListUpdateData(self.view.data_list_1)
  157. end
  158. function this:CloseFirst()
  159. GUI:setVisible(self.view.open1,true)
  160. GUI:setVisible(self.view.close1,false)
  161. GUI:setVisible(self.view.select_view_1,false)
  162. end
  163. function this:Select(type,id)
  164. if type == 1 then
  165. if self.select_1 == id then
  166. return
  167. end
  168. if self:CheckHave(id) then
  169. SL:TipMessage("该道具已进入喊话列表,请选择其他道具",1, NoticeType.NoticeMid)
  170. GUI:setVisible(self.view.select_view_1,false)
  171. return
  172. end
  173. if id == 1 and self.select_1 ~= 1 then
  174. table.removeByValue(self.select_list,self.select_1)
  175. elseif id ~= 1 and self.select_1 == 1 then
  176. table.insert(self.select_list,id)
  177. else
  178. table.removeByValue(self.select_list,self.select_1)
  179. table.insert(self.select_list,id)
  180. end
  181. self.select_1 = id
  182. local name = self.all_items[self.select_1].name
  183. GUI:Text_setString(self.view.notice_text_1,name)
  184. self:CloseFirst()
  185. elseif type == 2 then
  186. if self.select_2 == id then
  187. return
  188. end
  189. if self:CheckHave(id) then
  190. SL:TipMessage("该道具已进入喊话列表,请选择其他道具",1, NoticeType.NoticeMid)
  191. GUI:setVisible(self.view.select_view_2,false)
  192. return
  193. end
  194. if id == 1 and self.select_2 ~= 1 then
  195. table.removeByValue(self.select_list,self.select_2)
  196. elseif id ~= 1 and self.select_2 == 1 then
  197. table.insert(self.select_list,id)
  198. else
  199. table.removeByValue(self.select_list,self.select_2)
  200. table.insert(self.select_list,id)
  201. end
  202. self.select_2 = id
  203. local name = self.all_items[self.select_2].name
  204. GUI:Text_setString(self.view.notice_text_2,name)
  205. self:CloseTwo()
  206. elseif type == 3 then
  207. if self.select_3 == id then
  208. return
  209. end
  210. if self:CheckHave(id) then
  211. SL:TipMessage("该道具已进入喊话列表,请选择其他道具",1, NoticeType.NoticeMid)
  212. GUI:setVisible(self.view.select_view_3,false)
  213. return
  214. end
  215. if id == 1 and self.select_3 ~= 1 then
  216. table.removeByValue(self.select_list,self.select_3)
  217. elseif id ~= 1 and self.select_3 == 1 then
  218. table.insert(self.select_list,id)
  219. else
  220. table.removeByValue(self.select_list,self.select_3)
  221. table.insert(self.select_list,id)
  222. end
  223. self.select_3 = id
  224. local name = self.all_items[self.select_3].name
  225. GUI:Text_setString(self.view.notice_text_3,name)
  226. self:CloseThree()
  227. end
  228. end
  229. function this:CheckHave(id)
  230. for i, v in ipairs(self.select_list) do
  231. if v == id then
  232. return true
  233. end
  234. end
  235. return false
  236. end
  237. function this:FirstDataListItemCountFunc()
  238. return #self.all_items
  239. end
  240. function this:FirstDataListItemGetFunc(realIndex)
  241. local item = GUI:UIPanel_Open("dev/outui/Stall/Item/KLStallChatSelectItem/KLStallChatSelectItem",self.view.data_list_1,self,{},true)
  242. self.all_item_1[realIndex+1] = item
  243. return item.view.root
  244. end
  245. function this:FirstDataListItemInitFunc(realIndex, kmlcontrol)
  246. end
  247. function this:FirstDataListItemUpdateFunc(realIndex, kmlcontrol)
  248. local data = self.all_items[realIndex + 1]
  249. self.all_item_1[realIndex+1]:RefreshItem({message=data,type=1},self.select_1,self)
  250. end
  251. --第二个物品
  252. function this:OpenTwo()
  253. GUI:setVisible(self.view.open2,false)
  254. GUI:setVisible(self.view.close2,true)
  255. GUI:setVisible(self.view.select_view_2,true)
  256. GUI:DataListUpdateData(self.view.data_list_2)
  257. end
  258. function this:CloseTwo()
  259. GUI:setVisible(self.view.open2,true)
  260. GUI:setVisible(self.view.close2,false)
  261. GUI:setVisible(self.view.select_view_2,false)
  262. end
  263. function this:TwoDataListItemCountFunc()
  264. return #self.all_items
  265. end
  266. function this:TwoDataListItemGetFunc(realIndex)
  267. local item = GUI:UIPanel_Open("dev/outui/Stall/Item/KLStallChatSelectItem/KLStallChatSelectItem",self.view.data_list_2,self,{},true)
  268. self.all_item_1[realIndex+1] = item
  269. return item.view.root
  270. end
  271. function this:TwoDataListItemInitFunc(realIndex, kmlcontrol)
  272. end
  273. function this:TwoDataListItemUpdateFunc(realIndex, kmlcontrol)
  274. local data = self.all_items[realIndex + 1]
  275. self.all_item_1[realIndex+1]:RefreshItem({message=data,type=2},self.select_2,self)
  276. end
  277. --第3个物品
  278. function this:OpenThree()
  279. GUI:setVisible(self.view.open3,false)
  280. GUI:setVisible(self.view.close3,true)
  281. GUI:setVisible(self.view.select_view_3,true)
  282. GUI:DataListUpdateData(self.view.data_list_3)
  283. end
  284. function this:CloseThree()
  285. GUI:setVisible(self.view.open3,true)
  286. GUI:setVisible(self.view.close3,false)
  287. GUI:setVisible(self.view.select_view_3,false)
  288. end
  289. function this:ThreeDataListItemCountFunc()
  290. return #self.all_items
  291. end
  292. function this:ThreeDataListItemGetFunc(realIndex)
  293. local item = GUI:UIPanel_Open("dev/outui/Stall/Item/KLStallChatSelectItem/KLStallChatSelectItem",self.view.data_list_3,self,{},true)
  294. self.all_item_1[realIndex+1] = item
  295. return item.view.root
  296. end
  297. function this:ThreeDataListItemInitFunc(realIndex, kmlcontrol)
  298. end
  299. function this:ThreeDataListItemUpdateFunc(realIndex, kmlcontrol)
  300. local data = self.all_items[realIndex + 1]
  301. self.all_item_1[realIndex+1]:RefreshItem({message=data,type=3},self.select_3,self)
  302. end
  303. return this