FuliModel = FuliModel or BaseClass(BaseVo)
|
|
local table_insert = table.insert
|
|
|
|
function FuliModel:__init()
|
|
FuliModel.Instance = self
|
|
self:Reset()
|
|
self:InitFuliSignCFG()
|
|
self:InitFuliLevelCFG()
|
|
self:InitFuliAICFG()
|
|
self:InitFuliAITalkCFG()
|
|
self:InitFuliTotalSignCFG()
|
|
end
|
|
|
|
function FuliModel:Reset()
|
|
self.fuli_sign_info = {}--签到数据
|
|
self.fuli_level_info = {}--冲级数据
|
|
self.fuli_sign_cfg = {}--福利签到配置表
|
|
self.fuli_level_cfg = {}--福利冲级配置表
|
|
self.fuli_ai_cfg = {}--在线奖励配置表
|
|
self.fuli_ai_talk_cfg = {}--在线奖励ai娘说话配置表
|
|
self.fuli_ai_info = {}--在线奖励数据
|
|
self.fuli_red_dot_info = {}--红点
|
|
self.fuli_sign_round_cfg = {}--福利累积签到配置表
|
|
self.callback_table = {}
|
|
self.fuli_limit_package_info = false --开服限时礼包
|
|
self.fuli_download_state = 0
|
|
self.count_down_time = 9999999
|
|
self:DeleteFuncCallBack("FuliModel:SetFuliAITime")
|
|
end
|
|
|
|
function FuliModel.GetInstance()
|
|
if FuliModel.Instance == nil then
|
|
FuliModel.Instance = FuliModel.New()
|
|
end
|
|
return FuliModel.Instance
|
|
end
|
|
|
|
function FuliModel.getInstance()
|
|
if FuliModel.Instance == nil then
|
|
FuliModel.Instance = FuliModel.New()
|
|
end
|
|
return FuliModel.Instance
|
|
end
|
|
|
|
function FuliModel:SetFuliSignInfo( vo )
|
|
self.fuli_sign_info = vo
|
|
self:ChangeVar("fuli_sign_info", self.fuli_sign_info, false, true)
|
|
end
|
|
|
|
function FuliModel:GetFuliSignInfo( )
|
|
return self.fuli_sign_info
|
|
end
|
|
|
|
function FuliModel:InitFuliSignCFG( )
|
|
local cfg = Config.Welfaresigninaward
|
|
for i,v in pairs(cfg) do
|
|
if not self.fuli_sign_cfg[v.round] then
|
|
self.fuli_sign_cfg[v.round] = {}
|
|
end
|
|
self.fuli_sign_cfg[v.round][v.day] = v
|
|
self.fuli_sign_cfg[v.round][v.day].award_list = stringtotable(v.award)
|
|
end
|
|
end
|
|
|
|
function FuliModel:GetFuliSignCFGByRound( round )
|
|
if round and self.fuli_sign_cfg[round] then
|
|
return self.fuli_sign_cfg[round]
|
|
else
|
|
return self.fuli_sign_cfg[1]--做个容错
|
|
end
|
|
end
|
|
|
|
function FuliModel:InitFuliLevelCFG( )
|
|
local cfg = Config.Welfarelevelaward
|
|
for k,v in pairs(cfg) do
|
|
if not self.fuli_level_cfg[v.career] then
|
|
self.fuli_level_cfg[v.career] = {}
|
|
end
|
|
self.fuli_level_cfg[v.career][v.id] = v
|
|
self.fuli_level_cfg[v.career][v.id].award_list = stringtotable(v.award)
|
|
if v.limit_num > 0 then
|
|
self.fuli_level_cfg[v.career][v.id].award_limit_list = stringtotable(v.limit_award)
|
|
--先给限定的奖励一个标记位
|
|
for kk,vv in ipairs(self.fuli_level_cfg[v.career][v.id].award_limit_list) do
|
|
vv.is_limit = true
|
|
end
|
|
for ii,vv in ipairs(self.fuli_level_cfg[v.career][v.id].award_list) do
|
|
table_insert(self.fuli_level_cfg[v.career][v.id].award_limit_list, vv)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function FuliModel:GetFuliLevelCFG(career )
|
|
if career and self.fuli_level_cfg[career] then
|
|
return self.fuli_level_cfg[career]
|
|
else
|
|
return {}--做个容错
|
|
end
|
|
end
|
|
|
|
function FuliModel:GetFuliLevelReceiveInfo( level )
|
|
local mainVo = RoleManager.Instance.mainRoleInfo
|
|
local cfg = self:GetFuliLevelCFG(mainVo.career)
|
|
local level = level or mainVo.level
|
|
local info = {}
|
|
for i,v in ipairs(cfg) do
|
|
local item = {level = 0, is_get = false, can_get = false, limit_num = 0}
|
|
item.level = v.level
|
|
item.is_get = self:IsFuliLevelGet(v.id)
|
|
item.can_get = level >= v.level
|
|
item.limit_num = v.limit_num
|
|
info[#info+1] = item
|
|
end
|
|
return info
|
|
end
|
|
|
|
function FuliModel:InitFuliAICFG( )
|
|
local cfg = Config.Welfareonlineaward
|
|
for k,v in pairs(cfg) do
|
|
if not self.fuli_ai_cfg[v.type] then
|
|
self.fuli_ai_cfg[v.type] = {}
|
|
end
|
|
self.fuli_ai_cfg[v.type][v.id] = v
|
|
end
|
|
end
|
|
|
|
function FuliModel:GetFuliAICFG( type )
|
|
if type and self.fuli_ai_cfg[type] then
|
|
return self.fuli_ai_cfg[type]
|
|
else
|
|
return self.fuli_ai_cfg[1]--做个容错
|
|
end
|
|
end
|
|
|
|
function FuliModel:GetFuliAICountTimeIndex( )
|
|
local info = self:GetFuliAIInfo()
|
|
if IsTableEmpty(info) then
|
|
return
|
|
end
|
|
local online_time = info and info.duration_time or 0
|
|
local cfg = self:GetFuliAICFG(info.type)
|
|
local index = 1
|
|
for i,v in ipairs(cfg) do
|
|
if online_time < v.duration then
|
|
index = v.id
|
|
break
|
|
end
|
|
end
|
|
return index
|
|
end
|
|
|
|
function FuliModel:InitFuliAITalkCFG( )
|
|
local cfg = Config.Welfareonlinewords
|
|
for k,v in pairs(cfg) do
|
|
if not self.fuli_ai_talk_cfg[v.type] then
|
|
self.fuli_ai_talk_cfg[v.type] = {}
|
|
end
|
|
self.fuli_ai_talk_cfg[v.type][v.id] = v
|
|
end
|
|
end
|
|
|
|
function FuliModel:GetFuliAITalkCFG( type )
|
|
if type and self.fuli_ai_talk_cfg[type] then
|
|
return self.fuli_ai_talk_cfg[type]
|
|
else
|
|
return self.fuli_ai_talk_cfg[1]--做个容错
|
|
end
|
|
end
|
|
|
|
function FuliModel:IsFuliLevelGet( id )
|
|
local server_data = self:GetFuliLevelInfo()
|
|
if TableSize(server_data) > 0 then
|
|
return server_data.my_receive[id] == 1
|
|
end
|
|
return false
|
|
end
|
|
--获取限量礼包的被领取的值
|
|
function FuliModel:GetFuliLevelLimitGetNum( id )
|
|
local server_data = self:GetFuliLevelInfo()
|
|
if TableSize(server_data) > 0 and server_data.limit_state[id] then
|
|
return server_data.limit_state[id]
|
|
else
|
|
return 0
|
|
end
|
|
end
|
|
|
|
function FuliModel:SetFuliLevelInfo( vo )
|
|
self.fuli_level_info = vo
|
|
self:ChangeVar("fuli_level_info", self.fuli_level_info, false, true)
|
|
end
|
|
|
|
function FuliModel:GetFuliLevelInfo( vo )
|
|
return self.fuli_level_info
|
|
end
|
|
|
|
function FuliModel:SetFuliDownState( state )
|
|
self.fuli_download_state = state
|
|
self:ChangeVar("fuli_download_state", self.fuli_download_state, false, true)
|
|
end
|
|
|
|
function FuliModel:GetFuliDownState( )
|
|
return self.fuli_download_state
|
|
end
|
|
|
|
function FuliModel:SetFuliAIInfo( vo )
|
|
self.fuli_ai_info = vo
|
|
self:SetFuliAITime()
|
|
self:Fire(FuliConst.UPDATE_FULI_AI_INFO)
|
|
end
|
|
|
|
function FuliModel:GetFuliAIInfo( )
|
|
return self.fuli_ai_info
|
|
end
|
|
|
|
function FuliModel:IsReceiveFuliDownReward( )
|
|
|
|
end
|
|
|
|
|
|
function FuliModel:IsFuliNeedRedAll( )
|
|
for k,v in pairs(FuliConst.TAB_ID) do
|
|
self:IsFuliNeedRed(v)
|
|
end
|
|
-------------------------
|
|
--万物宝典
|
|
local temp_list = CustomActivityModel:getInstance():getAllActListByBaseType(CustomActivityModel.CustomActBaseType.CONTRACT)
|
|
for i,v in pairs(temp_list or {}) do
|
|
self:IsFuliNeedRed(33100000 + CustomActivityModel.CustomActBaseType.CONTRACT * 1000 + v.sub_type)
|
|
end
|
|
end
|
|
|
|
function FuliModel:IsFuliNeedRed( tab_id )
|
|
local contract_start_num = 33100000 + CustomActivityModel.CustomActBaseType.CONTRACT * 1000
|
|
-------------------------
|
|
local bool = false
|
|
if tab_id == FuliConst.TAB_ID.SIGN then
|
|
bool = self:IsFuliSignNeedRed()
|
|
elseif tab_id == FuliConst.TAB_ID.AI then
|
|
bool = self:IsFuliAINeedRed()
|
|
elseif tab_id == FuliConst.TAB_ID.LEVEL then
|
|
bool = self:IsFuliLevelNeedRed()
|
|
elseif tab_id == FuliConst.TAB_ID.DOWNLOAD then
|
|
bool = self:IsFuliDownloadNeedRed()
|
|
elseif tab_id > contract_start_num and tab_id <= contract_start_num+999 then
|
|
--万物宝典
|
|
local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
|
|
local role_lv = RoleManager.Instance.mainRoleInfo.level
|
|
if role_lv >= Config.Modulesub["331@74"].open_lv and open_day>=Config.Modulesub["331@74"].open_day then
|
|
bool = ContractModel:getInstance():GetAllRedBySubType(false,tab_id-contract_start_num)
|
|
end
|
|
else
|
|
bool = false
|
|
end
|
|
self.fuli_red_dot_info[tab_id] = bool
|
|
self:Fire(FuliConst.ANS_UPDATE_FULI_RED_DOT,tab_id,bool)
|
|
end
|
|
|
|
function FuliModel:GetAllFuliRedDot( )
|
|
return self.fuli_red_dot_info
|
|
end
|
|
|
|
function FuliModel:IsFuliSignNeedRed( )
|
|
local server_data = self:GetFuliSignInfo()
|
|
local bool = false
|
|
if TableSize(server_data) > 0 then
|
|
if server_data.sign_in_status == 0 then
|
|
bool = true
|
|
elseif server_data.sign_in_status == 1 then--签到了第一次看看vip
|
|
local cfg = self:GetFuliSignCFGByRound(server_data.round)
|
|
local vip = RoleManager.Instance.mainRoleInfo.vip_flag or 0
|
|
if cfg and cfg[server_data.days] and cfg[server_data.days].vip_lv > 0 then
|
|
bool = vip >= cfg[server_data.days].vip_lv
|
|
end
|
|
end
|
|
if not bool then--上面都不满足 那看看能不能领累积签到奖励吧
|
|
local total_state = server_data.total_state
|
|
local total_cfg = self:GetFuliTotalSignCFGByRound(server_data.round)
|
|
for i,v in ipairs(total_cfg) do
|
|
if v[2] <= server_data.days and total_state[i] ~= 1 then
|
|
bool = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return bool
|
|
end
|
|
|
|
function FuliModel:IsFuliLevelNeedRed( )
|
|
local cfg = self:GetFuliLevelCFG(RoleManager.Instance.mainRoleInfo.career)
|
|
local server_data = self:GetFuliLevelInfo()
|
|
local level = RoleManager.Instance.mainRoleInfo.level
|
|
local bool = false
|
|
for i,v in ipairs(cfg) do
|
|
if not self:IsFuliLevelGet(v.id) and level >= v.level then--可以领且没有领
|
|
bool = true
|
|
break
|
|
end
|
|
end
|
|
GlobalEventSystem:Fire(ActivityIconManager.UPDATE_ICON_TIPS, 16003, bool)
|
|
return bool
|
|
end
|
|
|
|
function FuliModel:IsFuliAINeedRed( )
|
|
local server_data = self:GetFuliAIInfo()
|
|
local bool = false
|
|
local cfg = self:GetFuliAICFG(server_data.type)
|
|
for i,v in ipairs(cfg) do
|
|
if server_data.duration_time >= v.duration and server_data.my_receive[i] ~= 1 then
|
|
bool = true
|
|
break
|
|
end
|
|
end
|
|
return bool
|
|
end
|
|
|
|
function FuliModel:IsFuliDownloadNeedRed( )
|
|
local is_support = StepPackModule:getInstance():IsSupport()
|
|
local down_state = StepPackModule:getInstance():CurrentPackState()
|
|
local bool = false
|
|
if is_support then
|
|
local get_state = self:GetFuliDownState()
|
|
if get_state == 0 and down_state == 3 then
|
|
bool = true
|
|
end
|
|
end
|
|
return bool
|
|
end
|
|
|
|
function FuliModel:SetFuliAITime( )
|
|
local server_data = self:GetFuliAIInfo()
|
|
local bool = false
|
|
local cfg = self:GetFuliAICFG(server_data.type)
|
|
local time = {}
|
|
for i,v in ipairs(cfg) do
|
|
time[v.duration] = true
|
|
end
|
|
local function callback( ... )
|
|
self.fuli_ai_info.duration_time = self.fuli_ai_info.duration_time + 1
|
|
if time[self.fuli_ai_info.duration_time] then
|
|
self:Fire(FuliConst.UPDATE_FULI_RED_DOT, FuliConst.TAB_ID.AI)--触发红点
|
|
self:Fire(FuliConst.START_HAND_ACTION)--触发手的特效
|
|
end
|
|
end
|
|
self:SetFuncCallBack(callback, "FuliModel:SetFuliAITime")
|
|
end
|
|
|
|
function FuliModel: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 FuliModel:DeleteFuncCallBack( index )--删除计时器方法列表里面的方法
|
|
self.callback_table[index] = nil
|
|
end
|
|
|
|
function FuliModel:SetFuncCallBack( func,index )--添加计时器方法列表里面的方法
|
|
if type(func) == "function" then
|
|
self.callback_table[index] = func
|
|
self:TimeLater()
|
|
end
|
|
end
|
|
|
|
function FuliModel:InitFuliTotalSignCFG( )
|
|
local cfg = Config.Welfaresigninround
|
|
for i,v in ipairs(cfg) do
|
|
self.fuli_sign_round_cfg[i] = {}
|
|
local month_award = stringtotable(cfg[i].month_award)
|
|
for ii,vv in ipairs(month_award) do
|
|
self.fuli_sign_round_cfg[i][vv[1]] = vv
|
|
end
|
|
end
|
|
end
|
|
|
|
function FuliModel:GetFuliTotalSignCFGByRound( round )
|
|
return self.fuli_sign_round_cfg[round]
|
|
end
|
|
|
|
|
|
--福利等级获得ICON
|
|
function FuliModel:UpdateFuliLevelActIcon( level )
|
|
if not GetModuleIsOpen(160,3) then
|
|
return
|
|
end
|
|
local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
|
|
if open_day > 9999 then--开服前9999天才显示
|
|
ActivityIconManager:getInstance():deleteIcon(16003)
|
|
return
|
|
end
|
|
local award_vo = self:GetFuliLevelReceiveInfo(level)
|
|
if award_vo and award_vo[#award_vo] and award_vo[#award_vo].is_get then
|
|
ActivityIconManager:getInstance():deleteIcon(16003)
|
|
return
|
|
end
|
|
|
|
local icon_cfg = FuliConst.LEVEL_ICON_CFG
|
|
local cur_choose_cfg = nil
|
|
local max_cfg = nil
|
|
for k,v in pairsByKeys(icon_cfg) do
|
|
if k >= level then
|
|
for ii,vv in ipairs(award_vo) do
|
|
if k == vv.level then
|
|
if not vv.is_get then
|
|
cur_choose_cfg = v
|
|
break
|
|
end
|
|
end
|
|
end
|
|
if cur_choose_cfg then
|
|
break
|
|
end
|
|
end
|
|
max_cfg = v
|
|
end
|
|
|
|
if not cur_choose_cfg then--如果还没找到就看最后一个是否领取
|
|
local max_choose_cfg = max_cfg[RoleManager.Instance.mainRoleInfo.career] or max_cfg[0]
|
|
for i,v in ipairs(award_vo) do
|
|
if v.level == max_choose_cfg.lv_need then
|
|
if v.can_get and not v.is_get then
|
|
cur_choose_cfg = max_cfg
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
if cur_choose_cfg then--如果找到当前配置
|
|
local cur_career_cfg = cur_choose_cfg[RoleManager.Instance.mainRoleInfo.career] or cur_choose_cfg[0]
|
|
if cur_career_cfg then
|
|
if self.cur_career_cfg and self.cur_career_cfg.lv_need ~= cur_career_cfg.lv_need then--不相等就删除免得状态残留
|
|
ActivityIconManager:getInstance():deleteIcon(16003)
|
|
end
|
|
self.cur_career_cfg = cur_career_cfg
|
|
local icon_cfg = ActivityIconManager:getInstance().icon_cfg_new_list[16003]
|
|
if icon_cfg then
|
|
icon_cfg.icon_name = cur_career_cfg.icon_id
|
|
ActivityIconManager:getInstance():addIcon(16003, -1, cur_career_cfg.content)
|
|
else
|
|
ActivityIconManager:getInstance():deleteIcon(16003)
|
|
end
|
|
else
|
|
ActivityIconManager:getInstance():deleteIcon(16003)
|
|
end
|
|
else
|
|
ActivityIconManager:getInstance():deleteIcon(16003)
|
|
end
|
|
end
|