Pokémon Script Project Forum Index

Manuel | Search
 Information des admins 
Si vous désirez parler de PSP ou obtenir du soutient là dessus, merci d'aller faire un tour sur https://pokemonworkshop.com/forum/index.php Imbécile heureux

Messages à la pokémon
Goto page: 1, 2, 3  >
 
Post new topic   Reply to topic    Pokémon Script Project Forum Index -> Game Making -> Ressources techniques -> Scripts
Previous topic :: Next topic   
Author Message
Sphinx
Scribe
Scribe


Joined: 07 Jan 2008
Posts: 9,736
Localisation: Quelque part, dans le monde... Ou peut être sur une autre planète...
ID Steam: FaQuinator

PostPosted: Thu 16 Apr - 20:09 (2009)    Post subject: Messages à la pokémon

Messages à la pokémon

Introduction
Installation
Utilisation
Le mot de la fin
Le mot du renouveau

    I) Introduction

Dans Pokémon, les messages défilent ligne par ligne, tandis que dans RMXP, les messages défilent messages par messages. Dans les précédentes versions de 4G+, j'avais intégré une méthode pour afficher le texte (avec gestion automatique des retours à la ligne, ce qui permettait plus de réalisme dans le message)

Mais afficher_texte (que j'avais également présenté à part, sur le board) avait une limite : le texte en trop n'était pas affiché, et le maker obtenait un message signalant que du texte avait été supprimé. Aujourd'hui, j'ai été un peu plus loin : j'ai recréé une nouvelle fenêtre de messages, associé à une commande d'évent pour l'utiliser simplement.

A partir de la commande afficher_texte, la commande afficher_message (associée à la classe Afficher_Message) permet désormais un défilement ligne par ligne si le message dépasse 3 lignes de haut ! En outre, vous pourrez désormais

Cette nouvelle fonctionnalité, dores et déjà incluse dans 4G+C3, je vous la propose ce soir.


    II) Installation

Pour une fois, l'installation sera on ne peut plus simple...

Ajoutez un nouveau script, et appelez le Afficher_Message. Dedans, collez simplement ce qui suit :
Code:
module POKEMON_S
  class Afficher_Message
    def initialize(tab_texte, align = 0, color = Color.new(60, 60, 60), ombre = 0, choix = [])
      @tab_texte = tab_texte
      @index = 0
      @align = align
      @color = color
      @ombre = ombre
      @choix = choix
    end
   
    def main
      Graphics.freeze
      @dummy = Sprite.new
      @dummy.bitmap = RPG::Cache.picture(MSG)
      @dummy.x = 0
      @dummy.y = 336
      @dummy.z = 9900
      @fleche = Sprite.new
      @fleche.bitmap = RPG::Cache.picture("fleche")
      @fleche.x = 314
      @fleche.y = 458
      @fleche.z = 10000
      @texte = Window_Base.new(0, 336, 640, 144)
      @texte.z = 10999
      @texte.opacity = 0
      @texte.contents = Bitmap.new(608, 112)
      @texte.contents.font.name = $fontface
      @texte.contents.font.size = $fontsize
      update
      Graphics.transition(40)
      i = 0
      loop do
        Graphics.update
        Input.update
        i+=1
        i -= 30 if i > 30
        if i <= 20
          @fleche.y = 458
        else
          @fleche.y = 459
        end
       
        if Input.trigger?(Input::C) or Input.trigger?(Input::B)
          if @index < (@tab_texte.size - 3)
            @index += 1
            $game_system.se_play($data_system.decision_se)
            update
          elsif @index >= (@tab_texte.size - 3) and @choix.length > 0
            $draw_choice = draw_choice(@choix)
            Graphics.freeze
            @dummy.dispose
            @fleche.dispose
            @texte.dispose
            Graphics.transition(10)
            return $draw_choice
          else
            break
          end
        end
      end
      Graphics.freeze
      @dummy.dispose
      @fleche.dispose
      @texte.dispose
      Graphics.transition(10)
      return true
    end
   
    def update
      Graphics.freeze
      @texte.contents.clear
      @texte.draw_text(29, 8, 570, 32, @tab_texte[@index].to_s, @align, @color, @ombre)
      @texte.draw_text(29, 40, 570, 32, @tab_texte[@index + 1].to_s, @align, @color, @ombre)
      @texte.draw_text(29, 72, 570, 32, @tab_texte[@index + 2].to_s, @align, @color, @ombre)
      Graphics.transition(1)
    end
   
    def draw_choice(args, index_cancel = -1)
      window = Window_Command.new(1, args, $fontsizebig)
      width = []
      for i in 0...args.size
        width.push(window.contents.text_size(args[i]).width)
      end
      width = width.max + 16
      window.dispose
      command = Window_Command.new((width * (1 + (args.length / 7)))+ 32, args, $fontsizebig, 1 + (args.length / 7))
      command.x = 605 - width
      command.y = 307 - (43 * args.size)
      command.z = 5000
      loop do
        Graphics.update
        Input.update
        command.update
        if Input.trigger?(Input::C) and command.index != index_cancel
          retour = command.index
          $game_system.se_play($data_system.decision_se)
          command.dispose
          command = nil
          return retour
        elsif Input.trigger?(Input::B) and index_cancel == -1
          $game_system.se_play($data_system.buzzer_se)
        elsif Input.trigger?(Input::B) or (Input.trigger?(Input::C) and command.index == index_cancel)
          $retour = index_cancel
          command.dispose
          command = nil
          wait_count = 2
          return $retour
        end
      end
    end
  end
end
 
class Interpreter
  def coupure_mots(mot)
    temp_bitmap2 = Bitmap.new(1, 1)
    temp_bitmap2.font.name = $fontface
    temp_bitmap2.font.size = $fontsize
    for c in 0...mot.size
      if temp_bitmap2.text_size(mot[0..c] + "-").width >= 560
        break
      end
    end
    temp_bitmap2.clear
    return [mot[0...c] + "-","-" + mot[c...mot.size]]
  end
   
  def afficher_message(text, choix = [], align = 0, color = Color.new(60, 60, 60), ombre = 0)
    return if text.type != String or text == ""
    text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
    text.gsub!(/\\[Pp]\[([0-9]+)\]/) { $string[$1.to_i] }
    text.gsub!(/\\[Nn]\[([0-9]+)\]/) { ($game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : "") }
    temp_bitmap = Bitmap.new(1, 1)
    temp_bitmap.font.name = $fontface
    temp_bitmap.font.size = $fontsize
    if text.type != String
      text = text.to_s
    end
    if text == ""
      return false
    end
    text = text.split(' ')
    if temp_bitmap.text_size(text[0]).width <= 560
      texte = [text[0]]
      j = 0
    else
      mot = coupure_mots(text[0])
      texte = [mot[0],mot[1]]
      j = 1
    end
    for i in 1...text.size
      if temp_bitmap.text_size(text[i]).width > 560
        mot = coupure_mots(texte[j] + " " + text[i])
        texte[j] = mot[0]
        j += 1
        texte[j] = mot[1]
      elsif temp_bitmap.text_size(texte[j] + " " + text[i]).width > 560
        j += 1
        texte[j] = text[i]
      elsif text[i] == "rtn"
        j += 1
        texte[j] = ""
        next
      elsif texte[j].size == 0
        texte[j] += text[i]
      else
        texte[j] += " " + text[i]
      end
    end
    temp_bitmap.clear
    scene = Afficher_Message.new(texte, align, color, ombre, choix)
    return scene.main
  end
end

class Window_Base < Window
  def draw_text(x, y, w, h, string, align = 0, color = white,ombre = 3)
    self.contents.font.color = Color.new(96,96,96,175)
    self.contents.draw_text(x + ombre, y + ombre, w, h, string, align)
    self.contents.font.color = color
    self.contents.draw_text(x, y, w, h, string, align)
  end
end


Ensuite, reprenez cette image, nommez la "fleche.png" et mettez la dans le dossier Graphics/Pictures :



    III) Utilisation

Dans un évent, par insertion de script, il vous suffit de mettre ceci :
Code:
afficher_message(TEXTE, CHOIX, ALIGNEMENT, COULEUR, OMBRE)

où :
TEXTE est à remplacer par le texte à afficher (entre "")
CHOIX est à remplacer par la liste des choix disponibles proposés à la fin du message (Ces choix sont forcément du texte, donc à placer entre "", le tout placé entre [] et séparés par des ,).
ALIGNEMENT est à remplacer par 0 (aligné à gauche) 1 (aligné au centre) ou 2 (aligné à droite)
COULEUR est à remplacer par Color.new(ROUGE, VERT, BLEU) (ROUGE, VERT et BLEU sont trois valeurs comprises entre 0 et 255)
OMBRE est à remplacer par un nombre (c'est le décalage de l'ombre par rapport au texte d'origine)

Vous pouvez en outre afficher le nom du héros ou la valeur d'une variable. Il vous suffit de mettre :
\\n[x] : affiche le nom du héros x
\\p[x] : affiche le texte enregistré à la x° position dans $string (même signification que dans PSP0.7)
\\v[x] : affiche le contenu de la variable x
>> ici j'ai mis n, p et v en minuscule, mais vous pouvez le mettre en majuscule.

Enfin, vous pouvez utiliser la commande afficher_message dans une condition, notamment pour réagir en fonction d'un choix du joueur. afficher_message retourne désormais l'index du choix fait par le joueur (le 1° choix porte l'index 0).


    IV) Le mot de la fin

Le défilement se fait actuellement avec les touches ENTREE (ou ESPACE) ou ECHAP (ou X ou 0). Une éventuelle amélioration très simple à faire serait de permettre un défilement arrière (revenir au début du message) avec la touche ECHAP.
NB : la version 4G+C3 contiendra à l'origine cette commande.


    V) Le mot du renouveau

Mise à jour du script présenté au point II) Installation.
Désormais, l'affichage sera totalement identique à celui de la commande d'évent 'Afficher un message...' y compris la petite flèche animée en bas du message. L'image de fond du message est à régler dans la constante MSG (script Config Panel) et seule l'image de la flèche (voir script plus haut) devient nécessaire.
Le point III) Utilisation a également été mis à jour car il est possible d'afficher le nom d'un héros / la valeur d'une variable bien plus facilement.


Last edited by Sphinx on Sun 14 Aug - 16:27 (2011); edited 8 times in total
Back to top
Publicité






PostPosted: Thu 16 Apr - 20:09 (2009)    Post subject: Publicité

PublicitéSupprimer les publicités ?
Back to top
Manegator
Membre


Joined: 07 Sep 2008
Posts: 570
Localisation: Aveyron (en force)

PostPosted: Thu 16 Apr - 20:20 (2009)    Post subject: Messages à la pokémon

Super script shpinx ! Bouche extensiblek:
Simple, très pratique et efficace ! Comme j'aime <3
Bravo !!
Back to top
Sphinx
Scribe
Scribe


Joined: 07 Jan 2008
Posts: 9,736
Localisation: Quelque part, dans le monde... Ou peut être sur une autre planète...
ID Steam: FaQuinator

PostPosted: Thu 16 Apr - 21:32 (2009)    Post subject: Messages à la pokémon

Très gros oubli :
Image (je vous laisse choisir celle du style de votre jeu) à nommer "messagedummy_fleche.png" et à mettre dans le dossier Graphics/Pictures
>> L'image pour l'apparence RSE


>> L'image pour l'apparence DP


Si vous n'avez pas une image appelée "messagedummy_fleche.png", alors ca plantera quasi immédiatement, pour peu que votre message dépasse les 3 lignes ^o^"


edit : seconde correction :

Remplacez :
Code:
    @texte.draw_text(29, 8, 570, 32, @tab_texte[@index], @align, @color, @ombre)
    @texte.draw_text(29, 40, 570, 32, @tab_texte[@index + 1], @align, @color, @ombre)
    @texte.draw_text(29, 72, 570, 32, @tab_texte[@index + 2], @align, @color, @ombre)


par :
Code:
    @texte.draw_text(29, 8, 570, 32, @tab_texte[@index].to_s, @align, @color, @ombre)
    @texte.draw_text(29, 40, 570, 32, @tab_texte[@index + 1].to_s, @align, @color, @ombre)
    @texte.draw_text(29, 72, 570, 32, @tab_texte[@index + 2].to_s, @align, @color, @ombre)


PS : script du premier post maj Clin d'œil foireux
Back to top
Dark'
Membre


Joined: 16 Feb 2008
Posts: 1,528
Localisation: Bangkok

PostPosted: Fri 17 Apr - 05:58 (2009)    Post subject: Messages à la pokémon

Sphinx, y'aurait pas un moyen que ce système soit automatiquement avec la commande d'affichage d'un message d'event ?

Parce que bientôt, on utilisera plus les évents que pour insérer script...
Back to top
Sphinx
Scribe
Scribe


Joined: 07 Jan 2008
Posts: 9,736
Localisation: Quelque part, dans le monde... Ou peut être sur une autre planète...
ID Steam: FaQuinator

PostPosted: Fri 17 Apr - 09:10 (2009)    Post subject: Messages à la pokémon

^o^ y a tj moyen, mais la fenêtre de message n'est pas adaptée aux longues tirades Clin d'œil foireux

Dans le script Interpreter 2 (celui d'origine), tu as ca au début :
Code:
class Interpreter
  #--------------------------------------------------------------------------
  # ● イベントコマンドの実行
  #--------------------------------------------------------------------------
  def execute_command
    # 実行内容リストの最後に到達した場合
    if @index >= @list.size - 1
      # イベントの終了
      command_end
      # 継続
      return true
    end
    # イベントコマンドのパラメータを @parameters で参照可能に
    @parameters = @list[@index].parameters
    # コマンドコードで分岐
    case @list[@index].code
    when 101  # 文章の表示
      return command_101
    when 102  # 選択肢の表示
      return command_102
    when 402  # [**] の場合
      return command_402
    when 403  # キャンセルの場合
      return command_403
    when 103  # 数値入力の処理
      return command_103
    when 104  # 文章オプション変更
      return command_104


tu changes juste :
Code:
    when 101  # 文章の表示
      return command_101

par :
Code:
    when 101  # 文章の表示
      texte = @list[@index].parameters[0]
      line_count = 1
      for i in 1..4
        if @list[@index+1].code == 401 or @list[@index+1].code == 101
          texte += " " + @list[@index+1].parameters[0]
          line_count += 1
          @index += 1
        end
      end
      return afficher_message(texte)


NB : avec les retours à la ligne automatiques, le texte n'apparaitra pas tel qu'il est dans ton évent (pour forcer un retour à la ligne, tu mets simplement " rtn " entre deux mots ^o^)
En outre, les commandes habituelles (\V[...] and co) ne seront pas fonctionnelles
Back to top
Dark'
Membre


Joined: 16 Feb 2008
Posts: 1,528
Localisation: Bangkok

PostPosted: Fri 17 Apr - 10:31 (2009)    Post subject: Messages à la pokémon

Ok, merci Sphinx, toujours uassi précis !

Euh, c'est pas un peu génant si les commandes ne sont plus fonctionnelles ?

Et dans ta technique par insérer script, elles sont fonctionnelles ou pas ?
Back to top
Sphinx
Scribe
Scribe


Joined: 07 Jan 2008
Posts: 9,736
Localisation: Quelque part, dans le monde... Ou peut être sur une autre planète...
ID Steam: FaQuinator

PostPosted: Fri 17 Apr - 10:36 (2009)    Post subject: Messages à la pokémon

nop, la couleur n'est pas fonctionnelle, mais est-ce gênant, tout dépend de l'utilité que tu en avais Clin d'œil foireux

en revanche, l'affichage du contenu d'une variable est possible depuis Insérer un script... mais ne l'est pas dans Afficher un message...


faut juste intégrer $game_variables[No_VAR].to_s pour afficher le contenu d'une variable dans insérer un script Clin d'œil foireux

NB : tous les éléments de texte sont reliés entre eux par des + =)

Code:
"" + "" + $game_variables[No_VAR].to_s

(par exemple)
Back to top
Dark'
Membre


Joined: 16 Feb 2008
Posts: 1,528
Localisation: Bangkok

PostPosted: Fri 17 Apr - 11:18 (2009)    Post subject: Messages à la pokémon

L'utilisation que j'en avais, et que certainement d'autres avait, se réusme à :

- Afficher le nom du héros ou de personnages nommables
- Afficher le nombre de Pokémons Vus et Attrapés dans un message
- Afficher l'heure.

Ce qui correspond tout de meme à des choses importantes, surtout le premier. Il n'y a que le premier qui est quasi-obligatoire pour la gestion de mon jeu. Certainement chez d'autres aussi, c'est le but de pouvoir nommer son héros... Tu penses que c'est modifiables pour ajouter au moins cette fonction ? Genre, en restant français, j'ai pas envie de me pencher dans le Ruby la de suite, une condition du genre :
Code:
Si texte égal "[Nom_Heros_" + num + "]"
 pour num égal le numéro d'un héros
  texte = Game_Player[num].name
 end
end



?
Back to top
Sphinx
Scribe
Scribe


Joined: 07 Jan 2008
Posts: 9,736
Localisation: Quelque part, dans le monde... Ou peut être sur une autre planète...
ID Steam: FaQuinator

PostPosted: Fri 17 Apr - 19:19 (2009)    Post subject: Messages à la pokémon

xP c'est possible très facilement ac la version scriptée Clin d'œil foireux

Dans 0.7 & 4G+, Player.name renvoie le nom du joueur
Dans 4G+, $pokemon_party.trainer_fight renvoie le nombre de matchs que le dresseur a mené (au format numérique)
Dans 4G+, {POKEMON}.fight renvoie le nombre de matchs que le pokémon {POKEMON} a mené (au format numérique)
Dans 4G+, $game_variables[5000]["pokedex"]["vus"] et $game_variables[5000]["pokedex"]["captures"] retournent (au format numérique - mis à jour à chaque fois qu'on ouvre le pokédex et qu'on obtient un pokémon (que ce soit par capture ou par un évent))

Pour l'heure, tout dépend de comment elle est enregistrée Clin d'œil foireux Mais il suffit d'afficher :
Code:
HEURES.to_s + " : " + MINUTES.to_s + " : " + SECONDES.to_s

(où HEURES / MINUTES / SECONDES sont à remplacer par les variables correspondantes. Les variables par défaut de RMXP sont appelables par $game_variables[No_VAR] où No_VAR est le n° de votre variable)
dans la commande afficher_message, et pis ca marche aussi =)

Mais vous pouvez aussi afficher le nom d'un pokémon ({POKEMON}.name ou {POKEMON}.given_name qui affichera le nom ou le surnom de {POKEMON}) et plus encore, à partir de la commande scriptée !
Back to top
Dark'
Membre


Joined: 16 Feb 2008
Posts: 1,528
Localisation: Bangkok

PostPosted: Fri 17 Apr - 21:46 (2009)    Post subject: Messages à la pokémon

ah, ok ^^

Quand tu dis : "les commandes habituelles ne sont pas fonctionnelles", c'est pas en incluant aussi toutes commandes a effet similaire ?

Et dans ce cas, si je met :
Code:
afficher_message("votre nom est" + Player.name,ect,ect,ect)


Ça me donne par défaut dans PSP "votre nom est Dresseur", avec les paramètre ect?

Dans ce cas la c'est parfait ^^
Back to top
PiVa
Guest





PostPosted: Fri 17 Apr - 22:48 (2009)    Post subject: Messages à la pokémon

En fin de partie, avant dernière phrase non fini !

Pour le tuto sinon c'est parfait, merci Imbécile heureux
Back to top
Sphinx
Scribe
Scribe


Joined: 07 Jan 2008
Posts: 9,736
Localisation: Quelque part, dans le monde... Ou peut être sur une autre planète...
ID Steam: FaQuinator

PostPosted: Fri 17 Apr - 22:51 (2009)    Post subject: Messages à la pokémon

ouaip, dark' Clin d'œil foireux

>> pour ca que je suis passé par une commande scriptée =) je ne suis pas (encore) arrivé à reproduire les effets de couleurs Lordork chez mémé (en écrivant lettre par lettre, ca doit être faisable, je pense ^o^)
Back to top
Dark'
Membre


Joined: 16 Feb 2008
Posts: 1,528
Localisation: Bangkok

PostPosted: Sat 18 Apr - 06:17 (2009)    Post subject: Messages à la pokémon

les effets de couleur ? Ôô, jamais entendu parler ^^

C'est quoi ?
Back to top
Sphinx
Scribe
Scribe


Joined: 07 Jan 2008
Posts: 9,736
Localisation: Quelque part, dans le monde... Ou peut être sur une autre planète...
ID Steam: FaQuinator

PostPosted: Sat 18 Apr - 08:44 (2009)    Post subject: Messages à la pokémon

xP la couleur dans les messages, lol
Back to top
Dark'
Membre


Joined: 16 Feb 2008
Posts: 1,528
Localisation: Bangkok

PostPosted: Sat 18 Apr - 10:33 (2009)    Post subject: Messages à la pokémon

Et tu fais ça comment ? xP, j'ai encore des trucs à trouver dans les fonctions basiques ^^


bref, après avoir murement réfléchi, ta méthode me semble bien. Je vais surement la prendre.


Mais tu as fini par me connaitre, j'ai toujours plein de question, et c'est pas fini :


Je trouves ça lourd de devoir mettre à chaque fois couleur, position ect...
Ya pas un moyen pour avoir des paramètres "par défaut". Du genre, j'écris
Code:
afficher_message("TEXTE")
, et ça m'affiche TEXTE avec les paramètres par défaut ? 


Et qu'on pourrait rajouter les paramètres si on veut les changer. Comme pour ajouter_pokemon, ou on est pas obliger de préciser shiny=FALSE, puisque false c'est par défaut Clin d'œil foireux




Merci d'avance, si tu veux je peut chercher, mais les méthode, c'est quand même ton truc !


Si tu me dis que c'est déjà en place, c'est décidé, je me pends ^^
Back to top
Display posts from previous:   
Post new topic   Reply to topic    Pokémon Script Project Forum Index -> Game Making -> Ressources techniques -> Scripts All times are GMT + 1 Hour
Goto page: 1, 2, 3  >
Page 1 of 3

 
Jump to:  

Index | Free forum | Free support forum | Free forums directory | Report a violation | Cookies | Charte | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Thème par Thomas et l'équipe de la refonte PSP 2012 (version 1.0)