ServerTimeModel = ServerTimeModel or BaseClass(BaseModel) ServerTimeModel.DAY_CHANGE = "ST.DAY_CHANGE" ServerTimeModel.OVER_TWENTY_FOUR_HOURS = "OVER_TWENTY_FOUR_HOURS" ServerTimeModel.INIT_TIME_SUCCEED = "ServerTimeModel.INIT_TIME_SUCCEED" function ServerTimeModel:__init() ServerTimeModel.Instance = self --开服时间 self.open_time = 0 --合服时间 self.merge_time = 0 --合服0点时间 self.merge_midnight_time = 0 --合服次数 self.merge_count = 0 --登录天数 self.login_day = 0 --当天的零点时间戳 self.unixdate = 0 --当前的世界等级 self.world_lv = 0 --是否初始化开服天数 self.is_init_serverTime = false --创角时间 self.create_time = 0 end function ServerTimeModel:getInstance() if ServerTimeModel.Instance == nil then ServerTimeModel.New(); end return ServerTimeModel.Instance; end --初始化开服信息 function ServerTimeModel:InitServerTime(vo) --开服时间 self.open_time = vo.open_time --合服时间 self.merge_time = vo.merge_time --合服0点时间 self.merge_midnight_time = vo.merge_midnight_time --合服次数 self.merge_count = vo.merge_count --当天零点的unix时间戳 self.unixdate = vo.unixdate self.world_lv = vo.world_lv self:EnableDayCheck(true) self.is_init_serverTime = true self:Fire(ServerTimeModel.INIT_TIME_SUCCEED) -- self:CheckOverTwentyFourHours(true) end --选角时候返回提前更新开服天数 function ServerTimeModel:UpdateOpenTime( open_time ) self.open_time = open_time end function ServerTimeModel:EnableDayCheck(bool) if bool then local curDay = self:GetOpenServerDay() if self.lastDay and self.lastDay ~= curDay then EventSystem.Fire(GlobalEventSystem,ServerTimeModel.DAY_CHANGE) end self.lastDay = curDay if not self.timer_clock then local function day_ticktock() local curDay = self:GetOpenServerDay() if curDay ~= self.lastDay then EventSystem.Fire(GlobalEventSystem,ServerTimeModel.DAY_CHANGE) end self.lastDay = curDay end self.lastDay = self:GetOpenServerDay() self.timer_clock = TimerQuest.AddPeriodQuest(GlobalTimerQuest, day_ticktock, 59) end else if self.timer_clock then TimerQuest.CancelQuest(GlobalTimerQuest, self.timer_clock) self.timer_clock = nil end end end function ServerTimeModel:CheckOverTwentyFourHours(bool) if bool then if not self.twenty_four_timer then local function second_count_down() local gap = TimeUtil:getServerTime() - self.open_time local day_sec = gap % (3600 * 24) local tweenty_four_sec = 21 * 3600 --开服时间是3点开始的,要减去3小时 if day_sec >= tweenty_four_sec and not self.have_notify then self.have_notify = true GlobalEventSystem:Fire(ServerTimeModel.OVER_TWENTY_FOUR_HOURS) elseif day_sec < tweenty_four_sec and self.have_notify then self.have_notify = false end end self.twenty_four_timer = GlobalTimerQuest:AddPeriodQuest(second_count_down, 1) end else if self.twenty_four_timer then GlobalTimerQuest:CancelQuest(self.twenty_four_timer) self.twenty_four_timer = nil end end end function ServerTimeModel:GetOpenServerTime() return self.open_time end function ServerTimeModel:GetMergeServerTime() return self.merge_time end function ServerTimeModel:GetUnixDataTime() return self.unixdate end --获取开服天数 function ServerTimeModel:GetOpenServerDay() local gap = TimeUtil:getServerTime() - self.open_time local day = gap / 3600 / 24 return math.ceil(day) end --获取合服天数 function ServerTimeModel:GetMergeServerDay() local gap = TimeUtil:getServerTime() - self.merge_time if self.merge_time == 0 then gap = 0 end local day = gap / 3600 / 24 return math.ceil(day) end --根据开服天数得到服务器等级 function ServerTimeModel:GetWorldLevel() return self.world_lv end function ServerTimeModel:SetLoginDay(login_day) self.login_day = login_day end --登录累积天数 function ServerTimeModel:GetLoginDay() return self.login_day end --创角时间 function ServerTimeModel:SetCreateRoleTime( create_time ) self.create_time = create_time end function ServerTimeModel:GetCreateRoleTime() return self.create_time or 0 end function ServerTimeModel:GetCreateRoleDay( ) if not self.create_time then return 0 end local gap = TimeUtil:getServerTime() - self.create_time if self.create_time == 0 then gap = 0 end local day = gap / 3600 / 24 return math.ceil(day) end