Aller au contenu principal
Voir

Modifier la priorité d'une attaque

Principe

La priorité d'une attaque peut être modifiée pour deux raisons distinctes :

  • Depuis l'attaque elle-même : l'attaque recalcule sa priorité en fonction du contexte de combat.
  • Depuis un effet externe : un effet actif modifie la priorité de l'attaque avant la détermination de l'ordre du tour.

Dans les deux cas, la valeur retournée est un Integer représentant la priorité finale.

Depuis l'attaque

Certaines attaques peuvent modifier leur priorité selon leurs propres règles. Par exemple, l'attaque Gliss'Herbe gagne +1 en priorité si le terrain herbu est actif et que le lanceur est au sol.

Pour gérer ce comportement, on override la méthode priority dans la classe de l'attaque.

Exemple : Gliss'Herbe

# Return the priority of the skill
# @param user [PFM::PokemonBattler] user for the priority check
# @return [Integer]
def priority(user = nil)
base_priority = super
return base_priority unless @logic.field_terrain_effect.grassy?
return base_priority unless @logic.current_action.launcher.grounded?

return base_priority + 1
end
  • super récupère la priorité de base définie dans les données de l'attaque.
  • Les conditions sont vérifiées séquentiellement : si l'une échoue, la priorité de base est retournée inchangée.
  • La méthode ajoute +1 à la priorité de base au lieu de retourner une valeur fixe, ce qui respecte les modifications antérieures.

Depuis un effet

Certains effets peuvent modifier la priorité d'une attaque. Par exemple, le talent Farceur donne +1 en priorité aux attaques de statut.

Pour gérer ce comportement, on utilise la méthode on_move_priority_change dans la classe de l'effet.

Exemple : Farceur

# Function called when we try to check if the effect changes the definitive priority of the move
# @param user [PFM::PokemonBattler]
# @param priority [Integer]
# @param move [Battle::Move]
# @return [Integer, nil]
def on_move_priority_change(user, priority, move)
return if user != @target
return unless move&.status?

return priority + 1
end
  • La première ligne vérifie que l'utilisateur est bien le porteur du talent.
  • La deuxième ligne vérifie que l'attaque est de type statut.
  • Le paramètre priority contient la priorité actuelle, potentiellement déjà modifiée par d'autres effets.
  • Le retour nil (implicite) laisse la priorité inchangée.

Conclusion

  • Utilisez priority si la modification dépend de la logique propre de l'attaque. Retournez un Integer.
  • Utilisez on_move_priority_change si la modification dépend d'un effet externe. Retournez un Integer ou nil.
  • Modifiez toujours la priorité de manière relative (base_priority + 1) plutôt qu'absolue pour respecter les autres modifications.