public void Update(GameStateAnalyser.Report p_gameStateReport) { //check if timer btn is availavle and off, and turn it on (foce enemy to move within 150sec) if (p_gameStateReport.isTimerBtnAvailable) { p_gameStateReport.timerBtn.Click(); } //AI logic if (p_gameStateReport.isInBattle) { Action __doSwitchPokemon = () => { _interface.Log("choosing_new_pokemon"); var __availableTeamMembers = p_gameStateReport.availableTeamMembersBtns; if ((new Random().Next(100) > 20)) { GameStateAnalyser.PokemonTypeEffectivenessType __currentType = GameStateAnalyser.PokemonTypeEffectivenessType.NO_EFFECT; var __currentBtn = __availableTeamMembers[0]; var __enemyPokemon = p_gameStateReport.currentEnemyPokemon; foreach (var teamMemberBtn in __availableTeamMembers) { var __pokemon = teamMemberBtn.pokemonData; var __result = GameStateAnalyser.SimulateCombatResult(__pokemon, __enemyPokemon); if (__result == GameStateAnalyser.PokemonTypeEffectivenessType.NO_EFFECT) { continue; } if (__result == GameStateAnalyser.PokemonTypeEffectivenessType.NOT_VERY_EFFECTIVE) { if (__currentType == GameStateAnalyser.PokemonTypeEffectivenessType.NO_EFFECT) { __currentType = __result; __currentBtn = teamMemberBtn; } continue; } if (__result == GameStateAnalyser.PokemonTypeEffectivenessType.NORMAL_EFFECTIVENESS) { if (__currentType == GameStateAnalyser.PokemonTypeEffectivenessType.NOT_VERY_EFFECTIVE || __currentType == GameStateAnalyser.PokemonTypeEffectivenessType.NO_EFFECT) { __currentType = __result; __currentBtn = teamMemberBtn; } continue; } if (__result == GameStateAnalyser.PokemonTypeEffectivenessType.SUPER_EFFECTIVE) { __currentType = __result; __currentBtn = teamMemberBtn; } } __currentBtn.Click(); } else { __availableTeamMembers[(new Random().Next(__availableTeamMembers.Count))].Click(); } _interface.Log("new_pokemon_choosed"); }; if (p_gameStateReport.isGameOver) { _interface.Log("end_of_game_detected"); p_gameStateReport.closeGameBtn.Click(); _interface.Log("game_window_closed"); } else if (p_gameStateReport.isSkillsMenuAvailable) { _interface.Log("choosing_skill"); var __availableSkills = p_gameStateReport.availableSkillsBtns; bool __hasSuperEffectiveAttack = false; GameStateAnalyser.SkillButton __superEffectAttack = null; int __superEffectAttackBasePower = 0; foreach (var skillBtn in __availableSkills) { if (GameStateAnalyser.SimulateCombatResult( skillBtn.pokemonType, p_gameStateReport.currentEnemyPokemon.pokemonTypeMain, p_gameStateReport.currentEnemyPokemon.pokemonTypeSub) == GameStateAnalyser.PokemonTypeEffectivenessType.SUPER_EFFECTIVE) { __hasSuperEffectiveAttack = true; if (__superEffectAttackBasePower < skillBtn.basePower) { __superEffectAttack = skillBtn; __superEffectAttackBasePower = skillBtn.basePower; } } } if (__hasSuperEffectiveAttack && __superEffectAttack != null) { _interface.Log("choosing_super_effective_skill"); __superEffectAttack.Click(); } else { Action __doChooseRandomSkill = () => { _interface.Log("choosing_random_skill"); var __randomBtn = __availableSkills[(new System.Random()).Next(__availableSkills.Count)]; __randomBtn.Click(); }; Action __doChooseStrongesAttack = () => { _interface.Log("enemy_has_low_helth"); _interface.Log("choosing_strongest_attack"); int __skillsPower = 0; var __skill = __availableSkills[0]; foreach (var skill in __availableSkills) { if (skill.basePower > __skillsPower) { __skillsPower = skill.basePower; __skill = skill; } } __skill.Click(); }; Action __doUseSkill = () => { if (p_gameStateReport.currentMyPokemonHP <= 50 || p_gameStateReport.currentEnemyPokemonHP <= 20) { __doChooseStrongesAttack(); } else { __doChooseRandomSkill(); } }; if (p_gameStateReport.isTeamMenuAvailable && p_gameStateReport.currentEnemyPokemonHP > 20) { var __enemyPokemon = p_gameStateReport.currentEnemyPokemon; var __myPokemon = p_gameStateReport.currentMyPokemon; var __defenseSimulationResult = GameStateAnalyser.SimulateCombatResult(__enemyPokemon, __myPokemon); bool __isEnemySuperEffectiveAgainstMe = __defenseSimulationResult == GameStateAnalyser.PokemonTypeEffectivenessType.SUPER_EFFECTIVE; bool __isMeSuperEffectiveAgainstEnemy = __defenseSimulationResult == GameStateAnalyser.PokemonTypeEffectivenessType.NO_EFFECT; if (__isMeSuperEffectiveAgainstEnemy || __isEnemySuperEffectiveAgainstMe == false || (_lastEnemyToMeSwitch == __enemyPokemon.pokemonName)) { __doUseSkill(); } else { _lastEnemyToMeSwitch = __enemyPokemon.pokemonName; __doSwitchPokemon(); } } else { __doUseSkill(); } } } else if (p_gameStateReport.isTeamMenuAvailable) { if (p_gameStateReport.currentEnemyPokemon != null) { _lastEnemyToMeSwitch = p_gameStateReport.currentEnemyPokemon.pokemonName; } __doSwitchPokemon(); } } else { if (p_gameStateReport.isBeingChallenged) { _interface.Log("accepting_challenge"); p_gameStateReport.acceptChallengeBtn.Click(); } } }
public void Awake() { //initialize class members _gameAnalyser = new GameStateAnalyser(); _bot = new Bot(); }