--[[@------------------------------------------------------------------ @description:市场 @author:HWR ----------------------------------------------------------------------]] MarketModel = MarketModel or BaseClass(BaseModel) MarketModel.REQUEST_CCMD_EVENT = "MarketModel.REQUEST_CCMD_EVENT" MarketModel.UPDATE_MARKET_TAB_RED_DOT = "MarketModel.UPDATE_MARKET_TAB_RED_DOT" --更新市场红点 MarketModel.ANS_MARKET_TAB_RED_DOT = "MarketModel.ANS_MARKET_TAB_RED_DOT" --响应更新市场红点 MarketModel.OPEN_MARKET_BUY_VIEW = "MarketModel.OPEN_MARKET_BUY_VIEW" --打开市场的购买界面 MarketModel.MARKET_BUY_SUCCESS = "MarketModel.MARKET_BUY_SUCCESS" --竞拍成功刷新界面 MarketModel.CLOSE_MARKET_UP_SHELVES_VIEW = "MarketModel.CLOSE_MARKET_UP_SHELVES_VIEW" --关闭上架界面 MarketModel.UPDATE_ONE_GOODS_BY_PRICE_UP = "MarketModel.UPDATE_ONE_GOODS_BY_PRICE_UP" --因为竞价被超过所以手动刷新商品 --一口价 竞拍 MarketModel.ONE_PRICE_TYPE = 1 MarketModel.AUCTION_PRICE_TYPE = 2 -- 社团类型,世界类型,个人类型 MarketModel.AUCTION_WORLD_TYPE = 1 MarketModel.AUCTION_GUILD_TYPE = 2 MarketModel.VER_TAB_TYPE = { WORLD_TYPE = 1,--世界拍卖 ATTENTION_TYPE = 2,--上架提醒 GUILD_TYPE = 3,--公会拍卖 } MarketModel.MARKET_TYPE_NAME = { [1] = "世界拍卖", [2] = "社团拍卖", } local MarketModel = MarketModel local table_insert = table.insert function MarketModel:__init() MarketModel.Instance = self self.market_cfg = {} --市场配置 self.market_guild_cfg = {} --市场 self.goods_shelves_list = {} --上架商品列表 self.under_shelves_list = {} --下架商品列表 self.auction_list = {} --玩家竞拍商品列表 self.callback_table = {} --回调列表 self.market_record_list = {} --交易记录 self.count_down_time = 9999999 --倒计时时间 self.market_goods_list = {} --单个种类市场商品列表 self.goods_list_num_table = {} --所有种类商品数量表 self.goods_max_page_table = {} --所有种类商品最大页数表 self.is_goods_list_last_page_table = {}--顾名思义 self.market_guild_goods_list = {} --单个种类社团市场商品列表 self.guild_goods_list_num_table = {} --所有种类社团商品数量表 self.guild_goods_max_page_table = {} --所有种类社团商品最大页数表 self.is_guild_goods_list_last_page_table = {}--顾名思义 self.market_red_data = {} --红点缓存 self.market_focus_list = {} --关注列表 self.market_goods_cfg = {} --按类别存起来的物品配置表 self.market_attention_list = {} --入库提醒列表 self.is_market_guild_upshelves = false--是否有社团自动上架的东西 self.last_open_view_timestamp = 0 --上一次打开界面的时间 self:InitMarketCFG() -- self:InitMarketGoodsCFG() end function MarketModel:Reset( ) self.goods_shelves_list = {} --上架商品列表 self.under_shelves_list = {} --下架商品列表 self.callback_table = {} --回调列表 self.auction_list = {} --玩家竞拍商品列表 self.market_record_list = {} --交易记录 self.market_goods_list = {} --单个种类市场商品列表 self.goods_list_num_table = {} --所有种类商品数量表 self.goods_max_page_table = {} --所有种类商品最大页数表 self.is_goods_list_last_page_table = {}--顾名思义 self.market_guild_goods_list = {} --单个种类社团市场商品列表 self.guild_goods_list_num_table = {} --所有种类社团商品数量表 self.guild_goods_max_page_table = {} --所有种类社团商品最大页数表 self.is_guild_goods_list_last_page_table = {}--顾名思义 self.count_down_time = 9999999 --倒计时时间 self.market_focus_list = {} --关注列表 self.market_attention_list = {} --入库提醒列表 end function MarketModel:getInstance() if MarketModel.Instance == nil then MarketModel.New() end return MarketModel.Instance end function MarketModel:GetInstance() if MarketModel.Instance == nil then MarketModel.New() end return MarketModel.Instance end ----------------------------------新的分界线--------------------------- function MarketModel:InitMarketCFG( ) local cfg = Config.Marketsellsubtype self.market_cfg = {} self.market_guild_cfg = {} for k,v in pairs(cfg) do if not self.market_cfg[v.sell_type] then self.market_cfg[v.sell_type] = {} end self.market_cfg[v.sell_type][v.sell_sub_type] = v if not self.market_guild_cfg[v.sell_type] then self.market_guild_cfg[v.sell_type] = {} end if v.sell_type == 0 then if v.sell_sub_type == 0 then self.market_guild_cfg[v.sell_type][v.sell_sub_type] = v end else self.market_guild_cfg[v.sell_type][v.sell_sub_type] = v end end end --遍历整个物品表 function MarketModel:InitMarketGoodsCFG( ) local fun,basic for k, v in ipairs(Config.Marketgoodsnotice) do -- fun = loadstring(v) -- basic = fun() basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(v.goods_id) -- if basic and basic.sell_category > 0 and basic.sell_subcategory > 0 and basic.expire_time == 0 then if basic then --如果是装备 就要把类别 职业 套数 插进去 if Config.Equipment[basic.type_id] then basic.career = stringtotable(Config.Equipment[basic.type_id].career) basic.series = Config.Equipment[basic.type_id].series end if not self.market_goods_cfg[basic.sell_category] then self.market_goods_cfg[basic.sell_category] = {} end if not self.market_goods_cfg[basic.sell_category][basic.sell_subcategory] then self.market_goods_cfg[basic.sell_category][basic.sell_subcategory] = {} end table_insert(self.market_goods_cfg[basic.sell_category][basic.sell_subcategory], basic) end end end function MarketModel:PrintGoods( ) do return end for i,v in pairsByKeys(self.market_goods_cfg) do print("sell_categor: ", i) for ii,vv in pairsByKeys(v) do print("sell_subcategory",ii) for iii,vvv in ipairs(vv) do print(vvv.type_id) end end end end function MarketModel:GetMarketGoodsCFG( type, sub_type ) if TableSize(self.market_goods_cfg) == 0 then self:InitMarketGoodsCFG() end if type and sub_type then if sub_type == 0 then return self.market_goods_cfg[type] else return self.market_goods_cfg[type][sub_type] end elseif type then return self.market_goods_cfg[type] end return self.market_goods_cfg end function MarketModel:GetMarketCFG( ) return self.market_cfg end function MarketModel:GetMarketGuildCFG( ) return self.market_guild_cfg end function MarketModel:SetOnShelvesList( vo ) self.goods_shelves_list = vo self:ChangeVar("goods_shelves_list",self.goods_shelves_list,false,true) end function MarketModel:GetOnShelvesList( ) return self.goods_shelves_list end --设置玩家下架的物品 function MarketModel:SetUnderShelvesList( list ) self.under_shelves_list = list self:ChangeVar("under_shelves_list",self.under_shelves_list,false,true) end function MarketModel:GetUnderShelvesList( ) return self.under_shelves_list end function MarketModel:TimeLater() local function on_answer_time( ) if self.count_down_time <= 0 or TableSize(self.callback_table) <=0 then if self.question_time_id then GlobalTimerQuest:CancelQuest(self.question_time_id) self.question_time_id = nil self.count_down_time = 9999999 end else self.count_down_time = self.count_down_time - 1 for k,v in pairs(self.callback_table) do if type(v) == "function" then v() end end end end if not self.question_time_id then self.question_time_id = GlobalTimerQuest:AddPeriodQuest(on_answer_time, 1, -1) end end function MarketModel:DeleteFuncCallBack( index )--删除计时器方法列表里面的方法 self.callback_table[index] = nil end function MarketModel:SetFuncCallBack( func,index )--添加计时器方法列表里面的方法 if type(func) == "function" then self.callback_table[index] = func self:TimeLater() end end function MarketModel:SetAuctionList( vo ) self.auction_list = vo self:ChangeVar("auction_list",self.auction_list,false,true) end function MarketModel:GetAuctionList( ) return self.auction_list end function MarketModel:SetMarketRecordInfo(type, vo ) self.market_record_list[type] = vo self:ChangeVar("market_record_list",self.market_record_list,false,true) end function MarketModel:GetMarketRecordInfo( type_id ) if type_id then return self.market_record_list[type_id] or {} else return self.market_record_list end end function MarketModel:GetMarketTabNameBuySellType( sell_type ) local cfg = Config.Marketselltype if cfg[sell_type] then return Trim(cfg[sell_type].name) else return "" end end function MarketModel:GetMarketTabNameBuySellSubType( sell_type,sell_sub_type ) local cfg = Config.Marketsellsubtype if cfg and cfg[sell_type.."@"..sell_sub_type] then return cfg[sell_type.."@"..sell_sub_type].name else return "" end end --用大类加小类来存商品 function MarketModel:SetWorldMarketGoodsInfo(type, sub_type, page, list) if not self.market_goods_list[type.."@"..sub_type] then self.market_goods_list[type.."@"..sub_type] = {} end self.market_goods_list[type.."@"..sub_type][page] = list local total_num = 0 for k,v in pairs(self.market_goods_list[type.."@"..sub_type]) do total_num = total_num + TableSize(v) end self.goods_list_num_table[type.."@"..sub_type] = total_num self:ChangeVar("market_goods_list",self.market_goods_list,false,true) end --用大类加小类来存社团商品 function MarketModel:SetGuildMarketGoodsInfo(type, sub_type, page, list) if not self.market_guild_goods_list[type.."@"..sub_type] then self.market_guild_goods_list[type.."@"..sub_type] = {} end self.market_guild_goods_list[type.."@"..sub_type][page] = list local total_num = 0 for k,v in pairs(self.market_guild_goods_list[type.."@"..sub_type]) do total_num = total_num + TableSize(v) end self.guild_goods_list_num_table[type.."@"..sub_type] = total_num self:ChangeVar("market_guild_goods_list",self.market_guild_goods_list,false,true) end function MarketModel:GetMarketGoodsInfo( type, sub_type ) return self.market_goods_list[type.."@"..sub_type] or {} end function MarketModel:GetMarketGuildGoodsInfo( type, sub_type ) return self.market_guild_goods_list[type.."@"..sub_type] or {} end function MarketModel:CleanMarketGoodsInfo( ) self.market_goods_list = {} self.goods_list_num_table = {} self.goods_max_page_table = {} self.is_goods_list_last_page_table = {} end function MarketModel:CleanMarketGuildGoodsInfo( ) self.market_guild_goods_list = {} self.guild_goods_list_num_table = {} self.guild_goods_max_page_table = {} self.is_guild_goods_list_last_page_table = {} end function MarketModel:CleanMarketGoodsInfoByType( type, sub_type ) if not type or not sub_type then return end self.goods_list_num_table[type.."@"..sub_type] = 0 self.market_goods_list[type.."@"..sub_type] = {} self.is_goods_list_last_page_table[type.."@"..sub_type] = 0 self.goods_max_page_table[type.."@"..sub_type] = {} end function MarketModel:CleanMarketGuildGoodsInfoByType( type, sub_type ) if not type or not sub_type then return end self.guild_goods_list_num_table[type.."@"..sub_type] = 0 self.market_guild_goods_list[type.."@"..sub_type] = {} self.is_guild_goods_list_last_page_table[type.."@"..sub_type] = 0 self.guild_goods_max_page_table[type.."@"..sub_type] = {} end function MarketModel:IsLastGoodsPage( type, sub_type ) if self.is_goods_list_last_page_table[type.."@"..sub_type] == 1 then return true else return false end end function MarketModel:IsLastGuildGoodsPage( type, sub_type ) if self.is_guild_goods_list_last_page_table[type.."@"..sub_type] == 1 then return true else return false end end --标记一下是否是最后一页 function MarketModel:SetGoodsListLastPageType( type, sub_type, num) self.is_goods_list_last_page_table[type.."@"..sub_type] = num end --标记一下是否是最后一页 function MarketModel:SetGuildGoodsListLastPageType( type, sub_type, num) self.is_guild_goods_list_last_page_table[type.."@"..sub_type] = num end --获取某tab下某个类别物品总数量 function MarketModel:GetMarketGoodsListNum( type, sub_type ) if not type or not sub_type then return 0 end return self.goods_list_num_table[type.."@"..sub_type] or 0 end --获取某tab下某个类别物品总数量 function MarketModel:GetMarketGuildGoodsListNum( type, sub_type ) if not type or not sub_type then return 0 end return self.guild_goods_list_num_table[type.."@"..sub_type] or 0 end function MarketModel:IsGoodsCanUpShelves( vo ) local basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(vo.type_id) if basic and basic.sell_category > 0 and basic.sell_subcategory > 0 and vo.bind == 0 and basic.expire_time == 0 and vo.goods_num > 0 then return true end return false end --获取背包内可上架的物品数量 function MarketModel:GetBagCanUpShelvesNum( ) local num = 0 local career = RoleManager.Instance.mainRoleInfo.career local bag_goods_list = GoodsModel:getInstance().bag_goods_list local equip_model = EquipModel:getInstance() local equip_cfg for k, v in pairs(bag_goods_list) do if self:IsGoodsCanUpShelves(v) then equip_cfg = equip_model:GetEquipmentCfg(v.type_id) if equip_cfg then -- 2021年8月3日修改 追加剔除玩家本职业的装备 local is_mine = false for k2, v2 in ipairs(equip_cfg.career) do if v2 == career then is_mine = true break end end if not is_mine then num = num + 1 end end end end return num end --是否能竞拍 function MarketModel:IsGoodsCanAuction( type_id ) local basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(type_id) return basic.trade_price > 0 end --是否能一口价 function MarketModel:IsGoodsCanBuyOnePrice( type_id ) local basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(type_id) return basic.buyout_price > 0 end function MarketModel:SetMarketFocusList( vo ) self.market_focus_list = vo self:ChangeVar("market_focus_list",self.market_focus_list,false,true) self:FocusListCountDown() end function MarketModel:GetMarketFocusList( tab_id ) if not tab_id then return self.market_focus_list else local data = {} if tab_id == 1 then--拿全部 return self.market_focus_list elseif tab_id == 2 then--正在竞拍 for i,v in ipairs(self.market_focus_list) do if v.my_bid > 0 then table_insert(data, v) end end return data elseif tab_id == 3 then--已关注 for i,v in ipairs(self.market_focus_list) do if v.is_like == 1 then table_insert(data, v) end end return data end end end function MarketModel:SetMarketAttentionList( vo ) self.market_attention_list = {} for i,v in ipairs(vo) do self.market_attention_list[v.type_id] = true end self:ChangeVar("market_attention_list", self.market_attention_list, false, true) end function MarketModel:GetMarketAttentionList( ) return self.market_attention_list end function MarketModel:IsMarketAttentionGoods( type_id ) return self.market_attention_list[type_id] and true or false end --获取筛选的等级向上筛选 function MarketModel:GetMarketFliterLv( id ) local cfg = Config.Marketgoodsselectbylev if cfg[id] then local lv_min = cfg[id].stage local lv_max = 9999 if cfg[id+1] then lv_max = cfg[id+1].stage end return lv_min,lv_max else return 0,0 end end --获取是在哪上架 function MarketModel:GetMarketTypeName( type_id ) return MarketModel.MARKET_TYPE_NAME[type_id] or "交易市场" end function MarketModel:CheckMarketCanSelectZero( sell_type ) if self.market_cfg[sell_type] then if self.market_cfg[sell_type][0] then return true else return false end end end --获取筛选类别 function MarketModel:GetFliterType( sell_type,sub_type ) if sell_type == 0 then--如果是热卖 那么就读热卖表的主类型字段再调一次自己 return MarketConst.FliterType.Hot elseif sell_type == 1 then return MarketConst.FliterType.Armor elseif sell_type == 3 then return MarketConst.FliterType.Weapon else return MarketConst.FliterType.Other end end --通过筛选类别来获取默认选中的id function MarketModel:GetMarketDefultSelectIndexByType(fliter_type, info ) if fliter_type == MarketConst.FliterType.Armor then for k,v in pairs(Config.Career) do if v.career_id == info then return v.sex + 1 end end elseif fliter_type == MarketConst.FliterType.Weapon then--很蛋疼不要问我为什么 问就是写死职业 if info == 1 or info == 2 then return 2 elseif info == 3 or info == 4 then return 3 end end return 0 end --通过性别来获取职业筛选 function MarketModel:GetMarketFliterCareerBySex(sex ) for k,v in pairs(Config.Career) do if v.career_id == sex then return v.career_id end end return 0 end --用来判断提醒界面的东西能不能穿 function MarketModel:CheckMarketGoodsCanWear( career, wear_data ) if career == 0 then return true end if wear_data and TableSize(wear_data) > 0 and career then for i,v in ipairs(wear_data) do if v == career then return true end end end return false end function MarketModel:CheckMarketRedDot( ) local bool = false local sales_data = self:GetOnShelvesList() self.market_red_data.down_red = false for i,v in ipairs(sales_data) do if v.end_time - TimeUtil:getServerTime( ) <= 0 then bool = true self.market_red_data.down_red = true end end self.market_red_data.can_up_shelves_red = false local shelves_num = self:GetBagCanUpShelvesNum() if shelves_num and shelves_num >= 3 then self.market_red_data.can_up_shelves_red = true end bool = bool or self:IsGuildMarketNeedRed() bool = bool or self.market_red_data.auction_red bool = bool or self.market_red_data.can_up_shelves_red self.market_red_data.guild_red = self:IsGuildMarketNeedRed() self:Fire(MarketModel.ANS_MARKET_TAB_RED_DOT) return bool end function MarketModel:SetMarketAuctionRed( bool ) self.market_red_data.auction_red = bool self:Fire(MarketModel.UPDATE_MARKET_TAB_RED_DOT) end function MarketModel:GetMarketRedData( ) return self.market_red_data end --社团自动上架 设置一个状态量 function MarketModel:SetHasGuildGoods( bool ) self.is_market_guild_upshelves = bool self:Fire(MarketModel.UPDATE_MARKET_TAB_RED_DOT) end function MarketModel:IsGuildMarketNeedRed( ) return self.is_market_guild_upshelves end --是否已经上架到最多了 function MarketModel:IsMaxMarketGoods( ) local cfg = Config.Marketconstant local data = self:GetOnShelvesList() local max_num = cfg[1].value return TableSize(data) >= max_num end --是否是竞拍被超过了 只在上线的时候查一下 function MarketModel:IsAuctionNeedRed( ) local bool = false local data = self:GetMarketFocusList(2)--拿正在竞拍的 for i,v in ipairs(data) do if v.my_price ~= v.price then bool = true break end end return bool end function MarketModel:FocusListCountDown( ) local data = self:GetMarketFocusList() for i,v in ipairs(data) do--看看关注列表里面有没有需要倒计时的 local goods_vo = GoodsModel:getInstance():GetGoodsBasicByTypeId(v.type_id) local market_show_time = goods_vo.market_show_time or 0 if v.up_time + market_show_time > TimeUtil:getServerTime( ) then local function count_down_time( ) if v.up_time + market_show_time > TimeUtil:getServerTime( ) then else v.goods_id = v.type_id v.is_show_time = true GlobalEventSystem:Fire(EventName.OPEN_COMMON_AUCTION_VIEW, v) self:DeleteFuncCallBack("showTimeTips"..v.id) end end self:SetFuncCallBack(count_down_time, "showTimeTips"..v.id) end end end function MarketModel:ResetOpenViewTimestamp( ) self.last_open_view_timestamp = TimeUtil:getServerTime( ) end function MarketModel:GetOpenViewTimestamp( ) return self.last_open_view_timestamp end