The AI prioritizes physical and special moves over status moves, and doesn't use Stealth Rock, Light Screen, or Reflect on the first turn. It also doesn't use heal moves even when HP is below half, and doesn't use Swords Dance or Dragon Dance very often.
The skill level is 100.
Also, when there is only one member in the party, no move is used when the PP of the most effective move is 0, and no error log is displayed.
I don’t think this is a "bug" per se, but I believe the default AI is actually superior when it comes to using status moves.
This is because status moves are almost always chosen with a specific role or "utility" in mind. For example:
Stealth Rock is used to punish switching and to nullify items like Focus Sash or abilities like Sturdy.
Recovery moves are meant to increase a Pokémon's longevity on the field.
Setup moves (stat boosters) are essential for breaking through defensive "walls" or minimizing incoming damage.
Light Screen, Reflect, and Tailwind are specifically brought in to create a tactical advantage for the rest of the team.
Every Pokémon equipped with status moves has a defined role. Therefore, if a Pokémon has a status move and the situation allows it to function effectively, I want the AI to prioritize using it.
There still remains some other bugs/mistakes not reported though.
The plugin names used in self.dbk_enabled?(plugin) isn't correct, and Settings::ZMOVE_TRIGGER_KEY never exist in Z-Power plugin.
Should be the one below.
Ruby:
# Check if DBK plugin is enabled
def self.dbk_enabled?(plugin)
return false unless DBK_PLUGINS[plugin]
# 1. Try PluginManager check (most reliable)
if defined?(PluginManager) && PluginManager.respond_to?(:installed?)
plugin_id = case plugin
when :dynamax then "[DBK] Dynamax"
when :terastallization then "[DBK] Terastalization"
when :z_moves then "[DBK] Z-Power"
when :raid_battles then "[DBK] Raid Battles"
when :sos_battles then "[DBK] SOS Battles"
else nil
end
return true if plugin_id && PluginManager.installed?(plugin_id)
end
# 2. Fallback to method/constant checks
case plugin
when :mega_evolution
return true # Built-in to Essentials, always available if item held
when :dynamax
# Check if Dynamax methods exist (more reliable than constants)
return defined?(Battle) && Battle.instance_methods.include?(:pbCanDynamax?)
when :terastallization
# Check if Terastallization methods exist
return defined?(Battle) && Battle.instance_methods.include?(:pbCanTerastallize?)
when :z_moves
return defined?(Battle) && Battle.instance_methods.include?(:pbCanZMove?)
when :raid_battles
return defined?(Battle) && Battle.instance_methods.include?(:pbRaidBattle?)
when :sos_battles
return defined?(Battle) && Battle.instance_methods.include?(:pbSOSBattle?)
else
return false
end
end
And in should_z_move?, user.can_z_move? should be @battle.pbCanZMove?(user.index) to prevent NoMethodError.
There still remains some other bugs/mistakes not reported though.
The plugin names used in self.dbk_enabled?(plugin) isn't correct, and Settings::ZMOVE_TRIGGER_KEY never exist in Z-Power plugin.
Should be the one below.
Ruby:
# Check if DBK plugin is enabled
def self.dbk_enabled?(plugin)
return false unless DBK_PLUGINS[plugin]
# 1. Try PluginManager check (most reliable)
if defined?(PluginManager) && PluginManager.respond_to?(:installed?)
plugin_id = case plugin
when :dynamax then "[DBK] Dynamax"
when :terastallization then "[DBK] Terastalization"
when :z_moves then "[DBK] Z-Power"
when :raid_battles then "[DBK] Raid Battles"
when :sos_battles then "[DBK] SOS Battles"
else nil
end
return true if plugin_id && PluginManager.installed?(plugin_id)
end
# 2. Fallback to method/constant checks
case plugin
when :mega_evolution
return true # Built-in to Essentials, always available if item held
when :dynamax
# Check if Dynamax methods exist (more reliable than constants)
return defined?(Battle) && Battle.instance_methods.include?(:pbCanDynamax?)
when :terastallization
# Check if Terastallization methods exist
return defined?(Battle) && Battle.instance_methods.include?(:pbCanTerastallize?)
when :z_moves
return defined?(Battle) && Battle.instance_methods.include?(:pbCanZMove?)
when :raid_battles
return defined?(Battle) && Battle.instance_methods.include?(:pbRaidBattle?)
when :sos_battles
return defined?(Battle) && Battle.instance_methods.include?(:pbSOSBattle?)
else
return false
end
end
And in should_z_move?, user.can_z_move? should be @battle.pbCanZMove?(user.index) to prevent NoMethodError.
This section is for the discussion of the tutorials and resources on Eevee Expo. To find tutorials and resources, check out the Tutorial and Resource Manager for optimal navigation.