____
La couche de données dynamiques
On crée tout d'abord une classe Game_Quest qui va servir à modéliser une quête
qui s'initialise avec les données d'un objet RPG::Quest, et qui au départ
n'est pas terminée. Il faut aussi une méthode pour savoir si elle est terminée
et une méthode qui permet de terminer la quête et de donner l'argent et l'expérience.
Code Rubyclass Game_Quest
attr_reader :id
attr_reader :name
attr_reader :description
attr_reader :gold
attr_reader :exp
def initialize( quest_id)
# On récupère tout d'abord l'objet RPG::Quest pour l'initialisation
quest = $data_quests [ quest_id]
# et on initialise les données
@id = quest.id
@name = quest.name
@description = quest.description
@gold = quest.gold
@exp = quest.exp
# La quête n'est pas terminée au départ
@finished = false
end
# Méthode qui renvoie si la quête est terminée ou non
def finished?
return @finished
end
# Méthode qui permet de terminer la quête
def finish
# La quête est terminée
@finished = true
# Le groupe gagne de l'argent
$game_party .gain_gold ( @gold)
# Les membres du groupe gagnent de l'expérience
for actor in $game_party .actors
actor.exp += @exp
end
end
end
Il reste maintenant à rajouter à la classe Game_Party de quoi recevoir et
finir des quêtes.
Code Rubyclass Game_Party
attr_reader :quests
# On rajoute dans Game_Party un tableau qui contient les quêtes reçus
alias quest_initialize initialize
def initialize
quest_initialize
@quests = [ ]
end
# Méthode qui pemet de recevoir une quête
def get_quest( quest_id)
# On ajoute à la liste des quêtes un nouvel objet Game_Quest
@quests << Game_Quest.new ( quest_id)
end
# Méthode qui permet de finir une quête
def finish_quest( quest_id)
# On récupère une quête d'id quest_id qui n'est pas terminée
quest = @quests .find { |quest|
quest.id == quest_id and not quest.finished ?
}
# Si une telle quête existe, on la termine
quest.finish if quest != nil
end
end
Pour recevoir une quête d'id quest_id, on utilisera le script
Code Ruby$game_party .get_quest ( quest_id) ")
et pour la terminer ensuite
Code Ruby$game_party .finish_quest ( quest_id)