|
|
- --[[@------------------------------------------------------------------
- @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
|