源战役客户端
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.

315 lines
9.7 KiB

  1. BeachModel = BeachModel or BaseClass(BaseVo, true)
  2. local BeachModel = BeachModel
  3. BeachModel.VoiceType = { -- 喊话类型
  4. RankOne = 1,
  5. Vote = 2,
  6. }
  7. function BeachModel:__init()
  8. BeachModel.Instance = self
  9. self:Reset()
  10. end
  11. function BeachModel:Reset()
  12. self.show_scene_left_tip = nil
  13. self.activity_info = false
  14. self.my_info = false
  15. self.vote_rank_info = false
  16. self.exp_info = 0
  17. self.top_info = false
  18. self.my_vote_list = {}
  19. self.scene_friend_list = {}
  20. -------------------------
  21. self.talk_red_dot = false--聊天红点
  22. self.vote_red_dot = false--投票红点
  23. -------------------------
  24. self.need_show_activity_tip = true
  25. self.message_break_time = 5
  26. self.vote_break_time = 2
  27. self:InitRankPage( )
  28. self:InitBeachVoiceCfg( )
  29. end
  30. function BeachModel:GetInstance()
  31. if BeachModel.Instance == nil then
  32. BeachModel.Instance = BeachModel.New()
  33. end
  34. return BeachModel.Instance
  35. end
  36. function BeachModel:getInstance()
  37. return self:GetInstance()
  38. end
  39. function BeachModel:GetKeyValue( tag )
  40. if not self.kv_conf then
  41. self.kv_conf = {}
  42. for k,v in pairs(Config.Beachkv) do
  43. self.kv_conf[Trim(v.key)] = v
  44. end
  45. end
  46. return tag and self.kv_conf[tag].value or false
  47. end
  48. --活动状态
  49. function BeachModel:GetActivityInfo( )
  50. return self.activity_info
  51. end
  52. function BeachModel:SetActivityInfo( value )
  53. self.activity_info = value
  54. end
  55. function BeachModel:GetActivityIsGoing( )
  56. local act_info = self:GetActivityInfo()
  57. if act_info and act_info.status ~= 0 and act_info.end_time then
  58. return act_info.end_time > TimeUtil:getServerTime()
  59. end
  60. return false
  61. end
  62. --个人信息
  63. function BeachModel:GetMyInfo( )
  64. return self.my_info
  65. end
  66. function BeachModel:SetMyInfo( value )
  67. self.my_info = value
  68. if not self.last_rank then -- 默认没有排名
  69. self.last_rank = 0
  70. end
  71. if self.my_info.rank and self.my_info.rank == 1 and self.last_rank ~= 1 then
  72. self:BeachSendMsg(BeachModel.VoiceType.RankOne)
  73. end
  74. self.last_rank = self.my_info.rank
  75. end
  76. function BeachModel:RefreshMyVoteNum( vote_times,has_buy_times,vote_other_time )
  77. if self:GetMyInfo( ) then
  78. self:GetMyInfo( ).vote_times = vote_times or self:GetMyInfo( ).vote_times
  79. self:GetMyInfo( ).has_buy_times = has_buy_times or self:GetMyInfo( ).has_buy_times
  80. self:GetMyInfo( ).vote_other_time = vote_other_time or self:GetMyInfo( ).vote_other_time
  81. end
  82. end
  83. function BeachModel:RefreshMyExp( add_exp )
  84. if self:GetMyInfo( ) then
  85. self:GetMyInfo( ).acc_exp = self:GetMyInfo( ).acc_exp + add_exp
  86. end
  87. end
  88. --投票排行榜
  89. function BeachModel:GetVoteRankInfo( )
  90. return self.vote_rank_info
  91. end
  92. function BeachModel:SetVoteRankInfo( value )
  93. self.vote_rank_info = value
  94. self.vote_rank_info.new_list = self.vote_rank_info.new_list or {}
  95. for k,v in pairs(value.rank_list) do
  96. self.vote_rank_info.new_list[v.rank] = v
  97. end
  98. for k,v in pairs(value.left_rank) do
  99. self.vote_rank_info.new_list[v.rank] = v
  100. end
  101. if not self.last_rank then -- 默认没有排名
  102. self.last_rank = 0
  103. end
  104. if self.vote_rank_info.self_rank and self.vote_rank_info.self_rank == 1 and self.last_rank ~= 1 then
  105. self:BeachSendMsg(BeachModel.VoiceType.RankOne)
  106. end
  107. self.last_rank = self.vote_rank_info.self_rank
  108. end
  109. --魅力第一(舞台solo者)
  110. function BeachModel:GetTopInfo( )
  111. return self.top_info
  112. end
  113. function BeachModel:SetTopInfo( value )
  114. self.top_info = value
  115. end
  116. --我的投票列表(谁投了我)
  117. function BeachModel:GetMyVoteList( )
  118. return self.my_vote_list or {}
  119. end
  120. function BeachModel:SetMyVoteList( value )
  121. self.my_vote_list = value
  122. end
  123. --获取现场的好友/公会成员列表
  124. function BeachModel:GetSceneFriendList( type_id )
  125. return self.scene_friend_list[type_id] or {}
  126. end
  127. function BeachModel:SetSceneFriendList( type_id, value )
  128. self.scene_friend_list[type_id] = value
  129. end
  130. function BeachModel:GetRewardConfByRank( rank )
  131. rank = rank or 0
  132. for k,v in pairs(Config.Beachreward) do
  133. if rank >= v.rank_ll and rank <= v. rank_ul then
  134. return stringtotable(v.reward)
  135. end
  136. end
  137. return {}
  138. end
  139. function BeachModel:GetRankShowList( page)
  140. local page = page or self:GetCurRankPage()
  141. local start_rank = (page - 1) * BeachConst.SingleRankLength + 1
  142. local end_rank = start_rank + 19
  143. local rank_data = self:GetVoteRankInfo()
  144. -------------------------
  145. local show_data = {}
  146. if rank_data then
  147. -- for k,v in pairs(rank_data.rank_list) do
  148. -- table.insert( show_data, v )
  149. -- end
  150. -- for k,v in pairs(rank_data.left_rank) do
  151. -- table.insert( show_data, v )
  152. -- end
  153. for i=start_rank, end_rank do
  154. if rank_data.new_list[i] then
  155. table.insert( show_data, rank_data.new_list[i] )
  156. end
  157. end
  158. if #show_data > 1 then
  159. local function sort_call( a,b )
  160. --从大到小
  161. return a.rank < b.rank
  162. end
  163. table.sort( show_data, sort_call )
  164. end
  165. end
  166. -------------------------
  167. return show_data
  168. end
  169. function BeachModel:SetTalkClock()
  170. if not self.talk_clock_Id then
  171. self.talk_clock = self.message_break_time
  172. local function step_method( ... )
  173. self.talk_clock = self.talk_clock -1
  174. if self.talk_clock <= 0 then
  175. --倒计时结束
  176. self:CloseTalkClock()
  177. end
  178. end
  179. self.talk_clock_Id = GlobalTimerQuest:AddPeriodQuest(step_method, 1, -1)
  180. else
  181. -- local str = string.format("剩余CD %d 秒",self.talk_clock or 0)
  182. local str = "发送频率过快,请稍后再试..."
  183. Message.show(str)
  184. end
  185. end
  186. function BeachModel:CloseTalkClock()
  187. self.talk_clock = 0
  188. if self.talk_clock_Id then
  189. GlobalTimerQuest:CancelQuest(self.talk_clock_Id)
  190. self.talk_clock_Id = nil
  191. end
  192. end
  193. function BeachModel:SetVoteClock()
  194. if not self.vote_clock_Id then
  195. self.vote_clock = TimeUtil:getServerTimeMs() + self.vote_break_time * 1000
  196. local function step_method( ... )
  197. local a = TimeUtil:getServerTimeMs() - self.vote_clock
  198. if TimeUtil:getServerTimeMs() >= self.vote_clock then
  199. --倒计时结束
  200. self:CloseVoteClock()
  201. end
  202. end
  203. self.vote_clock_Id = GlobalTimerQuest:AddPeriodQuest(step_method, 1, -1)
  204. self:Fire(BeachConst.REFRESH_VOTE_CLOCK)
  205. else
  206. return self.vote_clock
  207. end
  208. end
  209. function BeachModel:CloseVoteClock()
  210. self.vote_clock = nil
  211. if self.vote_clock_Id then
  212. GlobalTimerQuest:CancelQuest(self.vote_clock_Id)
  213. self.vote_clock_Id = nil
  214. end
  215. end
  216. function BeachModel:IsShowDynamicInfo( )
  217. return SceneManager.Instance:IsBeachScene() and self.show_scene_left_tip
  218. end
  219. function BeachModel:GetReleaseExpTime( )
  220. local base_info = self:GetMyInfo( )
  221. if not base_info then return 0 end
  222. -------------------------
  223. local max_can_get = self:GetKeyValue("buy_vote_times")--最大可获得经验的次数
  224. local can_exp_num = max_can_get - base_info.vote_other_time
  225. return can_exp_num > 0 and can_exp_num or 0
  226. end
  227. function BeachModel:VoteToOher( name,role_id )
  228. local data = {name = name, role_id = role_id}
  229. self:Fire(BeachConst.OPEN_VOTE_VIEW,data)
  230. end
  231. -- 初始化排行榜页数
  232. function BeachModel:InitRankPage( )
  233. self.cur_rank_show_page = 1
  234. end
  235. -- 变更页数
  236. function BeachModel:SetBeachRankCurShowPage( change_page )
  237. self.cur_rank_show_page = self.cur_rank_show_page + change_page
  238. self.cur_rank_show_page = Mathf.Clamp(self.cur_rank_show_page, 1, BeachConst.MAX_RANK_SHOW_PAGE )
  239. end
  240. -- 获取当前页数
  241. function BeachModel:GetCurRankPage( )
  242. return self.cur_rank_show_page
  243. end
  244. -- 获取当前应该请求的页数 1-20发0 21-40发1 以此类推
  245. function BeachModel:GetCurRankSetSCMDLength( )
  246. return (self:GetCurRankPage() - 1) * BeachConst.SingleRankLength
  247. end
  248. ----------喊话-start---------
  249. function BeachModel:InitBeachVoiceCfg( )
  250. self.cfg_beach_voice = {}
  251. self.cfg_beach_voice_content = {}
  252. self.last_send_msg_time_cache = {}
  253. for i,v in pairs(Config.Beachvoice) do
  254. self.cfg_beach_voice[v.type] = v
  255. end
  256. for k,v in pairs(Config.Beachvoicecontent) do
  257. self.cfg_beach_voice_content[v.base_id] = self.cfg_beach_voice_content[v.base_id] or {}
  258. table.insert(self.cfg_beach_voice_content[v.base_id], v)
  259. end
  260. end
  261. -- 发送喊话
  262. function BeachModel:BeachSendMsg( voice_type, extra_param )
  263. --print('=======Msh:BeachModel.lua[284] =======', voice_type)
  264. local voice_cfg = self.cfg_beach_voice[voice_type]
  265. if not voice_cfg then return end
  266. local cur_time = TimeUtil:getServerTime( )
  267. -- 发送间隔
  268. if self.last_send_msg_time_cache[voice_type]
  269. and cur_time - self.last_send_msg_time_cache[voice_type] < voice_cfg.cd
  270. then
  271. return
  272. end
  273. local base_id = voice_cfg.base_id
  274. local random_index = math.random(1, #self.cfg_beach_voice_content[base_id])
  275. local content = ChuanWenManager:getInstance():FormatColorTag2(self.cfg_beach_voice_content[base_id][random_index].content, true)
  276. if extra_param then
  277. content = string.gsub(content, "<@player>", extra_param)
  278. end
  279. -- print('=======Msh:BeachModel.lua[299] =======', content)
  280. if content and content ~= "" then
  281. self.last_send_msg_time_cache[voice_type] = cur_time
  282. local tmpArgs = ChatModel:getInstance():GetAllArgsText(content)
  283. content = ChatModel:getInstance():GetHyperlinkText(content)
  284. ChatModel:getInstance():Fire(ChatModel.SEND_MSG, ChatModel.CHANNEL_BEACH, content, nil, tmpArgs, ChatModel.CHAT_COMMON_TYPE.SYSTEM)
  285. end
  286. end
  287. ----------喊话-end-----------