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值看下可否走配置),且玩家星钻商城存在可兑换物品,则主图标以及页签给与一个倒计时图标 -- 当玩家有操作导致存量 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