Aller au contenu principal
Voir

Créer un historique de combat

Principe

Un historique est composé de quatre éléments :

  1. Une classe d'historique : stocke les données d'une entrée (tour, données contextuelles, méthodes utilitaires).
  2. Un attr_reader sur PokemonBattler : expose le tableau d'entrées.
  3. Une initialisation dans le constructeur de PokemonBattler : crée le tableau vide.
  4. Une méthode add_X_to_history sur PokemonBattler : ajoute une entrée au tableau.

L'alimentation se fait depuis le handler ou la procédure concernée, au moment où l'action a lieu.

Étape 1 : créer la classe d'historique

Créer un fichier dans 5 Battle/03 PokemonBattler/ (ex: 103 HealHistory.rb).

module PFM
class PokemonBattler
class HealHistory
# @return [Integer] le tour où le soin a eu lieu
attr_reader :turn
# @return [Integer] montant de PV soignés
attr_reader :amount
# @return [PFM::PokemonBattler, nil] lanceur du soin
attr_reader :launcher
# @return [Battle::Move, nil] attaque ayant causé le soin
attr_reader :move

# Create a new Heal History
# @param amount [Integer] amount of HP healed
# @param launcher [PFM::PokemonBattler, nil]
# @param move [Battle::Move, nil]
def initialize(amount, launcher, move)
@turn = $game_temp.battle_turn
@amount = amount
@launcher = launcher
@move = move
end

# Tell if the heal happened during the current turn
# @return [Boolean]
def current_turn?
return @turn == $game_temp.battle_turn
end

# Tell if the heal happened during the last turn
# @return [Boolean]
def last_turn?
return @turn == $game_temp.battle_turn - 1
end
end
end
end
  • Le turn est toujours capturé depuis $game_temp.battle_turn dans le constructeur.
  • Les méthodes current_turn? et last_turn? sont le pattern standard de tous les historiques.
  • Les attributs dépendent de ce qu'on veut tracer.

Étape 2 : déclarer l'attribut sur PokemonBattler

Dans 001 PokemonBattler.rb, ajouter l'attr_reader :

# Get the heal history
# @return [Array<HealHistory>]
attr_reader :heal_history

Étape 3 : initialiser le tableau

Dans la méthode initialize de PokemonBattler, ajouter l'initialisation :

@heal_history = []

Étape 4 : créer la méthode d'ajout

Dans PokemonBattler, ajouter la méthode qui crée et ajoute une entrée :

# Add a heal to the heal history
# @param amount [Integer] amount of HP healed
# @param launcher [PFM::PokemonBattler, nil]
# @param move [Battle::Move, nil]
def add_heal_to_history(amount, launcher, move)
@heal_history << HealHistory.new(amount, launcher, move)
end

Alimenter l'historique

Appeler add_X_to_history depuis le handler ou la procédure qui effectue l'action. Voici où les historiques existants sont alimentés :

HistoriqueAlimenté depuis
move_historyproceed_internal (toujours, même si échec)
successful_move_historyproceed_internal (uniquement si réussi)
damage_historyDamageHandler#damage_change
stat_historyStatChangeHandler#stat_change

Pour un historique personnalisé, l'appel se place au même endroit que l'action :

# Dans le handler ou la procédure concernée
target.add_heal_to_history(amount, launcher, skill)

Historiques existants — référence

MoveHistory

AttributTypeDescription
turnIntegerTour de l'utilisation
moveBattle::MoveCopie (dup) de l'attaque
original_moveBattle::MoveRéférence directe à l'objet move
targetsArray<PFM::PokemonBattler>Cibles affectées
attack_orderIntegerOrdre d'attaque du Pokémon ce tour

SuccessfulMoveHistory hérite de MoveHistory sans ajout.

DamageHistory

AttributTypeDescription
turnIntegerTour des dégâts
damageIntegerMontant de dégâts subis
launcherPFM::PokemonBattler, nilLanceur des dégâts
moveBattle::Move, nilAttaque ayant causé les dégâts
koBooleanSi le Pokémon a été mis KO

StatHistory

AttributTypeDescription
turnIntegerTour du changement
statSymbol:atk, :dfe, :spd, :ats, :dfs, :acc, :eva
powerIntegerPuissance (positif = hausse)
targetPFM::PokemonBattlerCible du changement
launcherPFM::PokemonBattler, nilLanceur du changement
moveBattle::Move, nilAttaque ayant causé le changement

Conclusion

  • Créer une classe d'historique avec turn, current_turn?, last_turn? et les attributs spécifiques.
  • Déclarer un attr_reader sur PokemonBattler et initialiser le tableau dans initialize.
  • Ajouter une méthode add_X_to_history qui crée et ajoute l'entrée.
  • Appeler cette méthode depuis le handler ou la procédure au moment de l'action.