forked from endernon/PGRData
242 lines
No EOL
8.1 KiB
Lua
242 lines
No EOL
8.1 KiB
Lua
--萌战赛事筹备--帮手数据
|
||
local type = type
|
||
local tableInsert = table.insert
|
||
local tableRemove = table.remove
|
||
|
||
local XMoeWarPreparationAnswerRecord = require("XEntity/XMoeWar/XMoeWarPreparationAnswerRecord")
|
||
|
||
local XMoeWarPreparationHelper = XClass(nil, "XMoeWarPreparationHelper")
|
||
|
||
local DefaultMain = {
|
||
Id = 0, --帮手id
|
||
Questions = {}, --所有问题
|
||
ExpirationTime = 0, --过期时间点,0表示不会过期
|
||
TotalQuestionCount = 0, --题目总数
|
||
FinishQuestionCount = 0, --回答正确的题目数量
|
||
Status = 0, --帮手状态
|
||
AnswerRecords = {}, --回答记录
|
||
MoodValue = 0, --帮手心情值
|
||
LastMoodValue = 0 --帮手更新后的上次心情值
|
||
}
|
||
|
||
function XMoeWarPreparationHelper:Ctor()
|
||
for key, value in pairs(DefaultMain) do
|
||
if type(value) == "table" then
|
||
self[key] = {}
|
||
else
|
||
self[key] = value
|
||
end
|
||
end
|
||
self.CurrQuestionId = 0
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:UpdateData(data)
|
||
self.Id = data.Id
|
||
self.TotalQuestionCount = data.TotalQuestionCount
|
||
self.FinishQuestionCount = data.FinishQuestionCount
|
||
self.ExpirationTime = data.ExpirationTime
|
||
self.Status = data.Status
|
||
self.Questions = data.Questions
|
||
self:UpdateMoodValue(data.MoodValue)
|
||
self:UpdateAnswerRecords(data.AnswerRecords)
|
||
|
||
if self.Status == XMoeWarConfig.PreparationHelperStatus.RecruitFinish then
|
||
self:ResetData()
|
||
end
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:SetId(id)
|
||
self.Id = id
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:UpdateMoodValue(moodValue)
|
||
self.LastMoodValue = self.MoodValue
|
||
self.MoodValue = math.max(0, moodValue)
|
||
end
|
||
|
||
--增加心情值
|
||
--amount:送礼的数量
|
||
function XMoeWarPreparationHelper:AddMoodValue(amount)
|
||
local recoveryMood = XMoeWarConfig.GetPreparationHelperGiftRecoveryMood(self:GetId())
|
||
self:UpdateMoodValue(self:GetMoodValue() + recoveryMood * amount)
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:UpdateAnswerRecords(answerRecords)
|
||
self.AnswerRecords = {}
|
||
self:CheckQuestionStart()
|
||
|
||
local answerRecord
|
||
for _, anserRecordData in ipairs(answerRecords) do
|
||
answerRecord = XMoeWarPreparationAnswerRecord.New()
|
||
answerRecord:UpdateData(anserRecordData)
|
||
tableInsert(self.AnswerRecords, answerRecord)
|
||
end
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:GetAnswerRecords()
|
||
return self.AnswerRecords
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:CheckQuestionStart()
|
||
local status = self:GetStatus()
|
||
local isDefaultLock = XMoeWarConfig.GetPreparationHelperDefaultLock(self:GetId())
|
||
if (not isDefaultLock) or (status ~= XMoeWarConfig.PreparationHelperStatus.Communicating and status ~= XMoeWarConfig.PreparationHelperStatus.RecruitFinishAndCommunicating) then
|
||
return
|
||
end
|
||
|
||
local isHasQuestionStart = false
|
||
for _, answerRecord in ipairs(self.AnswerRecords) do
|
||
local questionId = answerRecord:GetQuestionId()
|
||
local questionType = XMoeWarConfig.GetPreparationQuestionType(questionId)
|
||
if questionType == XMoeWarConfig.QuestionType.QuestionStart then
|
||
isHasQuestionStart = true
|
||
break
|
||
end
|
||
end
|
||
if not isHasQuestionStart then
|
||
local questionStartList = XMoeWarConfig.GetPreparationQuestionIdListByType(self.Id, XMoeWarConfig.QuestionType.QuestionStart)
|
||
local answerRecord
|
||
for _, questionId in ipairs(questionStartList) do
|
||
answerRecord = XMoeWarPreparationAnswerRecord.New()
|
||
answerRecord:SetQuestionId(questionId)
|
||
tableInsert(self.AnswerRecords, answerRecord)
|
||
end
|
||
end
|
||
end
|
||
|
||
--检查问题是否都完了,插入结束语
|
||
function XMoeWarPreparationHelper:CheckQuestionEnd()
|
||
local isHasQuestionEnd = false
|
||
for _, answerRecord in ipairs(self.AnswerRecords) do
|
||
local questionId = answerRecord:GetQuestionId()
|
||
local questionType = XMoeWarConfig.GetPreparationQuestionType(questionId)
|
||
if questionType == XMoeWarConfig.QuestionType.RecruitRight or questionType == XMoeWarConfig.QuestionType.RecruitLose then
|
||
isHasQuestionEnd = true
|
||
break
|
||
end
|
||
end
|
||
if (not isHasQuestionEnd) and (self.Status == XMoeWarConfig.PreparationHelperStatus.CommunicationEnd or self.Status == XMoeWarConfig.PreparationHelperStatus.RecruitFinish) then
|
||
local questionType = self.Status == XMoeWarConfig.PreparationHelperStatus.CommunicationEnd and XMoeWarConfig.QuestionType.RecruitLose or XMoeWarConfig.QuestionType.RecruitRight
|
||
local questionId = XMoeWarConfig.GetPreparationQuestionId(self.Id, questionType)
|
||
local answerRecord = XMoeWarPreparationAnswerRecord.New()
|
||
answerRecord:SetQuestionId(questionId)
|
||
tableInsert(self.AnswerRecords, answerRecord)
|
||
end
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:InsertQuestion(questionId)
|
||
local answerRecord = self:GetAnswerRecordByQuestionId(questionId)
|
||
if answerRecord then
|
||
return
|
||
end
|
||
self:CheckQuestionStart()
|
||
answerRecord = XMoeWarPreparationAnswerRecord.New()
|
||
answerRecord:SetQuestionId(questionId)
|
||
tableInsert(self.AnswerRecords, answerRecord)
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:UpdateAnswerRecord(answerId, isRight)
|
||
local questionId = self:GetCurrQuestionId()
|
||
local answerRecord = self:GetAnswerRecordByQuestionId(questionId)
|
||
if answerRecord then
|
||
answerRecord:UpdateData({QuestionId = questionId, AnswerId = answerId, IsRight = isRight})
|
||
end
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:GetAnswerRecordByQuestionId(questionId)
|
||
for _, answerRecord in ipairs(self.AnswerRecords) do
|
||
if answerRecord:GetQuestionId() == questionId then
|
||
return answerRecord
|
||
end
|
||
end
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:SetStatus(status)
|
||
self.Status = status
|
||
if status == XMoeWarConfig.PreparationHelperStatus.CommunicationEnd or status == XMoeWarConfig.PreparationHelperStatus.RecruitFinish then
|
||
self:CheckQuestionEnd()
|
||
end
|
||
if status == XMoeWarConfig.PreparationHelperStatus.NotCommunicating then
|
||
self:ResetData()
|
||
end
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:ResetData()
|
||
self.FinishQuestionCount = 0
|
||
self:ClearAnswerRecords()
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:SetCurrQuestionId(currQuestionId)
|
||
self.CurrQuestionId = currQuestionId
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:SetExpirationTime(expirationTime)
|
||
self.ExpirationTime = expirationTime
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:ClearAnswerRecords()
|
||
self.AnswerRecords = {}
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:GetCurrQuestionId()
|
||
return self.CurrQuestionId
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:GetId()
|
||
return self.Id
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:GetTotalQuestionCount()
|
||
return self.TotalQuestionCount
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:GetStatus()
|
||
return self.Status
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:GetExpirationTime()
|
||
return self.ExpirationTime
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:AddOnceFinishQuestionCount()
|
||
self.FinishQuestionCount = self.FinishQuestionCount + 1
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:GetFinishQuestionCount()
|
||
return self.FinishQuestionCount
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:GetAnswerRecord(questionId)
|
||
local answerRecords = self:GetAnswerRecords()
|
||
for _, v in ipairs(answerRecords) do
|
||
if v:GetQuestionId() == questionId then
|
||
return v
|
||
end
|
||
end
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:QuestionIsRight(questionId)
|
||
local answerRecord = self:GetAnswerRecord(questionId)
|
||
return answerRecord and answerRecord:QuestionIsRight() or 0
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:GetAnswerId(questionId)
|
||
local answerRecord = self:GetAnswerRecord(questionId)
|
||
return answerRecord and answerRecord:GetAnswerId() or 0
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:GetMoodValue()
|
||
return self.MoodValue or 0
|
||
end
|
||
|
||
function XMoeWarPreparationHelper:GetLastMoodValue()
|
||
return self.LastMoodValue or 0
|
||
end
|
||
|
||
--是否已招募
|
||
function XMoeWarPreparationHelper:IsRecruitFinish()
|
||
local status = self:GetStatus()
|
||
return status == XMoeWarConfig.PreparationHelperStatus.RecruitFinish or status == XMoeWarConfig.PreparationHelperStatus.RecruitFinishAndCommunicating
|
||
end
|
||
|
||
return XMoeWarPreparationHelper |