RPG Fusion
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.



 
AccueilPortailRechercherDernières imagesS'enregistrerConnexion
-28%
Le deal à ne pas rater :
Brandt LVE127J – Lave-vaisselle encastrable 12 couverts – L60cm
279.99 € 390.99 €
Voir le deal

 

 Afficher plus de choix dans un message

Aller en bas 
AuteurMessage
Don Estebahn
Maître du Savoir
Maître du Savoir
Don Estebahn


Masculin
Nombre de messages : 2145
Age : 33
Jeux Préférés : Soul Reaver, Morrowind, Way of the Samurai
Date d'inscription : 18/02/2007

Afficher plus de choix dans un message Empty
MessageSujet: Afficher plus de choix dans un message   Afficher plus de choix dans un message EmptyLun 11 Mai 2009, 17:40

Auteur : Krazplay

Fonction : Afficher davantage de choix dans un message (jusqu'à douze, contre 4 par défaut).
Permet également d'étaler les choix un peu longuets sur plusieurs lignes.

Screen :

Afficher plus de choix dans un message Sanstitre5oxx


Installation :

Le script est en deux parties.

Ouvrez l'éditeur de script ( F11 ), Créez un nouveau script au dessus de "Main" et nommez le " Scene_Choix " et collez le script.

Code:
#=======================================================================
# ■ Scene permettant d'effectuer un choix entre plusieurs réponses possible.
# ■ Scene_choix + Window_choix v1.0 par Krazplay
#=======================================================================
# Ecrit par Krazplay, version la plus à jour disponible sur le forum du site rpgmakerxp.free.fr
# Nécessite : le scrîpt Scene_choix fesant office de base de donnée.
#--------------------------------------------------------------
# Descrïption :
# 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.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 scrïpts.
      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
      $game_system.map_interpreter.resu_choix(@wind.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

Ouvrez l'éditeur de script ( F11 ), Créez un nouveau script au dessus de "Main" et nommez le " Database_Choix " et collez le script.

Code:
#=======================================================================
# ■ Base de donnée des réponses possible.
# ■ Scene_choix (base de donnée) v1.0 par Krazplay
#=======================================================================
# Ecrit par Krazplay, version la plus à jour disponible sur le forum du site rpgmakerxp.free.fr
# Nécessite : le scrîpt Scene_choix + Window_choix
#--------------------------------------------------------------
# Descrïption 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"
      c2 = "Au revoir"
   
    end
    @choix = [c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12]
  end
 
end

Utilisation :

Le fonctionnement du script est particulièrement bien expliqué au début du code (référez-vous à tout ce qui suit les #) - j'ai quand même eu la faiblesse de monter rapidement un petit mode d'emploi en images (c'est trop succinct pour dispenser de la lecture du manuel, mais ça aidera peut-être ceux qui se sentiraient un peu perdu dans le maniement de tout ça).
Attention ! Vous êtes autorisés à penser qu'il s'agissait d'un excès de zèle tout à fait stupide.

Spoiler:
Revenir en haut Aller en bas
 
Afficher plus de choix dans un message
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» adapater le script plus de choix avec advanced message
» Afficher la progression du jeu en % dans le menu
» Dans un script, afficher la valeur d'une variable
» Image dans un message (xp)

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RPG Fusion :: BANQUE DU CODE :: Antre des Scripts :: Divers-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser