Créer un historique de combat
Principe
Un historique est composé de quatre éléments :
- Une classe d'historique : stocke les données d'une entrée (tour, données contextuelles, méthodes utilitaires).
- Un
attr_readersurPokemonBattler: expose le tableau d'entrées. - Une initialisation dans le constructeur de
PokemonBattler: crée le tableau vide. - Une méthode
add_X_to_historysurPokemonBattler: 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
turnest toujours capturé depuis$game_temp.battle_turndans le constructeur. - Les méthodes
current_turn?etlast_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 :
| Historique | Alimenté depuis |
|---|---|
move_history | proceed_internal (toujours, même si échec) |
successful_move_history | proceed_internal (uniquement si réussi) |
damage_history | DamageHandler#damage_change |
stat_history | StatChangeHandler#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
| Attribut | Type | Description |
|---|---|---|
turn | Integer | Tour de l'utilisation |
move | Battle::Move | Copie (dup) de l'attaque |
original_move | Battle::Move | Référence directe à l'objet move |
targets | Array<PFM::PokemonBattler> | Cibles affectées |
attack_order | Integer | Ordre d'attaque du Pokémon ce tour |
SuccessfulMoveHistory hérite de MoveHistory sans ajout.
DamageHistory
| Attribut | Type | Description |
|---|---|---|
turn | Integer | Tour des dégâts |
damage | Integer | Montant de dégâts subis |
launcher | PFM::PokemonBattler, nil | Lanceur des dégâts |
move | Battle::Move, nil | Attaque ayant causé les dégâts |
ko | Boolean | Si le Pokémon a été mis KO |
StatHistory
| Attribut | Type | Description |
|---|---|---|
turn | Integer | Tour du changement |
stat | Symbol | :atk, :dfe, :spd, :ats, :dfs, :acc, :eva |
power | Integer | Puissance (positif = hausse) |
target | PFM::PokemonBattler | Cible du changement |
launcher | PFM::PokemonBattler, nil | Lanceur du changement |
move | Battle::Move, nil | Attaque 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_readersurPokemonBattleret initialiser le tableau dansinitialize. - Ajouter une méthode
add_X_to_historyqui crée et ajoute l'entrée. - Appeler cette méthode depuis le handler ou la procédure au moment de l'action.