源战役客户端
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 

491 rader
17 KiB

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