private Score.AIPlayer getRivalPlayer(int scorePlayerId, Score.UserPlayer userPlayer) { if (null == userPlayer) { Log.Error("user player is null"); return null; } int charm = getRivalStat(userPlayer.Charm, Def.SCORE_RIVAL_AI_STAT_MIN_RATIO, Def.SCORE_RIVAL_AI_STAT_MAX_RATIO); int sensibility = getRivalStat(userPlayer.Sensibility, Def.SCORE_RIVAL_AI_STAT_MIN_RATIO, Def.SCORE_RIVAL_AI_STAT_MAX_RATIO); int arts = getRivalStat(userPlayer.Arts, Def.SCORE_RIVAL_AI_STAT_MIN_RATIO, Def.SCORE_RIVAL_AI_STAT_MAX_RATIO); return new Score.AIPlayer(scorePlayerId, charm, sensibility, arts); }
protected override IEnumerator ExamRoutine() { DialogueEvent.Invoke(NPCId, _exam.NPCAlarm); yield return null; if (IsFirst) { DialogueEvent.Invoke(NPCId, _exam.NPCProcessMethod); yield return null; DialogueEvent.Invoke(NPCId, _exam.NPCEvaluateMethod); yield return null; } DialogueEvent.Invoke(NPCId, _exam.NPCStart); yield return null; DialogueEvent.Invoke(Def.EXAM_USER_START); yield return null; // SCORE Score.UserPlayer user = new Score.UserPlayer(); int userScore = _mode.GetScore(user, _statWeight); Log.Debug(string.Format("user score: {0}", userScore)); Score.EGrade userGrade = _mode.GetGrade(userScore); Log.Debug(string.Format("user grade : {0}", userGrade)); // string userPoem = user.GetPoem(userGrade); DialogueEvent.Invoke(userPoem); yield return null; DialogueEvent.Invoke(NPCId, _exam.NPCEnd); yield return null; string userName = Manager.Instance.Object.MainCharacter.Name; string usernameMsg = string.Format(_exam.NPCUserNameMsg, userName); DialogueEvent.Invoke(NPCId, usernameMsg); yield return null; string scoreMsg = string.Format(_exam.NPCScoreMsg, userScore); DialogueEvent.Invoke(NPCId, scoreMsg); yield return null; DialogueEvent.Invoke(NPCId, getNPCComment(userGrade)); yield return null; // REWARD string rewardMsg = reward(userGrade); // string userReactMsg = string.Format("{0}{1}", user.GetCommentReact(userGrade), rewardMsg); DialogueEvent.Invoke(userReactMsg); yield return null; // RIVAL if (IsFirst) { Manager.Instance.Object.StoryMode.LoadScenario(_rival.firstMeetScenarioPath); yield break; } // RIVAL : compare score Score.AIPlayer aiPlayer = getRivalPlayer(_rival.scorePlayerId, user); int aiScore = _mode.GetScore(aiPlayer, _statWeight); Log.Debug(string.Format("ai score: {0}", aiScore)); if (userScore == aiScore) { if (userScore <= Score.ScoreMode.MIN_SCORE) ++aiScore; else if (userScore >= Score.ScoreMode.PERFECT_SCORE) --aiScore; else judgeSameScore(user.Stress, aiPlayer.Stress, ref aiScore); Log.Debug(string.Format("fixed ai score: {0}", aiScore)); } string rivalLines = null; string userLines = null; if (userScore > aiScore) { rivalLines = _exam.RivalLose; userLines = _exam.UserWin; } else { rivalLines = _exam.RivalWin; userLines = _exam.UserLose; } string rivalScoreLines = string.Format(rivalLines, aiScore); DialogueEvent.Invoke(_rival, rivalScoreLines); yield return null; DialogueEvent.Invoke(userLines); yield return null; } // end routine