|
|
- CSGWarModel = CSGWarModel or BaseClass(BaseVo)
- local table_insert = table.insert
-
- function CSGWarModel:__init()
- CSGWarModel.Instance = self
- self:InitCSGWarCityCFG()
- -- self:InitCSGWarKVCFG()
- self:Reset()
- end
- function CSGWarModel:Reset()
- self.CSGWar_base_info = {}--活动基础信息
- self.CSGWar_occupy_info = {}--占领信息 结算之后才会有的
- self.CSGWar_sign_info = {}--帮战参赛信息-报名阶段和活动进行中
- self.CSGWar_guild_sign_list = {}--社团报名榜
- self.CSGWar_support_sign_list = {}--外援报名榜
- self.CSGWar_city_info = {}--场景城池信息
- self.CSGWar_result_info = {}--结算信息
- self.CSGWar_group_info = {}--社团分组信息
- self.CSGWar_fight_guild_info = {} --本阵营参战公会id表
- self.CSGWar_support_info = {} --应援信息表
- self.CSGWar_record_info = {}--日志信息
- self.CSGWar_overlord_info = {}--霸主限购信息
- self.my_support_num = 0--我的应援次数
- self.free_support_num = 0--我的免费应援次数
- self.is_CSGWar_sign = false--是否已经报名了
- self.support_view_toggle = false
- self.has_open_csgwar_view = false--是否已经开过界面了
- self.start_wait_info = true
- self.wait_list = {}
- self.CSGWar_red_data = {}--缓存红点数据
-
- self.CSGWar_activity_tip_open_data = {}--缓存邀请函打开记录,报名,声援,开战在活动期间只弹一次
- end
-
- function CSGWarModel:GetInstance()
- if CSGWarModel.Instance == nil then
- CSGWarModel.Instance = CSGWarModel.New()
- end
- return CSGWarModel.Instance
- end
-
- function CSGWarModel:getInstance()
- if CSGWarModel.Instance == nil then
- CSGWarModel.Instance = CSGWarModel.New()
- end
- return CSGWarModel.Instance
- end
- --场景城区配置
- function CSGWarModel:InitCSGWarCityCFG( )
- local cfg = Config.Crossguildwarscene
- for i,v in ipairs(cfg) do
- v.city_pos = stringtotable(v.flag)
- v.monster_pos = stringtotable(v.mon_list)
- end
- end
- --常量配置
- function CSGWarModel:InitCSGWarKVCFG( )
- self.CSGWar_kv_cfg = {}
- local cfg = Config.Crossguildwarconfig
- for i,v in pairs(cfg) do
- self.CSGWar_kv_cfg[Trim(v.key)] = v
- end
- end
-
- function CSGWarModel:GetCSGWarKVCFG( key )
- if not self.CSGWar_kv_cfg then
- self:InitCSGWarKVCFG()
- end
- return self.CSGWar_kv_cfg[key]
- end
-
- function CSGWarModel:SetCSGWarBaseInfo( vo )
- self.CSGWar_base_info = vo
- self:ChangeVar("CSGWar_base_info", self.CSGWar_base_info, false, true)
- end
-
- function CSGWarModel:GetCSGWarBaseInfo( )
- return self.CSGWar_base_info
- end
-
- function CSGWarModel:SetCSGWarOccupyInfo( vo )
- local data = {}
- for ii,vv in ipairs(vo.city_list) do
- data[vv.city_id] = vv
- end
- self.CSGWar_occupy_info = data
- self:ChangeVar("CSGWar_occupy_info", self.CSGWar_occupy_info, false, true)
- end
-
- function CSGWarModel:GetCSGWarOccupyInfo()
- return self.CSGWar_occupy_info
- end
-
- function CSGWarModel:SetCSGWarSignInfo( vo )
- local country = KfWorldModel:GetInstance():GetMyCountryId()
- self.CSGWar_fight_guild_info = {}
- self.is_CSGWar_sign = vo.is_sign_up == 1
- self.last_sign_time = vo.last_sign
- local data = {}
- for ii,vv in ipairs(vo.guild_list) do
- data[vv.fact_id] = vv
- if vv.fact_id == country then
- self.CSGWar_fight_guild_info[vv.guild_id] = true
- end
- end
- self.CSGWar_sign_info = data
- self:ChangeVar("CSGWar_sign_info", self.CSGWar_sign_info, false, true)
- end
-
- function CSGWarModel:GetCSGWarSignInfo( index )
- return self.CSGWar_sign_info
- end
-
- function CSGWarModel:IsCSGWarSign( )
- return self.is_CSGWar_sign
- end
-
- function CSGWarModel:GetLastSignTime( )
- return self.last_sign_time or 0
- end
- --社团报名榜
- function CSGWarModel:SetCSGWarGuildSignList( vo )
- self.CSGWar_guild_sign_list = vo.rank_list
- self:Fire(CSGWarConst.UPDATE_CSGWAR_SIGN_LIST)
- end
-
- function CSGWarModel:GetCSGWarGuildSignList( )
- return self.CSGWar_guild_sign_list
- end
- --外援报名榜
- function CSGWarModel:SetCSGWarSupportSignList( vo )
- self.CSGWar_support_sign_list = vo.rank_list
- self:Fire(CSGWarConst.UPDATE_CSGWAR_SIGN_LIST)
- end
-
- function CSGWarModel:GetCSGWarSupportSignList( )
- return self.CSGWar_support_sign_list
- end
-
- function CSGWarModel:SetCSGWarCityInfo( vo )
- local data = {}
- for i,v in ipairs(vo) do
- data[v.city_id] = v
- end
- self.CSGWar_city_info = data
- self:Fire(CSGWarConst.UPDATE_CSGWAR_CITY_INFO)
- end
-
- function CSGWarModel:GetCSGWarCityInfo( )
- return self.CSGWar_city_info
- end
-
- function CSGWarModel:SetCSGWarResultInfo( vo )
- self.CSGWar_result_info = vo
- self:ChangeVar("CSGWar_result_info", self.CSGWar_result_info, false, true)
- end
-
- function CSGWarModel:GetCSGWarResultInfo( )
- return self.CSGWar_result_info
- end
- --是否在活动中
- function CSGWarModel:IsCSGWarOpen( )
- local bool = false
- if self.CSGWar_base_info then
- bool = self.CSGWar_base_info.switch == 1 and self.CSGWar_base_info.state == CSGWarConst.CSGWAR_STATE.START
- or self.CSGWar_base_info.state == CSGWarConst.CSGWAR_STATE.SIGN
- or self.CSGWar_base_info.state == CSGWarConst.CSGWAR_STATE.SUPPORT
- end
- return bool
- end
- --阵营分组信息
- function CSGWarModel:SetCSGWarCountryInfo( vo )
- for i,v in ipairs(vo) do
- if not self.CSGWar_group_info[v.group] then
- self.CSGWar_group_info[v.group] = {}
- end
- self.CSGWar_group_info[v.group][v.guild_id] = v
- end
- end
- --通过帮派id获取阵营
- function CSGWarModel:GetCountryIdByGuildId( guild_id )
- for i,v in pairs(self.CSGWar_group_info) do
- if v[guild_id] then
- return i
- end
- end
- return 0
- end
- --根据帮派id获取是否是参战的公会
- function CSGWarModel:IsCSGWarFightGuild( guild_id )
- return self.CSGWar_fight_guild_info[guild_id] or false
- end
- --设置应援列表
- function CSGWarModel:SetCSGWarSupportInfo( vo )
- self.my_support_num = vo.cur_help_num
- self.free_support_num = vo.free_help_num
- local all_support_num = 0
- if not self.CSGWar_support_info then
- self.CSGWar_support_info = {}
- end
- local data = {}
- for i,v in ipairs(vo.help_list) do
- data[v.fact_id] = v
- all_support_num = all_support_num + v.help_num
- end
- self.CSGWar_support_info = data
- self.all_support_num = all_support_num
- self.CSGWar_support_info.all_support_num = all_support_num
- self:ChangeVar("CSGWar_support_info", self.CSGWar_support_info, false, true)
- end
-
- function CSGWarModel:GetCSGWarSupportInfo( )
- return self.CSGWar_support_info or {}
- end
-
- function CSGWarModel:GetMySupportNum( )
- return self.my_support_num
- end
-
- function CSGWarModel:GetMyFreeSupportNum( )
- return self.free_support_num
- end
-
- function CSGWarModel:SetCSGWarRecordInfo( vo )
- local data = {}
- local temp_data = {}
- local temp_city = {}
- for i,v in ipairs(vo.logs) do
- temp_data = {
- time = v.time,
- }
- temp_city = {}
- for iii,vvv in ipairs(v.city_list) do
- temp_city[vvv.city_id] = vvv
- end
- temp_data.city_list = DeepCopy(temp_city)
- data[#data+1] = DeepCopy(temp_data)
- end
- self.CSGWar_record_info = data
- self:ChangeVar("CSGWar_record_info", self.CSGWar_record_info, false, true)
- end
-
- function CSGWarModel:GetCSGWarRecordInfo( )
- return self.CSGWar_record_info
- end
-
- function CSGWarModel:IsCSGWarNeedRed( )
- local bool = false
- local base_data = self:GetCSGWarBaseInfo()
- --没有打开过界面报名期间就有红点
- self.CSGWar_red_data.one_red = false
- if base_data and TableSize(base_data) > 0 and base_data.state == CSGWarConst.CSGWAR_STATE.SIGN and base_data.switch == 1 then
- if not self.has_open_csgwar_view then
- if not self:IsCSGWarSignPlayer() then
- bool = true
- self.CSGWar_red_data.one_red = true
- end
- end
- end
- --有免费应援次数也有红点
- self.CSGWar_red_data.support_red = false
- if base_data and TableSize(base_data) > 0 and base_data.state == CSGWarConst.CSGWAR_STATE.SUPPORT and base_data.switch == 1 then
- bool = bool or self:GetMyFreeSupportNum() > 0
- self.CSGWar_red_data.support_red = self:GetMyFreeSupportNum() > 0
- end
- --战场开启,可以进的玩家有红点
- self.CSGWar_red_data.fight_red = false
- if base_data and TableSize(base_data) > 0 and base_data.state == CSGWarConst.CSGWAR_STATE.START and base_data.switch == 1 then
- bool = bool or self:IsCSGWarSignPlayer()
- self.CSGWar_red_data.fight_red = self:IsCSGWarSignPlayer()
- end
- --日常占领奖励可领取红点
- --可领取的时机为不是报名和不是开打阶段
- local occupy_red_data = {}
- self.CSGWar_red_data.occupy_red = false
- if base_data and TableSize(base_data) > 0 and (base_data.state == CSGWarConst.CSGWAR_STATE.IDLE or base_data.state == CSGWarConst.CSGWAR_STATE.END) and base_data.switch == 1 then
- local data = self:GetCSGWarOccupyInfo()
- local server_id = RoleManager.Instance.mainRoleInfo.server_id
- for i,v in pairs(data) do
- if server_id == v.server_id and v.is_received_reward == 0 then
- bool = true
- occupy_red_data[v.city_id] = true
- self.CSGWar_red_data.occupy_red = true
- end
- end
- end
- self.CSGWar_red_data.occupy_red_data = occupy_red_data
- self:Fire(CSGWarConst.ANS_CSGWAR_RED)
- return bool
- end
-
- function CSGWarModel:GetCSGWarRedData( )
- return self.CSGWar_red_data
- end
- --是否是参战玩家
- function CSGWarModel:IsCSGWarSignPlayer( )
- return self.is_CSGWar_sign
- end
- --判断是否可以弹邀请函
- function CSGWarModel:CheckCanOpenCSGWarTip( )
- local base_data = self:GetCSGWarBaseInfo()
- if self:IsCSGWarSignPlayer() and TableSize(base_data) > 0 and base_data.state == CSGWarConst.CSGWAR_STATE.START and base_data.switch == 1 then
- if not self.CSGWar_activity_tip_open_data[CSGWarConst.CSGWAR_STATE.START] then
- GlobalEventSystem:Fire(EventName.OPEN_ACITVITY_TIP,601,nil,true)
- self.CSGWar_activity_tip_open_data[CSGWarConst.CSGWAR_STATE.START] = true
- end
- end
- end
- --等待协议数据
- function CSGWarModel:SetCSGWarWaitInfo( scmd_num )
- self.wait_list[scmd_num] = true
- if self.start_wait_info and self.wait_list[60100] and self.wait_list[60102] then
- self.start_wait_info = false
- self:CheckCanOpenCSGWarTip()
- end
- end
-
- function CSGWarModel:SetCSGWarOverlordInfo( vo )
- self.CSGWar_overlord_info = vo
- end
-
- function CSGWarModel:GetCSGWarOverlordInfo( )
- return self.CSGWar_overlord_info
- end
-
- ----------公示相关-start---------
- -- 通过活动日历判断是否需要展示公示界面
- function CSGWarModel:NeedShowCSGWarResult()
- -- 要满足跨服
- local cur_stage = KfWorldModel:GetInstance():GetCurStage( )
- if cur_stage < 2 then
- return false
- end
-
- -- 要有占领数据
- if TableSize(self:GetCSGWarOccupyInfo()) <= 0 then
- return false
- end
-
- -- 要满足开服/跨服天数
- local act_cfg = Config.Ac["601@0@1"]
- local act_cfg_merge = Config.Ac["601@0@2"]
- local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
- local merge_day = ServerTimeModel:getInstance():GetMergeServerDay()
- local openDay_limit = tonumber(stringtotable(act_cfg.open_day)[1][1])
- local mergeDay_limt = tonumber(stringtotable(act_cfg_merge.merge_day)[1][1])
-
- -- 有合服 且合服天数小于等于限制条件则不显示
- if mergeDay_limt and merge_day > 0 and merge_day < mergeDay_limt then
- return false
- -- 有开服限制 且开服天数小于等于限制条件则不显示
- elseif openDay_limit and open_day > 0 and open_day < openDay_limit then
- return false
- end
- local act_end_week = stringtotable(act_cfg.week)[1] -- 活动结束是周几
- local act_end_time = stringtotable(act_cfg.time_region)[1][2] -- 活动结束时间(时分)
- local act_open_hour = tonumber(act_end_time[1])
- local act_open_min = tonumber(act_end_time[2])
- local show_time = 24 * 3600 * self:GetCSGWarKVCFG( "public_time" ).value -- 公示持续时间 3天
- local show_end_time = false -- 展示结束时间
-
- local key_time -- 刚满足开服时间的那一天的时间戳
- if mergeDay_limt and merge_day > 0 then
- key_time = ServerTimeModel:getInstance():GetMergeServerTime() + (mergeDay_limt - 1) * 3600 * 24
- else
- key_time = ServerTimeModel:getInstance():GetOpenServerTime() + (openDay_limit - 1) * 3600 * 24
- end
-
- local act_first_open_time = self:GetNextWeekDayTime( act_end_week, key_time, act_open_hour, act_open_min, 0)
- local cur_time = TimeUtil:getServerTime()
-
- -- 当前时间在开服后第一次开活动的时间内 (特殊判断第一个满足的周N )
- show_end_time = act_first_open_time + show_time
- --print('=======Msh:CSGWarModel.lua[359] =======', TimeUtil:timeConversion(key_time, 'mm-dd hh:MM:ss'))
- --print('=======Msh:CSGWarModel.lua[359] =======', TimeUtil:timeConversion(act_first_open_time, 'mm-dd hh:MM:ss'))
- --print('=======Msh:CSGWarModel.lua[359] =======', TimeUtil:timeConversion(show_end_time, 'mm-dd hh:MM:ss'))
- if cur_time <= show_end_time then
- if cur_time >= act_first_open_time then
- return true, show_end_time
- else
- --print('=======Msh:CSGWarModel.lua[363] =======', data)
- return false
- end
- end
-
- -- 正常的自然周判断
- local last_open_time = self:GetLastWeekDayTime( act_end_week, cur_time, act_open_hour, act_open_min, 0)
- show_end_time = last_open_time + show_time
- if cur_time <= show_end_time and cur_time > last_open_time then
- return true, show_end_time
- else
- --print('=======Msh:CSGWarModel.lua[373] =======', data)
- return false
- end
- end
-
- -- 传入时间time得到 该时间的【上一个周几week】 的 【hour点min分sec秒】 的时间戳
- function CSGWarModel:GetLastWeekDayTime( week, t_time, hour, min, sec )
- local t_time = t_time or TimeUtil:getServerTime()
- local date = os.date("*t", t_time)
- local date_n = {
- year = date.year,
- month = date.month,
- day = date.day,
- hour = hour or 0,
- min = min or 0,
- sec = sec or 0,
- }
- local cur_time = os.time(date_n)
- local cur_week_day = tonumber(os.date("%w", cur_time)) -- 今天周几
- cur_week_day = cur_week_day == 0 and 7 or cur_week_day
- local offset_day = self:GetLastOrNextWeekOffset( cur_week_day, week, true)
- local one_day_sec = 24 * 60 * 60
- local target_time = cur_time - offset_day * one_day_sec
- if t_time - target_time >= 7 * one_day_sec and cur_week_day == tonumber(week) then -- 两个时间的间隔超过七天(不合理)
- -- 特殊判断临界值的情况
- return cur_time
- end
-
- return target_time
- end
-
- -- 传入时间time得到 该时间的【下一个周几week】 的 【hour点min分sec秒】 的时间戳
- function CSGWarModel:GetNextWeekDayTime( week, t_time, hour, min, sec)
- local t_time = t_time or TimeUtil:getServerTime()
- local date = os.date("*t", t_time)
- local date_n = {
- year = date.year,
- month = date.month,
- day = date.day,
- hour = hour or 0,
- min = min or 0,
- sec = sec or 0,
- }
- local cur_time = os.time(date_n)
- local cur_week_day = tonumber(os.date("%w", cur_time)) -- 今天周几
- cur_week_day = cur_week_day == 0 and 7 or cur_week_day
- if cur_week_day == tonumber(week) then
- return cur_time
- end
- local offset_day = self:GetLastOrNextWeekOffset( cur_week_day, week)
- local target_time = cur_time + offset_day * 24 * 60 * 60
- return target_time
- end
-
- -- 当前周cur_week_day 与 获取的下一个 或 上一个 周week 的相差的天数
- function CSGWarModel:GetLastOrNextWeekOffset( cur_week_day, week, is_last)
- if is_last then -- 上一个周几
- if week < cur_week_day then
- return cur_week_day - week
- else
- return cur_week_day + 7 - week
- end
- else -- 下一个周几
- if cur_week_day < week then
- return week - cur_week_day
- else
- return week + 7 - cur_week_day
- end
- end
- end
-
- -- 获取公示的红点
- function CSGWarModel:GetShowIconRed( )
- -- 占领奖励红点
- local bool1 = false
- local red_data = self:GetCSGWarRedData()
- if red_data.occupy_red then
- bool1 = true
- end
-
- -- 每天首次登陆红点
- local bool2 = self:GetLoginRed( )
- return bool1 or bool2
- end
-
- -- 每天首次登陆红点cookie
- function CSGWarModel:SetLoginCookie( bool )
- CookieWrapper.Instance:SaveCookie(CookieLevelType.Account,
- CookieTimeType.TYPE_DAY2, CookieKey.CSGWAR_SHOW_ICON_LOGIN_RED, bool)
- CookieWrapper.Instance:WriteAll()
- end
-
- function CSGWarModel:GetLoginRed( )
- local today_has_show = CookieWrapper.Instance:GetCookie(CookieLevelType.Account,
- CookieKey.CSGWAR_SHOW_ICON_LOGIN_RED)
- return not today_has_show
- end
-
- function CSGWarModel:SetLoginRed( bool )
- if bool == false then
- self:SetLoginCookie( true )
- self:UpdateShowIconRed( )
- end
- end
-
- -- 刷新公示图标红点
- function CSGWarModel:UpdateShowIconRed( )
- local bool = self:GetShowIconRed( )
- GlobalEventSystem:Fire(ActivityIconManager.UPDATE_ICON_TIPS, 60101, bool)
- end
- ----------公示相关-end-----------
|