SupremeVipModel = SupremeVipModel or BaseClass(BaseVo, true)
|
|
local SupremeVipModel = SupremeVipModel
|
|
|
|
function SupremeVipModel:__init()
|
|
SupremeVipModel.Instance = self
|
|
self:Reset()
|
|
end
|
|
|
|
function SupremeVipModel:Reset()
|
|
self.sup_vip_type = 0 --是否是永久贵族 0|否 1|体验 2|永久
|
|
self.end_time = 0 --体验贵族结束时间戳
|
|
self.today_charge = 0 --今日充值
|
|
self.continue_day = 0 --体验贵族连续充值天数
|
|
self.now_day = 0 --体验贵族当前天数
|
|
self.gift_count = 0 --每日礼包领取次数
|
|
|
|
self.unlock_id = 0 --当前解锁序列
|
|
|
|
self.star_gold = 0 --今日星钻
|
|
|
|
self.shop_cfg = {} --排好序的星钻商城配置列表
|
|
|
|
self.shop_limit_data = {} --商城物品的限购信息
|
|
self.shop_limit_data_dic = {} --存一份以限购类型为键的表
|
|
self.exchange_rest_count_list = {} --剩余的兑换次数列表
|
|
|
|
self.is_first_open_train_drug = true --是否第一次打开培养丹兑换界面,第一次打开之后就要清掉红点
|
|
self.is_first_open_shop = true --是否第一次打开商城界面
|
|
|
|
self.supreme_vip_red_dot_info = {} --红点数据
|
|
-- self.login_red = true
|
|
|
|
self.daily_reward_day_state_list = {} --每日奖励前七天领奖状态
|
|
self.supreme_vip_login_days = 0 --七日登录当前天数
|
|
|
|
self:SetSupremeVipShopCfg()
|
|
self:InitCfg()
|
|
end
|
|
|
|
function SupremeVipModel:getInstance()
|
|
if SupremeVipModel.Instance == nil then
|
|
SupremeVipModel.Instance = SupremeVipModel.New()
|
|
end
|
|
return SupremeVipModel.Instance
|
|
end
|
|
|
|
function SupremeVipModel:InitCfg( )
|
|
self.cfg_total_charge = stringtotable(Config.Supvipkv["total_charge"].value)[1][3]
|
|
self.trial_sup_vip_active = stringtotable(Config.Supvipkv["trial_sup_vip_active"].value)[1][3]
|
|
self.gold_exchange_price_data = stringtotable(Config.Supvipkv["gold_exchange_price"].value)
|
|
end
|
|
|
|
--星钻商城配置信息
|
|
function SupremeVipModel:SetSupremeVipShopCfg( )
|
|
for k,v in pairs(Config.Supvipstore) do
|
|
table.insert(self.shop_cfg,v)
|
|
end
|
|
local sort_func = function ( a, b )
|
|
return a.index < b.index
|
|
end
|
|
table.sort(self.shop_cfg, sort_func)
|
|
end
|
|
|
|
--获取商城配置信息
|
|
function SupremeVipModel:GetSupremeVipShopCfg()
|
|
local true_cfg = {} --排除掉已经购买过的终身限购物品
|
|
for i,v in ipairs(self.shop_cfg) do
|
|
local is_unlocked = self:IsInUnLockList(i-1>=1 and i-1 or 1)
|
|
if is_unlocked then
|
|
if self.shop_limit_data[v.goods_id] then
|
|
if self.shop_limit_data[v.goods_id].count_type == 3 then
|
|
if self.shop_limit_data[v.goods_id].count == 0 then
|
|
table.insert(true_cfg,v)
|
|
end
|
|
else
|
|
table.insert(true_cfg,v)
|
|
end
|
|
else
|
|
table.insert(true_cfg,v)
|
|
end
|
|
end
|
|
end
|
|
return true_cfg
|
|
end
|
|
|
|
|
|
--获取贵族图标开放VIP等级
|
|
function SupremeVipModel:GetSupremeIconOpenVipLv( )
|
|
return Config.Supvipkv["trial_sup_vip_lv_limit"].value
|
|
end
|
|
|
|
--获取每日礼包配置信息
|
|
function SupremeVipModel:GetDailyGiftCfg( )
|
|
return stringtotable(Config.Supvipkv["daily_sup_vip_gift"].value)
|
|
end
|
|
|
|
--获取彩钻兑换常量配置
|
|
function SupremeVipModel:GetDiamondExchageCfg( )
|
|
return stringtotable(Config.Supvipkv["gold_exchange"].value)
|
|
end
|
|
|
|
--星钻库存超过时提醒的数值
|
|
function SupremeVipModel:GetMoneyLeftCfgNum( )
|
|
return Config.Supvipkv["remind_num"].value
|
|
end
|
|
|
|
--获取彩钻兑换比例(红钻数,彩钻数)
|
|
function SupremeVipModel:GetDiamondExchangeRatio( )
|
|
local data = self.gold_exchange_price_data
|
|
return data[1][1],data[1][2]
|
|
end
|
|
|
|
--获取激活一阶贵族的消耗
|
|
function SupremeVipModel:GetActivateSupremeVipCost( )
|
|
return self.trial_sup_vip_active
|
|
end
|
|
|
|
--获取激活永久贵族的消耗
|
|
function SupremeVipModel:GetActivateForeverSupremeVipCost( )
|
|
return self.cfg_total_charge
|
|
end
|
|
|
|
--保存贵族信息 45101
|
|
function SupremeVipModel:SetSupremeVipData(vo)
|
|
self.sup_vip_type = vo.sup_vip_type
|
|
self.end_time = vo.end_time
|
|
self.today_charge = vo.today_charge
|
|
self.total_charge = vo.total_charge
|
|
self.continue_day = vo.continue_day
|
|
self.now_day = vo.day
|
|
self.gift_count = vo.gift_count
|
|
|
|
RoleManager.Instance.mainRoleInfo:ChangeVar("sup_vip_type", self.sup_vip_type)
|
|
end
|
|
|
|
--获取一阶贵族结束时间戳
|
|
function SupremeVipModel:GetEndTime( )
|
|
return self.end_time
|
|
end
|
|
|
|
--保存贵族商城信息 45104
|
|
function SupremeVipModel:SetSupremeVipShopData(vo)
|
|
for k,v in pairs(vo.goods_list) do
|
|
self.shop_limit_data_dic[v.count_type] = self.shop_limit_data_dic[v.count_type] or {}
|
|
self.shop_limit_data_dic[v.count_type][v.goods_id] = v
|
|
|
|
self.shop_limit_data[v.goods_id] = v
|
|
end
|
|
self.unlock_id = vo.unlock_id
|
|
end
|
|
|
|
--更新贵族商城限购信息 45104
|
|
function SupremeVipModel:RefreshShopLimitData(vo)
|
|
for k,v in pairs(vo.goods_list) do
|
|
self.shop_limit_data_dic[v.count_type] = self.shop_limit_data_dic[v.count_type] or {}
|
|
self.shop_limit_data_dic[v.count_type][v.goods_id] = v
|
|
|
|
self.shop_limit_data[v.goods_id] = v
|
|
end
|
|
self.unlock_id = vo.unlock_id
|
|
end
|
|
|
|
--判断当前index的商品是否解锁能买
|
|
function SupremeVipModel:IsInUnLockList(index)
|
|
if self.shop_cfg[index] then
|
|
if self.shop_cfg[index].type == 1 then
|
|
return true
|
|
else
|
|
return index <= self.unlock_id
|
|
end
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
--获取限购信息列表
|
|
function SupremeVipModel:GetLimitShopData(goods_id)
|
|
return self.shop_limit_data[goods_id] or nil
|
|
end
|
|
|
|
--保存今日星钻数 45106
|
|
function SupremeVipModel:SetStarDiamondData(vo)
|
|
self.star_gold = vo.star_gold
|
|
end
|
|
|
|
function SupremeVipModel:GetStarDiamondNum( )
|
|
return self.star_gold
|
|
end
|
|
|
|
--保存今日的兑换剩余次数
|
|
function SupremeVipModel:SetExchangeRestCounts(vo)
|
|
-- 1礼包|2彩钻|3培养丹
|
|
self.exchange_rest_count_list[vo.type] = vo.rest_count
|
|
end
|
|
|
|
--获取剩余兑换次数
|
|
function SupremeVipModel:GetExchangeRestCount(type)
|
|
return self.exchange_rest_count_list[type] or 0
|
|
end
|
|
|
|
--45109 每日礼包七天登录数据
|
|
function SupremeVipModel:SetSupremeVipSevenLoginData(vo)
|
|
self.daily_reward_day_state_list = vo.day_state
|
|
self.supreme_vip_login_days = vo.login_days
|
|
end
|
|
|
|
--七天登录当前天数
|
|
function SupremeVipModel:GetSupremeVipSevenLoginDays( )
|
|
return self.supreme_vip_login_days
|
|
end
|
|
|
|
--判断当前天对应奖励的领取状态
|
|
function SupremeVipModel:GetSupremeVipSevenLoginRewardState(day)
|
|
-- 领取状态 0|未领 1|领了一次 2|领了两次
|
|
local reward_state = 0
|
|
for k,v in pairs(self.daily_reward_day_state_list) do
|
|
if v.day_id == day then
|
|
reward_state = v.reward_state
|
|
break
|
|
end
|
|
end
|
|
return reward_state
|
|
end
|
|
|
|
|
|
--获取累计充值的天数
|
|
function SupremeVipModel:GetChargeDay( )
|
|
return self.continue_day
|
|
end
|
|
|
|
--是否拥有该主界面功能特权
|
|
function SupremeVipModel:HaveSupremeVipRight(index)
|
|
-- do return true end
|
|
if self:IsForeverSupremeVip() then
|
|
return true
|
|
else
|
|
if self:IsMomentSupremeVip() then
|
|
return index == 1 or index == 4
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
end
|
|
|
|
--自己是否是永久贵族
|
|
function SupremeVipModel:IsForeverSupremeVip()
|
|
return self.sup_vip_type == 2
|
|
end
|
|
|
|
--自己是否是一阶贵族
|
|
function SupremeVipModel:IsMomentSupremeVip()
|
|
return self.sup_vip_type == 1
|
|
-- if self:IsForeverSupremeVip() then
|
|
-- return false
|
|
-- else
|
|
-- local now_time = TimeUtil:getServerTime()
|
|
-- if now_time < self.end_time then
|
|
-- return true
|
|
-- else
|
|
-- return false
|
|
-- end
|
|
-- end
|
|
end
|
|
|
|
function SupremeVipModel:GetSupVipType( )
|
|
return self.sup_vip_type
|
|
end
|
|
|
|
--根据时间戳计算一阶贵族还剩几天
|
|
function SupremeVipModel:GetLeftMomentSupremeVipDay()
|
|
local day_time = 1
|
|
local true_day = 0
|
|
local true_hour = 0
|
|
local true_time = 0
|
|
local hour_time = 0
|
|
local minute_time = 0
|
|
if self.end_time ~=0 then
|
|
local str = TimeUtil:timeConversion(self.end_time, "yy/mm/dd hh:mm")
|
|
local real_time = TimeUtil:ConvertFmStringToTime(str, 1)
|
|
true_time = real_time-TimeUtil:getServerTime()
|
|
true_day = true_time/86400
|
|
true_hour = true_time/3600
|
|
hour_time = math.ceil(true_time/3600)
|
|
minute_time = math.ceil(true_time/60)
|
|
day_time = math.ceil(true_day)
|
|
end
|
|
return day_time,true_day,hour_time,true_hour,minute_time
|
|
end
|
|
|
|
|
|
-------------红点
|
|
|
|
function SupremeVipModel:IsNeedRedAll( )
|
|
for k,v in pairs(SupremeVipConst.RED_DOT_TYPE) do
|
|
self:IsNeedRed(v)
|
|
end
|
|
end
|
|
|
|
function SupremeVipModel:IsNeedRed( tab_id )
|
|
local bool = false
|
|
if tab_id == SupremeVipConst.RED_DOT_TYPE.DailyGift then
|
|
bool = self:CheckDailyGiftRed()
|
|
elseif tab_id == SupremeVipConst.RED_DOT_TYPE.DiamondExchange then
|
|
bool = self:CheckDiamondExchangeRed()
|
|
elseif tab_id == SupremeVipConst.RED_DOT_TYPE.Shop then
|
|
bool = self:CheckShopRed()
|
|
elseif tab_id == SupremeVipConst.RED_DOT_TYPE.TrainDrugExchange then
|
|
bool = self:CheckTrainDrugExchangeRed()
|
|
elseif tab_id == SupremeVipConst.RED_DOT_TYPE.MoneyLeft then--特殊红点,用来显示倒计时标志的,与红点是互斥,红点优先
|
|
bool = self:CheckMoneyLeftRed()
|
|
elseif tab_id == SupremeVipConst.RED_DOT_TYPE.SevenLogin then
|
|
bool = self:CheckSevenLoginRed()
|
|
end
|
|
self.supreme_vip_red_dot_info[tab_id] = bool
|
|
self:Fire(SupremeVipConst.ANS_UPDATE_RED_DOT,tab_id)
|
|
end
|
|
|
|
function SupremeVipModel:GetAllRedDot( )
|
|
return self.supreme_vip_red_dot_info
|
|
end
|
|
|
|
function SupremeVipModel:GetMainButtonRed( )
|
|
local bool = false
|
|
for i,v in pairs(self.supreme_vip_red_dot_info) do
|
|
if v and i ~= SupremeVipConst.RED_DOT_TYPE.MoneyLeft then--特殊红点,用来显示倒计时标志的,与红点是互斥,红点优先
|
|
bool = true
|
|
break
|
|
end
|
|
end
|
|
return bool
|
|
end
|
|
|
|
-- 优化5:
|
|
-- 检测玩家的星钻货币存量,如果玩家的星钻货币存量是》=X(X值看下可否走配置),且玩家星钻商城存在可兑换物品,则主图标以及页签给与一个倒计时图标
|
|
-- 当玩家有操作导致存量<X,或无可兑换物品,倒计时图标消失
|
|
-- 请留意倒计时标记和红点互斥,如有外部图标有红点,优先显示红点
|
|
-- 优化6:
|
|
-- 玩家每次完成充值后,检查如玩家的星钻货币存量》=X(X看下可否走配置,同条目5中的X值一样),且玩家星钻商城存在可兑换物品,则主界面与页签给与一次性红点
|
|
-- 玩家进入点击一次星钻商城页签后,红点消失
|
|
-- 说明1:如满足条件则每充值一次就会触发一次
|
|
-- 说明2:内部页签的倒计时图标和红点也是互斥,有红点优先显示红点
|
|
function SupremeVipModel:GetMainButtonTimeCountDownFlag( )
|
|
return self.supreme_vip_red_dot_info[SupremeVipConst.RED_DOT_TYPE.MoneyLeft] and self.supreme_vip_red_dot_info[SupremeVipConst.RED_DOT_TYPE.MoneyLeft] or false
|
|
end
|
|
|
|
|
|
function SupremeVipModel:CheckDailyGiftRed( )
|
|
if not GetModuleIsOpen(451) then return false end
|
|
local login_days = self:GetSupremeVipSevenLoginDays()
|
|
if login_days <= 7 then
|
|
return false
|
|
end
|
|
local bool = false
|
|
bool = self:GetExchangeRestCount(SupremeVipConst.ExchangeType.DailyGift) > 0
|
|
return bool
|
|
end
|
|
|
|
function SupremeVipModel:CheckDiamondExchangeRed( )
|
|
if not GetModuleIsOpen(451) then return false end
|
|
local bool = false
|
|
|
|
local jinLock_num = RoleManager.Instance.mainRoleInfo.jinLock
|
|
local jinLock_ratio,jin_ratio = self:GetDiamondExchangeRatio()--彩钻红钻兑换比例数
|
|
local can_exchange = jinLock_num >= jinLock_ratio
|
|
|
|
bool = self:GetExchangeRestCount(SupremeVipConst.ExchangeType.Diamond) > 0 and can_exchange
|
|
return bool
|
|
end
|
|
|
|
function SupremeVipModel:CheckShopRed( )
|
|
if not GetModuleIsOpen(451) then return false end
|
|
if self.sup_vip_type == 0 then return false end
|
|
if not self.is_first_open_shop then return false end --每次登陆上线给次红点,之后不再给红点
|
|
|
|
local bool = false
|
|
local can_buy_cfg = {}--筛选出能购买物品的商品列表
|
|
for i,v in ipairs(self.shop_cfg) do
|
|
if self.shop_limit_data[v.goods_id] and v.index <= self.unlock_id then
|
|
local price_cfg = stringtotable(v.price)
|
|
local limit_cfg = stringtotable(v.limit_buy)
|
|
if not limit_cfg or #limit_cfg ~= 0 then --把不限购的筛选出去
|
|
local can_buy = limit_cfg[1][2]-self.shop_limit_data[v.goods_id].count > 0
|
|
if can_buy and price_cfg[1][1] == 11 and self.star_gold >= price_cfg[1][2] then
|
|
bool = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return bool
|
|
end
|
|
|
|
function SupremeVipModel:CheckTrainDrugExchangeRed( )
|
|
return false
|
|
|
|
-- if not GetModuleIsOpen(451) then return false end
|
|
-- if not self.is_first_open_train_drug then return false end --每次登陆上线给次红点,之后不再给红点
|
|
|
|
-- local bool = false
|
|
-- local train_drug_cfg = self:GetTrainDrugExchangeTrueCfg()
|
|
-- local is_train_drug_enough = false
|
|
-- for k,v in pairs(train_drug_cfg) do
|
|
-- local _,goods_num1 = GoodsModel:getInstance():GetTypeGoodsNum(v.goods_id) --拿到限时物品数量
|
|
-- if goods_num1 >= 1 then
|
|
-- is_train_drug_enough = true
|
|
-- break
|
|
-- end
|
|
-- end
|
|
|
|
-- bool = self:GetExchangeRestCount(SupremeVipConst.ExchangeType.TrainDrug) > 0 and is_train_drug_enough
|
|
-- return bool
|
|
end
|
|
|
|
function SupremeVipModel:CheckMoneyLeftRed( )
|
|
if not GetModuleIsOpen(451) then return false end
|
|
if self.sup_vip_type == 0 then return false end
|
|
|
|
local bool = false
|
|
local remind_num = self:GetMoneyLeftCfgNum()
|
|
local star_gold_num = self:GetStarDiamondNum()
|
|
if star_gold_num >= remind_num then
|
|
--如果剩余的星钻数超过了配置值,判断是不是有东西可以买
|
|
local can_buy_cfg = {}--筛选出能购买物品的商品列表
|
|
for i,v in ipairs(self.shop_cfg) do
|
|
if self.shop_limit_data[v.goods_id] and v.index <= self.unlock_id then
|
|
local price_cfg = stringtotable(v.price)
|
|
local limit_cfg = stringtotable(v.limit_buy)
|
|
if not limit_cfg or #limit_cfg ~= 0 then --把不限购的筛选出去
|
|
local can_buy = limit_cfg[1][2]-self.shop_limit_data[v.goods_id].count > 0
|
|
if can_buy and price_cfg[1][1] == 11 and self.star_gold >= price_cfg[1][2] then
|
|
bool = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return bool
|
|
end
|
|
|
|
function SupremeVipModel:CheckSevenLoginRed( )
|
|
if not GetModuleIsOpen(451) then return false end
|
|
local bool = false
|
|
local login_days = self:GetSupremeVipSevenLoginDays()
|
|
if login_days > 7 then
|
|
bool = false
|
|
else
|
|
for k,v in pairs(self.daily_reward_day_state_list) do
|
|
if self:IsForeverSupremeVip() then
|
|
if v.reward_state ~= 2 then
|
|
bool = true
|
|
end
|
|
elseif self:IsMomentSupremeVip() then
|
|
if v.reward_state == 0 then
|
|
bool = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return bool
|
|
end
|
|
|
|
function SupremeVipModel:GetTrainDrugExchangeTrueCfg( )
|
|
-- local mainVo = RoleManager:getInstance():GetMainRoleVo()
|
|
|
|
local data = {}
|
|
local train_drug_cfg = {}
|
|
for k,v in pairs(Config.Supvipexchange) do
|
|
-- if mainVo.vip_flag >= v.min_vip and mainVo.vip_flag <= v.max_vip then
|
|
-- data[v.goods_id] = v
|
|
-- end
|
|
data[v.goods_id] = v
|
|
end
|
|
for k,v in pairs(data) do
|
|
table.insert(train_drug_cfg,v)
|
|
end
|
|
|
|
for i,v in ipairs(train_drug_cfg) do
|
|
v.goods_num = GoodsModel:getInstance():GetTypeGoodsNum(v.goods_id)
|
|
end
|
|
local sort_func = function ( a, b )
|
|
return a.goods_num > b.goods_num
|
|
end
|
|
table.sort(train_drug_cfg, sort_func)
|
|
|
|
return train_drug_cfg
|
|
end
|
|
|
|
|
|
|
|
function SupremeVipModel:GetDailyGiftRed( )
|
|
return self.supreme_vip_red_dot_info[SupremeVipConst.RED_DOT_TYPE.DailyGift] or false
|
|
end
|
|
|
|
function SupremeVipModel:GetDiamondExchangeRed( )
|
|
return self.supreme_vip_red_dot_info[SupremeVipConst.RED_DOT_TYPE.DiamondExchange] or false
|
|
end
|
|
|
|
function SupremeVipModel:GetShopRed( )
|
|
return self.supreme_vip_red_dot_info[SupremeVipConst.RED_DOT_TYPE.Shop] or false
|
|
end
|
|
|
|
function SupremeVipModel:GetTrainDrugExchangeRed( )
|
|
return false
|
|
-- return self.supreme_vip_red_dot_info[SupremeVipConst.RED_DOT_TYPE.TrainDrugExchange] or false
|
|
end
|
|
|
|
function SupremeVipModel:GetMoneyLeftRed( )
|
|
return self.supreme_vip_red_dot_info[SupremeVipConst.RED_DOT_TYPE.MoneyLeft] or false
|
|
end
|
|
|
|
function SupremeVipModel:GetSevenLoginRed( )
|
|
return self.supreme_vip_red_dot_info[SupremeVipConst.RED_DOT_TYPE.SevenLogin] or false
|
|
end
|