|
|
- BagModel = BagModel or BaseClass(BaseVo)
-
- BagModel.OPEN_BATHANDLE_VIEW = "BagModel.OPEN_BATHANDLE_VIEW"
- BagModel.OPEN_ENLARGE_VIEW = "BagModel.OPEN_ENLARGE_VIEW"
- BagModel.OPEN_ALL_ADDITION_VIEW = "BagModel.OPEN_ALL_ADDITION_VIEW"
- BagModel.OPEN_SELL_VIEW = "BagModel.OPEN_SELL_VIEW"
- BagModel.OPEN_DEPOT_VIEW = "BagModel.OPEN_DEPOT_VIEW"
- BagModel.CLICK_BAG_ITEM = "BagModel.CLICK_BAG_ITEM"
- BagModel.OPEN_EQUIP_DECOMPOSE_VIEW = "BagModel.OPEN_EQUIP_DECOMPOSE_VIEW"
- BagModel.EQUIP_ITEM_GET_WAY_TIPS = "BagModel.EQUIP_ITEM_GET_WAY_TIPS"
- BagModel.CLOSE_EQUIP_ITEM_GET_WAY_TIPS = "BagModel.CLOSE_EQUIP_ITEM_GET_WAY_TIPS"
-
- BagModel.CLOSE_SELL_VIEW = "BagModel.CLOSE_SELL_VIEW"
- --吞噬
- BagModel.REQUEST_PROTOCOL = "BagModel.REQUEST_PROTOCOL"
- BagModel.CLOSE_SWALLOW_SELECT_CONTENT = "BagModel.CLOSE_SWALLOW_SELECT_CONTENT"
- BagModel.SELECT_SWALLOW_TYPE = "BagModel.SELECT_SWALLOW_TYPE"
- BagModel.CLICK_EQUIP_ITEM = "BagModel.CLICK_EQUIP_ITEM"
- BagModel.REFRESH_SWALLOW_INIT = "BagModel.REFRESH_SWALLOW_INIT"
- BagModel.REFRESH_SWALLOW_RESULT = "BagModel.REFRESH_SWALLOW_RESULT"
- BagModel.CLICK_SWALLOW_CORE_ITEM = "BagModel.CLICK_SWALLOW_CORE_ITEM"
- BagModel.UPDATE_EQUIP_GOODS = "BagModel.UPDATE_EQUIP_GOODS"
- BagModel.ANS_UPDATE_EQUIP_RED = "BagModel.ANS_UPDATE_EQUIP_RED"
- BagModel.UPDATE_AUTO_SWALLOW_STATE = "BagModel.UPDATE_AUTO_SWALLOW_STATE"
- BagModel.SORT_BAG_AFTER_SWALLOW = "BagModel.SORT_BAG_AFTER_SWALLOW"--关闭吞噬界面后要整理一次背包
- BagModel.UPDATE_SWALLOW_ATTR_SHOW = "BagModel.UPDATE_SWALLOW_ATTR_SHOW"
- BagModel.BAG_SWALLOW_CAN_STRENGTH = "BagModel.BAG_SWALLOW_CAN_STRENGTH"--吞噬数量达标,通知变强
- --货币兑换
- BagModel.OPEN_CURRENCY_EXCHANGE_VIEW = "BagModel.OPEN_CURRENCY_EXCHANGE_VIEW" --打开货币兑换界面
- BagModel.UPDATE_CURRENCY_EXCHANGE_VIEW = "BagModel.UPDATE_CURRENCY_EXCHANGE_VIEW" --进行兑换之后刷新货币兑换界面
- BagModel.UPDATE_CURRENCY_GOODS_NUM = "BagModel.UPDATE_CURRENCY_GOODS_NUM" --货币礼包数量更新
- BagModel.ANS_UPDATE_CURRENCY_EXCHANGE_RED = "BagModel.ANS_UPDATE_CURRENCY_EXCHANGE_RED" --刷新交易券兑换的执行方法
- BagModel.UPDATE_CURRENCY_VIEW = "BagModel.UPDATE_CURRENCY_VIEW" --刷新交易券兑换界面
-
- BagModel.OPEN_SUIT_ACTIVE_VIEW = "BagModel.OPEN_SUIT_ACTIVE_VIEW" --打开套装激活界面
- BagModel.OPEN_EQUIP_ORANGE_SUIT_VIEW = "BagModel.OPEN_EQUIP_ORANGE_SUIT_VIEW" --打开橙品套装界面
-
- BagModel.SpiritId = 501002 --吞噬模型id
- BagModel.StampGoodsId = 101014 --用于兑换交易券的交易卡券物品id
- BagModel.FlyGoodsID = 102602 -- 小飞鞋道具id
- BagModel.GoodsLimitState =
- {
- Normal = 0,
- Limit = 1,
- TimeOut = 2,
- }
-
- function BagModel:__init()
- BagModel.Instance = self
- self.show_bag_view = false
- self.Swallow_data = nil
- self.Swallow_result_data = nil
- self.IsOnClickSwallow = false
- self.double_click_time = 0.3
- self.Swallow_red = false
- self.is_check_swallow_red = false --是否打开过吞噬界面,打开过一次之后,本次登录不再给红点
- self.swallow_lv = 0
- self.pre_swallow_lv = 0 --进行吞噬之前的吞噬等级
- self.swallow_exp = 0
- self.pre_swallow_exp = 0
- self.is_auto_swallow = false
- self.swallow_active_lv = 0 --激活的吞噬特殊属性等级
- self.last_sort_bag_time = {}
- self.last_swallow_sort_bag_time = 0 --上次吞噬整理背包的时间
- self.can_swallow_strength = false
-
- self.currency_exchange_daily_counts = 0 --彩钻兑换交易券今日已使用次数
- self.currency_exchange_red = false --交易券兑换红点
- self.currency_exchange_free_time = 0 --免费兑换时间
- self.currency_exchange_props_red = false--使用道具兑换交易券红点
- self.currency_exchange_diamond_red = false--使用彩钻兑换交易券红点
-
- self.swallow_core_cfg = {}
- self.show_drop_timeout_props_tips = true --是否提示丢弃过期道具提示
-
- self.bag_quick_buy_toggle = false --背包便捷购买toggle
-
- self.bag_equip_suit_active_red = false
- self.bag_equip_suit_active_level_list = false
- self.bag_equip_suit_active_task_list = false
-
- self:InitSwallowCoreCfg()
- end
-
- function BagModel:getInstance()
- if BagModel.Instance == nil then
- BagModel.New();
- end
- return BagModel.Instance
- end
-
- function BagModel:OpenBagView()
-
- end
-
- --[[
- ===================================== description: 全身加成相关的方法 =====================================
- ]]
-
- --获取全身宝石数、星级和精炼数、圣印精炼数
- function BagModel:GetAllAddition()
- local strength = 0
- local star = 0
- local stone = 0
- local seal_stren = 0
-
- local function callback_1(dynamic)
- strength = strength + (dynamic.stren or 0)
- local _star = Config.Equipattr[dynamic.type_id] and Config.Equipattr[dynamic.type_id].star or 0
- star = star + _star
- if dynamic.stone_list then
- for i, v in ipairs(dynamic.stone_list) do
- local cfg = Config.Equipstonelv[v.type_id]
- if cfg then
- stone = stone + cfg.lv
- end
- end
- end
- end
- for k, v in pairs(GoodsModel:getInstance().wear_equip_list) do
- GoodsModel:getInstance():GetDynamic(v.goods_id, callback_1)
- end
-
- local function callback_2(dynamic)
- seal_stren = seal_stren + (dynamic.stren or 0)
- end
- for k, v in pairs(GoodsModel:getInstance().seal_equip_dic) do
- GoodsModel:getInstance():GetDynamic(v.goods_id, callback_2)
- end
-
- return strength, star, stone, seal_stren
- end
-
- --获取全身加成的等级和下一级配置
- --增加参数 strength_count 精炼数 by lgj
- function BagModel:GetBodyPlusConfig(style, strength_count)
- local style = style or 1
- local list = {}
- for i, v in pairs(Config.Equipwholereward) do
- if v.type == style then
- table.insert(list, v)
- end
- end
- local sort_fun = function (a, b)
- return a.need_lv < b.need_lv
- end
- table.sort(list, sort_fun)
-
- local now_cfg = nil
- local next_cfg = nil
- local num_list = {}
- local num
- if strength_count == nil then
- num_list[1], num_list[2], num_list[3], num_list[4] = self:GetAllAddition()
- num = num_list[style]
- else
- num = strength_count
- end
-
- for i, v in ipairs(list) do
- if num >= v.need_lv then
- now_cfg = v
- else
- next_cfg = v
- break
- end
- end
- return now_cfg, next_cfg
- end
-
- function BagModel:GetSwallowRedDot( )
- return self.Swallow_red
- end
-
- function BagModel:CheckEquipSwallowRed()
- if GetModuleIsOpen(150,4) then
- local need_red_num = 10 -- 所需红点的可吞噬装备数
- if VipModel:getInstance():IsForeverVip() then
- local fly_shoes = GoodsModel:getInstance():GetTypeGoods(BagModel.FlyGoodsID)
- if not IsTableEmpty(fly_shoes) then -- 存在一个小飞鞋以上的道具时,红点所需的装备数减少1
- need_red_num = 9
- end
- end
- local equips_list = {}
- local goods_list = GoodsModel:getInstance().bag_goods_list
- for k,v in pairs(goods_list) do
- if v.type == GoodsModel.TYPE.EQUIP and v.subtype ~= 8 and v.subtype ~= 9
- and v.subtype ~= 10 and v.subtype ~= 11 and v.goods_num >0 and v.color < 3 then
- table.insert(equips_list,v)
- end
- end
-
- local attr_unlock_red = self:CheckSwallowAttrUnlockRed()
-
-
- -- if self.is_check_swallow_red then --吞噬的红点登录只给一次,但解锁红点除外
- -- self.Swallow_red = attr_unlock_red
- -- else
- -- self.Swallow_red = #equips_list >= need_red_num or attr_unlock_red
- -- end
-
- self.Swallow_red = #equips_list >= need_red_num or attr_unlock_red
- self.can_swallow_strength = #equips_list >= need_red_num
- else
- self.Swallow_red = false
- self.can_swallow_strength = false
- end
-
- --超过10件可吞噬的装备,通知变强
- self:Fire(BagModel.BAG_SWALLOW_CAN_STRENGTH,self.can_swallow_strength)
-
- GlobalEventSystem:Fire(EventName.UPDATE_BAG_RED)
- end
-
- function BagModel:GetCanSwallowStrength( )
- return self.can_swallow_strength
- end
-
- function BagModel:CheckEquipSwallowRedByFlyShoesChanges( )
- self:CheckEquipSwallowRed()
- local goods_model = GoodsModel:getInstance()
- -- 获得道具之后尝试自动吞噬
- local fly_shoes_num = goods_model:GetTypeGoodsNum(BagModel.FlyGoodsID)
- if fly_shoes_num > 0 then
- goods_model:AutoSwallow()
- end
- end
-
- --检查吞噬特殊属性解锁红点
- function BagModel:CheckSwallowAttrUnlockRed( )
- for i,v in ipairs(self.swallow_core_cfg) do
- if self:SwallowCanUnlock(v.lv) then
- return true
- end
- end
- return false
- end
-
- function BagModel:TrySortBag( pos_type )
- if not pos_type then return end
-
- if not self.last_sort_bag_time[pos_type] or Time.time - self.last_sort_bag_time[pos_type] > 5 then
- self.last_sort_bag_time[pos_type] = Time.time
- GoodsModel:getInstance():Fire(GoodsModel.REQUEST_CCMD_EVENT,15004,pos_type)
- return true
- else
- Message.show("你的"..(pos_type==GoodsModel.GOODS_POS_TYPE.bag and "背包" or "仓库").."整理的太快了,请稍后再操作")
- end
- end
-
- function BagModel:GetLastSortBagTime( pos_type )
- return self.last_sort_bag_time[pos_type] and self.last_sort_bag_time[pos_type] or 0
- end
-
- function BagModel:SetSwallowData(vo)
- self.swallow_lv = vo.lv
- self.swallow_exp = vo.exp
- self.is_auto_swallow = vo.is_auto_swallow == 1 and true or false
- self.swallow_active_lv = vo.active
- end
-
- --初始化法核配置
- function BagModel:InitSwallowCoreCfg( )
- for k,v in pairs(Config.Goodsdevourextra) do
- table.insert(self.swallow_core_cfg,v)
- end
- table.sort(self.swallow_core_cfg,function(a,b)
- return a.lv<b.lv
- end)
- end
-
- --拿到法核总配置
- function BagModel:GetSwallowCoreCfg( )
- return self.swallow_core_cfg
- end
-
- --拿到当前吞噬等级所处的法核配置
- function BagModel:GetNowSwallowCoreCfg()
- for i=#self.swallow_core_cfg,1,-1 do
- if self.swallow_lv >= self.swallow_core_cfg[i].lv then
- return self.swallow_core_cfg[i],i
- end
- end
- return self.swallow_core_cfg[1],1
- end
-
- --拿到当前吞噬等级所处的法核itemId
- function BagModel:GetNowSwallowCoreItemId()
- for i=#self.swallow_core_cfg,1,-1 do
- if self.swallow_lv >= self.swallow_core_cfg[i].lv then
- return i
- end
- end
- return 1
- end
-
- --获取最大的吞噬法核itemid,其实就是配置的条数
- function BagModel:GetMaxSwallowCoreItemId( )
- return #self.swallow_core_cfg
- end
-
- --根据等级拿到法核配置
- function BagModel:GetSwallCoreCfgByLv(index)
- return self.swallow_core_cfg[index] and self.swallow_core_cfg[index] or self.swallow_core_cfg[1]
- end
-
- --判断当前等级的特殊属性能否解锁
- function BagModel:SwallowCanUnlock(lv)
- if lv>self.swallow_active_lv and lv<=self.swallow_lv then
- return true
- end
- return false
- end
-
- --道具是否过期(状态)
- function BagModel:GetGoodsLimitState(goods_vo, cur_time)
- local s = BagModel.GoodsLimitState.Normal
- if goods_vo and goods_vo.goods_id and goods_vo.goods_id ~= 0 and goods_vo.expire_time ~= 0 then
- cur_time = cur_time or TimeUtil:getServerTime()
- if cur_time > goods_vo.expire_time then
- s = BagModel.GoodsLimitState.TimeOut
- else
- s = BagModel.GoodsLimitState.Limit
- end
- end
- return s
- end
-
- --筛选出已经过期的道具
- function BagModel:GetTimeOutGoodsList(goods_vo_list)
- local t = {}
- if goods_vo_list and #goods_vo_list > 0 then
- local cur_time = TimeUtil:getServerTime()
- for k,v in pairs(goods_vo_list) do
- if v.expire_time and v.expire_time > 0 then
- if v.expire_time < cur_time and v.goods_num > 0 then
- table.insert(t, {goods_id = v.goods_id, type_id = v.type_id, num = v.goods_num})
- end
- end
- end
- end
- return t
- end
-
- --更新今日彩钻兑换交易券已用次数
- function BagModel:SetCurrencyExchangeDailyCounts(counts)
- self.currency_exchange_daily_counts = counts
- end
-
- --获得今日彩钻兑换交易券已用次数
- function BagModel:GetCurrencyExchangeDailyCounts( )
- return self.currency_exchange_daily_counts
- end
-
- --获取拥有最高兑换次数的vip等级
- function BagModel:GetCurreccyExchangeMaxVip( )
- local max_vip = 0
- for k,v in pairs(Config.Vipprivilege) do
- if v.class_id == 150 and v.lv >= max_vip then
- max_vip = v.lv
- end
- end
- return max_vip
- end
-
- --根据当前vip获得彩钻兑换交易券可用次数
- function BagModel:GetCurrencyExchangeNumsByVip( )
- local my_vip_flag = RoleManager.Instance.mainRoleInfo.vip_flag
- if my_vip_flag == 0 then
- return 0
- else
- local privilege_type = 150 --彩钻兑换交易券的vip权限类型
- local cfg = self:GetCurrencyVipPrivilege(my_vip_flag)
- local max_vip = self:GetCurreccyExchangeMaxVip()
- return cfg and cfg.value or self:GetCurrencyVipPrivilege(max_vip).value
- end
- end
-
- --获取特权表配置
- function BagModel:GetCurrencyVipPrivilege(vip_flag)
- local privilege_type = 150--兑换交易券的vip权限类型
- local cfg = Config.Vipprivilege
- for k,v in pairs(cfg) do
- if v.lv == vip_flag and v.class_id == privilege_type then
- return v
- end
- end
- return nil
- end
-
- --当前还剩多少次交易券兑换次数
- function BagModel:GetCurrencyExchangeNumsNow( )
- return self:GetCurrencyExchangeNumsByVip()-self:GetCurrencyExchangeDailyCounts()
- end
-
- --交易券礼包数量监听
- function BagModel:OnCurrencyGiftBagGoodsChange( )
- self:Fire(BagModel.UPDATE_CURRENCY_GOODS_NUM)
- end
-
- --交易券兑换红点
- function BagModel:CheckCurrencyExchangeRed( )
- local bool = false
- self.currency_exchange_props_red = false
- self.currency_exchange_diamond_red = false
-
- local stamp_goods_num = GoodsModel:getInstance():GetTypeGoodsNum(BagModel.StampGoodsId) --已有的交易券数量
- if stamp_goods_num >= 10 and RoleManager.Instance.mainRoleInfo.level >= 105 then
- bool = true
- self.currency_exchange_props_red = true
- end
-
- --免费兑换时间
- if self.currency_exchange_free_time ~= 0 and RoleManager.Instance.mainRoleInfo.level >= 96 then
- if not bool then
- bool = self.currency_exchange_free_time <= TimeUtil:getServerTime()
- end
- self.currency_exchange_diamond_red = self.currency_exchange_free_time <= TimeUtil:getServerTime()
- end
-
- self.currency_exchange_red = bool
- GlobalEventSystem:Fire(EventName.UPDATE_BAG_RED)
- end
-
- --获取交易券兑换红点
- function BagModel:GetCurrencyExchangeRed( )
- return self.currency_exchange_red
- end
-
- --获取道具兑换交易券红点
- function BagModel:GetCurrencyExchangePropsRed( )
- return self.currency_exchange_props_red
- end
-
- --获取彩钻兑换交易券红点
- function BagModel:GetCurrencyExchangeDiamondRed( )
- return self.currency_exchange_diamond_red
- end
-
- --交易券兑换红点免费次数的红点
- function BagModel:RequestCurrencyExchangeRed( )
- if self.currency_exchange_free_time ~= 0 and self.currency_exchange_free_time <= TimeUtil:getServerTime() then
- self:Fire(BagModel.REQUEST_PROTOCOL,15026) --打开背包的时候,在检测一次免费兑换次数,刷新红点
- end
- end
-
- --获取套装fv激活红点
- function BagModel:GetBagEquipSuitActiveRedDot( )
- return self.bag_equip_suit_active_red
- end
-
- --刷新套装激活红点
- function BagModel:UpdateBagEquipSuitActiveRedDot( )
- local function delay_fun( )
- local max = EquipModel.getInstance():GetCurrentOpenSuitSeries()
- local can_max = EquipModel.getInstance():GetCanActiveMaxSeries()
- local b = can_max > max
-
- if b ~= self.bag_equip_suit_active_red then
- self.bag_equip_suit_active_red = b
- GlobalEventSystem:Fire(EventName.UPDATE_BAG_RED)
- end
- end
- TimeManager.GetInstance():StartDalayTime("UpdateBagEquipSuitActiveRedDot",0.2,delay_fun)
- end
-
- --是否是套装激活的任务id
- function BagModel:IsBagEquipSuitActiveTask(task_id)
- if not self.bag_equip_suit_active_task_list then
- self.bag_equip_suit_active_task_list = {}
- local config = Config.Equipmentseriesopen
- for i,v in ipairs(config) do
- if v.task_id ~= 0 then
- self.bag_equip_suit_active_task_list[v.task_id] = true
- end
- end
- end
- return self.bag_equip_suit_active_task_list[task_id]
- end
-
- --是否是套装激活的level
- function BagModel:IsBagEquipSuitActiveLevel(level)
- if not self.bag_equip_suit_active_level_list then
- self.bag_equip_suit_active_level_list = {}
- local config = Config.Equipmentseriesopen
- for i,v in ipairs(config) do
- self.bag_equip_suit_active_level_list[v.open_lv] = true
- end
- end
- return self.bag_equip_suit_active_level_list[level]
- end
|