Night.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV/MZ

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Sorties: "Dread Mac Farlane", (...) / Tutos: Checklist de la composition (...) / Sorties: Dread Mac Farlane - episode 8 / Sorties: Dread Mac Farlane - episode 7 / Jeux: Ce qui vit Dessous / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

668 connectés actuellement

29444580 visiteurs
depuis l'ouverture

10463 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

RPG Maker - La Communauté

Planète Glutko

ConsoleFun

Le Temple de Valor

Tous nos partenaires

Devenir
partenaire



forums

Index du forum > Entraide > [RESOLU] [RMVXAce] Nombre de lignes variables dans les messages


Ephy - posté le 27/10/2022 à 10:04:31 (30085 messages postés) - honor

❤ 0

[BIG SHOT]

Domaine concerné: Script
Logiciel utilisé: RMVXAce
Yo!

J'essaye d'avoir un nombre variable de lignes dans les messages de base de VXAce, définis avec une variable ingame.

Dans le script Window Message

Spoiler (cliquez pour afficher)


ligne 50 j'ai remplacé le

Portion de code : Tout sélectionner

1
2
3
4
5
6
  #--------------------------------------------------------------------------
  # * Get Number of Lines to Show
  #--------------------------------------------------------------------------
  def visible_line_number
    return 4
  end

de base par

Portion de code : Tout sélectionner

1
2
3
4
5
6
  #--------------------------------------------------------------------------
  # * Get Number of Lines to Show
  #--------------------------------------------------------------------------
  def visible_line_number
    return $game_variables[8]
  end


Facile. Mais in game ça marche pas, normal, vu que cette valeur n'est jamais mise à jour.

Sauf que mettre cette valeur à jour dynamiquement, je trouve pas :doute2
:help



Power Level: 1 148 355,38|Mystic Slayer (Value!+)|Le monde d'Adélaïde|Reikon no Yume|★ H-Project|Toho Danmaku Arena|Loli versus Ponies|Mes vidéos|Ma galerie|Débuter sur VX:10, 11|Tuto: Importation de ressources|Mapper avec les RTP VX|Touhou|Fan de Omenides|Fan de Estheone|Eph'ille: 14


Roi of the Suisse - posté le 27/10/2022 à 10:08:55 (29831 messages postés) - honor -

❤ 0

Alerte neige !

Tu peux montrer Window_Base aussi ?

Peut-être qu'il y a encore des endroits où c'est écrit "4" en dur au lieu d'utiliser la fonction...

L'essentialisme c'est quand ta voiture a un moteur essence. | Es-tu une star ? | Kujira no Hara | Polaris 03 | Planète Glutko


Ephy - posté le 27/10/2022 à 10:26:29 (30085 messages postés) - honor

❤ 0

[BIG SHOT]

Winbow Base

Spoiler (cliquez pour afficher)


Mais c'est écrit 4 nulle part. Le $game_variables[8] fonctionne très bien vu que j'ai 0 lignes (valeur par défaut de la variable). Mais si je modifie cette variable, je reste à 0 lignes parce que le script n'actualise pas la valeur visible_line_number.
J'ai pas été très clair.



Power Level: 1 148 355,38|Mystic Slayer (Value!+)|Le monde d'Adélaïde|Reikon no Yume|★ H-Project|Toho Danmaku Arena|Loli versus Ponies|Mes vidéos|Ma galerie|Débuter sur VX:10, 11|Tuto: Importation de ressources|Mapper avec les RTP VX|Touhou|Fan de Omenides|Fan de Estheone|Eph'ille: 14


Roi of the Suisse - posté le 27/10/2022 à 10:56:51 (29831 messages postés) - honor -

❤ 0

Alerte neige !

Au moment où il y a

Portion de code : Tout sélectionner

1
Scene_Map.start 


on appelle

Portion de code : Tout sélectionner

1
create_message_window()


qui crée la fenêtre de message avec les dimensions du moment

Portion de code : Tout sélectionner

1
 @message_window = Window_Message.new



Donc je crois que la taille de la fenêtre est déterminée au moment où Scene_Map démarre.
Est-ce qu'en changeant la variable à 3, puis en te téléportant vers une autre map, la taille de la fenêtre est actualisée ? Mais je ne sais même pas si Scene_Map est vraiment démarrée à chaque map :doute5

Si tu veux une taille de fenêtre qui se réactualise à chaque frame (et non à chaque changement de map), par exemple pour une fenêtre fofolle qui gigotte comme un flan, il faudra travailler dans update et pas dans initialize...
Peut-être avec un

Portion de code : Tout sélectionner

1
self.height = window_height

dans le update de Window_Message ? Ou un truc du genre.

Si tu veux une taille de fenêtre qui se réactualise à chaque ouverture de message, bah il faudra travailler à l'ouverture du message...

L'essentialisme c'est quand ta voiture a un moteur essence. | Es-tu une star ? | Kujira no Hara | Polaris 03 | Planète Glutko


Mack - posté le 27/10/2022 à 11:01:51 (2290 messages postés) - staff

❤ 1

T'es sur que la Scene_Map se recharge quand tu changes de maps ?
J'ai un peu un doute.

J'suis pas chez moi, mais une idée qui pourrait marcher serait de rajouter une fonction pour reset la fenêtre de dialogue dans Scene_Map.
Un truc du genre :

Portion de code : Tout sélectionner

1
2
3
4
5
6
 
def reset_winMessage()
  @windowMessage = nil
  @windowMessage = WindowMessage.new()
  # Bref, reprendre le même code qu'à l'init
end


( C'est du pseudo code, copie colle pas ça ça marchera pas :F )

Et plutôt que de faire dans l'update, le plus logique serait de recalculer la taille de la fenêtre quand on ouvre le boite de dialogue, pas à sa création, et encore moins dans l'update.

Edit :
Voir même peut être mieux, recréer la fenêtre que si la taille change.

En gros, ça donnerais un truc comme ça :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Window_Message < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, window_width, window_height)
    self.z = 200
    self.openness = 0
        @line_height = $game_variables[8]
    create_all_windows
    create_back_bitmap
    create_back_sprite
    clear_instance_variables
  end
  #--------------------------------------------------------------------------
  # * Get Number of Lines to Show
  #--------------------------------------------------------------------------
  def visible_line_number
    return @line_height
  end
end



Et en supposant que t'es une méthode d'ouverture de la fenêtre de message dans le Scene_Map :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
class Scene_Map
 
  def openMessage
    if @line_height != @windowMessage. visible_line_number
                # Le code pour recréer la fenêtre
                @line_height = @windowMessage. visible_line_number
        end
        # Le code classique pour ouvrir la fenêtre. J'me souviens plus comment ça marche, mais un Alias ferait l'affaire je pense
  end
end



( Si dans Scene_Map t'as pas de méthode, faut trouver la fonction qui ouvre la fenêtre. Dans le pire des cas, tu l'auras dans Game_Interpreter )

( Je prend note de tout les commentaires, même si je n'y répond pas )


Roi of the Suisse - posté le 27/10/2022 à 11:20:09 (29831 messages postés) - honor -

❤ 0

Alerte neige !

Mack a dit:

T'es sur que la Scene_Map se recharge quand tu changes de maps ?
J'ai un peu un doute.

Oui non, j'y crois pas trop :doute5

Mack a dit:

Et en supposant que t'es une méthode d'ouverture de la fenêtre de message dans le Scene_Map :

( Si dans Scene_Map t'as pas de méthode, faut trouver la fonction qui ouvre la fenêtre. Dans le pire des cas, tu l'auras dans Game_Interpreter )

Oui, dans Game_Interpreter on a command_101(), ça pourrait le faire ici.

L'essentialisme c'est quand ta voiture a un moteur essence. | Es-tu une star ? | Kujira no Hara | Polaris 03 | Planète Glutko


Ephy - posté le 27/10/2022 à 14:11:55 (30085 messages postés) - honor

❤ 0

[BIG SHOT]

J'avoue que vous m'avez un peu perdu entre le pseudo code et la Scene Map :F

Dans l'idée, je veux pouvoir changer la taille à volonté d'un dialogue à l'autre simplement en changeant ma valeur de variable avant d'afficher mon texte. Donc un update juste avant l'ouverte de la boite de dialogue semble l'idéal.



Power Level: 1 148 355,38|Mystic Slayer (Value!+)|Le monde d'Adélaïde|Reikon no Yume|★ H-Project|Toho Danmaku Arena|Loli versus Ponies|Mes vidéos|Ma galerie|Débuter sur VX:10, 11|Tuto: Importation de ressources|Mapper avec les RTP VX|Touhou|Fan de Omenides|Fan de Estheone|Eph'ille: 14


Mack - posté le 27/10/2022 à 14:19:22 (2290 messages postés) - staff

❤ 0

Okay, bah je regarderais en rentrant ce soir ^^

( Je prend note de tout les commentaires, même si je n'y répond pas )


cortez - posté le 27/10/2022 à 17:43:24 (523 messages postés)

❤ 0

Ephy essaye ça (j'ai testé sa fonctionne sans souci.)

ça marche uniquement car j'utilise le menu débug (F9) (qui recharge bien scene_map.)
Je cherche une solution...

EDIT :
Je pourrait adapter ce script pour uniquement extraire ce que tu demande, mais autant utiliser le script complet :
https://yanflychannel.wordpress.com/rmvxa/core-scripts/ace-message-system/
Lien direct du script : https://pastebin.com/5iBEcjsb
Ce script est royalty-free même pour un projet qui serait commercialisé.


Ephy - posté le 27/10/2022 à 18:58:38 (30085 messages postés) - honor

❤ 0

[BIG SHOT]

Merci cortez pour avoir essayé. Je vais passer pour le script de Yanfly. J'utilise déjà un peu trop de scripts super complets et compliqués pour un tout petit truc basique et dispensable. Je préfère ne pas transformer le projet en usine à gaz où ça sera ingérable.



Power Level: 1 148 355,38|Mystic Slayer (Value!+)|Le monde d'Adélaïde|Reikon no Yume|★ H-Project|Toho Danmaku Arena|Loli versus Ponies|Mes vidéos|Ma galerie|Débuter sur VX:10, 11|Tuto: Importation de ressources|Mapper avec les RTP VX|Touhou|Fan de Omenides|Fan de Estheone|Eph'ille: 14


Mack - posté le 28/10/2022 à 08:27:22 (2290 messages postés) - staff

❤ 1

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#==============================================================================
# ** Window_Message
#------------------------------------------------------------------------------
#  This message window is used to display text.
#==============================================================================
class Window_Message < Window_Base
 
  #--------------------------------------------------------------------------
  # * Get Number of Lines to Show
  #--------------------------------------------------------------------------
  def visible_line_number
    return $game_variables[8]
  end
  
end
 
#==============================================================================
# ** Game_Interpreter
#------------------------------------------------------------------------------
#  An interpreter for executing event commands. This class is used within the
# Game_Map, Game_Troop, and Game_Event classes.
#==============================================================================
 
class Game_Interpreter
  alias command_101_a command_101
  #--------------------------------------------------------------------------
  # * Show Text
  #--------------------------------------------------------------------------
  def command_101
    if (SceneManager.scene_is?(Scene_Map) or SceneManager.scene_is?(Scene_Battle))
      SceneManager.scene.create_message_window()
    end
    command_101_a
  end
end



C'est pas ultra élégant comme méthode, puisque ça recréer une nouvelle fenêtre à chaque ouverture d'un message, mais au moins ça marche.


EDIT :
En vrai, j'suis surtout en train de me dire que ça peut peut être causé des problèmes de mémoires sur la durée, vu que je dispose jamais l'ancienne fenêtre de message, et que du coup selon comment gère RM, elle reste peut être en mémoire.

Pour régler ça, dans Scene_Map et Scene_Battle, dans la fonction create_message_window(), faudrait rajouter un truc comme ça :

Portion de code : Tout sélectionner

1
2
3
if @message != nil
  @message.dispose
end



J'me souviens plus du nom de la variable, mais en gros dans la méthode, t'as qu'une ligne qui ressemble à ça :

Portion de code : Tout sélectionner

1
@message = Window_Message.new()


Faut que la variable @message du petit morceau de code à rajouter soit la même que celle qui est déjà présente.

( Après je pense pas que ça soit trop grave, mais voila, c'est un peu crado :F )

( Je prend note de tout les commentaires, même si je n'y répond pas )


Ephy - posté le 28/10/2022 à 18:21:54 (30085 messages postés) - honor

❤ 0

[BIG SHOT]

J'ai essayé en rajoutant le bout de code dans create_message_window() (le nom de variable de base c'est @message_window

Portion de code : Tout sélectionner

1
2
3
4
5
6
  def create_message_window
    @message_window = Window_Message.new
    if @message_window != nil
      @message_window.dispose
    end
  end


mais ça fait planter Window Base
image

Et sans le petit bout de code ça marche pas non plus parce que s'il y a plus d'une boite de dialogue dans l'événement, seule la dernière s'efface :F

Je pensais pas que ce serait aussi compliqué de juste appliquer le nombre de lignes avant l'ouverture de la fenêtre. C'est rigide à ce point le code de base de RM?



Power Level: 1 148 355,38|Mystic Slayer (Value!+)|Le monde d'Adélaïde|Reikon no Yume|★ H-Project|Toho Danmaku Arena|Loli versus Ponies|Mes vidéos|Ma galerie|Débuter sur VX:10, 11|Tuto: Importation de ressources|Mapper avec les RTP VX|Touhou|Fan de Omenides|Fan de Estheone|Eph'ille: 14


Mack - posté le 28/10/2022 à 18:48:36 (2290 messages postés) - staff

❤ 0

Ah bah oui, c'est pas dans le bon sens :F

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
class Scene_Map < Scene_Base
    def create_message_window
    if @message_window != nil
      @message_window.dispose
    end
    @message_window = Window_Message.new
  end
end



Mais en gros, dans ton sens à toi, tu créais la boite, puis tu la fermes instant, donc forcément quand il veut y afficher du truc, ça plante :F
( Ma faute, j'ai pas précisé )

Dans le bon sens ça marche bien, même pour la fenêtre qui se ferme pas vraiment.

Citation:

Je pensais pas que ce serait aussi compliqué de juste appliquer le nombre de lignes avant l'ouverture de la fenêtre. C'est rigide à ce point le code de base de RM?


Disons que parfois y a des trucs qui sont bien fait, des fois beaucoup moins :F

( Je prend note de tout les commentaires, même si je n'y répond pas )


Ephy - posté le 28/10/2022 à 19:53:24 (30085 messages postés) - honor

❤ 0

[BIG SHOT]

Ah oui, maintenant ça marche. Par habitude, j'ajoute les trucs après. J'avais pas capté que c'était la fonction qui créait la boîte de dialogue donc forcément, c'est pas l'idéal.

Bon ça aura été beaucoup de soucis pour un si petit truc. C'est quand même triste qu'une fonction aussi basique que les dialogues soient codées de manière si peu pratique. Après, les développeurs ont certainement pas pensé qu'un gus aurait un jour envie de messages à lignes variables.



Power Level: 1 148 355,38|Mystic Slayer (Value!+)|Le monde d'Adélaïde|Reikon no Yume|★ H-Project|Toho Danmaku Arena|Loli versus Ponies|Mes vidéos|Ma galerie|Débuter sur VX:10, 11|Tuto: Importation de ressources|Mapper avec les RTP VX|Touhou|Fan de Omenides|Fan de Estheone|Eph'ille: 14


Gari - posté le 28/10/2022 à 20:47:21 (5899 messages postés) - honor

❤ 0

Il y a bien des gens qui ont scripté des systèmes de messages à lignes variables (Yanfly, Zeus ?), mais bon si tu veux que ça ça peut être la misère.

Juste pour copnfirmer à Mack que xp/rmvx/ace gardent tout en mémoire, ce qui peut faire crasher le jeu (je suppose que ça arrive quand on charge plus de ressources que celui décrit par RM, soit dans les 400 MO pour XP/VX ?). Ca ne le fait que si on reste sur la partie, quand on quitte et revient dessus ça reset le cache. Pour pallier il y a une ligne de code un peu violente du style Cache.clear qui permet de faire un peu le ménage de temps en temps.

Index du forum > Entraide > [RESOLU] [RMVXAce] Nombre de lignes variables dans les messages

repondre up

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers