KLOpenStallPanel.lua 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. ---@class KLOpenStallPanel:UIKmlLuaPanelBase
  2. ---@field view KLOpenStallPanelView
  3. local KLOpenStallPanel = class(UIKmlLuaPanelBase)
  4. local this =KLOpenStallPanel
  5. function this:AsyncLoadUI()
  6. end
  7. ---创建时调用一次
  8. function this:Init()
  9. GUI:DataListInitData(self.view.notice_data_list,function()
  10. return self:NoticeDataListItemCountFunc()
  11. end,function(realIndex)
  12. return self:NoticeDataListItemGetFunc(realIndex)
  13. end,function(realIndex, kmlcontrol)
  14. return self:NoticeDataListItemInitFunc(realIndex, kmlcontrol)
  15. end, function(realIndex, kmlcontrol)
  16. return self:NoticeDataListItemUpdateFunc(realIndex, kmlcontrol)
  17. end)
  18. self.notice_all_item = {}
  19. self.max_notive = SL:GetConfig("cfg_global",13002).value
  20. self.max_notive = tonumber(self.max_notive)
  21. local notice = SL:GetConfig("cfg_global",13001).value
  22. self.all_notice = SL:Split(notice, '#')
  23. self.notice_select = {}
  24. GUI:DataListInitData(self.view.city_data_list,function()
  25. return self:CityDataListItemCountFunc()
  26. end,function(realIndex)
  27. return self:CityDataListItemGetFunc(realIndex)
  28. end,function(realIndex, kmlcontrol)
  29. return self:CityeDataListItemInitFunc(realIndex, kmlcontrol)
  30. end, function(realIndex, kmlcontrol)
  31. return self:CityDataListItemUpdateFunc(realIndex, kmlcontrol)
  32. end)
  33. self.city_all_item = {}
  34. self.all_city = {}
  35. local allcity = SL:GetConfigTable("cfg_spot")
  36. local myLevel = SL:GetMetaValue(EMetaVarGetKey.LEVEL)
  37. for i=1,#allcity,1 do
  38. if allcity[i].level <= myLevel then
  39. table.insert(self.all_city,allcity[i])
  40. end
  41. end
  42. self.select_city = 0
  43. GUI:DataListInitData(self.view.time_data_list,function()
  44. return self:timeDataListItemCountFunc()
  45. end,function(realIndex)
  46. return self:timeDataListItemGetFunc(realIndex)
  47. end,function(realIndex, kmlcontrol)
  48. return self:timeeDataListItemInitFunc(realIndex, kmlcontrol)
  49. end, function(realIndex, kmlcontrol)
  50. return self:timeDataListItemUpdateFunc(realIndex, kmlcontrol)
  51. end)
  52. self.time_all_item = {}
  53. self.all_time = {}
  54. self.select_time = 0
  55. self.pos_data = nil
  56. GUI:Text_setString(self.view.shuoming,"说明:摆摊后将在主城出现分身进行摆摊,摊位和交易行中同步出售上架道具")
  57. end
  58. ---注册UI事件和服务器消息
  59. function this:RegistEvents()
  60. end
  61. ---界面显示时调用一次
  62. function this:Show()
  63. end
  64. ---创建或者刷新界面数据时调用
  65. function this:Refresh()
  66. end
  67. function this:Close()
  68. end
  69. ---注册UI事件和服务器消息
  70. function this:RegistEvents()
  71. GUI:AddOnClickEvent(self.view.btn_close, self, self.ClosePanel)
  72. GUI:AddOnClickEvent(self.view.open1, self, self.OpenNotice)
  73. GUI:AddOnClickEvent(self.view.close1, self, self.CloseNotice)
  74. GUI:AddOnClickEvent(self.view.open2, self, self.OpenCity)
  75. GUI:AddOnClickEvent(self.view.close2, self, self.CloseCity)
  76. GUI:AddOnClickEvent(self.view.open4, self, self.Opentime)
  77. GUI:AddOnClickEvent(self.view.close4, self, self.Closetime)
  78. GUI:AddOnClickEvent(self.view.add_btn, self, self.costAddBtn)
  79. GUI:AddOnClickEvent(self.view.btn_start, self, self.StartStall)
  80. GUI:AddOnClickEvent(self.view.select_view_1_btn, self, self.CloseNotice)
  81. GUI:AddOnClickEvent(self.view.select_view_2_btn, self, self.CloseCity)
  82. GUI:AddOnClickEvent(self.view.select_view_4_btn, self, self.Closetime)
  83. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_STALL_POSITION,self.RES_STALL_POSITION,self)
  84. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_START_STALL,self.RES_START_STALL,self)
  85. end
  86. function this:ClosePanel()
  87. GUI:UIPanel_Close("dev/outui/Stall/Panel/KLOpenStall/KLOpenStallPanel")
  88. end
  89. ----摆摊公告
  90. function this:OpenNotice()
  91. GUI:setVisible(self.view.open1,false)
  92. GUI:setVisible(self.view.close1,true)
  93. GUI:setVisible(self.view.select_view_1,true)
  94. GUI:DataListUpdateData(self.view.notice_data_list)
  95. self:UpdateNotice()
  96. end
  97. function this:CloseNotice()
  98. GUI:setVisible(self.view.open1,true)
  99. GUI:setVisible(self.view.close1,false)
  100. GUI:setVisible(self.view.select_view_1,false)
  101. end
  102. function this:NoticeDataListItemCountFunc()
  103. return #self.all_notice
  104. end
  105. function this:NoticeDataListItemGetFunc(realIndex)
  106. local item = GUI:UIPanel_Open("dev/outui/Stall/Item/KLStallNoticeSelectItem/KLStallNoticeSelectItem",self.view.notice_data_list,self,{},true)
  107. self.notice_all_item[realIndex+1] = item
  108. return item.view.root
  109. end
  110. function this:NoticeDataListItemInitFunc(realIndex, kmlcontrol)
  111. end
  112. function this:NoticeDataListItemUpdateFunc(realIndex, kmlcontrol)
  113. local data = self.all_notice[realIndex + 1]
  114. self.notice_all_item[realIndex+1]:RefreshItem({index=realIndex+1,value=data},self.notice_select,self)
  115. end
  116. function this:AddSelectNotict(select_index)
  117. local is_have = false
  118. for i=1,#self.notice_select,1 do
  119. if self.notice_select[i] == select_index then
  120. is_have = true
  121. break
  122. end
  123. end
  124. if is_have then
  125. return
  126. end
  127. if self.max_notive <= #self.notice_select then
  128. --SL:TipMessage({ "关键词数量已达上限",1, NoticeType.NoticeMid})
  129. SL:TipMessage( SL:GetConfig('cfg_string', 330).text, 1, NoticeType.NoticeMid )
  130. return
  131. end
  132. table.insert(self.notice_select,select_index)
  133. self:RefreshNotice()
  134. end
  135. function this:CancelSelectNotict(select_index)
  136. local is_have = false
  137. for i=1,#self.notice_select,1 do
  138. if self.notice_select[i] == select_index then
  139. is_have = true
  140. break
  141. end
  142. end
  143. if not is_have then
  144. return
  145. end
  146. table.removeByValue(self.notice_select,select_index)
  147. self:RefreshNotice()
  148. end
  149. function this:RefreshNotice()
  150. for i=1,#self.notice_all_item,1 do
  151. self.notice_all_item[i]:CheckShow()
  152. end
  153. self:UpdateNotice()
  154. end
  155. function this:UpdateNotice()
  156. local str = ""
  157. for i=1,#self.notice_select,1 do
  158. local ind = self.notice_select[i]
  159. str = str .. self.all_notice[ind] .. " "
  160. end
  161. GUI:Text_setString(self.view.notice_text_1,str)
  162. end
  163. ----摆摊城市
  164. function this:OpenCity()
  165. GUI:setVisible(self.view.open2,false)
  166. GUI:setVisible(self.view.close2,true)
  167. GUI:setVisible(self.view.select_view_2,true)
  168. GUI:DataListUpdateData(self.view.city_data_list)
  169. self:UpdateCity()
  170. end
  171. function this:CloseCity()
  172. GUI:setVisible(self.view.open2,true)
  173. GUI:setVisible(self.view.close2,false)
  174. GUI:setVisible(self.view.select_view_2,false)
  175. end
  176. function this:SelectCity(id)
  177. self.select_city = id
  178. self:UpdateCity()
  179. self:CloseCity()
  180. self:Checktime()
  181. self:Updatetime()
  182. local _id = self.all_city[self.select_city].id
  183. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_STALL_POSITION, { id = _id })
  184. end
  185. function this:UpdateCity()
  186. if not self.select_city or self.select_city == 0 then
  187. GUI:Text_setString(self.view.notice_text_2,"")
  188. return
  189. end
  190. local map_id = self.all_city[self.select_city].map
  191. local mapname = SL:GetConfig("cfg_map_info",map_id,"id").mapname
  192. GUI:Text_setString(self.view.notice_text_2,mapname)
  193. end
  194. function this:CityDataListItemCountFunc()
  195. return #self.all_city
  196. end
  197. function this:CityDataListItemGetFunc(realIndex)
  198. local item = GUI:UIPanel_Open("dev/outui/Stall/Item/KLStallCitySelectItem/KLStallCitySelectItem",self.view.city_data_list,self,{},true)
  199. self.city_all_item[realIndex+1] = item
  200. return item.view.root
  201. end
  202. function this:CityeDataListItemInitFunc(realIndex, kmlcontrol)
  203. end
  204. function this:CityDataListItemUpdateFunc(realIndex, kmlcontrol)
  205. local data = self.all_city[realIndex + 1]
  206. self.city_all_item[realIndex+1]:RefreshItem({index=realIndex+1,message=data},self.select_city,self)
  207. end
  208. ----摆摊时间
  209. function this:Opentime()
  210. GUI:setVisible(self.view.open4,false)
  211. GUI:setVisible(self.view.close4,true)
  212. GUI:setVisible(self.view.select_view_4,true)
  213. self:Updatetime()
  214. GUI:DataListUpdateData(self.view.time_data_list)
  215. end
  216. function this:Closetime()
  217. GUI:setVisible(self.view.open4,true)
  218. GUI:setVisible(self.view.close4,false)
  219. GUI:setVisible(self.view.select_view_4,false)
  220. end
  221. function this:SelectTime(id)
  222. self.select_time = id
  223. --self:Checktime()
  224. self:Updatetime()
  225. self:Closetime()
  226. end
  227. function this:Updatetime()
  228. if not self.select_city or self.select_city == 0 then
  229. GUI:Text_setString(self.view.notice_text_3,"")
  230. return
  231. end
  232. if not self.select_time or self.select_time == 0 then
  233. GUI:Text_setString(self.view.notice_text_3,"")
  234. return
  235. end
  236. local time = self.all_time[self.select_time].time
  237. GUI:Text_setString(self.view.notice_text_4,time.."小时")
  238. self:UpdateCost()
  239. end
  240. function this:Checktime()
  241. if self.select_city or self.select_city == 0 then
  242. local tab = self.all_city[self.select_city]
  243. self.all_time = {}
  244. for i=1,#tab.cost,1 do
  245. local one_tab = tab.cost[i]
  246. table.insert(self.all_time,{id=i,time = one_tab[1],cfg_id = one_tab[2],num=one_tab[3]})
  247. end
  248. self.select_time = 1
  249. else
  250. self.all_time = {}
  251. self.select_time = 0
  252. end
  253. end
  254. function this:timeDataListItemCountFunc()
  255. return #self.all_time
  256. end
  257. function this:timeDataListItemGetFunc(realIndex)
  258. local item = GUI:UIPanel_Open("dev/outui/Stall/Item/KLStalltimeSelectItem/KLStalltimeSelectItem",self.view.time_data_list,self,{},true)
  259. self.time_all_item[realIndex+1] = item
  260. return item.view.root
  261. end
  262. function this:timeeDataListItemInitFunc(realIndex, kmlcontrol)
  263. end
  264. function this:timeDataListItemUpdateFunc(realIndex, kmlcontrol)
  265. local data = self.all_time[realIndex + 1]
  266. self.time_all_item[realIndex+1]:RefreshItem({index=realIndex+1,message=data},self.select_time,self)
  267. end
  268. function this:RES_STALL_POSITION(id,message)
  269. if not message then
  270. return
  271. end
  272. if not self.select_city or self.select_city == 0 then
  273. GUI:Text_setString(self.view.notice_text_2,"")
  274. return
  275. end
  276. local map_id = self.all_city[self.select_city].map
  277. local maxSpot = self.all_city[self.select_city].maxSpot
  278. local mapname = SL:GetConfig("cfg_map_info",map_id,"id").mapname
  279. local str = mapname..": "..message.pointx .. "," .. message.pointy
  280. GUI:Text_setString(self.view.notice_text_3,str)
  281. local shengyu = maxSpot - message.count
  282. local shengyu_str = "(空余摊位".. shengyu .."/" .. maxSpot ..")"
  283. if shengyu <= 0 then
  284. shengyu_str = "<color=#ff2323>" .. shengyu_str .. "</color>"
  285. end
  286. self.pos_data = message
  287. GUI:Text_setString(self.view.last_num,shengyu_str)
  288. end
  289. function this:UpdateCost()
  290. local cfg_id = self.all_time[self.select_time].cfg_id
  291. local name = SL:GetConfig("cfg_item",cfg_id,"id").name
  292. GUI:Text_setString(self.view.notice_text_5,name)
  293. local needCount = self.all_time[self.select_time].num
  294. local haveCount = SL:GetBagItemCount(cfg_id)
  295. if haveCount < needCount then
  296. GUI:Text_setString(self.view.cost_num, string.format('<color="#9b1818">%d</color>/%d', haveCount, needCount))
  297. else
  298. GUI:Text_setString(self.view.cost_num, string.format('<color="#2a8430">%d</color>/%d', haveCount, needCount))
  299. end
  300. GUI:Item_setItemId(self.view.cost_item, cfg_id)
  301. end
  302. function this:costAddBtn()
  303. if not self.select_city or self.select_city == 0 then
  304. return
  305. end
  306. if not self.select_time or self.select_time == 0 then
  307. return
  308. end
  309. local cfg_id = self.all_time[self.select_time].cfg_id
  310. SL:CommonItemGetPath(nil, cfg_id)
  311. end
  312. function this:StartStall()
  313. if not self.notice_select or #self.notice_select < 1 then
  314. SL:TipMessage("请选择摆摊公告",1, NoticeType.NoticeMid)
  315. return
  316. end
  317. if not self.select_city or self.select_city == 0 then
  318. SL:TipMessage("请选择摆摊城市",1, NoticeType.NoticeMid)
  319. return
  320. end
  321. if not self.pos_data then
  322. SL:TipMessage("请选择摆摊位置",1, NoticeType.NoticeMid)
  323. return
  324. end
  325. if not self.select_time or self.select_time == 0 then
  326. SL:TipMessage("请选择摆时长",1, NoticeType.NoticeMid)
  327. return
  328. end
  329. local _id = self.all_city[self.select_city].id
  330. local notice = _id .. "#"
  331. for i=1,#self.notice_select,1 do
  332. local ind = self.notice_select[i]
  333. notice = notice .. self.all_notice[ind]
  334. if i < #self.notice_select then
  335. notice = notice .. " "
  336. end
  337. end
  338. local maxSpot = self.all_city[self.select_city].maxSpot
  339. if self.pos_data.count >= maxSpot then
  340. SL:TipMessage("摊位数量不足",1, NoticeType.NoticeMid)
  341. return
  342. end
  343. -- local map_id = self.all_city[self.select_city].map
  344. -- local serverType = SL:GetConfig("cfg_map_info",map_id,"id").serverType
  345. -- if serverType == 2 then
  346. -- if not self:CrossServerStall() then
  347. -- return
  348. -- end
  349. -- end
  350. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_START_STALL, { id = _id,title=notice, cost=self.select_time,pointX=self.pos_data.pointx,pointY=self.pos_data.pointy})
  351. end
  352. function this:RES_START_STALL(id,message)
  353. if message then
  354. self:ClosePanel()
  355. else
  356. end
  357. end
  358. function this:CrossServerStall()
  359. local mapid = SL:GetConfig("cfg_activity_rule",20001).mapid[1]
  360. local tab = SL:GetConfig("cfg_map_info",mapid)
  361. local message = ""
  362. self.level_lock = false
  363. self.strength_lock = false
  364. self.append_lock = false
  365. self.open_level = 0
  366. if tab.condition and #tab.condition > 0 then
  367. local condition = tab.condition
  368. local level = condition[1]
  369. local strength_level = condition[2]
  370. local append_level = condition[3]
  371. local player_level = SL:GetMetaValue("LEVEL")
  372. local all_strength_level = EquipFunc.GetAllStrengthLevel()
  373. local all_append_level = EquipFunc.GetAllAppendLevel()
  374. if player_level < level then
  375. message = message .. "等级" .. level .. "级"
  376. self.level_lock = true
  377. self.open_level = level
  378. end
  379. if all_strength_level < strength_level then
  380. if not string.isNullOrEmpty(message) then
  381. message = message .. ","
  382. end
  383. message = message .. "强化总等级" .. strength_level
  384. self.strength_lock = true
  385. end
  386. if all_append_level < append_level then
  387. if not string.isNullOrEmpty(message) then
  388. message = message .. ","
  389. end
  390. message = message .. "追加总等级" .. append_level
  391. self.append_lock = true
  392. end
  393. if not string.isNullOrEmpty(message) then
  394. message = message .. "可进入"
  395. end
  396. end
  397. if self.level_lock then
  398. SL:TipMessage( self.open_level.."级开启,无法进入", 1, NoticeType.NoticeMid )
  399. return
  400. end
  401. if self.strength_lock then
  402. SL:TipMessage( SL:GetConfig('cfg_string',257).text,1, NoticeType.NoticeMid )--"全身强化等级不足,无法进入",
  403. return
  404. end
  405. if self.append_lock then
  406. SL:TipMessage(SL:GetConfig('cfg_string',257).text, 1, NoticeType.NoticeMid )--"全身追加等级不足,无法进入",
  407. return
  408. end
  409. -- if not self:IsHavePrivilege() then
  410. -- SL:TipMessage({ SL:GetConfig('cfg_string',258).text, 1, NoticeType.NoticeLeftBottom })--"<color=#426ECC>月卡时间不足,无法使用地图传送功能</color>",
  411. -- return
  412. -- end
  413. return true
  414. end
  415. function this:IsHavePrivilege()
  416. if InfoManager.monthCardInfo.IsGetMonthCard or InfoManager.monthCardInfo.IsGetDailyCard then
  417. --有月卡或是日卡
  418. return true
  419. end
  420. return false
  421. end
  422. return this