|
|
- BeachModel = BeachModel or BaseClass(BaseVo, true)
- local BeachModel = BeachModel
-
- BeachModel.VoiceType = { -- 喊话类型
- RankOne = 1,
- Vote = 2,
- }
-
- function BeachModel:__init()
- BeachModel.Instance = self
- self:Reset()
- end
-
- function BeachModel:Reset()
- self.show_scene_left_tip = nil
- self.activity_info = false
- self.my_info = false
- self.vote_rank_info = false
- self.exp_info = 0
- self.top_info = false
- self.my_vote_list = {}
- self.scene_friend_list = {}
- -------------------------
- self.talk_red_dot = false--聊天红点
- self.vote_red_dot = false--投票红点
- -------------------------
- self.need_show_activity_tip = true
- self.message_break_time = 5
- self.vote_break_time = 2
- self:InitRankPage( )
- self:InitBeachVoiceCfg( )
- end
-
- function BeachModel:GetInstance()
- if BeachModel.Instance == nil then
- BeachModel.Instance = BeachModel.New()
- end
- return BeachModel.Instance
- end
-
- function BeachModel:getInstance()
- return self:GetInstance()
- end
-
- function BeachModel:GetKeyValue( tag )
- if not self.kv_conf then
- self.kv_conf = {}
- for k,v in pairs(Config.Beachkv) do
- self.kv_conf[Trim(v.key)] = v
- end
- end
- return tag and self.kv_conf[tag].value or false
- end
-
- --活动状态
- function BeachModel:GetActivityInfo( )
- return self.activity_info
- end
- function BeachModel:SetActivityInfo( value )
- self.activity_info = value
- end
- function BeachModel:GetActivityIsGoing( )
- local act_info = self:GetActivityInfo()
- if act_info and act_info.status ~= 0 and act_info.end_time then
- return act_info.end_time > TimeUtil:getServerTime()
- end
- return false
- end
-
- --个人信息
- function BeachModel:GetMyInfo( )
- return self.my_info
- end
- function BeachModel:SetMyInfo( value )
- self.my_info = value
- if not self.last_rank then -- 默认没有排名
- self.last_rank = 0
- end
- if self.my_info.rank and self.my_info.rank == 1 and self.last_rank ~= 1 then
- self:BeachSendMsg(BeachModel.VoiceType.RankOne)
- end
- self.last_rank = self.my_info.rank
- end
- function BeachModel:RefreshMyVoteNum( vote_times,has_buy_times,vote_other_time )
- if self:GetMyInfo( ) then
- self:GetMyInfo( ).vote_times = vote_times or self:GetMyInfo( ).vote_times
- self:GetMyInfo( ).has_buy_times = has_buy_times or self:GetMyInfo( ).has_buy_times
- self:GetMyInfo( ).vote_other_time = vote_other_time or self:GetMyInfo( ).vote_other_time
- end
- end
- function BeachModel:RefreshMyExp( add_exp )
- if self:GetMyInfo( ) then
- self:GetMyInfo( ).acc_exp = self:GetMyInfo( ).acc_exp + add_exp
- end
- end
-
- --投票排行榜
- function BeachModel:GetVoteRankInfo( )
- return self.vote_rank_info
- end
- function BeachModel:SetVoteRankInfo( value )
- self.vote_rank_info = value
- self.vote_rank_info.new_list = self.vote_rank_info.new_list or {}
- for k,v in pairs(value.rank_list) do
- self.vote_rank_info.new_list[v.rank] = v
- end
- for k,v in pairs(value.left_rank) do
- self.vote_rank_info.new_list[v.rank] = v
- end
-
- if not self.last_rank then -- 默认没有排名
- self.last_rank = 0
- end
- if self.vote_rank_info.self_rank and self.vote_rank_info.self_rank == 1 and self.last_rank ~= 1 then
- self:BeachSendMsg(BeachModel.VoiceType.RankOne)
- end
- self.last_rank = self.vote_rank_info.self_rank
- end
-
- --魅力第一(舞台solo者)
- function BeachModel:GetTopInfo( )
- return self.top_info
- end
- function BeachModel:SetTopInfo( value )
- self.top_info = value
- end
-
- --我的投票列表(谁投了我)
- function BeachModel:GetMyVoteList( )
- return self.my_vote_list or {}
- end
- function BeachModel:SetMyVoteList( value )
- self.my_vote_list = value
- end
-
- --获取现场的好友/公会成员列表
- function BeachModel:GetSceneFriendList( type_id )
- return self.scene_friend_list[type_id] or {}
- end
- function BeachModel:SetSceneFriendList( type_id, value )
- self.scene_friend_list[type_id] = value
- end
-
- function BeachModel:GetRewardConfByRank( rank )
- rank = rank or 0
- for k,v in pairs(Config.Beachreward) do
- if rank >= v.rank_ll and rank <= v. rank_ul then
- return stringtotable(v.reward)
- end
- end
- return {}
- end
-
- function BeachModel:GetRankShowList( page)
- local page = page or self:GetCurRankPage()
- local start_rank = (page - 1) * BeachConst.SingleRankLength + 1
- local end_rank = start_rank + 19
- local rank_data = self:GetVoteRankInfo()
- -------------------------
- local show_data = {}
- if rank_data then
- -- for k,v in pairs(rank_data.rank_list) do
- -- table.insert( show_data, v )
- -- end
- -- for k,v in pairs(rank_data.left_rank) do
- -- table.insert( show_data, v )
- -- end
- for i=start_rank, end_rank do
- if rank_data.new_list[i] then
- table.insert( show_data, rank_data.new_list[i] )
- end
- end
- if #show_data > 1 then
- local function sort_call( a,b )
- --从大到小
- return a.rank < b.rank
- end
- table.sort( show_data, sort_call )
- end
- end
- -------------------------
- return show_data
- end
-
- function BeachModel:SetTalkClock()
- if not self.talk_clock_Id then
- self.talk_clock = self.message_break_time
- local function step_method( ... )
- self.talk_clock = self.talk_clock -1
- if self.talk_clock <= 0 then
- --倒计时结束
- self:CloseTalkClock()
- end
- end
- self.talk_clock_Id = GlobalTimerQuest:AddPeriodQuest(step_method, 1, -1)
- else
- -- local str = string.format("剩余CD %d 秒",self.talk_clock or 0)
- local str = "发送频率过快,请稍后再试..."
- Message.show(str)
- end
- end
-
- function BeachModel:CloseTalkClock()
- self.talk_clock = 0
- if self.talk_clock_Id then
- GlobalTimerQuest:CancelQuest(self.talk_clock_Id)
- self.talk_clock_Id = nil
- end
- end
-
- function BeachModel:SetVoteClock()
- if not self.vote_clock_Id then
- self.vote_clock = TimeUtil:getServerTimeMs() + self.vote_break_time * 1000
- local function step_method( ... )
- local a = TimeUtil:getServerTimeMs() - self.vote_clock
- if TimeUtil:getServerTimeMs() >= self.vote_clock then
- --倒计时结束
- self:CloseVoteClock()
- end
- end
- self.vote_clock_Id = GlobalTimerQuest:AddPeriodQuest(step_method, 1, -1)
- self:Fire(BeachConst.REFRESH_VOTE_CLOCK)
- else
- return self.vote_clock
- end
- end
-
- function BeachModel:CloseVoteClock()
- self.vote_clock = nil
- if self.vote_clock_Id then
- GlobalTimerQuest:CancelQuest(self.vote_clock_Id)
- self.vote_clock_Id = nil
- end
- end
-
- function BeachModel:IsShowDynamicInfo( )
- return SceneManager.Instance:IsBeachScene() and self.show_scene_left_tip
- end
-
- function BeachModel:GetReleaseExpTime( )
- local base_info = self:GetMyInfo( )
- if not base_info then return 0 end
- -------------------------
- local max_can_get = self:GetKeyValue("buy_vote_times")--最大可获得经验的次数
- local can_exp_num = max_can_get - base_info.vote_other_time
- return can_exp_num > 0 and can_exp_num or 0
- end
-
- function BeachModel:VoteToOher( name,role_id )
- local data = {name = name, role_id = role_id}
- self:Fire(BeachConst.OPEN_VOTE_VIEW,data)
- end
-
- -- 初始化排行榜页数
- function BeachModel:InitRankPage( )
- self.cur_rank_show_page = 1
- end
-
- -- 变更页数
- function BeachModel:SetBeachRankCurShowPage( change_page )
- self.cur_rank_show_page = self.cur_rank_show_page + change_page
- self.cur_rank_show_page = Mathf.Clamp(self.cur_rank_show_page, 1, BeachConst.MAX_RANK_SHOW_PAGE )
- end
-
- -- 获取当前页数
- function BeachModel:GetCurRankPage( )
- return self.cur_rank_show_page
- end
-
- -- 获取当前应该请求的页数 1-20发0 21-40发1 以此类推
- function BeachModel:GetCurRankSetSCMDLength( )
- return (self:GetCurRankPage() - 1) * BeachConst.SingleRankLength
- end
-
- ----------喊话-start---------
- function BeachModel:InitBeachVoiceCfg( )
- self.cfg_beach_voice = {}
- self.cfg_beach_voice_content = {}
- self.last_send_msg_time_cache = {}
- for i,v in pairs(Config.Beachvoice) do
- self.cfg_beach_voice[v.type] = v
- end
- for k,v in pairs(Config.Beachvoicecontent) do
- self.cfg_beach_voice_content[v.base_id] = self.cfg_beach_voice_content[v.base_id] or {}
- table.insert(self.cfg_beach_voice_content[v.base_id], v)
- end
- end
-
-
- -- 发送喊话
- function BeachModel:BeachSendMsg( voice_type, extra_param )
- --print('=======Msh:BeachModel.lua[284] =======', voice_type)
- local voice_cfg = self.cfg_beach_voice[voice_type]
- if not voice_cfg then return end
- local cur_time = TimeUtil:getServerTime( )
- -- 发送间隔
- if self.last_send_msg_time_cache[voice_type]
- and cur_time - self.last_send_msg_time_cache[voice_type] < voice_cfg.cd
- then
- return
- end
- local base_id = voice_cfg.base_id
- local random_index = math.random(1, #self.cfg_beach_voice_content[base_id])
- local content = ChuanWenManager:getInstance():FormatColorTag2(self.cfg_beach_voice_content[base_id][random_index].content, true)
- if extra_param then
- content = string.gsub(content, "<@player>", extra_param)
- end
- -- print('=======Msh:BeachModel.lua[299] =======', content)
- if content and content ~= "" then
- self.last_send_msg_time_cache[voice_type] = cur_time
- local tmpArgs = ChatModel:getInstance():GetAllArgsText(content)
- content = ChatModel:getInstance():GetHyperlinkText(content)
- ChatModel:getInstance():Fire(ChatModel.SEND_MSG, ChatModel.CHANNEL_BEACH, content, nil, tmpArgs, ChatModel.CHAT_COMMON_TYPE.SYSTEM)
- end
- end
- ----------喊话-end-----------
|