Je viens ici pour partager mon tout premier script! Un script de Quête!
Attention, ce script n'est que pour ce forum, et merci de mettre mon pseudo dans les crédits
Ce script ne sert pas à accepter ou à valider des quêtes. Il affiche simplement les objets nécessaire pour compléter la quête, et les récompenses. Chaque quête peut avoir une description(vous pouvez mettre autant de ligne que vous le souhaitez! ), une liste d'objet(facultatif, encore une fois, vous pouvez mettre autant d'objet que vous le souhaitez)
L'espace est infini! Votre quête peut avoir au total 100 lignes voir 200 lignes si vous voulez!
Le principe est simple, le joueur regarde dans la fenêtre de quête quelle quête il doit faire. Ensuite, quand il l'a accomplie, activer l'interrupteur de la quête(vous pouvez mettre n'importe quel interrupteur). Attention, avec ce script, le joueur ne peut pas faire plusieurs quêtes en même temps. En effet, tant que le joueur n'a pas fini une quête, il ne pourras pas faire la suivante. Ce n'est qu'une fois la précédente de faite, qu'il pourras voir les informations de la quête suivante. Ainsi, on as un meilleur contrôle du parcourt du joueur.
Voici quelques screens:
Spoiler:
Et voici le script:
Code:
#============================================================================== # 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
# Vocabulaire Quete_terminee = "Terminée" Quete_bloquee = "Bloquée" Quete_indisponible = "Aucune quête n'est disponible" Indisponible = "Indisponible" Nom_Quete_indisponible = "Aucune quête disponible" Recompenses = "Récompenses:" # Mot ou phrase avant les récompenses Points_exp = "points d'Exp" # Vous avez gagner X "points d'Exp" Argent = "Po" # Nom de l'argent
# 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
# Variables pour les récompenses Exp = 0 Po = 1 Objet = 2 Arme = 3 Armure = 4
# Autres Position_Menu = 5 # Indique la position du curseur lorsque vous retournez dans le menu
# On créer les quetes ici Quetes = []
Quetes.push(Quete.new) # On créer la première quête Quetes[0].nom = "iTi Maison?" # Nom de la quête Quetes[0].description.push("Trouvez la maison des quêtes. Elle se") # On créer la première ligne de description Quetes[0].description.push("trouve dans le village, et possède une") # On créer la deuxième ligne de description Quetes[0].description.push("insigne avec un livre. Elle vous attend!") # On créer la deuxième ligne de description Quetes[0].objets.push(false) # Aucuns objets n'est requis pour finir la quête Quetes[0].interrupteur = 40 # Quand l'interrupteur 40 sera activer, la quête sera marquée comme Terminée Quetes[0].recompenses.push(false) # Aucunes récompenses
Quetes.push(Quete.new) # On créer la deuxième quête Quetes[1].nom = "Nom de la Quête" # Nom de la quête #Ici, j'ai créer une boucle qui ajoute les commentaires à ma place, désoler j'avais la flème de le faire^^ for x in 1...9 Quetes[1].description.push("Ligne de description " + x.to_s) # On créer la première ligne de description end Quetes[1].objets.push([Objet,25]) Quetes[1].objets.push([Objet,15]) Quetes[1].objets.push([Objet,7]) Quetes[1].objets.push([Arme,17]) Quetes[1].objets.push([Armure,2]) Quetes[1].nb_objets.push(1) Quetes[1].nb_objets.push(5) Quetes[1].nb_objets.push(3) Quetes[1].nb_objets.push(1) Quetes[1].nb_objets.push(2) Quetes[1].interrupteur = 41 Quetes[1].recompenses.push([Objet, 15]) Quetes[1].recompenses.push([Objet, 5]) Quetes[1].recompenses.push([Arme, 7]) Quetes[1].recompenses.push([Arme, 9]) Quetes[1].recompenses.push([Arme, 13]) Quetes[1].recompenses.push([Armure, 17]) Quetes[1].recompenses.push([Exp, 25])
Quetes.push(Quete.new) # On créer la deuxième quête Quetes[2].nom = "La vie en poudre" # Nom de la quête Quetes[2].description.push("Sortez à l'Est du village et tuez des Slime") # On créer la première ligne de description Quetes[2].description.push("Mutan pour obtenir des Poudres de Vie") # On créer la deuxième ligne de description Quetes[2].objets.push([Objet,27]) # L'objet avec l'ID 27 est requis pour terminer la quête Quetes[2].nb_objets.push(6) # Il faut 6 fois l'objet avec l'ID 27 pour terminer la quête Quetes[2].interrupteur = 42 # Quand l'interrupteur 42 sera activer, la quête sera marquée comme Terminée Quetes[2].recompenses.push([Objet, 1]) # 1ère récompense: 1 fois l'objet avec l'ID 1 (potion) Quetes[2].recompenses.push([Po, 350]) # 2ème récompense: 350 PO Quetes[2].recompenses.push([Exp, 50]) # 3ème récompense: 50 points d'Exp
Quetes.push(Quete.new) # On créer la deuxième quête Quetes[3].nom = "Takaya...ki?" # Nom de la quête Quetes[3].description.push("Trouvez Takayami, et lui parler. Il se") # On créer la première ligne de description Quetes[3].description.push("trouve en dehors du village, vers l'Est.") # On créer la deuxième ligne de description Quetes[3].objets.push(false) # Pas d'objets requis pour terminer la quête Quetes[3].interrupteur = 43 # Quand l'interrupteur 42 sera activer, la quête sera marquée comme Terminée Quetes[3].recompenses.push(false) # Pas de récompenses
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
if @quetes.size > 0 for x in 0...@quetes.size if $game_switches[@quetes[x].interrupteur] == true @tab.push(M_Quete::Quete_terminee) # Quête terminée else if $game_switches[@quetes[x-1].interrupteur] == true @tab.push(@quetes[x].nom) # Liste des noms de quêtes else if x == 0 @tab.push(@quetes[x].nom) else @tab.push(M_Quete::Quete_bloquee) # Liste des quêtes bloquées end # en of if x == 0 end # end of $game_switches[@quetes[x-1].interrupteur] == true end # end of if $game_switches[@quetes[x].interrupteur] == true end # end of for x in 0...@quetes.size else tab.push(M_Quete::Indisponible) @quetes = [ [M_Quete::Nom_Quete_indisponible, [M_Quete::Quete_indisponible], [], [], []] ] end # end of if @quetes.size > 0 end
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 # Couleurs if $game_party.item_number($data_items[@quetes[@liste.index].objets[x][1]]) <= 0 @quete.contents.font.color = M_Quete::Objets_Non_Possede # Objet non possédé elsif $game_party.item_number($data_items[@quetes[@liste.index].objets[x][1]]) < @quetes[@liste.index].nb_objets[x] @quete.contents.font.color = M_Quete::Objets_Possede # Objet possédé elsif $game_party.item_number($data_items[@quetes[@liste.index].objets[x][1]]) >= @quetes[@liste.index].nb_objets[x] @quete.contents.font.color = M_Quete::Objets_Complets # Le nombre d'objet est suffisant end # end of if $game_party.item_number($data_items[@quetes[@liste.index].objets[x]]) <= 0
case @quetes[@liste.index].objets[x][0] when M_Quete::Objet # Image de l'objet icone = $data_items[@quetes[@liste.index].objets[x][1]].icon_index hauteur = @espace*@nb_lines @quete.draw_icon(icone, @marge, hauteur)
# Nom de l'objet, nombre d'objet possédé, et requis nom = $data_items[@quetes[@liste.index].objets[x][1]].name nb_objets_posseder = $game_party.item_number($data_items[@quetes[@liste.index].objets[x][1]]) nb_objets_requis = @quetes[@liste.index].nb_objets[x] texte = nom + " ( " + (nb_objets_posseder).to_s + " / " + nb_objets_requis.to_s + " )" @quete.contents.draw_text(32+@marge,hauteur, 394,@espace, texte , 0) when M_Quete::Arme # Image de l'objet icone = $data_weapons[@quetes[@liste.index].objets[x][1]].icon_index hauteur = @espace*@nb_lines @quete.draw_icon(icone, @marge, hauteur)
# Nom de l'objet, nombre d'objet possédé, et requis nom = $data_weapons[@quetes[@liste.index].objets[x][1]].name nb_objets_posseder = $game_party.item_number($data_weapons[@quetes[@liste.index].objets[x][1]]) nb_objets_requis = @quetes[@liste.index].nb_objets[x] texte = nom + " ( " + (nb_objets_posseder).to_s + " / " + nb_objets_requis.to_s + " )" @quete.contents.draw_text(32+@marge,hauteur, 394,@espace, texte , 0) when M_Quete::Armure # Image de l'objet icone = $data_armors[@quetes[@liste.index].objets[x][1]].icon_index hauteur = @espace*@nb_lines @quete.draw_icon(icone, @marge, hauteur)
# Nom de l'objet, nombre d'objet possédé, et requis nom = $data_armors[@quetes[@liste.index].objets[x][1]].name nb_objets_posseder = $game_party.item_number($data_armors[@quetes[@liste.index].objets[x][1]]) nb_objets_requis = @quetes[@liste.index].nb_objets[x] texte = nom + " ( " + (nb_objets_posseder).to_s + " / " + nb_objets_requis.to_s + " )" @quete.contents.draw_text(32+@marge,hauteur, 394,@espace, texte , 0) 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 terminee? if @tab[@liste.index] == M_Quete::Quete_terminee # Quête terminée elsif @tab[@liste.index] == M_Quete::Quete_bloquee # Quête bloquée else @nb_lines = 0 afficher_contenu end # end of if @tab[@liste.index] == M_Quete::Quete_terminee 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.
Ensuite, ce qui limite ce script, est votre événement Avec ce script on peux faire une récolte d'objet, parler à un NPC, visiter un endroit ou n'importe quoi, sachant que ce sont les événements qui actives les intérrupteurs.
Pour ne pas cumuler les quêtes, c'est voulue Je peux aussi créer une version qui le permet. Le script en sera encore plus simple.(ça dépend des besoins des projets)
Pour les autres scripts -> J'ai u des problèmes de compatibilité avec presque tous, alors que celui là passe comme du beurre
Si vous avez des idées d'amélioration, merci de m'en faire part
Si tu améliores ton scripts pour cumuler des quêtes, tu mettra à jour ? En tout cas moi je prends ce script car il mérite d'être testé ^^
Mais si j'ai bien compris, en créant plusieurs interrupteurs on peu cumuler les quêtes déja non ? c'est juste qu'elles ne seront pas sur le même tableau.
Pour l'instant, je fais en sorte à ce qu'une quête bloquée puisse être débloquer par un interrupteur, ou par une autre quête(si elle devient terminée).
Si j'y arrive, je pense que ça pourrais m'avoir été super utile en tant expérience, et pour d'autre, utile pour leurs jeux
Comment l'améliorer ? Simple, tout d'abord virer les interrupteurs du jeu de la gestion des quêtes et utiliser un hash qui contiendra ces données à la place.
Utilise un module pour faire la configuration des quêtes, ça évitera à un maker novice de fouiller dans les scripts.
Commente plus ton script. Met des en-tête à tes methodes, note la signification des end ( end d'un condition, end d'une boucle, end d'une class ).
Allège ta méthode start en déplaçant la création des quêtes dans de nouvelles méthodes.
En fait, je parlais d'utiliser des interrupteurs oui, mais pas ceux du jeu. De nouveaux. Imagine que y'a 100 quêtes. On serait obligé d'avoir 100 interrupteurs gachés a cause de ça ?
Je vais essayer, mais je ne promet rien... N'oubliez pas que je débutes^^ Vous savez comment modifier une variable en jeu?
Onyx31 -> Voilà le script, c'est bien ça que tu voulais?
Code:
#============================================================================== # Script de Quêtes pour RPG Maker VX Version1 par Raitosan [23/08/2010] rpg-maker-vx.bbactif.com #============================================================================== # Fonctionnement: =begin
Pour signaler que la quête est terminée, il suffit d'activer son interrupeur.
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]
Vous pouvez mettre autant de ligne de description que vous voulez(et d'objets nécessaire, mais attention, l'espace est limité ;) Bien sur, vous pouvez aussi mettre autant de quête que vous le souhaitez.
Pour appelé le script, il vous suffit de copier/coller ce code:
$scene = Scene_Quete.new
=end #============================================================================== # Module Quete #============================================================================== module M_Quete Quete_terminee = "Terminée" Quete_indisponible = "Aucune quête n'est disponible" end #============================================================================== # Class Scene_Quete #============================================================================== class Scene_Quete < Scene_Base def start create_menu_background # Fond transparent @quete_terminee = Cache.picture("Quete_terminee") # On créer les quêtes ici @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ête3", ["Trouvez 2 Elixir"], [8], [2], 43],
["Quête4", ["Parlez à Takayami"], [], [], 44] ]
@tab = [] if @quetes.size > 0 for x in 0...@quetes.size if $game_switches[@quetes[x][4]] == true @tab.push(M_Quete::Quete_terminee) # Quête terminée else @tab.push(@quetes[x][0]) # Liste des noms de quêtes end end else tab.push("Indisponible") @quetes =[ ["Aucune Quête Disponible", [M_Quete::Quete_indisponible], [], [], []] ] end
@liste = Window_Command.new(150, @tab,1,16) # Liste des quêtes @quete = Window_Base.new(150,0,394, 416) end def terminate dispose_menu_background @liste.dispose @quete.dispose @quete_terminee @quete_bloquee end def update update_menu_background
if @tab[@liste.index] == M_Quete::Quete_terminee # Quête terminée @quete.contents.blt(4,4,@quete_terminee,@quete_terminee.rect) else @quete.contents.draw_text(0,0,362,20, @quetes[@liste.index][0], 1) # Nom de la Quête for x in 0...@quetes[@liste.index][1].size @quete.contents.draw_text(0, 40+20*x, 394, 20, @quetes[@liste.index][1][x], 0) # Description de la Quête end if @quetes[@liste.index][2].size > 0 for x in 0...@quetes[@liste.index][2].size # Image de l'objet @quete.draw_icon($data_items[@quetes[@liste.index][2][x]].icon_index, 0, 60+20*@quetes[@liste.index][1].size+25*x)
# Nom de l'objet if $game_party.item_number($data_items[@quetes[@liste.index][2][x]]) <= 0 @quete.contents.font.color = Color.new(170,170,170) elsif $game_party.item_number($data_items[@quetes[@liste.index][2][x]]) < @quetes[@liste.index][3][x] @quete.contents.font.color = Color.new(255,255,255) elsif $game_party.item_number($data_items[@quetes[@liste.index][2][x]]) >= @quetes[@liste.index][3][x] @quete.contents.font.color = Color.new(0,255,0) end #Nombre d'objet possédé, et requis @quete.contents.draw_text(32,60+20*@quetes[@liste.index][1].size+25*x, 394,20, $data_items[@quetes[@liste.index][2][x]].name + " ( " + ($game_party.item_number($data_items[@quetes[@liste.index][2][x]])).to_s + " / " + @quetes[@liste.index][3][x].to_s + " )" , 0) end
Donc non je ne te demandais pas le script. Je voulais juste savoir si imaginons je crée deux types qui donne des quêtes différentes. On peut pas cumuler deux quête d'un même demandeur, mais si il y a deux demandeurs on peut avoir deux quêtes non ?
bref je sais pas si c'est clair mais c'est pas grave, va ! Fais ton chemin de scripteur et ponds nous des merveilles à en faire pâlir biward !
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
En revanche, ça n'affiche que les quêtes du personnage à qui tu parles(j'ai pensé que ce serait mieux). Si tu veux en revanche qu'on les voies toutes, dit le moi.
Si tu as quelques choses qui ne vas pas, dit le moi
Pour l'instant, je rajoute l'affichage des récompenses
Merci pour les points(non, je ne m'en suis pas mis XD)
Edit:
Et voilà! Le script a été mis à jour! J'ai améliorer grandement la facilitée pour qu'un débutant puisse utiliser le script. Il n'a plus besoin de chercher partout pour modifier un petit truc, et il n'a pas besoin de se compliquer la vie pour créer une quête. Tout est au début du script. La création d'une quête se fait maintenant dans le module M_Quete, et prend cette forme là:
Code:
Quetes.push(Quete.new) # On créer la troisième quête Quetes[2].nom = "La vie en poudre" # Nom de la quête Quetes[2].description.push("Sortez à l'Est du village et tuez des Slime") # On créer la première ligne de description Quetes[2].description.push("Mutan pour obtenir des Poudres de Vie") # On créer la deuxième ligne de description Quetes[2].objets.push(27) # L'objet avec l'ID 27 est requis pour terminer la quête Quetes[2].nb_objets.push(6) # Il faut 6 fois l'objet avec l'ID 27 pour terminer la quête Quetes[2].interrupteur = 42 # Quand l'interrupteur 42 sera activer, la quête sera marquée comme Terminée Quetes[2].recompenses.push([Objet, 1]) # 1ère récompense: 1 fois l'objet avec l'ID 1 (potion) Quetes[2].recompenses.push([Arme, 6]) # 1ère récompense: 1 fois l'arme avec l'ID 6 Quetes[2].recompenses.push([Armure, 17]) # 1ère récompense: 1 fois l'armure avec l'ID 17 Quetes[2].recompenses.push([Po, 350]) # 2ème récompense: 350 PO Quetes[2].recompenses.push([Exp, 50]) # 3ème récompense: 50 points d'Exp
Voici un petit screen, et le nouveau code:
Code:
#============================================================================== # 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
# Vocabulaire Quete_terminee = "Terminée" Quete_bloquee = "Bloquée" Quete_indisponible = "Aucune quête n'est disponible" Indisponible = "Indisponible" Nom_Quete_indisponible = "Aucune quête disponible" Recompenses = "Récompenses:" # Mot ou phrase avant les récompenses Points_exp = "points d'Exp" # Vous avez gagner X "points d'Exp" Argent = "Po" # Nom de l'argent
# 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
# Variables pour les récompenses Exp = 0 Po = 1 Objet = 2 Arme = 3 Armure = 4
# Autres Position_Menu = 5 # Indique la position du curseur lorsque vous retournez dans le menu
# On créer les quetes ici Quetes = []
Quetes.push(Quete.new) # On créer la première quête Quetes[0].nom = "iTi Maison?" # Nom de la quête Quetes[0].description.push("Trouvez la maison des quêtes. Elle se") # On créer la première ligne de description Quetes[0].description.push("trouve dans le village, et possède une") # On créer la deuxième ligne de description Quetes[0].description.push("insigne avec un livre. Elle vous attend!") # On créer la deuxième ligne de description Quetes[0].objets.push(false) # Aucuns objets n'est requis pour finir la quête Quetes[0].interrupteur = 40 # Quand l'interrupteur 40 sera activer, la quête sera marquée comme Terminée Quetes[0].recompenses.push(false) # Aucunes récompenses
Quetes.push(Quete.new) # On créer la deuxième quête Quetes[1].nom = "Mot perdu" # Nom de la quête Quetes[1].description.push("Allez chercher le mot de Sakamoto dans") # On créer la première ligne de description Quetes[1].description.push("sa maison au Nord-Est du village") # On créer la deuxième ligne de description Quetes[1].objets.push(25) # L'objet avec l'ID 25 est requis pour terminer la quête Quetes[1].nb_objets.push(1) # Il faut 1 fois l'objet avec l'ID 25 pour terminer la quête Quetes[1].interrupteur = 41 # Quand l'interrupteur 41 sera activer, la quête sera marquée comme Terminée Quetes[1].recompenses.push([Po, 100]) # 1ère récompense: 100 PO Quetes[1].recompenses.push([Exp, 25]) # 2ème récompense: 25 points d'Exp
Quetes.push(Quete.new) # On créer la troisième quête Quetes[2].nom = "La vie en poudre" # Nom de la quête Quetes[2].description.push("Sortez à l'Est du village et tuez des Slime") # On créer la première ligne de description Quetes[2].description.push("Mutan pour obtenir des Poudres de Vie") # On créer la deuxième ligne de description Quetes[2].objets.push(27) # L'objet avec l'ID 27 est requis pour terminer la quête Quetes[2].nb_objets.push(6) # Il faut 6 fois l'objet avec l'ID 27 pour terminer la quête Quetes[2].interrupteur = 42 # Quand l'interrupteur 42 sera activer, la quête sera marquée comme Terminée Quetes[2].recompenses.push([Objet, 1]) # 1ère récompense: 1 fois l'objet avec l'ID 1 (potion) Quetes[2].recompenses.push([Arme, 6]) # 1ère récompense: 1 fois l'arme avec l'ID 6 Quetes[2].recompenses.push([Armure, 17]) # 1ère récompense: 1 fois l'armure avec l'ID 17 (potion) Quetes[2].recompenses.push([Po, 350]) # 2ème récompense: 350 PO Quetes[2].recompenses.push([Exp, 50]) # 3ème récompense: 50 points d'Exp
Quetes.push(Quete.new) # On créer la quatrième quête Quetes[3].nom = "Takaya...ki?" # Nom de la quête Quetes[3].description.push("Trouvez Takayami, et lui parler. Il se") # On créer la première ligne de description Quetes[3].description.push("trouve en dehors du village, vers l'Est.") # On créer la deuxième ligne de description Quetes[3].objets.push(false) # Pas d'objets requis pour terminer la quête Quetes[3].interrupteur = 43 # Quand l'interrupteur 42 sera activer, la quête sera marquée comme Terminée Quetes[3].recompenses.push(false) # Pas de récompenses
end #============================================================================== # Class Scene_Quete #============================================================================== class Scene_Quete < Scene_Base def start create_menu_background # Fond transparent @quete_terminee = Cache.picture(M_Quete::Img_Quete_terminee) # Image des quêtes terminées @quete_bloquee = Cache.picture(M_Quete::Img_Quete_bloquee) # Image des quêtes bloquées @exp_img = Cache.picture(M_Quete::Img_Exp) # Icone de l'exp @po_img = Cache.picture(M_Quete::Img_Po) #Icone des PO (pièces d'or)
@quetes = M_Quete::Quetes # On ajoutes les quêtes
@tab = [] if @quetes.size > 0 for x in 0...@quetes.size if $game_switches[@quetes[x].interrupteur] == true @tab.push(M_Quete::Quete_terminee) # Quête terminée else if $game_switches[@quetes[x-1].interrupteur] == true @tab.push(@quetes[x].nom) # Liste des noms de quêtes else if x == 0 @tab.push(@quetes[x].nom) else @tab.push(M_Quete::Quete_bloquee) # Liste des quêtes bloquées end # en of if x == 0 end # end of $game_switches[@quetes[x-1].interrupteur] == true end # end of if $game_switches[@quetes[x].interrupteur] == true end # end of for x in 0...@quetes.size else
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.
if @tab[@liste.index] == M_Quete::Quete_terminee # Quête terminée @quete.contents.blt(4,4,@quete_terminee,@quete_terminee.rect)
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)
# Couleurs if $game_party.item_number($data_items[@quetes[@liste.index].objets[x]]) <= 0 @quete.contents.font.color = M_Quete::Objets_Non_Possede # Objet non possédé elsif $game_party.item_number($data_items[@quetes[@liste.index].objets[x]]) < @quetes[@liste.index].nb_objets[x] @quete.contents.font.color = M_Quete::Objets_Possede # Objet possédé elsif $game_party.item_number($data_items[@quetes[@liste.index].objets[x]]) >= @quetes[@liste.index].nb_objets[x] @quete.contents.font.color = M_Quete::Objets_Complets # Le nombre d'objet est suffisant end # end of if $game_party.item_number($data_items[@quetes[@liste.index].objets[x]]) <= 0 # Nom de l'objet, nombre d'objet possédé, et requis @quete.contents.draw_text(32,60+20*@quetes[@liste.index].description.size+25*x, 394,20, $data_items[@quetes[@liste.index].objets[x]].name + " ( " + ($game_party.item_number($data_items[@quetes[@liste.index].objets[x]])).to_s + " / " + @quetes[@liste.index].nb_objets[x].to_s + " )" , 0) end # end of for x in 0...@quetes[@liste.index].objets.size end # end of if @quetes[@liste.index].objets.size > 0 && @quetes[@liste.index].objets[0] != false
if @quetes[@liste.index].recompenses[0] != false
#On remet la couleur de base @quete.contents.font.color = M_Quete::Couleur_Base
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
Voilà Donnez moi vos impressions
Dernière édition par Raito-san le Mar 24 Aoû 2010 - 19:50, édité 2 fois
Biward
Age : 28 Inscrit le : 30/12/2009 Messages : 1067
Sujet: Re: [VX] Fenêtre de Quête Mar 24 Aoû 2010 - 17:56
O_° C'est beaucoup plus méga mieux que l'autre (plus élaboré quoi !). En tout cas, la création d'une quête et facile
Cordialement, Biward
Raitosan
† Fondateur du forum †
Age : 31 Inscrit le : 09/02/2008 Messages : 1974
Sujet: Re: [VX] Fenêtre de Quête Mar 24 Aoû 2010 - 18:16
Merci ça fait plaisir de savoir que je sais faire quelque chose de potable U_U
jebbou
Doyen
Age : 46 Inscrit le : 20/08/2008 Messages : 2485
Sujet: Re: [VX] Fenêtre de Quête Mar 24 Aoû 2010 - 18:25
La nouvelle classe "quête" est beaucoup plus élégante! MAIS La tag spoiler éliminel'indentation du code, et ca rend sa lecture TRÈS pénible ^_^
Dernière édition par jebbou le Mar 24 Aoû 2010 - 18:28, édité 1 fois
Raitosan
† Fondateur du forum †
Age : 31 Inscrit le : 09/02/2008 Messages : 1974
Sujet: Re: [VX] Fenêtre de Quête Mar 24 Aoû 2010 - 18:27
Voilà, j'ai changer pour la balise Code.
Zangther
Maître des Duels
Age : 32 Inscrit le : 29/07/2009 Messages : 7841
Sujet: Re: [VX] Fenêtre de Quête Mar 24 Aoû 2010 - 18:29
En effet, le script est mieux. Tu as ajouté plusieurs éléments bien. Utiliser une structure pour créer tes quêtes est une bonne idée, ça permet d'avoir la forme et d'éviter les array et hashs a ralonge.
Niveau configuration c'est mieux aussi.
Par contre niveau code, c'est vraiment fouillis. Tu met tout dans le trio start / update / terminate. C'est bien trop illisible, apprends à utiliser les méthode pour alléger certaines parties. En regardant ton code, dans fois je trouve des lignes à rallonge. Tu devrais essayer de réduire.
Ah aussi, ton script a perdu sa mise en forme, et c'est assez lourd a lire, tu pourrais essayer de la remetttre ?
Raitosan
† Fondateur du forum †
Age : 31 Inscrit le : 09/02/2008 Messages : 1974
Sujet: Re: [VX] Fenêtre de Quête Mar 24 Aoû 2010 - 18:30
Ok, je vais essayer de faire ça
Merci Jebbou
PS: Comment ça la mise en forme du script?
Zangther
Maître des Duels
Age : 32 Inscrit le : 29/07/2009 Messages : 7841
Sujet: Re: [VX] Fenêtre de Quête Mar 24 Aoû 2010 - 18:38
En gros, sur le script que tu as mis, toutes les commadnes sont collées sur la gauche. Un code clair et compréhensible est organisé avec des tabulations.
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 - 8:44
La version 1.5 est là!
Dans cette version, le code est plus simple, plus partitionné, et donc plus facile à modifier. Le fonctionnement est pareil qu'avant
Code:
#============================================================================== # 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
# Vocabulaire Quete_terminee = "Terminée" Quete_bloquee = "Bloquée" Quete_indisponible = "Aucune quête n'est disponible" Indisponible = "Indisponible" Nom_Quete_indisponible = "Aucune quête disponible" Recompenses = "Récompenses:" # Mot ou phrase avant les récompenses Points_exp = "points d'Exp" # Vous avez gagner X "points d'Exp" Argent = "Po" # Nom de l'argent
# 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
# Variables pour les récompenses Exp = 0 Po = 1 Objet = 2 Arme = 3 Armure = 4
# Autres Position_Menu = 5 # Indique la position du curseur lorsque vous retournez dans le menu
# On créer les quetes ici Quetes = []
Quetes.push(Quete.new) # On créer la première quête Quetes[0].nom = "iTi Maison?" # Nom de la quête Quetes[0].description.push("Trouvez la maison des quêtes. Elle se") # On créer la première ligne de description Quetes[0].description.push("trouve dans le village, et possède une") # On créer la deuxième ligne de description Quetes[0].description.push("insigne avec un livre. Elle vous attend!") # On créer la deuxième ligne de description Quetes[0].objets.push(false) # Aucuns objets n'est requis pour finir la quête Quetes[0].interrupteur = 40 # Quand l'interrupteur 40 sera activer, la quête sera marquée comme Terminée Quetes[0].recompenses.push(false) # Aucunes récompenses
Quetes.push(Quete.new) # On créer la deuxième quête Quetes[1].nom = "Mot perdu" # Nom de la quête Quetes[1].description.push("Allez chercher le mot de Sakamoto dans") # On créer la première ligne de description Quetes[1].description.push("sa maison au Nord-Est du village") # On créer la deuxième ligne de description Quetes[1].objets.push(25) # L'objet avec l'ID 25 est requis pour terminer la quête Quetes[1].nb_objets.push(1) # Il faut 1 fois l'objet avec l'ID 25 pour terminer la quête Quetes[1].interrupteur = 41 # Quand l'interrupteur 41 sera activer, la quête sera marquée comme Terminée Quetes[1].recompenses.push([Po, 100]) # 1ère récompense: 100 PO Quetes[1].recompenses.push([Exp, 25]) # 2ème récompense: 25 points d'Exp
Quetes.push(Quete.new) # On créer la deuxième quête Quetes[2].nom = "La vie en poudre" # Nom de la quête Quetes[2].description.push("Sortez à l'Est du village et tuez des Slime") # On créer la première ligne de description Quetes[2].description.push("Mutan pour obtenir des Poudres de Vie") # On créer la deuxième ligne de description Quetes[2].objets.push(27) # L'objet avec l'ID 27 est requis pour terminer la quête Quetes[2].nb_objets.push(6) # Il faut 6 fois l'objet avec l'ID 27 pour terminer la quête Quetes[2].interrupteur = 42 # Quand l'interrupteur 42 sera activer, la quête sera marquée comme Terminée Quetes[2].recompenses.push([Objet, 1]) # 1ère récompense: 1 fois l'objet avec l'ID 1 (potion) Quetes[2].recompenses.push([Po, 350]) # 2ème récompense: 350 PO Quetes[2].recompenses.push([Exp, 50]) # 3ème récompense: 50 points d'Exp
Quetes.push(Quete.new) # On créer la deuxième quête Quetes[3].nom = "Takaya...ki?" # Nom de la quête Quetes[3].description.push("Trouvez Takayami, et lui parler. Il se") # On créer la première ligne de description Quetes[3].description.push("trouve en dehors du village, vers l'Est.") # On créer la deuxième ligne de description Quetes[3].objets.push(false) # Pas d'objets requis pour terminer la quête Quetes[3].interrupteur = 43 # Quand l'interrupteur 42 sera activer, la quête sera marquée comme Terminée Quetes[3].recompenses.push(false) # Pas de récompenses
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
if @quetes.size > 0 for x in 0...@quetes.size if $game_switches[@quetes[x].interrupteur] == true @tab.push(M_Quete::Quete_terminee) # Quête terminée else if $game_switches[@quetes[x-1].interrupteur] == true @tab.push(@quetes[x].nom) # Liste des noms de quêtes else if x == 0 @tab.push(@quetes[x].nom) else @tab.push(M_Quete::Quete_bloquee) # Liste des quêtes bloquées end # en of if x == 0 end # end of $game_switches[@quetes[x-1].interrupteur] == true end # end of if $game_switches[@quetes[x].interrupteur] == true end # end of for x in 0...@quetes.size else tab.push(M_Quete::Indisponible) @quetes = [ [M_Quete::Nom_Quete_indisponible, [M_Quete::Quete_indisponible], [], [], []] ] end # end of if @quetes.size > 0 end
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)
# Couleurs if $game_party.item_number($data_items[@quetes[@liste.index].objets[x]]) <= 0 @quete.contents.font.color = M_Quete::Objets_Non_Possede # Objet non possédé elsif $game_party.item_number($data_items[@quetes[@liste.index].objets[x]]) < @quetes[@liste.index].nb_objets[x] @quete.contents.font.color = M_Quete::Objets_Possede # Objet possédé elsif $game_party.item_number($data_items[@quetes[@liste.index].objets[x]]) >= @quetes[@liste.index].nb_objets[x] @quete.contents.font.color = M_Quete::Objets_Complets # Le nombre d'objet est suffisant end # end of if $game_party.item_number($data_items[@quetes[@liste.index].objets[x]]) <= 0
# Nom de l'objet, nombre d'objet possédé, et requis nom = $data_items[@quetes[@liste.index].objets[x]].name nb_objets_posseder = $game_party.item_number($data_items[@quetes[@liste.index].objets[x]]) nb_objets_requis = @quetes[@liste.index].nb_objets[x] texte = nom + " ( " + (nb_objets_posseder).to_s + " / " + nb_objets_requis.to_s + " )"
@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
Version 2 du script:
Voici la version finale! J'ai réussi à la faire étonnamment rapidement, je pensais galérer encore quelques jours, mais tout s'est finalement très bien passé!
Les nouveautés:
Plus de limite de place! Nous n'avions certes pas de limite pour le nombre de description, d'items etc... mais nous étions limité par l'écran! Maintenant cette époque est révolue! Quand vous accéder aux informations d'une quête, vous avez la possibilité de descendre un curseur pour voir la suite de la quête! Rien ne change dans la création d'une quête à ce niveau là.
Plus de type d'objets disponible pour les objets demandés Dans les anciennes versions, nous ne pouvions que demander des objets pour que la quête puisse être terminée. Mais si on voulait que le joueur ramène à un PNJ une armure? Eh bien on ne pouvais pas, mais maintenant cela est possible! Il n'y a qu'une seule chose qui change lorsqu'on créer une quête:
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
# Vocabulaire Quete_terminee = "Terminée" Quete_bloquee = "Bloquée" Quete_indisponible = "Aucune quête n'est disponible" Indisponible = "Indisponible" Nom_Quete_indisponible = "Aucune quête disponible" Recompenses = "Récompenses:" # Mot ou phrase avant les récompenses Points_exp = "points d'Exp" # Vous avez gagner X "points d'Exp" Argent = "Po" # Nom de l'argent
# 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
# Variables pour les récompenses Exp = 0 Po = 1 Objet = 2 Arme = 3 Armure = 4
# Autres Position_Menu = 5 # Indique la position du curseur lorsque vous retournez dans le menu
# On créer les quetes ici Quetes = []
Quetes.push(Quete.new) # On créer la première quête Quetes[0].nom = "iTi Maison?" # Nom de la quête Quetes[0].description.push("Trouvez la maison des quêtes. Elle se") # On créer la première ligne de description Quetes[0].description.push("trouve dans le village, et possède une") # On créer la deuxième ligne de description Quetes[0].description.push("insigne avec un livre. Elle vous attend!") # On créer la deuxième ligne de description Quetes[0].objets.push(false) # Aucuns objets n'est requis pour finir la quête Quetes[0].interrupteur = 40 # Quand l'interrupteur 40 sera activer, la quête sera marquée comme Terminée Quetes[0].recompenses.push(false) # Aucunes récompenses
Quetes.push(Quete.new) # On créer la deuxième quête Quetes[1].nom = "Nom de la Quête" # Nom de la quête #Ici, j'ai créer une boucle qui ajoute les commentaires à ma place, désoler j'avais la flème de le faire^^ for x in 1...9 Quetes[1].description.push("Ligne de description " + x.to_s) # On créer la première ligne de description end Quetes[1].objets.push([Objet,25]) Quetes[1].objets.push([Objet,15]) Quetes[1].objets.push([Objet,7]) Quetes[1].objets.push([Arme,17]) Quetes[1].objets.push([Armure,2]) Quetes[1].nb_objets.push(1) Quetes[1].nb_objets.push(5) Quetes[1].nb_objets.push(3) Quetes[1].nb_objets.push(1) Quetes[1].nb_objets.push(2) Quetes[1].interrupteur = 41 Quetes[1].recompenses.push([Objet, 15]) Quetes[1].recompenses.push([Objet, 5]) Quetes[1].recompenses.push([Arme, 7]) Quetes[1].recompenses.push([Arme, 9]) Quetes[1].recompenses.push([Arme, 13]) Quetes[1].recompenses.push([Armure, 17]) Quetes[1].recompenses.push([Exp, 25])
Quetes.push(Quete.new) # On créer la deuxième quête Quetes[2].nom = "La vie en poudre" # Nom de la quête Quetes[2].description.push("Sortez à l'Est du village et tuez des Slime") # On créer la première ligne de description Quetes[2].description.push("Mutan pour obtenir des Poudres de Vie") # On créer la deuxième ligne de description Quetes[2].objets.push([Objet,27]) # L'objet avec l'ID 27 est requis pour terminer la quête Quetes[2].nb_objets.push(6) # Il faut 6 fois l'objet avec l'ID 27 pour terminer la quête Quetes[2].interrupteur = 42 # Quand l'interrupteur 42 sera activer, la quête sera marquée comme Terminée Quetes[2].recompenses.push([Objet, 1]) # 1ère récompense: 1 fois l'objet avec l'ID 1 (potion) Quetes[2].recompenses.push([Po, 350]) # 2ème récompense: 350 PO Quetes[2].recompenses.push([Exp, 50]) # 3ème récompense: 50 points d'Exp
Quetes.push(Quete.new) # On créer la deuxième quête Quetes[3].nom = "Takaya...ki?" # Nom de la quête Quetes[3].description.push("Trouvez Takayami, et lui parler. Il se") # On créer la première ligne de description Quetes[3].description.push("trouve en dehors du village, vers l'Est.") # On créer la deuxième ligne de description Quetes[3].objets.push(false) # Pas d'objets requis pour terminer la quête Quetes[3].interrupteur = 43 # Quand l'interrupteur 42 sera activer, la quête sera marquée comme Terminée Quetes[3].recompenses.push(false) # Pas de récompenses
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
if @quetes.size > 0 for x in 0...@quetes.size if $game_switches[@quetes[x].interrupteur] == true @tab.push(M_Quete::Quete_terminee) # Quête terminée else if $game_switches[@quetes[x-1].interrupteur] == true @tab.push(@quetes[x].nom) # Liste des noms de quêtes else if x == 0 @tab.push(@quetes[x].nom) else @tab.push(M_Quete::Quete_bloquee) # Liste des quêtes bloquées end # en of if x == 0 end # end of $game_switches[@quetes[x-1].interrupteur] == true end # end of if $game_switches[@quetes[x].interrupteur] == true end # end of for x in 0...@quetes.size else tab.push(M_Quete::Indisponible) @quetes = [ [M_Quete::Nom_Quete_indisponible, [M_Quete::Quete_indisponible], [], [], []] ] end # end of if @quetes.size > 0 end
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 # Couleurs if $game_party.item_number($data_items[@quetes[@liste.index].objets[x][1]]) <= 0 @quete.contents.font.color = M_Quete::Objets_Non_Possede # Objet non possédé elsif $game_party.item_number($data_items[@quetes[@liste.index].objets[x][1]]) < @quetes[@liste.index].nb_objets[x] @quete.contents.font.color = M_Quete::Objets_Possede # Objet possédé elsif $game_party.item_number($data_items[@quetes[@liste.index].objets[x][1]]) >= @quetes[@liste.index].nb_objets[x] @quete.contents.font.color = M_Quete::Objets_Complets # Le nombre d'objet est suffisant end # end of if $game_party.item_number($data_items[@quetes[@liste.index].objets[x]]) <= 0
case @quetes[@liste.index].objets[x][0] when M_Quete::Objet # Image de l'objet icone = $data_items[@quetes[@liste.index].objets[x][1]].icon_index hauteur = @espace*@nb_lines @quete.draw_icon(icone, @marge, hauteur)
# Nom de l'objet, nombre d'objet possédé, et requis nom = $data_items[@quetes[@liste.index].objets[x][1]].name nb_objets_posseder = $game_party.item_number($data_items[@quetes[@liste.index].objets[x][1]]) nb_objets_requis = @quetes[@liste.index].nb_objets[x] texte = nom + " ( " + (nb_objets_posseder).to_s + " / " + nb_objets_requis.to_s + " )" @quete.contents.draw_text(32+@marge,hauteur, 394,@espace, texte , 0) when M_Quete::Arme # Image de l'objet icone = $data_weapons[@quetes[@liste.index].objets[x][1]].icon_index hauteur = @espace*@nb_lines @quete.draw_icon(icone, @marge, hauteur)
# Nom de l'objet, nombre d'objet possédé, et requis nom = $data_weapons[@quetes[@liste.index].objets[x][1]].name nb_objets_posseder = $game_party.item_number($data_weapons[@quetes[@liste.index].objets[x][1]]) nb_objets_requis = @quetes[@liste.index].nb_objets[x] texte = nom + " ( " + (nb_objets_posseder).to_s + " / " + nb_objets_requis.to_s + " )" @quete.contents.draw_text(32+@marge,hauteur, 394,@espace, texte , 0) when M_Quete::Armure # Image de l'objet icone = $data_armors[@quetes[@liste.index].objets[x][1]].icon_index hauteur = @espace*@nb_lines @quete.draw_icon(icone, @marge, hauteur)
# Nom de l'objet, nombre d'objet possédé, et requis nom = $data_armors[@quetes[@liste.index].objets[x][1]].name nb_objets_posseder = $game_party.item_number($data_armors[@quetes[@liste.index].objets[x][1]]) nb_objets_requis = @quetes[@liste.index].nb_objets[x] texte = nom + " ( " + (nb_objets_posseder).to_s + " / " + nb_objets_requis.to_s + " )" @quete.contents.draw_text(32+@marge,hauteur, 394,@espace, texte , 0) 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 terminee? if @tab[@liste.index] == M_Quete::Quete_terminee # Quête terminée @quete.contents.blt(4,4,@quete_terminee,@quete_terminee.rect) elsif @tab[@liste.index] == M_Quete::Quete_bloquee # Quête bloquée @quete.contents.blt(4,4,@quete_bloquee,@quete_bloquee.rect) else @nb_lines = 0 afficher_contenu end # end of if @tab[@liste.index] == M_Quete::Quete_terminee 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