AccueilAccueil  PortailPortail  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  



Le Deal du moment :
Réassort du coffret Pokémon 151 ...
Voir le deal

Partagez
 

 Plus de quatre choix

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Gothor
Chevalier Lv.17
Chevalier Lv.17
Gothor


Masculin Age : 31
Inscrit le : 27/04/2008
Messages : 1835

Plus de quatre choix Empty
MessageSujet: Plus de quatre choix   Plus de quatre choix Icon_minitimeMer 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 Smile

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
Revenir en haut Aller en bas
 

Plus de quatre choix

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

 Sujets similaires

-
» Quatre [Réservé]
» Poème - Ils étaient quatre
» Choix de la window
» Nombreux choix!
» Choix de Portables

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RPG Maker VX :: Entraide :: Scripts :: Requêtes :: Archives-
Créer un forum | ©phpBB | Forum gratuit d'entraide | Signaler un abus | Forum gratuit