源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

173 行
4.3 KiB

  1. ServerTimeModel = ServerTimeModel or BaseClass(BaseModel)
  2. ServerTimeModel.DAY_CHANGE = "ST.DAY_CHANGE"
  3. ServerTimeModel.OVER_TWENTY_FOUR_HOURS = "OVER_TWENTY_FOUR_HOURS"
  4. ServerTimeModel.INIT_TIME_SUCCEED = "ServerTimeModel.INIT_TIME_SUCCEED"
  5. function ServerTimeModel:__init()
  6. ServerTimeModel.Instance = self
  7. --开服时间
  8. self.open_time = 0
  9. --合服时间
  10. self.merge_time = 0
  11. --合服0点时间
  12. self.merge_midnight_time = 0
  13. --合服次数
  14. self.merge_count = 0
  15. --登录天数
  16. self.login_day = 0
  17. --当天的零点时间戳
  18. self.unixdate = 0
  19. --当前的世界等级
  20. self.world_lv = 0
  21. --是否初始化开服天数
  22. self.is_init_serverTime = false
  23. --创角时间
  24. self.create_time = 0
  25. end
  26. function ServerTimeModel:getInstance()
  27. if ServerTimeModel.Instance == nil then
  28. ServerTimeModel.New();
  29. end
  30. return ServerTimeModel.Instance;
  31. end
  32. --初始化开服信息
  33. function ServerTimeModel:InitServerTime(vo)
  34. --开服时间
  35. self.open_time = vo.open_time
  36. --合服时间
  37. self.merge_time = vo.merge_time
  38. --合服0点时间
  39. self.merge_midnight_time = vo.merge_midnight_time
  40. --合服次数
  41. self.merge_count = vo.merge_count
  42. --当天零点的unix时间戳
  43. self.unixdate = vo.unixdate
  44. self.world_lv = vo.world_lv
  45. self:EnableDayCheck(true)
  46. self.is_init_serverTime = true
  47. self:Fire(ServerTimeModel.INIT_TIME_SUCCEED)
  48. -- self:CheckOverTwentyFourHours(true)
  49. end
  50. --选角时候返回提前更新开服天数
  51. function ServerTimeModel:UpdateOpenTime( open_time )
  52. self.open_time = open_time
  53. end
  54. function ServerTimeModel:EnableDayCheck(bool)
  55. if bool then
  56. local curDay = self:GetOpenServerDay()
  57. if self.lastDay and self.lastDay ~= curDay then
  58. EventSystem.Fire(GlobalEventSystem,ServerTimeModel.DAY_CHANGE)
  59. end
  60. self.lastDay = curDay
  61. if not self.timer_clock then
  62. local function day_ticktock()
  63. local curDay = self:GetOpenServerDay()
  64. if curDay ~= self.lastDay then
  65. EventSystem.Fire(GlobalEventSystem,ServerTimeModel.DAY_CHANGE)
  66. end
  67. self.lastDay = curDay
  68. end
  69. self.lastDay = self:GetOpenServerDay()
  70. self.timer_clock = TimerQuest.AddPeriodQuest(GlobalTimerQuest, day_ticktock, 59)
  71. end
  72. else
  73. if self.timer_clock then
  74. TimerQuest.CancelQuest(GlobalTimerQuest, self.timer_clock)
  75. self.timer_clock = nil
  76. end
  77. end
  78. end
  79. function ServerTimeModel:CheckOverTwentyFourHours(bool)
  80. if bool then
  81. if not self.twenty_four_timer then
  82. local function second_count_down()
  83. local gap = TimeUtil:getServerTime() - self.open_time
  84. local day_sec = gap % (3600 * 24)
  85. local tweenty_four_sec = 21 * 3600 --开服时间是3点开始的,要减去3小时
  86. if day_sec >= tweenty_four_sec and not self.have_notify then
  87. self.have_notify = true
  88. GlobalEventSystem:Fire(ServerTimeModel.OVER_TWENTY_FOUR_HOURS)
  89. elseif day_sec < tweenty_four_sec and self.have_notify then
  90. self.have_notify = false
  91. end
  92. end
  93. self.twenty_four_timer = GlobalTimerQuest:AddPeriodQuest(second_count_down, 1)
  94. end
  95. else
  96. if self.twenty_four_timer then
  97. GlobalTimerQuest:CancelQuest(self.twenty_four_timer)
  98. self.twenty_four_timer = nil
  99. end
  100. end
  101. end
  102. function ServerTimeModel:GetOpenServerTime()
  103. return self.open_time
  104. end
  105. function ServerTimeModel:GetMergeServerTime()
  106. return self.merge_time
  107. end
  108. function ServerTimeModel:GetUnixDataTime()
  109. return self.unixdate
  110. end
  111. --获取开服天数
  112. function ServerTimeModel:GetOpenServerDay()
  113. local gap = TimeUtil:getServerTime() - self.open_time
  114. local day = gap / 3600 / 24
  115. return math.ceil(day)
  116. end
  117. --获取合服天数
  118. function ServerTimeModel:GetMergeServerDay()
  119. local gap = TimeUtil:getServerTime() - self.merge_time
  120. if self.merge_time == 0 then
  121. gap = 0
  122. end
  123. local day = gap / 3600 / 24
  124. return math.ceil(day)
  125. end
  126. --根据开服天数得到服务器等级
  127. function ServerTimeModel:GetWorldLevel()
  128. return self.world_lv
  129. end
  130. function ServerTimeModel:SetLoginDay(login_day)
  131. self.login_day = login_day
  132. end
  133. --登录累积天数
  134. function ServerTimeModel:GetLoginDay()
  135. return self.login_day
  136. end
  137. --创角时间
  138. function ServerTimeModel:SetCreateRoleTime( create_time )
  139. self.create_time = create_time
  140. end
  141. function ServerTimeModel:GetCreateRoleTime()
  142. return self.create_time or 0
  143. end
  144. function ServerTimeModel:GetCreateRoleDay( )
  145. if not self.create_time then
  146. return 0
  147. end
  148. local gap = TimeUtil:getServerTime() - self.create_time
  149. if self.create_time == 0 then
  150. gap = 0
  151. end
  152. local day = gap / 3600 / 24
  153. return math.ceil(day)
  154. end