Age : 30 Inscrit le : 22/12/2011 Messages : 1600
| Sujet: [VX Ace] Lune message system. Mer 26 Sep 2012 - 12:28 | |
| Lune Message System Crédit: Raizen Ce script permet d'avoir une boite de dialogue "plus légère" et plus pratique: -La boite de dialogue s'adapte en fonction de la longueur et la largeur de votre message. -Possibilité d'avoir votre windowskin comme cadre pour les faceset. -On peut switché entre les dialogues customisé et ceux de base. -Afficher une flèche pour savoir qui parle (héros ou pnj). Screenshots:- Spoiler:
Instructions:Tout d'abord, placez le script le script au-dessus de main. Pour appeler la nouvelle boite de dialogue, il faut insérer cette ligne de code avant le message: - Code:
-
Lune_Message.config(p, id) "p" est le type de dialogue qui se défini par 3 chiffre: 0= En-dessous du personnage. 1= Au-dessus du personnage. 2= La boite de dialogue de base. (qui désactive aussi le script.) "id" est l'ID de l'event. 0 est l'ID du héros. Exemple: Pour avoir ce dialogue: Il faut faire comme cela: Vous pouvez aussi utiliser une image qui peut vous servir de flèche( à placer dans le dossier Graphics/System de votre projet) comme ceci: Si vous ne voulez pas utiliser de flèche, allez à la ligne 57 et changer le nom de votre image par ceci: - Code:
-
Imagem = "" Script: - Code:
-
module Lune_Message #======================================================= # Lune Message System # Author: Raizen # Compatible with: RMVXAce # The script allows message boxes above and below the # character, with automatic size making a more interatvice # message system between characters.
# Instructions
# To use the message just call the show message # either with a face or not.
# before showing the message configure the character that # will receive the message box. # Also configure if it is below or above the character.
# It is also possible to toggle between the new message system # and the old message system
# To configure the message system just do the following.
# Call Script:Lune_Message.config(p, id)
# Being p the position of the message box. # 1 = above the character # 0 = below the character # 2 = old message system
# To deactivate this script just # Call Script this way # Call Script:Lune_Message.config(2, 0) # Put a 1 frame wait before changing between the message systems, # to give the system the time to reconfigure all the positions back to # the old system, or from the old to the new system.
# ID is the event ID, being the ID 0 it is the Hero. # The windows size is configured automatically, being that you # will need to choose the length of the font to ajust better to the # message box. (In pixels)
Espacamento = 11
# Size of the characters that you are using, an estimate to calculate # the Boxes position.
Tamanho = 48
# Name of the picture file that will put a cursor above the character # which is talking. # In case you do not need any picture files put the constant this way. # Imagem = "" # The image needs to be in the file Graphics/System inside your project. Imagem = "arrow" # ======================================================================== # Here starts the script. # ========================================================================
def self.config(p, id) posicao(p) identificacao(id) end
def self.posicao(p = nil) @p = p unless p == nil return @p end
def self.identificacao(id = nil) @id = id unless id == nil return @id end end
#============================================================================== # ** Janela auxiliar #============================================================================== class Lune_Window_Message < Window_Base include Lune_Message def initialize(x, y, window_width, window_height) super(x, y, window_width, window_height) self.z = 199 self.openness = 0 @get_sprite = true @sprite_arrow = Sprite.new @sprite_arrow.bitmap = Cache.system(Imagem) if Lune_Message.identificacao == 0 @lune_x = $game_player.screen_x @lune_y = $game_player.screen_y else @lune_x = $game_map.events[Lune_Message.identificacao].screen_x @lune_y = $game_map.events[Lune_Message.identificacao].screen_y end @sprite_arrow.x = @lune_x - 8 @sprite_arrow.y = @lune_y - Lune_Message::Tamanho end def refresh if @get_sprite == true @sprite_arrow.y += 4 @get_sprite = false else @sprite_arrow.y -= 4 @get_sprite = true end end def openlune self.openness += 40 self.openness <= 254 ? (return false) : (return true) end def closelune @sprite_arrow.opacity = 0 unless Imagem.nil? self.openness -= 40 self.openness >= 1 ? (return false) : (return true) end def dispose @sprite_arrow.dispose super end end
class Game_Message # Retorna o valor da quantidade de linhas def get_lune_lines @lune_text_size = 0 @texts.inject("") {|r, text| @lune_text_size += 1} return @lune_text_size end # Retorna o valor do tamanho do texto. def get_lune_length @lune_length_size = 0 @texts.inject("") {|r, text| @lune_length_size = text.size if text.size > @lune_length_size} return @lune_length_size end end
#============================================================================== # ** Window_Message #------------------------------------------------------------------------------ # Esta janela de mensagem é usada para exibir textos. #============================================================================== #-------------------------------------------------------------------------- # * Aquisição da largura da janela #-------------------------------------------------------------------------- class Window_Message < Window_Base # aliasing alias lune_message_update update alias lune_process_all_text process_all_text alias lune_message_dispose dispose def initialize super(0, 0, Graphics.width, fitting_height(4)) self.z = 200 self.openness = 0 create_all_windows create_back_bitmap create_back_sprite clear_instance_variables
end def window_width $game_message.get_lune_length * Lune_Message::Espacamento + 15 end #-------------------------------------------------------------------------- # * Aquisição da altura da janela #-------------------------------------------------------------------------- def window_height fitting_height($game_message.get_lune_lines) end def update(*args) lune_message_update(*args) unless Lune_Message.posicao == 2 @lune_message.refresh if @lune_message and Graphics.frame_count % 25 == 1 self.opacity = 0 end end def fiber_main $game_message.visible = true update_background lune_update_placement if Lune_Message.posicao == 2 loop do if Lune_Message.posicao == 2 lune_process_all_text if $game_message.has_text? else process_all_text if $game_message.has_text? end process_input $game_message.clear @gold_window.close Fiber.yield break unless text_continue? end @lune_message.opacity = 0 unless @lune_message == nil and Lune_Message.posicao == 2 close_and_wait $game_message.visible = false @fiber = nil end def lune_update_placement @position = $game_message.position self.y = @position * (Graphics.height - height) / 2 self.x = 0 @gold_window.y = y > 0 ? 0 : Graphics.height - @gold_window.height end def update_placement @gold_window.y = y > 0 ? 0 : Graphics.height - @gold_window.height unless Lune_Message.identificacao.nil? self.x = @lune_x - window_width / 2 self.x -= (self.x + window_width - Graphics.width) if self.x + window_width >= Graphics.width self.x -= new_line_x self.x = [self.x,0].max self.y = @lune_y self.y -= window_height + Lune_Message::Tamanho if Lune_Message.posicao == 1 self.y = [self.y,0].max self.y -= (self.y + window_height - Graphics.height) if self.y + window_height >= Graphics.height end end #-------------------------------------------------------------------------- # * Execução de todos texto #-------------------------------------------------------------------------- def process_all_text if Lune_Message.identificacao == 0 @lune_x = $game_player.screen_x @lune_y = $game_player.screen_y else @lune_x = $game_map.events[Lune_Message.identificacao].screen_x @lune_y = $game_map.events[Lune_Message.identificacao].screen_y end @lune_message.dispose unless @lune_message.nil? w = @lune_x - window_width / 2 h = @lune_y $game_message.face_name.empty? ? (w = [w,0].max) : (w = [w,112].max) h -= window_height + Lune_Message::Tamanho if Lune_Message.posicao == 1 h = [h,0].max w -= (w + window_width - Graphics.width) if w + window_width >= Graphics.width h -= (h + window_height - Graphics.height) if h + window_height >= Graphics.height @lune_message = Lune_Window_Message.new(w, h, window_width, window_height) @lune_face = Window_Base.new(w - 104, h + 8, 104, 104) unless $game_message.face_name.empty? update_placement text = convert_escape_characters($game_message.all_text) pos = {} new_page(text, pos) open_and_wait process_character(text.slice!(0, 1), text, pos) until text.empty? end #-------------------------------------------------------------------------- # * Abertura da janela e espeta até abertura total #-------------------------------------------------------------------------- def open_and_wait unless Lune_Message.posicao == 2 @lune_message.openlune Fiber.yield until @lune_message.openlune open else open Fiber.yield until open? end end #-------------------------------------------------------------------------- # * Fechamento da janela e espeta até fechamento total #-------------------------------------------------------------------------- def close_and_wait close Fiber.yield until all_close? @lune_message.closelune if @lune_message Fiber.yield until @lune_message.closelune unless Lune_Message.posicao == 2 end #-------------------------------------------------------------------------- # * Execução de espera de entrada #-------------------------------------------------------------------------- def input_pause self.pause = true if Lune_Message.posicao == 2 wait(10) Fiber.yield until Input.trigger?(:B) || Input.trigger?(:C) Input.update @lune_face.dispose unless @lune_face.nil? self.pause = false end def dispose @lune_message.dispose if @lune_message Lune_Message.config(2,0) lune_message_dispose end end Il y a des instruction plus précise que les miennes dans le script.^^ Voilà. Sympathique ! +3 points de participation ! Bonne continuation !
Dernière édition par RitoJS le Mer 26 Sep 2012 - 15:47, édité 1 fois |
|
Noble Lv.8
Age : 28 Inscrit le : 19/02/2010 Messages : 290
| Sujet: Re: [VX Ace] Lune message system. Mer 26 Sep 2012 - 12:56 | |
| Super script ! Il me sera utile ! |
|
Croisé Lv.14
Age : 26 Inscrit le : 22/05/2011 Messages : 1141
| Sujet: Re: [VX Ace] Lune message system. Mer 26 Sep 2012 - 13:46 | |
| |
|
Noble Lv.8
Age : 28 Inscrit le : 19/02/2010 Messages : 290
| Sujet: Re: [VX Ace] Lune message system. Mer 26 Sep 2012 - 15:09 | |
| J'ai juste remarquer. Tu as mis que pour mettre une autre image, il fallait mettre son nom à la ligne 63. Or pour c'était à la ligne 57, est ce que c'est moi qui me suis trompé ou alors tu as fais une erreur de frappe |
|
Croisé Lv.14
Age : 26 Inscrit le : 22/05/2011 Messages : 1141
| Sujet: Re: [VX Ace] Lune message system. Mer 26 Sep 2012 - 15:19 | |
| Exacte, c'est bien la linge 57 qu'il faut changer |
|
Age : 30 Inscrit le : 22/12/2011 Messages : 1600
| Sujet: Re: [VX Ace] Lune message system. Mer 26 Sep 2012 - 15:46 | |
| Ah désolé. J'ai choppé le script en portugais, c'est peut-être à cause de ça. J'édite. |
|
| Sujet: Re: [VX Ace] Lune message system. | |
| |
|