---@class KLChatStallPanel:UIKmlLuaPanelBase
---@field view KLChatStallPanelView
local KLChatnStallPanel = class(UIKmlLuaPanelBase)
local this =KLChatnStallPanel
function this:AsyncLoadUI()
end
---创建时调用一次
function this:Init()
self.all_items = {}
table.insert(self.all_items,{name = "无物品",id=1})
if self.args and self.args.data and self.args.data.allgoods then
for i=2, 50,1 do
if self.args.data.allgoods[tostring(i-1)] then
local goods = self.args.data.allgoods[tostring(i-1)]
table.insert(self.all_items,{cfgid=goods.itemcfgid,name = goods.itemname,itemid=goods.itemid,id=i})
end
end
end
self.select_list = {}
GUI:DataListInitData(self.view.data_list_1,function()
return self:FirstDataListItemCountFunc()
end,function(realIndex)
return self:FirstDataListItemGetFunc(realIndex)
end,function(realIndex, kmlcontrol)
return self:FirstDataListItemInitFunc(realIndex, kmlcontrol)
end, function(realIndex, kmlcontrol)
return self:FirstDataListItemUpdateFunc(realIndex, kmlcontrol)
end)
self.all_item_1 = {}
self.select_1 = 0
GUI:DataListInitData(self.view.data_list_2,function()
return self:TwoDataListItemCountFunc()
end,function(realIndex)
return self:TwoDataListItemGetFunc(realIndex)
end,function(realIndex, kmlcontrol)
return self:TwoDataListItemInitFunc(realIndex, kmlcontrol)
end, function(realIndex, kmlcontrol)
return self:TwoDataListItemUpdateFunc(realIndex, kmlcontrol)
end)
self.all_item_2 = {}
self.select_2 = 0
GUI:DataListInitData(self.view.data_list_3,function()
return self:ThreeDataListItemCountFunc()
end,function(realIndex)
return self:ThreeDataListItemGetFunc(realIndex)
end,function(realIndex, kmlcontrol)
return self:ThreeDataListItemInitFunc(realIndex, kmlcontrol)
end, function(realIndex, kmlcontrol)
return self:ThreeDataListItemUpdateFunc(realIndex, kmlcontrol)
end)
self.all_item_3 = {}
self.select_3 = 0
local map_name = SL:GetConfig("cfg_map_info",self.args.pos.mapId,"id").mapname
local pos_str = "摊位坐标" .. map_name .. ":" .. self.args.pos.pointX .. "," .. self.args.pos.pointY .. ""
GUI:Text_setString(self.view.pos_text,pos_str)
local cost_str = SL:GetConfig("cfg_global",13004,"id").value
local cost_list = string.split(cost_str,'#')
self.cost_cfg_id = tonumber(cost_list[1])
self.cost_num = tonumber(cost_list[2])
GUI:Item_setItemId(self.view.cost_item, self.cost_cfg_id)
--GUI:Text_setString(self.view.cost_text, tostring(self.cost_num))
local haveCount = SL:GetBagItemCount(self.cost_cfg_id)
if haveCount < self.cost_num then
GUI:Text_setString(self.view.cost_text, string.format('%d', tostring(self.cost_num) ))
else
GUI:Text_setString(self.view.cost_text, string.format('%d', tostring(self.cost_num)))
end
end
---界面显示时调用一次
function this:Show()
end
---创建或者刷新界面数据时调用
function this:Refresh()
end
function this:Close()
self:UnRegistEvents()
end
---注册UI事件和服务器消息
function this:RegistEvents()
GUI:AddOnClickEvent(self.view.btn_close, self, self.ClosePanel)
GUI:AddOnClickEvent(self.view.open1, self, self.OpenFirst)
GUI:AddOnClickEvent(self.view.close1, self, self.CloseFirst)
GUI:AddOnClickEvent(self.view.open2, self, self.OpenTwo)
GUI:AddOnClickEvent(self.view.close2, self, self.CloseTwo)
GUI:AddOnClickEvent(self.view.open3, self, self.OpenThree)
GUI:AddOnClickEvent(self.view.close3, self, self.CloseThree)
GUI:AddOnClickEvent(self.view.btn_send, self, self.SendChat)
SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_WORLD_CHAT_SUCCESS,self.RES_WORLD_CHAT_SUCCESS,self)
end
function this:UnRegistEvents()
SL:UnRegisterLuaNetMsg(LuaMessageIdToClient.RES_WORLD_CHAT_SUCCESS,self.RES_WORLD_CHAT_SUCCESS,self)
end
function this:ClosePanel()
GUI:UIPanel_Close("dev/outui/Stall/Panel/KLChatStall/KLChatStallPanel")
end
function this:SendChat()
if not self.args or not self.args.data or not self.args.data.allgoods or not self.args.data.allgoods["1"] then
SL:TipMessage("上架物品后才能发送喊话", 1, NoticeType.NoticeMid )
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 = EChatChannelType.WORLD
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 send_str = SL:GetConfig("cfg_global",13003,"id").value
local map_name = SL:GetConfig("cfg_map_info",self.args.pos.mapId,"id").mapname
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)
local str = string.replace(send_str,'[4]',posStr)
local ChatItem = {}
if #self.select_list > 0 then
local num = 0
local item_str = ""
for i=1,#self.select_list do
local curr_id = self.select_list[i]
if curr_id > 1 then
num = num + 1
local itemid = self.all_items[curr_id].itemid
table.insert(ChatItem,{lid=itemid,type=3})
local emojiStr = string.format("item@%s:%s@",num,3)
item_str = item_str .. emojiStr .. ","
end
end
if not string.isNullOrEmpty(item_str) then
str = item_str..str
end
end
local my_num = SL:GetBagItemCount(self.cost_cfg_id)
if my_num < self.cost_num then
SL:TipMessage("道具不足", 1, NoticeType.NoticeMid )
return
end
SL:SendChat(chat_type,str,nil,ChatItem)
end
function this:RES_WORLD_CHAT_SUCCESS(_,message)
if message then
if self.cost_cfg_id and self.cost_num then
SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_DELETE_BAG_ITEM,{self.cost_cfg_id,self.cost_num})
self:ClosePanel()
end
end
end
function this:OpenFirst()
GUI:setVisible(self.view.open1,false)
GUI:setVisible(self.view.close1,true)
GUI:setVisible(self.view.select_view_1,true)
GUI:DataListUpdateData(self.view.data_list_1)
end
function this:CloseFirst()
GUI:setVisible(self.view.open1,true)
GUI:setVisible(self.view.close1,false)
GUI:setVisible(self.view.select_view_1,false)
end
function this:Select(type,id)
if type == 1 then
if self.select_1 == id then
return
end
if self:CheckHave(id) then
SL:TipMessage("该道具已进入喊话列表,请选择其他道具",1, NoticeType.NoticeMid)
GUI:setVisible(self.view.select_view_1,false)
return
end
if id == 1 and self.select_1 ~= 1 then
table.removeByValue(self.select_list,self.select_1)
elseif id ~= 1 and self.select_1 == 1 then
table.insert(self.select_list,id)
else
table.removeByValue(self.select_list,self.select_1)
table.insert(self.select_list,id)
end
self.select_1 = id
local name = self.all_items[self.select_1].name
GUI:Text_setString(self.view.notice_text_1,name)
self:CloseFirst()
elseif type == 2 then
if self.select_2 == id then
return
end
if self:CheckHave(id) then
SL:TipMessage("该道具已进入喊话列表,请选择其他道具",1, NoticeType.NoticeMid)
GUI:setVisible(self.view.select_view_2,false)
return
end
if id == 1 and self.select_2 ~= 1 then
table.removeByValue(self.select_list,self.select_2)
elseif id ~= 1 and self.select_2 == 1 then
table.insert(self.select_list,id)
else
table.removeByValue(self.select_list,self.select_2)
table.insert(self.select_list,id)
end
self.select_2 = id
local name = self.all_items[self.select_2].name
GUI:Text_setString(self.view.notice_text_2,name)
self:CloseTwo()
elseif type == 3 then
if self.select_3 == id then
return
end
if self:CheckHave(id) then
SL:TipMessage("该道具已进入喊话列表,请选择其他道具",1, NoticeType.NoticeMid)
GUI:setVisible(self.view.select_view_3,false)
return
end
if id == 1 and self.select_3 ~= 1 then
table.removeByValue(self.select_list,self.select_3)
elseif id ~= 1 and self.select_3 == 1 then
table.insert(self.select_list,id)
else
table.removeByValue(self.select_list,self.select_3)
table.insert(self.select_list,id)
end
self.select_3 = id
local name = self.all_items[self.select_3].name
GUI:Text_setString(self.view.notice_text_3,name)
self:CloseThree()
end
end
function this:CheckHave(id)
for i, v in ipairs(self.select_list) do
if v == id then
return true
end
end
return false
end
function this:FirstDataListItemCountFunc()
return #self.all_items
end
function this:FirstDataListItemGetFunc(realIndex)
local item = GUI:UIPanel_Open("dev/outui/Stall/Item/KLStallChatSelectItem/KLStallChatSelectItem",self.view.data_list_1,self,{},true)
self.all_item_1[realIndex+1] = item
return item.view.root
end
function this:FirstDataListItemInitFunc(realIndex, kmlcontrol)
end
function this:FirstDataListItemUpdateFunc(realIndex, kmlcontrol)
local data = self.all_items[realIndex + 1]
self.all_item_1[realIndex+1]:RefreshItem({message=data,type=1},self.select_1,self)
end
--第二个物品
function this:OpenTwo()
GUI:setVisible(self.view.open2,false)
GUI:setVisible(self.view.close2,true)
GUI:setVisible(self.view.select_view_2,true)
GUI:DataListUpdateData(self.view.data_list_2)
end
function this:CloseTwo()
GUI:setVisible(self.view.open2,true)
GUI:setVisible(self.view.close2,false)
GUI:setVisible(self.view.select_view_2,false)
end
function this:TwoDataListItemCountFunc()
return #self.all_items
end
function this:TwoDataListItemGetFunc(realIndex)
local item = GUI:UIPanel_Open("dev/outui/Stall/Item/KLStallChatSelectItem/KLStallChatSelectItem",self.view.data_list_2,self,{},true)
self.all_item_1[realIndex+1] = item
return item.view.root
end
function this:TwoDataListItemInitFunc(realIndex, kmlcontrol)
end
function this:TwoDataListItemUpdateFunc(realIndex, kmlcontrol)
local data = self.all_items[realIndex + 1]
self.all_item_1[realIndex+1]:RefreshItem({message=data,type=2},self.select_2,self)
end
--第3个物品
function this:OpenThree()
GUI:setVisible(self.view.open3,false)
GUI:setVisible(self.view.close3,true)
GUI:setVisible(self.view.select_view_3,true)
GUI:DataListUpdateData(self.view.data_list_3)
end
function this:CloseThree()
GUI:setVisible(self.view.open3,true)
GUI:setVisible(self.view.close3,false)
GUI:setVisible(self.view.select_view_3,false)
end
function this:ThreeDataListItemCountFunc()
return #self.all_items
end
function this:ThreeDataListItemGetFunc(realIndex)
local item = GUI:UIPanel_Open("dev/outui/Stall/Item/KLStallChatSelectItem/KLStallChatSelectItem",self.view.data_list_3,self,{},true)
self.all_item_1[realIndex+1] = item
return item.view.root
end
function this:ThreeDataListItemInitFunc(realIndex, kmlcontrol)
end
function this:ThreeDataListItemUpdateFunc(realIndex, kmlcontrol)
local data = self.all_items[realIndex + 1]
self.all_item_1[realIndex+1]:RefreshItem({message=data,type=3},self.select_3,self)
end
return this