private Combat.AIPlayer getRivalPlayer(int combatPlayerId, Combat.UserPlayer userPlayer) { if (null == userPlayer) { Log.Error("not found combat.userplayer"); return(null); } if (false == ExtCombatPlayer.IsValid(combatPlayerId)) { Log.Error(string.Format("invalid combat player id; {0}", combatPlayerId)); return(null); } // @note: CombatPlayer(DataTable) differ from Combat.UserPlayer, Combat.AIPlayer CombatPlayer rivalPlayer = Manager.Instance.DT.CombatPlayer[combatPlayerId]; int hp = Mathf.RoundToInt(userPlayer.Hp * Def.COMBAT_RIVAL_AI_STAT_MAX_RATIO); hp = Nurture.Character.Adjust(hp); int criticalProbability = userPlayer.CriticalProbability; int mp = 0, attack = 0, defense = 0, intellect = 0, tactic = 0; switch (rivalPlayer.orient) { case Combat.AIPlayer.EOrient.Attack: mp = Def.MIN_STAT; attack = Nurture.Character.Adjust(Mathf.RoundToInt(userPlayer.AttackPower * Def.COMBAT_RIVAL_AI_STAT_MAX_RATIO)); defense = getRivalStat(userPlayer.Defense, Def.COMBAT_RIVAL_AI_STAT_MIN_RATIO, Def.COMBAT_RIVAL_AI_STAT_MAX_RATIO); intellect = Def.MIN_STAT; tactic = Nurture.Character.Adjust(Mathf.RoundToInt(userPlayer.Tactic * Def.COMBAT_RIVAL_AI_STAT_MAX_RATIO)); break; case Combat.AIPlayer.EOrient.Trick: mp = getRivalStat(userPlayer.Mp, Def.COMBAT_RIVAL_AI_STAT_MIN_RATIO, Def.COMBAT_RIVAL_AI_STAT_MAX_RATIO); attack = Def.MIN_STAT; defense = Nurture.Character.Adjust(Mathf.RoundToInt(userPlayer.Defense * Def.COMBAT_RIVAL_AI_STAT_MAX_RATIO)); intellect = Nurture.Character.Adjust(Mathf.RoundToInt(userPlayer.Intellect * Def.COMBAT_RIVAL_AI_STAT_MAX_RATIO)); tactic = getRivalStat(userPlayer.Tactic, Def.COMBAT_RIVAL_AI_STAT_MIN_RATIO, Def.COMBAT_RIVAL_AI_STAT_MAX_RATIO); break; case Combat.AIPlayer.EOrient.All: mp = getRivalStat(userPlayer.Mp, Def.COMBAT_RIVAL_AI_STAT_MIN_RATIO, Def.COMBAT_RIVAL_AI_STAT_MAX_RATIO); attack = getRivalStat(userPlayer.AttackPower, Def.COMBAT_RIVAL_AI_STAT_MIN_RATIO, Def.COMBAT_RIVAL_AI_STAT_MAX_RATIO); defense = getRivalStat(userPlayer.Defense, Def.COMBAT_RIVAL_AI_STAT_MIN_RATIO, Def.COMBAT_RIVAL_AI_STAT_MAX_RATIO); intellect = getRivalStat(userPlayer.Intellect, Def.COMBAT_RIVAL_AI_STAT_MIN_RATIO, Def.COMBAT_RIVAL_AI_STAT_MAX_RATIO); tactic = getRivalStat(userPlayer.Tactic, Def.COMBAT_RIVAL_AI_STAT_MIN_RATIO, Def.COMBAT_RIVAL_AI_STAT_MAX_RATIO); break; default: Log.Error("invalid combat.ai.player orient"); break; } return(new Combat.AIPlayer(Manager.Instance.Object.CombatMode, combatPlayerId, hp, mp, criticalProbability, attack, defense, intellect, tactic)); }
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); } string startMsg = string.Format(_exam.NPCStartPlayersName, _userName, _rivalName); DialogueEvent.Invoke(NPCId, startMsg); yield return(null); DialogueEvent.Invoke(Def.EXAM_USER_START); yield return(null); // Combat.UserPlayer userPlayer = new Combat.UserPlayer(Manager.Instance.Object.CombatMode); Combat.AIPlayer aiPlayer = getRivalPlayer(_rival.combatPlayerId, userPlayer); Manager.Instance.Object.CombatMode.Start(userPlayer, aiPlayer); yield return(null); Manager.Instance.Object.CombatMode.EndEvent.Detach(onEnd); // RIVAL if (IsFirst) { DialogueEvent.Invoke(_userFirstResultLines); yield return(null); Manager.Instance.Object.StoryMode.LoadScenario(_rival.firstMeetScenarioPath); } else { DialogueEvent.Invoke(_rival, _rivalResultLines); yield return(null); DialogueEvent.Invoke(_userResultLines); yield return(null); } }