RPG Creator : créez votre MMORPG ou RPG sans aucune connaissance en programmation


Disponible le 4 Juin !




- Jouez à votre jeu sur tablettes tactiles, Smartphones et navigateurs Web
- Personnalisez vos menus
- Dessinez facilement et rapidement vos cartes
- Créez des actions pour le combat A-RPG


www.rpgcreator.net


Heures au format UTC + 1 heure [ Heure d’été ]


Règles du forum


Consultez la liste des Scripts : cliquez ici



Publier un nouveau sujet Répondre au sujet  [ 7 messages ] 
Auteur Message
 Sujet du message: Message qui disparait au bout de X frames
MessagePublié: 07 Aoû 2008, 00:21 
Ancien membre du staff
Ancien membre du staff
Avatar de l’utilisateur

Inscrit le: 11 Aoû 2006, 00:00
Messages: 1428
Niveau RPG Maker: IT'S OVER 9000!!!
Logiciel(s) préféré(s): RMXP/VX
Point(s) Fort(s): Scripts
Sexe: Masculin
Points d'aide: 26/60

Créations :

Voir ses créations

[]Message qui dure X frames avant de disparaitre


- Description -
Vous en rêviez? Sihn l'a fait. Finis, les prises de tête lors de vos cinématiques!
Le message qui disparait automatiquement et reste synchro avec les actions de vos cinématiques est enfin arrivé!
Ce script permet d'afficher un message (via la commande "Afficher un message") qui disparait au bout d'un certain nombre de frames.
Il suffit d'inclure dans le message en question \t[nb_de_frames] et le tour est joué!

- script -
Code: Tout sélectionner
#===============================================================================
# ■ Message qui dure X frames
#===============================================================================
# Auteur : Sihn
# Version : 1.3
#-------------------------------------------------------------------------------
# Permet d'afficher un message qui s'efface automatiquement au bout d'un
# certain temps.
#===============================================================================
# Utilisation:
#
# Créé un nouveau message contenant \T[X]
# Remplacez X par un nombre de votre choix. Ce nombre sera la durée d'affichage
# du message en frames. (20 frames vaut environ 1 secondes)
# Bien entendu, les messages ne contenant pas cette commandes seront "normaux".
# Note: Durant un message temporaire, les commandes de l'événement affichant le
# message ne seront pas bloquées. (comme si vous utilisiez une commande "Jouée
# une animation", par exemple.)
# Cependant, vous pouvez faire en sorte que les commandes restent bloquées
# comme avant en remplaçant "false" ci-dessous par "true".
TIME_MESSAGE_STOP = false
#===============================================================================

class Game_Temp
  attr_accessor :time_showing
 
  alias time_showing_initialize initialize
  def initialize
    @time_showing = 0
    time_showing_initialize
  end
end

class Window_Message
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.font.name = $fontface
    self.contents.font.size = $fontsize
    x = y = 0
    @cursor_width = 0
    if $game_temp.choice_start == 0
      x = 8
    end
    if $game_temp.message_text != nil
      text = $game_temp.message_text
      begin
        last_text = text.clone
        text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
      end until text == last_text
      text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
      text.gsub!(/\\\\/) { "\000" }
      text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
      text.gsub!(/\\[Gg]/) { "\002" }
      text.gsub!(/\\[Tt]\[([0-9]+)\]/) { "\003[#{$1}]" }
      while ((c = text.slice!(/./m)) != nil)
        if c == "\000"
          c = "\\"
        end
        if c == "\001"
          text.sub!(/\[([0-9]+)\]/, "")
          color = $1.to_i
          if color >= 0 and color <= 7
            self.contents.font.color = text_color(color)
          end
          next
        end
        if c == "\002"
          if @gold_window == nil
            @gold_window = Window_Gold.new
            @gold_window.x = 560 - @gold_window.width
            if $game_temp.in_battle
              @gold_window.y = 192
            else
              @gold_window.y = self.y >= 128 ? 32 : 384
            end
            @gold_window.opacity = self.opacity
            @gold_window.back_opacity = self.back_opacity
          end
          next
        end
        if c == "\003"
          text.sub!(/\[([0-9]+)\]/, "")
          $game_temp.time_showing = $1.to_i * 2
          $game_temp.time_showing *= -1 if $game_temp.time_showing < 0
          next
        end
        if c == "\n"
          if y >= $game_temp.choice_start
            @cursor_width = [@cursor_width, x].max
          end
          y += 1
          x = 0
          if y >= $game_temp.choice_start
            x = 8
          end
          next
        end
        self.contents.draw_text(4 + x, 32 * y, 40, 32, c)
        x += self.contents.text_size(c).width

      end
    end
    if $game_temp.choice_max > 0
      @item_max = $game_temp.choice_max
      self.active = true
      self.index = 0
    end
    if $game_temp.num_input_variable_id > 0
      digits_max = $game_temp.num_input_digits_max
      number = $game_variables[$game_temp.num_input_variable_id]
      @input_number_window = Window_InputNumber.new(digits_max)
      @input_number_window.number = number
      @input_number_window.x = self.x + 8
      @input_number_window.y = self.y + $game_temp.num_input_start * 32
    end
  end
 
  def update
    super
    if @fade_in
      self.contents_opacity += 24
      if @input_number_window != nil
        @input_number_window.contents_opacity += 24
      end
      if self.contents_opacity == 255
        @fade_in = false
      end
      return
    end
    if @input_number_window != nil
      @input_number_window.update
      if Input.trigger?(Input::C)
        $game_system.se_play($data_system.decision_se)
        $game_variables[$game_temp.num_input_variable_id] =
          @input_number_window.number
        $game_map.need_refresh = true
        @input_number_window.dispose
        @input_number_window = nil
        terminate_message
      end
      return
    end
    if @contents_showing
      if $game_temp.choice_max == 0
        self.pause = $game_temp.time_showing == 0
      end
      if Input.trigger?(Input::B)
        if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
          $game_system.se_play($data_system.cancel_se)
          $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
          terminate_message
        end
      end
      if $game_temp.time_showing == 0 or $game_temp.choice_max > 0
        if Input.trigger?(Input::C)
          if $game_temp.choice_max > 0
            $game_system.se_play($data_system.decision_se)
            $game_temp.choice_proc.call(self.index)
          end
          terminate_message
        end
      else
        $game_temp.time_showing -= 1
        if $game_temp.time_showing == 0
          if $game_temp.choice_max > 0
            $game_system.se_play($data_system.decision_se)
            $game_temp.choice_proc.call(self.index)
          end
          terminate_message
        end
      end
      return
    end
    if @fade_out == false and $game_temp.message_text != nil
      @contents_showing = true
      $game_temp.message_window_showing = true
      reset_window
      refresh
      Graphics.frame_reset
      self.visible = true
      self.contents_opacity = 0
      if @input_number_window != nil
        @input_number_window.contents_opacity = 0
      end
      @fade_in = true
      return
    end
    if self.visible
      @fade_out = true
      self.opacity -= 48
      if self.opacity == 0
        self.visible = false
        @fade_out = false
        $game_temp.message_window_showing = false
      end
      return
    end
  end
end

class Interpreter
  alias message_waiting_update update
  def update
    if $game_temp.time_showing          != 0 and
      $game_temp.choice_cancel_type    == 0 and
      $game_temp.num_input_variable_id == 0 and
      not TIME_MESSAGE_STOP
      @message_waiting = false
    end
    message_waiting_update
  end
end


- Mode d'emploi -
Note: un résumé du mode d'emploi se trouve au début du script.
Tout d'abord, copier-coller ce script au dessus de Main, et nommez-le comme bon vous semble.
Ensuite, créé un message via la commande "Afficher un message", et dans ce message, incluez ceci: \t[nb_de_frames] en remplaçant nb_de_frames par le nombre de frames durant lesquelles le messages doit rester affichés.
Par exemple: "\t[40]Votre message" affichera "Votre message" durant 40 frames (soit 2 secondes environs).
Attention!
Lorsque vous faites un message temporaire, votre héros ne peut pas bouger (comme avec les messages normaux), mais l'événement, lui, continue son cours! (comme il le ferait avec une commande "Afficher une animation", par exemple)
Mais vous pouvez changer cela au début du script, à la ligne 21. Remplacez false par true.

Vous l'aurez remarqué, aucune commande "Insérer un script" n'est nécessaire.


Voila, j'espère que ce script vous sera utile! N'hésitez pas à m'avertir en cas de bug!

_________________
Image
- Scripteur à la retraite -


Haut
 Profil  
 
 Sujet du message: Re: Message qui disparait au bout de X frames
MessagePublié: 07 Aoû 2008, 09:34 
Ancien membre du staff
Ancien membre du staff

Inscrit le: 12 Aoû 2006, 00:00
Messages: 1060
Points d'aide: 60/60

Créations :

Voir ses créations

On peut le faire avec les scripts de message avancé, non?
Mais c'est vrai que c'est plus précis comme ça je trouve.


J'aurais quelque critique à faire quand même...

Erreur:
Tu utilises une Game_Variable, change ça, il y aura toujours un boulet pour l'utiliser dans 2 cas et faire bugger son jeu pour ensuite remettre la faute sur ton script...

Ma solution:
Tu rajoutes une fonction à la classe Interpreter qui initialise une variable qui contiendra le temps que tu remets à zéro quand le message disparait.

Erreur(?):
Faire que l'event continue durant le message est un risque que tout soit décalé, il faut pas oublier le "attendre X frames" et il y aura toujours quelqu'un pour le faire...

Ma solution:
Programme un auto-attendre X frames dans la fonction pour initialiser les messages quand ceux-ci sont gérer par frames.

Mon conseil:
Ce qui serait même mieux, c'est donner le choix a l'utilisateur s'il veut ou non un auto-attendre.

A part ces deux petites choses, c'est parfait ^^.


Haut
 Profil  
 
 Sujet du message: Re: Message qui disparait au bout de X frames
MessagePublié: 07 Aoû 2008, 15:05 
Ancien membre du staff
Ancien membre du staff
Avatar de l’utilisateur

Inscrit le: 11 Aoû 2006, 00:00
Messages: 1428
Niveau RPG Maker: IT'S OVER 9000!!!
Logiciel(s) préféré(s): RMXP/VX
Point(s) Fort(s): Scripts
Sexe: Masculin
Points d'aide: 26/60

Créations :

Voir ses créations

Déjà, merci pour ton avis!

Pour la première erreur, j'envisageais de remplacer la variable par une commande dans le message du genre ime[nb_de_frames] (comme pour afficher l'or, changer les couleurs...).
(Mais j'ai encore un peu de mal avec cette partie de code, c'est pour ça que je ne l'avais pas fait dès le début)

Pour la deuxième "erreur", c'est un choix que j'ai fait. Je trouve que c'est plus pratique comme ça pour les cinématiques. Sa permet de faire une action en plein milieu du message sans passer par deux event qui se déroule en même temps.
Cependant, je peux (et vais) mettre une constante au début du script qui permettra de choisir ce paramètre.
Note: pour ce deuxième point, vous pouvez effacer une partie du script, depuis la ligne 116 (class Interpreter) jusqu'à la fin. (Mais cette méthode est un peu barbare, et peu généré des bugs lors de message avec choix...)

Voila donc ce que je compte faire:
- rajouté un switch constant au début du script, C'est fait.
- remplacer la variable par une commande du type ime[durée] C'est fait.
- et donc, refaire une petite partie de la présentation... (j'éditerais le premier post, pas de nouveau topic) C'est fait.

EDIT: Nouvelle version disponible!

_________________
Image
- Scripteur à la retraite -


Haut
 Profil  
 
 Sujet du message: Re: Message qui disparait au bout de X frames
MessagePublié: 12 Aoû 2008, 13:37 
Noble (Nv 2)
Avatar de l’utilisateur

Inscrit le: 16 Juil 2007, 00:00
Messages: 327
Localisation: Ca dépend des jours
Niveau RPG Maker: moyen
Logiciel(s) préféré(s): Bloc Note
Point(s) Fort(s): Scénariste pro
Sexe: Masculin
Points d'aide: 1/60

Créations :

Voir ses créations

génial. On peut calibrer les passages super importants qu'on ne veut surtout pas que les joueurs passent en 2 secondes et nous disent après "euh ... je dois faire quoi maintenant ?" et soulager les joueurs de la corvée de devoir faire passer chaque cinématique en appuyant 15 fois sur le bouton pour faire défiler tous les messages.

_________________
Image

Mon premier roman, disponible sur http://gatoran.free.fr/download.html


Haut
 Profil  
 
 Sujet du message: Re: Message qui disparait au bout de X frames
MessagePublié: 12 Déc 2010, 16:03 
Villageois (Nv 1)

Inscrit le: 23 Oct 2006, 00:00
Messages: 10
Points d'aide: 0/60

Créations :

Voir ses créations

pas mal comme script ! Mais jai un problème chez moi a la ligne 62 il y a un syntaxe error je ne comprend pas pourquoi , j'ai pourtant essayé sur un jeu vierge pour voir si c'était à cause d'une incompatibilité mais ca me le met a chaques jeu nouveau ou pas :?


Haut
 Profil  
 
 Sujet du message: Re: Message qui disparait au bout de X frames
MessagePublié: 12 Déc 2010, 17:09 
Garde
Garde
Avatar de l’utilisateur

Inscrit le: 12 Avr 2009, 00:00
Messages: 373
Logiciel(s) préféré(s): RMXP
Point(s) Fort(s): Ruby
Sexe: Masculin
Points d'aide: Illimité

Créations :

Voir ses créations

Effectivement, le script bug.

Enfaîte, tous les \t, les \n et autres commençant par "\" on été remplacé par des symboles, des saut de ligne ou des tabulations.
Et ceci dans tous le message de Sihn (première fois que je remarque ce style de bug).

J'ai corrigé le script et les explications dans le 1er message, j'ai aussi ajouté l'icone XP.

Reprend le script et re-lis les explications, et tu devrait pouvoir l'utiliser sans bug.


Haut
 Profil  
 
 Sujet du message: Re: Message qui disparait au bout de X frames
MessagePublié: 12 Déc 2010, 19:11 
Villageois (Nv 1)

Inscrit le: 23 Oct 2006, 00:00
Messages: 10
Points d'aide: 0/60

Créations :

Voir ses créations

super ! =) merci beaucoup ca marche


Haut
 Profil  
 
Afficher les messages depuis:  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 7 messages ] 

Heures au format UTC + 1 heure [ Heure d’été ]


Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 2 invités


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Rechercher pour:
Sauter vers:  
cron
RPG Creative Forum version 5 ; Tous droits réservés
phpBB Group (Traduit par Xaphos)
Optimisé pour une résolution 1024*728