/**
* @fileinfo This module adds extra data to be stored by the client in various events
*/
/**
* Extra client data.<br/>
* Note: Some properties listed may not exist if the extraData module is disabled.
* @namespace Client#data
* @type {Object}
* @property {Number} totalScore The total score of the client
* @property {Number} streak The answer streak of the client
* @property {Number} rank The position of the client.
*/
module.exports = function(){
const self = this;
this.data.totalScore = 0;
this.data.streak = 0;
this.data.rank = 1;
this.on("GameReset",()=>{
this.data.totalScore = 0;
this.data.rank = 0;
this.data.streak = 0;
delete this.quiz;
});
this.on("QuestionStart",(event)=>{
Object.assign(event,{
get answer(){
return self.answer;
},
get type(){
return event.type;
},
get index(){
return event.questionIndex;
}
});
try{
Object.assign(self.quiz.currentQuestion,event);
}catch(e){}
});
this.on("QuizStart",(event)=>{
Object.assign(event,{
get questionCount(){
return event.quizQuestionAnswers.length;
}
});
try{
Object.assign(self.quiz,event);
}catch(e){}
});
this.on("QuestionStart",(event)=>{
Object.assign(event,{
get type(){
return event.gameBlockType;
},
get index(){
return event.questionIndex;
}
});
try{
Object.assign(self.quiz.currentQuestion,event);
}catch(e){}
});
this.on("QuestionReady",(event)=>{
Object.assign(event,{
get type(){
return event.gameBlockType;
},
get index(){
return event.questionIndex;
}
});
try{
Object.assign(self.quiz.currentQuestion,event);
}catch(e){}
});
this.on("QuestionEnd",(event)=>{
this.data.totalScore = event.totalScore;
this.data.streak = event.pointsData.answerStreakPoints.streakLevel;
this.data.rank = event.rank;
});
};
/**
* The quiz object. May contain other information. See QuizStart event.
* @namespace Client#quiz
* @type {Object}
* @property {Number[]} quizQuestionAnswers The list of numbers signifying the number of choices/question.
* @property {Number} questionCount The number of questions.
* @property {Client#quiz.currentQuestion}
*/
/**
* The question object. May contain other information than listed below. See question events.
* @namespace Client#quiz.currentQuestion
* @type {Object}
* @property {Number} questionIndex The current question index
* @property {Number} index Alias for questionIndex
* @property {String} gameBlockType The question type.
* @property {String} type Alias for gameBlockType
* @property {Function} answer Alias for {@link Client#answer}. Only exists on QuestionStart.
*/