Chevalier Lv.17
Age : 31 Inscrit le : 27/04/2008 Messages : 1835
| Sujet: Plus de quatre choix Mer 1 Juil 2009 - 8:41 | |
| Bonjour, Voilà, j'ai un script de Krazplay développé pour RPG Maker XP qui permettait d'afficher jusqu'à 12 choix au lieu de 4 uniquement, j'aimerais savoir s'il était possible de le convertir sur RPG Maker VX car il me serait bien utile. Voilà, merci d'avance et bon courage à celui qui essaiera Premier script: - Code:
-
#======================================================================= # ■ Scene permettant d'effectuer un choix entre plusieurs réponses possible. # ■ Scene_choix + Window_choix v1.2 par Krazplay #======================================================================= # Ecrit par Krazplay # Nécessite : le scrîpt Scene_choix fesant office de base de donnée. #-------------------------------------------------------------- # Description : # La commande "Effectuer un choix" dans l'éditeur d'évènements ne permet de choisir qu'entre # 4 possibilitées différentes, et de plus chacun de ses choix doivent respecter une limite de # caractères, ce scrîpt propose une alternative à cette commande, il permet de faire jusqu'à # 12 choix différents, et de proposer un choix tenant sur plus d'une ligne. #-------------------------------------------------------------- # Caractéristiques : # - Jusqu'à 12 choix possibles. # - L'ensemble de tout les choix ne doivent pas dépasser 14 lignes. # - La hauteur de la fenêtre dépend du nombre de lignes utilisées, la fenêtre est # automatiquement centrée. # - Le retour à la ligne si le choix est trop long est fait automatiquement #-------------------------------------------------------------- # Utilisation : # Simple, dans votre évènement, insérer la ligne de scrîpt suivante : # $scene = Scene_choix.new(sav) # Suivi imédiatement d'un "Afficher un message" avec rien dedans, ce message ne s'affichera # pas, il sera "mangé" par le scrîpt, si vous ne le faites pas, il n'est pas certain que le prochain # message s'affiche. # La variable sav correspond au choix qui seront affichés, pour cela regarder à quoi cela # correspond dans le scrîpt de base de donnée, le nombre sav ne doit jamais être égal à 0 # si vous souhaitez tirer les choix de votre scrîpt de base de donnée. # # Pour les résultats, c'est simple, il suffit de mettre une condition, choisir scrîpt, puis mettre : # @resu == (chiffre allant de 1 à 12) # Le chiffre étant le choix selectionné par le joueur (s'il sélectionne le premier choix, @resu est # égal à 1. #-------------------------------------------------------------- # Supplément : # Néanmoins vous n'êtes pas obligé d'utiliser le scrîpt de base de donnée, dans ce cas-là, # utiliser cette ligne : # $scene = Scene_choix.new(0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12) # Sachant que c1 à c12 sont les choix, et qu'ils ne sont pas tous obligatoires, exemple : # c1 = "Je vais bien" # c2 = "Je vais mal" # c3 = "Je ne te dirai rien" # Scene_choix.new(0, c1, c2, c3) # Cela marchera parfaitement, le problème est que dans la commande "Insérez un scrîpt" # de l'éditeur de l'évènement, lorsque vous arrivez en bout de ligne vous êtes renvoyés à la # ligne, ce qui risque de donner une erreur, pour pouvoir mettre un long choix il faut alors faire : # c1part1 = "Moi je vais très bien merci, mais je me demandais" # c1part2 = " si toi tu allais bien car la pizza que je t'ai donné hier" # c1part3 = " était périmé depuis trois mois." # c1 = c1part1 + c1part2 + c1part3 # Ce qui est extrêmement pénible. #-------------------------------------------------------------- # Supplément 2 : # Si vous prenez les choix de votre base de donnée, vous pouvez tout de même en ajouter # manuellement dans l'éditeur d'évènement. Imaginons que dans votre base de donnée # le nombre 1 correspond à 4 choix, en écrivant cela : # c5 = "Exemple d'un choix ajouté manuellement" # $scene = Scene_choix.new(1,nil,nil,nil,nil,c5) # Vous ajoutez un 5ème choix, que vous pouvez par exemple ne faire apparaitre que sous # certaines conditions. #======================================================================= class Scene_choix
# c1,c2,c3 etc = choix entrés par l'utilisateur lorsqu'il a appellé cette scène. def initialize(sav,c1=nil,c2=nil,c3=nil,c4=nil,c5=nil,c6=nil,c7=nil,c8=nil,c9=nil,c10=nil,c11=nil,c12=nil) if sav > 0 # Si sav est à zéro, cela veut dire qu'on ne consulte pas la database, voir_ds_data(sav) # sinon on tire les choix de la database. choix_sup = [c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12] # On garde qd même les choix entrés par l'utilisateur. for i in 0...12 if @choix[i] == nil and choix_sup[i] != nil # Si dans la database un choix est nul alors qu'il existe dans les entrés de l'utilisateur, @choix[i] = choix_sup[i] # Ce choix nul devient celui entré. end end else @choix = [c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12] # On fait un tableau contenant tout les choix. end @ligne = [] @choix_avec_nils = @choix.clone # v1.1 @choix.compact! # On élimine tout les choix nuls for i in 0...@choix.size @ligne[i] = 1 # On considère pour le moment que tt les choix s'écrivent sur une ligne. end vérif_long # Cette méthode va gérer le nombre de lignes qu'à besoin chacun des choix. end def main @wind = Window_choix.new(@choix, @ligne) # On crée la fenêtre loop do # La boucle standarte commune à quasiment tout les scripts. Graphics.update Input.update update if $scene != self break end end Graphics.freeze @wind.dispose # Si la boucle s'est brisée on efface la fenêtre. end
def update @wind.update if Input.trigger?(Input::B) # En cas d'annulation (pas encore utilisé) end if Input.trigger?(Input::C) # En cas de confirmation choix_non_coupés_ss_nils = @choix_avec_nils.clone # v1.2 /* choix_non_coupés_ss_nils.compact! choix = choix_non_coupés_ss_nils[@wind.index] # */ v1.1 /* index = @choix_avec_nils.index(choix) # $game_system.map_interpreter.resu_choix(index+1) # */ $scene = Scene_Map.new end end def vérif_long @long_max = 55 for i in 0...@choix.size # Pour chacun des choix, si celui-ci possède un nombre if @choix[i].size > @long_max # de caractère supérieur à @long_max, on va le passer découp_en_lignes(@choix[i],i) # à la méthode qui va la couper en plusieurs lignes. end end end end
def découp_en_lignes(texte,num) # Cette méthode découpe un choix trop long en plusieurs @choix[num] = [] # morceaux, et stocke le nombre de lignes que le choix rep = 0 # possède dans la variable @ligne. loop do if texte.size > 55 and not texte.size < 65 for i in 56..64 if texte[i] == 32 #32 = code de l'espace break end end @ligne[num] += 1 @choix[num][rep] = texte[0...i] rep += 1 @choix[num][rep] = texte[(i+1)...texte.size] texte = @choix[num][rep] else break end end
end
class Scene_Map def main @spriteset = Spriteset_Map.new @message_window = Window_Message.new Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end if not $scene.is_a?(Scene_choix) # Evite d'effacer l'arrière-plan si la nouvelle scene Graphics.freeze # est une Scene_choix @spriteset.dispose end @message_window.dispose if $scene.is_a?(Scene_Title) Graphics.transition Graphics.freeze end end end
class Interpreter def resu_choix(choix) # Sert à mettre le résultat dans la variable @resu de la class Interpreter, @resu = choix # ce qui permet d'utiliser cette variable dans l'éditeur d'évènement. end end
class Window_choix < Window_Selectable
def initialize(choix, ligne) @choix = choix @ligne = ligne @width = 640 @height = 0 for i in 0...@ligne.size @height += @ligne[i] * 32 end @height += 32 @height = 480 if @height > 480 y = (480 - @height) / 2 super(0, y, @width, @height) @column_max = 1 @item_max = @choix.size self.opacity = 180 refresh self.index = 0 end
def refresh if self.contents != nil self.contents.dispose self.contents = nil end self.contents = Bitmap.new(@width - 32, @height-32) self.contents.font.name = $fontface self.contents.font.size = $fontsize u = -32 for i in 0...@choix.size for n in 0...@ligne[i] u += 32 if @ligne[i] >1 self.contents.draw_text(0, u, @width - 32, 32,@choix[i][n]) else self.contents.draw_text(0, u, @width - 32, 32,@choix[i]) end end end end
def update_cursor_rect if @index < 0 self.cursor_rect.empty return end row = @index / @column_max if row < self.top_row self.top_row = row end if row > self.top_row + (self.page_row_max - 1) self.top_row = row - (self.page_row_max - 1) end cursor_width = self.width / @column_max - 32 x = @index % @column_max * (cursor_width + 32) new_y = 0 for i in 0...@index new_y += @ligne[i] end y = new_y / @column_max * 32 - self.oy self.cursor_rect.set(x, y, cursor_width, 32*@ligne[@index]) end
end # Fin du scrîpt Second script: - Code:
-
#======================================================================= # ■ Base de donnée des réponses possible. # ■ Scene_choix (base de donnée) v1.2 par Krazplay #======================================================================= # Nécessite : le scrîpt Scene_choix + Window_choix #-------------------------------------------------------------- # Description et utilisation : # Ce scrîpt ne sert qu'à être une sorte de base de donnée. # Très simple à utiliser, il suffit de rajouter des "when nombre", puis de mettre ensuite la liste # des choix (ne pas aller plus haut que c12). # Le nombre après le When est le nombre qu'il faut mettre pour avoir automatiquement la liste # des choix qui suit après ce When, le nombre est utilisé lorsque vous appellez la scene : # $scene = Scene_choix.new(nombre) #======================================================================= class Scene_choix
def voir_ds_data(sav) [c1=nil,c2=nil,c3=nil,c4=nil,c5=nil,c6=nil,c7=nil,c8=nil,c9=nil,c10=nil,c11=nil,c12=nil] case sav when 1 c1 = "- Je pense qu'on devrait élever Krazplay au rang de Dieu et lui ériger des statues partout dans le monde." c2 = "- Je pense que Krazplay est la personne la plus sympa du monde, d'ailleur je lui signe tout de suite un chèque de 10000 euros et je l'envoi sans attendre." c3 = "- Je crois que Krazplay est vraiment en train de perdre la citrouille..." c4 = "- La citrouille, c'est bon, faudrait penser à inviter Krazplay à diner un soir =)" c5 = "- Je pense que Krazplay a une sacrée imagination pour mettre des phrases aussi stupide dans son screenshot." when 2 c1 = "Bonjour c1" c2 = "Au revoir c2" c3 = "Comment va ? c3" end @choix = [c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12] end
end |
|