local UIGuildActivityExam = require "View/GuildParty/UIGuildActivityExam" local UISceneQuizPreliminary = UIViewClass(UIGuildActivityExam) local INTERVAL_RANK_REQ = 1 local INTERVAL_REFRESH_TIME = 1 local OptionChar = {'A', 'B', 'C', 'D'} function UISceneQuizPreliminary:OnCreated() self.constQuizData = DataSheetManager.SceneQuizData:GetDataByModeTypeID(1) self.nextQuestionTipTimeStr = UIUtils.GetLocalizedTxt(Const_IDS["IDS_SceneQuiz_PreliminaryHint_4"]) end function UISceneQuizPreliminary:OnOpened(context) self.activityId = MDL.SceneQuiz.CurActivityID CTL.SceneQuiz.TryJoinPreliminaryChannel() MDL.SceneQuiz.SceneQuizGetInfoReq() end function UISceneQuizPreliminary:InitPanel() self:RegistSystemEvent(EventID.UI_SceneQuiz_PreliminaryHistoryChat, self.InitAllChatMsg) self:RegistSystemEvent(EventID.UI_SceneQuiz_RefreshPreliminaryChat, self.OnReceiveNewChatMsg) self:RegistSystemEvent(EventID.UI_SceneQuiz_QuizModuleInfoRefresh, self.RefreshExamData) self:RegistSystemEvent(EventID.UI_SceneQuiz_AnswerRank, self.RefreshAnswerRankData) self:StartRepeatFunc(self.GetAnswerRank, INTERVAL_RANK_REQ, 0) end function UISceneQuizPreliminary:RefreshAnswerRankData(rankDatas, selfRankDataIndex, rankType) if rankType == true then self.Scroll_Rank:ReloadAll(rankDatas) if rankDatas[selfRankDataIndex] then --刷新自己的排行信息 UIUtils.SetLabel(self.txt_Rank, selfRankDataIndex) UIUtils.SetLabel(self.txt_Score, rankDatas[selfRankDataIndex].param) else UIUtils.SetLabelText(self.txt_Rank, Const_IDS["IDS_NotInRank"]) UIUtils.SetLabel(self.txt_Score, MDL.SceneQuiz.GetPreliminaryScore()) end end end function UISceneQuizPreliminary:OnCellInit(scrollRect, index, cellTable, data) if scrollRect == self.Scroll_Rank then cellTable.txt_RankBg.text = index + 1 self:SetRankInfo(cellTable, index, data.name, data.param) else UIGuildActivityExam.OnCellInit(self, scrollRect, index, cellTable, data) end end function UISceneQuizPreliminary:RefreshExamData() if MDL.SceneQuiz.GetCurStage() ~= MDL.SceneQuiz.ScheduleStage.Preliminary then --初赛结束,关闭界面 self:CloseView() CTL.SceneQuiz.OpenRankView(self.activityId, {activityId = self.activityId, rankType = true}) return end local info = MDL.SceneQuiz.GetCurStageQuizInfo() if info then local quizIndex, quizId = info.quizIndex, info.quizId UIUtils.SetLabel(self.lab_Num, string.FormatByIdsKey("IDS_GuildParty_QuestionNum", quizIndex, self.constQuizData.PreliminaryQuestionNum)) local quizData = DataSheetManager.SceneQuizQuestionBank:GetDataByID(quizId) if quizData then self.curExamAnswer = quizData.RightAnswerOrder UIUtils.SetLabelText(self.txt_Exam, Const_IDS[quizData.QuestionText]) for i = 1, 4 do if quizData.Group_Table[i] then local idsId = quizData.Group_Table[i].Answer if not string.isNilOrEmpty(idsId) then UIUtils.SetLabelText(self.group_Answer[i].txt_Desc, Const_IDS[idsId]) UIUtils.SetActive(self.group_Answer[i].gameObject, true) self.group_Answer[i].lab_Answer.text = OptionChar[i] else UIUtils.SetActive(self.group_Answer[i].gameObject, false) end else logging.error(LTAG.ERROR, "config answer count illegal", quizId) end end end self:StopRepeatFunc(self.UpdateTime) self:StartRepeatFunc(self.UpdateTime, INTERVAL_REFRESH_TIME, 0) end end function UISceneQuizPreliminary:UpdateTime() local info = MDL.SceneQuiz.GetCurStageQuizInfo() if info then local leftTime = info.quizEndTime - UTL.Time.GetServerTimestamp() UIUtils.SetLabel(self.lab_State, string.format(self.nextQuestionTipTimeStr, leftTime)) end end --答题排行榜 function UISceneQuizPreliminary:GetAnswerRank() MDL.SceneQuiz.SceneQuizGetAnswerRankReq(true) end function UISceneQuizPreliminary:GetSendResult(content) if not string.isNilOrEmpty(self.curExamAnswer) then return string.lower(self.curExamAnswer) == string.lower(content) end return false end function UISceneQuizPreliminary:GetChatMsgList() return CTL.SceneQuiz.GetPreliminaryChatMsgList() end function UISceneQuizPreliminary:SendMsg(content) if string.isNilOrEmpty(string.gsub(content, "%s+", "")) then CTL.Tips.AddTipsMsg(Const_IDS["IDS_LiaoTian_Empty"]) return end --是否这道题答过 local hasAnswered = MDL.SceneQuiz.GetPreliminaryQuizIndex() >= MDL.SceneQuiz.GetCurStageQuizInfo().quizIndex if hasAnswered then MDL.ChannelChat.SendSceneQuizPreliminaryMsg(content, 0, nil) else --答对发req,在resp转发消息 --答错不发req,直接转发消息 local isCorrect = self:GetSendResult(content) if isCorrect then MDL.SceneQuiz.SetPreliminaryQuizIndex(MDL.SceneQuiz.GetCurStageQuizInfo().quizIndex) CTL.Tips.AddTipsMsg(Const_IDS["IDS_GuildParty_CorrectAnswerTip"]) MDL.SceneQuiz.SetCorrectContent(content) MDL.SceneQuiz.AnswerQuizReq() else CTL.Tips.AddTipsMsg(Const_IDS["IDS_GuildParty_WrongAnswerTip"]) MDL.ChannelChat.SendSceneQuizPreliminaryMsg(content, 2, nil) end end self.obj_InputField.text = nil end function UISceneQuizPreliminary:SetAnswerResult(cellTable, answerType, isSelf) if isSelf then UIUtils.SetActive(cellTable.group_Icon, answerType ~= 0) UIUtils.SetActive(cellTable.img_True, answerType == 1) UIUtils.SetActive(cellTable.img_False, answerType == 2) else UIUtils.SetActive(cellTable.group_Icon, false) end end function UISceneQuizPreliminary:SetRankIndex(txt_first, rankIndex, isSelf) if isSelf then --显示额外加分 local _, extraScore = DataSheetManager.SceneQuizPreliminaryExtraCredit:TryGetDataByOrder(rankIndex) if extraScore then txt_first.text = string.FormatByIdsId(Const_IDS.IDS_SceneQuiz_PreliminaryHint_1, rankIndex, extraScore.ExtraCredit) else txt_first.text = nil end else txt_first.text = nil end end return UISceneQuizPreliminary