源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

465 rivejä
13 KiB

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