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
|