源战役客户端
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 

648 linhas
20 KiB

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