#============================================================================== # Script de Quêtes pour RPG Maker VX Version2 par Raitosan [23/08/2010] rpg-maker-vx.bbactif.com #============================================================================== # Class Quete #============================================================================== class Quete attr_accessor:nom attr_accessor:description attr_accessor:objets attr_accessor:nb_objets attr_accessor:interrupteur attr_accessor:recompenses
def initialize # Variables d'information de la quête @nom = "" @description = [] @objets = [] @nb_objets = [] @interrupteur = 0 @recompenses = [] end # end of initialize end # end of class Quete #============================================================================== # Module M_Quete #============================================================================== module M_Quete attr_accessor:Quetes
# Couleurs Couleur_Base = Color.new(255,255,255) # Couleur de base Objets_Non_Possede = Color.new(170,170,170) # Le joueur ne possède pas l'objet Objets_Possede = Color.new(255,255,255) # Le joueur possède au moins un objet, mais pas le nombre requis Objets_Complets = Color.new(0,255,0) # Le joueur possède le bon nombre d'objet(ou plus)
# Nom des images contenu dans Pictures/ Img_Exp = "exp" # Icone de l'exp Img_Po = "po" # Icone de l'argent
end #============================================================================== # Class Scene_Quete #============================================================================== class Scene_Quete < Scene_Base def start create_menu_background # Fond transparent
create_pictures
@quetes = M_Quete::Quetes # On ajoutes les quêtes @marge = 10 # Marge à gauche dans la fenêtre d'info de la quête @espace = 24 # Taille des lignes, et taille des sauts de lignes @nb_lines = 0 # Nombre de ligne qu'utilise la quête
create_tab
@liste = Window_Command.new(150, @tab,1,16) # Liste des quêtes
def afficher_description description = "" for x in 0...@quetes[@liste.index].description.size # Description de la Quête description = @quetes[@liste.index].description[x] hauteur = @espace*@nb_lines @quete.contents.draw_text(@marge, hauteur, 394, @espace, description, 0) @nb_lines += 1 end # end of for x in 0...@quetes[@liste.index].description.size
if objets_requis? saut_de_ligne elsif recompense? saut_de_ligne end end
@nb_lines+=1 end # end of for x in 0...@quetes[@liste.index].objets.size saut_de_ligne end # end of if @quetes[@liste.index].objets.size > 0 && @quetes[@liste.index].objets[0] != false end
def afficher_contenu afficher_nom afficher_description afficher_objets afficher_recompenses end
def nb_line_quest(quete) nb_line_quest = 2 # Titre+saut de ligne nb_line_quest += @quetes[quete].description.size # description if objets_requis? nb_line_quest += 1 # saut de ligne nb_line_quest += @quetes[quete].objets.size # Objets end if recompense? nb_line_quest += 2 #saut de ligne et le mot Recompenses: nb_line_quest += @quetes[quete].recompenses.size # recompenses end return nb_line_quest end
def update update_menu_background # Fond transparent @liste.update if @quete != nil @quete.update end
if Input.trigger?(Input::B) # Annulation Sound.play_cancel if @quete.active @quete.active = false @quete.visible = false @liste.active = true else $scene = Scene_Menu.new(M_Quete::Position_Menu) # On retroune dans le menu end elsif Input.trigger?(Input::C) # Validation
Petit script simpliste. On regrettera l'unique objectif possible ( collecte d'objets ), le fait que ne pas pouvoir cumuler les quêtes et la consommation d'un interrupteur par quête.
De plus, d'autres scripts sur le forum font bien mieux.
Pour ajouter une quête, c'est très simple. Vous avez juste à rajouter une case au tableau en entrant les informations de votre quêtes:
@quetes = [ ["Quête1",[ "Allez chercher le mot de Sakamoto dans", #Ligne 1 de la description "sa maison au Nord-Est du village"], #Ligne 2 de la description [25], [1], 41],
["Quête2", ["Sortez à l'Est du village et tuez des Slime", "Mutan pour obtenir des Poudres de Vie"], [27], [6], 42], . . . ["QuêteX", ["Faire nananinananeneninena"], [], [], Y] ]
["Nom de la Quête",[ "Ligne1 de la description", "Ligne2 de la description", "Ligne3 de la description", etc...], [ID_objet1, ID_objet2, etc...], [Nombre_Objet1_requis, Nombre_Objet2_requis, etc...], ID_interrupteur_Quête_fini]
Tu peux ensuite rajouter des PNJ, ou en enlever. La modification des quête est la même.
Voici donc le nouveau script:
Code:
#============================================================================== # ** Scene_Map #------------------------------------------------------------------------------ # This class performs the map screen processing. #==============================================================================
class Scene_Map < Scene_Base #-------------------------------------------------------------------------- # * Start processing #--------------------------------------------------------------------------
alias start_pnj start
def start super $game_map.refresh @spriteset = Spriteset_Map.new @message_window = Window_Message.new
start_pnj $pnj = nil
end #-------------------------------------------------------------------------- # * Execute Transition #-------------------------------------------------------------------------- def perform_transition if Graphics.brightness == 0 # After battle or loading, etc. fadein(30) else # Restoration from menu, etc. Graphics.transition(15) end end #-------------------------------------------------------------------------- # * Termination Processing #-------------------------------------------------------------------------- def terminate super if $scene.is_a?(Scene_Battle) # If switching to battle screen @spriteset.dispose_characters # Hide characters for background creation end snapshot_for_background @spriteset.dispose @message_window.dispose if $scene.is_a?(Scene_Battle) # If switching to battle screen perform_battle_transition # Execute pre-battle transition end end #-------------------------------------------------------------------------- # * Basic Update Processing #-------------------------------------------------------------------------- def update_basic Graphics.update # Update game screen Input.update # Update input information $game_map.update # Update map @spriteset.update # Update sprite set end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super $game_map.interpreter.update # Update interpreter $game_map.update # Update map $game_player.update # Update player $game_system.update # Update timer @spriteset.update # Update sprite set @message_window.update # Update message window unless $game_message.visible # Unless displaying a message update_transfer_player update_encounter update_call_menu update_call_debug update_scene_change end end #-------------------------------------------------------------------------- # * Fade In Screen # duration : time # If you use Graphics.fadeout directly on the map screen, a number of # problems can occur, such as weather effects and parallax scrolling # being stopped. So instead, perform a dynamic fade-in. #-------------------------------------------------------------------------- def fadein(duration) Graphics.transition(0) for i in 0..duration-1 Graphics.brightness = 255 * i / duration update_basic end Graphics.brightness = 255 end #-------------------------------------------------------------------------- # * Fade Out Screen # duration : time # As with the fadein above, Graphics.fadein is not used directly. #-------------------------------------------------------------------------- def fadeout(duration) Graphics.transition(0) for i in 0..duration-1 Graphics.brightness = 255 - 255 * i / duration update_basic end Graphics.brightness = 0 end #-------------------------------------------------------------------------- # * Player Transfer Processing #-------------------------------------------------------------------------- def update_transfer_player return unless $game_player.transfer? fade = (Graphics.brightness > 0) fadeout(30) if fade @spriteset.dispose # Dispose of sprite set $game_player.perform_transfer # Execute player transfer $game_map.autoplay # Automatically switch BGM and BGS $game_map.update Graphics.wait(15) @spriteset = Spriteset_Map.new # Recreate sprite set fadein(30) if fade Input.update end #-------------------------------------------------------------------------- # * Encounter Processing #-------------------------------------------------------------------------- def update_encounter return if $game_player.encounter_count > 0 # Check steps return if $game_map.interpreter.running? # Event being executed? return if $game_system.encounter_disabled # Encounters forbidden? troop_id = $game_player.make_encounter_troop_id # Determine troop return if $data_troops[troop_id] == nil # Troop is invalid? $game_troop.setup(troop_id) $game_troop.can_escape = true $game_temp.battle_proc = nil $game_temp.next_scene = "battle" preemptive_or_surprise end #-------------------------------------------------------------------------- # * Determine Preemptive Strike and Surprise Attack Chance #-------------------------------------------------------------------------- def preemptive_or_surprise actors_agi = $game_party.average_agi enemies_agi = $game_troop.average_agi if actors_agi >= enemies_agi percent_preemptive = 5 percent_surprise = 3 else percent_preemptive = 3 percent_surprise = 5 end if rand(100) < percent_preemptive $game_troop.preemptive = true elsif rand(100) < percent_surprise $game_troop.surprise = true end end #-------------------------------------------------------------------------- # * Determine if Menu is Called due to Cancel Button #-------------------------------------------------------------------------- def update_call_menu if Input.trigger?(Input::B) return if $game_map.interpreter.running? # Event being executed? return if $game_system.menu_disabled # Menu forbidden? $game_temp.menu_beep = true # Set SE play flag $game_temp.next_scene = "menu" end end #-------------------------------------------------------------------------- # * Determine Bug Call Due to F9 key #-------------------------------------------------------------------------- def update_call_debug if $TEST and Input.press?(Input::F9) # F9 key during test play $game_temp.next_scene = "debug" end end #-------------------------------------------------------------------------- # * Execute Screen Switch #-------------------------------------------------------------------------- def update_scene_change return if $game_player.moving? # Is player moving? case $game_temp.next_scene when "battle" call_battle when "shop" call_shop when "name" call_name when "menu" call_menu when "save" call_save when "debug" call_debug when "gameover" call_gameover when "title" call_title else $game_temp.next_scene = nil end end #-------------------------------------------------------------------------- # * Switch to Battle Screen #-------------------------------------------------------------------------- def call_battle @spriteset.update Graphics.update $game_player.make_encounter_count $game_player.straighten $game_temp.map_bgm = RPG::BGM.last $game_temp.map_bgs = RPG::BGS.last RPG::BGM.stop RPG::BGS.stop Sound.play_battle_start $game_system.battle_bgm.play $game_temp.next_scene = nil $scene = Scene_Battle.new end #-------------------------------------------------------------------------- # * Switch to Shop Screen #-------------------------------------------------------------------------- def call_shop $game_temp.next_scene = nil $scene = Scene_Shop.new end #-------------------------------------------------------------------------- # * Switch to Name Input Screen #-------------------------------------------------------------------------- def call_name $game_temp.next_scene = nil $scene = Scene_Name.new end #-------------------------------------------------------------------------- # * Switch to Menu Screen #-------------------------------------------------------------------------- def call_menu if $game_temp.menu_beep Sound.play_decision $game_temp.menu_beep = false end $game_temp.next_scene = nil $scene = Scene_Menu.new end #-------------------------------------------------------------------------- # * Switch to Save Screen #-------------------------------------------------------------------------- def call_save $game_temp.next_scene = nil $scene = Scene_File.new(true, false, true) end #-------------------------------------------------------------------------- # * Switch to Debug Screen #-------------------------------------------------------------------------- def call_debug Sound.play_decision $game_temp.next_scene = nil $scene = Scene_Debug.new end #-------------------------------------------------------------------------- # * Switch to Game Over Screen #-------------------------------------------------------------------------- def call_gameover $game_temp.next_scene = nil $scene = Scene_Gameover.new end #-------------------------------------------------------------------------- # * Switch to Title Screen #-------------------------------------------------------------------------- def call_title $game_temp.next_scene = nil $scene = Scene_Title.new fadeout(60) end #-------------------------------------------------------------------------- # * Execute Pre-battle Transition #-------------------------------------------------------------------------- def perform_battle_transition Graphics.transition(80, "Graphics/System/BattleStart", 80) Graphics.freeze end end
#============================================================================== # Script de Quêtes pour RPG Maker VX Version1 par Raitosan [23/08/2010] rpg-maker-vx.bbactif.com #============================================================================== # Class Quete #============================================================================== class Quete attr_accessor:nom attr_accessor:description attr_accessor:objets attr_accessor:nb_objets attr_accessor:interrupteur attr_accessor:recompenses
def initialize # Variables d'information de la quête @nom = "" @description = [] @objets = [] @nb_objets = [] @interrupteur = 0 @recompenses = [] end # end of initialize end # end of class Quete #============================================================================== # Module M_Quete #============================================================================== module M_Quete attr_accessor:Quetes
# Couleurs Couleur_Base = Color.new(255,255,255) # Couleur de base Objets_Non_Possede = Color.new(170,170,170) # Le joueur ne possède pas l'objet Objets_Possede = Color.new(255,255,255) # Le joueur possède au moins un objet, mais pas le nombre requis Objets_Complets = Color.new(0,255,0) # Le joueur possède le bon nombre d'objet(ou plus)
# Nom des images contenu dans Pictures/ Img_Quete_terminee = "Quete_terminee" Img_Quete_bloquee = "Quete_bloquee" Img_Exp = "exp" # Icone de l'exp Img_Po = "po" # Icone de l'argent
tab.push(M_Quete::Indisponible) @quetes = [ [M_Quete::Nom_Quete_indisponible, [M_Quete::Quete_indisponible], [], [], []] ] end # end of if @quetes.size > 0
@liste = Window_Command.new(150, @tab,1,16) # Liste des quêtes @quete = Window_Base.new(150,0,394, 416) # Informations de la Quête end # end of def start
def terminate dispose_menu_background @liste.dispose @quete.dispose @quete_terminee.dispose @quete_bloquee.dispose end # end of def terminate
def update update_menu_background # Fond transparent @liste.update @quete.update if Input.trigger?(Input::B) # Annulation Sound.play_cancel $scene = Scene_Menu.new(M_Quete::Position_Menu) # On retroune dans le menu elsif Input.trigger?(Input::C) # Validation Sound.play_decision @quete.contents.clear # On vide la fenêtre @quete.contents.font.color = M_Quete::Couleur_Base # On met la couleur du texte de base.
else @quete.contents.draw_text(0,0,362,20, @quetes[@liste.index].nom, 1) # Nom de la Quête for x in 0...@quetes[@liste.index].description.size @quete.contents.draw_text(0, 40+20*x, 394, 20, @quetes[@liste.index].description[x], 0) # Description de la Quête end # end of for x in 0...@quetes[@liste.index].description.size if @quetes[@liste.index].objets.size > 0 && @quetes[@liste.index].objets[0] != false for x in 0...@quetes[@liste.index].objets.size # Image de l'objet @quete.draw_icon($data_items[@quetes[@liste.index].objets[x]].icon_index, 0, 60+20*@quetes[@liste.index].description.size+25*x)
for x in 0...@quetes[@liste.index].recompenses.size case @quetes[@liste.index].recompenses[x][0] when 0 # Exp # Icone @quete.contents.blt(4,98+20*@quetes[@liste.index].description.size+25*@quetes[@liste.index].objets.size+ 25*x,@exp_img,@exp_img.rect) # Texte @quete.contents.draw_text(30,100+20*@quetes[@liste.index].description.size+ 25*@quetes[@liste.index].objets.size+25*x,362,20, @quetes[@liste.index].recompenses[x][1].to_s + " " + M_Quete::Points_exp, 0) when 1 # Argent # Icone @quete.contents.blt(1,98+20*@quetes[@liste.index].description.size+25*@quetes[@liste.index].objets.size+ 25*x,@po_img,@po_img.rect) # Texte @quete.contents.draw_text(30,100+20*@quetes[@liste.index].description.size+ 25*@quetes[@liste.index].objets.size+25*x,362,20, @quetes[@liste.index].recompenses[x][1].to_s + " " + M_Quete::Argent, 0) when 2 # Objet # Icone @quete.draw_icon($data_items[@quetes[@liste.index].recompenses[x][1]].icon_index, 0, 100+20*@quetes[@liste.index].description.size+25*@quetes[@liste.index].objets.size+25*x) # Nom_Objet @quete.contents.draw_text(30,100+20*@quetes[@liste.index].description.size+ 25*@quetes[@liste.index].objets.size+25*x,394, 20, $data_items[@quetes[@liste.index].recompenses[x][1]].name, 0) when 3 # Arme # Icone @quete.draw_icon($data_weapons[@quetes[@liste.index].recompenses[x][1]].icon_index, 0, 100+20*@quetes[@liste.index].description.size+25*@quetes[@liste.index].objets.size+25*x) # Nom_Arme @quete.contents.draw_text(30,100+20*@quetes[@liste.index].description.size+ 25*@quetes[@liste.index].objets.size+25*x,394, 20, $data_weapons[@quetes[@liste.index].recompenses[x][1]].name, 0) when 4 # Armure # Icone @quete.draw_icon($data_armors[@quetes[@liste.index].recompenses[x][1]].icon_index, 0, 100+20*@quetes[@liste.index].description.size+25*@quetes[@liste.index].objets.size+25*x) # Nom_Armure @quete.contents.draw_text(30,100+20*@quetes[@liste.index].description.size+ 25*@quetes[@liste.index].objets.size+25*x,394, 20, $data_armors[@quetes[@liste.index].recompenses[x][1]].name, 0) end # end of case @quetes[@liste.index].recompenses[x][0]
end # end of for x in 0...@quetes[@liste.index].recompenses.size
end # end of if @quetes[@liste.index].recompenses[0] != false end # end of if @tab[@liste.index] == M_Quete::Quete_terminee end # end of if Input.trigger?(Input::B) end # end of def update end # end of class Scene_Quete < Scene_Base
#============================================================================== # Script de Quêtes pour RPG Maker VX Version1.5 par Raitosan [23/08/2010] rpg-maker-vx.bbactif.com #============================================================================== # Class Quete #============================================================================== class Quete attr_accessor:nom attr_accessor:description attr_accessor:objets attr_accessor:nb_objets attr_accessor:interrupteur attr_accessor:recompenses
def initialize # Variables d'information de la quête @nom = "" @description = [] @objets = [] @nb_objets = [] @interrupteur = 0 @recompenses = [] end # end of initialize end # end of class Quete #============================================================================== # Module M_Quete #============================================================================== module M_Quete attr_accessor:Quetes
# Couleurs Couleur_Base = Color.new(255,255,255) # Couleur de base Objets_Non_Possede = Color.new(170,170,170) # Le joueur ne possède pas l'objet Objets_Possede = Color.new(255,255,255) # Le joueur possède au moins un objet, mais pas le nombre requis Objets_Complets = Color.new(0,255,0) # Le joueur possède le bon nombre d'objet(ou plus)
# Nom des images contenu dans Pictures/ Img_Quete_terminee = "Quete_terminee" Img_Quete_bloquee = "Quete_bloquee" Img_Exp = "exp" # Icone de l'exp Img_Po = "po" # Icone de l'argent
end #============================================================================== # Class Scene_Quete #============================================================================== class Scene_Quete < Scene_Base def start create_menu_background # Fond transparent
create_pictures
@quetes = M_Quete::Quetes # On ajoutes les quêtes @marge = 10 # Marge à gauche dans la fenêtre d'info de la quête @espace = 24 # Taille des lignes, et taille des sauts de lignes @nb_lines = 0 # nombre de ligne qu'utilise la quête
create_tab
@liste = Window_Command.new(150, @tab,1,16) # Liste des quêtes @quete = Window_Base.new(150,0,394, 416) # Informations de la Quête end # end of def start
def terminate dispose_menu_background @liste.dispose @quete.dispose @quete_terminee.dispose @quete_bloquee.dispose end # end of def terminate
def afficher_description description = "" for x in 0...@quetes[@liste.index].description.size # Description de la Quête description = @quetes[@liste.index].description[x] hauteur = @espace*@nb_lines @quete.contents.draw_text(@marge, hauteur, 394, @espace, description, 0) @nb_lines += 1 end # end of for x in 0...@quetes[@liste.index].description.size
if objets_requis? saut_de_ligne elsif recompense? saut_de_ligne end end
def afficher_objets if objets_requis? for x in 0...@quetes[@liste.index].objets.size # Image de l'objet icone = $data_items[@quetes[@liste.index].objets[x]].icon_index hauteur = @espace*@nb_lines @quete.draw_icon(icone, @marge, hauteur)
@nb_lines+=1 end # end of for x in 0...@quetes[@liste.index].objets.size saut_de_ligne end # end of if @quetes[@liste.index].objets.size > 0 && @quetes[@liste.index].objets[0] != false end
if Input.trigger?(Input::B) # Annulation Sound.play_cancel $scene = Scene_Menu.new(M_Quete::Position_Menu) # On retroune dans le menu elsif Input.trigger?(Input::C) # Validation Sound.play_decision @quete.contents.clear # On vide la fenêtre @quete.contents.font.color = M_Quete::Couleur_Base # On met la couleur du texte de base.
terminee? end # end of if Input.trigger?(Input::B) end # end of def update end # end of class Scene_Quete < Scene_Base
Voilà , dites moi ce que vous en pensez
Je vais peut-être sortir la version 2 dans quelques jours, qui offrira quelque chose de vraiment pratique La version 2 sera(s'il n'y a pas de problèmes) la version finale de ce script.
Raitosan
†Fondateur du forum â€
Age : 31 Inscrit le : 09/02/2008 Messages : 1974
Sujet: Re: [VX] Fenêtre de Quête Mer 25 Aoû 2010 - 11:41
Quetes[0].objets.push(12) deviens Quetes[01].objets.push([TYPE,12]) Donc, si on veux dire au joueur qu'il faut qu'il ramène une armure à un PNJ, nous devrons faire comme ceci:
Quetes[01].objets.push([Armure,12]) Pour une arme: Quetes[01].objets.push([Arme,12])
C'est aussi simple que ça!
Voici quelques screens:
Voici donc le script:
Code:
#============================================================================== # Script de Quêtes pour RPG Maker VX Version2 par Raitosan [25/08/2010] rpg-maker-vx.bbactif.com #============================================================================== # Class Quete #============================================================================== class Quete attr_accessor:nom attr_accessor:description attr_accessor:objets attr_accessor:nb_objets attr_accessor:interrupteur attr_accessor:recompenses
def initialize # Variables d'information de la quête @nom = "" @description = [] @objets = [] @nb_objets = [] @interrupteur = 0 @recompenses = [] end # end of initialize end # end of class Quete #============================================================================== # Module M_Quete #============================================================================== module M_Quete attr_accessor:Quetes
# Couleurs Couleur_Base = Color.new(255,255,255) # Couleur de base Objets_Non_Possede = Color.new(170,170,170) # Le joueur ne possède pas l'objet Objets_Possede = Color.new(255,255,255) # Le joueur possède au moins un objet, mais pas le nombre requis Objets_Complets = Color.new(0,255,0) # Le joueur possède le bon nombre d'objet(ou plus)
# Nom des images contenu dans Pictures/ Img_Quete_terminee = "Quete_terminee" Img_Quete_bloquee = "Quete_bloquee" Img_Exp = "exp" # Icone de l'exp Img_Po = "po" # Icone de l'argent
end #============================================================================== # Class Scene_Quete #============================================================================== class Scene_Quete < Scene_Base def start create_menu_background # Fond transparent
create_pictures
@quetes = M_Quete::Quetes # On ajoutes les quêtes @marge = 10 # Marge à gauche dans la fenêtre d'info de la quête @espace = 24 # Taille des lignes, et taille des sauts de lignes @nb_lines = 0 # Nombre de ligne qu'utilise la quête
create_tab
@liste = Window_Command.new(150, @tab,1,16) # Liste des quêtes
def afficher_description description = "" for x in 0...@quetes[@liste.index].description.size # Description de la Quête description = @quetes[@liste.index].description[x] hauteur = @espace*@nb_lines @quete.contents.draw_text(@marge, hauteur, 394, @espace, description, 0) @nb_lines += 1 end # end of for x in 0...@quetes[@liste.index].description.size
if objets_requis? saut_de_ligne elsif recompense? saut_de_ligne end end
@nb_lines+=1 end # end of for x in 0...@quetes[@liste.index].objets.size saut_de_ligne end # end of if @quetes[@liste.index].objets.size > 0 && @quetes[@liste.index].objets[0] != false end
def afficher_contenu afficher_nom afficher_description afficher_objets afficher_recompenses end
def nb_line_quest(quete) nb_line_quest = 2 # Titre+saut de ligne nb_line_quest += @quetes[quete].description.size # description if objets_requis? nb_line_quest += 1 # saut de ligne nb_line_quest += @quetes[quete].objets.size # Objets end if recompense? nb_line_quest += 2 #saut de ligne et le mot Recompenses: nb_line_quest += @quetes[quete].recompenses.size # recompenses end return nb_line_quest end
def update update_menu_background # Fond transparent @liste.update if @quete != nil @quete.update end
if Input.trigger?(Input::B) # Annulation Sound.play_cancel if @quete.active @quete.active = false @quete.visible = false @liste.active = true else $scene = Scene_Menu.new(M_Quete::Position_Menu) # On retroune dans le menu end elsif Input.trigger?(Input::C) # Validation